From 89e60305e1c07ee1f51aeaacc12055aefdb70ce2 Mon Sep 17 00:00:00 2001 From: Kum1ta Date: Tue, 20 Aug 2024 17:37:06 +0200 Subject: [PATCH] Game - Updating/creating ball ball --- site/real_game/class/Ball.js | 45 + site/real_game/class/Player.js | 41 +- site/real_game/main.js | 4 +- .../node_modules/.vite/deps/_metadata.json | 21 +- .../deps/three_examples_jsm_Addons__js.js | 879 +++++++++++++++++- .../deps/three_examples_jsm_Addons__js.js.map | 7 + ...ples_jsm_controls_OrbitControls__js.js.map | 7 - 7 files changed, 925 insertions(+), 79 deletions(-) create mode 100644 site/real_game/class/Ball.js delete mode 100644 site/real_game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js.map diff --git a/site/real_game/class/Ball.js b/site/real_game/class/Ball.js new file mode 100644 index 0000000..e85045d --- /dev/null +++ b/site/real_game/class/Ball.js @@ -0,0 +1,45 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Ball.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar +#+ +:+ +#+ */ +/* By: edbernar { - tmpCamera.position.set(3, 3, 3); + tmpCamera.position.set(-3, 3, -3); this.isOnPointAnim = true; this.camera = tmpCamera; interval = setInterval(() => { @@ -150,21 +150,28 @@ class Player }, 10); setTimeout(() => { clearInterval(interval); - this.camera = tmp; - this.object.material.color.copy(startColor); - this.isOnPointAnim = false; - if (!this.cameraFixed) - { - this.setCameraPosition( - this.object.position.x, - this.object.position.y - (this.object.position.y >= limits.up ? 0.7 : -0.7), - this.object.position.z + 1 - ); - } - document.getElementsByTagName('canvas')[0].style.animation = 'fadeIn 0.199s'; + document.getElementsByTagName('canvas')[0].style.animation = null; + document.getElementsByTagName('canvas')[0].style.animation = 'fadeIn 0.19s'; + document.getElementsByTagName('canvas')[0].style.filter = 'brightness(0)'; setTimeout(() => { + this.camera = tmp; + this.object.material.color.copy(startColor); + this.isOnPointAnim = false; + if (!this.cameraFixed) + { + this.setCameraPosition( + this.object.position.x, + this.object.position.y - (this.object.position.y >= limits.up ? 0.7 : -0.7), + this.object.position.z + 1 + ); + } document.getElementsByTagName('canvas')[0].style.animation = 'fadeOut 0.199s'; - }, 300) + document.getElementsByTagName('canvas')[0].style.filter = 'brightness(1)'; + }, 200); + // document.getElementsByTagName('canvas')[0].style.filter = 'brightness(0)'; + // setTimeout(() => { + // document.getElementsByTagName('canvas')[0].style.animation = 'fadeOut 0.199s'; + // }, 300) }, 4000); }, 200) } diff --git a/site/real_game/main.js b/site/real_game/main.js index 0deb7d9..51eb14d 100644 --- a/site/real_game/main.js +++ b/site/real_game/main.js @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* main.js :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: hubourge +#+ +:+ +#+ */ +/* By: edbernar >>>>>> c2c7418 (Game) "optimized": { "three": { "src": "../../three/build/three.module.js", "file": "three.js", +<<<<<<< HEAD "fileHash": "c6ea5bd8", +======= + "fileHash": "f318808c", +>>>>>>> c2c7418 (Game) "needsInterop": false }, "three/examples/jsm/Addons.js": { "src": "../../three/examples/jsm/Addons.js", "file": "three_examples_jsm_Addons__js.js", +<<<<<<< HEAD "fileHash": "1caa94cb", "needsInterop": false }, @@ -26,10 +35,14 @@ "src": "../../three/examples/jsm/libs/tween.module.js", "file": "three_examples_jsm_libs_tween__module__js.js", "fileHash": "c5283fd4", +======= + "fileHash": "3bfc3dad", +>>>>>>> c2c7418 (Game) "needsInterop": false } }, "chunks": { +<<<<<<< HEAD "chunk-X4PC2K6Q": { "file": "chunk-X4PC2K6Q.js" }, @@ -38,6 +51,10 @@ }, "chunk-PZ5AY32C": { "file": "chunk-PZ5AY32C.js" +======= + "chunk-33KXLYU5": { + "file": "chunk-33KXLYU5.js" +>>>>>>> c2c7418 (Game) } } } \ No newline at end of file diff --git a/site/real_game/node_modules/.vite/deps/three_examples_jsm_Addons__js.js b/site/real_game/node_modules/.vite/deps/three_examples_jsm_Addons__js.js index cbd31af..9443729 100644 --- a/site/real_game/node_modules/.vite/deps/three_examples_jsm_Addons__js.js +++ b/site/real_game/node_modules/.vite/deps/three_examples_jsm_Addons__js.js @@ -1,7 +1,10 @@ import { +<<<<<<< HEAD OrbitControls } from "./chunk-X4PC2K6Q.js"; import { +======= +>>>>>>> c2c7418 (Game) ACESFilmicToneMapping, AddEquation, AddOperation, @@ -5061,6 +5064,780 @@ var FlyControls = class extends EventDispatcher { } }; +// node_modules/three/examples/jsm/controls/OrbitControls.js +var _changeEvent3 = { type: "change" }; +var _startEvent2 = { type: "start" }; +var _endEvent2 = { type: "end" }; +var _ray = new Ray(); +var _plane2 = new Plane(); +var TILT_LIMIT = Math.cos(70 * MathUtils.DEG2RAD); +var OrbitControls = class extends EventDispatcher { + constructor(object, domElement) { + super(); + this.object = object; + this.domElement = domElement; + this.domElement.style.touchAction = "none"; + this.enabled = true; + this.target = new Vector3(); + this.cursor = new Vector3(); + this.minDistance = 0; + this.maxDistance = Infinity; + this.minZoom = 0; + this.maxZoom = Infinity; + this.minTargetRadius = 0; + this.maxTargetRadius = Infinity; + this.minPolarAngle = 0; + this.maxPolarAngle = Math.PI; + this.minAzimuthAngle = -Infinity; + this.maxAzimuthAngle = Infinity; + this.enableDamping = false; + this.dampingFactor = 0.05; + this.enableZoom = true; + this.zoomSpeed = 1; + this.enableRotate = true; + this.rotateSpeed = 1; + this.enablePan = true; + this.panSpeed = 1; + this.screenSpacePanning = true; + this.keyPanSpeed = 7; + this.zoomToCursor = false; + this.autoRotate = false; + this.autoRotateSpeed = 2; + this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }; + this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; + this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }; + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + this._domElementKeyEvents = null; + this.getPolarAngle = function() { + return spherical.phi; + }; + this.getAzimuthalAngle = function() { + return spherical.theta; + }; + this.getDistance = function() { + return this.object.position.distanceTo(this.target); + }; + this.listenToKeyEvents = function(domElement2) { + domElement2.addEventListener("keydown", onKeyDown); + this._domElementKeyEvents = domElement2; + }; + this.stopListenToKeyEvents = function() { + this._domElementKeyEvents.removeEventListener("keydown", onKeyDown); + this._domElementKeyEvents = null; + }; + this.saveState = function() { + scope.target0.copy(scope.target); + scope.position0.copy(scope.object.position); + scope.zoom0 = scope.object.zoom; + }; + this.reset = function() { + scope.target.copy(scope.target0); + scope.object.position.copy(scope.position0); + scope.object.zoom = scope.zoom0; + scope.object.updateProjectionMatrix(); + scope.dispatchEvent(_changeEvent3); + scope.update(); + state = STATE2.NONE; + }; + this.update = function() { + const offset = new Vector3(); + const quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0)); + const quatInverse = quat.clone().invert(); + const lastPosition = new Vector3(); + const lastQuaternion = new Quaternion(); + const lastTargetPosition = new Vector3(); + const twoPI = 2 * Math.PI; + return function update(deltaTime = null) { + const position2 = scope.object.position; + offset.copy(position2).sub(scope.target); + offset.applyQuaternion(quat); + spherical.setFromVector3(offset); + if (scope.autoRotate && state === STATE2.NONE) { + rotateLeft(getAutoRotationAngle(deltaTime)); + } + if (scope.enableDamping) { + spherical.theta += sphericalDelta.theta * scope.dampingFactor; + spherical.phi += sphericalDelta.phi * scope.dampingFactor; + } else { + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + } + let min = scope.minAzimuthAngle; + let max2 = scope.maxAzimuthAngle; + if (isFinite(min) && isFinite(max2)) { + if (min < -Math.PI) min += twoPI; + else if (min > Math.PI) min -= twoPI; + if (max2 < -Math.PI) max2 += twoPI; + else if (max2 > Math.PI) max2 -= twoPI; + if (min <= max2) { + spherical.theta = Math.max(min, Math.min(max2, spherical.theta)); + } else { + spherical.theta = spherical.theta > (min + max2) / 2 ? Math.max(min, spherical.theta) : Math.min(max2, spherical.theta); + } + } + spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi)); + spherical.makeSafe(); + if (scope.enableDamping === true) { + scope.target.addScaledVector(panOffset, scope.dampingFactor); + } else { + scope.target.add(panOffset); + } + scope.target.sub(scope.cursor); + scope.target.clampLength(scope.minTargetRadius, scope.maxTargetRadius); + scope.target.add(scope.cursor); + let zoomChanged = false; + if (scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera) { + spherical.radius = clampDistance(spherical.radius); + } else { + const prevRadius = spherical.radius; + spherical.radius = clampDistance(spherical.radius * scale2); + zoomChanged = prevRadius != spherical.radius; + } + offset.setFromSpherical(spherical); + offset.applyQuaternion(quatInverse); + position2.copy(scope.target).add(offset); + scope.object.lookAt(scope.target); + if (scope.enableDamping === true) { + sphericalDelta.theta *= 1 - scope.dampingFactor; + sphericalDelta.phi *= 1 - scope.dampingFactor; + panOffset.multiplyScalar(1 - scope.dampingFactor); + } else { + sphericalDelta.set(0, 0, 0); + panOffset.set(0, 0, 0); + } + if (scope.zoomToCursor && performCursorZoom) { + let newRadius = null; + if (scope.object.isPerspectiveCamera) { + const prevRadius = offset.length(); + newRadius = clampDistance(prevRadius * scale2); + const radiusDelta = prevRadius - newRadius; + scope.object.position.addScaledVector(dollyDirection, radiusDelta); + scope.object.updateMatrixWorld(); + zoomChanged = !!radiusDelta; + } else if (scope.object.isOrthographicCamera) { + const mouseBefore = new Vector3(mouse.x, mouse.y, 0); + mouseBefore.unproject(scope.object); + const prevZoom = scope.object.zoom; + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale2)); + scope.object.updateProjectionMatrix(); + zoomChanged = prevZoom !== scope.object.zoom; + const mouseAfter = new Vector3(mouse.x, mouse.y, 0); + mouseAfter.unproject(scope.object); + scope.object.position.sub(mouseAfter).add(mouseBefore); + scope.object.updateMatrixWorld(); + newRadius = offset.length(); + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."); + scope.zoomToCursor = false; + } + if (newRadius !== null) { + if (this.screenSpacePanning) { + scope.target.set(0, 0, -1).transformDirection(scope.object.matrix).multiplyScalar(newRadius).add(scope.object.position); + } else { + _ray.origin.copy(scope.object.position); + _ray.direction.set(0, 0, -1).transformDirection(scope.object.matrix); + if (Math.abs(scope.object.up.dot(_ray.direction)) < TILT_LIMIT) { + object.lookAt(scope.target); + } else { + _plane2.setFromNormalAndCoplanarPoint(scope.object.up, scope.target); + _ray.intersectPlane(_plane2, scope.target); + } + } + } + } else if (scope.object.isOrthographicCamera) { + const prevZoom = scope.object.zoom; + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale2)); + if (prevZoom !== scope.object.zoom) { + scope.object.updateProjectionMatrix(); + zoomChanged = true; + } + } + scale2 = 1; + performCursorZoom = false; + if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS2 || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS2 || lastTargetPosition.distanceToSquared(scope.target) > EPS2) { + scope.dispatchEvent(_changeEvent3); + lastPosition.copy(scope.object.position); + lastQuaternion.copy(scope.object.quaternion); + lastTargetPosition.copy(scope.target); + return true; + } + return false; + }; + }(); + this.dispose = function() { + scope.domElement.removeEventListener("contextmenu", onContextMenu2); + scope.domElement.removeEventListener("pointerdown", onPointerDown3); + scope.domElement.removeEventListener("pointercancel", onPointerUp3); + scope.domElement.removeEventListener("wheel", onMouseWheel); + scope.domElement.removeEventListener("pointermove", onPointerMove3); + scope.domElement.removeEventListener("pointerup", onPointerUp3); + const document3 = scope.domElement.getRootNode(); + document3.removeEventListener("keydown", interceptControlDown, { capture: true }); + if (scope._domElementKeyEvents !== null) { + scope._domElementKeyEvents.removeEventListener("keydown", onKeyDown); + scope._domElementKeyEvents = null; + } + }; + const scope = this; + const STATE2 = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 + }; + let state = STATE2.NONE; + const EPS2 = 1e-6; + const spherical = new Spherical(); + const sphericalDelta = new Spherical(); + let scale2 = 1; + const panOffset = new Vector3(); + const rotateStart = new Vector2(); + const rotateEnd = new Vector2(); + const rotateDelta = new Vector2(); + const panStart = new Vector2(); + const panEnd = new Vector2(); + const panDelta = new Vector2(); + const dollyStart = new Vector2(); + const dollyEnd = new Vector2(); + const dollyDelta = new Vector2(); + const dollyDirection = new Vector3(); + const mouse = new Vector2(); + let performCursorZoom = false; + const pointers = []; + const pointerPositions = {}; + let controlActive = false; + function getAutoRotationAngle(deltaTime) { + if (deltaTime !== null) { + return 2 * Math.PI / 60 * scope.autoRotateSpeed * deltaTime; + } else { + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + } + } + function getZoomScale(delta) { + const normalizedDelta = Math.abs(delta * 0.01); + return Math.pow(0.95, scope.zoomSpeed * normalizedDelta); + } + function rotateLeft(angle) { + sphericalDelta.theta -= angle; + } + function rotateUp(angle) { + sphericalDelta.phi -= angle; + } + const panLeft = function() { + const v = new Vector3(); + return function panLeft2(distance, objectMatrix) { + v.setFromMatrixColumn(objectMatrix, 0); + v.multiplyScalar(-distance); + panOffset.add(v); + }; + }(); + const panUp = function() { + const v = new Vector3(); + return function panUp2(distance, objectMatrix) { + if (scope.screenSpacePanning === true) { + v.setFromMatrixColumn(objectMatrix, 1); + } else { + v.setFromMatrixColumn(objectMatrix, 0); + v.crossVectors(scope.object.up, v); + } + v.multiplyScalar(distance); + panOffset.add(v); + }; + }(); + const pan = function() { + const offset = new Vector3(); + return function pan2(deltaX, deltaY) { + const element = scope.domElement; + if (scope.object.isPerspectiveCamera) { + const position2 = scope.object.position; + offset.copy(position2).sub(scope.target); + let targetDistance = offset.length(); + targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180); + panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix); + panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix); + } else if (scope.object.isOrthographicCamera) { + panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix); + panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix); + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."); + scope.enablePan = false; + } + }; + }(); + function dollyOut(dollyScale) { + if (scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera) { + scale2 /= dollyScale; + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); + scope.enableZoom = false; + } + } + function dollyIn(dollyScale) { + if (scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera) { + scale2 *= dollyScale; + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); + scope.enableZoom = false; + } + } + function updateZoomParameters(x2, y2) { + if (!scope.zoomToCursor) { + return; + } + performCursorZoom = true; + const rect = scope.domElement.getBoundingClientRect(); + const dx = x2 - rect.left; + const dy = y2 - rect.top; + const w = rect.width; + const h = rect.height; + mouse.x = dx / w * 2 - 1; + mouse.y = -(dy / h) * 2 + 1; + dollyDirection.set(mouse.x, mouse.y, 1).unproject(scope.object).sub(scope.object.position).normalize(); + } + function clampDistance(dist) { + return Math.max(scope.minDistance, Math.min(scope.maxDistance, dist)); + } + function handleMouseDownRotate(event) { + rotateStart.set(event.clientX, event.clientY); + } + function handleMouseDownDolly(event) { + updateZoomParameters(event.clientX, event.clientX); + dollyStart.set(event.clientX, event.clientY); + } + function handleMouseDownPan(event) { + panStart.set(event.clientX, event.clientY); + } + function handleMouseMoveRotate(event) { + rotateEnd.set(event.clientX, event.clientY); + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + const element = scope.domElement; + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateStart.copy(rotateEnd); + scope.update(); + } + function handleMouseMoveDolly(event) { + dollyEnd.set(event.clientX, event.clientY); + dollyDelta.subVectors(dollyEnd, dollyStart); + if (dollyDelta.y > 0) { + dollyOut(getZoomScale(dollyDelta.y)); + } else if (dollyDelta.y < 0) { + dollyIn(getZoomScale(dollyDelta.y)); + } + dollyStart.copy(dollyEnd); + scope.update(); + } + function handleMouseMovePan(event) { + panEnd.set(event.clientX, event.clientY); + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + scope.update(); + } + function handleMouseWheel(event) { + updateZoomParameters(event.clientX, event.clientY); + if (event.deltaY < 0) { + dollyIn(getZoomScale(event.deltaY)); + } else if (event.deltaY > 0) { + dollyOut(getZoomScale(event.deltaY)); + } + scope.update(); + } + function handleKeyDown(event) { + let needsUpdate = false; + switch (event.code) { + case scope.keys.UP: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + rotateUp(2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight); + } else { + pan(0, scope.keyPanSpeed); + } + needsUpdate = true; + break; + case scope.keys.BOTTOM: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + rotateUp(-2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight); + } else { + pan(0, -scope.keyPanSpeed); + } + needsUpdate = true; + break; + case scope.keys.LEFT: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + rotateLeft(2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight); + } else { + pan(scope.keyPanSpeed, 0); + } + needsUpdate = true; + break; + case scope.keys.RIGHT: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + rotateLeft(-2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight); + } else { + pan(-scope.keyPanSpeed, 0); + } + needsUpdate = true; + break; + } + if (needsUpdate) { + event.preventDefault(); + scope.update(); + } + } + function handleTouchStartRotate(event) { + if (pointers.length === 1) { + rotateStart.set(event.pageX, event.pageY); + } else { + const position2 = getSecondPointerPosition(event); + const x2 = 0.5 * (event.pageX + position2.x); + const y2 = 0.5 * (event.pageY + position2.y); + rotateStart.set(x2, y2); + } + } + function handleTouchStartPan(event) { + if (pointers.length === 1) { + panStart.set(event.pageX, event.pageY); + } else { + const position2 = getSecondPointerPosition(event); + const x2 = 0.5 * (event.pageX + position2.x); + const y2 = 0.5 * (event.pageY + position2.y); + panStart.set(x2, y2); + } + } + function handleTouchStartDolly(event) { + const position2 = getSecondPointerPosition(event); + const dx = event.pageX - position2.x; + const dy = event.pageY - position2.y; + const distance = Math.sqrt(dx * dx + dy * dy); + dollyStart.set(0, distance); + } + function handleTouchStartDollyPan(event) { + if (scope.enableZoom) handleTouchStartDolly(event); + if (scope.enablePan) handleTouchStartPan(event); + } + function handleTouchStartDollyRotate(event) { + if (scope.enableZoom) handleTouchStartDolly(event); + if (scope.enableRotate) handleTouchStartRotate(event); + } + function handleTouchMoveRotate(event) { + if (pointers.length == 1) { + rotateEnd.set(event.pageX, event.pageY); + } else { + const position2 = getSecondPointerPosition(event); + const x2 = 0.5 * (event.pageX + position2.x); + const y2 = 0.5 * (event.pageY + position2.y); + rotateEnd.set(x2, y2); + } + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + const element = scope.domElement; + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateStart.copy(rotateEnd); + } + function handleTouchMovePan(event) { + if (pointers.length === 1) { + panEnd.set(event.pageX, event.pageY); + } else { + const position2 = getSecondPointerPosition(event); + const x2 = 0.5 * (event.pageX + position2.x); + const y2 = 0.5 * (event.pageY + position2.y); + panEnd.set(x2, y2); + } + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + } + function handleTouchMoveDolly(event) { + const position2 = getSecondPointerPosition(event); + const dx = event.pageX - position2.x; + const dy = event.pageY - position2.y; + const distance = Math.sqrt(dx * dx + dy * dy); + dollyEnd.set(0, distance); + dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed)); + dollyOut(dollyDelta.y); + dollyStart.copy(dollyEnd); + const centerX = (event.pageX + position2.x) * 0.5; + const centerY = (event.pageY + position2.y) * 0.5; + updateZoomParameters(centerX, centerY); + } + function handleTouchMoveDollyPan(event) { + if (scope.enableZoom) handleTouchMoveDolly(event); + if (scope.enablePan) handleTouchMovePan(event); + } + function handleTouchMoveDollyRotate(event) { + if (scope.enableZoom) handleTouchMoveDolly(event); + if (scope.enableRotate) handleTouchMoveRotate(event); + } + function onPointerDown3(event) { + if (scope.enabled === false) return; + if (pointers.length === 0) { + scope.domElement.setPointerCapture(event.pointerId); + scope.domElement.addEventListener("pointermove", onPointerMove3); + scope.domElement.addEventListener("pointerup", onPointerUp3); + } + if (isTrackingPointer(event)) return; + addPointer(event); + if (event.pointerType === "touch") { + onTouchStart(event); + } else { + onMouseDown(event); + } + } + function onPointerMove3(event) { + if (scope.enabled === false) return; + if (event.pointerType === "touch") { + onTouchMove(event); + } else { + onMouseMove2(event); + } + } + function onPointerUp3(event) { + removePointer(event); + switch (pointers.length) { + case 0: + scope.domElement.releasePointerCapture(event.pointerId); + scope.domElement.removeEventListener("pointermove", onPointerMove3); + scope.domElement.removeEventListener("pointerup", onPointerUp3); + scope.dispatchEvent(_endEvent2); + state = STATE2.NONE; + break; + case 1: + const pointerId = pointers[0]; + const position2 = pointerPositions[pointerId]; + onTouchStart({ pointerId, pageX: position2.x, pageY: position2.y }); + break; + } + } + function onMouseDown(event) { + let mouseAction; + switch (event.button) { + case 0: + mouseAction = scope.mouseButtons.LEFT; + break; + case 1: + mouseAction = scope.mouseButtons.MIDDLE; + break; + case 2: + mouseAction = scope.mouseButtons.RIGHT; + break; + default: + mouseAction = -1; + } + switch (mouseAction) { + case MOUSE.DOLLY: + if (scope.enableZoom === false) return; + handleMouseDownDolly(event); + state = STATE2.DOLLY; + break; + case MOUSE.ROTATE: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enablePan === false) return; + handleMouseDownPan(event); + state = STATE2.PAN; + } else { + if (scope.enableRotate === false) return; + handleMouseDownRotate(event); + state = STATE2.ROTATE; + } + break; + case MOUSE.PAN: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enableRotate === false) return; + handleMouseDownRotate(event); + state = STATE2.ROTATE; + } else { + if (scope.enablePan === false) return; + handleMouseDownPan(event); + state = STATE2.PAN; + } + break; + default: + state = STATE2.NONE; + } + if (state !== STATE2.NONE) { + scope.dispatchEvent(_startEvent2); + } + } + function onMouseMove2(event) { + switch (state) { + case STATE2.ROTATE: + if (scope.enableRotate === false) return; + handleMouseMoveRotate(event); + break; + case STATE2.DOLLY: + if (scope.enableZoom === false) return; + handleMouseMoveDolly(event); + break; + case STATE2.PAN: + if (scope.enablePan === false) return; + handleMouseMovePan(event); + break; + } + } + function onMouseWheel(event) { + if (scope.enabled === false || scope.enableZoom === false || state !== STATE2.NONE) return; + event.preventDefault(); + scope.dispatchEvent(_startEvent2); + handleMouseWheel(customWheelEvent(event)); + scope.dispatchEvent(_endEvent2); + } + function customWheelEvent(event) { + const mode = event.deltaMode; + const newEvent = { + clientX: event.clientX, + clientY: event.clientY, + deltaY: event.deltaY + }; + switch (mode) { + case 1: + newEvent.deltaY *= 16; + break; + case 2: + newEvent.deltaY *= 100; + break; + } + if (event.ctrlKey && !controlActive) { + newEvent.deltaY *= 10; + } + return newEvent; + } + function interceptControlDown(event) { + if (event.key === "Control") { + controlActive = true; + const document3 = scope.domElement.getRootNode(); + document3.addEventListener("keyup", interceptControlUp, { passive: true, capture: true }); + } + } + function interceptControlUp(event) { + if (event.key === "Control") { + controlActive = false; + const document3 = scope.domElement.getRootNode(); + document3.removeEventListener("keyup", interceptControlUp, { passive: true, capture: true }); + } + } + function onKeyDown(event) { + if (scope.enabled === false || scope.enablePan === false) return; + handleKeyDown(event); + } + function onTouchStart(event) { + trackPointer(event); + switch (pointers.length) { + case 1: + switch (scope.touches.ONE) { + case TOUCH.ROTATE: + if (scope.enableRotate === false) return; + handleTouchStartRotate(event); + state = STATE2.TOUCH_ROTATE; + break; + case TOUCH.PAN: + if (scope.enablePan === false) return; + handleTouchStartPan(event); + state = STATE2.TOUCH_PAN; + break; + default: + state = STATE2.NONE; + } + break; + case 2: + switch (scope.touches.TWO) { + case TOUCH.DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) return; + handleTouchStartDollyPan(event); + state = STATE2.TOUCH_DOLLY_PAN; + break; + case TOUCH.DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) return; + handleTouchStartDollyRotate(event); + state = STATE2.TOUCH_DOLLY_ROTATE; + break; + default: + state = STATE2.NONE; + } + break; + default: + state = STATE2.NONE; + } + if (state !== STATE2.NONE) { + scope.dispatchEvent(_startEvent2); + } + } + function onTouchMove(event) { + trackPointer(event); + switch (state) { + case STATE2.TOUCH_ROTATE: + if (scope.enableRotate === false) return; + handleTouchMoveRotate(event); + scope.update(); + break; + case STATE2.TOUCH_PAN: + if (scope.enablePan === false) return; + handleTouchMovePan(event); + scope.update(); + break; + case STATE2.TOUCH_DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) return; + handleTouchMoveDollyPan(event); + scope.update(); + break; + case STATE2.TOUCH_DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) return; + handleTouchMoveDollyRotate(event); + scope.update(); + break; + default: + state = STATE2.NONE; + } + } + function onContextMenu2(event) { + if (scope.enabled === false) return; + event.preventDefault(); + } + function addPointer(event) { + pointers.push(event.pointerId); + } + function removePointer(event) { + delete pointerPositions[event.pointerId]; + for (let i = 0; i < pointers.length; i++) { + if (pointers[i] == event.pointerId) { + pointers.splice(i, 1); + return; + } + } + } + function isTrackingPointer(event) { + for (let i = 0; i < pointers.length; i++) { + if (pointers[i] == event.pointerId) return true; + } + return false; + } + function trackPointer(event) { + let position2 = pointerPositions[event.pointerId]; + if (position2 === void 0) { + position2 = new Vector2(); + pointerPositions[event.pointerId] = position2; + } + position2.set(event.pageX, event.pageY); + } + function getSecondPointerPosition(event) { + const pointerId = event.pointerId === pointers[0] ? pointers[1] : pointers[0]; + return pointerPositions[pointerId]; + } + scope.domElement.addEventListener("contextmenu", onContextMenu2); + scope.domElement.addEventListener("pointerdown", onPointerDown3); + scope.domElement.addEventListener("pointercancel", onPointerUp3); + scope.domElement.addEventListener("wheel", onMouseWheel, { passive: false }); + const document2 = scope.domElement.getRootNode(); + document2.addEventListener("keydown", interceptControlDown, { passive: true, capture: true }); + this.update(); + } +}; + // node_modules/three/examples/jsm/controls/MapControls.js var MapControls = class extends OrbitControls { constructor(object, domElement) { @@ -5074,7 +5851,7 @@ var MapControls = class extends OrbitControls { // node_modules/three/examples/jsm/controls/PointerLockControls.js var _euler = new Euler(0, 0, 0, "YXZ"); var _vector2 = new Vector3(); -var _changeEvent3 = { type: "change" }; +var _changeEvent4 = { type: "change" }; var _lockEvent = { type: "lock" }; var _unlockEvent = { type: "unlock" }; var _PI_2 = Math.PI / 2; @@ -5139,7 +5916,7 @@ function onMouseMove(event) { _euler.x -= movementY * 2e-3 * this.pointerSpeed; _euler.x = Math.max(_PI_2 - this.maxPolarAngle, Math.min(_PI_2 - this.minPolarAngle, _euler.x)); camera.quaternion.setFromEuler(_euler); - this.dispatchEvent(_changeEvent3); + this.dispatchEvent(_changeEvent4); } function onPointerlockChange() { if (this.domElement.ownerDocument.pointerLockElement === this.domElement) { @@ -5155,9 +5932,9 @@ function onPointerlockError() { } // node_modules/three/examples/jsm/controls/TrackballControls.js -var _changeEvent4 = { type: "change" }; -var _startEvent2 = { type: "start" }; -var _endEvent2 = { type: "end" }; +var _changeEvent5 = { type: "change" }; +var _startEvent3 = { type: "start" }; +var _endEvent3 = { type: "end" }; var TrackballControls = class extends EventDispatcher { constructor(object, domElement) { super(); @@ -5344,13 +6121,13 @@ var TrackballControls = class extends EventDispatcher { scope.checkDistances(); scope.object.lookAt(scope.target); if (lastPosition.distanceToSquared(scope.object.position) > EPS2) { - scope.dispatchEvent(_changeEvent4); + scope.dispatchEvent(_changeEvent5); lastPosition.copy(scope.object.position); } } else if (scope.object.isOrthographicCamera) { scope.object.lookAt(scope.target); if (lastPosition.distanceToSquared(scope.object.position) > EPS2 || lastZoom !== scope.object.zoom) { - scope.dispatchEvent(_changeEvent4); + scope.dispatchEvent(_changeEvent5); lastPosition.copy(scope.object.position); lastZoom = scope.object.zoom; } @@ -5368,7 +6145,7 @@ var TrackballControls = class extends EventDispatcher { scope.object.updateProjectionMatrix(); _eye.subVectors(scope.object.position, scope.target); scope.object.lookAt(scope.target); - scope.dispatchEvent(_changeEvent4); + scope.dispatchEvent(_changeEvent5); lastPosition.copy(scope.object.position); lastZoom = scope.object.zoom; }; @@ -5454,7 +6231,7 @@ var TrackballControls = class extends EventDispatcher { _panStart.copy(getMouseOnScreen(event.pageX, event.pageY)); _panEnd.copy(_panStart); } - scope.dispatchEvent(_startEvent2); + scope.dispatchEvent(_startEvent3); } function onMouseMove2(event) { const state = _keyState !== STATE2.NONE ? _keyState : _state; @@ -5469,7 +6246,7 @@ var TrackballControls = class extends EventDispatcher { } function onMouseUp() { _state = STATE2.NONE; - scope.dispatchEvent(_endEvent2); + scope.dispatchEvent(_endEvent3); } function onMouseWheel(event) { if (scope.enabled === false) return; @@ -5486,8 +6263,8 @@ var TrackballControls = class extends EventDispatcher { _zoomStart.y -= event.deltaY * 25e-5; break; } - scope.dispatchEvent(_startEvent2); - scope.dispatchEvent(_endEvent2); + scope.dispatchEvent(_startEvent3); + scope.dispatchEvent(_endEvent3); } function onTouchStart(event) { trackPointer(event); @@ -5508,7 +6285,7 @@ var TrackballControls = class extends EventDispatcher { _panEnd.copy(_panStart); break; } - scope.dispatchEvent(_startEvent2); + scope.dispatchEvent(_startEvent3); } function onTouchMove(event) { trackPointer(event); @@ -5550,7 +6327,7 @@ var TrackballControls = class extends EventDispatcher { } break; } - scope.dispatchEvent(_endEvent2); + scope.dispatchEvent(_endEvent3); } function contextmenu2(event) { if (scope.enabled === false) return; @@ -5611,7 +6388,7 @@ var _unit = { Y: new Vector3(0, 1, 0), Z: new Vector3(0, 0, 1) }; -var _changeEvent5 = { type: "change" }; +var _changeEvent6 = { type: "change" }; var _mouseDownEvent = { type: "mouseDown", mode: null }; var _mouseUpEvent = { type: "mouseUp", mode: null }; var _objectChangeEvent = { type: "objectChange" }; @@ -5629,9 +6406,9 @@ var TransformControls = class extends Object3D { const _gizmo = new TransformControlsGizmo(); this._gizmo = _gizmo; this.add(_gizmo); - const _plane4 = new TransformControlsPlane(); - this._plane = _plane4; - this.add(_plane4); + const _plane5 = new TransformControlsPlane(); + this._plane = _plane5; + this.add(_plane5); const scope = this; function defineProperty(propName, defaultValue) { let propValue = defaultValue; @@ -5642,15 +6419,15 @@ var TransformControls = class extends Object3D { set: function(value2) { if (propValue !== value2) { propValue = value2; - _plane4[propName] = value2; + _plane5[propName] = value2; _gizmo[propName] = value2; scope.dispatchEvent({ type: propName + "-changed", value: value2 }); - scope.dispatchEvent(_changeEvent5); + scope.dispatchEvent(_changeEvent6); } } }); scope[propName] = defaultValue; - _plane4[propName] = defaultValue; + _plane5[propName] = defaultValue; _gizmo[propName] = defaultValue; } defineProperty("camera", camera); @@ -5894,7 +6671,7 @@ var TransformControls = class extends Object3D { object.quaternion.multiply(this._quaternionStart).normalize(); } } - this.dispatchEvent(_changeEvent5); + this.dispatchEvent(_changeEvent6); this.dispatchEvent(_objectChangeEvent); } pointerUp(pointer) { @@ -5935,7 +6712,7 @@ var TransformControls = class extends Object3D { this.object.position.copy(this._positionStart); this.object.quaternion.copy(this._quaternionStart); this.object.scale.copy(this._scaleStart); - this.dispatchEvent(_changeEvent5); + this.dispatchEvent(_changeEvent6); this.dispatchEvent(_objectChangeEvent); this.pointStart.copy(this.pointEnd); } @@ -25192,7 +25969,7 @@ var Visible = 0; var Deleted = 1; var _v12 = new Vector3(); var _line3 = new Line3(); -var _plane2 = new Plane(); +var _plane3 = new Plane(); var _closestPoint = new Vector3(); var _triangle = new Triangle(); var ConvexHull = class { @@ -25425,11 +26202,11 @@ var ConvexHull = class { } } maxDistance = -1; - _plane2.setFromCoplanarPoints(v0.point, v12.point, v2.point); + _plane3.setFromCoplanarPoints(v0.point, v12.point, v2.point); for (let i = 0, l2 = this.vertices.length; i < l2; i++) { const vertex = vertices[i]; if (vertex !== v0 && vertex !== v12 && vertex !== v2) { - const distance = Math.abs(_plane2.distanceToPoint(vertex.point)); + const distance = Math.abs(_plane3.distanceToPoint(vertex.point)); if (distance > maxDistance) { maxDistance = distance; v3 = vertex; @@ -25437,7 +26214,7 @@ var ConvexHull = class { } } const faces = []; - if (_plane2.distanceToPoint(v3.point) < 0) { + if (_plane3.distanceToPoint(v3.point) < 0) { faces.push( Face.create(v0, v12, v2), Face.create(v3, v12, v0), @@ -30708,7 +31485,7 @@ var _closestPoint2 = new Vector3(); var _box2 = new Box3(); var _sphere = new Sphere(); var _clipToWorldVector = new Vector4(); -var _ray; +var _ray2; var _lineWidth; function getWorldSpaceHalfWidth(camera, distance, resolution) { _clipToWorldVector.set(0, 0, -distance, 1).applyMatrix4(camera.projectionMatrix); @@ -30731,13 +31508,13 @@ function raycastWorldUnits(lineSegments, intersects) { _line.applyMatrix4(matrixWorld); const pointOnLine = new Vector3(); const point = new Vector3(); - _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); + _ray2.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); const isInside = point.distanceTo(pointOnLine) < _lineWidth * 0.5; if (isInside) { intersects.push({ point, pointOnLine, - distance: _ray.origin.distanceTo(point), + distance: _ray2.origin.distanceTo(point), object: lineSegments, face: null, faceIndex: i, @@ -30757,7 +31534,7 @@ function raycastScreenSpace(lineSegments, camera, intersects) { const instanceEnd = geometry.attributes.instanceEnd; const segmentCount = Math.min(geometry.instanceCount, instanceStart.count); const near = -camera.near; - _ray.at(1, _ssOrigin); + _ray2.at(1, _ssOrigin); _ssOrigin.w = 1; _ssOrigin.applyMatrix4(camera.matrixWorldInverse); _ssOrigin.applyMatrix4(projectionMatrix); @@ -30811,11 +31588,11 @@ function raycastScreenSpace(lineSegments, camera, intersects) { _line.end.applyMatrix4(matrixWorld); const pointOnLine = new Vector3(); const point = new Vector3(); - _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); + _ray2.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); intersects.push({ point, pointOnLine, - distance: _ray.origin.distanceTo(point), + distance: _ray2.origin.distanceTo(point), object: lineSegments, face: null, faceIndex: i, @@ -30855,7 +31632,7 @@ var LineSegments2 = class extends Mesh { console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.'); } const threshold = raycaster.params.Line2 !== void 0 ? raycaster.params.Line2.threshold || 0 : 0; - _ray = raycaster.ray; + _ray2 = raycaster.ray; const matrixWorld = this.matrixWorld; const geometry = this.geometry; const material = this.material; @@ -30868,11 +31645,11 @@ var LineSegments2 = class extends Mesh { if (worldUnits) { sphereMargin = _lineWidth * 0.5; } else { - const distanceToSphere = Math.max(camera.near, _sphere.distanceToPoint(_ray.origin)); + const distanceToSphere = Math.max(camera.near, _sphere.distanceToPoint(_ray2.origin)); sphereMargin = getWorldSpaceHalfWidth(camera, distanceToSphere, material.resolution); } _sphere.radius += sphereMargin; - if (_ray.intersectsSphere(_sphere) === false) { + if (_ray2.intersectsSphere(_sphere) === false) { return; } if (geometry.boundingBox === null) { @@ -30883,11 +31660,11 @@ var LineSegments2 = class extends Mesh { if (worldUnits) { boxMargin = _lineWidth * 0.5; } else { - const distanceToBox = Math.max(camera.near, _box2.distanceToPoint(_ray.origin)); + const distanceToBox = Math.max(camera.near, _box2.distanceToPoint(_ray2.origin)); boxMargin = getWorldSpaceHalfWidth(camera, distanceToBox, material.resolution); } _box2.expandByScalar(boxMargin); - if (_ray.intersectsBox(_box2) === false) { + if (_ray2.intersectsBox(_box2) === false) { return; } if (worldUnits) { @@ -44443,7 +45220,7 @@ function generateFaceNormals(faces) { face.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize(); } } -var _ray2 = new Ray(); +var _ray3 = new Ray(); function smoothNormals(faces, lineSegments, checkSubSegments = false) { const hashMultiplier = (1 + 1e-10) * 100; function hashVertex(v) { @@ -44511,8 +45288,8 @@ function smoothNormals(faces, lineSegments, checkSubSegments = false) { continue; } if (checkSubSegments) { - toNormalizedRay(v0, v12, _ray2); - const rayHash = hashRay(_ray2); + toNormalizedRay(v0, v12, _ray3); + const rayHash = hashRay(_ray3); if (hardEdgeRays.has(rayHash)) { const info2 = hardEdgeRays.get(rayHash); const { ray, distances } = info2; @@ -95930,7 +96707,7 @@ var _v15 = new Vector3(); var _v24 = new Vector3(); var _point1 = new Vector3(); var _point2 = new Vector3(); -var _plane3 = new Plane(); +var _plane4 = new Plane(); var _line1 = new Line3(); var _line2 = new Line3(); var _sphere2 = new Sphere(); @@ -96048,16 +96825,16 @@ var Octree = class _Octree { return triangles; } triangleCapsuleIntersect(capsule, triangle) { - triangle.getPlane(_plane3); - const d1 = _plane3.distanceToPoint(capsule.start) - capsule.radius; - const d2 = _plane3.distanceToPoint(capsule.end) - capsule.radius; + triangle.getPlane(_plane4); + const d1 = _plane4.distanceToPoint(capsule.start) - capsule.radius; + const d2 = _plane4.distanceToPoint(capsule.end) - capsule.radius; if (d1 > 0 && d2 > 0 || d1 < -capsule.radius && d2 < -capsule.radius) { return false; } const delta = Math.abs(d1 / (Math.abs(d1) + Math.abs(d2))); const intersectPoint = _v15.copy(capsule.start).lerp(capsule.end, delta); if (triangle.containsPoint(intersectPoint)) { - return { normal: _plane3.normal.clone(), point: intersectPoint.clone(), depth: Math.abs(Math.min(d1, d2)) }; + return { normal: _plane4.normal.clone(), point: intersectPoint.clone(), depth: Math.abs(Math.min(d1, d2)) }; } const r2 = capsule.radius * capsule.radius; const line1 = _line1.set(capsule.start, capsule.end); @@ -96080,13 +96857,13 @@ var Octree = class _Octree { return false; } triangleSphereIntersect(sphere, triangle) { - triangle.getPlane(_plane3); - if (!sphere.intersectsPlane(_plane3)) return false; - const depth = Math.abs(_plane3.distanceToSphere(sphere)); + triangle.getPlane(_plane4); + if (!sphere.intersectsPlane(_plane4)) return false; + const depth = Math.abs(_plane4.distanceToSphere(sphere)); const r2 = sphere.radius * sphere.radius - depth * depth; - const plainPoint = _plane3.projectPoint(sphere.center, _v15); + const plainPoint = _plane4.projectPoint(sphere.center, _v15); if (triangle.containsPoint(sphere.center)) { - return { normal: _plane3.normal.clone(), point: plainPoint.clone(), depth: Math.abs(_plane3.distanceToSphere(sphere)) }; + return { normal: _plane4.normal.clone(), point: plainPoint.clone(), depth: Math.abs(_plane4.distanceToSphere(sphere)) }; } const lines = [ [triangle.a, triangle.b], diff --git a/site/real_game/node_modules/.vite/deps/three_examples_jsm_Addons__js.js.map b/site/real_game/node_modules/.vite/deps/three_examples_jsm_Addons__js.js.map index 9b65f3b..e1d7cc3 100644 --- a/site/real_game/node_modules/.vite/deps/three_examples_jsm_Addons__js.js.map +++ b/site/real_game/node_modules/.vite/deps/three_examples_jsm_Addons__js.js.map @@ -1,7 +1,14 @@ { "version": 3, +<<<<<<< HEAD "sources": ["../../three/examples/jsm/animation/AnimationClipCreator.js", "../../three/examples/jsm/animation/CCDIKSolver.js", "../../three/examples/jsm/animation/MMDPhysics.js", "../../three/examples/jsm/animation/MMDAnimationHelper.js", "../../three/examples/jsm/shaders/BokehShader2.js", "../../three/examples/jsm/cameras/CinematicCamera.js", "../../three/examples/jsm/capabilities/WebGL.js", "../../three/examples/jsm/controls/ArcballControls.js", "../../three/examples/jsm/controls/DragControls.js", "../../three/examples/jsm/controls/FirstPersonControls.js", "../../three/examples/jsm/controls/FlyControls.js", "../../three/examples/jsm/controls/MapControls.js", "../../three/examples/jsm/controls/PointerLockControls.js", "../../three/examples/jsm/controls/TrackballControls.js", "../../three/examples/jsm/controls/TransformControls.js", "../../three/examples/jsm/csm/CSMFrustum.js", "../../three/examples/jsm/csm/CSMShader.js", "../../three/examples/jsm/csm/CSM.js", "../../three/examples/jsm/csm/CSMHelper.js", "../../three/examples/jsm/curves/CurveExtras.js", "../../three/examples/jsm/curves/NURBSUtils.js", "../../three/examples/jsm/curves/NURBSCurve.js", "../../three/examples/jsm/curves/NURBSSurface.js", "../../three/examples/jsm/curves/NURBSVolume.js", "../../three/examples/jsm/effects/AnaglyphEffect.js", "../../three/examples/jsm/effects/AsciiEffect.js", "../../three/examples/jsm/effects/OutlineEffect.js", "../../three/examples/jsm/effects/ParallaxBarrierEffect.js", "../../three/examples/jsm/effects/PeppersGhostEffect.js", "../../three/examples/jsm/effects/StereoEffect.js", "../../three/examples/jsm/environments/DebugEnvironment.js", "../../three/examples/jsm/environments/RoomEnvironment.js", "../../three/examples/jsm/exporters/DRACOExporter.js", "../../three/examples/jsm/libs/fflate.module.js", "../../three/examples/jsm/exporters/EXRExporter.js", "../../three/examples/jsm/utils/TextureUtils.js", "../../three/examples/jsm/exporters/GLTFExporter.js", "../../three/examples/jsm/libs/ktx-parse.module.js", "../../three/examples/jsm/exporters/KTX2Exporter.js", "../../three/examples/jsm/libs/mmdparser.module.js", "../../three/examples/jsm/exporters/MMDExporter.js", "../../three/examples/jsm/exporters/OBJExporter.js", "../../three/examples/jsm/exporters/PLYExporter.js", "../../three/examples/jsm/exporters/STLExporter.js", "../../three/examples/jsm/exporters/USDZExporter.js", "../../three/examples/jsm/geometries/BoxLineGeometry.js", "../../three/examples/jsm/math/ConvexHull.js", "../../three/examples/jsm/geometries/ConvexGeometry.js", "../../three/examples/jsm/geometries/DecalGeometry.js", "../../three/examples/jsm/geometries/ParametricGeometry.js", "../../three/examples/jsm/geometries/ParametricGeometries.js", "../../three/examples/jsm/geometries/RoundedBoxGeometry.js", "../../three/examples/jsm/geometries/TeapotGeometry.js", "../../three/examples/jsm/geometries/TextGeometry.js", "../../three/examples/jsm/helpers/LightProbeHelper.js", "../../three/examples/jsm/helpers/OctreeHelper.js", "../../three/examples/jsm/helpers/PositionalAudioHelper.js", "../../three/examples/jsm/helpers/RectAreaLightHelper.js", "../../three/examples/jsm/utils/BufferGeometryUtils.js", "../../three/examples/jsm/helpers/TextureHelper.js", "../../three/examples/jsm/helpers/VertexNormalsHelper.js", "../../three/examples/jsm/helpers/VertexTangentsHelper.js", "../../three/examples/jsm/helpers/ViewHelper.js", "../../three/examples/jsm/interactive/HTMLMesh.js", "../../three/examples/jsm/interactive/InteractiveGroup.js", "../../three/examples/jsm/interactive/SelectionBox.js", "../../three/examples/jsm/interactive/SelectionHelper.js", "../../three/examples/jsm/lights/LightProbeGenerator.js", "../../three/examples/jsm/lights/RectAreaLightTexturesLib.js", "../../three/examples/jsm/lights/RectAreaLightUniformsLib.js", "../../three/examples/jsm/lines/LineSegmentsGeometry.js", "../../three/examples/jsm/lines/LineMaterial.js", "../../three/examples/jsm/lines/LineSegments2.js", "../../three/examples/jsm/lines/LineGeometry.js", "../../three/examples/jsm/lines/Line2.js", "../../three/examples/jsm/lines/Wireframe.js", "../../three/examples/jsm/lines/WireframeGeometry2.js", "../../three/examples/jsm/loaders/EXRLoader.js", "../../three/examples/jsm/loaders/3DMLoader.js", "../../three/examples/jsm/loaders/3MFLoader.js", "../../three/examples/jsm/loaders/AMFLoader.js", "../../three/examples/jsm/loaders/BVHLoader.js", "../../three/examples/jsm/loaders/TGALoader.js", "../../three/examples/jsm/loaders/ColladaLoader.js", "../../three/examples/jsm/loaders/DDSLoader.js", "../../three/examples/jsm/loaders/DRACOLoader.js", "../../three/examples/jsm/loaders/FBXLoader.js", "../../three/examples/jsm/loaders/FontLoader.js", "../../three/examples/jsm/loaders/GCodeLoader.js", "../../three/examples/jsm/loaders/GLTFLoader.js", "../../three/examples/jsm/loaders/RGBELoader.js", "../../three/examples/jsm/loaders/HDRCubeTextureLoader.js", "../../three/examples/jsm/loaders/IESLoader.js", "../../three/examples/jsm/loaders/KMZLoader.js", "../../three/examples/jsm/utils/WorkerPool.js", "../../three/examples/jsm/libs/zstddec.module.js", "../../three/examples/jsm/loaders/KTX2Loader.js", "../../three/examples/jsm/loaders/KTXLoader.js", "../../three/examples/jsm/loaders/LDrawLoader.js", "../../three/examples/jsm/loaders/LUT3dlLoader.js", "../../three/examples/jsm/loaders/LUTCubeLoader.js", "../../three/examples/jsm/loaders/lwo/LWO2Parser.js", "../../three/examples/jsm/loaders/lwo/LWO3Parser.js", "../../three/examples/jsm/loaders/lwo/IFFParser.js", "../../three/examples/jsm/loaders/LWOLoader.js", "../../three/examples/jsm/loaders/LogLuvLoader.js", "../../three/examples/jsm/libs/lottie_canvas.module.js", "../../three/examples/jsm/loaders/LottieLoader.js", "../../three/examples/jsm/loaders/MD2Loader.js", "../../three/examples/jsm/loaders/MDDLoader.js", "../../three/examples/jsm/shaders/MMDToonShader.js", "../../three/examples/jsm/loaders/MMDLoader.js", "../../three/examples/jsm/loaders/MTLLoader.js", "../../three/examples/jsm/misc/VolumeSlice.js", "../../three/examples/jsm/misc/Volume.js", "../../three/examples/jsm/loaders/NRRDLoader.js", "../../three/examples/jsm/loaders/OBJLoader.js", "../../three/examples/jsm/loaders/PCDLoader.js", "../../three/examples/jsm/loaders/PDBLoader.js", "../../three/examples/jsm/loaders/PLYLoader.js", "../../three/examples/jsm/loaders/PVRLoader.js", "../../three/examples/jsm/loaders/UltraHDRLoader.js", "../../three/examples/jsm/loaders/RGBMLoader.js", "../../three/examples/jsm/loaders/STLLoader.js", "../../three/examples/jsm/loaders/SVGLoader.js", "../../three/examples/jsm/loaders/TDSLoader.js", "../../three/examples/jsm/libs/utif.module.js", "../../three/examples/jsm/loaders/TIFFLoader.js", "../../three/examples/jsm/libs/opentype.module.js", "../../three/examples/jsm/loaders/TTFLoader.js", "../../three/examples/jsm/loaders/TiltLoader.js", "../../three/examples/jsm/loaders/USDZLoader.js", "../../three/examples/jsm/loaders/VOXLoader.js", "../../three/examples/jsm/libs/chevrotain.module.min.js", "../../three/examples/jsm/loaders/VRMLLoader.js", "../../three/examples/jsm/loaders/VTKLoader.js", "../../three/examples/jsm/loaders/XYZLoader.js", "../../three/examples/jsm/materials/MeshGouraudMaterial.js", "../../three/examples/jsm/math/Capsule.js", "../../three/examples/jsm/math/ColorConverter.js", "../../three/examples/jsm/math/ImprovedNoise.js", "../../three/examples/jsm/math/Lut.js", "../../three/examples/jsm/math/MeshSurfaceSampler.js", "../../three/examples/jsm/math/OBB.js", "../../three/examples/jsm/math/Octree.js", "../../three/examples/jsm/math/SimplexNoise.js", "../../three/examples/jsm/misc/ConvexObjectBreaker.js", "../../three/examples/jsm/postprocessing/Pass.js", "../../three/examples/jsm/misc/GPUComputationRenderer.js", "../../three/examples/jsm/misc/Gyroscope.js", "../../three/examples/jsm/misc/MD2Character.js", "../../three/examples/jsm/misc/MorphBlendMesh.js", "../../three/examples/jsm/misc/MD2CharacterComplex.js", "../../three/examples/jsm/misc/MorphAnimMesh.js", "../../three/examples/jsm/libs/potpack.module.js", "../../three/examples/jsm/misc/ProgressiveLightMap.js", "../../three/examples/jsm/misc/RollerCoaster.js", "../../three/examples/jsm/misc/Timer.js", "../../three/examples/jsm/misc/TubePainter.js", "../../three/examples/jsm/modifiers/CurveModifier.js", "../../three/examples/jsm/modifiers/EdgeSplitModifier.js", "../../three/examples/jsm/modifiers/SimplifyModifier.js", "../../three/examples/jsm/modifiers/TessellateModifier.js", "../../three/examples/jsm/objects/GroundedSkybox.js", "../../three/examples/jsm/objects/Lensflare.js", "../../three/examples/jsm/objects/MarchingCubes.js", "../../three/examples/jsm/objects/Reflector.js", "../../three/examples/jsm/objects/ReflectorForSSRPass.js", "../../three/examples/jsm/objects/Refractor.js", "../../three/examples/jsm/objects/ShadowMesh.js", "../../three/examples/jsm/objects/Sky.js", "../../three/examples/jsm/objects/Water.js", "../../three/examples/jsm/objects/Water2.js", "../../three/examples/jsm/physics/AmmoPhysics.js", "../../three/examples/jsm/physics/RapierPhysics.js", "../../three/examples/jsm/shaders/AfterimageShader.js", "../../three/examples/jsm/postprocessing/AfterimagePass.js", "../../three/examples/jsm/shaders/ConvolutionShader.js", "../../three/examples/jsm/postprocessing/BloomPass.js", "../../three/examples/jsm/shaders/BokehShader.js", "../../three/examples/jsm/postprocessing/BokehPass.js", "../../three/examples/jsm/postprocessing/ClearPass.js", "../../three/examples/jsm/postprocessing/CubeTexturePass.js", "../../three/examples/jsm/shaders/DotScreenShader.js", "../../three/examples/jsm/postprocessing/DotScreenPass.js", "../../three/examples/jsm/shaders/CopyShader.js", "../../three/examples/jsm/postprocessing/ShaderPass.js", "../../three/examples/jsm/postprocessing/MaskPass.js", "../../three/examples/jsm/postprocessing/EffectComposer.js", "../../three/examples/jsm/shaders/FilmShader.js", "../../three/examples/jsm/postprocessing/FilmPass.js", "../../three/examples/jsm/shaders/DigitalGlitch.js", "../../three/examples/jsm/postprocessing/GlitchPass.js", "../../three/examples/jsm/shaders/GTAOShader.js", "../../three/examples/jsm/shaders/PoissonDenoiseShader.js", "../../three/examples/jsm/postprocessing/GTAOPass.js", "../../three/examples/jsm/shaders/HalftoneShader.js", "../../three/examples/jsm/postprocessing/HalftonePass.js", "../../three/examples/jsm/postprocessing/LUTPass.js", "../../three/examples/jsm/postprocessing/OutlinePass.js", "../../three/examples/jsm/shaders/OutputShader.js", "../../three/examples/jsm/postprocessing/OutputPass.js", "../../three/examples/jsm/postprocessing/RenderPass.js", "../../three/examples/jsm/postprocessing/RenderPixelatedPass.js", "../../three/examples/jsm/shaders/SAOShader.js", "../../three/examples/jsm/shaders/DepthLimitedBlurShader.js", "../../three/examples/jsm/postprocessing/SAOPass.js", "../../three/examples/jsm/shaders/SMAAShader.js", "../../three/examples/jsm/postprocessing/SMAAPass.js", "../../three/examples/jsm/postprocessing/SSAARenderPass.js", "../../three/examples/jsm/shaders/SSAOShader.js", "../../three/examples/jsm/postprocessing/SSAOPass.js", "../../three/examples/jsm/shaders/SSRShader.js", "../../three/examples/jsm/postprocessing/SSRPass.js", "../../three/examples/jsm/postprocessing/SavePass.js", "../../three/examples/jsm/postprocessing/TAARenderPass.js", "../../three/examples/jsm/postprocessing/TexturePass.js", "../../three/examples/jsm/shaders/LuminosityHighPassShader.js", "../../three/examples/jsm/postprocessing/UnrealBloomPass.js", "../../three/examples/jsm/renderers/CSS2DRenderer.js", "../../three/examples/jsm/renderers/CSS3DRenderer.js", "../../three/examples/jsm/renderers/Projector.js", "../../three/examples/jsm/renderers/SVGRenderer.js", "../../three/examples/jsm/shaders/ACESFilmicToneMappingShader.js", "../../three/examples/jsm/shaders/BasicShader.js", "../../three/examples/jsm/shaders/BleachBypassShader.js", "../../three/examples/jsm/shaders/BlendShader.js", "../../three/examples/jsm/shaders/BrightnessContrastShader.js", "../../three/examples/jsm/shaders/ColorCorrectionShader.js", "../../three/examples/jsm/shaders/ColorifyShader.js", "../../three/examples/jsm/shaders/DOFMipMapShader.js", "../../three/examples/jsm/shaders/ExposureShader.js", "../../three/examples/jsm/shaders/FXAAShader.js", "../../three/examples/jsm/shaders/FocusShader.js", "../../three/examples/jsm/shaders/FreiChenShader.js", "../../three/examples/jsm/shaders/GammaCorrectionShader.js", "../../three/examples/jsm/shaders/GodRaysShader.js", "../../three/examples/jsm/shaders/HorizontalBlurShader.js", "../../three/examples/jsm/shaders/HorizontalTiltShiftShader.js", "../../three/examples/jsm/shaders/HueSaturationShader.js", "../../three/examples/jsm/shaders/KaleidoShader.js", "../../three/examples/jsm/shaders/LuminosityShader.js", "../../three/examples/jsm/shaders/MirrorShader.js", "../../three/examples/jsm/shaders/NormalMapShader.js", "../../three/examples/jsm/shaders/RGBShiftShader.js", "../../three/examples/jsm/shaders/SepiaShader.js", "../../three/examples/jsm/shaders/SobelOperatorShader.js", "../../three/examples/jsm/shaders/SubsurfaceScatteringShader.js", "../../three/examples/jsm/shaders/TechnicolorShader.js", "../../three/examples/jsm/shaders/ToonShader.js", "../../three/examples/jsm/shaders/TriangleBlurShader.js", "../../three/examples/jsm/shaders/UnpackDepthRGBAShader.js", "../../three/examples/jsm/shaders/VelocityShader.js", "../../three/examples/jsm/shaders/VerticalBlurShader.js", "../../three/examples/jsm/shaders/VerticalTiltShiftShader.js", "../../three/examples/jsm/shaders/VignetteShader.js", "../../three/examples/jsm/shaders/VolumeShader.js", "../../three/examples/jsm/shaders/WaterRefractionShader.js", "../../three/examples/jsm/textures/FlakesTexture.js", "../../three/examples/jsm/utils/CameraUtils.js", "../../three/examples/jsm/libs/stats.module.js", "../../three/examples/jsm/utils/GPUStatsPanel.js", "../../three/examples/jsm/utils/GeometryCompressionUtils.js", "../../three/examples/jsm/utils/PackedPhongMaterial.js", "../../three/examples/jsm/utils/GeometryUtils.js", "../../three/examples/jsm/utils/LDrawUtils.js", "../../three/examples/jsm/utils/SceneUtils.js", "../../three/examples/jsm/utils/ShadowMapViewer.js", "../../three/examples/jsm/utils/SkeletonUtils.js", "../../three/examples/jsm/utils/SortUtils.js", "../../three/examples/jsm/utils/UVsDebug.js", "../../three/examples/jsm/webxr/ARButton.js", "../../three/examples/jsm/webxr/XRHandMeshModel.js", "../../three/examples/jsm/webxr/OculusHandModel.js", "../../three/examples/jsm/webxr/OculusHandPointerModel.js", "../../three/examples/jsm/webxr/Text2D.js", "../../three/examples/jsm/webxr/VRButton.js", "../../three/examples/jsm/webxr/XRButton.js", "../../three/examples/jsm/libs/motion-controllers.module.js", "../../three/examples/jsm/webxr/XRControllerModelFactory.js", "../../three/examples/jsm/webxr/XREstimatedLight.js", "../../three/examples/jsm/webxr/XRHandPrimitiveModel.js", "../../three/examples/jsm/webxr/XRHandModelFactory.js", "../../three/examples/jsm/webxr/XRPlanes.js"], "sourcesContent": ["import {\n\tAnimationClip,\n\tBooleanKeyframeTrack,\n\tColorKeyframeTrack,\n\tNumberKeyframeTrack,\n\tVector3,\n\tVectorKeyframeTrack\n} from 'three';\n\nclass AnimationClipCreator {\n\n\tstatic CreateRotationAnimation( period, axis = 'x' ) {\n\n\t\tconst times = [ 0, period ], values = [ 0, 360 ];\n\n\t\tconst trackName = '.rotation[' + axis + ']';\n\n\t\tconst track = new NumberKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, period, [ track ] );\n\n\t}\n\n\tstatic CreateScaleAxisAnimation( period, axis = 'x' ) {\n\n\t\tconst times = [ 0, period ], values = [ 0, 1 ];\n\n\t\tconst trackName = '.scale[' + axis + ']';\n\n\t\tconst track = new NumberKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, period, [ track ] );\n\n\t}\n\n\tstatic CreateShakeAnimation( duration, shakeScale ) {\n\n\t\tconst times = [], values = [], tmp = new Vector3();\n\n\t\tfor ( let i = 0; i < duration * 10; i ++ ) {\n\n\t\t\ttimes.push( i / 10 );\n\n\t\t\ttmp.set( Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0 ).\n\t\t\t\tmultiply( shakeScale ).\n\t\t\t\ttoArray( values, values.length );\n\n\t\t}\n\n\t\tconst trackName = '.position';\n\n\t\tconst track = new VectorKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, duration, [ track ] );\n\n\t}\n\n\tstatic CreatePulsationAnimation( duration, pulseScale ) {\n\n\t\tconst times = [], values = [], tmp = new Vector3();\n\n\t\tfor ( let i = 0; i < duration * 10; i ++ ) {\n\n\t\t\ttimes.push( i / 10 );\n\n\t\t\tconst scaleFactor = Math.random() * pulseScale;\n\t\t\ttmp.set( scaleFactor, scaleFactor, scaleFactor ).\n\t\t\t\ttoArray( values, values.length );\n\n\t\t}\n\n\t\tconst trackName = '.scale';\n\n\t\tconst track = new VectorKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, duration, [ track ] );\n\n\t}\n\n\tstatic CreateVisibilityAnimation( duration ) {\n\n\t\tconst times = [ 0, duration / 2, duration ], values = [ true, false, true ];\n\n\t\tconst trackName = '.visible';\n\n\t\tconst track = new BooleanKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, duration, [ track ] );\n\n\t}\n\n\tstatic CreateMaterialColorAnimation( duration, colors ) {\n\n\t\tconst times = [], values = [],\n\t\t\ttimeStep = duration / colors.length;\n\n\t\tfor ( let i = 0; i < colors.length; i ++ ) {\n\n\t\t\ttimes.push( i * timeStep );\n\n\t\t\tconst color = colors[ i ];\n\t\t\tvalues.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\tconst trackName = '.material.color';\n\n\t\tconst track = new ColorKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, duration, [ track ] );\n\n\t}\n\n}\n\nexport { AnimationClipCreator };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tLine,\n\tLineBasicMaterial,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tQuaternion,\n\tSphereGeometry,\n\tVector3\n} from 'three';\n\nconst _q = new Quaternion();\nconst _targetPos = new Vector3();\nconst _targetVec = new Vector3();\nconst _effectorPos = new Vector3();\nconst _effectorVec = new Vector3();\nconst _linkPos = new Vector3();\nconst _invLinkQ = new Quaternion();\nconst _linkScale = new Vector3();\nconst _axis = new Vector3();\nconst _vector = new Vector3();\nconst _matrix = new Matrix4();\n\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n\n\t/**\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Array} iks\n\t */\n\tconstructor( mesh, iks = [] ) {\n\n\t\tthis.mesh = mesh;\n\t\tthis.iks = iks;\n\n\t\tthis._valid();\n\n\t}\n\n\t/**\n\t * Update all IK bones.\n\t *\n\t * @return {CCDIKSolver}\n\t */\n\tupdate() {\n\n\t\tconst iks = this.iks;\n\n\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\tthis.updateOne( iks[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Update one IK bone\n\t *\n\t * @param {Object} ik parameter\n\t * @return {CCDIKSolver}\n\t */\n\tupdateOne( ik ) {\n\n\t\tconst bones = this.mesh.skeleton.bones;\n\n\t\t// for reference overhead reduction in loop\n\t\tconst math = Math;\n\n\t\tconst effector = bones[ ik.effector ];\n\t\tconst target = bones[ ik.target ];\n\n\t\t// don't use getWorldPosition() here for the performance\n\t\t// because it calls updateMatrixWorld( true ) inside.\n\t\t_targetPos.setFromMatrixPosition( target.matrixWorld );\n\n\t\tconst links = ik.links;\n\t\tconst iteration = ik.iteration !== undefined ? ik.iteration : 1;\n\n\t\tfor ( let i = 0; i < iteration; i ++ ) {\n\n\t\t\tlet rotated = false;\n\n\t\t\tfor ( let j = 0, jl = links.length; j < jl; j ++ ) {\n\n\t\t\t\tconst link = bones[ links[ j ].index ];\n\n\t\t\t\t// skip this link and following links.\n\t\t\t\t// this skip is used for MMD performance optimization.\n\t\t\t\tif ( links[ j ].enabled === false ) break;\n\n\t\t\t\tconst limitation = links[ j ].limitation;\n\t\t\t\tconst rotationMin = links[ j ].rotationMin;\n\t\t\t\tconst rotationMax = links[ j ].rotationMax;\n\n\t\t\t\t// don't use getWorldPosition/Quaternion() here for the performance\n\t\t\t\t// because they call updateMatrixWorld( true ) inside.\n\t\t\t\tlink.matrixWorld.decompose( _linkPos, _invLinkQ, _linkScale );\n\t\t\t\t_invLinkQ.invert();\n\t\t\t\t_effectorPos.setFromMatrixPosition( effector.matrixWorld );\n\n\t\t\t\t// work in link world\n\t\t\t\t_effectorVec.subVectors( _effectorPos, _linkPos );\n\t\t\t\t_effectorVec.applyQuaternion( _invLinkQ );\n\t\t\t\t_effectorVec.normalize();\n\n\t\t\t\t_targetVec.subVectors( _targetPos, _linkPos );\n\t\t\t\t_targetVec.applyQuaternion( _invLinkQ );\n\t\t\t\t_targetVec.normalize();\n\n\t\t\t\tlet angle = _targetVec.dot( _effectorVec );\n\n\t\t\t\tif ( angle > 1.0 ) {\n\n\t\t\t\t\tangle = 1.0;\n\n\t\t\t\t} else if ( angle < - 1.0 ) {\n\n\t\t\t\t\tangle = - 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tangle = math.acos( angle );\n\n\t\t\t\t// skip if changing angle is too small to prevent vibration of bone\n\t\t\t\tif ( angle < 1e-5 ) continue;\n\n\t\t\t\tif ( ik.minAngle !== undefined && angle < ik.minAngle ) {\n\n\t\t\t\t\tangle = ik.minAngle;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ik.maxAngle !== undefined && angle > ik.maxAngle ) {\n\n\t\t\t\t\tangle = ik.maxAngle;\n\n\t\t\t\t}\n\n\t\t\t\t_axis.crossVectors( _effectorVec, _targetVec );\n\t\t\t\t_axis.normalize();\n\n\t\t\t\t_q.setFromAxisAngle( _axis, angle );\n\t\t\t\tlink.quaternion.multiply( _q );\n\n\t\t\t\t// TODO: re-consider the limitation specification\n\t\t\t\tif ( limitation !== undefined ) {\n\n\t\t\t\t\tlet c = link.quaternion.w;\n\n\t\t\t\t\tif ( c > 1.0 ) c = 1.0;\n\n\t\t\t\t\tconst c2 = math.sqrt( 1 - c * c );\n\t\t\t\t\tlink.quaternion.set( limitation.x * c2,\n\t\t\t\t\t limitation.y * c2,\n\t\t\t\t\t limitation.z * c2,\n\t\t\t\t\t c );\n\n\t\t\t\t}\n\n\t\t\t\tif ( rotationMin !== undefined ) {\n\n\t\t\t\t\tlink.rotation.setFromVector3( _vector.setFromEuler( link.rotation ).max( rotationMin ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( rotationMax !== undefined ) {\n\n\t\t\t\t\tlink.rotation.setFromVector3( _vector.setFromEuler( link.rotation ).min( rotationMax ) );\n\n\t\t\t\t}\n\n\t\t\t\tlink.updateMatrixWorld( true );\n\n\t\t\t\trotated = true;\n\n\t\t\t}\n\n\t\t\tif ( ! rotated ) break;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates Helper\n\t *\n\t * @param {number} sphereSize\n\t * @return {CCDIKHelper}\n\t */\n\tcreateHelper( sphereSize ) {\n\n\t\treturn new CCDIKHelper( this.mesh, this.iks, sphereSize );\n\n\t}\n\n\t// private methods\n\n\t_valid() {\n\n\t\tconst iks = this.iks;\n\t\tconst bones = this.mesh.skeleton.bones;\n\n\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\tconst ik = iks[ i ];\n\t\t\tconst effector = bones[ ik.effector ];\n\t\t\tconst links = ik.links;\n\t\t\tlet link0, link1;\n\n\t\t\tlink0 = effector;\n\n\t\t\tfor ( let j = 0, jl = links.length; j < jl; j ++ ) {\n\n\t\t\t\tlink1 = bones[ links[ j ].index ];\n\n\t\t\t\tif ( link0.parent !== link1 ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name );\n\n\t\t\t\t}\n\n\t\t\t\tlink0 = link1;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction getPosition( bone, matrixWorldInv ) {\n\n\treturn _vector\n\t\t.setFromMatrixPosition( bone.matrixWorld )\n\t\t.applyMatrix4( matrixWorldInv );\n\n}\n\nfunction setPositionOfBoneToAttributeArray( array, index, bone, matrixWorldInv ) {\n\n\tconst v = getPosition( bone, matrixWorldInv );\n\n\tarray[ index * 3 + 0 ] = v.x;\n\tarray[ index * 3 + 1 ] = v.y;\n\tarray[ index * 3 + 2 ] = v.z;\n\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array} iks\n * @param {number} sphereSize\n */\nclass CCDIKHelper extends Object3D {\n\n\tconstructor( mesh, iks = [], sphereSize = 0.25 ) {\n\n\t\tsuper();\n\n\t\tthis.root = mesh;\n\t\tthis.iks = iks;\n\n\t\tthis.matrix.copy( mesh.matrixWorld );\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.sphereGeometry = new SphereGeometry( sphereSize, 16, 8 );\n\n\t\tthis.targetSphereMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: new Color( 0xff8888 ),\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis.effectorSphereMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: new Color( 0x88ff88 ),\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis.linkSphereMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: new Color( 0x8888ff ),\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis.lineMaterial = new LineBasicMaterial( {\n\t\t\tcolor: new Color( 0xff0000 ),\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis._init();\n\n\t}\n\n\t/**\n\t * Updates IK bones visualization.\n\t */\n\tupdateMatrixWorld( force ) {\n\n\t\tconst mesh = this.root;\n\n\t\tif ( this.visible ) {\n\n\t\t\tlet offset = 0;\n\n\t\t\tconst iks = this.iks;\n\t\t\tconst bones = mesh.skeleton.bones;\n\n\t\t\t_matrix.copy( mesh.matrixWorld ).invert();\n\n\t\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\t\tconst ik = iks[ i ];\n\n\t\t\t\tconst targetBone = bones[ ik.target ];\n\t\t\t\tconst effectorBone = bones[ ik.effector ];\n\n\t\t\t\tconst targetMesh = this.children[ offset ++ ];\n\t\t\t\tconst effectorMesh = this.children[ offset ++ ];\n\n\t\t\t\ttargetMesh.position.copy( getPosition( targetBone, _matrix ) );\n\t\t\t\teffectorMesh.position.copy( getPosition( effectorBone, _matrix ) );\n\n\t\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst link = ik.links[ j ];\n\t\t\t\t\tconst linkBone = bones[ link.index ];\n\n\t\t\t\t\tconst linkMesh = this.children[ offset ++ ];\n\n\t\t\t\t\tlinkMesh.position.copy( getPosition( linkBone, _matrix ) );\n\n\t\t\t\t}\n\n\t\t\t\tconst line = this.children[ offset ++ ];\n\t\t\t\tconst array = line.geometry.attributes.position.array;\n\n\t\t\t\tsetPositionOfBoneToAttributeArray( array, 0, targetBone, _matrix );\n\t\t\t\tsetPositionOfBoneToAttributeArray( array, 1, effectorBone, _matrix );\n\n\t\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst link = ik.links[ j ];\n\t\t\t\t\tconst linkBone = bones[ link.index ];\n\t\t\t\t\tsetPositionOfBoneToAttributeArray( array, j + 2, linkBone, _matrix );\n\n\t\t\t\t}\n\n\t\t\t\tline.geometry.attributes.position.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.matrix.copy( mesh.matrixWorld );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.sphereGeometry.dispose();\n\n\t\tthis.targetSphereMaterial.dispose();\n\t\tthis.effectorSphereMaterial.dispose();\n\t\tthis.linkSphereMaterial.dispose();\n\t\tthis.lineMaterial.dispose();\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tif ( child.isLine ) child.geometry.dispose();\n\n\t\t}\n\n\t}\n\n\t// private method\n\n\t_init() {\n\n\t\tconst scope = this;\n\t\tconst iks = this.iks;\n\n\t\tfunction createLineGeometry( ik ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst vertices = new Float32Array( ( 2 + ik.links.length ) * 3 );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction createTargetMesh() {\n\n\t\t\treturn new Mesh( scope.sphereGeometry, scope.targetSphereMaterial );\n\n\t\t}\n\n\t\tfunction createEffectorMesh() {\n\n\t\t\treturn new Mesh( scope.sphereGeometry, scope.effectorSphereMaterial );\n\n\t\t}\n\n\t\tfunction createLinkMesh() {\n\n\t\t\treturn new Mesh( scope.sphereGeometry, scope.linkSphereMaterial );\n\n\t\t}\n\n\t\tfunction createLine( ik ) {\n\n\t\t\treturn new Line( createLineGeometry( ik ), scope.lineMaterial );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\tconst ik = iks[ i ];\n\n\t\t\tthis.add( createTargetMesh() );\n\t\t\tthis.add( createEffectorMesh() );\n\n\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.add( createLinkMesh() );\n\n\t\t\t}\n\n\t\t\tthis.add( createLine( ik ) );\n\n\t\t}\n\n\t}\n\n}\n\nexport { CCDIKSolver, CCDIKHelper };\n", "import {\n\tBone,\n\tBoxGeometry,\n\tCapsuleGeometry,\n\tColor,\n\tEuler,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tQuaternion,\n\tSphereGeometry,\n\tVector3\n} from 'three';\n\n/**\n * Dependencies\n * - Ammo.js https://github.com/kripken/ammo.js\n *\n * MMDPhysics calculates physics with Ammo(Bullet based JavaScript Physics engine)\n * for MMD model loaded by MMDLoader.\n *\n * TODO\n * - Physics in Worker\n */\n\n/* global Ammo */\n\nclass MMDPhysics {\n\n\t/**\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Array} rigidBodyParams\n\t * @param {Array} (optional) constraintParams\n\t * @param {Object} params - (optional)\n\t * @param {Number} params.unitStep - Default is 1 / 65.\n\t * @param {Integer} params.maxStepNum - Default is 3.\n\t * @param {Vector3} params.gravity - Default is ( 0, - 9.8 * 10, 0 )\n\t */\n\tconstructor( mesh, rigidBodyParams, constraintParams = [], params = {} ) {\n\n\t\tif ( typeof Ammo === 'undefined' ) {\n\n\t\t\tthrow new Error( 'THREE.MMDPhysics: Import ammo.js https://github.com/kripken/ammo.js' );\n\n\t\t}\n\n\t\tthis.manager = new ResourceManager();\n\n\t\tthis.mesh = mesh;\n\n\t\t/*\n\t\t * I don't know why but 1/60 unitStep easily breaks models\n\t\t * so I set it 1/65 so far.\n\t\t * Don't set too small unitStep because\n\t\t * the smaller unitStep can make the performance worse.\n\t\t */\n\t\tthis.unitStep = ( params.unitStep !== undefined ) ? params.unitStep : 1 / 65;\n\t\tthis.maxStepNum = ( params.maxStepNum !== undefined ) ? params.maxStepNum : 3;\n\t\tthis.gravity = new Vector3( 0, - 9.8 * 10, 0 );\n\n\t\tif ( params.gravity !== undefined ) this.gravity.copy( params.gravity );\n\n\t\tthis.world = params.world !== undefined ? params.world : null; // experimental\n\n\t\tthis.bodies = [];\n\t\tthis.constraints = [];\n\n\t\tthis._init( mesh, rigidBodyParams, constraintParams );\n\n\t}\n\n\t/**\n\t * Advances Physics calculation and updates bones.\n\t *\n\t * @param {Number} delta - time in second\n\t * @return {MMDPhysics}\n\t */\n\tupdate( delta ) {\n\n\t\tconst manager = this.manager;\n\t\tconst mesh = this.mesh;\n\n\t\t// rigid bodies and constrains are for\n\t\t// mesh's world scale (1, 1, 1).\n\t\t// Convert to (1, 1, 1) if it isn't.\n\n\t\tlet isNonDefaultScale = false;\n\n\t\tconst position = manager.allocThreeVector3();\n\t\tconst quaternion = manager.allocThreeQuaternion();\n\t\tconst scale = manager.allocThreeVector3();\n\n\t\tmesh.matrixWorld.decompose( position, quaternion, scale );\n\n\t\tif ( scale.x !== 1 || scale.y !== 1 || scale.z !== 1 ) {\n\n\t\t\tisNonDefaultScale = true;\n\n\t\t}\n\n\t\tlet parent;\n\n\t\tif ( isNonDefaultScale ) {\n\n\t\t\tparent = mesh.parent;\n\n\t\t\tif ( parent !== null ) mesh.parent = null;\n\n\t\t\tscale.copy( this.mesh.scale );\n\n\t\t\tmesh.scale.set( 1, 1, 1 );\n\t\t\tmesh.updateMatrixWorld( true );\n\n\t\t}\n\n\t\t// calculate physics and update bones\n\n\t\tthis._updateRigidBodies();\n\t\tthis._stepSimulation( delta );\n\t\tthis._updateBones();\n\n\t\t// restore mesh if converted above\n\n\t\tif ( isNonDefaultScale ) {\n\n\t\t\tif ( parent !== null ) mesh.parent = parent;\n\n\t\t\tmesh.scale.copy( scale );\n\n\t\t}\n\n\t\tmanager.freeThreeVector3( scale );\n\t\tmanager.freeThreeQuaternion( quaternion );\n\t\tmanager.freeThreeVector3( position );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Resets rigid bodies transorm to current bone's.\n\t *\n\t * @return {MMDPhysics}\n\t */\n\treset() {\n\n\t\tfor ( let i = 0, il = this.bodies.length; i < il; i ++ ) {\n\n\t\t\tthis.bodies[ i ].reset();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Warm ups Rigid bodies. Calculates cycles steps.\n\t *\n\t * @param {Integer} cycles\n\t * @return {MMDPhysics}\n\t */\n\twarmup( cycles ) {\n\n\t\tfor ( let i = 0; i < cycles; i ++ ) {\n\n\t\t\tthis.update( 1 / 60 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets gravity.\n\t *\n\t * @param {Vector3} gravity\n\t * @return {MMDPhysicsHelper}\n\t */\n\tsetGravity( gravity ) {\n\n\t\tthis.world.setGravity( new Ammo.btVector3( gravity.x, gravity.y, gravity.z ) );\n\t\tthis.gravity.copy( gravity );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates MMDPhysicsHelper\n\t *\n\t * @return {MMDPhysicsHelper}\n\t */\n\tcreateHelper() {\n\n\t\treturn new MMDPhysicsHelper( this.mesh, this );\n\n\t}\n\n\t// private methods\n\n\t_init( mesh, rigidBodyParams, constraintParams ) {\n\n\t\tconst manager = this.manager;\n\n\t\t// rigid body/constraint parameters are for\n\t\t// mesh's default world transform as position(0, 0, 0),\n\t\t// quaternion(0, 0, 0, 1) and scale(0, 0, 0)\n\n\t\tconst parent = mesh.parent;\n\n\t\tif ( parent !== null ) mesh.parent = null;\n\n\t\tconst currentPosition = manager.allocThreeVector3();\n\t\tconst currentQuaternion = manager.allocThreeQuaternion();\n\t\tconst currentScale = manager.allocThreeVector3();\n\n\t\tcurrentPosition.copy( mesh.position );\n\t\tcurrentQuaternion.copy( mesh.quaternion );\n\t\tcurrentScale.copy( mesh.scale );\n\n\t\tmesh.position.set( 0, 0, 0 );\n\t\tmesh.quaternion.set( 0, 0, 0, 1 );\n\t\tmesh.scale.set( 1, 1, 1 );\n\n\t\tmesh.updateMatrixWorld( true );\n\n\t\tif ( this.world === null ) {\n\n\t\t\tthis.world = this._createWorld();\n\t\t\tthis.setGravity( this.gravity );\n\n\t\t}\n\n\t\tthis._initRigidBodies( rigidBodyParams );\n\t\tthis._initConstraints( constraintParams );\n\n\t\tif ( parent !== null ) mesh.parent = parent;\n\n\t\tmesh.position.copy( currentPosition );\n\t\tmesh.quaternion.copy( currentQuaternion );\n\t\tmesh.scale.copy( currentScale );\n\n\t\tmesh.updateMatrixWorld( true );\n\n\t\tthis.reset();\n\n\t\tmanager.freeThreeVector3( currentPosition );\n\t\tmanager.freeThreeQuaternion( currentQuaternion );\n\t\tmanager.freeThreeVector3( currentScale );\n\n\t}\n\n\t_createWorld() {\n\n\t\tconst config = new Ammo.btDefaultCollisionConfiguration();\n\t\tconst dispatcher = new Ammo.btCollisionDispatcher( config );\n\t\tconst cache = new Ammo.btDbvtBroadphase();\n\t\tconst solver = new Ammo.btSequentialImpulseConstraintSolver();\n\t\tconst world = new Ammo.btDiscreteDynamicsWorld( dispatcher, cache, solver, config );\n\t\treturn world;\n\n\t}\n\n\t_initRigidBodies( rigidBodies ) {\n\n\t\tfor ( let i = 0, il = rigidBodies.length; i < il; i ++ ) {\n\n\t\t\tthis.bodies.push( new RigidBody(\n\t\t\t\tthis.mesh, this.world, rigidBodies[ i ], this.manager ) );\n\n\t\t}\n\n\t}\n\n\t_initConstraints( constraints ) {\n\n\t\tfor ( let i = 0, il = constraints.length; i < il; i ++ ) {\n\n\t\t\tconst params = constraints[ i ];\n\t\t\tconst bodyA = this.bodies[ params.rigidBodyIndex1 ];\n\t\t\tconst bodyB = this.bodies[ params.rigidBodyIndex2 ];\n\t\t\tthis.constraints.push( new Constraint( this.mesh, this.world, bodyA, bodyB, params, this.manager ) );\n\n\t\t}\n\n\t}\n\n\t_stepSimulation( delta ) {\n\n\t\tconst unitStep = this.unitStep;\n\t\tlet stepTime = delta;\n\t\tlet maxStepNum = ( ( delta / unitStep ) | 0 ) + 1;\n\n\t\tif ( stepTime < unitStep ) {\n\n\t\t\tstepTime = unitStep;\n\t\t\tmaxStepNum = 1;\n\n\t\t}\n\n\t\tif ( maxStepNum > this.maxStepNum ) {\n\n\t\t\tmaxStepNum = this.maxStepNum;\n\n\t\t}\n\n\t\tthis.world.stepSimulation( stepTime, maxStepNum, unitStep );\n\n\t}\n\n\t_updateRigidBodies() {\n\n\t\tfor ( let i = 0, il = this.bodies.length; i < il; i ++ ) {\n\n\t\t\tthis.bodies[ i ].updateFromBone();\n\n\t\t}\n\n\t}\n\n\t_updateBones() {\n\n\t\tfor ( let i = 0, il = this.bodies.length; i < il; i ++ ) {\n\n\t\t\tthis.bodies[ i ].updateBone();\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * This manager's responsibilies are\n *\n * 1. manage Ammo.js and Three.js object resources and\n * improve the performance and the memory consumption by\n * reusing objects.\n *\n * 2. provide simple Ammo object operations.\n */\nclass ResourceManager {\n\n\tconstructor() {\n\n\t\t// for Three.js\n\t\tthis.threeVector3s = [];\n\t\tthis.threeMatrix4s = [];\n\t\tthis.threeQuaternions = [];\n\t\tthis.threeEulers = [];\n\n\t\t// for Ammo.js\n\t\tthis.transforms = [];\n\t\tthis.quaternions = [];\n\t\tthis.vector3s = [];\n\n\t}\n\n\tallocThreeVector3() {\n\n\t\treturn ( this.threeVector3s.length > 0 )\n\t\t\t? this.threeVector3s.pop()\n\t\t\t: new Vector3();\n\n\t}\n\n\tfreeThreeVector3( v ) {\n\n\t\tthis.threeVector3s.push( v );\n\n\t}\n\n\tallocThreeMatrix4() {\n\n\t\treturn ( this.threeMatrix4s.length > 0 )\n\t\t\t? this.threeMatrix4s.pop()\n\t\t\t: new Matrix4();\n\n\t}\n\n\tfreeThreeMatrix4( m ) {\n\n\t\tthis.threeMatrix4s.push( m );\n\n\t}\n\n\tallocThreeQuaternion() {\n\n\t\treturn ( this.threeQuaternions.length > 0 )\n\t\t\t? this.threeQuaternions.pop()\n\t\t\t: new Quaternion();\n\n\t}\n\n\tfreeThreeQuaternion( q ) {\n\n\t\tthis.threeQuaternions.push( q );\n\n\t}\n\n\tallocThreeEuler() {\n\n\t\treturn ( this.threeEulers.length > 0 )\n\t\t\t? this.threeEulers.pop()\n\t\t\t: new Euler();\n\n\t}\n\n\tfreeThreeEuler( e ) {\n\n\t\tthis.threeEulers.push( e );\n\n\t}\n\n\tallocTransform() {\n\n\t\treturn ( this.transforms.length > 0 )\n\t\t\t? this.transforms.pop()\n\t\t\t: new Ammo.btTransform();\n\n\t}\n\n\tfreeTransform( t ) {\n\n\t\tthis.transforms.push( t );\n\n\t}\n\n\tallocQuaternion() {\n\n\t\treturn ( this.quaternions.length > 0 )\n\t\t\t? this.quaternions.pop()\n\t\t\t: new Ammo.btQuaternion();\n\n\t}\n\n\tfreeQuaternion( q ) {\n\n\t\tthis.quaternions.push( q );\n\n\t}\n\n\tallocVector3() {\n\n\t\treturn ( this.vector3s.length > 0 )\n\t\t\t? this.vector3s.pop()\n\t\t\t: new Ammo.btVector3();\n\n\t}\n\n\tfreeVector3( v ) {\n\n\t\tthis.vector3s.push( v );\n\n\t}\n\n\tsetIdentity( t ) {\n\n\t\tt.setIdentity();\n\n\t}\n\n\tgetBasis( t ) {\n\n\t\tvar q = this.allocQuaternion();\n\t\tt.getBasis().getRotation( q );\n\t\treturn q;\n\n\t}\n\n\tgetBasisAsMatrix3( t ) {\n\n\t\tvar q = this.getBasis( t );\n\t\tvar m = this.quaternionToMatrix3( q );\n\t\tthis.freeQuaternion( q );\n\t\treturn m;\n\n\t}\n\n\tgetOrigin( t ) {\n\n\t\treturn t.getOrigin();\n\n\t}\n\n\tsetOrigin( t, v ) {\n\n\t\tt.getOrigin().setValue( v.x(), v.y(), v.z() );\n\n\t}\n\n\tcopyOrigin( t1, t2 ) {\n\n\t\tvar o = t2.getOrigin();\n\t\tthis.setOrigin( t1, o );\n\n\t}\n\n\tsetBasis( t, q ) {\n\n\t\tt.setRotation( q );\n\n\t}\n\n\tsetBasisFromMatrix3( t, m ) {\n\n\t\tvar q = this.matrix3ToQuaternion( m );\n\t\tthis.setBasis( t, q );\n\t\tthis.freeQuaternion( q );\n\n\t}\n\n\tsetOriginFromArray3( t, a ) {\n\n\t\tt.getOrigin().setValue( a[ 0 ], a[ 1 ], a[ 2 ] );\n\n\t}\n\n\tsetOriginFromThreeVector3( t, v ) {\n\n\t\tt.getOrigin().setValue( v.x, v.y, v.z );\n\n\t}\n\n\tsetBasisFromArray3( t, a ) {\n\n\t\tvar thQ = this.allocThreeQuaternion();\n\t\tvar thE = this.allocThreeEuler();\n\t\tthE.set( a[ 0 ], a[ 1 ], a[ 2 ] );\n\t\tthis.setBasisFromThreeQuaternion( t, thQ.setFromEuler( thE ) );\n\n\t\tthis.freeThreeEuler( thE );\n\t\tthis.freeThreeQuaternion( thQ );\n\n\t}\n\n\tsetBasisFromThreeQuaternion( t, a ) {\n\n\t\tvar q = this.allocQuaternion();\n\n\t\tq.setX( a.x );\n\t\tq.setY( a.y );\n\t\tq.setZ( a.z );\n\t\tq.setW( a.w );\n\t\tthis.setBasis( t, q );\n\n\t\tthis.freeQuaternion( q );\n\n\t}\n\n\tmultiplyTransforms( t1, t2 ) {\n\n\t\tvar t = this.allocTransform();\n\t\tthis.setIdentity( t );\n\n\t\tvar m1 = this.getBasisAsMatrix3( t1 );\n\t\tvar m2 = this.getBasisAsMatrix3( t2 );\n\n\t\tvar o1 = this.getOrigin( t1 );\n\t\tvar o2 = this.getOrigin( t2 );\n\n\t\tvar v1 = this.multiplyMatrix3ByVector3( m1, o2 );\n\t\tvar v2 = this.addVector3( v1, o1 );\n\t\tthis.setOrigin( t, v2 );\n\n\t\tvar m3 = this.multiplyMatrices3( m1, m2 );\n\t\tthis.setBasisFromMatrix3( t, m3 );\n\n\t\tthis.freeVector3( v1 );\n\t\tthis.freeVector3( v2 );\n\n\t\treturn t;\n\n\t}\n\n\tinverseTransform( t ) {\n\n\t\tvar t2 = this.allocTransform();\n\n\t\tvar m1 = this.getBasisAsMatrix3( t );\n\t\tvar o = this.getOrigin( t );\n\n\t\tvar m2 = this.transposeMatrix3( m1 );\n\t\tvar v1 = this.negativeVector3( o );\n\t\tvar v2 = this.multiplyMatrix3ByVector3( m2, v1 );\n\n\t\tthis.setOrigin( t2, v2 );\n\t\tthis.setBasisFromMatrix3( t2, m2 );\n\n\t\tthis.freeVector3( v1 );\n\t\tthis.freeVector3( v2 );\n\n\t\treturn t2;\n\n\t}\n\n\tmultiplyMatrices3( m1, m2 ) {\n\n\t\tvar m3 = [];\n\n\t\tvar v10 = this.rowOfMatrix3( m1, 0 );\n\t\tvar v11 = this.rowOfMatrix3( m1, 1 );\n\t\tvar v12 = this.rowOfMatrix3( m1, 2 );\n\n\t\tvar v20 = this.columnOfMatrix3( m2, 0 );\n\t\tvar v21 = this.columnOfMatrix3( m2, 1 );\n\t\tvar v22 = this.columnOfMatrix3( m2, 2 );\n\n\t\tm3[ 0 ] = this.dotVectors3( v10, v20 );\n\t\tm3[ 1 ] = this.dotVectors3( v10, v21 );\n\t\tm3[ 2 ] = this.dotVectors3( v10, v22 );\n\t\tm3[ 3 ] = this.dotVectors3( v11, v20 );\n\t\tm3[ 4 ] = this.dotVectors3( v11, v21 );\n\t\tm3[ 5 ] = this.dotVectors3( v11, v22 );\n\t\tm3[ 6 ] = this.dotVectors3( v12, v20 );\n\t\tm3[ 7 ] = this.dotVectors3( v12, v21 );\n\t\tm3[ 8 ] = this.dotVectors3( v12, v22 );\n\n\t\tthis.freeVector3( v10 );\n\t\tthis.freeVector3( v11 );\n\t\tthis.freeVector3( v12 );\n\t\tthis.freeVector3( v20 );\n\t\tthis.freeVector3( v21 );\n\t\tthis.freeVector3( v22 );\n\n\t\treturn m3;\n\n\t}\n\n\taddVector3( v1, v2 ) {\n\n\t\tvar v = this.allocVector3();\n\t\tv.setValue( v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z() );\n\t\treturn v;\n\n\t}\n\n\tdotVectors3( v1, v2 ) {\n\n\t\treturn v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z();\n\n\t}\n\n\trowOfMatrix3( m, i ) {\n\n\t\tvar v = this.allocVector3();\n\t\tv.setValue( m[ i * 3 + 0 ], m[ i * 3 + 1 ], m[ i * 3 + 2 ] );\n\t\treturn v;\n\n\t}\n\n\tcolumnOfMatrix3( m, i ) {\n\n\t\tvar v = this.allocVector3();\n\t\tv.setValue( m[ i + 0 ], m[ i + 3 ], m[ i + 6 ] );\n\t\treturn v;\n\n\t}\n\n\tnegativeVector3( v ) {\n\n\t\tvar v2 = this.allocVector3();\n\t\tv2.setValue( - v.x(), - v.y(), - v.z() );\n\t\treturn v2;\n\n\t}\n\n\tmultiplyMatrix3ByVector3( m, v ) {\n\n\t\tvar v4 = this.allocVector3();\n\n\t\tvar v0 = this.rowOfMatrix3( m, 0 );\n\t\tvar v1 = this.rowOfMatrix3( m, 1 );\n\t\tvar v2 = this.rowOfMatrix3( m, 2 );\n\t\tvar x = this.dotVectors3( v0, v );\n\t\tvar y = this.dotVectors3( v1, v );\n\t\tvar z = this.dotVectors3( v2, v );\n\n\t\tv4.setValue( x, y, z );\n\n\t\tthis.freeVector3( v0 );\n\t\tthis.freeVector3( v1 );\n\t\tthis.freeVector3( v2 );\n\n\t\treturn v4;\n\n\t}\n\n\ttransposeMatrix3( m ) {\n\n\t\tvar m2 = [];\n\t\tm2[ 0 ] = m[ 0 ];\n\t\tm2[ 1 ] = m[ 3 ];\n\t\tm2[ 2 ] = m[ 6 ];\n\t\tm2[ 3 ] = m[ 1 ];\n\t\tm2[ 4 ] = m[ 4 ];\n\t\tm2[ 5 ] = m[ 7 ];\n\t\tm2[ 6 ] = m[ 2 ];\n\t\tm2[ 7 ] = m[ 5 ];\n\t\tm2[ 8 ] = m[ 8 ];\n\t\treturn m2;\n\n\t}\n\n\tquaternionToMatrix3( q ) {\n\n\t\tvar m = [];\n\n\t\tvar x = q.x();\n\t\tvar y = q.y();\n\t\tvar z = q.z();\n\t\tvar w = q.w();\n\n\t\tvar xx = x * x;\n\t\tvar yy = y * y;\n\t\tvar zz = z * z;\n\n\t\tvar xy = x * y;\n\t\tvar yz = y * z;\n\t\tvar zx = z * x;\n\n\t\tvar xw = x * w;\n\t\tvar yw = y * w;\n\t\tvar zw = z * w;\n\n\t\tm[ 0 ] = 1 - 2 * ( yy + zz );\n\t\tm[ 1 ] = 2 * ( xy - zw );\n\t\tm[ 2 ] = 2 * ( zx + yw );\n\t\tm[ 3 ] = 2 * ( xy + zw );\n\t\tm[ 4 ] = 1 - 2 * ( zz + xx );\n\t\tm[ 5 ] = 2 * ( yz - xw );\n\t\tm[ 6 ] = 2 * ( zx - yw );\n\t\tm[ 7 ] = 2 * ( yz + xw );\n\t\tm[ 8 ] = 1 - 2 * ( xx + yy );\n\n\t\treturn m;\n\n\t}\n\n\tmatrix3ToQuaternion( m ) {\n\n\t\tvar t = m[ 0 ] + m[ 4 ] + m[ 8 ];\n\t\tvar s, x, y, z, w;\n\n\t\tif ( t > 0 ) {\n\n\t\t\ts = Math.sqrt( t + 1.0 ) * 2;\n\t\t\tw = 0.25 * s;\n\t\t\tx = ( m[ 7 ] - m[ 5 ] ) / s;\n\t\t\ty = ( m[ 2 ] - m[ 6 ] ) / s;\n\t\t\tz = ( m[ 3 ] - m[ 1 ] ) / s;\n\n\t\t} else if ( ( m[ 0 ] > m[ 4 ] ) && ( m[ 0 ] > m[ 8 ] ) ) {\n\n\t\t\ts = Math.sqrt( 1.0 + m[ 0 ] - m[ 4 ] - m[ 8 ] ) * 2;\n\t\t\tw = ( m[ 7 ] - m[ 5 ] ) / s;\n\t\t\tx = 0.25 * s;\n\t\t\ty = ( m[ 1 ] + m[ 3 ] ) / s;\n\t\t\tz = ( m[ 2 ] + m[ 6 ] ) / s;\n\n\t\t} else if ( m[ 4 ] > m[ 8 ] ) {\n\n\t\t\ts = Math.sqrt( 1.0 + m[ 4 ] - m[ 0 ] - m[ 8 ] ) * 2;\n\t\t\tw = ( m[ 2 ] - m[ 6 ] ) / s;\n\t\t\tx = ( m[ 1 ] + m[ 3 ] ) / s;\n\t\t\ty = 0.25 * s;\n\t\t\tz = ( m[ 5 ] + m[ 7 ] ) / s;\n\n\t\t} else {\n\n\t\t\ts = Math.sqrt( 1.0 + m[ 8 ] - m[ 0 ] - m[ 4 ] ) * 2;\n\t\t\tw = ( m[ 3 ] - m[ 1 ] ) / s;\n\t\t\tx = ( m[ 2 ] + m[ 6 ] ) / s;\n\t\t\ty = ( m[ 5 ] + m[ 7 ] ) / s;\n\t\t\tz = 0.25 * s;\n\n\t\t}\n\n\t\tvar q = this.allocQuaternion();\n\t\tq.setX( x );\n\t\tq.setY( y );\n\t\tq.setZ( z );\n\t\tq.setW( w );\n\t\treturn q;\n\n\t}\n\n}\n\n/**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Ammo.btDiscreteDynamicsWorld} world\n * @param {Object} params\n * @param {ResourceManager} manager\n */\nclass RigidBody {\n\n\tconstructor( mesh, world, params, manager ) {\n\n\t\tthis.mesh = mesh;\n\t\tthis.world = world;\n\t\tthis.params = params;\n\t\tthis.manager = manager;\n\n\t\tthis.body = null;\n\t\tthis.bone = null;\n\t\tthis.boneOffsetForm = null;\n\t\tthis.boneOffsetFormInverse = null;\n\n\t\tthis._init();\n\n\t}\n\n\t/**\n\t * Resets rigid body transform to the current bone's.\n\t *\n\t * @return {RigidBody}\n\t */\n\treset() {\n\n\t\tthis._setTransformFromBone();\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Updates rigid body's transform from the current bone.\n\t *\n\t * @return {RidigBody}\n\t */\n\tupdateFromBone() {\n\n\t\tif ( this.params.boneIndex !== - 1 && this.params.type === 0 ) {\n\n\t\t\tthis._setTransformFromBone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Updates bone from the current ridid body's transform.\n\t *\n\t * @return {RidigBody}\n\t */\n\tupdateBone() {\n\n\t\tif ( this.params.type === 0 || this.params.boneIndex === - 1 ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis._updateBoneRotation();\n\n\t\tif ( this.params.type === 1 ) {\n\n\t\t\tthis._updateBonePosition();\n\n\t\t}\n\n\t\tthis.bone.updateMatrixWorld( true );\n\n\t\tif ( this.params.type === 2 ) {\n\n\t\t\tthis._setPositionFromBone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// private methods\n\n\t_init() {\n\n\t\tfunction generateShape( p ) {\n\n\t\t\tswitch ( p.shapeType ) {\n\n\t\t\t\tcase 0:\n\t\t\t\t\treturn new Ammo.btSphereShape( p.width );\n\n\t\t\t\tcase 1:\n\t\t\t\t\treturn new Ammo.btBoxShape( new Ammo.btVector3( p.width, p.height, p.depth ) );\n\n\t\t\t\tcase 2:\n\t\t\t\t\treturn new Ammo.btCapsuleShape( p.width, p.height );\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'unknown shape type ' + p.shapeType );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst manager = this.manager;\n\t\tconst params = this.params;\n\t\tconst bones = this.mesh.skeleton.bones;\n\t\tconst bone = ( params.boneIndex === - 1 )\n\t\t\t? new Bone()\n\t\t\t: bones[ params.boneIndex ];\n\n\t\tconst shape = generateShape( params );\n\t\tconst weight = ( params.type === 0 ) ? 0 : params.weight;\n\t\tconst localInertia = manager.allocVector3();\n\t\tlocalInertia.setValue( 0, 0, 0 );\n\n\t\tif ( weight !== 0 ) {\n\n\t\t\tshape.calculateLocalInertia( weight, localInertia );\n\n\t\t}\n\n\t\tconst boneOffsetForm = manager.allocTransform();\n\t\tmanager.setIdentity( boneOffsetForm );\n\t\tmanager.setOriginFromArray3( boneOffsetForm, params.position );\n\t\tmanager.setBasisFromArray3( boneOffsetForm, params.rotation );\n\n\t\tconst vector = manager.allocThreeVector3();\n\t\tconst boneForm = manager.allocTransform();\n\t\tmanager.setIdentity( boneForm );\n\t\tmanager.setOriginFromThreeVector3( boneForm, bone.getWorldPosition( vector ) );\n\n\t\tconst form = manager.multiplyTransforms( boneForm, boneOffsetForm );\n\t\tconst state = new Ammo.btDefaultMotionState( form );\n\n\t\tconst info = new Ammo.btRigidBodyConstructionInfo( weight, state, shape, localInertia );\n\t\tinfo.set_m_friction( params.friction );\n\t\tinfo.set_m_restitution( params.restitution );\n\n\t\tconst body = new Ammo.btRigidBody( info );\n\n\t\tif ( params.type === 0 ) {\n\n\t\t\tbody.setCollisionFlags( body.getCollisionFlags() | 2 );\n\n\t\t\t/*\n\t\t\t * It'd be better to comment out this line though in general I should call this method\n\t\t\t * because I'm not sure why but physics will be more like MMD's\n\t\t\t * if I comment out.\n\t\t\t */\n\t\t\tbody.setActivationState( 4 );\n\n\t\t}\n\n\t\tbody.setDamping( params.positionDamping, params.rotationDamping );\n\t\tbody.setSleepingThresholds( 0, 0 );\n\n\t\tthis.world.addRigidBody( body, 1 << params.groupIndex, params.groupTarget );\n\n\t\tthis.body = body;\n\t\tthis.bone = bone;\n\t\tthis.boneOffsetForm = boneOffsetForm;\n\t\tthis.boneOffsetFormInverse = manager.inverseTransform( boneOffsetForm );\n\n\t\tmanager.freeVector3( localInertia );\n\t\tmanager.freeTransform( form );\n\t\tmanager.freeTransform( boneForm );\n\t\tmanager.freeThreeVector3( vector );\n\n\t}\n\n\t_getBoneTransform() {\n\n\t\tconst manager = this.manager;\n\t\tconst p = manager.allocThreeVector3();\n\t\tconst q = manager.allocThreeQuaternion();\n\t\tconst s = manager.allocThreeVector3();\n\n\t\tthis.bone.matrixWorld.decompose( p, q, s );\n\n\t\tconst tr = manager.allocTransform();\n\t\tmanager.setOriginFromThreeVector3( tr, p );\n\t\tmanager.setBasisFromThreeQuaternion( tr, q );\n\n\t\tconst form = manager.multiplyTransforms( tr, this.boneOffsetForm );\n\n\t\tmanager.freeTransform( tr );\n\t\tmanager.freeThreeVector3( s );\n\t\tmanager.freeThreeQuaternion( q );\n\t\tmanager.freeThreeVector3( p );\n\n\t\treturn form;\n\n\t}\n\n\t_getWorldTransformForBone() {\n\n\t\tconst manager = this.manager;\n\t\tconst tr = this.body.getCenterOfMassTransform();\n\t\treturn manager.multiplyTransforms( tr, this.boneOffsetFormInverse );\n\n\t}\n\n\t_setTransformFromBone() {\n\n\t\tconst manager = this.manager;\n\t\tconst form = this._getBoneTransform();\n\n\t\t// TODO: check the most appropriate way to set\n\t\t//this.body.setWorldTransform( form );\n\t\tthis.body.setCenterOfMassTransform( form );\n\t\tthis.body.getMotionState().setWorldTransform( form );\n\n\t\tmanager.freeTransform( form );\n\n\t}\n\n\t_setPositionFromBone() {\n\n\t\tconst manager = this.manager;\n\t\tconst form = this._getBoneTransform();\n\n\t\tconst tr = manager.allocTransform();\n\t\tthis.body.getMotionState().getWorldTransform( tr );\n\t\tmanager.copyOrigin( tr, form );\n\n\t\t// TODO: check the most appropriate way to set\n\t\t//this.body.setWorldTransform( tr );\n\t\tthis.body.setCenterOfMassTransform( tr );\n\t\tthis.body.getMotionState().setWorldTransform( tr );\n\n\t\tmanager.freeTransform( tr );\n\t\tmanager.freeTransform( form );\n\n\t}\n\n\t_updateBoneRotation() {\n\n\t\tconst manager = this.manager;\n\n\t\tconst tr = this._getWorldTransformForBone();\n\t\tconst q = manager.getBasis( tr );\n\n\t\tconst thQ = manager.allocThreeQuaternion();\n\t\tconst thQ2 = manager.allocThreeQuaternion();\n\t\tconst thQ3 = manager.allocThreeQuaternion();\n\n\t\tthQ.set( q.x(), q.y(), q.z(), q.w() );\n\t\tthQ2.setFromRotationMatrix( this.bone.matrixWorld );\n\t\tthQ2.conjugate();\n\t\tthQ2.multiply( thQ );\n\n\t\t//this.bone.quaternion.multiply( thQ2 );\n\n\t\tthQ3.setFromRotationMatrix( this.bone.matrix );\n\n\t\t// Renormalizing quaternion here because repeatedly transforming\n\t\t// quaternion continuously accumulates floating point error and\n\t\t// can end up being overflow. See #15335\n\t\tthis.bone.quaternion.copy( thQ2.multiply( thQ3 ).normalize() );\n\n\t\tmanager.freeThreeQuaternion( thQ );\n\t\tmanager.freeThreeQuaternion( thQ2 );\n\t\tmanager.freeThreeQuaternion( thQ3 );\n\n\t\tmanager.freeQuaternion( q );\n\t\tmanager.freeTransform( tr );\n\n\t}\n\n\t_updateBonePosition() {\n\n\t\tconst manager = this.manager;\n\n\t\tconst tr = this._getWorldTransformForBone();\n\n\t\tconst thV = manager.allocThreeVector3();\n\n\t\tconst o = manager.getOrigin( tr );\n\t\tthV.set( o.x(), o.y(), o.z() );\n\n\t\tif ( this.bone.parent ) {\n\n\t\t\tthis.bone.parent.worldToLocal( thV );\n\n\t\t}\n\n\t\tthis.bone.position.copy( thV );\n\n\t\tmanager.freeThreeVector3( thV );\n\n\t\tmanager.freeTransform( tr );\n\n\t}\n\n}\n\n//\n\nclass Constraint {\n\n\t/**\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Ammo.btDiscreteDynamicsWorld} world\n\t * @param {RigidBody} bodyA\n\t * @param {RigidBody} bodyB\n\t * @param {Object} params\n\t * @param {ResourceManager} manager\n\t */\n\tconstructor( mesh, world, bodyA, bodyB, params, manager ) {\n\n\t\tthis.mesh = mesh;\n\t\tthis.world = world;\n\t\tthis.bodyA = bodyA;\n\t\tthis.bodyB = bodyB;\n\t\tthis.params = params;\n\t\tthis.manager = manager;\n\n\t\tthis.constraint = null;\n\n\t\tthis._init();\n\n\t}\n\n\t// private method\n\n\t_init() {\n\n\t\tconst manager = this.manager;\n\t\tconst params = this.params;\n\t\tconst bodyA = this.bodyA;\n\t\tconst bodyB = this.bodyB;\n\n\t\tconst form = manager.allocTransform();\n\t\tmanager.setIdentity( form );\n\t\tmanager.setOriginFromArray3( form, params.position );\n\t\tmanager.setBasisFromArray3( form, params.rotation );\n\n\t\tconst formA = manager.allocTransform();\n\t\tconst formB = manager.allocTransform();\n\n\t\tbodyA.body.getMotionState().getWorldTransform( formA );\n\t\tbodyB.body.getMotionState().getWorldTransform( formB );\n\n\t\tconst formInverseA = manager.inverseTransform( formA );\n\t\tconst formInverseB = manager.inverseTransform( formB );\n\n\t\tconst formA2 = manager.multiplyTransforms( formInverseA, form );\n\t\tconst formB2 = manager.multiplyTransforms( formInverseB, form );\n\n\t\tconst constraint = new Ammo.btGeneric6DofSpringConstraint( bodyA.body, bodyB.body, formA2, formB2, true );\n\n\t\tconst lll = manager.allocVector3();\n\t\tconst lul = manager.allocVector3();\n\t\tconst all = manager.allocVector3();\n\t\tconst aul = manager.allocVector3();\n\n\t\tlll.setValue( params.translationLimitation1[ 0 ],\n\t\t params.translationLimitation1[ 1 ],\n\t\t params.translationLimitation1[ 2 ] );\n\t\tlul.setValue( params.translationLimitation2[ 0 ],\n\t\t params.translationLimitation2[ 1 ],\n\t\t params.translationLimitation2[ 2 ] );\n\t\tall.setValue( params.rotationLimitation1[ 0 ],\n\t\t params.rotationLimitation1[ 1 ],\n\t\t params.rotationLimitation1[ 2 ] );\n\t\taul.setValue( params.rotationLimitation2[ 0 ],\n\t\t params.rotationLimitation2[ 1 ],\n\t\t params.rotationLimitation2[ 2 ] );\n\n\t\tconstraint.setLinearLowerLimit( lll );\n\t\tconstraint.setLinearUpperLimit( lul );\n\t\tconstraint.setAngularLowerLimit( all );\n\t\tconstraint.setAngularUpperLimit( aul );\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tif ( params.springPosition[ i ] !== 0 ) {\n\n\t\t\t\tconstraint.enableSpring( i, true );\n\t\t\t\tconstraint.setStiffness( i, params.springPosition[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tif ( params.springRotation[ i ] !== 0 ) {\n\n\t\t\t\tconstraint.enableSpring( i + 3, true );\n\t\t\t\tconstraint.setStiffness( i + 3, params.springRotation[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t * Currently(10/31/2016) official ammo.js doesn't support\n\t\t * btGeneric6DofSpringConstraint.setParam method.\n\t\t * You need custom ammo.js (add the method into idl) if you wanna use.\n\t\t * By setting this parameter, physics will be more like MMD's\n\t\t */\n\t\tif ( constraint.setParam !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tconstraint.setParam( 2, 0.475, i );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.world.addConstraint( constraint, true );\n\t\tthis.constraint = constraint;\n\n\t\tmanager.freeTransform( form );\n\t\tmanager.freeTransform( formA );\n\t\tmanager.freeTransform( formB );\n\t\tmanager.freeTransform( formInverseA );\n\t\tmanager.freeTransform( formInverseB );\n\t\tmanager.freeTransform( formA2 );\n\t\tmanager.freeTransform( formB2 );\n\t\tmanager.freeVector3( lll );\n\t\tmanager.freeVector3( lul );\n\t\tmanager.freeVector3( all );\n\t\tmanager.freeVector3( aul );\n\n\t}\n\n}\n\n//\n\nconst _position = new Vector3();\nconst _quaternion = new Quaternion();\nconst _scale = new Vector3();\nconst _matrixWorldInv = new Matrix4();\n\nclass MMDPhysicsHelper extends Object3D {\n\n\t/**\n\t * Visualize Rigid bodies\n\t *\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Physics} physics\n\t */\n\tconstructor( mesh, physics ) {\n\n\t\tsuper();\n\n\t\tthis.root = mesh;\n\t\tthis.physics = physics;\n\n\t\tthis.matrix.copy( mesh.matrixWorld );\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.materials = [];\n\n\t\tthis.materials.push(\n\t\t\tnew MeshBasicMaterial( {\n\t\t\t\tcolor: new Color( 0xff8888 ),\n\t\t\t\twireframe: true,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\topacity: 0.25,\n\t\t\t\ttransparent: true\n\t\t\t} )\n\t\t);\n\n\t\tthis.materials.push(\n\t\t\tnew MeshBasicMaterial( {\n\t\t\t\tcolor: new Color( 0x88ff88 ),\n\t\t\t\twireframe: true,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\topacity: 0.25,\n\t\t\t\ttransparent: true\n\t\t\t} )\n\t\t);\n\n\t\tthis.materials.push(\n\t\t\tnew MeshBasicMaterial( {\n\t\t\t\tcolor: new Color( 0x8888ff ),\n\t\t\t\twireframe: true,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\topacity: 0.25,\n\t\t\t\ttransparent: true\n\t\t\t} )\n\t\t);\n\n\t\tthis._init();\n\n\t}\n\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tconst materials = this.materials;\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0; i < materials.length; i ++ ) {\n\n\t\t\tmaterials[ i ].dispose();\n\n\t\t}\n\n\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tif ( child.isMesh ) child.geometry.dispose();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates Rigid Bodies visualization.\n\t */\n\tupdateMatrixWorld( force ) {\n\n\t\tvar mesh = this.root;\n\n\t\tif ( this.visible ) {\n\n\t\t\tvar bodies = this.physics.bodies;\n\n\t\t\t_matrixWorldInv\n\t\t\t\t.copy( mesh.matrixWorld )\n\t\t\t\t.decompose( _position, _quaternion, _scale )\n\t\t\t\t.compose( _position, _quaternion, _scale.set( 1, 1, 1 ) )\n\t\t\t\t.invert();\n\n\t\t\tfor ( var i = 0, il = bodies.length; i < il; i ++ ) {\n\n\t\t\t\tvar body = bodies[ i ].body;\n\t\t\t\tvar child = this.children[ i ];\n\n\t\t\t\tvar tr = body.getCenterOfMassTransform();\n\t\t\t\tvar origin = tr.getOrigin();\n\t\t\t\tvar rotation = tr.getRotation();\n\n\t\t\t\tchild.position\n\t\t\t\t\t.set( origin.x(), origin.y(), origin.z() )\n\t\t\t\t\t.applyMatrix4( _matrixWorldInv );\n\n\t\t\t\tchild.quaternion\n\t\t\t\t\t.setFromRotationMatrix( _matrixWorldInv )\n\t\t\t\t\t.multiply(\n\t\t\t\t\t\t_quaternion.set( rotation.x(), rotation.y(), rotation.z(), rotation.w() )\n\t\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.matrix\n\t\t\t.copy( mesh.matrixWorld )\n\t\t\t.decompose( _position, _quaternion, _scale )\n\t\t\t.compose( _position, _quaternion, _scale.set( 1, 1, 1 ) );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\t// private method\n\n\t_init() {\n\n\t\tvar bodies = this.physics.bodies;\n\n\t\tfunction createGeometry( param ) {\n\n\t\t\tswitch ( param.shapeType ) {\n\n\t\t\t\tcase 0:\n\t\t\t\t\treturn new SphereGeometry( param.width, 16, 8 );\n\n\t\t\t\tcase 1:\n\t\t\t\t\treturn new BoxGeometry( param.width * 2, param.height * 2, param.depth * 2, 8, 8, 8 );\n\n\t\t\t\tcase 2:\n\t\t\t\t\treturn new CapsuleGeometry( param.width, param.height, 8, 16 );\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0, il = bodies.length; i < il; i ++ ) {\n\n\t\t\tvar param = bodies[ i ].params;\n\t\t\tthis.add( new Mesh( createGeometry( param ), this.materials[ param.type ] ) );\n\n\t\t}\n\n\t}\n\n}\n\nexport { MMDPhysics };\n", "import {\n\tAnimationMixer,\n\tObject3D,\n\tQuaternion,\n\tVector3\n} from 'three';\nimport { CCDIKSolver } from '../animation/CCDIKSolver.js';\nimport { MMDPhysics } from '../animation/MMDPhysics.js';\n\n/**\n * MMDAnimationHelper handles animation of MMD assets loaded by MMDLoader\n * with MMD special features as IK, Grant, and Physics.\n *\n * Dependencies\n * - ammo.js https://github.com/kripken/ammo.js\n * - MMDPhysics\n * - CCDIKSolver\n *\n * TODO\n * - more precise grant skinning support.\n */\nclass MMDAnimationHelper {\n\n\t/**\n\t * @param {Object} params - (optional)\n\t * @param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true.\n\t * @param {Number} params.afterglow - Default is 0.0.\n\t * @param {boolean} params.resetPhysicsOnLoop - Default is true.\n\t */\n\tconstructor( params = {} ) {\n\n\t\tthis.meshes = [];\n\n\t\tthis.camera = null;\n\t\tthis.cameraTarget = new Object3D();\n\t\tthis.cameraTarget.name = 'target';\n\n\t\tthis.audio = null;\n\t\tthis.audioManager = null;\n\n\t\tthis.objects = new WeakMap();\n\n\t\tthis.configuration = {\n\t\t\tsync: params.sync !== undefined ? params.sync : true,\n\t\t\tafterglow: params.afterglow !== undefined ? params.afterglow : 0.0,\n\t\t\tresetPhysicsOnLoop: params.resetPhysicsOnLoop !== undefined ? params.resetPhysicsOnLoop : true,\n\t\t\tpmxAnimation: params.pmxAnimation !== undefined ? params.pmxAnimation : false\n\t\t};\n\n\t\tthis.enabled = {\n\t\t\tanimation: true,\n\t\t\tik: true,\n\t\t\tgrant: true,\n\t\t\tphysics: true,\n\t\t\tcameraAnimation: true\n\t\t};\n\n\t\tthis.onBeforePhysics = function ( /* mesh */ ) {};\n\n\t\t// experimental\n\t\tthis.sharedPhysics = false;\n\t\tthis.masterPhysics = null;\n\n\t}\n\n\t/**\n\t * Adds an Three.js Object to helper and setups animation.\n\t * The anmation durations of added objects are synched\n\t * if this.configuration.sync is true.\n\t *\n\t * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object\n\t * @param {Object} params - (optional)\n\t * @param {THREE.AnimationClip|Array} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined.\n\t * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true.\n\t * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60.\n\t * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65.\n\t * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3.\n\t * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ).\n\t * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0.\n\t * @return {MMDAnimationHelper}\n\t */\n\tadd( object, params = {} ) {\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tthis._addMesh( object, params );\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tthis._setupCamera( object, params );\n\n\t\t} else if ( object.type === 'Audio' ) {\n\n\t\t\tthis._setupAudio( object, params );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper.add: '\n\t\t\t\t+ 'accepts only '\n\t\t\t\t+ 'THREE.SkinnedMesh or '\n\t\t\t\t+ 'THREE.Camera or '\n\t\t\t\t+ 'THREE.Audio instance.' );\n\n\t\t}\n\n\t\tif ( this.configuration.sync ) this._syncDuration();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes an Three.js Object from helper.\n\t *\n\t * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object\n\t * @return {MMDAnimationHelper}\n\t */\n\tremove( object ) {\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tthis._removeMesh( object );\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tthis._clearCamera( object );\n\n\t\t} else if ( object.type === 'Audio' ) {\n\n\t\t\tthis._clearAudio( object );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper.remove: '\n\t\t\t\t+ 'accepts only '\n\t\t\t\t+ 'THREE.SkinnedMesh or '\n\t\t\t\t+ 'THREE.Camera or '\n\t\t\t\t+ 'THREE.Audio instance.' );\n\n\t\t}\n\n\t\tif ( this.configuration.sync ) this._syncDuration();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Updates the animation.\n\t *\n\t * @param {Number} delta\n\t * @return {MMDAnimationHelper}\n\t */\n\tupdate( delta ) {\n\n\t\tif ( this.audioManager !== null ) this.audioManager.control( delta );\n\n\t\tfor ( let i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis._animateMesh( this.meshes[ i ], delta );\n\n\t\t}\n\n\t\tif ( this.sharedPhysics ) this._updateSharedPhysics( delta );\n\n\t\tif ( this.camera !== null ) this._animateCamera( this.camera, delta );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Changes the pose of SkinnedMesh as VPD specifies.\n\t *\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Object} vpd - VPD content parsed MMDParser\n\t * @param {Object} params - (optional)\n\t * @param {boolean} params.resetPose - Default is true.\n\t * @param {boolean} params.ik - Default is true.\n\t * @param {boolean} params.grant - Default is true.\n\t * @return {MMDAnimationHelper}\n\t */\n\tpose( mesh, vpd, params = {} ) {\n\n\t\tif ( params.resetPose !== false ) mesh.pose();\n\n\t\tconst bones = mesh.skeleton.bones;\n\t\tconst boneParams = vpd.bones;\n\n\t\tconst boneNameDictionary = {};\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tboneNameDictionary[ bones[ i ].name ] = i;\n\n\t\t}\n\n\t\tconst vector = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\n\t\tfor ( let i = 0, il = boneParams.length; i < il; i ++ ) {\n\n\t\t\tconst boneParam = boneParams[ i ];\n\t\t\tconst boneIndex = boneNameDictionary[ boneParam.name ];\n\n\t\t\tif ( boneIndex === undefined ) continue;\n\n\t\t\tconst bone = bones[ boneIndex ];\n\t\t\tbone.position.add( vector.fromArray( boneParam.translation ) );\n\t\t\tbone.quaternion.multiply( quaternion.fromArray( boneParam.quaternion ) );\n\n\t\t}\n\n\t\tmesh.updateMatrixWorld( true );\n\n\t\t// PMX animation system special path\n\t\tif ( this.configuration.pmxAnimation &&\n\t\t\tmesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === 'pmx' ) {\n\n\t\t\tconst sortedBonesData = this._sortBoneDataArray( mesh.geometry.userData.MMD.bones.slice() );\n\t\t\tconst ikSolver = params.ik !== false ? this._createCCDIKSolver( mesh ) : null;\n\t\t\tconst grantSolver = params.grant !== false ? this.createGrantSolver( mesh ) : null;\n\t\t\tthis._animatePMXMesh( mesh, sortedBonesData, ikSolver, grantSolver );\n\n\t\t} else {\n\n\t\t\tif ( params.ik !== false ) {\n\n\t\t\t\tthis._createCCDIKSolver( mesh ).update();\n\n\t\t\t}\n\n\t\t\tif ( params.grant !== false ) {\n\n\t\t\t\tthis.createGrantSolver( mesh ).update();\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Enabes/Disables an animation feature.\n\t *\n\t * @param {string} key\n\t * @param {boolean} enabled\n\t * @return {MMDAnimationHelper}\n\t */\n\tenable( key, enabled ) {\n\n\t\tif ( this.enabled[ key ] === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper.enable: '\n\t\t\t\t+ 'unknown key ' + key );\n\n\t\t}\n\n\t\tthis.enabled[ key ] = enabled;\n\n\t\tif ( key === 'physics' ) {\n\n\t\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\t\tthis._optimizeIK( this.meshes[ i ], enabled );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates an GrantSolver instance.\n\t *\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @return {GrantSolver}\n\t */\n\tcreateGrantSolver( mesh ) {\n\n\t\treturn new GrantSolver( mesh, mesh.geometry.userData.MMD.grants );\n\n\t}\n\n\t// private methods\n\n\t_addMesh( mesh, params ) {\n\n\t\tif ( this.meshes.indexOf( mesh ) >= 0 ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._addMesh: '\n\t\t\t\t+ 'SkinnedMesh \\'' + mesh.name + '\\' has already been added.' );\n\n\t\t}\n\n\t\tthis.meshes.push( mesh );\n\t\tthis.objects.set( mesh, { looped: false } );\n\n\t\tthis._setupMeshAnimation( mesh, params.animation );\n\n\t\tif ( params.physics !== false ) {\n\n\t\t\tthis._setupMeshPhysics( mesh, params );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t_setupCamera( camera, params ) {\n\n\t\tif ( this.camera === camera ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._setupCamera: '\n\t\t\t\t+ 'Camera \\'' + camera.name + '\\' has already been set.' );\n\n\t\t}\n\n\t\tif ( this.camera ) this.clearCamera( this.camera );\n\n\t\tthis.camera = camera;\n\n\t\tcamera.add( this.cameraTarget );\n\n\t\tthis.objects.set( camera, {} );\n\n\t\tif ( params.animation !== undefined ) {\n\n\t\t\tthis._setupCameraAnimation( camera, params.animation );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t_setupAudio( audio, params ) {\n\n\t\tif ( this.audio === audio ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._setupAudio: '\n\t\t\t\t+ 'Audio \\'' + audio.name + '\\' has already been set.' );\n\n\t\t}\n\n\t\tif ( this.audio ) this.clearAudio( this.audio );\n\n\t\tthis.audio = audio;\n\t\tthis.audioManager = new AudioManager( audio, params );\n\n\t\tthis.objects.set( this.audioManager, {\n\t\t\tduration: this.audioManager.duration\n\t\t} );\n\n\t\treturn this;\n\n\t}\n\n\t_removeMesh( mesh ) {\n\n\t\tlet found = false;\n\t\tlet writeIndex = 0;\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tif ( this.meshes[ i ] === mesh ) {\n\n\t\t\t\tthis.objects.delete( mesh );\n\t\t\t\tfound = true;\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tthis.meshes[ writeIndex ++ ] = this.meshes[ i ];\n\n\t\t}\n\n\t\tif ( ! found ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._removeMesh: '\n\t\t\t\t+ 'SkinnedMesh \\'' + mesh.name + '\\' has not been added yet.' );\n\n\t\t}\n\n\t\tthis.meshes.length = writeIndex;\n\n\t\treturn this;\n\n\t}\n\n\t_clearCamera( camera ) {\n\n\t\tif ( camera !== this.camera ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._clearCamera: '\n\t\t\t\t+ 'Camera \\'' + camera.name + '\\' has not been set yet.' );\n\n\t\t}\n\n\t\tthis.camera.remove( this.cameraTarget );\n\n\t\tthis.objects.delete( this.camera );\n\t\tthis.camera = null;\n\n\t\treturn this;\n\n\t}\n\n\t_clearAudio( audio ) {\n\n\t\tif ( audio !== this.audio ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._clearAudio: '\n\t\t\t\t+ 'Audio \\'' + audio.name + '\\' has not been set yet.' );\n\n\t\t}\n\n\t\tthis.objects.delete( this.audioManager );\n\n\t\tthis.audio = null;\n\t\tthis.audioManager = null;\n\n\t\treturn this;\n\n\t}\n\n\t_setupMeshAnimation( mesh, animation ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\tif ( animation !== undefined ) {\n\n\t\t\tconst animations = Array.isArray( animation )\n\t\t\t\t? animation : [ animation ];\n\n\t\t\tobjects.mixer = new AnimationMixer( mesh );\n\n\t\t\tfor ( let i = 0, il = animations.length; i < il; i ++ ) {\n\n\t\t\t\tobjects.mixer.clipAction( animations[ i ] ).play();\n\n\t\t\t}\n\n\t\t\t// TODO: find a workaround not to access ._clip looking like a private property\n\t\t\tobjects.mixer.addEventListener( 'loop', function ( event ) {\n\n\t\t\t\tconst tracks = event.action._clip.tracks;\n\n\t\t\t\tif ( tracks.length > 0 && tracks[ 0 ].name.slice( 0, 6 ) !== '.bones' ) return;\n\n\t\t\t\tobjects.looped = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tobjects.ikSolver = this._createCCDIKSolver( mesh );\n\t\tobjects.grantSolver = this.createGrantSolver( mesh );\n\n\t\treturn this;\n\n\t}\n\n\t_setupCameraAnimation( camera, animation ) {\n\n\t\tconst animations = Array.isArray( animation )\n\t\t\t? animation : [ animation ];\n\n\t\tconst objects = this.objects.get( camera );\n\n\t\tobjects.mixer = new AnimationMixer( camera );\n\n\t\tfor ( let i = 0, il = animations.length; i < il; i ++ ) {\n\n\t\t\tobjects.mixer.clipAction( animations[ i ] ).play();\n\n\t\t}\n\n\t}\n\n\t_setupMeshPhysics( mesh, params ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\t// shared physics is experimental\n\n\t\tif ( params.world === undefined && this.sharedPhysics ) {\n\n\t\t\tconst masterPhysics = this._getMasterPhysics();\n\n\t\t\tif ( masterPhysics !== null ) world = masterPhysics.world; // eslint-disable-line no-undef\n\n\t\t}\n\n\t\tobjects.physics = this._createMMDPhysics( mesh, params );\n\n\t\tif ( objects.mixer && params.animationWarmup !== false ) {\n\n\t\t\tthis._animateMesh( mesh, 0 );\n\t\t\tobjects.physics.reset();\n\n\t\t}\n\n\t\tobjects.physics.warmup( params.warmup !== undefined ? params.warmup : 60 );\n\n\t\tthis._optimizeIK( mesh, true );\n\n\t}\n\n\t_animateMesh( mesh, delta ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\tconst mixer = objects.mixer;\n\t\tconst ikSolver = objects.ikSolver;\n\t\tconst grantSolver = objects.grantSolver;\n\t\tconst physics = objects.physics;\n\t\tconst looped = objects.looped;\n\n\t\tif ( mixer && this.enabled.animation ) {\n\n\t\t\t// alternate solution to save/restore bones but less performant?\n\t\t\t//mesh.pose();\n\t\t\t//this._updatePropertyMixersBuffer( mesh );\n\n\t\t\tthis._restoreBones( mesh );\n\n\t\t\tmixer.update( delta );\n\n\t\t\tthis._saveBones( mesh );\n\n\t\t\t// PMX animation system special path\n\t\t\tif ( this.configuration.pmxAnimation &&\n\t\t\t\tmesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === 'pmx' ) {\n\n\t\t\t\tif ( ! objects.sortedBonesData ) objects.sortedBonesData = this._sortBoneDataArray( mesh.geometry.userData.MMD.bones.slice() );\n\n\t\t\t\tthis._animatePMXMesh(\n\t\t\t\t\tmesh,\n\t\t\t\t\tobjects.sortedBonesData,\n\t\t\t\t\tikSolver && this.enabled.ik ? ikSolver : null,\n\t\t\t\t\tgrantSolver && this.enabled.grant ? grantSolver : null\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tif ( ikSolver && this.enabled.ik ) {\n\n\t\t\t\t\tmesh.updateMatrixWorld( true );\n\t\t\t\t\tikSolver.update();\n\n\t\t\t\t}\n\n\t\t\t\tif ( grantSolver && this.enabled.grant ) {\n\n\t\t\t\t\tgrantSolver.update();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( looped === true && this.enabled.physics ) {\n\n\t\t\tif ( physics && this.configuration.resetPhysicsOnLoop ) physics.reset();\n\n\t\t\tobjects.looped = false;\n\n\t\t}\n\n\t\tif ( physics && this.enabled.physics && ! this.sharedPhysics ) {\n\n\t\t\tthis.onBeforePhysics( mesh );\n\t\t\tphysics.update( delta );\n\n\t\t}\n\n\t}\n\n\t// Sort bones in order by 1. transformationClass and 2. bone index.\n\t// In PMX animation system, bone transformations should be processed\n\t// in this order.\n\t_sortBoneDataArray( boneDataArray ) {\n\n\t\treturn boneDataArray.sort( function ( a, b ) {\n\n\t\t\tif ( a.transformationClass !== b.transformationClass ) {\n\n\t\t\t\treturn a.transformationClass - b.transformationClass;\n\n\t\t\t} else {\n\n\t\t\t\treturn a.index - b.index;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t// PMX Animation system is a bit too complex and doesn't great match to\n\t// Three.js Animation system. This method attempts to simulate it as much as\n\t// possible but doesn't perfectly simulate.\n\t// This method is more costly than the regular one so\n\t// you are recommended to set constructor parameter \"pmxAnimation: true\"\n\t// only if your PMX model animation doesn't work well.\n\t// If you need better method you would be required to write your own.\n\t_animatePMXMesh( mesh, sortedBonesData, ikSolver, grantSolver ) {\n\n\t\t_quaternionIndex = 0;\n\t\t_grantResultMap.clear();\n\n\t\tfor ( let i = 0, il = sortedBonesData.length; i < il; i ++ ) {\n\n\t\t\tupdateOne( mesh, sortedBonesData[ i ].index, ikSolver, grantSolver );\n\n\t\t}\n\n\t\tmesh.updateMatrixWorld( true );\n\t\treturn this;\n\n\t}\n\n\t_animateCamera( camera, delta ) {\n\n\t\tconst mixer = this.objects.get( camera ).mixer;\n\n\t\tif ( mixer && this.enabled.cameraAnimation ) {\n\n\t\t\tmixer.update( delta );\n\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\tcamera.up.set( 0, 1, 0 );\n\t\t\tcamera.up.applyQuaternion( camera.quaternion );\n\t\t\tcamera.lookAt( this.cameraTarget.position );\n\n\t\t}\n\n\t}\n\n\t_optimizeIK( mesh, physicsEnabled ) {\n\n\t\tconst iks = mesh.geometry.userData.MMD.iks;\n\t\tconst bones = mesh.geometry.userData.MMD.bones;\n\n\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\tconst ik = iks[ i ];\n\t\t\tconst links = ik.links;\n\n\t\t\tfor ( let j = 0, jl = links.length; j < jl; j ++ ) {\n\n\t\t\t\tconst link = links[ j ];\n\n\t\t\t\tif ( physicsEnabled === true ) {\n\n\t\t\t\t\t// disable IK of the bone the corresponding rigidBody type of which is 1 or 2\n\t\t\t\t\t// because its rotation will be overriden by physics\n\t\t\t\t\tlink.enabled = bones[ link.index ].rigidBodyType > 0 ? false : true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlink.enabled = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_createCCDIKSolver( mesh ) {\n\n\t\tif ( CCDIKSolver === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper: Import CCDIKSolver.' );\n\n\t\t}\n\n\t\treturn new CCDIKSolver( mesh, mesh.geometry.userData.MMD.iks );\n\n\t}\n\n\t_createMMDPhysics( mesh, params ) {\n\n\t\tif ( MMDPhysics === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.MMDPhysics: Import MMDPhysics.' );\n\n\t\t}\n\n\t\treturn new MMDPhysics(\n\t\t\tmesh,\n\t\t\tmesh.geometry.userData.MMD.rigidBodies,\n\t\t\tmesh.geometry.userData.MMD.constraints,\n\t\t\tparams );\n\n\t}\n\n\t/*\n\t * Detects the longest duration and then sets it to them to sync.\n\t * TODO: Not to access private properties ( ._actions and ._clip )\n\t */\n\t_syncDuration() {\n\n\t\tlet max = 0.0;\n\n\t\tconst objects = this.objects;\n\t\tconst meshes = this.meshes;\n\t\tconst camera = this.camera;\n\t\tconst audioManager = this.audioManager;\n\n\t\t// get the longest duration\n\n\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\tconst mixer = this.objects.get( meshes[ i ] ).mixer;\n\n\t\t\tif ( mixer === undefined ) continue;\n\n\t\t\tfor ( let j = 0; j < mixer._actions.length; j ++ ) {\n\n\t\t\t\tconst clip = mixer._actions[ j ]._clip;\n\n\t\t\t\tif ( ! objects.has( clip ) ) {\n\n\t\t\t\t\tobjects.set( clip, {\n\t\t\t\t\t\tduration: clip.duration\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tmax = Math.max( max, objects.get( clip ).duration );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( camera !== null ) {\n\n\t\t\tconst mixer = this.objects.get( camera ).mixer;\n\n\t\t\tif ( mixer !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, il = mixer._actions.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst clip = mixer._actions[ i ]._clip;\n\n\t\t\t\t\tif ( ! objects.has( clip ) ) {\n\n\t\t\t\t\t\tobjects.set( clip, {\n\t\t\t\t\t\t\tduration: clip.duration\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmax = Math.max( max, objects.get( clip ).duration );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( audioManager !== null ) {\n\n\t\t\tmax = Math.max( max, objects.get( audioManager ).duration );\n\n\t\t}\n\n\t\tmax += this.configuration.afterglow;\n\n\t\t// update the duration\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tconst mixer = this.objects.get( this.meshes[ i ] ).mixer;\n\n\t\t\tif ( mixer === undefined ) continue;\n\n\t\t\tfor ( let j = 0, jl = mixer._actions.length; j < jl; j ++ ) {\n\n\t\t\t\tmixer._actions[ j ]._clip.duration = max;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( camera !== null ) {\n\n\t\t\tconst mixer = this.objects.get( camera ).mixer;\n\n\t\t\tif ( mixer !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, il = mixer._actions.length; i < il; i ++ ) {\n\n\t\t\t\t\tmixer._actions[ i ]._clip.duration = max;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( audioManager !== null ) {\n\n\t\t\taudioManager.duration = max;\n\n\t\t}\n\n\t}\n\n\t// workaround\n\n\t_updatePropertyMixersBuffer( mesh ) {\n\n\t\tconst mixer = this.objects.get( mesh ).mixer;\n\n\t\tconst propertyMixers = mixer._bindings;\n\t\tconst accuIndex = mixer._accuIndex;\n\n\t\tfor ( let i = 0, il = propertyMixers.length; i < il; i ++ ) {\n\n\t\t\tconst propertyMixer = propertyMixers[ i ];\n\t\t\tconst buffer = propertyMixer.buffer;\n\t\t\tconst stride = propertyMixer.valueSize;\n\t\t\tconst offset = ( accuIndex + 1 ) * stride;\n\n\t\t\tpropertyMixer.binding.getValue( buffer, offset );\n\n\t\t}\n\n\t}\n\n\t/*\n\t * Avoiding these two issues by restore/save bones before/after mixer animation.\n\t *\n\t * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer.\n\t * Calculating IK, Grant, and Physics after mixer animation can break\n\t * the cache coherency.\n\t *\n\t * 2. Applying Grant two or more times without reset the posing breaks model.\n\t */\n\t_saveBones( mesh ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\tconst bones = mesh.skeleton.bones;\n\n\t\tlet backupBones = objects.backupBones;\n\n\t\tif ( backupBones === undefined ) {\n\n\t\t\tbackupBones = new Float32Array( bones.length * 7 );\n\t\t\tobjects.backupBones = backupBones;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tbone.position.toArray( backupBones, i * 7 );\n\t\t\tbone.quaternion.toArray( backupBones, i * 7 + 3 );\n\n\t\t}\n\n\t}\n\n\t_restoreBones( mesh ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\tconst backupBones = objects.backupBones;\n\n\t\tif ( backupBones === undefined ) return;\n\n\t\tconst bones = mesh.skeleton.bones;\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tbone.position.fromArray( backupBones, i * 7 );\n\t\t\tbone.quaternion.fromArray( backupBones, i * 7 + 3 );\n\n\t\t}\n\n\t}\n\n\t// experimental\n\n\t_getMasterPhysics() {\n\n\t\tif ( this.masterPhysics !== null ) return this.masterPhysics;\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tconst physics = this.meshes[ i ].physics;\n\n\t\t\tif ( physics !== undefined && physics !== null ) {\n\n\t\t\t\tthis.masterPhysics = physics;\n\t\t\t\treturn this.masterPhysics;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_updateSharedPhysics( delta ) {\n\n\t\tif ( this.meshes.length === 0 || ! this.enabled.physics || ! this.sharedPhysics ) return;\n\n\t\tconst physics = this._getMasterPhysics();\n\n\t\tif ( physics === null ) return;\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tconst p = this.meshes[ i ].physics;\n\n\t\t\tif ( p !== null && p !== undefined ) {\n\n\t\t\t\tp.updateRigidBodies();\n\n\t\t\t}\n\n\t\t}\n\n\t\tphysics.stepSimulation( delta );\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tconst p = this.meshes[ i ].physics;\n\n\t\t\tif ( p !== null && p !== undefined ) {\n\n\t\t\t\tp.updateBones();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n// Keep working quaternions for less GC\nconst _quaternions = [];\nlet _quaternionIndex = 0;\n\nfunction getQuaternion() {\n\n\tif ( _quaternionIndex >= _quaternions.length ) {\n\n\t\t_quaternions.push( new Quaternion() );\n\n\t}\n\n\treturn _quaternions[ _quaternionIndex ++ ];\n\n}\n\n// Save rotation whose grant and IK are already applied\n// used by grant children\nconst _grantResultMap = new Map();\n\nfunction updateOne( mesh, boneIndex, ikSolver, grantSolver ) {\n\n\tconst bones = mesh.skeleton.bones;\n\tconst bonesData = mesh.geometry.userData.MMD.bones;\n\tconst boneData = bonesData[ boneIndex ];\n\tconst bone = bones[ boneIndex ];\n\n\t// Return if already updated by being referred as a grant parent.\n\tif ( _grantResultMap.has( boneIndex ) ) return;\n\n\tconst quaternion = getQuaternion();\n\n\t// Initialize grant result here to prevent infinite loop.\n\t// If it's referred before updating with actual result later\n\t// result without applyting IK or grant is gotten\n\t// but better than composing of infinite loop.\n\t_grantResultMap.set( boneIndex, quaternion.copy( bone.quaternion ) );\n\n\t// @TODO: Support global grant and grant position\n\tif ( grantSolver && boneData.grant &&\n\t\t! boneData.grant.isLocal && boneData.grant.affectRotation ) {\n\n\t\tconst parentIndex = boneData.grant.parentIndex;\n\t\tconst ratio = boneData.grant.ratio;\n\n\t\tif ( ! _grantResultMap.has( parentIndex ) ) {\n\n\t\t\tupdateOne( mesh, parentIndex, ikSolver, grantSolver );\n\n\t\t}\n\n\t\tgrantSolver.addGrantRotation( bone, _grantResultMap.get( parentIndex ), ratio );\n\n\t}\n\n\tif ( ikSolver && boneData.ik ) {\n\n\t\t// @TODO: Updating world matrices every time solving an IK bone is\n\t\t// costly. Optimize if possible.\n\t\tmesh.updateMatrixWorld( true );\n\t\tikSolver.updateOne( boneData.ik );\n\n\t\t// No confident, but it seems the grant results with ik links should be updated?\n\t\tconst links = boneData.ik.links;\n\n\t\tfor ( let i = 0, il = links.length; i < il; i ++ ) {\n\n\t\t\tconst link = links[ i ];\n\n\t\t\tif ( link.enabled === false ) continue;\n\n\t\t\tconst linkIndex = link.index;\n\n\t\t\tif ( _grantResultMap.has( linkIndex ) ) {\n\n\t\t\t\t_grantResultMap.set( linkIndex, _grantResultMap.get( linkIndex ).copy( bones[ linkIndex ].quaternion ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Update with the actual result here\n\tquaternion.copy( bone.quaternion );\n\n}\n\n//\n\nclass AudioManager {\n\n\t/**\n\t * @param {THREE.Audio} audio\n\t * @param {Object} params - (optional)\n\t * @param {Nuumber} params.delayTime\n\t */\n\tconstructor( audio, params = {} ) {\n\n\t\tthis.audio = audio;\n\n\t\tthis.elapsedTime = 0.0;\n\t\tthis.currentTime = 0.0;\n\t\tthis.delayTime = params.delayTime !== undefined\n\t\t\t? params.delayTime : 0.0;\n\n\t\tthis.audioDuration = this.audio.buffer.duration;\n\t\tthis.duration = this.audioDuration + this.delayTime;\n\n\t}\n\n\t/**\n\t * @param {Number} delta\n\t * @return {AudioManager}\n\t */\n\tcontrol( delta ) {\n\n\t\tthis.elapsed += delta;\n\t\tthis.currentTime += delta;\n\n\t\tif ( this._shouldStopAudio() ) this.audio.stop();\n\t\tif ( this._shouldStartAudio() ) this.audio.play();\n\n\t\treturn this;\n\n\t}\n\n\t// private methods\n\n\t_shouldStartAudio() {\n\n\t\tif ( this.audio.isPlaying ) return false;\n\n\t\twhile ( this.currentTime >= this.duration ) {\n\n\t\t\tthis.currentTime -= this.duration;\n\n\t\t}\n\n\t\tif ( this.currentTime < this.delayTime ) return false;\n\n\t\t// 'duration' can be bigger than 'audioDuration + delayTime' because of sync configuration\n\t\tif ( ( this.currentTime - this.delayTime ) > this.audioDuration ) return false;\n\n\t\treturn true;\n\n\t}\n\n\t_shouldStopAudio() {\n\n\t\treturn this.audio.isPlaying &&\n\t\t\tthis.currentTime >= this.duration;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\n/**\n * Solver for Grant (Fuyo in Japanese. I just google translated because\n * Fuyo may be MMD specific term and may not be common word in 3D CG terms.)\n * Grant propagates a bone's transform to other bones transforms even if\n * they are not children.\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array} grants\n */\nclass GrantSolver {\n\n\tconstructor( mesh, grants = [] ) {\n\n\t\tthis.mesh = mesh;\n\t\tthis.grants = grants;\n\n\t}\n\n\t/**\n\t * Solve all the grant bones\n\t * @return {GrantSolver}\n\t */\n\tupdate() {\n\n\t\tconst grants = this.grants;\n\n\t\tfor ( let i = 0, il = grants.length; i < il; i ++ ) {\n\n\t\t\tthis.updateOne( grants[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Solve a grant bone\n\t * @param {Object} grant - grant parameter\n\t * @return {GrantSolver}\n\t */\n\tupdateOne( grant ) {\n\n\t\tconst bones = this.mesh.skeleton.bones;\n\t\tconst bone = bones[ grant.index ];\n\t\tconst parentBone = bones[ grant.parentIndex ];\n\n\t\tif ( grant.isLocal ) {\n\n\t\t\t// TODO: implement\n\t\t\tif ( grant.affectPosition ) {\n\n\t\t\t}\n\n\t\t\t// TODO: implement\n\t\t\tif ( grant.affectRotation ) {\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// TODO: implement\n\t\t\tif ( grant.affectPosition ) {\n\n\t\t\t}\n\n\t\t\tif ( grant.affectRotation ) {\n\n\t\t\t\tthis.addGrantRotation( bone, parentBone.quaternion, grant.ratio );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddGrantRotation( bone, q, ratio ) {\n\n\t\t_q.set( 0, 0, 0, 1 );\n\t\t_q.slerp( q, ratio );\n\t\tbone.quaternion.multiply( _q );\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MMDAnimationHelper };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Depth-of-field shader with bokeh\n * ported from GLSL shader by Martins Upitis\n * http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update)\n *\n * Requires #define RINGS and SAMPLES integers\n */\nconst BokehShader = {\n\n\tname: 'BokehShader',\n\n\tuniforms: {\n\n\t\t'textureWidth': { value: 1.0 },\n\t\t'textureHeight': { value: 1.0 },\n\n\t\t'focalDepth': { value: 1.0 },\n\t\t'focalLength': { value: 24.0 },\n\t\t'fstop': { value: 0.9 },\n\n\t\t'tColor': { value: null },\n\t\t'tDepth': { value: null },\n\n\t\t'maxblur': { value: 1.0 },\n\n\t\t'showFocus': { value: 0 },\n\t\t'manualdof': { value: 0 },\n\t\t'vignetting': { value: 0 },\n\t\t'depthblur': { value: 0 },\n\n\t\t'threshold': { value: 0.5 },\n\t\t'gain': { value: 2.0 },\n\t\t'bias': { value: 0.5 },\n\t\t'fringe': { value: 0.7 },\n\n\t\t'znear': { value: 0.1 },\n\t\t'zfar': { value: 100 },\n\n\t\t'noise': { value: 1 },\n\t\t'dithering': { value: 0.0001 },\n\t\t'pentagon': { value: 0 },\n\n\t\t'shaderFocus': { value: 1 },\n\t\t'focusCoords': { value: new Vector2() }\n\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tColor;\n\t\tuniform sampler2D tDepth;\n\t\tuniform float textureWidth;\n\t\tuniform float textureHeight;\n\n\t\tuniform float focalDepth; //focal distance value in meters, but you may use autofocus option below\n\t\tuniform float focalLength; //focal length in mm\n\t\tuniform float fstop; //f-stop value\n\t\tuniform bool showFocus; //show debug focus point and focal range (red = focal point, green = focal range)\n\n\t\t/*\n\t\tmake sure that these two values are the same for your camera, otherwise distances will be wrong.\n\t\t*/\n\n\t\tuniform float znear; // camera clipping start\n\t\tuniform float zfar; // camera clipping end\n\n\t\t//------------------------------------------\n\t\t//user variables\n\n\t\tconst int samples = SAMPLES; //samples on the first ring\n\t\tconst int rings = RINGS; //ring count\n\n\t\tconst int maxringsamples = rings * samples;\n\n\t\tuniform bool manualdof; // manual dof calculation\n\t\tfloat ndofstart = 1.0; // near dof blur start\n\t\tfloat ndofdist = 2.0; // near dof blur falloff distance\n\t\tfloat fdofstart = 1.0; // far dof blur start\n\t\tfloat fdofdist = 3.0; // far dof blur falloff distance\n\n\t\tfloat CoC = 0.03; //circle of confusion size in mm (35mm film = 0.03mm)\n\n\t\tuniform bool vignetting; // use optical lens vignetting\n\n\t\tfloat vignout = 1.3; // vignetting outer border\n\t\tfloat vignin = 0.0; // vignetting inner border\n\t\tfloat vignfade = 22.0; // f-stops till vignete fades\n\n\t\tuniform bool shaderFocus;\n\t\t// disable if you use external focalDepth value\n\n\t\tuniform vec2 focusCoords;\n\t\t// autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right)\n\t\t// if center of screen use vec2(0.5, 0.5);\n\n\t\tuniform float maxblur;\n\t\t//clamp value of max blur (0.0 = no blur, 1.0 default)\n\n\t\tuniform float threshold; // highlight threshold;\n\t\tuniform float gain; // highlight gain;\n\n\t\tuniform float bias; // bokeh edge bias\n\t\tuniform float fringe; // bokeh chromatic aberration / fringing\n\n\t\tuniform bool noise; //use noise instead of pattern for sample dithering\n\n\t\tuniform float dithering;\n\n\t\tuniform bool depthblur; // blur the depth buffer\n\t\tfloat dbsize = 1.25; // depth blur size\n\n\t\t/*\n\t\tnext part is experimental\n\t\tnot looking good with small sample and ring count\n\t\tlooks okay starting from samples = 4, rings = 4\n\t\t*/\n\n\t\tuniform bool pentagon; //use pentagon as bokeh shape?\n\t\tfloat feather = 0.4; //pentagon shape feather\n\n\t\t//------------------------------------------\n\n\t\tfloat penta(vec2 coords) {\n\t\t\t//pentagonal shape\n\t\t\tfloat scale = float(rings) - 1.3;\n\t\t\tvec4 HS0 = vec4( 1.0, 0.0, 0.0, 1.0);\n\t\t\tvec4 HS1 = vec4( 0.309016994, 0.951056516, 0.0, 1.0);\n\t\t\tvec4 HS2 = vec4(-0.809016994, 0.587785252, 0.0, 1.0);\n\t\t\tvec4 HS3 = vec4(-0.809016994,-0.587785252, 0.0, 1.0);\n\t\t\tvec4 HS4 = vec4( 0.309016994,-0.951056516, 0.0, 1.0);\n\t\t\tvec4 HS5 = vec4( 0.0 ,0.0 , 1.0, 1.0);\n\n\t\t\tvec4 one = vec4( 1.0 );\n\n\t\t\tvec4 P = vec4((coords),vec2(scale, scale));\n\n\t\t\tvec4 dist = vec4(0.0);\n\t\t\tfloat inorout = -4.0;\n\n\t\t\tdist.x = dot( P, HS0 );\n\t\t\tdist.y = dot( P, HS1 );\n\t\t\tdist.z = dot( P, HS2 );\n\t\t\tdist.w = dot( P, HS3 );\n\n\t\t\tdist = smoothstep( -feather, feather, dist );\n\n\t\t\tinorout += dot( dist, one );\n\n\t\t\tdist.x = dot( P, HS4 );\n\t\t\tdist.y = HS5.w - abs( P.z );\n\n\t\t\tdist = smoothstep( -feather, feather, dist );\n\t\t\tinorout += dist.x;\n\n\t\t\treturn clamp( inorout, 0.0, 1.0 );\n\t\t}\n\n\t\tfloat bdepth(vec2 coords) {\n\t\t\t// Depth buffer blur\n\t\t\tfloat d = 0.0;\n\t\t\tfloat kernel[9];\n\t\t\tvec2 offset[9];\n\n\t\t\tvec2 wh = vec2(1.0/textureWidth,1.0/textureHeight) * dbsize;\n\n\t\t\toffset[0] = vec2(-wh.x,-wh.y);\n\t\t\toffset[1] = vec2( 0.0, -wh.y);\n\t\t\toffset[2] = vec2( wh.x -wh.y);\n\n\t\t\toffset[3] = vec2(-wh.x, 0.0);\n\t\t\toffset[4] = vec2( 0.0, 0.0);\n\t\t\toffset[5] = vec2( wh.x, 0.0);\n\n\t\t\toffset[6] = vec2(-wh.x, wh.y);\n\t\t\toffset[7] = vec2( 0.0, wh.y);\n\t\t\toffset[8] = vec2( wh.x, wh.y);\n\n\t\t\tkernel[0] = 1.0/16.0; kernel[1] = 2.0/16.0; kernel[2] = 1.0/16.0;\n\t\t\tkernel[3] = 2.0/16.0; kernel[4] = 4.0/16.0; kernel[5] = 2.0/16.0;\n\t\t\tkernel[6] = 1.0/16.0; kernel[7] = 2.0/16.0; kernel[8] = 1.0/16.0;\n\n\n\t\t\tfor( int i=0; i<9; i++ ) {\n\t\t\t\tfloat tmp = texture2D(tDepth, coords + offset[i]).r;\n\t\t\t\td += tmp * kernel[i];\n\t\t\t}\n\n\t\t\treturn d;\n\t\t}\n\n\n\t\tvec3 color(vec2 coords,float blur) {\n\t\t\t//processing the sample\n\n\t\t\tvec3 col = vec3(0.0);\n\t\t\tvec2 texel = vec2(1.0/textureWidth,1.0/textureHeight);\n\n\t\t\tcol.r = texture2D(tColor,coords + vec2(0.0,1.0)*texel*fringe*blur).r;\n\t\t\tcol.g = texture2D(tColor,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g;\n\t\t\tcol.b = texture2D(tColor,coords + vec2(0.866,-0.5)*texel*fringe*blur).b;\n\n\t\t\tvec3 lumcoeff = vec3(0.299,0.587,0.114);\n\t\t\tfloat lum = dot(col.rgb, lumcoeff);\n\t\t\tfloat thresh = max((lum-threshold)*gain, 0.0);\n\t\t\treturn col+mix(vec3(0.0),col,thresh*blur);\n\t\t}\n\n\t\tvec3 debugFocus(vec3 col, float blur, float depth) {\n\t\t\tfloat edge = 0.002*depth; //distance based edge smoothing\n\t\t\tfloat m = clamp(smoothstep(0.0,edge,blur),0.0,1.0);\n\t\t\tfloat e = clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0);\n\n\t\t\tcol = mix(col,vec3(1.0,0.5,0.0),(1.0-m)*0.6);\n\t\t\tcol = mix(col,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2);\n\n\t\t\treturn col;\n\t\t}\n\n\t\tfloat linearize(float depth) {\n\t\t\treturn -zfar * znear / (depth * (zfar - znear) - zfar);\n\t\t}\n\n\t\tfloat vignette() {\n\t\t\tfloat dist = distance(vUv.xy, vec2(0.5,0.5));\n\t\t\tdist = smoothstep(vignout+(fstop/vignfade), vignin+(fstop/vignfade), dist);\n\t\t\treturn clamp(dist,0.0,1.0);\n\t\t}\n\n\t\tfloat gather(float i, float j, int ringsamples, inout vec3 col, float w, float h, float blur) {\n\t\t\tfloat rings2 = float(rings);\n\t\t\tfloat step = PI*2.0 / float(ringsamples);\n\t\t\tfloat pw = cos(j*step)*i;\n\t\t\tfloat ph = sin(j*step)*i;\n\t\t\tfloat p = 1.0;\n\t\t\tif (pentagon) {\n\t\t\t\tp = penta(vec2(pw,ph));\n\t\t\t}\n\t\t\tcol += color(vUv.xy + vec2(pw*w,ph*h), blur) * mix(1.0, i/rings2, bias) * p;\n\t\t\treturn 1.0 * mix(1.0, i /rings2, bias) * p;\n\t\t}\n\n\t\tvoid main() {\n\t\t\t//scene depth calculation\n\n\t\t\tfloat depth = linearize(texture2D(tDepth,vUv.xy).x);\n\n\t\t\t// Blur depth?\n\t\t\tif ( depthblur ) {\n\t\t\t\tdepth = linearize(bdepth(vUv.xy));\n\t\t\t}\n\n\t\t\t//focal plane calculation\n\n\t\t\tfloat fDepth = focalDepth;\n\n\t\t\tif (shaderFocus) {\n\n\t\t\t\tfDepth = linearize(texture2D(tDepth,focusCoords).x);\n\n\t\t\t}\n\n\t\t\t// dof blur factor calculation\n\n\t\t\tfloat blur = 0.0;\n\n\t\t\tif (manualdof) {\n\t\t\t\tfloat a = depth-fDepth; // Focal plane\n\t\t\t\tfloat b = (a-fdofstart)/fdofdist; // Far DoF\n\t\t\t\tfloat c = (-a-ndofstart)/ndofdist; // Near Dof\n\t\t\t\tblur = (a>0.0) ? b : c;\n\t\t\t} else {\n\t\t\t\tfloat f = focalLength; // focal length in mm\n\t\t\t\tfloat d = fDepth*1000.0; // focal plane in mm\n\t\t\t\tfloat o = depth*1000.0; // depth in mm\n\n\t\t\t\tfloat a = (o*f)/(o-f);\n\t\t\t\tfloat b = (d*f)/(d-f);\n\t\t\t\tfloat c = (d-f)/(d*fstop*CoC);\n\n\t\t\t\tblur = abs(a-b)*c;\n\t\t\t}\n\n\t\t\tblur = clamp(blur,0.0,1.0);\n\n\t\t\t// calculation of pattern for dithering\n\n\t\t\tvec2 noise = vec2(rand(vUv.xy), rand( vUv.xy + vec2( 0.4, 0.6 ) ) )*dithering*blur;\n\n\t\t\t// getting blur x and y step factor\n\n\t\t\tfloat w = (1.0/textureWidth)*blur*maxblur+noise.x;\n\t\t\tfloat h = (1.0/textureHeight)*blur*maxblur+noise.y;\n\n\t\t\t// calculation of final color\n\n\t\t\tvec3 col = vec3(0.0);\n\n\t\t\tif(blur < 0.05) {\n\t\t\t\t//some optimization thingy\n\t\t\t\tcol = texture2D(tColor, vUv.xy).rgb;\n\t\t\t} else {\n\t\t\t\tcol = texture2D(tColor, vUv.xy).rgb;\n\t\t\t\tfloat s = 1.0;\n\t\t\t\tint ringsamples;\n\n\t\t\t\tfor (int i = 1; i <= rings; i++) {\n\t\t\t\t\t/*unboxstart*/\n\t\t\t\t\tringsamples = i * samples;\n\n\t\t\t\t\tfor (int j = 0 ; j < maxringsamples ; j++) {\n\t\t\t\t\t\tif (j >= ringsamples) break;\n\t\t\t\t\t\ts += gather(float(i), float(j), ringsamples, col, w, h, blur);\n\t\t\t\t\t}\n\t\t\t\t\t/*unboxend*/\n\t\t\t\t}\n\n\t\t\t\tcol /= s; //divide by sample count\n\t\t\t}\n\n\t\t\tif (showFocus) {\n\t\t\t\tcol = debugFocus(col, blur, depth);\n\t\t\t}\n\n\t\t\tif (vignetting) {\n\t\t\t\tcol *= vignette();\n\t\t\t}\n\n\t\t\tgl_FragColor.rgb = col;\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t\t#include \n\t\t\t#include \n\t\t}`\n\n};\n\nconst BokehDepthShader = {\n\n\tname: 'BokehDepthShader',\n\n\tuniforms: {\n\n\t\t'mNear': { value: 1.0 },\n\t\t'mFar': { value: 1000.0 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying float vViewZDepth;\n\n\t\tvoid main() {\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t\tvViewZDepth = - mvPosition.z;\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float mNear;\n\t\tuniform float mFar;\n\n\t\tvarying float vViewZDepth;\n\n\t\tvoid main() {\n\n\t\t\tfloat color = 1.0 - smoothstep( mNear, mFar, vViewZDepth );\n\t\t\tgl_FragColor = vec4( vec3( color ), 1.0 );\n\n\t\t}`\n\n};\n\nexport { BokehShader, BokehDepthShader };\n", "import {\n\tMesh,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPlaneGeometry,\n\tScene,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\n\nimport { BokehShader, BokehDepthShader } from '../shaders/BokehShader2.js';\n\nclass CinematicCamera extends PerspectiveCamera {\n\n\tconstructor( fov, aspect, near, far ) {\n\n\t\tsuper( fov, aspect, near, far );\n\n\t\tthis.type = 'CinematicCamera';\n\n\t\tthis.postprocessing = { enabled: true };\n\t\tthis.shaderSettings = {\n\t\t\trings: 3,\n\t\t\tsamples: 4\n\t\t};\n\n\t\tconst depthShader = BokehDepthShader;\n\n\t\tthis.materialDepth = new ShaderMaterial( {\n\t\t\tuniforms: depthShader.uniforms,\n\t\t\tvertexShader: depthShader.vertexShader,\n\t\t\tfragmentShader: depthShader.fragmentShader\n\t\t} );\n\n\t\tthis.materialDepth.uniforms[ 'mNear' ].value = near;\n\t\tthis.materialDepth.uniforms[ 'mFar' ].value = far;\n\n\t\t// In case of cinematicCamera, having a default lens set is important\n\t\tthis.setLens();\n\n\t\tthis.initPostProcessing();\n\n\t}\n\n\t// providing fnumber and coc(Circle of Confusion) as extra arguments\n\t// In case of cinematicCamera, having a default lens set is important\n\t// if fnumber and coc are not provided, cinematicCamera tries to act as a basic PerspectiveCamera\n\tsetLens( focalLength = 35, filmGauge = 35, fNumber = 8, coc = 0.019 ) {\n\n\t\tthis.filmGauge = filmGauge;\n\n\t\tthis.setFocalLength( focalLength );\n\n\t\tthis.fNumber = fNumber;\n\t\tthis.coc = coc;\n\n\t\t// fNumber is focalLength by aperture\n\t\tthis.aperture = focalLength / this.fNumber;\n\n\t\t// hyperFocal is required to calculate depthOfField when a lens tries to focus at a distance with given fNumber and focalLength\n\t\tthis.hyperFocal = ( focalLength * focalLength ) / ( this.aperture * this.coc );\n\n\t}\n\n\tlinearize( depth ) {\n\n\t\tconst zfar = this.far;\n\t\tconst znear = this.near;\n\t\treturn - zfar * znear / ( depth * ( zfar - znear ) - zfar );\n\n\t}\n\n\tsmoothstep( near, far, depth ) {\n\n\t\tconst x = this.saturate( ( depth - near ) / ( far - near ) );\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t}\n\n\tsaturate( x ) {\n\n\t\treturn Math.max( 0, Math.min( 1, x ) );\n\n\t}\n\n\t// function for focusing at a distance from the camera\n\tfocusAt( focusDistance = 20 ) {\n\n\t\tconst focalLength = this.getFocalLength();\n\n\t\t// distance from the camera (normal to frustrum) to focus on\n\t\tthis.focus = focusDistance;\n\n\t\t// the nearest point from the camera which is in focus (unused)\n\t\tthis.nearPoint = ( this.hyperFocal * this.focus ) / ( this.hyperFocal + ( this.focus - focalLength ) );\n\n\t\t// the farthest point from the camera which is in focus (unused)\n\t\tthis.farPoint = ( this.hyperFocal * this.focus ) / ( this.hyperFocal - ( this.focus - focalLength ) );\n\n\t\t// the gap or width of the space in which is everything is in focus (unused)\n\t\tthis.depthOfField = this.farPoint - this.nearPoint;\n\n\t\t// Considering minimum distance of focus for a standard lens (unused)\n\t\tif ( this.depthOfField < 0 ) this.depthOfField = 0;\n\n\t\tthis.sdistance = this.smoothstep( this.near, this.far, this.focus );\n\n\t\tthis.ldistance = this.linearize( 1 -\tthis.sdistance );\n\n\t\tthis.postprocessing.bokeh_uniforms[ 'focalDepth' ].value = this.ldistance;\n\n\t}\n\n\tinitPostProcessing() {\n\n\t\tif ( this.postprocessing.enabled ) {\n\n\t\t\tthis.postprocessing.scene = new Scene();\n\n\t\t\tthis.postprocessing.camera = new OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2,\twindow.innerHeight / 2, window.innerHeight / - 2, - 10000, 10000 );\n\n\t\t\tthis.postprocessing.scene.add( this.postprocessing.camera );\n\n\t\t\tthis.postprocessing.rtTextureDepth = new WebGLRenderTarget( window.innerWidth, window.innerHeight );\n\t\t\tthis.postprocessing.rtTextureColor = new WebGLRenderTarget( window.innerWidth, window.innerHeight );\n\n\t\t\tconst bokeh_shader = BokehShader;\n\n\t\t\tthis.postprocessing.bokeh_uniforms = UniformsUtils.clone( bokeh_shader.uniforms );\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'tColor' ].value = this.postprocessing.rtTextureColor.texture;\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'tDepth' ].value = this.postprocessing.rtTextureDepth.texture;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'manualdof' ].value = 0;\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'shaderFocus' ].value = 0;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'fstop' ].value = 2.8;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'showFocus' ].value = 1;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'focalDepth' ].value = 0.1;\n\n\t\t\t//console.log( this.postprocessing.bokeh_uniforms[ \"focalDepth\" ].value );\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'znear' ].value = this.near;\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'zfar' ].value = this.near;\n\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'textureWidth' ].value = window.innerWidth;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'textureHeight' ].value = window.innerHeight;\n\n\t\t\tthis.postprocessing.materialBokeh = new ShaderMaterial( {\n\t\t\t\tuniforms: this.postprocessing.bokeh_uniforms,\n\t\t\t\tvertexShader: bokeh_shader.vertexShader,\n\t\t\t\tfragmentShader: bokeh_shader.fragmentShader,\n\t\t\t\tdefines: {\n\t\t\t\t\tRINGS: this.shaderSettings.rings,\n\t\t\t\t\tSAMPLES: this.shaderSettings.samples,\n\t\t\t\t\tDEPTH_PACKING: 1\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.postprocessing.quad = new Mesh( new PlaneGeometry( window.innerWidth, window.innerHeight ), this.postprocessing.materialBokeh );\n\t\t\tthis.postprocessing.quad.position.z = - 500;\n\t\t\tthis.postprocessing.scene.add( this.postprocessing.quad );\n\n\t\t}\n\n\t}\n\n\trenderCinematic( scene, renderer ) {\n\n\t\tif ( this.postprocessing.enabled ) {\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\trenderer.clear();\n\n\t\t\t// Render scene into texture\n\n\t\t\tscene.overrideMaterial = null;\n\t\t\trenderer.setRenderTarget( this.postprocessing.rtTextureColor );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, this );\n\n\t\t\t// Render depth into texture\n\n\t\t\tscene.overrideMaterial = this.materialDepth;\n\t\t\trenderer.setRenderTarget( this.postprocessing.rtTextureDepth );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, this );\n\n\t\t\t// Render bokeh composite\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.render( this.postprocessing.scene, this.postprocessing.camera );\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t}\n\n\t}\n\n}\n\nexport { CinematicCamera };\n", "class WebGL {\n\n\tstatic isWebGLAvailable() {\n\n\t\ttry {\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tstatic isWebGL2Available() {\n\n\t\ttry {\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGL2RenderingContext && canvas.getContext( 'webgl2' ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tstatic isColorSpaceAvailable( colorSpace ) {\n\n\t\ttry {\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\tconst ctx = window.WebGL2RenderingContext && canvas.getContext( 'webgl2' );\n\t\t\tctx.drawingBufferColorSpace = colorSpace;\n\t\t\treturn ctx.drawingBufferColorSpace === colorSpace; // deepscan-disable-line SAME_OPERAND_VALUE\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tstatic getWebGLErrorMessage() {\n\n\t\treturn this.getErrorMessage( 1 );\n\n\t}\n\n\tstatic getWebGL2ErrorMessage() {\n\n\t\treturn this.getErrorMessage( 2 );\n\n\t}\n\n\tstatic getErrorMessage( version ) {\n\n\t\tconst names = {\n\t\t\t1: 'WebGL',\n\t\t\t2: 'WebGL 2'\n\t\t};\n\n\t\tconst contexts = {\n\t\t\t1: window.WebGLRenderingContext,\n\t\t\t2: window.WebGL2RenderingContext\n\t\t};\n\n\t\tlet message = 'Your $0 does not seem to support $1';\n\n\t\tconst element = document.createElement( 'div' );\n\t\telement.id = 'webglmessage';\n\t\telement.style.fontFamily = 'monospace';\n\t\telement.style.fontSize = '13px';\n\t\telement.style.fontWeight = 'normal';\n\t\telement.style.textAlign = 'center';\n\t\telement.style.background = '#fff';\n\t\telement.style.color = '#000';\n\t\telement.style.padding = '1.5em';\n\t\telement.style.width = '400px';\n\t\telement.style.margin = '5em auto 0';\n\n\t\tif ( contexts[ version ] ) {\n\n\t\t\tmessage = message.replace( '$0', 'graphics card' );\n\n\t\t} else {\n\n\t\t\tmessage = message.replace( '$0', 'browser' );\n\n\t\t}\n\n\t\tmessage = message.replace( '$1', names[ version ] );\n\n\t\telement.innerHTML = message;\n\n\t\treturn element;\n\n\t}\n\n}\n\nexport default WebGL;\n", "import {\n\tGridHelper,\n\tEllipseCurve,\n\tBufferGeometry,\n\tLine,\n\tLineBasicMaterial,\n\tRaycaster,\n\tGroup,\n\tBox3,\n\tSphere,\n\tQuaternion,\n\tVector2,\n\tVector3,\n\tMatrix4,\n\tMathUtils,\n\tEventDispatcher\n} from 'three';\n\n//trackball state\nconst STATE = {\n\n\tIDLE: Symbol(),\n\tROTATE: Symbol(),\n\tPAN: Symbol(),\n\tSCALE: Symbol(),\n\tFOV: Symbol(),\n\tFOCUS: Symbol(),\n\tZROTATE: Symbol(),\n\tTOUCH_MULTI: Symbol(),\n\tANIMATION_FOCUS: Symbol(),\n\tANIMATION_ROTATE: Symbol()\n\n};\n\nconst INPUT = {\n\n\tNONE: Symbol(),\n\tONE_FINGER: Symbol(),\n\tONE_FINGER_SWITCHED: Symbol(),\n\tTWO_FINGER: Symbol(),\n\tMULT_FINGER: Symbol(),\n\tCURSOR: Symbol()\n\n};\n\n//cursor center coordinates\nconst _center = {\n\n\tx: 0,\n\ty: 0\n\n};\n\n//transformation matrices for gizmos and camera\nconst _transformation = {\n\n\tcamera: new Matrix4(),\n\tgizmos: new Matrix4()\n\n};\n\n//events\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\n\nconst _raycaster = new Raycaster();\nconst _offset = new Vector3();\n\nconst _gizmoMatrixStateTemp = new Matrix4();\nconst _cameraMatrixStateTemp = new Matrix4();\nconst _scalePointTemp = new Vector3();\n/**\n *\n * @param {Camera} camera Virtual camera used in the scene\n * @param {HTMLElement} domElement Renderer's dom element\n * @param {Scene} scene The scene to be rendered\n */\nclass ArcballControls extends EventDispatcher {\n\n\tconstructor( camera, domElement, scene = null ) {\n\n\t\tsuper();\n\t\tthis.camera = null;\n\t\tthis.domElement = domElement;\n\t\tthis.scene = scene;\n\t\tthis.target = new Vector3();\n\t\tthis._currentTarget = new Vector3();\n\t\tthis.radiusFactor = 0.67;\n\n\t\tthis.mouseActions = [];\n\t\tthis._mouseOp = null;\n\n\n\t\t//global vectors and matrices that are used in some operations to avoid creating new objects every time (e.g. every time cursor moves)\n\t\tthis._v2_1 = new Vector2();\n\t\tthis._v3_1 = new Vector3();\n\t\tthis._v3_2 = new Vector3();\n\n\t\tthis._m4_1 = new Matrix4();\n\t\tthis._m4_2 = new Matrix4();\n\n\t\tthis._quat = new Quaternion();\n\n\t\t//transformation matrices\n\t\tthis._translationMatrix = new Matrix4(); //matrix for translation operation\n\t\tthis._rotationMatrix = new Matrix4(); //matrix for rotation operation\n\t\tthis._scaleMatrix = new Matrix4(); //matrix for scaling operation\n\n\t\tthis._rotationAxis = new Vector3(); //axis for rotate operation\n\n\n\t\t//camera state\n\t\tthis._cameraMatrixState = new Matrix4();\n\t\tthis._cameraProjectionState = new Matrix4();\n\n\t\tthis._fovState = 1;\n\t\tthis._upState = new Vector3();\n\t\tthis._zoomState = 1;\n\t\tthis._nearPos = 0;\n\t\tthis._farPos = 0;\n\n\t\tthis._gizmoMatrixState = new Matrix4();\n\n\t\t//initial values\n\t\tthis._up0 = new Vector3();\n\t\tthis._zoom0 = 1;\n\t\tthis._fov0 = 0;\n\t\tthis._initialNear = 0;\n\t\tthis._nearPos0 = 0;\n\t\tthis._initialFar = 0;\n\t\tthis._farPos0 = 0;\n\t\tthis._cameraMatrixState0 = new Matrix4();\n\t\tthis._gizmoMatrixState0 = new Matrix4();\n\n\t\t//pointers array\n\t\tthis._button = - 1;\n\t\tthis._touchStart = [];\n\t\tthis._touchCurrent = [];\n\t\tthis._input = INPUT.NONE;\n\n\t\t//two fingers touch interaction\n\t\tthis._switchSensibility = 32;\t//minimum movement to be performed to fire single pan start after the second finger has been released\n\t\tthis._startFingerDistance = 0; //distance between two fingers\n\t\tthis._currentFingerDistance = 0;\n\t\tthis._startFingerRotation = 0; //amount of rotation performed with two fingers\n\t\tthis._currentFingerRotation = 0;\n\n\t\t//double tap\n\t\tthis._devPxRatio = 0;\n\t\tthis._downValid = true;\n\t\tthis._nclicks = 0;\n\t\tthis._downEvents = [];\n\t\tthis._downStart = 0;\t//pointerDown time\n\t\tthis._clickStart = 0;\t//first click time\n\t\tthis._maxDownTime = 250;\n\t\tthis._maxInterval = 300;\n\t\tthis._posThreshold = 24;\n\t\tthis._movementThreshold = 24;\n\n\t\t//cursor positions\n\t\tthis._currentCursorPosition = new Vector3();\n\t\tthis._startCursorPosition = new Vector3();\n\n\t\t//grid\n\t\tthis._grid = null; //grid to be visualized during pan operation\n\t\tthis._gridPosition = new Vector3();\n\n\t\t//gizmos\n\t\tthis._gizmos = new Group();\n\t\tthis._curvePts = 128;\n\n\n\t\t//animations\n\t\tthis._timeStart = - 1; //initial time\n\t\tthis._animationId = - 1;\n\n\t\t//focus animation\n\t\tthis.focusAnimationTime = 500; //duration of focus animation in ms\n\n\t\t//rotate animation\n\t\tthis._timePrev = 0; //time at which previous rotate operation has been detected\n\t\tthis._timeCurrent = 0; //time at which current rotate operation has been detected\n\t\tthis._anglePrev = 0; //angle of previous rotation\n\t\tthis._angleCurrent = 0; //angle of current rotation\n\t\tthis._cursorPosPrev = new Vector3();\t//cursor position when previous rotate operation has been detected\n\t\tthis._cursorPosCurr = new Vector3();//cursor position when current rotate operation has been detected\n\t\tthis._wPrev = 0; //angular velocity of the previous rotate operation\n\t\tthis._wCurr = 0; //angular velocity of the current rotate operation\n\n\n\t\t//parameters\n\t\tthis.adjustNearFar = false;\n\t\tthis.scaleFactor = 1.1;\t//zoom/distance multiplier\n\t\tthis.dampingFactor = 25;\n\t\tthis.wMax = 20;\t//maximum angular velocity allowed\n\t\tthis.enableAnimations = true; //if animations should be performed\n\t\tthis.enableGrid = false; //if grid should be showed during pan operation\n\t\tthis.cursorZoom = false;\t//if wheel zoom should be cursor centered\n\t\tthis.minFov = 5;\n\t\tthis.maxFov = 90;\n\t\tthis.rotateSpeed = 1;\n\n\t\tthis.enabled = true;\n\t\tthis.enablePan = true;\n\t\tthis.enableRotate = true;\n\t\tthis.enableZoom = true;\n\t\tthis.enableGizmos = true;\n\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t//trackball parameters\n\t\tthis._tbRadius = 1;\n\n\t\t//FSA\n\t\tthis._state = STATE.IDLE;\n\n\t\tthis.setCamera( camera );\n\n\t\tif ( this.scene != null ) {\n\n\t\t\tthis.scene.add( this._gizmos );\n\n\t\t}\n\n\t\tthis.domElement.style.touchAction = 'none';\n\t\tthis._devPxRatio = window.devicePixelRatio;\n\n\t\tthis.initializeMouseActions();\n\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\t\tthis._onWheel = onWheel.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerCancel = onPointerCancel.bind( this );\n\t\tthis._onWindowResize = onWindowResize.bind( this );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\t\tthis.domElement.addEventListener( 'wheel', this._onWheel );\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerCancel );\n\n\t\twindow.addEventListener( 'resize', this._onWindowResize );\n\n\t}\n\n\tonSinglePanStart( event, operation ) {\n\n\t\tif ( this.enabled ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.setCenter( event.clientX, event.clientY );\n\n\t\t\tswitch ( operation ) {\n\n\t\t\t\tcase 'PAN':\n\n\t\t\t\t\tif ( ! this.enablePan ) {\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\t\tcancelAnimationFrame( this._animationId );\n\t\t\t\t\t\tthis._animationId = - 1;\n\t\t\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\t\t\tthis.activateGizmos( false );\n\t\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.PAN, true );\n\t\t\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement ) );\n\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\tthis.drawGrid();\n\t\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ROTATE':\n\n\t\t\t\t\tif ( ! this.enableRotate ) {\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\t\tcancelAnimationFrame( this._animationId );\n\t\t\t\t\t\tthis._animationId = - 1;\n\t\t\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.ROTATE, true );\n\t\t\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbSurface( this.camera, _center.x, _center.y, this.domElement, this._tbRadius ) );\n\t\t\t\t\tthis.activateGizmos( true );\n\t\t\t\t\tif ( this.enableAnimations ) {\n\n\t\t\t\t\t\tthis._timePrev = this._timeCurrent = performance.now();\n\t\t\t\t\t\tthis._angleCurrent = this._anglePrev = 0;\n\t\t\t\t\t\tthis._cursorPosPrev.copy( this._startCursorPosition );\n\t\t\t\t\t\tthis._cursorPosCurr.copy( this._cursorPosPrev );\n\t\t\t\t\t\tthis._wCurr = 0;\n\t\t\t\t\t\tthis._wPrev = this._wCurr;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'FOV':\n\n\t\t\t\t\tif ( ! this.camera.isPerspectiveCamera || ! this.enableZoom ) {\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\t\tcancelAnimationFrame( this._animationId );\n\t\t\t\t\t\tthis._animationId = - 1;\n\t\t\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\t\t\tthis.activateGizmos( false );\n\t\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.FOV, true );\n\t\t\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZOOM':\n\n\t\t\t\t\tif ( ! this.enableZoom ) {\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\t\tcancelAnimationFrame( this._animationId );\n\t\t\t\t\t\tthis._animationId = - 1;\n\t\t\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\t\t\tthis.activateGizmos( false );\n\t\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.SCALE, true );\n\t\t\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tonSinglePanMove( event, opState ) {\n\n\t\tif ( this.enabled ) {\n\n\t\t\tconst restart = opState != this._state;\n\t\t\tthis.setCenter( event.clientX, event.clientY );\n\n\t\t\tswitch ( opState ) {\n\n\t\t\t\tcase STATE.PAN:\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tif ( restart ) {\n\n\t\t\t\t\t\t\t//switch to pan operation\n\n\t\t\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\t\t\t\t\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\t\t\t\t\tthis.updateTbState( opState, true );\n\t\t\t\t\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement ) );\n\t\t\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\t\t\tthis.drawGrid();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t//continue with pan operation\n\t\t\t\t\t\t\tthis._currentCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement ) );\n\t\t\t\t\t\t\tthis.applyTransformMatrix( this.pan( this._startCursorPosition, this._currentCursorPosition ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.ROTATE:\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tif ( restart ) {\n\n\t\t\t\t\t\t\t//switch to rotate operation\n\n\t\t\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\t\t\t\t\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\t\t\t\t\tthis.updateTbState( opState, true );\n\t\t\t\t\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbSurface( this.camera, _center.x, _center.y, this.domElement, this._tbRadius ) );\n\n\t\t\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\t\t\tthis.disposeGrid();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.activateGizmos( true );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t//continue with rotate operation\n\t\t\t\t\t\t\tthis._currentCursorPosition.copy( this.unprojectOnTbSurface( this.camera, _center.x, _center.y, this.domElement, this._tbRadius ) );\n\n\t\t\t\t\t\t\tconst distance = this._startCursorPosition.distanceTo( this._currentCursorPosition );\n\t\t\t\t\t\t\tconst angle = this._startCursorPosition.angleTo( this._currentCursorPosition );\n\t\t\t\t\t\t\tconst amount = Math.max( distance / this._tbRadius, angle ) * this.rotateSpeed; //effective rotation angle\n\n\t\t\t\t\t\t\tthis.applyTransformMatrix( this.rotate( this.calculateRotationAxis( this._startCursorPosition, this._currentCursorPosition ), amount ) );\n\n\t\t\t\t\t\t\tif ( this.enableAnimations ) {\n\n\t\t\t\t\t\t\t\tthis._timePrev = this._timeCurrent;\n\t\t\t\t\t\t\t\tthis._timeCurrent = performance.now();\n\t\t\t\t\t\t\t\tthis._anglePrev = this._angleCurrent;\n\t\t\t\t\t\t\t\tthis._angleCurrent = amount;\n\t\t\t\t\t\t\t\tthis._cursorPosPrev.copy( this._cursorPosCurr );\n\t\t\t\t\t\t\t\tthis._cursorPosCurr.copy( this._currentCursorPosition );\n\t\t\t\t\t\t\t\tthis._wPrev = this._wCurr;\n\t\t\t\t\t\t\t\tthis._wCurr = this.calculateAngularSpeed( this._anglePrev, this._angleCurrent, this._timePrev, this._timeCurrent );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.SCALE:\n\n\t\t\t\t\tif ( this.enableZoom ) {\n\n\t\t\t\t\t\tif ( restart ) {\n\n\t\t\t\t\t\t\t//switch to zoom operation\n\n\t\t\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\t\t\t\t\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\t\t\t\t\tthis.updateTbState( opState, true );\n\t\t\t\t\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\t\t\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\n\t\t\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\t\t\tthis.disposeGrid();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t//continue with zoom operation\n\t\t\t\t\t\t\tconst screenNotches = 8;\t//how many wheel notches corresponds to a full screen pan\n\t\t\t\t\t\t\tthis._currentCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\n\t\t\t\t\t\t\tconst movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n\n\t\t\t\t\t\t\tlet size = 1;\n\n\t\t\t\t\t\t\tif ( movement < 0 ) {\n\n\t\t\t\t\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, - movement * screenNotches ) );\n\n\t\t\t\t\t\t\t} else if ( movement > 0 ) {\n\n\t\t\t\t\t\t\t\tsize = Math.pow( this.scaleFactor, movement * screenNotches );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._v3_1.setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, this._v3_1 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.FOV:\n\n\t\t\t\t\tif ( this.enableZoom && this.camera.isPerspectiveCamera ) {\n\n\t\t\t\t\t\tif ( restart ) {\n\n\t\t\t\t\t\t\t//switch to fov operation\n\n\t\t\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\t\t\t\t\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\t\t\t\t\tthis.updateTbState( opState, true );\n\t\t\t\t\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\t\t\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\n\t\t\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\t\t\tthis.disposeGrid();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t//continue with fov operation\n\t\t\t\t\t\t\tconst screenNotches = 8;\t//how many wheel notches corresponds to a full screen pan\n\t\t\t\t\t\t\tthis._currentCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\n\t\t\t\t\t\t\tconst movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n\n\t\t\t\t\t\t\tlet size = 1;\n\n\t\t\t\t\t\t\tif ( movement < 0 ) {\n\n\t\t\t\t\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, - movement * screenNotches ) );\n\n\t\t\t\t\t\t\t} else if ( movement > 0 ) {\n\n\t\t\t\t\t\t\t\tsize = Math.pow( this.scaleFactor, movement * screenNotches );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState );\n\t\t\t\t\t\t\tconst x = this._v3_1.distanceTo( this._gizmos.position );\n\t\t\t\t\t\t\tlet xNew = x / size; //distance between camera and gizmos if scale(size, scalepoint) would be performed\n\n\t\t\t\t\t\t\t//check min and max distance\n\t\t\t\t\t\t\txNew = MathUtils.clamp( xNew, this.minDistance, this.maxDistance );\n\n\t\t\t\t\t\t\tconst y = x * Math.tan( MathUtils.DEG2RAD * this._fovState * 0.5 );\n\n\t\t\t\t\t\t\t//calculate new fov\n\t\t\t\t\t\t\tlet newFov = MathUtils.RAD2DEG * ( Math.atan( y / xNew ) * 2 );\n\n\t\t\t\t\t\t\t//check min and max fov\n\t\t\t\t\t\t\tnewFov = MathUtils.clamp( newFov, this.minFov, this.maxFov );\n\n\t\t\t\t\t\t\tconst newDistance = y / Math.tan( MathUtils.DEG2RAD * ( newFov / 2 ) );\n\t\t\t\t\t\t\tsize = x / newDistance;\n\t\t\t\t\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\t\t\t\t\tthis.setFov( newFov );\n\t\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, this._v3_2, false ) );\n\n\t\t\t\t\t\t\t//adjusting distance\n\t\t\t\t\t\t\t_offset.copy( this._gizmos.position ).sub( this.camera.position ).normalize().multiplyScalar( newDistance / x );\n\t\t\t\t\t\t\tthis._m4_1.makeTranslation( _offset.x, _offset.y, _offset.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonSinglePanEnd() {\n\n\t\tif ( this._state == STATE.ROTATE ) {\n\n\n\t\t\tif ( ! this.enableRotate ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( this.enableAnimations ) {\n\n\t\t\t\t//perform rotation animation\n\t\t\t\tconst deltaTime = ( performance.now() - this._timeCurrent );\n\t\t\t\tif ( deltaTime < 120 ) {\n\n\t\t\t\t\tconst w = Math.abs( ( this._wPrev + this._wCurr ) / 2 );\n\n\t\t\t\t\tconst self = this;\n\t\t\t\t\tthis._animationId = window.requestAnimationFrame( function ( t ) {\n\n\t\t\t\t\t\tself.updateTbState( STATE.ANIMATION_ROTATE, true );\n\t\t\t\t\t\tconst rotationAxis = self.calculateRotationAxis( self._cursorPosPrev, self._cursorPosCurr );\n\n\t\t\t\t\t\tself.onRotationAnim( t, rotationAxis, Math.min( w, self.wMax ) );\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t//cursor has been standing still for over 120 ms since last movement\n\t\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\t\tthis.activateGizmos( false );\n\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\tthis.activateGizmos( false );\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t}\n\n\t\t} else if ( this._state == STATE.PAN || this._state == STATE.IDLE ) {\n\n\t\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\tthis.disposeGrid();\n\n\t\t\t}\n\n\t\t\tthis.activateGizmos( false );\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\n\t\t}\n\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonDoubleTap( event ) {\n\n\t\tif ( this.enabled && this.enablePan && this.scene != null ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.setCenter( event.clientX, event.clientY );\n\t\t\tconst hitP = this.unprojectOnObj( this.getCursorNDC( _center.x, _center.y, this.domElement ), this.camera );\n\n\t\t\tif ( hitP != null && this.enableAnimations ) {\n\n\t\t\t\tconst self = this;\n\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\twindow.cancelAnimationFrame( this._animationId );\n\n\t\t\t\t}\n\n\t\t\t\tthis._timeStart = - 1;\n\t\t\t\tthis._animationId = window.requestAnimationFrame( function ( t ) {\n\n\t\t\t\t\tself.updateTbState( STATE.ANIMATION_FOCUS, true );\n\t\t\t\t\tself.onFocusAnim( t, hitP, self._cameraMatrixState, self._gizmoMatrixState );\n\n\t\t\t\t} );\n\n\t\t\t} else if ( hitP != null && ! this.enableAnimations ) {\n\n\t\t\t\tthis.updateTbState( STATE.FOCUS, true );\n\t\t\t\tthis.focus( hitP, this.scaleFactor );\n\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonDoublePanStart() {\n\n\t\tif ( this.enabled && this.enablePan ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.updateTbState( STATE.PAN, true );\n\n\t\t\tthis.setCenter( ( this._touchCurrent[ 0 ].clientX + this._touchCurrent[ 1 ].clientX ) / 2, ( this._touchCurrent[ 0 ].clientY + this._touchCurrent[ 1 ].clientY ) / 2 );\n\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement, true ) );\n\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\n\t\t\tthis.activateGizmos( false );\n\n\t\t}\n\n\t}\n\n\tonDoublePanMove() {\n\n\t\tif ( this.enabled && this.enablePan ) {\n\n\t\t\tthis.setCenter( ( this._touchCurrent[ 0 ].clientX + this._touchCurrent[ 1 ].clientX ) / 2, ( this._touchCurrent[ 0 ].clientY + this._touchCurrent[ 1 ].clientY ) / 2 );\n\n\t\t\tif ( this._state != STATE.PAN ) {\n\n\t\t\t\tthis.updateTbState( STATE.PAN, true );\n\t\t\t\tthis._startCursorPosition.copy( this._currentCursorPosition );\n\n\t\t\t}\n\n\t\t\tthis._currentCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement, true ) );\n\t\t\tthis.applyTransformMatrix( this.pan( this._startCursorPosition, this._currentCursorPosition, true ) );\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonDoublePanEnd() {\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonRotateStart() {\n\n\t\tif ( this.enabled && this.enableRotate ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.updateTbState( STATE.ZROTATE, true );\n\n\t\t\t//this._startFingerRotation = event.rotation;\n\n\t\t\tthis._startFingerRotation = this.getAngle( this._touchCurrent[ 1 ], this._touchCurrent[ 0 ] ) + this.getAngle( this._touchStart[ 1 ], this._touchStart[ 0 ] );\n\t\t\tthis._currentFingerRotation = this._startFingerRotation;\n\n\t\t\tthis.camera.getWorldDirection( this._rotationAxis ); //rotation axis\n\n\t\t\tif ( ! this.enablePan && ! this.enableZoom ) {\n\n\t\t\t\tthis.activateGizmos( true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tonRotateMove() {\n\n\t\tif ( this.enabled && this.enableRotate ) {\n\n\t\t\tthis.setCenter( ( this._touchCurrent[ 0 ].clientX + this._touchCurrent[ 1 ].clientX ) / 2, ( this._touchCurrent[ 0 ].clientY + this._touchCurrent[ 1 ].clientY ) / 2 );\n\t\t\tlet rotationPoint;\n\n\t\t\tif ( this._state != STATE.ZROTATE ) {\n\n\t\t\t\tthis.updateTbState( STATE.ZROTATE, true );\n\t\t\t\tthis._startFingerRotation = this._currentFingerRotation;\n\n\t\t\t}\n\n\t\t\t//this._currentFingerRotation = event.rotation;\n\t\t\tthis._currentFingerRotation = this.getAngle( this._touchCurrent[ 1 ], this._touchCurrent[ 0 ] ) + this.getAngle( this._touchStart[ 1 ], this._touchStart[ 0 ] );\n\n\t\t\tif ( ! this.enablePan ) {\n\n\t\t\t\trotationPoint = new Vector3().setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\t} else {\n\n\t\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState );\n\t\t\t\trotationPoint = this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement ).applyQuaternion( this.camera.quaternion ).multiplyScalar( 1 / this.camera.zoom ).add( this._v3_2 );\n\n\t\t\t}\n\n\t\t\tconst amount = MathUtils.DEG2RAD * ( this._startFingerRotation - this._currentFingerRotation );\n\n\t\t\tthis.applyTransformMatrix( this.zRotate( rotationPoint, amount ) );\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonRotateEnd() {\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\t\tthis.activateGizmos( false );\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonPinchStart() {\n\n\t\tif ( this.enabled && this.enableZoom ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\t\t\tthis.updateTbState( STATE.SCALE, true );\n\n\t\t\tthis._startFingerDistance = this.calculatePointersDistance( this._touchCurrent[ 0 ], this._touchCurrent[ 1 ] );\n\t\t\tthis._currentFingerDistance = this._startFingerDistance;\n\n\t\t\tthis.activateGizmos( false );\n\n\t\t}\n\n\t}\n\n\tonPinchMove() {\n\n\t\tif ( this.enabled && this.enableZoom ) {\n\n\t\t\tthis.setCenter( ( this._touchCurrent[ 0 ].clientX + this._touchCurrent[ 1 ].clientX ) / 2, ( this._touchCurrent[ 0 ].clientY + this._touchCurrent[ 1 ].clientY ) / 2 );\n\t\t\tconst minDistance = 12; //minimum distance between fingers (in css pixels)\n\n\t\t\tif ( this._state != STATE.SCALE ) {\n\n\t\t\t\tthis._startFingerDistance = this._currentFingerDistance;\n\t\t\t\tthis.updateTbState( STATE.SCALE, true );\n\n\t\t\t}\n\n\t\t\tthis._currentFingerDistance = Math.max( this.calculatePointersDistance( this._touchCurrent[ 0 ], this._touchCurrent[ 1 ] ), minDistance * this._devPxRatio );\n\t\t\tconst amount = this._currentFingerDistance / this._startFingerDistance;\n\n\t\t\tlet scalePoint;\n\n\t\t\tif ( ! this.enablePan ) {\n\n\t\t\t\tscalePoint = this._gizmos.position;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t\t\tscalePoint = this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement )\n\t\t\t\t\t\t.applyQuaternion( this.camera.quaternion )\n\t\t\t\t\t\t.multiplyScalar( 1 / this.camera.zoom )\n\t\t\t\t\t\t.add( this._gizmos.position );\n\n\t\t\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\t\tscalePoint = this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement )\n\t\t\t\t\t\t.applyQuaternion( this.camera.quaternion )\n\t\t\t\t\t\t.add( this._gizmos.position );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.applyTransformMatrix( this.scale( amount, scalePoint ) );\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonPinchEnd() {\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonTriplePanStart() {\n\n\t\tif ( this.enabled && this.enableZoom ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.updateTbState( STATE.SCALE, true );\n\n\t\t\t//const center = event.center;\n\t\t\tlet clientX = 0;\n\t\t\tlet clientY = 0;\n\t\t\tconst nFingers = this._touchCurrent.length;\n\n\t\t\tfor ( let i = 0; i < nFingers; i ++ ) {\n\n\t\t\t\tclientX += this._touchCurrent[ i ].clientX;\n\t\t\t\tclientY += this._touchCurrent[ i ].clientY;\n\n\t\t\t}\n\n\t\t\tthis.setCenter( clientX / nFingers, clientY / nFingers );\n\n\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\n\t\t}\n\n\t}\n\n\tonTriplePanMove() {\n\n\t\tif ( this.enabled && this.enableZoom ) {\n\n\t\t\t//\t fov / 2\n\t\t\t//\t\t|\\\n\t\t\t//\t\t| \\\n\t\t\t//\t\t| \\\n\t\t\t//\tx\t|\t\\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t\t| _ _ _\\\n\t\t\t//\t\t\ty\n\n\t\t\t//const center = event.center;\n\t\t\tlet clientX = 0;\n\t\t\tlet clientY = 0;\n\t\t\tconst nFingers = this._touchCurrent.length;\n\n\t\t\tfor ( let i = 0; i < nFingers; i ++ ) {\n\n\t\t\t\tclientX += this._touchCurrent[ i ].clientX;\n\t\t\t\tclientY += this._touchCurrent[ i ].clientY;\n\n\t\t\t}\n\n\t\t\tthis.setCenter( clientX / nFingers, clientY / nFingers );\n\n\t\t\tconst screenNotches = 8;\t//how many wheel notches corresponds to a full screen pan\n\t\t\tthis._currentCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\n\t\t\tconst movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n\n\t\t\tlet size = 1;\n\n\t\t\tif ( movement < 0 ) {\n\n\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, - movement * screenNotches ) );\n\n\t\t\t} else if ( movement > 0 ) {\n\n\t\t\t\tsize = Math.pow( this.scaleFactor, movement * screenNotches );\n\n\t\t\t}\n\n\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState );\n\t\t\tconst x = this._v3_1.distanceTo( this._gizmos.position );\n\t\t\tlet xNew = x / size; //distance between camera and gizmos if scale(size, scalepoint) would be performed\n\n\t\t\t//check min and max distance\n\t\t\txNew = MathUtils.clamp( xNew, this.minDistance, this.maxDistance );\n\n\t\t\tconst y = x * Math.tan( MathUtils.DEG2RAD * this._fovState * 0.5 );\n\n\t\t\t//calculate new fov\n\t\t\tlet newFov = MathUtils.RAD2DEG * ( Math.atan( y / xNew ) * 2 );\n\n\t\t\t//check min and max fov\n\t\t\tnewFov = MathUtils.clamp( newFov, this.minFov, this.maxFov );\n\n\t\t\tconst newDistance = y / Math.tan( MathUtils.DEG2RAD * ( newFov / 2 ) );\n\t\t\tsize = x / newDistance;\n\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\tthis.setFov( newFov );\n\t\t\tthis.applyTransformMatrix( this.scale( size, this._v3_2, false ) );\n\n\t\t\t//adjusting distance\n\t\t\t_offset.copy( this._gizmos.position ).sub( this.camera.position ).normalize().multiplyScalar( newDistance / x );\n\t\t\tthis._m4_1.makeTranslation( _offset.x, _offset.y, _offset.z );\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonTriplePanEnd() {\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\t\tthis.dispatchEvent( _endEvent );\n\t\t//this.dispatchEvent( _changeEvent );\n\n\t}\n\n\t/**\n\t * Set _center's x/y coordinates\n\t * @param {Number} clientX\n\t * @param {Number} clientY\n\t */\n\tsetCenter( clientX, clientY ) {\n\n\t\t_center.x = clientX;\n\t\t_center.y = clientY;\n\n\t}\n\n\t/**\n\t * Set default mouse actions\n\t */\n\tinitializeMouseActions() {\n\n\t\tthis.setMouseAction( 'PAN', 0, 'CTRL' );\n\t\tthis.setMouseAction( 'PAN', 2 );\n\n\t\tthis.setMouseAction( 'ROTATE', 0 );\n\n\t\tthis.setMouseAction( 'ZOOM', 'WHEEL' );\n\t\tthis.setMouseAction( 'ZOOM', 1 );\n\n\t\tthis.setMouseAction( 'FOV', 'WHEEL', 'SHIFT' );\n\t\tthis.setMouseAction( 'FOV', 1, 'SHIFT' );\n\n\n\t}\n\n\t/**\n\t * Compare two mouse actions\n\t * @param {Object} action1\n\t * @param {Object} action2\n\t * @returns {Boolean} True if action1 and action 2 are the same mouse action, false otherwise\n\t */\n\tcompareMouseAction( action1, action2 ) {\n\n\t\tif ( action1.operation == action2.operation ) {\n\n\t\t\tif ( action1.mouse == action2.mouse && action1.key == action2.key ) {\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one\n\t * @param {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV)\n\t * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n\t * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n\t * @returns {Boolean} True if the mouse action has been successfully added, false otherwise\n\t */\n\tsetMouseAction( operation, mouse, key = null ) {\n\n\t\tconst operationInput = [ 'PAN', 'ROTATE', 'ZOOM', 'FOV' ];\n\t\tconst mouseInput = [ 0, 1, 2, 'WHEEL' ];\n\t\tconst keyInput = [ 'CTRL', 'SHIFT', null ];\n\t\tlet state;\n\n\t\tif ( ! operationInput.includes( operation ) || ! mouseInput.includes( mouse ) || ! keyInput.includes( key ) ) {\n\n\t\t\t//invalid parameters\n\t\t\treturn false;\n\n\t\t}\n\n\t\tif ( mouse == 'WHEEL' ) {\n\n\t\t\tif ( operation != 'ZOOM' && operation != 'FOV' ) {\n\n\t\t\t\t//cannot associate 2D operation to 1D input\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tswitch ( operation ) {\n\n\t\t\tcase 'PAN':\n\n\t\t\t\tstate = STATE.PAN;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROTATE':\n\n\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZOOM':\n\n\t\t\t\tstate = STATE.SCALE;\n\t\t\t\tbreak;\n\n\t\t\tcase 'FOV':\n\n\t\t\t\tstate = STATE.FOV;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst action = {\n\n\t\t\toperation: operation,\n\t\t\tmouse: mouse,\n\t\t\tkey: key,\n\t\t\tstate: state\n\n\t\t};\n\n\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\tif ( this.mouseActions[ i ].mouse == action.mouse && this.mouseActions[ i ].key == action.key ) {\n\n\t\t\t\tthis.mouseActions.splice( i, 1, action );\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.mouseActions.push( action );\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Remove a mouse action by specifying its mouse/key combination\n\t * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n\t * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n\t * @returns {Boolean} True if the operation has been succesfully removed, false otherwise\n\t */\n\tunsetMouseAction( mouse, key = null ) {\n\n\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\tif ( this.mouseActions[ i ].mouse == mouse && this.mouseActions[ i ].key == key ) {\n\n\t\t\t\tthis.mouseActions.splice( i, 1 );\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Return the operation associated to a mouse/keyboard combination\n\t * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n\t * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n\t * @returns The operation if it has been found, null otherwise\n\t */\n\tgetOpFromAction( mouse, key ) {\n\n\t\tlet action;\n\n\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\taction = this.mouseActions[ i ];\n\t\t\tif ( action.mouse == mouse && action.key == key ) {\n\n\t\t\t\treturn action.operation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( key != null ) {\n\n\t\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\t\taction = this.mouseActions[ i ];\n\t\t\t\tif ( action.mouse == mouse && action.key == null ) {\n\n\t\t\t\t\treturn action.operation;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Get the operation associated to mouse and key combination and returns the corresponding FSA state\n\t * @param {Number} mouse Mouse button\n\t * @param {String} key Keyboard modifier\n\t * @returns The FSA state obtained from the operation associated to mouse/keyboard combination\n\t */\n\tgetOpStateFromAction( mouse, key ) {\n\n\t\tlet action;\n\n\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\taction = this.mouseActions[ i ];\n\t\t\tif ( action.mouse == mouse && action.key == key ) {\n\n\t\t\t\treturn action.state;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( key != null ) {\n\n\t\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\t\taction = this.mouseActions[ i ];\n\t\t\t\tif ( action.mouse == mouse && action.key == null ) {\n\n\t\t\t\t\treturn action.state;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Calculate the angle between two pointers\n\t * @param {PointerEvent} p1\n\t * @param {PointerEvent} p2\n\t * @returns {Number} The angle between two pointers in degrees\n\t */\n\tgetAngle( p1, p2 ) {\n\n\t\treturn Math.atan2( p2.clientY - p1.clientY, p2.clientX - p1.clientX ) * 180 / Math.PI;\n\n\t}\n\n\t/**\n\t * Update a PointerEvent inside current pointerevents array\n\t * @param {PointerEvent} event\n\t */\n\tupdateTouchEvent( event ) {\n\n\t\tfor ( let i = 0; i < this._touchCurrent.length; i ++ ) {\n\n\t\t\tif ( this._touchCurrent[ i ].pointerId == event.pointerId ) {\n\n\t\t\t\tthis._touchCurrent.splice( i, 1, event );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Apply a transformation matrix, to the camera and gizmos\n\t * @param {Object} transformation Object containing matrices to apply to camera and gizmos\n\t */\n\tapplyTransformMatrix( transformation ) {\n\n\t\tif ( transformation.camera != null ) {\n\n\t\t\tthis._m4_1.copy( this._cameraMatrixState ).premultiply( transformation.camera );\n\t\t\tthis._m4_1.decompose( this.camera.position, this.camera.quaternion, this.camera.scale );\n\t\t\tthis.camera.updateMatrix();\n\n\t\t\t//update camera up vector\n\t\t\tif ( this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE ) {\n\n\t\t\t\tthis.camera.up.copy( this._upState ).applyQuaternion( this.camera.quaternion );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( transformation.gizmos != null ) {\n\n\t\t\tthis._m4_1.copy( this._gizmoMatrixState ).premultiply( transformation.gizmos );\n\t\t\tthis._m4_1.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\t\t\tthis._gizmos.updateMatrix();\n\n\t\t}\n\n\t\tif ( this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS ) {\n\n\t\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\n\t\t\tif ( this.adjustNearFar ) {\n\n\t\t\t\tconst cameraDistance = this.camera.position.distanceTo( this._gizmos.position );\n\n\t\t\t\tconst bb = new Box3();\n\t\t\t\tbb.setFromObject( this._gizmos );\n\t\t\t\tconst sphere = new Sphere();\n\t\t\t\tbb.getBoundingSphere( sphere );\n\n\t\t\t\tconst adjustedNearPosition = Math.max( this._nearPos0, sphere.radius + sphere.center.length() );\n\t\t\t\tconst regularNearPosition = cameraDistance - this._initialNear;\n\n\t\t\t\tconst minNearPos = Math.min( adjustedNearPosition, regularNearPosition );\n\t\t\t\tthis.camera.near = cameraDistance - minNearPos;\n\n\n\t\t\t\tconst adjustedFarPosition = Math.min( this._farPos0, - sphere.radius + sphere.center.length() );\n\t\t\t\tconst regularFarPosition = cameraDistance - this._initialFar;\n\n\t\t\t\tconst minFarPos = Math.min( adjustedFarPosition, regularFarPosition );\n\t\t\t\tthis.camera.far = cameraDistance - minFarPos;\n\n\t\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\t} else {\n\n\t\t\t\tlet update = false;\n\n\t\t\t\tif ( this.camera.near != this._initialNear ) {\n\n\t\t\t\t\tthis.camera.near = this._initialNear;\n\t\t\t\t\tupdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.camera.far != this._initialFar ) {\n\n\t\t\t\t\tthis.camera.far = this._initialFar;\n\t\t\t\t\tupdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tif ( update ) {\n\n\t\t\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Calculate the angular speed\n\t * @param {Number} p0 Position at t0\n\t * @param {Number} p1 Position at t1\n\t * @param {Number} t0 Initial time in milliseconds\n\t * @param {Number} t1 Ending time in milliseconds\n\t */\n\tcalculateAngularSpeed( p0, p1, t0, t1 ) {\n\n\t\tconst s = p1 - p0;\n\t\tconst t = ( t1 - t0 ) / 1000;\n\t\tif ( t == 0 ) {\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\treturn s / t;\n\n\t}\n\n\t/**\n\t * Calculate the distance between two pointers\n\t * @param {PointerEvent} p0 The first pointer\n\t * @param {PointerEvent} p1 The second pointer\n\t * @returns {number} The distance between the two pointers\n\t */\n\tcalculatePointersDistance( p0, p1 ) {\n\n\t\treturn Math.sqrt( Math.pow( p1.clientX - p0.clientX, 2 ) + Math.pow( p1.clientY - p0.clientY, 2 ) );\n\n\t}\n\n\t/**\n\t * Calculate the rotation axis as the vector perpendicular between two vectors\n\t * @param {Vector3} vec1 The first vector\n\t * @param {Vector3} vec2 The second vector\n\t * @returns {Vector3} The normalized rotation axis\n\t */\n\tcalculateRotationAxis( vec1, vec2 ) {\n\n\t\tthis._rotationMatrix.extractRotation( this._cameraMatrixState );\n\t\tthis._quat.setFromRotationMatrix( this._rotationMatrix );\n\n\t\tthis._rotationAxis.crossVectors( vec1, vec2 ).applyQuaternion( this._quat );\n\t\treturn this._rotationAxis.normalize().clone();\n\n\t}\n\n\t/**\n\t * Calculate the trackball radius so that gizmo's diamater will be 2/3 of the minimum side of the camera frustum\n\t * @param {Camera} camera\n\t * @returns {Number} The trackball radius\n\t */\n\tcalculateTbRadius( camera ) {\n\n\t\tconst distance = camera.position.distanceTo( this._gizmos.position );\n\n\t\tif ( camera.type == 'PerspectiveCamera' ) {\n\n\t\t\tconst halfFovV = MathUtils.DEG2RAD * camera.fov * 0.5; //vertical fov/2 in radians\n\t\t\tconst halfFovH = Math.atan( ( camera.aspect ) * Math.tan( halfFovV ) ); //horizontal fov/2 in radians\n\t\t\treturn Math.tan( Math.min( halfFovV, halfFovH ) ) * distance * this.radiusFactor;\n\n\t\t} else if ( camera.type == 'OrthographicCamera' ) {\n\n\t\t\treturn Math.min( camera.top, camera.right ) * this.radiusFactor;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in\n\t * @param {Vector3} point The point of interest\n\t * @param {Number} size Scale factor\n\t * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation)\n\t */\n\tfocus( point, size, amount = 1 ) {\n\n\t\t//move center of camera (along with gizmos) towards point of interest\n\t\t_offset.copy( point ).sub( this._gizmos.position ).multiplyScalar( amount );\n\t\tthis._translationMatrix.makeTranslation( _offset.x, _offset.y, _offset.z );\n\n\t\t_gizmoMatrixStateTemp.copy( this._gizmoMatrixState );\n\t\tthis._gizmoMatrixState.premultiply( this._translationMatrix );\n\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\n\t\t_cameraMatrixStateTemp.copy( this._cameraMatrixState );\n\t\tthis._cameraMatrixState.premultiply( this._translationMatrix );\n\t\tthis._cameraMatrixState.decompose( this.camera.position, this.camera.quaternion, this.camera.scale );\n\n\t\t//apply zoom\n\t\tif ( this.enableZoom ) {\n\n\t\t\tthis.applyTransformMatrix( this.scale( size, this._gizmos.position ) );\n\n\t\t}\n\n\t\tthis._gizmoMatrixState.copy( _gizmoMatrixStateTemp );\n\t\tthis._cameraMatrixState.copy( _cameraMatrixStateTemp );\n\n\t}\n\n\t/**\n\t * Draw a grid and add it to the scene\n\t */\n\tdrawGrid() {\n\n\t\tif ( this.scene != null ) {\n\n\t\t\tconst color = 0x888888;\n\t\t\tconst multiplier = 3;\n\t\t\tlet size, divisions, maxLength, tick;\n\n\t\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t\tconst width = this.camera.right - this.camera.left;\n\t\t\t\tconst height = this.camera.bottom - this.camera.top;\n\n\t\t\t\tmaxLength = Math.max( width, height );\n\t\t\t\ttick = maxLength / 20;\n\n\t\t\t\tsize = maxLength / this.camera.zoom * multiplier;\n\t\t\t\tdivisions = size / tick * this.camera.zoom;\n\n\t\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\tconst distance = this.camera.position.distanceTo( this._gizmos.position );\n\t\t\t\tconst halfFovV = MathUtils.DEG2RAD * this.camera.fov * 0.5;\n\t\t\t\tconst halfFovH = Math.atan( ( this.camera.aspect ) * Math.tan( halfFovV ) );\n\n\t\t\t\tmaxLength = Math.tan( Math.max( halfFovV, halfFovH ) ) * distance * 2;\n\t\t\t\ttick = maxLength / 20;\n\n\t\t\t\tsize = maxLength * multiplier;\n\t\t\t\tdivisions = size / tick;\n\n\t\t\t}\n\n\t\t\tif ( this._grid == null ) {\n\n\t\t\t\tthis._grid = new GridHelper( size, divisions, color, color );\n\t\t\t\tthis._grid.position.copy( this._gizmos.position );\n\t\t\t\tthis._gridPosition.copy( this._grid.position );\n\t\t\t\tthis._grid.quaternion.copy( this.camera.quaternion );\n\t\t\t\tthis._grid.rotateX( Math.PI * 0.5 );\n\n\t\t\t\tthis.scene.add( this._grid );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Remove all listeners, stop animations and clean scene\n\t */\n\tdispose() {\n\n\t\tif ( this._animationId != - 1 ) {\n\n\t\t\twindow.cancelAnimationFrame( this._animationId );\n\n\t\t}\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );\n\t\tthis.domElement.removeEventListener( 'wheel', this._onWheel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\twindow.removeEventListener( 'pointermove', this._onPointerMove );\n\t\twindow.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\twindow.removeEventListener( 'resize', this._onWindowResize );\n\n\t\tif ( this.scene !== null ) this.scene.remove( this._gizmos );\n\t\tthis.disposeGrid();\n\n\t}\n\n\t/**\n\t * remove the grid from the scene\n\t */\n\tdisposeGrid() {\n\n\t\tif ( this._grid != null && this.scene != null ) {\n\n\t\t\tthis.scene.remove( this._grid );\n\t\t\tthis._grid = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Compute the easing out cubic function for ease out effect in animation\n\t * @param {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation)\n\t * @returns {Number} Result of easing out cubic at time t\n\t */\n\teaseOutCubic( t ) {\n\n\t\treturn 1 - Math.pow( 1 - t, 3 );\n\n\t}\n\n\t/**\n\t * Make rotation gizmos more or less visible\n\t * @param {Boolean} isActive If true, make gizmos more visible\n\t */\n\tactivateGizmos( isActive ) {\n\n\t\tconst gizmoX = this._gizmos.children[ 0 ];\n\t\tconst gizmoY = this._gizmos.children[ 1 ];\n\t\tconst gizmoZ = this._gizmos.children[ 2 ];\n\n\t\tif ( isActive ) {\n\n\t\t\tgizmoX.material.setValues( { opacity: 1 } );\n\t\t\tgizmoY.material.setValues( { opacity: 1 } );\n\t\t\tgizmoZ.material.setValues( { opacity: 1 } );\n\n\t\t} else {\n\n\t\t\tgizmoX.material.setValues( { opacity: 0.6 } );\n\t\t\tgizmoY.material.setValues( { opacity: 0.6 } );\n\t\t\tgizmoZ.material.setValues( { opacity: 0.6 } );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Calculate the cursor position in NDC\n\t * @param {number} x Cursor horizontal coordinate within the canvas\n\t * @param {number} y Cursor vertical coordinate within the canvas\n\t * @param {HTMLElement} canvas The canvas where the renderer draws its output\n\t * @returns {Vector2} Cursor normalized position inside the canvas\n\t */\n\tgetCursorNDC( cursorX, cursorY, canvas ) {\n\n\t\tconst canvasRect = canvas.getBoundingClientRect();\n\t\tthis._v2_1.setX( ( ( cursorX - canvasRect.left ) / canvasRect.width ) * 2 - 1 );\n\t\tthis._v2_1.setY( ( ( canvasRect.bottom - cursorY ) / canvasRect.height ) * 2 - 1 );\n\t\treturn this._v2_1.clone();\n\n\t}\n\n\t/**\n\t * Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas\n\t * @param {Number} x Cursor horizontal coordinate within the canvas\n\t * @param {Number} y Cursor vertical coordinate within the canvas\n\t * @param {HTMLElement} canvas The canvas where the renderer draws its output\n\t * @returns {Vector2} Cursor position inside the canvas\n\t */\n\tgetCursorPosition( cursorX, cursorY, canvas ) {\n\n\t\tthis._v2_1.copy( this.getCursorNDC( cursorX, cursorY, canvas ) );\n\t\tthis._v2_1.x *= ( this.camera.right - this.camera.left ) * 0.5;\n\t\tthis._v2_1.y *= ( this.camera.top - this.camera.bottom ) * 0.5;\n\t\treturn this._v2_1.clone();\n\n\t}\n\n\t/**\n\t * Set the camera to be controlled\n\t * @param {Camera} camera The virtual camera to be controlled\n\t */\n\tsetCamera( camera ) {\n\n\t\tcamera.lookAt( this.target );\n\t\tcamera.updateMatrix();\n\n\t\t//setting state\n\t\tif ( camera.type == 'PerspectiveCamera' ) {\n\n\t\t\tthis._fov0 = camera.fov;\n\t\t\tthis._fovState = camera.fov;\n\n\t\t}\n\n\t\tthis._cameraMatrixState0.copy( camera.matrix );\n\t\tthis._cameraMatrixState.copy( this._cameraMatrixState0 );\n\t\tthis._cameraProjectionState.copy( camera.projectionMatrix );\n\t\tthis._zoom0 = camera.zoom;\n\t\tthis._zoomState = this._zoom0;\n\n\t\tthis._initialNear = camera.near;\n\t\tthis._nearPos0 = camera.position.distanceTo( this.target ) - camera.near;\n\t\tthis._nearPos = this._initialNear;\n\n\t\tthis._initialFar = camera.far;\n\t\tthis._farPos0 = camera.position.distanceTo( this.target ) - camera.far;\n\t\tthis._farPos = this._initialFar;\n\n\t\tthis._up0.copy( camera.up );\n\t\tthis._upState.copy( camera.up );\n\n\t\tthis.camera = camera;\n\t\tthis.camera.updateProjectionMatrix();\n\n\t\t//making gizmos\n\t\tthis._tbRadius = this.calculateTbRadius( camera );\n\t\tthis.makeGizmos( this.target, this._tbRadius );\n\n\t}\n\n\t/**\n\t * Set gizmos visibility\n\t * @param {Boolean} value Value of gizmos visibility\n\t */\n\tsetGizmosVisible( value ) {\n\n\t\tthis._gizmos.visible = value;\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t}\n\n\t/**\n\t * Set gizmos radius factor and redraws gizmos\n\t * @param {Float} value Value of radius factor\n\t */\n\tsetTbRadius( value ) {\n\n\t\tthis.radiusFactor = value;\n\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\n\t\tconst curve = new EllipseCurve( 0, 0, this._tbRadius, this._tbRadius );\n\t\tconst points = curve.getPoints( this._curvePts );\n\t\tconst curveGeometry = new BufferGeometry().setFromPoints( points );\n\n\n\t\tfor ( const gizmo in this._gizmos.children ) {\n\n\t\t\tthis._gizmos.children[ gizmo ].geometry = curveGeometry;\n\n\t\t}\n\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t}\n\n\t/**\n\t * Creates the rotation gizmos matching trackball center and radius\n\t * @param {Vector3} tbCenter The trackball center\n\t * @param {number} tbRadius The trackball radius\n\t */\n\tmakeGizmos( tbCenter, tbRadius ) {\n\n\t\tconst curve = new EllipseCurve( 0, 0, tbRadius, tbRadius );\n\t\tconst points = curve.getPoints( this._curvePts );\n\n\t\t//geometry\n\t\tconst curveGeometry = new BufferGeometry().setFromPoints( points );\n\n\t\t//material\n\t\tconst curveMaterialX = new LineBasicMaterial( { color: 0xff8080, fog: false, transparent: true, opacity: 0.6 } );\n\t\tconst curveMaterialY = new LineBasicMaterial( { color: 0x80ff80, fog: false, transparent: true, opacity: 0.6 } );\n\t\tconst curveMaterialZ = new LineBasicMaterial( { color: 0x8080ff, fog: false, transparent: true, opacity: 0.6 } );\n\n\t\t//line\n\t\tconst gizmoX = new Line( curveGeometry, curveMaterialX );\n\t\tconst gizmoY = new Line( curveGeometry, curveMaterialY );\n\t\tconst gizmoZ = new Line( curveGeometry, curveMaterialZ );\n\n\t\tconst rotation = Math.PI * 0.5;\n\t\tgizmoX.rotation.x = rotation;\n\t\tgizmoY.rotation.y = rotation;\n\n\n\t\t//setting state\n\t\tthis._gizmoMatrixState0.identity().setPosition( tbCenter );\n\t\tthis._gizmoMatrixState.copy( this._gizmoMatrixState0 );\n\n\t\tif ( this.camera.zoom !== 1 ) {\n\n\t\t\t//adapt gizmos size to camera zoom\n\t\t\tconst size = 1 / this.camera.zoom;\n\t\t\tthis._scaleMatrix.makeScale( size, size, size );\n\t\t\tthis._translationMatrix.makeTranslation( - tbCenter.x, - tbCenter.y, - tbCenter.z );\n\n\t\t\tthis._gizmoMatrixState.premultiply( this._translationMatrix ).premultiply( this._scaleMatrix );\n\t\t\tthis._translationMatrix.makeTranslation( tbCenter.x, tbCenter.y, tbCenter.z );\n\t\t\tthis._gizmoMatrixState.premultiply( this._translationMatrix );\n\n\t\t}\n\n\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\n\t\t//\n\n\t\tthis._gizmos.traverse( function ( object ) {\n\n\t\t\tif ( object.isLine ) {\n\n\t\t\t\tobject.geometry.dispose();\n\t\t\t\tobject.material.dispose();\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis._gizmos.clear();\n\n\t\t//\n\n\t\tthis._gizmos.add( gizmoX );\n\t\tthis._gizmos.add( gizmoY );\n\t\tthis._gizmos.add( gizmoZ );\n\n\t}\n\n\t/**\n\t * Perform animation for focus operation\n\t * @param {Number} time Instant in which this function is called as performance.now()\n\t * @param {Vector3} point Point of interest for focus operation\n\t * @param {Matrix4} cameraMatrix Camera matrix\n\t * @param {Matrix4} gizmoMatrix Gizmos matrix\n\t */\n\tonFocusAnim( time, point, cameraMatrix, gizmoMatrix ) {\n\n\t\tif ( this._timeStart == - 1 ) {\n\n\t\t\t//animation start\n\t\t\tthis._timeStart = time;\n\n\t\t}\n\n\t\tif ( this._state == STATE.ANIMATION_FOCUS ) {\n\n\t\t\tconst deltaTime = time - this._timeStart;\n\t\t\tconst animTime = deltaTime / this.focusAnimationTime;\n\n\t\t\tthis._gizmoMatrixState.copy( gizmoMatrix );\n\n\t\t\tif ( animTime >= 1 ) {\n\n\t\t\t\t//animation end\n\n\t\t\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\n\t\t\t\tthis.focus( point, this.scaleFactor );\n\n\t\t\t\tthis._timeStart = - 1;\n\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t} else {\n\n\t\t\t\tconst amount = this.easeOutCubic( animTime );\n\t\t\t\tconst size = ( ( 1 - amount ) + ( this.scaleFactor * amount ) );\n\n\t\t\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\t\t\t\tthis.focus( point, size, amount );\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\tconst self = this;\n\t\t\t\tthis._animationId = window.requestAnimationFrame( function ( t ) {\n\n\t\t\t\t\tself.onFocusAnim( t, point, cameraMatrix, gizmoMatrix.clone() );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t//interrupt animation\n\n\t\t\tthis._animationId = - 1;\n\t\t\tthis._timeStart = - 1;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Perform animation for rotation operation\n\t * @param {Number} time Instant in which this function is called as performance.now()\n\t * @param {Vector3} rotationAxis Rotation axis\n\t * @param {number} w0 Initial angular velocity\n\t */\n\tonRotationAnim( time, rotationAxis, w0 ) {\n\n\t\tif ( this._timeStart == - 1 ) {\n\n\t\t\t//animation start\n\t\t\tthis._anglePrev = 0;\n\t\t\tthis._angleCurrent = 0;\n\t\t\tthis._timeStart = time;\n\n\t\t}\n\n\t\tif ( this._state == STATE.ANIMATION_ROTATE ) {\n\n\t\t\t//w = w0 + alpha * t\n\t\t\tconst deltaTime = ( time - this._timeStart ) / 1000;\n\t\t\tconst w = w0 + ( ( - this.dampingFactor ) * deltaTime );\n\n\t\t\tif ( w > 0 ) {\n\n\t\t\t\t//tetha = 0.5 * alpha * t^2 + w0 * t + tetha0\n\t\t\t\tthis._angleCurrent = 0.5 * ( - this.dampingFactor ) * Math.pow( deltaTime, 2 ) + w0 * deltaTime + 0;\n\t\t\t\tthis.applyTransformMatrix( this.rotate( rotationAxis, this._angleCurrent ) );\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\tconst self = this;\n\t\t\t\tthis._animationId = window.requestAnimationFrame( function ( t ) {\n\n\t\t\t\t\tself.onRotationAnim( t, rotationAxis, w0 );\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tthis._animationId = - 1;\n\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t//interrupt animation\n\n\t\t\tthis._animationId = - 1;\n\t\t\tthis._timeStart = - 1;\n\n\t\t\tif ( this._state != STATE.ROTATE ) {\n\n\t\t\t\tthis.activateGizmos( false );\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Perform pan operation moving camera between two points\n\t * @param {Vector3} p0 Initial point\n\t * @param {Vector3} p1 Ending point\n\t * @param {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only)\n\t */\n\tpan( p0, p1, adjust = false ) {\n\n\t\tconst movement = p0.clone().sub( p1 );\n\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t//adjust movement amount\n\t\t\tmovement.multiplyScalar( 1 / this.camera.zoom );\n\n\t\t} else if ( this.camera.isPerspectiveCamera && adjust ) {\n\n\t\t\t//adjust movement amount\n\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState0 );\t//camera's initial position\n\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState0 );\t//gizmo's initial position\n\t\t\tconst distanceFactor = this._v3_1.distanceTo( this._v3_2 ) / this.camera.position.distanceTo( this._gizmos.position );\n\t\t\tmovement.multiplyScalar( 1 / distanceFactor );\n\n\t\t}\n\n\t\tthis._v3_1.set( movement.x, movement.y, 0 ).applyQuaternion( this.camera.quaternion );\n\n\t\tthis._m4_1.makeTranslation( this._v3_1.x, this._v3_1.y, this._v3_1.z );\n\n\t\tthis.setTransformationMatrices( this._m4_1, this._m4_1 );\n\t\treturn _transformation;\n\n\t}\n\n\t/**\n\t * Reset trackball\n\t */\n\treset() {\n\n\t\tthis.camera.zoom = this._zoom0;\n\n\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis.camera.fov = this._fov0;\n\n\t\t}\n\n\t\tthis.camera.near = this._nearPos;\n\t\tthis.camera.far = this._farPos;\n\t\tthis._cameraMatrixState.copy( this._cameraMatrixState0 );\n\t\tthis._cameraMatrixState.decompose( this.camera.position, this.camera.quaternion, this.camera.scale );\n\t\tthis.camera.up.copy( this._up0 );\n\n\t\tthis.camera.updateMatrix();\n\t\tthis.camera.updateProjectionMatrix();\n\n\t\tthis._gizmoMatrixState.copy( this._gizmoMatrixState0 );\n\t\tthis._gizmoMatrixState0.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\t\tthis._gizmos.updateMatrix();\n\n\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\t\tthis.makeGizmos( this._gizmos.position, this._tbRadius );\n\n\t\tthis.camera.lookAt( this._gizmos.position );\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t}\n\n\t/**\n\t * Rotate the camera around an axis passing by trackball's center\n\t * @param {Vector3} axis Rotation axis\n\t * @param {number} angle Angle in radians\n\t * @returns {Object} Object with 'camera' field containing transformation matrix resulting from the operation to be applied to the camera\n\t */\n\trotate( axis, angle ) {\n\n\t\tconst point = this._gizmos.position; //rotation center\n\t\tthis._translationMatrix.makeTranslation( - point.x, - point.y, - point.z );\n\t\tthis._rotationMatrix.makeRotationAxis( axis, - angle );\n\n\t\t//rotate camera\n\t\tthis._m4_1.makeTranslation( point.x, point.y, point.z );\n\t\tthis._m4_1.multiply( this._rotationMatrix );\n\t\tthis._m4_1.multiply( this._translationMatrix );\n\n\t\tthis.setTransformationMatrices( this._m4_1 );\n\n\t\treturn _transformation;\n\n\t}\n\n\tcopyState() {\n\n\t\tlet state;\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\tstate = JSON.stringify( { arcballState: {\n\n\t\t\t\tcameraFar: this.camera.far,\n\t\t\t\tcameraMatrix: this.camera.matrix,\n\t\t\t\tcameraNear: this.camera.near,\n\t\t\t\tcameraUp: this.camera.up,\n\t\t\t\tcameraZoom: this.camera.zoom,\n\t\t\t\tgizmoMatrix: this._gizmos.matrix\n\n\t\t\t} } );\n\n\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tstate = JSON.stringify( { arcballState: {\n\t\t\t\tcameraFar: this.camera.far,\n\t\t\t\tcameraFov: this.camera.fov,\n\t\t\t\tcameraMatrix: this.camera.matrix,\n\t\t\t\tcameraNear: this.camera.near,\n\t\t\t\tcameraUp: this.camera.up,\n\t\t\t\tcameraZoom: this.camera.zoom,\n\t\t\t\tgizmoMatrix: this._gizmos.matrix\n\n\t\t\t} } );\n\n\t\t}\n\n\t\tnavigator.clipboard.writeText( state );\n\n\t}\n\n\tpasteState() {\n\n\t\tconst self = this;\n\t\tnavigator.clipboard.readText().then( function resolved( value ) {\n\n\t\t\tself.setStateFromJSON( value );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Save the current state of the control. This can later be recover with .reset\n\t */\n\tsaveState() {\n\n\t\tthis._cameraMatrixState0.copy( this.camera.matrix );\n\t\tthis._gizmoMatrixState0.copy( this._gizmos.matrix );\n\t\tthis._nearPos = this.camera.near;\n\t\tthis._farPos = this.camera.far;\n\t\tthis._zoom0 = this.camera.zoom;\n\t\tthis._up0.copy( this.camera.up );\n\n\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis._fov0 = this.camera.fov;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Perform uniform scale operation around a given point\n\t * @param {Number} size Scale factor\n\t * @param {Vector3} point Point around which scale\n\t * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only)\n\t * @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos\n\t */\n\tscale( size, point, scaleGizmos = true ) {\n\n\t\t_scalePointTemp.copy( point );\n\t\tlet sizeInverse = 1 / size;\n\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t//camera zoom\n\t\t\tthis.camera.zoom = this._zoomState;\n\t\t\tthis.camera.zoom *= size;\n\n\t\t\t//check min and max zoom\n\t\t\tif ( this.camera.zoom > this.maxZoom ) {\n\n\t\t\t\tthis.camera.zoom = this.maxZoom;\n\t\t\t\tsizeInverse = this._zoomState / this.maxZoom;\n\n\t\t\t} else if ( this.camera.zoom < this.minZoom ) {\n\n\t\t\t\tthis.camera.zoom = this.minZoom;\n\t\t\t\tsizeInverse = this._zoomState / this.minZoom;\n\n\t\t\t}\n\n\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\tthis._v3_1.setFromMatrixPosition( this._gizmoMatrixState );\t//gizmos position\n\n\t\t\t//scale gizmos so they appear in the same spot having the same dimension\n\t\t\tthis._scaleMatrix.makeScale( sizeInverse, sizeInverse, sizeInverse );\n\t\t\tthis._translationMatrix.makeTranslation( - this._v3_1.x, - this._v3_1.y, - this._v3_1.z );\n\n\t\t\tthis._m4_2.makeTranslation( this._v3_1.x, this._v3_1.y, this._v3_1.z ).multiply( this._scaleMatrix );\n\t\t\tthis._m4_2.multiply( this._translationMatrix );\n\n\n\t\t\t//move camera and gizmos to obtain pinch effect\n\t\t\t_scalePointTemp.sub( this._v3_1 );\n\n\t\t\tconst amount = _scalePointTemp.clone().multiplyScalar( sizeInverse );\n\t\t\t_scalePointTemp.sub( amount );\n\n\t\t\tthis._m4_1.makeTranslation( _scalePointTemp.x, _scalePointTemp.y, _scalePointTemp.z );\n\t\t\tthis._m4_2.premultiply( this._m4_1 );\n\n\t\t\tthis.setTransformationMatrices( this._m4_1, this._m4_2 );\n\t\t\treturn _transformation;\n\n\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState );\n\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\t//move camera\n\t\t\tlet distance = this._v3_1.distanceTo( _scalePointTemp );\n\t\t\tlet amount = distance - ( distance * sizeInverse );\n\n\t\t\t//check min and max distance\n\t\t\tconst newDistance = distance - amount;\n\t\t\tif ( newDistance < this.minDistance ) {\n\n\t\t\t\tsizeInverse = this.minDistance / distance;\n\t\t\t\tamount = distance - ( distance * sizeInverse );\n\n\t\t\t} else if ( newDistance > this.maxDistance ) {\n\n\t\t\t\tsizeInverse = this.maxDistance / distance;\n\t\t\t\tamount = distance - ( distance * sizeInverse );\n\n\t\t\t}\n\n\t\t\t_offset.copy( _scalePointTemp ).sub( this._v3_1 ).normalize().multiplyScalar( amount );\n\n\t\t\tthis._m4_1.makeTranslation( _offset.x, _offset.y, _offset.z );\n\n\n\t\t\tif ( scaleGizmos ) {\n\n\t\t\t\t//scale gizmos so they appear in the same spot having the same dimension\n\t\t\t\tconst pos = this._v3_2;\n\n\t\t\t\tdistance = pos.distanceTo( _scalePointTemp );\n\t\t\t\tamount = distance - ( distance * sizeInverse );\n\t\t\t\t_offset.copy( _scalePointTemp ).sub( this._v3_2 ).normalize().multiplyScalar( amount );\n\n\t\t\t\tthis._translationMatrix.makeTranslation( pos.x, pos.y, pos.z );\n\t\t\t\tthis._scaleMatrix.makeScale( sizeInverse, sizeInverse, sizeInverse );\n\n\t\t\t\tthis._m4_2.makeTranslation( _offset.x, _offset.y, _offset.z ).multiply( this._translationMatrix );\n\t\t\t\tthis._m4_2.multiply( this._scaleMatrix );\n\n\t\t\t\tthis._translationMatrix.makeTranslation( - pos.x, - pos.y, - pos.z );\n\n\t\t\t\tthis._m4_2.multiply( this._translationMatrix );\n\t\t\t\tthis.setTransformationMatrices( this._m4_1, this._m4_2 );\n\n\n\t\t\t} else {\n\n\t\t\t\tthis.setTransformationMatrices( this._m4_1 );\n\n\t\t\t}\n\n\t\t\treturn _transformation;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Set camera fov\n\t * @param {Number} value fov to be setted\n\t */\n\tsetFov( value ) {\n\n\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis.camera.fov = MathUtils.clamp( value, this.minFov, this.maxFov );\n\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Set values in transformation object\n\t * @param {Matrix4} camera Transformation to be applied to the camera\n\t * @param {Matrix4} gizmos Transformation to be applied to gizmos\n\t */\n\t setTransformationMatrices( camera = null, gizmos = null ) {\n\n\t\tif ( camera != null ) {\n\n\t\t\tif ( _transformation.camera != null ) {\n\n\t\t\t\t_transformation.camera.copy( camera );\n\n\t\t\t} else {\n\n\t\t\t\t_transformation.camera = camera.clone();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_transformation.camera = null;\n\n\t\t}\n\n\t\tif ( gizmos != null ) {\n\n\t\t\tif ( _transformation.gizmos != null ) {\n\n\t\t\t\t_transformation.gizmos.copy( gizmos );\n\n\t\t\t} else {\n\n\t\t\t\t_transformation.gizmos = gizmos.clone();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_transformation.gizmos = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Rotate camera around its direction axis passing by a given point by a given angle\n\t * @param {Vector3} point The point where the rotation axis is passing trough\n\t * @param {Number} angle Angle in radians\n\t * @returns The computed transormation matix\n\t */\n\tzRotate( point, angle ) {\n\n\t\tthis._rotationMatrix.makeRotationAxis( this._rotationAxis, angle );\n\t\tthis._translationMatrix.makeTranslation( - point.x, - point.y, - point.z );\n\n\t\tthis._m4_1.makeTranslation( point.x, point.y, point.z );\n\t\tthis._m4_1.multiply( this._rotationMatrix );\n\t\tthis._m4_1.multiply( this._translationMatrix );\n\n\t\tthis._v3_1.setFromMatrixPosition( this._gizmoMatrixState ).sub( point );\t//vector from rotation center to gizmos position\n\t\tthis._v3_2.copy( this._v3_1 ).applyAxisAngle( this._rotationAxis, angle );\t//apply rotation\n\t\tthis._v3_2.sub( this._v3_1 );\n\n\t\tthis._m4_2.makeTranslation( this._v3_2.x, this._v3_2.y, this._v3_2.z );\n\n\t\tthis.setTransformationMatrices( this._m4_1, this._m4_2 );\n\t\treturn _transformation;\n\n\t}\n\n\n\tgetRaycaster() {\n\n\t\treturn _raycaster;\n\n\t}\n\n\n\t/**\n\t * Unproject the cursor on the 3D object surface\n\t * @param {Vector2} cursor Cursor coordinates in NDC\n\t * @param {Camera} camera Virtual camera\n\t * @returns {Vector3} The point of intersection with the model, if exist, null otherwise\n\t */\n\tunprojectOnObj( cursor, camera ) {\n\n\t\tconst raycaster = this.getRaycaster();\n\t\traycaster.near = camera.near;\n\t\traycaster.far = camera.far;\n\t\traycaster.setFromCamera( cursor, camera );\n\n\t\tconst intersect = raycaster.intersectObjects( this.scene.children, true );\n\n\t\tfor ( let i = 0; i < intersect.length; i ++ ) {\n\n\t\t\tif ( intersect[ i ].object.uuid != this._gizmos.uuid && intersect[ i ].face != null ) {\n\n\t\t\t\treturn intersect[ i ].point.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Unproject the cursor on the trackball surface\n\t * @param {Camera} camera The virtual camera\n\t * @param {Number} cursorX Cursor horizontal coordinate on screen\n\t * @param {Number} cursorY Cursor vertical coordinate on screen\n\t * @param {HTMLElement} canvas The canvas where the renderer draws its output\n\t * @param {number} tbRadius The trackball radius\n\t * @returns {Vector3} The unprojected point on the trackball surface\n\t */\n\tunprojectOnTbSurface( camera, cursorX, cursorY, canvas, tbRadius ) {\n\n\t\tif ( camera.type == 'OrthographicCamera' ) {\n\n\t\t\tthis._v2_1.copy( this.getCursorPosition( cursorX, cursorY, canvas ) );\n\t\t\tthis._v3_1.set( this._v2_1.x, this._v2_1.y, 0 );\n\n\t\t\tconst x2 = Math.pow( this._v2_1.x, 2 );\n\t\t\tconst y2 = Math.pow( this._v2_1.y, 2 );\n\t\t\tconst r2 = Math.pow( this._tbRadius, 2 );\n\n\t\t\tif ( x2 + y2 <= r2 * 0.5 ) {\n\n\t\t\t\t//intersection with sphere\n\t\t\t\tthis._v3_1.setZ( Math.sqrt( r2 - ( x2 + y2 ) ) );\n\n\t\t\t} else {\n\n\t\t\t\t//intersection with hyperboloid\n\t\t\t\tthis._v3_1.setZ( ( r2 * 0.5 ) / ( Math.sqrt( x2 + y2 ) ) );\n\n\t\t\t}\n\n\t\t\treturn this._v3_1;\n\n\t\t} else if ( camera.type == 'PerspectiveCamera' ) {\n\n\t\t\t//unproject cursor on the near plane\n\t\t\tthis._v2_1.copy( this.getCursorNDC( cursorX, cursorY, canvas ) );\n\n\t\t\tthis._v3_1.set( this._v2_1.x, this._v2_1.y, - 1 );\n\t\t\tthis._v3_1.applyMatrix4( camera.projectionMatrixInverse );\n\n\t\t\tconst rayDir = this._v3_1.clone().normalize(); //unprojected ray direction\n\t\t\tconst cameraGizmoDistance = camera.position.distanceTo( this._gizmos.position );\n\t\t\tconst radius2 = Math.pow( tbRadius, 2 );\n\n\t\t\t//\t camera\n\t\t\t//\t\t|\\\n\t\t\t//\t\t| \\\n\t\t\t//\t\t| \\\n\t\t\t//\th\t|\t\\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t_ _ | _ _ _\\ _ _ near plane\n\t\t\t//\t\t\tl\n\n\t\t\tconst h = this._v3_1.z;\n\t\t\tconst l = Math.sqrt( Math.pow( this._v3_1.x, 2 ) + Math.pow( this._v3_1.y, 2 ) );\n\n\t\t\tif ( l == 0 ) {\n\n\t\t\t\t//ray aligned with camera\n\t\t\t\trayDir.set( this._v3_1.x, this._v3_1.y, tbRadius );\n\t\t\t\treturn rayDir;\n\n\t\t\t}\n\n\t\t\tconst m = h / l;\n\t\t\tconst q = cameraGizmoDistance;\n\n\t\t\t/*\n\t\t\t * calculate intersection point between unprojected ray and trackball surface\n\t\t\t *|y = m * x + q\n\t\t\t *|x^2 + y^2 = r^2\n\t\t\t *\n\t\t\t * (m^2 + 1) * x^2 + (2 * m * q) * x + q^2 - r^2 = 0\n\t\t\t */\n\t\t\tlet a = Math.pow( m, 2 ) + 1;\n\t\t\tlet b = 2 * m * q;\n\t\t\tlet c = Math.pow( q, 2 ) - radius2;\n\t\t\tlet delta = Math.pow( b, 2 ) - ( 4 * a * c );\n\n\t\t\tif ( delta >= 0 ) {\n\n\t\t\t\t//intersection with sphere\n\t\t\t\tthis._v2_1.setX( ( - b - Math.sqrt( delta ) ) / ( 2 * a ) );\n\t\t\t\tthis._v2_1.setY( m * this._v2_1.x + q );\n\n\t\t\t\tconst angle = MathUtils.RAD2DEG * this._v2_1.angle();\n\n\t\t\t\tif ( angle >= 45 ) {\n\n\t\t\t\t\t//if angle between intersection point and X' axis is >= 45°, return that point\n\t\t\t\t\t//otherwise, calculate intersection point with hyperboloid\n\n\t\t\t\t\tconst rayLength = Math.sqrt( Math.pow( this._v2_1.x, 2 ) + Math.pow( ( cameraGizmoDistance - this._v2_1.y ), 2 ) );\n\t\t\t\t\trayDir.multiplyScalar( rayLength );\n\t\t\t\t\trayDir.z += cameraGizmoDistance;\n\t\t\t\t\treturn rayDir;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//intersection with hyperboloid\n\t\t\t/*\n\t\t\t *|y = m * x + q\n\t\t\t *|y = (1 / x) * (r^2 / 2)\n\t\t\t *\n\t\t\t * m * x^2 + q * x - r^2 / 2 = 0\n\t\t\t */\n\n\t\t\ta = m;\n\t\t\tb = q;\n\t\t\tc = - radius2 * 0.5;\n\t\t\tdelta = Math.pow( b, 2 ) - ( 4 * a * c );\n\t\t\tthis._v2_1.setX( ( - b - Math.sqrt( delta ) ) / ( 2 * a ) );\n\t\t\tthis._v2_1.setY( m * this._v2_1.x + q );\n\n\t\t\tconst rayLength = Math.sqrt( Math.pow( this._v2_1.x, 2 ) + Math.pow( ( cameraGizmoDistance - this._v2_1.y ), 2 ) );\n\n\t\t\trayDir.multiplyScalar( rayLength );\n\t\t\trayDir.z += cameraGizmoDistance;\n\t\t\treturn rayDir;\n\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera\n\t * @param {Camera} camera The virtual camera\n\t * @param {Number} cursorX Cursor horizontal coordinate on screen\n\t * @param {Number} cursorY Cursor vertical coordinate on screen\n\t * @param {HTMLElement} canvas The canvas where the renderer draws its output\n\t * @param {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only)\n\t * @returns {Vector3} The unprojected point on the trackball plane\n\t */\n\tunprojectOnTbPlane( camera, cursorX, cursorY, canvas, initialDistance = false ) {\n\n\t\tif ( camera.type == 'OrthographicCamera' ) {\n\n\t\t\tthis._v2_1.copy( this.getCursorPosition( cursorX, cursorY, canvas ) );\n\t\t\tthis._v3_1.set( this._v2_1.x, this._v2_1.y, 0 );\n\n\t\t\treturn this._v3_1.clone();\n\n\t\t} else if ( camera.type == 'PerspectiveCamera' ) {\n\n\t\t\tthis._v2_1.copy( this.getCursorNDC( cursorX, cursorY, canvas ) );\n\n\t\t\t//unproject cursor on the near plane\n\t\t\tthis._v3_1.set( this._v2_1.x, this._v2_1.y, - 1 );\n\t\t\tthis._v3_1.applyMatrix4( camera.projectionMatrixInverse );\n\n\t\t\tconst rayDir = this._v3_1.clone().normalize(); //unprojected ray direction\n\n\t\t\t//\t camera\n\t\t\t//\t\t|\\\n\t\t\t//\t\t| \\\n\t\t\t//\t\t| \\\n\t\t\t//\th\t|\t\\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t_ _ | _ _ _\\ _ _ near plane\n\t\t\t//\t\t\tl\n\n\t\t\tconst h = this._v3_1.z;\n\t\t\tconst l = Math.sqrt( Math.pow( this._v3_1.x, 2 ) + Math.pow( this._v3_1.y, 2 ) );\n\t\t\tlet cameraGizmoDistance;\n\n\t\t\tif ( initialDistance ) {\n\n\t\t\t\tcameraGizmoDistance = this._v3_1.setFromMatrixPosition( this._cameraMatrixState0 ).distanceTo( this._v3_2.setFromMatrixPosition( this._gizmoMatrixState0 ) );\n\n\t\t\t} else {\n\n\t\t\t\tcameraGizmoDistance = camera.position.distanceTo( this._gizmos.position );\n\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * calculate intersection point between unprojected ray and the plane\n\t\t\t *|y = mx + q\n\t\t\t *|y = 0\n\t\t\t *\n\t\t\t * x = -q/m\n\t\t\t*/\n\t\t\tif ( l == 0 ) {\n\n\t\t\t\t//ray aligned with camera\n\t\t\t\trayDir.set( 0, 0, 0 );\n\t\t\t\treturn rayDir;\n\n\t\t\t}\n\n\t\t\tconst m = h / l;\n\t\t\tconst q = cameraGizmoDistance;\n\t\t\tconst x = - q / m;\n\n\t\t\tconst rayLength = Math.sqrt( Math.pow( q, 2 ) + Math.pow( x, 2 ) );\n\t\t\trayDir.multiplyScalar( rayLength );\n\t\t\trayDir.z = 0;\n\t\t\treturn rayDir;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Update camera and gizmos state\n\t */\n\tupdateMatrixState() {\n\n\t\t//update camera and gizmos state\n\t\tthis._cameraMatrixState.copy( this.camera.matrix );\n\t\tthis._gizmoMatrixState.copy( this._gizmos.matrix );\n\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\tthis._cameraProjectionState.copy( this.camera.projectionMatrix );\n\t\t\tthis.camera.updateProjectionMatrix();\n\t\t\tthis._zoomState = this.camera.zoom;\n\n\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis._fovState = this.camera.fov;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Update the trackball FSA\n\t * @param {STATE} newState New state of the FSA\n\t * @param {Boolean} updateMatrices If matriices state should be updated\n\t */\n\tupdateTbState( newState, updateMatrices ) {\n\n\t\tthis._state = newState;\n\t\tif ( updateMatrices ) {\n\n\t\t\tthis.updateMatrixState();\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst EPS = 0.000001;\n\n\t\tif ( this.target.equals( this._currentTarget ) === false ) {\n\n\t\t\tthis._gizmos.position.copy( this.target );\t//for correct radius calculation\n\t\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\t\t\tthis.makeGizmos( this.target, this._tbRadius );\n\t\t\tthis._currentTarget.copy( this.target );\n\n\t\t}\n\n\t\t//check min/max parameters\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t//check zoom\n\t\t\tif ( this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom ) {\n\n\t\t\t\tconst newZoom = MathUtils.clamp( this.camera.zoom, this.minZoom, this.maxZoom );\n\t\t\t\tthis.applyTransformMatrix( this.scale( newZoom / this.camera.zoom, this._gizmos.position, true ) );\n\n\t\t\t}\n\n\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t//check distance\n\t\t\tconst distance = this.camera.position.distanceTo( this._gizmos.position );\n\n\t\t\tif ( distance > this.maxDistance + EPS || distance < this.minDistance - EPS ) {\n\n\t\t\t\tconst newDistance = MathUtils.clamp( distance, this.minDistance, this.maxDistance );\n\t\t\t\tthis.applyTransformMatrix( this.scale( newDistance / distance, this._gizmos.position ) );\n\t\t\t\tthis.updateMatrixState();\n\n\t\t\t }\n\n\t\t\t//check fov\n\t\t\tif ( this.camera.fov < this.minFov || this.camera.fov > this.maxFov ) {\n\n\t\t\t\tthis.camera.fov = MathUtils.clamp( this.camera.fov, this.minFov, this.maxFov );\n\t\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tconst oldRadius = this._tbRadius;\n\t\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\n\t\t\tif ( oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS ) {\n\n\t\t\t\tconst scale = ( this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z ) / 3;\n\t\t\t\tconst newRadius = this._tbRadius / scale;\n\t\t\t\tconst curve = new EllipseCurve( 0, 0, newRadius, newRadius );\n\t\t\t\tconst points = curve.getPoints( this._curvePts );\n\t\t\t\tconst curveGeometry = new BufferGeometry().setFromPoints( points );\n\n\t\t\t\tfor ( const gizmo in this._gizmos.children ) {\n\n\t\t\t\t\tthis._gizmos.children[ gizmo ].geometry = curveGeometry;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.camera.lookAt( this._gizmos.position );\n\n\t}\n\n\tsetStateFromJSON( json ) {\n\n\t\tconst state = JSON.parse( json );\n\n\t\tif ( state.arcballState != undefined ) {\n\n\t\t\tthis._cameraMatrixState.fromArray( state.arcballState.cameraMatrix.elements );\n\t\t\tthis._cameraMatrixState.decompose( this.camera.position, this.camera.quaternion, this.camera.scale );\n\n\t\t\tthis.camera.up.copy( state.arcballState.cameraUp );\n\t\t\tthis.camera.near = state.arcballState.cameraNear;\n\t\t\tthis.camera.far = state.arcballState.cameraFar;\n\n\t\t\tthis.camera.zoom = state.arcballState.cameraZoom;\n\n\t\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\tthis.camera.fov = state.arcballState.cameraFov;\n\n\t\t\t}\n\n\t\t\tthis._gizmoMatrixState.fromArray( state.arcballState.gizmoMatrix.elements );\n\t\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\n\t\t\tthis.camera.updateMatrix();\n\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\tthis._gizmos.updateMatrix();\n\n\t\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\t\t\tconst gizmoTmp = new Matrix4().copy( this._gizmoMatrixState0 );\n\t\t\tthis.makeGizmos( this._gizmos.position, this._tbRadius );\n\t\t\tthis._gizmoMatrixState0.copy( gizmoTmp );\n\n\t\t\tthis.camera.lookAt( this._gizmos.position );\n\t\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n}\n\n//listeners\n\nfunction onWindowResize() {\n\n\tconst scale = ( this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z ) / 3;\n\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\n\tconst newRadius = this._tbRadius / scale;\n\tconst curve = new EllipseCurve( 0, 0, newRadius, newRadius );\n\tconst points = curve.getPoints( this._curvePts );\n\tconst curveGeometry = new BufferGeometry().setFromPoints( points );\n\n\n\tfor ( const gizmo in this._gizmos.children ) {\n\n\t\tthis._gizmos.children[ gizmo ].geometry = curveGeometry;\n\n\t}\n\n\tthis.dispatchEvent( _changeEvent );\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( ! this.enabled ) {\n\n\t\treturn;\n\n\t}\n\n\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\tif ( this.mouseActions[ i ].mouse == 2 ) {\n\n\t\t\t//prevent only if button 2 is actually used\n\t\t\tevent.preventDefault();\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\nfunction onPointerCancel() {\n\n\tthis._touchStart.splice( 0, this._touchStart.length );\n\tthis._touchCurrent.splice( 0, this._touchCurrent.length );\n\tthis._input = INPUT.NONE;\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( event.button == 0 && event.isPrimary ) {\n\n\t\tthis._downValid = true;\n\t\tthis._downEvents.push( event );\n\t\tthis._downStart = performance.now();\n\n\t} else {\n\n\t\tthis._downValid = false;\n\n\t}\n\n\tif ( event.pointerType == 'touch' && this._input != INPUT.CURSOR ) {\n\n\t\tthis._touchStart.push( event );\n\t\tthis._touchCurrent.push( event );\n\n\t\tswitch ( this._input ) {\n\n\t\t\tcase INPUT.NONE:\n\n\t\t\t\t//singleStart\n\t\t\t\tthis._input = INPUT.ONE_FINGER;\n\t\t\t\tthis.onSinglePanStart( event, 'ROTATE' );\n\n\t\t\t\twindow.addEventListener( 'pointermove', this._onPointerMove );\n\t\t\t\twindow.addEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.ONE_FINGER:\n\t\t\tcase INPUT.ONE_FINGER_SWITCHED:\n\n\t\t\t\t//doubleStart\n\t\t\t\tthis._input = INPUT.TWO_FINGER;\n\n\t\t\t\tthis.onRotateStart();\n\t\t\t\tthis.onPinchStart();\n\t\t\t\tthis.onDoublePanStart();\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.TWO_FINGER:\n\n\t\t\t\t//multipleStart\n\t\t\t\tthis._input = INPUT.MULT_FINGER;\n\t\t\t\tthis.onTriplePanStart( event );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t} else if ( event.pointerType != 'touch' && this._input == INPUT.NONE ) {\n\n\t\tlet modifier = null;\n\n\t\tif ( event.ctrlKey || event.metaKey ) {\n\n\t\t\tmodifier = 'CTRL';\n\n\t\t} else if ( event.shiftKey ) {\n\n\t\t\tmodifier = 'SHIFT';\n\n\t\t}\n\n\t\tthis._mouseOp = this.getOpFromAction( event.button, modifier );\n\t\tif ( this._mouseOp != null ) {\n\n\t\t\twindow.addEventListener( 'pointermove', this._onPointerMove );\n\t\t\twindow.addEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\t//singleStart\n\t\t\tthis._input = INPUT.CURSOR;\n\t\t\tthis._button = event.button;\n\t\t\tthis.onSinglePanStart( event, this._mouseOp );\n\n\t\t}\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( event.pointerType == 'touch' && this._input != INPUT.CURSOR ) {\n\n\t\tswitch ( this._input ) {\n\n\t\t\tcase INPUT.ONE_FINGER:\n\n\t\t\t\t//singleMove\n\t\t\t\tthis.updateTouchEvent( event );\n\n\t\t\t\tthis.onSinglePanMove( event, STATE.ROTATE );\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.ONE_FINGER_SWITCHED:\n\n\t\t\t\tconst movement = this.calculatePointersDistance( this._touchCurrent[ 0 ], event ) * this._devPxRatio;\n\n\t\t\t\tif ( movement >= this._switchSensibility ) {\n\n\t\t\t\t\t//singleMove\n\t\t\t\t\tthis._input = INPUT.ONE_FINGER;\n\t\t\t\t\tthis.updateTouchEvent( event );\n\n\t\t\t\t\tthis.onSinglePanStart( event, 'ROTATE' );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.TWO_FINGER:\n\n\t\t\t\t//rotate/pan/pinchMove\n\t\t\t\tthis.updateTouchEvent( event );\n\n\t\t\t\tthis.onRotateMove();\n\t\t\t\tthis.onPinchMove();\n\t\t\t\tthis.onDoublePanMove();\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.MULT_FINGER:\n\n\t\t\t\t//multMove\n\t\t\t\tthis.updateTouchEvent( event );\n\n\t\t\t\tthis.onTriplePanMove( event );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t} else if ( event.pointerType != 'touch' && this._input == INPUT.CURSOR ) {\n\n\t\tlet modifier = null;\n\n\t\tif ( event.ctrlKey || event.metaKey ) {\n\n\t\t\tmodifier = 'CTRL';\n\n\t\t} else if ( event.shiftKey ) {\n\n\t\t\tmodifier = 'SHIFT';\n\n\t\t}\n\n\t\tconst mouseOpState = this.getOpStateFromAction( this._button, modifier );\n\n\t\tif ( mouseOpState != null ) {\n\n\t\t\tthis.onSinglePanMove( event, mouseOpState );\n\n\t\t}\n\n\t}\n\n\t//checkDistance\n\tif ( this._downValid ) {\n\n\t\tconst movement = this.calculatePointersDistance( this._downEvents[ this._downEvents.length - 1 ], event ) * this._devPxRatio;\n\t\tif ( movement > this._movementThreshold ) {\n\n\t\t\tthis._downValid = false;\n\n\t\t}\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tif ( event.pointerType == 'touch' && this._input != INPUT.CURSOR ) {\n\n\t\tconst nTouch = this._touchCurrent.length;\n\n\t\tfor ( let i = 0; i < nTouch; i ++ ) {\n\n\t\t\tif ( this._touchCurrent[ i ].pointerId == event.pointerId ) {\n\n\t\t\t\tthis._touchCurrent.splice( i, 1 );\n\t\t\t\tthis._touchStart.splice( i, 1 );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tswitch ( this._input ) {\n\n\t\t\tcase INPUT.ONE_FINGER:\n\t\t\tcase INPUT.ONE_FINGER_SWITCHED:\n\n\t\t\t\t//singleEnd\n\t\t\t\twindow.removeEventListener( 'pointermove', this._onPointerMove );\n\t\t\t\twindow.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\t\tthis._input = INPUT.NONE;\n\t\t\t\tthis.onSinglePanEnd();\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.TWO_FINGER:\n\n\t\t\t\t//doubleEnd\n\t\t\t\tthis.onDoublePanEnd( event );\n\t\t\t\tthis.onPinchEnd( event );\n\t\t\t\tthis.onRotateEnd( event );\n\n\t\t\t\t//switching to singleStart\n\t\t\t\tthis._input = INPUT.ONE_FINGER_SWITCHED;\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.MULT_FINGER:\n\n\t\t\t\tif ( this._touchCurrent.length == 0 ) {\n\n\t\t\t\t\twindow.removeEventListener( 'pointermove', this._onPointerMove );\n\t\t\t\t\twindow.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\t\t\t//multCancel\n\t\t\t\t\tthis._input = INPUT.NONE;\n\t\t\t\t\tthis.onTriplePanEnd();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t} else if ( event.pointerType != 'touch' && this._input == INPUT.CURSOR ) {\n\n\t\twindow.removeEventListener( 'pointermove', this._onPointerMove );\n\t\twindow.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\tthis._input = INPUT.NONE;\n\t\tthis.onSinglePanEnd();\n\t\tthis._button = - 1;\n\n\t}\n\n\tif ( event.isPrimary ) {\n\n\t\tif ( this._downValid ) {\n\n\t\t\tconst downTime = event.timeStamp - this._downEvents[ this._downEvents.length - 1 ].timeStamp;\n\n\t\t\tif ( downTime <= this._maxDownTime ) {\n\n\t\t\t\tif ( this._nclicks == 0 ) {\n\n\t\t\t\t\t//first valid click detected\n\t\t\t\t\tthis._nclicks = 1;\n\t\t\t\t\tthis._clickStart = performance.now();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst clickInterval = event.timeStamp - this._clickStart;\n\t\t\t\t\tconst movement = this.calculatePointersDistance( this._downEvents[ 1 ], this._downEvents[ 0 ] ) * this._devPxRatio;\n\n\t\t\t\t\tif ( clickInterval <= this._maxInterval && movement <= this._posThreshold ) {\n\n\t\t\t\t\t\t//second valid click detected\n\t\t\t\t\t\t//fire double tap and reset values\n\t\t\t\t\t\tthis._nclicks = 0;\n\t\t\t\t\t\tthis._downEvents.splice( 0, this._downEvents.length );\n\t\t\t\t\t\tthis.onDoubleTap( event );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t//new 'first click'\n\t\t\t\t\t\tthis._nclicks = 1;\n\t\t\t\t\t\tthis._downEvents.shift();\n\t\t\t\t\t\tthis._clickStart = performance.now();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis._downValid = false;\n\t\t\t\tthis._nclicks = 0;\n\t\t\t\tthis._downEvents.splice( 0, this._downEvents.length );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis._nclicks = 0;\n\t\t\tthis._downEvents.splice( 0, this._downEvents.length );\n\n\t\t}\n\n\t}\n\n}\n\nfunction onWheel( event ) {\n\n\tif ( this.enabled && this.enableZoom ) {\n\n\t\tlet modifier = null;\n\n\t\tif ( event.ctrlKey || event.metaKey ) {\n\n\t\t\tmodifier = 'CTRL';\n\n\t\t} else if ( event.shiftKey ) {\n\n\t\t\tmodifier = 'SHIFT';\n\n\t\t}\n\n\t\tconst mouseOp = this.getOpFromAction( 'WHEEL', modifier );\n\n\t\tif ( mouseOp != null ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tconst notchDeltaY = 125; //distance of one notch of mouse wheel\n\t\t\tlet sgn = event.deltaY / notchDeltaY;\n\n\t\t\tlet size = 1;\n\n\t\t\tif ( sgn > 0 ) {\n\n\t\t\t\tsize = 1 / this.scaleFactor;\n\n\t\t\t} else if ( sgn < 0 ) {\n\n\t\t\t\tsize = this.scaleFactor;\n\n\t\t\t}\n\n\t\t\tswitch ( mouseOp ) {\n\n\t\t\t\tcase 'ZOOM':\n\n\t\t\t\t\tthis.updateTbState( STATE.SCALE, true );\n\n\t\t\t\t\tif ( sgn > 0 ) {\n\n\t\t\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, sgn ) );\n\n\t\t\t\t\t} else if ( sgn < 0 ) {\n\n\t\t\t\t\t\tsize = Math.pow( this.scaleFactor, - sgn );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.cursorZoom && this.enablePan ) {\n\n\t\t\t\t\t\tlet scalePoint;\n\n\t\t\t\t\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t\t\t\t\tscalePoint = this.unprojectOnTbPlane( this.camera, event.clientX, event.clientY, this.domElement ).applyQuaternion( this.camera.quaternion ).multiplyScalar( 1 / this.camera.zoom ).add( this._gizmos.position );\n\n\t\t\t\t\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\t\t\t\tscalePoint = this.unprojectOnTbPlane( this.camera, event.clientX, event.clientY, this.domElement ).applyQuaternion( this.camera.quaternion ).add( this._gizmos.position );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, scalePoint ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, this._gizmos.position ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._grid != null ) {\n\n\t\t\t\t\t\tthis.disposeGrid();\n\t\t\t\t\t\tthis.drawGrid();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'FOV':\n\n\t\t\t\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\t\t\tthis.updateTbState( STATE.FOV, true );\n\n\n\t\t\t\t\t\t//Vertigo effect\n\n\t\t\t\t\t\t//\t fov / 2\n\t\t\t\t\t\t//\t\t|\\\n\t\t\t\t\t\t//\t\t| \\\n\t\t\t\t\t\t//\t\t| \\\n\t\t\t\t\t\t//\tx\t|\t\\\n\t\t\t\t\t\t//\t\t| \t \\\n\t\t\t\t\t\t//\t\t| \t \\\n\t\t\t\t\t\t//\t\t| _ _ _\\\n\t\t\t\t\t\t//\t\t\ty\n\n\t\t\t\t\t\t//check for iOs shift shortcut\n\t\t\t\t\t\tif ( event.deltaX != 0 ) {\n\n\t\t\t\t\t\t\tsgn = event.deltaX / notchDeltaY;\n\n\t\t\t\t\t\t\tsize = 1;\n\n\t\t\t\t\t\t\tif ( sgn > 0 ) {\n\n\t\t\t\t\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, sgn ) );\n\n\t\t\t\t\t\t\t} else if ( sgn < 0 ) {\n\n\t\t\t\t\t\t\t\tsize = Math.pow( this.scaleFactor, - sgn );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState );\n\t\t\t\t\t\tconst x = this._v3_1.distanceTo( this._gizmos.position );\n\t\t\t\t\t\tlet xNew = x / size;\t//distance between camera and gizmos if scale(size, scalepoint) would be performed\n\n\t\t\t\t\t\t//check min and max distance\n\t\t\t\t\t\txNew = MathUtils.clamp( xNew, this.minDistance, this.maxDistance );\n\n\t\t\t\t\t\tconst y = x * Math.tan( MathUtils.DEG2RAD * this.camera.fov * 0.5 );\n\n\t\t\t\t\t\t//calculate new fov\n\t\t\t\t\t\tlet newFov = MathUtils.RAD2DEG * ( Math.atan( y / xNew ) * 2 );\n\n\t\t\t\t\t\t//check min and max fov\n\t\t\t\t\t\tif ( newFov > this.maxFov ) {\n\n\t\t\t\t\t\t\tnewFov = this.maxFov;\n\n\t\t\t\t\t\t} else if ( newFov < this.minFov ) {\n\n\t\t\t\t\t\t\tnewFov = this.minFov;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst newDistance = y / Math.tan( MathUtils.DEG2RAD * ( newFov / 2 ) );\n\t\t\t\t\t\tsize = x / newDistance;\n\n\t\t\t\t\t\tthis.setFov( newFov );\n\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, this._gizmos.position, false ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._grid != null ) {\n\n\t\t\t\t\t\tthis.disposeGrid();\n\t\t\t\t\t\tthis.drawGrid();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { ArcballControls };\n", "import {\n\tEventDispatcher,\n\tMatrix4,\n\tPlane,\n\tRaycaster,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _plane = new Plane();\nconst _raycaster = new Raycaster();\n\nconst _pointer = new Vector2();\nconst _offset = new Vector3();\nconst _diff = new Vector2();\nconst _previousPointer = new Vector2();\nconst _intersection = new Vector3();\nconst _worldPosition = new Vector3();\nconst _inverseMatrix = new Matrix4();\n\nconst _up = new Vector3();\nconst _right = new Vector3();\n\nclass DragControls extends EventDispatcher {\n\n\tconstructor( _objects, _camera, _domElement ) {\n\n\t\tsuper();\n\n\t\t_domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t\tlet _selected = null, _hovered = null;\n\n\t\tconst _intersections = [];\n\n\t\tthis.mode = 'translate';\n\n\t\tthis.rotateSpeed = 1;\n\n\t\t//\n\n\t\tconst scope = this;\n\n\t\tfunction activate() {\n\n\t\t\t_domElement.addEventListener( 'pointermove', onPointerMove );\n\t\t\t_domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\t\t_domElement.addEventListener( 'pointerup', onPointerCancel );\n\t\t\t_domElement.addEventListener( 'pointerleave', onPointerCancel );\n\n\t\t}\n\n\t\tfunction deactivate() {\n\n\t\t\t_domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\t_domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\t_domElement.removeEventListener( 'pointerup', onPointerCancel );\n\t\t\t_domElement.removeEventListener( 'pointerleave', onPointerCancel );\n\n\t\t\t_domElement.style.cursor = '';\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tdeactivate();\n\n\t\t}\n\n\t\tfunction getObjects() {\n\n\t\t\treturn _objects;\n\n\t\t}\n\n\t\tfunction setObjects( objects ) {\n\n\t\t\t_objects = objects;\n\n\t\t}\n\n\t\tfunction getRaycaster() {\n\n\t\t\treturn _raycaster;\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tupdatePointer( event );\n\n\t\t\t_raycaster.setFromCamera( _pointer, _camera );\n\n\t\t\tif ( _selected ) {\n\n\t\t\t\tif ( scope.mode === 'translate' ) {\n\n\t\t\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( scope.mode === 'rotate' ) {\n\n\t\t\t\t\t_diff.subVectors( _pointer, _previousPointer ).multiplyScalar( scope.rotateSpeed );\n\t\t\t\t\t_selected.rotateOnWorldAxis( _up, _diff.x );\n\t\t\t\t\t_selected.rotateOnWorldAxis( _right.normalize(), - _diff.y );\n\n\t\t\t\t}\n\n\t\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\t\t_previousPointer.copy( _pointer );\n\n\t\t\t} else {\n\n\t\t\t\t// hover support\n\n\t\t\t\tif ( event.pointerType === 'mouse' || event.pointerType === 'pen' ) {\n\n\t\t\t\t\t_intersections.length = 0;\n\n\t\t\t\t\t_raycaster.setFromCamera( _pointer, _camera );\n\t\t\t\t\t_raycaster.intersectObjects( _objects, scope.recursive, _intersections );\n\n\t\t\t\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t\t\t\tconst object = _intersections[ 0 ].object;\n\n\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) );\n\n\t\t\t\t\t\tif ( _hovered !== object && _hovered !== null ) {\n\n\t\t\t\t\t\t\tscope.dispatchEvent( { type: 'hoveroff', object: _hovered } );\n\n\t\t\t\t\t\t\t_domElement.style.cursor = 'auto';\n\t\t\t\t\t\t\t_hovered = null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( _hovered !== object ) {\n\n\t\t\t\t\t\t\tscope.dispatchEvent( { type: 'hoveron', object: object } );\n\n\t\t\t\t\t\t\t_domElement.style.cursor = 'pointer';\n\t\t\t\t\t\t\t_hovered = object;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( _hovered !== null ) {\n\n\t\t\t\t\t\t\tscope.dispatchEvent( { type: 'hoveroff', object: _hovered } );\n\n\t\t\t\t\t\t\t_domElement.style.cursor = 'auto';\n\t\t\t\t\t\t\t_hovered = null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_previousPointer.copy( _pointer );\n\n\t\t}\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tupdatePointer( event );\n\n\t\t\t_intersections.length = 0;\n\n\t\t\t_raycaster.setFromCamera( _pointer, _camera );\n\t\t\t_raycaster.intersectObjects( _objects, scope.recursive, _intersections );\n\n\t\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t\tif ( scope.transformGroup === true ) {\n\n\t\t\t\t\t// look for the outermost group in the object's upper hierarchy\n\n\t\t\t\t\t_selected = findGroup( _intersections[ 0 ].object );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_selected = _intersections[ 0 ].object;\n\n\t\t\t\t}\n\n\t\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t\tif ( scope.mode === 'translate' ) {\n\n\t\t\t\t\t\t_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();\n\t\t\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t\t\t} else if ( scope.mode === 'rotate' ) {\n\n\t\t\t\t\t\t// the controls only support Y+ up\n\t\t\t\t\t\t_up.set( 0, 1, 0 ).applyQuaternion( _camera.quaternion ).normalize();\n\t\t\t\t\t\t_right.set( 1, 0, 0 ).applyQuaternion( _camera.quaternion ).normalize();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t\t}\n\n\t\t\t_previousPointer.copy( _pointer );\n\n\t\t}\n\n\t\tfunction onPointerCancel() {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( _selected ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t\t_selected = null;\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = _hovered ? 'pointer' : 'auto';\n\n\t\t}\n\n\t\tfunction updatePointer( event ) {\n\n\t\t\tconst rect = _domElement.getBoundingClientRect();\n\n\t\t\t_pointer.x = ( event.clientX - rect.left ) / rect.width * 2 - 1;\n\t\t\t_pointer.y = - ( event.clientY - rect.top ) / rect.height * 2 + 1;\n\n\t\t}\n\n\t\tfunction findGroup( obj, group = null ) {\n\n\t\t\tif ( obj.isGroup ) group = obj;\n\n\t\t\tif ( obj.parent === null ) return group;\n\n\t\t\treturn findGroup( obj.parent, group );\n\n\t\t}\n\n\t\tactivate();\n\n\t\t// API\n\n\t\tthis.enabled = true;\n\t\tthis.recursive = true;\n\t\tthis.transformGroup = false;\n\n\t\tthis.activate = activate;\n\t\tthis.deactivate = deactivate;\n\t\tthis.dispose = dispose;\n\t\tthis.getObjects = getObjects;\n\t\tthis.getRaycaster = getRaycaster;\n\t\tthis.setObjects = setObjects;\n\n\t}\n\n}\n\nexport { DragControls };\n", "import {\n\tMathUtils,\n\tSpherical,\n\tVector3\n} from 'three';\n\nconst _lookDirection = new Vector3();\nconst _spherical = new Spherical();\nconst _target = new Vector3();\n\nclass FirstPersonControls {\n\n\tconstructor( object, domElement ) {\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\n\t\t// API\n\n\t\tthis.enabled = true;\n\n\t\tthis.movementSpeed = 1.0;\n\t\tthis.lookSpeed = 0.005;\n\n\t\tthis.lookVertical = true;\n\t\tthis.autoForward = false;\n\n\t\tthis.activeLook = true;\n\n\t\tthis.heightSpeed = false;\n\t\tthis.heightCoef = 1.0;\n\t\tthis.heightMin = 0.0;\n\t\tthis.heightMax = 1.0;\n\n\t\tthis.constrainVertical = false;\n\t\tthis.verticalMin = 0;\n\t\tthis.verticalMax = Math.PI;\n\n\t\tthis.mouseDragOn = false;\n\n\t\t// internals\n\n\t\tthis.autoSpeedFactor = 0.0;\n\n\t\tthis.pointerX = 0;\n\t\tthis.pointerY = 0;\n\n\t\tthis.moveForward = false;\n\t\tthis.moveBackward = false;\n\t\tthis.moveLeft = false;\n\t\tthis.moveRight = false;\n\n\t\tthis.viewHalfX = 0;\n\t\tthis.viewHalfY = 0;\n\n\t\t// private variables\n\n\t\tlet lat = 0;\n\t\tlet lon = 0;\n\n\t\t//\n\n\t\tthis.handleResize = function () {\n\n\t\t\tif ( this.domElement === document ) {\n\n\t\t\t\tthis.viewHalfX = window.innerWidth / 2;\n\t\t\t\tthis.viewHalfY = window.innerHeight / 2;\n\n\t\t\t} else {\n\n\t\t\t\tthis.viewHalfX = this.domElement.offsetWidth / 2;\n\t\t\t\tthis.viewHalfY = this.domElement.offsetHeight / 2;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.onPointerDown = function ( event ) {\n\n\t\t\tif ( this.domElement !== document ) {\n\n\t\t\t\tthis.domElement.focus();\n\n\t\t\t}\n\n\t\t\tif ( this.activeLook ) {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveForward = true; break;\n\t\t\t\t\tcase 2: this.moveBackward = true; break;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.mouseDragOn = true;\n\n\t\t};\n\n\t\tthis.onPointerUp = function ( event ) {\n\n\t\t\tif ( this.activeLook ) {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveForward = false; break;\n\t\t\t\t\tcase 2: this.moveBackward = false; break;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.mouseDragOn = false;\n\n\t\t};\n\n\t\tthis.onPointerMove = function ( event ) {\n\n\t\t\tif ( this.domElement === document ) {\n\n\t\t\t\tthis.pointerX = event.pageX - this.viewHalfX;\n\t\t\t\tthis.pointerY = event.pageY - this.viewHalfY;\n\n\t\t\t} else {\n\n\t\t\t\tthis.pointerX = event.pageX - this.domElement.offsetLeft - this.viewHalfX;\n\t\t\t\tthis.pointerY = event.pageY - this.domElement.offsetTop - this.viewHalfY;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.onKeyDown = function ( event ) {\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\tcase 'KeyW': this.moveForward = true; break;\n\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\tcase 'KeyA': this.moveLeft = true; break;\n\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\tcase 'KeyS': this.moveBackward = true; break;\n\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'KeyD': this.moveRight = true; break;\n\n\t\t\t\tcase 'KeyR': this.moveUp = true; break;\n\t\t\t\tcase 'KeyF': this.moveDown = true; break;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.onKeyUp = function ( event ) {\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\tcase 'KeyW': this.moveForward = false; break;\n\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\tcase 'KeyA': this.moveLeft = false; break;\n\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\tcase 'KeyS': this.moveBackward = false; break;\n\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'KeyD': this.moveRight = false; break;\n\n\t\t\t\tcase 'KeyR': this.moveUp = false; break;\n\t\t\t\tcase 'KeyF': this.moveDown = false; break;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.lookAt = function ( x, y, z ) {\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\t_target.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\t_target.set( x, y, z );\n\n\t\t\t}\n\n\t\t\tthis.object.lookAt( _target );\n\n\t\t\tsetOrientation( this );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\tconst targetPosition = new Vector3();\n\n\t\t\treturn function update( delta ) {\n\n\t\t\t\tif ( this.enabled === false ) return;\n\n\t\t\t\tif ( this.heightSpeed ) {\n\n\t\t\t\t\tconst y = MathUtils.clamp( this.object.position.y, this.heightMin, this.heightMax );\n\t\t\t\t\tconst heightDelta = y - this.heightMin;\n\n\t\t\t\t\tthis.autoSpeedFactor = delta * ( heightDelta * this.heightCoef );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.autoSpeedFactor = 0.0;\n\n\t\t\t\t}\n\n\t\t\t\tconst actualMoveSpeed = delta * this.movementSpeed;\n\n\t\t\t\tif ( this.moveForward || ( this.autoForward && ! this.moveBackward ) ) this.object.translateZ( - ( actualMoveSpeed + this.autoSpeedFactor ) );\n\t\t\t\tif ( this.moveBackward ) this.object.translateZ( actualMoveSpeed );\n\n\t\t\t\tif ( this.moveLeft ) this.object.translateX( - actualMoveSpeed );\n\t\t\t\tif ( this.moveRight ) this.object.translateX( actualMoveSpeed );\n\n\t\t\t\tif ( this.moveUp ) this.object.translateY( actualMoveSpeed );\n\t\t\t\tif ( this.moveDown ) this.object.translateY( - actualMoveSpeed );\n\n\t\t\t\tlet actualLookSpeed = delta * this.lookSpeed;\n\n\t\t\t\tif ( ! this.activeLook ) {\n\n\t\t\t\t\tactualLookSpeed = 0;\n\n\t\t\t\t}\n\n\t\t\t\tlet verticalLookRatio = 1;\n\n\t\t\t\tif ( this.constrainVertical ) {\n\n\t\t\t\t\tverticalLookRatio = Math.PI / ( this.verticalMax - this.verticalMin );\n\n\t\t\t\t}\n\n\t\t\t\tlon -= this.pointerX * actualLookSpeed;\n\t\t\t\tif ( this.lookVertical ) lat -= this.pointerY * actualLookSpeed * verticalLookRatio;\n\n\t\t\t\tlat = Math.max( - 85, Math.min( 85, lat ) );\n\n\t\t\t\tlet phi = MathUtils.degToRad( 90 - lat );\n\t\t\t\tconst theta = MathUtils.degToRad( lon );\n\n\t\t\t\tif ( this.constrainVertical ) {\n\n\t\t\t\t\tphi = MathUtils.mapLinear( phi, 0, Math.PI, this.verticalMin, this.verticalMax );\n\n\t\t\t\t}\n\n\t\t\t\tconst position = this.object.position;\n\n\t\t\t\ttargetPosition.setFromSphericalCoords( 1, phi, theta ).add( position );\n\n\t\t\t\tthis.object.lookAt( targetPosition );\n\n\t\t\t};\n\n\t\t}();\n\n\t\tthis.dispose = function () {\n\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', contextmenu );\n\t\t\tthis.domElement.removeEventListener( 'pointerdown', _onPointerDown );\n\t\t\tthis.domElement.removeEventListener( 'pointermove', _onPointerMove );\n\t\t\tthis.domElement.removeEventListener( 'pointerup', _onPointerUp );\n\n\t\t\twindow.removeEventListener( 'keydown', _onKeyDown );\n\t\t\twindow.removeEventListener( 'keyup', _onKeyUp );\n\n\t\t};\n\n\t\tconst _onPointerMove = this.onPointerMove.bind( this );\n\t\tconst _onPointerDown = this.onPointerDown.bind( this );\n\t\tconst _onPointerUp = this.onPointerUp.bind( this );\n\t\tconst _onKeyDown = this.onKeyDown.bind( this );\n\t\tconst _onKeyUp = this.onKeyUp.bind( this );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', contextmenu );\n\t\tthis.domElement.addEventListener( 'pointerdown', _onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointermove', _onPointerMove );\n\t\tthis.domElement.addEventListener( 'pointerup', _onPointerUp );\n\n\t\twindow.addEventListener( 'keydown', _onKeyDown );\n\t\twindow.addEventListener( 'keyup', _onKeyUp );\n\n\t\tfunction setOrientation( controls ) {\n\n\t\t\tconst quaternion = controls.object.quaternion;\n\n\t\t\t_lookDirection.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\t\t\t_spherical.setFromVector3( _lookDirection );\n\n\t\t\tlat = 90 - MathUtils.radToDeg( _spherical.phi );\n\t\t\tlon = MathUtils.radToDeg( _spherical.theta );\n\n\t\t}\n\n\t\tthis.handleResize();\n\n\t\tsetOrientation( this );\n\n\t}\n\n}\n\nfunction contextmenu( event ) {\n\n\tevent.preventDefault();\n\n}\n\nexport { FirstPersonControls };\n", "import {\n\tEventDispatcher,\n\tQuaternion,\n\tVector3\n} from 'three';\n\nconst _changeEvent = { type: 'change' };\n\nclass FlyControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\n\t\t// API\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\tthis.movementSpeed = 1.0;\n\t\tthis.rollSpeed = 0.005;\n\n\t\tthis.dragToLook = false;\n\t\tthis.autoForward = false;\n\n\t\t// disable default target object behavior\n\n\t\t// internals\n\n\t\tconst scope = this;\n\n\t\tconst EPS = 0.000001;\n\n\t\tconst lastQuaternion = new Quaternion();\n\t\tconst lastPosition = new Vector3();\n\n\t\tthis.tmpQuaternion = new Quaternion();\n\n\t\tthis.status = 0;\n\n\t\tthis.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 };\n\t\tthis.moveVector = new Vector3( 0, 0, 0 );\n\t\tthis.rotationVector = new Vector3( 0, 0, 0 );\n\n\t\tthis.keydown = function ( event ) {\n\n\t\t\tif ( event.altKey || this.enabled === false ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ShiftLeft':\n\t\t\t\tcase 'ShiftRight': this.movementSpeedMultiplier = .1; break;\n\n\t\t\t\tcase 'KeyW': this.moveState.forward = 1; break;\n\t\t\t\tcase 'KeyS': this.moveState.back = 1; break;\n\n\t\t\t\tcase 'KeyA': this.moveState.left = 1; break;\n\t\t\t\tcase 'KeyD': this.moveState.right = 1; break;\n\n\t\t\t\tcase 'KeyR': this.moveState.up = 1; break;\n\t\t\t\tcase 'KeyF': this.moveState.down = 1; break;\n\n\t\t\t\tcase 'ArrowUp': this.moveState.pitchUp = 1; break;\n\t\t\t\tcase 'ArrowDown': this.moveState.pitchDown = 1; break;\n\n\t\t\t\tcase 'ArrowLeft': this.moveState.yawLeft = 1; break;\n\t\t\t\tcase 'ArrowRight': this.moveState.yawRight = 1; break;\n\n\t\t\t\tcase 'KeyQ': this.moveState.rollLeft = 1; break;\n\t\t\t\tcase 'KeyE': this.moveState.rollRight = 1; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.keyup = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ShiftLeft':\n\t\t\t\tcase 'ShiftRight': this.movementSpeedMultiplier = 1; break;\n\n\t\t\t\tcase 'KeyW': this.moveState.forward = 0; break;\n\t\t\t\tcase 'KeyS': this.moveState.back = 0; break;\n\n\t\t\t\tcase 'KeyA': this.moveState.left = 0; break;\n\t\t\t\tcase 'KeyD': this.moveState.right = 0; break;\n\n\t\t\t\tcase 'KeyR': this.moveState.up = 0; break;\n\t\t\t\tcase 'KeyF': this.moveState.down = 0; break;\n\n\t\t\t\tcase 'ArrowUp': this.moveState.pitchUp = 0; break;\n\t\t\t\tcase 'ArrowDown': this.moveState.pitchDown = 0; break;\n\n\t\t\t\tcase 'ArrowLeft': this.moveState.yawLeft = 0; break;\n\t\t\t\tcase 'ArrowRight': this.moveState.yawRight = 0; break;\n\n\t\t\t\tcase 'KeyQ': this.moveState.rollLeft = 0; break;\n\t\t\t\tcase 'KeyE': this.moveState.rollRight = 0; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.pointerdown = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( this.dragToLook ) {\n\n\t\t\t\tthis.status ++;\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveState.forward = 1; break;\n\t\t\t\t\tcase 2: this.moveState.back = 1; break;\n\n\t\t\t\t}\n\n\t\t\t\tthis.updateMovementVector();\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.pointermove = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( ! this.dragToLook || this.status > 0 ) {\n\n\t\t\t\tconst container = this.getContainerDimensions();\n\t\t\t\tconst halfWidth = container.size[ 0 ] / 2;\n\t\t\t\tconst halfHeight = container.size[ 1 ] / 2;\n\n\t\t\t\tthis.moveState.yawLeft = - ( ( event.pageX - container.offset[ 0 ] ) - halfWidth ) / halfWidth;\n\t\t\t\tthis.moveState.pitchDown = ( ( event.pageY - container.offset[ 1 ] ) - halfHeight ) / halfHeight;\n\n\t\t\t\tthis.updateRotationVector();\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.pointerup = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( this.dragToLook ) {\n\n\t\t\t\tthis.status --;\n\n\t\t\t\tthis.moveState.yawLeft = this.moveState.pitchDown = 0;\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveState.forward = 0; break;\n\t\t\t\t\tcase 2: this.moveState.back = 0; break;\n\n\t\t\t\t}\n\n\t\t\t\tthis.updateMovementVector();\n\n\t\t\t}\n\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.pointercancel = function () {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( this.dragToLook ) {\n\n\t\t\t\tthis.status = 0;\n\n\t\t\t\tthis.moveState.yawLeft = this.moveState.pitchDown = 0;\n\n\t\t\t} else {\n\n\t\t\t\tthis.moveState.forward = 0;\n\t\t\t\tthis.moveState.back = 0;\n\n\t\t\t\tthis.updateMovementVector();\n\n\t\t\t}\n\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.contextMenu = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t};\n\n\t\tthis.update = function ( delta ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tconst moveMult = delta * scope.movementSpeed;\n\t\t\tconst rotMult = delta * scope.rollSpeed;\n\n\t\t\tscope.object.translateX( scope.moveVector.x * moveMult );\n\t\t\tscope.object.translateY( scope.moveVector.y * moveMult );\n\t\t\tscope.object.translateZ( scope.moveVector.z * moveMult );\n\n\t\t\tscope.tmpQuaternion.set( scope.rotationVector.x * rotMult, scope.rotationVector.y * rotMult, scope.rotationVector.z * rotMult, 1 ).normalize();\n\t\t\tscope.object.quaternion.multiply( scope.tmpQuaternion );\n\n\t\t\tif (\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS\n\t\t\t) {\n\n\t\t\t\tscope.dispatchEvent( _changeEvent );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.updateMovementVector = function () {\n\n\t\t\tconst forward = ( this.moveState.forward || ( this.autoForward && ! this.moveState.back ) ) ? 1 : 0;\n\n\t\t\tthis.moveVector.x = ( - this.moveState.left + this.moveState.right );\n\t\t\tthis.moveVector.y = ( - this.moveState.down + this.moveState.up );\n\t\t\tthis.moveVector.z = ( - forward + this.moveState.back );\n\n\t\t\t//console.log( 'move:', [ this.moveVector.x, this.moveVector.y, this.moveVector.z ] );\n\n\t\t};\n\n\t\tthis.updateRotationVector = function () {\n\n\t\t\tthis.rotationVector.x = ( - this.moveState.pitchDown + this.moveState.pitchUp );\n\t\t\tthis.rotationVector.y = ( - this.moveState.yawRight + this.moveState.yawLeft );\n\t\t\tthis.rotationVector.z = ( - this.moveState.rollRight + this.moveState.rollLeft );\n\n\t\t\t//console.log( 'rotate:', [ this.rotationVector.x, this.rotationVector.y, this.rotationVector.z ] );\n\n\t\t};\n\n\t\tthis.getContainerDimensions = function () {\n\n\t\t\tif ( this.domElement != document ) {\n\n\t\t\t\treturn {\n\t\t\t\t\tsize: [ this.domElement.offsetWidth, this.domElement.offsetHeight ],\n\t\t\t\t\toffset: [ this.domElement.offsetLeft, this.domElement.offsetTop ]\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\treturn {\n\t\t\t\t\tsize: [ window.innerWidth, window.innerHeight ],\n\t\t\t\t\toffset: [ 0, 0 ]\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', _contextmenu );\n\t\t\tthis.domElement.removeEventListener( 'pointerdown', _pointerdown );\n\t\t\tthis.domElement.removeEventListener( 'pointermove', _pointermove );\n\t\t\tthis.domElement.removeEventListener( 'pointerup', _pointerup );\n\t\t\tthis.domElement.removeEventListener( 'pointercancel', _pointercancel );\n\n\t\t\twindow.removeEventListener( 'keydown', _keydown );\n\t\t\twindow.removeEventListener( 'keyup', _keyup );\n\n\t\t};\n\n\t\tconst _contextmenu = this.contextMenu.bind( this );\n\t\tconst _pointermove = this.pointermove.bind( this );\n\t\tconst _pointerdown = this.pointerdown.bind( this );\n\t\tconst _pointerup = this.pointerup.bind( this );\n\t\tconst _pointercancel = this.pointercancel.bind( this );\n\t\tconst _keydown = this.keydown.bind( this );\n\t\tconst _keyup = this.keyup.bind( this );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', _contextmenu );\n\t\tthis.domElement.addEventListener( 'pointerdown', _pointerdown );\n\t\tthis.domElement.addEventListener( 'pointermove', _pointermove );\n\t\tthis.domElement.addEventListener( 'pointerup', _pointerup );\n\t\tthis.domElement.addEventListener( 'pointercancel', _pointercancel );\n\n\t\twindow.addEventListener( 'keydown', _keydown );\n\t\twindow.addEventListener( 'keyup', _keyup );\n\n\t\tthis.updateMovementVector();\n\t\tthis.updateRotationVector();\n\n\t}\n\n}\n\nexport { FlyControls };\n", "import { MOUSE, TOUCH } from 'three';\n\nimport { OrbitControls } from './OrbitControls.js';\n\n// MapControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - left mouse, or arrow keys / touch: one-finger move\n\nclass MapControls extends OrbitControls {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper( object, domElement );\n\n\t\tthis.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up\n\n\t\tthis.mouseButtons = { LEFT: MOUSE.PAN, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.ROTATE };\n\n\t\tthis.touches = { ONE: TOUCH.PAN, TWO: TOUCH.DOLLY_ROTATE };\n\n\t}\n\n}\n\nexport { MapControls };\n", "import {\n\tEuler,\n\tEventDispatcher,\n\tVector3\n} from 'three';\n\nconst _euler = new Euler( 0, 0, 0, 'YXZ' );\nconst _vector = new Vector3();\n\nconst _changeEvent = { type: 'change' };\nconst _lockEvent = { type: 'lock' };\nconst _unlockEvent = { type: 'unlock' };\n\nconst _PI_2 = Math.PI / 2;\n\nclass PointerLockControls extends EventDispatcher {\n\n\tconstructor( camera, domElement ) {\n\n\t\tsuper();\n\n\t\tthis.camera = camera;\n\t\tthis.domElement = domElement;\n\n\t\tthis.isLocked = false;\n\n\t\t// Set to constrain the pitch of the camera\n\t\t// Range is 0 to Math.PI radians\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\tthis.pointerSpeed = 1.0;\n\n\t\tthis._onMouseMove = onMouseMove.bind( this );\n\t\tthis._onPointerlockChange = onPointerlockChange.bind( this );\n\t\tthis._onPointerlockError = onPointerlockError.bind( this );\n\n\t\tthis.connect();\n\n\t}\n\n\tconnect() {\n\n\t\tthis.domElement.ownerDocument.addEventListener( 'mousemove', this._onMouseMove );\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointerlockchange', this._onPointerlockChange );\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointerlockerror', this._onPointerlockError );\n\n\t}\n\n\tdisconnect() {\n\n\t\tthis.domElement.ownerDocument.removeEventListener( 'mousemove', this._onMouseMove );\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointerlockchange', this._onPointerlockChange );\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointerlockerror', this._onPointerlockError );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\tgetObject() { // retaining this method for backward compatibility\n\n\t\treturn this.camera;\n\n\t}\n\n\tgetDirection( v ) {\n\n\t\treturn v.set( 0, 0, - 1 ).applyQuaternion( this.camera.quaternion );\n\n\t}\n\n\tmoveForward( distance ) {\n\n\t\t// move forward parallel to the xz-plane\n\t\t// assumes camera.up is y-up\n\n\t\tconst camera = this.camera;\n\n\t\t_vector.setFromMatrixColumn( camera.matrix, 0 );\n\n\t\t_vector.crossVectors( camera.up, _vector );\n\n\t\tcamera.position.addScaledVector( _vector, distance );\n\n\t}\n\n\tmoveRight( distance ) {\n\n\t\tconst camera = this.camera;\n\n\t\t_vector.setFromMatrixColumn( camera.matrix, 0 );\n\n\t\tcamera.position.addScaledVector( _vector, distance );\n\n\t}\n\n\tlock() {\n\n\t\tthis.domElement.requestPointerLock();\n\n\t}\n\n\tunlock() {\n\n\t\tthis.domElement.ownerDocument.exitPointerLock();\n\n\t}\n\n}\n\n// event listeners\n\nfunction onMouseMove( event ) {\n\n\tif ( this.isLocked === false ) return;\n\n\tconst movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;\n\tconst movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;\n\n\tconst camera = this.camera;\n\t_euler.setFromQuaternion( camera.quaternion );\n\n\t_euler.y -= movementX * 0.002 * this.pointerSpeed;\n\t_euler.x -= movementY * 0.002 * this.pointerSpeed;\n\n\t_euler.x = Math.max( _PI_2 - this.maxPolarAngle, Math.min( _PI_2 - this.minPolarAngle, _euler.x ) );\n\n\tcamera.quaternion.setFromEuler( _euler );\n\n\tthis.dispatchEvent( _changeEvent );\n\n}\n\nfunction onPointerlockChange() {\n\n\tif ( this.domElement.ownerDocument.pointerLockElement === this.domElement ) {\n\n\t\tthis.dispatchEvent( _lockEvent );\n\n\t\tthis.isLocked = true;\n\n\t} else {\n\n\t\tthis.dispatchEvent( _unlockEvent );\n\n\t\tthis.isLocked = false;\n\n\t}\n\n}\n\nfunction onPointerlockError() {\n\n\tconsole.error( 'THREE.PointerLockControls: Unable to use Pointer Lock API' );\n\n}\n\nexport { PointerLockControls };\n", "import {\n\tEventDispatcher,\n\tMathUtils,\n\tMOUSE,\n\tQuaternion,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\n\nclass TrackballControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\t\tconst STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t\t// API\n\n\t\tthis.enabled = true;\n\n\t\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\t\tthis.rotateSpeed = 1.0;\n\t\tthis.zoomSpeed = 1.2;\n\t\tthis.panSpeed = 0.3;\n\n\t\tthis.noRotate = false;\n\t\tthis.noZoom = false;\n\t\tthis.noPan = false;\n\n\t\tthis.staticMoving = false;\n\t\tthis.dynamicDampingFactor = 0.2;\n\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\tthis.keys = [ 'KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/ ];\n\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// internals\n\n\t\tthis.target = new Vector3();\n\n\t\tconst EPS = 0.000001;\n\n\t\tconst lastPosition = new Vector3();\n\t\tlet lastZoom = 1;\n\n\t\tlet _state = STATE.NONE,\n\t\t\t_keyState = STATE.NONE,\n\n\t\t\t_touchZoomDistanceStart = 0,\n\t\t\t_touchZoomDistanceEnd = 0,\n\n\t\t\t_lastAngle = 0;\n\n\t\tconst _eye = new Vector3(),\n\n\t\t\t_movePrev = new Vector2(),\n\t\t\t_moveCurr = new Vector2(),\n\n\t\t\t_lastAxis = new Vector3(),\n\n\t\t\t_zoomStart = new Vector2(),\n\t\t\t_zoomEnd = new Vector2(),\n\n\t\t\t_panStart = new Vector2(),\n\t\t\t_panEnd = new Vector2(),\n\n\t\t\t_pointers = [],\n\t\t\t_pointerPositions = {};\n\n\t\t// for reset\n\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.up0 = this.object.up.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// methods\n\n\t\tthis.handleResize = function () {\n\n\t\t\tconst box = scope.domElement.getBoundingClientRect();\n\t\t\t// adjustments come from similar code in the jquery offset() function\n\t\t\tconst d = scope.domElement.ownerDocument.documentElement;\n\t\t\tscope.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\t\tscope.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\t\tscope.screen.width = box.width;\n\t\t\tscope.screen.height = box.height;\n\n\t\t};\n\n\t\tconst getMouseOnScreen = ( function () {\n\n\t\t\tconst vector = new Vector2();\n\n\t\t\treturn function getMouseOnScreen( pageX, pageY ) {\n\n\t\t\t\tvector.set(\n\t\t\t\t\t( pageX - scope.screen.left ) / scope.screen.width,\n\t\t\t\t\t( pageY - scope.screen.top ) / scope.screen.height\n\t\t\t\t);\n\n\t\t\t\treturn vector;\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tconst getMouseOnCircle = ( function () {\n\n\t\t\tconst vector = new Vector2();\n\n\t\t\treturn function getMouseOnCircle( pageX, pageY ) {\n\n\t\t\t\tvector.set(\n\t\t\t\t\t( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ),\n\t\t\t\t\t( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional\n\t\t\t\t);\n\n\t\t\t\treturn vector;\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.rotateCamera = ( function () {\n\n\t\t\tconst axis = new Vector3(),\n\t\t\t\tquaternion = new Quaternion(),\n\t\t\t\teyeDirection = new Vector3(),\n\t\t\t\tobjectUpDirection = new Vector3(),\n\t\t\t\tobjectSidewaysDirection = new Vector3(),\n\t\t\t\tmoveDirection = new Vector3();\n\n\t\t\treturn function rotateCamera() {\n\n\t\t\t\tmoveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 );\n\t\t\t\tlet angle = moveDirection.length();\n\n\t\t\t\tif ( angle ) {\n\n\t\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\n\t\t\t\t\teyeDirection.copy( _eye ).normalize();\n\t\t\t\t\tobjectUpDirection.copy( scope.object.up ).normalize();\n\t\t\t\t\tobjectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize();\n\n\t\t\t\t\tobjectUpDirection.setLength( _moveCurr.y - _movePrev.y );\n\t\t\t\t\tobjectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x );\n\n\t\t\t\t\tmoveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) );\n\n\t\t\t\t\taxis.crossVectors( moveDirection, _eye ).normalize();\n\n\t\t\t\t\tangle *= scope.rotateSpeed;\n\t\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\n\t\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t\t_lastAxis.copy( axis );\n\t\t\t\t\t_lastAngle = angle;\n\n\t\t\t\t} else if ( ! scope.staticMoving && _lastAngle ) {\n\n\t\t\t\t\t_lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor );\n\t\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\t\t\t\t\tquaternion.setFromAxisAngle( _lastAxis, _lastAngle );\n\t\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t}\n\n\t\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t\t};\n\n\t\t}() );\n\n\n\t\tthis.zoomCamera = function () {\n\n\t\t\tlet factor;\n\n\t\t\tif ( _state === STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\t\tfactor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\n\t\t\t\t_touchZoomDistanceStart = _touchZoomDistanceEnd;\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tscope.object.zoom = MathUtils.clamp( scope.object.zoom / factor, scope.minZoom, scope.maxZoom );\n\n\t\t\t\t\tif ( lastZoom !== scope.object.zoom ) {\n\n\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfactor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed;\n\n\t\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t\tscope.object.zoom = MathUtils.clamp( scope.object.zoom / factor, scope.minZoom, scope.maxZoom );\n\n\t\t\t\t\t\tif ( lastZoom !== scope.object.zoom ) {\n\n\t\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.panCamera = ( function () {\n\n\t\t\tconst mouseChange = new Vector2(),\n\t\t\t\tobjectUp = new Vector3(),\n\t\t\t\tpan = new Vector3();\n\n\t\t\treturn function panCamera() {\n\n\t\t\t\tmouseChange.copy( _panEnd ).sub( _panStart );\n\n\t\t\t\tif ( mouseChange.lengthSq() ) {\n\n\t\t\t\t\tif ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t\tconst scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth;\n\t\t\t\t\t\tconst scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth;\n\n\t\t\t\t\t\tmouseChange.x *= scale_x;\n\t\t\t\t\t\tmouseChange.y *= scale_y;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmouseChange.multiplyScalar( _eye.length() * scope.panSpeed );\n\n\t\t\t\t\tpan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x );\n\t\t\t\t\tpan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) );\n\n\t\t\t\t\tscope.object.position.add( pan );\n\t\t\t\t\tscope.target.add( pan );\n\n\t\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t\t_panStart.copy( _panEnd );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.checkDistances = function () {\n\n\t\t\tif ( ! scope.noZoom || ! scope.noPan ) {\n\n\t\t\t\tif ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) {\n\n\t\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) );\n\t\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) {\n\n\t\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) );\n\t\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\t\tif ( ! scope.noRotate ) {\n\n\t\t\t\tscope.rotateCamera();\n\n\t\t\t}\n\n\t\t\tif ( ! scope.noZoom ) {\n\n\t\t\t\tscope.zoomCamera();\n\n\t\t\t}\n\n\t\t\tif ( ! scope.noPan ) {\n\n\t\t\t\tscope.panCamera();\n\n\t\t\t}\n\n\t\t\tscope.object.position.addVectors( scope.target, _eye );\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\tscope.checkDistances();\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t\t}\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\t\tlastZoom = scope.object.zoom;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\t_state = STATE.NONE;\n\t\t\t_keyState = STATE.NONE;\n\n\t\t\tscope.target.copy( scope.target0 );\n\t\t\tscope.object.position.copy( scope.position0 );\n\t\t\tscope.object.up.copy( scope.up0 );\n\t\t\tscope.object.zoom = scope.zoom0;\n\n\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\tlastPosition.copy( scope.object.position );\n\t\t\tlastZoom = scope.object.zoom;\n\n\t\t};\n\n\t\t// listeners\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( _pointers.length === 0 ) {\n\n\t\t\t\tscope.domElement.setPointerCapture( event.pointerId );\n\n\t\t\t\tscope.domElement.addEventListener( 'pointermove', onPointerMove );\n\t\t\t\tscope.domElement.addEventListener( 'pointerup', onPointerUp );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\taddPointer( event );\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchStart( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseDown( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchMove( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseMove( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerUp( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchEnd( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseUp();\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tremovePointer( event );\n\n\t\t\tif ( _pointers.length === 0 ) {\n\n\t\t\t\tscope.domElement.releasePointerCapture( event.pointerId );\n\n\t\t\t\tscope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\t\tscope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tfunction onPointerCancel( event ) {\n\n\t\t\tremovePointer( event );\n\n\t\t}\n\n\t\tfunction keydown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\twindow.removeEventListener( 'keydown', keydown );\n\n\t\t\tif ( _keyState !== STATE.NONE ) {\n\n\t\t\t\treturn;\n\n\t\t\t} else if ( event.code === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) {\n\n\t\t\t\t_keyState = STATE.ROTATE;\n\n\t\t\t} else if ( event.code === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) {\n\n\t\t\t\t_keyState = STATE.ZOOM;\n\n\t\t\t} else if ( event.code === scope.keys[ STATE.PAN ] && ! scope.noPan ) {\n\n\t\t\t\t_keyState = STATE.PAN;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction keyup() {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\t_keyState = STATE.NONE;\n\n\t\t\twindow.addEventListener( 'keydown', keydown );\n\n\t\t}\n\n\t\tfunction onMouseDown( event ) {\n\n\t\t\tif ( _state === STATE.NONE ) {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase scope.mouseButtons.LEFT:\n\t\t\t\t\t\t_state = STATE.ROTATE;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase scope.mouseButtons.MIDDLE:\n\t\t\t\t\t\t_state = STATE.ZOOM;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase scope.mouseButtons.RIGHT:\n\t\t\t\t\t\t_state = STATE.PAN;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t\t_zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t\t_zoomEnd.copy( _zoomStart );\n\n\t\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t\t_panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t\t_panEnd.copy( _panStart );\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t}\n\n\t\tfunction onMouseMove( event ) {\n\n\t\t\tconst state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t\t_zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t\t_panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseUp() {\n\n\t\t\t_state = STATE.NONE;\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction onMouseWheel( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( scope.noZoom === true ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tswitch ( event.deltaMode ) {\n\n\t\t\t\tcase 2:\n\t\t\t\t\t// Zoom in pages\n\t\t\t\t\t_zoomStart.y -= event.deltaY * 0.025;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\t// Zoom in lines\n\t\t\t\t\t_zoomStart.y -= event.deltaY * 0.01;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t// undefined, 0, assume pixels\n\t\t\t\t\t_zoomStart.y -= event.deltaY * 0.00025;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction onTouchStart( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( _pointers.length ) {\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( _pointers[ 0 ].pageX, _pointers[ 0 ].pageY ) );\n\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // 2 or more\n\t\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\t\t\t\t\tconst dx = _pointers[ 0 ].pageX - _pointers[ 1 ].pageX;\n\t\t\t\t\tconst dy = _pointers[ 0 ].pageY - _pointers[ 1 ].pageY;\n\t\t\t\t\t_touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\t\tconst x = ( _pointers[ 0 ].pageX + _pointers[ 1 ].pageX ) / 2;\n\t\t\t\t\tconst y = ( _pointers[ 0 ].pageY + _pointers[ 1 ].pageY ) / 2;\n\t\t\t\t\t_panStart.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t\t_panEnd.copy( _panStart );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t}\n\n\t\tfunction onTouchMove( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( _pointers.length ) {\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // 2 or more\n\n\t\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\t\tconst dx = event.pageX - position.x;\n\t\t\t\t\tconst dy = event.pageY - position.y;\n\t\t\t\t\t_touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\t\tconst x = ( event.pageX + position.x ) / 2;\n\t\t\t\t\tconst y = ( event.pageY + position.y ) / 2;\n\t\t\t\t\t_panEnd.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchEnd( event ) {\n\n\t\t\tswitch ( _pointers.length ) {\n\n\t\t\t\tcase 0:\n\t\t\t\t\t_state = STATE.NONE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\n\t\t\t\t\tfor ( let i = 0; i < _pointers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( _pointers[ i ].pointerId !== event.pointerId ) {\n\n\t\t\t\t\t\t\tconst position = _pointerPositions[ _pointers[ i ].pointerId ];\n\t\t\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( position.x, position.y ) );\n\t\t\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction contextmenu( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t}\n\n\t\tfunction addPointer( event ) {\n\n\t\t\t_pointers.push( event );\n\n\t\t}\n\n\t\tfunction removePointer( event ) {\n\n\t\t\tdelete _pointerPositions[ event.pointerId ];\n\n\t\t\tfor ( let i = 0; i < _pointers.length; i ++ ) {\n\n\t\t\t\tif ( _pointers[ i ].pointerId == event.pointerId ) {\n\n\t\t\t\t\t_pointers.splice( i, 1 );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction trackPointer( event ) {\n\n\t\t\tlet position = _pointerPositions[ event.pointerId ];\n\n\t\t\tif ( position === undefined ) {\n\n\t\t\t\tposition = new Vector2();\n\t\t\t\t_pointerPositions[ event.pointerId ] = position;\n\n\t\t\t}\n\n\t\t\tposition.set( event.pageX, event.pageY );\n\n\t\t}\n\n\t\tfunction getSecondPointerPosition( event ) {\n\n\t\t\tconst pointer = ( event.pointerId === _pointers[ 0 ].pointerId ) ? _pointers[ 1 ] : _pointers[ 0 ];\n\n\t\t\treturn _pointerPositions[ pointer.pointerId ];\n\n\t\t}\n\n\t\tthis.dispose = function () {\n\n\t\t\tscope.domElement.removeEventListener( 'contextmenu', contextmenu );\n\n\t\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\tscope.domElement.removeEventListener( 'pointercancel', onPointerCancel );\n\t\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n\t\t\tscope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\twindow.removeEventListener( 'keydown', keydown );\n\t\t\twindow.removeEventListener( 'keyup', keyup );\n\n\t\t};\n\n\t\tthis.domElement.addEventListener( 'contextmenu', contextmenu );\n\n\t\tthis.domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', onPointerCancel );\n\t\tthis.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );\n\n\n\t\twindow.addEventListener( 'keydown', keydown );\n\t\twindow.addEventListener( 'keyup', keyup );\n\n\t\tthis.handleResize();\n\n\t\t// force an update at start\n\t\tthis.update();\n\n\t}\n\n}\n\nexport { TrackballControls };\n", "import {\n\tBoxGeometry,\n\tBufferGeometry,\n\tCylinderGeometry,\n\tDoubleSide,\n\tEuler,\n\tFloat32BufferAttribute,\n\tLine,\n\tLineBasicMaterial,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tOctahedronGeometry,\n\tPlaneGeometry,\n\tQuaternion,\n\tRaycaster,\n\tSphereGeometry,\n\tTorusGeometry,\n\tVector3\n} from 'three';\n\nconst _raycaster = new Raycaster();\n\nconst _tempVector = new Vector3();\nconst _tempVector2 = new Vector3();\nconst _tempQuaternion = new Quaternion();\nconst _unit = {\n\tX: new Vector3( 1, 0, 0 ),\n\tY: new Vector3( 0, 1, 0 ),\n\tZ: new Vector3( 0, 0, 1 )\n};\n\nconst _changeEvent = { type: 'change' };\nconst _mouseDownEvent = { type: 'mouseDown', mode: null };\nconst _mouseUpEvent = { type: 'mouseUp', mode: null };\nconst _objectChangeEvent = { type: 'objectChange' };\n\nclass TransformControls extends Object3D {\n\n\tconstructor( camera, domElement ) {\n\n\t\tsuper();\n\n\t\tif ( domElement === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.TransformControls: The second parameter \"domElement\" is now mandatory.' );\n\t\t\tdomElement = document;\n\n\t\t}\n\n\t\tthis.isTransformControls = true;\n\n\t\tthis.visible = false;\n\t\tthis.domElement = domElement;\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t\tconst _gizmo = new TransformControlsGizmo();\n\t\tthis._gizmo = _gizmo;\n\t\tthis.add( _gizmo );\n\n\t\tconst _plane = new TransformControlsPlane();\n\t\tthis._plane = _plane;\n\t\tthis.add( _plane );\n\n\t\tconst scope = this;\n\n\t\t// Defined getter, setter and store for a property\n\t\tfunction defineProperty( propName, defaultValue ) {\n\n\t\t\tlet propValue = defaultValue;\n\n\t\t\tObject.defineProperty( scope, propName, {\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn propValue !== undefined ? propValue : defaultValue;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tif ( propValue !== value ) {\n\n\t\t\t\t\t\tpropValue = value;\n\t\t\t\t\t\t_plane[ propName ] = value;\n\t\t\t\t\t\t_gizmo[ propName ] = value;\n\n\t\t\t\t\t\tscope.dispatchEvent( { type: propName + '-changed', value: value } );\n\t\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tscope[ propName ] = defaultValue;\n\t\t\t_plane[ propName ] = defaultValue;\n\t\t\t_gizmo[ propName ] = defaultValue;\n\n\t\t}\n\n\t\t// Define properties with getters/setter\n\t\t// Setting the defined property will automatically trigger change event\n\t\t// Defined properties are passed down to gizmo and plane\n\n\t\tdefineProperty( 'camera', camera );\n\t\tdefineProperty( 'object', undefined );\n\t\tdefineProperty( 'enabled', true );\n\t\tdefineProperty( 'axis', null );\n\t\tdefineProperty( 'mode', 'translate' );\n\t\tdefineProperty( 'translationSnap', null );\n\t\tdefineProperty( 'rotationSnap', null );\n\t\tdefineProperty( 'scaleSnap', null );\n\t\tdefineProperty( 'space', 'world' );\n\t\tdefineProperty( 'size', 1 );\n\t\tdefineProperty( 'dragging', false );\n\t\tdefineProperty( 'showX', true );\n\t\tdefineProperty( 'showY', true );\n\t\tdefineProperty( 'showZ', true );\n\n\t\t// Reusable utility variables\n\n\t\tconst worldPosition = new Vector3();\n\t\tconst worldPositionStart = new Vector3();\n\t\tconst worldQuaternion = new Quaternion();\n\t\tconst worldQuaternionStart = new Quaternion();\n\t\tconst cameraPosition = new Vector3();\n\t\tconst cameraQuaternion = new Quaternion();\n\t\tconst pointStart = new Vector3();\n\t\tconst pointEnd = new Vector3();\n\t\tconst rotationAxis = new Vector3();\n\t\tconst rotationAngle = 0;\n\t\tconst eye = new Vector3();\n\n\t\t// TODO: remove properties unused in plane and gizmo\n\n\t\tdefineProperty( 'worldPosition', worldPosition );\n\t\tdefineProperty( 'worldPositionStart', worldPositionStart );\n\t\tdefineProperty( 'worldQuaternion', worldQuaternion );\n\t\tdefineProperty( 'worldQuaternionStart', worldQuaternionStart );\n\t\tdefineProperty( 'cameraPosition', cameraPosition );\n\t\tdefineProperty( 'cameraQuaternion', cameraQuaternion );\n\t\tdefineProperty( 'pointStart', pointStart );\n\t\tdefineProperty( 'pointEnd', pointEnd );\n\t\tdefineProperty( 'rotationAxis', rotationAxis );\n\t\tdefineProperty( 'rotationAngle', rotationAngle );\n\t\tdefineProperty( 'eye', eye );\n\n\t\tthis._offset = new Vector3();\n\t\tthis._startNorm = new Vector3();\n\t\tthis._endNorm = new Vector3();\n\t\tthis._cameraScale = new Vector3();\n\n\t\tthis._parentPosition = new Vector3();\n\t\tthis._parentQuaternion = new Quaternion();\n\t\tthis._parentQuaternionInv = new Quaternion();\n\t\tthis._parentScale = new Vector3();\n\n\t\tthis._worldScaleStart = new Vector3();\n\t\tthis._worldQuaternionInv = new Quaternion();\n\t\tthis._worldScale = new Vector3();\n\n\t\tthis._positionStart = new Vector3();\n\t\tthis._quaternionStart = new Quaternion();\n\t\tthis._scaleStart = new Vector3();\n\n\t\tthis._getPointer = getPointer.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerHover = onPointerHover.bind( this );\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointermove', this._onPointerHover );\n\t\tthis.domElement.addEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n\t// updateMatrixWorld updates key transformation variables\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\tif ( this.object.parent === null ) {\n\n\t\t\t\tconsole.error( 'TransformControls: The attached 3D object must be a part of the scene graph.' );\n\n\t\t\t} else {\n\n\t\t\t\tthis.object.parent.matrixWorld.decompose( this._parentPosition, this._parentQuaternion, this._parentScale );\n\n\t\t\t}\n\n\t\t\tthis.object.matrixWorld.decompose( this.worldPosition, this.worldQuaternion, this._worldScale );\n\n\t\t\tthis._parentQuaternionInv.copy( this._parentQuaternion ).invert();\n\t\t\tthis._worldQuaternionInv.copy( this.worldQuaternion ).invert();\n\n\t\t}\n\n\t\tthis.camera.updateMatrixWorld();\n\t\tthis.camera.matrixWorld.decompose( this.cameraPosition, this.cameraQuaternion, this._cameraScale );\n\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\tthis.camera.getWorldDirection( this.eye ).negate();\n\n\t\t} else {\n\n\t\t\tthis.eye.copy( this.cameraPosition ).sub( this.worldPosition ).normalize();\n\n\t\t}\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tpointerHover( pointer ) {\n\n\t\tif ( this.object === undefined || this.dragging === true ) return;\n\n\t\tif ( pointer !== null ) _raycaster.setFromCamera( pointer, this.camera );\n\n\t\tconst intersect = intersectObjectWithRay( this._gizmo.picker[ this.mode ], _raycaster );\n\n\t\tif ( intersect ) {\n\n\t\t\tthis.axis = intersect.object.name;\n\n\t\t} else {\n\n\t\t\tthis.axis = null;\n\n\t\t}\n\n\t}\n\n\tpointerDown( pointer ) {\n\n\t\tif ( this.object === undefined || this.dragging === true || ( pointer != null && pointer.button !== 0 ) ) return;\n\n\t\tif ( this.axis !== null ) {\n\n\t\t\tif ( pointer !== null ) _raycaster.setFromCamera( pointer, this.camera );\n\n\t\t\tconst planeIntersect = intersectObjectWithRay( this._plane, _raycaster, true );\n\n\t\t\tif ( planeIntersect ) {\n\n\t\t\t\tthis.object.updateMatrixWorld();\n\t\t\t\tthis.object.parent.updateMatrixWorld();\n\n\t\t\t\tthis._positionStart.copy( this.object.position );\n\t\t\t\tthis._quaternionStart.copy( this.object.quaternion );\n\t\t\t\tthis._scaleStart.copy( this.object.scale );\n\n\t\t\t\tthis.object.matrixWorld.decompose( this.worldPositionStart, this.worldQuaternionStart, this._worldScaleStart );\n\n\t\t\t\tthis.pointStart.copy( planeIntersect.point ).sub( this.worldPositionStart );\n\n\t\t\t}\n\n\t\t\tthis.dragging = true;\n\t\t\t_mouseDownEvent.mode = this.mode;\n\t\t\tthis.dispatchEvent( _mouseDownEvent );\n\n\t\t}\n\n\t}\n\n\tpointerMove( pointer ) {\n\n\t\tconst axis = this.axis;\n\t\tconst mode = this.mode;\n\t\tconst object = this.object;\n\t\tlet space = this.space;\n\n\t\tif ( mode === 'scale' ) {\n\n\t\t\tspace = 'local';\n\n\t\t} else if ( axis === 'E' || axis === 'XYZE' || axis === 'XYZ' ) {\n\n\t\t\tspace = 'world';\n\n\t\t}\n\n\t\tif ( object === undefined || axis === null || this.dragging === false || ( pointer !== null && pointer.button !== - 1 ) ) return;\n\n\t\tif ( pointer !== null ) _raycaster.setFromCamera( pointer, this.camera );\n\n\t\tconst planeIntersect = intersectObjectWithRay( this._plane, _raycaster, true );\n\n\t\tif ( ! planeIntersect ) return;\n\n\t\tthis.pointEnd.copy( planeIntersect.point ).sub( this.worldPositionStart );\n\n\t\tif ( mode === 'translate' ) {\n\n\t\t\t// Apply translate\n\n\t\t\tthis._offset.copy( this.pointEnd ).sub( this.pointStart );\n\n\t\t\tif ( space === 'local' && axis !== 'XYZ' ) {\n\n\t\t\t\tthis._offset.applyQuaternion( this._worldQuaternionInv );\n\n\t\t\t}\n\n\t\t\tif ( axis.indexOf( 'X' ) === - 1 ) this._offset.x = 0;\n\t\t\tif ( axis.indexOf( 'Y' ) === - 1 ) this._offset.y = 0;\n\t\t\tif ( axis.indexOf( 'Z' ) === - 1 ) this._offset.z = 0;\n\n\t\t\tif ( space === 'local' && axis !== 'XYZ' ) {\n\n\t\t\t\tthis._offset.applyQuaternion( this._quaternionStart ).divide( this._parentScale );\n\n\t\t\t} else {\n\n\t\t\t\tthis._offset.applyQuaternion( this._parentQuaternionInv ).divide( this._parentScale );\n\n\t\t\t}\n\n\t\t\tobject.position.copy( this._offset ).add( this._positionStart );\n\n\t\t\t// Apply translation snap\n\n\t\t\tif ( this.translationSnap ) {\n\n\t\t\t\tif ( space === 'local' ) {\n\n\t\t\t\t\tobject.position.applyQuaternion( _tempQuaternion.copy( this._quaternionStart ).invert() );\n\n\t\t\t\t\tif ( axis.search( 'X' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.x = Math.round( object.position.x / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'Y' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.y = Math.round( object.position.y / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'Z' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.z = Math.round( object.position.z / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.position.applyQuaternion( this._quaternionStart );\n\n\t\t\t\t}\n\n\t\t\t\tif ( space === 'world' ) {\n\n\t\t\t\t\tif ( object.parent ) {\n\n\t\t\t\t\t\tobject.position.add( _tempVector.setFromMatrixPosition( object.parent.matrixWorld ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'X' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.x = Math.round( object.position.x / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'Y' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.y = Math.round( object.position.y / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'Z' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.z = Math.round( object.position.z / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( object.parent ) {\n\n\t\t\t\t\t\tobject.position.sub( _tempVector.setFromMatrixPosition( object.parent.matrixWorld ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( mode === 'scale' ) {\n\n\t\t\tif ( axis.search( 'XYZ' ) !== - 1 ) {\n\n\t\t\t\tlet d = this.pointEnd.length() / this.pointStart.length();\n\n\t\t\t\tif ( this.pointEnd.dot( this.pointStart ) < 0 ) d *= - 1;\n\n\t\t\t\t_tempVector2.set( d, d, d );\n\n\t\t\t} else {\n\n\t\t\t\t_tempVector.copy( this.pointStart );\n\t\t\t\t_tempVector2.copy( this.pointEnd );\n\n\t\t\t\t_tempVector.applyQuaternion( this._worldQuaternionInv );\n\t\t\t\t_tempVector2.applyQuaternion( this._worldQuaternionInv );\n\n\t\t\t\t_tempVector2.divide( _tempVector );\n\n\t\t\t\tif ( axis.search( 'X' ) === - 1 ) {\n\n\t\t\t\t\t_tempVector2.x = 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( axis.search( 'Y' ) === - 1 ) {\n\n\t\t\t\t\t_tempVector2.y = 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( axis.search( 'Z' ) === - 1 ) {\n\n\t\t\t\t\t_tempVector2.z = 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Apply scale\n\n\t\t\tobject.scale.copy( this._scaleStart ).multiply( _tempVector2 );\n\n\t\t\tif ( this.scaleSnap ) {\n\n\t\t\t\tif ( axis.search( 'X' ) !== - 1 ) {\n\n\t\t\t\t\tobject.scale.x = Math.round( object.scale.x / this.scaleSnap ) * this.scaleSnap || this.scaleSnap;\n\n\t\t\t\t}\n\n\t\t\t\tif ( axis.search( 'Y' ) !== - 1 ) {\n\n\t\t\t\t\tobject.scale.y = Math.round( object.scale.y / this.scaleSnap ) * this.scaleSnap || this.scaleSnap;\n\n\t\t\t\t}\n\n\t\t\t\tif ( axis.search( 'Z' ) !== - 1 ) {\n\n\t\t\t\t\tobject.scale.z = Math.round( object.scale.z / this.scaleSnap ) * this.scaleSnap || this.scaleSnap;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( mode === 'rotate' ) {\n\n\t\t\tthis._offset.copy( this.pointEnd ).sub( this.pointStart );\n\n\t\t\tconst ROTATION_SPEED = 20 / this.worldPosition.distanceTo( _tempVector.setFromMatrixPosition( this.camera.matrixWorld ) );\n\n\t\t\tlet _inPlaneRotation = false;\n\n\t\t\tif ( axis === 'XYZE' ) {\n\n\t\t\t\tthis.rotationAxis.copy( this._offset ).cross( this.eye ).normalize();\n\t\t\t\tthis.rotationAngle = this._offset.dot( _tempVector.copy( this.rotationAxis ).cross( this.eye ) ) * ROTATION_SPEED;\n\n\t\t\t} else if ( axis === 'X' || axis === 'Y' || axis === 'Z' ) {\n\n\t\t\t\tthis.rotationAxis.copy( _unit[ axis ] );\n\n\t\t\t\t_tempVector.copy( _unit[ axis ] );\n\n\t\t\t\tif ( space === 'local' ) {\n\n\t\t\t\t\t_tempVector.applyQuaternion( this.worldQuaternion );\n\n\t\t\t\t}\n\n\t\t\t\t_tempVector.cross( this.eye );\n\n\t\t\t\t// When _tempVector is 0 after cross with this.eye the vectors are parallel and should use in-plane rotation logic.\n\t\t\t\tif ( _tempVector.length() === 0 ) {\n\n\t\t\t\t\t_inPlaneRotation = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.rotationAngle = this._offset.dot( _tempVector.normalize() ) * ROTATION_SPEED;\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\tif ( axis === 'E' || _inPlaneRotation ) {\n\n\t\t\t\tthis.rotationAxis.copy( this.eye );\n\t\t\t\tthis.rotationAngle = this.pointEnd.angleTo( this.pointStart );\n\n\t\t\t\tthis._startNorm.copy( this.pointStart ).normalize();\n\t\t\t\tthis._endNorm.copy( this.pointEnd ).normalize();\n\n\t\t\t\tthis.rotationAngle *= ( this._endNorm.cross( this._startNorm ).dot( this.eye ) < 0 ? 1 : - 1 );\n\n\t\t\t}\n\n\t\t\t// Apply rotation snap\n\n\t\t\tif ( this.rotationSnap ) this.rotationAngle = Math.round( this.rotationAngle / this.rotationSnap ) * this.rotationSnap;\n\n\t\t\t// Apply rotate\n\t\t\tif ( space === 'local' && axis !== 'E' && axis !== 'XYZE' ) {\n\n\t\t\t\tobject.quaternion.copy( this._quaternionStart );\n\t\t\t\tobject.quaternion.multiply( _tempQuaternion.setFromAxisAngle( this.rotationAxis, this.rotationAngle ) ).normalize();\n\n\t\t\t} else {\n\n\t\t\t\tthis.rotationAxis.applyQuaternion( this._parentQuaternionInv );\n\t\t\t\tobject.quaternion.copy( _tempQuaternion.setFromAxisAngle( this.rotationAxis, this.rotationAngle ) );\n\t\t\t\tobject.quaternion.multiply( this._quaternionStart ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( _changeEvent );\n\t\tthis.dispatchEvent( _objectChangeEvent );\n\n\t}\n\n\tpointerUp( pointer ) {\n\n\t\tif ( pointer !== null && pointer.button !== 0 ) return;\n\n\t\tif ( this.dragging && ( this.axis !== null ) ) {\n\n\t\t\t_mouseUpEvent.mode = this.mode;\n\t\t\tthis.dispatchEvent( _mouseUpEvent );\n\n\t\t}\n\n\t\tthis.dragging = false;\n\t\tthis.axis = null;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerHover );\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\tthis.traverse( function ( child ) {\n\n\t\t\tif ( child.geometry ) child.geometry.dispose();\n\t\t\tif ( child.material ) child.material.dispose();\n\n\t\t} );\n\n\t}\n\n\t// Set current object\n\tattach( object ) {\n\n\t\tthis.object = object;\n\t\tthis.visible = true;\n\n\t\treturn this;\n\n\t}\n\n\t// Detach from object\n\tdetach() {\n\n\t\tthis.object = undefined;\n\t\tthis.visible = false;\n\t\tthis.axis = null;\n\n\t\treturn this;\n\n\t}\n\n\treset() {\n\n\t\tif ( ! this.enabled ) return;\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis.object.position.copy( this._positionStart );\n\t\t\tthis.object.quaternion.copy( this._quaternionStart );\n\t\t\tthis.object.scale.copy( this._scaleStart );\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\tthis.dispatchEvent( _objectChangeEvent );\n\n\t\t\tthis.pointStart.copy( this.pointEnd );\n\n\t\t}\n\n\t}\n\n\tgetRaycaster() {\n\n\t\treturn _raycaster;\n\n\t}\n\n\t// TODO: deprecate\n\n\tgetMode() {\n\n\t\treturn this.mode;\n\n\t}\n\n\tsetMode( mode ) {\n\n\t\tthis.mode = mode;\n\n\t}\n\n\tsetTranslationSnap( translationSnap ) {\n\n\t\tthis.translationSnap = translationSnap;\n\n\t}\n\n\tsetRotationSnap( rotationSnap ) {\n\n\t\tthis.rotationSnap = rotationSnap;\n\n\t}\n\n\tsetScaleSnap( scaleSnap ) {\n\n\t\tthis.scaleSnap = scaleSnap;\n\n\t}\n\n\tsetSize( size ) {\n\n\t\tthis.size = size;\n\n\t}\n\n\tsetSpace( space ) {\n\n\t\tthis.space = space;\n\n\t}\n\n}\n\n// mouse / touch event handlers\n\nfunction getPointer( event ) {\n\n\tif ( this.domElement.ownerDocument.pointerLockElement ) {\n\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tbutton: event.button\n\t\t};\n\n\t} else {\n\n\t\tconst rect = this.domElement.getBoundingClientRect();\n\n\t\treturn {\n\t\t\tx: ( event.clientX - rect.left ) / rect.width * 2 - 1,\n\t\t\ty: - ( event.clientY - rect.top ) / rect.height * 2 + 1,\n\t\t\tbutton: event.button\n\t\t};\n\n\t}\n\n}\n\nfunction onPointerHover( event ) {\n\n\tif ( ! this.enabled ) return;\n\n\tswitch ( event.pointerType ) {\n\n\t\tcase 'mouse':\n\t\tcase 'pen':\n\t\t\tthis.pointerHover( this._getPointer( event ) );\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( ! this.enabled ) return;\n\n\tif ( ! document.pointerLockElement ) {\n\n\t\tthis.domElement.setPointerCapture( event.pointerId );\n\n\t}\n\n\tthis.domElement.addEventListener( 'pointermove', this._onPointerMove );\n\n\tthis.pointerHover( this._getPointer( event ) );\n\tthis.pointerDown( this._getPointer( event ) );\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( ! this.enabled ) return;\n\n\tthis.pointerMove( this._getPointer( event ) );\n\n}\n\nfunction onPointerUp( event ) {\n\n\tif ( ! this.enabled ) return;\n\n\tthis.domElement.releasePointerCapture( event.pointerId );\n\n\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\n\tthis.pointerUp( this._getPointer( event ) );\n\n}\n\nfunction intersectObjectWithRay( object, raycaster, includeInvisible ) {\n\n\tconst allIntersections = raycaster.intersectObject( object, true );\n\n\tfor ( let i = 0; i < allIntersections.length; i ++ ) {\n\n\t\tif ( allIntersections[ i ].object.visible || includeInvisible ) {\n\n\t\t\treturn allIntersections[ i ];\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\n//\n\n// Reusable utility variables\n\nconst _tempEuler = new Euler();\nconst _alignVector = new Vector3( 0, 1, 0 );\nconst _zeroVector = new Vector3( 0, 0, 0 );\nconst _lookAtMatrix = new Matrix4();\nconst _tempQuaternion2 = new Quaternion();\nconst _identityQuaternion = new Quaternion();\nconst _dirVector = new Vector3();\nconst _tempMatrix = new Matrix4();\n\nconst _unitX = new Vector3( 1, 0, 0 );\nconst _unitY = new Vector3( 0, 1, 0 );\nconst _unitZ = new Vector3( 0, 0, 1 );\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\nconst _v3 = new Vector3();\n\nclass TransformControlsGizmo extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isTransformControlsGizmo = true;\n\n\t\tthis.type = 'TransformControlsGizmo';\n\n\t\t// shared materials\n\n\t\tconst gizmoMaterial = new MeshBasicMaterial( {\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tfog: false,\n\t\t\ttoneMapped: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tconst gizmoLineMaterial = new LineBasicMaterial( {\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tfog: false,\n\t\t\ttoneMapped: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\t// Make unique material for each axis/color\n\n\t\tconst matInvisible = gizmoMaterial.clone();\n\t\tmatInvisible.opacity = 0.15;\n\n\t\tconst matHelper = gizmoLineMaterial.clone();\n\t\tmatHelper.opacity = 0.5;\n\n\t\tconst matRed = gizmoMaterial.clone();\n\t\tmatRed.color.setHex( 0xff0000 );\n\n\t\tconst matGreen = gizmoMaterial.clone();\n\t\tmatGreen.color.setHex( 0x00ff00 );\n\n\t\tconst matBlue = gizmoMaterial.clone();\n\t\tmatBlue.color.setHex( 0x0000ff );\n\n\t\tconst matRedTransparent = gizmoMaterial.clone();\n\t\tmatRedTransparent.color.setHex( 0xff0000 );\n\t\tmatRedTransparent.opacity = 0.5;\n\n\t\tconst matGreenTransparent = gizmoMaterial.clone();\n\t\tmatGreenTransparent.color.setHex( 0x00ff00 );\n\t\tmatGreenTransparent.opacity = 0.5;\n\n\t\tconst matBlueTransparent = gizmoMaterial.clone();\n\t\tmatBlueTransparent.color.setHex( 0x0000ff );\n\t\tmatBlueTransparent.opacity = 0.5;\n\n\t\tconst matWhiteTransparent = gizmoMaterial.clone();\n\t\tmatWhiteTransparent.opacity = 0.25;\n\n\t\tconst matYellowTransparent = gizmoMaterial.clone();\n\t\tmatYellowTransparent.color.setHex( 0xffff00 );\n\t\tmatYellowTransparent.opacity = 0.25;\n\n\t\tconst matYellow = gizmoMaterial.clone();\n\t\tmatYellow.color.setHex( 0xffff00 );\n\n\t\tconst matGray = gizmoMaterial.clone();\n\t\tmatGray.color.setHex( 0x787878 );\n\n\t\t// reusable geometry\n\n\t\tconst arrowGeometry = new CylinderGeometry( 0, 0.04, 0.1, 12 );\n\t\tarrowGeometry.translate( 0, 0.05, 0 );\n\n\t\tconst scaleHandleGeometry = new BoxGeometry( 0.08, 0.08, 0.08 );\n\t\tscaleHandleGeometry.translate( 0, 0.04, 0 );\n\n\t\tconst lineGeometry = new BufferGeometry();\n\t\tlineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0,\t1, 0, 0 ], 3 ) );\n\n\t\tconst lineGeometry2 = new CylinderGeometry( 0.0075, 0.0075, 0.5, 3 );\n\t\tlineGeometry2.translate( 0, 0.25, 0 );\n\n\t\tfunction CircleGeometry( radius, arc ) {\n\n\t\t\tconst geometry = new TorusGeometry( radius, 0.0075, 3, 64, arc * Math.PI * 2 );\n\t\t\tgeometry.rotateY( Math.PI / 2 );\n\t\t\tgeometry.rotateX( Math.PI / 2 );\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\t// Special geometry for transform helper. If scaled with position vector it spans from [0,0,0] to position\n\n\t\tfunction TranslateHelperGeometry() {\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 1, 1, 1 ], 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\t// Gizmo definitions - custom hierarchy definitions for setupGizmo() function\n\n\t\tconst gizmoTranslate = {\n\t\t\tX: [\n\t\t\t\t[ new Mesh( arrowGeometry, matRed ), [ 0.5, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( arrowGeometry, matRed ), [ - 0.5, 0, 0 ], [ 0, 0, Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matRed ), [ 0, 0, 0 ], [ 0, 0, - Math.PI / 2 ]]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( arrowGeometry, matGreen ), [ 0, 0.5, 0 ]],\n\t\t\t\t[ new Mesh( arrowGeometry, matGreen ), [ 0, - 0.5, 0 ], [ Math.PI, 0, 0 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matGreen ) ]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( arrowGeometry, matBlue ), [ 0, 0, 0.5 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( arrowGeometry, matBlue ), [ 0, 0, - 0.5 ], [ - Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matBlue ), null, [ Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXYZ: [\n\t\t\t\t[ new Mesh( new OctahedronGeometry( 0.1, 0 ), matWhiteTransparent.clone() ), [ 0, 0, 0 ]]\n\t\t\t],\n\t\t\tXY: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matBlueTransparent.clone() ), [ 0.15, 0.15, 0 ]]\n\t\t\t],\n\t\t\tYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matRedTransparent.clone() ), [ 0, 0.15, 0.15 ], [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tXZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matGreenTransparent.clone() ), [ 0.15, 0, 0.15 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t]\n\t\t};\n\n\t\tconst pickerTranslate = {\n\t\t\tX: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0.3, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ - 0.3, 0, 0 ], [ 0, 0, Math.PI / 2 ]]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0.3, 0 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, - 0.3, 0 ], [ 0, 0, Math.PI ]]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0, 0.3 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0, - 0.3 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXYZ: [\n\t\t\t\t[ new Mesh( new OctahedronGeometry( 0.2, 0 ), matInvisible ) ]\n\t\t\t],\n\t\t\tXY: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0.15, 0.15, 0 ]]\n\t\t\t],\n\t\t\tYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0, 0.15, 0.15 ], [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tXZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0.15, 0, 0.15 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t]\n\t\t};\n\n\t\tconst helperTranslate = {\n\t\t\tSTART: [\n\t\t\t\t[ new Mesh( new OctahedronGeometry( 0.01, 2 ), matHelper ), null, null, null, 'helper' ]\n\t\t\t],\n\t\t\tEND: [\n\t\t\t\t[ new Mesh( new OctahedronGeometry( 0.01, 2 ), matHelper ), null, null, null, 'helper' ]\n\t\t\t],\n\t\t\tDELTA: [\n\t\t\t\t[ new Line( TranslateHelperGeometry(), matHelper ), null, null, null, 'helper' ]\n\t\t\t],\n\t\t\tX: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ - 1e3, 0, 0 ], null, [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ 0, - 1e3, 0 ], [ 0, 0, Math.PI / 2 ], [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ 0, 0, - 1e3 ], [ 0, - Math.PI / 2, 0 ], [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t]\n\t\t};\n\n\t\tconst gizmoRotate = {\n\t\t\tXYZE: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.5, 1 ), matGray ), null, [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tX: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.5, 0.5 ), matRed ) ]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.5, 0.5 ), matGreen ), null, [ 0, 0, - Math.PI / 2 ]]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.5, 0.5 ), matBlue ), null, [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tE: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.75, 1 ), matYellowTransparent ), null, [ 0, Math.PI / 2, 0 ]]\n\t\t\t]\n\t\t};\n\n\t\tconst helperRotate = {\n\t\t\tAXIS: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ - 1e3, 0, 0 ], null, [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t]\n\t\t};\n\n\t\tconst pickerRotate = {\n\t\t\tXYZE: [\n\t\t\t\t[ new Mesh( new SphereGeometry( 0.25, 10, 8 ), matInvisible ) ]\n\t\t\t],\n\t\t\tX: [\n\t\t\t\t[ new Mesh( new TorusGeometry( 0.5, 0.1, 4, 24 ), matInvisible ), [ 0, 0, 0 ], [ 0, - Math.PI / 2, - Math.PI / 2 ]],\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( new TorusGeometry( 0.5, 0.1, 4, 24 ), matInvisible ), [ 0, 0, 0 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( new TorusGeometry( 0.5, 0.1, 4, 24 ), matInvisible ), [ 0, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t],\n\t\t\tE: [\n\t\t\t\t[ new Mesh( new TorusGeometry( 0.75, 0.1, 2, 24 ), matInvisible ) ]\n\t\t\t]\n\t\t};\n\n\t\tconst gizmoScale = {\n\t\t\tX: [\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matRed ), [ 0.5, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matRed ), [ 0, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matRed ), [ - 0.5, 0, 0 ], [ 0, 0, Math.PI / 2 ]],\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matGreen ), [ 0, 0.5, 0 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matGreen ) ],\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matGreen ), [ 0, - 0.5, 0 ], [ 0, 0, Math.PI ]],\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matBlue ), [ 0, 0, 0.5 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matBlue ), [ 0, 0, 0 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matBlue ), [ 0, 0, - 0.5 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXY: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matBlueTransparent ), [ 0.15, 0.15, 0 ]]\n\t\t\t],\n\t\t\tYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matRedTransparent ), [ 0, 0.15, 0.15 ], [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tXZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matGreenTransparent ), [ 0.15, 0, 0.15 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.1, 0.1, 0.1 ), matWhiteTransparent.clone() ) ],\n\t\t\t]\n\t\t};\n\n\t\tconst pickerScale = {\n\t\t\tX: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0.3, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ - 0.3, 0, 0 ], [ 0, 0, Math.PI / 2 ]]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0.3, 0 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, - 0.3, 0 ], [ 0, 0, Math.PI ]]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0, 0.3 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0, - 0.3 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXY: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0.15, 0.15, 0 ]],\n\t\t\t],\n\t\t\tYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0, 0.15, 0.15 ], [ 0, Math.PI / 2, 0 ]],\n\t\t\t],\n\t\t\tXZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0.15, 0, 0.15 ], [ - Math.PI / 2, 0, 0 ]],\n\t\t\t],\n\t\t\tXYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.2 ), matInvisible ), [ 0, 0, 0 ]],\n\t\t\t]\n\t\t};\n\n\t\tconst helperScale = {\n\t\t\tX: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ - 1e3, 0, 0 ], null, [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ 0, - 1e3, 0 ], [ 0, 0, Math.PI / 2 ], [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ 0, 0, - 1e3 ], [ 0, - Math.PI / 2, 0 ], [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t]\n\t\t};\n\n\t\t// Creates an Object3D with gizmos described in custom hierarchy definition.\n\n\t\tfunction setupGizmo( gizmoMap ) {\n\n\t\t\tconst gizmo = new Object3D();\n\n\t\t\tfor ( const name in gizmoMap ) {\n\n\t\t\t\tfor ( let i = gizmoMap[ name ].length; i --; ) {\n\n\t\t\t\t\tconst object = gizmoMap[ name ][ i ][ 0 ].clone();\n\t\t\t\t\tconst position = gizmoMap[ name ][ i ][ 1 ];\n\t\t\t\t\tconst rotation = gizmoMap[ name ][ i ][ 2 ];\n\t\t\t\t\tconst scale = gizmoMap[ name ][ i ][ 3 ];\n\t\t\t\t\tconst tag = gizmoMap[ name ][ i ][ 4 ];\n\n\t\t\t\t\t// name and tag properties are essential for picking and updating logic.\n\t\t\t\t\tobject.name = name;\n\t\t\t\t\tobject.tag = tag;\n\n\t\t\t\t\tif ( position ) {\n\n\t\t\t\t\t\tobject.position.set( position[ 0 ], position[ 1 ], position[ 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( rotation ) {\n\n\t\t\t\t\t\tobject.rotation.set( rotation[ 0 ], rotation[ 1 ], rotation[ 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( scale ) {\n\n\t\t\t\t\t\tobject.scale.set( scale[ 0 ], scale[ 1 ], scale[ 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.updateMatrix();\n\n\t\t\t\t\tconst tempGeometry = object.geometry.clone();\n\t\t\t\t\ttempGeometry.applyMatrix4( object.matrix );\n\t\t\t\t\tobject.geometry = tempGeometry;\n\t\t\t\t\tobject.renderOrder = Infinity;\n\n\t\t\t\t\tobject.position.set( 0, 0, 0 );\n\t\t\t\t\tobject.rotation.set( 0, 0, 0 );\n\t\t\t\t\tobject.scale.set( 1, 1, 1 );\n\n\t\t\t\t\tgizmo.add( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn gizmo;\n\n\t\t}\n\n\t\t// Gizmo creation\n\n\t\tthis.gizmo = {};\n\t\tthis.picker = {};\n\t\tthis.helper = {};\n\n\t\tthis.add( this.gizmo[ 'translate' ] = setupGizmo( gizmoTranslate ) );\n\t\tthis.add( this.gizmo[ 'rotate' ] = setupGizmo( gizmoRotate ) );\n\t\tthis.add( this.gizmo[ 'scale' ] = setupGizmo( gizmoScale ) );\n\t\tthis.add( this.picker[ 'translate' ] = setupGizmo( pickerTranslate ) );\n\t\tthis.add( this.picker[ 'rotate' ] = setupGizmo( pickerRotate ) );\n\t\tthis.add( this.picker[ 'scale' ] = setupGizmo( pickerScale ) );\n\t\tthis.add( this.helper[ 'translate' ] = setupGizmo( helperTranslate ) );\n\t\tthis.add( this.helper[ 'rotate' ] = setupGizmo( helperRotate ) );\n\t\tthis.add( this.helper[ 'scale' ] = setupGizmo( helperScale ) );\n\n\t\t// Pickers should be hidden always\n\n\t\tthis.picker[ 'translate' ].visible = false;\n\t\tthis.picker[ 'rotate' ].visible = false;\n\t\tthis.picker[ 'scale' ].visible = false;\n\n\t}\n\n\t// updateMatrixWorld will update transformations and appearance of individual handles\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst space = ( this.mode === 'scale' ) ? 'local' : this.space; // scale always oriented to local rotation\n\n\t\tconst quaternion = ( space === 'local' ) ? this.worldQuaternion : _identityQuaternion;\n\n\t\t// Show only gizmos for current transform mode\n\n\t\tthis.gizmo[ 'translate' ].visible = this.mode === 'translate';\n\t\tthis.gizmo[ 'rotate' ].visible = this.mode === 'rotate';\n\t\tthis.gizmo[ 'scale' ].visible = this.mode === 'scale';\n\n\t\tthis.helper[ 'translate' ].visible = this.mode === 'translate';\n\t\tthis.helper[ 'rotate' ].visible = this.mode === 'rotate';\n\t\tthis.helper[ 'scale' ].visible = this.mode === 'scale';\n\n\n\t\tlet handles = [];\n\t\thandles = handles.concat( this.picker[ this.mode ].children );\n\t\thandles = handles.concat( this.gizmo[ this.mode ].children );\n\t\thandles = handles.concat( this.helper[ this.mode ].children );\n\n\t\tfor ( let i = 0; i < handles.length; i ++ ) {\n\n\t\t\tconst handle = handles[ i ];\n\n\t\t\t// hide aligned to camera\n\n\t\t\thandle.visible = true;\n\t\t\thandle.rotation.set( 0, 0, 0 );\n\t\t\thandle.position.copy( this.worldPosition );\n\n\t\t\tlet factor;\n\n\t\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t\tfactor = ( this.camera.top - this.camera.bottom ) / this.camera.zoom;\n\n\t\t\t} else {\n\n\t\t\t\tfactor = this.worldPosition.distanceTo( this.cameraPosition ) * Math.min( 1.9 * Math.tan( Math.PI * this.camera.fov / 360 ) / this.camera.zoom, 7 );\n\n\t\t\t}\n\n\t\t\thandle.scale.set( 1, 1, 1 ).multiplyScalar( factor * this.size / 4 );\n\n\t\t\t// TODO: simplify helpers and consider decoupling from gizmo\n\n\t\t\tif ( handle.tag === 'helper' ) {\n\n\t\t\t\thandle.visible = false;\n\n\t\t\t\tif ( handle.name === 'AXIS' ) {\n\n\t\t\t\t\thandle.visible = !! this.axis;\n\n\t\t\t\t\tif ( this.axis === 'X' ) {\n\n\t\t\t\t\t\t_tempQuaternion.setFromEuler( _tempEuler.set( 0, 0, 0 ) );\n\t\t\t\t\t\thandle.quaternion.copy( quaternion ).multiply( _tempQuaternion );\n\n\t\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > 0.9 ) {\n\n\t\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis === 'Y' ) {\n\n\t\t\t\t\t\t_tempQuaternion.setFromEuler( _tempEuler.set( 0, 0, Math.PI / 2 ) );\n\t\t\t\t\t\thandle.quaternion.copy( quaternion ).multiply( _tempQuaternion );\n\n\t\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > 0.9 ) {\n\n\t\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis === 'Z' ) {\n\n\t\t\t\t\t\t_tempQuaternion.setFromEuler( _tempEuler.set( 0, Math.PI / 2, 0 ) );\n\t\t\t\t\t\thandle.quaternion.copy( quaternion ).multiply( _tempQuaternion );\n\n\t\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > 0.9 ) {\n\n\t\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis === 'XYZE' ) {\n\n\t\t\t\t\t\t_tempQuaternion.setFromEuler( _tempEuler.set( 0, Math.PI / 2, 0 ) );\n\t\t\t\t\t\t_alignVector.copy( this.rotationAxis );\n\t\t\t\t\t\thandle.quaternion.setFromRotationMatrix( _lookAtMatrix.lookAt( _zeroVector, _alignVector, _unitY ) );\n\t\t\t\t\t\thandle.quaternion.multiply( _tempQuaternion );\n\t\t\t\t\t\thandle.visible = this.dragging;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis === 'E' ) {\n\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else if ( handle.name === 'START' ) {\n\n\t\t\t\t\thandle.position.copy( this.worldPositionStart );\n\t\t\t\t\thandle.visible = this.dragging;\n\n\t\t\t\t} else if ( handle.name === 'END' ) {\n\n\t\t\t\t\thandle.position.copy( this.worldPosition );\n\t\t\t\t\thandle.visible = this.dragging;\n\n\t\t\t\t} else if ( handle.name === 'DELTA' ) {\n\n\t\t\t\t\thandle.position.copy( this.worldPositionStart );\n\t\t\t\t\thandle.quaternion.copy( this.worldQuaternionStart );\n\t\t\t\t\t_tempVector.set( 1e-10, 1e-10, 1e-10 ).add( this.worldPositionStart ).sub( this.worldPosition ).multiplyScalar( - 1 );\n\t\t\t\t\t_tempVector.applyQuaternion( this.worldQuaternionStart.clone().invert() );\n\t\t\t\t\thandle.scale.copy( _tempVector );\n\t\t\t\t\thandle.visible = this.dragging;\n\n\t\t\t\t} else {\n\n\t\t\t\t\thandle.quaternion.copy( quaternion );\n\n\t\t\t\t\tif ( this.dragging ) {\n\n\t\t\t\t\t\thandle.position.copy( this.worldPositionStart );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\thandle.position.copy( this.worldPosition );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis ) {\n\n\t\t\t\t\t\thandle.visible = this.axis.search( handle.name ) !== - 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// If updating helper, skip rest of the loop\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// Align handles to current local or world rotation\n\n\t\t\thandle.quaternion.copy( quaternion );\n\n\t\t\tif ( this.mode === 'translate' || this.mode === 'scale' ) {\n\n\t\t\t\t// Hide translate and scale axis facing the camera\n\n\t\t\t\tconst AXIS_HIDE_THRESHOLD = 0.99;\n\t\t\t\tconst PLANE_HIDE_THRESHOLD = 0.2;\n\n\t\t\t\tif ( handle.name === 'X' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'Y' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'Z' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'XY' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'YZ' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'XZ' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( this.mode === 'rotate' ) {\n\n\t\t\t\t// Align handles to current local or world rotation\n\n\t\t\t\t_tempQuaternion2.copy( quaternion );\n\t\t\t\t_alignVector.copy( this.eye ).applyQuaternion( _tempQuaternion.copy( quaternion ).invert() );\n\n\t\t\t\tif ( handle.name.search( 'E' ) !== - 1 ) {\n\n\t\t\t\t\thandle.quaternion.setFromRotationMatrix( _lookAtMatrix.lookAt( this.eye, _zeroVector, _unitY ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'X' ) {\n\n\t\t\t\t\t_tempQuaternion.setFromAxisAngle( _unitX, Math.atan2( - _alignVector.y, _alignVector.z ) );\n\t\t\t\t\t_tempQuaternion.multiplyQuaternions( _tempQuaternion2, _tempQuaternion );\n\t\t\t\t\thandle.quaternion.copy( _tempQuaternion );\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'Y' ) {\n\n\t\t\t\t\t_tempQuaternion.setFromAxisAngle( _unitY, Math.atan2( _alignVector.x, _alignVector.z ) );\n\t\t\t\t\t_tempQuaternion.multiplyQuaternions( _tempQuaternion2, _tempQuaternion );\n\t\t\t\t\thandle.quaternion.copy( _tempQuaternion );\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'Z' ) {\n\n\t\t\t\t\t_tempQuaternion.setFromAxisAngle( _unitZ, Math.atan2( _alignVector.y, _alignVector.x ) );\n\t\t\t\t\t_tempQuaternion.multiplyQuaternions( _tempQuaternion2, _tempQuaternion );\n\t\t\t\t\thandle.quaternion.copy( _tempQuaternion );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Hide disabled axes\n\t\t\thandle.visible = handle.visible && ( handle.name.indexOf( 'X' ) === - 1 || this.showX );\n\t\t\thandle.visible = handle.visible && ( handle.name.indexOf( 'Y' ) === - 1 || this.showY );\n\t\t\thandle.visible = handle.visible && ( handle.name.indexOf( 'Z' ) === - 1 || this.showZ );\n\t\t\thandle.visible = handle.visible && ( handle.name.indexOf( 'E' ) === - 1 || ( this.showX && this.showY && this.showZ ) );\n\n\t\t\t// highlight selected axis\n\n\t\t\thandle.material._color = handle.material._color || handle.material.color.clone();\n\t\t\thandle.material._opacity = handle.material._opacity || handle.material.opacity;\n\n\t\t\thandle.material.color.copy( handle.material._color );\n\t\t\thandle.material.opacity = handle.material._opacity;\n\n\t\t\tif ( this.enabled && this.axis ) {\n\n\t\t\t\tif ( handle.name === this.axis ) {\n\n\t\t\t\t\thandle.material.color.setHex( 0xffff00 );\n\t\t\t\t\thandle.material.opacity = 1.0;\n\n\t\t\t\t} else if ( this.axis.split( '' ).some( function ( a ) {\n\n\t\t\t\t\treturn handle.name === a;\n\n\t\t\t\t} ) ) {\n\n\t\t\t\t\thandle.material.color.setHex( 0xffff00 );\n\t\t\t\t\thandle.material.opacity = 1.0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n//\n\nclass TransformControlsPlane extends Mesh {\n\n\tconstructor() {\n\n\t\tsuper(\n\t\t\tnew PlaneGeometry( 100000, 100000, 2, 2 ),\n\t\t\tnew MeshBasicMaterial( { visible: false, wireframe: true, side: DoubleSide, transparent: true, opacity: 0.1, toneMapped: false } )\n\t\t);\n\n\t\tthis.isTransformControlsPlane = true;\n\n\t\tthis.type = 'TransformControlsPlane';\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tlet space = this.space;\n\n\t\tthis.position.copy( this.worldPosition );\n\n\t\tif ( this.mode === 'scale' ) space = 'local'; // scale always oriented to local rotation\n\n\t\t_v1.copy( _unitX ).applyQuaternion( space === 'local' ? this.worldQuaternion : _identityQuaternion );\n\t\t_v2.copy( _unitY ).applyQuaternion( space === 'local' ? this.worldQuaternion : _identityQuaternion );\n\t\t_v3.copy( _unitZ ).applyQuaternion( space === 'local' ? this.worldQuaternion : _identityQuaternion );\n\n\t\t// Align the plane for current transform mode, axis and space.\n\n\t\t_alignVector.copy( _v2 );\n\n\t\tswitch ( this.mode ) {\n\n\t\t\tcase 'translate':\n\t\t\tcase 'scale':\n\t\t\t\tswitch ( this.axis ) {\n\n\t\t\t\t\tcase 'X':\n\t\t\t\t\t\t_alignVector.copy( this.eye ).cross( _v1 );\n\t\t\t\t\t\t_dirVector.copy( _v1 ).cross( _alignVector );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Y':\n\t\t\t\t\t\t_alignVector.copy( this.eye ).cross( _v2 );\n\t\t\t\t\t\t_dirVector.copy( _v2 ).cross( _alignVector );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Z':\n\t\t\t\t\t\t_alignVector.copy( this.eye ).cross( _v3 );\n\t\t\t\t\t\t_dirVector.copy( _v3 ).cross( _alignVector );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'XY':\n\t\t\t\t\t\t_dirVector.copy( _v3 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'YZ':\n\t\t\t\t\t\t_dirVector.copy( _v1 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'XZ':\n\t\t\t\t\t\t_alignVector.copy( _v3 );\n\t\t\t\t\t\t_dirVector.copy( _v2 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'XYZ':\n\t\t\t\t\tcase 'E':\n\t\t\t\t\t\t_dirVector.set( 0, 0, 0 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase 'rotate':\n\t\t\tdefault:\n\t\t\t\t// special case for rotate\n\t\t\t\t_dirVector.set( 0, 0, 0 );\n\n\t\t}\n\n\t\tif ( _dirVector.length() === 0 ) {\n\n\t\t\t// If in rotate mode, make the plane parallel to camera\n\t\t\tthis.quaternion.copy( this.cameraQuaternion );\n\n\t\t} else {\n\n\t\t\t_tempMatrix.lookAt( _tempVector.set( 0, 0, 0 ), _dirVector, _alignVector );\n\n\t\t\tthis.quaternion.setFromRotationMatrix( _tempMatrix );\n\n\t\t}\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nexport { TransformControls, TransformControlsGizmo, TransformControlsPlane };\n", "import { Vector3, Matrix4 } from 'three';\n\nconst inverseProjectionMatrix = new Matrix4();\n\nclass CSMFrustum {\n\n\tconstructor( data ) {\n\n\t\tdata = data || {};\n\n\t\tthis.vertices = {\n\t\t\tnear: [\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3()\n\t\t\t],\n\t\t\tfar: [\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3()\n\t\t\t]\n\t\t};\n\n\t\tif ( data.projectionMatrix !== undefined ) {\n\n\t\t\tthis.setFromProjectionMatrix( data.projectionMatrix, data.maxFar || 10000 );\n\n\t\t}\n\n\t}\n\n\tsetFromProjectionMatrix( projectionMatrix, maxFar ) {\n\n\t\tconst isOrthographic = projectionMatrix.elements[ 2 * 4 + 3 ] === 0;\n\n\t\tinverseProjectionMatrix.copy( projectionMatrix ).invert();\n\n\t\t// 3 --- 0 vertices.near/far order\n\t\t// | |\n\t\t// 2 --- 1\n\t\t// clip space spans from [-1, 1]\n\n\t\tthis.vertices.near[ 0 ].set( 1, 1, - 1 );\n\t\tthis.vertices.near[ 1 ].set( 1, - 1, - 1 );\n\t\tthis.vertices.near[ 2 ].set( - 1, - 1, - 1 );\n\t\tthis.vertices.near[ 3 ].set( - 1, 1, - 1 );\n\t\tthis.vertices.near.forEach( function ( v ) {\n\n\t\t\tv.applyMatrix4( inverseProjectionMatrix );\n\n\t\t} );\n\n\t\tthis.vertices.far[ 0 ].set( 1, 1, 1 );\n\t\tthis.vertices.far[ 1 ].set( 1, - 1, 1 );\n\t\tthis.vertices.far[ 2 ].set( - 1, - 1, 1 );\n\t\tthis.vertices.far[ 3 ].set( - 1, 1, 1 );\n\t\tthis.vertices.far.forEach( function ( v ) {\n\n\t\t\tv.applyMatrix4( inverseProjectionMatrix );\n\n\t\t\tconst absZ = Math.abs( v.z );\n\t\t\tif ( isOrthographic ) {\n\n\t\t\t\tv.z *= Math.min( maxFar / absZ, 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.multiplyScalar( Math.min( maxFar / absZ, 1.0 ) );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this.vertices;\n\n\t}\n\n\tsplit( breaks, target ) {\n\n\t\twhile ( breaks.length > target.length ) {\n\n\t\t\ttarget.push( new CSMFrustum() );\n\n\t\t}\n\n\t\ttarget.length = breaks.length;\n\n\t\tfor ( let i = 0; i < breaks.length; i ++ ) {\n\n\t\t\tconst cascade = target[ i ];\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tcascade.vertices.near[ j ].copy( this.vertices.near[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tcascade.vertices.near[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i - 1 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( i === breaks.length - 1 ) {\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tcascade.vertices.far[ j ].copy( this.vertices.far[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tcascade.vertices.far[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoSpace( cameraMatrix, target ) {\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\ttarget.vertices.near[ i ]\n\t\t\t\t.copy( this.vertices.near[ i ] )\n\t\t\t\t.applyMatrix4( cameraMatrix );\n\n\t\t\ttarget.vertices.far[ i ]\n\t\t\t\t.copy( this.vertices.far[ i ] )\n\t\t\t\t.applyMatrix4( cameraMatrix );\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSMFrustum };\n", "import { ShaderChunk } from 'three';\n\nconst CSMShader = {\n\tlights_fragment_begin: /* glsl */`\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n\n#ifdef USE_CLEARCOAT\n\n\tgeometryClearcoatNormal = clearcoatNormal;\n\n#endif\n\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\t// Iridescence F0 approximation\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n \tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\n \t\t// spot lights are ordered [shadows with maps, shadows without maps, maps without shadows, none]\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\tfloat linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n\t\tvec2 cascade;\n\t\tfloat cascadeCenter;\n\t\tfloat closestEdge;\n\t\tfloat margin;\n\t\tfloat csmx;\n\t\tfloat csmy;\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\t\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\n\t\t\t#if ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\t\t\t// NOTE: Depth gets larger away from the camera.\n\t\t\t\t// cascade.x is closer, cascade.y is further\n\t\t\t\tcascade = CSM_cascades[ i ];\n\t\t\t\tcascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n\t\t\t\tclosestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n\t\t\t\tmargin = 0.25 * pow( closestEdge, 2.0 );\n\t\t\t\tcsmx = cascade.x - margin / 2.0;\n\t\t\t\tcsmy = cascade.y + margin / 2.0;\n\t\t\t\tif( linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) {\n\n\t\t\t\t\tfloat dist = min( linearDepth - csmx, csmy - linearDepth );\n\t\t\t\t\tfloat ratio = clamp( dist / margin, 0.0, 1.0 );\n\n\t\t\t\t\tvec3 prevColor = directLight.color;\n\t\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\t\tbool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n\t\t\t\t\tdirectLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n\t\t\t\t\tReflectedLight prevLight = reflectedLight;\n\t\t\t\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t\t\t\t\tbool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n\t\t\t\t\tfloat blendRatio = shouldBlend ? ratio : 1.0;\n\n\t\t\t\t\treflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n\t\t\t\t\treflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n\t\t\t\t\treflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n\t\t\t\t\treflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n\t\t\t\t}\n\t\t\t#endif\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#elif defined (USE_SHADOWMAP)\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\t\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\n\t\t\t#if ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t\t\t#endif\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#elif ( NUM_DIR_LIGHT_SHADOWS > 0 )\n\t\t// note: no loop here - all CSM lights are in fact one light only\n\t\tgetDirectionalLightInfo( directionalLights[0], directLight );\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t#endif\n\n\t#if ( NUM_DIR_LIGHTS > NUM_DIR_LIGHT_SHADOWS)\n\t\t// compute the lights not casting shadows (if any)\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = NUM_DIR_LIGHT_SHADOWS; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\n\t\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\n\t\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\t#if defined( USE_LIGHT_PROBES )\n\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\n\t#endif\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n`,\n\tlights_pars_begin: /* glsl */`\n#if defined( USE_CSM ) && defined( CSM_CASCADES )\nuniform vec2 CSM_cascades[CSM_CASCADES];\nuniform float cameraNear;\nuniform float shadowFar;\n#endif\n\t` + ShaderChunk.lights_pars_begin\n};\n\nexport { CSMShader };\n", "import {\n\tVector2,\n\tVector3,\n\tDirectionalLight,\n\tMathUtils,\n\tShaderChunk,\n\tMatrix4,\n\tBox3\n} from 'three';\nimport { CSMFrustum } from './CSMFrustum.js';\nimport { CSMShader } from './CSMShader.js';\n\nconst _cameraToLightMatrix = new Matrix4();\nconst _lightSpaceFrustum = new CSMFrustum();\nconst _center = new Vector3();\nconst _bbox = new Box3();\nconst _uniformArray = [];\nconst _logArray = [];\nconst _lightOrientationMatrix = new Matrix4();\nconst _lightOrientationMatrixInverse = new Matrix4();\nconst _up = new Vector3( 0, 1, 0 );\n\nexport class CSM {\n\n\tconstructor( data ) {\n\n\t\tthis.camera = data.camera;\n\t\tthis.parent = data.parent;\n\t\tthis.cascades = data.cascades || 3;\n\t\tthis.maxFar = data.maxFar || 100000;\n\t\tthis.mode = data.mode || 'practical';\n\t\tthis.shadowMapSize = data.shadowMapSize || 2048;\n\t\tthis.shadowBias = data.shadowBias || 0.000001;\n\t\tthis.lightDirection = data.lightDirection || new Vector3( 1, - 1, 1 ).normalize();\n\t\tthis.lightIntensity = data.lightIntensity || 3;\n\t\tthis.lightNear = data.lightNear || 1;\n\t\tthis.lightFar = data.lightFar || 2000;\n\t\tthis.lightMargin = data.lightMargin || 200;\n\t\tthis.customSplitsCallback = data.customSplitsCallback;\n\t\tthis.fade = false;\n\t\tthis.mainFrustum = new CSMFrustum();\n\t\tthis.frustums = [];\n\t\tthis.breaks = [];\n\n\t\tthis.lights = [];\n\t\tthis.shaders = new Map();\n\n\t\tthis.createLights();\n\t\tthis.updateFrustums();\n\t\tthis.injectInclude();\n\n\t}\n\n\tcreateLights() {\n\n\t\tfor ( let i = 0; i < this.cascades; i ++ ) {\n\n\t\t\tconst light = new DirectionalLight( 0xffffff, this.lightIntensity );\n\t\t\tlight.castShadow = true;\n\t\t\tlight.shadow.mapSize.width = this.shadowMapSize;\n\t\t\tlight.shadow.mapSize.height = this.shadowMapSize;\n\n\t\t\tlight.shadow.camera.near = this.lightNear;\n\t\t\tlight.shadow.camera.far = this.lightFar;\n\t\t\tlight.shadow.bias = this.shadowBias;\n\n\t\t\tthis.parent.add( light );\n\t\t\tthis.parent.add( light.target );\n\t\t\tthis.lights.push( light );\n\n\t\t}\n\n\t}\n\n\tinitCascades() {\n\n\t\tconst camera = this.camera;\n\t\tcamera.updateProjectionMatrix();\n\t\tthis.mainFrustum.setFromProjectionMatrix( camera.projectionMatrix, this.maxFar );\n\t\tthis.mainFrustum.split( this.breaks, this.frustums );\n\n\t}\n\n\tupdateShadowBounds() {\n\n\t\tconst frustums = this.frustums;\n\t\tfor ( let i = 0; i < frustums.length; i ++ ) {\n\n\t\t\tconst light = this.lights[ i ];\n\t\t\tconst shadowCam = light.shadow.camera;\n\t\t\tconst frustum = this.frustums[ i ];\n\n\t\t\t// Get the two points that represent that furthest points on the frustum assuming\n\t\t\t// that's either the diagonal across the far plane or the diagonal across the whole\n\t\t\t// frustum itself.\n\t\t\tconst nearVerts = frustum.vertices.near;\n\t\t\tconst farVerts = frustum.vertices.far;\n\t\t\tconst point1 = farVerts[ 0 ];\n\t\t\tlet point2;\n\t\t\tif ( point1.distanceTo( farVerts[ 2 ] ) > point1.distanceTo( nearVerts[ 2 ] ) ) {\n\n\t\t\t\tpoint2 = farVerts[ 2 ];\n\n\t\t\t} else {\n\n\t\t\t\tpoint2 = nearVerts[ 2 ];\n\n\t\t\t}\n\n\t\t\tlet squaredBBWidth = point1.distanceTo( point2 );\n\t\t\tif ( this.fade ) {\n\n\t\t\t\t// expand the shadow extents by the fade margin if fade is enabled.\n\t\t\t\tconst camera = this.camera;\n\t\t\t\tconst far = Math.max( camera.far, this.maxFar );\n\t\t\t\tconst linearDepth = frustum.vertices.far[ 0 ].z / ( far - camera.near );\n\t\t\t\tconst margin = 0.25 * Math.pow( linearDepth, 2.0 ) * ( far - camera.near );\n\n\t\t\t\tsquaredBBWidth += margin;\n\n\t\t\t}\n\n\t\t\tshadowCam.left = - squaredBBWidth / 2;\n\t\t\tshadowCam.right = squaredBBWidth / 2;\n\t\t\tshadowCam.top = squaredBBWidth / 2;\n\t\t\tshadowCam.bottom = - squaredBBWidth / 2;\n\t\t\tshadowCam.updateProjectionMatrix();\n\n\t\t}\n\n\t}\n\n\tgetBreaks() {\n\n\t\tconst camera = this.camera;\n\t\tconst far = Math.min( camera.far, this.maxFar );\n\t\tthis.breaks.length = 0;\n\n\t\tswitch ( this.mode ) {\n\n\t\t\tcase 'uniform':\n\t\t\t\tuniformSplit( this.cascades, camera.near, far, this.breaks );\n\t\t\t\tbreak;\n\t\t\tcase 'logarithmic':\n\t\t\t\tlogarithmicSplit( this.cascades, camera.near, far, this.breaks );\n\t\t\t\tbreak;\n\t\t\tcase 'practical':\n\t\t\t\tpracticalSplit( this.cascades, camera.near, far, 0.5, this.breaks );\n\t\t\t\tbreak;\n\t\t\tcase 'custom':\n\t\t\t\tif ( this.customSplitsCallback === undefined ) console.error( 'CSM: Custom split scheme callback not defined.' );\n\t\t\t\tthis.customSplitsCallback( this.cascades, camera.near, far, this.breaks );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tfunction uniformSplit( amount, near, far, target ) {\n\n\t\t\tfor ( let i = 1; i < amount; i ++ ) {\n\n\t\t\t\ttarget.push( ( near + ( far - near ) * i / amount ) / far );\n\n\t\t\t}\n\n\t\t\ttarget.push( 1 );\n\n\t\t}\n\n\t\tfunction logarithmicSplit( amount, near, far, target ) {\n\n\t\t\tfor ( let i = 1; i < amount; i ++ ) {\n\n\t\t\t\ttarget.push( ( near * ( far / near ) ** ( i / amount ) ) / far );\n\n\t\t\t}\n\n\t\t\ttarget.push( 1 );\n\n\t\t}\n\n\t\tfunction practicalSplit( amount, near, far, lambda, target ) {\n\n\t\t\t_uniformArray.length = 0;\n\t\t\t_logArray.length = 0;\n\t\t\tlogarithmicSplit( amount, near, far, _logArray );\n\t\t\tuniformSplit( amount, near, far, _uniformArray );\n\n\t\t\tfor ( let i = 1; i < amount; i ++ ) {\n\n\t\t\t\ttarget.push( MathUtils.lerp( _uniformArray[ i - 1 ], _logArray[ i - 1 ], lambda ) );\n\n\t\t\t}\n\n\t\t\ttarget.push( 1 );\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst camera = this.camera;\n\t\tconst frustums = this.frustums;\n\n\t\t// for each frustum we need to find its min-max box aligned with the light orientation\n\t\t// the position in _lightOrientationMatrix does not matter, as we transform there and back\n\t\t_lightOrientationMatrix.lookAt( new Vector3(), this.lightDirection, _up );\n\t\t_lightOrientationMatrixInverse.copy( _lightOrientationMatrix ).invert();\n\n\t\tfor ( let i = 0; i < frustums.length; i ++ ) {\n\n\t\t\tconst light = this.lights[ i ];\n\t\t\tconst shadowCam = light.shadow.camera;\n\t\t\tconst texelWidth = ( shadowCam.right - shadowCam.left ) / this.shadowMapSize;\n\t\t\tconst texelHeight = ( shadowCam.top - shadowCam.bottom ) / this.shadowMapSize;\n\t\t\t_cameraToLightMatrix.multiplyMatrices( _lightOrientationMatrixInverse, camera.matrixWorld );\n\t\t\tfrustums[ i ].toSpace( _cameraToLightMatrix, _lightSpaceFrustum );\n\n\t\t\tconst nearVerts = _lightSpaceFrustum.vertices.near;\n\t\t\tconst farVerts = _lightSpaceFrustum.vertices.far;\n\t\t\t_bbox.makeEmpty();\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t_bbox.expandByPoint( nearVerts[ j ] );\n\t\t\t\t_bbox.expandByPoint( farVerts[ j ] );\n\n\t\t\t}\n\n\t\t\t_bbox.getCenter( _center );\n\t\t\t_center.z = _bbox.max.z + this.lightMargin;\n\t\t\t_center.x = Math.floor( _center.x / texelWidth ) * texelWidth;\n\t\t\t_center.y = Math.floor( _center.y / texelHeight ) * texelHeight;\n\t\t\t_center.applyMatrix4( _lightOrientationMatrix );\n\n\t\t\tlight.position.copy( _center );\n\t\t\tlight.target.position.copy( _center );\n\n\t\t\tlight.target.position.x += this.lightDirection.x;\n\t\t\tlight.target.position.y += this.lightDirection.y;\n\t\t\tlight.target.position.z += this.lightDirection.z;\n\n\t\t}\n\n\t}\n\n\tinjectInclude() {\n\n\t\tShaderChunk.lights_fragment_begin = CSMShader.lights_fragment_begin;\n\t\tShaderChunk.lights_pars_begin = CSMShader.lights_pars_begin;\n\n\t}\n\n\tsetupMaterial( material ) {\n\n\t\tmaterial.defines = material.defines || {};\n\t\tmaterial.defines.USE_CSM = 1;\n\t\tmaterial.defines.CSM_CASCADES = this.cascades;\n\n\t\tif ( this.fade ) {\n\n\t\t\tmaterial.defines.CSM_FADE = '';\n\n\t\t}\n\n\t\tconst breaksVec2 = [];\n\t\tconst scope = this;\n\t\tconst shaders = this.shaders;\n\n\t\tmaterial.onBeforeCompile = function ( shader ) {\n\n\t\t\tconst far = Math.min( scope.camera.far, scope.maxFar );\n\t\t\tscope.getExtendedBreaks( breaksVec2 );\n\n\t\t\tshader.uniforms.CSM_cascades = { value: breaksVec2 };\n\t\t\tshader.uniforms.cameraNear = { value: scope.camera.near };\n\t\t\tshader.uniforms.shadowFar = { value: far };\n\n\t\t\tshaders.set( material, shader );\n\n\t\t};\n\n\t\tshaders.set( material, null );\n\n\t}\n\n\tupdateUniforms() {\n\n\t\tconst far = Math.min( this.camera.far, this.maxFar );\n\t\tconst shaders = this.shaders;\n\n\t\tshaders.forEach( function ( shader, material ) {\n\n\t\t\tif ( shader !== null ) {\n\n\t\t\t\tconst uniforms = shader.uniforms;\n\t\t\t\tthis.getExtendedBreaks( uniforms.CSM_cascades.value );\n\t\t\t\tuniforms.cameraNear.value = this.camera.near;\n\t\t\t\tuniforms.shadowFar.value = far;\n\n\t\t\t}\n\n\t\t\tif ( ! this.fade && 'CSM_FADE' in material.defines ) {\n\n\t\t\t\tdelete material.defines.CSM_FADE;\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( this.fade && ! ( 'CSM_FADE' in material.defines ) ) {\n\n\t\t\t\tmaterial.defines.CSM_FADE = '';\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}, this );\n\n\t}\n\n\tgetExtendedBreaks( target ) {\n\n\t\twhile ( target.length < this.breaks.length ) {\n\n\t\t\ttarget.push( new Vector2() );\n\n\t\t}\n\n\t\ttarget.length = this.breaks.length;\n\n\t\tfor ( let i = 0; i < this.cascades; i ++ ) {\n\n\t\t\tconst amount = this.breaks[ i ];\n\t\t\tconst prev = this.breaks[ i - 1 ] || 0;\n\t\t\ttarget[ i ].x = prev;\n\t\t\ttarget[ i ].y = amount;\n\n\t\t}\n\n\t}\n\n\tupdateFrustums() {\n\n\t\tthis.getBreaks();\n\t\tthis.initCascades();\n\t\tthis.updateShadowBounds();\n\t\tthis.updateUniforms();\n\n\t}\n\n\tremove() {\n\n\t\tfor ( let i = 0; i < this.lights.length; i ++ ) {\n\n\t\t\tthis.parent.remove( this.lights[ i ].target );\n\t\t\tthis.parent.remove( this.lights[ i ] );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tconst shaders = this.shaders;\n\t\tshaders.forEach( function ( shader, material ) {\n\n\t\t\tdelete material.onBeforeCompile;\n\t\t\tdelete material.defines.USE_CSM;\n\t\t\tdelete material.defines.CSM_CASCADES;\n\t\t\tdelete material.defines.CSM_FADE;\n\n\t\t\tif ( shader !== null ) {\n\n\t\t\t\tdelete shader.uniforms.CSM_cascades;\n\t\t\t\tdelete shader.uniforms.cameraNear;\n\t\t\t\tdelete shader.uniforms.shadowFar;\n\n\t\t\t}\n\n\t\t\tmaterial.needsUpdate = true;\n\n\t\t} );\n\t\tshaders.clear();\n\n\t}\n\n}\n", "import {\n\tGroup,\n\tMesh,\n\tLineSegments,\n\tBufferGeometry,\n\tLineBasicMaterial,\n\tBox3Helper,\n\tBox3,\n\tPlaneGeometry,\n\tMeshBasicMaterial,\n\tBufferAttribute,\n\tDoubleSide\n} from 'three';\n\nclass CSMHelper extends Group {\n\n\tconstructor( csm ) {\n\n\t\tsuper();\n\t\tthis.csm = csm;\n\t\tthis.displayFrustum = true;\n\t\tthis.displayPlanes = true;\n\t\tthis.displayShadowBounds = true;\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 24 );\n\t\tconst frustumGeometry = new BufferGeometry();\n\t\tfrustumGeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tfrustumGeometry.setAttribute( 'position', new BufferAttribute( positions, 3, false ) );\n\t\tconst frustumLines = new LineSegments( frustumGeometry, new LineBasicMaterial() );\n\t\tthis.add( frustumLines );\n\n\t\tthis.frustumLines = frustumLines;\n\t\tthis.cascadeLines = [];\n\t\tthis.cascadePlanes = [];\n\t\tthis.shadowLines = [];\n\n\t}\n\n\tupdateVisibility() {\n\n\t\tconst displayFrustum = this.displayFrustum;\n\t\tconst displayPlanes = this.displayPlanes;\n\t\tconst displayShadowBounds = this.displayShadowBounds;\n\n\t\tconst frustumLines = this.frustumLines;\n\t\tconst cascadeLines = this.cascadeLines;\n\t\tconst cascadePlanes = this.cascadePlanes;\n\t\tconst shadowLines = this.shadowLines;\n\t\tfor ( let i = 0, l = cascadeLines.length; i < l; i ++ ) {\n\n\t\t\tconst cascadeLine = cascadeLines[ i ];\n\t\t\tconst cascadePlane = cascadePlanes[ i ];\n\t\t\tconst shadowLineGroup = shadowLines[ i ];\n\n\t\t\tcascadeLine.visible = displayFrustum;\n\t\t\tcascadePlane.visible = displayFrustum && displayPlanes;\n\t\t\tshadowLineGroup.visible = displayShadowBounds;\n\n\t\t}\n\n\t\tfrustumLines.visible = displayFrustum;\n\n\t}\n\n\tupdate() {\n\n\t\tconst csm = this.csm;\n\t\tconst camera = csm.camera;\n\t\tconst cascades = csm.cascades;\n\t\tconst mainFrustum = csm.mainFrustum;\n\t\tconst frustums = csm.frustums;\n\t\tconst lights = csm.lights;\n\n\t\tconst frustumLines = this.frustumLines;\n\t\tconst frustumLinePositions = frustumLines.geometry.getAttribute( 'position' );\n\t\tconst cascadeLines = this.cascadeLines;\n\t\tconst cascadePlanes = this.cascadePlanes;\n\t\tconst shadowLines = this.shadowLines;\n\n\t\tthis.position.copy( camera.position );\n\t\tthis.quaternion.copy( camera.quaternion );\n\t\tthis.scale.copy( camera.scale );\n\t\tthis.updateMatrixWorld( true );\n\n\t\twhile ( cascadeLines.length > cascades ) {\n\n\t\t\tthis.remove( cascadeLines.pop() );\n\t\t\tthis.remove( cascadePlanes.pop() );\n\t\t\tthis.remove( shadowLines.pop() );\n\n\t\t}\n\n\t\twhile ( cascadeLines.length < cascades ) {\n\n\t\t\tconst cascadeLine = new Box3Helper( new Box3(), 0xffffff );\n\t\t\tconst planeMat = new MeshBasicMaterial( { transparent: true, opacity: 0.1, depthWrite: false, side: DoubleSide } );\n\t\t\tconst cascadePlane = new Mesh( new PlaneGeometry(), planeMat );\n\t\t\tconst shadowLineGroup = new Group();\n\t\t\tconst shadowLine = new Box3Helper( new Box3(), 0xffff00 );\n\t\t\tshadowLineGroup.add( shadowLine );\n\n\t\t\tthis.add( cascadeLine );\n\t\t\tthis.add( cascadePlane );\n\t\t\tthis.add( shadowLineGroup );\n\n\t\t\tcascadeLines.push( cascadeLine );\n\t\t\tcascadePlanes.push( cascadePlane );\n\t\t\tshadowLines.push( shadowLineGroup );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < cascades; i ++ ) {\n\n\t\t\tconst frustum = frustums[ i ];\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadowCam = light.shadow.camera;\n\t\t\tconst farVerts = frustum.vertices.far;\n\n\t\t\tconst cascadeLine = cascadeLines[ i ];\n\t\t\tconst cascadePlane = cascadePlanes[ i ];\n\t\t\tconst shadowLineGroup = shadowLines[ i ];\n\t\t\tconst shadowLine = shadowLineGroup.children[ 0 ];\n\n\t\t\tcascadeLine.box.min.copy( farVerts[ 2 ] );\n\t\t\tcascadeLine.box.max.copy( farVerts[ 0 ] );\n\t\t\tcascadeLine.box.max.z += 1e-4;\n\n\t\t\tcascadePlane.position.addVectors( farVerts[ 0 ], farVerts[ 2 ] );\n\t\t\tcascadePlane.position.multiplyScalar( 0.5 );\n\t\t\tcascadePlane.scale.subVectors( farVerts[ 0 ], farVerts[ 2 ] );\n\t\t\tcascadePlane.scale.z = 1e-4;\n\n\t\t\tthis.remove( shadowLineGroup );\n\t\t\tshadowLineGroup.position.copy( shadowCam.position );\n\t\t\tshadowLineGroup.quaternion.copy( shadowCam.quaternion );\n\t\t\tshadowLineGroup.scale.copy( shadowCam.scale );\n\t\t\tshadowLineGroup.updateMatrixWorld( true );\n\t\t\tthis.attach( shadowLineGroup );\n\n\t\t\tshadowLine.box.min.set( shadowCam.bottom, shadowCam.left, - shadowCam.far );\n\t\t\tshadowLine.box.max.set( shadowCam.top, shadowCam.right, - shadowCam.near );\n\n\t\t}\n\n\t\tconst nearVerts = mainFrustum.vertices.near;\n\t\tconst farVerts = mainFrustum.vertices.far;\n\t\tfrustumLinePositions.setXYZ( 0, farVerts[ 0 ].x, farVerts[ 0 ].y, farVerts[ 0 ].z );\n\t\tfrustumLinePositions.setXYZ( 1, farVerts[ 3 ].x, farVerts[ 3 ].y, farVerts[ 3 ].z );\n\t\tfrustumLinePositions.setXYZ( 2, farVerts[ 2 ].x, farVerts[ 2 ].y, farVerts[ 2 ].z );\n\t\tfrustumLinePositions.setXYZ( 3, farVerts[ 1 ].x, farVerts[ 1 ].y, farVerts[ 1 ].z );\n\n\t\tfrustumLinePositions.setXYZ( 4, nearVerts[ 0 ].x, nearVerts[ 0 ].y, nearVerts[ 0 ].z );\n\t\tfrustumLinePositions.setXYZ( 5, nearVerts[ 3 ].x, nearVerts[ 3 ].y, nearVerts[ 3 ].z );\n\t\tfrustumLinePositions.setXYZ( 6, nearVerts[ 2 ].x, nearVerts[ 2 ].y, nearVerts[ 2 ].z );\n\t\tfrustumLinePositions.setXYZ( 7, nearVerts[ 1 ].x, nearVerts[ 1 ].y, nearVerts[ 1 ].z );\n\t\tfrustumLinePositions.needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tconst frustumLines = this.frustumLines;\n\t\tconst cascadeLines = this.cascadeLines;\n\t\tconst cascadePlanes = this.cascadePlanes;\n\t\tconst shadowLines = this.shadowLines;\n\n\t\tfrustumLines.geometry.dispose();\n\t\tfrustumLines.material.dispose();\n\n\t\tconst cascades = this.csm.cascades;\n\n\t\tfor ( let i = 0; i < cascades; i ++ ) {\n\n\t\t\tconst cascadeLine = cascadeLines[ i ];\n\t\t\tconst cascadePlane = cascadePlanes[ i ];\n\t\t\tconst shadowLineGroup = shadowLines[ i ];\n\t\t\tconst shadowLine = shadowLineGroup.children[ 0 ];\n\n\t\t\tcascadeLine.dispose(); // Box3Helper\n\n\t\t\tcascadePlane.geometry.dispose();\n\t\t\tcascadePlane.material.dispose();\n\n\t\t\tshadowLine.dispose(); // Box3Helper\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSMHelper };\n", "import {\n\tCurve,\n\tVector3\n} from 'three';\n\n/**\n * A bunch of parametric curves\n *\n * Formulas collected from various sources\n * http://mathworld.wolfram.com/HeartCurve.html\n * http://en.wikipedia.org/wiki/Viviani%27s_curve\n * http://www.mi.sanu.ac.rs/vismath/taylorapril2011/Taylor.pdf\n * https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\n// GrannyKnot\n\nclass GrannyKnot extends Curve {\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt = 2 * Math.PI * t;\n\n\t\tconst x = - 0.22 * Math.cos( t ) - 1.28 * Math.sin( t ) - 0.44 * Math.cos( 3 * t ) - 0.78 * Math.sin( 3 * t );\n\t\tconst y = - 0.1 * Math.cos( 2 * t ) - 0.27 * Math.sin( 2 * t ) + 0.38 * Math.cos( 4 * t ) + 0.46 * Math.sin( 4 * t );\n\t\tconst z = 0.7 * Math.cos( 3 * t ) - 0.4 * Math.sin( 3 * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( 20 );\n\n\t}\n\n}\n\n// HeartCurve\n\nclass HeartCurve extends Curve {\n\n\tconstructor( scale = 5 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt *= 2 * Math.PI;\n\n\t\tconst x = 16 * Math.pow( Math.sin( t ), 3 );\n\t\tconst y = 13 * Math.cos( t ) - 5 * Math.cos( 2 * t ) - 2 * Math.cos( 3 * t ) - Math.cos( 4 * t );\n\t\tconst z = 0;\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// Viviani's Curve\n\nclass VivianiCurve extends Curve {\n\n\tconstructor( scale = 70 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt = t * 4 * Math.PI; // normalized to 0..1\n\t\tconst a = this.scale / 2;\n\n\t\tconst x = a * ( 1 + Math.cos( t ) );\n\t\tconst y = a * Math.sin( t );\n\t\tconst z = 2 * a * Math.sin( t / 2 );\n\n\t\treturn point.set( x, y, z );\n\n\t}\n\n}\n\n// KnotCurve\n\nclass KnotCurve extends Curve {\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt *= 2 * Math.PI;\n\n\t\tconst R = 10;\n\t\tconst s = 50;\n\n\t\tconst x = s * Math.sin( t );\n\t\tconst y = Math.cos( t ) * ( R + s * Math.cos( t ) );\n\t\tconst z = Math.sin( t ) * ( R + s * Math.cos( t ) );\n\n\t\treturn point.set( x, y, z );\n\n\t}\n\n}\n\n\n// HelixCurve\n\nclass HelixCurve extends Curve {\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst a = 30; // radius\n\t\tconst b = 150; // height\n\n\t\tconst t2 = 2 * Math.PI * t * b / 30;\n\n\t\tconst x = Math.cos( t2 ) * a;\n\t\tconst y = Math.sin( t2 ) * a;\n\t\tconst z = b * t;\n\n\t\treturn point.set( x, y, z );\n\n\t}\n\n}\n\n// TrefoilKnot\n\nclass TrefoilKnot extends Curve {\n\n\tconstructor( scale = 10 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt *= Math.PI * 2;\n\n\t\tconst x = ( 2 + Math.cos( 3 * t ) ) * Math.cos( 2 * t );\n\t\tconst y = ( 2 + Math.cos( 3 * t ) ) * Math.sin( 2 * t );\n\t\tconst z = Math.sin( 3 * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// TorusKnot\n\nclass TorusKnot extends Curve {\n\n\tconstructor( scale = 10 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst p = 3;\n\t\tconst q = 4;\n\n\t\tt *= Math.PI * 2;\n\n\t\tconst x = ( 2 + Math.cos( q * t ) ) * Math.cos( p * t );\n\t\tconst y = ( 2 + Math.cos( q * t ) ) * Math.sin( p * t );\n\t\tconst z = Math.sin( q * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// CinquefoilKnot\n\nclass CinquefoilKnot extends Curve {\n\n\tconstructor( scale = 10 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst p = 2;\n\t\tconst q = 5;\n\n\t\tt *= Math.PI * 2;\n\n\t\tconst x = ( 2 + Math.cos( q * t ) ) * Math.cos( p * t );\n\t\tconst y = ( 2 + Math.cos( q * t ) ) * Math.sin( p * t );\n\t\tconst z = Math.sin( q * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n\n// TrefoilPolynomialKnot\n\nclass TrefoilPolynomialKnot extends Curve {\n\n\tconstructor( scale = 10 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt = t * 4 - 2;\n\n\t\tconst x = Math.pow( t, 3 ) - 3 * t;\n\t\tconst y = Math.pow( t, 4 ) - 4 * t * t;\n\t\tconst z = 1 / 5 * Math.pow( t, 5 ) - 2 * t;\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\nfunction scaleTo( x, y, t ) {\n\n\tconst r = y - x;\n\treturn t * r + x;\n\n}\n\n// FigureEightPolynomialKnot\n\nclass FigureEightPolynomialKnot extends Curve {\n\n\tconstructor( scale = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt = scaleTo( - 4, 4, t );\n\n\t\tconst x = 2 / 5 * t * ( t * t - 7 ) * ( t * t - 10 );\n\t\tconst y = Math.pow( t, 4 ) - 13 * t * t;\n\t\tconst z = 1 / 10 * t * ( t * t - 4 ) * ( t * t - 9 ) * ( t * t - 12 );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// DecoratedTorusKnot4a\n\nclass DecoratedTorusKnot4a extends Curve {\n\n\tconstructor( scale = 40 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt *= Math.PI * 2;\n\n\t\tconst x = Math.cos( 2 * t ) * ( 1 + 0.6 * ( Math.cos( 5 * t ) + 0.75 * Math.cos( 10 * t ) ) );\n\t\tconst y = Math.sin( 2 * t ) * ( 1 + 0.6 * ( Math.cos( 5 * t ) + 0.75 * Math.cos( 10 * t ) ) );\n\t\tconst z = 0.35 * Math.sin( 5 * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// DecoratedTorusKnot4b\n\nclass DecoratedTorusKnot4b extends Curve {\n\n\tconstructor( scale = 40 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst fi = t * Math.PI * 2;\n\n\t\tconst x = Math.cos( 2 * fi ) * ( 1 + 0.45 * Math.cos( 3 * fi ) + 0.4 * Math.cos( 9 * fi ) );\n\t\tconst y = Math.sin( 2 * fi ) * ( 1 + 0.45 * Math.cos( 3 * fi ) + 0.4 * Math.cos( 9 * fi ) );\n\t\tconst z = 0.2 * Math.sin( 9 * fi );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n\n// DecoratedTorusKnot5a\n\nclass DecoratedTorusKnot5a extends Curve {\n\n\tconstructor( scale = 40 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst fi = t * Math.PI * 2;\n\n\t\tconst x = Math.cos( 3 * fi ) * ( 1 + 0.3 * Math.cos( 5 * fi ) + 0.5 * Math.cos( 10 * fi ) );\n\t\tconst y = Math.sin( 3 * fi ) * ( 1 + 0.3 * Math.cos( 5 * fi ) + 0.5 * Math.cos( 10 * fi ) );\n\t\tconst z = 0.2 * Math.sin( 20 * fi );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// DecoratedTorusKnot5c\n\nclass DecoratedTorusKnot5c extends Curve {\n\n\tconstructor( scale = 40 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst fi = t * Math.PI * 2;\n\n\t\tconst x = Math.cos( 4 * fi ) * ( 1 + 0.5 * ( Math.cos( 5 * fi ) + 0.4 * Math.cos( 20 * fi ) ) );\n\t\tconst y = Math.sin( 4 * fi ) * ( 1 + 0.5 * ( Math.cos( 5 * fi ) + 0.4 * Math.cos( 20 * fi ) ) );\n\t\tconst z = 0.35 * Math.sin( 15 * fi );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\nexport {\n\tGrannyKnot,\n\tHeartCurve,\n\tVivianiCurve,\n\tKnotCurve,\n\tHelixCurve,\n\tTrefoilKnot,\n\tTorusKnot,\n\tCinquefoilKnot,\n\tTrefoilPolynomialKnot,\n\tFigureEightPolynomialKnot,\n\tDecoratedTorusKnot4a,\n\tDecoratedTorusKnot4b,\n\tDecoratedTorusKnot5a,\n\tDecoratedTorusKnot5c\n};\n", "import {\n\tVector3,\n\tVector4\n} from 'three';\n\n/**\n * NURBS utils\n *\n * See NURBSCurve and NURBSSurface.\n **/\n\n\n/**************************************************************\n *\tNURBS Utils\n **************************************************************/\n\n/*\nFinds knot vector span.\n\np : degree\nu : parametric value\nU : knot vector\n\nreturns the span\n*/\nfunction findSpan( p, u, U ) {\n\n\tconst n = U.length - p - 1;\n\n\tif ( u >= U[ n ] ) {\n\n\t\treturn n - 1;\n\n\t}\n\n\tif ( u <= U[ p ] ) {\n\n\t\treturn p;\n\n\t}\n\n\tlet low = p;\n\tlet high = n;\n\tlet mid = Math.floor( ( low + high ) / 2 );\n\n\twhile ( u < U[ mid ] || u >= U[ mid + 1 ] ) {\n\n\t\tif ( u < U[ mid ] ) {\n\n\t\t\thigh = mid;\n\n\t\t} else {\n\n\t\t\tlow = mid;\n\n\t\t}\n\n\t\tmid = Math.floor( ( low + high ) / 2 );\n\n\t}\n\n\treturn mid;\n\n}\n\n\n/*\nCalculate basis functions. See The NURBS Book, page 70, algorithm A2.2\n\nspan : span in which u lies\nu : parametric point\np : degree\nU : knot vector\n\nreturns array[p+1] with basis functions values.\n*/\nfunction calcBasisFunctions( span, u, p, U ) {\n\n\tconst N = [];\n\tconst left = [];\n\tconst right = [];\n\tN[ 0 ] = 1.0;\n\n\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\tleft[ j ] = u - U[ span + 1 - j ];\n\t\tright[ j ] = U[ span + j ] - u;\n\n\t\tlet saved = 0.0;\n\n\t\tfor ( let r = 0; r < j; ++ r ) {\n\n\t\t\tconst rv = right[ r + 1 ];\n\t\t\tconst lv = left[ j - r ];\n\t\t\tconst temp = N[ r ] / ( rv + lv );\n\t\t\tN[ r ] = saved + rv * temp;\n\t\t\tsaved = lv * temp;\n\n\t\t}\n\n\t\tN[ j ] = saved;\n\n\t}\n\n\treturn N;\n\n}\n\n\n/*\nCalculate B-Spline curve points. See The NURBS Book, page 82, algorithm A3.1.\n\np : degree of B-Spline\nU : knot vector\nP : control points (x, y, z, w)\nu : parametric point\n\nreturns point for given u\n*/\nfunction calcBSplinePoint( p, U, P, u ) {\n\n\tconst span = findSpan( p, u, U );\n\tconst N = calcBasisFunctions( span, u, p, U );\n\tconst C = new Vector4( 0, 0, 0, 0 );\n\n\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\tconst point = P[ span - p + j ];\n\t\tconst Nj = N[ j ];\n\t\tconst wNj = point.w * Nj;\n\t\tC.x += point.x * wNj;\n\t\tC.y += point.y * wNj;\n\t\tC.z += point.z * wNj;\n\t\tC.w += point.w * Nj;\n\n\t}\n\n\treturn C;\n\n}\n\n\n/*\nCalculate basis functions derivatives. See The NURBS Book, page 72, algorithm A2.3.\n\nspan : span in which u lies\nu : parametric point\np : degree\nn : number of derivatives to calculate\nU : knot vector\n\nreturns array[n+1][p+1] with basis functions derivatives\n*/\nfunction calcBasisFunctionDerivatives( span, u, p, n, U ) {\n\n\tconst zeroArr = [];\n\tfor ( let i = 0; i <= p; ++ i )\n\t\tzeroArr[ i ] = 0.0;\n\n\tconst ders = [];\n\n\tfor ( let i = 0; i <= n; ++ i )\n\t\tders[ i ] = zeroArr.slice( 0 );\n\n\tconst ndu = [];\n\n\tfor ( let i = 0; i <= p; ++ i )\n\t\tndu[ i ] = zeroArr.slice( 0 );\n\n\tndu[ 0 ][ 0 ] = 1.0;\n\n\tconst left = zeroArr.slice( 0 );\n\tconst right = zeroArr.slice( 0 );\n\n\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\tleft[ j ] = u - U[ span + 1 - j ];\n\t\tright[ j ] = U[ span + j ] - u;\n\n\t\tlet saved = 0.0;\n\n\t\tfor ( let r = 0; r < j; ++ r ) {\n\n\t\t\tconst rv = right[ r + 1 ];\n\t\t\tconst lv = left[ j - r ];\n\t\t\tndu[ j ][ r ] = rv + lv;\n\n\t\t\tconst temp = ndu[ r ][ j - 1 ] / ndu[ j ][ r ];\n\t\t\tndu[ r ][ j ] = saved + rv * temp;\n\t\t\tsaved = lv * temp;\n\n\t\t}\n\n\t\tndu[ j ][ j ] = saved;\n\n\t}\n\n\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\tders[ 0 ][ j ] = ndu[ j ][ p ];\n\n\t}\n\n\tfor ( let r = 0; r <= p; ++ r ) {\n\n\t\tlet s1 = 0;\n\t\tlet s2 = 1;\n\n\t\tconst a = [];\n\t\tfor ( let i = 0; i <= p; ++ i ) {\n\n\t\t\ta[ i ] = zeroArr.slice( 0 );\n\n\t\t}\n\n\t\ta[ 0 ][ 0 ] = 1.0;\n\n\t\tfor ( let k = 1; k <= n; ++ k ) {\n\n\t\t\tlet d = 0.0;\n\t\t\tconst rk = r - k;\n\t\t\tconst pk = p - k;\n\n\t\t\tif ( r >= k ) {\n\n\t\t\t\ta[ s2 ][ 0 ] = a[ s1 ][ 0 ] / ndu[ pk + 1 ][ rk ];\n\t\t\t\td = a[ s2 ][ 0 ] * ndu[ rk ][ pk ];\n\n\t\t\t}\n\n\t\t\tconst j1 = ( rk >= - 1 ) ? 1 : - rk;\n\t\t\tconst j2 = ( r - 1 <= pk ) ? k - 1 : p - r;\n\n\t\t\tfor ( let j = j1; j <= j2; ++ j ) {\n\n\t\t\t\ta[ s2 ][ j ] = ( a[ s1 ][ j ] - a[ s1 ][ j - 1 ] ) / ndu[ pk + 1 ][ rk + j ];\n\t\t\t\td += a[ s2 ][ j ] * ndu[ rk + j ][ pk ];\n\n\t\t\t}\n\n\t\t\tif ( r <= pk ) {\n\n\t\t\t\ta[ s2 ][ k ] = - a[ s1 ][ k - 1 ] / ndu[ pk + 1 ][ r ];\n\t\t\t\td += a[ s2 ][ k ] * ndu[ r ][ pk ];\n\n\t\t\t}\n\n\t\t\tders[ k ][ r ] = d;\n\n\t\t\tconst j = s1;\n\t\t\ts1 = s2;\n\t\t\ts2 = j;\n\n\t\t}\n\n\t}\n\n\tlet r = p;\n\n\tfor ( let k = 1; k <= n; ++ k ) {\n\n\t\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\t\tders[ k ][ j ] *= r;\n\n\t\t}\n\n\t\tr *= p - k;\n\n\t}\n\n\treturn ders;\n\n}\n\n\n/*\n\tCalculate derivatives of a B-Spline. See The NURBS Book, page 93, algorithm A3.2.\n\n\tp : degree\n\tU : knot vector\n\tP : control points\n\tu : Parametric points\n\tnd : number of derivatives\n\n\treturns array[d+1] with derivatives\n\t*/\nfunction calcBSplineDerivatives( p, U, P, u, nd ) {\n\n\tconst du = nd < p ? nd : p;\n\tconst CK = [];\n\tconst span = findSpan( p, u, U );\n\tconst nders = calcBasisFunctionDerivatives( span, u, p, du, U );\n\tconst Pw = [];\n\n\tfor ( let i = 0; i < P.length; ++ i ) {\n\n\t\tconst point = P[ i ].clone();\n\t\tconst w = point.w;\n\n\t\tpoint.x *= w;\n\t\tpoint.y *= w;\n\t\tpoint.z *= w;\n\n\t\tPw[ i ] = point;\n\n\t}\n\n\tfor ( let k = 0; k <= du; ++ k ) {\n\n\t\tconst point = Pw[ span - p ].clone().multiplyScalar( nders[ k ][ 0 ] );\n\n\t\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\t\tpoint.add( Pw[ span - p + j ].clone().multiplyScalar( nders[ k ][ j ] ) );\n\n\t\t}\n\n\t\tCK[ k ] = point;\n\n\t}\n\n\tfor ( let k = du + 1; k <= nd + 1; ++ k ) {\n\n\t\tCK[ k ] = new Vector4( 0, 0, 0 );\n\n\t}\n\n\treturn CK;\n\n}\n\n\n/*\nCalculate \"K over I\"\n\nreturns k!/(i!(k-i)!)\n*/\nfunction calcKoverI( k, i ) {\n\n\tlet nom = 1;\n\n\tfor ( let j = 2; j <= k; ++ j ) {\n\n\t\tnom *= j;\n\n\t}\n\n\tlet denom = 1;\n\n\tfor ( let j = 2; j <= i; ++ j ) {\n\n\t\tdenom *= j;\n\n\t}\n\n\tfor ( let j = 2; j <= k - i; ++ j ) {\n\n\t\tdenom *= j;\n\n\t}\n\n\treturn nom / denom;\n\n}\n\n\n/*\nCalculate derivatives (0-nd) of rational curve. See The NURBS Book, page 127, algorithm A4.2.\n\nPders : result of function calcBSplineDerivatives\n\nreturns array with derivatives for rational curve.\n*/\nfunction calcRationalCurveDerivatives( Pders ) {\n\n\tconst nd = Pders.length;\n\tconst Aders = [];\n\tconst wders = [];\n\n\tfor ( let i = 0; i < nd; ++ i ) {\n\n\t\tconst point = Pders[ i ];\n\t\tAders[ i ] = new Vector3( point.x, point.y, point.z );\n\t\twders[ i ] = point.w;\n\n\t}\n\n\tconst CK = [];\n\n\tfor ( let k = 0; k < nd; ++ k ) {\n\n\t\tconst v = Aders[ k ].clone();\n\n\t\tfor ( let i = 1; i <= k; ++ i ) {\n\n\t\t\tv.sub( CK[ k - i ].clone().multiplyScalar( calcKoverI( k, i ) * wders[ i ] ) );\n\n\t\t}\n\n\t\tCK[ k ] = v.divideScalar( wders[ 0 ] );\n\n\t}\n\n\treturn CK;\n\n}\n\n\n/*\nCalculate NURBS curve derivatives. See The NURBS Book, page 127, algorithm A4.2.\n\np : degree\nU : knot vector\nP : control points in homogeneous space\nu : parametric points\nnd : number of derivatives\n\nreturns array with derivatives.\n*/\nfunction calcNURBSDerivatives( p, U, P, u, nd ) {\n\n\tconst Pders = calcBSplineDerivatives( p, U, P, u, nd );\n\treturn calcRationalCurveDerivatives( Pders );\n\n}\n\n\n/*\nCalculate rational B-Spline surface point. See The NURBS Book, page 134, algorithm A4.3.\n\np, q : degrees of B-Spline surface\nU, V : knot vectors\nP : control points (x, y, z, w)\nu, v : parametric values\n\nreturns point for given (u, v)\n*/\nfunction calcSurfacePoint( p, q, U, V, P, u, v, target ) {\n\n\tconst uspan = findSpan( p, u, U );\n\tconst vspan = findSpan( q, v, V );\n\tconst Nu = calcBasisFunctions( uspan, u, p, U );\n\tconst Nv = calcBasisFunctions( vspan, v, q, V );\n\tconst temp = [];\n\n\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\ttemp[ l ] = new Vector4( 0, 0, 0, 0 );\n\t\tfor ( let k = 0; k <= p; ++ k ) {\n\n\t\t\tconst point = P[ uspan - p + k ][ vspan - q + l ].clone();\n\t\t\tconst w = point.w;\n\t\t\tpoint.x *= w;\n\t\t\tpoint.y *= w;\n\t\t\tpoint.z *= w;\n\t\t\ttemp[ l ].add( point.multiplyScalar( Nu[ k ] ) );\n\n\t\t}\n\n\t}\n\n\tconst Sw = new Vector4( 0, 0, 0, 0 );\n\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\tSw.add( temp[ l ].multiplyScalar( Nv[ l ] ) );\n\n\t}\n\n\tSw.divideScalar( Sw.w );\n\ttarget.set( Sw.x, Sw.y, Sw.z );\n\n}\n\n/*\nCalculate rational B-Spline volume point. See The NURBS Book, page 134, algorithm A4.3.\n\np, q, r : degrees of B-Splinevolume\nU, V, W : knot vectors\nP : control points (x, y, z, w)\nu, v, w : parametric values\n\nreturns point for given (u, v, w)\n*/\nfunction calcVolumePoint( p, q, r, U, V, W, P, u, v, w, target ) {\n\n\tconst uspan = findSpan( p, u, U );\n\tconst vspan = findSpan( q, v, V );\n\tconst wspan = findSpan( r, w, W );\n\tconst Nu = calcBasisFunctions( uspan, u, p, U );\n\tconst Nv = calcBasisFunctions( vspan, v, q, V );\n\tconst Nw = calcBasisFunctions( wspan, w, r, W );\n\tconst temp = [];\n\n\tfor ( let m = 0; m <= r; ++ m ) {\n\n\t\ttemp[ m ] = [];\n\n\t\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\t\ttemp[ m ][ l ] = new Vector4( 0, 0, 0, 0 );\n\t\t\tfor ( let k = 0; k <= p; ++ k ) {\n\n\t\t\t\tconst point = P[ uspan - p + k ][ vspan - q + l ][ wspan - r + m ].clone();\n\t\t\t\tconst w = point.w;\n\t\t\t\tpoint.x *= w;\n\t\t\t\tpoint.y *= w;\n\t\t\t\tpoint.z *= w;\n\t\t\t\ttemp[ m ][ l ].add( point.multiplyScalar( Nu[ k ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\tconst Sw = new Vector4( 0, 0, 0, 0 );\n\tfor ( let m = 0; m <= r; ++ m ) {\n\t\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\t\tSw.add( temp[ m ][ l ].multiplyScalar( Nw[ m ] ).multiplyScalar( Nv[ l ] ) );\n\n\t\t}\n\t}\n\n\tSw.divideScalar( Sw.w );\n\ttarget.set( Sw.x, Sw.y, Sw.z );\n\n}\n\n\nexport {\n\tfindSpan,\n\tcalcBasisFunctions,\n\tcalcBSplinePoint,\n\tcalcBasisFunctionDerivatives,\n\tcalcBSplineDerivatives,\n\tcalcKoverI,\n\tcalcRationalCurveDerivatives,\n\tcalcNURBSDerivatives,\n\tcalcSurfacePoint,\n\tcalcVolumePoint,\n};\n", "import {\n\tCurve,\n\tVector3,\n\tVector4\n} from 'three';\nimport * as NURBSUtils from '../curves/NURBSUtils.js';\n\n/**\n * NURBS curve object\n *\n * Derives from Curve, overriding getPoint and getTangent.\n *\n * Implementation is based on (x, y [, z=0 [, w=1]]) control points with w=weight.\n *\n **/\n\nclass NURBSCurve extends Curve {\n\n\tconstructor(\n\t\tdegree,\n\t\tknots /* array of reals */,\n\t\tcontrolPoints /* array of Vector(2|3|4) */,\n\t\tstartKnot /* index in knots */,\n\t\tendKnot /* index in knots */\n\t) {\n\n\t\tsuper();\n\n\t\tthis.degree = degree;\n\t\tthis.knots = knots;\n\t\tthis.controlPoints = [];\n\t\t// Used by periodic NURBS to remove hidden spans\n\t\tthis.startKnot = startKnot || 0;\n\t\tthis.endKnot = endKnot || ( this.knots.length - 1 );\n\n\t\tfor ( let i = 0; i < controlPoints.length; ++ i ) {\n\n\t\t\t// ensure Vector4 for control points\n\t\t\tconst point = controlPoints[ i ];\n\t\t\tthis.controlPoints[ i ] = new Vector4( point.x, point.y, point.z, point.w );\n\n\t\t}\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst u = this.knots[ this.startKnot ] + t * ( this.knots[ this.endKnot ] - this.knots[ this.startKnot ] ); // linear mapping t->u\n\n\t\t// following results in (wx, wy, wz, w) homogeneous point\n\t\tconst hpoint = NURBSUtils.calcBSplinePoint( this.degree, this.knots, this.controlPoints, u );\n\n\t\tif ( hpoint.w !== 1.0 ) {\n\n\t\t\t// project to 3D space: (wx, wy, wz, w) -> (x, y, z, 1)\n\t\t\thpoint.divideScalar( hpoint.w );\n\n\t\t}\n\n\t\treturn point.set( hpoint.x, hpoint.y, hpoint.z );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\tconst tangent = optionalTarget;\n\n\t\tconst u = this.knots[ 0 ] + t * ( this.knots[ this.knots.length - 1 ] - this.knots[ 0 ] );\n\t\tconst ders = NURBSUtils.calcNURBSDerivatives( this.degree, this.knots, this.controlPoints, u, 1 );\n\t\ttangent.copy( ders[ 1 ] ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n}\n\nexport { NURBSCurve };\n", "import {\n\tVector4\n} from 'three';\nimport * as NURBSUtils from '../curves/NURBSUtils.js';\n\n/**\n * NURBS surface object\n *\n * Implementation is based on (x, y [, z=0 [, w=1]]) control points with w=weight.\n **/\n\nclass NURBSSurface {\n\n\tconstructor( degree1, degree2, knots1, knots2 /* arrays of reals */, controlPoints /* array^2 of Vector(2|3|4) */ ) {\n\n\t\tthis.degree1 = degree1;\n\t\tthis.degree2 = degree2;\n\t\tthis.knots1 = knots1;\n\t\tthis.knots2 = knots2;\n\t\tthis.controlPoints = [];\n\n\t\tconst len1 = knots1.length - degree1 - 1;\n\t\tconst len2 = knots2.length - degree2 - 1;\n\n\t\t// ensure Vector4 for control points\n\t\tfor ( let i = 0; i < len1; ++ i ) {\n\n\t\t\tthis.controlPoints[ i ] = [];\n\n\t\t\tfor ( let j = 0; j < len2; ++ j ) {\n\n\t\t\t\tconst point = controlPoints[ i ][ j ];\n\t\t\t\tthis.controlPoints[ i ][ j ] = new Vector4( point.x, point.y, point.z, point.w );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetPoint( t1, t2, target ) {\n\n\t\tconst u = this.knots1[ 0 ] + t1 * ( this.knots1[ this.knots1.length - 1 ] - this.knots1[ 0 ] ); // linear mapping t1->u\n\t\tconst v = this.knots2[ 0 ] + t2 * ( this.knots2[ this.knots2.length - 1 ] - this.knots2[ 0 ] ); // linear mapping t2->u\n\n\t\tNURBSUtils.calcSurfacePoint( this.degree1, this.degree2, this.knots1, this.knots2, this.controlPoints, u, v, target );\n\n\t}\n\n}\n\nexport { NURBSSurface };\n", "import {\n\tVector4\n} from 'three';\nimport * as NURBSUtils from '../curves/NURBSUtils.js';\n\n/**\n * NURBS volume object\n *\n * Implementation is based on (x, y, z [, w=1]]) control points with w=weight.\n **/\n\nclass NURBSVolume {\n\n\tconstructor( degree1, degree2, degree3, knots1, knots2, knots3 /* arrays of reals */, controlPoints /* array^3 of Vector(2|3|4) */ ) {\n\n\t\tthis.degree1 = degree1;\n\t\tthis.degree2 = degree2;\n\t\tthis.degree3 = degree3;\n\t\tthis.knots1 = knots1;\n\t\tthis.knots2 = knots2;\n\t\tthis.knots3 = knots3;\n\t\tthis.controlPoints = [];\n\n\t\tconst len1 = knots1.length - degree1 - 1;\n\t\tconst len2 = knots2.length - degree2 - 1;\n\t\tconst len3 = knots3.length - degree3 - 1;\n\n\t\t// ensure Vector4 for control points\n\t\tfor ( let i = 0; i < len1; ++ i ) {\n\n\t\t\tthis.controlPoints[ i ] = [];\n\n\t\t\tfor ( let j = 0; j < len2; ++ j ) {\n\n\t\t\t\tthis.controlPoints[ i ][ j ] = [];\n\n\t\t\t\tfor ( let k = 0; k < len3; ++ k ) {\n\n\t\t\t\t\tconst point = controlPoints[ i ][ j ][ k ];\n\t\t\t\t\tthis.controlPoints[ i ][ j ][ k ] = new Vector4( point.x, point.y, point.z, point.w );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetPoint( t1, t2, t3, target ) {\n\n\t\tconst u = this.knots1[ 0 ] + t1 * ( this.knots1[ this.knots1.length - 1 ] - this.knots1[ 0 ] ); // linear mapping t1->u\n\t\tconst v = this.knots2[ 0 ] + t2 * ( this.knots2[ this.knots2.length - 1 ] - this.knots2[ 0 ] ); // linear mapping t2->v\n\t\tconst w = this.knots3[ 0 ] + t3 * ( this.knots3[ this.knots3.length - 1 ] - this.knots3[ 0 ] ); // linear mapping t3->w\n\n\t\tNURBSUtils.calcVolumePoint( this.degree1, this.degree2, this.degree3, this.knots1, this.knots2, this.knots3, this.controlPoints, u, v, w, target );\n\n\t}\n\n}\n\nexport { NURBSVolume };\n", "import {\n\tLinearFilter,\n\tMatrix3,\n\tMesh,\n\tNearestFilter,\n\tOrthographicCamera,\n\tPlaneGeometry,\n\tRGBAFormat,\n\tScene,\n\tShaderMaterial,\n\tStereoCamera,\n\tWebGLRenderTarget\n} from 'three';\n\nclass AnaglyphEffect {\n\n\tconstructor( renderer, width = 512, height = 512 ) {\n\n\t\t// Dubois matrices from https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.6968&rep=rep1&type=pdf#page=4\n\n\t\tthis.colorMatrixLeft = new Matrix3().fromArray( [\n\t\t\t0.456100, - 0.0400822, - 0.0152161,\n\t\t\t0.500484, - 0.0378246, - 0.0205971,\n\t\t\t0.176381, - 0.0157589, - 0.00546856\n\t\t] );\n\n\t\tthis.colorMatrixRight = new Matrix3().fromArray( [\n\t\t\t- 0.0434706, 0.378476, - 0.0721527,\n\t\t\t- 0.0879388, 0.73364, - 0.112961,\n\t\t\t- 0.00155529, - 0.0184503, 1.2264\n\t\t] );\n\n\t\tconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\tconst _scene = new Scene();\n\n\t\tconst _stereo = new StereoCamera();\n\n\t\tconst _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\tconst _renderTargetL = new WebGLRenderTarget( width, height, _params );\n\t\tconst _renderTargetR = new WebGLRenderTarget( width, height, _params );\n\n\t\tconst _material = new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\n\t\t\t\t'mapLeft': { value: _renderTargetL.texture },\n\t\t\t\t'mapRight': { value: _renderTargetR.texture },\n\n\t\t\t\t'colorMatrixLeft': { value: this.colorMatrixLeft },\n\t\t\t\t'colorMatrixRight': { value: this.colorMatrixRight }\n\n\t\t\t},\n\n\t\t\tvertexShader: [\n\n\t\t\t\t'varying vec2 vUv;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvUv = vec2( uv.x, uv.y );',\n\t\t\t\t'\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ),\n\n\t\t\tfragmentShader: [\n\n\t\t\t\t'uniform sampler2D mapLeft;',\n\t\t\t\t'uniform sampler2D mapRight;',\n\t\t\t\t'varying vec2 vUv;',\n\n\t\t\t\t'uniform mat3 colorMatrixLeft;',\n\t\t\t\t'uniform mat3 colorMatrixRight;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvec2 uv = vUv;',\n\n\t\t\t\t'\tvec4 colorL = texture2D( mapLeft, uv );',\n\t\t\t\t'\tvec4 colorR = texture2D( mapRight, uv );',\n\n\t\t\t\t'\tvec3 color = clamp(',\n\t\t\t\t'\t\t\tcolorMatrixLeft * colorL.rgb +',\n\t\t\t\t'\t\t\tcolorMatrixRight * colorR.rgb, 0., 1. );',\n\n\t\t\t\t'\tgl_FragColor = vec4(',\n\t\t\t\t'\t\t\tcolor.r, color.g, color.b,',\n\t\t\t\t'\t\t\tmax( colorL.a, colorR.a ) );',\n\n\t\t\t\t'\t#include ',\n\t\t\t\t'\t#include ',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' )\n\n\t\t} );\n\n\t\tconst _mesh = new Mesh( new PlaneGeometry( 2, 2 ), _material );\n\t\t_scene.add( _mesh );\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\trenderer.setSize( width, height );\n\n\t\t\tconst pixelRatio = renderer.getPixelRatio();\n\n\t\t\t_renderTargetL.setSize( width * pixelRatio, height * pixelRatio );\n\t\t\t_renderTargetR.setSize( width * pixelRatio, height * pixelRatio );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_stereo.update( camera );\n\n\t\t\trenderer.setRenderTarget( _renderTargetL );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\t\trenderer.setRenderTarget( _renderTargetR );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.render( _scene, _camera );\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\t_renderTargetL.dispose();\n\t\t\t_renderTargetR.dispose();\n\t\t\t_mesh.geometry.dispose();\n\t\t\t_mesh.material.dispose();\n\n\t\t};\n\n\t}\n\n}\n\nexport { AnaglyphEffect };\n", "/**\n * Ascii generation is based on https://github.com/hassadee/jsascii/blob/master/jsascii.js\n *\n * 16 April 2012 - @blurspline\n */\n\nclass AsciiEffect {\n\n\tconstructor( renderer, charSet = ' .:-=+*#%@', options = {} ) {\n\n\t\t// ' .,:;=|iI+hHOE#`$';\n\t\t// darker bolder character set from https://github.com/saw/Canvas-ASCII-Art/\n\t\t// ' .\\'`^\",:;Il!i~+_-?][}{1)(|/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$'.split('');\n\n\t\t// Some ASCII settings\n\n\t\tconst fResolution = options[ 'resolution' ] || 0.15; // Higher for more details\n\t\tconst iScale = options[ 'scale' ] || 1;\n\t\tconst bColor = options[ 'color' ] || false; // nice but slows down rendering!\n\t\tconst bAlpha = options[ 'alpha' ] || false; // Transparency\n\t\tconst bBlock = options[ 'block' ] || false; // blocked characters. like good O dos\n\t\tconst bInvert = options[ 'invert' ] || false; // black is white, white is black\n\t\tconst strResolution = options[ 'strResolution' ] || 'low';\n\n\t\tlet width, height;\n\n\t\tconst domElement = document.createElement( 'div' );\n\t\tdomElement.style.cursor = 'default';\n\n\t\tconst oAscii = document.createElement( 'table' );\n\t\tdomElement.appendChild( oAscii );\n\n\t\tlet iWidth, iHeight;\n\t\tlet oImg;\n\n\t\tthis.setSize = function ( w, h ) {\n\n\t\t\twidth = w;\n\t\t\theight = h;\n\n\t\t\trenderer.setSize( w, h );\n\n\t\t\tinitAsciiSize();\n\n\t\t};\n\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\trenderer.render( scene, camera );\n\t\t\tasciifyImage( oAscii );\n\n\t\t};\n\n\t\tthis.domElement = domElement;\n\n\n\t\t// Throw in ascii library from https://github.com/hassadee/jsascii/blob/master/jsascii.js (MIT License)\n\n\t\tfunction initAsciiSize() {\n\n\t\t\tiWidth = Math.floor( width * fResolution );\n\t\t\tiHeight = Math.floor( height * fResolution );\n\n\t\t\toCanvas.width = iWidth;\n\t\t\toCanvas.height = iHeight;\n\t\t\t// oCanvas.style.display = \"none\";\n\t\t\t// oCanvas.style.width = iWidth;\n\t\t\t// oCanvas.style.height = iHeight;\n\n\t\t\toImg = renderer.domElement;\n\n\t\t\tif ( oImg.style.backgroundColor ) {\n\n\t\t\t\toAscii.rows[ 0 ].cells[ 0 ].style.backgroundColor = oImg.style.backgroundColor;\n\t\t\t\toAscii.rows[ 0 ].cells[ 0 ].style.color = oImg.style.color;\n\n\t\t\t}\n\n\t\t\toAscii.cellSpacing = 0;\n\t\t\toAscii.cellPadding = 0;\n\n\t\t\tconst oStyle = oAscii.style;\n\t\t\toStyle.whiteSpace = 'pre';\n\t\t\toStyle.margin = '0px';\n\t\t\toStyle.padding = '0px';\n\t\t\toStyle.letterSpacing = fLetterSpacing + 'px';\n\t\t\toStyle.fontFamily = strFont;\n\t\t\toStyle.fontSize = fFontSize + 'px';\n\t\t\toStyle.lineHeight = fLineHeight + 'px';\n\t\t\toStyle.textAlign = 'left';\n\t\t\toStyle.textDecoration = 'none';\n\n\t\t}\n\n\n\t\tconst aDefaultCharList = ( ' .,:;i1tfLCG08@' ).split( '' );\n\t\tconst aDefaultColorCharList = ( ' CGO08@' ).split( '' );\n\t\tconst strFont = 'courier new, monospace';\n\n\t\tconst oCanvasImg = renderer.domElement;\n\n\t\tconst oCanvas = document.createElement( 'canvas' );\n\t\tif ( ! oCanvas.getContext ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst oCtx = oCanvas.getContext( '2d' );\n\t\tif ( ! oCtx.getImageData ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet aCharList = ( bColor ? aDefaultColorCharList : aDefaultCharList );\n\n\t\tif ( charSet ) aCharList = charSet;\n\n\t\t// Setup dom\n\n\t\tconst fFontSize = ( 2 / fResolution ) * iScale;\n\t\tconst fLineHeight = ( 2 / fResolution ) * iScale;\n\n\t\t// adjust letter-spacing for all combinations of scale and resolution to get it to fit the image width.\n\n\t\tlet fLetterSpacing = 0;\n\n\t\tif ( strResolution == 'low' ) {\n\n\t\t\tswitch ( iScale ) {\n\n\t\t\t\tcase 1 : fLetterSpacing = - 1; break;\n\t\t\t\tcase 2 :\n\t\t\t\tcase 3 : fLetterSpacing = - 2.1; break;\n\t\t\t\tcase 4 : fLetterSpacing = - 3.1; break;\n\t\t\t\tcase 5 : fLetterSpacing = - 4.15; break;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( strResolution == 'medium' ) {\n\n\t\t\tswitch ( iScale ) {\n\n\t\t\t\tcase 1 : fLetterSpacing = 0; break;\n\t\t\t\tcase 2 : fLetterSpacing = - 1; break;\n\t\t\t\tcase 3 : fLetterSpacing = - 1.04; break;\n\t\t\t\tcase 4 :\n\t\t\t\tcase 5 : fLetterSpacing = - 2.1; break;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( strResolution == 'high' ) {\n\n\t\t\tswitch ( iScale ) {\n\n\t\t\t\tcase 1 :\n\t\t\t\tcase 2 : fLetterSpacing = 0; break;\n\t\t\t\tcase 3 :\n\t\t\t\tcase 4 :\n\t\t\t\tcase 5 : fLetterSpacing = - 1; break;\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// can't get a span or div to flow like an img element, but a table works?\n\n\n\t\t// convert img element to ascii\n\n\t\tfunction asciifyImage( oAscii ) {\n\n\t\t\toCtx.clearRect( 0, 0, iWidth, iHeight );\n\t\t\toCtx.drawImage( oCanvasImg, 0, 0, iWidth, iHeight );\n\t\t\tconst oImgData = oCtx.getImageData( 0, 0, iWidth, iHeight ).data;\n\n\t\t\t// Coloring loop starts now\n\t\t\tlet strChars = '';\n\n\t\t\t// console.time('rendering');\n\n\t\t\tfor ( let y = 0; y < iHeight; y += 2 ) {\n\n\t\t\t\tfor ( let x = 0; x < iWidth; x ++ ) {\n\n\t\t\t\t\tconst iOffset = ( y * iWidth + x ) * 4;\n\n\t\t\t\t\tconst iRed = oImgData[ iOffset ];\n\t\t\t\t\tconst iGreen = oImgData[ iOffset + 1 ];\n\t\t\t\t\tconst iBlue = oImgData[ iOffset + 2 ];\n\t\t\t\t\tconst iAlpha = oImgData[ iOffset + 3 ];\n\t\t\t\t\tlet iCharIdx;\n\n\t\t\t\t\tlet fBrightness;\n\n\t\t\t\t\tfBrightness = ( 0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue ) / 255;\n\t\t\t\t\t// fBrightness = (0.3*iRed + 0.5*iGreen + 0.3*iBlue) / 255;\n\n\t\t\t\t\tif ( iAlpha == 0 ) {\n\n\t\t\t\t\t\t// should calculate alpha instead, but quick hack :)\n\t\t\t\t\t\t//fBrightness *= (iAlpha / 255);\n\t\t\t\t\t\tfBrightness = 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tiCharIdx = Math.floor( ( 1 - fBrightness ) * ( aCharList.length - 1 ) );\n\n\t\t\t\t\tif ( bInvert ) {\n\n\t\t\t\t\t\tiCharIdx = aCharList.length - iCharIdx - 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// good for debugging\n\t\t\t\t\t//fBrightness = Math.floor(fBrightness * 10);\n\t\t\t\t\t//strThisChar = fBrightness;\n\n\t\t\t\t\tlet strThisChar = aCharList[ iCharIdx ];\n\n\t\t\t\t\tif ( strThisChar === undefined || strThisChar == ' ' )\n\t\t\t\t\t\tstrThisChar = ' ';\n\n\t\t\t\t\tif ( bColor ) {\n\n\t\t\t\t\t\tstrChars += '' + strThisChar + '';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstrChars += strThisChar;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstrChars += '
';\n\n\t\t\t}\n\n\t\t\toAscii.innerHTML = `${strChars}`;\n\n\t\t\t// console.timeEnd('rendering');\n\n\t\t\t// return oAscii;\n\n\t\t}\n\n\t}\n\n}\n\nexport { AsciiEffect };\n", "import {\n\tBackSide,\n\tColor,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils\n} from 'three';\n\n/**\n * Reference: https://en.wikipedia.org/wiki/Cel_shading\n *\n * API\n *\n * 1. Traditional\n *\n * const effect = new OutlineEffect( renderer );\n *\n * function render() {\n *\n * \teffect.render( scene, camera );\n *\n * }\n *\n * 2. VR compatible\n *\n * const effect = new OutlineEffect( renderer );\n * let renderingOutline = false;\n *\n * scene.onAfterRender = function () {\n *\n * \tif ( renderingOutline ) return;\n *\n * \trenderingOutline = true;\n *\n * \teffect.renderOutline( scene, camera );\n *\n * \trenderingOutline = false;\n *\n * };\n *\n * function render() {\n *\n * \trenderer.render( scene, camera );\n *\n * }\n *\n * // How to set default outline parameters\n * new OutlineEffect( renderer, {\n * \tdefaultThickness: 0.01,\n * \tdefaultColor: [ 0, 0, 0 ],\n * \tdefaultAlpha: 0.8,\n * \tdefaultKeepAlive: true // keeps outline material in cache even if material is removed from scene\n * } );\n *\n * // How to set outline parameters for each material\n * material.userData.outlineParameters = {\n * \tthickness: 0.01,\n * \tcolor: [ 0, 0, 0 ],\n * \talpha: 0.8,\n * \tvisible: true,\n * \tkeepAlive: true\n * };\n */\n\nclass OutlineEffect {\n\n\tconstructor( renderer, parameters = {} ) {\n\n\t\tthis.enabled = true;\n\n\t\tconst defaultThickness = parameters.defaultThickness !== undefined ? parameters.defaultThickness : 0.003;\n\t\tconst defaultColor = new Color().fromArray( parameters.defaultColor !== undefined ? parameters.defaultColor : [ 0, 0, 0 ] );\n\t\tconst defaultAlpha = parameters.defaultAlpha !== undefined ? parameters.defaultAlpha : 1.0;\n\t\tconst defaultKeepAlive = parameters.defaultKeepAlive !== undefined ? parameters.defaultKeepAlive : false;\n\n\t\t// object.material.uuid -> outlineMaterial or\n\t\t// object.material[ n ].uuid -> outlineMaterial\n\t\t// save at the outline material creation and release\n\t\t// if it's unused removeThresholdCount frames\n\t\t// unless keepAlive is true.\n\t\tconst cache = {};\n\n\t\tconst removeThresholdCount = 60;\n\n\t\t// outlineMaterial.uuid -> object.material or\n\t\t// outlineMaterial.uuid -> object.material[ n ]\n\t\t// save before render and release after render.\n\t\tconst originalMaterials = {};\n\n\t\t// object.uuid -> originalOnBeforeRender\n\t\t// save before render and release after render.\n\t\tconst originalOnBeforeRenders = {};\n\n\t\t//this.cache = cache; // for debug\n\n\t\tconst uniformsOutline = {\n\t\t\toutlineThickness: { value: defaultThickness },\n\t\t\toutlineColor: { value: defaultColor },\n\t\t\toutlineAlpha: { value: defaultAlpha }\n\t\t};\n\n\t\tconst vertexShader = [\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\n\t\t\t'uniform float outlineThickness;',\n\n\t\t\t'vec4 calculateOutline( vec4 pos, vec3 normal, vec4 skinned ) {',\n\t\t\t'\tfloat thickness = outlineThickness;',\n\t\t\t'\tconst float ratio = 1.0;', // TODO: support outline thickness ratio for each vertex\n\t\t\t'\tvec4 pos2 = projectionMatrix * modelViewMatrix * vec4( skinned.xyz + normal, 1.0 );',\n\t\t\t// NOTE: subtract pos2 from pos because BackSide objectNormal is negative\n\t\t\t'\tvec4 norm = normalize( pos - pos2 );',\n\t\t\t'\treturn pos + norm * thickness * pos.w * ratio;',\n\t\t\t'}',\n\n\t\t\t'void main() {',\n\n\t\t\t'\t#include ',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'\tvec3 outlineNormal = - objectNormal;', // the outline material is always rendered with BackSide\n\n\t\t\t'\tgl_Position = calculateOutline( gl_Position, outlineNormal, vec4( transformed, 1.0 ) );',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'}',\n\n\t\t].join( '\\n' );\n\n\t\tconst fragmentShader = [\n\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\n\t\t\t'uniform vec3 outlineColor;',\n\t\t\t'uniform float outlineAlpha;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'\tgl_FragColor = vec4( outlineColor, outlineAlpha );',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' );\n\n\t\tfunction createMaterial() {\n\n\t\t\treturn new ShaderMaterial( {\n\t\t\t\ttype: 'OutlineEffect',\n\t\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\t\tUniformsLib[ 'fog' ],\n\t\t\t\t\tUniformsLib[ 'displacementmap' ],\n\t\t\t\t\tuniformsOutline\n\t\t\t\t] ),\n\t\t\t\tvertexShader: vertexShader,\n\t\t\t\tfragmentShader: fragmentShader,\n\t\t\t\tside: BackSide\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction getOutlineMaterialFromCache( originalMaterial ) {\n\n\t\t\tlet data = cache[ originalMaterial.uuid ];\n\n\t\t\tif ( data === undefined ) {\n\n\t\t\t\tdata = {\n\t\t\t\t\tmaterial: createMaterial(),\n\t\t\t\t\tused: true,\n\t\t\t\t\tkeepAlive: defaultKeepAlive,\n\t\t\t\t\tcount: 0\n\t\t\t\t};\n\n\t\t\t\tcache[ originalMaterial.uuid ] = data;\n\n\t\t\t}\n\n\t\t\tdata.used = true;\n\n\t\t\treturn data.material;\n\n\t\t}\n\n\t\tfunction getOutlineMaterial( originalMaterial ) {\n\n\t\t\tconst outlineMaterial = getOutlineMaterialFromCache( originalMaterial );\n\n\t\t\toriginalMaterials[ outlineMaterial.uuid ] = originalMaterial;\n\n\t\t\tupdateOutlineMaterial( outlineMaterial, originalMaterial );\n\n\t\t\treturn outlineMaterial;\n\n\t\t}\n\n\t\tfunction isCompatible( object ) {\n\n\t\t\tconst geometry = object.geometry;\n\t\t\tconst hasNormals = ( geometry !== undefined ) && ( geometry.attributes.normal !== undefined );\n\n\t\t\treturn ( object.isMesh === true && object.material !== undefined && hasNormals === true );\n\n\t\t}\n\n\t\tfunction setOutlineMaterial( object ) {\n\n\t\t\tif ( isCompatible( object ) === false ) return;\n\n\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = object.material.length; i < il; i ++ ) {\n\n\t\t\t\t\tobject.material[ i ] = getOutlineMaterial( object.material[ i ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = getOutlineMaterial( object.material );\n\n\t\t\t}\n\n\t\t\toriginalOnBeforeRenders[ object.uuid ] = object.onBeforeRender;\n\t\t\tobject.onBeforeRender = onBeforeRender;\n\n\t\t}\n\n\t\tfunction restoreOriginalMaterial( object ) {\n\n\t\t\tif ( isCompatible( object ) === false ) return;\n\n\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = object.material.length; i < il; i ++ ) {\n\n\t\t\t\t\tobject.material[ i ] = originalMaterials[ object.material[ i ].uuid ];\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = originalMaterials[ object.material.uuid ];\n\n\t\t\t}\n\n\t\t\tobject.onBeforeRender = originalOnBeforeRenders[ object.uuid ];\n\n\t\t}\n\n\t\tfunction onBeforeRender( renderer, scene, camera, geometry, material ) {\n\n\t\t\tconst originalMaterial = originalMaterials[ material.uuid ];\n\n\t\t\t// just in case\n\t\t\tif ( originalMaterial === undefined ) return;\n\n\t\t\tupdateUniforms( material, originalMaterial );\n\n\t\t}\n\n\t\tfunction updateUniforms( material, originalMaterial ) {\n\n\t\t\tconst outlineParameters = originalMaterial.userData.outlineParameters;\n\n\t\t\tmaterial.uniforms.outlineAlpha.value = originalMaterial.opacity;\n\n\t\t\tif ( outlineParameters !== undefined ) {\n\n\t\t\t\tif ( outlineParameters.thickness !== undefined ) material.uniforms.outlineThickness.value = outlineParameters.thickness;\n\t\t\t\tif ( outlineParameters.color !== undefined ) material.uniforms.outlineColor.value.fromArray( outlineParameters.color );\n\t\t\t\tif ( outlineParameters.alpha !== undefined ) material.uniforms.outlineAlpha.value = outlineParameters.alpha;\n\n\t\t\t}\n\n\t\t\tif ( originalMaterial.displacementMap ) {\n\n\t\t\t\tmaterial.uniforms.displacementMap.value = originalMaterial.displacementMap;\n\t\t\t\tmaterial.uniforms.displacementScale.value = originalMaterial.displacementScale;\n\t\t\t\tmaterial.uniforms.displacementBias.value = originalMaterial.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateOutlineMaterial( material, originalMaterial ) {\n\n\t\t\tif ( material.name === 'invisible' ) return;\n\n\t\t\tconst outlineParameters = originalMaterial.userData.outlineParameters;\n\n\t\t\tmaterial.fog = originalMaterial.fog;\n\t\t\tmaterial.toneMapped = originalMaterial.toneMapped;\n\t\t\tmaterial.premultipliedAlpha = originalMaterial.premultipliedAlpha;\n\t\t\tmaterial.displacementMap = originalMaterial.displacementMap;\n\n\t\t\tif ( outlineParameters !== undefined ) {\n\n\t\t\t\tif ( originalMaterial.visible === false ) {\n\n\t\t\t\t\tmaterial.visible = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterial.visible = ( outlineParameters.visible !== undefined ) ? outlineParameters.visible : true;\n\n\t\t\t\t}\n\n\t\t\t\tmaterial.transparent = ( outlineParameters.alpha !== undefined && outlineParameters.alpha < 1.0 ) ? true : originalMaterial.transparent;\n\n\t\t\t\tif ( outlineParameters.keepAlive !== undefined ) cache[ originalMaterial.uuid ].keepAlive = outlineParameters.keepAlive;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.transparent = originalMaterial.transparent;\n\t\t\t\tmaterial.visible = originalMaterial.visible;\n\n\t\t\t}\n\n\t\t\tif ( originalMaterial.wireframe === true || originalMaterial.depthTest === false ) material.visible = false;\n\n\t\t\tif ( originalMaterial.clippingPlanes ) {\n\n\t\t\t\tmaterial.clipping = true;\n\n\t\t\t\tmaterial.clippingPlanes = originalMaterial.clippingPlanes;\n\t\t\t\tmaterial.clipIntersection = originalMaterial.clipIntersection;\n\t\t\t\tmaterial.clipShadows = originalMaterial.clipShadows;\n\n\t\t\t}\n\n\t\t\tmaterial.version = originalMaterial.version; // update outline material if necessary\n\n\t\t}\n\n\t\tfunction cleanupCache() {\n\n\t\t\tlet keys;\n\n\t\t\t// clear originialMaterials\n\t\t\tkeys = Object.keys( originalMaterials );\n\n\t\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\toriginalMaterials[ keys[ i ] ] = undefined;\n\n\t\t\t}\n\n\t\t\t// clear originalOnBeforeRenders\n\t\t\tkeys = Object.keys( originalOnBeforeRenders );\n\n\t\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\toriginalOnBeforeRenders[ keys[ i ] ] = undefined;\n\n\t\t\t}\n\n\t\t\t// remove unused outlineMaterial from cache\n\t\t\tkeys = Object.keys( cache );\n\n\t\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\tconst key = keys[ i ];\n\n\t\t\t\tif ( cache[ key ].used === false ) {\n\n\t\t\t\t\tcache[ key ].count ++;\n\n\t\t\t\t\tif ( cache[ key ].keepAlive === false && cache[ key ].count > removeThresholdCount ) {\n\n\t\t\t\t\t\tdelete cache[ key ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcache[ key ].used = false;\n\t\t\t\t\tcache[ key ].count = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( this.enabled === false ) {\n\n\t\t\t\trenderer.render( scene, camera );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst currentAutoClear = renderer.autoClear;\n\t\t\trenderer.autoClear = this.autoClear;\n\n\t\t\trenderer.render( scene, camera );\n\n\t\t\trenderer.autoClear = currentAutoClear;\n\n\t\t\tthis.renderOutline( scene, camera );\n\n\t\t};\n\n\t\tthis.renderOutline = function ( scene, camera ) {\n\n\t\t\tconst currentAutoClear = renderer.autoClear;\n\t\t\tconst currentSceneAutoUpdate = scene.matrixWorldAutoUpdate;\n\t\t\tconst currentSceneBackground = scene.background;\n\t\t\tconst currentShadowMapEnabled = renderer.shadowMap.enabled;\n\n\t\t\tscene.matrixWorldAutoUpdate = false;\n\t\t\tscene.background = null;\n\t\t\trenderer.autoClear = false;\n\t\t\trenderer.shadowMap.enabled = false;\n\n\t\t\tscene.traverse( setOutlineMaterial );\n\n\t\t\trenderer.render( scene, camera );\n\n\t\t\tscene.traverse( restoreOriginalMaterial );\n\n\t\t\tcleanupCache();\n\n\t\t\tscene.matrixWorldAutoUpdate = currentSceneAutoUpdate;\n\t\t\tscene.background = currentSceneBackground;\n\t\t\trenderer.autoClear = currentAutoClear;\n\t\t\trenderer.shadowMap.enabled = currentShadowMapEnabled;\n\n\t\t};\n\n\t\t/*\n\t\t * See #9918\n\t\t *\n\t\t * The following property copies and wrapper methods enable\n\t\t * OutlineEffect to be called from other *Effect, like\n\t\t *\n\t\t * effect = new StereoEffect( new OutlineEffect( renderer ) );\n\t\t *\n\t\t * function render () {\n\t\t *\n\t \t * \teffect.render( scene, camera );\n\t\t *\n\t\t * }\n\t\t */\n\t\tthis.autoClear = renderer.autoClear;\n\t\tthis.domElement = renderer.domElement;\n\t\tthis.shadowMap = renderer.shadowMap;\n\n\t\tthis.clear = function ( color, depth, stencil ) {\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn renderer.getPixelRatio();\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\trenderer.setPixelRatio( value );\n\n\t\t};\n\n\t\tthis.getSize = function ( target ) {\n\n\t\t\treturn renderer.getSize( target );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\t\trenderer.setSize( width, height, updateStyle );\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\trenderer.setViewport( x, y, width, height );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\trenderer.setScissor( x, y, width, height );\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\trenderer.setScissorTest( boolean );\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t};\n\n\t}\n\n}\n\nexport { OutlineEffect };\n", "import {\n\tLinearFilter,\n\tMesh,\n\tNearestFilter,\n\tOrthographicCamera,\n\tPlaneGeometry,\n\tRGBAFormat,\n\tScene,\n\tShaderMaterial,\n\tStereoCamera,\n\tWebGLRenderTarget\n} from 'three';\n\nclass ParallaxBarrierEffect {\n\n\tconstructor( renderer ) {\n\n\t\tconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\tconst _scene = new Scene();\n\n\t\tconst _stereo = new StereoCamera();\n\n\t\tconst _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\tconst _renderTargetL = new WebGLRenderTarget( 512, 512, _params );\n\t\tconst _renderTargetR = new WebGLRenderTarget( 512, 512, _params );\n\n\t\tconst _material = new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\n\t\t\t\t'mapLeft': { value: _renderTargetL.texture },\n\t\t\t\t'mapRight': { value: _renderTargetR.texture }\n\n\t\t\t},\n\n\t\t\tvertexShader: [\n\n\t\t\t\t'varying vec2 vUv;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvUv = vec2( uv.x, uv.y );',\n\t\t\t\t'\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ),\n\n\t\t\tfragmentShader: [\n\n\t\t\t\t'uniform sampler2D mapLeft;',\n\t\t\t\t'uniform sampler2D mapRight;',\n\t\t\t\t'varying vec2 vUv;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvec2 uv = vUv;',\n\n\t\t\t\t'\tif ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {',\n\n\t\t\t\t'\t\tgl_FragColor = texture2D( mapLeft, uv );',\n\n\t\t\t\t'\t} else {',\n\n\t\t\t\t'\t\tgl_FragColor = texture2D( mapRight, uv );',\n\n\t\t\t\t'\t}',\n\n\t\t\t\t'\t#include ',\n\t\t\t\t'\t#include ',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' )\n\n\t\t} );\n\n\t\tconst mesh = new Mesh( new PlaneGeometry( 2, 2 ), _material );\n\t\t_scene.add( mesh );\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\trenderer.setSize( width, height );\n\n\t\t\tconst pixelRatio = renderer.getPixelRatio();\n\n\t\t\t_renderTargetL.setSize( width * pixelRatio, height * pixelRatio );\n\t\t\t_renderTargetR.setSize( width * pixelRatio, height * pixelRatio );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_stereo.update( camera );\n\n\t\t\trenderer.setRenderTarget( _renderTargetL );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\t\trenderer.setRenderTarget( _renderTargetR );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.render( _scene, _camera );\n\n\t\t};\n\n\t}\n\n}\n\nexport { ParallaxBarrierEffect };\n", "import {\n\tPerspectiveCamera,\n\tQuaternion,\n\tVector3\n} from 'three';\n\n/**\n * peppers ghost effect based on http://www.instructables.com/id/Reflective-Prism/?ALLSTEPS\n */\n\nclass PeppersGhostEffect {\n\n\tconstructor( renderer ) {\n\n\t\tconst scope = this;\n\n\t\tscope.cameraDistance = 15;\n\t\tscope.reflectFromAbove = false;\n\n\t\t// Internals\n\t\tlet _halfWidth, _width, _height;\n\n\t\tconst _cameraF = new PerspectiveCamera(); //front\n\t\tconst _cameraB = new PerspectiveCamera(); //back\n\t\tconst _cameraL = new PerspectiveCamera(); //left\n\t\tconst _cameraR = new PerspectiveCamera(); //right\n\n\t\tconst _position = new Vector3();\n\t\tconst _quaternion = new Quaternion();\n\t\tconst _scale = new Vector3();\n\n\t\t// Initialization\n\t\trenderer.autoClear = false;\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_halfWidth = width / 2;\n\t\t\tif ( width < height ) {\n\n\t\t\t\t_width = width / 3;\n\t\t\t\t_height = width / 3;\n\n\t\t\t} else {\n\n\t\t\t\t_width = height / 3;\n\t\t\t\t_height = height / 3;\n\n\t\t\t}\n\n\t\t\trenderer.setSize( width, height );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tcamera.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t\t// front\n\t\t\t_cameraF.position.copy( _position );\n\t\t\t_cameraF.quaternion.copy( _quaternion );\n\t\t\t_cameraF.translateZ( scope.cameraDistance );\n\t\t\t_cameraF.lookAt( scene.position );\n\n\t\t\t// back\n\t\t\t_cameraB.position.copy( _position );\n\t\t\t_cameraB.quaternion.copy( _quaternion );\n\t\t\t_cameraB.translateZ( - ( scope.cameraDistance ) );\n\t\t\t_cameraB.lookAt( scene.position );\n\t\t\t_cameraB.rotation.z += 180 * ( Math.PI / 180 );\n\n\t\t\t// left\n\t\t\t_cameraL.position.copy( _position );\n\t\t\t_cameraL.quaternion.copy( _quaternion );\n\t\t\t_cameraL.translateX( - ( scope.cameraDistance ) );\n\t\t\t_cameraL.lookAt( scene.position );\n\t\t\t_cameraL.rotation.x += 90 * ( Math.PI / 180 );\n\n\t\t\t// right\n\t\t\t_cameraR.position.copy( _position );\n\t\t\t_cameraR.quaternion.copy( _quaternion );\n\t\t\t_cameraR.translateX( scope.cameraDistance );\n\t\t\t_cameraR.lookAt( scene.position );\n\t\t\t_cameraR.rotation.x += 90 * ( Math.PI / 180 );\n\n\n\t\t\trenderer.clear();\n\t\t\trenderer.setScissorTest( true );\n\n\t\t\trenderer.setScissor( _halfWidth - ( _width / 2 ), ( _height * 2 ), _width, _height );\n\t\t\trenderer.setViewport( _halfWidth - ( _width / 2 ), ( _height * 2 ), _width, _height );\n\n\t\t\tif ( scope.reflectFromAbove ) {\n\n\t\t\t\trenderer.render( scene, _cameraB );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( scene, _cameraF );\n\n\t\t\t}\n\n\t\t\trenderer.setScissor( _halfWidth - ( _width / 2 ), 0, _width, _height );\n\t\t\trenderer.setViewport( _halfWidth - ( _width / 2 ), 0, _width, _height );\n\n\t\t\tif ( scope.reflectFromAbove ) {\n\n\t\t\t\trenderer.render( scene, _cameraF );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( scene, _cameraB );\n\n\t\t\t}\n\n\t\t\trenderer.setScissor( _halfWidth - ( _width / 2 ) - _width, _height, _width, _height );\n\t\t\trenderer.setViewport( _halfWidth - ( _width / 2 ) - _width, _height, _width, _height );\n\n\t\t\tif ( scope.reflectFromAbove ) {\n\n\t\t\t\trenderer.render( scene, _cameraR );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( scene, _cameraL );\n\n\t\t\t}\n\n\t\t\trenderer.setScissor( _halfWidth + ( _width / 2 ), _height, _width, _height );\n\t\t\trenderer.setViewport( _halfWidth + ( _width / 2 ), _height, _width, _height );\n\n\t\t\tif ( scope.reflectFromAbove ) {\n\n\t\t\t\trenderer.render( scene, _cameraL );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( scene, _cameraR );\n\n\t\t\t}\n\n\t\t\trenderer.setScissorTest( false );\n\n\t\t};\n\n\t}\n\n}\n\nexport { PeppersGhostEffect };\n", "import {\n\tStereoCamera,\n\tVector2\n} from 'three';\n\nclass StereoEffect {\n\n\tconstructor( renderer ) {\n\n\t\tconst _stereo = new StereoCamera();\n\t\t_stereo.aspect = 0.5;\n\t\tconst size = new Vector2();\n\n\t\tthis.setEyeSeparation = function ( eyeSep ) {\n\n\t\t\t_stereo.eyeSep = eyeSep;\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\trenderer.setSize( width, height );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_stereo.update( camera );\n\n\t\t\trenderer.getSize( size );\n\n\t\t\tif ( renderer.autoClear ) renderer.clear();\n\t\t\trenderer.setScissorTest( true );\n\n\t\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\t\trenderer.setScissorTest( false );\n\n\t\t};\n\n\t}\n\n}\n\nexport { StereoEffect };\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tMesh,\n\tMeshLambertMaterial,\n\tMeshStandardMaterial,\n\tPointLight,\n\tScene,\n} from 'three';\n\nclass DebugEnvironment extends Scene {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tconst geometry = new BoxGeometry();\n\t\tgeometry.deleteAttribute( 'uv' );\n\t\tconst roomMaterial = new MeshStandardMaterial( { metalness: 0, side: BackSide } );\n\t\tconst room = new Mesh( geometry, roomMaterial );\n\t\troom.scale.setScalar( 10 );\n\t\tthis.add( room );\n\n\t\tconst mainLight = new PointLight( 0xffffff, 50, 0, 2 );\n\t\tthis.add( mainLight );\n\n\t\tconst material1 = new MeshLambertMaterial( { color: 0xff0000, emissive: 0xffffff, emissiveIntensity: 10 } );\n\n\t\tconst light1 = new Mesh( geometry, material1 );\n\t\tlight1.position.set( - 5, 2, 0 );\n\t\tlight1.scale.set( 0.1, 1, 1 );\n\t\tthis.add( light1 );\n\n\t\tconst material2 = new MeshLambertMaterial( { color: 0x00ff00, emissive: 0xffffff, emissiveIntensity: 10 } );\n\n\t\tconst light2 = new Mesh( geometry, material2 );\n\t\tlight2.position.set( 0, 5, 0 );\n\t\tlight2.scale.set( 1, 0.1, 1 );\n\t\tthis.add( light2 );\n\n\t\tconst material3 = new MeshLambertMaterial( { color: 0x0000ff, emissive: 0xffffff, emissiveIntensity: 10 } );\n\n\t\tconst light3 = new Mesh( geometry, material3 );\n\t\tlight3.position.set( 2, 1, 5 );\n\t\tlight3.scale.set( 1.5, 2, 0.1 );\n\t\tthis.add( light3 );\n\n\t}\n\n}\n\nexport { DebugEnvironment };\n", "/**\n * https://github.com/google/model-viewer/blob/master/packages/model-viewer/src/three-components/EnvironmentScene.ts\n */\n\nimport {\n \tBackSide,\n \tBoxGeometry,\n \tMesh,\n\tMeshBasicMaterial,\n \tMeshStandardMaterial,\n \tPointLight,\n \tScene,\n} from 'three';\n\nclass RoomEnvironment extends Scene {\n\n\tconstructor( renderer = null ) {\n\n\t\tsuper();\n\n\t\tconst geometry = new BoxGeometry();\n\t\tgeometry.deleteAttribute( 'uv' );\n\n\t\tconst roomMaterial = new MeshStandardMaterial( { side: BackSide } );\n\t\tconst boxMaterial = new MeshStandardMaterial();\n\n\t\tconst mainLight = new PointLight( 0xffffff, 900, 28, 2 );\n\t\tmainLight.position.set( 0.418, 16.199, 0.300 );\n\t\tthis.add( mainLight );\n\n\t\tconst room = new Mesh( geometry, roomMaterial );\n\t\troom.position.set( - 0.757, 13.219, 0.717 );\n\t\troom.scale.set( 31.713, 28.305, 28.591 );\n\t\tthis.add( room );\n\n\t\tconst box1 = new Mesh( geometry, boxMaterial );\n\t\tbox1.position.set( - 10.906, 2.009, 1.846 );\n\t\tbox1.rotation.set( 0, - 0.195, 0 );\n\t\tbox1.scale.set( 2.328, 7.905, 4.651 );\n\t\tthis.add( box1 );\n\n\t\tconst box2 = new Mesh( geometry, boxMaterial );\n\t\tbox2.position.set( - 5.607, - 0.754, - 0.758 );\n\t\tbox2.rotation.set( 0, 0.994, 0 );\n\t\tbox2.scale.set( 1.970, 1.534, 3.955 );\n\t\tthis.add( box2 );\n\n\t\tconst box3 = new Mesh( geometry, boxMaterial );\n\t\tbox3.position.set( 6.167, 0.857, 7.803 );\n\t\tbox3.rotation.set( 0, 0.561, 0 );\n\t\tbox3.scale.set( 3.927, 6.285, 3.687 );\n\t\tthis.add( box3 );\n\n\t\tconst box4 = new Mesh( geometry, boxMaterial );\n\t\tbox4.position.set( - 2.017, 0.018, 6.124 );\n\t\tbox4.rotation.set( 0, 0.333, 0 );\n\t\tbox4.scale.set( 2.002, 4.566, 2.064 );\n\t\tthis.add( box4 );\n\n\t\tconst box5 = new Mesh( geometry, boxMaterial );\n\t\tbox5.position.set( 2.291, - 0.756, - 2.621 );\n\t\tbox5.rotation.set( 0, - 0.286, 0 );\n\t\tbox5.scale.set( 1.546, 1.552, 1.496 );\n\t\tthis.add( box5 );\n\n\t\tconst box6 = new Mesh( geometry, boxMaterial );\n\t\tbox6.position.set( - 2.193, - 0.369, - 5.547 );\n\t\tbox6.rotation.set( 0, 0.516, 0 );\n\t\tbox6.scale.set( 3.875, 3.487, 2.986 );\n\t\tthis.add( box6 );\n\n\n\t\t// -x right\n\t\tconst light1 = new Mesh( geometry, createAreaLightMaterial( 50 ) );\n\t\tlight1.position.set( - 16.116, 14.37, 8.208 );\n\t\tlight1.scale.set( 0.1, 2.428, 2.739 );\n\t\tthis.add( light1 );\n\n\t\t// -x left\n\t\tconst light2 = new Mesh( geometry, createAreaLightMaterial( 50 ) );\n\t\tlight2.position.set( - 16.109, 18.021, - 8.207 );\n\t\tlight2.scale.set( 0.1, 2.425, 2.751 );\n\t\tthis.add( light2 );\n\n\t\t// +x\n\t\tconst light3 = new Mesh( geometry, createAreaLightMaterial( 17 ) );\n\t\tlight3.position.set( 14.904, 12.198, - 1.832 );\n\t\tlight3.scale.set( 0.15, 4.265, 6.331 );\n\t\tthis.add( light3 );\n\n\t\t// +z\n\t\tconst light4 = new Mesh( geometry, createAreaLightMaterial( 43 ) );\n\t\tlight4.position.set( - 0.462, 8.89, 14.520 );\n\t\tlight4.scale.set( 4.38, 5.441, 0.088 );\n\t\tthis.add( light4 );\n\n\t\t// -z\n\t\tconst light5 = new Mesh( geometry, createAreaLightMaterial( 20 ) );\n\t\tlight5.position.set( 3.235, 11.486, - 12.541 );\n\t\tlight5.scale.set( 2.5, 2.0, 0.1 );\n\t\tthis.add( light5 );\n\n\t\t// +y\n\t\tconst light6 = new Mesh( geometry, createAreaLightMaterial( 100 ) );\n\t\tlight6.position.set( 0.0, 20.0, 0.0 );\n\t\tlight6.scale.set( 1.0, 0.1, 1.0 );\n\t\tthis.add( light6 );\n\n\t}\n\n\tdispose() {\n\n\t\tconst resources = new Set();\n\n\t\tthis.traverse( ( object ) => {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tresources.add( object.geometry );\n\t\t\t\tresources.add( object.material );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tfor ( const resource of resources ) {\n\n\t\t\tresource.dispose();\n\n\t\t}\n\n\t}\n\n}\n\nfunction createAreaLightMaterial( intensity ) {\n\n\tconst material = new MeshBasicMaterial();\n\tmaterial.color.setScalar( intensity );\n\treturn material;\n\n}\n\nexport { RoomEnvironment };\n", "import { Color } from 'three';\n\n/**\n * Export draco compressed files from threejs geometry objects.\n *\n * Draco files are compressed and usually are smaller than conventional 3D file formats.\n *\n * The exporter receives a options object containing\n * - decodeSpeed, indicates how to tune the encoder regarding decode speed (0 gives better speed but worst quality)\n * - encodeSpeed, indicates how to tune the encoder parameters (0 gives better speed but worst quality)\n * - encoderMethod\n * - quantization, indicates the presision of each type of data stored in the draco file in the order (POSITION, NORMAL, COLOR, TEX_COORD, GENERIC)\n * - exportUvs\n * - exportNormals\n * - exportColor\n */\n\n/* global DracoEncoderModule */\n\nclass DRACOExporter {\n\n\tparse( object, options = {} ) {\n\n\t\toptions = Object.assign( {\n\t\t\tdecodeSpeed: 5,\n\t\t\tencodeSpeed: 5,\n\t\t\tencoderMethod: DRACOExporter.MESH_EDGEBREAKER_ENCODING,\n\t\t\tquantization: [ 16, 8, 8, 8, 8 ],\n\t\t\texportUvs: true,\n\t\t\texportNormals: true,\n\t\t\texportColor: false,\n\t\t}, options );\n\n\t\tif ( DracoEncoderModule === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOExporter: required the draco_encoder to work.' );\n\n\t\t}\n\n\t\tconst geometry = object.geometry;\n\n\t\tconst dracoEncoder = DracoEncoderModule();\n\t\tconst encoder = new dracoEncoder.Encoder();\n\t\tlet builder;\n\t\tlet dracoObject;\n\n\t\tif ( object.isMesh === true ) {\n\n\t\t\tbuilder = new dracoEncoder.MeshBuilder();\n\t\t\tdracoObject = new dracoEncoder.Mesh();\n\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tbuilder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array );\n\n\t\t\tconst faces = geometry.getIndex();\n\n\t\t\tif ( faces !== null ) {\n\n\t\t\t\tbuilder.AddFacesToMesh( dracoObject, faces.count / 3, faces.array );\n\n\t\t\t} else {\n\n\t\t\t\tconst faces = new ( vertices.count > 65535 ? Uint32Array : Uint16Array )( vertices.count );\n\n\t\t\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\t\t\tfaces[ i ] = i;\n\n\t\t\t\t}\n\n\t\t\t\tbuilder.AddFacesToMesh( dracoObject, vertices.count, faces );\n\n\t\t\t}\n\n\t\t\tif ( options.exportNormals === true ) {\n\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\n\t\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\t\tbuilder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.NORMAL, normals.count, normals.itemSize, normals.array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( options.exportUvs === true ) {\n\n\t\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\n\t\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\t\tbuilder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.TEX_COORD, uvs.count, uvs.itemSize, uvs.array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( options.exportColor === true ) {\n\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\n\t\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\t\tconst array = createVertexColorSRGBArray( colors );\n\n\t\t\t\t\tbuilder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints === true ) {\n\n\t\t\tbuilder = new dracoEncoder.PointCloudBuilder();\n\t\t\tdracoObject = new dracoEncoder.PointCloud();\n\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tbuilder.AddFloatAttribute( dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array );\n\n\t\t\tif ( options.exportColor === true ) {\n\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\n\t\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\t\tconst array = createVertexColorSRGBArray( colors );\n\n\t\t\t\t\tbuilder.AddFloatAttribute( dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'DRACOExporter: Unsupported object type.' );\n\n\t\t}\n\n\t\t//Compress using draco encoder\n\n\t\tconst encodedData = new dracoEncoder.DracoInt8Array();\n\n\t\t//Sets the desired encoding and decoding speed for the given options from 0 (slowest speed, but the best compression) to 10 (fastest, but the worst compression).\n\n\t\tconst encodeSpeed = ( options.encodeSpeed !== undefined ) ? options.encodeSpeed : 5;\n\t\tconst decodeSpeed = ( options.decodeSpeed !== undefined ) ? options.decodeSpeed : 5;\n\n\t\tencoder.SetSpeedOptions( encodeSpeed, decodeSpeed );\n\n\t\t// Sets the desired encoding method for a given geometry.\n\n\t\tif ( options.encoderMethod !== undefined ) {\n\n\t\t\tencoder.SetEncodingMethod( options.encoderMethod );\n\n\t\t}\n\n\t\t// Sets the quantization (number of bits used to represent) compression options for a named attribute.\n\t\t// The attribute values will be quantized in a box defined by the maximum extent of the attribute values.\n\t\tif ( options.quantization !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < 5; i ++ ) {\n\n\t\t\t\tif ( options.quantization[ i ] !== undefined ) {\n\n\t\t\t\t\tencoder.SetAttributeQuantization( i, options.quantization[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet length;\n\n\t\tif ( object.isMesh === true ) {\n\n\t\t\tlength = encoder.EncodeMeshToDracoBuffer( dracoObject, encodedData );\n\n\t\t} else {\n\n\t\t\tlength = encoder.EncodePointCloudToDracoBuffer( dracoObject, true, encodedData );\n\n\t\t}\n\n\t\tdracoEncoder.destroy( dracoObject );\n\n\t\tif ( length === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOExporter: Draco encoding failed.' );\n\n\t\t}\n\n\t\t//Copy encoded data to buffer.\n\t\tconst outputData = new Int8Array( new ArrayBuffer( length ) );\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\toutputData[ i ] = encodedData.GetValue( i );\n\n\t\t}\n\n\t\tdracoEncoder.destroy( encodedData );\n\t\tdracoEncoder.destroy( encoder );\n\t\tdracoEncoder.destroy( builder );\n\n\t\treturn outputData;\n\n\t}\n\n}\n\nfunction createVertexColorSRGBArray( attribute ) {\n\n\t// While .drc files do not specify colorspace, the only 'official' tooling\n\t// is PLY and OBJ converters, which use sRGB. We'll assume sRGB is expected\n\t// for .drc files, but note that Draco buffers embedded in glTF files will\n\t// be Linear-sRGB instead.\n\n\tconst _color = new Color();\n\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst array = new Float32Array( count * itemSize );\n\n\tfor ( let i = 0, il = count; i < il; i ++ ) {\n\n\t\t_color.fromBufferAttribute( attribute, i ).convertLinearToSRGB();\n\n\t\tarray[ i * itemSize ] = _color.r;\n\t\tarray[ i * itemSize + 1 ] = _color.g;\n\t\tarray[ i * itemSize + 2 ] = _color.b;\n\n\t\tif ( itemSize === 4 ) {\n\n\t\t\tarray[ i * itemSize + 3 ] = attribute.getW( i );\n\n\t\t}\n\n\t}\n\n\treturn array;\n\n}\n\n// Encoder methods\n\nDRACOExporter.MESH_EDGEBREAKER_ENCODING = 1;\nDRACOExporter.MESH_SEQUENTIAL_ENCODING = 0;\n\n// Geometry type\n\nDRACOExporter.POINT_CLOUD = 0;\nDRACOExporter.TRIANGULAR_MESH = 1;\n\n// Attribute type\n\nDRACOExporter.INVALID = - 1;\nDRACOExporter.POSITION = 0;\nDRACOExporter.NORMAL = 1;\nDRACOExporter.COLOR = 2;\nDRACOExporter.TEX_COORD = 3;\nDRACOExporter.GENERIC = 4;\n\nexport { DRACOExporter };\n", "/*!\nfflate - fast JavaScript compression/decompression\n\nLicensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE\nversion 0.8.2\n*/\n\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data.length) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush();\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function () { w.postMessage([]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n */\n Deflate.prototype.flush = function () {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n */\n Gzip.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n */\n Zlib.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n", "/**\n * @author sciecode / https://github.com/sciecode\n *\n * EXR format references:\n * \thttps://www.openexr.com/documentation/openexrfilelayout.pdf\n */\n\nimport {\n\tFloatType,\n\tHalfFloatType,\n\tRGBAFormat,\n\tDataUtils,\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\nconst textEncoder = new TextEncoder();\n\nconst NO_COMPRESSION = 0;\nconst ZIPS_COMPRESSION = 2;\nconst ZIP_COMPRESSION = 3;\n\nclass EXRExporter {\n\n\tparse( arg1, arg2, arg3 ) {\n\n\t\tif ( ! arg1 || ! ( arg1.isWebGLRenderer || arg1.isDataTexture ) ) {\n\n\t\t\tthrow Error( 'EXRExporter.parse: Unsupported first parameter, expected instance of WebGLRenderer or DataTexture.' );\n\n\t\t} else if ( arg1.isWebGLRenderer ) {\n\n\t\t\tconst renderer = arg1, renderTarget = arg2, options = arg3;\n\n\t\t\tsupportedRTT( renderTarget );\n\n\t\t\tconst info = buildInfoRTT( renderTarget, options ),\n\t\t\t\tdataBuffer = getPixelData( renderer, renderTarget, info ),\n\t\t\t\trawContentBuffer = reorganizeDataBuffer( dataBuffer, info ),\n\t\t\t\tchunks = compressData( rawContentBuffer, info );\n\n\t\t\treturn fillData( chunks, info );\n\n\t\t} else if ( arg1.isDataTexture ) {\n\n\t\t\tconst texture = arg1, options = arg2;\n\n\t\t\tsupportedDT( texture );\n\n\t\t\tconst info = buildInfoDT( texture, options ),\n\t\t\t\tdataBuffer = texture.image.data,\n\t\t\t\trawContentBuffer = reorganizeDataBuffer( dataBuffer, info ),\n\t\t\t\tchunks = compressData( rawContentBuffer, info );\n\n\t\t\treturn fillData( chunks, info );\n\n\t\t}\n\n\t}\n\n}\n\nfunction supportedRTT( renderTarget ) {\n\n\tif ( ! renderTarget || ! renderTarget.isWebGLRenderTarget ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported second parameter, expected instance of WebGLRenderTarget.' );\n\n\t}\n\n\tif ( renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported render target type, expected instance of WebGLRenderTarget.' );\n\n\t}\n\n\tif ( renderTarget.texture.type !== FloatType && renderTarget.texture.type !== HalfFloatType ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported WebGLRenderTarget texture type.' );\n\n\t}\n\n\tif ( renderTarget.texture.format !== RGBAFormat ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported WebGLRenderTarget texture format, expected RGBAFormat.' );\n\n\t}\n\n}\n\nfunction supportedDT( texture ) {\n\n\tif ( texture.type !== FloatType && texture.type !== HalfFloatType ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported DataTexture texture type.' );\n\n\t}\n\n\tif ( texture.format !== RGBAFormat ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported DataTexture texture format, expected RGBAFormat.' );\n\n\t}\n\n\tif ( ! texture.image.data ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Invalid DataTexture image data.' );\n\n\t}\n\n\tif ( texture.type === FloatType && texture.image.data.constructor.name !== 'Float32Array' ) {\n\n\t\tthrow Error( 'EXRExporter.parse: DataTexture image data doesn\\'t match type, expected \\'Float32Array\\'.' );\n\n\t}\n\n\tif ( texture.type === HalfFloatType && texture.image.data.constructor.name !== 'Uint16Array' ) {\n\n\t\tthrow Error( 'EXRExporter.parse: DataTexture image data doesn\\'t match type, expected \\'Uint16Array\\'.' );\n\n\t}\n\n}\n\nfunction buildInfoRTT( renderTarget, options = {} ) {\n\n\tconst compressionSizes = {\n\t\t0: 1,\n\t\t2: 1,\n\t\t3: 16\n\t};\n\n\tconst WIDTH = renderTarget.width,\n\t\tHEIGHT = renderTarget.height,\n\t\tTYPE = renderTarget.texture.type,\n\t\tFORMAT = renderTarget.texture.format,\n\t\tCOMPRESSION = ( options.compression !== undefined ) ? options.compression : ZIP_COMPRESSION,\n\t\tEXPORTER_TYPE = ( options.type !== undefined ) ? options.type : HalfFloatType,\n\t\tOUT_TYPE = ( EXPORTER_TYPE === FloatType ) ? 2 : 1,\n\t\tCOMPRESSION_SIZE = compressionSizes[ COMPRESSION ],\n\t\tNUM_CHANNELS = 4;\n\n\treturn {\n\t\twidth: WIDTH,\n\t\theight: HEIGHT,\n\t\ttype: TYPE,\n\t\tformat: FORMAT,\n\t\tcompression: COMPRESSION,\n\t\tblockLines: COMPRESSION_SIZE,\n\t\tdataType: OUT_TYPE,\n\t\tdataSize: 2 * OUT_TYPE,\n\t\tnumBlocks: Math.ceil( HEIGHT / COMPRESSION_SIZE ),\n\t\tnumInputChannels: 4,\n\t\tnumOutputChannels: NUM_CHANNELS,\n\t};\n\n}\n\nfunction buildInfoDT( texture, options = {} ) {\n\n\tconst compressionSizes = {\n\t\t0: 1,\n\t\t2: 1,\n\t\t3: 16\n\t};\n\n\tconst WIDTH = texture.image.width,\n\t\tHEIGHT = texture.image.height,\n\t\tTYPE = texture.type,\n\t\tFORMAT = texture.format,\n\t\tCOMPRESSION = ( options.compression !== undefined ) ? options.compression : ZIP_COMPRESSION,\n\t\tEXPORTER_TYPE = ( options.type !== undefined ) ? options.type : HalfFloatType,\n\t\tOUT_TYPE = ( EXPORTER_TYPE === FloatType ) ? 2 : 1,\n\t\tCOMPRESSION_SIZE = compressionSizes[ COMPRESSION ],\n\t\tNUM_CHANNELS = 4;\n\n\treturn {\n\t\twidth: WIDTH,\n\t\theight: HEIGHT,\n\t\ttype: TYPE,\n\t\tformat: FORMAT,\n\t\tcompression: COMPRESSION,\n\t\tblockLines: COMPRESSION_SIZE,\n\t\tdataType: OUT_TYPE,\n\t\tdataSize: 2 * OUT_TYPE,\n\t\tnumBlocks: Math.ceil( HEIGHT / COMPRESSION_SIZE ),\n\t\tnumInputChannels: 4,\n\t\tnumOutputChannels: NUM_CHANNELS,\n\t};\n\n}\n\nfunction getPixelData( renderer, rtt, info ) {\n\n\tlet dataBuffer;\n\n\tif ( info.type === FloatType ) {\n\n\t\tdataBuffer = new Float32Array( info.width * info.height * info.numInputChannels );\n\n\t} else {\n\n\t\tdataBuffer = new Uint16Array( info.width * info.height * info.numInputChannels );\n\n\t}\n\n\trenderer.readRenderTargetPixels( rtt, 0, 0, info.width, info.height, dataBuffer );\n\n\treturn dataBuffer;\n\n}\n\nfunction reorganizeDataBuffer( inBuffer, info ) {\n\n\tconst w = info.width,\n\t\th = info.height,\n\t\tdec = { r: 0, g: 0, b: 0, a: 0 },\n\t\toffset = { value: 0 },\n\t\tcOffset = ( info.numOutputChannels == 4 ) ? 1 : 0,\n\t\tgetValue = ( info.type == FloatType ) ? getFloat32 : getFloat16,\n\t\tsetValue = ( info.dataType == 1 ) ? setFloat16 : setFloat32,\n\t\toutBuffer = new Uint8Array( info.width * info.height * info.numOutputChannels * info.dataSize ),\n\t\tdv = new DataView( outBuffer.buffer );\n\n\tfor ( let y = 0; y < h; ++ y ) {\n\n\t\tfor ( let x = 0; x < w; ++ x ) {\n\n\t\t\tconst i = y * w * 4 + x * 4;\n\n\t\t\tconst r = getValue( inBuffer, i );\n\t\t\tconst g = getValue( inBuffer, i + 1 );\n\t\t\tconst b = getValue( inBuffer, i + 2 );\n\t\t\tconst a = getValue( inBuffer, i + 3 );\n\n\t\t\tconst line = ( h - y - 1 ) * w * ( 3 + cOffset ) * info.dataSize;\n\n\t\t\tdecodeLinear( dec, r, g, b, a );\n\n\t\t\toffset.value = line + x * info.dataSize;\n\t\t\tsetValue( dv, dec.a, offset );\n\n\t\t\toffset.value = line + ( cOffset ) * w * info.dataSize + x * info.dataSize;\n\t\t\tsetValue( dv, dec.b, offset );\n\n\t\t\toffset.value = line + ( 1 + cOffset ) * w * info.dataSize + x * info.dataSize;\n\t\t\tsetValue( dv, dec.g, offset );\n\n\t\t\toffset.value = line + ( 2 + cOffset ) * w * info.dataSize + x * info.dataSize;\n\t\t\tsetValue( dv, dec.r, offset );\n\n\t\t}\n\n\t}\n\n\treturn outBuffer;\n\n}\n\nfunction compressData( inBuffer, info ) {\n\n\tlet compress,\n\t\ttmpBuffer,\n\t\tsum = 0;\n\n\tconst chunks = { data: new Array(), totalSize: 0 },\n\t\tsize = info.width * info.numOutputChannels * info.blockLines * info.dataSize;\n\n\tswitch ( info.compression ) {\n\n\t\tcase 0:\n\t\t\tcompress = compressNONE;\n\t\t\tbreak;\n\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tcompress = compressZIP;\n\t\t\tbreak;\n\n\t}\n\n\tif ( info.compression !== 0 ) {\n\n\t\ttmpBuffer = new Uint8Array( size );\n\n\t}\n\n\tfor ( let i = 0; i < info.numBlocks; ++ i ) {\n\n\t\tconst arr = inBuffer.subarray( size * i, size * ( i + 1 ) );\n\n\t\tconst block = compress( arr, tmpBuffer );\n\n\t\tsum += block.length;\n\n\t\tchunks.data.push( { dataChunk: block, size: block.length } );\n\n\t}\n\n\tchunks.totalSize = sum;\n\n\treturn chunks;\n\n}\n\nfunction compressNONE( data ) {\n\n\treturn data;\n\n}\n\nfunction compressZIP( data, tmpBuffer ) {\n\n\t//\n\t// Reorder the pixel data.\n\t//\n\n\tlet t1 = 0,\n\t\tt2 = Math.floor( ( data.length + 1 ) / 2 ),\n\t\ts = 0;\n\n\tconst stop = data.length - 1;\n\n\twhile ( true ) {\n\n\t\tif ( s > stop ) break;\n\t\ttmpBuffer[ t1 ++ ] = data[ s ++ ];\n\n\t\tif ( s > stop ) break;\n\t\ttmpBuffer[ t2 ++ ] = data[ s ++ ];\n\n\t}\n\n\t//\n\t// Predictor.\n\t//\n\n\tlet p = tmpBuffer[ 0 ];\n\n\tfor ( let t = 1; t < tmpBuffer.length; t ++ ) {\n\n\t\tconst d = tmpBuffer[ t ] - p + ( 128 + 256 );\n\t\tp = tmpBuffer[ t ];\n\t\ttmpBuffer[ t ] = d;\n\n\t}\n\n\tconst deflate = fflate.zlibSync( tmpBuffer );\n\n\treturn deflate;\n\n}\n\nfunction fillHeader( outBuffer, chunks, info ) {\n\n\tconst offset = { value: 0 };\n\tconst dv = new DataView( outBuffer.buffer );\n\n\tsetUint32( dv, 20000630, offset ); // magic\n\tsetUint32( dv, 2, offset ); // mask\n\n\t// = HEADER =\n\n\tsetString( dv, 'compression', offset );\n\tsetString( dv, 'compression', offset );\n\tsetUint32( dv, 1, offset );\n\tsetUint8( dv, info.compression, offset );\n\n\tsetString( dv, 'screenWindowCenter', offset );\n\tsetString( dv, 'v2f', offset );\n\tsetUint32( dv, 8, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, 0, offset );\n\n\tsetString( dv, 'screenWindowWidth', offset );\n\tsetString( dv, 'float', offset );\n\tsetUint32( dv, 4, offset );\n\tsetFloat32( dv, 1.0, offset );\n\n\tsetString( dv, 'pixelAspectRatio', offset );\n\tsetString( dv, 'float', offset );\n\tsetUint32( dv, 4, offset );\n\tsetFloat32( dv, 1.0, offset );\n\n\tsetString( dv, 'lineOrder', offset );\n\tsetString( dv, 'lineOrder', offset );\n\tsetUint32( dv, 1, offset );\n\tsetUint8( dv, 0, offset );\n\n\tsetString( dv, 'dataWindow', offset );\n\tsetString( dv, 'box2i', offset );\n\tsetUint32( dv, 16, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, info.width - 1, offset );\n\tsetUint32( dv, info.height - 1, offset );\n\n\tsetString( dv, 'displayWindow', offset );\n\tsetString( dv, 'box2i', offset );\n\tsetUint32( dv, 16, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, info.width - 1, offset );\n\tsetUint32( dv, info.height - 1, offset );\n\n\tsetString( dv, 'channels', offset );\n\tsetString( dv, 'chlist', offset );\n\tsetUint32( dv, info.numOutputChannels * 18 + 1, offset );\n\n\tsetString( dv, 'A', offset );\n\tsetUint32( dv, info.dataType, offset );\n\toffset.value += 4;\n\tsetUint32( dv, 1, offset );\n\tsetUint32( dv, 1, offset );\n\n\tsetString( dv, 'B', offset );\n\tsetUint32( dv, info.dataType, offset );\n\toffset.value += 4;\n\tsetUint32( dv, 1, offset );\n\tsetUint32( dv, 1, offset );\n\n\tsetString( dv, 'G', offset );\n\tsetUint32( dv, info.dataType, offset );\n\toffset.value += 4;\n\tsetUint32( dv, 1, offset );\n\tsetUint32( dv, 1, offset );\n\n\tsetString( dv, 'R', offset );\n\tsetUint32( dv, info.dataType, offset );\n\toffset.value += 4;\n\tsetUint32( dv, 1, offset );\n\tsetUint32( dv, 1, offset );\n\n\tsetUint8( dv, 0, offset );\n\n\t// null-byte\n\tsetUint8( dv, 0, offset );\n\n\t// = OFFSET TABLE =\n\n\tlet sum = offset.value + info.numBlocks * 8;\n\n\tfor ( let i = 0; i < chunks.data.length; ++ i ) {\n\n\t\tsetUint64( dv, sum, offset );\n\n\t\tsum += chunks.data[ i ].size + 8;\n\n\t}\n\n}\n\nfunction fillData( chunks, info ) {\n\n\tconst TableSize = info.numBlocks * 8,\n\t\tHeaderSize = 259 + ( 18 * info.numOutputChannels ), // 259 + 18 * chlist\n\t\toffset = { value: HeaderSize + TableSize },\n\t\toutBuffer = new Uint8Array( HeaderSize + TableSize + chunks.totalSize + info.numBlocks * 8 ),\n\t\tdv = new DataView( outBuffer.buffer );\n\n\tfillHeader( outBuffer, chunks, info );\n\n\tfor ( let i = 0; i < chunks.data.length; ++ i ) {\n\n\t\tconst data = chunks.data[ i ].dataChunk;\n\t\tconst size = chunks.data[ i ].size;\n\n\t\tsetUint32( dv, i * info.blockLines, offset );\n\t\tsetUint32( dv, size, offset );\n\n\t\toutBuffer.set( data, offset.value );\n\t\toffset.value += size;\n\n\t}\n\n\treturn outBuffer;\n\n}\n\nfunction decodeLinear( dec, r, g, b, a ) {\n\n\tdec.r = r;\n\tdec.g = g;\n\tdec.b = b;\n\tdec.a = a;\n\n}\n\n// function decodeSRGB( dec, r, g, b, a ) {\n\n// \tdec.r = r > 0.04045 ? Math.pow( r * 0.9478672986 + 0.0521327014, 2.4 ) : r * 0.0773993808;\n// \tdec.g = g > 0.04045 ? Math.pow( g * 0.9478672986 + 0.0521327014, 2.4 ) : g * 0.0773993808;\n// \tdec.b = b > 0.04045 ? Math.pow( b * 0.9478672986 + 0.0521327014, 2.4 ) : b * 0.0773993808;\n// \tdec.a = a;\n\n// }\n\n\nfunction setUint8( dv, value, offset ) {\n\n\tdv.setUint8( offset.value, value );\n\n\toffset.value += 1;\n\n}\n\nfunction setUint32( dv, value, offset ) {\n\n\tdv.setUint32( offset.value, value, true );\n\n\toffset.value += 4;\n\n}\n\nfunction setFloat16( dv, value, offset ) {\n\n\tdv.setUint16( offset.value, DataUtils.toHalfFloat( value ), true );\n\n\toffset.value += 2;\n\n}\n\nfunction setFloat32( dv, value, offset ) {\n\n\tdv.setFloat32( offset.value, value, true );\n\n\toffset.value += 4;\n\n}\n\nfunction setUint64( dv, value, offset ) {\n\n\tdv.setBigUint64( offset.value, BigInt( value ), true );\n\n\toffset.value += 8;\n\n}\n\nfunction setString( dv, string, offset ) {\n\n\tconst tmp = textEncoder.encode( string + '\\0' );\n\n\tfor ( let i = 0; i < tmp.length; ++ i ) {\n\n\t\tsetUint8( dv, tmp[ i ], offset );\n\n\t}\n\n}\n\nfunction decodeFloat16( binary ) {\n\n\tconst exponent = ( binary & 0x7C00 ) >> 10,\n\t\tfraction = binary & 0x03FF;\n\n\treturn ( binary >> 15 ? - 1 : 1 ) * (\n\t\texponent ?\n\t\t\t(\n\t\t\t\texponent === 0x1F ?\n\t\t\t\t\tfraction ? NaN : Infinity :\n\t\t\t\t\tMath.pow( 2, exponent - 15 ) * ( 1 + fraction / 0x400 )\n\t\t\t) :\n\t\t\t6.103515625e-5 * ( fraction / 0x400 )\n\t);\n\n}\n\nfunction getFloat16( arr, i ) {\n\n\treturn decodeFloat16( arr[ i ] );\n\n}\n\nfunction getFloat32( arr, i ) {\n\n\treturn arr[ i ];\n\n}\n\nexport { EXRExporter, NO_COMPRESSION, ZIP_COMPRESSION, ZIPS_COMPRESSION };\n", "import {\n\tPlaneGeometry,\n\tShaderMaterial,\n\tUniform,\n\tMesh,\n\tPerspectiveCamera,\n\tScene,\n\tWebGLRenderer,\n\tCanvasTexture,\n\tSRGBColorSpace\n} from 'three';\n\nlet _renderer;\nlet fullscreenQuadGeometry;\nlet fullscreenQuadMaterial;\nlet fullscreenQuad;\n\nexport function decompress( texture, maxTextureSize = Infinity, renderer = null ) {\n\n\tif ( ! fullscreenQuadGeometry ) fullscreenQuadGeometry = new PlaneGeometry( 2, 2, 1, 1 );\n\tif ( ! fullscreenQuadMaterial ) fullscreenQuadMaterial = new ShaderMaterial( {\n\t\tuniforms: { blitTexture: new Uniform( texture ) },\n\t\tvertexShader: `\n\t\t\tvarying vec2 vUv;\n\t\t\tvoid main(){\n\t\t\t\tvUv = uv;\n\t\t\t\tgl_Position = vec4(position.xy * 1.0,0.,.999999);\n\t\t\t}`,\n\t\tfragmentShader: `\n\t\t\tuniform sampler2D blitTexture; \n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main(){ \n\t\t\t\tgl_FragColor = vec4(vUv.xy, 0, 1);\n\t\t\t\t\n\t\t\t\t#ifdef IS_SRGB\n\t\t\t\tgl_FragColor = sRGBTransferOETF( texture2D( blitTexture, vUv) );\n\t\t\t\t#else\n\t\t\t\tgl_FragColor = texture2D( blitTexture, vUv);\n\t\t\t\t#endif\n\t\t\t}`\n\t} );\n\n\tfullscreenQuadMaterial.uniforms.blitTexture.value = texture;\n\tfullscreenQuadMaterial.defines.IS_SRGB = texture.colorSpace == SRGBColorSpace;\n\tfullscreenQuadMaterial.needsUpdate = true;\n\n\tif ( ! fullscreenQuad ) {\n\n\t\tfullscreenQuad = new Mesh( fullscreenQuadGeometry, fullscreenQuadMaterial );\n\t\tfullscreenQuad.frustumCulled = false;\n\n\t}\n\n\tconst _camera = new PerspectiveCamera();\n\tconst _scene = new Scene();\n\t_scene.add( fullscreenQuad );\n\n\tif ( renderer === null ) {\n\n\t\trenderer = _renderer = new WebGLRenderer( { antialias: false } );\n\n\t}\n\n\tconst width = Math.min( texture.image.width, maxTextureSize );\n\tconst height = Math.min( texture.image.height, maxTextureSize );\n\n\trenderer.setSize( width, height );\n\trenderer.clear();\n\trenderer.render( _scene, _camera );\n\n\tconst canvas = document.createElement( 'canvas' );\n\tconst context = canvas.getContext( '2d' );\n\n\tcanvas.width = width;\n\tcanvas.height = height;\n\n\tcontext.drawImage( renderer.domElement, 0, 0, width, height );\n\n\tconst readableTexture = new CanvasTexture( canvas );\n\n\treadableTexture.minFilter = texture.minFilter;\n\treadableTexture.magFilter = texture.magFilter;\n\treadableTexture.wrapS = texture.wrapS;\n\treadableTexture.wrapT = texture.wrapT;\n\treadableTexture.name = texture.name;\n\n\tif ( _renderer ) {\n\n\t\t_renderer.forceContextLoss();\n\t\t_renderer.dispose();\n\t\t_renderer = null;\n\n\t}\n\n\treturn readableTexture;\n\n}\n", "import {\n\tBufferAttribute,\n\tClampToEdgeWrapping,\n\tColor,\n\tDoubleSide,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tNoColorSpace,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tMathUtils,\n\tMatrix4,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tPropertyBinding,\n\tRGBAFormat,\n\tRepeatWrapping,\n\tScene,\n\tSource,\n\tSRGBColorSpace,\n\tCompressedTexture,\n\tVector3,\n\tQuaternion,\n\tREVISION\n} from 'three';\nimport { decompress } from './../utils/TextureUtils.js';\n\n\n/**\n * The KHR_mesh_quantization extension allows these extra attribute component types\n *\n * @see https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md#extending-mesh-attributes\n */\nconst KHR_mesh_quantization_ExtraAttrTypes = {\n\tPOSITION: [\n\t\t'byte',\n\t\t'byte normalized',\n\t\t'unsigned byte',\n\t\t'unsigned byte normalized',\n\t\t'short',\n\t\t'short normalized',\n\t\t'unsigned short',\n\t\t'unsigned short normalized',\n\t],\n\tNORMAL: [\n\t\t'byte normalized',\n\t\t'short normalized',\n\t],\n\tTANGENT: [\n\t\t'byte normalized',\n\t\t'short normalized',\n\t],\n\tTEXCOORD: [\n\t\t'byte',\n\t\t'byte normalized',\n\t\t'unsigned byte',\n\t\t'short',\n\t\t'short normalized',\n\t\t'unsigned short',\n\t],\n};\n\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Function} onError Callback on errors\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, onError, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.write( input, onDone, options ).catch( onError );\n\n\t}\n\n\tparseAsync( input, options ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( input, resolve, reject, options );\n\n\t\t} );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tBYTE: 0x1400,\n\tUNSIGNED_BYTE: 0x1401,\n\tSHORT: 0x1402,\n\tUNSIGNED_SHORT: 0x1403,\n\tINT: 0x1404,\n\tUNSIGNED_INT: 0x1405,\n\tFLOAT: 0x1406,\n\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst KHR_MESH_QUANTIZATION = 'KHR_mesh_quantization';\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\nconst DEFAULT_SPECULAR_COLOR = new Color();\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\treturn new TextEncoder().encode( text ).buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Integer} start\n * @param {Integer} count\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\tif ( attribute.normalized === true ) {\n\n\t\t\t\t\tvalue = MathUtils.normalize( value, attribute.array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Integer} bufferSize The size the original buffer.\n * @returns {Integer} new buffer size with required padding.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Integer} paddingByte (Optional)\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nfunction getCanvas() {\n\n\tif ( typeof document === 'undefined' && typeof OffscreenCanvas !== 'undefined' ) {\n\n\t\treturn new OffscreenCanvas( 1, 1 );\n\n\t}\n\n\treturn document.createElement( 'canvas' );\n\n}\n\nfunction getToBlobPromise( canvas, mimeType ) {\n\n\tif ( canvas.toBlob !== undefined ) {\n\n\t\treturn new Promise( ( resolve ) => canvas.toBlob( resolve, mimeType ) );\n\n\t}\n\n\tlet quality;\n\n\t// Blink's implementation of convertToBlob seems to default to a quality level of 100%\n\t// Use the Blink default quality levels of toBlob instead so that file sizes are comparable.\n\tif ( mimeType === 'image/jpeg' ) {\n\n\t\tquality = 0.92;\n\n\t} else if ( mimeType === 'image/webp' ) {\n\n\t\tquality = 0.8;\n\n\t}\n\n\treturn canvas.convertToBlob( {\n\n\t\ttype: mimeType,\n\t\tquality: quality\n\n\t} );\n\n}\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\n\t\tthis.extensionsUsed = {};\n\t\tthis.extensionsRequired = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter r' + REVISION\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tasync write( input, onDone, options = {} ) {\n\n\t\tthis.options = Object.assign( {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tthis.processInput( input );\n\n\t\tawait Promise.all( this.pending );\n\n\t\tconst writer = this;\n\t\tconst buffers = writer.buffers;\n\t\tconst json = writer.json;\n\t\toptions = writer.options;\n\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\t\tconst extensionsRequired = writer.extensionsRequired;\n\n\t\t// Merge buffers.\n\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t// Declare extensions.\n\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\t\tconst extensionsRequiredList = Object.keys( extensionsRequired );\n\n\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\t\tif ( extensionsRequiredList.length > 0 ) json.extensionsRequired = extensionsRequiredList;\n\n\t\t// Update bytelength of the single buffer.\n\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\tif ( options.binary === true ) {\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\t// Binary chunk.\n\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t// JSON chunk.\n\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t// GLB header.\n\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\theader,\n\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\tjsonChunk,\n\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\tbinaryChunk\n\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\tconst glbReader = new FileReader();\n\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\tonDone( glbReader.result );\n\n\t\t\t\t};\n\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\tconst reader = new FileReader();\n\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tonDone( json );\n\n\t\t\t}\n\n\t\t}\n\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns ids for buffer attributes.\n\t * @param {Object} object\n\t * @return {Integer}\n\t */\n\tgetUID( attribute, isRelativeCopy = false ) {\n\n\t\tif ( this.uids.has( attribute ) === false ) {\n\n\t\t\tconst uids = new Map();\n\n\t\t\tuids.set( true, this.uid ++ );\n\t\t\tuids.set( false, this.uid ++ );\n\n\t\t\tthis.uids.set( attribute, uids );\n\n\t\t}\n\n\t\tconst uids = this.uids.get( attribute );\n\n\t\treturn uids.get( isRelativeCopy );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\tbuildMetalRoughTexture( metalnessMap, roughnessMap ) {\n\n\t\tif ( metalnessMap === roughnessMap ) return metalnessMap;\n\n\t\tfunction getEncodingConversion( map ) {\n\n\t\t\tif ( map.colorSpace === SRGBColorSpace ) {\n\n\t\t\t\treturn function SRGBToLinear( c ) {\n\n\t\t\t\t\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\treturn function LinearToLinear( c ) {\n\n\t\t\t\treturn c;\n\n\t\t\t};\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );\n\n\t\tif ( metalnessMap instanceof CompressedTexture ) {\n\n\t\t\tmetalnessMap = decompress( metalnessMap );\n\n\t\t}\n\n\t\tif ( roughnessMap instanceof CompressedTexture ) {\n\n\t\t\troughnessMap = decompress( roughnessMap );\n\n\t\t}\n\n\t\tconst metalness = metalnessMap ? metalnessMap.image : null;\n\t\tconst roughness = roughnessMap ? roughnessMap.image : null;\n\n\t\tconst width = Math.max( metalness ? metalness.width : 0, roughness ? roughness.width : 0 );\n\t\tconst height = Math.max( metalness ? metalness.height : 0, roughness ? roughness.height : 0 );\n\n\t\tconst canvas = getCanvas();\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tconst context = canvas.getContext( '2d', {\n\t\t\twillReadFrequently: true,\n\t\t} );\n\t\tcontext.fillStyle = '#00ffff';\n\t\tcontext.fillRect( 0, 0, width, height );\n\n\t\tconst composite = context.getImageData( 0, 0, width, height );\n\n\t\tif ( metalness ) {\n\n\t\t\tcontext.drawImage( metalness, 0, 0, width, height );\n\n\t\t\tconst convert = getEncodingConversion( metalnessMap );\n\t\t\tconst data = context.getImageData( 0, 0, width, height ).data;\n\n\t\t\tfor ( let i = 2; i < data.length; i += 4 ) {\n\n\t\t\t\tcomposite.data[ i ] = convert( data[ i ] / 256 ) * 256;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( roughness ) {\n\n\t\t\tcontext.drawImage( roughness, 0, 0, width, height );\n\n\t\t\tconst convert = getEncodingConversion( roughnessMap );\n\t\t\tconst data = context.getImageData( 0, 0, width, height ).data;\n\n\t\t\tfor ( let i = 1; i < data.length; i += 4 ) {\n\n\t\t\t\tcomposite.data[ i ] = convert( data[ i ] / 256 ) * 256;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcontext.putImageData( composite, 0, 0 );\n\n\t\t//\n\n\t\tconst reference = metalnessMap || roughnessMap;\n\n\t\tconst texture = reference.clone();\n\n\t\ttexture.source = new Source( canvas );\n\t\ttexture.colorSpace = NoColorSpace;\n\t\ttexture.channel = ( metalnessMap || roughnessMap ).channel;\n\n\t\tif ( metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match.' );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {Integer}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number} target (Optional) Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tswitch ( componentType ) {\n\n\t\t\tcase WEBGL_CONSTANTS.BYTE:\n\t\t\tcase WEBGL_CONSTANTS.UNSIGNED_BYTE:\n\n\t\t\t\tcomponentSize = 1;\n\n\t\t\t\tbreak;\n\n\t\t\tcase WEBGL_CONSTANTS.SHORT:\n\t\t\tcase WEBGL_CONSTANTS.UNSIGNED_SHORT:\n\n\t\t\t\tcomponentSize = 2;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tlet byteStride = attribute.itemSize * componentSize;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Each element of a vertex attribute MUST be aligned to 4-byte boundaries\n\t\t\t// inside a bufferView\n\t\t\tbyteStride = Math.ceil( byteStride / 4 ) * 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * byteStride );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t\tif ( attribute.normalized === true ) {\n\n\t\t\t\t\t\tvalue = MathUtils.normalize( value, attribute.array );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.INT ) {\n\n\t\t\t\t\tdataView.setInt32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.SHORT ) {\n\n\t\t\t\t\tdataView.setInt16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.BYTE ) {\n\n\t\t\t\t\tdataView.setInt8( offset, value );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t\tif ( ( offset % byteStride ) !== 0 ) {\n\n\t\t\t\toffset += byteStride - ( offset % byteStride );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = byteStride;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise}\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n\t * @param {Integer} start (Optional)\n\t * @param {Integer} count (Optional)\n\t * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t9: 'MAT3',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Int32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.INT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Int16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Int8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.BYTE;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type: ' + attribute.array.constructor.name );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined || count === Infinity ) count = attribute.count;\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Integer} format of the image (RGBAFormat)\n\t * @param {Boolean} flipY before writing out the image\n\t * @param {String} mimeType export format\n\t * @return {Integer} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY, mimeType = 'image/png' ) {\n\n\t\tif ( image !== null ) {\n\n\t\t\tconst writer = this;\n\t\t\tconst cache = writer.cache;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst pending = writer.pending;\n\n\t\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\t\tconst cachedImages = cache.images.get( image );\n\n\t\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\t\tif ( ! json.images ) json.images = [];\n\n\t\t\tconst imageDef = { mimeType: mimeType };\n\n\t\t\tconst canvas = getCanvas();\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d', {\n\t\t\t\twillReadFrequently: true,\n\t\t\t} );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( image.data !== undefined ) { // THREE.DataTexture\n\n\t\t\t\tif ( format !== RGBAFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGBAFormat is supported.', format );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tconst data = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\t\t\tdata[ i + 0 ] = image.data[ i + 0 ];\n\t\t\t\t\tdata[ i + 1 ] = image.data[ i + 1 ];\n\t\t\t\t\tdata[ i + 2 ] = image.data[ i + 2 ];\n\t\t\t\t\tdata[ i + 3 ] = image.data[ i + 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ) {\n\n\t\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push(\n\n\t\t\t\t\tgetToBlobPromise( canvas, mimeType )\n\t\t\t\t\t\t.then( blob => writer.processBufferViewImage( blob ) )\n\t\t\t\t\t\t.then( bufferViewIndex => {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\n\t\t\t\t\t\t} )\n\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tif ( canvas.toDataURL !== undefined ) {\n\n\t\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpending.push(\n\n\t\t\t\t\t\tgetToBlobPromise( canvas, mimeType )\n\t\t\t\t\t\t\t.then( blob => new FileReader().readAsDataURL( blob ) )\n\t\t\t\t\t\t\t.then( dataURL => {\n\n\t\t\t\t\t\t\t\timageDef.uri = dataURL;\n\n\t\t\t\t\t\t\t} )\n\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst index = json.images.push( imageDef ) - 1;\n\t\t\tcachedImages[ key ] = index;\n\t\t\treturn index;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: No valid image data found. Unable to process texture.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Integer} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Integer} Index of the processed texture in the \"textures\" array\n\t */\n\tprocessTexture( map ) {\n\n\t\tconst writer = this;\n\t\tconst options = writer.options;\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\t// make non-readable textures (e.g. CompressedTexture) readable by blitting them into a new texture\n\t\tif ( map instanceof CompressedTexture ) {\n\n\t\t\tmap = decompress( map, options.maxTextureSize );\n\n\t\t}\n\n\t\tlet mimeType = map.userData.mimeType;\n\n\t\tif ( mimeType === 'image/webp' ) mimeType = 'image/png';\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY, mimeType )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeTexture && ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Integer|null} Index of the processed material in the \"materials\" array\n\t */\n\tprocessMaterial( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tconst metalRoughTexture = this.buildMetalRoughTexture( material.metalnessMap, material.roughnessMap );\n\n\t\t\tconst metalRoughMapDef = {\n\t\t\t\tindex: this.processTexture( metalRoughTexture ),\n\t\t\t\tchannel: metalRoughTexture.channel\n\t\t\t};\n\t\t\tthis.applyTextureTransform( metalRoughMapDef, metalRoughTexture );\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = {\n\t\t\t\tindex: this.processTexture( material.map ),\n\t\t\t\ttexCoord: material.map.channel\n\t\t\t};\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tconst emissive = material.emissive;\n\t\t\tconst maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );\n\n\t\t\tif ( maxEmissiveComponent > 0 ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = material.emissive.toArray();\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = {\n\t\t\t\t\tindex: this.processTexture( material.emissiveMap ),\n\t\t\t\t\ttexCoord: material.emissiveMap.channel\n\t\t\t\t};\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = {\n\t\t\t\tindex: this.processTexture( material.normalMap ),\n\t\t\t\ttexCoord: material.normalMap.channel\n\t\t\t};\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== 1 ) {\n\n\t\t\t\t// glTF normal scale is univariate. Ignore `y`, which may be flipped.\n\t\t\t\t// Context: https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: this.processTexture( material.aoMap ),\n\t\t\t\ttexCoord: material.aoMap.channel\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMaterial && ext.writeMaterial( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n\t */\n\tprocessMesh( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv1: 'TEXCOORD_1',\n\t\t\tuv2: 'TEXCOORD_2',\n\t\t\tuv3: 'TEXCOORD_3',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.slice( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tif ( ! attributeName.startsWith( '_' ) ) {\n\n\t\t\t\t\tthis.detectMeshQuantization( attributeName, attribute );\n\n\t\t\t\t}\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tconst gltfAttributeName = attributeName.toUpperCase();\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute, true ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute, true ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = attribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n\t\t\t\t\t\tfor ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\t\t\t\t\tif ( a === 0 ) relativeAttribute.setX( j, attribute.getX( j ) - baseAttribute.getX( j ) );\n\t\t\t\t\t\t\t\tif ( a === 1 ) relativeAttribute.setY( j, attribute.getY( j ) - baseAttribute.getY( j ) );\n\t\t\t\t\t\t\t\tif ( a === 2 ) relativeAttribute.setZ( j, attribute.getZ( j ) - baseAttribute.getZ( j ) );\n\t\t\t\t\t\t\t\tif ( a === 3 ) relativeAttribute.setW( j, attribute.getW( j ) - baseAttribute.getW( j ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute, true ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tlet didForceIndices = false;\n\n\t\tif ( isMultiMaterial && geometry.index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0, il = geometry.attributes.position.count; i < il; i ++ ) {\n\n\t\t\t\tindices[ i ] = i;\n\n\t\t\t}\n\n\t\t\tgeometry.setIndex( indices );\n\n\t\t\tdidForceIndices = true;\n\n\t\t}\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = this.processMaterial( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tif ( didForceIndices === true ) {\n\n\t\t\tgeometry.setIndex( null );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * If a vertex attribute with a\n\t * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)\n\t * is used, it is checked whether it is a valid data type according to the\n\t * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)\n\t * extension.\n\t * In this case the extension is automatically added to the list of used extensions.\n\t *\n\t * @param {string} attributeName\n\t * @param {THREE.BufferAttribute} attribute\n\t */\n\tdetectMeshQuantization( attributeName, attribute ) {\n\n\t\tif ( this.extensionsUsed[ KHR_MESH_QUANTIZATION ] ) return;\n\n\t\tlet attrType = undefined;\n\n\t\tswitch ( attribute.array.constructor ) {\n\n\t\t\tcase Int8Array:\n\n\t\t\t\tattrType = 'byte';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Uint8Array:\n\n\t\t\t\tattrType = 'unsigned byte';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Int16Array:\n\n\t\t\t\tattrType = 'short';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Uint16Array:\n\n\t\t\t\tattrType = 'unsigned short';\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.normalized ) attrType += ' normalized';\n\n\t\tconst attrNamePrefix = attributeName.split( '_', 1 )[ 0 ];\n\n\t\tif ( KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ] && KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ].includes( attrType ) ) {\n\n\t\t\tthis.extensionsUsed[ KHR_MESH_QUANTIZATION ] = true;\n\t\t\tthis.extensionsRequired[ KHR_MESH_QUANTIZATION ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Integer} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} node Object3D to processNode\n\t * @return {Integer} Index of the node in the nodes list\n\t */\n\tprocessNode( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = this.processMesh( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} node Scene to process\n\t */\n\tprocessScene( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tprocessObjects( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tthis.processScene( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array} input\n\t */\n\tprocessInput( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tthis.processScene( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ], input[ 0 ] );\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tfunc( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( 1.0 - light.penumbra ) * light.angle;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_clearcoat';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.clearcoat === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.clearcoatFactor = material.clearcoat;\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tconst clearcoatMapDef = {\n\t\t\t\tindex: writer.processTexture( material.clearcoatMap ),\n\t\t\t\ttexCoord: material.clearcoatMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );\n\t\t\textensionDef.clearcoatTexture = clearcoatMapDef;\n\n\t\t}\n\n\t\textensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness;\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tconst clearcoatRoughnessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.clearcoatRoughnessMap ),\n\t\t\t\ttexCoord: material.clearcoatRoughnessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );\n\t\t\textensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tconst clearcoatNormalMapDef = {\n\t\t\t\tindex: writer.processTexture( material.clearcoatNormalMap ),\n\t\t\t\ttexCoord: material.clearcoatNormalMap.channel\n\t\t\t};\n\n\t\t\tif ( material.clearcoatNormalScale.x !== 1 ) clearcoatNormalMapDef.scale = material.clearcoatNormalScale.x;\n\n\t\t\twriter.applyTextureTransform( clearcoatNormalMapDef, material.clearcoatNormalMap );\n\t\t\textensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_dispersion';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.dispersion === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.dispersion = material.dispersion;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_iridescence';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.iridescence === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.iridescenceFactor = material.iridescence;\n\n\t\tif ( material.iridescenceMap ) {\n\n\t\t\tconst iridescenceMapDef = {\n\t\t\t\tindex: writer.processTexture( material.iridescenceMap ),\n\t\t\t\ttexCoord: material.iridescenceMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( iridescenceMapDef, material.iridescenceMap );\n\t\t\textensionDef.iridescenceTexture = iridescenceMapDef;\n\n\t\t}\n\n\t\textensionDef.iridescenceIor = material.iridescenceIOR;\n\t\textensionDef.iridescenceThicknessMinimum = material.iridescenceThicknessRange[ 0 ];\n\t\textensionDef.iridescenceThicknessMaximum = material.iridescenceThicknessRange[ 1 ];\n\n\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\tconst iridescenceThicknessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.iridescenceThicknessMap ),\n\t\t\t\ttexCoord: material.iridescenceThicknessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( iridescenceThicknessMapDef, material.iridescenceThicknessMap );\n\t\t\textensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_transmission';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.transmissionFactor = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tconst transmissionMapDef = {\n\t\t\t\tindex: writer.processTexture( material.transmissionMap ),\n\t\t\t\ttexCoord: material.transmissionMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( transmissionMapDef, material.transmissionMap );\n\t\t\textensionDef.transmissionTexture = transmissionMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_volume';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.thicknessFactor = material.thickness;\n\n\t\tif ( material.thicknessMap ) {\n\n\t\t\tconst thicknessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.thicknessMap ),\n\t\t\t\ttexCoord: material.thicknessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( thicknessMapDef, material.thicknessMap );\n\t\t\textensionDef.thicknessTexture = thicknessMapDef;\n\n\t\t}\n\n\t\textensionDef.attenuationDistance = material.attenuationDistance;\n\t\textensionDef.attenuationColor = material.attenuationColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_ior';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.ior === 1.5 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.ior = material.ior;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_specular';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || ( material.specularIntensity === 1.0 &&\n\t\t material.specularColor.equals( DEFAULT_SPECULAR_COLOR ) &&\n\t\t ! material.specularIntensityMap && ! material.specularColorMap ) ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tconst specularIntensityMapDef = {\n\t\t\t\tindex: writer.processTexture( material.specularIntensityMap ),\n\t\t\t\ttexCoord: material.specularIntensityMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( specularIntensityMapDef, material.specularIntensityMap );\n\t\t\textensionDef.specularTexture = specularIntensityMapDef;\n\n\t\t}\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tconst specularColorMapDef = {\n\t\t\t\tindex: writer.processTexture( material.specularColorMap ),\n\t\t\t\ttexCoord: material.specularColorMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( specularColorMapDef, material.specularColorMap );\n\t\t\textensionDef.specularColorTexture = specularColorMapDef;\n\n\t\t}\n\n\t\textensionDef.specularFactor = material.specularIntensity;\n\t\textensionDef.specularColorFactor = material.specularColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_sheen';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.sheen == 0.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\tconst sheenRoughnessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.sheenRoughnessMap ),\n\t\t\t\ttexCoord: material.sheenRoughnessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( sheenRoughnessMapDef, material.sheenRoughnessMap );\n\t\t\textensionDef.sheenRoughnessTexture = sheenRoughnessMapDef;\n\n\t\t}\n\n\t\tif ( material.sheenColorMap ) {\n\n\t\t\tconst sheenColorMapDef = {\n\t\t\t\tindex: writer.processTexture( material.sheenColorMap ),\n\t\t\t\ttexCoord: material.sheenColorMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( sheenColorMapDef, material.sheenColorMap );\n\t\t\textensionDef.sheenColorTexture = sheenColorMapDef;\n\n\t\t}\n\n\t\textensionDef.sheenRoughnessFactor = material.sheenRoughness;\n\t\textensionDef.sheenColorFactor = material.sheenColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Anisotropy Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_anisotropy';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.anisotropy == 0.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.anisotropyMap ) {\n\n\t\t\tconst anisotropyMapDef = { index: writer.processTexture( material.anisotropyMap ) };\n\t\t\twriter.applyTextureTransform( anisotropyMapDef, material.anisotropyMap );\n\t\t\textensionDef.anisotropyTexture = anisotropyMapDef;\n\n\t\t}\n\n\t\textensionDef.anisotropyStrength = material.anisotropy;\n\t\textensionDef.anisotropyRotation = material.anisotropyRotation;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_emissive_strength';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshStandardMaterial || material.emissiveIntensity === 1.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.emissiveStrength = material.emissiveIntensity;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'EXT_materials_bump';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshStandardMaterial || (\n\t\t material.bumpScale === 1 &&\n\t\t ! material.bumpMap ) ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tconst bumpMapDef = {\n\t\t\t\tindex: writer.processTexture( material.bumpMap ),\n\t\t\t\ttexCoord: material.bumpMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( bumpMapDef, material.bumpMap );\n\t\t\textensionDef.bumpTexture = bumpMapDef;\n\n\t\t}\n\n\t\textensionDef.bumpFactor = material.bumpScale;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'EXT_mesh_gpu_instancing';\n\n\t}\n\n\twriteNode( object, nodeDef ) {\n\n\t\tif ( ! object.isInstancedMesh ) return;\n\n\t\tconst writer = this.writer;\n\n\t\tconst mesh = object;\n\n\t\tconst translationAttr = new Float32Array( mesh.count * 3 );\n\t\tconst rotationAttr = new Float32Array( mesh.count * 4 );\n\t\tconst scaleAttr = new Float32Array( mesh.count * 3 );\n\n\t\tconst matrix = new Matrix4();\n\t\tconst position = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3();\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tmesh.getMatrixAt( i, matrix );\n\t\t\tmatrix.decompose( position, quaternion, scale );\n\n\t\t\tposition.toArray( translationAttr, i * 3 );\n\t\t\tquaternion.toArray( rotationAttr, i * 4 );\n\t\t\tscale.toArray( scaleAttr, i * 3 );\n\n\t\t}\n\n\t\tconst attributes = {\n\t\t\tTRANSLATION: writer.processAccessor( new BufferAttribute( translationAttr, 3 ) ),\n\t\t\tROTATION: writer.processAccessor( new BufferAttribute( rotationAttr, 4 ) ),\n\t\t\tSCALE: writer.processAccessor( new BufferAttribute( scaleAttr, 3 ) ),\n\t\t};\n\n\t\tif ( mesh.instanceColor )\n\t\t\tattributes._COLOR_0 = writer.processAccessor( mesh.instanceColor );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { attributes };\n\n\t\twriter.extensionsUsed[ this.name ] = true;\n\t\twriter.extensionsRequired[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t}\n\n};\n\nexport { GLTFExporter };\n", "const t=0,e=1,n=2,i=3,s=0,a=0,r=2,o=0,l=1,f=160,U=161,c=162,h=163,_=0,p=1,g=0,y=1,x=2,u=3,b=4,d=5,m=6,w=7,D=8,B=9,L=10,A=11,k=12,v=13,S=14,I=15,O=16,T=17,V=18,E=0,F=1,P=2,C=3,z=4,M=5,W=6,N=7,H=8,K=9,X=10,j=11,R=0,Y=1,q=2,G=13,J=14,Q=15,Z=128,$=64,tt=32,et=16,nt=0,it=1,st=2,at=3,rt=4,ot=5,lt=6,ft=7,Ut=8,ct=9,ht=10,_t=13,pt=14,gt=15,yt=16,xt=17,ut=20,bt=21,dt=22,mt=23,wt=24,Dt=27,Bt=28,Lt=29,At=30,kt=31,vt=34,St=35,It=36,Ot=37,Tt=38,Vt=41,Et=42,Ft=43,Pt=44,Ct=45,zt=48,Mt=49,Wt=50,Nt=58,Ht=59,Kt=62,Xt=63,jt=64,Rt=65,Yt=68,qt=69,Gt=70,Jt=71,Qt=74,Zt=75,$t=76,te=77,ee=78,ne=81,ie=82,se=83,ae=84,re=85,oe=88,le=89,fe=90,Ue=91,ce=92,he=95,_e=96,pe=97,ge=98,ye=99,xe=100,ue=101,be=102,de=103,me=104,we=105,De=106,Be=107,Le=108,Ae=109,ke=110,ve=111,Se=112,Ie=113,Oe=114,Te=115,Ve=116,Ee=117,Fe=118,Pe=119,Ce=120,ze=121,Me=122,We=123,Ne=124,He=125,Ke=126,Xe=127,je=128,Re=129,Ye=130,qe=131,Ge=132,Je=133,Qe=134,Ze=135,$e=136,tn=137,en=138,nn=139,sn=140,an=141,rn=142,on=143,ln=144,fn=145,Un=146,cn=147,hn=148,_n=149,pn=150,gn=151,yn=152,xn=153,un=154,bn=155,dn=156,mn=157,wn=158,Dn=159,Bn=160,Ln=161,An=162,kn=163,vn=164,Sn=165,In=166,On=167,Tn=168,Vn=169,En=170,Fn=171,Pn=172,Cn=173,zn=174,Mn=175,Wn=176,Nn=177,Hn=178,Kn=179,Xn=180,jn=181,Rn=182,Yn=183,qn=184,Gn=1000156007,Jn=1000156008,Qn=1000156009,Zn=1000156010,$n=1000156011,ti=1000156017,ei=1000156018,ni=1000156019,ii=1000156020,si=1000156021,ai=1000054e3,ri=1000054001,oi=1000054002,li=1000054003,fi=1000054004,Ui=1000054005,ci=1000054006,hi=1000054007,_i=1000066e3,pi=1000066001,gi=1000066002,yi=1000066003,xi=1000066004,ui=1000066005,bi=1000066006,di=1000066007,mi=1000066008,wi=1000066009,Di=1000066010,Bi=1000066011,Li=1000066012,Ai=1000066013,ki=100034e4,vi=1000340001;class Si{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class Ii{constructor(t,e,n,i){this._dataView=new DataView(t.buffer,t.byteOffset+e,n),this._littleEndian=i,this._offset=0}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_nextInt32(){const t=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,t}_skip(t){return this._offset+=t,this}_scan(t,e=0){const n=this._offset;let i=0;for(;this._dataView.getUint8(this._offset)!==e&&i0?c+a.byteLength:0;h%8&&(h+=8-h%8);const _=[],p=new DataView(new ArrayBuffer(3*t.levels.length*8));let g=(h||c+a.byteLength)+n.byteLength;for(let e=0;e0?h:0),!0),x.setBigUint64(60,BigInt(n.byteLength),!0),new Uint8Array(Fi([new Uint8Array(Ti).buffer,y,p.buffer,o,a,h>0?new ArrayBuffer(h-(c+a.byteLength)):new ArrayBuffer(0),n,..._]))}export{Q as KHR_DF_CHANNEL_RGBSDA_ALPHA,q as KHR_DF_CHANNEL_RGBSDA_BLUE,J as KHR_DF_CHANNEL_RGBSDA_DEPTH,Y as KHR_DF_CHANNEL_RGBSDA_GREEN,R as KHR_DF_CHANNEL_RGBSDA_RED,G as KHR_DF_CHANNEL_RGBSDA_STENCIL,p as KHR_DF_FLAG_ALPHA_PREMULTIPLIED,_ as KHR_DF_FLAG_ALPHA_STRAIGHT,s as KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,c as KHR_DF_MODEL_ASTC,f as KHR_DF_MODEL_ETC1,h as KHR_DF_MODEL_ETC1S,U as KHR_DF_MODEL_ETC2,l as KHR_DF_MODEL_RGBSDA,o as KHR_DF_MODEL_UNSPECIFIED,W as KHR_DF_PRIMARIES_ACES,N as KHR_DF_PRIMARIES_ACESCC,j as KHR_DF_PRIMARIES_ADOBERGB,z as KHR_DF_PRIMARIES_BT2020,P as KHR_DF_PRIMARIES_BT601_EBU,C as KHR_DF_PRIMARIES_BT601_SMPTE,F as KHR_DF_PRIMARIES_BT709,M as KHR_DF_PRIMARIES_CIEXYZ,X as KHR_DF_PRIMARIES_DISPLAYP3,H as KHR_DF_PRIMARIES_NTSC1953,K as KHR_DF_PRIMARIES_PAL525,E as KHR_DF_PRIMARIES_UNSPECIFIED,tt as KHR_DF_SAMPLE_DATATYPE_EXPONENT,Z as KHR_DF_SAMPLE_DATATYPE_FLOAT,et as KHR_DF_SAMPLE_DATATYPE_LINEAR,$ as KHR_DF_SAMPLE_DATATYPE_SIGNED,O as KHR_DF_TRANSFER_ACESCC,T as KHR_DF_TRANSFER_ACESCCT,V as KHR_DF_TRANSFER_ADOBERGB,w as KHR_DF_TRANSFER_BT1886,k as KHR_DF_TRANSFER_DCIP3,B as KHR_DF_TRANSFER_HLG_EOTF,D as KHR_DF_TRANSFER_HLG_OETF,u as KHR_DF_TRANSFER_ITU,y as KHR_DF_TRANSFER_LINEAR,b as KHR_DF_TRANSFER_NTSC,S as KHR_DF_TRANSFER_PAL625_EOTF,v as KHR_DF_TRANSFER_PAL_OETF,L as KHR_DF_TRANSFER_PQ_EOTF,A as KHR_DF_TRANSFER_PQ_OETF,d as KHR_DF_TRANSFER_SLOG,m as KHR_DF_TRANSFER_SLOG2,x as KHR_DF_TRANSFER_SRGB,I as KHR_DF_TRANSFER_ST240,g as KHR_DF_TRANSFER_UNSPECIFIED,a as KHR_DF_VENDORID_KHRONOS,r as KHR_DF_VERSION,e as KHR_SUPERCOMPRESSION_BASISLZ,t as KHR_SUPERCOMPRESSION_NONE,i as KHR_SUPERCOMPRESSION_ZLIB,n as KHR_SUPERCOMPRESSION_ZSTD,Si as KTX2Container,Ut as VK_FORMAT_A1R5G5B5_UNORM_PACK16,qt as VK_FORMAT_A2B10G10R10_SINT_PACK32,Rt as VK_FORMAT_A2B10G10R10_SNORM_PACK32,Yt as VK_FORMAT_A2B10G10R10_UINT_PACK32,jt as VK_FORMAT_A2B10G10R10_UNORM_PACK32,Xt as VK_FORMAT_A2R10G10B10_SINT_PACK32,Ht as VK_FORMAT_A2R10G10B10_SNORM_PACK32,Kt as VK_FORMAT_A2R10G10B10_UINT_PACK32,Nt as VK_FORMAT_A2R10G10B10_UNORM_PACK32,vi as VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT,ki as VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT,Bi as VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT,Xn as VK_FORMAT_ASTC_10x10_SRGB_BLOCK,Kn as VK_FORMAT_ASTC_10x10_UNORM_BLOCK,mi as VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT,zn as VK_FORMAT_ASTC_10x5_SRGB_BLOCK,Cn as VK_FORMAT_ASTC_10x5_UNORM_BLOCK,wi as VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT,Wn as VK_FORMAT_ASTC_10x6_SRGB_BLOCK,Mn as VK_FORMAT_ASTC_10x6_UNORM_BLOCK,Di as VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT,Hn as VK_FORMAT_ASTC_10x8_SRGB_BLOCK,Nn as VK_FORMAT_ASTC_10x8_UNORM_BLOCK,Li as VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT,Rn as VK_FORMAT_ASTC_12x10_SRGB_BLOCK,jn as VK_FORMAT_ASTC_12x10_UNORM_BLOCK,Ai as VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT,qn as VK_FORMAT_ASTC_12x12_SRGB_BLOCK,Yn as VK_FORMAT_ASTC_12x12_UNORM_BLOCK,_i as VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,wn as VK_FORMAT_ASTC_4x4_SRGB_BLOCK,mn as VK_FORMAT_ASTC_4x4_UNORM_BLOCK,pi as VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT,Bn as VK_FORMAT_ASTC_5x4_SRGB_BLOCK,Dn as VK_FORMAT_ASTC_5x4_UNORM_BLOCK,gi as VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT,An as VK_FORMAT_ASTC_5x5_SRGB_BLOCK,Ln as VK_FORMAT_ASTC_5x5_UNORM_BLOCK,yi as VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT,vn as VK_FORMAT_ASTC_6x5_SRGB_BLOCK,kn as VK_FORMAT_ASTC_6x5_UNORM_BLOCK,xi as VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT,In as VK_FORMAT_ASTC_6x6_SRGB_BLOCK,Sn as VK_FORMAT_ASTC_6x6_UNORM_BLOCK,ui as VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT,Tn as VK_FORMAT_ASTC_8x5_SRGB_BLOCK,On as VK_FORMAT_ASTC_8x5_UNORM_BLOCK,bi as VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT,En as VK_FORMAT_ASTC_8x6_SRGB_BLOCK,Vn as VK_FORMAT_ASTC_8x6_UNORM_BLOCK,di as VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT,Pn as VK_FORMAT_ASTC_8x8_SRGB_BLOCK,Fn as VK_FORMAT_ASTC_8x8_UNORM_BLOCK,Me as VK_FORMAT_B10G11R11_UFLOAT_PACK32,$n as VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,si as VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,at as VK_FORMAT_B4G4R4A4_UNORM_PACK16,ft as VK_FORMAT_B5G5R5A1_UNORM_PACK16,ot as VK_FORMAT_B5G6R5_UNORM_PACK16,Mt as VK_FORMAT_B8G8R8A8_SINT,Ct as VK_FORMAT_B8G8R8A8_SNORM,Wt as VK_FORMAT_B8G8R8A8_SRGB,zt as VK_FORMAT_B8G8R8A8_UINT,Pt as VK_FORMAT_B8G8R8A8_UNORM,St as VK_FORMAT_B8G8R8_SINT,kt as VK_FORMAT_B8G8R8_SNORM,It as VK_FORMAT_B8G8R8_SRGB,vt as VK_FORMAT_B8G8R8_UINT,At as VK_FORMAT_B8G8R8_UNORM,Qe as VK_FORMAT_BC1_RGBA_SRGB_BLOCK,Je as VK_FORMAT_BC1_RGBA_UNORM_BLOCK,Ge as VK_FORMAT_BC1_RGB_SRGB_BLOCK,qe as VK_FORMAT_BC1_RGB_UNORM_BLOCK,$e as VK_FORMAT_BC2_SRGB_BLOCK,Ze as VK_FORMAT_BC2_UNORM_BLOCK,en as VK_FORMAT_BC3_SRGB_BLOCK,tn as VK_FORMAT_BC3_UNORM_BLOCK,sn as VK_FORMAT_BC4_SNORM_BLOCK,nn as VK_FORMAT_BC4_UNORM_BLOCK,rn as VK_FORMAT_BC5_SNORM_BLOCK,an as VK_FORMAT_BC5_UNORM_BLOCK,ln as VK_FORMAT_BC6H_SFLOAT_BLOCK,on as VK_FORMAT_BC6H_UFLOAT_BLOCK,Un as VK_FORMAT_BC7_SRGB_BLOCK,fn as VK_FORMAT_BC7_UNORM_BLOCK,Ne as VK_FORMAT_D16_UNORM,je as VK_FORMAT_D16_UNORM_S8_UINT,Re as VK_FORMAT_D24_UNORM_S8_UINT,Ke as VK_FORMAT_D32_SFLOAT,Ye as VK_FORMAT_D32_SFLOAT_S8_UINT,We as VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,dn as VK_FORMAT_EAC_R11G11_SNORM_BLOCK,bn as VK_FORMAT_EAC_R11G11_UNORM_BLOCK,un as VK_FORMAT_EAC_R11_SNORM_BLOCK,xn as VK_FORMAT_EAC_R11_UNORM_BLOCK,pn as VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,_n as VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,yn as VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,gn as VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,hn as VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,cn as VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,Zn as VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,ii as VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,fi as VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,ai as VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,Ui as VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,ri as VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,ci as VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,oi as VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,hi as VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG,li as VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,Qn as VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,Jn as VK_FORMAT_R10X6G10X6_UNORM_2PACK16,Gn as VK_FORMAT_R10X6_UNORM_PACK16,ni as VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,ei as VK_FORMAT_R12X4G12X4_UNORM_2PACK16,ti as VK_FORMAT_R12X4_UNORM_PACK16,pe as VK_FORMAT_R16G16B16A16_SFLOAT,_e as VK_FORMAT_R16G16B16A16_SINT,ce as VK_FORMAT_R16G16B16A16_SNORM,he as VK_FORMAT_R16G16B16A16_UINT,Ue as VK_FORMAT_R16G16B16A16_UNORM,fe as VK_FORMAT_R16G16B16_SFLOAT,le as VK_FORMAT_R16G16B16_SINT,re as VK_FORMAT_R16G16B16_SNORM,oe as VK_FORMAT_R16G16B16_UINT,ae as VK_FORMAT_R16G16B16_UNORM,se as VK_FORMAT_R16G16_SFLOAT,ie as VK_FORMAT_R16G16_SINT,ee as VK_FORMAT_R16G16_SNORM,ne as VK_FORMAT_R16G16_UINT,te as VK_FORMAT_R16G16_UNORM,$t as VK_FORMAT_R16_SFLOAT,Zt as VK_FORMAT_R16_SINT,Jt as VK_FORMAT_R16_SNORM,Qt as VK_FORMAT_R16_UINT,Gt as VK_FORMAT_R16_UNORM,Ae as VK_FORMAT_R32G32B32A32_SFLOAT,Le as VK_FORMAT_R32G32B32A32_SINT,Be as VK_FORMAT_R32G32B32A32_UINT,De as VK_FORMAT_R32G32B32_SFLOAT,we as VK_FORMAT_R32G32B32_SINT,me as VK_FORMAT_R32G32B32_UINT,de as VK_FORMAT_R32G32_SFLOAT,be as VK_FORMAT_R32G32_SINT,ue as VK_FORMAT_R32G32_UINT,xe as VK_FORMAT_R32_SFLOAT,ye as VK_FORMAT_R32_SINT,ge as VK_FORMAT_R32_UINT,st as VK_FORMAT_R4G4B4A4_UNORM_PACK16,it as VK_FORMAT_R4G4_UNORM_PACK8,lt as VK_FORMAT_R5G5B5A1_UNORM_PACK16,rt as VK_FORMAT_R5G6B5_UNORM_PACK16,ze as VK_FORMAT_R64G64B64A64_SFLOAT,Ce as VK_FORMAT_R64G64B64A64_SINT,Pe as VK_FORMAT_R64G64B64A64_UINT,Fe as VK_FORMAT_R64G64B64_SFLOAT,Ee as VK_FORMAT_R64G64B64_SINT,Ve as VK_FORMAT_R64G64B64_UINT,Te as VK_FORMAT_R64G64_SFLOAT,Oe as VK_FORMAT_R64G64_SINT,Ie as VK_FORMAT_R64G64_UINT,Se as VK_FORMAT_R64_SFLOAT,ve as VK_FORMAT_R64_SINT,ke as VK_FORMAT_R64_UINT,Et as VK_FORMAT_R8G8B8A8_SINT,Tt as VK_FORMAT_R8G8B8A8_SNORM,Ft as VK_FORMAT_R8G8B8A8_SRGB,Vt as VK_FORMAT_R8G8B8A8_UINT,Ot as VK_FORMAT_R8G8B8A8_UNORM,Bt as VK_FORMAT_R8G8B8_SINT,wt as VK_FORMAT_R8G8B8_SNORM,Lt as VK_FORMAT_R8G8B8_SRGB,Dt as VK_FORMAT_R8G8B8_UINT,mt as VK_FORMAT_R8G8B8_UNORM,bt as VK_FORMAT_R8G8_SINT,xt as VK_FORMAT_R8G8_SNORM,dt as VK_FORMAT_R8G8_SRGB,ut as VK_FORMAT_R8G8_UINT,yt as VK_FORMAT_R8G8_UNORM,pt as VK_FORMAT_R8_SINT,ht as VK_FORMAT_R8_SNORM,gt as VK_FORMAT_R8_SRGB,_t as VK_FORMAT_R8_UINT,ct as VK_FORMAT_R8_UNORM,Xe as VK_FORMAT_S8_UINT,nt as VK_FORMAT_UNDEFINED,He as VK_FORMAT_X8_D24_UNORM_PACK32,Pi as read,Mi as write};\n", "import {\n\tFloatType,\n\tHalfFloatType,\n\tUnsignedByteType,\n\tRGBAFormat,\n\tRGFormat,\n\tRGIntegerFormat,\n\tRedFormat,\n\tRedIntegerFormat,\n\tNoColorSpace,\n\tLinearSRGBColorSpace,\n\tSRGBColorSpace,\n\tDataTexture,\n\tREVISION,\n} from 'three';\n\nimport {\n\twrite,\n\tKTX2Container,\n\tKHR_DF_CHANNEL_RGBSDA_ALPHA,\n\tKHR_DF_CHANNEL_RGBSDA_BLUE,\n\tKHR_DF_CHANNEL_RGBSDA_GREEN,\n\tKHR_DF_CHANNEL_RGBSDA_RED,\n\tKHR_DF_MODEL_RGBSDA,\n\tKHR_DF_PRIMARIES_BT709,\n\tKHR_DF_PRIMARIES_UNSPECIFIED,\n\tKHR_DF_SAMPLE_DATATYPE_FLOAT,\n\tKHR_DF_SAMPLE_DATATYPE_LINEAR,\n\tKHR_DF_SAMPLE_DATATYPE_SIGNED,\n\tKHR_DF_TRANSFER_LINEAR,\n\tKHR_DF_TRANSFER_SRGB,\n\tVK_FORMAT_R16_SFLOAT,\n\tVK_FORMAT_R16G16_SFLOAT,\n\tVK_FORMAT_R16G16B16A16_SFLOAT,\n\tVK_FORMAT_R32_SFLOAT,\n\tVK_FORMAT_R32G32_SFLOAT,\n\tVK_FORMAT_R32G32B32A32_SFLOAT,\n\tVK_FORMAT_R8_SRGB,\n\tVK_FORMAT_R8_UNORM,\n\tVK_FORMAT_R8G8_SRGB,\n\tVK_FORMAT_R8G8_UNORM,\n\tVK_FORMAT_R8G8B8A8_SRGB,\n\tVK_FORMAT_R8G8B8A8_UNORM,\n} from '../libs/ktx-parse.module.js';\n\nconst VK_FORMAT_MAP = {\n\n\t[ RGBAFormat ]: {\n\t\t[ FloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R32G32B32A32_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R32G32B32A32_SFLOAT,\n\t\t},\n\t\t[ HalfFloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R16G16B16A16_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R16G16B16A16_SFLOAT,\n\t\t},\n\t\t[ UnsignedByteType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R8G8B8A8_UNORM,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R8G8B8A8_UNORM,\n\t\t\t[ SRGBColorSpace ]: VK_FORMAT_R8G8B8A8_SRGB,\n\t\t},\n\t},\n\n\t[ RGFormat ]: {\n\t\t[ FloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R32G32_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R32G32_SFLOAT,\n\t\t},\n\t\t[ HalfFloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R16G16_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R16G16_SFLOAT,\n\t\t},\n\t\t[ UnsignedByteType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R8G8_UNORM,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R8G8_UNORM,\n\t\t\t[ SRGBColorSpace ]: VK_FORMAT_R8G8_SRGB,\n\t\t},\n\t},\n\n\t[ RedFormat ]: {\n\t\t[ FloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R32_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R32_SFLOAT,\n\t\t},\n\t\t[ HalfFloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R16_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R16_SFLOAT,\n\t\t},\n\t\t[ UnsignedByteType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R8_UNORM,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R8_UNORM,\n\t\t\t[ SRGBColorSpace ]: VK_FORMAT_R8_SRGB,\n\t\t},\n\t},\n\n};\n\nconst KHR_DF_CHANNEL_MAP = {\n\n\t0: KHR_DF_CHANNEL_RGBSDA_RED,\n\t1: KHR_DF_CHANNEL_RGBSDA_GREEN,\n\t2: KHR_DF_CHANNEL_RGBSDA_BLUE,\n\t3: KHR_DF_CHANNEL_RGBSDA_ALPHA,\n\n};\n\nconst ERROR_INPUT = 'THREE.KTX2Exporter: Supported inputs are DataTexture, Data3DTexture, or WebGLRenderer and WebGLRenderTarget.';\nconst ERROR_FORMAT = 'THREE.KTX2Exporter: Supported formats are RGBAFormat, RGFormat, or RedFormat.';\nconst ERROR_TYPE = 'THREE.KTX2Exporter: Supported types are FloatType, HalfFloatType, or UnsignedByteType.\"';\nconst ERROR_COLOR_SPACE = 'THREE.KTX2Exporter: Supported color spaces are SRGBColorSpace (UnsignedByteType only), LinearSRGBColorSpace, or NoColorSpace.';\n\nexport class KTX2Exporter {\n\n\tparse( arg1, arg2 ) {\n\n\t\tlet texture;\n\n\t\tif ( arg1.isDataTexture || arg1.isData3DTexture ) {\n\n\t\t\ttexture = arg1;\n\n\t\t} else if ( arg1.isWebGLRenderer && arg2.isWebGLRenderTarget ) {\n\n\t\t\ttexture = toDataTexture( arg1, arg2 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( ERROR_INPUT );\n\n\t\t}\n\n\t\tif ( VK_FORMAT_MAP[ texture.format ] === undefined ) {\n\n\t\t\tthrow new Error( ERROR_FORMAT );\n\n\t\t}\n\n\t\tif ( VK_FORMAT_MAP[ texture.format ][ texture.type ] === undefined ) {\n\n\t\t\tthrow new Error( ERROR_TYPE );\n\n\t\t}\n\n\t\tif ( VK_FORMAT_MAP[ texture.format ][ texture.type ][ texture.colorSpace ] === undefined ) {\n\n\t\t\tthrow new Error( ERROR_COLOR_SPACE );\n\n\t\t}\n\n\t\t//\n\n\t\tconst array = texture.image.data;\n\t\tconst channelCount = getChannelCount( texture );\n\t\tconst container = new KTX2Container();\n\n\t\tcontainer.vkFormat = VK_FORMAT_MAP[ texture.format ][ texture.type ][ texture.colorSpace ];\n\t\tcontainer.typeSize = array.BYTES_PER_ELEMENT;\n\t\tcontainer.pixelWidth = texture.image.width;\n\t\tcontainer.pixelHeight = texture.image.height;\n\n\t\tif ( texture.isData3DTexture ) {\n\n\t\t\tcontainer.pixelDepth = texture.image.depth;\n\n\t\t}\n\n\t\t//\n\n\t\tconst basicDesc = container.dataFormatDescriptor[ 0 ];\n\n\t\tbasicDesc.colorModel = KHR_DF_MODEL_RGBSDA;\n\t\tbasicDesc.colorPrimaries = texture.colorSpace === NoColorSpace\n\t\t\t? KHR_DF_PRIMARIES_UNSPECIFIED\n\t\t\t: KHR_DF_PRIMARIES_BT709;\n\t\tbasicDesc.transferFunction = texture.colorSpace === SRGBColorSpace\n\t\t\t? KHR_DF_TRANSFER_SRGB\n\t\t\t: KHR_DF_TRANSFER_LINEAR;\n\n\t\tbasicDesc.texelBlockDimension = [ 0, 0, 0, 0 ];\n\n\t\tbasicDesc.bytesPlane = [\n\n\t\t\tcontainer.typeSize * channelCount, 0, 0, 0, 0, 0, 0, 0,\n\n\t\t];\n\n\t\tfor ( let i = 0; i < channelCount; ++ i ) {\n\n\t\t\tlet channelType = KHR_DF_CHANNEL_MAP[ i ];\n\n\t\t\tif ( texture.colorSpace === LinearSRGBColorSpace || texture.colorSpace === NoColorSpace ) {\n\n\t\t\t\tchannelType |= KHR_DF_SAMPLE_DATATYPE_LINEAR;\n\n\t\t\t}\n\n\t\t\tif ( texture.type === FloatType || texture.type === HalfFloatType ) {\n\n\t\t\t\tchannelType |= KHR_DF_SAMPLE_DATATYPE_FLOAT;\n\t\t\t\tchannelType |= KHR_DF_SAMPLE_DATATYPE_SIGNED;\n\n\t\t\t}\n\n\t\t\tbasicDesc.samples.push( {\n\n\t\t\t\tchannelType: channelType,\n\t\t\t\tbitOffset: i * array.BYTES_PER_ELEMENT,\n\t\t\t\tbitLength: array.BYTES_PER_ELEMENT * 8 - 1,\n\t\t\t\tsamplePosition: [ 0, 0, 0, 0 ],\n\t\t\t\tsampleLower: texture.type === UnsignedByteType ? 0 : - 1,\n\t\t\t\tsampleUpper: texture.type === UnsignedByteType ? 255 : 1,\n\n\t\t\t} );\n\n\t\t}\n\n\t\t//\n\n\t\tcontainer.levels = [ {\n\n\t\t\tlevelData: new Uint8Array( array.buffer, array.byteOffset, array.byteLength ),\n\t\t\tuncompressedByteLength: array.byteLength,\n\n\t\t} ];\n\n\t\t//\n\n\t\tcontainer.keyValue[ 'KTXwriter' ] = `three.js ${ REVISION }`;\n\n\t\t//\n\n\t\treturn write( container, { keepWriter: true } );\n\n\t}\n\n}\n\nfunction toDataTexture( renderer, rtt ) {\n\n\tconst channelCount = getChannelCount( rtt.texture );\n\n\tlet view;\n\n\tif ( rtt.texture.type === FloatType ) {\n\n\t\tview = new Float32Array( rtt.width * rtt.height * channelCount );\n\n\t} else if ( rtt.texture.type === HalfFloatType ) {\n\n\t\tview = new Uint16Array( rtt.width * rtt.height * channelCount );\n\n\t} else if ( rtt.texture.type === UnsignedByteType ) {\n\n\t\tview = new Uint8Array( rtt.width * rtt.height * channelCount );\n\n\t} else {\n\n\t\tthrow new Error( ERROR_TYPE );\n\n\t}\n\n\trenderer.readRenderTargetPixels( rtt, 0, 0, rtt.width, rtt.height, view );\n\n\treturn new DataTexture( view, rtt.width, rtt.height, rtt.texture.format, rtt.texture.type );\n\n}\n\nfunction getChannelCount( texture ) {\n\n\tswitch ( texture.format ) {\n\n\t\tcase RGBAFormat:\n\n\t\t\treturn 4;\n\n\t\tcase RGFormat:\n\t\tcase RGIntegerFormat:\n\n\t\t\treturn 2;\n\n\t\tcase RedFormat:\n\t\tcase RedIntegerFormat:\n\n\t\t\treturn 1;\n\n\t\tdefault:\n\n\t\t\tthrow new Error( ERROR_FORMAT );\n\n\t}\n\n}\n", "/**\n * @author Takahiro / https://github.com/takahirox\n *\n * Simple CharsetEncoder.\n */\n\nfunction CharsetEncoder() {\n}\n\n/*\n * Converts from Shift_JIS Uint8Array data to Unicode strings.\n */\nCharsetEncoder.prototype.s2u = function(uint8Array) {\n var t = this.s2uTable;\n var str = '';\n var p = 0;\n\n while(p < uint8Array.length) {\n var key = uint8Array[p++];\n\n if(! ((key >= 0x00 && key <= 0x7e) ||\n (key >= 0xa1 && key <= 0xdf)) &&\n p < uint8Array.length) {\n key = (key << 8) | uint8Array[p++];\n }\n\n if(t[key] === undefined) {\n console.error('unknown char code ' + key + '.');\n return str;\n }\n\n str += String.fromCharCode(t[key]);\n }\n\n return str;\n};\n\nCharsetEncoder.prototype.s2uTable = {\n0:0,\n1:1,\n2:2,\n3:3,\n4:4,\n5:5,\n6:6,\n7:7,\n8:8,\n9:9,\n10:10,\n11:11,\n12:12,\n13:13,\n14:14,\n15:15,\n16:16,\n17:17,\n18:18,\n19:19,\n20:20,\n21:21,\n22:22,\n23:23,\n24:24,\n25:25,\n26:26,\n27:27,\n28:28,\n29:29,\n30:30,\n31:31,\n32:32,\n33:33,\n34:34,\n35:35,\n36:36,\n37:37,\n38:38,\n39:39,\n40:40,\n41:41,\n42:42,\n43:43,\n44:44,\n45:45,\n46:46,\n47:47,\n48:48,\n49:49,\n50:50,\n51:51,\n52:52,\n53:53,\n54:54,\n55:55,\n56:56,\n57:57,\n58:58,\n59:59,\n60:60,\n61:61,\n62:62,\n63:63,\n64:64,\n65:65,\n66:66,\n67:67,\n68:68,\n69:69,\n70:70,\n71:71,\n72:72,\n73:73,\n74:74,\n75:75,\n76:76,\n77:77,\n78:78,\n79:79,\n80:80,\n81:81,\n82:82,\n83:83,\n84:84,\n85:85,\n86:86,\n87:87,\n88:88,\n89:89,\n90:90,\n91:91,\n92:92,\n93:93,\n94:94,\n95:95,\n96:96,\n97:97,\n98:98,\n99:99,\n100:100,\n101:101,\n102:102,\n103:103,\n104:104,\n105:105,\n106:106,\n107:107,\n108:108,\n109:109,\n110:110,\n111:111,\n112:112,\n113:113,\n114:114,\n115:115,\n116:116,\n117:117,\n118:118,\n119:119,\n120:120,\n121:121,\n122:122,\n123:123,\n124:124,\n125:125,\n126:126,\n161:65377,\n162:65378,\n163:65379,\n164:65380,\n165:65381,\n166:65382,\n167:65383,\n168:65384,\n169:65385,\n170:65386,\n171:65387,\n172:65388,\n173:65389,\n174:65390,\n175:65391,\n176:65392,\n177:65393,\n178:65394,\n179:65395,\n180:65396,\n181:65397,\n182:65398,\n183:65399,\n184:65400,\n185:65401,\n186:65402,\n187:65403,\n188:65404,\n189:65405,\n190:65406,\n191:65407,\n192:65408,\n193:65409,\n194:65410,\n195:65411,\n196:65412,\n197:65413,\n198:65414,\n199:65415,\n200:65416,\n201:65417,\n202:65418,\n203:65419,\n204:65420,\n205:65421,\n206:65422,\n207:65423,\n208:65424,\n209:65425,\n210:65426,\n211:65427,\n212:65428,\n213:65429,\n214:65430,\n215:65431,\n216:65432,\n217:65433,\n218:65434,\n219:65435,\n220:65436,\n221:65437,\n222:65438,\n223:65439,\n33088:12288,\n33089:12289,\n33090:12290,\n33091:65292,\n33092:65294,\n33093:12539,\n33094:65306,\n33095:65307,\n33096:65311,\n33097:65281,\n33098:12443,\n33099:12444,\n33100:180,\n33101:65344,\n33102:168,\n33103:65342,\n33104:65507,\n33105:65343,\n33106:12541,\n33107:12542,\n33108:12445,\n33109:12446,\n33110:12291,\n33111:20189,\n33112:12293,\n33113:12294,\n33114:12295,\n33115:12540,\n33116:8213,\n33117:8208,\n33118:65295,\n33119:65340,\n33120:65374,\n33121:8741,\n33122:65372,\n33123:8230,\n33124:8229,\n33125:8216,\n33126:8217,\n33127:8220,\n33128:8221,\n33129:65288,\n33130:65289,\n33131:12308,\n33132:12309,\n33133:65339,\n33134:65341,\n33135:65371,\n33136:65373,\n33137:12296,\n33138:12297,\n33139:12298,\n33140:12299,\n33141:12300,\n33142:12301,\n33143:12302,\n33144:12303,\n33145:12304,\n33146:12305,\n33147:65291,\n33148:65293,\n33149:177,\n33150:215,\n33152:247,\n33153:65309,\n33154:8800,\n33155:65308,\n33156:65310,\n33157:8806,\n33158:8807,\n33159:8734,\n33160:8756,\n33161:9794,\n33162:9792,\n33163:176,\n33164:8242,\n33165:8243,\n33166:8451,\n33167:65509,\n33168:65284,\n33169:65504,\n33170:65505,\n33171:65285,\n33172:65283,\n33173:65286,\n33174:65290,\n33175:65312,\n33176:167,\n33177:9734,\n33178:9733,\n33179:9675,\n33180:9679,\n33181:9678,\n33182:9671,\n33183:9670,\n33184:9633,\n33185:9632,\n33186:9651,\n33187:9650,\n33188:9661,\n33189:9660,\n33190:8251,\n33191:12306,\n33192:8594,\n33193:8592,\n33194:8593,\n33195:8595,\n33196:12307,\n33208:8712,\n33209:8715,\n33210:8838,\n33211:8839,\n33212:8834,\n33213:8835,\n33214:8746,\n33215:8745,\n33224:8743,\n33225:8744,\n33226:65506,\n33227:8658,\n33228:8660,\n33229:8704,\n33230:8707,\n33242:8736,\n33243:8869,\n33244:8978,\n33245:8706,\n33246:8711,\n33247:8801,\n33248:8786,\n33249:8810,\n33250:8811,\n33251:8730,\n33252:8765,\n33253:8733,\n33254:8757,\n33255:8747,\n33256:8748,\n33264:8491,\n33265:8240,\n33266:9839,\n33267:9837,\n33268:9834,\n33269:8224,\n33270:8225,\n33271:182,\n33276:9711,\n33359:65296,\n33360:65297,\n33361:65298,\n33362:65299,\n33363:65300,\n33364:65301,\n33365:65302,\n33366:65303,\n33367:65304,\n33368:65305,\n33376:65313,\n33377:65314,\n33378:65315,\n33379:65316,\n33380:65317,\n33381:65318,\n33382:65319,\n33383:65320,\n33384:65321,\n33385:65322,\n33386:65323,\n33387:65324,\n33388:65325,\n33389:65326,\n33390:65327,\n33391:65328,\n33392:65329,\n33393:65330,\n33394:65331,\n33395:65332,\n33396:65333,\n33397:65334,\n33398:65335,\n33399:65336,\n33400:65337,\n33401:65338,\n33409:65345,\n33410:65346,\n33411:65347,\n33412:65348,\n33413:65349,\n33414:65350,\n33415:65351,\n33416:65352,\n33417:65353,\n33418:65354,\n33419:65355,\n33420:65356,\n33421:65357,\n33422:65358,\n33423:65359,\n33424:65360,\n33425:65361,\n33426:65362,\n33427:65363,\n33428:65364,\n33429:65365,\n33430:65366,\n33431:65367,\n33432:65368,\n33433:65369,\n33434:65370,\n33439:12353,\n33440:12354,\n33441:12355,\n33442:12356,\n33443:12357,\n33444:12358,\n33445:12359,\n33446:12360,\n33447:12361,\n33448:12362,\n33449:12363,\n33450:12364,\n33451:12365,\n33452:12366,\n33453:12367,\n33454:12368,\n33455:12369,\n33456:12370,\n33457:12371,\n33458:12372,\n33459:12373,\n33460:12374,\n33461:12375,\n33462:12376,\n33463:12377,\n33464:12378,\n33465:12379,\n33466:12380,\n33467:12381,\n33468:12382,\n33469:12383,\n33470:12384,\n33471:12385,\n33472:12386,\n33473:12387,\n33474:12388,\n33475:12389,\n33476:12390,\n33477:12391,\n33478:12392,\n33479:12393,\n33480:12394,\n33481:12395,\n33482:12396,\n33483:12397,\n33484:12398,\n33485:12399,\n33486:12400,\n33487:12401,\n33488:12402,\n33489:12403,\n33490:12404,\n33491:12405,\n33492:12406,\n33493:12407,\n33494:12408,\n33495:12409,\n33496:12410,\n33497:12411,\n33498:12412,\n33499:12413,\n33500:12414,\n33501:12415,\n33502:12416,\n33503:12417,\n33504:12418,\n33505:12419,\n33506:12420,\n33507:12421,\n33508:12422,\n33509:12423,\n33510:12424,\n33511:12425,\n33512:12426,\n33513:12427,\n33514:12428,\n33515:12429,\n33516:12430,\n33517:12431,\n33518:12432,\n33519:12433,\n33520:12434,\n33521:12435,\n33600:12449,\n33601:12450,\n33602:12451,\n33603:12452,\n33604:12453,\n33605:12454,\n33606:12455,\n33607:12456,\n33608:12457,\n33609:12458,\n33610:12459,\n33611:12460,\n33612:12461,\n33613:12462,\n33614:12463,\n33615:12464,\n33616:12465,\n33617:12466,\n33618:12467,\n33619:12468,\n33620:12469,\n33621:12470,\n33622:12471,\n33623:12472,\n33624:12473,\n33625:12474,\n33626:12475,\n33627:12476,\n33628:12477,\n33629:12478,\n33630:12479,\n33631:12480,\n33632:12481,\n33633:12482,\n33634:12483,\n33635:12484,\n33636:12485,\n33637:12486,\n33638:12487,\n33639:12488,\n33640:12489,\n33641:12490,\n33642:12491,\n33643:12492,\n33644:12493,\n33645:12494,\n33646:12495,\n33647:12496,\n33648:12497,\n33649:12498,\n33650:12499,\n33651:12500,\n33652:12501,\n33653:12502,\n33654:12503,\n33655:12504,\n33656:12505,\n33657:12506,\n33658:12507,\n33659:12508,\n33660:12509,\n33661:12510,\n33662:12511,\n33664:12512,\n33665:12513,\n33666:12514,\n33667:12515,\n33668:12516,\n33669:12517,\n33670:12518,\n33671:12519,\n33672:12520,\n33673:12521,\n33674:12522,\n33675:12523,\n33676:12524,\n33677:12525,\n33678:12526,\n33679:12527,\n33680:12528,\n33681:12529,\n33682:12530,\n33683:12531,\n33684:12532,\n33685:12533,\n33686:12534,\n33695:913,\n33696:914,\n33697:915,\n33698:916,\n33699:917,\n33700:918,\n33701:919,\n33702:920,\n33703:921,\n33704:922,\n33705:923,\n33706:924,\n33707:925,\n33708:926,\n33709:927,\n33710:928,\n33711:929,\n33712:931,\n33713:932,\n33714:933,\n33715:934,\n33716:935,\n33717:936,\n33718:937,\n33727:945,\n33728:946,\n33729:947,\n33730:948,\n33731:949,\n33732:950,\n33733:951,\n33734:952,\n33735:953,\n33736:954,\n33737:955,\n33738:956,\n33739:957,\n33740:958,\n33741:959,\n33742:960,\n33743:961,\n33744:963,\n33745:964,\n33746:965,\n33747:966,\n33748:967,\n33749:968,\n33750:969,\n33856:1040,\n33857:1041,\n33858:1042,\n33859:1043,\n33860:1044,\n33861:1045,\n33862:1025,\n33863:1046,\n33864:1047,\n33865:1048,\n33866:1049,\n33867:1050,\n33868:1051,\n33869:1052,\n33870:1053,\n33871:1054,\n33872:1055,\n33873:1056,\n33874:1057,\n33875:1058,\n33876:1059,\n33877:1060,\n33878:1061,\n33879:1062,\n33880:1063,\n33881:1064,\n33882:1065,\n33883:1066,\n33884:1067,\n33885:1068,\n33886:1069,\n33887:1070,\n33888:1071,\n33904:1072,\n33905:1073,\n33906:1074,\n33907:1075,\n33908:1076,\n33909:1077,\n33910:1105,\n33911:1078,\n33912:1079,\n33913:1080,\n33914:1081,\n33915:1082,\n33916:1083,\n33917:1084,\n33918:1085,\n33920:1086,\n33921:1087,\n33922:1088,\n33923:1089,\n33924:1090,\n33925:1091,\n33926:1092,\n33927:1093,\n33928:1094,\n33929:1095,\n33930:1096,\n33931:1097,\n33932:1098,\n33933:1099,\n33934:1100,\n33935:1101,\n33936:1102,\n33937:1103,\n33951:9472,\n33952:9474,\n33953:9484,\n33954:9488,\n33955:9496,\n33956:9492,\n33957:9500,\n33958:9516,\n33959:9508,\n33960:9524,\n33961:9532,\n33962:9473,\n33963:9475,\n33964:9487,\n33965:9491,\n33966:9499,\n33967:9495,\n33968:9507,\n33969:9523,\n33970:9515,\n33971:9531,\n33972:9547,\n33973:9504,\n33974:9519,\n33975:9512,\n33976:9527,\n33977:9535,\n33978:9501,\n33979:9520,\n33980:9509,\n33981:9528,\n33982:9538,\n34624:9312,\n34625:9313,\n34626:9314,\n34627:9315,\n34628:9316,\n34629:9317,\n34630:9318,\n34631:9319,\n34632:9320,\n34633:9321,\n34634:9322,\n34635:9323,\n34636:9324,\n34637:9325,\n34638:9326,\n34639:9327,\n34640:9328,\n34641:9329,\n34642:9330,\n34643:9331,\n34644:8544,\n34645:8545,\n34646:8546,\n34647:8547,\n34648:8548,\n34649:8549,\n34650:8550,\n34651:8551,\n34652:8552,\n34653:8553,\n34655:13129,\n34656:13076,\n34657:13090,\n34658:13133,\n34659:13080,\n34660:13095,\n34661:13059,\n34662:13110,\n34663:13137,\n34664:13143,\n34665:13069,\n34666:13094,\n34667:13091,\n34668:13099,\n34669:13130,\n34670:13115,\n34671:13212,\n34672:13213,\n34673:13214,\n34674:13198,\n34675:13199,\n34676:13252,\n34677:13217,\n34686:13179,\n34688:12317,\n34689:12319,\n34690:8470,\n34691:13261,\n34692:8481,\n34693:12964,\n34694:12965,\n34695:12966,\n34696:12967,\n34697:12968,\n34698:12849,\n34699:12850,\n34700:12857,\n34701:13182,\n34702:13181,\n34703:13180,\n34704:8786,\n34705:8801,\n34706:8747,\n34707:8750,\n34708:8721,\n34709:8730,\n34710:8869,\n34711:8736,\n34712:8735,\n34713:8895,\n34714:8757,\n34715:8745,\n34716:8746,\n34975:20124,\n34976:21782,\n34977:23043,\n34978:38463,\n34979:21696,\n34980:24859,\n34981:25384,\n34982:23030,\n34983:36898,\n34984:33909,\n34985:33564,\n34986:31312,\n34987:24746,\n34988:25569,\n34989:28197,\n34990:26093,\n34991:33894,\n34992:33446,\n34993:39925,\n34994:26771,\n34995:22311,\n34996:26017,\n34997:25201,\n34998:23451,\n34999:22992,\n35000:34427,\n35001:39156,\n35002:32098,\n35003:32190,\n35004:39822,\n35005:25110,\n35006:31903,\n35007:34999,\n35008:23433,\n35009:24245,\n35010:25353,\n35011:26263,\n35012:26696,\n35013:38343,\n35014:38797,\n35015:26447,\n35016:20197,\n35017:20234,\n35018:20301,\n35019:20381,\n35020:20553,\n35021:22258,\n35022:22839,\n35023:22996,\n35024:23041,\n35025:23561,\n35026:24799,\n35027:24847,\n35028:24944,\n35029:26131,\n35030:26885,\n35031:28858,\n35032:30031,\n35033:30064,\n35034:31227,\n35035:32173,\n35036:32239,\n35037:32963,\n35038:33806,\n35039:34915,\n35040:35586,\n35041:36949,\n35042:36986,\n35043:21307,\n35044:20117,\n35045:20133,\n35046:22495,\n35047:32946,\n35048:37057,\n35049:30959,\n35050:19968,\n35051:22769,\n35052:28322,\n35053:36920,\n35054:31282,\n35055:33576,\n35056:33419,\n35057:39983,\n35058:20801,\n35059:21360,\n35060:21693,\n35061:21729,\n35062:22240,\n35063:23035,\n35064:24341,\n35065:39154,\n35066:28139,\n35067:32996,\n35068:34093,\n35136:38498,\n35137:38512,\n35138:38560,\n35139:38907,\n35140:21515,\n35141:21491,\n35142:23431,\n35143:28879,\n35144:32701,\n35145:36802,\n35146:38632,\n35147:21359,\n35148:40284,\n35149:31418,\n35150:19985,\n35151:30867,\n35152:33276,\n35153:28198,\n35154:22040,\n35155:21764,\n35156:27421,\n35157:34074,\n35158:39995,\n35159:23013,\n35160:21417,\n35161:28006,\n35162:29916,\n35163:38287,\n35164:22082,\n35165:20113,\n35166:36939,\n35167:38642,\n35168:33615,\n35169:39180,\n35170:21473,\n35171:21942,\n35172:23344,\n35173:24433,\n35174:26144,\n35175:26355,\n35176:26628,\n35177:27704,\n35178:27891,\n35179:27945,\n35180:29787,\n35181:30408,\n35182:31310,\n35183:38964,\n35184:33521,\n35185:34907,\n35186:35424,\n35187:37613,\n35188:28082,\n35189:30123,\n35190:30410,\n35191:39365,\n35192:24742,\n35193:35585,\n35194:36234,\n35195:38322,\n35196:27022,\n35197:21421,\n35198:20870,\n35200:22290,\n35201:22576,\n35202:22852,\n35203:23476,\n35204:24310,\n35205:24616,\n35206:25513,\n35207:25588,\n35208:27839,\n35209:28436,\n35210:28814,\n35211:28948,\n35212:29017,\n35213:29141,\n35214:29503,\n35215:32257,\n35216:33398,\n35217:33489,\n35218:34199,\n35219:36960,\n35220:37467,\n35221:40219,\n35222:22633,\n35223:26044,\n35224:27738,\n35225:29989,\n35226:20985,\n35227:22830,\n35228:22885,\n35229:24448,\n35230:24540,\n35231:25276,\n35232:26106,\n35233:27178,\n35234:27431,\n35235:27572,\n35236:29579,\n35237:32705,\n35238:35158,\n35239:40236,\n35240:40206,\n35241:40644,\n35242:23713,\n35243:27798,\n35244:33659,\n35245:20740,\n35246:23627,\n35247:25014,\n35248:33222,\n35249:26742,\n35250:29281,\n35251:20057,\n35252:20474,\n35253:21368,\n35254:24681,\n35255:28201,\n35256:31311,\n35257:38899,\n35258:19979,\n35259:21270,\n35260:20206,\n35261:20309,\n35262:20285,\n35263:20385,\n35264:20339,\n35265:21152,\n35266:21487,\n35267:22025,\n35268:22799,\n35269:23233,\n35270:23478,\n35271:23521,\n35272:31185,\n35273:26247,\n35274:26524,\n35275:26550,\n35276:27468,\n35277:27827,\n35278:28779,\n35279:29634,\n35280:31117,\n35281:31166,\n35282:31292,\n35283:31623,\n35284:33457,\n35285:33499,\n35286:33540,\n35287:33655,\n35288:33775,\n35289:33747,\n35290:34662,\n35291:35506,\n35292:22057,\n35293:36008,\n35294:36838,\n35295:36942,\n35296:38686,\n35297:34442,\n35298:20420,\n35299:23784,\n35300:25105,\n35301:29273,\n35302:30011,\n35303:33253,\n35304:33469,\n35305:34558,\n35306:36032,\n35307:38597,\n35308:39187,\n35309:39381,\n35310:20171,\n35311:20250,\n35312:35299,\n35313:22238,\n35314:22602,\n35315:22730,\n35316:24315,\n35317:24555,\n35318:24618,\n35319:24724,\n35320:24674,\n35321:25040,\n35322:25106,\n35323:25296,\n35324:25913,\n35392:39745,\n35393:26214,\n35394:26800,\n35395:28023,\n35396:28784,\n35397:30028,\n35398:30342,\n35399:32117,\n35400:33445,\n35401:34809,\n35402:38283,\n35403:38542,\n35404:35997,\n35405:20977,\n35406:21182,\n35407:22806,\n35408:21683,\n35409:23475,\n35410:23830,\n35411:24936,\n35412:27010,\n35413:28079,\n35414:30861,\n35415:33995,\n35416:34903,\n35417:35442,\n35418:37799,\n35419:39608,\n35420:28012,\n35421:39336,\n35422:34521,\n35423:22435,\n35424:26623,\n35425:34510,\n35426:37390,\n35427:21123,\n35428:22151,\n35429:21508,\n35430:24275,\n35431:25313,\n35432:25785,\n35433:26684,\n35434:26680,\n35435:27579,\n35436:29554,\n35437:30906,\n35438:31339,\n35439:35226,\n35440:35282,\n35441:36203,\n35442:36611,\n35443:37101,\n35444:38307,\n35445:38548,\n35446:38761,\n35447:23398,\n35448:23731,\n35449:27005,\n35450:38989,\n35451:38990,\n35452:25499,\n35453:31520,\n35454:27179,\n35456:27263,\n35457:26806,\n35458:39949,\n35459:28511,\n35460:21106,\n35461:21917,\n35462:24688,\n35463:25324,\n35464:27963,\n35465:28167,\n35466:28369,\n35467:33883,\n35468:35088,\n35469:36676,\n35470:19988,\n35471:39993,\n35472:21494,\n35473:26907,\n35474:27194,\n35475:38788,\n35476:26666,\n35477:20828,\n35478:31427,\n35479:33970,\n35480:37340,\n35481:37772,\n35482:22107,\n35483:40232,\n35484:26658,\n35485:33541,\n35486:33841,\n35487:31909,\n35488:21000,\n35489:33477,\n35490:29926,\n35491:20094,\n35492:20355,\n35493:20896,\n35494:23506,\n35495:21002,\n35496:21208,\n35497:21223,\n35498:24059,\n35499:21914,\n35500:22570,\n35501:23014,\n35502:23436,\n35503:23448,\n35504:23515,\n35505:24178,\n35506:24185,\n35507:24739,\n35508:24863,\n35509:24931,\n35510:25022,\n35511:25563,\n35512:25954,\n35513:26577,\n35514:26707,\n35515:26874,\n35516:27454,\n35517:27475,\n35518:27735,\n35519:28450,\n35520:28567,\n35521:28485,\n35522:29872,\n35523:29976,\n35524:30435,\n35525:30475,\n35526:31487,\n35527:31649,\n35528:31777,\n35529:32233,\n35530:32566,\n35531:32752,\n35532:32925,\n35533:33382,\n35534:33694,\n35535:35251,\n35536:35532,\n35537:36011,\n35538:36996,\n35539:37969,\n35540:38291,\n35541:38289,\n35542:38306,\n35543:38501,\n35544:38867,\n35545:39208,\n35546:33304,\n35547:20024,\n35548:21547,\n35549:23736,\n35550:24012,\n35551:29609,\n35552:30284,\n35553:30524,\n35554:23721,\n35555:32747,\n35556:36107,\n35557:38593,\n35558:38929,\n35559:38996,\n35560:39000,\n35561:20225,\n35562:20238,\n35563:21361,\n35564:21916,\n35565:22120,\n35566:22522,\n35567:22855,\n35568:23305,\n35569:23492,\n35570:23696,\n35571:24076,\n35572:24190,\n35573:24524,\n35574:25582,\n35575:26426,\n35576:26071,\n35577:26082,\n35578:26399,\n35579:26827,\n35580:26820,\n35648:27231,\n35649:24112,\n35650:27589,\n35651:27671,\n35652:27773,\n35653:30079,\n35654:31048,\n35655:23395,\n35656:31232,\n35657:32000,\n35658:24509,\n35659:35215,\n35660:35352,\n35661:36020,\n35662:36215,\n35663:36556,\n35664:36637,\n35665:39138,\n35666:39438,\n35667:39740,\n35668:20096,\n35669:20605,\n35670:20736,\n35671:22931,\n35672:23452,\n35673:25135,\n35674:25216,\n35675:25836,\n35676:27450,\n35677:29344,\n35678:30097,\n35679:31047,\n35680:32681,\n35681:34811,\n35682:35516,\n35683:35696,\n35684:25516,\n35685:33738,\n35686:38816,\n35687:21513,\n35688:21507,\n35689:21931,\n35690:26708,\n35691:27224,\n35692:35440,\n35693:30759,\n35694:26485,\n35695:40653,\n35696:21364,\n35697:23458,\n35698:33050,\n35699:34384,\n35700:36870,\n35701:19992,\n35702:20037,\n35703:20167,\n35704:20241,\n35705:21450,\n35706:21560,\n35707:23470,\n35708:24339,\n35709:24613,\n35710:25937,\n35712:26429,\n35713:27714,\n35714:27762,\n35715:27875,\n35716:28792,\n35717:29699,\n35718:31350,\n35719:31406,\n35720:31496,\n35721:32026,\n35722:31998,\n35723:32102,\n35724:26087,\n35725:29275,\n35726:21435,\n35727:23621,\n35728:24040,\n35729:25298,\n35730:25312,\n35731:25369,\n35732:28192,\n35733:34394,\n35734:35377,\n35735:36317,\n35736:37624,\n35737:28417,\n35738:31142,\n35739:39770,\n35740:20136,\n35741:20139,\n35742:20140,\n35743:20379,\n35744:20384,\n35745:20689,\n35746:20807,\n35747:31478,\n35748:20849,\n35749:20982,\n35750:21332,\n35751:21281,\n35752:21375,\n35753:21483,\n35754:21932,\n35755:22659,\n35756:23777,\n35757:24375,\n35758:24394,\n35759:24623,\n35760:24656,\n35761:24685,\n35762:25375,\n35763:25945,\n35764:27211,\n35765:27841,\n35766:29378,\n35767:29421,\n35768:30703,\n35769:33016,\n35770:33029,\n35771:33288,\n35772:34126,\n35773:37111,\n35774:37857,\n35775:38911,\n35776:39255,\n35777:39514,\n35778:20208,\n35779:20957,\n35780:23597,\n35781:26241,\n35782:26989,\n35783:23616,\n35784:26354,\n35785:26997,\n35786:29577,\n35787:26704,\n35788:31873,\n35789:20677,\n35790:21220,\n35791:22343,\n35792:24062,\n35793:37670,\n35794:26020,\n35795:27427,\n35796:27453,\n35797:29748,\n35798:31105,\n35799:31165,\n35800:31563,\n35801:32202,\n35802:33465,\n35803:33740,\n35804:34943,\n35805:35167,\n35806:35641,\n35807:36817,\n35808:37329,\n35809:21535,\n35810:37504,\n35811:20061,\n35812:20534,\n35813:21477,\n35814:21306,\n35815:29399,\n35816:29590,\n35817:30697,\n35818:33510,\n35819:36527,\n35820:39366,\n35821:39368,\n35822:39378,\n35823:20855,\n35824:24858,\n35825:34398,\n35826:21936,\n35827:31354,\n35828:20598,\n35829:23507,\n35830:36935,\n35831:38533,\n35832:20018,\n35833:27355,\n35834:37351,\n35835:23633,\n35836:23624,\n35904:25496,\n35905:31391,\n35906:27795,\n35907:38772,\n35908:36705,\n35909:31402,\n35910:29066,\n35911:38536,\n35912:31874,\n35913:26647,\n35914:32368,\n35915:26705,\n35916:37740,\n35917:21234,\n35918:21531,\n35919:34219,\n35920:35347,\n35921:32676,\n35922:36557,\n35923:37089,\n35924:21350,\n35925:34952,\n35926:31041,\n35927:20418,\n35928:20670,\n35929:21009,\n35930:20804,\n35931:21843,\n35932:22317,\n35933:29674,\n35934:22411,\n35935:22865,\n35936:24418,\n35937:24452,\n35938:24693,\n35939:24950,\n35940:24935,\n35941:25001,\n35942:25522,\n35943:25658,\n35944:25964,\n35945:26223,\n35946:26690,\n35947:28179,\n35948:30054,\n35949:31293,\n35950:31995,\n35951:32076,\n35952:32153,\n35953:32331,\n35954:32619,\n35955:33550,\n35956:33610,\n35957:34509,\n35958:35336,\n35959:35427,\n35960:35686,\n35961:36605,\n35962:38938,\n35963:40335,\n35964:33464,\n35965:36814,\n35966:39912,\n35968:21127,\n35969:25119,\n35970:25731,\n35971:28608,\n35972:38553,\n35973:26689,\n35974:20625,\n35975:27424,\n35976:27770,\n35977:28500,\n35978:31348,\n35979:32080,\n35980:34880,\n35981:35363,\n35982:26376,\n35983:20214,\n35984:20537,\n35985:20518,\n35986:20581,\n35987:20860,\n35988:21048,\n35989:21091,\n35990:21927,\n35991:22287,\n35992:22533,\n35993:23244,\n35994:24314,\n35995:25010,\n35996:25080,\n35997:25331,\n35998:25458,\n35999:26908,\n36000:27177,\n36001:29309,\n36002:29356,\n36003:29486,\n36004:30740,\n36005:30831,\n36006:32121,\n36007:30476,\n36008:32937,\n36009:35211,\n36010:35609,\n36011:36066,\n36012:36562,\n36013:36963,\n36014:37749,\n36015:38522,\n36016:38997,\n36017:39443,\n36018:40568,\n36019:20803,\n36020:21407,\n36021:21427,\n36022:24187,\n36023:24358,\n36024:28187,\n36025:28304,\n36026:29572,\n36027:29694,\n36028:32067,\n36029:33335,\n36030:35328,\n36031:35578,\n36032:38480,\n36033:20046,\n36034:20491,\n36035:21476,\n36036:21628,\n36037:22266,\n36038:22993,\n36039:23396,\n36040:24049,\n36041:24235,\n36042:24359,\n36043:25144,\n36044:25925,\n36045:26543,\n36046:28246,\n36047:29392,\n36048:31946,\n36049:34996,\n36050:32929,\n36051:32993,\n36052:33776,\n36053:34382,\n36054:35463,\n36055:36328,\n36056:37431,\n36057:38599,\n36058:39015,\n36059:40723,\n36060:20116,\n36061:20114,\n36062:20237,\n36063:21320,\n36064:21577,\n36065:21566,\n36066:23087,\n36067:24460,\n36068:24481,\n36069:24735,\n36070:26791,\n36071:27278,\n36072:29786,\n36073:30849,\n36074:35486,\n36075:35492,\n36076:35703,\n36077:37264,\n36078:20062,\n36079:39881,\n36080:20132,\n36081:20348,\n36082:20399,\n36083:20505,\n36084:20502,\n36085:20809,\n36086:20844,\n36087:21151,\n36088:21177,\n36089:21246,\n36090:21402,\n36091:21475,\n36092:21521,\n36160:21518,\n36161:21897,\n36162:22353,\n36163:22434,\n36164:22909,\n36165:23380,\n36166:23389,\n36167:23439,\n36168:24037,\n36169:24039,\n36170:24055,\n36171:24184,\n36172:24195,\n36173:24218,\n36174:24247,\n36175:24344,\n36176:24658,\n36177:24908,\n36178:25239,\n36179:25304,\n36180:25511,\n36181:25915,\n36182:26114,\n36183:26179,\n36184:26356,\n36185:26477,\n36186:26657,\n36187:26775,\n36188:27083,\n36189:27743,\n36190:27946,\n36191:28009,\n36192:28207,\n36193:28317,\n36194:30002,\n36195:30343,\n36196:30828,\n36197:31295,\n36198:31968,\n36199:32005,\n36200:32024,\n36201:32094,\n36202:32177,\n36203:32789,\n36204:32771,\n36205:32943,\n36206:32945,\n36207:33108,\n36208:33167,\n36209:33322,\n36210:33618,\n36211:34892,\n36212:34913,\n36213:35611,\n36214:36002,\n36215:36092,\n36216:37066,\n36217:37237,\n36218:37489,\n36219:30783,\n36220:37628,\n36221:38308,\n36222:38477,\n36224:38917,\n36225:39321,\n36226:39640,\n36227:40251,\n36228:21083,\n36229:21163,\n36230:21495,\n36231:21512,\n36232:22741,\n36233:25335,\n36234:28640,\n36235:35946,\n36236:36703,\n36237:40633,\n36238:20811,\n36239:21051,\n36240:21578,\n36241:22269,\n36242:31296,\n36243:37239,\n36244:40288,\n36245:40658,\n36246:29508,\n36247:28425,\n36248:33136,\n36249:29969,\n36250:24573,\n36251:24794,\n36252:39592,\n36253:29403,\n36254:36796,\n36255:27492,\n36256:38915,\n36257:20170,\n36258:22256,\n36259:22372,\n36260:22718,\n36261:23130,\n36262:24680,\n36263:25031,\n36264:26127,\n36265:26118,\n36266:26681,\n36267:26801,\n36268:28151,\n36269:30165,\n36270:32058,\n36271:33390,\n36272:39746,\n36273:20123,\n36274:20304,\n36275:21449,\n36276:21766,\n36277:23919,\n36278:24038,\n36279:24046,\n36280:26619,\n36281:27801,\n36282:29811,\n36283:30722,\n36284:35408,\n36285:37782,\n36286:35039,\n36287:22352,\n36288:24231,\n36289:25387,\n36290:20661,\n36291:20652,\n36292:20877,\n36293:26368,\n36294:21705,\n36295:22622,\n36296:22971,\n36297:23472,\n36298:24425,\n36299:25165,\n36300:25505,\n36301:26685,\n36302:27507,\n36303:28168,\n36304:28797,\n36305:37319,\n36306:29312,\n36307:30741,\n36308:30758,\n36309:31085,\n36310:25998,\n36311:32048,\n36312:33756,\n36313:35009,\n36314:36617,\n36315:38555,\n36316:21092,\n36317:22312,\n36318:26448,\n36319:32618,\n36320:36001,\n36321:20916,\n36322:22338,\n36323:38442,\n36324:22586,\n36325:27018,\n36326:32948,\n36327:21682,\n36328:23822,\n36329:22524,\n36330:30869,\n36331:40442,\n36332:20316,\n36333:21066,\n36334:21643,\n36335:25662,\n36336:26152,\n36337:26388,\n36338:26613,\n36339:31364,\n36340:31574,\n36341:32034,\n36342:37679,\n36343:26716,\n36344:39853,\n36345:31545,\n36346:21273,\n36347:20874,\n36348:21047,\n36416:23519,\n36417:25334,\n36418:25774,\n36419:25830,\n36420:26413,\n36421:27578,\n36422:34217,\n36423:38609,\n36424:30352,\n36425:39894,\n36426:25420,\n36427:37638,\n36428:39851,\n36429:30399,\n36430:26194,\n36431:19977,\n36432:20632,\n36433:21442,\n36434:23665,\n36435:24808,\n36436:25746,\n36437:25955,\n36438:26719,\n36439:29158,\n36440:29642,\n36441:29987,\n36442:31639,\n36443:32386,\n36444:34453,\n36445:35715,\n36446:36059,\n36447:37240,\n36448:39184,\n36449:26028,\n36450:26283,\n36451:27531,\n36452:20181,\n36453:20180,\n36454:20282,\n36455:20351,\n36456:21050,\n36457:21496,\n36458:21490,\n36459:21987,\n36460:22235,\n36461:22763,\n36462:22987,\n36463:22985,\n36464:23039,\n36465:23376,\n36466:23629,\n36467:24066,\n36468:24107,\n36469:24535,\n36470:24605,\n36471:25351,\n36472:25903,\n36473:23388,\n36474:26031,\n36475:26045,\n36476:26088,\n36477:26525,\n36478:27490,\n36480:27515,\n36481:27663,\n36482:29509,\n36483:31049,\n36484:31169,\n36485:31992,\n36486:32025,\n36487:32043,\n36488:32930,\n36489:33026,\n36490:33267,\n36491:35222,\n36492:35422,\n36493:35433,\n36494:35430,\n36495:35468,\n36496:35566,\n36497:36039,\n36498:36060,\n36499:38604,\n36500:39164,\n36501:27503,\n36502:20107,\n36503:20284,\n36504:20365,\n36505:20816,\n36506:23383,\n36507:23546,\n36508:24904,\n36509:25345,\n36510:26178,\n36511:27425,\n36512:28363,\n36513:27835,\n36514:29246,\n36515:29885,\n36516:30164,\n36517:30913,\n36518:31034,\n36519:32780,\n36520:32819,\n36521:33258,\n36522:33940,\n36523:36766,\n36524:27728,\n36525:40575,\n36526:24335,\n36527:35672,\n36528:40235,\n36529:31482,\n36530:36600,\n36531:23437,\n36532:38635,\n36533:19971,\n36534:21489,\n36535:22519,\n36536:22833,\n36537:23241,\n36538:23460,\n36539:24713,\n36540:28287,\n36541:28422,\n36542:30142,\n36543:36074,\n36544:23455,\n36545:34048,\n36546:31712,\n36547:20594,\n36548:26612,\n36549:33437,\n36550:23649,\n36551:34122,\n36552:32286,\n36553:33294,\n36554:20889,\n36555:23556,\n36556:25448,\n36557:36198,\n36558:26012,\n36559:29038,\n36560:31038,\n36561:32023,\n36562:32773,\n36563:35613,\n36564:36554,\n36565:36974,\n36566:34503,\n36567:37034,\n36568:20511,\n36569:21242,\n36570:23610,\n36571:26451,\n36572:28796,\n36573:29237,\n36574:37196,\n36575:37320,\n36576:37675,\n36577:33509,\n36578:23490,\n36579:24369,\n36580:24825,\n36581:20027,\n36582:21462,\n36583:23432,\n36584:25163,\n36585:26417,\n36586:27530,\n36587:29417,\n36588:29664,\n36589:31278,\n36590:33131,\n36591:36259,\n36592:37202,\n36593:39318,\n36594:20754,\n36595:21463,\n36596:21610,\n36597:23551,\n36598:25480,\n36599:27193,\n36600:32172,\n36601:38656,\n36602:22234,\n36603:21454,\n36604:21608,\n36672:23447,\n36673:23601,\n36674:24030,\n36675:20462,\n36676:24833,\n36677:25342,\n36678:27954,\n36679:31168,\n36680:31179,\n36681:32066,\n36682:32333,\n36683:32722,\n36684:33261,\n36685:33311,\n36686:33936,\n36687:34886,\n36688:35186,\n36689:35728,\n36690:36468,\n36691:36655,\n36692:36913,\n36693:37195,\n36694:37228,\n36695:38598,\n36696:37276,\n36697:20160,\n36698:20303,\n36699:20805,\n36700:21313,\n36701:24467,\n36702:25102,\n36703:26580,\n36704:27713,\n36705:28171,\n36706:29539,\n36707:32294,\n36708:37325,\n36709:37507,\n36710:21460,\n36711:22809,\n36712:23487,\n36713:28113,\n36714:31069,\n36715:32302,\n36716:31899,\n36717:22654,\n36718:29087,\n36719:20986,\n36720:34899,\n36721:36848,\n36722:20426,\n36723:23803,\n36724:26149,\n36725:30636,\n36726:31459,\n36727:33308,\n36728:39423,\n36729:20934,\n36730:24490,\n36731:26092,\n36732:26991,\n36733:27529,\n36734:28147,\n36736:28310,\n36737:28516,\n36738:30462,\n36739:32020,\n36740:24033,\n36741:36981,\n36742:37255,\n36743:38918,\n36744:20966,\n36745:21021,\n36746:25152,\n36747:26257,\n36748:26329,\n36749:28186,\n36750:24246,\n36751:32210,\n36752:32626,\n36753:26360,\n36754:34223,\n36755:34295,\n36756:35576,\n36757:21161,\n36758:21465,\n36759:22899,\n36760:24207,\n36761:24464,\n36762:24661,\n36763:37604,\n36764:38500,\n36765:20663,\n36766:20767,\n36767:21213,\n36768:21280,\n36769:21319,\n36770:21484,\n36771:21736,\n36772:21830,\n36773:21809,\n36774:22039,\n36775:22888,\n36776:22974,\n36777:23100,\n36778:23477,\n36779:23558,\n36780:23567,\n36781:23569,\n36782:23578,\n36783:24196,\n36784:24202,\n36785:24288,\n36786:24432,\n36787:25215,\n36788:25220,\n36789:25307,\n36790:25484,\n36791:25463,\n36792:26119,\n36793:26124,\n36794:26157,\n36795:26230,\n36796:26494,\n36797:26786,\n36798:27167,\n36799:27189,\n36800:27836,\n36801:28040,\n36802:28169,\n36803:28248,\n36804:28988,\n36805:28966,\n36806:29031,\n36807:30151,\n36808:30465,\n36809:30813,\n36810:30977,\n36811:31077,\n36812:31216,\n36813:31456,\n36814:31505,\n36815:31911,\n36816:32057,\n36817:32918,\n36818:33750,\n36819:33931,\n36820:34121,\n36821:34909,\n36822:35059,\n36823:35359,\n36824:35388,\n36825:35412,\n36826:35443,\n36827:35937,\n36828:36062,\n36829:37284,\n36830:37478,\n36831:37758,\n36832:37912,\n36833:38556,\n36834:38808,\n36835:19978,\n36836:19976,\n36837:19998,\n36838:20055,\n36839:20887,\n36840:21104,\n36841:22478,\n36842:22580,\n36843:22732,\n36844:23330,\n36845:24120,\n36846:24773,\n36847:25854,\n36848:26465,\n36849:26454,\n36850:27972,\n36851:29366,\n36852:30067,\n36853:31331,\n36854:33976,\n36855:35698,\n36856:37304,\n36857:37664,\n36858:22065,\n36859:22516,\n36860:39166,\n36928:25325,\n36929:26893,\n36930:27542,\n36931:29165,\n36932:32340,\n36933:32887,\n36934:33394,\n36935:35302,\n36936:39135,\n36937:34645,\n36938:36785,\n36939:23611,\n36940:20280,\n36941:20449,\n36942:20405,\n36943:21767,\n36944:23072,\n36945:23517,\n36946:23529,\n36947:24515,\n36948:24910,\n36949:25391,\n36950:26032,\n36951:26187,\n36952:26862,\n36953:27035,\n36954:28024,\n36955:28145,\n36956:30003,\n36957:30137,\n36958:30495,\n36959:31070,\n36960:31206,\n36961:32051,\n36962:33251,\n36963:33455,\n36964:34218,\n36965:35242,\n36966:35386,\n36967:36523,\n36968:36763,\n36969:36914,\n36970:37341,\n36971:38663,\n36972:20154,\n36973:20161,\n36974:20995,\n36975:22645,\n36976:22764,\n36977:23563,\n36978:29978,\n36979:23613,\n36980:33102,\n36981:35338,\n36982:36805,\n36983:38499,\n36984:38765,\n36985:31525,\n36986:35535,\n36987:38920,\n36988:37218,\n36989:22259,\n36990:21416,\n36992:36887,\n36993:21561,\n36994:22402,\n36995:24101,\n36996:25512,\n36997:27700,\n36998:28810,\n36999:30561,\n37000:31883,\n37001:32736,\n37002:34928,\n37003:36930,\n37004:37204,\n37005:37648,\n37006:37656,\n37007:38543,\n37008:29790,\n37009:39620,\n37010:23815,\n37011:23913,\n37012:25968,\n37013:26530,\n37014:36264,\n37015:38619,\n37016:25454,\n37017:26441,\n37018:26905,\n37019:33733,\n37020:38935,\n37021:38592,\n37022:35070,\n37023:28548,\n37024:25722,\n37025:23544,\n37026:19990,\n37027:28716,\n37028:30045,\n37029:26159,\n37030:20932,\n37031:21046,\n37032:21218,\n37033:22995,\n37034:24449,\n37035:24615,\n37036:25104,\n37037:25919,\n37038:25972,\n37039:26143,\n37040:26228,\n37041:26866,\n37042:26646,\n37043:27491,\n37044:28165,\n37045:29298,\n37046:29983,\n37047:30427,\n37048:31934,\n37049:32854,\n37050:22768,\n37051:35069,\n37052:35199,\n37053:35488,\n37054:35475,\n37055:35531,\n37056:36893,\n37057:37266,\n37058:38738,\n37059:38745,\n37060:25993,\n37061:31246,\n37062:33030,\n37063:38587,\n37064:24109,\n37065:24796,\n37066:25114,\n37067:26021,\n37068:26132,\n37069:26512,\n37070:30707,\n37071:31309,\n37072:31821,\n37073:32318,\n37074:33034,\n37075:36012,\n37076:36196,\n37077:36321,\n37078:36447,\n37079:30889,\n37080:20999,\n37081:25305,\n37082:25509,\n37083:25666,\n37084:25240,\n37085:35373,\n37086:31363,\n37087:31680,\n37088:35500,\n37089:38634,\n37090:32118,\n37091:33292,\n37092:34633,\n37093:20185,\n37094:20808,\n37095:21315,\n37096:21344,\n37097:23459,\n37098:23554,\n37099:23574,\n37100:24029,\n37101:25126,\n37102:25159,\n37103:25776,\n37104:26643,\n37105:26676,\n37106:27849,\n37107:27973,\n37108:27927,\n37109:26579,\n37110:28508,\n37111:29006,\n37112:29053,\n37113:26059,\n37114:31359,\n37115:31661,\n37116:32218,\n37184:32330,\n37185:32680,\n37186:33146,\n37187:33307,\n37188:33337,\n37189:34214,\n37190:35438,\n37191:36046,\n37192:36341,\n37193:36984,\n37194:36983,\n37195:37549,\n37196:37521,\n37197:38275,\n37198:39854,\n37199:21069,\n37200:21892,\n37201:28472,\n37202:28982,\n37203:20840,\n37204:31109,\n37205:32341,\n37206:33203,\n37207:31950,\n37208:22092,\n37209:22609,\n37210:23720,\n37211:25514,\n37212:26366,\n37213:26365,\n37214:26970,\n37215:29401,\n37216:30095,\n37217:30094,\n37218:30990,\n37219:31062,\n37220:31199,\n37221:31895,\n37222:32032,\n37223:32068,\n37224:34311,\n37225:35380,\n37226:38459,\n37227:36961,\n37228:40736,\n37229:20711,\n37230:21109,\n37231:21452,\n37232:21474,\n37233:20489,\n37234:21930,\n37235:22766,\n37236:22863,\n37237:29245,\n37238:23435,\n37239:23652,\n37240:21277,\n37241:24803,\n37242:24819,\n37243:25436,\n37244:25475,\n37245:25407,\n37246:25531,\n37248:25805,\n37249:26089,\n37250:26361,\n37251:24035,\n37252:27085,\n37253:27133,\n37254:28437,\n37255:29157,\n37256:20105,\n37257:30185,\n37258:30456,\n37259:31379,\n37260:31967,\n37261:32207,\n37262:32156,\n37263:32865,\n37264:33609,\n37265:33624,\n37266:33900,\n37267:33980,\n37268:34299,\n37269:35013,\n37270:36208,\n37271:36865,\n37272:36973,\n37273:37783,\n37274:38684,\n37275:39442,\n37276:20687,\n37277:22679,\n37278:24974,\n37279:33235,\n37280:34101,\n37281:36104,\n37282:36896,\n37283:20419,\n37284:20596,\n37285:21063,\n37286:21363,\n37287:24687,\n37288:25417,\n37289:26463,\n37290:28204,\n37291:36275,\n37292:36895,\n37293:20439,\n37294:23646,\n37295:36042,\n37296:26063,\n37297:32154,\n37298:21330,\n37299:34966,\n37300:20854,\n37301:25539,\n37302:23384,\n37303:23403,\n37304:23562,\n37305:25613,\n37306:26449,\n37307:36956,\n37308:20182,\n37309:22810,\n37310:22826,\n37311:27760,\n37312:35409,\n37313:21822,\n37314:22549,\n37315:22949,\n37316:24816,\n37317:25171,\n37318:26561,\n37319:33333,\n37320:26965,\n37321:38464,\n37322:39364,\n37323:39464,\n37324:20307,\n37325:22534,\n37326:23550,\n37327:32784,\n37328:23729,\n37329:24111,\n37330:24453,\n37331:24608,\n37332:24907,\n37333:25140,\n37334:26367,\n37335:27888,\n37336:28382,\n37337:32974,\n37338:33151,\n37339:33492,\n37340:34955,\n37341:36024,\n37342:36864,\n37343:36910,\n37344:38538,\n37345:40667,\n37346:39899,\n37347:20195,\n37348:21488,\n37349:22823,\n37350:31532,\n37351:37261,\n37352:38988,\n37353:40441,\n37354:28381,\n37355:28711,\n37356:21331,\n37357:21828,\n37358:23429,\n37359:25176,\n37360:25246,\n37361:25299,\n37362:27810,\n37363:28655,\n37364:29730,\n37365:35351,\n37366:37944,\n37367:28609,\n37368:35582,\n37369:33592,\n37370:20967,\n37371:34552,\n37372:21482,\n37440:21481,\n37441:20294,\n37442:36948,\n37443:36784,\n37444:22890,\n37445:33073,\n37446:24061,\n37447:31466,\n37448:36799,\n37449:26842,\n37450:35895,\n37451:29432,\n37452:40008,\n37453:27197,\n37454:35504,\n37455:20025,\n37456:21336,\n37457:22022,\n37458:22374,\n37459:25285,\n37460:25506,\n37461:26086,\n37462:27470,\n37463:28129,\n37464:28251,\n37465:28845,\n37466:30701,\n37467:31471,\n37468:31658,\n37469:32187,\n37470:32829,\n37471:32966,\n37472:34507,\n37473:35477,\n37474:37723,\n37475:22243,\n37476:22727,\n37477:24382,\n37478:26029,\n37479:26262,\n37480:27264,\n37481:27573,\n37482:30007,\n37483:35527,\n37484:20516,\n37485:30693,\n37486:22320,\n37487:24347,\n37488:24677,\n37489:26234,\n37490:27744,\n37491:30196,\n37492:31258,\n37493:32622,\n37494:33268,\n37495:34584,\n37496:36933,\n37497:39347,\n37498:31689,\n37499:30044,\n37500:31481,\n37501:31569,\n37502:33988,\n37504:36880,\n37505:31209,\n37506:31378,\n37507:33590,\n37508:23265,\n37509:30528,\n37510:20013,\n37511:20210,\n37512:23449,\n37513:24544,\n37514:25277,\n37515:26172,\n37516:26609,\n37517:27880,\n37518:34411,\n37519:34935,\n37520:35387,\n37521:37198,\n37522:37619,\n37523:39376,\n37524:27159,\n37525:28710,\n37526:29482,\n37527:33511,\n37528:33879,\n37529:36015,\n37530:19969,\n37531:20806,\n37532:20939,\n37533:21899,\n37534:23541,\n37535:24086,\n37536:24115,\n37537:24193,\n37538:24340,\n37539:24373,\n37540:24427,\n37541:24500,\n37542:25074,\n37543:25361,\n37544:26274,\n37545:26397,\n37546:28526,\n37547:29266,\n37548:30010,\n37549:30522,\n37550:32884,\n37551:33081,\n37552:33144,\n37553:34678,\n37554:35519,\n37555:35548,\n37556:36229,\n37557:36339,\n37558:37530,\n37559:38263,\n37560:38914,\n37561:40165,\n37562:21189,\n37563:25431,\n37564:30452,\n37565:26389,\n37566:27784,\n37567:29645,\n37568:36035,\n37569:37806,\n37570:38515,\n37571:27941,\n37572:22684,\n37573:26894,\n37574:27084,\n37575:36861,\n37576:37786,\n37577:30171,\n37578:36890,\n37579:22618,\n37580:26626,\n37581:25524,\n37582:27131,\n37583:20291,\n37584:28460,\n37585:26584,\n37586:36795,\n37587:34086,\n37588:32180,\n37589:37716,\n37590:26943,\n37591:28528,\n37592:22378,\n37593:22775,\n37594:23340,\n37595:32044,\n37596:29226,\n37597:21514,\n37598:37347,\n37599:40372,\n37600:20141,\n37601:20302,\n37602:20572,\n37603:20597,\n37604:21059,\n37605:35998,\n37606:21576,\n37607:22564,\n37608:23450,\n37609:24093,\n37610:24213,\n37611:24237,\n37612:24311,\n37613:24351,\n37614:24716,\n37615:25269,\n37616:25402,\n37617:25552,\n37618:26799,\n37619:27712,\n37620:30855,\n37621:31118,\n37622:31243,\n37623:32224,\n37624:33351,\n37625:35330,\n37626:35558,\n37627:36420,\n37628:36883,\n37696:37048,\n37697:37165,\n37698:37336,\n37699:40718,\n37700:27877,\n37701:25688,\n37702:25826,\n37703:25973,\n37704:28404,\n37705:30340,\n37706:31515,\n37707:36969,\n37708:37841,\n37709:28346,\n37710:21746,\n37711:24505,\n37712:25764,\n37713:36685,\n37714:36845,\n37715:37444,\n37716:20856,\n37717:22635,\n37718:22825,\n37719:23637,\n37720:24215,\n37721:28155,\n37722:32399,\n37723:29980,\n37724:36028,\n37725:36578,\n37726:39003,\n37727:28857,\n37728:20253,\n37729:27583,\n37730:28593,\n37731:30000,\n37732:38651,\n37733:20814,\n37734:21520,\n37735:22581,\n37736:22615,\n37737:22956,\n37738:23648,\n37739:24466,\n37740:26007,\n37741:26460,\n37742:28193,\n37743:30331,\n37744:33759,\n37745:36077,\n37746:36884,\n37747:37117,\n37748:37709,\n37749:30757,\n37750:30778,\n37751:21162,\n37752:24230,\n37753:22303,\n37754:22900,\n37755:24594,\n37756:20498,\n37757:20826,\n37758:20908,\n37760:20941,\n37761:20992,\n37762:21776,\n37763:22612,\n37764:22616,\n37765:22871,\n37766:23445,\n37767:23798,\n37768:23947,\n37769:24764,\n37770:25237,\n37771:25645,\n37772:26481,\n37773:26691,\n37774:26812,\n37775:26847,\n37776:30423,\n37777:28120,\n37778:28271,\n37779:28059,\n37780:28783,\n37781:29128,\n37782:24403,\n37783:30168,\n37784:31095,\n37785:31561,\n37786:31572,\n37787:31570,\n37788:31958,\n37789:32113,\n37790:21040,\n37791:33891,\n37792:34153,\n37793:34276,\n37794:35342,\n37795:35588,\n37796:35910,\n37797:36367,\n37798:36867,\n37799:36879,\n37800:37913,\n37801:38518,\n37802:38957,\n37803:39472,\n37804:38360,\n37805:20685,\n37806:21205,\n37807:21516,\n37808:22530,\n37809:23566,\n37810:24999,\n37811:25758,\n37812:27934,\n37813:30643,\n37814:31461,\n37815:33012,\n37816:33796,\n37817:36947,\n37818:37509,\n37819:23776,\n37820:40199,\n37821:21311,\n37822:24471,\n37823:24499,\n37824:28060,\n37825:29305,\n37826:30563,\n37827:31167,\n37828:31716,\n37829:27602,\n37830:29420,\n37831:35501,\n37832:26627,\n37833:27233,\n37834:20984,\n37835:31361,\n37836:26932,\n37837:23626,\n37838:40182,\n37839:33515,\n37840:23493,\n37841:37193,\n37842:28702,\n37843:22136,\n37844:23663,\n37845:24775,\n37846:25958,\n37847:27788,\n37848:35930,\n37849:36929,\n37850:38931,\n37851:21585,\n37852:26311,\n37853:37389,\n37854:22856,\n37855:37027,\n37856:20869,\n37857:20045,\n37858:20970,\n37859:34201,\n37860:35598,\n37861:28760,\n37862:25466,\n37863:37707,\n37864:26978,\n37865:39348,\n37866:32260,\n37867:30071,\n37868:21335,\n37869:26976,\n37870:36575,\n37871:38627,\n37872:27741,\n37873:20108,\n37874:23612,\n37875:24336,\n37876:36841,\n37877:21250,\n37878:36049,\n37879:32905,\n37880:34425,\n37881:24319,\n37882:26085,\n37883:20083,\n37884:20837,\n37952:22914,\n37953:23615,\n37954:38894,\n37955:20219,\n37956:22922,\n37957:24525,\n37958:35469,\n37959:28641,\n37960:31152,\n37961:31074,\n37962:23527,\n37963:33905,\n37964:29483,\n37965:29105,\n37966:24180,\n37967:24565,\n37968:25467,\n37969:25754,\n37970:29123,\n37971:31896,\n37972:20035,\n37973:24316,\n37974:20043,\n37975:22492,\n37976:22178,\n37977:24745,\n37978:28611,\n37979:32013,\n37980:33021,\n37981:33075,\n37982:33215,\n37983:36786,\n37984:35223,\n37985:34468,\n37986:24052,\n37987:25226,\n37988:25773,\n37989:35207,\n37990:26487,\n37991:27874,\n37992:27966,\n37993:29750,\n37994:30772,\n37995:23110,\n37996:32629,\n37997:33453,\n37998:39340,\n37999:20467,\n38000:24259,\n38001:25309,\n38002:25490,\n38003:25943,\n38004:26479,\n38005:30403,\n38006:29260,\n38007:32972,\n38008:32954,\n38009:36649,\n38010:37197,\n38011:20493,\n38012:22521,\n38013:23186,\n38014:26757,\n38016:26995,\n38017:29028,\n38018:29437,\n38019:36023,\n38020:22770,\n38021:36064,\n38022:38506,\n38023:36889,\n38024:34687,\n38025:31204,\n38026:30695,\n38027:33833,\n38028:20271,\n38029:21093,\n38030:21338,\n38031:25293,\n38032:26575,\n38033:27850,\n38034:30333,\n38035:31636,\n38036:31893,\n38037:33334,\n38038:34180,\n38039:36843,\n38040:26333,\n38041:28448,\n38042:29190,\n38043:32283,\n38044:33707,\n38045:39361,\n38046:40614,\n38047:20989,\n38048:31665,\n38049:30834,\n38050:31672,\n38051:32903,\n38052:31560,\n38053:27368,\n38054:24161,\n38055:32908,\n38056:30033,\n38057:30048,\n38058:20843,\n38059:37474,\n38060:28300,\n38061:30330,\n38062:37271,\n38063:39658,\n38064:20240,\n38065:32624,\n38066:25244,\n38067:31567,\n38068:38309,\n38069:40169,\n38070:22138,\n38071:22617,\n38072:34532,\n38073:38588,\n38074:20276,\n38075:21028,\n38076:21322,\n38077:21453,\n38078:21467,\n38079:24070,\n38080:25644,\n38081:26001,\n38082:26495,\n38083:27710,\n38084:27726,\n38085:29256,\n38086:29359,\n38087:29677,\n38088:30036,\n38089:32321,\n38090:33324,\n38091:34281,\n38092:36009,\n38093:31684,\n38094:37318,\n38095:29033,\n38096:38930,\n38097:39151,\n38098:25405,\n38099:26217,\n38100:30058,\n38101:30436,\n38102:30928,\n38103:34115,\n38104:34542,\n38105:21290,\n38106:21329,\n38107:21542,\n38108:22915,\n38109:24199,\n38110:24444,\n38111:24754,\n38112:25161,\n38113:25209,\n38114:25259,\n38115:26000,\n38116:27604,\n38117:27852,\n38118:30130,\n38119:30382,\n38120:30865,\n38121:31192,\n38122:32203,\n38123:32631,\n38124:32933,\n38125:34987,\n38126:35513,\n38127:36027,\n38128:36991,\n38129:38750,\n38130:39131,\n38131:27147,\n38132:31800,\n38133:20633,\n38134:23614,\n38135:24494,\n38136:26503,\n38137:27608,\n38138:29749,\n38139:30473,\n38140:32654,\n38208:40763,\n38209:26570,\n38210:31255,\n38211:21305,\n38212:30091,\n38213:39661,\n38214:24422,\n38215:33181,\n38216:33777,\n38217:32920,\n38218:24380,\n38219:24517,\n38220:30050,\n38221:31558,\n38222:36924,\n38223:26727,\n38224:23019,\n38225:23195,\n38226:32016,\n38227:30334,\n38228:35628,\n38229:20469,\n38230:24426,\n38231:27161,\n38232:27703,\n38233:28418,\n38234:29922,\n38235:31080,\n38236:34920,\n38237:35413,\n38238:35961,\n38239:24287,\n38240:25551,\n38241:30149,\n38242:31186,\n38243:33495,\n38244:37672,\n38245:37618,\n38246:33948,\n38247:34541,\n38248:39981,\n38249:21697,\n38250:24428,\n38251:25996,\n38252:27996,\n38253:28693,\n38254:36007,\n38255:36051,\n38256:38971,\n38257:25935,\n38258:29942,\n38259:19981,\n38260:20184,\n38261:22496,\n38262:22827,\n38263:23142,\n38264:23500,\n38265:20904,\n38266:24067,\n38267:24220,\n38268:24598,\n38269:25206,\n38270:25975,\n38272:26023,\n38273:26222,\n38274:28014,\n38275:29238,\n38276:31526,\n38277:33104,\n38278:33178,\n38279:33433,\n38280:35676,\n38281:36000,\n38282:36070,\n38283:36212,\n38284:38428,\n38285:38468,\n38286:20398,\n38287:25771,\n38288:27494,\n38289:33310,\n38290:33889,\n38291:34154,\n38292:37096,\n38293:23553,\n38294:26963,\n38295:39080,\n38296:33914,\n38297:34135,\n38298:20239,\n38299:21103,\n38300:24489,\n38301:24133,\n38302:26381,\n38303:31119,\n38304:33145,\n38305:35079,\n38306:35206,\n38307:28149,\n38308:24343,\n38309:25173,\n38310:27832,\n38311:20175,\n38312:29289,\n38313:39826,\n38314:20998,\n38315:21563,\n38316:22132,\n38317:22707,\n38318:24996,\n38319:25198,\n38320:28954,\n38321:22894,\n38322:31881,\n38323:31966,\n38324:32027,\n38325:38640,\n38326:25991,\n38327:32862,\n38328:19993,\n38329:20341,\n38330:20853,\n38331:22592,\n38332:24163,\n38333:24179,\n38334:24330,\n38335:26564,\n38336:20006,\n38337:34109,\n38338:38281,\n38339:38491,\n38340:31859,\n38341:38913,\n38342:20731,\n38343:22721,\n38344:30294,\n38345:30887,\n38346:21029,\n38347:30629,\n38348:34065,\n38349:31622,\n38350:20559,\n38351:22793,\n38352:29255,\n38353:31687,\n38354:32232,\n38355:36794,\n38356:36820,\n38357:36941,\n38358:20415,\n38359:21193,\n38360:23081,\n38361:24321,\n38362:38829,\n38363:20445,\n38364:33303,\n38365:37610,\n38366:22275,\n38367:25429,\n38368:27497,\n38369:29995,\n38370:35036,\n38371:36628,\n38372:31298,\n38373:21215,\n38374:22675,\n38375:24917,\n38376:25098,\n38377:26286,\n38378:27597,\n38379:31807,\n38380:33769,\n38381:20515,\n38382:20472,\n38383:21253,\n38384:21574,\n38385:22577,\n38386:22857,\n38387:23453,\n38388:23792,\n38389:23791,\n38390:23849,\n38391:24214,\n38392:25265,\n38393:25447,\n38394:25918,\n38395:26041,\n38396:26379,\n38464:27861,\n38465:27873,\n38466:28921,\n38467:30770,\n38468:32299,\n38469:32990,\n38470:33459,\n38471:33804,\n38472:34028,\n38473:34562,\n38474:35090,\n38475:35370,\n38476:35914,\n38477:37030,\n38478:37586,\n38479:39165,\n38480:40179,\n38481:40300,\n38482:20047,\n38483:20129,\n38484:20621,\n38485:21078,\n38486:22346,\n38487:22952,\n38488:24125,\n38489:24536,\n38490:24537,\n38491:25151,\n38492:26292,\n38493:26395,\n38494:26576,\n38495:26834,\n38496:20882,\n38497:32033,\n38498:32938,\n38499:33192,\n38500:35584,\n38501:35980,\n38502:36031,\n38503:37502,\n38504:38450,\n38505:21536,\n38506:38956,\n38507:21271,\n38508:20693,\n38509:21340,\n38510:22696,\n38511:25778,\n38512:26420,\n38513:29287,\n38514:30566,\n38515:31302,\n38516:37350,\n38517:21187,\n38518:27809,\n38519:27526,\n38520:22528,\n38521:24140,\n38522:22868,\n38523:26412,\n38524:32763,\n38525:20961,\n38526:30406,\n38528:25705,\n38529:30952,\n38530:39764,\n38531:40635,\n38532:22475,\n38533:22969,\n38534:26151,\n38535:26522,\n38536:27598,\n38537:21737,\n38538:27097,\n38539:24149,\n38540:33180,\n38541:26517,\n38542:39850,\n38543:26622,\n38544:40018,\n38545:26717,\n38546:20134,\n38547:20451,\n38548:21448,\n38549:25273,\n38550:26411,\n38551:27819,\n38552:36804,\n38553:20397,\n38554:32365,\n38555:40639,\n38556:19975,\n38557:24930,\n38558:28288,\n38559:28459,\n38560:34067,\n38561:21619,\n38562:26410,\n38563:39749,\n38564:24051,\n38565:31637,\n38566:23724,\n38567:23494,\n38568:34588,\n38569:28234,\n38570:34001,\n38571:31252,\n38572:33032,\n38573:22937,\n38574:31885,\n38575:27665,\n38576:30496,\n38577:21209,\n38578:22818,\n38579:28961,\n38580:29279,\n38581:30683,\n38582:38695,\n38583:40289,\n38584:26891,\n38585:23167,\n38586:23064,\n38587:20901,\n38588:21517,\n38589:21629,\n38590:26126,\n38591:30431,\n38592:36855,\n38593:37528,\n38594:40180,\n38595:23018,\n38596:29277,\n38597:28357,\n38598:20813,\n38599:26825,\n38600:32191,\n38601:32236,\n38602:38754,\n38603:40634,\n38604:25720,\n38605:27169,\n38606:33538,\n38607:22916,\n38608:23391,\n38609:27611,\n38610:29467,\n38611:30450,\n38612:32178,\n38613:32791,\n38614:33945,\n38615:20786,\n38616:26408,\n38617:40665,\n38618:30446,\n38619:26466,\n38620:21247,\n38621:39173,\n38622:23588,\n38623:25147,\n38624:31870,\n38625:36016,\n38626:21839,\n38627:24758,\n38628:32011,\n38629:38272,\n38630:21249,\n38631:20063,\n38632:20918,\n38633:22812,\n38634:29242,\n38635:32822,\n38636:37326,\n38637:24357,\n38638:30690,\n38639:21380,\n38640:24441,\n38641:32004,\n38642:34220,\n38643:35379,\n38644:36493,\n38645:38742,\n38646:26611,\n38647:34222,\n38648:37971,\n38649:24841,\n38650:24840,\n38651:27833,\n38652:30290,\n38720:35565,\n38721:36664,\n38722:21807,\n38723:20305,\n38724:20778,\n38725:21191,\n38726:21451,\n38727:23461,\n38728:24189,\n38729:24736,\n38730:24962,\n38731:25558,\n38732:26377,\n38733:26586,\n38734:28263,\n38735:28044,\n38736:29494,\n38737:29495,\n38738:30001,\n38739:31056,\n38740:35029,\n38741:35480,\n38742:36938,\n38743:37009,\n38744:37109,\n38745:38596,\n38746:34701,\n38747:22805,\n38748:20104,\n38749:20313,\n38750:19982,\n38751:35465,\n38752:36671,\n38753:38928,\n38754:20653,\n38755:24188,\n38756:22934,\n38757:23481,\n38758:24248,\n38759:25562,\n38760:25594,\n38761:25793,\n38762:26332,\n38763:26954,\n38764:27096,\n38765:27915,\n38766:28342,\n38767:29076,\n38768:29992,\n38769:31407,\n38770:32650,\n38771:32768,\n38772:33865,\n38773:33993,\n38774:35201,\n38775:35617,\n38776:36362,\n38777:36965,\n38778:38525,\n38779:39178,\n38780:24958,\n38781:25233,\n38782:27442,\n38784:27779,\n38785:28020,\n38786:32716,\n38787:32764,\n38788:28096,\n38789:32645,\n38790:34746,\n38791:35064,\n38792:26469,\n38793:33713,\n38794:38972,\n38795:38647,\n38796:27931,\n38797:32097,\n38798:33853,\n38799:37226,\n38800:20081,\n38801:21365,\n38802:23888,\n38803:27396,\n38804:28651,\n38805:34253,\n38806:34349,\n38807:35239,\n38808:21033,\n38809:21519,\n38810:23653,\n38811:26446,\n38812:26792,\n38813:29702,\n38814:29827,\n38815:30178,\n38816:35023,\n38817:35041,\n38818:37324,\n38819:38626,\n38820:38520,\n38821:24459,\n38822:29575,\n38823:31435,\n38824:33870,\n38825:25504,\n38826:30053,\n38827:21129,\n38828:27969,\n38829:28316,\n38830:29705,\n38831:30041,\n38832:30827,\n38833:31890,\n38834:38534,\n38835:31452,\n38836:40845,\n38837:20406,\n38838:24942,\n38839:26053,\n38840:34396,\n38841:20102,\n38842:20142,\n38843:20698,\n38844:20001,\n38845:20940,\n38846:23534,\n38847:26009,\n38848:26753,\n38849:28092,\n38850:29471,\n38851:30274,\n38852:30637,\n38853:31260,\n38854:31975,\n38855:33391,\n38856:35538,\n38857:36988,\n38858:37327,\n38859:38517,\n38860:38936,\n38861:21147,\n38862:32209,\n38863:20523,\n38864:21400,\n38865:26519,\n38866:28107,\n38867:29136,\n38868:29747,\n38869:33256,\n38870:36650,\n38871:38563,\n38872:40023,\n38873:40607,\n38874:29792,\n38875:22593,\n38876:28057,\n38877:32047,\n38878:39006,\n38879:20196,\n38880:20278,\n38881:20363,\n38882:20919,\n38883:21169,\n38884:23994,\n38885:24604,\n38886:29618,\n38887:31036,\n38888:33491,\n38889:37428,\n38890:38583,\n38891:38646,\n38892:38666,\n38893:40599,\n38894:40802,\n38895:26278,\n38896:27508,\n38897:21015,\n38898:21155,\n38899:28872,\n38900:35010,\n38901:24265,\n38902:24651,\n38903:24976,\n38904:28451,\n38905:29001,\n38906:31806,\n38907:32244,\n38908:32879,\n38976:34030,\n38977:36899,\n38978:37676,\n38979:21570,\n38980:39791,\n38981:27347,\n38982:28809,\n38983:36034,\n38984:36335,\n38985:38706,\n38986:21172,\n38987:23105,\n38988:24266,\n38989:24324,\n38990:26391,\n38991:27004,\n38992:27028,\n38993:28010,\n38994:28431,\n38995:29282,\n38996:29436,\n38997:31725,\n38998:32769,\n38999:32894,\n39000:34635,\n39001:37070,\n39002:20845,\n39003:40595,\n39004:31108,\n39005:32907,\n39006:37682,\n39007:35542,\n39008:20525,\n39009:21644,\n39010:35441,\n39011:27498,\n39012:36036,\n39013:33031,\n39014:24785,\n39015:26528,\n39016:40434,\n39017:20121,\n39018:20120,\n39019:39952,\n39020:35435,\n39021:34241,\n39022:34152,\n39023:26880,\n39024:28286,\n39025:30871,\n39026:33109,\n39071:24332,\n39072:19984,\n39073:19989,\n39074:20010,\n39075:20017,\n39076:20022,\n39077:20028,\n39078:20031,\n39079:20034,\n39080:20054,\n39081:20056,\n39082:20098,\n39083:20101,\n39084:35947,\n39085:20106,\n39086:33298,\n39087:24333,\n39088:20110,\n39089:20126,\n39090:20127,\n39091:20128,\n39092:20130,\n39093:20144,\n39094:20147,\n39095:20150,\n39096:20174,\n39097:20173,\n39098:20164,\n39099:20166,\n39100:20162,\n39101:20183,\n39102:20190,\n39103:20205,\n39104:20191,\n39105:20215,\n39106:20233,\n39107:20314,\n39108:20272,\n39109:20315,\n39110:20317,\n39111:20311,\n39112:20295,\n39113:20342,\n39114:20360,\n39115:20367,\n39116:20376,\n39117:20347,\n39118:20329,\n39119:20336,\n39120:20369,\n39121:20335,\n39122:20358,\n39123:20374,\n39124:20760,\n39125:20436,\n39126:20447,\n39127:20430,\n39128:20440,\n39129:20443,\n39130:20433,\n39131:20442,\n39132:20432,\n39133:20452,\n39134:20453,\n39135:20506,\n39136:20520,\n39137:20500,\n39138:20522,\n39139:20517,\n39140:20485,\n39141:20252,\n39142:20470,\n39143:20513,\n39144:20521,\n39145:20524,\n39146:20478,\n39147:20463,\n39148:20497,\n39149:20486,\n39150:20547,\n39151:20551,\n39152:26371,\n39153:20565,\n39154:20560,\n39155:20552,\n39156:20570,\n39157:20566,\n39158:20588,\n39159:20600,\n39160:20608,\n39161:20634,\n39162:20613,\n39163:20660,\n39164:20658,\n39232:20681,\n39233:20682,\n39234:20659,\n39235:20674,\n39236:20694,\n39237:20702,\n39238:20709,\n39239:20717,\n39240:20707,\n39241:20718,\n39242:20729,\n39243:20725,\n39244:20745,\n39245:20737,\n39246:20738,\n39247:20758,\n39248:20757,\n39249:20756,\n39250:20762,\n39251:20769,\n39252:20794,\n39253:20791,\n39254:20796,\n39255:20795,\n39256:20799,\n39257:20800,\n39258:20818,\n39259:20812,\n39260:20820,\n39261:20834,\n39262:31480,\n39263:20841,\n39264:20842,\n39265:20846,\n39266:20864,\n39267:20866,\n39268:22232,\n39269:20876,\n39270:20873,\n39271:20879,\n39272:20881,\n39273:20883,\n39274:20885,\n39275:20886,\n39276:20900,\n39277:20902,\n39278:20898,\n39279:20905,\n39280:20906,\n39281:20907,\n39282:20915,\n39283:20913,\n39284:20914,\n39285:20912,\n39286:20917,\n39287:20925,\n39288:20933,\n39289:20937,\n39290:20955,\n39291:20960,\n39292:34389,\n39293:20969,\n39294:20973,\n39296:20976,\n39297:20981,\n39298:20990,\n39299:20996,\n39300:21003,\n39301:21012,\n39302:21006,\n39303:21031,\n39304:21034,\n39305:21038,\n39306:21043,\n39307:21049,\n39308:21071,\n39309:21060,\n39310:21067,\n39311:21068,\n39312:21086,\n39313:21076,\n39314:21098,\n39315:21108,\n39316:21097,\n39317:21107,\n39318:21119,\n39319:21117,\n39320:21133,\n39321:21140,\n39322:21138,\n39323:21105,\n39324:21128,\n39325:21137,\n39326:36776,\n39327:36775,\n39328:21164,\n39329:21165,\n39330:21180,\n39331:21173,\n39332:21185,\n39333:21197,\n39334:21207,\n39335:21214,\n39336:21219,\n39337:21222,\n39338:39149,\n39339:21216,\n39340:21235,\n39341:21237,\n39342:21240,\n39343:21241,\n39344:21254,\n39345:21256,\n39346:30008,\n39347:21261,\n39348:21264,\n39349:21263,\n39350:21269,\n39351:21274,\n39352:21283,\n39353:21295,\n39354:21297,\n39355:21299,\n39356:21304,\n39357:21312,\n39358:21318,\n39359:21317,\n39360:19991,\n39361:21321,\n39362:21325,\n39363:20950,\n39364:21342,\n39365:21353,\n39366:21358,\n39367:22808,\n39368:21371,\n39369:21367,\n39370:21378,\n39371:21398,\n39372:21408,\n39373:21414,\n39374:21413,\n39375:21422,\n39376:21424,\n39377:21430,\n39378:21443,\n39379:31762,\n39380:38617,\n39381:21471,\n39382:26364,\n39383:29166,\n39384:21486,\n39385:21480,\n39386:21485,\n39387:21498,\n39388:21505,\n39389:21565,\n39390:21568,\n39391:21548,\n39392:21549,\n39393:21564,\n39394:21550,\n39395:21558,\n39396:21545,\n39397:21533,\n39398:21582,\n39399:21647,\n39400:21621,\n39401:21646,\n39402:21599,\n39403:21617,\n39404:21623,\n39405:21616,\n39406:21650,\n39407:21627,\n39408:21632,\n39409:21622,\n39410:21636,\n39411:21648,\n39412:21638,\n39413:21703,\n39414:21666,\n39415:21688,\n39416:21669,\n39417:21676,\n39418:21700,\n39419:21704,\n39420:21672,\n39488:21675,\n39489:21698,\n39490:21668,\n39491:21694,\n39492:21692,\n39493:21720,\n39494:21733,\n39495:21734,\n39496:21775,\n39497:21780,\n39498:21757,\n39499:21742,\n39500:21741,\n39501:21754,\n39502:21730,\n39503:21817,\n39504:21824,\n39505:21859,\n39506:21836,\n39507:21806,\n39508:21852,\n39509:21829,\n39510:21846,\n39511:21847,\n39512:21816,\n39513:21811,\n39514:21853,\n39515:21913,\n39516:21888,\n39517:21679,\n39518:21898,\n39519:21919,\n39520:21883,\n39521:21886,\n39522:21912,\n39523:21918,\n39524:21934,\n39525:21884,\n39526:21891,\n39527:21929,\n39528:21895,\n39529:21928,\n39530:21978,\n39531:21957,\n39532:21983,\n39533:21956,\n39534:21980,\n39535:21988,\n39536:21972,\n39537:22036,\n39538:22007,\n39539:22038,\n39540:22014,\n39541:22013,\n39542:22043,\n39543:22009,\n39544:22094,\n39545:22096,\n39546:29151,\n39547:22068,\n39548:22070,\n39549:22066,\n39550:22072,\n39552:22123,\n39553:22116,\n39554:22063,\n39555:22124,\n39556:22122,\n39557:22150,\n39558:22144,\n39559:22154,\n39560:22176,\n39561:22164,\n39562:22159,\n39563:22181,\n39564:22190,\n39565:22198,\n39566:22196,\n39567:22210,\n39568:22204,\n39569:22209,\n39570:22211,\n39571:22208,\n39572:22216,\n39573:22222,\n39574:22225,\n39575:22227,\n39576:22231,\n39577:22254,\n39578:22265,\n39579:22272,\n39580:22271,\n39581:22276,\n39582:22281,\n39583:22280,\n39584:22283,\n39585:22285,\n39586:22291,\n39587:22296,\n39588:22294,\n39589:21959,\n39590:22300,\n39591:22310,\n39592:22327,\n39593:22328,\n39594:22350,\n39595:22331,\n39596:22336,\n39597:22351,\n39598:22377,\n39599:22464,\n39600:22408,\n39601:22369,\n39602:22399,\n39603:22409,\n39604:22419,\n39605:22432,\n39606:22451,\n39607:22436,\n39608:22442,\n39609:22448,\n39610:22467,\n39611:22470,\n39612:22484,\n39613:22482,\n39614:22483,\n39615:22538,\n39616:22486,\n39617:22499,\n39618:22539,\n39619:22553,\n39620:22557,\n39621:22642,\n39622:22561,\n39623:22626,\n39624:22603,\n39625:22640,\n39626:27584,\n39627:22610,\n39628:22589,\n39629:22649,\n39630:22661,\n39631:22713,\n39632:22687,\n39633:22699,\n39634:22714,\n39635:22750,\n39636:22715,\n39637:22712,\n39638:22702,\n39639:22725,\n39640:22739,\n39641:22737,\n39642:22743,\n39643:22745,\n39644:22744,\n39645:22757,\n39646:22748,\n39647:22756,\n39648:22751,\n39649:22767,\n39650:22778,\n39651:22777,\n39652:22779,\n39653:22780,\n39654:22781,\n39655:22786,\n39656:22794,\n39657:22800,\n39658:22811,\n39659:26790,\n39660:22821,\n39661:22828,\n39662:22829,\n39663:22834,\n39664:22840,\n39665:22846,\n39666:31442,\n39667:22869,\n39668:22864,\n39669:22862,\n39670:22874,\n39671:22872,\n39672:22882,\n39673:22880,\n39674:22887,\n39675:22892,\n39676:22889,\n39744:22904,\n39745:22913,\n39746:22941,\n39747:20318,\n39748:20395,\n39749:22947,\n39750:22962,\n39751:22982,\n39752:23016,\n39753:23004,\n39754:22925,\n39755:23001,\n39756:23002,\n39757:23077,\n39758:23071,\n39759:23057,\n39760:23068,\n39761:23049,\n39762:23066,\n39763:23104,\n39764:23148,\n39765:23113,\n39766:23093,\n39767:23094,\n39768:23138,\n39769:23146,\n39770:23194,\n39771:23228,\n39772:23230,\n39773:23243,\n39774:23234,\n39775:23229,\n39776:23267,\n39777:23255,\n39778:23270,\n39779:23273,\n39780:23254,\n39781:23290,\n39782:23291,\n39783:23308,\n39784:23307,\n39785:23318,\n39786:23346,\n39787:23248,\n39788:23338,\n39789:23350,\n39790:23358,\n39791:23363,\n39792:23365,\n39793:23360,\n39794:23377,\n39795:23381,\n39796:23386,\n39797:23387,\n39798:23397,\n39799:23401,\n39800:23408,\n39801:23411,\n39802:23413,\n39803:23416,\n39804:25992,\n39805:23418,\n39806:23424,\n39808:23427,\n39809:23462,\n39810:23480,\n39811:23491,\n39812:23495,\n39813:23497,\n39814:23508,\n39815:23504,\n39816:23524,\n39817:23526,\n39818:23522,\n39819:23518,\n39820:23525,\n39821:23531,\n39822:23536,\n39823:23542,\n39824:23539,\n39825:23557,\n39826:23559,\n39827:23560,\n39828:23565,\n39829:23571,\n39830:23584,\n39831:23586,\n39832:23592,\n39833:23608,\n39834:23609,\n39835:23617,\n39836:23622,\n39837:23630,\n39838:23635,\n39839:23632,\n39840:23631,\n39841:23409,\n39842:23660,\n39843:23662,\n39844:20066,\n39845:23670,\n39846:23673,\n39847:23692,\n39848:23697,\n39849:23700,\n39850:22939,\n39851:23723,\n39852:23739,\n39853:23734,\n39854:23740,\n39855:23735,\n39856:23749,\n39857:23742,\n39858:23751,\n39859:23769,\n39860:23785,\n39861:23805,\n39862:23802,\n39863:23789,\n39864:23948,\n39865:23786,\n39866:23819,\n39867:23829,\n39868:23831,\n39869:23900,\n39870:23839,\n39871:23835,\n39872:23825,\n39873:23828,\n39874:23842,\n39875:23834,\n39876:23833,\n39877:23832,\n39878:23884,\n39879:23890,\n39880:23886,\n39881:23883,\n39882:23916,\n39883:23923,\n39884:23926,\n39885:23943,\n39886:23940,\n39887:23938,\n39888:23970,\n39889:23965,\n39890:23980,\n39891:23982,\n39892:23997,\n39893:23952,\n39894:23991,\n39895:23996,\n39896:24009,\n39897:24013,\n39898:24019,\n39899:24018,\n39900:24022,\n39901:24027,\n39902:24043,\n39903:24050,\n39904:24053,\n39905:24075,\n39906:24090,\n39907:24089,\n39908:24081,\n39909:24091,\n39910:24118,\n39911:24119,\n39912:24132,\n39913:24131,\n39914:24128,\n39915:24142,\n39916:24151,\n39917:24148,\n39918:24159,\n39919:24162,\n39920:24164,\n39921:24135,\n39922:24181,\n39923:24182,\n39924:24186,\n39925:40636,\n39926:24191,\n39927:24224,\n39928:24257,\n39929:24258,\n39930:24264,\n39931:24272,\n39932:24271,\n40000:24278,\n40001:24291,\n40002:24285,\n40003:24282,\n40004:24283,\n40005:24290,\n40006:24289,\n40007:24296,\n40008:24297,\n40009:24300,\n40010:24305,\n40011:24307,\n40012:24304,\n40013:24308,\n40014:24312,\n40015:24318,\n40016:24323,\n40017:24329,\n40018:24413,\n40019:24412,\n40020:24331,\n40021:24337,\n40022:24342,\n40023:24361,\n40024:24365,\n40025:24376,\n40026:24385,\n40027:24392,\n40028:24396,\n40029:24398,\n40030:24367,\n40031:24401,\n40032:24406,\n40033:24407,\n40034:24409,\n40035:24417,\n40036:24429,\n40037:24435,\n40038:24439,\n40039:24451,\n40040:24450,\n40041:24447,\n40042:24458,\n40043:24456,\n40044:24465,\n40045:24455,\n40046:24478,\n40047:24473,\n40048:24472,\n40049:24480,\n40050:24488,\n40051:24493,\n40052:24508,\n40053:24534,\n40054:24571,\n40055:24548,\n40056:24568,\n40057:24561,\n40058:24541,\n40059:24755,\n40060:24575,\n40061:24609,\n40062:24672,\n40064:24601,\n40065:24592,\n40066:24617,\n40067:24590,\n40068:24625,\n40069:24603,\n40070:24597,\n40071:24619,\n40072:24614,\n40073:24591,\n40074:24634,\n40075:24666,\n40076:24641,\n40077:24682,\n40078:24695,\n40079:24671,\n40080:24650,\n40081:24646,\n40082:24653,\n40083:24675,\n40084:24643,\n40085:24676,\n40086:24642,\n40087:24684,\n40088:24683,\n40089:24665,\n40090:24705,\n40091:24717,\n40092:24807,\n40093:24707,\n40094:24730,\n40095:24708,\n40096:24731,\n40097:24726,\n40098:24727,\n40099:24722,\n40100:24743,\n40101:24715,\n40102:24801,\n40103:24760,\n40104:24800,\n40105:24787,\n40106:24756,\n40107:24560,\n40108:24765,\n40109:24774,\n40110:24757,\n40111:24792,\n40112:24909,\n40113:24853,\n40114:24838,\n40115:24822,\n40116:24823,\n40117:24832,\n40118:24820,\n40119:24826,\n40120:24835,\n40121:24865,\n40122:24827,\n40123:24817,\n40124:24845,\n40125:24846,\n40126:24903,\n40127:24894,\n40128:24872,\n40129:24871,\n40130:24906,\n40131:24895,\n40132:24892,\n40133:24876,\n40134:24884,\n40135:24893,\n40136:24898,\n40137:24900,\n40138:24947,\n40139:24951,\n40140:24920,\n40141:24921,\n40142:24922,\n40143:24939,\n40144:24948,\n40145:24943,\n40146:24933,\n40147:24945,\n40148:24927,\n40149:24925,\n40150:24915,\n40151:24949,\n40152:24985,\n40153:24982,\n40154:24967,\n40155:25004,\n40156:24980,\n40157:24986,\n40158:24970,\n40159:24977,\n40160:25003,\n40161:25006,\n40162:25036,\n40163:25034,\n40164:25033,\n40165:25079,\n40166:25032,\n40167:25027,\n40168:25030,\n40169:25018,\n40170:25035,\n40171:32633,\n40172:25037,\n40173:25062,\n40174:25059,\n40175:25078,\n40176:25082,\n40177:25076,\n40178:25087,\n40179:25085,\n40180:25084,\n40181:25086,\n40182:25088,\n40183:25096,\n40184:25097,\n40185:25101,\n40186:25100,\n40187:25108,\n40188:25115,\n40256:25118,\n40257:25121,\n40258:25130,\n40259:25134,\n40260:25136,\n40261:25138,\n40262:25139,\n40263:25153,\n40264:25166,\n40265:25182,\n40266:25187,\n40267:25179,\n40268:25184,\n40269:25192,\n40270:25212,\n40271:25218,\n40272:25225,\n40273:25214,\n40274:25234,\n40275:25235,\n40276:25238,\n40277:25300,\n40278:25219,\n40279:25236,\n40280:25303,\n40281:25297,\n40282:25275,\n40283:25295,\n40284:25343,\n40285:25286,\n40286:25812,\n40287:25288,\n40288:25308,\n40289:25292,\n40290:25290,\n40291:25282,\n40292:25287,\n40293:25243,\n40294:25289,\n40295:25356,\n40296:25326,\n40297:25329,\n40298:25383,\n40299:25346,\n40300:25352,\n40301:25327,\n40302:25333,\n40303:25424,\n40304:25406,\n40305:25421,\n40306:25628,\n40307:25423,\n40308:25494,\n40309:25486,\n40310:25472,\n40311:25515,\n40312:25462,\n40313:25507,\n40314:25487,\n40315:25481,\n40316:25503,\n40317:25525,\n40318:25451,\n40320:25449,\n40321:25534,\n40322:25577,\n40323:25536,\n40324:25542,\n40325:25571,\n40326:25545,\n40327:25554,\n40328:25590,\n40329:25540,\n40330:25622,\n40331:25652,\n40332:25606,\n40333:25619,\n40334:25638,\n40335:25654,\n40336:25885,\n40337:25623,\n40338:25640,\n40339:25615,\n40340:25703,\n40341:25711,\n40342:25718,\n40343:25678,\n40344:25898,\n40345:25749,\n40346:25747,\n40347:25765,\n40348:25769,\n40349:25736,\n40350:25788,\n40351:25818,\n40352:25810,\n40353:25797,\n40354:25799,\n40355:25787,\n40356:25816,\n40357:25794,\n40358:25841,\n40359:25831,\n40360:33289,\n40361:25824,\n40362:25825,\n40363:25260,\n40364:25827,\n40365:25839,\n40366:25900,\n40367:25846,\n40368:25844,\n40369:25842,\n40370:25850,\n40371:25856,\n40372:25853,\n40373:25880,\n40374:25884,\n40375:25861,\n40376:25892,\n40377:25891,\n40378:25899,\n40379:25908,\n40380:25909,\n40381:25911,\n40382:25910,\n40383:25912,\n40384:30027,\n40385:25928,\n40386:25942,\n40387:25941,\n40388:25933,\n40389:25944,\n40390:25950,\n40391:25949,\n40392:25970,\n40393:25976,\n40394:25986,\n40395:25987,\n40396:35722,\n40397:26011,\n40398:26015,\n40399:26027,\n40400:26039,\n40401:26051,\n40402:26054,\n40403:26049,\n40404:26052,\n40405:26060,\n40406:26066,\n40407:26075,\n40408:26073,\n40409:26080,\n40410:26081,\n40411:26097,\n40412:26482,\n40413:26122,\n40414:26115,\n40415:26107,\n40416:26483,\n40417:26165,\n40418:26166,\n40419:26164,\n40420:26140,\n40421:26191,\n40422:26180,\n40423:26185,\n40424:26177,\n40425:26206,\n40426:26205,\n40427:26212,\n40428:26215,\n40429:26216,\n40430:26207,\n40431:26210,\n40432:26224,\n40433:26243,\n40434:26248,\n40435:26254,\n40436:26249,\n40437:26244,\n40438:26264,\n40439:26269,\n40440:26305,\n40441:26297,\n40442:26313,\n40443:26302,\n40444:26300,\n40512:26308,\n40513:26296,\n40514:26326,\n40515:26330,\n40516:26336,\n40517:26175,\n40518:26342,\n40519:26345,\n40520:26352,\n40521:26357,\n40522:26359,\n40523:26383,\n40524:26390,\n40525:26398,\n40526:26406,\n40527:26407,\n40528:38712,\n40529:26414,\n40530:26431,\n40531:26422,\n40532:26433,\n40533:26424,\n40534:26423,\n40535:26438,\n40536:26462,\n40537:26464,\n40538:26457,\n40539:26467,\n40540:26468,\n40541:26505,\n40542:26480,\n40543:26537,\n40544:26492,\n40545:26474,\n40546:26508,\n40547:26507,\n40548:26534,\n40549:26529,\n40550:26501,\n40551:26551,\n40552:26607,\n40553:26548,\n40554:26604,\n40555:26547,\n40556:26601,\n40557:26552,\n40558:26596,\n40559:26590,\n40560:26589,\n40561:26594,\n40562:26606,\n40563:26553,\n40564:26574,\n40565:26566,\n40566:26599,\n40567:27292,\n40568:26654,\n40569:26694,\n40570:26665,\n40571:26688,\n40572:26701,\n40573:26674,\n40574:26702,\n40576:26803,\n40577:26667,\n40578:26713,\n40579:26723,\n40580:26743,\n40581:26751,\n40582:26783,\n40583:26767,\n40584:26797,\n40585:26772,\n40586:26781,\n40587:26779,\n40588:26755,\n40589:27310,\n40590:26809,\n40591:26740,\n40592:26805,\n40593:26784,\n40594:26810,\n40595:26895,\n40596:26765,\n40597:26750,\n40598:26881,\n40599:26826,\n40600:26888,\n40601:26840,\n40602:26914,\n40603:26918,\n40604:26849,\n40605:26892,\n40606:26829,\n40607:26836,\n40608:26855,\n40609:26837,\n40610:26934,\n40611:26898,\n40612:26884,\n40613:26839,\n40614:26851,\n40615:26917,\n40616:26873,\n40617:26848,\n40618:26863,\n40619:26920,\n40620:26922,\n40621:26906,\n40622:26915,\n40623:26913,\n40624:26822,\n40625:27001,\n40626:26999,\n40627:26972,\n40628:27000,\n40629:26987,\n40630:26964,\n40631:27006,\n40632:26990,\n40633:26937,\n40634:26996,\n40635:26941,\n40636:26969,\n40637:26928,\n40638:26977,\n40639:26974,\n40640:26973,\n40641:27009,\n40642:26986,\n40643:27058,\n40644:27054,\n40645:27088,\n40646:27071,\n40647:27073,\n40648:27091,\n40649:27070,\n40650:27086,\n40651:23528,\n40652:27082,\n40653:27101,\n40654:27067,\n40655:27075,\n40656:27047,\n40657:27182,\n40658:27025,\n40659:27040,\n40660:27036,\n40661:27029,\n40662:27060,\n40663:27102,\n40664:27112,\n40665:27138,\n40666:27163,\n40667:27135,\n40668:27402,\n40669:27129,\n40670:27122,\n40671:27111,\n40672:27141,\n40673:27057,\n40674:27166,\n40675:27117,\n40676:27156,\n40677:27115,\n40678:27146,\n40679:27154,\n40680:27329,\n40681:27171,\n40682:27155,\n40683:27204,\n40684:27148,\n40685:27250,\n40686:27190,\n40687:27256,\n40688:27207,\n40689:27234,\n40690:27225,\n40691:27238,\n40692:27208,\n40693:27192,\n40694:27170,\n40695:27280,\n40696:27277,\n40697:27296,\n40698:27268,\n40699:27298,\n40700:27299,\n40768:27287,\n40769:34327,\n40770:27323,\n40771:27331,\n40772:27330,\n40773:27320,\n40774:27315,\n40775:27308,\n40776:27358,\n40777:27345,\n40778:27359,\n40779:27306,\n40780:27354,\n40781:27370,\n40782:27387,\n40783:27397,\n40784:34326,\n40785:27386,\n40786:27410,\n40787:27414,\n40788:39729,\n40789:27423,\n40790:27448,\n40791:27447,\n40792:30428,\n40793:27449,\n40794:39150,\n40795:27463,\n40796:27459,\n40797:27465,\n40798:27472,\n40799:27481,\n40800:27476,\n40801:27483,\n40802:27487,\n40803:27489,\n40804:27512,\n40805:27513,\n40806:27519,\n40807:27520,\n40808:27524,\n40809:27523,\n40810:27533,\n40811:27544,\n40812:27541,\n40813:27550,\n40814:27556,\n40815:27562,\n40816:27563,\n40817:27567,\n40818:27570,\n40819:27569,\n40820:27571,\n40821:27575,\n40822:27580,\n40823:27590,\n40824:27595,\n40825:27603,\n40826:27615,\n40827:27628,\n40828:27627,\n40829:27635,\n40830:27631,\n40832:40638,\n40833:27656,\n40834:27667,\n40835:27668,\n40836:27675,\n40837:27684,\n40838:27683,\n40839:27742,\n40840:27733,\n40841:27746,\n40842:27754,\n40843:27778,\n40844:27789,\n40845:27802,\n40846:27777,\n40847:27803,\n40848:27774,\n40849:27752,\n40850:27763,\n40851:27794,\n40852:27792,\n40853:27844,\n40854:27889,\n40855:27859,\n40856:27837,\n40857:27863,\n40858:27845,\n40859:27869,\n40860:27822,\n40861:27825,\n40862:27838,\n40863:27834,\n40864:27867,\n40865:27887,\n40866:27865,\n40867:27882,\n40868:27935,\n40869:34893,\n40870:27958,\n40871:27947,\n40872:27965,\n40873:27960,\n40874:27929,\n40875:27957,\n40876:27955,\n40877:27922,\n40878:27916,\n40879:28003,\n40880:28051,\n40881:28004,\n40882:27994,\n40883:28025,\n40884:27993,\n40885:28046,\n40886:28053,\n40887:28644,\n40888:28037,\n40889:28153,\n40890:28181,\n40891:28170,\n40892:28085,\n40893:28103,\n40894:28134,\n40895:28088,\n40896:28102,\n40897:28140,\n40898:28126,\n40899:28108,\n40900:28136,\n40901:28114,\n40902:28101,\n40903:28154,\n40904:28121,\n40905:28132,\n40906:28117,\n40907:28138,\n40908:28142,\n40909:28205,\n40910:28270,\n40911:28206,\n40912:28185,\n40913:28274,\n40914:28255,\n40915:28222,\n40916:28195,\n40917:28267,\n40918:28203,\n40919:28278,\n40920:28237,\n40921:28191,\n40922:28227,\n40923:28218,\n40924:28238,\n40925:28196,\n40926:28415,\n40927:28189,\n40928:28216,\n40929:28290,\n40930:28330,\n40931:28312,\n40932:28361,\n40933:28343,\n40934:28371,\n40935:28349,\n40936:28335,\n40937:28356,\n40938:28338,\n40939:28372,\n40940:28373,\n40941:28303,\n40942:28325,\n40943:28354,\n40944:28319,\n40945:28481,\n40946:28433,\n40947:28748,\n40948:28396,\n40949:28408,\n40950:28414,\n40951:28479,\n40952:28402,\n40953:28465,\n40954:28399,\n40955:28466,\n40956:28364,\n57408:28478,\n57409:28435,\n57410:28407,\n57411:28550,\n57412:28538,\n57413:28536,\n57414:28545,\n57415:28544,\n57416:28527,\n57417:28507,\n57418:28659,\n57419:28525,\n57420:28546,\n57421:28540,\n57422:28504,\n57423:28558,\n57424:28561,\n57425:28610,\n57426:28518,\n57427:28595,\n57428:28579,\n57429:28577,\n57430:28580,\n57431:28601,\n57432:28614,\n57433:28586,\n57434:28639,\n57435:28629,\n57436:28652,\n57437:28628,\n57438:28632,\n57439:28657,\n57440:28654,\n57441:28635,\n57442:28681,\n57443:28683,\n57444:28666,\n57445:28689,\n57446:28673,\n57447:28687,\n57448:28670,\n57449:28699,\n57450:28698,\n57451:28532,\n57452:28701,\n57453:28696,\n57454:28703,\n57455:28720,\n57456:28734,\n57457:28722,\n57458:28753,\n57459:28771,\n57460:28825,\n57461:28818,\n57462:28847,\n57463:28913,\n57464:28844,\n57465:28856,\n57466:28851,\n57467:28846,\n57468:28895,\n57469:28875,\n57470:28893,\n57472:28889,\n57473:28937,\n57474:28925,\n57475:28956,\n57476:28953,\n57477:29029,\n57478:29013,\n57479:29064,\n57480:29030,\n57481:29026,\n57482:29004,\n57483:29014,\n57484:29036,\n57485:29071,\n57486:29179,\n57487:29060,\n57488:29077,\n57489:29096,\n57490:29100,\n57491:29143,\n57492:29113,\n57493:29118,\n57494:29138,\n57495:29129,\n57496:29140,\n57497:29134,\n57498:29152,\n57499:29164,\n57500:29159,\n57501:29173,\n57502:29180,\n57503:29177,\n57504:29183,\n57505:29197,\n57506:29200,\n57507:29211,\n57508:29224,\n57509:29229,\n57510:29228,\n57511:29232,\n57512:29234,\n57513:29243,\n57514:29244,\n57515:29247,\n57516:29248,\n57517:29254,\n57518:29259,\n57519:29272,\n57520:29300,\n57521:29310,\n57522:29314,\n57523:29313,\n57524:29319,\n57525:29330,\n57526:29334,\n57527:29346,\n57528:29351,\n57529:29369,\n57530:29362,\n57531:29379,\n57532:29382,\n57533:29380,\n57534:29390,\n57535:29394,\n57536:29410,\n57537:29408,\n57538:29409,\n57539:29433,\n57540:29431,\n57541:20495,\n57542:29463,\n57543:29450,\n57544:29468,\n57545:29462,\n57546:29469,\n57547:29492,\n57548:29487,\n57549:29481,\n57550:29477,\n57551:29502,\n57552:29518,\n57553:29519,\n57554:40664,\n57555:29527,\n57556:29546,\n57557:29544,\n57558:29552,\n57559:29560,\n57560:29557,\n57561:29563,\n57562:29562,\n57563:29640,\n57564:29619,\n57565:29646,\n57566:29627,\n57567:29632,\n57568:29669,\n57569:29678,\n57570:29662,\n57571:29858,\n57572:29701,\n57573:29807,\n57574:29733,\n57575:29688,\n57576:29746,\n57577:29754,\n57578:29781,\n57579:29759,\n57580:29791,\n57581:29785,\n57582:29761,\n57583:29788,\n57584:29801,\n57585:29808,\n57586:29795,\n57587:29802,\n57588:29814,\n57589:29822,\n57590:29835,\n57591:29854,\n57592:29863,\n57593:29898,\n57594:29903,\n57595:29908,\n57596:29681,\n57664:29920,\n57665:29923,\n57666:29927,\n57667:29929,\n57668:29934,\n57669:29938,\n57670:29936,\n57671:29937,\n57672:29944,\n57673:29943,\n57674:29956,\n57675:29955,\n57676:29957,\n57677:29964,\n57678:29966,\n57679:29965,\n57680:29973,\n57681:29971,\n57682:29982,\n57683:29990,\n57684:29996,\n57685:30012,\n57686:30020,\n57687:30029,\n57688:30026,\n57689:30025,\n57690:30043,\n57691:30022,\n57692:30042,\n57693:30057,\n57694:30052,\n57695:30055,\n57696:30059,\n57697:30061,\n57698:30072,\n57699:30070,\n57700:30086,\n57701:30087,\n57702:30068,\n57703:30090,\n57704:30089,\n57705:30082,\n57706:30100,\n57707:30106,\n57708:30109,\n57709:30117,\n57710:30115,\n57711:30146,\n57712:30131,\n57713:30147,\n57714:30133,\n57715:30141,\n57716:30136,\n57717:30140,\n57718:30129,\n57719:30157,\n57720:30154,\n57721:30162,\n57722:30169,\n57723:30179,\n57724:30174,\n57725:30206,\n57726:30207,\n57728:30204,\n57729:30209,\n57730:30192,\n57731:30202,\n57732:30194,\n57733:30195,\n57734:30219,\n57735:30221,\n57736:30217,\n57737:30239,\n57738:30247,\n57739:30240,\n57740:30241,\n57741:30242,\n57742:30244,\n57743:30260,\n57744:30256,\n57745:30267,\n57746:30279,\n57747:30280,\n57748:30278,\n57749:30300,\n57750:30296,\n57751:30305,\n57752:30306,\n57753:30312,\n57754:30313,\n57755:30314,\n57756:30311,\n57757:30316,\n57758:30320,\n57759:30322,\n57760:30326,\n57761:30328,\n57762:30332,\n57763:30336,\n57764:30339,\n57765:30344,\n57766:30347,\n57767:30350,\n57768:30358,\n57769:30355,\n57770:30361,\n57771:30362,\n57772:30384,\n57773:30388,\n57774:30392,\n57775:30393,\n57776:30394,\n57777:30402,\n57778:30413,\n57779:30422,\n57780:30418,\n57781:30430,\n57782:30433,\n57783:30437,\n57784:30439,\n57785:30442,\n57786:34351,\n57787:30459,\n57788:30472,\n57789:30471,\n57790:30468,\n57791:30505,\n57792:30500,\n57793:30494,\n57794:30501,\n57795:30502,\n57796:30491,\n57797:30519,\n57798:30520,\n57799:30535,\n57800:30554,\n57801:30568,\n57802:30571,\n57803:30555,\n57804:30565,\n57805:30591,\n57806:30590,\n57807:30585,\n57808:30606,\n57809:30603,\n57810:30609,\n57811:30624,\n57812:30622,\n57813:30640,\n57814:30646,\n57815:30649,\n57816:30655,\n57817:30652,\n57818:30653,\n57819:30651,\n57820:30663,\n57821:30669,\n57822:30679,\n57823:30682,\n57824:30684,\n57825:30691,\n57826:30702,\n57827:30716,\n57828:30732,\n57829:30738,\n57830:31014,\n57831:30752,\n57832:31018,\n57833:30789,\n57834:30862,\n57835:30836,\n57836:30854,\n57837:30844,\n57838:30874,\n57839:30860,\n57840:30883,\n57841:30901,\n57842:30890,\n57843:30895,\n57844:30929,\n57845:30918,\n57846:30923,\n57847:30932,\n57848:30910,\n57849:30908,\n57850:30917,\n57851:30922,\n57852:30956,\n57920:30951,\n57921:30938,\n57922:30973,\n57923:30964,\n57924:30983,\n57925:30994,\n57926:30993,\n57927:31001,\n57928:31020,\n57929:31019,\n57930:31040,\n57931:31072,\n57932:31063,\n57933:31071,\n57934:31066,\n57935:31061,\n57936:31059,\n57937:31098,\n57938:31103,\n57939:31114,\n57940:31133,\n57941:31143,\n57942:40779,\n57943:31146,\n57944:31150,\n57945:31155,\n57946:31161,\n57947:31162,\n57948:31177,\n57949:31189,\n57950:31207,\n57951:31212,\n57952:31201,\n57953:31203,\n57954:31240,\n57955:31245,\n57956:31256,\n57957:31257,\n57958:31264,\n57959:31263,\n57960:31104,\n57961:31281,\n57962:31291,\n57963:31294,\n57964:31287,\n57965:31299,\n57966:31319,\n57967:31305,\n57968:31329,\n57969:31330,\n57970:31337,\n57971:40861,\n57972:31344,\n57973:31353,\n57974:31357,\n57975:31368,\n57976:31383,\n57977:31381,\n57978:31384,\n57979:31382,\n57980:31401,\n57981:31432,\n57982:31408,\n57984:31414,\n57985:31429,\n57986:31428,\n57987:31423,\n57988:36995,\n57989:31431,\n57990:31434,\n57991:31437,\n57992:31439,\n57993:31445,\n57994:31443,\n57995:31449,\n57996:31450,\n57997:31453,\n57998:31457,\n57999:31458,\n58000:31462,\n58001:31469,\n58002:31472,\n58003:31490,\n58004:31503,\n58005:31498,\n58006:31494,\n58007:31539,\n58008:31512,\n58009:31513,\n58010:31518,\n58011:31541,\n58012:31528,\n58013:31542,\n58014:31568,\n58015:31610,\n58016:31492,\n58017:31565,\n58018:31499,\n58019:31564,\n58020:31557,\n58021:31605,\n58022:31589,\n58023:31604,\n58024:31591,\n58025:31600,\n58026:31601,\n58027:31596,\n58028:31598,\n58029:31645,\n58030:31640,\n58031:31647,\n58032:31629,\n58033:31644,\n58034:31642,\n58035:31627,\n58036:31634,\n58037:31631,\n58038:31581,\n58039:31641,\n58040:31691,\n58041:31681,\n58042:31692,\n58043:31695,\n58044:31668,\n58045:31686,\n58046:31709,\n58047:31721,\n58048:31761,\n58049:31764,\n58050:31718,\n58051:31717,\n58052:31840,\n58053:31744,\n58054:31751,\n58055:31763,\n58056:31731,\n58057:31735,\n58058:31767,\n58059:31757,\n58060:31734,\n58061:31779,\n58062:31783,\n58063:31786,\n58064:31775,\n58065:31799,\n58066:31787,\n58067:31805,\n58068:31820,\n58069:31811,\n58070:31828,\n58071:31823,\n58072:31808,\n58073:31824,\n58074:31832,\n58075:31839,\n58076:31844,\n58077:31830,\n58078:31845,\n58079:31852,\n58080:31861,\n58081:31875,\n58082:31888,\n58083:31908,\n58084:31917,\n58085:31906,\n58086:31915,\n58087:31905,\n58088:31912,\n58089:31923,\n58090:31922,\n58091:31921,\n58092:31918,\n58093:31929,\n58094:31933,\n58095:31936,\n58096:31941,\n58097:31938,\n58098:31960,\n58099:31954,\n58100:31964,\n58101:31970,\n58102:39739,\n58103:31983,\n58104:31986,\n58105:31988,\n58106:31990,\n58107:31994,\n58108:32006,\n58176:32002,\n58177:32028,\n58178:32021,\n58179:32010,\n58180:32069,\n58181:32075,\n58182:32046,\n58183:32050,\n58184:32063,\n58185:32053,\n58186:32070,\n58187:32115,\n58188:32086,\n58189:32078,\n58190:32114,\n58191:32104,\n58192:32110,\n58193:32079,\n58194:32099,\n58195:32147,\n58196:32137,\n58197:32091,\n58198:32143,\n58199:32125,\n58200:32155,\n58201:32186,\n58202:32174,\n58203:32163,\n58204:32181,\n58205:32199,\n58206:32189,\n58207:32171,\n58208:32317,\n58209:32162,\n58210:32175,\n58211:32220,\n58212:32184,\n58213:32159,\n58214:32176,\n58215:32216,\n58216:32221,\n58217:32228,\n58218:32222,\n58219:32251,\n58220:32242,\n58221:32225,\n58222:32261,\n58223:32266,\n58224:32291,\n58225:32289,\n58226:32274,\n58227:32305,\n58228:32287,\n58229:32265,\n58230:32267,\n58231:32290,\n58232:32326,\n58233:32358,\n58234:32315,\n58235:32309,\n58236:32313,\n58237:32323,\n58238:32311,\n58240:32306,\n58241:32314,\n58242:32359,\n58243:32349,\n58244:32342,\n58245:32350,\n58246:32345,\n58247:32346,\n58248:32377,\n58249:32362,\n58250:32361,\n58251:32380,\n58252:32379,\n58253:32387,\n58254:32213,\n58255:32381,\n58256:36782,\n58257:32383,\n58258:32392,\n58259:32393,\n58260:32396,\n58261:32402,\n58262:32400,\n58263:32403,\n58264:32404,\n58265:32406,\n58266:32398,\n58267:32411,\n58268:32412,\n58269:32568,\n58270:32570,\n58271:32581,\n58272:32588,\n58273:32589,\n58274:32590,\n58275:32592,\n58276:32593,\n58277:32597,\n58278:32596,\n58279:32600,\n58280:32607,\n58281:32608,\n58282:32616,\n58283:32617,\n58284:32615,\n58285:32632,\n58286:32642,\n58287:32646,\n58288:32643,\n58289:32648,\n58290:32647,\n58291:32652,\n58292:32660,\n58293:32670,\n58294:32669,\n58295:32666,\n58296:32675,\n58297:32687,\n58298:32690,\n58299:32697,\n58300:32686,\n58301:32694,\n58302:32696,\n58303:35697,\n58304:32709,\n58305:32710,\n58306:32714,\n58307:32725,\n58308:32724,\n58309:32737,\n58310:32742,\n58311:32745,\n58312:32755,\n58313:32761,\n58314:39132,\n58315:32774,\n58316:32772,\n58317:32779,\n58318:32786,\n58319:32792,\n58320:32793,\n58321:32796,\n58322:32801,\n58323:32808,\n58324:32831,\n58325:32827,\n58326:32842,\n58327:32838,\n58328:32850,\n58329:32856,\n58330:32858,\n58331:32863,\n58332:32866,\n58333:32872,\n58334:32883,\n58335:32882,\n58336:32880,\n58337:32886,\n58338:32889,\n58339:32893,\n58340:32895,\n58341:32900,\n58342:32902,\n58343:32901,\n58344:32923,\n58345:32915,\n58346:32922,\n58347:32941,\n58348:20880,\n58349:32940,\n58350:32987,\n58351:32997,\n58352:32985,\n58353:32989,\n58354:32964,\n58355:32986,\n58356:32982,\n58357:33033,\n58358:33007,\n58359:33009,\n58360:33051,\n58361:33065,\n58362:33059,\n58363:33071,\n58364:33099,\n58432:38539,\n58433:33094,\n58434:33086,\n58435:33107,\n58436:33105,\n58437:33020,\n58438:33137,\n58439:33134,\n58440:33125,\n58441:33126,\n58442:33140,\n58443:33155,\n58444:33160,\n58445:33162,\n58446:33152,\n58447:33154,\n58448:33184,\n58449:33173,\n58450:33188,\n58451:33187,\n58452:33119,\n58453:33171,\n58454:33193,\n58455:33200,\n58456:33205,\n58457:33214,\n58458:33208,\n58459:33213,\n58460:33216,\n58461:33218,\n58462:33210,\n58463:33225,\n58464:33229,\n58465:33233,\n58466:33241,\n58467:33240,\n58468:33224,\n58469:33242,\n58470:33247,\n58471:33248,\n58472:33255,\n58473:33274,\n58474:33275,\n58475:33278,\n58476:33281,\n58477:33282,\n58478:33285,\n58479:33287,\n58480:33290,\n58481:33293,\n58482:33296,\n58483:33302,\n58484:33321,\n58485:33323,\n58486:33336,\n58487:33331,\n58488:33344,\n58489:33369,\n58490:33368,\n58491:33373,\n58492:33370,\n58493:33375,\n58494:33380,\n58496:33378,\n58497:33384,\n58498:33386,\n58499:33387,\n58500:33326,\n58501:33393,\n58502:33399,\n58503:33400,\n58504:33406,\n58505:33421,\n58506:33426,\n58507:33451,\n58508:33439,\n58509:33467,\n58510:33452,\n58511:33505,\n58512:33507,\n58513:33503,\n58514:33490,\n58515:33524,\n58516:33523,\n58517:33530,\n58518:33683,\n58519:33539,\n58520:33531,\n58521:33529,\n58522:33502,\n58523:33542,\n58524:33500,\n58525:33545,\n58526:33497,\n58527:33589,\n58528:33588,\n58529:33558,\n58530:33586,\n58531:33585,\n58532:33600,\n58533:33593,\n58534:33616,\n58535:33605,\n58536:33583,\n58537:33579,\n58538:33559,\n58539:33560,\n58540:33669,\n58541:33690,\n58542:33706,\n58543:33695,\n58544:33698,\n58545:33686,\n58546:33571,\n58547:33678,\n58548:33671,\n58549:33674,\n58550:33660,\n58551:33717,\n58552:33651,\n58553:33653,\n58554:33696,\n58555:33673,\n58556:33704,\n58557:33780,\n58558:33811,\n58559:33771,\n58560:33742,\n58561:33789,\n58562:33795,\n58563:33752,\n58564:33803,\n58565:33729,\n58566:33783,\n58567:33799,\n58568:33760,\n58569:33778,\n58570:33805,\n58571:33826,\n58572:33824,\n58573:33725,\n58574:33848,\n58575:34054,\n58576:33787,\n58577:33901,\n58578:33834,\n58579:33852,\n58580:34138,\n58581:33924,\n58582:33911,\n58583:33899,\n58584:33965,\n58585:33902,\n58586:33922,\n58587:33897,\n58588:33862,\n58589:33836,\n58590:33903,\n58591:33913,\n58592:33845,\n58593:33994,\n58594:33890,\n58595:33977,\n58596:33983,\n58597:33951,\n58598:34009,\n58599:33997,\n58600:33979,\n58601:34010,\n58602:34000,\n58603:33985,\n58604:33990,\n58605:34006,\n58606:33953,\n58607:34081,\n58608:34047,\n58609:34036,\n58610:34071,\n58611:34072,\n58612:34092,\n58613:34079,\n58614:34069,\n58615:34068,\n58616:34044,\n58617:34112,\n58618:34147,\n58619:34136,\n58620:34120,\n58688:34113,\n58689:34306,\n58690:34123,\n58691:34133,\n58692:34176,\n58693:34212,\n58694:34184,\n58695:34193,\n58696:34186,\n58697:34216,\n58698:34157,\n58699:34196,\n58700:34203,\n58701:34282,\n58702:34183,\n58703:34204,\n58704:34167,\n58705:34174,\n58706:34192,\n58707:34249,\n58708:34234,\n58709:34255,\n58710:34233,\n58711:34256,\n58712:34261,\n58713:34269,\n58714:34277,\n58715:34268,\n58716:34297,\n58717:34314,\n58718:34323,\n58719:34315,\n58720:34302,\n58721:34298,\n58722:34310,\n58723:34338,\n58724:34330,\n58725:34352,\n58726:34367,\n58727:34381,\n58728:20053,\n58729:34388,\n58730:34399,\n58731:34407,\n58732:34417,\n58733:34451,\n58734:34467,\n58735:34473,\n58736:34474,\n58737:34443,\n58738:34444,\n58739:34486,\n58740:34479,\n58741:34500,\n58742:34502,\n58743:34480,\n58744:34505,\n58745:34851,\n58746:34475,\n58747:34516,\n58748:34526,\n58749:34537,\n58750:34540,\n58752:34527,\n58753:34523,\n58754:34543,\n58755:34578,\n58756:34566,\n58757:34568,\n58758:34560,\n58759:34563,\n58760:34555,\n58761:34577,\n58762:34569,\n58763:34573,\n58764:34553,\n58765:34570,\n58766:34612,\n58767:34623,\n58768:34615,\n58769:34619,\n58770:34597,\n58771:34601,\n58772:34586,\n58773:34656,\n58774:34655,\n58775:34680,\n58776:34636,\n58777:34638,\n58778:34676,\n58779:34647,\n58780:34664,\n58781:34670,\n58782:34649,\n58783:34643,\n58784:34659,\n58785:34666,\n58786:34821,\n58787:34722,\n58788:34719,\n58789:34690,\n58790:34735,\n58791:34763,\n58792:34749,\n58793:34752,\n58794:34768,\n58795:38614,\n58796:34731,\n58797:34756,\n58798:34739,\n58799:34759,\n58800:34758,\n58801:34747,\n58802:34799,\n58803:34802,\n58804:34784,\n58805:34831,\n58806:34829,\n58807:34814,\n58808:34806,\n58809:34807,\n58810:34830,\n58811:34770,\n58812:34833,\n58813:34838,\n58814:34837,\n58815:34850,\n58816:34849,\n58817:34865,\n58818:34870,\n58819:34873,\n58820:34855,\n58821:34875,\n58822:34884,\n58823:34882,\n58824:34898,\n58825:34905,\n58826:34910,\n58827:34914,\n58828:34923,\n58829:34945,\n58830:34942,\n58831:34974,\n58832:34933,\n58833:34941,\n58834:34997,\n58835:34930,\n58836:34946,\n58837:34967,\n58838:34962,\n58839:34990,\n58840:34969,\n58841:34978,\n58842:34957,\n58843:34980,\n58844:34992,\n58845:35007,\n58846:34993,\n58847:35011,\n58848:35012,\n58849:35028,\n58850:35032,\n58851:35033,\n58852:35037,\n58853:35065,\n58854:35074,\n58855:35068,\n58856:35060,\n58857:35048,\n58858:35058,\n58859:35076,\n58860:35084,\n58861:35082,\n58862:35091,\n58863:35139,\n58864:35102,\n58865:35109,\n58866:35114,\n58867:35115,\n58868:35137,\n58869:35140,\n58870:35131,\n58871:35126,\n58872:35128,\n58873:35148,\n58874:35101,\n58875:35168,\n58876:35166,\n58944:35174,\n58945:35172,\n58946:35181,\n58947:35178,\n58948:35183,\n58949:35188,\n58950:35191,\n58951:35198,\n58952:35203,\n58953:35208,\n58954:35210,\n58955:35219,\n58956:35224,\n58957:35233,\n58958:35241,\n58959:35238,\n58960:35244,\n58961:35247,\n58962:35250,\n58963:35258,\n58964:35261,\n58965:35263,\n58966:35264,\n58967:35290,\n58968:35292,\n58969:35293,\n58970:35303,\n58971:35316,\n58972:35320,\n58973:35331,\n58974:35350,\n58975:35344,\n58976:35340,\n58977:35355,\n58978:35357,\n58979:35365,\n58980:35382,\n58981:35393,\n58982:35419,\n58983:35410,\n58984:35398,\n58985:35400,\n58986:35452,\n58987:35437,\n58988:35436,\n58989:35426,\n58990:35461,\n58991:35458,\n58992:35460,\n58993:35496,\n58994:35489,\n58995:35473,\n58996:35493,\n58997:35494,\n58998:35482,\n58999:35491,\n59000:35524,\n59001:35533,\n59002:35522,\n59003:35546,\n59004:35563,\n59005:35571,\n59006:35559,\n59008:35556,\n59009:35569,\n59010:35604,\n59011:35552,\n59012:35554,\n59013:35575,\n59014:35550,\n59015:35547,\n59016:35596,\n59017:35591,\n59018:35610,\n59019:35553,\n59020:35606,\n59021:35600,\n59022:35607,\n59023:35616,\n59024:35635,\n59025:38827,\n59026:35622,\n59027:35627,\n59028:35646,\n59029:35624,\n59030:35649,\n59031:35660,\n59032:35663,\n59033:35662,\n59034:35657,\n59035:35670,\n59036:35675,\n59037:35674,\n59038:35691,\n59039:35679,\n59040:35692,\n59041:35695,\n59042:35700,\n59043:35709,\n59044:35712,\n59045:35724,\n59046:35726,\n59047:35730,\n59048:35731,\n59049:35734,\n59050:35737,\n59051:35738,\n59052:35898,\n59053:35905,\n59054:35903,\n59055:35912,\n59056:35916,\n59057:35918,\n59058:35920,\n59059:35925,\n59060:35938,\n59061:35948,\n59062:35960,\n59063:35962,\n59064:35970,\n59065:35977,\n59066:35973,\n59067:35978,\n59068:35981,\n59069:35982,\n59070:35988,\n59071:35964,\n59072:35992,\n59073:25117,\n59074:36013,\n59075:36010,\n59076:36029,\n59077:36018,\n59078:36019,\n59079:36014,\n59080:36022,\n59081:36040,\n59082:36033,\n59083:36068,\n59084:36067,\n59085:36058,\n59086:36093,\n59087:36090,\n59088:36091,\n59089:36100,\n59090:36101,\n59091:36106,\n59092:36103,\n59093:36111,\n59094:36109,\n59095:36112,\n59096:40782,\n59097:36115,\n59098:36045,\n59099:36116,\n59100:36118,\n59101:36199,\n59102:36205,\n59103:36209,\n59104:36211,\n59105:36225,\n59106:36249,\n59107:36290,\n59108:36286,\n59109:36282,\n59110:36303,\n59111:36314,\n59112:36310,\n59113:36300,\n59114:36315,\n59115:36299,\n59116:36330,\n59117:36331,\n59118:36319,\n59119:36323,\n59120:36348,\n59121:36360,\n59122:36361,\n59123:36351,\n59124:36381,\n59125:36382,\n59126:36368,\n59127:36383,\n59128:36418,\n59129:36405,\n59130:36400,\n59131:36404,\n59132:36426,\n59200:36423,\n59201:36425,\n59202:36428,\n59203:36432,\n59204:36424,\n59205:36441,\n59206:36452,\n59207:36448,\n59208:36394,\n59209:36451,\n59210:36437,\n59211:36470,\n59212:36466,\n59213:36476,\n59214:36481,\n59215:36487,\n59216:36485,\n59217:36484,\n59218:36491,\n59219:36490,\n59220:36499,\n59221:36497,\n59222:36500,\n59223:36505,\n59224:36522,\n59225:36513,\n59226:36524,\n59227:36528,\n59228:36550,\n59229:36529,\n59230:36542,\n59231:36549,\n59232:36552,\n59233:36555,\n59234:36571,\n59235:36579,\n59236:36604,\n59237:36603,\n59238:36587,\n59239:36606,\n59240:36618,\n59241:36613,\n59242:36629,\n59243:36626,\n59244:36633,\n59245:36627,\n59246:36636,\n59247:36639,\n59248:36635,\n59249:36620,\n59250:36646,\n59251:36659,\n59252:36667,\n59253:36665,\n59254:36677,\n59255:36674,\n59256:36670,\n59257:36684,\n59258:36681,\n59259:36678,\n59260:36686,\n59261:36695,\n59262:36700,\n59264:36706,\n59265:36707,\n59266:36708,\n59267:36764,\n59268:36767,\n59269:36771,\n59270:36781,\n59271:36783,\n59272:36791,\n59273:36826,\n59274:36837,\n59275:36834,\n59276:36842,\n59277:36847,\n59278:36999,\n59279:36852,\n59280:36869,\n59281:36857,\n59282:36858,\n59283:36881,\n59284:36885,\n59285:36897,\n59286:36877,\n59287:36894,\n59288:36886,\n59289:36875,\n59290:36903,\n59291:36918,\n59292:36917,\n59293:36921,\n59294:36856,\n59295:36943,\n59296:36944,\n59297:36945,\n59298:36946,\n59299:36878,\n59300:36937,\n59301:36926,\n59302:36950,\n59303:36952,\n59304:36958,\n59305:36968,\n59306:36975,\n59307:36982,\n59308:38568,\n59309:36978,\n59310:36994,\n59311:36989,\n59312:36993,\n59313:36992,\n59314:37002,\n59315:37001,\n59316:37007,\n59317:37032,\n59318:37039,\n59319:37041,\n59320:37045,\n59321:37090,\n59322:37092,\n59323:25160,\n59324:37083,\n59325:37122,\n59326:37138,\n59327:37145,\n59328:37170,\n59329:37168,\n59330:37194,\n59331:37206,\n59332:37208,\n59333:37219,\n59334:37221,\n59335:37225,\n59336:37235,\n59337:37234,\n59338:37259,\n59339:37257,\n59340:37250,\n59341:37282,\n59342:37291,\n59343:37295,\n59344:37290,\n59345:37301,\n59346:37300,\n59347:37306,\n59348:37312,\n59349:37313,\n59350:37321,\n59351:37323,\n59352:37328,\n59353:37334,\n59354:37343,\n59355:37345,\n59356:37339,\n59357:37372,\n59358:37365,\n59359:37366,\n59360:37406,\n59361:37375,\n59362:37396,\n59363:37420,\n59364:37397,\n59365:37393,\n59366:37470,\n59367:37463,\n59368:37445,\n59369:37449,\n59370:37476,\n59371:37448,\n59372:37525,\n59373:37439,\n59374:37451,\n59375:37456,\n59376:37532,\n59377:37526,\n59378:37523,\n59379:37531,\n59380:37466,\n59381:37583,\n59382:37561,\n59383:37559,\n59384:37609,\n59385:37647,\n59386:37626,\n59387:37700,\n59388:37678,\n59456:37657,\n59457:37666,\n59458:37658,\n59459:37667,\n59460:37690,\n59461:37685,\n59462:37691,\n59463:37724,\n59464:37728,\n59465:37756,\n59466:37742,\n59467:37718,\n59468:37808,\n59469:37804,\n59470:37805,\n59471:37780,\n59472:37817,\n59473:37846,\n59474:37847,\n59475:37864,\n59476:37861,\n59477:37848,\n59478:37827,\n59479:37853,\n59480:37840,\n59481:37832,\n59482:37860,\n59483:37914,\n59484:37908,\n59485:37907,\n59486:37891,\n59487:37895,\n59488:37904,\n59489:37942,\n59490:37931,\n59491:37941,\n59492:37921,\n59493:37946,\n59494:37953,\n59495:37970,\n59496:37956,\n59497:37979,\n59498:37984,\n59499:37986,\n59500:37982,\n59501:37994,\n59502:37417,\n59503:38000,\n59504:38005,\n59505:38007,\n59506:38013,\n59507:37978,\n59508:38012,\n59509:38014,\n59510:38017,\n59511:38015,\n59512:38274,\n59513:38279,\n59514:38282,\n59515:38292,\n59516:38294,\n59517:38296,\n59518:38297,\n59520:38304,\n59521:38312,\n59522:38311,\n59523:38317,\n59524:38332,\n59525:38331,\n59526:38329,\n59527:38334,\n59528:38346,\n59529:28662,\n59530:38339,\n59531:38349,\n59532:38348,\n59533:38357,\n59534:38356,\n59535:38358,\n59536:38364,\n59537:38369,\n59538:38373,\n59539:38370,\n59540:38433,\n59541:38440,\n59542:38446,\n59543:38447,\n59544:38466,\n59545:38476,\n59546:38479,\n59547:38475,\n59548:38519,\n59549:38492,\n59550:38494,\n59551:38493,\n59552:38495,\n59553:38502,\n59554:38514,\n59555:38508,\n59556:38541,\n59557:38552,\n59558:38549,\n59559:38551,\n59560:38570,\n59561:38567,\n59562:38577,\n59563:38578,\n59564:38576,\n59565:38580,\n59566:38582,\n59567:38584,\n59568:38585,\n59569:38606,\n59570:38603,\n59571:38601,\n59572:38605,\n59573:35149,\n59574:38620,\n59575:38669,\n59576:38613,\n59577:38649,\n59578:38660,\n59579:38662,\n59580:38664,\n59581:38675,\n59582:38670,\n59583:38673,\n59584:38671,\n59585:38678,\n59586:38681,\n59587:38692,\n59588:38698,\n59589:38704,\n59590:38713,\n59591:38717,\n59592:38718,\n59593:38724,\n59594:38726,\n59595:38728,\n59596:38722,\n59597:38729,\n59598:38748,\n59599:38752,\n59600:38756,\n59601:38758,\n59602:38760,\n59603:21202,\n59604:38763,\n59605:38769,\n59606:38777,\n59607:38789,\n59608:38780,\n59609:38785,\n59610:38778,\n59611:38790,\n59612:38795,\n59613:38799,\n59614:38800,\n59615:38812,\n59616:38824,\n59617:38822,\n59618:38819,\n59619:38835,\n59620:38836,\n59621:38851,\n59622:38854,\n59623:38856,\n59624:38859,\n59625:38876,\n59626:38893,\n59627:40783,\n59628:38898,\n59629:31455,\n59630:38902,\n59631:38901,\n59632:38927,\n59633:38924,\n59634:38968,\n59635:38948,\n59636:38945,\n59637:38967,\n59638:38973,\n59639:38982,\n59640:38991,\n59641:38987,\n59642:39019,\n59643:39023,\n59644:39024,\n59712:39025,\n59713:39028,\n59714:39027,\n59715:39082,\n59716:39087,\n59717:39089,\n59718:39094,\n59719:39108,\n59720:39107,\n59721:39110,\n59722:39145,\n59723:39147,\n59724:39171,\n59725:39177,\n59726:39186,\n59727:39188,\n59728:39192,\n59729:39201,\n59730:39197,\n59731:39198,\n59732:39204,\n59733:39200,\n59734:39212,\n59735:39214,\n59736:39229,\n59737:39230,\n59738:39234,\n59739:39241,\n59740:39237,\n59741:39248,\n59742:39243,\n59743:39249,\n59744:39250,\n59745:39244,\n59746:39253,\n59747:39319,\n59748:39320,\n59749:39333,\n59750:39341,\n59751:39342,\n59752:39356,\n59753:39391,\n59754:39387,\n59755:39389,\n59756:39384,\n59757:39377,\n59758:39405,\n59759:39406,\n59760:39409,\n59761:39410,\n59762:39419,\n59763:39416,\n59764:39425,\n59765:39439,\n59766:39429,\n59767:39394,\n59768:39449,\n59769:39467,\n59770:39479,\n59771:39493,\n59772:39490,\n59773:39488,\n59774:39491,\n59776:39486,\n59777:39509,\n59778:39501,\n59779:39515,\n59780:39511,\n59781:39519,\n59782:39522,\n59783:39525,\n59784:39524,\n59785:39529,\n59786:39531,\n59787:39530,\n59788:39597,\n59789:39600,\n59790:39612,\n59791:39616,\n59792:39631,\n59793:39633,\n59794:39635,\n59795:39636,\n59796:39646,\n59797:39647,\n59798:39650,\n59799:39651,\n59800:39654,\n59801:39663,\n59802:39659,\n59803:39662,\n59804:39668,\n59805:39665,\n59806:39671,\n59807:39675,\n59808:39686,\n59809:39704,\n59810:39706,\n59811:39711,\n59812:39714,\n59813:39715,\n59814:39717,\n59815:39719,\n59816:39720,\n59817:39721,\n59818:39722,\n59819:39726,\n59820:39727,\n59821:39730,\n59822:39748,\n59823:39747,\n59824:39759,\n59825:39757,\n59826:39758,\n59827:39761,\n59828:39768,\n59829:39796,\n59830:39827,\n59831:39811,\n59832:39825,\n59833:39830,\n59834:39831,\n59835:39839,\n59836:39840,\n59837:39848,\n59838:39860,\n59839:39872,\n59840:39882,\n59841:39865,\n59842:39878,\n59843:39887,\n59844:39889,\n59845:39890,\n59846:39907,\n59847:39906,\n59848:39908,\n59849:39892,\n59850:39905,\n59851:39994,\n59852:39922,\n59853:39921,\n59854:39920,\n59855:39957,\n59856:39956,\n59857:39945,\n59858:39955,\n59859:39948,\n59860:39942,\n59861:39944,\n59862:39954,\n59863:39946,\n59864:39940,\n59865:39982,\n59866:39963,\n59867:39973,\n59868:39972,\n59869:39969,\n59870:39984,\n59871:40007,\n59872:39986,\n59873:40006,\n59874:39998,\n59875:40026,\n59876:40032,\n59877:40039,\n59878:40054,\n59879:40056,\n59880:40167,\n59881:40172,\n59882:40176,\n59883:40201,\n59884:40200,\n59885:40171,\n59886:40195,\n59887:40198,\n59888:40234,\n59889:40230,\n59890:40367,\n59891:40227,\n59892:40223,\n59893:40260,\n59894:40213,\n59895:40210,\n59896:40257,\n59897:40255,\n59898:40254,\n59899:40262,\n59900:40264,\n59968:40285,\n59969:40286,\n59970:40292,\n59971:40273,\n59972:40272,\n59973:40281,\n59974:40306,\n59975:40329,\n59976:40327,\n59977:40363,\n59978:40303,\n59979:40314,\n59980:40346,\n59981:40356,\n59982:40361,\n59983:40370,\n59984:40388,\n59985:40385,\n59986:40379,\n59987:40376,\n59988:40378,\n59989:40390,\n59990:40399,\n59991:40386,\n59992:40409,\n59993:40403,\n59994:40440,\n59995:40422,\n59996:40429,\n59997:40431,\n59998:40445,\n59999:40474,\n60000:40475,\n60001:40478,\n60002:40565,\n60003:40569,\n60004:40573,\n60005:40577,\n60006:40584,\n60007:40587,\n60008:40588,\n60009:40594,\n60010:40597,\n60011:40593,\n60012:40605,\n60013:40613,\n60014:40617,\n60015:40632,\n60016:40618,\n60017:40621,\n60018:38753,\n60019:40652,\n60020:40654,\n60021:40655,\n60022:40656,\n60023:40660,\n60024:40668,\n60025:40670,\n60026:40669,\n60027:40672,\n60028:40677,\n60029:40680,\n60030:40687,\n60032:40692,\n60033:40694,\n60034:40695,\n60035:40697,\n60036:40699,\n60037:40700,\n60038:40701,\n60039:40711,\n60040:40712,\n60041:30391,\n60042:40725,\n60043:40737,\n60044:40748,\n60045:40766,\n60046:40778,\n60047:40786,\n60048:40788,\n60049:40803,\n60050:40799,\n60051:40800,\n60052:40801,\n60053:40806,\n60054:40807,\n60055:40812,\n60056:40810,\n60057:40823,\n60058:40818,\n60059:40822,\n60060:40853,\n60061:40860,\n60062:40864,\n60063:22575,\n60064:27079,\n60065:36953,\n60066:29796,\n60067:20956,\n60068:29081,\n60736:32394,\n60737:35100,\n60738:37704,\n60739:37512,\n60740:34012,\n60741:20425,\n60742:28859,\n60743:26161,\n60744:26824,\n60745:37625,\n60746:26363,\n60747:24389,\n60748:20008,\n60749:20193,\n60750:20220,\n60751:20224,\n60752:20227,\n60753:20281,\n60754:20310,\n60755:20370,\n60756:20362,\n60757:20378,\n60758:20372,\n60759:20429,\n60760:20544,\n60761:20514,\n60762:20479,\n60763:20510,\n60764:20550,\n60765:20592,\n60766:20546,\n60767:20628,\n60768:20724,\n60769:20696,\n60770:20810,\n60771:20836,\n60772:20893,\n60773:20926,\n60774:20972,\n60775:21013,\n60776:21148,\n60777:21158,\n60778:21184,\n60779:21211,\n60780:21248,\n60781:21255,\n60782:21284,\n60783:21362,\n60784:21395,\n60785:21426,\n60786:21469,\n60787:64014,\n60788:21660,\n60789:21642,\n60790:21673,\n60791:21759,\n60792:21894,\n60793:22361,\n60794:22373,\n60795:22444,\n60796:22472,\n60797:22471,\n60798:64015,\n60800:64016,\n60801:22686,\n60802:22706,\n60803:22795,\n60804:22867,\n60805:22875,\n60806:22877,\n60807:22883,\n60808:22948,\n60809:22970,\n60810:23382,\n60811:23488,\n60812:29999,\n60813:23512,\n60814:23532,\n60815:23582,\n60816:23718,\n60817:23738,\n60818:23797,\n60819:23847,\n60820:23891,\n60821:64017,\n60822:23874,\n60823:23917,\n60824:23992,\n60825:23993,\n60826:24016,\n60827:24353,\n60828:24372,\n60829:24423,\n60830:24503,\n60831:24542,\n60832:24669,\n60833:24709,\n60834:24714,\n60835:24798,\n60836:24789,\n60837:24864,\n60838:24818,\n60839:24849,\n60840:24887,\n60841:24880,\n60842:24984,\n60843:25107,\n60844:25254,\n60845:25589,\n60846:25696,\n60847:25757,\n60848:25806,\n60849:25934,\n60850:26112,\n60851:26133,\n60852:26171,\n60853:26121,\n60854:26158,\n60855:26142,\n60856:26148,\n60857:26213,\n60858:26199,\n60859:26201,\n60860:64018,\n60861:26227,\n60862:26265,\n60863:26272,\n60864:26290,\n60865:26303,\n60866:26362,\n60867:26382,\n60868:63785,\n60869:26470,\n60870:26555,\n60871:26706,\n60872:26560,\n60873:26625,\n60874:26692,\n60875:26831,\n60876:64019,\n60877:26984,\n60878:64020,\n60879:27032,\n60880:27106,\n60881:27184,\n60882:27243,\n60883:27206,\n60884:27251,\n60885:27262,\n60886:27362,\n60887:27364,\n60888:27606,\n60889:27711,\n60890:27740,\n60891:27782,\n60892:27759,\n60893:27866,\n60894:27908,\n60895:28039,\n60896:28015,\n60897:28054,\n60898:28076,\n60899:28111,\n60900:28152,\n60901:28146,\n60902:28156,\n60903:28217,\n60904:28252,\n60905:28199,\n60906:28220,\n60907:28351,\n60908:28552,\n60909:28597,\n60910:28661,\n60911:28677,\n60912:28679,\n60913:28712,\n60914:28805,\n60915:28843,\n60916:28943,\n60917:28932,\n60918:29020,\n60919:28998,\n60920:28999,\n60921:64021,\n60922:29121,\n60923:29182,\n60924:29361,\n60992:29374,\n60993:29476,\n60994:64022,\n60995:29559,\n60996:29629,\n60997:29641,\n60998:29654,\n60999:29667,\n61000:29650,\n61001:29703,\n61002:29685,\n61003:29734,\n61004:29738,\n61005:29737,\n61006:29742,\n61007:29794,\n61008:29833,\n61009:29855,\n61010:29953,\n61011:30063,\n61012:30338,\n61013:30364,\n61014:30366,\n61015:30363,\n61016:30374,\n61017:64023,\n61018:30534,\n61019:21167,\n61020:30753,\n61021:30798,\n61022:30820,\n61023:30842,\n61024:31024,\n61025:64024,\n61026:64025,\n61027:64026,\n61028:31124,\n61029:64027,\n61030:31131,\n61031:31441,\n61032:31463,\n61033:64028,\n61034:31467,\n61035:31646,\n61036:64029,\n61037:32072,\n61038:32092,\n61039:32183,\n61040:32160,\n61041:32214,\n61042:32338,\n61043:32583,\n61044:32673,\n61045:64030,\n61046:33537,\n61047:33634,\n61048:33663,\n61049:33735,\n61050:33782,\n61051:33864,\n61052:33972,\n61053:34131,\n61054:34137,\n61056:34155,\n61057:64031,\n61058:34224,\n61059:64032,\n61060:64033,\n61061:34823,\n61062:35061,\n61063:35346,\n61064:35383,\n61065:35449,\n61066:35495,\n61067:35518,\n61068:35551,\n61069:64034,\n61070:35574,\n61071:35667,\n61072:35711,\n61073:36080,\n61074:36084,\n61075:36114,\n61076:36214,\n61077:64035,\n61078:36559,\n61079:64036,\n61080:64037,\n61081:36967,\n61082:37086,\n61083:64038,\n61084:37141,\n61085:37159,\n61086:37338,\n61087:37335,\n61088:37342,\n61089:37357,\n61090:37358,\n61091:37348,\n61092:37349,\n61093:37382,\n61094:37392,\n61095:37386,\n61096:37434,\n61097:37440,\n61098:37436,\n61099:37454,\n61100:37465,\n61101:37457,\n61102:37433,\n61103:37479,\n61104:37543,\n61105:37495,\n61106:37496,\n61107:37607,\n61108:37591,\n61109:37593,\n61110:37584,\n61111:64039,\n61112:37589,\n61113:37600,\n61114:37587,\n61115:37669,\n61116:37665,\n61117:37627,\n61118:64040,\n61119:37662,\n61120:37631,\n61121:37661,\n61122:37634,\n61123:37744,\n61124:37719,\n61125:37796,\n61126:37830,\n61127:37854,\n61128:37880,\n61129:37937,\n61130:37957,\n61131:37960,\n61132:38290,\n61133:63964,\n61134:64041,\n61135:38557,\n61136:38575,\n61137:38707,\n61138:38715,\n61139:38723,\n61140:38733,\n61141:38735,\n61142:38737,\n61143:38741,\n61144:38999,\n61145:39013,\n61146:64042,\n61147:64043,\n61148:39207,\n61149:64044,\n61150:39326,\n61151:39502,\n61152:39641,\n61153:39644,\n61154:39797,\n61155:39794,\n61156:39823,\n61157:39857,\n61158:39867,\n61159:39936,\n61160:40304,\n61161:40299,\n61162:64045,\n61163:40473,\n61164:40657,\n61167:8560,\n61168:8561,\n61169:8562,\n61170:8563,\n61171:8564,\n61172:8565,\n61173:8566,\n61174:8567,\n61175:8568,\n61176:8569,\n61177:65506,\n61178:65508,\n61179:65287,\n61180:65282,\n61504:57344,\n61505:57345,\n61506:57346,\n61507:57347,\n61508:57348,\n61509:57349,\n61510:57350,\n61511:57351,\n61512:57352,\n61513:57353,\n61514:57354,\n61515:57355,\n61516:57356,\n61517:57357,\n61518:57358,\n61519:57359,\n61520:57360,\n61521:57361,\n61522:57362,\n61523:57363,\n61524:57364,\n61525:57365,\n61526:57366,\n61527:57367,\n61528:57368,\n61529:57369,\n61530:57370,\n61531:57371,\n61532:57372,\n61533:57373,\n61534:57374,\n61535:57375,\n61536:57376,\n61537:57377,\n61538:57378,\n61539:57379,\n61540:57380,\n61541:57381,\n61542:57382,\n61543:57383,\n61544:57384,\n61545:57385,\n61546:57386,\n61547:57387,\n61548:57388,\n61549:57389,\n61550:57390,\n61551:57391,\n61552:57392,\n61553:57393,\n61554:57394,\n61555:57395,\n61556:57396,\n61557:57397,\n61558:57398,\n61559:57399,\n61560:57400,\n61561:57401,\n61562:57402,\n61563:57403,\n61564:57404,\n61565:57405,\n61566:57406,\n61568:57407,\n61569:57408,\n61570:57409,\n61571:57410,\n61572:57411,\n61573:57412,\n61574:57413,\n61575:57414,\n61576:57415,\n61577:57416,\n61578:57417,\n61579:57418,\n61580:57419,\n61581:57420,\n61582:57421,\n61583:57422,\n61584:57423,\n61585:57424,\n61586:57425,\n61587:57426,\n61588:57427,\n61589:57428,\n61590:57429,\n61591:57430,\n61592:57431,\n61593:57432,\n61594:57433,\n61595:57434,\n61596:57435,\n61597:57436,\n61598:57437,\n61599:57438,\n61600:57439,\n61601:57440,\n61602:57441,\n61603:57442,\n61604:57443,\n61605:57444,\n61606:57445,\n61607:57446,\n61608:57447,\n61609:57448,\n61610:57449,\n61611:57450,\n61612:57451,\n61613:57452,\n61614:57453,\n61615:57454,\n61616:57455,\n61617:57456,\n61618:57457,\n61619:57458,\n61620:57459,\n61621:57460,\n61622:57461,\n61623:57462,\n61624:57463,\n61625:57464,\n61626:57465,\n61627:57466,\n61628:57467,\n61629:57468,\n61630:57469,\n61631:57470,\n61632:57471,\n61633:57472,\n61634:57473,\n61635:57474,\n61636:57475,\n61637:57476,\n61638:57477,\n61639:57478,\n61640:57479,\n61641:57480,\n61642:57481,\n61643:57482,\n61644:57483,\n61645:57484,\n61646:57485,\n61647:57486,\n61648:57487,\n61649:57488,\n61650:57489,\n61651:57490,\n61652:57491,\n61653:57492,\n61654:57493,\n61655:57494,\n61656:57495,\n61657:57496,\n61658:57497,\n61659:57498,\n61660:57499,\n61661:57500,\n61662:57501,\n61663:57502,\n61664:57503,\n61665:57504,\n61666:57505,\n61667:57506,\n61668:57507,\n61669:57508,\n61670:57509,\n61671:57510,\n61672:57511,\n61673:57512,\n61674:57513,\n61675:57514,\n61676:57515,\n61677:57516,\n61678:57517,\n61679:57518,\n61680:57519,\n61681:57520,\n61682:57521,\n61683:57522,\n61684:57523,\n61685:57524,\n61686:57525,\n61687:57526,\n61688:57527,\n61689:57528,\n61690:57529,\n61691:57530,\n61692:57531,\n61760:57532,\n61761:57533,\n61762:57534,\n61763:57535,\n61764:57536,\n61765:57537,\n61766:57538,\n61767:57539,\n61768:57540,\n61769:57541,\n61770:57542,\n61771:57543,\n61772:57544,\n61773:57545,\n61774:57546,\n61775:57547,\n61776:57548,\n61777:57549,\n61778:57550,\n61779:57551,\n61780:57552,\n61781:57553,\n61782:57554,\n61783:57555,\n61784:57556,\n61785:57557,\n61786:57558,\n61787:57559,\n61788:57560,\n61789:57561,\n61790:57562,\n61791:57563,\n61792:57564,\n61793:57565,\n61794:57566,\n61795:57567,\n61796:57568,\n61797:57569,\n61798:57570,\n61799:57571,\n61800:57572,\n61801:57573,\n61802:57574,\n61803:57575,\n61804:57576,\n61805:57577,\n61806:57578,\n61807:57579,\n61808:57580,\n61809:57581,\n61810:57582,\n61811:57583,\n61812:57584,\n61813:57585,\n61814:57586,\n61815:57587,\n61816:57588,\n61817:57589,\n61818:57590,\n61819:57591,\n61820:57592,\n61821:57593,\n61822:57594,\n61824:57595,\n61825:57596,\n61826:57597,\n61827:57598,\n61828:57599,\n61829:57600,\n61830:57601,\n61831:57602,\n61832:57603,\n61833:57604,\n61834:57605,\n61835:57606,\n61836:57607,\n61837:57608,\n61838:57609,\n61839:57610,\n61840:57611,\n61841:57612,\n61842:57613,\n61843:57614,\n61844:57615,\n61845:57616,\n61846:57617,\n61847:57618,\n61848:57619,\n61849:57620,\n61850:57621,\n61851:57622,\n61852:57623,\n61853:57624,\n61854:57625,\n61855:57626,\n61856:57627,\n61857:57628,\n61858:57629,\n61859:57630,\n61860:57631,\n61861:57632,\n61862:57633,\n61863:57634,\n61864:57635,\n61865:57636,\n61866:57637,\n61867:57638,\n61868:57639,\n61869:57640,\n61870:57641,\n61871:57642,\n61872:57643,\n61873:57644,\n61874:57645,\n61875:57646,\n61876:57647,\n61877:57648,\n61878:57649,\n61879:57650,\n61880:57651,\n61881:57652,\n61882:57653,\n61883:57654,\n61884:57655,\n61885:57656,\n61886:57657,\n61887:57658,\n61888:57659,\n61889:57660,\n61890:57661,\n61891:57662,\n61892:57663,\n61893:57664,\n61894:57665,\n61895:57666,\n61896:57667,\n61897:57668,\n61898:57669,\n61899:57670,\n61900:57671,\n61901:57672,\n61902:57673,\n61903:57674,\n61904:57675,\n61905:57676,\n61906:57677,\n61907:57678,\n61908:57679,\n61909:57680,\n61910:57681,\n61911:57682,\n61912:57683,\n61913:57684,\n61914:57685,\n61915:57686,\n61916:57687,\n61917:57688,\n61918:57689,\n61919:57690,\n61920:57691,\n61921:57692,\n61922:57693,\n61923:57694,\n61924:57695,\n61925:57696,\n61926:57697,\n61927:57698,\n61928:57699,\n61929:57700,\n61930:57701,\n61931:57702,\n61932:57703,\n61933:57704,\n61934:57705,\n61935:57706,\n61936:57707,\n61937:57708,\n61938:57709,\n61939:57710,\n61940:57711,\n61941:57712,\n61942:57713,\n61943:57714,\n61944:57715,\n61945:57716,\n61946:57717,\n61947:57718,\n61948:57719,\n62016:57720,\n62017:57721,\n62018:57722,\n62019:57723,\n62020:57724,\n62021:57725,\n62022:57726,\n62023:57727,\n62024:57728,\n62025:57729,\n62026:57730,\n62027:57731,\n62028:57732,\n62029:57733,\n62030:57734,\n62031:57735,\n62032:57736,\n62033:57737,\n62034:57738,\n62035:57739,\n62036:57740,\n62037:57741,\n62038:57742,\n62039:57743,\n62040:57744,\n62041:57745,\n62042:57746,\n62043:57747,\n62044:57748,\n62045:57749,\n62046:57750,\n62047:57751,\n62048:57752,\n62049:57753,\n62050:57754,\n62051:57755,\n62052:57756,\n62053:57757,\n62054:57758,\n62055:57759,\n62056:57760,\n62057:57761,\n62058:57762,\n62059:57763,\n62060:57764,\n62061:57765,\n62062:57766,\n62063:57767,\n62064:57768,\n62065:57769,\n62066:57770,\n62067:57771,\n62068:57772,\n62069:57773,\n62070:57774,\n62071:57775,\n62072:57776,\n62073:57777,\n62074:57778,\n62075:57779,\n62076:57780,\n62077:57781,\n62078:57782,\n62080:57783,\n62081:57784,\n62082:57785,\n62083:57786,\n62084:57787,\n62085:57788,\n62086:57789,\n62087:57790,\n62088:57791,\n62089:57792,\n62090:57793,\n62091:57794,\n62092:57795,\n62093:57796,\n62094:57797,\n62095:57798,\n62096:57799,\n62097:57800,\n62098:57801,\n62099:57802,\n62100:57803,\n62101:57804,\n62102:57805,\n62103:57806,\n62104:57807,\n62105:57808,\n62106:57809,\n62107:57810,\n62108:57811,\n62109:57812,\n62110:57813,\n62111:57814,\n62112:57815,\n62113:57816,\n62114:57817,\n62115:57818,\n62116:57819,\n62117:57820,\n62118:57821,\n62119:57822,\n62120:57823,\n62121:57824,\n62122:57825,\n62123:57826,\n62124:57827,\n62125:57828,\n62126:57829,\n62127:57830,\n62128:57831,\n62129:57832,\n62130:57833,\n62131:57834,\n62132:57835,\n62133:57836,\n62134:57837,\n62135:57838,\n62136:57839,\n62137:57840,\n62138:57841,\n62139:57842,\n62140:57843,\n62141:57844,\n62142:57845,\n62143:57846,\n62144:57847,\n62145:57848,\n62146:57849,\n62147:57850,\n62148:57851,\n62149:57852,\n62150:57853,\n62151:57854,\n62152:57855,\n62153:57856,\n62154:57857,\n62155:57858,\n62156:57859,\n62157:57860,\n62158:57861,\n62159:57862,\n62160:57863,\n62161:57864,\n62162:57865,\n62163:57866,\n62164:57867,\n62165:57868,\n62166:57869,\n62167:57870,\n62168:57871,\n62169:57872,\n62170:57873,\n62171:57874,\n62172:57875,\n62173:57876,\n62174:57877,\n62175:57878,\n62176:57879,\n62177:57880,\n62178:57881,\n62179:57882,\n62180:57883,\n62181:57884,\n62182:57885,\n62183:57886,\n62184:57887,\n62185:57888,\n62186:57889,\n62187:57890,\n62188:57891,\n62189:57892,\n62190:57893,\n62191:57894,\n62192:57895,\n62193:57896,\n62194:57897,\n62195:57898,\n62196:57899,\n62197:57900,\n62198:57901,\n62199:57902,\n62200:57903,\n62201:57904,\n62202:57905,\n62203:57906,\n62204:57907,\n62272:57908,\n62273:57909,\n62274:57910,\n62275:57911,\n62276:57912,\n62277:57913,\n62278:57914,\n62279:57915,\n62280:57916,\n62281:57917,\n62282:57918,\n62283:57919,\n62284:57920,\n62285:57921,\n62286:57922,\n62287:57923,\n62288:57924,\n62289:57925,\n62290:57926,\n62291:57927,\n62292:57928,\n62293:57929,\n62294:57930,\n62295:57931,\n62296:57932,\n62297:57933,\n62298:57934,\n62299:57935,\n62300:57936,\n62301:57937,\n62302:57938,\n62303:57939,\n62304:57940,\n62305:57941,\n62306:57942,\n62307:57943,\n62308:57944,\n62309:57945,\n62310:57946,\n62311:57947,\n62312:57948,\n62313:57949,\n62314:57950,\n62315:57951,\n62316:57952,\n62317:57953,\n62318:57954,\n62319:57955,\n62320:57956,\n62321:57957,\n62322:57958,\n62323:57959,\n62324:57960,\n62325:57961,\n62326:57962,\n62327:57963,\n62328:57964,\n62329:57965,\n62330:57966,\n62331:57967,\n62332:57968,\n62333:57969,\n62334:57970,\n62336:57971,\n62337:57972,\n62338:57973,\n62339:57974,\n62340:57975,\n62341:57976,\n62342:57977,\n62343:57978,\n62344:57979,\n62345:57980,\n62346:57981,\n62347:57982,\n62348:57983,\n62349:57984,\n62350:57985,\n62351:57986,\n62352:57987,\n62353:57988,\n62354:57989,\n62355:57990,\n62356:57991,\n62357:57992,\n62358:57993,\n62359:57994,\n62360:57995,\n62361:57996,\n62362:57997,\n62363:57998,\n62364:57999,\n62365:58000,\n62366:58001,\n62367:58002,\n62368:58003,\n62369:58004,\n62370:58005,\n62371:58006,\n62372:58007,\n62373:58008,\n62374:58009,\n62375:58010,\n62376:58011,\n62377:58012,\n62378:58013,\n62379:58014,\n62380:58015,\n62381:58016,\n62382:58017,\n62383:58018,\n62384:58019,\n62385:58020,\n62386:58021,\n62387:58022,\n62388:58023,\n62389:58024,\n62390:58025,\n62391:58026,\n62392:58027,\n62393:58028,\n62394:58029,\n62395:58030,\n62396:58031,\n62397:58032,\n62398:58033,\n62399:58034,\n62400:58035,\n62401:58036,\n62402:58037,\n62403:58038,\n62404:58039,\n62405:58040,\n62406:58041,\n62407:58042,\n62408:58043,\n62409:58044,\n62410:58045,\n62411:58046,\n62412:58047,\n62413:58048,\n62414:58049,\n62415:58050,\n62416:58051,\n62417:58052,\n62418:58053,\n62419:58054,\n62420:58055,\n62421:58056,\n62422:58057,\n62423:58058,\n62424:58059,\n62425:58060,\n62426:58061,\n62427:58062,\n62428:58063,\n62429:58064,\n62430:58065,\n62431:58066,\n62432:58067,\n62433:58068,\n62434:58069,\n62435:58070,\n62436:58071,\n62437:58072,\n62438:58073,\n62439:58074,\n62440:58075,\n62441:58076,\n62442:58077,\n62443:58078,\n62444:58079,\n62445:58080,\n62446:58081,\n62447:58082,\n62448:58083,\n62449:58084,\n62450:58085,\n62451:58086,\n62452:58087,\n62453:58088,\n62454:58089,\n62455:58090,\n62456:58091,\n62457:58092,\n62458:58093,\n62459:58094,\n62460:58095,\n62528:58096,\n62529:58097,\n62530:58098,\n62531:58099,\n62532:58100,\n62533:58101,\n62534:58102,\n62535:58103,\n62536:58104,\n62537:58105,\n62538:58106,\n62539:58107,\n62540:58108,\n62541:58109,\n62542:58110,\n62543:58111,\n62544:58112,\n62545:58113,\n62546:58114,\n62547:58115,\n62548:58116,\n62549:58117,\n62550:58118,\n62551:58119,\n62552:58120,\n62553:58121,\n62554:58122,\n62555:58123,\n62556:58124,\n62557:58125,\n62558:58126,\n62559:58127,\n62560:58128,\n62561:58129,\n62562:58130,\n62563:58131,\n62564:58132,\n62565:58133,\n62566:58134,\n62567:58135,\n62568:58136,\n62569:58137,\n62570:58138,\n62571:58139,\n62572:58140,\n62573:58141,\n62574:58142,\n62575:58143,\n62576:58144,\n62577:58145,\n62578:58146,\n62579:58147,\n62580:58148,\n62581:58149,\n62582:58150,\n62583:58151,\n62584:58152,\n62585:58153,\n62586:58154,\n62587:58155,\n62588:58156,\n62589:58157,\n62590:58158,\n62592:58159,\n62593:58160,\n62594:58161,\n62595:58162,\n62596:58163,\n62597:58164,\n62598:58165,\n62599:58166,\n62600:58167,\n62601:58168,\n62602:58169,\n62603:58170,\n62604:58171,\n62605:58172,\n62606:58173,\n62607:58174,\n62608:58175,\n62609:58176,\n62610:58177,\n62611:58178,\n62612:58179,\n62613:58180,\n62614:58181,\n62615:58182,\n62616:58183,\n62617:58184,\n62618:58185,\n62619:58186,\n62620:58187,\n62621:58188,\n62622:58189,\n62623:58190,\n62624:58191,\n62625:58192,\n62626:58193,\n62627:58194,\n62628:58195,\n62629:58196,\n62630:58197,\n62631:58198,\n62632:58199,\n62633:58200,\n62634:58201,\n62635:58202,\n62636:58203,\n62637:58204,\n62638:58205,\n62639:58206,\n62640:58207,\n62641:58208,\n62642:58209,\n62643:58210,\n62644:58211,\n62645:58212,\n62646:58213,\n62647:58214,\n62648:58215,\n62649:58216,\n62650:58217,\n62651:58218,\n62652:58219,\n62653:58220,\n62654:58221,\n62655:58222,\n62656:58223,\n62657:58224,\n62658:58225,\n62659:58226,\n62660:58227,\n62661:58228,\n62662:58229,\n62663:58230,\n62664:58231,\n62665:58232,\n62666:58233,\n62667:58234,\n62668:58235,\n62669:58236,\n62670:58237,\n62671:58238,\n62672:58239,\n62673:58240,\n62674:58241,\n62675:58242,\n62676:58243,\n62677:58244,\n62678:58245,\n62679:58246,\n62680:58247,\n62681:58248,\n62682:58249,\n62683:58250,\n62684:58251,\n62685:58252,\n62686:58253,\n62687:58254,\n62688:58255,\n62689:58256,\n62690:58257,\n62691:58258,\n62692:58259,\n62693:58260,\n62694:58261,\n62695:58262,\n62696:58263,\n62697:58264,\n62698:58265,\n62699:58266,\n62700:58267,\n62701:58268,\n62702:58269,\n62703:58270,\n62704:58271,\n62705:58272,\n62706:58273,\n62707:58274,\n62708:58275,\n62709:58276,\n62710:58277,\n62711:58278,\n62712:58279,\n62713:58280,\n62714:58281,\n62715:58282,\n62716:58283,\n62784:58284,\n62785:58285,\n62786:58286,\n62787:58287,\n62788:58288,\n62789:58289,\n62790:58290,\n62791:58291,\n62792:58292,\n62793:58293,\n62794:58294,\n62795:58295,\n62796:58296,\n62797:58297,\n62798:58298,\n62799:58299,\n62800:58300,\n62801:58301,\n62802:58302,\n62803:58303,\n62804:58304,\n62805:58305,\n62806:58306,\n62807:58307,\n62808:58308,\n62809:58309,\n62810:58310,\n62811:58311,\n62812:58312,\n62813:58313,\n62814:58314,\n62815:58315,\n62816:58316,\n62817:58317,\n62818:58318,\n62819:58319,\n62820:58320,\n62821:58321,\n62822:58322,\n62823:58323,\n62824:58324,\n62825:58325,\n62826:58326,\n62827:58327,\n62828:58328,\n62829:58329,\n62830:58330,\n62831:58331,\n62832:58332,\n62833:58333,\n62834:58334,\n62835:58335,\n62836:58336,\n62837:58337,\n62838:58338,\n62839:58339,\n62840:58340,\n62841:58341,\n62842:58342,\n62843:58343,\n62844:58344,\n62845:58345,\n62846:58346,\n62848:58347,\n62849:58348,\n62850:58349,\n62851:58350,\n62852:58351,\n62853:58352,\n62854:58353,\n62855:58354,\n62856:58355,\n62857:58356,\n62858:58357,\n62859:58358,\n62860:58359,\n62861:58360,\n62862:58361,\n62863:58362,\n62864:58363,\n62865:58364,\n62866:58365,\n62867:58366,\n62868:58367,\n62869:58368,\n62870:58369,\n62871:58370,\n62872:58371,\n62873:58372,\n62874:58373,\n62875:58374,\n62876:58375,\n62877:58376,\n62878:58377,\n62879:58378,\n62880:58379,\n62881:58380,\n62882:58381,\n62883:58382,\n62884:58383,\n62885:58384,\n62886:58385,\n62887:58386,\n62888:58387,\n62889:58388,\n62890:58389,\n62891:58390,\n62892:58391,\n62893:58392,\n62894:58393,\n62895:58394,\n62896:58395,\n62897:58396,\n62898:58397,\n62899:58398,\n62900:58399,\n62901:58400,\n62902:58401,\n62903:58402,\n62904:58403,\n62905:58404,\n62906:58405,\n62907:58406,\n62908:58407,\n62909:58408,\n62910:58409,\n62911:58410,\n62912:58411,\n62913:58412,\n62914:58413,\n62915:58414,\n62916:58415,\n62917:58416,\n62918:58417,\n62919:58418,\n62920:58419,\n62921:58420,\n62922:58421,\n62923:58422,\n62924:58423,\n62925:58424,\n62926:58425,\n62927:58426,\n62928:58427,\n62929:58428,\n62930:58429,\n62931:58430,\n62932:58431,\n62933:58432,\n62934:58433,\n62935:58434,\n62936:58435,\n62937:58436,\n62938:58437,\n62939:58438,\n62940:58439,\n62941:58440,\n62942:58441,\n62943:58442,\n62944:58443,\n62945:58444,\n62946:58445,\n62947:58446,\n62948:58447,\n62949:58448,\n62950:58449,\n62951:58450,\n62952:58451,\n62953:58452,\n62954:58453,\n62955:58454,\n62956:58455,\n62957:58456,\n62958:58457,\n62959:58458,\n62960:58459,\n62961:58460,\n62962:58461,\n62963:58462,\n62964:58463,\n62965:58464,\n62966:58465,\n62967:58466,\n62968:58467,\n62969:58468,\n62970:58469,\n62971:58470,\n62972:58471,\n63040:58472,\n63041:58473,\n63042:58474,\n63043:58475,\n63044:58476,\n63045:58477,\n63046:58478,\n63047:58479,\n63048:58480,\n63049:58481,\n63050:58482,\n63051:58483,\n63052:58484,\n63053:58485,\n63054:58486,\n63055:58487,\n63056:58488,\n63057:58489,\n63058:58490,\n63059:58491,\n63060:58492,\n63061:58493,\n63062:58494,\n63063:58495,\n63064:58496,\n63065:58497,\n63066:58498,\n63067:58499,\n63068:58500,\n63069:58501,\n63070:58502,\n63071:58503,\n63072:58504,\n63073:58505,\n63074:58506,\n63075:58507,\n63076:58508,\n63077:58509,\n63078:58510,\n63079:58511,\n63080:58512,\n63081:58513,\n63082:58514,\n63083:58515,\n63084:58516,\n63085:58517,\n63086:58518,\n63087:58519,\n63088:58520,\n63089:58521,\n63090:58522,\n63091:58523,\n63092:58524,\n63093:58525,\n63094:58526,\n63095:58527,\n63096:58528,\n63097:58529,\n63098:58530,\n63099:58531,\n63100:58532,\n63101:58533,\n63102:58534,\n63104:58535,\n63105:58536,\n63106:58537,\n63107:58538,\n63108:58539,\n63109:58540,\n63110:58541,\n63111:58542,\n63112:58543,\n63113:58544,\n63114:58545,\n63115:58546,\n63116:58547,\n63117:58548,\n63118:58549,\n63119:58550,\n63120:58551,\n63121:58552,\n63122:58553,\n63123:58554,\n63124:58555,\n63125:58556,\n63126:58557,\n63127:58558,\n63128:58559,\n63129:58560,\n63130:58561,\n63131:58562,\n63132:58563,\n63133:58564,\n63134:58565,\n63135:58566,\n63136:58567,\n63137:58568,\n63138:58569,\n63139:58570,\n63140:58571,\n63141:58572,\n63142:58573,\n63143:58574,\n63144:58575,\n63145:58576,\n63146:58577,\n63147:58578,\n63148:58579,\n63149:58580,\n63150:58581,\n63151:58582,\n63152:58583,\n63153:58584,\n63154:58585,\n63155:58586,\n63156:58587,\n63157:58588,\n63158:58589,\n63159:58590,\n63160:58591,\n63161:58592,\n63162:58593,\n63163:58594,\n63164:58595,\n63165:58596,\n63166:58597,\n63167:58598,\n63168:58599,\n63169:58600,\n63170:58601,\n63171:58602,\n63172:58603,\n63173:58604,\n63174:58605,\n63175:58606,\n63176:58607,\n63177:58608,\n63178:58609,\n63179:58610,\n63180:58611,\n63181:58612,\n63182:58613,\n63183:58614,\n63184:58615,\n63185:58616,\n63186:58617,\n63187:58618,\n63188:58619,\n63189:58620,\n63190:58621,\n63191:58622,\n63192:58623,\n63193:58624,\n63194:58625,\n63195:58626,\n63196:58627,\n63197:58628,\n63198:58629,\n63199:58630,\n63200:58631,\n63201:58632,\n63202:58633,\n63203:58634,\n63204:58635,\n63205:58636,\n63206:58637,\n63207:58638,\n63208:58639,\n63209:58640,\n63210:58641,\n63211:58642,\n63212:58643,\n63213:58644,\n63214:58645,\n63215:58646,\n63216:58647,\n63217:58648,\n63218:58649,\n63219:58650,\n63220:58651,\n63221:58652,\n63222:58653,\n63223:58654,\n63224:58655,\n63225:58656,\n63226:58657,\n63227:58658,\n63228:58659,\n63296:58660,\n63297:58661,\n63298:58662,\n63299:58663,\n63300:58664,\n63301:58665,\n63302:58666,\n63303:58667,\n63304:58668,\n63305:58669,\n63306:58670,\n63307:58671,\n63308:58672,\n63309:58673,\n63310:58674,\n63311:58675,\n63312:58676,\n63313:58677,\n63314:58678,\n63315:58679,\n63316:58680,\n63317:58681,\n63318:58682,\n63319:58683,\n63320:58684,\n63321:58685,\n63322:58686,\n63323:58687,\n63324:58688,\n63325:58689,\n63326:58690,\n63327:58691,\n63328:58692,\n63329:58693,\n63330:58694,\n63331:58695,\n63332:58696,\n63333:58697,\n63334:58698,\n63335:58699,\n63336:58700,\n63337:58701,\n63338:58702,\n63339:58703,\n63340:58704,\n63341:58705,\n63342:58706,\n63343:58707,\n63344:58708,\n63345:58709,\n63346:58710,\n63347:58711,\n63348:58712,\n63349:58713,\n63350:58714,\n63351:58715,\n63352:58716,\n63353:58717,\n63354:58718,\n63355:58719,\n63356:58720,\n63357:58721,\n63358:58722,\n63360:58723,\n63361:58724,\n63362:58725,\n63363:58726,\n63364:58727,\n63365:58728,\n63366:58729,\n63367:58730,\n63368:58731,\n63369:58732,\n63370:58733,\n63371:58734,\n63372:58735,\n63373:58736,\n63374:58737,\n63375:58738,\n63376:58739,\n63377:58740,\n63378:58741,\n63379:58742,\n63380:58743,\n63381:58744,\n63382:58745,\n63383:58746,\n63384:58747,\n63385:58748,\n63386:58749,\n63387:58750,\n63388:58751,\n63389:58752,\n63390:58753,\n63391:58754,\n63392:58755,\n63393:58756,\n63394:58757,\n63395:58758,\n63396:58759,\n63397:58760,\n63398:58761,\n63399:58762,\n63400:58763,\n63401:58764,\n63402:58765,\n63403:58766,\n63404:58767,\n63405:58768,\n63406:58769,\n63407:58770,\n63408:58771,\n63409:58772,\n63410:58773,\n63411:58774,\n63412:58775,\n63413:58776,\n63414:58777,\n63415:58778,\n63416:58779,\n63417:58780,\n63418:58781,\n63419:58782,\n63420:58783,\n63421:58784,\n63422:58785,\n63423:58786,\n63424:58787,\n63425:58788,\n63426:58789,\n63427:58790,\n63428:58791,\n63429:58792,\n63430:58793,\n63431:58794,\n63432:58795,\n63433:58796,\n63434:58797,\n63435:58798,\n63436:58799,\n63437:58800,\n63438:58801,\n63439:58802,\n63440:58803,\n63441:58804,\n63442:58805,\n63443:58806,\n63444:58807,\n63445:58808,\n63446:58809,\n63447:58810,\n63448:58811,\n63449:58812,\n63450:58813,\n63451:58814,\n63452:58815,\n63453:58816,\n63454:58817,\n63455:58818,\n63456:58819,\n63457:58820,\n63458:58821,\n63459:58822,\n63460:58823,\n63461:58824,\n63462:58825,\n63463:58826,\n63464:58827,\n63465:58828,\n63466:58829,\n63467:58830,\n63468:58831,\n63469:58832,\n63470:58833,\n63471:58834,\n63472:58835,\n63473:58836,\n63474:58837,\n63475:58838,\n63476:58839,\n63477:58840,\n63478:58841,\n63479:58842,\n63480:58843,\n63481:58844,\n63482:58845,\n63483:58846,\n63484:58847,\n63552:58848,\n63553:58849,\n63554:58850,\n63555:58851,\n63556:58852,\n63557:58853,\n63558:58854,\n63559:58855,\n63560:58856,\n63561:58857,\n63562:58858,\n63563:58859,\n63564:58860,\n63565:58861,\n63566:58862,\n63567:58863,\n63568:58864,\n63569:58865,\n63570:58866,\n63571:58867,\n63572:58868,\n63573:58869,\n63574:58870,\n63575:58871,\n63576:58872,\n63577:58873,\n63578:58874,\n63579:58875,\n63580:58876,\n63581:58877,\n63582:58878,\n63583:58879,\n63584:58880,\n63585:58881,\n63586:58882,\n63587:58883,\n63588:58884,\n63589:58885,\n63590:58886,\n63591:58887,\n63592:58888,\n63593:58889,\n63594:58890,\n63595:58891,\n63596:58892,\n63597:58893,\n63598:58894,\n63599:58895,\n63600:58896,\n63601:58897,\n63602:58898,\n63603:58899,\n63604:58900,\n63605:58901,\n63606:58902,\n63607:58903,\n63608:58904,\n63609:58905,\n63610:58906,\n63611:58907,\n63612:58908,\n63613:58909,\n63614:58910,\n63616:58911,\n63617:58912,\n63618:58913,\n63619:58914,\n63620:58915,\n63621:58916,\n63622:58917,\n63623:58918,\n63624:58919,\n63625:58920,\n63626:58921,\n63627:58922,\n63628:58923,\n63629:58924,\n63630:58925,\n63631:58926,\n63632:58927,\n63633:58928,\n63634:58929,\n63635:58930,\n63636:58931,\n63637:58932,\n63638:58933,\n63639:58934,\n63640:58935,\n63641:58936,\n63642:58937,\n63643:58938,\n63644:58939,\n63645:58940,\n63646:58941,\n63647:58942,\n63648:58943,\n63649:58944,\n63650:58945,\n63651:58946,\n63652:58947,\n63653:58948,\n63654:58949,\n63655:58950,\n63656:58951,\n63657:58952,\n63658:58953,\n63659:58954,\n63660:58955,\n63661:58956,\n63662:58957,\n63663:58958,\n63664:58959,\n63665:58960,\n63666:58961,\n63667:58962,\n63668:58963,\n63669:58964,\n63670:58965,\n63671:58966,\n63672:58967,\n63673:58968,\n63674:58969,\n63675:58970,\n63676:58971,\n63677:58972,\n63678:58973,\n63679:58974,\n63680:58975,\n63681:58976,\n63682:58977,\n63683:58978,\n63684:58979,\n63685:58980,\n63686:58981,\n63687:58982,\n63688:58983,\n63689:58984,\n63690:58985,\n63691:58986,\n63692:58987,\n63693:58988,\n63694:58989,\n63695:58990,\n63696:58991,\n63697:58992,\n63698:58993,\n63699:58994,\n63700:58995,\n63701:58996,\n63702:58997,\n63703:58998,\n63704:58999,\n63705:59000,\n63706:59001,\n63707:59002,\n63708:59003,\n63709:59004,\n63710:59005,\n63711:59006,\n63712:59007,\n63713:59008,\n63714:59009,\n63715:59010,\n63716:59011,\n63717:59012,\n63718:59013,\n63719:59014,\n63720:59015,\n63721:59016,\n63722:59017,\n63723:59018,\n63724:59019,\n63725:59020,\n63726:59021,\n63727:59022,\n63728:59023,\n63729:59024,\n63730:59025,\n63731:59026,\n63732:59027,\n63733:59028,\n63734:59029,\n63735:59030,\n63736:59031,\n63737:59032,\n63738:59033,\n63739:59034,\n63740:59035,\n64064:8560,\n64065:8561,\n64066:8562,\n64067:8563,\n64068:8564,\n64069:8565,\n64070:8566,\n64071:8567,\n64072:8568,\n64073:8569,\n64074:8544,\n64075:8545,\n64076:8546,\n64077:8547,\n64078:8548,\n64079:8549,\n64080:8550,\n64081:8551,\n64082:8552,\n64083:8553,\n64084:65506,\n64085:65508,\n64086:65287,\n64087:65282,\n64088:12849,\n64089:8470,\n64090:8481,\n64091:8757,\n64092:32394,\n64093:35100,\n64094:37704,\n64095:37512,\n64096:34012,\n64097:20425,\n64098:28859,\n64099:26161,\n64100:26824,\n64101:37625,\n64102:26363,\n64103:24389,\n64104:20008,\n64105:20193,\n64106:20220,\n64107:20224,\n64108:20227,\n64109:20281,\n64110:20310,\n64111:20370,\n64112:20362,\n64113:20378,\n64114:20372,\n64115:20429,\n64116:20544,\n64117:20514,\n64118:20479,\n64119:20510,\n64120:20550,\n64121:20592,\n64122:20546,\n64123:20628,\n64124:20724,\n64125:20696,\n64126:20810,\n64128:20836,\n64129:20893,\n64130:20926,\n64131:20972,\n64132:21013,\n64133:21148,\n64134:21158,\n64135:21184,\n64136:21211,\n64137:21248,\n64138:21255,\n64139:21284,\n64140:21362,\n64141:21395,\n64142:21426,\n64143:21469,\n64144:64014,\n64145:21660,\n64146:21642,\n64147:21673,\n64148:21759,\n64149:21894,\n64150:22361,\n64151:22373,\n64152:22444,\n64153:22472,\n64154:22471,\n64155:64015,\n64156:64016,\n64157:22686,\n64158:22706,\n64159:22795,\n64160:22867,\n64161:22875,\n64162:22877,\n64163:22883,\n64164:22948,\n64165:22970,\n64166:23382,\n64167:23488,\n64168:29999,\n64169:23512,\n64170:23532,\n64171:23582,\n64172:23718,\n64173:23738,\n64174:23797,\n64175:23847,\n64176:23891,\n64177:64017,\n64178:23874,\n64179:23917,\n64180:23992,\n64181:23993,\n64182:24016,\n64183:24353,\n64184:24372,\n64185:24423,\n64186:24503,\n64187:24542,\n64188:24669,\n64189:24709,\n64190:24714,\n64191:24798,\n64192:24789,\n64193:24864,\n64194:24818,\n64195:24849,\n64196:24887,\n64197:24880,\n64198:24984,\n64199:25107,\n64200:25254,\n64201:25589,\n64202:25696,\n64203:25757,\n64204:25806,\n64205:25934,\n64206:26112,\n64207:26133,\n64208:26171,\n64209:26121,\n64210:26158,\n64211:26142,\n64212:26148,\n64213:26213,\n64214:26199,\n64215:26201,\n64216:64018,\n64217:26227,\n64218:26265,\n64219:26272,\n64220:26290,\n64221:26303,\n64222:26362,\n64223:26382,\n64224:63785,\n64225:26470,\n64226:26555,\n64227:26706,\n64228:26560,\n64229:26625,\n64230:26692,\n64231:26831,\n64232:64019,\n64233:26984,\n64234:64020,\n64235:27032,\n64236:27106,\n64237:27184,\n64238:27243,\n64239:27206,\n64240:27251,\n64241:27262,\n64242:27362,\n64243:27364,\n64244:27606,\n64245:27711,\n64246:27740,\n64247:27782,\n64248:27759,\n64249:27866,\n64250:27908,\n64251:28039,\n64252:28015,\n64320:28054,\n64321:28076,\n64322:28111,\n64323:28152,\n64324:28146,\n64325:28156,\n64326:28217,\n64327:28252,\n64328:28199,\n64329:28220,\n64330:28351,\n64331:28552,\n64332:28597,\n64333:28661,\n64334:28677,\n64335:28679,\n64336:28712,\n64337:28805,\n64338:28843,\n64339:28943,\n64340:28932,\n64341:29020,\n64342:28998,\n64343:28999,\n64344:64021,\n64345:29121,\n64346:29182,\n64347:29361,\n64348:29374,\n64349:29476,\n64350:64022,\n64351:29559,\n64352:29629,\n64353:29641,\n64354:29654,\n64355:29667,\n64356:29650,\n64357:29703,\n64358:29685,\n64359:29734,\n64360:29738,\n64361:29737,\n64362:29742,\n64363:29794,\n64364:29833,\n64365:29855,\n64366:29953,\n64367:30063,\n64368:30338,\n64369:30364,\n64370:30366,\n64371:30363,\n64372:30374,\n64373:64023,\n64374:30534,\n64375:21167,\n64376:30753,\n64377:30798,\n64378:30820,\n64379:30842,\n64380:31024,\n64381:64024,\n64382:64025,\n64384:64026,\n64385:31124,\n64386:64027,\n64387:31131,\n64388:31441,\n64389:31463,\n64390:64028,\n64391:31467,\n64392:31646,\n64393:64029,\n64394:32072,\n64395:32092,\n64396:32183,\n64397:32160,\n64398:32214,\n64399:32338,\n64400:32583,\n64401:32673,\n64402:64030,\n64403:33537,\n64404:33634,\n64405:33663,\n64406:33735,\n64407:33782,\n64408:33864,\n64409:33972,\n64410:34131,\n64411:34137,\n64412:34155,\n64413:64031,\n64414:34224,\n64415:64032,\n64416:64033,\n64417:34823,\n64418:35061,\n64419:35346,\n64420:35383,\n64421:35449,\n64422:35495,\n64423:35518,\n64424:35551,\n64425:64034,\n64426:35574,\n64427:35667,\n64428:35711,\n64429:36080,\n64430:36084,\n64431:36114,\n64432:36214,\n64433:64035,\n64434:36559,\n64435:64036,\n64436:64037,\n64437:36967,\n64438:37086,\n64439:64038,\n64440:37141,\n64441:37159,\n64442:37338,\n64443:37335,\n64444:37342,\n64445:37357,\n64446:37358,\n64447:37348,\n64448:37349,\n64449:37382,\n64450:37392,\n64451:37386,\n64452:37434,\n64453:37440,\n64454:37436,\n64455:37454,\n64456:37465,\n64457:37457,\n64458:37433,\n64459:37479,\n64460:37543,\n64461:37495,\n64462:37496,\n64463:37607,\n64464:37591,\n64465:37593,\n64466:37584,\n64467:64039,\n64468:37589,\n64469:37600,\n64470:37587,\n64471:37669,\n64472:37665,\n64473:37627,\n64474:64040,\n64475:37662,\n64476:37631,\n64477:37661,\n64478:37634,\n64479:37744,\n64480:37719,\n64481:37796,\n64482:37830,\n64483:37854,\n64484:37880,\n64485:37937,\n64486:37957,\n64487:37960,\n64488:38290,\n64489:63964,\n64490:64041,\n64491:38557,\n64492:38575,\n64493:38707,\n64494:38715,\n64495:38723,\n64496:38733,\n64497:38735,\n64498:38737,\n64499:38741,\n64500:38999,\n64501:39013,\n64502:64042,\n64503:64043,\n64504:39207,\n64505:64044,\n64506:39326,\n64507:39502,\n64508:39641,\n64576:39644,\n64577:39797,\n64578:39794,\n64579:39823,\n64580:39857,\n64581:39867,\n64582:39936,\n64583:40304,\n64584:40299,\n64585:64045,\n64586:40473,\n64587:40657\n};\n\n/**\n * @author takahiro / https://github.com/takahirox\n */\n\nfunction DataViewEx ( buffer, littleEndian ) {\n\n\tthis.dv = new DataView( buffer );\n\tthis.offset = 0;\n\tthis.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true;\n\tthis.encoder = new CharsetEncoder();\n\n}\n\nDataViewEx.prototype = {\n\n\tconstructor: DataViewEx,\n\n\tgetInt8: function () {\n\n\t\tvar value = this.dv.getInt8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t},\n\n\tgetInt8Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getInt8() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetUint8: function () {\n\n\t\tvar value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t},\n\n\tgetUint8Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getUint8() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\n\tgetInt16: function () {\n\n\t\tvar value = this.dv.getInt16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t},\n\n\tgetInt16Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getInt16() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetUint16: function () {\n\n\t\tvar value = this.dv.getUint16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t},\n\n\tgetUint16Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getUint16() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetInt32: function () {\n\n\t\tvar value = this.dv.getInt32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetInt32Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getInt32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetUint32: function () {\n\n\t\tvar value = this.dv.getUint32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetUint32Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getUint32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetFloat32: function () {\n\n\t\tvar value = this.dv.getFloat32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetFloat32Array: function( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetFloat64: function () {\n\n\t\tvar value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t},\n\n\tgetFloat64Array: function( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetIndex: function ( type, isUnsigned ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 1:\n\t\t\t\treturn ( isUnsigned === true ) ? this.getUint8() : this.getInt8();\n\n\t\t\tcase 2:\n\t\t\t\treturn ( isUnsigned === true ) ? this.getUint16() : this.getInt16();\n\n\t\t\tcase 4:\n\t\t\t\treturn this.getInt32(); // No Uint32\n\n\t\t\tdefault:\n\t\t\t\tthrow 'unknown number type ' + type + ' exception.';\n\n\t\t}\n\n\t},\n\n\tgetIndexArray: function ( type, size, isUnsigned ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getIndex( type, isUnsigned ) );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetChars: function ( size ) {\n\n\t\tvar str = '';\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tvar value = this.getUint8();\n\t\t\tsize--;\n\n\t\t\tif ( value === 0 ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tstr += String.fromCharCode( value );\n\n\t\t}\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tthis.getUint8();\n\t\t\tsize--;\n\n\t\t}\n\n\t\treturn str;\n\n\t},\n\n\tgetSjisStringsAsUnicode: function ( size ) {\n\n\t\tvar a = [];\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tvar value = this.getUint8();\n\t\t\tsize--;\n\n\t\t\tif ( value === 0 ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\ta.push( value );\n\n\t\t}\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tthis.getUint8();\n\t\t\tsize--;\n\n\t\t}\n\n\t\treturn this.encoder.s2u( new Uint8Array( a ) );\n\n\t},\n\n\tgetUnicodeStrings: function ( size ) {\n\n\t\tvar str = '';\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tvar value = this.getUint16();\n\t\t\tsize -= 2;\n\n\t\t\tif ( value === 0 ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tstr += String.fromCharCode( value );\n\n\t\t}\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tthis.getUint8();\n\t\t\tsize--;\n\n\t\t}\n\n\t\treturn str;\n\n\t},\n\n\tgetTextBuffer: function () {\n\n\t\tvar size = this.getUint32();\n\t\treturn this.getUnicodeStrings( size );\n\n\t}\n\n};\n\n/**\n * @author takahiro / https://github.com/takahirox\n */\n\nfunction DataCreationHelper () {\n}\n\nDataCreationHelper.prototype = {\n\n\tconstructor: DataCreationHelper,\n\n\tleftToRightVector3: function ( v ) {\n\n\t\tv[ 2 ] = -v[ 2 ];\n\n\t},\n\n\tleftToRightQuaternion: function ( q ) {\n\n\t\tq[ 0 ] = -q[ 0 ];\n\t\tq[ 1 ] = -q[ 1 ];\n\n\t},\n\n\tleftToRightEuler: function ( r ) {\n\n\t\tr[ 0 ] = -r[ 0 ];\n\t\tr[ 1 ] = -r[ 1 ];\n\n\t},\n\n\tleftToRightIndexOrder: function ( p ) {\n\n\t\tvar tmp = p[ 2 ];\n\t\tp[ 2 ] = p[ 0 ];\n\t\tp[ 0 ] = tmp;\n\n\t},\n\n\tleftToRightVector3Range: function ( v1, v2 ) {\n\n\t\tvar tmp = -v2[ 2 ];\n\t\tv2[ 2 ] = -v1[ 2 ];\n\t\tv1[ 2 ] = tmp;\n\n\t},\n\n\tleftToRightEulerRange: function ( r1, r2 ) {\n\n\t\tvar tmp1 = -r2[ 0 ];\n\t\tvar tmp2 = -r2[ 1 ];\n\t\tr2[ 0 ] = -r1[ 0 ];\n\t\tr2[ 1 ] = -r1[ 1 ];\n\t\tr1[ 0 ] = tmp1;\n\t\tr1[ 1 ] = tmp2;\n\n\t}\n\n};\n\n/**\n * @author takahiro / https://github.com/takahirox\n */\n\nfunction Parser() {\n}\n\nParser.prototype.parsePmd = function ( buffer, leftToRight ) {\n\n\tvar pmd = {};\n\tvar dv = new DataViewEx( buffer );\n\n\tpmd.metadata = {};\n\tpmd.metadata.format = 'pmd';\n\tpmd.metadata.coordinateSystem = 'left';\n\n\tvar parseHeader = function () {\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.magic = dv.getChars( 3 );\n\n\t\tif ( metadata.magic !== 'Pmd' ) {\n\n\t\t\tthrow 'PMD file magic is not Pmd, but ' + metadata.magic;\n\n\t\t}\n\n\t\tmetadata.version = dv.getFloat32();\n\t\tmetadata.modelName = dv.getSjisStringsAsUnicode( 20 );\n\t\tmetadata.comment = dv.getSjisStringsAsUnicode( 256 );\n\n\t};\n\n\tvar parseVertices = function () {\n\n\t\tvar parseVertex = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.normal = dv.getFloat32Array( 3 );\n\t\t\tp.uv = dv.getFloat32Array( 2 );\n\t\t\tp.skinIndices = dv.getUint16Array( 2 );\n\t\t\tp.skinWeights = [ dv.getUint8() / 100 ];\n\t\t\tp.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );\n\t\t\tp.edgeFlag = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.vertexCount = dv.getUint32();\n\n\t\tpmd.vertices = [];\n\n\t\tfor ( var i = 0; i < metadata.vertexCount; i++ ) {\n\n\t\t\tpmd.vertices.push( parseVertex() );\n\n\t\t}\n\n\t};\n\n\tvar parseFaces = function () {\n\n\t\tvar parseFace = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.indices = dv.getUint16Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.faceCount = dv.getUint32() / 3;\n\n\t\tpmd.faces = [];\n\n\t\tfor ( var i = 0; i < metadata.faceCount; i++ ) {\n\n\t\t\tpmd.faces.push( parseFace() );\n\n\t\t}\n\n\t};\n\n\tvar parseMaterials = function () {\n\n\t\tvar parseMaterial = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.diffuse = dv.getFloat32Array( 4 );\n\t\t\tp.shininess = dv.getFloat32();\n\t\t\tp.specular = dv.getFloat32Array( 3 );\n\t\t\tp.ambient = dv.getFloat32Array( 3 );\n\t\t\tp.toonIndex = dv.getInt8();\n\t\t\tp.edgeFlag = dv.getUint8();\n\t\t\tp.faceCount = dv.getUint32() / 3;\n\t\t\tp.fileName = dv.getSjisStringsAsUnicode( 20 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.materialCount = dv.getUint32();\n\n\t\tpmd.materials = [];\n\n\t\tfor ( var i = 0; i < metadata.materialCount; i++ ) {\n\n\t\t\tpmd.materials.push( parseMaterial() );\n\n\t\t}\n\n\t};\n\n\tvar parseBones = function () {\n\n\t\tvar parseBone = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.parentIndex = dv.getInt16();\n\t\t\tp.tailIndex = dv.getInt16();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.ikIndex = dv.getInt16();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.boneCount = dv.getUint16();\n\n\t\tpmd.bones = [];\n\n\t\tfor ( var i = 0; i < metadata.boneCount; i++ ) {\n\n\t\t\tpmd.bones.push( parseBone() );\n\n\t\t}\n\n\t};\n\n\tvar parseIks = function () {\n\n\t\tvar parseIk = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.target = dv.getUint16();\n\t\t\tp.effector = dv.getUint16();\n\t\t\tp.linkCount = dv.getUint8();\n\t\t\tp.iteration = dv.getUint16();\n\t\t\tp.maxAngle = dv.getFloat32();\n\n\t\t\tp.links = [];\n\t\t\tfor ( var i = 0; i < p.linkCount; i++ ) {\n\n\t\t\t\tvar link = {};\n\t\t\t\tlink.index = dv.getUint16();\n\t\t\t\tp.links.push( link );\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.ikCount = dv.getUint16();\n\n\t\tpmd.iks = [];\n\n\t\tfor ( var i = 0; i < metadata.ikCount; i++ ) {\n\n\t\t\tpmd.iks.push( parseIk() );\n\n\t\t}\n\n\t};\n\n\tvar parseMorphs = function () {\n\n\t\tvar parseMorph = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.elementCount = dv.getUint32();\n\t\t\tp.type = dv.getUint8();\n\n\t\t\tp.elements = [];\n\t\t\tfor ( var i = 0; i < p.elementCount; i++ ) {\n\n\t\t\t\tp.elements.push( {\n\t\t\t\t\tindex: dv.getUint32(),\n\t\t\t\t\tposition: dv.getFloat32Array( 3 )\n\t\t\t\t} ) ;\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.morphCount = dv.getUint16();\n\n\t\tpmd.morphs = [];\n\n\t\tfor ( var i = 0; i < metadata.morphCount; i++ ) {\n\n\t\t\tpmd.morphs.push( parseMorph() );\n\n\t\t}\n\n\n\t};\n\n\tvar parseMorphFrames = function () {\n\n\t\tvar parseMorphFrame = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.index = dv.getUint16();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.morphFrameCount = dv.getUint8();\n\n\t\tpmd.morphFrames = [];\n\n\t\tfor ( var i = 0; i < metadata.morphFrameCount; i++ ) {\n\n\t\t\tpmd.morphFrames.push( parseMorphFrame() );\n\n\t\t}\n\n\t};\n\n\tvar parseBoneFrameNames = function () {\n\n\t\tvar parseBoneFrameName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 50 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.boneFrameNameCount = dv.getUint8();\n\n\t\tpmd.boneFrameNames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneFrameNameCount; i++ ) {\n\n\t\t\tpmd.boneFrameNames.push( parseBoneFrameName() );\n\n\t\t}\n\n\t};\n\n\tvar parseBoneFrames = function () {\n\n\t\tvar parseBoneFrame = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.boneIndex = dv.getInt16();\n\t\t\tp.frameIndex = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.boneFrameCount = dv.getUint32();\n\n\t\tpmd.boneFrames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneFrameCount; i++ ) {\n\n\t\t\tpmd.boneFrames.push( parseBoneFrame() );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishHeader = function () {\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.englishCompatibility = dv.getUint8();\n\n\t\tif ( metadata.englishCompatibility > 0 ) {\n\n\t\t\tmetadata.englishModelName = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tmetadata.englishComment = dv.getSjisStringsAsUnicode( 256 );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishBoneNames = function () {\n\n\t\tvar parseEnglishBoneName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\n\t\tif ( metadata.englishCompatibility === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tpmd.englishBoneNames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneCount; i++ ) {\n\n\t\t\tpmd.englishBoneNames.push( parseEnglishBoneName() );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishMorphNames = function () {\n\n\t\tvar parseEnglishMorphName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\n\t\tif ( metadata.englishCompatibility === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tpmd.englishMorphNames = [];\n\n\t\tfor ( var i = 0; i < metadata.morphCount - 1; i++ ) {\n\n\t\t\tpmd.englishMorphNames.push( parseEnglishMorphName() );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishBoneFrameNames = function () {\n\n\t\tvar parseEnglishBoneFrameName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 50 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\n\t\tif ( metadata.englishCompatibility === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tpmd.englishBoneFrameNames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneFrameNameCount; i++ ) {\n\n\t\t\tpmd.englishBoneFrameNames.push( parseEnglishBoneFrameName() );\n\n\t\t}\n\n\t};\n\n\tvar parseToonTextures = function () {\n\n\t\tvar parseToonTexture = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.fileName = dv.getSjisStringsAsUnicode( 100 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tpmd.toonTextures = [];\n\n\t\tfor ( var i = 0; i < 10; i++ ) {\n\n\t\t\tpmd.toonTextures.push( parseToonTexture() );\n\n\t\t}\n\n\t};\n\n\tvar parseRigidBodies = function () {\n\n\t\tvar parseRigidBody = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.boneIndex = dv.getInt16();\n\t\t\tp.groupIndex = dv.getUint8();\n\t\t\tp.groupTarget = dv.getUint16();\n\t\t\tp.shapeType = dv.getUint8();\n\t\t\tp.width = dv.getFloat32();\n\t\t\tp.height = dv.getFloat32();\n\t\t\tp.depth = dv.getFloat32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.weight = dv.getFloat32();\n\t\t\tp.positionDamping = dv.getFloat32();\n\t\t\tp.rotationDamping = dv.getFloat32();\n\t\t\tp.restitution = dv.getFloat32();\n\t\t\tp.friction = dv.getFloat32();\n\t\t\tp.type = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.rigidBodyCount = dv.getUint32();\n\n\t\tpmd.rigidBodies = [];\n\n\t\tfor ( var i = 0; i < metadata.rigidBodyCount; i++ ) {\n\n\t\t\tpmd.rigidBodies.push( parseRigidBody() );\n\n\t\t}\n\n\t};\n\n\tvar parseConstraints = function () {\n\n\t\tvar parseConstraint = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.rigidBodyIndex1 = dv.getUint32();\n\t\t\tp.rigidBodyIndex2 = dv.getUint32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.springPosition = dv.getFloat32Array( 3 );\n\t\t\tp.springRotation = dv.getFloat32Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.constraintCount = dv.getUint32();\n\n\t\tpmd.constraints = [];\n\n\t\tfor ( var i = 0; i < metadata.constraintCount; i++ ) {\n\n\t\t\tpmd.constraints.push( parseConstraint() );\n\n\t\t}\n\n\t};\n\n\tparseHeader();\n\tparseVertices();\n\tparseFaces();\n\tparseMaterials();\n\tparseBones();\n\tparseIks();\n\tparseMorphs();\n\tparseMorphFrames();\n\tparseBoneFrameNames();\n\tparseBoneFrames();\n\tparseEnglishHeader();\n\tparseEnglishBoneNames();\n\tparseEnglishMorphNames();\n\tparseEnglishBoneFrameNames();\n\tparseToonTextures();\n\tparseRigidBodies();\n\tparseConstraints();\n\n\tif ( leftToRight === true ) this.leftToRightModel( pmd );\n\n\t// console.log( pmd ); // for console debug\n\n\treturn pmd;\n\n};\n\nParser.prototype.parsePmx = function ( buffer, leftToRight ) {\n\n\tvar pmx = {};\n\tvar dv = new DataViewEx( buffer );\n\n\tpmx.metadata = {};\n\tpmx.metadata.format = 'pmx';\n\tpmx.metadata.coordinateSystem = 'left';\n\n\tvar parseHeader = function () {\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.magic = dv.getChars( 4 );\n\n\t\t// Note: don't remove the last blank space.\n\t\tif ( metadata.magic !== 'PMX ' ) {\n\n\t\t\tthrow 'PMX file magic is not PMX , but ' + metadata.magic;\n\n\t\t}\n\n\t\tmetadata.version = dv.getFloat32();\n\n\t\tif ( metadata.version !== 2.0 && metadata.version !== 2.1 ) {\n\n\t\t\tthrow 'PMX version ' + metadata.version + ' is not supported.';\n\n\t\t}\n\n\t\tmetadata.headerSize = dv.getUint8();\n\t\tmetadata.encoding = dv.getUint8();\n\t\tmetadata.additionalUvNum = dv.getUint8();\n\t\tmetadata.vertexIndexSize = dv.getUint8();\n\t\tmetadata.textureIndexSize = dv.getUint8();\n\t\tmetadata.materialIndexSize = dv.getUint8();\n\t\tmetadata.boneIndexSize = dv.getUint8();\n\t\tmetadata.morphIndexSize = dv.getUint8();\n\t\tmetadata.rigidBodyIndexSize = dv.getUint8();\n\t\tmetadata.modelName = dv.getTextBuffer();\n\t\tmetadata.englishModelName = dv.getTextBuffer();\n\t\tmetadata.comment = dv.getTextBuffer();\n\t\tmetadata.englishComment = dv.getTextBuffer();\n\n\t};\n\n\tvar parseVertices = function () {\n\n\t\tvar parseVertex = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.normal = dv.getFloat32Array( 3 );\n\t\t\tp.uv = dv.getFloat32Array( 2 );\n\n\t\t\tp.auvs = [];\n\n\t\t\tfor ( var i = 0; i < pmx.metadata.additionalUvNum; i++ ) {\n\n\t\t\t\tp.auvs.push( dv.getFloat32Array( 4 ) );\n\n\t\t\t}\n\n\t\t\tp.type = dv.getUint8();\n\n\t\t\tvar indexSize = metadata.boneIndexSize;\n\n\t\t\tif ( p.type === 0 ) { // BDEF1\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 1 );\n\t\t\t\tp.skinWeights = [ 1.0 ];\n\n\t\t\t} else if ( p.type === 1 ) { // BDEF2\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 2 );\n\t\t\t\tp.skinWeights = dv.getFloat32Array( 1 );\n\t\t\t\tp.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );\n\n\t\t\t} else if ( p.type === 2 ) { // BDEF4\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 4 );\n\t\t\t\tp.skinWeights = dv.getFloat32Array( 4 );\n\n\t\t\t} else if ( p.type === 3 ) { // SDEF\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 2 );\n\t\t\t\tp.skinWeights = dv.getFloat32Array( 1 );\n\t\t\t\tp.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );\n\n\t\t\t\tp.skinC = dv.getFloat32Array( 3 );\n\t\t\t\tp.skinR0 = dv.getFloat32Array( 3 );\n\t\t\t\tp.skinR1 = dv.getFloat32Array( 3 );\n\n\t\t\t\t// SDEF is not supported yet and is handled as BDEF2 so far.\n\t\t\t\t// TODO: SDEF support\n\t\t\t\tp.type = 1;\n\n\t\t\t} else {\n\n\t\t\t\tthrow 'unsupport bone type ' + p.type + ' exception.';\n\n\t\t\t}\n\n\t\t\tp.edgeRatio = dv.getFloat32();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.vertexCount = dv.getUint32();\n\n\t\tpmx.vertices = [];\n\n\t\tfor ( var i = 0; i < metadata.vertexCount; i++ ) {\n\n\t\t\tpmx.vertices.push( parseVertex() );\n\n\t\t}\n\n\t};\n\n\tvar parseFaces = function () {\n\n\t\tvar parseFace = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.indices = dv.getIndexArray( metadata.vertexIndexSize, 3, true );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.faceCount = dv.getUint32() / 3;\n\n\t\tpmx.faces = [];\n\n\t\tfor ( var i = 0; i < metadata.faceCount; i++ ) {\n\n\t\t\tpmx.faces.push( parseFace() );\n\n\t\t}\n\n\t};\n\n\tvar parseTextures = function () {\n\n\t\tvar parseTexture = function () {\n\n\t\t\treturn dv.getTextBuffer();\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.textureCount = dv.getUint32();\n\n\t\tpmx.textures = [];\n\n\t\tfor ( var i = 0; i < metadata.textureCount; i++ ) {\n\n\t\t\tpmx.textures.push( parseTexture() );\n\n\t\t}\n\n\t};\n\n\tvar parseMaterials = function () {\n\n\t\tvar parseMaterial = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.diffuse = dv.getFloat32Array( 4 );\n\t\t\tp.specular = dv.getFloat32Array( 3 );\n\t\t\tp.shininess = dv.getFloat32();\n\t\t\tp.ambient = dv.getFloat32Array( 3 );\n\t\t\tp.flag = dv.getUint8();\n\t\t\tp.edgeColor = dv.getFloat32Array( 4 );\n\t\t\tp.edgeSize = dv.getFloat32();\n\t\t\tp.textureIndex = dv.getIndex( pmx.metadata.textureIndexSize );\n\t\t\tp.envTextureIndex = dv.getIndex( pmx.metadata.textureIndexSize );\n\t\t\tp.envFlag = dv.getUint8();\n\t\t\tp.toonFlag = dv.getUint8();\n\n\t\t\tif ( p.toonFlag === 0 ) {\n\n\t\t\t\tp.toonIndex = dv.getIndex( pmx.metadata.textureIndexSize );\n\n\t\t\t} else if ( p.toonFlag === 1 ) {\n\n\t\t\t\tp.toonIndex = dv.getInt8();\n\n\t\t\t} else {\n\n\t\t\t\tthrow 'unknown toon flag ' + p.toonFlag + ' exception.';\n\n\t\t\t}\n\n\t\t\tp.comment = dv.getTextBuffer();\n\t\t\tp.faceCount = dv.getUint32() / 3;\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.materialCount = dv.getUint32();\n\n\t\tpmx.materials = [];\n\n\t\tfor ( var i = 0; i < metadata.materialCount; i++ ) {\n\n\t\t\tpmx.materials.push( parseMaterial() );\n\n\t\t}\n\n\t};\n\n\tvar parseBones = function () {\n\n\t\tvar parseBone = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.parentIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\tp.transformationClass = dv.getUint32();\n\t\t\tp.flag = dv.getUint16();\n\n\t\t\tif ( p.flag & 0x1 ) {\n\n\t\t\t\tp.connectIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\n\t\t\t} else {\n\n\t\t\t\tp.offsetPosition = dv.getFloat32Array( 3 );\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x100 || p.flag & 0x200 ) {\n\n\t\t\t\t// Note: I don't think Grant is an appropriate name\n\t\t\t\t// but I found that some English translated MMD tools use this term\n\t\t\t\t// so I've named it Grant so far.\n\t\t\t\t// I'd rename to more appropriate name from Grant later.\n\t\t\t\tvar grant = {};\n\n\t\t\t\tgrant.isLocal = ( p.flag & 0x80 ) !== 0 ? true : false;\n\t\t\t\tgrant.affectRotation = ( p.flag & 0x100 ) !== 0 ? true : false;\n\t\t\t\tgrant.affectPosition = ( p.flag & 0x200 ) !== 0 ? true : false;\n\t\t\t\tgrant.parentIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\tgrant.ratio = dv.getFloat32();\n\n\t\t\t\tp.grant = grant;\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x400 ) {\n\n\t\t\t\tp.fixAxis = dv.getFloat32Array( 3 );\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x800 ) {\n\n\t\t\t\tp.localXVector = dv.getFloat32Array( 3 );\n\t\t\t\tp.localZVector = dv.getFloat32Array( 3 );\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x2000 ) {\n\n\t\t\t\tp.key = dv.getUint32();\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x20 ) {\n\n\t\t\t\tvar ik = {};\n\n\t\t\t\tik.effector = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\tik.target = null;\n\t\t\t\tik.iteration = dv.getUint32();\n\t\t\t\tik.maxAngle = dv.getFloat32();\n\t\t\t\tik.linkCount = dv.getUint32();\n\t\t\t\tik.links = [];\n\n\t\t\t\tfor ( var i = 0; i < ik.linkCount; i++ ) {\n\n\t\t\t\t\tvar link = {};\n\t\t\t\t\tlink.index = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\t\tlink.angleLimitation = dv.getUint8();\n\n\t\t\t\t\tif ( link.angleLimitation === 1 ) {\n\n\t\t\t\t\t\tlink.lowerLimitationAngle = dv.getFloat32Array( 3 );\n\t\t\t\t\t\tlink.upperLimitationAngle = dv.getFloat32Array( 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tik.links.push( link );\n\n\t\t\t\t}\n\n\t\t\t\tp.ik = ik;\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.boneCount = dv.getUint32();\n\n\t\tpmx.bones = [];\n\n\t\tfor ( var i = 0; i < metadata.boneCount; i++ ) {\n\n\t\t\tpmx.bones.push( parseBone() );\n\n\t\t}\n\n\t};\n\n\tvar parseMorphs = function () {\n\n\t\tvar parseMorph = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.panel = dv.getUint8();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.elementCount = dv.getUint32();\n\t\t\tp.elements = [];\n\n\t\t\tfor ( var i = 0; i < p.elementCount; i++ ) {\n\n\t\t\t\tif ( p.type === 0 ) { // group morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.morphIndexSize );\n\t\t\t\t\tm.ratio = dv.getFloat32();\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 1 ) { // vertex morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.vertexIndexSize, true );\n\t\t\t\t\tm.position = dv.getFloat32Array( 3 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 2 ) { // bone morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\t\tm.position = dv.getFloat32Array( 3 );\n\t\t\t\t\tm.rotation = dv.getFloat32Array( 4 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 3 ) { // uv morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.vertexIndexSize, true );\n\t\t\t\t\tm.uv = dv.getFloat32Array( 4 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 4 ) { // additional uv1\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 5 ) { // additional uv2\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 6 ) { // additional uv3\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 7 ) { // additional uv4\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 8 ) { // material morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.materialIndexSize );\n\t\t\t\t\tm.type = dv.getUint8();\n\t\t\t\t\tm.diffuse = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.specular = dv.getFloat32Array( 3 );\n\t\t\t\t\tm.shininess = dv.getFloat32();\n\t\t\t\t\tm.ambient = dv.getFloat32Array( 3 );\n\t\t\t\t\tm.edgeColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.edgeSize = dv.getFloat32();\n\t\t\t\t\tm.textureColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.sphereTextureColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.toonColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.morphCount = dv.getUint32();\n\n\t\tpmx.morphs = [];\n\n\t\tfor ( var i = 0; i < metadata.morphCount; i++ ) {\n\n\t\t\tpmx.morphs.push( parseMorph() );\n\n\t\t}\n\n\t};\n\n\tvar parseFrames = function () {\n\n\t\tvar parseFrame = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.elementCount = dv.getUint32();\n\t\t\tp.elements = [];\n\n\t\t\tfor ( var i = 0; i < p.elementCount; i++ ) {\n\n\t\t\t\tvar e = {};\n\t\t\t\te.target = dv.getUint8();\n\t\t\t\te.index = ( e.target === 0 ) ? dv.getIndex( pmx.metadata.boneIndexSize ) : dv.getIndex( pmx.metadata.morphIndexSize );\n\t\t\t\tp.elements.push( e );\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.frameCount = dv.getUint32();\n\n\t\tpmx.frames = [];\n\n\t\tfor ( var i = 0; i < metadata.frameCount; i++ ) {\n\n\t\t\tpmx.frames.push( parseFrame() );\n\n\t\t}\n\n\t};\n\n\tvar parseRigidBodies = function () {\n\n\t\tvar parseRigidBody = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.boneIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\tp.groupIndex = dv.getUint8();\n\t\t\tp.groupTarget = dv.getUint16();\n\t\t\tp.shapeType = dv.getUint8();\n\t\t\tp.width = dv.getFloat32();\n\t\t\tp.height = dv.getFloat32();\n\t\t\tp.depth = dv.getFloat32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.weight = dv.getFloat32();\n\t\t\tp.positionDamping = dv.getFloat32();\n\t\t\tp.rotationDamping = dv.getFloat32();\n\t\t\tp.restitution = dv.getFloat32();\n\t\t\tp.friction = dv.getFloat32();\n\t\t\tp.type = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.rigidBodyCount = dv.getUint32();\n\n\t\tpmx.rigidBodies = [];\n\n\t\tfor ( var i = 0; i < metadata.rigidBodyCount; i++ ) {\n\n\t\t\tpmx.rigidBodies.push( parseRigidBody() );\n\n\t\t}\n\n\t};\n\n\tvar parseConstraints = function () {\n\n\t\tvar parseConstraint = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.rigidBodyIndex1 = dv.getIndex( pmx.metadata.rigidBodyIndexSize );\n\t\t\tp.rigidBodyIndex2 = dv.getIndex( pmx.metadata.rigidBodyIndexSize );\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.springPosition = dv.getFloat32Array( 3 );\n\t\t\tp.springRotation = dv.getFloat32Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.constraintCount = dv.getUint32();\n\n\t\tpmx.constraints = [];\n\n\t\tfor ( var i = 0; i < metadata.constraintCount; i++ ) {\n\n\t\t\tpmx.constraints.push( parseConstraint() );\n\n\t\t}\n\n\t};\n\n\tparseHeader();\n\tparseVertices();\n\tparseFaces();\n\tparseTextures();\n\tparseMaterials();\n\tparseBones();\n\tparseMorphs();\n\tparseFrames();\n\tparseRigidBodies();\n\tparseConstraints();\n\n\tif ( leftToRight === true ) this.leftToRightModel( pmx );\n\n\t// console.log( pmx ); // for console debug\n\n\treturn pmx;\n\n};\n\nParser.prototype.parseVmd = function ( buffer, leftToRight ) {\n\n\tvar vmd = {};\n\tvar dv = new DataViewEx( buffer );\n\n\tvmd.metadata = {};\n\tvmd.metadata.coordinateSystem = 'left';\n\n\tvar parseHeader = function () {\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.magic = dv.getChars( 30 );\n\n\t\tif ( metadata.magic !== 'Vocaloid Motion Data 0002' ) {\n\n\t\t\tthrow 'VMD file magic is not Vocaloid Motion Data 0002, but ' + metadata.magic;\n\n\t\t}\n\n\t\tmetadata.name = dv.getSjisStringsAsUnicode( 20 );\n\n\t};\n\n\tvar parseMotions = function () {\n\n\t\tvar parseMotion = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.boneName = dv.getSjisStringsAsUnicode( 15 );\n\t\t\tp.frameNum = dv.getUint32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 4 );\n\t\t\tp.interpolation = dv.getUint8Array( 64 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.motionCount = dv.getUint32();\n\n\t\tvmd.motions = [];\n\t\tfor ( var i = 0; i < metadata.motionCount; i++ ) {\n\n\t\t\tvmd.motions.push( parseMotion() );\n\n\t\t}\n\n\t};\n\n\tvar parseMorphs = function () {\n\n\t\tvar parseMorph = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.morphName = dv.getSjisStringsAsUnicode( 15 );\n\t\t\tp.frameNum = dv.getUint32();\n\t\t\tp.weight = dv.getFloat32();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.morphCount = dv.getUint32();\n\n\t\tvmd.morphs = [];\n\t\tfor ( var i = 0; i < metadata.morphCount; i++ ) {\n\n\t\t\tvmd.morphs.push( parseMorph() );\n\n\t\t}\n\n\t};\n\n\tvar parseCameras = function () {\n\n\t\tvar parseCamera = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.frameNum = dv.getUint32();\n\t\t\tp.distance = dv.getFloat32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.interpolation = dv.getUint8Array( 24 );\n\t\t\tp.fov = dv.getUint32();\n\t\t\tp.perspective = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.cameraCount = dv.getUint32();\n\n\t\tvmd.cameras = [];\n\t\tfor ( var i = 0; i < metadata.cameraCount; i++ ) {\n\n\t\t\tvmd.cameras.push( parseCamera() );\n\n\t\t}\n\n\t};\n\n\tparseHeader();\n\tparseMotions();\n\tparseMorphs();\n\tparseCameras();\n\n\tif ( leftToRight === true ) this.leftToRightVmd( vmd );\n\n\t// console.log( vmd ); // for console debug\n\n\treturn vmd;\n\n};\n\nParser.prototype.parseVpd = function ( text, leftToRight ) {\n\n\tvar vpd = {};\n\n\tvpd.metadata = {};\n\tvpd.metadata.coordinateSystem = 'left';\n\n\tvpd.bones = [];\n\n\tvar commentPatternG = /\\/\\/\\w*(\\r|\\n|\\r\\n)/g;\n\tvar newlinePattern = /\\r|\\n|\\r\\n/;\n\n\tvar lines = text.replace( commentPatternG, '' ).split( newlinePattern );\n\n\tfunction throwError () {\n\n\t\tthrow 'the file seems not vpd file.';\n\n\t}\n\n\tfunction checkMagic () {\n\n\t\tif ( lines[ 0 ] !== 'Vocaloid Pose Data file' ) {\n\n\t\t\tthrowError();\n\n\t\t}\n\n\t}\n\n\tfunction parseHeader () {\n\n\t\tif ( lines.length < 4 ) {\n\n\t\t\tthrowError();\n\n\t\t}\n\n\t\tvpd.metadata.parentFile = lines[ 2 ];\n\t\tvpd.metadata.boneCount = parseInt( lines[ 3 ] );\n\n\t}\n\n\tfunction parseBones () {\n\n\t\tvar boneHeaderPattern = /^\\s*(Bone[0-9]+)\\s*\\{\\s*(.*)$/;\n\t\tvar boneVectorPattern = /^\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*;/;\n\t\tvar boneQuaternionPattern = /^\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*;/;\n\t\tvar boneFooterPattern = /^\\s*}/;\n\n\t\tvar bones = vpd.bones;\n\t\tvar n = null;\n\t\tvar v = null;\n\t\tvar q = null;\n\n\t\tfor ( var i = 4; i < lines.length; i++ ) {\n\n\t\t\tvar line = lines[ i ];\n\n\t\t\tvar result;\n\n\t\t\tresult = line.match( boneHeaderPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( n !== null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tn = result[ 2 ];\n\n\t\t\t}\n\n\t\t\tresult = line.match( boneVectorPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( v !== null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tv = [\n\n\t\t\t\t\tparseFloat( result[ 1 ] ),\n\t\t\t\t\tparseFloat( result[ 2 ] ),\n\t\t\t\t\tparseFloat( result[ 3 ] )\n\n\t\t\t\t];\n\n\t\t\t}\n\n\t\t\tresult = line.match( boneQuaternionPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( q !== null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tq = [\n\n\t\t\t\t\tparseFloat( result[ 1 ] ),\n\t\t\t\t\tparseFloat( result[ 2 ] ),\n\t\t\t\t\tparseFloat( result[ 3 ] ),\n\t\t\t\t\tparseFloat( result[ 4 ] )\n\n\t\t\t\t];\n\n\n\t\t\t}\n\n\t\t\tresult = line.match( boneFooterPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( n === null || v === null || q === null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tbones.push( {\n\n\t\t\t\t\tname: n,\n\t\t\t\t\ttranslation: v,\n\t\t\t\t\tquaternion: q\n\n\t\t\t\t} );\n\n\t\t\t\tn = null;\n\t\t\t\tv = null;\n\t\t\t\tq = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( n !== null || v !== null || q !== null ) {\n\n\t\t\tthrowError();\n\n\t\t}\n\n\t}\n\n\tcheckMagic();\n\tparseHeader();\n\tparseBones();\n\n\tif ( leftToRight === true ) this.leftToRightVpd( vpd );\n\n\t// console.log( vpd ); // for console debug\n\n\treturn vpd;\n\n};\n\nParser.prototype.mergeVmds = function ( vmds ) {\n\n\tvar v = {};\n\tv.metadata = {};\n\tv.metadata.name = vmds[ 0 ].metadata.name;\n\tv.metadata.coordinateSystem = vmds[ 0 ].metadata.coordinateSystem;\n\tv.metadata.motionCount = 0;\n\tv.metadata.morphCount = 0;\n\tv.metadata.cameraCount = 0;\n\tv.motions = [];\n\tv.morphs = [];\n\tv.cameras = [];\n\n\tfor ( var i = 0; i < vmds.length; i++ ) {\n\n\t\tvar v2 = vmds[ i ];\n\n\t\tv.metadata.motionCount += v2.metadata.motionCount;\n\t\tv.metadata.morphCount += v2.metadata.morphCount;\n\t\tv.metadata.cameraCount += v2.metadata.cameraCount;\n\n\t\tfor ( var j = 0; j < v2.metadata.motionCount; j++ ) {\n\n\t\t\tv.motions.push( v2.motions[ j ] );\n\n\t\t}\n\n\t\tfor ( var j = 0; j < v2.metadata.morphCount; j++ ) {\n\n\t\t\tv.morphs.push( v2.morphs[ j ] );\n\n\t\t}\n\n\t\tfor ( var j = 0; j < v2.metadata.cameraCount; j++ ) {\n\n\t\t\tv.cameras.push( v2.cameras[ j ] );\n\n\t\t}\n\n\t}\n\n\treturn v;\n\n};\n\nParser.prototype.leftToRightModel = function ( model ) {\n\n\tif ( model.metadata.coordinateSystem === 'right' ) {\n\n\t\treturn;\n\n\t}\n\n\tmodel.metadata.coordinateSystem = 'right';\n\n\tvar helper = new DataCreationHelper();\n\n\tfor ( var i = 0; i < model.metadata.vertexCount; i++ ) {\n\n\t\thelper.leftToRightVector3( model.vertices[ i ].position );\n\t\thelper.leftToRightVector3( model.vertices[ i ].normal );\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.faceCount; i++ ) {\n\n\t\thelper.leftToRightIndexOrder( model.faces[ i ].indices );\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.boneCount; i++ ) {\n\n\t\thelper.leftToRightVector3( model.bones[ i ].position );\n\n\t}\n\n\t// TODO: support other morph for PMX\n\tfor ( var i = 0; i < model.metadata.morphCount; i++ ) {\n\n\t\tvar m = model.morphs[ i ];\n\n\t\tif ( model.metadata.format === 'pmx' && m.type !== 1 ) {\n\n\t\t\t// TODO: implement\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tfor ( var j = 0; j < m.elements.length; j++ ) {\n\n\t\t\thelper.leftToRightVector3( m.elements[ j ].position );\n\n\t\t}\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.rigidBodyCount; i++ ) {\n\n\t\thelper.leftToRightVector3( model.rigidBodies[ i ].position );\n\t\thelper.leftToRightEuler( model.rigidBodies[ i ].rotation );\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.constraintCount; i++ ) {\n\n\t\thelper.leftToRightVector3( model.constraints[ i ].position );\n\t\thelper.leftToRightEuler( model.constraints[ i ].rotation );\n\t\thelper.leftToRightVector3Range( model.constraints[ i ].translationLimitation1, model.constraints[ i ].translationLimitation2 );\n\t\thelper.leftToRightEulerRange( model.constraints[ i ].rotationLimitation1, model.constraints[ i ].rotationLimitation2 );\n\n\t}\n\n};\n\nParser.prototype.leftToRightVmd = function ( vmd ) {\n\n\tif ( vmd.metadata.coordinateSystem === 'right' ) {\n\n\t\treturn;\n\n\t}\n\n\tvmd.metadata.coordinateSystem = 'right';\n\n\tvar helper = new DataCreationHelper();\n\n\tfor ( var i = 0; i < vmd.metadata.motionCount; i++ ) {\n\n\t\thelper.leftToRightVector3( vmd.motions[ i ].position );\n\t\thelper.leftToRightQuaternion( vmd.motions[ i ].rotation );\n\n\t}\n\n\tfor ( var i = 0; i < vmd.metadata.cameraCount; i++ ) {\n\n\t\thelper.leftToRightVector3( vmd.cameras[ i ].position );\n\t\thelper.leftToRightEuler( vmd.cameras[ i ].rotation );\n\n\t}\n\n};\n\nParser.prototype.leftToRightVpd = function ( vpd ) {\n\n\tif ( vpd.metadata.coordinateSystem === 'right' ) {\n\n\t\treturn;\n\n\t}\n\n\tvpd.metadata.coordinateSystem = 'right';\n\n\tvar helper = new DataCreationHelper();\n\n\tfor ( var i = 0; i < vpd.bones.length; i++ ) {\n\n\t\thelper.leftToRightVector3( vpd.bones[ i ].translation );\n\t\thelper.leftToRightQuaternion( vpd.bones[ i ].quaternion );\n\n\t}\n\n};\n\nvar MMDParser = {\n CharsetEncoder: CharsetEncoder,\n Parser: Parser\n};\n\nexport { MMDParser, CharsetEncoder, Parser };\n", "import {\n\tMatrix4,\n\tQuaternion,\n\tVector3\n} from 'three';\nimport { MMDParser } from '../libs/mmdparser.module.js';\n\n/**\n * Dependencies\n * - mmd-parser https://github.com/takahirox/mmd-parser\n */\n\nclass MMDExporter {\n\n\t/* TODO: implement\n\t// mesh -> pmd\n\tthis.parsePmd = function ( object ) {\n\n\t};\n\t*/\n\n\t/* TODO: implement\n\t// mesh -> pmx\n\tthis.parsePmx = function ( object ) {\n\n\t};\n\t*/\n\n\t/* TODO: implement\n\t// animation + skeleton -> vmd\n\tthis.parseVmd = function ( object ) {\n\n\t};\n\t*/\n\n\t/*\n\t * skeleton -> vpd\n\t * Returns Shift_JIS encoded Uint8Array. Otherwise return strings.\n\t */\n\tparseVpd( skin, outputShiftJis, useOriginalBones ) {\n\n\t\tif ( skin.isSkinnedMesh !== true ) {\n\n\t\t\tconsole.warn( 'THREE.MMDExporter: parseVpd() requires SkinnedMesh instance.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction toStringsFromNumber( num ) {\n\n\t\t\tif ( Math.abs( num ) < 1e-6 ) num = 0;\n\n\t\t\tlet a = num.toString();\n\n\t\t\tif ( a.indexOf( '.' ) === - 1 ) {\n\n\t\t\t\ta += '.';\n\n\t\t\t}\n\n\t\t\ta += '000000';\n\n\t\t\tconst index = a.indexOf( '.' );\n\n\t\t\tconst d = a.slice( 0, index );\n\t\t\tconst p = a.slice( index + 1, index + 7 );\n\n\t\t\treturn d + '.' + p;\n\n\t\t}\n\n\t\tfunction toStringsFromArray( array ) {\n\n\t\t\tconst a = [];\n\n\t\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\ta.push( toStringsFromNumber( array[ i ] ) );\n\n\t\t\t}\n\n\t\t\treturn a.join( ',' );\n\n\t\t}\n\n\t\tskin.updateMatrixWorld( true );\n\n\t\tconst bones = skin.skeleton.bones;\n\t\tconst bones2 = getBindBones( skin );\n\n\t\tconst position = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\t\tconst quaternion2 = new Quaternion();\n\t\tconst matrix = new Matrix4();\n\n\t\tconst array = [];\n\t\tarray.push( 'Vocaloid Pose Data file' );\n\t\tarray.push( '' );\n\t\tarray.push( ( skin.name !== '' ? skin.name.replace( /\\s/g, '_' ) : 'skin' ) + '.osm;' );\n\t\tarray.push( bones.length + ';' );\n\t\tarray.push( '' );\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tconst bone2 = bones2[ i ];\n\n\t\t\t/*\n\t\t\t * use the bone matrix saved before solving IK.\n\t\t\t * see CCDIKSolver for the detail.\n\t\t\t */\n\t\t\tif ( useOriginalBones === true &&\n\t\t\t\tbone.userData.ik !== undefined &&\n\t\t\t\tbone.userData.ik.originalMatrix !== undefined ) {\n\n\t\t\t\tmatrix.fromArray( bone.userData.ik.originalMatrix );\n\n\t\t\t} else {\n\n\t\t\t\tmatrix.copy( bone.matrix );\n\n\t\t\t}\n\n\t\t\tposition.setFromMatrixPosition( matrix );\n\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\tconst pArray = position.sub( bone2.position ).toArray();\n\t\t\tconst qArray = quaternion2.copy( bone2.quaternion ).conjugate().multiply( quaternion ).toArray();\n\n\t\t\t// right to left\n\t\t\tpArray[ 2 ] = - pArray[ 2 ];\n\t\t\tqArray[ 0 ] = - qArray[ 0 ];\n\t\t\tqArray[ 1 ] = - qArray[ 1 ];\n\n\t\t\tarray.push( 'Bone' + i + '{' + bone.name );\n\t\t\tarray.push( ' ' + toStringsFromArray( pArray ) + ';' );\n\t\t\tarray.push( ' ' + toStringsFromArray( qArray ) + ';' );\n\t\t\tarray.push( '}' );\n\t\t\tarray.push( '' );\n\n\t\t}\n\n\t\tarray.push( '' );\n\n\t\tconst lines = array.join( '\\n' );\n\n\t\treturn ( outputShiftJis === true ) ? unicodeToShiftjis( lines ) : lines;\n\n\t}\n\n}\n\n// Unicode to Shift_JIS table\nlet u2sTable;\n\nfunction unicodeToShiftjis( str ) {\n\n\tif ( u2sTable === undefined ) {\n\n\t\tconst encoder = new MMDParser.CharsetEncoder();\n\t\tconst table = encoder.s2uTable;\n\t\tu2sTable = {};\n\n\t\tconst keys = Object.keys( table );\n\n\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\tlet key = keys[ i ];\n\n\t\t\tconst value = table[ key ];\n\t\t\tkey = parseInt( key );\n\n\t\t\tu2sTable[ value ] = key;\n\n\t\t}\n\n\t}\n\n\tconst array = [];\n\n\tfor ( let i = 0, il = str.length; i < il; i ++ ) {\n\n\t\tconst code = str.charCodeAt( i );\n\n\t\tconst value = u2sTable[ code ];\n\n\t\tif ( value === undefined ) {\n\n\t\t\tthrow new Error( 'cannot convert charcode 0x' + code.toString( 16 ) );\n\n\t\t} else if ( value > 0xff ) {\n\n\t\t\tarray.push( ( value >> 8 ) & 0xff );\n\t\t\tarray.push( value & 0xff );\n\n\t\t} else {\n\n\t\t\tarray.push( value & 0xff );\n\n\t\t}\n\n\t}\n\n\treturn new Uint8Array( array );\n\n}\n\nfunction getBindBones( skin ) {\n\n\t// any more efficient ways?\n\tconst poseSkin = skin.clone();\n\tposeSkin.pose();\n\treturn poseSkin.skeleton.bones;\n\n}\n\nexport { MMDExporter };\n", "import {\n\tColor,\n\tMatrix3,\n\tVector2,\n\tVector3\n} from 'three';\n\nclass OBJExporter {\n\n\tparse( object ) {\n\n\t\tlet output = '';\n\n\t\tlet indexVertex = 0;\n\t\tlet indexVertexUvs = 0;\n\t\tlet indexNormals = 0;\n\n\t\tconst vertex = new Vector3();\n\t\tconst color = new Color();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\tconst face = [];\n\n\t\tfunction parseMesh( mesh ) {\n\n\t\t\tlet nbVertex = 0;\n\t\t\tlet nbNormals = 0;\n\t\t\tlet nbVertexUvs = 0;\n\n\t\t\tconst geometry = mesh.geometry;\n\n\t\t\tconst normalMatrixWorld = new Matrix3();\n\n\t\t\t// shortcuts\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\t\t\tconst indices = geometry.getIndex();\n\n\t\t\t// name of the mesh object\n\t\t\toutput += 'o ' + mesh.name + '\\n';\n\n\t\t\t// name of the mesh material\n\t\t\tif ( mesh.material && mesh.material.name ) {\n\n\t\t\t\toutput += 'usemtl ' + mesh.material.name + '\\n';\n\n\t\t\t}\n\n\t\t\t// vertices\n\n\t\t\tif ( vertices !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\t// transform the vertex to world space\n\t\t\t\t\tvertex.applyMatrix4( mesh.matrixWorld );\n\n\t\t\t\t\t// transform the vertex to export format\n\t\t\t\t\toutput += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = uvs.count; i < l; i ++, nbVertexUvs ++ ) {\n\n\t\t\t\t\tuv.fromBufferAttribute( uvs, i );\n\n\t\t\t\t\t// transform the uv to export format\n\t\t\t\t\toutput += 'vt ' + uv.x + ' ' + uv.y + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\tnormalMatrixWorld.getNormalMatrix( mesh.matrixWorld );\n\n\t\t\t\tfor ( let i = 0, l = normals.count; i < l; i ++, nbNormals ++ ) {\n\n\t\t\t\t\tnormal.fromBufferAttribute( normals, i );\n\n\t\t\t\t\t// transform the normal to world space\n\t\t\t\t\tnormal.applyMatrix3( normalMatrixWorld ).normalize();\n\n\t\t\t\t\t// transform the normal to export format\n\t\t\t\t\toutput += 'vn ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// faces\n\n\t\t\tif ( indices !== null ) {\n\n\t\t\t\tfor ( let i = 0, l = indices.count; i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( let m = 0; m < 3; m ++ ) {\n\n\t\t\t\t\t\tconst j = indices.getX( i + m ) + 1;\n\n\t\t\t\t\t\tface[ m ] = ( indexVertex + j ) + ( normals || uvs ? '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + ( normals ? '/' + ( indexNormals + j ) : '' ) : '' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// transform the face to export format\n\t\t\t\t\toutput += 'f ' + face.join( ' ' ) + '\\n';\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( let m = 0; m < 3; m ++ ) {\n\n\t\t\t\t\t\tconst j = i + m + 1;\n\n\t\t\t\t\t\tface[ m ] = ( indexVertex + j ) + ( normals || uvs ? '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + ( normals ? '/' + ( indexNormals + j ) : '' ) : '' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// transform the face to export format\n\t\t\t\t\toutput += 'f ' + face.join( ' ' ) + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// update index\n\t\t\tindexVertex += nbVertex;\n\t\t\tindexVertexUvs += nbVertexUvs;\n\t\t\tindexNormals += nbNormals;\n\n\t\t}\n\n\t\tfunction parseLine( line ) {\n\n\t\t\tlet nbVertex = 0;\n\n\t\t\tconst geometry = line.geometry;\n\t\t\tconst type = line.type;\n\n\t\t\t// shortcuts\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\n\t\t\t// name of the line object\n\t\t\toutput += 'o ' + line.name + '\\n';\n\n\t\t\tif ( vertices !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\t// transform the vertex to world space\n\t\t\t\t\tvertex.applyMatrix4( line.matrixWorld );\n\n\t\t\t\t\t// transform the vertex to export format\n\t\t\t\t\toutput += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( type === 'Line' ) {\n\n\t\t\t\toutput += 'l ';\n\n\t\t\t\tfor ( let j = 1, l = vertices.count; j <= l; j ++ ) {\n\n\t\t\t\t\toutput += ( indexVertex + j ) + ' ';\n\n\t\t\t\t}\n\n\t\t\t\toutput += '\\n';\n\n\t\t\t}\n\n\t\t\tif ( type === 'LineSegments' ) {\n\n\t\t\t\tfor ( let j = 1, k = j + 1, l = vertices.count; j < l; j += 2, k = j + 1 ) {\n\n\t\t\t\t\toutput += 'l ' + ( indexVertex + j ) + ' ' + ( indexVertex + k ) + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// update index\n\t\t\tindexVertex += nbVertex;\n\n\t\t}\n\n\t\tfunction parsePoints( points ) {\n\n\t\t\tlet nbVertex = 0;\n\n\t\t\tconst geometry = points.geometry;\n\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tconst colors = geometry.getAttribute( 'color' );\n\n\t\t\toutput += 'o ' + points.name + '\\n';\n\n\t\t\tif ( vertices !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\t\t\t\t\tvertex.applyMatrix4( points.matrixWorld );\n\n\t\t\t\t\toutput += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z;\n\n\t\t\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\t\t\tcolor.fromBufferAttribute( colors, i ).convertLinearToSRGB();\n\n\t\t\t\t\t\toutput += ' ' + color.r + ' ' + color.g + ' ' + color.b;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutput += '\\n';\n\n\t\t\t\t}\n\n\t\t\t\toutput += 'p ';\n\n\t\t\t\tfor ( let j = 1, l = vertices.count; j <= l; j ++ ) {\n\n\t\t\t\t\toutput += ( indexVertex + j ) + ' ';\n\n\t\t\t\t}\n\n\t\t\t\toutput += '\\n';\n\n\t\t\t}\n\n\t\t\t// update index\n\t\t\tindexVertex += nbVertex;\n\n\t\t}\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh === true ) {\n\n\t\t\t\tparseMesh( child );\n\n\t\t\t}\n\n\t\t\tif ( child.isLine === true ) {\n\n\t\t\t\tparseLine( child );\n\n\t\t\t}\n\n\t\t\tif ( child.isPoints === true ) {\n\n\t\t\t\tparsePoints( child );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn output;\n\n\t}\n\n}\n\nexport { OBJExporter };\n", "import {\n\tMatrix3,\n\tVector3,\n\tColor\n} from 'three';\n\n/**\n * https://github.com/gkjohnson/ply-exporter-js\n *\n * Usage:\n * const exporter = new PLYExporter();\n *\n * // second argument is a list of options\n * exporter.parse(mesh, data => console.log(data), { binary: true, excludeAttributes: [ 'color' ], littleEndian: true });\n *\n * Format Definition:\n * http://paulbourke.net/dataformats/ply/\n */\n\nclass PLYExporter {\n\n\tparse( object, onDone, options = {} ) {\n\n\t\t// Iterate over the valid meshes in the object\n\t\tfunction traverseMeshes( cb ) {\n\n\t\t\tobject.traverse( function ( child ) {\n\n\t\t\t\tif ( child.isMesh === true || child.isPoints ) {\n\n\t\t\t\t\tconst mesh = child;\n\t\t\t\t\tconst geometry = mesh.geometry;\n\n\t\t\t\t\tif ( geometry.hasAttribute( 'position' ) === true ) {\n\n\t\t\t\t\t\tcb( mesh, geometry );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// Default options\n\t\tconst defaultOptions = {\n\t\t\tbinary: false,\n\t\t\texcludeAttributes: [], // normal, uv, color, index\n\t\t\tlittleEndian: false\n\t\t};\n\n\t\toptions = Object.assign( defaultOptions, options );\n\n\t\tconst excludeAttributes = options.excludeAttributes;\n\t\tlet includeIndices = true;\n\t\tlet includeNormals = false;\n\t\tlet includeColors = false;\n\t\tlet includeUVs = false;\n\n\t\t// count the vertices, check which properties are used,\n\t\t// and cache the BufferGeometry\n\t\tlet vertexCount = 0;\n\t\tlet faceCount = 0;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh === true ) {\n\n\t\t\t\tconst mesh = child;\n\t\t\t\tconst geometry = mesh.geometry;\n\n\t\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\t\t\t\tconst indices = geometry.getIndex();\n\n\t\t\t\tif ( vertices === undefined ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvertexCount += vertices.count;\n\t\t\t\tfaceCount += indices ? indices.count / 3 : vertices.count / 3;\n\n\t\t\t\tif ( normals !== undefined ) includeNormals = true;\n\n\t\t\t\tif ( uvs !== undefined ) includeUVs = true;\n\n\t\t\t\tif ( colors !== undefined ) includeColors = true;\n\n\t\t\t} else if ( child.isPoints ) {\n\n\t\t\t\tconst mesh = child;\n\t\t\t\tconst geometry = mesh.geometry;\n\n\t\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\n\t\t\t\tvertexCount += vertices.count;\n\n\t\t\t\tif ( normals !== undefined ) includeNormals = true;\n\n\t\t\t\tif ( colors !== undefined ) includeColors = true;\n\n\t\t\t\tincludeIndices = false;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst tempColor = new Color();\n\t\tincludeIndices = includeIndices && excludeAttributes.indexOf( 'index' ) === - 1;\n\t\tincludeNormals = includeNormals && excludeAttributes.indexOf( 'normal' ) === - 1;\n\t\tincludeColors = includeColors && excludeAttributes.indexOf( 'color' ) === - 1;\n\t\tincludeUVs = includeUVs && excludeAttributes.indexOf( 'uv' ) === - 1;\n\n\n\t\tif ( includeIndices && faceCount !== Math.floor( faceCount ) ) {\n\n\t\t\t// point cloud meshes will not have an index array and may not have a\n\t\t\t// number of vertices that is divisble by 3 (and therefore representable\n\t\t\t// as triangles)\n\t\t\tconsole.error(\n\n\t\t\t\t'PLYExporter: Failed to generate a valid PLY file with triangle indices because the ' +\n\t\t\t\t'number of indices is not divisible by 3.'\n\n\t\t\t);\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst indexByteCount = 4;\n\n\t\tlet header =\n\t\t\t'ply\\n' +\n\t\t\t`format ${ options.binary ? ( options.littleEndian ? 'binary_little_endian' : 'binary_big_endian' ) : 'ascii' } 1.0\\n` +\n\t\t\t`element vertex ${vertexCount}\\n` +\n\n\t\t\t// position\n\t\t\t'property float x\\n' +\n\t\t\t'property float y\\n' +\n\t\t\t'property float z\\n';\n\n\t\tif ( includeNormals === true ) {\n\n\t\t\t// normal\n\t\t\theader +=\n\t\t\t\t'property float nx\\n' +\n\t\t\t\t'property float ny\\n' +\n\t\t\t\t'property float nz\\n';\n\n\t\t}\n\n\t\tif ( includeUVs === true ) {\n\n\t\t\t// uvs\n\t\t\theader +=\n\t\t\t\t'property float s\\n' +\n\t\t\t\t'property float t\\n';\n\n\t\t}\n\n\t\tif ( includeColors === true ) {\n\n\t\t\t// colors\n\t\t\theader +=\n\t\t\t\t'property uchar red\\n' +\n\t\t\t\t'property uchar green\\n' +\n\t\t\t\t'property uchar blue\\n';\n\n\t\t}\n\n\t\tif ( includeIndices === true ) {\n\n\t\t\t// faces\n\t\t\theader +=\n\t\t\t\t`element face ${faceCount}\\n` +\n\t\t\t\t'property list uchar int vertex_index\\n';\n\n\t\t}\n\n\t\theader += 'end_header\\n';\n\n\n\t\t// Generate attribute data\n\t\tconst vertex = new Vector3();\n\t\tconst normalMatrixWorld = new Matrix3();\n\t\tlet result = null;\n\n\t\tif ( options.binary === true ) {\n\n\t\t\t// Binary File Generation\n\t\t\tconst headerBin = new TextEncoder().encode( header );\n\n\t\t\t// 3 position values at 4 bytes\n\t\t\t// 3 normal values at 4 bytes\n\t\t\t// 3 color channels with 1 byte\n\t\t\t// 2 uv values at 4 bytes\n\t\t\tconst vertexListLength = vertexCount * ( 4 * 3 + ( includeNormals ? 4 * 3 : 0 ) + ( includeColors ? 3 : 0 ) + ( includeUVs ? 4 * 2 : 0 ) );\n\n\t\t\t// 1 byte shape desciptor\n\t\t\t// 3 vertex indices at ${indexByteCount} bytes\n\t\t\tconst faceListLength = includeIndices ? faceCount * ( indexByteCount * 3 + 1 ) : 0;\n\t\t\tconst output = new DataView( new ArrayBuffer( headerBin.length + vertexListLength + faceListLength ) );\n\t\t\tnew Uint8Array( output.buffer ).set( headerBin, 0 );\n\n\n\t\t\tlet vOffset = headerBin.length;\n\t\t\tlet fOffset = headerBin.length + vertexListLength;\n\t\t\tlet writtenVertices = 0;\n\t\t\ttraverseMeshes( function ( mesh, geometry ) {\n\n\t\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\t\t\t\tconst indices = geometry.getIndex();\n\n\t\t\t\tnormalMatrixWorld.getNormalMatrix( mesh.matrixWorld );\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\tvertex.applyMatrix4( mesh.matrixWorld );\n\n\n\t\t\t\t\t// Position information\n\t\t\t\t\toutput.setFloat32( vOffset, vertex.x, options.littleEndian );\n\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\toutput.setFloat32( vOffset, vertex.y, options.littleEndian );\n\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\toutput.setFloat32( vOffset, vertex.z, options.littleEndian );\n\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t// Normal information\n\t\t\t\t\tif ( includeNormals === true ) {\n\n\t\t\t\t\t\tif ( normals != null ) {\n\n\t\t\t\t\t\t\tvertex.fromBufferAttribute( normals, i );\n\n\t\t\t\t\t\t\tvertex.applyMatrix3( normalMatrixWorld ).normalize();\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, vertex.x, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, vertex.y, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, vertex.z, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// UV information\n\t\t\t\t\tif ( includeUVs === true ) {\n\n\t\t\t\t\t\tif ( uvs != null ) {\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, uvs.getX( i ), options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, uvs.getY( i ), options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Color information\n\t\t\t\t\tif ( includeColors === true ) {\n\n\t\t\t\t\t\tif ( colors != null ) {\n\n\t\t\t\t\t\t\ttempColor\n\t\t\t\t\t\t\t\t.fromBufferAttribute( colors, i )\n\t\t\t\t\t\t\t\t.convertLinearToSRGB();\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, Math.floor( tempColor.r * 255 ) );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, Math.floor( tempColor.g * 255 ) );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, Math.floor( tempColor.b * 255 ) );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, 255 );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, 255 );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, 255 );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( includeIndices === true ) {\n\n\t\t\t\t\t// Create the face list\n\n\t\t\t\t\tif ( indices !== null ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = indices.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\toutput.setUint8( fOffset, 3 );\n\t\t\t\t\t\t\tfOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, indices.getX( i + 0 ) + writtenVertices, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, indices.getX( i + 1 ) + writtenVertices, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, indices.getX( i + 2 ) + writtenVertices, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\toutput.setUint8( fOffset, 3 );\n\t\t\t\t\t\t\tfOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, writtenVertices + i, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, writtenVertices + i + 1, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, writtenVertices + i + 2, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\t// Save the amount of verts we've already written so we can offset\n\t\t\t\t// the face index on the next mesh\n\t\t\t\twrittenVertices += vertices.count;\n\n\t\t\t} );\n\n\t\t\tresult = output.buffer;\n\n\t\t} else {\n\n\t\t\t// Ascii File Generation\n\t\t\t// count the number of vertices\n\t\t\tlet writtenVertices = 0;\n\t\t\tlet vertexList = '';\n\t\t\tlet faceList = '';\n\n\t\t\ttraverseMeshes( function ( mesh, geometry ) {\n\n\t\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\t\t\t\tconst indices = geometry.getIndex();\n\n\t\t\t\tnormalMatrixWorld.getNormalMatrix( mesh.matrixWorld );\n\n\t\t\t\t// form each line\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\tvertex.applyMatrix4( mesh.matrixWorld );\n\n\n\t\t\t\t\t// Position information\n\t\t\t\t\tlet line =\n\t\t\t\t\t\tvertex.x + ' ' +\n\t\t\t\t\t\tvertex.y + ' ' +\n\t\t\t\t\t\tvertex.z;\n\n\t\t\t\t\t// Normal information\n\t\t\t\t\tif ( includeNormals === true ) {\n\n\t\t\t\t\t\tif ( normals != null ) {\n\n\t\t\t\t\t\t\tvertex.fromBufferAttribute( normals, i );\n\n\t\t\t\t\t\t\tvertex.applyMatrix3( normalMatrixWorld ).normalize();\n\n\t\t\t\t\t\t\tline += ' ' +\n\t\t\t\t\t\t\t\tvertex.x + ' ' +\n\t\t\t\t\t\t\t\tvertex.y + ' ' +\n\t\t\t\t\t\t\t\tvertex.z;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tline += ' 0 0 0';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// UV information\n\t\t\t\t\tif ( includeUVs === true ) {\n\n\t\t\t\t\t\tif ( uvs != null ) {\n\n\t\t\t\t\t\t\tline += ' ' +\n\t\t\t\t\t\t\t\tuvs.getX( i ) + ' ' +\n\t\t\t\t\t\t\t\tuvs.getY( i );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tline += ' 0 0';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Color information\n\t\t\t\t\tif ( includeColors === true ) {\n\n\t\t\t\t\t\tif ( colors != null ) {\n\n\t\t\t\t\t\t\ttempColor\n\t\t\t\t\t\t\t\t.fromBufferAttribute( colors, i )\n\t\t\t\t\t\t\t\t.convertLinearToSRGB();\n\n\t\t\t\t\t\t\tline += ' ' +\n\t\t\t\t\t\t\t\tMath.floor( tempColor.r * 255 ) + ' ' +\n\t\t\t\t\t\t\t\tMath.floor( tempColor.g * 255 ) + ' ' +\n\t\t\t\t\t\t\t\tMath.floor( tempColor.b * 255 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tline += ' 255 255 255';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvertexList += line + '\\n';\n\n\t\t\t\t}\n\n\t\t\t\t// Create the face list\n\t\t\t\tif ( includeIndices === true ) {\n\n\t\t\t\t\tif ( indices !== null ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = indices.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\tfaceList += `3 ${ indices.getX( i + 0 ) + writtenVertices }`;\n\t\t\t\t\t\t\tfaceList += ` ${ indices.getX( i + 1 ) + writtenVertices }`;\n\t\t\t\t\t\t\tfaceList += ` ${ indices.getX( i + 2 ) + writtenVertices }\\n`;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\tfaceList += `3 ${ writtenVertices + i } ${ writtenVertices + i + 1 } ${ writtenVertices + i + 2 }\\n`;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCount += indices ? indices.count / 3 : vertices.count / 3;\n\n\t\t\t\t}\n\n\t\t\t\twrittenVertices += vertices.count;\n\n\t\t\t} );\n\n\t\t\tresult = `${ header }${vertexList}${ includeIndices ? `${faceList}\\n` : '\\n' }`;\n\n\t\t}\n\n\t\tif ( typeof onDone === 'function' ) requestAnimationFrame( () => onDone( result ) );\n\n\t\treturn result;\n\n\t}\n\n}\n\nexport { PLYExporter };\n", "import { Vector3 } from 'three';\n\n/**\n * Usage:\n * const exporter = new STLExporter();\n *\n * // second argument is a list of options\n * const data = exporter.parse( mesh, { binary: true } );\n *\n */\n\nclass STLExporter {\n\n\tparse( scene, options = {} ) {\n\n\t\toptions = Object.assign( {\n\t\t\tbinary: false\n\t\t}, options );\n\n\t\tconst binary = options.binary;\n\n\t\t//\n\n\t\tconst objects = [];\n\t\tlet triangles = 0;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tconst geometry = object.geometry;\n\n\t\t\t\tconst index = geometry.index;\n\t\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t\ttriangles += ( index !== null ) ? ( index.count / 3 ) : ( positionAttribute.count / 3 );\n\n\t\t\t\tobjects.push( {\n\t\t\t\t\tobject3d: object,\n\t\t\t\t\tgeometry: geometry\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tlet output;\n\t\tlet offset = 80; // skip header\n\n\t\tif ( binary === true ) {\n\n\t\t\tconst bufferLength = triangles * 2 + triangles * 3 * 4 * 4 + 80 + 4;\n\t\t\tconst arrayBuffer = new ArrayBuffer( bufferLength );\n\t\t\toutput = new DataView( arrayBuffer );\n\t\t\toutput.setUint32( offset, triangles, true ); offset += 4;\n\n\t\t} else {\n\n\t\t\toutput = '';\n\t\t\toutput += 'solid exported\\n';\n\n\t\t}\n\n\t\tconst vA = new Vector3();\n\t\tconst vB = new Vector3();\n\t\tconst vC = new Vector3();\n\t\tconst cb = new Vector3();\n\t\tconst ab = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\tconst object = objects[ i ].object3d;\n\t\t\tconst geometry = objects[ i ].geometry;\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed geometry\n\n\t\t\t\tfor ( let j = 0; j < index.count; j += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( j + 0 );\n\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\twriteFace( a, b, c, positionAttribute, object );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed geometry\n\n\t\t\t\tfor ( let j = 0; j < positionAttribute.count; j += 3 ) {\n\n\t\t\t\t\tconst a = j + 0;\n\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\twriteFace( a, b, c, positionAttribute, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( binary === false ) {\n\n\t\t\toutput += 'endsolid exported\\n';\n\n\t\t}\n\n\t\treturn output;\n\n\t\tfunction writeFace( a, b, c, positionAttribute, object ) {\n\n\t\t\tvA.fromBufferAttribute( positionAttribute, a );\n\t\t\tvB.fromBufferAttribute( positionAttribute, b );\n\t\t\tvC.fromBufferAttribute( positionAttribute, c );\n\n\t\t\tif ( object.isSkinnedMesh === true ) {\n\n\t\t\t\tobject.applyBoneTransform( a, vA );\n\t\t\t\tobject.applyBoneTransform( b, vB );\n\t\t\t\tobject.applyBoneTransform( c, vC );\n\n\t\t\t}\n\n\t\t\tvA.applyMatrix4( object.matrixWorld );\n\t\t\tvB.applyMatrix4( object.matrixWorld );\n\t\t\tvC.applyMatrix4( object.matrixWorld );\n\n\t\t\twriteNormal( vA, vB, vC );\n\n\t\t\twriteVertex( vA );\n\t\t\twriteVertex( vB );\n\t\t\twriteVertex( vC );\n\n\t\t\tif ( binary === true ) {\n\n\t\t\t\toutput.setUint16( offset, 0, true ); offset += 2;\n\n\t\t\t} else {\n\n\t\t\t\toutput += '\\t\\tendloop\\n';\n\t\t\t\toutput += '\\tendfacet\\n';\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction writeNormal( vA, vB, vC ) {\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab ).normalize();\n\n\t\t\tnormal.copy( cb ).normalize();\n\n\t\t\tif ( binary === true ) {\n\n\t\t\t\toutput.setFloat32( offset, normal.x, true ); offset += 4;\n\t\t\t\toutput.setFloat32( offset, normal.y, true ); offset += 4;\n\t\t\t\toutput.setFloat32( offset, normal.z, true ); offset += 4;\n\n\t\t\t} else {\n\n\t\t\t\toutput += '\\tfacet normal ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\\n';\n\t\t\t\toutput += '\\t\\touter loop\\n';\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction writeVertex( vertex ) {\n\n\t\t\tif ( binary === true ) {\n\n\t\t\t\toutput.setFloat32( offset, vertex.x, true ); offset += 4;\n\t\t\t\toutput.setFloat32( offset, vertex.y, true ); offset += 4;\n\t\t\t\toutput.setFloat32( offset, vertex.z, true ); offset += 4;\n\n\t\t\t} else {\n\n\t\t\t\toutput += '\\t\\t\\tvertex ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\\n';\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { STLExporter };\n", "import {\n\tNoColorSpace,\n\tDoubleSide,\n} from 'three';\n\nimport {\n\tstrToU8,\n\tzipSync,\n} from '../libs/fflate.module.js';\n\nimport { decompress } from './../utils/TextureUtils.js';\n\nclass USDZExporter {\n\n\tparse( scene, onDone, onError, options ) {\n\n\t\tthis.parseAsync( scene, options ).then( onDone ).catch( onError );\n\n\t}\n\n\tasync parseAsync( scene, options = {} ) {\n\n\t\toptions = Object.assign( {\n\t\t\tar: {\n\t\t\t\tanchoring: { type: 'plane' },\n\t\t\t\tplaneAnchoring: { alignment: 'horizontal' }\n\t\t\t},\n\t\t\tincludeAnchoringProperties: true,\n\t\t\tquickLookCompatible: false,\n\t\t\tmaxTextureSize: 1024,\n\t\t}, options );\n\n\t\tconst files = {};\n\t\tconst modelFileName = 'model.usda';\n\n\t\t// model file should be first in USDZ archive so we init it here\n\t\tfiles[ modelFileName ] = null;\n\n\t\tlet output = buildHeader();\n\n\t\toutput += buildSceneStart( options );\n\n\t\tconst materials = {};\n\t\tconst textures = {};\n\n\t\tscene.traverseVisible( ( object ) => {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\t\t\tconst geometryFileName = 'geometries/Geometry_' + geometry.id + '.usda';\n\n\t\t\t\t\tif ( ! ( geometryFileName in files ) ) {\n\n\t\t\t\t\t\tconst meshObject = buildMeshObject( geometry );\n\t\t\t\t\t\tfiles[ geometryFileName ] = buildUSDFileAsString( meshObject );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! ( material.uuid in materials ) ) {\n\n\t\t\t\t\t\tmaterials[ material.uuid ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutput += buildXform( object, geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)', object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isCamera ) {\n\n\t\t\t\toutput += buildCamera( object );\n\n\t\t\t}\n\n\t\t} );\n\n\n\t\toutput += buildSceneEnd();\n\n\t\toutput += buildMaterials( materials, textures, options.quickLookCompatible );\n\n\t\tfiles[ modelFileName ] = strToU8( output );\n\t\toutput = null;\n\n\t\tfor ( const id in textures ) {\n\n\t\t\tlet texture = textures[ id ];\n\n\t\t\tif ( texture.isCompressedTexture === true ) {\n\n\t\t\t\ttexture = decompress( texture );\n\n\t\t\t}\n\n\t\t\tconst canvas = imageToCanvas( texture.image, texture.flipY, options.maxTextureSize );\n\t\t\tconst blob = await new Promise( resolve => canvas.toBlob( resolve, 'image/png', 1 ) );\n\n\t\t\tfiles[ `textures/Texture_${ id }.png` ] = new Uint8Array( await blob.arrayBuffer() );\n\n\t\t}\n\n\t\t// 64 byte alignment\n\t\t// https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109\n\n\t\tlet offset = 0;\n\n\t\tfor ( const filename in files ) {\n\n\t\t\tconst file = files[ filename ];\n\t\t\tconst headerSize = 34 + filename.length;\n\n\t\t\toffset += headerSize;\n\n\t\t\tconst offsetMod64 = offset & 63;\n\n\t\t\tif ( offsetMod64 !== 4 ) {\n\n\t\t\t\tconst padLength = 64 - offsetMod64;\n\t\t\t\tconst padding = new Uint8Array( padLength );\n\n\t\t\t\tfiles[ filename ] = [ file, { extra: { 12345: padding } } ];\n\n\t\t\t}\n\n\t\t\toffset = file.length;\n\n\t\t}\n\n\t\treturn zipSync( files, { level: 0 } );\n\n\t}\n\n}\n\nfunction imageToCanvas( image, flipY, maxTextureSize ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\tconst scale = maxTextureSize / Math.max( image.width, image.height );\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = image.width * Math.min( 1, scale );\n\t\tcanvas.height = image.height * Math.min( 1, scale );\n\n\t\tconst context = canvas.getContext( '2d' );\n\n\t\t// TODO: We should be able to do this in the UsdTransform2d?\n\n\t\tif ( flipY === true ) {\n\n\t\t\tcontext.translate( 0, canvas.height );\n\t\t\tcontext.scale( 1, - 1 );\n\n\t\t}\n\n\t\tcontext.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\treturn canvas;\n\n\t} else {\n\n\t\tthrow new Error( 'THREE.USDZExporter: No valid image data found. Unable to process texture.' );\n\n\t}\n\n}\n\n//\n\nconst PRECISION = 7;\n\nfunction buildHeader() {\n\n\treturn `#usda 1.0\n(\n\tcustomLayerData = {\n\t\tstring creator = \"Three.js USDZExporter\"\n\t}\n\tdefaultPrim = \"Root\"\n\tmetersPerUnit = 1\n\tupAxis = \"Y\"\n)\n\n`;\n\n}\n\nfunction buildSceneStart( options ) {\n\n\tconst alignment = options.includeAnchoringProperties === true ? `\n\t\ttoken preliminary:anchoring:type = \"${options.ar.anchoring.type}\"\n\t\ttoken preliminary:planeAnchoring:alignment = \"${options.ar.planeAnchoring.alignment}\"\n\t` : '';\n\treturn `def Xform \"Root\"\n{\n\tdef Scope \"Scenes\" (\n\t\tkind = \"sceneLibrary\"\n\t)\n\t{\n\t\tdef Xform \"Scene\" (\n\t\t\tcustomData = {\n\t\t\t\tbool preliminary_collidesWithEnvironment = 0\n\t\t\t\tstring sceneName = \"Scene\"\n\t\t\t}\n\t\t\tsceneName = \"Scene\"\n\t\t)\n\t\t{${alignment}\n`;\n\n}\n\nfunction buildSceneEnd() {\n\n\treturn `\n\t\t}\n\t}\n}\n\n`;\n\n}\n\nfunction buildUSDFileAsString( dataToInsert ) {\n\n\tlet output = buildHeader();\n\toutput += dataToInsert;\n\treturn strToU8( output );\n\n}\n\n// Xform\n\nfunction buildXform( object, geometry, material ) {\n\n\tconst name = 'Object_' + object.id;\n\tconst transform = buildMatrix( object.matrixWorld );\n\n\tif ( object.matrixWorld.determinant() < 0 ) {\n\n\t\tconsole.warn( 'THREE.USDZExporter: USDZ does not support negative scales', object );\n\n\t}\n\n\treturn `def Xform \"${ name }\" (\n\tprepend references = @./geometries/Geometry_${ geometry.id }.usda@\n\tprepend apiSchemas = [\"MaterialBindingAPI\"]\n)\n{\n\tmatrix4d xformOp:transform = ${ transform }\n\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\n\n\trel material:binding = \n}\n\n`;\n\n}\n\nfunction buildMatrix( matrix ) {\n\n\tconst array = matrix.elements;\n\n\treturn `( ${ buildMatrixRow( array, 0 ) }, ${ buildMatrixRow( array, 4 ) }, ${ buildMatrixRow( array, 8 ) }, ${ buildMatrixRow( array, 12 ) } )`;\n\n}\n\nfunction buildMatrixRow( array, offset ) {\n\n\treturn `(${ array[ offset + 0 ] }, ${ array[ offset + 1 ] }, ${ array[ offset + 2 ] }, ${ array[ offset + 3 ] })`;\n\n}\n\n// Mesh\n\nfunction buildMeshObject( geometry ) {\n\n\tconst mesh = buildMesh( geometry );\n\treturn `\ndef \"Geometry\"\n{\n${mesh}\n}\n`;\n\n}\n\nfunction buildMesh( geometry ) {\n\n\tconst name = 'Geometry';\n\tconst attributes = geometry.attributes;\n\tconst count = attributes.position.count;\n\n\treturn `\n\tdef Mesh \"${ name }\"\n\t{\n\t\tint[] faceVertexCounts = [${ buildMeshVertexCount( geometry ) }]\n\t\tint[] faceVertexIndices = [${ buildMeshVertexIndices( geometry ) }]\n\t\tnormal3f[] normals = [${ buildVector3Array( attributes.normal, count )}] (\n\t\t\tinterpolation = \"vertex\"\n\t\t)\n\t\tpoint3f[] points = [${ buildVector3Array( attributes.position, count )}]\n${ buildPrimvars( attributes ) }\n\t\tuniform token subdivisionScheme = \"none\"\n\t}\n`;\n\n}\n\nfunction buildMeshVertexCount( geometry ) {\n\n\tconst count = geometry.index !== null ? geometry.index.count : geometry.attributes.position.count;\n\n\treturn Array( count / 3 ).fill( 3 ).join( ', ' );\n\n}\n\nfunction buildMeshVertexIndices( geometry ) {\n\n\tconst index = geometry.index;\n\tconst array = [];\n\n\tif ( index !== null ) {\n\n\t\tfor ( let i = 0; i < index.count; i ++ ) {\n\n\t\t\tarray.push( index.getX( i ) );\n\n\t\t}\n\n\t} else {\n\n\t\tconst length = geometry.attributes.position.count;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tarray.push( i );\n\n\t\t}\n\n\t}\n\n\treturn array.join( ', ' );\n\n}\n\nfunction buildVector3Array( attribute, count ) {\n\n\tif ( attribute === undefined ) {\n\n\t\tconsole.warn( 'USDZExporter: Normals missing.' );\n\t\treturn Array( count ).fill( '(0, 0, 0)' ).join( ', ' );\n\n\t}\n\n\tconst array = [];\n\n\tfor ( let i = 0; i < attribute.count; i ++ ) {\n\n\t\tconst x = attribute.getX( i );\n\t\tconst y = attribute.getY( i );\n\t\tconst z = attribute.getZ( i );\n\n\t\tarray.push( `(${ x.toPrecision( PRECISION ) }, ${ y.toPrecision( PRECISION ) }, ${ z.toPrecision( PRECISION ) })` );\n\n\t}\n\n\treturn array.join( ', ' );\n\n}\n\nfunction buildVector2Array( attribute ) {\n\n\tconst array = [];\n\n\tfor ( let i = 0; i < attribute.count; i ++ ) {\n\n\t\tconst x = attribute.getX( i );\n\t\tconst y = attribute.getY( i );\n\n\t\tarray.push( `(${ x.toPrecision( PRECISION ) }, ${ 1 - y.toPrecision( PRECISION ) })` );\n\n\t}\n\n\treturn array.join( ', ' );\n\n}\n\nfunction buildPrimvars( attributes ) {\n\n\tlet string = '';\n\n\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\tconst id = ( i > 0 ? i : '' );\n\t\tconst attribute = attributes[ 'uv' + id ];\n\n\t\tif ( attribute !== undefined ) {\n\n\t\t\tstring += `\n\t\ttexCoord2f[] primvars:st${ id } = [${ buildVector2Array( attribute )}] (\n\t\t\tinterpolation = \"vertex\"\n\t\t)`;\n\n\t\t}\n\n\t}\n\n\t// vertex colors\n\n\tconst colorAttribute = attributes.color;\n\n\tif ( colorAttribute !== undefined ) {\n\n\t\tconst count = colorAttribute.count;\n\n\t\tstring += `\n\tcolor3f[] primvars:displayColor = [${buildVector3Array( colorAttribute, count )}] (\n\t\tinterpolation = \"vertex\"\n\t\t)`;\n\n\t}\n\n\treturn string;\n\n}\n\n// Materials\n\nfunction buildMaterials( materials, textures, quickLookCompatible = false ) {\n\n\tconst array = [];\n\n\tfor ( const uuid in materials ) {\n\n\t\tconst material = materials[ uuid ];\n\n\t\tarray.push( buildMaterial( material, textures, quickLookCompatible ) );\n\n\t}\n\n\treturn `def \"Materials\"\n{\n${ array.join( '' ) }\n}\n\n`;\n\n}\n\nfunction buildMaterial( material, textures, quickLookCompatible = false ) {\n\n\t// https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html\n\n\tconst pad = '\t\t\t';\n\tconst inputs = [];\n\tconst samplers = [];\n\n\tfunction buildTexture( texture, mapType, color ) {\n\n\t\tconst id = texture.source.id + '_' + texture.flipY;\n\n\t\ttextures[ id ] = texture;\n\n\t\tconst uv = texture.channel > 0 ? 'st' + texture.channel : 'st';\n\n\t\tconst WRAPPINGS = {\n\t\t\t1000: 'repeat', // RepeatWrapping\n\t\t\t1001: 'clamp', // ClampToEdgeWrapping\n\t\t\t1002: 'mirror' // MirroredRepeatWrapping\n\t\t};\n\n\t\tconst repeat = texture.repeat.clone();\n\t\tconst offset = texture.offset.clone();\n\t\tconst rotation = texture.rotation;\n\n\t\t// rotation is around the wrong point. after rotation we need to shift offset again so that we're rotating around the right spot\n\t\tconst xRotationOffset = Math.sin( rotation );\n\t\tconst yRotationOffset = Math.cos( rotation );\n\n\t\t// texture coordinates start in the opposite corner, need to correct\n\t\toffset.y = 1 - offset.y - repeat.y;\n\n\t\t// turns out QuickLook is buggy and interprets texture repeat inverted/applies operations in a different order.\n\t\t// Apple Feedback: \tFB10036297 and FB11442287\n\t\tif ( quickLookCompatible ) {\n\n\t\t\t// This is NOT correct yet in QuickLook, but comes close for a range of models.\n\t\t\t// It becomes more incorrect the bigger the offset is\n\n\t\t\toffset.x = offset.x / repeat.x;\n\t\t\toffset.y = offset.y / repeat.y;\n\n\t\t\toffset.x += xRotationOffset / repeat.x;\n\t\t\toffset.y += yRotationOffset - 1;\n\n\t\t} else {\n\n\t\t\t// results match glTF results exactly. verified correct in usdview.\n\t\t\toffset.x += xRotationOffset * repeat.x;\n\t\t\toffset.y += ( 1 - yRotationOffset ) * repeat.y;\n\n\t\t}\n\n\t\treturn `\n\t\tdef Shader \"PrimvarReader_${ mapType }\"\n\t\t{\n\t\t\tuniform token info:id = \"UsdPrimvarReader_float2\"\n\t\t\tfloat2 inputs:fallback = (0.0, 0.0)\n\t\t\ttoken inputs:varname = \"${ uv }\"\n\t\t\tfloat2 outputs:result\n\t\t}\n\n\t\tdef Shader \"Transform2d_${ mapType }\"\n\t\t{\n\t\t\tuniform token info:id = \"UsdTransform2d\"\n\t\t\ttoken inputs:in.connect = \n\t\t\tfloat inputs:rotation = ${ ( rotation * ( 180 / Math.PI ) ).toFixed( PRECISION ) }\n\t\t\tfloat2 inputs:scale = ${ buildVector2( repeat ) }\n\t\t\tfloat2 inputs:translation = ${ buildVector2( offset ) }\n\t\t\tfloat2 outputs:result\n\t\t}\n\n\t\tdef Shader \"Texture_${ texture.id }_${ mapType }\"\n\t\t{\n\t\t\tuniform token info:id = \"UsdUVTexture\"\n\t\t\tasset inputs:file = @textures/Texture_${ id }.png@\n\t\t\tfloat2 inputs:st.connect = \n\t\t\t${ color !== undefined ? 'float4 inputs:scale = ' + buildColor4( color ) : '' }\n\t\t\ttoken inputs:sourceColorSpace = \"${ texture.colorSpace === NoColorSpace ? 'raw' : 'sRGB' }\"\n\t\t\ttoken inputs:wrapS = \"${ WRAPPINGS[ texture.wrapS ] }\"\n\t\t\ttoken inputs:wrapT = \"${ WRAPPINGS[ texture.wrapT ] }\"\n\t\t\tfloat outputs:r\n\t\t\tfloat outputs:g\n\t\t\tfloat outputs:b\n\t\t\tfloat3 outputs:rgb\n\t\t\t${ material.transparent || material.alphaTest > 0.0 ? 'float outputs:a' : '' }\n\t\t}`;\n\n\t}\n\n\n\tif ( material.side === DoubleSide ) {\n\n\t\tconsole.warn( 'THREE.USDZExporter: USDZ does not support double sided materials', material );\n\n\t}\n\n\tif ( material.map !== null ) {\n\n\t\tinputs.push( `${ pad }color3f inputs:diffuseColor.connect = ` );\n\n\t\tif ( material.transparent ) {\n\n\t\t\tinputs.push( `${ pad }float inputs:opacity.connect = ` );\n\n\t\t} else if ( material.alphaTest > 0.0 ) {\n\n\t\t\tinputs.push( `${ pad }float inputs:opacity.connect = ` );\n\t\t\tinputs.push( `${ pad }float inputs:opacityThreshold = ${material.alphaTest}` );\n\n\t\t}\n\n\t\tsamplers.push( buildTexture( material.map, 'diffuse', material.color ) );\n\n\t} else {\n\n\t\tinputs.push( `${ pad }color3f inputs:diffuseColor = ${ buildColor( material.color ) }` );\n\n\t}\n\n\tif ( material.emissiveMap !== null ) {\n\n\t\tinputs.push( `${ pad }color3f inputs:emissiveColor.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.emissiveMap, 'emissive' ) );\n\n\t} else if ( material.emissive.getHex() > 0 ) {\n\n\t\tinputs.push( `${ pad }color3f inputs:emissiveColor = ${ buildColor( material.emissive ) }` );\n\n\t}\n\n\tif ( material.normalMap !== null ) {\n\n\t\tinputs.push( `${ pad }normal3f inputs:normal.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.normalMap, 'normal' ) );\n\n\t}\n\n\tif ( material.aoMap !== null ) {\n\n\t\tinputs.push( `${ pad }float inputs:occlusion.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.aoMap, 'occlusion' ) );\n\n\t}\n\n\tif ( material.roughnessMap !== null && material.roughness === 1 ) {\n\n\t\tinputs.push( `${ pad }float inputs:roughness.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.roughnessMap, 'roughness' ) );\n\n\t} else {\n\n\t\tinputs.push( `${ pad }float inputs:roughness = ${ material.roughness }` );\n\n\t}\n\n\tif ( material.metalnessMap !== null && material.metalness === 1 ) {\n\n\t\tinputs.push( `${ pad }float inputs:metallic.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.metalnessMap, 'metallic' ) );\n\n\t} else {\n\n\t\tinputs.push( `${ pad }float inputs:metallic = ${ material.metalness }` );\n\n\t}\n\n\tif ( material.alphaMap !== null ) {\n\n\t\tinputs.push( `${pad}float inputs:opacity.connect = ` );\n\t\tinputs.push( `${pad}float inputs:opacityThreshold = 0.0001` );\n\n\t\tsamplers.push( buildTexture( material.alphaMap, 'opacity' ) );\n\n\t} else {\n\n\t\tinputs.push( `${pad}float inputs:opacity = ${material.opacity}` );\n\n\t}\n\n\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\tinputs.push( `${ pad }float inputs:clearcoat = ${ material.clearcoat }` );\n\t\tinputs.push( `${ pad }float inputs:clearcoatRoughness = ${ material.clearcoatRoughness }` );\n\t\tinputs.push( `${ pad }float inputs:ior = ${ material.ior }` );\n\n\t}\n\n\treturn `\n\tdef Material \"Material_${ material.id }\"\n\t{\n\t\tdef Shader \"PreviewSurface\"\n\t\t{\n\t\t\tuniform token info:id = \"UsdPreviewSurface\"\n${ inputs.join( '\\n' ) }\n\t\t\tint inputs:useSpecularWorkflow = 0\n\t\t\ttoken outputs:surface\n\t\t}\n\n\t\ttoken outputs:surface.connect = \n\n${ samplers.join( '\\n' ) }\n\n\t}\n`;\n\n}\n\nfunction buildColor( color ) {\n\n\treturn `(${ color.r }, ${ color.g }, ${ color.b })`;\n\n}\n\nfunction buildColor4( color ) {\n\n\treturn `(${ color.r }, ${ color.g }, ${ color.b }, 1.0)`;\n\n}\n\nfunction buildVector2( vector ) {\n\n\treturn `(${ vector.x }, ${ vector.y })`;\n\n}\n\n\nfunction buildCamera( camera ) {\n\n\tconst name = camera.name ? camera.name : 'Camera_' + camera.id;\n\n\tconst transform = buildMatrix( camera.matrixWorld );\n\n\tif ( camera.matrixWorld.determinant() < 0 ) {\n\n\t\tconsole.warn( 'THREE.USDZExporter: USDZ does not support negative scales', camera );\n\n\t}\n\n\tif ( camera.isOrthographicCamera ) {\n\n\t\treturn `def Camera \"${name}\"\n\t\t{\n\t\t\tmatrix4d xformOp:transform = ${ transform }\n\t\t\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\n\n\t\t\tfloat2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })\n\t\t\tfloat horizontalAperture = ${ ( ( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10 ).toPrecision( PRECISION ) }\n\t\t\tfloat verticalAperture = ${ ( ( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10 ).toPrecision( PRECISION ) }\n\t\t\ttoken projection = \"orthographic\"\n\t\t}\n\t\n\t`;\n\n\t} else {\n\n\t\treturn `def Camera \"${name}\"\n\t\t{\n\t\t\tmatrix4d xformOp:transform = ${ transform }\n\t\t\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\n\n\t\t\tfloat2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })\n\t\t\tfloat focalLength = ${ camera.getFocalLength().toPrecision( PRECISION ) }\n\t\t\tfloat focusDistance = ${ camera.focus.toPrecision( PRECISION ) }\n\t\t\tfloat horizontalAperture = ${ camera.getFilmWidth().toPrecision( PRECISION ) }\n\t\t\ttoken projection = \"perspective\"\n\t\t\tfloat verticalAperture = ${ camera.getFilmHeight().toPrecision( PRECISION ) }\n\t\t}\n\t\n\t`;\n\n\t}\n\n}\n\nexport { USDZExporter };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute\n} from 'three';\n\nclass BoxLineGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\tconst widthHalf = width / 2;\n\t\tconst heightHalf = height / 2;\n\t\tconst depthHalf = depth / 2;\n\n\t\tconst segmentWidth = width / widthSegments;\n\t\tconst segmentHeight = height / heightSegments;\n\t\tconst segmentDepth = depth / depthSegments;\n\n\t\tconst vertices = [];\n\n\t\tlet x = - widthHalf;\n\t\tlet y = - heightHalf;\n\t\tlet z = - depthHalf;\n\n\t\tfor ( let i = 0; i <= widthSegments; i ++ ) {\n\n\t\t\tvertices.push( x, - heightHalf, - depthHalf, x, heightHalf, - depthHalf );\n\t\t\tvertices.push( x, heightHalf, - depthHalf, x, heightHalf, depthHalf );\n\t\t\tvertices.push( x, heightHalf, depthHalf, x, - heightHalf, depthHalf );\n\t\t\tvertices.push( x, - heightHalf, depthHalf, x, - heightHalf, - depthHalf );\n\n\t\t\tx += segmentWidth;\n\n\t\t}\n\n\t\tfor ( let i = 0; i <= heightSegments; i ++ ) {\n\n\t\t\tvertices.push( - widthHalf, y, - depthHalf, widthHalf, y, - depthHalf );\n\t\t\tvertices.push( widthHalf, y, - depthHalf, widthHalf, y, depthHalf );\n\t\t\tvertices.push( widthHalf, y, depthHalf, - widthHalf, y, depthHalf );\n\t\t\tvertices.push( - widthHalf, y, depthHalf, - widthHalf, y, - depthHalf );\n\n\t\t\ty += segmentHeight;\n\n\t\t}\n\n\t\tfor ( let i = 0; i <= depthSegments; i ++ ) {\n\n\t\t\tvertices.push( - widthHalf, - heightHalf, z, - widthHalf, heightHalf, z );\n\t\t\tvertices.push( - widthHalf, heightHalf, z, widthHalf, heightHalf, z );\n\t\t\tvertices.push( widthHalf, heightHalf, z, widthHalf, - heightHalf, z );\n\t\t\tvertices.push( widthHalf, - heightHalf, z, - widthHalf, - heightHalf, z );\n\n\t\t\tz += segmentDepth;\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\nexport { BoxLineGeometry };\n", "import {\n\tLine3,\n\tPlane,\n\tTriangle,\n\tVector3\n} from 'three';\n\n/**\n * Ported from: https://github.com/maurizzzio/quickhull3d/ by Mauricio Poppe (https://github.com/maurizzzio)\n */\n\nconst Visible = 0;\nconst Deleted = 1;\n\nconst _v1 = new Vector3();\nconst _line3 = new Line3();\nconst _plane = new Plane();\nconst _closestPoint = new Vector3();\nconst _triangle = new Triangle();\n\nclass ConvexHull {\n\n\tconstructor() {\n\n\t\tthis.tolerance = - 1;\n\n\t\tthis.faces = []; // the generated faces of the convex hull\n\t\tthis.newFaces = []; // this array holds the faces that are generated within a single iteration\n\n\t\t// the vertex lists work as follows:\n\t\t//\n\t\t// let 'a' and 'b' be 'Face' instances\n\t\t// let 'v' be points wrapped as instance of 'Vertex'\n\t\t//\n\t\t// [v, v, ..., v, v, v, ...]\n\t\t// ^ ^\n\t\t// | |\n\t\t// a.outside b.outside\n\t\t//\n\t\tthis.assigned = new VertexList();\n\t\tthis.unassigned = new VertexList();\n\n\t\tthis.vertices = []; \t// vertices of the hull (internal representation of given geometry data)\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\t// The algorithm needs at least four points.\n\n\t\tif ( points.length >= 4 ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tthis.vertices.push( new VertexNode( points[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.compute();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tconst points = [];\n\n\t\tobject.updateMatrixWorld( true );\n\n\t\tobject.traverse( function ( node ) {\n\n\t\t\tconst geometry = node.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tconst attribute = geometry.attributes.position;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst point = new Vector3();\n\n\t\t\t\t\t\tpoint.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\tpoints.push( point );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this.setFromPoints( points );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst faces = this.faces;\n\n\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// compute signed distance and check on what half space the point lies\n\n\t\t\tif ( face.distanceToPoint( point ) > this.tolerance ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectRay( ray, target ) {\n\n\t\t// based on \"Fast Ray-Convex Polyhedron Intersection\" by Eric Haines, GRAPHICS GEMS II\n\n\t\tconst faces = this.faces;\n\n\t\tlet tNear = - Infinity;\n\t\tlet tFar = Infinity;\n\n\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// interpret faces as planes for the further computation\n\n\t\t\tconst vN = face.distanceToPoint( ray.origin );\n\t\t\tconst vD = face.normal.dot( ray.direction );\n\n\t\t\t// if the origin is on the positive side of a plane (so the plane can \"see\" the origin) and\n\t\t\t// the ray is turned away or parallel to the plane, there is no intersection\n\n\t\t\tif ( vN > 0 && vD >= 0 ) return null;\n\n\t\t\t// compute the distance from the ray’s origin to the intersection with the plane\n\n\t\t\tconst t = ( vD !== 0 ) ? ( - vN / vD ) : 0;\n\n\t\t\t// only proceed if the distance is positive. a negative distance means the intersection point\n\t\t\t// lies \"behind\" the origin\n\n\t\t\tif ( t <= 0 ) continue;\n\n\t\t\t// now categorized plane as front-facing or back-facing\n\n\t\t\tif ( vD > 0 ) {\n\n\t\t\t\t// plane faces away from the ray, so this plane is a back-face\n\n\t\t\t\ttFar = Math.min( t, tFar );\n\n\t\t\t} else {\n\n\t\t\t\t// front-face\n\n\t\t\t\ttNear = Math.max( t, tNear );\n\n\t\t\t}\n\n\t\t\tif ( tNear > tFar ) {\n\n\t\t\t\t// if tNear ever is greater than tFar, the ray must miss the convex hull\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// evaluate intersection point\n\n\t\t// always try tNear first since its the closer intersection point\n\n\t\tif ( tNear !== - Infinity ) {\n\n\t\t\tray.at( tNear, target );\n\n\t\t} else {\n\n\t\t\tray.at( tFar, target );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tintersectsRay( ray ) {\n\n\t\treturn this.intersectRay( ray, _v1 ) !== null;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.faces = [];\n\t\tthis.vertices = [];\n\n\t\treturn this;\n\n\t}\n\n\t// Adds a vertex to the 'assigned' list of vertices and assigns it to the given face\n\n\taddVertexToFace( vertex, face ) {\n\n\t\tvertex.face = face;\n\n\t\tif ( face.outside === null ) {\n\n\t\t\tthis.assigned.append( vertex );\n\n\t\t} else {\n\n\t\t\tthis.assigned.insertBefore( face.outside, vertex );\n\n\t\t}\n\n\t\tface.outside = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Removes a vertex from the 'assigned' list of vertices and from the given face\n\n\tremoveVertexFromFace( vertex, face ) {\n\n\t\tif ( vertex === face.outside ) {\n\n\t\t\t// fix face.outside link\n\n\t\t\tif ( vertex.next !== null && vertex.next.face === face ) {\n\n\t\t\t\t// face has at least 2 outside vertices, move the 'outside' reference\n\n\t\t\t\tface.outside = vertex.next;\n\n\t\t\t} else {\n\n\t\t\t\t// vertex was the only outside vertex that face had\n\n\t\t\t\tface.outside = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.assigned.remove( vertex );\n\n\t\treturn this;\n\n\t}\n\n\t// Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertex list\n\n\tremoveAllVerticesFromFace( face ) {\n\n\t\tif ( face.outside !== null ) {\n\n\t\t\t// reference to the first and last vertex of this face\n\n\t\t\tconst start = face.outside;\n\t\t\tlet end = face.outside;\n\n\t\t\twhile ( end.next !== null && end.next.face === face ) {\n\n\t\t\t\tend = end.next;\n\n\t\t\t}\n\n\t\t\tthis.assigned.removeSubList( start, end );\n\n\t\t\t// fix references\n\n\t\t\tstart.prev = end.next = null;\n\t\t\tface.outside = null;\n\n\t\t\treturn start;\n\n\t\t}\n\n\t}\n\n\t// Removes all the visible vertices that 'face' is able to see\n\n\tdeleteFaceVertices( face, absorbingFace ) {\n\n\t\tconst faceVertices = this.removeAllVerticesFromFace( face );\n\n\t\tif ( faceVertices !== undefined ) {\n\n\t\t\tif ( absorbingFace === undefined ) {\n\n\t\t\t\t// mark the vertices to be reassigned to some other face\n\n\t\t\t\tthis.unassigned.appendChain( faceVertices );\n\n\n\t\t\t} else {\n\n\t\t\t\t// if there's an absorbing face try to assign as many vertices as possible to it\n\n\t\t\t\tlet vertex = faceVertices;\n\n\t\t\t\tdo {\n\n\t\t\t\t\t// we need to buffer the subsequent vertex at this point because the 'vertex.next' reference\n\t\t\t\t\t// will be changed by upcoming method calls\n\n\t\t\t\t\tconst nextVertex = vertex.next;\n\n\t\t\t\t\tconst distance = absorbingFace.distanceToPoint( vertex.point );\n\n\t\t\t\t\t// check if 'vertex' is able to see 'absorbingFace'\n\n\t\t\t\t\tif ( distance > this.tolerance ) {\n\n\t\t\t\t\t\tthis.addVertexToFace( vertex, absorbingFace );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.unassigned.append( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// now assign next vertex\n\n\t\t\t\t\tvertex = nextVertex;\n\n\t\t\t\t} while ( vertex !== null );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Reassigns as many vertices as possible from the unassigned list to the new faces\n\n\tresolveUnassignedPoints( newFaces ) {\n\n\t\tif ( this.unassigned.isEmpty() === false ) {\n\n\t\t\tlet vertex = this.unassigned.first();\n\n\t\t\tdo {\n\n\t\t\t\t// buffer 'next' reference, see .deleteFaceVertices()\n\n\t\t\t\tconst nextVertex = vertex.next;\n\n\t\t\t\tlet maxDistance = this.tolerance;\n\n\t\t\t\tlet maxFace = null;\n\n\t\t\t\tfor ( let i = 0; i < newFaces.length; i ++ ) {\n\n\t\t\t\t\tconst face = newFaces[ i ];\n\n\t\t\t\t\tif ( face.mark === Visible ) {\n\n\t\t\t\t\t\tconst distance = face.distanceToPoint( vertex.point );\n\n\t\t\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\t\t\tmaxFace = face;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( maxDistance > 1000 * this.tolerance ) break;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// 'maxFace' can be null e.g. if there are identical vertices\n\n\t\t\t\tif ( maxFace !== null ) {\n\n\t\t\t\t\tthis.addVertexToFace( vertex, maxFace );\n\n\t\t\t\t}\n\n\t\t\t\tvertex = nextVertex;\n\n\t\t\t} while ( vertex !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Computes the extremes of a simplex which will be the initial hull\n\n\tcomputeExtremes() {\n\n\t\tconst min = new Vector3();\n\t\tconst max = new Vector3();\n\n\t\tconst minVertices = [];\n\t\tconst maxVertices = [];\n\n\t\t// initially assume that the first vertex is the min/max\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tminVertices[ i ] = maxVertices[ i ] = this.vertices[ 0 ];\n\n\t\t}\n\n\t\tmin.copy( this.vertices[ 0 ].point );\n\t\tmax.copy( this.vertices[ 0 ].point );\n\n\t\t// compute the min/max vertex on all six directions\n\n\t\tfor ( let i = 0, l = this.vertices.length; i < l; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tconst point = vertex.point;\n\n\t\t\t// update the min coordinates\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tif ( point.getComponent( j ) < min.getComponent( j ) ) {\n\n\t\t\t\t\tmin.setComponent( j, point.getComponent( j ) );\n\t\t\t\t\tminVertices[ j ] = vertex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// update the max coordinates\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tif ( point.getComponent( j ) > max.getComponent( j ) ) {\n\n\t\t\t\t\tmax.setComponent( j, point.getComponent( j ) );\n\t\t\t\t\tmaxVertices[ j ] = vertex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use min/max vectors to compute an optimal epsilon\n\n\t\tthis.tolerance = 3 * Number.EPSILON * (\n\t\t\tMath.max( Math.abs( min.x ), Math.abs( max.x ) ) +\n\t\t\tMath.max( Math.abs( min.y ), Math.abs( max.y ) ) +\n\t\t\tMath.max( Math.abs( min.z ), Math.abs( max.z ) )\n\t\t);\n\n\t\treturn { min: minVertices, max: maxVertices };\n\n\t}\n\n\t// Computes the initial simplex assigning to its faces all the points\n\t// that are candidates to form part of the hull\n\n\tcomputeInitialHull() {\n\n\t\tconst vertices = this.vertices;\n\t\tconst extremes = this.computeExtremes();\n\t\tconst min = extremes.min;\n\t\tconst max = extremes.max;\n\n\t\t// 1. Find the two vertices 'v0' and 'v1' with the greatest 1d separation\n\t\t// (max.x - min.x)\n\t\t// (max.y - min.y)\n\t\t// (max.z - min.z)\n\n\t\tlet maxDistance = 0;\n\t\tlet index = 0;\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst distance = max[ i ].point.getComponent( i ) - min[ i ].point.getComponent( i );\n\n\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\tmaxDistance = distance;\n\t\t\t\tindex = i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst v0 = min[ index ];\n\t\tconst v1 = max[ index ];\n\t\tlet v2;\n\t\tlet v3;\n\n\t\t// 2. The next vertex 'v2' is the one farthest to the line formed by 'v0' and 'v1'\n\n\t\tmaxDistance = 0;\n\t\t_line3.set( v0.point, v1.point );\n\n\t\tfor ( let i = 0, l = this.vertices.length; i < l; i ++ ) {\n\n\t\t\tconst vertex = vertices[ i ];\n\n\t\t\tif ( vertex !== v0 && vertex !== v1 ) {\n\n\t\t\t\t_line3.closestPointToPoint( vertex.point, true, _closestPoint );\n\n\t\t\t\tconst distance = _closestPoint.distanceToSquared( vertex.point );\n\n\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\tv2 = vertex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// 3. The next vertex 'v3' is the one farthest to the plane 'v0', 'v1', 'v2'\n\n\t\tmaxDistance = - 1;\n\t\t_plane.setFromCoplanarPoints( v0.point, v1.point, v2.point );\n\n\t\tfor ( let i = 0, l = this.vertices.length; i < l; i ++ ) {\n\n\t\t\tconst vertex = vertices[ i ];\n\n\t\t\tif ( vertex !== v0 && vertex !== v1 && vertex !== v2 ) {\n\n\t\t\t\tconst distance = Math.abs( _plane.distanceToPoint( vertex.point ) );\n\n\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\tv3 = vertex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst faces = [];\n\n\t\tif ( _plane.distanceToPoint( v3.point ) < 0 ) {\n\n\t\t\t// the face is not able to see the point so 'plane.normal' is pointing outside the tetrahedron\n\n\t\t\tfaces.push(\n\t\t\t\tFace.create( v0, v1, v2 ),\n\t\t\t\tFace.create( v3, v1, v0 ),\n\t\t\t\tFace.create( v3, v2, v1 ),\n\t\t\t\tFace.create( v3, v0, v2 )\n\t\t\t);\n\n\t\t\t// set the twin edge\n\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst j = ( i + 1 ) % 3;\n\n\t\t\t\t// join face[ i ] i > 0, with the first face\n\n\t\t\t\tfaces[ i + 1 ].getEdge( 2 ).setTwin( faces[ 0 ].getEdge( j ) );\n\n\t\t\t\t// join face[ i ] with face[ i + 1 ], 1 <= i <= 3\n\n\t\t\t\tfaces[ i + 1 ].getEdge( 1 ).setTwin( faces[ j + 1 ].getEdge( 0 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// the face is able to see the point so 'plane.normal' is pointing inside the tetrahedron\n\n\t\t\tfaces.push(\n\t\t\t\tFace.create( v0, v2, v1 ),\n\t\t\t\tFace.create( v3, v0, v1 ),\n\t\t\t\tFace.create( v3, v1, v2 ),\n\t\t\t\tFace.create( v3, v2, v0 )\n\t\t\t);\n\n\t\t\t// set the twin edge\n\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst j = ( i + 1 ) % 3;\n\n\t\t\t\t// join face[ i ] i > 0, with the first face\n\n\t\t\t\tfaces[ i + 1 ].getEdge( 2 ).setTwin( faces[ 0 ].getEdge( ( 3 - i ) % 3 ) );\n\n\t\t\t\t// join face[ i ] with face[ i + 1 ]\n\n\t\t\t\tfaces[ i + 1 ].getEdge( 0 ).setTwin( faces[ j + 1 ].getEdge( 1 ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// the initial hull is the tetrahedron\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ] );\n\n\t\t}\n\n\t\t// initial assignment of vertices to the faces of the tetrahedron\n\n\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\tconst vertex = vertices[ i ];\n\n\t\t\tif ( vertex !== v0 && vertex !== v1 && vertex !== v2 && vertex !== v3 ) {\n\n\t\t\t\tmaxDistance = this.tolerance;\n\t\t\t\tlet maxFace = null;\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tconst distance = this.faces[ j ].distanceToPoint( vertex.point );\n\n\t\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\t\tmaxFace = this.faces[ j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( maxFace !== null ) {\n\n\t\t\t\t\tthis.addVertexToFace( vertex, maxFace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Removes inactive faces\n\n\treindexFaces() {\n\n\t\tconst activeFaces = [];\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tif ( face.mark === Visible ) {\n\n\t\t\t\tactiveFaces.push( face );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.faces = activeFaces;\n\n\t\treturn this;\n\n\t}\n\n\t// Finds the next vertex to create faces with the current hull\n\n\tnextVertexToAdd() {\n\n\t\t// if the 'assigned' list of vertices is empty, no vertices are left. return with 'undefined'\n\n\t\tif ( this.assigned.isEmpty() === false ) {\n\n\t\t\tlet eyeVertex, maxDistance = 0;\n\n\t\t\t// grap the first available face and start with the first visible vertex of that face\n\n\t\t\tconst eyeFace = this.assigned.first().face;\n\t\t\tlet vertex = eyeFace.outside;\n\n\t\t\t// now calculate the farthest vertex that face can see\n\n\t\t\tdo {\n\n\t\t\t\tconst distance = eyeFace.distanceToPoint( vertex.point );\n\n\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\teyeVertex = vertex;\n\n\t\t\t\t}\n\n\t\t\t\tvertex = vertex.next;\n\n\t\t\t} while ( vertex !== null && vertex.face === eyeFace );\n\n\t\t\treturn eyeVertex;\n\n\t\t}\n\n\t}\n\n\t// Computes a chain of half edges in CCW order called the 'horizon'.\n\t// For an edge to be part of the horizon it must join a face that can see\n\t// 'eyePoint' and a face that cannot see 'eyePoint'.\n\n\tcomputeHorizon( eyePoint, crossEdge, face, horizon ) {\n\n\t\t// moves face's vertices to the 'unassigned' vertex list\n\n\t\tthis.deleteFaceVertices( face );\n\n\t\tface.mark = Deleted;\n\n\t\tlet edge;\n\n\t\tif ( crossEdge === null ) {\n\n\t\t\tedge = crossEdge = face.getEdge( 0 );\n\n\t\t} else {\n\n\t\t\t// start from the next edge since 'crossEdge' was already analyzed\n\t\t\t// (actually 'crossEdge.twin' was the edge who called this method recursively)\n\n\t\t\tedge = crossEdge.next;\n\n\t\t}\n\n\t\tdo {\n\n\t\t\tconst twinEdge = edge.twin;\n\t\t\tconst oppositeFace = twinEdge.face;\n\n\t\t\tif ( oppositeFace.mark === Visible ) {\n\n\t\t\t\tif ( oppositeFace.distanceToPoint( eyePoint ) > this.tolerance ) {\n\n\t\t\t\t\t// the opposite face can see the vertex, so proceed with next edge\n\n\t\t\t\t\tthis.computeHorizon( eyePoint, twinEdge, oppositeFace, horizon );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// the opposite face can't see the vertex, so this edge is part of the horizon\n\n\t\t\t\t\thorizon.push( edge );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tedge = edge.next;\n\n\t\t} while ( edge !== crossEdge );\n\n\t\treturn this;\n\n\t}\n\n\t// Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head' in CCW order\n\n\taddAdjoiningFace( eyeVertex, horizonEdge ) {\n\n\t\t// all the half edges are created in ccw order thus the face is always pointing outside the hull\n\n\t\tconst face = Face.create( eyeVertex, horizonEdge.tail(), horizonEdge.head() );\n\n\t\tthis.faces.push( face );\n\n\t\t// join face.getEdge( - 1 ) with the horizon's opposite edge face.getEdge( - 1 ) = face.getEdge( 2 )\n\n\t\tface.getEdge( - 1 ).setTwin( horizonEdge.twin );\n\n\t\treturn face.getEdge( 0 ); // the half edge whose vertex is the eyeVertex\n\n\n\t}\n\n\t// Adds 'horizon.length' faces to the hull, each face will be linked with the\n\t// horizon opposite face and the face on the left/right\n\n\taddNewFaces( eyeVertex, horizon ) {\n\n\t\tthis.newFaces = [];\n\n\t\tlet firstSideEdge = null;\n\t\tlet previousSideEdge = null;\n\n\t\tfor ( let i = 0; i < horizon.length; i ++ ) {\n\n\t\t\tconst horizonEdge = horizon[ i ];\n\n\t\t\t// returns the right side edge\n\n\t\t\tconst sideEdge = this.addAdjoiningFace( eyeVertex, horizonEdge );\n\n\t\t\tif ( firstSideEdge === null ) {\n\n\t\t\t\tfirstSideEdge = sideEdge;\n\n\t\t\t} else {\n\n\t\t\t\t// joins face.getEdge( 1 ) with previousFace.getEdge( 0 )\n\n\t\t\t\tsideEdge.next.setTwin( previousSideEdge );\n\n\t\t\t}\n\n\t\t\tthis.newFaces.push( sideEdge.face );\n\t\t\tpreviousSideEdge = sideEdge;\n\n\t\t}\n\n\t\t// perform final join of new faces\n\n\t\tfirstSideEdge.next.setTwin( previousSideEdge );\n\n\t\treturn this;\n\n\t}\n\n\t// Adds a vertex to the hull\n\n\taddVertexToHull( eyeVertex ) {\n\n\t\tconst horizon = [];\n\n\t\tthis.unassigned.clear();\n\n\t\t// remove 'eyeVertex' from 'eyeVertex.face' so that it can't be added to the 'unassigned' vertex list\n\n\t\tthis.removeVertexFromFace( eyeVertex, eyeVertex.face );\n\n\t\tthis.computeHorizon( eyeVertex.point, null, eyeVertex.face, horizon );\n\n\t\tthis.addNewFaces( eyeVertex, horizon );\n\n\t\t// reassign 'unassigned' vertices to the new faces\n\n\t\tthis.resolveUnassignedPoints( this.newFaces );\n\n\t\treturn\tthis;\n\n\t}\n\n\tcleanup() {\n\n\t\tthis.assigned.clear();\n\t\tthis.unassigned.clear();\n\t\tthis.newFaces = [];\n\n\t\treturn this;\n\n\t}\n\n\tcompute() {\n\n\t\tlet vertex;\n\n\t\tthis.computeInitialHull();\n\n\t\t// add all available vertices gradually to the hull\n\n\t\twhile ( ( vertex = this.nextVertexToAdd() ) !== undefined ) {\n\n\t\t\tthis.addVertexToHull( vertex );\n\n\t\t}\n\n\t\tthis.reindexFaces();\n\n\t\tthis.cleanup();\n\n\t\treturn this;\n\n\t}\n\n}\n\n//\n\nclass Face {\n\n\tconstructor() {\n\n\t\tthis.normal = new Vector3();\n\t\tthis.midpoint = new Vector3();\n\t\tthis.area = 0;\n\n\t\tthis.constant = 0; // signed distance from face to the origin\n\t\tthis.outside = null; // reference to a vertex in a vertex list this face can see\n\t\tthis.mark = Visible;\n\t\tthis.edge = null;\n\n\t}\n\n\tstatic create( a, b, c ) {\n\n\t\tconst face = new Face();\n\n\t\tconst e0 = new HalfEdge( a, face );\n\t\tconst e1 = new HalfEdge( b, face );\n\t\tconst e2 = new HalfEdge( c, face );\n\n\t\t// join edges\n\n\t\te0.next = e2.prev = e1;\n\t\te1.next = e0.prev = e2;\n\t\te2.next = e1.prev = e0;\n\n\t\t// main half edge reference\n\n\t\tface.edge = e0;\n\n\t\treturn face.compute();\n\n\t}\n\n\tgetEdge( i ) {\n\n\t\tlet edge = this.edge;\n\n\t\twhile ( i > 0 ) {\n\n\t\t\tedge = edge.next;\n\t\t\ti --;\n\n\t\t}\n\n\t\twhile ( i < 0 ) {\n\n\t\t\tedge = edge.prev;\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn edge;\n\n\t}\n\n\tcompute() {\n\n\t\tconst a = this.edge.tail();\n\t\tconst b = this.edge.head();\n\t\tconst c = this.edge.next.head();\n\n\t\t_triangle.set( a.point, b.point, c.point );\n\n\t\t_triangle.getNormal( this.normal );\n\t\t_triangle.getMidpoint( this.midpoint );\n\t\tthis.area = _triangle.getArea();\n\n\t\tthis.constant = this.normal.dot( this.midpoint );\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) - this.constant;\n\n\t}\n\n}\n\n// Entity for a Doubly-Connected Edge List (DCEL).\n\nclass HalfEdge {\n\n\n\tconstructor( vertex, face ) {\n\n\t\tthis.vertex = vertex;\n\t\tthis.prev = null;\n\t\tthis.next = null;\n\t\tthis.twin = null;\n\t\tthis.face = face;\n\n\t}\n\n\thead() {\n\n\t\treturn this.vertex;\n\n\t}\n\n\ttail() {\n\n\t\treturn this.prev ? this.prev.vertex : null;\n\n\t}\n\n\tlength() {\n\n\t\tconst head = this.head();\n\t\tconst tail = this.tail();\n\n\t\tif ( tail !== null ) {\n\n\t\t\treturn tail.point.distanceTo( head.point );\n\n\t\t}\n\n\t\treturn - 1;\n\n\t}\n\n\tlengthSquared() {\n\n\t\tconst head = this.head();\n\t\tconst tail = this.tail();\n\n\t\tif ( tail !== null ) {\n\n\t\t\treturn tail.point.distanceToSquared( head.point );\n\n\t\t}\n\n\t\treturn - 1;\n\n\t}\n\n\tsetTwin( edge ) {\n\n\t\tthis.twin = edge;\n\t\tedge.twin = this;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// A vertex as a double linked list node.\n\nclass VertexNode {\n\n\tconstructor( point ) {\n\n\t\tthis.point = point;\n\t\tthis.prev = null;\n\t\tthis.next = null;\n\t\tthis.face = null; // the face that is able to see this vertex\n\n\t}\n\n}\n\n// A double linked list that contains vertex nodes.\n\nclass VertexList {\n\n\tconstructor() {\n\n\t\tthis.head = null;\n\t\tthis.tail = null;\n\n\t}\n\n\tfirst() {\n\n\t\treturn this.head;\n\n\t}\n\n\tlast() {\n\n\t\treturn this.tail;\n\n\t}\n\n\tclear() {\n\n\t\tthis.head = this.tail = null;\n\n\t\treturn this;\n\n\t}\n\n\t// Inserts a vertex before the target vertex\n\n\tinsertBefore( target, vertex ) {\n\n\t\tvertex.prev = target.prev;\n\t\tvertex.next = target;\n\n\t\tif ( vertex.prev === null ) {\n\n\t\t\tthis.head = vertex;\n\n\t\t} else {\n\n\t\t\tvertex.prev.next = vertex;\n\n\t\t}\n\n\t\ttarget.prev = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Inserts a vertex after the target vertex\n\n\tinsertAfter( target, vertex ) {\n\n\t\tvertex.prev = target;\n\t\tvertex.next = target.next;\n\n\t\tif ( vertex.next === null ) {\n\n\t\t\tthis.tail = vertex;\n\n\t\t} else {\n\n\t\t\tvertex.next.prev = vertex;\n\n\t\t}\n\n\t\ttarget.next = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Appends a vertex to the end of the linked list\n\n\tappend( vertex ) {\n\n\t\tif ( this.head === null ) {\n\n\t\t\tthis.head = vertex;\n\n\t\t} else {\n\n\t\t\tthis.tail.next = vertex;\n\n\t\t}\n\n\t\tvertex.prev = this.tail;\n\t\tvertex.next = null; // the tail has no subsequent vertex\n\n\t\tthis.tail = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Appends a chain of vertices where 'vertex' is the head.\n\n\tappendChain( vertex ) {\n\n\t\tif ( this.head === null ) {\n\n\t\t\tthis.head = vertex;\n\n\t\t} else {\n\n\t\t\tthis.tail.next = vertex;\n\n\t\t}\n\n\t\tvertex.prev = this.tail;\n\n\t\t// ensure that the 'tail' reference points to the last vertex of the chain\n\n\t\twhile ( vertex.next !== null ) {\n\n\t\t\tvertex = vertex.next;\n\n\t\t}\n\n\t\tthis.tail = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Removes a vertex from the linked list\n\n\tremove( vertex ) {\n\n\t\tif ( vertex.prev === null ) {\n\n\t\t\tthis.head = vertex.next;\n\n\t\t} else {\n\n\t\t\tvertex.prev.next = vertex.next;\n\n\t\t}\n\n\t\tif ( vertex.next === null ) {\n\n\t\t\tthis.tail = vertex.prev;\n\n\t\t} else {\n\n\t\t\tvertex.next.prev = vertex.prev;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Removes a list of vertices whose 'head' is 'a' and whose 'tail' is b\n\n\tremoveSubList( a, b ) {\n\n\t\tif ( a.prev === null ) {\n\n\t\t\tthis.head = b.next;\n\n\t\t} else {\n\n\t\t\ta.prev.next = b.next;\n\n\t\t}\n\n\t\tif ( b.next === null ) {\n\n\t\t\tthis.tail = a.prev;\n\n\t\t} else {\n\n\t\t\tb.next.prev = a.prev;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn this.head === null;\n\n\t}\n\n}\n\nexport { ConvexHull, Face, HalfEdge, VertexNode, VertexList };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute\n} from 'three';\nimport { ConvexHull } from '../math/ConvexHull.js';\n\nclass ConvexGeometry extends BufferGeometry {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\t// buffers\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\n\t\tconst convexHull = new ConvexHull().setFromPoints( points );\n\n\t\t// generate vertices and normals\n\n\t\tconst faces = convexHull.faces;\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\t\t\tlet edge = face.edge;\n\n\t\t\t// we move along a doubly-connected edge list to access all face points (see HalfEdge docs)\n\n\t\t\tdo {\n\n\t\t\t\tconst point = edge.head().point;\n\n\t\t\t\tvertices.push( point.x, point.y, point.z );\n\t\t\t\tnormals.push( face.normal.x, face.normal.y, face.normal.z );\n\n\t\t\t\tedge = edge.next;\n\n\t\t\t} while ( edge !== face.edge );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t}\n\n}\n\nexport { ConvexGeometry };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tMatrix4,\n\tVector3\n} from 'three';\n\n/**\n * You can use this geometry to create a decal mesh, that serves different kinds of purposes.\n * e.g. adding unique details to models, performing dynamic visual environmental changes or covering seams.\n *\n * Constructor parameter:\n *\n * mesh — Any mesh object\n * position — Position of the decal projector\n * orientation — Orientation of the decal projector\n * size — Size of the decal projector\n *\n * reference: http://blog.wolfire.com/2009/06/how-to-project-decals/\n *\n */\n\nclass DecalGeometry extends BufferGeometry {\n\n\tconstructor( mesh, position, orientation, size ) {\n\n\t\tsuper();\n\n\t\t// buffers\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helpers\n\n\t\tconst plane = new Vector3();\n\n\t\t// this matrix represents the transformation of the decal projector\n\n\t\tconst projectorMatrix = new Matrix4();\n\t\tprojectorMatrix.makeRotationFromEuler( orientation );\n\t\tprojectorMatrix.setPosition( position );\n\n\t\tconst projectorMatrixInverse = new Matrix4();\n\t\tprojectorMatrixInverse.copy( projectorMatrix ).invert();\n\n\t\t// generate buffers\n\n\t\tgenerate();\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generate() {\n\n\t\t\tlet decalVertices = [];\n\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst normal = new Vector3();\n\n\t\t\t// handle different geometry types\n\n\t\t\tconst geometry = mesh.geometry;\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst normalAttribute = geometry.attributes.normal;\n\n\t\t\t// first, create an array of 'DecalVertex' objects\n\t\t\t// three consecutive 'DecalVertex' objects represent a single face\n\t\t\t//\n\t\t\t// this data structure will be later used to perform the clipping\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst index = geometry.index;\n\n\t\t\t\tfor ( let i = 0; i < index.count; i ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( positionAttribute, index.getX( i ) );\n\t\t\t\t\tnormal.fromBufferAttribute( normalAttribute, index.getX( i ) );\n\n\t\t\t\t\tpushDecalVertex( decalVertices, vertex, normal );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tnormal.fromBufferAttribute( normalAttribute, i );\n\n\t\t\t\t\tpushDecalVertex( decalVertices, vertex, normal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// second, clip the geometry so that it doesn't extend out from the projector\n\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 1, 0, 0 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( - 1, 0, 0 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 0, 1, 0 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 0, - 1, 0 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 0, 0, 1 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 0, 0, - 1 ) );\n\n\t\t\t// third, generate final vertices, normals and uvs\n\n\t\t\tfor ( let i = 0; i < decalVertices.length; i ++ ) {\n\n\t\t\t\tconst decalVertex = decalVertices[ i ];\n\n\t\t\t\t// create texture coordinates (we are still in projector space)\n\n\t\t\t\tuvs.push(\n\t\t\t\t\t0.5 + ( decalVertex.position.x / size.x ),\n\t\t\t\t\t0.5 + ( decalVertex.position.y / size.y )\n\t\t\t\t);\n\n\t\t\t\t// transform the vertex back to world space\n\n\t\t\t\tdecalVertex.position.applyMatrix4( projectorMatrix );\n\n\t\t\t\t// now create vertex and normal buffer data\n\n\t\t\t\tvertices.push( decalVertex.position.x, decalVertex.position.y, decalVertex.position.z );\n\t\t\t\tnormals.push( decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushDecalVertex( decalVertices, vertex, normal ) {\n\n\t\t\t// transform the vertex to world space, then to projector space\n\n\t\t\tvertex.applyMatrix4( mesh.matrixWorld );\n\t\t\tvertex.applyMatrix4( projectorMatrixInverse );\n\n\t\t\tnormal.transformDirection( mesh.matrixWorld );\n\n\t\t\tdecalVertices.push( new DecalVertex( vertex.clone(), normal.clone() ) );\n\n\t\t}\n\n\t\tfunction clipGeometry( inVertices, plane ) {\n\n\t\t\tconst outVertices = [];\n\n\t\t\tconst s = 0.5 * Math.abs( size.dot( plane ) );\n\n\t\t\t// a single iteration clips one face,\n\t\t\t// which consists of three consecutive 'DecalVertex' objects\n\n\t\t\tfor ( let i = 0; i < inVertices.length; i += 3 ) {\n\n\t\t\t\tlet total = 0;\n\t\t\t\tlet nV1;\n\t\t\t\tlet nV2;\n\t\t\t\tlet nV3;\n\t\t\t\tlet nV4;\n\n\t\t\t\tconst d1 = inVertices[ i + 0 ].position.dot( plane ) - s;\n\t\t\t\tconst d2 = inVertices[ i + 1 ].position.dot( plane ) - s;\n\t\t\t\tconst d3 = inVertices[ i + 2 ].position.dot( plane ) - s;\n\n\t\t\t\tconst v1Out = d1 > 0;\n\t\t\t\tconst v2Out = d2 > 0;\n\t\t\t\tconst v3Out = d3 > 0;\n\n\t\t\t\t// calculate, how many vertices of the face lie outside of the clipping plane\n\n\t\t\t\ttotal = ( v1Out ? 1 : 0 ) + ( v2Out ? 1 : 0 ) + ( v3Out ? 1 : 0 );\n\n\t\t\t\tswitch ( total ) {\n\n\t\t\t\t\tcase 0: {\n\n\t\t\t\t\t\t// the entire face lies inside of the plane, no clipping needed\n\n\t\t\t\t\t\toutVertices.push( inVertices[ i ] );\n\t\t\t\t\t\toutVertices.push( inVertices[ i + 1 ] );\n\t\t\t\t\t\toutVertices.push( inVertices[ i + 2 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 1: {\n\n\t\t\t\t\t\t// one vertex lies outside of the plane, perform clipping\n\n\t\t\t\t\t\tif ( v1Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i + 1 ];\n\t\t\t\t\t\t\tnV2 = inVertices[ i + 2 ];\n\t\t\t\t\t\t\tnV3 = clip( inVertices[ i ], nV1, plane, s );\n\t\t\t\t\t\t\tnV4 = clip( inVertices[ i ], nV2, plane, s );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( v2Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i ];\n\t\t\t\t\t\t\tnV2 = inVertices[ i + 2 ];\n\t\t\t\t\t\t\tnV3 = clip( inVertices[ i + 1 ], nV1, plane, s );\n\t\t\t\t\t\t\tnV4 = clip( inVertices[ i + 1 ], nV2, plane, s );\n\n\t\t\t\t\t\t\toutVertices.push( nV3 );\n\t\t\t\t\t\t\toutVertices.push( nV2.clone() );\n\t\t\t\t\t\t\toutVertices.push( nV1.clone() );\n\n\t\t\t\t\t\t\toutVertices.push( nV2.clone() );\n\t\t\t\t\t\t\toutVertices.push( nV3.clone() );\n\t\t\t\t\t\t\toutVertices.push( nV4 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( v3Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i ];\n\t\t\t\t\t\t\tnV2 = inVertices[ i + 1 ];\n\t\t\t\t\t\t\tnV3 = clip( inVertices[ i + 2 ], nV1, plane, s );\n\t\t\t\t\t\t\tnV4 = clip( inVertices[ i + 2 ], nV2, plane, s );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\toutVertices.push( nV1.clone() );\n\t\t\t\t\t\toutVertices.push( nV2.clone() );\n\t\t\t\t\t\toutVertices.push( nV3 );\n\n\t\t\t\t\t\toutVertices.push( nV4 );\n\t\t\t\t\t\toutVertices.push( nV3.clone() );\n\t\t\t\t\t\toutVertices.push( nV2.clone() );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 2: {\n\n\t\t\t\t\t\t// two vertices lies outside of the plane, perform clipping\n\n\t\t\t\t\t\tif ( ! v1Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i ].clone();\n\t\t\t\t\t\t\tnV2 = clip( nV1, inVertices[ i + 1 ], plane, s );\n\t\t\t\t\t\t\tnV3 = clip( nV1, inVertices[ i + 2 ], plane, s );\n\t\t\t\t\t\t\toutVertices.push( nV1 );\n\t\t\t\t\t\t\toutVertices.push( nV2 );\n\t\t\t\t\t\t\toutVertices.push( nV3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! v2Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i + 1 ].clone();\n\t\t\t\t\t\t\tnV2 = clip( nV1, inVertices[ i + 2 ], plane, s );\n\t\t\t\t\t\t\tnV3 = clip( nV1, inVertices[ i ], plane, s );\n\t\t\t\t\t\t\toutVertices.push( nV1 );\n\t\t\t\t\t\t\toutVertices.push( nV2 );\n\t\t\t\t\t\t\toutVertices.push( nV3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! v3Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i + 2 ].clone();\n\t\t\t\t\t\t\tnV2 = clip( nV1, inVertices[ i ], plane, s );\n\t\t\t\t\t\t\tnV3 = clip( nV1, inVertices[ i + 1 ], plane, s );\n\t\t\t\t\t\t\toutVertices.push( nV1 );\n\t\t\t\t\t\t\toutVertices.push( nV2 );\n\t\t\t\t\t\t\toutVertices.push( nV3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 3: {\n\n\t\t\t\t\t\t// the entire face lies outside of the plane, so let's discard the corresponding vertices\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn outVertices;\n\n\t\t}\n\n\t\tfunction clip( v0, v1, p, s ) {\n\n\t\t\tconst d0 = v0.position.dot( p ) - s;\n\t\t\tconst d1 = v1.position.dot( p ) - s;\n\n\t\t\tconst s0 = d0 / ( d0 - d1 );\n\n\t\t\tconst v = new DecalVertex(\n\t\t\t\tnew Vector3(\n\t\t\t\t\tv0.position.x + s0 * ( v1.position.x - v0.position.x ),\n\t\t\t\t\tv0.position.y + s0 * ( v1.position.y - v0.position.y ),\n\t\t\t\t\tv0.position.z + s0 * ( v1.position.z - v0.position.z )\n\t\t\t\t),\n\t\t\t\tnew Vector3(\n\t\t\t\t\tv0.normal.x + s0 * ( v1.normal.x - v0.normal.x ),\n\t\t\t\t\tv0.normal.y + s0 * ( v1.normal.y - v0.normal.y ),\n\t\t\t\t\tv0.normal.z + s0 * ( v1.normal.z - v0.normal.z )\n\t\t\t\t)\n\t\t\t);\n\n\t\t\t// need to clip more values (texture coordinates)? do it this way:\n\t\t\t// intersectpoint.value = a.value + s * ( b.value - a.value );\n\n\t\t\treturn v;\n\n\t\t}\n\n\t}\n\n}\n\n// helper\n\nclass DecalVertex {\n\n\tconstructor( position, normal ) {\n\n\t\tthis.position = position;\n\t\tthis.normal = normal;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.position.clone(), this.normal.clone() );\n\n\t}\n\n}\n\nexport { DecalGeometry, DecalVertex };\n", "/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\nimport {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tVector3\n} from 'three';\n\nclass ParametricGeometry extends BufferGeometry {\n\n\tconstructor( func = ( u, v, target ) => target.set( u, v, Math.cos( u ) * Math.sin( v ) ), slices = 8, stacks = 8 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ParametricGeometry';\n\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tconst EPS = 0.00001;\n\n\t\tconst normal = new Vector3();\n\n\t\tconst p0 = new Vector3(), p1 = new Vector3();\n\t\tconst pu = new Vector3(), pv = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tconst sliceCount = slices + 1;\n\n\t\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\t\tconst v = i / stacks;\n\n\t\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\t\tconst u = j / slices;\n\n\t\t\t\t// vertex\n\n\t\t\t\tfunc( u, v, p0 );\n\t\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t\t// normal\n\n\t\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, v );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let i = 0; i < stacks; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\t\tconst a = i * sliceCount + j;\n\t\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\t\tconst d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t\t// faces one and two\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { ParametricGeometry };\n", "import {\n\tCurve,\n\tVector3\n} from 'three';\n\nimport { ParametricGeometry } from './ParametricGeometry.js';\n\n/**\n * Experimenting of primitive geometry creation using Surface Parametric equations\n */\n\nconst ParametricGeometries = {\n\n\tklein: function ( v, u, target ) {\n\n\t\tu *= Math.PI;\n\t\tv *= 2 * Math.PI;\n\n\t\tu = u * 2;\n\t\tlet x, z;\n\t\tif ( u < Math.PI ) {\n\n\t\t\tx = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( u ) * Math.cos( v );\n\t\t\tz = - 8 * Math.sin( u ) - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( u ) * Math.cos( v );\n\n\t\t} else {\n\n\t\t\tx = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( v + Math.PI );\n\t\t\tz = - 8 * Math.sin( u );\n\n\t\t}\n\n\t\tconst y = - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( v );\n\n\t\ttarget.set( x, y, z );\n\n\t},\n\n\tplane: function ( width, height ) {\n\n\t\treturn function ( u, v, target ) {\n\n\t\t\tconst x = u * width;\n\t\t\tconst y = 0;\n\t\t\tconst z = v * height;\n\n\t\t\ttarget.set( x, y, z );\n\n\t\t};\n\n\t},\n\n\tmobius: function ( u, t, target ) {\n\n\t\t// flat mobius strip\n\t\t// http://www.wolframalpha.com/input/?i=M%C3%B6bius+strip+parametric+equations&lk=1&a=ClashPrefs_*Surface.MoebiusStrip.SurfaceProperty.ParametricEquations-\n\t\tu = u - 0.5;\n\t\tconst v = 2 * Math.PI * t;\n\n\t\tconst a = 2;\n\n\t\tconst x = Math.cos( v ) * ( a + u * Math.cos( v / 2 ) );\n\t\tconst y = Math.sin( v ) * ( a + u * Math.cos( v / 2 ) );\n\t\tconst z = u * Math.sin( v / 2 );\n\n\t\ttarget.set( x, y, z );\n\n\t},\n\n\tmobius3d: function ( u, t, target ) {\n\n\t\t// volumetric mobius strip\n\n\t\tu *= Math.PI;\n\t\tt *= 2 * Math.PI;\n\n\t\tu = u * 2;\n\t\tconst phi = u / 2;\n\t\tconst major = 2.25, a = 0.125, b = 0.65;\n\n\t\tlet x = a * Math.cos( t ) * Math.cos( phi ) - b * Math.sin( t ) * Math.sin( phi );\n\t\tconst z = a * Math.cos( t ) * Math.sin( phi ) + b * Math.sin( t ) * Math.cos( phi );\n\t\tconst y = ( major + x ) * Math.sin( u );\n\t\tx = ( major + x ) * Math.cos( u );\n\n\t\ttarget.set( x, y, z );\n\n\t}\n\n};\n\n\n/*********************************************\n *\n * Parametric Replacement for TubeGeometry\n *\n *********************************************/\n\nParametricGeometries.TubeGeometry = class TubeGeometry extends ParametricGeometry {\n\n\tconstructor( path, segments = 64, radius = 1, segmentsRadius = 8, closed = false ) {\n\n\t\tconst numpoints = segments + 1;\n\n\t\tconst frames = path.computeFrenetFrames( segments, closed ),\n\t\t\ttangents = frames.tangents,\n\t\t\tnormals = frames.normals,\n\t\t\tbinormals = frames.binormals;\n\n\t\tconst position = new Vector3();\n\n\t\tfunction ParametricTube( u, v, target ) {\n\n\t\t\tv *= 2 * Math.PI;\n\n\t\t\tconst i = Math.floor( u * ( numpoints - 1 ) );\n\n\t\t\tpath.getPointAt( u, position );\n\n\t\t\tconst normal = normals[ i ];\n\t\t\tconst binormal = binormals[ i ];\n\n\t\t\tconst cx = - radius * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.\n\t\t\tconst cy = radius * Math.sin( v );\n\n\t\t\tposition.x += cx * normal.x + cy * binormal.x;\n\t\t\tposition.y += cx * normal.y + cy * binormal.y;\n\t\t\tposition.z += cx * normal.z + cy * binormal.z;\n\n\t\t\ttarget.copy( position );\n\n\t\t}\n\n\t\tsuper( ParametricTube, segments, segmentsRadius );\n\n\t\t// proxy internals\n\n\t\tthis.tangents = tangents;\n\t\tthis.normals = normals;\n\t\tthis.binormals = binormals;\n\n\t\tthis.path = path;\n\t\tthis.segments = segments;\n\t\tthis.radius = radius;\n\t\tthis.segmentsRadius = segmentsRadius;\n\t\tthis.closed = closed;\n\n\t}\n\n};\n\n\n/*********************************************\n *\n * Parametric Replacement for TorusKnotGeometry\n *\n *********************************************/\nParametricGeometries.TorusKnotGeometry = class TorusKnotGeometry extends ParametricGeometries.TubeGeometry {\n\n\tconstructor( radius = 200, tube = 40, segmentsT = 64, segmentsR = 8, p = 2, q = 3 ) {\n\n\t\tclass TorusKnotCurve extends Curve {\n\n\t\t\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\t\t\tconst point = optionalTarget;\n\n\t\t\t\tt *= Math.PI * 2;\n\n\t\t\t\tconst r = 0.5;\n\n\t\t\t\tconst x = ( 1 + r * Math.cos( q * t ) ) * Math.cos( p * t );\n\t\t\t\tconst y = ( 1 + r * Math.cos( q * t ) ) * Math.sin( p * t );\n\t\t\t\tconst z = r * Math.sin( q * t );\n\n\t\t\t\treturn point.set( x, y, z ).multiplyScalar( radius );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst segments = segmentsT;\n\t\tconst radiusSegments = segmentsR;\n\t\tconst extrudePath = new TorusKnotCurve();\n\n\t\tsuper( extrudePath, segments, tube, radiusSegments, true, false );\n\n\t\tthis.radius = radius;\n\t\tthis.tube = tube;\n\t\tthis.segmentsT = segmentsT;\n\t\tthis.segmentsR = segmentsR;\n\t\tthis.p = p;\n\t\tthis.q = q;\n\n\t}\n\n};\n\n/*********************************************\n *\n * Parametric Replacement for SphereGeometry\n *\n *********************************************/\nParametricGeometries.SphereGeometry = class SphereGeometry extends ParametricGeometry {\n\n\tconstructor( size, u, v ) {\n\n\t\tfunction sphere( u, v, target ) {\n\n\t\t\tu *= Math.PI;\n\t\t\tv *= 2 * Math.PI;\n\n\t\t\tconst x = size * Math.sin( u ) * Math.cos( v );\n\t\t\tconst y = size * Math.sin( u ) * Math.sin( v );\n\t\t\tconst z = size * Math.cos( u );\n\n\t\t\ttarget.set( x, y, z );\n\n\t\t}\n\n\t\tsuper( sphere, u, v );\n\n\t}\n\n};\n\n\n/*********************************************\n *\n * Parametric Replacement for PlaneGeometry\n *\n *********************************************/\n\nParametricGeometries.PlaneGeometry = class PlaneGeometry extends ParametricGeometry {\n\n\tconstructor( width, depth, segmentsWidth, segmentsDepth ) {\n\n\t\tfunction plane( u, v, target ) {\n\n\t\t\tconst x = u * width;\n\t\t\tconst y = 0;\n\t\t\tconst z = v * depth;\n\n\t\t\ttarget.set( x, y, z );\n\n\t\t}\n\n\t\tsuper( plane, segmentsWidth, segmentsDepth );\n\n\t}\n\n};\n\nexport { ParametricGeometries };\n", "import {\n\tBoxGeometry,\n\tVector3\n} from 'three';\n\nconst _tempNormal = new Vector3();\n\nfunction getUv( faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength ) {\n\n\tconst totArcLength = 2 * Math.PI * radius / 4;\n\n\t// length of the planes between the arcs on each axis\n\tconst centerLength = Math.max( sideLength - 2 * radius, 0 );\n\tconst halfArc = Math.PI / 4;\n\n\t// Get the vector projected onto the Y plane\n\t_tempNormal.copy( normal );\n\t_tempNormal[ projectionAxis ] = 0;\n\t_tempNormal.normalize();\n\n\t// total amount of UV space alloted to a single arc\n\tconst arcUvRatio = 0.5 * totArcLength / ( totArcLength + centerLength );\n\n\t// the distance along one arc the point is at\n\tconst arcAngleRatio = 1.0 - ( _tempNormal.angleTo( faceDirVector ) / halfArc );\n\n\tif ( Math.sign( _tempNormal[ uvAxis ] ) === 1 ) {\n\n\t\treturn arcAngleRatio * arcUvRatio;\n\n\t} else {\n\n\t\t// total amount of UV space alloted to the plane between the arcs\n\t\tconst lenUv = centerLength / ( totArcLength + centerLength );\n\t\treturn lenUv + arcUvRatio + arcUvRatio * ( 1.0 - arcAngleRatio );\n\n\t}\n\n}\n\nclass RoundedBoxGeometry extends BoxGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, segments = 2, radius = 0.1 ) {\n\n\t\t// ensure segments is odd so we have a plane connecting the rounded corners\n\t\tsegments = segments * 2 + 1;\n\n\t\t// ensure radius isn't bigger than shortest side\n\t\tradius = Math.min( width / 2, height / 2, depth / 2, radius );\n\n\t\tsuper( 1, 1, 1, segments, segments, segments );\n\n\t\t// if we just have one segment we're the same as a regular box\n\t\tif ( segments === 1 ) return;\n\n\t\tconst geometry2 = this.toNonIndexed();\n\n\t\tthis.index = null;\n\t\tthis.attributes.position = geometry2.attributes.position;\n\t\tthis.attributes.normal = geometry2.attributes.normal;\n\t\tthis.attributes.uv = geometry2.attributes.uv;\n\n\t\t//\n\n\t\tconst position = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst box = new Vector3( width, height, depth ).divideScalar( 2 ).subScalar( radius );\n\n\t\tconst positions = this.attributes.position.array;\n\t\tconst normals = this.attributes.normal.array;\n\t\tconst uvs = this.attributes.uv.array;\n\n\t\tconst faceTris = positions.length / 6;\n\t\tconst faceDirVector = new Vector3();\n\t\tconst halfSegmentSize = 0.5 / segments;\n\n\t\tfor ( let i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\tposition.fromArray( positions, i );\n\t\t\tnormal.copy( position );\n\t\t\tnormal.x -= Math.sign( normal.x ) * halfSegmentSize;\n\t\t\tnormal.y -= Math.sign( normal.y ) * halfSegmentSize;\n\t\t\tnormal.z -= Math.sign( normal.z ) * halfSegmentSize;\n\t\t\tnormal.normalize();\n\n\t\t\tpositions[ i + 0 ] = box.x * Math.sign( position.x ) + normal.x * radius;\n\t\t\tpositions[ i + 1 ] = box.y * Math.sign( position.y ) + normal.y * radius;\n\t\t\tpositions[ i + 2 ] = box.z * Math.sign( position.z ) + normal.z * radius;\n\n\t\t\tnormals[ i + 0 ] = normal.x;\n\t\t\tnormals[ i + 1 ] = normal.y;\n\t\t\tnormals[ i + 2 ] = normal.z;\n\n\t\t\tconst side = Math.floor( i / faceTris );\n\n\t\t\tswitch ( side ) {\n\n\t\t\t\tcase 0: // right\n\n\t\t\t\t\t// generate UVs along Z then Y\n\t\t\t\t\tfaceDirVector.set( 1, 0, 0 );\n\t\t\t\t\tuvs[ j + 0 ] = getUv( faceDirVector, normal, 'z', 'y', radius, depth );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'y', 'z', radius, height );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // left\n\n\t\t\t\t\t// generate UVs along Z then Y\n\t\t\t\t\tfaceDirVector.set( - 1, 0, 0 );\n\t\t\t\t\tuvs[ j + 0 ] = 1.0 - getUv( faceDirVector, normal, 'z', 'y', radius, depth );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'y', 'z', radius, height );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2: // top\n\n\t\t\t\t\t// generate UVs along X then Z\n\t\t\t\t\tfaceDirVector.set( 0, 1, 0 );\n\t\t\t\t\tuvs[ j + 0 ] = 1.0 - getUv( faceDirVector, normal, 'x', 'z', radius, width );\n\t\t\t\t\tuvs[ j + 1 ] = getUv( faceDirVector, normal, 'z', 'x', radius, depth );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3: // bottom\n\n\t\t\t\t\t// generate UVs along X then Z\n\t\t\t\t\tfaceDirVector.set( 0, - 1, 0 );\n\t\t\t\t\tuvs[ j + 0 ] = 1.0 - getUv( faceDirVector, normal, 'x', 'z', radius, width );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'z', 'x', radius, depth );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 4: // front\n\n\t\t\t\t\t// generate UVs along X then Y\n\t\t\t\t\tfaceDirVector.set( 0, 0, 1 );\n\t\t\t\t\tuvs[ j + 0 ] = 1.0 - getUv( faceDirVector, normal, 'x', 'y', radius, width );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'y', 'x', radius, height );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 5: // back\n\n\t\t\t\t\t// generate UVs along X then Y\n\t\t\t\t\tfaceDirVector.set( 0, 0, - 1 );\n\t\t\t\t\tuvs[ j + 0 ] = getUv( faceDirVector, normal, 'x', 'y', radius, width );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'y', 'x', radius, height );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { RoundedBoxGeometry };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tMatrix4,\n\tVector3,\n\tVector4\n} from 'three';\n\n/**\n * Tessellates the famous Utah teapot database by Martin Newell into triangles.\n *\n * Parameters: size = 50, segments = 10, bottom = true, lid = true, body = true,\n * fitLid = true, blinn = true\n *\n * size is a relative scale: I've scaled the teapot to fit vertically between -1 and 1.\n * Think of it as a \"radius\".\n * segments - number of line segments to subdivide each patch edge;\n * 1 is possible but gives degenerates, so two is the real minimum.\n * bottom - boolean, if true (default) then the bottom patches are added. Some consider\n * adding the bottom heresy, so set this to \"false\" to adhere to the One True Way.\n * lid - to remove the lid and look inside, set to true.\n * body - to remove the body and leave the lid, set this and \"bottom\" to false.\n * fitLid - the lid is a tad small in the original. This stretches it a bit so you can't\n * see the teapot's insides through the gap.\n * blinn - Jim Blinn scaled the original data vertically by dividing by about 1.3 to look\n * nicer. If you want to see the original teapot, similar to the real-world model, set\n * this to false. True by default.\n * See http://en.wikipedia.org/wiki/File:Original_Utah_Teapot.jpg for the original\n * real-world teapot (from http://en.wikipedia.org/wiki/Utah_teapot).\n *\n * Note that the bottom (the last four patches) is not flat - blame Frank Crow, not me.\n *\n * The teapot should normally be rendered as a double sided object, since for some\n * patches both sides can be seen, e.g., the gap around the lid and inside the spout.\n *\n * Segments 'n' determines the number of triangles output.\n * Total triangles = 32*2*n*n - 8*n [degenerates at the top and bottom cusps are deleted]\n *\n * size_factor # triangles\n * 1 56\n * 2 240\n * 3 552\n * 4 992\n *\n * 10 6320\n * 20 25440\n * 30 57360\n *\n * Code converted from my ancient SPD software, http://tog.acm.org/resources/SPD/\n * Created for the Udacity course \"Interactive Rendering\", http://bit.ly/ericity\n * YouTube video on teapot history: https://www.youtube.com/watch?v=DxMfblPzFNc\n *\n * See https://en.wikipedia.org/wiki/Utah_teapot for the history of the teapot\n *\n */\n\nclass TeapotGeometry extends BufferGeometry {\n\n\tconstructor( size = 50, segments = 10, bottom = true, lid = true, body = true, fitLid = true, blinn = true ) {\n\n\t\t// 32 * 4 * 4 Bezier spline patches\n\t\tconst teapotPatches = [\n\t\t\t/*rim*/\n\t\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t\t\t3, 16, 17, 18, 7, 19, 20, 21, 11, 22, 23, 24, 15, 25, 26, 27,\n\t\t\t18, 28, 29, 30, 21, 31, 32, 33, 24, 34, 35, 36, 27, 37, 38, 39,\n\t\t\t30, 40, 41, 0, 33, 42, 43, 4, 36, 44, 45, 8, 39, 46, 47, 12,\n\t\t\t/*body*/\n\t\t\t12, 13, 14, 15, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n\t\t\t15, 25, 26, 27, 51, 60, 61, 62, 55, 63, 64, 65, 59, 66, 67, 68,\n\t\t\t27, 37, 38, 39, 62, 69, 70, 71, 65, 72, 73, 74, 68, 75, 76, 77,\n\t\t\t39, 46, 47, 12, 71, 78, 79, 48, 74, 80, 81, 52, 77, 82, 83, 56,\n\t\t\t56, 57, 58, 59, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,\n\t\t\t59, 66, 67, 68, 87, 96, 97, 98, 91, 99, 100, 101, 95, 102, 103, 104,\n\t\t\t68, 75, 76, 77, 98, 105, 106, 107, 101, 108, 109, 110, 104, 111, 112, 113,\n\t\t\t77, 82, 83, 56, 107, 114, 115, 84, 110, 116, 117, 88, 113, 118, 119, 92,\n\t\t\t/*handle*/\n\t\t\t120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,\n\t\t\t123, 136, 137, 120, 127, 138, 139, 124, 131, 140, 141, 128, 135, 142, 143, 132,\n\t\t\t132, 133, 134, 135, 144, 145, 146, 147, 148, 149, 150, 151, 68, 152, 153, 154,\n\t\t\t135, 142, 143, 132, 147, 155, 156, 144, 151, 157, 158, 148, 154, 159, 160, 68,\n\t\t\t/*spout*/\n\t\t\t161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,\n\t\t\t164, 177, 178, 161, 168, 179, 180, 165, 172, 181, 182, 169, 176, 183, 184, 173,\n\t\t\t173, 174, 175, 176, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,\n\t\t\t176, 183, 184, 173, 188, 197, 198, 185, 192, 199, 200, 189, 196, 201, 202, 193,\n\t\t\t/*lid*/\n\t\t\t203, 203, 203, 203, 204, 205, 206, 207, 208, 208, 208, 208, 209, 210, 211, 212,\n\t\t\t203, 203, 203, 203, 207, 213, 214, 215, 208, 208, 208, 208, 212, 216, 217, 218,\n\t\t\t203, 203, 203, 203, 215, 219, 220, 221, 208, 208, 208, 208, 218, 222, 223, 224,\n\t\t\t203, 203, 203, 203, 221, 225, 226, 204, 208, 208, 208, 208, 224, 227, 228, 209,\n\t\t\t209, 210, 211, 212, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,\n\t\t\t212, 216, 217, 218, 232, 241, 242, 243, 236, 244, 245, 246, 240, 247, 248, 249,\n\t\t\t218, 222, 223, 224, 243, 250, 251, 252, 246, 253, 254, 255, 249, 256, 257, 258,\n\t\t\t224, 227, 228, 209, 252, 259, 260, 229, 255, 261, 262, 233, 258, 263, 264, 237,\n\t\t\t/*bottom*/\n\t\t\t265, 265, 265, 265, 266, 267, 268, 269, 270, 271, 272, 273, 92, 119, 118, 113,\n\t\t\t265, 265, 265, 265, 269, 274, 275, 276, 273, 277, 278, 279, 113, 112, 111, 104,\n\t\t\t265, 265, 265, 265, 276, 280, 281, 282, 279, 283, 284, 285, 104, 103, 102, 95,\n\t\t\t265, 265, 265, 265, 282, 286, 287, 266, 285, 288, 289, 270, 95, 94, 93, 92\n\t\t];\n\n\t\tconst teapotVertices = [\n\t\t\t1.4, 0, 2.4,\n\t\t\t1.4, - 0.784, 2.4,\n\t\t\t0.784, - 1.4, 2.4,\n\t\t\t0, - 1.4, 2.4,\n\t\t\t1.3375, 0, 2.53125,\n\t\t\t1.3375, - 0.749, 2.53125,\n\t\t\t0.749, - 1.3375, 2.53125,\n\t\t\t0, - 1.3375, 2.53125,\n\t\t\t1.4375, 0, 2.53125,\n\t\t\t1.4375, - 0.805, 2.53125,\n\t\t\t0.805, - 1.4375, 2.53125,\n\t\t\t0, - 1.4375, 2.53125,\n\t\t\t1.5, 0, 2.4,\n\t\t\t1.5, - 0.84, 2.4,\n\t\t\t0.84, - 1.5, 2.4,\n\t\t\t0, - 1.5, 2.4,\n\t\t\t- 0.784, - 1.4, 2.4,\n\t\t\t- 1.4, - 0.784, 2.4,\n\t\t\t- 1.4, 0, 2.4,\n\t\t\t- 0.749, - 1.3375, 2.53125,\n\t\t\t- 1.3375, - 0.749, 2.53125,\n\t\t\t- 1.3375, 0, 2.53125,\n\t\t\t- 0.805, - 1.4375, 2.53125,\n\t\t\t- 1.4375, - 0.805, 2.53125,\n\t\t\t- 1.4375, 0, 2.53125,\n\t\t\t- 0.84, - 1.5, 2.4,\n\t\t\t- 1.5, - 0.84, 2.4,\n\t\t\t- 1.5, 0, 2.4,\n\t\t\t- 1.4, 0.784, 2.4,\n\t\t\t- 0.784, 1.4, 2.4,\n\t\t\t0, 1.4, 2.4,\n\t\t\t- 1.3375, 0.749, 2.53125,\n\t\t\t- 0.749, 1.3375, 2.53125,\n\t\t\t0, 1.3375, 2.53125,\n\t\t\t- 1.4375, 0.805, 2.53125,\n\t\t\t- 0.805, 1.4375, 2.53125,\n\t\t\t0, 1.4375, 2.53125,\n\t\t\t- 1.5, 0.84, 2.4,\n\t\t\t- 0.84, 1.5, 2.4,\n\t\t\t0, 1.5, 2.4,\n\t\t\t0.784, 1.4, 2.4,\n\t\t\t1.4, 0.784, 2.4,\n\t\t\t0.749, 1.3375, 2.53125,\n\t\t\t1.3375, 0.749, 2.53125,\n\t\t\t0.805, 1.4375, 2.53125,\n\t\t\t1.4375, 0.805, 2.53125,\n\t\t\t0.84, 1.5, 2.4,\n\t\t\t1.5, 0.84, 2.4,\n\t\t\t1.75, 0, 1.875,\n\t\t\t1.75, - 0.98, 1.875,\n\t\t\t0.98, - 1.75, 1.875,\n\t\t\t0, - 1.75, 1.875,\n\t\t\t2, 0, 1.35,\n\t\t\t2, - 1.12, 1.35,\n\t\t\t1.12, - 2, 1.35,\n\t\t\t0, - 2, 1.35,\n\t\t\t2, 0, 0.9,\n\t\t\t2, - 1.12, 0.9,\n\t\t\t1.12, - 2, 0.9,\n\t\t\t0, - 2, 0.9,\n\t\t\t- 0.98, - 1.75, 1.875,\n\t\t\t- 1.75, - 0.98, 1.875,\n\t\t\t- 1.75, 0, 1.875,\n\t\t\t- 1.12, - 2, 1.35,\n\t\t\t- 2, - 1.12, 1.35,\n\t\t\t- 2, 0, 1.35,\n\t\t\t- 1.12, - 2, 0.9,\n\t\t\t- 2, - 1.12, 0.9,\n\t\t\t- 2, 0, 0.9,\n\t\t\t- 1.75, 0.98, 1.875,\n\t\t\t- 0.98, 1.75, 1.875,\n\t\t\t0, 1.75, 1.875,\n\t\t\t- 2, 1.12, 1.35,\n\t\t\t- 1.12, 2, 1.35,\n\t\t\t0, 2, 1.35,\n\t\t\t- 2, 1.12, 0.9,\n\t\t\t- 1.12, 2, 0.9,\n\t\t\t0, 2, 0.9,\n\t\t\t0.98, 1.75, 1.875,\n\t\t\t1.75, 0.98, 1.875,\n\t\t\t1.12, 2, 1.35,\n\t\t\t2, 1.12, 1.35,\n\t\t\t1.12, 2, 0.9,\n\t\t\t2, 1.12, 0.9,\n\t\t\t2, 0, 0.45,\n\t\t\t2, - 1.12, 0.45,\n\t\t\t1.12, - 2, 0.45,\n\t\t\t0, - 2, 0.45,\n\t\t\t1.5, 0, 0.225,\n\t\t\t1.5, - 0.84, 0.225,\n\t\t\t0.84, - 1.5, 0.225,\n\t\t\t0, - 1.5, 0.225,\n\t\t\t1.5, 0, 0.15,\n\t\t\t1.5, - 0.84, 0.15,\n\t\t\t0.84, - 1.5, 0.15,\n\t\t\t0, - 1.5, 0.15,\n\t\t\t- 1.12, - 2, 0.45,\n\t\t\t- 2, - 1.12, 0.45,\n\t\t\t- 2, 0, 0.45,\n\t\t\t- 0.84, - 1.5, 0.225,\n\t\t\t- 1.5, - 0.84, 0.225,\n\t\t\t- 1.5, 0, 0.225,\n\t\t\t- 0.84, - 1.5, 0.15,\n\t\t\t- 1.5, - 0.84, 0.15,\n\t\t\t- 1.5, 0, 0.15,\n\t\t\t- 2, 1.12, 0.45,\n\t\t\t- 1.12, 2, 0.45,\n\t\t\t0, 2, 0.45,\n\t\t\t- 1.5, 0.84, 0.225,\n\t\t\t- 0.84, 1.5, 0.225,\n\t\t\t0, 1.5, 0.225,\n\t\t\t- 1.5, 0.84, 0.15,\n\t\t\t- 0.84, 1.5, 0.15,\n\t\t\t0, 1.5, 0.15,\n\t\t\t1.12, 2, 0.45,\n\t\t\t2, 1.12, 0.45,\n\t\t\t0.84, 1.5, 0.225,\n\t\t\t1.5, 0.84, 0.225,\n\t\t\t0.84, 1.5, 0.15,\n\t\t\t1.5, 0.84, 0.15,\n\t\t\t- 1.6, 0, 2.025,\n\t\t\t- 1.6, - 0.3, 2.025,\n\t\t\t- 1.5, - 0.3, 2.25,\n\t\t\t- 1.5, 0, 2.25,\n\t\t\t- 2.3, 0, 2.025,\n\t\t\t- 2.3, - 0.3, 2.025,\n\t\t\t- 2.5, - 0.3, 2.25,\n\t\t\t- 2.5, 0, 2.25,\n\t\t\t- 2.7, 0, 2.025,\n\t\t\t- 2.7, - 0.3, 2.025,\n\t\t\t- 3, - 0.3, 2.25,\n\t\t\t- 3, 0, 2.25,\n\t\t\t- 2.7, 0, 1.8,\n\t\t\t- 2.7, - 0.3, 1.8,\n\t\t\t- 3, - 0.3, 1.8,\n\t\t\t- 3, 0, 1.8,\n\t\t\t- 1.5, 0.3, 2.25,\n\t\t\t- 1.6, 0.3, 2.025,\n\t\t\t- 2.5, 0.3, 2.25,\n\t\t\t- 2.3, 0.3, 2.025,\n\t\t\t- 3, 0.3, 2.25,\n\t\t\t- 2.7, 0.3, 2.025,\n\t\t\t- 3, 0.3, 1.8,\n\t\t\t- 2.7, 0.3, 1.8,\n\t\t\t- 2.7, 0, 1.575,\n\t\t\t- 2.7, - 0.3, 1.575,\n\t\t\t- 3, - 0.3, 1.35,\n\t\t\t- 3, 0, 1.35,\n\t\t\t- 2.5, 0, 1.125,\n\t\t\t- 2.5, - 0.3, 1.125,\n\t\t\t- 2.65, - 0.3, 0.9375,\n\t\t\t- 2.65, 0, 0.9375,\n\t\t\t- 2, - 0.3, 0.9,\n\t\t\t- 1.9, - 0.3, 0.6,\n\t\t\t- 1.9, 0, 0.6,\n\t\t\t- 3, 0.3, 1.35,\n\t\t\t- 2.7, 0.3, 1.575,\n\t\t\t- 2.65, 0.3, 0.9375,\n\t\t\t- 2.5, 0.3, 1.125,\n\t\t\t- 1.9, 0.3, 0.6,\n\t\t\t- 2, 0.3, 0.9,\n\t\t\t1.7, 0, 1.425,\n\t\t\t1.7, - 0.66, 1.425,\n\t\t\t1.7, - 0.66, 0.6,\n\t\t\t1.7, 0, 0.6,\n\t\t\t2.6, 0, 1.425,\n\t\t\t2.6, - 0.66, 1.425,\n\t\t\t3.1, - 0.66, 0.825,\n\t\t\t3.1, 0, 0.825,\n\t\t\t2.3, 0, 2.1,\n\t\t\t2.3, - 0.25, 2.1,\n\t\t\t2.4, - 0.25, 2.025,\n\t\t\t2.4, 0, 2.025,\n\t\t\t2.7, 0, 2.4,\n\t\t\t2.7, - 0.25, 2.4,\n\t\t\t3.3, - 0.25, 2.4,\n\t\t\t3.3, 0, 2.4,\n\t\t\t1.7, 0.66, 0.6,\n\t\t\t1.7, 0.66, 1.425,\n\t\t\t3.1, 0.66, 0.825,\n\t\t\t2.6, 0.66, 1.425,\n\t\t\t2.4, 0.25, 2.025,\n\t\t\t2.3, 0.25, 2.1,\n\t\t\t3.3, 0.25, 2.4,\n\t\t\t2.7, 0.25, 2.4,\n\t\t\t2.8, 0, 2.475,\n\t\t\t2.8, - 0.25, 2.475,\n\t\t\t3.525, - 0.25, 2.49375,\n\t\t\t3.525, 0, 2.49375,\n\t\t\t2.9, 0, 2.475,\n\t\t\t2.9, - 0.15, 2.475,\n\t\t\t3.45, - 0.15, 2.5125,\n\t\t\t3.45, 0, 2.5125,\n\t\t\t2.8, 0, 2.4,\n\t\t\t2.8, - 0.15, 2.4,\n\t\t\t3.2, - 0.15, 2.4,\n\t\t\t3.2, 0, 2.4,\n\t\t\t3.525, 0.25, 2.49375,\n\t\t\t2.8, 0.25, 2.475,\n\t\t\t3.45, 0.15, 2.5125,\n\t\t\t2.9, 0.15, 2.475,\n\t\t\t3.2, 0.15, 2.4,\n\t\t\t2.8, 0.15, 2.4,\n\t\t\t0, 0, 3.15,\n\t\t\t0.8, 0, 3.15,\n\t\t\t0.8, - 0.45, 3.15,\n\t\t\t0.45, - 0.8, 3.15,\n\t\t\t0, - 0.8, 3.15,\n\t\t\t0, 0, 2.85,\n\t\t\t0.2, 0, 2.7,\n\t\t\t0.2, - 0.112, 2.7,\n\t\t\t0.112, - 0.2, 2.7,\n\t\t\t0, - 0.2, 2.7,\n\t\t\t- 0.45, - 0.8, 3.15,\n\t\t\t- 0.8, - 0.45, 3.15,\n\t\t\t- 0.8, 0, 3.15,\n\t\t\t- 0.112, - 0.2, 2.7,\n\t\t\t- 0.2, - 0.112, 2.7,\n\t\t\t- 0.2, 0, 2.7,\n\t\t\t- 0.8, 0.45, 3.15,\n\t\t\t- 0.45, 0.8, 3.15,\n\t\t\t0, 0.8, 3.15,\n\t\t\t- 0.2, 0.112, 2.7,\n\t\t\t- 0.112, 0.2, 2.7,\n\t\t\t0, 0.2, 2.7,\n\t\t\t0.45, 0.8, 3.15,\n\t\t\t0.8, 0.45, 3.15,\n\t\t\t0.112, 0.2, 2.7,\n\t\t\t0.2, 0.112, 2.7,\n\t\t\t0.4, 0, 2.55,\n\t\t\t0.4, - 0.224, 2.55,\n\t\t\t0.224, - 0.4, 2.55,\n\t\t\t0, - 0.4, 2.55,\n\t\t\t1.3, 0, 2.55,\n\t\t\t1.3, - 0.728, 2.55,\n\t\t\t0.728, - 1.3, 2.55,\n\t\t\t0, - 1.3, 2.55,\n\t\t\t1.3, 0, 2.4,\n\t\t\t1.3, - 0.728, 2.4,\n\t\t\t0.728, - 1.3, 2.4,\n\t\t\t0, - 1.3, 2.4,\n\t\t\t- 0.224, - 0.4, 2.55,\n\t\t\t- 0.4, - 0.224, 2.55,\n\t\t\t- 0.4, 0, 2.55,\n\t\t\t- 0.728, - 1.3, 2.55,\n\t\t\t- 1.3, - 0.728, 2.55,\n\t\t\t- 1.3, 0, 2.55,\n\t\t\t- 0.728, - 1.3, 2.4,\n\t\t\t- 1.3, - 0.728, 2.4,\n\t\t\t- 1.3, 0, 2.4,\n\t\t\t- 0.4, 0.224, 2.55,\n\t\t\t- 0.224, 0.4, 2.55,\n\t\t\t0, 0.4, 2.55,\n\t\t\t- 1.3, 0.728, 2.55,\n\t\t\t- 0.728, 1.3, 2.55,\n\t\t\t0, 1.3, 2.55,\n\t\t\t- 1.3, 0.728, 2.4,\n\t\t\t- 0.728, 1.3, 2.4,\n\t\t\t0, 1.3, 2.4,\n\t\t\t0.224, 0.4, 2.55,\n\t\t\t0.4, 0.224, 2.55,\n\t\t\t0.728, 1.3, 2.55,\n\t\t\t1.3, 0.728, 2.55,\n\t\t\t0.728, 1.3, 2.4,\n\t\t\t1.3, 0.728, 2.4,\n\t\t\t0, 0, 0,\n\t\t\t1.425, 0, 0,\n\t\t\t1.425, 0.798, 0,\n\t\t\t0.798, 1.425, 0,\n\t\t\t0, 1.425, 0,\n\t\t\t1.5, 0, 0.075,\n\t\t\t1.5, 0.84, 0.075,\n\t\t\t0.84, 1.5, 0.075,\n\t\t\t0, 1.5, 0.075,\n\t\t\t- 0.798, 1.425, 0,\n\t\t\t- 1.425, 0.798, 0,\n\t\t\t- 1.425, 0, 0,\n\t\t\t- 0.84, 1.5, 0.075,\n\t\t\t- 1.5, 0.84, 0.075,\n\t\t\t- 1.5, 0, 0.075,\n\t\t\t- 1.425, - 0.798, 0,\n\t\t\t- 0.798, - 1.425, 0,\n\t\t\t0, - 1.425, 0,\n\t\t\t- 1.5, - 0.84, 0.075,\n\t\t\t- 0.84, - 1.5, 0.075,\n\t\t\t0, - 1.5, 0.075,\n\t\t\t0.798, - 1.425, 0,\n\t\t\t1.425, - 0.798, 0,\n\t\t\t0.84, - 1.5, 0.075,\n\t\t\t1.5, - 0.84, 0.075\n\t\t];\n\n\t\tsuper();\n\n\t\t// number of segments per patch\n\t\tsegments = Math.max( 2, Math.floor( segments ) );\n\n\t\t// Jim Blinn scaled the teapot down in size by about 1.3 for\n\t\t// some rendering tests. He liked the new proportions that he kept\n\t\t// the data in this form. The model was distributed with these new\n\t\t// proportions and became the norm. Trivia: comparing images of the\n\t\t// real teapot and the computer model, the ratio for the bowl of the\n\t\t// real teapot is more like 1.25, but since 1.3 is the traditional\n\t\t// value given, we use it here.\n\t\tconst blinnScale = 1.3;\n\n\t\t// scale the size to be the real scaling factor\n\t\tconst maxHeight = 3.15 * ( blinn ? 1 : blinnScale );\n\n\t\tconst maxHeight2 = maxHeight / 2;\n\t\tconst trueSize = size / maxHeight2;\n\n\t\t// Number of elements depends on what is needed. Subtract degenerate\n\t\t// triangles at tip of bottom and lid out in advance.\n\t\tlet numTriangles = bottom ? ( 8 * segments - 4 ) * segments : 0;\n\t\tnumTriangles += lid ? ( 16 * segments - 4 ) * segments : 0;\n\t\tnumTriangles += body ? 40 * segments * segments : 0;\n\n\t\tconst indices = new Uint32Array( numTriangles * 3 );\n\n\t\tlet numVertices = bottom ? 4 : 0;\n\t\tnumVertices += lid ? 8 : 0;\n\t\tnumVertices += body ? 20 : 0;\n\t\tnumVertices *= ( segments + 1 ) * ( segments + 1 );\n\n\t\tconst vertices = new Float32Array( numVertices * 3 );\n\t\tconst normals = new Float32Array( numVertices * 3 );\n\t\tconst uvs = new Float32Array( numVertices * 2 );\n\n\t\t// Bezier form\n\t\tconst ms = new Matrix4();\n\t\tms.set(\n\t\t\t- 1.0, 3.0, - 3.0, 1.0,\n\t\t\t3.0, - 6.0, 3.0, 0.0,\n\t\t\t- 3.0, 3.0, 0.0, 0.0,\n\t\t\t1.0, 0.0, 0.0, 0.0 );\n\n\t\tconst g = [];\n\n\t\tconst sp = [];\n\t\tconst tp = [];\n\t\tconst dsp = [];\n\t\tconst dtp = [];\n\n\t\t// M * G * M matrix, sort of see\n\t\t// http://www.cs.helsinki.fi/group/goa/mallinnus/curves/surfaces.html\n\t\tconst mgm = [];\n\n\t\tconst vert = [];\n\t\tconst sdir = [];\n\t\tconst tdir = [];\n\n\t\tconst norm = new Vector3();\n\n\t\tlet tcoord;\n\n\t\tlet sval;\n\t\tlet tval;\n\t\tlet p;\n\t\tlet dsval = 0;\n\t\tlet dtval = 0;\n\n\t\tconst normOut = new Vector3();\n\n\t\tconst gmx = new Matrix4();\n\t\tconst tmtx = new Matrix4();\n\n\t\tconst vsp = new Vector4();\n\t\tconst vtp = new Vector4();\n\t\tconst vdsp = new Vector4();\n\t\tconst vdtp = new Vector4();\n\n\t\tconst vsdir = new Vector3();\n\t\tconst vtdir = new Vector3();\n\n\t\tconst mst = ms.clone();\n\t\tmst.transpose();\n\n\t\t// internal function: test if triangle has any matching vertices;\n\t\t// if so, don't save triangle, since it won't display anything.\n\t\tconst notDegenerate = ( vtx1, vtx2, vtx3 ) => // if any vertex matches, return false\n\t\t\t! ( ( ( vertices[ vtx1 * 3 ] === vertices[ vtx2 * 3 ] ) &&\n\t\t\t\t\t( vertices[ vtx1 * 3 + 1 ] === vertices[ vtx2 * 3 + 1 ] ) &&\n\t\t\t\t\t( vertices[ vtx1 * 3 + 2 ] === vertices[ vtx2 * 3 + 2 ] ) ) ||\n\t\t\t\t\t( ( vertices[ vtx1 * 3 ] === vertices[ vtx3 * 3 ] ) &&\n\t\t\t\t\t( vertices[ vtx1 * 3 + 1 ] === vertices[ vtx3 * 3 + 1 ] ) &&\n\t\t\t\t\t( vertices[ vtx1 * 3 + 2 ] === vertices[ vtx3 * 3 + 2 ] ) ) || ( vertices[ vtx2 * 3 ] === vertices[ vtx3 * 3 ] ) &&\n\t\t\t\t\t( vertices[ vtx2 * 3 + 1 ] === vertices[ vtx3 * 3 + 1 ] ) &&\n\t\t\t\t\t( vertices[ vtx2 * 3 + 2 ] === vertices[ vtx3 * 3 + 2 ] ) );\n\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tmgm[ i ] = new Matrix4();\n\n\t\t}\n\n\t\tconst minPatches = body ? 0 : 20;\n\t\tconst maxPatches = bottom ? 32 : 28;\n\n\t\tconst vertPerRow = segments + 1;\n\n\t\tlet surfCount = 0;\n\n\t\tlet vertCount = 0;\n\t\tlet normCount = 0;\n\t\tlet uvCount = 0;\n\n\t\tlet indexCount = 0;\n\n\t\tfor ( let surf = minPatches; surf < maxPatches; surf ++ ) {\n\n\t\t\t// lid is in the middle of the data, patches 20-27,\n\t\t\t// so ignore it for this part of the loop if the lid is not desired\n\t\t\tif ( lid || ( surf < 20 || surf >= 28 ) ) {\n\n\t\t\t\t// get M * G * M matrix for x,y,z\n\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t// get control patches\n\t\t\t\t\tfor ( let r = 0; r < 4; r ++ ) {\n\n\t\t\t\t\t\tfor ( let c = 0; c < 4; c ++ ) {\n\n\t\t\t\t\t\t\t// transposed\n\t\t\t\t\t\t\tg[ c * 4 + r ] = teapotVertices[ teapotPatches[ surf * 16 + r * 4 + c ] * 3 + i ];\n\n\t\t\t\t\t\t\t// is the lid to be made larger, and is this a point on the lid\n\t\t\t\t\t\t\t// that is X or Y?\n\t\t\t\t\t\t\tif ( fitLid && ( surf >= 20 && surf < 28 ) && ( i !== 2 ) ) {\n\n\t\t\t\t\t\t\t\t// increase XY size by 7.7%, found empirically. I don't\n\t\t\t\t\t\t\t\t// increase Z so that the teapot will continue to fit in the\n\t\t\t\t\t\t\t\t// space -1 to 1 for Y (Y is up for the final model).\n\t\t\t\t\t\t\t\tg[ c * 4 + r ] *= 1.077;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Blinn \"fixed\" the teapot by dividing Z by blinnScale, and that's the\n\t\t\t\t\t\t\t// data we now use. The original teapot is taller. Fix it:\n\t\t\t\t\t\t\tif ( ! blinn && ( i === 2 ) ) {\n\n\t\t\t\t\t\t\t\tg[ c * 4 + r ] *= blinnScale;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgmx.set( g[ 0 ], g[ 1 ], g[ 2 ], g[ 3 ], g[ 4 ], g[ 5 ], g[ 6 ], g[ 7 ], g[ 8 ], g[ 9 ], g[ 10 ], g[ 11 ], g[ 12 ], g[ 13 ], g[ 14 ], g[ 15 ] );\n\n\t\t\t\t\ttmtx.multiplyMatrices( gmx, ms );\n\t\t\t\t\tmgm[ i ].multiplyMatrices( mst, tmtx );\n\n\t\t\t\t}\n\n\t\t\t\t// step along, get points, and output\n\t\t\t\tfor ( let sstep = 0; sstep <= segments; sstep ++ ) {\n\n\t\t\t\t\tconst s = sstep / segments;\n\n\t\t\t\t\tfor ( let tstep = 0; tstep <= segments; tstep ++ ) {\n\n\t\t\t\t\t\tconst t = tstep / segments;\n\n\t\t\t\t\t\t// point from basis\n\t\t\t\t\t\t// get power vectors and their derivatives\n\t\t\t\t\t\tfor ( p = 4, sval = tval = 1.0; p --; ) {\n\n\t\t\t\t\t\t\tsp[ p ] = sval;\n\t\t\t\t\t\t\ttp[ p ] = tval;\n\t\t\t\t\t\t\tsval *= s;\n\t\t\t\t\t\t\ttval *= t;\n\n\t\t\t\t\t\t\tif ( p === 3 ) {\n\n\t\t\t\t\t\t\t\tdsp[ p ] = dtp[ p ] = 0.0;\n\t\t\t\t\t\t\t\tdsval = dtval = 1.0;\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tdsp[ p ] = dsval * ( 3 - p );\n\t\t\t\t\t\t\t\tdtp[ p ] = dtval * ( 3 - p );\n\t\t\t\t\t\t\t\tdsval *= s;\n\t\t\t\t\t\t\t\tdtval *= t;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvsp.fromArray( sp );\n\t\t\t\t\t\tvtp.fromArray( tp );\n\t\t\t\t\t\tvdsp.fromArray( dsp );\n\t\t\t\t\t\tvdtp.fromArray( dtp );\n\n\t\t\t\t\t\t// do for x,y,z\n\t\t\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\t// multiply power vectors times matrix to get value\n\t\t\t\t\t\t\ttcoord = vsp.clone();\n\t\t\t\t\t\t\ttcoord.applyMatrix4( mgm[ i ] );\n\t\t\t\t\t\t\tvert[ i ] = tcoord.dot( vtp );\n\n\t\t\t\t\t\t\t// get s and t tangent vectors\n\t\t\t\t\t\t\ttcoord = vdsp.clone();\n\t\t\t\t\t\t\ttcoord.applyMatrix4( mgm[ i ] );\n\t\t\t\t\t\t\tsdir[ i ] = tcoord.dot( vtp );\n\n\t\t\t\t\t\t\ttcoord = vsp.clone();\n\t\t\t\t\t\t\ttcoord.applyMatrix4( mgm[ i ] );\n\t\t\t\t\t\t\ttdir[ i ] = tcoord.dot( vdtp );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find normal\n\t\t\t\t\t\tvsdir.fromArray( sdir );\n\t\t\t\t\t\tvtdir.fromArray( tdir );\n\t\t\t\t\t\tnorm.crossVectors( vtdir, vsdir );\n\t\t\t\t\t\tnorm.normalize();\n\n\t\t\t\t\t\t// if X and Z length is 0, at the cusp, so point the normal up or down, depending on patch number\n\t\t\t\t\t\tif ( vert[ 0 ] === 0 && vert[ 1 ] === 0 ) {\n\n\t\t\t\t\t\t\t// if above the middle of the teapot, normal points up, else down\n\t\t\t\t\t\t\tnormOut.set( 0, vert[ 2 ] > maxHeight2 ? 1 : - 1, 0 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// standard output: rotate on X axis\n\t\t\t\t\t\t\tnormOut.set( norm.x, norm.z, - norm.y );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// store it all\n\t\t\t\t\t\tvertices[ vertCount ++ ] = trueSize * vert[ 0 ];\n\t\t\t\t\t\tvertices[ vertCount ++ ] = trueSize * ( vert[ 2 ] - maxHeight2 );\n\t\t\t\t\t\tvertices[ vertCount ++ ] = - trueSize * vert[ 1 ];\n\n\t\t\t\t\t\tnormals[ normCount ++ ] = normOut.x;\n\t\t\t\t\t\tnormals[ normCount ++ ] = normOut.y;\n\t\t\t\t\t\tnormals[ normCount ++ ] = normOut.z;\n\n\t\t\t\t\t\tuvs[ uvCount ++ ] = 1 - t;\n\t\t\t\t\t\tuvs[ uvCount ++ ] = 1 - s;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// save the faces\n\t\t\t\tfor ( let sstep = 0; sstep < segments; sstep ++ ) {\n\n\t\t\t\t\tfor ( let tstep = 0; tstep < segments; tstep ++ ) {\n\n\t\t\t\t\t\tconst v1 = surfCount * vertPerRow * vertPerRow + sstep * vertPerRow + tstep;\n\t\t\t\t\t\tconst v2 = v1 + 1;\n\t\t\t\t\t\tconst v3 = v2 + vertPerRow;\n\t\t\t\t\t\tconst v4 = v1 + vertPerRow;\n\n\t\t\t\t\t\t// Normals and UVs cannot be shared. Without clone(), you can see the consequences\n\t\t\t\t\t\t// of sharing if you call geometry.applyMatrix4( matrix ).\n\t\t\t\t\t\tif ( notDegenerate( v1, v2, v3 ) ) {\n\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v1;\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v2;\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v3;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( notDegenerate( v1, v3, v4 ) ) {\n\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v1;\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v3;\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// increment only if a surface was used\n\t\t\t\tsurfCount ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tthis.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new BufferAttribute( uvs, 2 ) );\n\n\t\tthis.computeBoundingSphere();\n\n\t}\n\n}\n\nexport { TeapotGeometry };\n", "/**\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * depth: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\n * }\n */\n\nimport {\n\tExtrudeGeometry\n} from 'three';\n\nclass TextGeometry extends ExtrudeGeometry {\n\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( font === undefined ) {\n\n\t\t\tsuper(); // generate default extrude geometry\n\n\t\t} else {\n\n\t\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t\t// translate parameters to ExtrudeGeometry API\n\n\t\t\tif ( parameters.depth === undefined && parameters.height !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.TextGeometry: .height is now depreciated. Please use .depth instead' ); // @deprecated, r163\n\n\t\t\t}\n\n\t\t\tparameters.depth = parameters.depth !== undefined ?\n\t\t\t\tparameters.depth : parameters.height !== undefined ?\n\t\t\t\t\tparameters.height : 50;\n\n\t\t\t// defaults\n\n\t\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\t\tsuper( shapes, parameters );\n\n\t\t}\n\n\t\tthis.type = 'TextGeometry';\n\n\t}\n\n}\n\n\nexport { TextGeometry };\n", "import {\n\tMesh,\n\tShaderMaterial,\n\tSphereGeometry\n} from 'three';\n\nclass LightProbeHelper extends Mesh {\n\n\tconstructor( lightProbe, size ) {\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\ttype: 'LightProbeHelperMaterial',\n\n\t\t\tuniforms: {\n\n\t\t\t\tsh: { value: lightProbe.sh.coefficients }, // by reference\n\n\t\t\t\tintensity: { value: lightProbe.intensity }\n\n\t\t\t},\n\n\t\t\tvertexShader: [\n\n\t\t\t\t'varying vec3 vNormal;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvNormal = normalize( normalMatrix * normal );',\n\n\t\t\t\t'\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',\n\n\t\t\t\t'}',\n\n\t\t\t].join( '\\n' ),\n\n\t\t\tfragmentShader: [\n\n\t\t\t\t'#define RECIPROCAL_PI 0.318309886',\n\n\t\t\t\t'vec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {',\n\n\t\t\t\t'\t// matrix is assumed to be orthogonal',\n\n\t\t\t\t'\treturn normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );',\n\n\t\t\t\t'}',\n\n\t\t\t\t'// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf',\n\t\t\t\t'vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {',\n\n\t\t\t\t'\t// normal is assumed to have unit length',\n\n\t\t\t\t'\tfloat x = normal.x, y = normal.y, z = normal.z;',\n\n\t\t\t\t'\t// band 0',\n\t\t\t\t'\tvec3 result = shCoefficients[ 0 ] * 0.886227;',\n\n\t\t\t\t'\t// band 1',\n\t\t\t\t'\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;',\n\t\t\t\t'\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;',\n\t\t\t\t'\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;',\n\n\t\t\t\t'\t// band 2',\n\t\t\t\t'\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;',\n\t\t\t\t'\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;',\n\t\t\t\t'\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );',\n\t\t\t\t'\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;',\n\t\t\t\t'\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );',\n\n\t\t\t\t'\treturn result;',\n\n\t\t\t\t'}',\n\n\t\t\t\t'uniform vec3 sh[ 9 ]; // sh coefficients',\n\n\t\t\t\t'uniform float intensity; // light probe intensity',\n\n\t\t\t\t'varying vec3 vNormal;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvec3 normal = normalize( vNormal );',\n\n\t\t\t\t'\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );',\n\n\t\t\t\t'\tvec3 irradiance = shGetIrradianceAt( worldNormal, sh );',\n\n\t\t\t\t'\tvec3 outgoingLight = RECIPROCAL_PI * irradiance * intensity;',\n\n\t\t\t\t'\tgl_FragColor = linearToOutputTexel( vec4( outgoingLight, 1.0 ) );',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' )\n\n\t\t} );\n\n\t\tconst geometry = new SphereGeometry( 1, 32, 16 );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.lightProbe = lightProbe;\n\t\tthis.size = size;\n\t\tthis.type = 'LightProbeHelper';\n\n\t\tthis.onBeforeRender();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tonBeforeRender() {\n\n\t\tthis.position.copy( this.lightProbe.position );\n\n\t\tthis.scale.set( 1, 1, 1 ).multiplyScalar( this.size );\n\n\t\tthis.material.uniforms.intensity.value = this.lightProbe.intensity;\n\n\t}\n\n}\n\nexport { LightProbeHelper };\n", "import {\n\tLineSegments,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tLineBasicMaterial\n} from 'three';\n\nclass OctreeHelper extends LineSegments {\n\n\tconstructor( octree, color = 0xffff00 ) {\n\n\t\tsuper( new BufferGeometry(), new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.octree = octree;\n\t\tthis.color = color;\n\n\t\tthis.type = 'OctreeHelper';\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst vertices = [];\n\n\t\tfunction traverse( tree ) {\n\n\t\t\tfor ( let i = 0; i < tree.length; i ++ ) {\n\n\t\t\t\tconst min = tree[ i ].box.min;\n\t\t\t\tconst max = tree[ i ].box.max;\n\n\t\t\t\tvertices.push( max.x, max.y, max.z ); vertices.push( min.x, max.y, max.z ); // 0, 1\n\t\t\t\tvertices.push( min.x, max.y, max.z ); vertices.push( min.x, min.y, max.z ); // 1, 2\n\t\t\t\tvertices.push( min.x, min.y, max.z ); vertices.push( max.x, min.y, max.z ); // 2, 3\n\t\t\t\tvertices.push( max.x, min.y, max.z ); vertices.push( max.x, max.y, max.z ); // 3, 0\n\n\t\t\t\tvertices.push( max.x, max.y, min.z ); vertices.push( min.x, max.y, min.z ); // 4, 5\n\t\t\t\tvertices.push( min.x, max.y, min.z ); vertices.push( min.x, min.y, min.z ); // 5, 6\n\t\t\t\tvertices.push( min.x, min.y, min.z ); vertices.push( max.x, min.y, min.z ); // 6, 7\n\t\t\t\tvertices.push( max.x, min.y, min.z ); vertices.push( max.x, max.y, min.z ); // 7, 4\n\n\t\t\t\tvertices.push( max.x, max.y, max.z ); vertices.push( max.x, max.y, min.z ); // 0, 4\n\t\t\t\tvertices.push( min.x, max.y, max.z ); vertices.push( min.x, max.y, min.z ); // 1, 5\n\t\t\t\tvertices.push( min.x, min.y, max.z ); vertices.push( min.x, min.y, min.z ); // 2, 6\n\t\t\t\tvertices.push( max.x, min.y, max.z ); vertices.push( max.x, min.y, min.z ); // 3, 7\n\n\t\t\t\ttraverse( tree[ i ].subTrees );\n\n\t\t\t}\n\n\t\t}\n\n\t\ttraverse( this.octree.subTrees );\n\n\t\tthis.geometry.dispose();\n\n\t\tthis.geometry = new BufferGeometry();\n\t\tthis.geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nexport { OctreeHelper };\n", "import {\n\tBufferGeometry,\n\tBufferAttribute,\n\tLineBasicMaterial,\n\tLine,\n\tMathUtils\n} from 'three';\n\nclass PositionalAudioHelper extends Line {\n\n\tconstructor( audio, range = 1, divisionsInnerAngle = 16, divisionsOuterAngle = 2 ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst divisions = divisionsInnerAngle + divisionsOuterAngle * 2;\n\t\tconst positions = new Float32Array( ( divisions * 3 + 3 ) * 3 );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tconst materialInnerAngle = new LineBasicMaterial( { color: 0x00ff00 } );\n\t\tconst materialOuterAngle = new LineBasicMaterial( { color: 0xffff00 } );\n\n\t\tsuper( geometry, [ materialOuterAngle, materialInnerAngle ] );\n\n\t\tthis.audio = audio;\n\t\tthis.range = range;\n\t\tthis.divisionsInnerAngle = divisionsInnerAngle;\n\t\tthis.divisionsOuterAngle = divisionsOuterAngle;\n\t\tthis.type = 'PositionalAudioHelper';\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst audio = this.audio;\n\t\tconst range = this.range;\n\t\tconst divisionsInnerAngle = this.divisionsInnerAngle;\n\t\tconst divisionsOuterAngle = this.divisionsOuterAngle;\n\n\t\tconst coneInnerAngle = MathUtils.degToRad( audio.panner.coneInnerAngle );\n\t\tconst coneOuterAngle = MathUtils.degToRad( audio.panner.coneOuterAngle );\n\n\t\tconst halfConeInnerAngle = coneInnerAngle / 2;\n\t\tconst halfConeOuterAngle = coneOuterAngle / 2;\n\n\t\tlet start = 0;\n\t\tlet count = 0;\n\t\tlet i;\n\t\tlet stride;\n\n\t\tconst geometry = this.geometry;\n\t\tconst positionAttribute = geometry.attributes.position;\n\n\t\tgeometry.clearGroups();\n\n\t\t//\n\n\t\tfunction generateSegment( from, to, divisions, materialIndex ) {\n\n\t\t\tconst step = ( to - from ) / divisions;\n\n\t\t\tpositionAttribute.setXYZ( start, 0, 0, 0 );\n\t\t\tcount ++;\n\n\t\t\tfor ( i = from; i < to; i += step ) {\n\n\t\t\t\tstride = start + count;\n\n\t\t\t\tpositionAttribute.setXYZ( stride, Math.sin( i ) * range, 0, Math.cos( i ) * range );\n\t\t\t\tpositionAttribute.setXYZ( stride + 1, Math.sin( Math.min( i + step, to ) ) * range, 0, Math.cos( Math.min( i + step, to ) ) * range );\n\t\t\t\tpositionAttribute.setXYZ( stride + 2, 0, 0, 0 );\n\n\t\t\t\tcount += 3;\n\n\t\t\t}\n\n\t\t\tgeometry.addGroup( start, count, materialIndex );\n\n\t\t\tstart += count;\n\t\t\tcount = 0;\n\n\t\t}\n\n\t\t//\n\n\t\tgenerateSegment( - halfConeOuterAngle, - halfConeInnerAngle, divisionsOuterAngle, 0 );\n\t\tgenerateSegment( - halfConeInnerAngle, halfConeInnerAngle, divisionsInnerAngle, 1 );\n\t\tgenerateSegment( halfConeInnerAngle, halfConeOuterAngle, divisionsOuterAngle, 0 );\n\n\t\t//\n\n\t\tpositionAttribute.needsUpdate = true;\n\n\t\tif ( coneInnerAngle === coneOuterAngle ) this.material[ 0 ].visible = false;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material[ 0 ].dispose();\n\t\tthis.material[ 1 ].dispose();\n\n\t}\n\n}\n\n\nexport { PositionalAudioHelper };\n", "import {\n\tBackSide,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tLine,\n\tLineBasicMaterial,\n\tMesh,\n\tMeshBasicMaterial\n} from 'three';\n\n/**\n * This helper must be added as a child of the light\n */\n\nclass RectAreaLightHelper extends Line {\n\n\tconstructor( light, color ) {\n\n\t\tconst positions = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tconst material = new LineBasicMaterial( { fog: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.color = color; // optional hardwired color for the helper\n\t\tthis.type = 'RectAreaLightHelper';\n\n\t\t//\n\n\t\tconst positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { side: BackSide, fog: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld() {\n\n\t\tthis.scale.set( 0.5 * this.light.width, 0.5 * this.light.height, 1 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\t\t\tthis.children[ 0 ].material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\n\n\t\t\t// prevent hue shift\n\t\t\tconst c = this.material.color;\n\t\t\tconst max = Math.max( c.r, c.g, c.b );\n\t\t\tif ( max > 1 ) c.multiplyScalar( 1 / max );\n\n\t\t\tthis.children[ 0 ].material.color.copy( this.material.color );\n\n\t\t}\n\n\t\t// ignore world scale on light\n\t\tthis.matrixWorld.extractRotation( this.light.matrixWorld ).scale( this.scale ).copyPosition( this.light.matrixWorld );\n\n\t\tthis.children[ 0 ].matrixWorld.copy( this.matrixWorld );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n}\n\nexport { RectAreaLightHelper };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * @param {Array} geometries\n * @param {Boolean} useGroups\n * @return {BufferGeometry}\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * @param {Array} attributes\n * @return {BufferAttribute}\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferAttribute}\n * @return {BufferAttribute}\n */\nexport function deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * @param {Array} attributes\n * @return {Array}\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n// returns a new, non-interleaved version of the provided attribute\nexport function deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n// deinterleaves all attributes on the geometry\nexport function deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @return {number}\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} tolerance\n * @return {BufferGeometry}\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n * Helpful for Raytracing or Decals.\n * @param {Mesh | Line | Points} object An instance of Mesh, Line or Points.\n * @return {Object} An Object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry\n * @param {number} [creaseAngle]\n * @return {BufferGeometry}\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n", "import {\n\tBoxGeometry,\n\tBufferAttribute,\n\tDoubleSide,\n\tMesh,\n\tPlaneGeometry,\n\tShaderMaterial,\n\tVector3,\n} from 'three';\nimport { mergeGeometries } from '../utils/BufferGeometryUtils.js';\n\nclass TextureHelper extends Mesh {\n\n\tconstructor( texture, width = 1, height = 1, depth = 1 ) {\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\ttype: 'TextureHelperMaterial',\n\n\t\t\tside: DoubleSide,\n\t\t\ttransparent: true,\n\n\t\t\tuniforms: {\n\n\t\t\t\tmap: { value: texture },\n\t\t\t\talpha: { value: getAlpha( texture ) },\n\n\t\t\t},\n\n\t\t\tvertexShader: [\n\n\t\t\t\t'attribute vec3 uvw;',\n\n\t\t\t\t'varying vec3 vUvw;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvUvw = uvw;',\n\n\t\t\t\t'\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',\n\n\t\t\t\t'}',\n\n\t\t\t].join( '\\n' ),\n\n\t\t\tfragmentShader: [\n\n\t\t\t\t'precision highp float;',\n\n\t\t\t\t'precision highp sampler2DArray;',\n\n\t\t\t\t'precision highp sampler3D;',\n\n\t\t\t\t'uniform {samplerType} map;',\n\n\t\t\t\t'uniform float alpha;',\n\n\t\t\t\t'varying vec3 vUvw;',\n\n\t\t\t\t'vec4 textureHelper( in sampler2D map ) { return texture( map, vUvw.xy ); }',\n\n\t\t\t\t'vec4 textureHelper( in sampler2DArray map ) { return texture( map, vUvw ); }',\n\n\t\t\t\t'vec4 textureHelper( in sampler3D map ) { return texture( map, vUvw ); }',\n\n\t\t\t\t'vec4 textureHelper( in samplerCube map ) { return texture( map, vUvw ); }',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tgl_FragColor = linearToOutputTexel( vec4( textureHelper( map ).xyz, alpha ) );',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ).replace( '{samplerType}', getSamplerType( texture ) )\n\n\t\t} );\n\n\t\tconst geometry = texture.isCubeTexture\n\t\t\t? createCubeGeometry( width, height, depth )\n\t\t\t: createSliceGeometry( texture, width, height, depth );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.texture = texture;\n\t\tthis.type = 'TextureHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nfunction getSamplerType( texture ) {\n\n\tif ( texture.isCubeTexture ) {\n\n\t\treturn 'samplerCube';\n\n\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\treturn 'sampler2DArray';\n\n\t} else if ( texture.isData3DTexture || texture.isCompressed3DTexture ) {\n\n\t\treturn 'sampler3D';\n\n\t} else {\n\n\t\treturn 'sampler2D';\n\n\t}\n\n}\n\nfunction getImageCount( texture ) {\n\n\tif ( texture.isCubeTexture ) {\n\n\t\treturn 6;\n\n\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\treturn texture.image.depth;\n\n\t} else if ( texture.isData3DTexture || texture.isCompressed3DTexture ) {\n\n\t\treturn texture.image.depth;\n\n\t} else {\n\n\t\treturn 1;\n\n\t}\n\n}\n\nfunction getAlpha( texture ) {\n\n\tif ( texture.isCubeTexture ) {\n\n\t\treturn 1;\n\n\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\treturn Math.max( 1 / texture.image.depth, 0.25 );\n\n\t} else if ( texture.isData3DTexture || texture.isCompressed3DTexture ) {\n\n\t\treturn Math.max( 1 / texture.image.depth, 0.25 );\n\n\t} else {\n\n\t\treturn 1;\n\n\t}\n\n}\n\nfunction createCubeGeometry( width, height, depth ) {\n\n\tconst geometry = new BoxGeometry( width, height, depth );\n\n\tconst position = geometry.attributes.position;\n\tconst uv = geometry.attributes.uv;\n\tconst uvw = new BufferAttribute( new Float32Array( uv.count * 3 ), 3 );\n\n\tconst _direction = new Vector3();\n\n\tfor ( let j = 0, jl = uv.count; j < jl; ++ j ) {\n\n\t\t_direction.fromBufferAttribute( position, j ).normalize();\n\n\t\tconst u = _direction.x;\n\t\tconst v = _direction.y;\n\t\tconst w = _direction.z;\n\n\t\tuvw.setXYZ( j, u, v, w );\n\n\t}\n\n\tgeometry.deleteAttribute( 'uv' );\n\tgeometry.setAttribute( 'uvw', uvw );\n\n\treturn geometry;\n\n}\n\nfunction createSliceGeometry( texture, width, height, depth ) {\n\n\tconst sliceCount = getImageCount( texture );\n\n\tconst geometries = [];\n\n\tfor ( let i = 0; i < sliceCount; ++ i ) {\n\n\t\tconst geometry = new PlaneGeometry( width, height );\n\n\t\tif ( sliceCount > 1 ) {\n\n\t\t\tgeometry.translate( 0, 0, depth * ( i / ( sliceCount - 1 ) - 0.5 ) );\n\n\t\t}\n\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uvw = new BufferAttribute( new Float32Array( uv.count * 3 ), 3 );\n\n\t\tfor ( let j = 0, jl = uv.count; j < jl; ++ j ) {\n\n\t\t\tconst u = uv.getX( j );\n\t\t\tconst v = texture.flipY ? uv.getY( j ) : 1 - uv.getY( j );\n\t\t\tconst w = sliceCount === 1\n\t\t\t\t? 1\n\t\t\t\t: texture.isDataArrayTexture || texture.isCompressedArrayTexture\n\t\t\t\t\t? i\n\t\t\t\t\t: i / ( sliceCount - 1 );\n\n\t\t\tuvw.setXYZ( j, u, v, w );\n\n\t\t}\n\n\t\tgeometry.deleteAttribute( 'uv' );\n\t\tgeometry.setAttribute( 'uvw', uvw );\n\n\t\tgeometries.push( geometry );\n\n\t}\n\n\treturn mergeGeometries( geometries );\n\n}\n\nexport { TextureHelper };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tLineSegments,\n\tLineBasicMaterial,\n\tMatrix3,\n\tVector3\n} from 'three';\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\nconst _normalMatrix = new Matrix3();\n\nclass VertexNormalsHelper extends LineSegments {\n\n\tconstructor( object, size = 1, color = 0xff0000 ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst nNormals = object.geometry.attributes.normal.count;\n\t\tconst positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\t\tgeometry.setAttribute( 'position', positions );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.size = size;\n\t\tthis.type = 'VertexNormalsHelper';\n\n\t\t//\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\t_normalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tconst matrixWorld = this.object.matrixWorld;\n\n\t\tconst position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tconst objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry ) {\n\n\t\t\tconst objPos = objGeometry.attributes.position;\n\n\t\t\tconst objNorm = objGeometry.attributes.normal;\n\n\t\t\tlet idx = 0;\n\n\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\tfor ( let j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\t_v1.fromBufferAttribute( objPos, j ).applyMatrix4( matrixWorld );\n\n\t\t\t\t_v2.fromBufferAttribute( objNorm, j );\n\n\t\t\t\t_v2.applyMatrix3( _normalMatrix ).normalize().multiplyScalar( this.size ).add( _v1 );\n\n\t\t\t\tposition.setXYZ( idx, _v1.x, _v1.y, _v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, _v2.x, _v2.y, _v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nexport { VertexNormalsHelper };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tLineSegments,\n\tLineBasicMaterial,\n\tVector3\n} from 'three';\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\n\nclass VertexTangentsHelper extends LineSegments {\n\n\tconstructor( object, size = 1, color = 0x00ffff ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst nTangents = object.geometry.attributes.tangent.count;\n\t\tconst positions = new Float32BufferAttribute( nTangents * 2 * 3, 3 );\n\n\t\tgeometry.setAttribute( 'position', positions );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.size = size;\n\t\tthis.type = 'VertexTangentsHelper';\n\n\t\t//\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tconst matrixWorld = this.object.matrixWorld;\n\n\t\tconst position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tconst objGeometry = this.object.geometry;\n\n\t\tconst objPos = objGeometry.attributes.position;\n\n\t\tconst objTan = objGeometry.attributes.tangent;\n\n\t\tlet idx = 0;\n\n\t\t// for simplicity, ignore index and drawcalls, and render every tangent\n\n\t\tfor ( let j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t_v1.fromBufferAttribute( objPos, j ).applyMatrix4( matrixWorld );\n\n\t\t\t_v2.fromBufferAttribute( objTan, j );\n\n\t\t\t_v2.transformDirection( matrixWorld ).multiplyScalar( this.size ).add( _v1 );\n\n\t\t\tposition.setXYZ( idx, _v1.x, _v1.y, _v1.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t\tposition.setXYZ( idx, _v2.x, _v2.y, _v2.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nexport { VertexTangentsHelper };\n", "import {\n\tCylinderGeometry,\n\tCanvasTexture,\n\tColor,\n\tEuler,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tOrthographicCamera,\n\tQuaternion,\n\tRaycaster,\n\tSprite,\n\tSpriteMaterial,\n\tSRGBColorSpace,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\n\nclass ViewHelper extends Object3D {\n\n\tconstructor( camera, domElement ) {\n\n\t\tsuper();\n\n\t\tthis.isViewHelper = true;\n\n\t\tthis.animating = false;\n\t\tthis.center = new Vector3();\n\n\t\tconst color1 = new Color( '#ff4466' );\n\t\tconst color2 = new Color( '#88ff44' );\n\t\tconst color3 = new Color( '#4488ff' );\n\t\tconst color4 = new Color( '#000000' );\n\n\t\tconst options = {};\n\n\t\tconst interactiveObjects = [];\n\t\tconst raycaster = new Raycaster();\n\t\tconst mouse = new Vector2();\n\t\tconst dummy = new Object3D();\n\n\t\tconst orthoCamera = new OrthographicCamera( - 2, 2, 2, - 2, 0, 4 );\n\t\torthoCamera.position.set( 0, 0, 2 );\n\n\t\tconst geometry = new CylinderGeometry( 0.04, 0.04, 0.8, 5 ).rotateZ( - Math.PI / 2 ).translate( 0.4, 0, 0 );\n\n\t\tconst xAxis = new Mesh( geometry, getAxisMaterial( color1 ) );\n\t\tconst yAxis = new Mesh( geometry, getAxisMaterial( color2 ) );\n\t\tconst zAxis = new Mesh( geometry, getAxisMaterial( color3 ) );\n\n\t\tyAxis.rotation.z = Math.PI / 2;\n\t\tzAxis.rotation.y = - Math.PI / 2;\n\n\t\tthis.add( xAxis );\n\t\tthis.add( zAxis );\n\t\tthis.add( yAxis );\n\n\t\tconst spriteMaterial1 = getSpriteMaterial( color1 );\n\t\tconst spriteMaterial2 = getSpriteMaterial( color2 );\n\t\tconst spriteMaterial3 = getSpriteMaterial( color3 );\n\t\tconst spriteMaterial4 = getSpriteMaterial( color4 );\n\n\t\tconst posXAxisHelper = new Sprite( spriteMaterial1 );\n\t\tconst posYAxisHelper = new Sprite( spriteMaterial2 );\n\t\tconst posZAxisHelper = new Sprite( spriteMaterial3 );\n\t\tconst negXAxisHelper = new Sprite( spriteMaterial4 );\n\t\tconst negYAxisHelper = new Sprite( spriteMaterial4 );\n\t\tconst negZAxisHelper = new Sprite( spriteMaterial4 );\n\n\t\tposXAxisHelper.position.x = 1;\n\t\tposYAxisHelper.position.y = 1;\n\t\tposZAxisHelper.position.z = 1;\n\t\tnegXAxisHelper.position.x = - 1;\n\t\tnegYAxisHelper.position.y = - 1;\n\t\tnegZAxisHelper.position.z = - 1;\n\n\t\tnegXAxisHelper.material.opacity = 0.2;\n\t\tnegYAxisHelper.material.opacity = 0.2;\n\t\tnegZAxisHelper.material.opacity = 0.2;\n\n\t\tposXAxisHelper.userData.type = 'posX';\n\t\tposYAxisHelper.userData.type = 'posY';\n\t\tposZAxisHelper.userData.type = 'posZ';\n\t\tnegXAxisHelper.userData.type = 'negX';\n\t\tnegYAxisHelper.userData.type = 'negY';\n\t\tnegZAxisHelper.userData.type = 'negZ';\n\n\t\tthis.add( posXAxisHelper );\n\t\tthis.add( posYAxisHelper );\n\t\tthis.add( posZAxisHelper );\n\t\tthis.add( negXAxisHelper );\n\t\tthis.add( negYAxisHelper );\n\t\tthis.add( negZAxisHelper );\n\n\t\tinteractiveObjects.push( posXAxisHelper );\n\t\tinteractiveObjects.push( posYAxisHelper );\n\t\tinteractiveObjects.push( posZAxisHelper );\n\t\tinteractiveObjects.push( negXAxisHelper );\n\t\tinteractiveObjects.push( negYAxisHelper );\n\t\tinteractiveObjects.push( negZAxisHelper );\n\n\t\tconst point = new Vector3();\n\t\tconst dim = 128;\n\t\tconst turnRate = 2 * Math.PI; // turn rate in angles per second\n\n\t\tthis.render = function ( renderer ) {\n\n\t\t\tthis.quaternion.copy( camera.quaternion ).invert();\n\t\t\tthis.updateMatrixWorld();\n\n\t\t\tpoint.set( 0, 0, 1 );\n\t\t\tpoint.applyQuaternion( camera.quaternion );\n\n\t\t\t//\n\n\t\t\tconst x = domElement.offsetWidth - dim;\n\n\t\t\trenderer.clearDepth();\n\n\t\t\trenderer.getViewport( viewport );\n\t\t\trenderer.setViewport( x, 0, dim, dim );\n\n\t\t\trenderer.render( this, orthoCamera );\n\n\t\t\trenderer.setViewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\n\t\t};\n\n\t\tconst targetPosition = new Vector3();\n\t\tconst targetQuaternion = new Quaternion();\n\n\t\tconst q1 = new Quaternion();\n\t\tconst q2 = new Quaternion();\n\t\tconst viewport = new Vector4();\n\t\tlet radius = 0;\n\n\t\tthis.handleClick = function ( event ) {\n\n\t\t\tif ( this.animating === true ) return false;\n\n\t\t\tconst rect = domElement.getBoundingClientRect();\n\t\t\tconst offsetX = rect.left + ( domElement.offsetWidth - dim );\n\t\t\tconst offsetY = rect.top + ( domElement.offsetHeight - dim );\n\t\t\tmouse.x = ( ( event.clientX - offsetX ) / ( rect.right - offsetX ) ) * 2 - 1;\n\t\t\tmouse.y = - ( ( event.clientY - offsetY ) / ( rect.bottom - offsetY ) ) * 2 + 1;\n\n\t\t\traycaster.setFromCamera( mouse, orthoCamera );\n\n\t\t\tconst intersects = raycaster.intersectObjects( interactiveObjects );\n\n\t\t\tif ( intersects.length > 0 ) {\n\n\t\t\t\tconst intersection = intersects[ 0 ];\n\t\t\t\tconst object = intersection.object;\n\n\t\t\t\tprepareAnimationData( object, this.center );\n\n\t\t\t\tthis.animating = true;\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setLabels = function ( labelX, labelY, labelZ ) {\n\n\t\t\toptions.labelX = labelX;\n\t\t\toptions.labelY = labelY;\n\t\t\toptions.labelZ = labelZ;\n\n\t\t\tupdateLabels();\n\n\t\t};\n\n\t\tthis.setLabelStyle = function ( font, color, radius ) {\n\n\t\t\toptions.font = font;\n\t\t\toptions.color = color;\n\t\t\toptions.radius = radius;\n\n\t\t\tupdateLabels();\n\n\t\t};\n\n\t\tthis.update = function ( delta ) {\n\n\t\t\tconst step = delta * turnRate;\n\n\t\t\t// animate position by doing a slerp and then scaling the position on the unit sphere\n\n\t\t\tq1.rotateTowards( q2, step );\n\t\t\tcamera.position.set( 0, 0, 1 ).applyQuaternion( q1 ).multiplyScalar( radius ).add( this.center );\n\n\t\t\t// animate orientation\n\n\t\t\tcamera.quaternion.rotateTowards( targetQuaternion, step );\n\n\t\t\tif ( q1.angleTo( q2 ) === 0 ) {\n\n\t\t\t\tthis.animating = false;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tgeometry.dispose();\n\n\t\t\txAxis.material.dispose();\n\t\t\tyAxis.material.dispose();\n\t\t\tzAxis.material.dispose();\n\n\t\t\tposXAxisHelper.material.map.dispose();\n\t\t\tposYAxisHelper.material.map.dispose();\n\t\t\tposZAxisHelper.material.map.dispose();\n\t\t\tnegXAxisHelper.material.map.dispose();\n\t\t\tnegYAxisHelper.material.map.dispose();\n\t\t\tnegZAxisHelper.material.map.dispose();\n\n\t\t\tposXAxisHelper.material.dispose();\n\t\t\tposYAxisHelper.material.dispose();\n\t\t\tposZAxisHelper.material.dispose();\n\t\t\tnegXAxisHelper.material.dispose();\n\t\t\tnegYAxisHelper.material.dispose();\n\t\t\tnegZAxisHelper.material.dispose();\n\n\t\t};\n\n\t\tfunction prepareAnimationData( object, focusPoint ) {\n\n\t\t\tswitch ( object.userData.type ) {\n\n\t\t\t\tcase 'posX':\n\t\t\t\t\ttargetPosition.set( 1, 0, 0 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( 0, Math.PI * 0.5, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'posY':\n\t\t\t\t\ttargetPosition.set( 0, 1, 0 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( - Math.PI * 0.5, 0, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'posZ':\n\t\t\t\t\ttargetPosition.set( 0, 0, 1 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler() );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'negX':\n\t\t\t\t\ttargetPosition.set( - 1, 0, 0 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( 0, - Math.PI * 0.5, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'negY':\n\t\t\t\t\ttargetPosition.set( 0, - 1, 0 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( Math.PI * 0.5, 0, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'negZ':\n\t\t\t\t\ttargetPosition.set( 0, 0, - 1 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( 0, Math.PI, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error( 'ViewHelper: Invalid axis.' );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tradius = camera.position.distanceTo( focusPoint );\n\t\t\ttargetPosition.multiplyScalar( radius ).add( focusPoint );\n\n\t\t\tdummy.position.copy( focusPoint );\n\n\t\t\tdummy.lookAt( camera.position );\n\t\t\tq1.copy( dummy.quaternion );\n\n\t\t\tdummy.lookAt( targetPosition );\n\t\t\tq2.copy( dummy.quaternion );\n\n\t\t}\n\n\t\tfunction getAxisMaterial( color ) {\n\n\t\t\treturn new MeshBasicMaterial( { color: color, toneMapped: false } );\n\n\t\t}\n\n\t\tfunction getSpriteMaterial( color, text ) {\n\n\t\t\tconst { font = '24px Arial', color: labelColor = '#000000', radius = 14 } = options;\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\tcanvas.width = 64;\n\t\t\tcanvas.height = 64;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc( 32, 32, radius, 0, 2 * Math.PI );\n\t\t\tcontext.closePath();\n\t\t\tcontext.fillStyle = color.getStyle();\n\t\t\tcontext.fill();\n\n\t\t\tif ( text ) {\n\n\t\t\t\tcontext.font = font;\n\t\t\t\tcontext.textAlign = 'center';\n\t\t\t\tcontext.fillStyle = labelColor;\n\t\t\t\tcontext.fillText( text, 32, 41 );\n\n\t\t\t}\n\n\t\t\tconst texture = new CanvasTexture( canvas );\n\t\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\t\treturn new SpriteMaterial( { map: texture, toneMapped: false } );\n\n\t\t}\n\n\t\tfunction updateLabels() {\n\n\t\t\tposXAxisHelper.material.map.dispose();\n\t\t\tposYAxisHelper.material.map.dispose();\n\t\t\tposZAxisHelper.material.map.dispose();\n\n\t\t\tposXAxisHelper.material.dispose();\n\t\t\tposYAxisHelper.material.dispose();\n\t\t\tposZAxisHelper.material.dispose();\n\n\t\t\tposXAxisHelper.material = getSpriteMaterial( color1, options.labelX );\n\t\t\tposYAxisHelper.material = getSpriteMaterial( color2, options.labelY );\n\t\t\tposZAxisHelper.material = getSpriteMaterial( color3, options.labelZ );\n\n\t\t}\n\n\t}\n\n}\n\nexport { ViewHelper };\n", "import {\n\tCanvasTexture,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tPlaneGeometry,\n\tSRGBColorSpace,\n\tColor\n} from 'three';\n\nclass HTMLMesh extends Mesh {\n\n\tconstructor( dom ) {\n\n\t\tconst texture = new HTMLTexture( dom );\n\n\t\tconst geometry = new PlaneGeometry( texture.image.width * 0.001, texture.image.height * 0.001 );\n\t\tconst material = new MeshBasicMaterial( { map: texture, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tfunction onEvent( event ) {\n\n\t\t\tmaterial.map.dispatchDOMEvent( event );\n\n\t\t}\n\n\t\tthis.addEventListener( 'mousedown', onEvent );\n\t\tthis.addEventListener( 'mousemove', onEvent );\n\t\tthis.addEventListener( 'mouseup', onEvent );\n\t\tthis.addEventListener( 'click', onEvent );\n\n\t\tthis.dispose = function () {\n\n\t\t\tgeometry.dispose();\n\t\t\tmaterial.dispose();\n\n\t\t\tmaterial.map.dispose();\n\n\t\t\tcanvases.delete( dom );\n\n\t\t\tthis.removeEventListener( 'mousedown', onEvent );\n\t\t\tthis.removeEventListener( 'mousemove', onEvent );\n\t\t\tthis.removeEventListener( 'mouseup', onEvent );\n\t\t\tthis.removeEventListener( 'click', onEvent );\n\n\t\t};\n\n\t}\n\n}\n\nclass HTMLTexture extends CanvasTexture {\n\n\tconstructor( dom ) {\n\n\t\tsuper( html2canvas( dom ) );\n\n\t\tthis.dom = dom;\n\n\t\tthis.anisotropy = 16;\n\t\tthis.colorSpace = SRGBColorSpace;\n\t\tthis.minFilter = LinearFilter;\n\t\tthis.magFilter = LinearFilter;\n\n\t\t// Create an observer on the DOM, and run html2canvas update in the next loop\n\t\tconst observer = new MutationObserver( () => {\n\n\t\t\tif ( ! this.scheduleUpdate ) {\n\n\t\t\t\t// ideally should use xr.requestAnimationFrame, here setTimeout to avoid passing the renderer\n\t\t\t\tthis.scheduleUpdate = setTimeout( () => this.update(), 16 );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst config = { attributes: true, childList: true, subtree: true, characterData: true };\n\t\tobserver.observe( dom, config );\n\n\t\tthis.observer = observer;\n\n\t}\n\n\tdispatchDOMEvent( event ) {\n\n\t\tif ( event.data ) {\n\n\t\t\thtmlevent( this.dom, event.type, event.data.x, event.data.y );\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tthis.image = html2canvas( this.dom );\n\t\tthis.needsUpdate = true;\n\n\t\tthis.scheduleUpdate = null;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.observer ) {\n\n\t\t\tthis.observer.disconnect();\n\n\t\t}\n\n\t\tthis.scheduleUpdate = clearTimeout( this.scheduleUpdate );\n\n\t\tsuper.dispose();\n\n\t}\n\n}\n\n\n//\n\nconst canvases = new WeakMap();\n\nfunction html2canvas( element ) {\n\n\tconst range = document.createRange();\n\tconst color = new Color();\n\n\tfunction Clipper( context ) {\n\n\t\tconst clips = [];\n\t\tlet isClipping = false;\n\n\t\tfunction doClip() {\n\n\t\t\tif ( isClipping ) {\n\n\t\t\t\tisClipping = false;\n\t\t\t\tcontext.restore();\n\n\t\t\t}\n\n\t\t\tif ( clips.length === 0 ) return;\n\n\t\t\tlet minX = - Infinity, minY = - Infinity;\n\t\t\tlet maxX = Infinity, maxY = Infinity;\n\n\t\t\tfor ( let i = 0; i < clips.length; i ++ ) {\n\n\t\t\t\tconst clip = clips[ i ];\n\n\t\t\t\tminX = Math.max( minX, clip.x );\n\t\t\t\tminY = Math.max( minY, clip.y );\n\t\t\t\tmaxX = Math.min( maxX, clip.x + clip.width );\n\t\t\t\tmaxY = Math.min( maxY, clip.y + clip.height );\n\n\t\t\t}\n\n\t\t\tcontext.save();\n\t\t\tcontext.beginPath();\n\t\t\tcontext.rect( minX, minY, maxX - minX, maxY - minY );\n\t\t\tcontext.clip();\n\n\t\t\tisClipping = true;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tadd: function ( clip ) {\n\n\t\t\t\tclips.push( clip );\n\t\t\t\tdoClip();\n\n\t\t\t},\n\n\t\t\tremove: function () {\n\n\t\t\t\tclips.pop();\n\t\t\t\tdoClip();\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction drawText( style, x, y, string ) {\n\n\t\tif ( string !== '' ) {\n\n\t\t\tif ( style.textTransform === 'uppercase' ) {\n\n\t\t\t\tstring = string.toUpperCase();\n\n\t\t\t}\n\n\t\t\tcontext.font = style.fontWeight + ' ' + style.fontSize + ' ' + style.fontFamily;\n\t\t\tcontext.textBaseline = 'top';\n\t\t\tcontext.fillStyle = style.color;\n\t\t\tcontext.fillText( string, x, y + parseFloat( style.fontSize ) * 0.1 );\n\n\t\t}\n\n\t}\n\n\tfunction buildRectPath( x, y, w, h, r ) {\n\n\t\tif ( w < 2 * r ) r = w / 2;\n\t\tif ( h < 2 * r ) r = h / 2;\n\n\t\tcontext.beginPath();\n\t\tcontext.moveTo( x + r, y );\n\t\tcontext.arcTo( x + w, y, x + w, y + h, r );\n\t\tcontext.arcTo( x + w, y + h, x, y + h, r );\n\t\tcontext.arcTo( x, y + h, x, y, r );\n\t\tcontext.arcTo( x, y, x + w, y, r );\n\t\tcontext.closePath();\n\n\t}\n\n\tfunction drawBorder( style, which, x, y, width, height ) {\n\n\t\tconst borderWidth = style[ which + 'Width' ];\n\t\tconst borderStyle = style[ which + 'Style' ];\n\t\tconst borderColor = style[ which + 'Color' ];\n\n\t\tif ( borderWidth !== '0px' && borderStyle !== 'none' && borderColor !== 'transparent' && borderColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\tcontext.strokeStyle = borderColor;\n\t\t\tcontext.lineWidth = parseFloat( borderWidth );\n\t\t\tcontext.beginPath();\n\t\t\tcontext.moveTo( x, y );\n\t\t\tcontext.lineTo( x + width, y + height );\n\t\t\tcontext.stroke();\n\n\t\t}\n\n\t}\n\n\tfunction drawElement( element, style ) {\n\n\t\t// Do not render invisible elements, comments and scripts.\n\t\tif ( element.nodeType === Node.COMMENT_NODE || element.nodeName === 'SCRIPT' || ( element.style && element.style.display === 'none' ) ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet x = 0, y = 0, width = 0, height = 0;\n\n\t\tif ( element.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t// text\n\n\t\t\trange.selectNode( element );\n\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tdrawText( style, x, y, element.nodeValue.trim() );\n\n\t\t} else if ( element instanceof HTMLCanvasElement ) {\n\n\t\t\t// Canvas element\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\n\t\t context.save();\n\t\t\tconst dpr = window.devicePixelRatio;\n\t\t\tcontext.scale( 1 / dpr, 1 / dpr );\n\t\t\tcontext.drawImage( element, x, y );\n\t\t\tcontext.restore();\n\n\t\t} else if ( element instanceof HTMLImageElement ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tcontext.drawImage( element, x, y, width, height );\n\n\t\t} else {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tstyle = window.getComputedStyle( element );\n\n\t\t\t// Get the border of the element used for fill and border\n\n\t\t\tbuildRectPath( x, y, width, height, parseFloat( style.borderRadius ) );\n\n\t\t\tconst backgroundColor = style.backgroundColor;\n\n\t\t\tif ( backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\tcontext.fillStyle = backgroundColor;\n\t\t\t\tcontext.fill();\n\n\t\t\t}\n\n\t\t\t// If all the borders match then stroke the round rectangle\n\n\t\t\tconst borders = [ 'borderTop', 'borderLeft', 'borderBottom', 'borderRight' ];\n\n\t\t\tlet match = true;\n\t\t\tlet prevBorder = null;\n\n\t\t\tfor ( const border of borders ) {\n\n\t\t\t\tif ( prevBorder !== null ) {\n\n\t\t\t\t\tmatch = ( style[ border + 'Width' ] === style[ prevBorder + 'Width' ] ) &&\n\t\t\t\t\t( style[ border + 'Color' ] === style[ prevBorder + 'Color' ] ) &&\n\t\t\t\t\t( style[ border + 'Style' ] === style[ prevBorder + 'Style' ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( match === false ) break;\n\n\t\t\t\tprevBorder = border;\n\n\t\t\t}\n\n\t\t\tif ( match === true ) {\n\n\t\t\t\t// They all match so stroke the rectangle from before allows for border-radius\n\n\t\t\t\tconst width = parseFloat( style.borderTopWidth );\n\n\t\t\t\tif ( style.borderTopWidth !== '0px' && style.borderTopStyle !== 'none' && style.borderTopColor !== 'transparent' && style.borderTopColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\t\tcontext.strokeStyle = style.borderTopColor;\n\t\t\t\t\tcontext.lineWidth = width;\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Otherwise draw individual borders\n\n\t\t\t\tdrawBorder( style, 'borderTop', x, y, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderLeft', x, y, 0, height );\n\t\t\t\tdrawBorder( style, 'borderBottom', x, y + height, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderRight', x + width, y, 0, height );\n\n\t\t\t}\n\n\t\t\tif ( element instanceof HTMLInputElement ) {\n\n\t\t\t\tlet accentColor = style.accentColor;\n\n\t\t\t\tif ( accentColor === undefined || accentColor === 'auto' ) accentColor = style.color;\n\n\t\t\t\tcolor.set( accentColor );\n\n\t\t\t\tconst luminance = Math.sqrt( 0.299 * ( color.r ** 2 ) + 0.587 * ( color.g ** 2 ) + 0.114 * ( color.b ** 2 ) );\n\t\t\t\tconst accentTextColor = luminance < 0.5 ? 'white' : '#111111';\n\n\t\t\t\tif ( element.type === 'radio' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, height );\n\n\t\t\t\t\tcontext.fillStyle = 'white';\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tbuildRectPath( x + 2, y + 2, width - 4, height - 4, height );\n\n\t\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\t\tcontext.strokeStyle = accentTextColor;\n\t\t\t\t\t\tcontext.lineWidth = 2;\n\t\t\t\t\t\tcontext.fill();\n\t\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'checkbox' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, 2 );\n\n\t\t\t\t\tcontext.fillStyle = element.checked ? accentColor : 'white';\n\t\t\t\t\tcontext.strokeStyle = element.checked ? accentTextColor : accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.stroke();\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tconst currentTextAlign = context.textAlign;\n\n\t\t\t\t\t\tcontext.textAlign = 'center';\n\n\t\t\t\t\t\tconst properties = {\n\t\t\t\t\t\t\tcolor: accentTextColor,\n\t\t\t\t\t\t\tfontFamily: style.fontFamily,\n\t\t\t\t\t\t\tfontSize: height + 'px',\n\t\t\t\t\t\t\tfontWeight: 'bold'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdrawText( properties, x + ( width / 2 ), y, '✔' );\n\n\t\t\t\t\t\tcontext.textAlign = currentTextAlign;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'range' ) {\n\n\t\t\t\t\tconst [ min, max, value ] = [ 'min', 'max', 'value' ].map( property => parseFloat( element[ property ] ) );\n\t\t\t\t\tconst position = ( ( value - min ) / ( max - min ) ) * ( width - height );\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), width, height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentTextColor;\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), position + ( height / 2 ), height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tbuildRectPath( x + position, y, height, height, height / 2 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'color' || element.type === 'text' || element.type === 'number' ) {\n\n\t\t\t\t\tclipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\t\t\t\tdrawText( style, x + parseInt( style.paddingLeft ), y + parseInt( style.paddingTop ), element.value );\n\n\t\t\t\t\tclipper.remove();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t// debug\n\t\tcontext.strokeStyle = '#' + Math.random().toString( 16 ).slice( - 3 );\n\t\tcontext.strokeRect( x - 0.5, y - 0.5, width + 1, height + 1 );\n\t\t*/\n\n\t\tconst isClipping = style.overflow === 'auto' || style.overflow === 'hidden';\n\n\t\tif ( isClipping ) clipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\tdrawElement( element.childNodes[ i ], style );\n\n\t\t}\n\n\t\tif ( isClipping ) clipper.remove();\n\n\t}\n\n\tconst offset = element.getBoundingClientRect();\n\n\tlet canvas = canvases.get( element );\n\n\tif ( canvas === undefined ) {\n\n\t\tcanvas = document.createElement( 'canvas' );\n\t\tcanvas.width = offset.width;\n\t\tcanvas.height = offset.height;\n\t\tcanvases.set( element, canvas );\n\n\t}\n\n\tconst context = canvas.getContext( '2d'/*, { alpha: false }*/ );\n\n\tconst clipper = new Clipper( context );\n\n\t// console.time( 'drawElement' );\n\n\tcontext.clearRect( 0, 0, canvas.width, canvas.height );\n\n\tdrawElement( element );\n\n\t// console.timeEnd( 'drawElement' );\n\n\treturn canvas;\n\n}\n\nfunction htmlevent( element, event, x, y ) {\n\n\tconst mouseEventInit = {\n\t\tclientX: ( x * element.offsetWidth ) + element.offsetLeft,\n\t\tclientY: ( y * element.offsetHeight ) + element.offsetTop,\n\t\tview: element.ownerDocument.defaultView\n\t};\n\n\twindow.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\tconst rect = element.getBoundingClientRect();\n\n\tx = x * rect.width + rect.left;\n\ty = y * rect.height + rect.top;\n\n\tfunction traverse( element ) {\n\n\t\tif ( element.nodeType !== Node.TEXT_NODE && element.nodeType !== Node.COMMENT_NODE ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tif ( x > rect.left && x < rect.right && y > rect.top && y < rect.bottom ) {\n\n\t\t\t\telement.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\t\t\t\tif ( element instanceof HTMLInputElement && element.type === 'range' && ( event === 'mousedown' || event === 'click' ) ) {\n\n\t\t\t\t\tconst [ min, max ] = [ 'min', 'max' ].map( property => parseFloat( element[ property ] ) );\n\n\t\t\t\t\tconst width = rect.width;\n\t\t\t\t\tconst offsetX = x - rect.x;\n\t\t\t\t\tconst proportion = offsetX / width;\n\t\t\t\t\telement.value = min + ( max - min ) * proportion;\n\t\t\t\t\telement.dispatchEvent( new InputEvent( 'input', { bubbles: true } ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\t\ttraverse( element.childNodes[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttraverse( element );\n\n}\n\nexport { HTMLMesh };\n", "import {\n\tGroup,\n\tRaycaster,\n\tVector2\n} from 'three';\n\nconst _pointer = new Vector2();\nconst _event = { type: '', data: _pointer };\n\nconst _raycaster = new Raycaster();\n\nclass InteractiveGroup extends Group {\n\n\tlistenToPointerEvents( renderer, camera ) {\n\n\t\tconst scope = this;\n\t\tconst raycaster = new Raycaster();\n\n\t\tconst element = renderer.domElement;\n\n\t\tfunction onPointerEvent( event ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tconst rect = renderer.domElement.getBoundingClientRect();\n\n\t\t\t_pointer.x = ( event.clientX - rect.left ) / rect.width * 2 - 1;\n\t\t\t_pointer.y = - ( event.clientY - rect.top ) / rect.height * 2 + 1;\n\n\t\t\traycaster.setFromCamera( _pointer, camera );\n\n\t\t\tconst intersects = raycaster.intersectObjects( scope.children, false );\n\n\t\t\tif ( intersects.length > 0 ) {\n\n\t\t\t\tconst intersection = intersects[ 0 ];\n\n\t\t\t\tconst object = intersection.object;\n\t\t\t\tconst uv = intersection.uv;\n\n\t\t\t\t_event.type = event.type;\n\t\t\t\t_event.data.set( uv.x, 1 - uv.y );\n\n\t\t\t\tobject.dispatchEvent( _event );\n\n\t\t\t}\n\n\t\t}\n\n\t\telement.addEventListener( 'pointerdown', onPointerEvent );\n\t\telement.addEventListener( 'pointerup', onPointerEvent );\n\t\telement.addEventListener( 'pointermove', onPointerEvent );\n\t\telement.addEventListener( 'mousedown', onPointerEvent );\n\t\telement.addEventListener( 'mouseup', onPointerEvent );\n\t\telement.addEventListener( 'mousemove', onPointerEvent );\n\t\telement.addEventListener( 'click', onPointerEvent );\n\n\t}\n\n\tlistenToXRControllerEvents( controller ) {\n\n\t\tconst scope = this;\n\n\t\t// TODO: Dispatch pointerevents too\n\n\t\tconst events = {\n\t\t\t'move': 'mousemove',\n\t\t\t'select': 'click',\n\t\t\t'selectstart': 'mousedown',\n\t\t\t'selectend': 'mouseup'\n\t\t};\n\n\t\tfunction onXRControllerEvent( event ) {\n\n\t\t\tconst controller = event.target;\n\n\t\t\t_raycaster.setFromXRController( controller );\n\n\t\t\tconst intersections = _raycaster.intersectObjects( scope.children, false );\n\n\t\t\tif ( intersections.length > 0 ) {\n\n\t\t\t\tconst intersection = intersections[ 0 ];\n\n\t\t\t\tconst object = intersection.object;\n\t\t\t\tconst uv = intersection.uv;\n\n\t\t\t\t_event.type = events[ event.type ];\n\t\t\t\t_event.data.set( uv.x, 1 - uv.y );\n\n\t\t\t\tobject.dispatchEvent( _event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tcontroller.addEventListener( 'move', onXRControllerEvent );\n\t\tcontroller.addEventListener( 'select', onXRControllerEvent );\n\t\tcontroller.addEventListener( 'selectstart', onXRControllerEvent );\n\t\tcontroller.addEventListener( 'selectend', onXRControllerEvent );\n\n\t}\n\n}\n\nexport { InteractiveGroup };\n", "import {\n\tFrustum,\n\tVector3,\n\tMatrix4,\n\tQuaternion,\n} from 'three';\n\n/**\n * This is a class to check whether objects are in a selection area in 3D space\n */\n\nconst _frustum = new Frustum();\nconst _center = new Vector3();\n\nconst _tmpPoint = new Vector3();\n\nconst _vecNear = new Vector3();\nconst _vecTopLeft = new Vector3();\nconst _vecTopRight = new Vector3();\nconst _vecDownRight = new Vector3();\nconst _vecDownLeft = new Vector3();\n\nconst _vecFarTopLeft = new Vector3();\nconst _vecFarTopRight = new Vector3();\nconst _vecFarDownRight = new Vector3();\nconst _vecFarDownLeft = new Vector3();\n\nconst _vectemp1 = new Vector3();\nconst _vectemp2 = new Vector3();\nconst _vectemp3 = new Vector3();\n\nconst _matrix = new Matrix4();\nconst _quaternion = new Quaternion();\nconst _scale = new Vector3();\n\nclass SelectionBox {\n\n\tconstructor( camera, scene, deep = Number.MAX_VALUE ) {\n\n\t\tthis.camera = camera;\n\t\tthis.scene = scene;\n\t\tthis.startPoint = new Vector3();\n\t\tthis.endPoint = new Vector3();\n\t\tthis.collection = [];\n\t\tthis.instances = {};\n\t\tthis.deep = deep;\n\n\t}\n\n\tselect( startPoint, endPoint ) {\n\n\t\tthis.startPoint = startPoint || this.startPoint;\n\t\tthis.endPoint = endPoint || this.endPoint;\n\t\tthis.collection = [];\n\n\t\tthis.updateFrustum( this.startPoint, this.endPoint );\n\t\tthis.searchChildInFrustum( _frustum, this.scene );\n\n\t\treturn this.collection;\n\n\t}\n\n\tupdateFrustum( startPoint, endPoint ) {\n\n\t\tstartPoint = startPoint || this.startPoint;\n\t\tendPoint = endPoint || this.endPoint;\n\n\t\t// Avoid invalid frustum\n\n\t\tif ( startPoint.x === endPoint.x ) {\n\n\t\t\tendPoint.x += Number.EPSILON;\n\n\t\t}\n\n\t\tif ( startPoint.y === endPoint.y ) {\n\n\t\t\tendPoint.y += Number.EPSILON;\n\n\t\t}\n\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.camera.updateMatrixWorld();\n\n\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t_tmpPoint.copy( startPoint );\n\t\t\t_tmpPoint.x = Math.min( startPoint.x, endPoint.x );\n\t\t\t_tmpPoint.y = Math.max( startPoint.y, endPoint.y );\n\t\t\tendPoint.x = Math.max( startPoint.x, endPoint.x );\n\t\t\tendPoint.y = Math.min( startPoint.y, endPoint.y );\n\n\t\t\t_vecNear.setFromMatrixPosition( this.camera.matrixWorld );\n\t\t\t_vecTopLeft.copy( _tmpPoint );\n\t\t\t_vecTopRight.set( endPoint.x, _tmpPoint.y, 0 );\n\t\t\t_vecDownRight.copy( endPoint );\n\t\t\t_vecDownLeft.set( _tmpPoint.x, endPoint.y, 0 );\n\n\t\t\t_vecTopLeft.unproject( this.camera );\n\t\t\t_vecTopRight.unproject( this.camera );\n\t\t\t_vecDownRight.unproject( this.camera );\n\t\t\t_vecDownLeft.unproject( this.camera );\n\n\t\t\t_vectemp1.copy( _vecTopLeft ).sub( _vecNear );\n\t\t\t_vectemp2.copy( _vecTopRight ).sub( _vecNear );\n\t\t\t_vectemp3.copy( _vecDownRight ).sub( _vecNear );\n\t\t\t_vectemp1.normalize();\n\t\t\t_vectemp2.normalize();\n\t\t\t_vectemp3.normalize();\n\n\t\t\t_vectemp1.multiplyScalar( this.deep );\n\t\t\t_vectemp2.multiplyScalar( this.deep );\n\t\t\t_vectemp3.multiplyScalar( this.deep );\n\t\t\t_vectemp1.add( _vecNear );\n\t\t\t_vectemp2.add( _vecNear );\n\t\t\t_vectemp3.add( _vecNear );\n\n\t\t\tconst planes = _frustum.planes;\n\n\t\t\tplanes[ 0 ].setFromCoplanarPoints( _vecNear, _vecTopLeft, _vecTopRight );\n\t\t\tplanes[ 1 ].setFromCoplanarPoints( _vecNear, _vecTopRight, _vecDownRight );\n\t\t\tplanes[ 2 ].setFromCoplanarPoints( _vecDownRight, _vecDownLeft, _vecNear );\n\t\t\tplanes[ 3 ].setFromCoplanarPoints( _vecDownLeft, _vecTopLeft, _vecNear );\n\t\t\tplanes[ 4 ].setFromCoplanarPoints( _vecTopRight, _vecDownRight, _vecDownLeft );\n\t\t\tplanes[ 5 ].setFromCoplanarPoints( _vectemp3, _vectemp2, _vectemp1 );\n\t\t\tplanes[ 5 ].normal.multiplyScalar( - 1 );\n\n\t\t} else if ( this.camera.isOrthographicCamera ) {\n\n\t\t\tconst left = Math.min( startPoint.x, endPoint.x );\n\t\t\tconst top = Math.max( startPoint.y, endPoint.y );\n\t\t\tconst right = Math.max( startPoint.x, endPoint.x );\n\t\t\tconst down = Math.min( startPoint.y, endPoint.y );\n\n\t\t\t_vecTopLeft.set( left, top, - 1 );\n\t\t\t_vecTopRight.set( right, top, - 1 );\n\t\t\t_vecDownRight.set( right, down, - 1 );\n\t\t\t_vecDownLeft.set( left, down, - 1 );\n\n\t\t\t_vecFarTopLeft.set( left, top, 1 );\n\t\t\t_vecFarTopRight.set( right, top, 1 );\n\t\t\t_vecFarDownRight.set( right, down, 1 );\n\t\t\t_vecFarDownLeft.set( left, down, 1 );\n\n\t\t\t_vecTopLeft.unproject( this.camera );\n\t\t\t_vecTopRight.unproject( this.camera );\n\t\t\t_vecDownRight.unproject( this.camera );\n\t\t\t_vecDownLeft.unproject( this.camera );\n\n\t\t\t_vecFarTopLeft.unproject( this.camera );\n\t\t\t_vecFarTopRight.unproject( this.camera );\n\t\t\t_vecFarDownRight.unproject( this.camera );\n\t\t\t_vecFarDownLeft.unproject( this.camera );\n\n\t\t\tconst planes = _frustum.planes;\n\n\t\t\tplanes[ 0 ].setFromCoplanarPoints( _vecTopLeft, _vecFarTopLeft, _vecFarTopRight );\n\t\t\tplanes[ 1 ].setFromCoplanarPoints( _vecTopRight, _vecFarTopRight, _vecFarDownRight );\n\t\t\tplanes[ 2 ].setFromCoplanarPoints( _vecFarDownRight, _vecFarDownLeft, _vecDownLeft );\n\t\t\tplanes[ 3 ].setFromCoplanarPoints( _vecFarDownLeft, _vecFarTopLeft, _vecTopLeft );\n\t\t\tplanes[ 4 ].setFromCoplanarPoints( _vecTopRight, _vecDownRight, _vecDownLeft );\n\t\t\tplanes[ 5 ].setFromCoplanarPoints( _vecFarDownRight, _vecFarTopRight, _vecFarTopLeft );\n\t\t\tplanes[ 5 ].normal.multiplyScalar( - 1 );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.SelectionBox: Unsupported camera type.' );\n\n\t\t}\n\n\t}\n\n\tsearchChildInFrustum( frustum, object ) {\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tif ( object.isInstancedMesh ) {\n\n\t\t\t\tthis.instances[ object.uuid ] = [];\n\n\t\t\t\tfor ( let instanceId = 0; instanceId < object.count; instanceId ++ ) {\n\n\t\t\t\t\tobject.getMatrixAt( instanceId, _matrix );\n\t\t\t\t\t_matrix.decompose( _center, _quaternion, _scale );\n\t\t\t\t\t_center.applyMatrix4( object.matrixWorld );\n\n\t\t\t\t\tif ( frustum.containsPoint( _center ) ) {\n\n\t\t\t\t\t\tthis.instances[ object.uuid ].push( instanceId );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( object.geometry.boundingSphere === null ) object.geometry.computeBoundingSphere();\n\n\t\t\t\t_center.copy( object.geometry.boundingSphere.center );\n\n\t\t\t\t_center.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tif ( frustum.containsPoint( _center ) ) {\n\n\t\t\t\t\tthis.collection.push( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tfor ( let x = 0; x < object.children.length; x ++ ) {\n\n\t\t\t\tthis.searchChildInFrustum( frustum, object.children[ x ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { SelectionBox };\n", "import { Vector2 } from 'three';\n\nclass SelectionHelper {\n\n\tconstructor( renderer, cssClassName ) {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.classList.add( cssClassName );\n\t\tthis.element.style.pointerEvents = 'none';\n\n\t\tthis.renderer = renderer;\n\n\t\tthis.startPoint = new Vector2();\n\t\tthis.pointTopLeft = new Vector2();\n\t\tthis.pointBottomRight = new Vector2();\n\n\t\tthis.isDown = false;\n\t\tthis.enabled = true;\n\n\t\tthis.onPointerDown = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tthis.isDown = true;\n\t\t\tthis.onSelectStart( event );\n\n\t\t}.bind( this );\n\n\t\tthis.onPointerMove = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( this.isDown ) {\n\n\t\t\t\tthis.onSelectMove( event );\n\n\t\t\t}\n\n\t\t}.bind( this );\n\n\t\tthis.onPointerUp = function ( ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tthis.isDown = false;\n\t\t\tthis.onSelectOver();\n\n\t\t}.bind( this );\n\n\t\tthis.renderer.domElement.addEventListener( 'pointerdown', this.onPointerDown );\n\t\tthis.renderer.domElement.addEventListener( 'pointermove', this.onPointerMove );\n\t\tthis.renderer.domElement.addEventListener( 'pointerup', this.onPointerUp );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderer.domElement.removeEventListener( 'pointerdown', this.onPointerDown );\n\t\tthis.renderer.domElement.removeEventListener( 'pointermove', this.onPointerMove );\n\t\tthis.renderer.domElement.removeEventListener( 'pointerup', this.onPointerUp );\n\n\t}\n\n\tonSelectStart( event ) {\n\n\t\tthis.element.style.display = 'none';\n\n\t\tthis.renderer.domElement.parentElement.appendChild( this.element );\n\n\t\tthis.element.style.left = event.clientX + 'px';\n\t\tthis.element.style.top = event.clientY + 'px';\n\t\tthis.element.style.width = '0px';\n\t\tthis.element.style.height = '0px';\n\n\t\tthis.startPoint.x = event.clientX;\n\t\tthis.startPoint.y = event.clientY;\n\n\t}\n\n\tonSelectMove( event ) {\n\n\t\tthis.element.style.display = 'block';\n\n\t\tthis.pointBottomRight.x = Math.max( this.startPoint.x, event.clientX );\n\t\tthis.pointBottomRight.y = Math.max( this.startPoint.y, event.clientY );\n\t\tthis.pointTopLeft.x = Math.min( this.startPoint.x, event.clientX );\n\t\tthis.pointTopLeft.y = Math.min( this.startPoint.y, event.clientY );\n\n\t\tthis.element.style.left = this.pointTopLeft.x + 'px';\n\t\tthis.element.style.top = this.pointTopLeft.y + 'px';\n\t\tthis.element.style.width = ( this.pointBottomRight.x - this.pointTopLeft.x ) + 'px';\n\t\tthis.element.style.height = ( this.pointBottomRight.y - this.pointTopLeft.y ) + 'px';\n\n\t}\n\n\tonSelectOver() {\n\n\t\tthis.element.parentElement.removeChild( this.element );\n\n\t}\n\n}\n\nexport { SelectionHelper };\n", "import {\n\tColor,\n\tLightProbe,\n\tLinearSRGBColorSpace,\n\tSphericalHarmonics3,\n\tVector3,\n\tSRGBColorSpace,\n\tNoColorSpace,\n\tHalfFloatType,\n\tDataUtils\n} from 'three';\n\nclass LightProbeGenerator {\n\n\t// https://www.ppsloan.org/publications/StupidSH36.pdf\n\tstatic fromCubeTexture( cubeTexture ) {\n\n\t\tlet totalWeight = 0;\n\n\t\tconst coord = new Vector3();\n\n\t\tconst dir = new Vector3();\n\n\t\tconst color = new Color();\n\n\t\tconst shBasis = [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\n\t\tconst sh = new SphericalHarmonics3();\n\t\tconst shCoefficients = sh.coefficients;\n\n\t\tfor ( let faceIndex = 0; faceIndex < 6; faceIndex ++ ) {\n\n\t\t\tconst image = cubeTexture.image[ faceIndex ];\n\n\t\t\tconst width = image.width;\n\t\t\tconst height = image.height;\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\n\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, width, height );\n\n\t\t\tconst data = imageData.data;\n\n\t\t\tconst imageWidth = imageData.width; // assumed to be square\n\n\t\t\tconst pixelSize = 2 / imageWidth;\n\n\t\t\tfor ( let i = 0, il = data.length; i < il; i += 4 ) { // RGBA assumed\n\n\t\t\t\t// pixel color\n\t\t\t\tcolor.setRGB( data[ i ] / 255, data[ i + 1 ] / 255, data[ i + 2 ] / 255 );\n\n\t\t\t\t// convert to linear color space\n\t\t\t\tconvertColorToLinear( color, cubeTexture.colorSpace );\n\n\t\t\t\t// pixel coordinate on unit cube\n\n\t\t\t\tconst pixelIndex = i / 4;\n\n\t\t\t\tconst col = - 1 + ( pixelIndex % imageWidth + 0.5 ) * pixelSize;\n\n\t\t\t\tconst row = 1 - ( Math.floor( pixelIndex / imageWidth ) + 0.5 ) * pixelSize;\n\n\t\t\t\tswitch ( faceIndex ) {\n\n\t\t\t\t\tcase 0: coord.set( - 1, row, - col ); break;\n\n\t\t\t\t\tcase 1: coord.set( 1, row, col ); break;\n\n\t\t\t\t\tcase 2: coord.set( - col, 1, - row ); break;\n\n\t\t\t\t\tcase 3: coord.set( - col, - 1, row ); break;\n\n\t\t\t\t\tcase 4: coord.set( - col, row, 1 ); break;\n\n\t\t\t\t\tcase 5: coord.set( col, row, - 1 ); break;\n\n\t\t\t\t}\n\n\t\t\t\t// weight assigned to this pixel\n\n\t\t\t\tconst lengthSq = coord.lengthSq();\n\n\t\t\t\tconst weight = 4 / ( Math.sqrt( lengthSq ) * lengthSq );\n\n\t\t\t\ttotalWeight += weight;\n\n\t\t\t\t// direction vector to this pixel\n\t\t\t\tdir.copy( coord ).normalize();\n\n\t\t\t\t// evaluate SH basis functions in direction dir\n\t\t\t\tSphericalHarmonics3.getBasisAt( dir, shBasis );\n\n\t\t\t\t// accummuulate\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tshCoefficients[ j ].x += shBasis[ j ] * color.r * weight;\n\t\t\t\t\tshCoefficients[ j ].y += shBasis[ j ] * color.g * weight;\n\t\t\t\t\tshCoefficients[ j ].z += shBasis[ j ] * color.b * weight;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalize\n\t\tconst norm = ( 4 * Math.PI ) / totalWeight;\n\n\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\tshCoefficients[ j ].x *= norm;\n\t\t\tshCoefficients[ j ].y *= norm;\n\t\t\tshCoefficients[ j ].z *= norm;\n\n\t\t}\n\n\t\treturn new LightProbe( sh );\n\n\t}\n\n\tstatic fromCubeRenderTarget( renderer, cubeRenderTarget ) {\n\n\t\t// The renderTarget must be set to RGBA in order to make readRenderTargetPixels works\n\t\tlet totalWeight = 0;\n\n\t\tconst coord = new Vector3();\n\n\t\tconst dir = new Vector3();\n\n\t\tconst color = new Color();\n\n\t\tconst shBasis = [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\n\t\tconst sh = new SphericalHarmonics3();\n\t\tconst shCoefficients = sh.coefficients;\n\n\t\tconst dataType = cubeRenderTarget.texture.type;\n\n\t\tfor ( let faceIndex = 0; faceIndex < 6; faceIndex ++ ) {\n\n\t\t\tconst imageWidth = cubeRenderTarget.width; // assumed to be square\n\n\t\t\tlet data;\n\n\t\t\tif ( dataType === HalfFloatType ) {\n\n\t\t\t\tdata = new Uint16Array( imageWidth * imageWidth * 4 );\n\n\t\t\t} else {\n\n\t\t\t\t// assuming UnsignedByteType\n\n\t\t\t\tdata = new Uint8Array( imageWidth * imageWidth * 4 );\n\n\t\t\t}\n\n\t\t\trenderer.readRenderTargetPixels( cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex );\n\n\t\t\tconst pixelSize = 2 / imageWidth;\n\n\t\t\tfor ( let i = 0, il = data.length; i < il; i += 4 ) { // RGBA assumed\n\n\t\t\t\tlet r, g, b;\n\n\t\t\t\tif ( dataType === HalfFloatType ) {\n\n\t\t\t\t\tr = DataUtils.fromHalfFloat( data[ i ] );\n\t\t\t\t\tg = DataUtils.fromHalfFloat( data[ i + 1 ] );\n\t\t\t\t\tb = DataUtils.fromHalfFloat( data[ i + 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tr = data[ i ] / 255;\n\t\t\t\t\tg = data[ i + 1 ] / 255;\n\t\t\t\t\tb = data[ i + 2 ] / 255;\n\n\t\t\t\t}\n\n\t\t\t\t// pixel color\n\t\t\t\tcolor.setRGB( r, g, b );\n\n\t\t\t\t// convert to linear color space\n\t\t\t\tconvertColorToLinear( color, cubeRenderTarget.texture.colorSpace );\n\n\t\t\t\t// pixel coordinate on unit cube\n\n\t\t\t\tconst pixelIndex = i / 4;\n\n\t\t\t\tconst col = - 1 + ( pixelIndex % imageWidth + 0.5 ) * pixelSize;\n\n\t\t\t\tconst row = 1 - ( Math.floor( pixelIndex / imageWidth ) + 0.5 ) * pixelSize;\n\n\t\t\t\tswitch ( faceIndex ) {\n\n\t\t\t\t\tcase 0: coord.set( 1, row, - col ); break;\n\n\t\t\t\t\tcase 1: coord.set( - 1, row, col ); break;\n\n\t\t\t\t\tcase 2: coord.set( col, 1, - row ); break;\n\n\t\t\t\t\tcase 3: coord.set( col, - 1, row ); break;\n\n\t\t\t\t\tcase 4: coord.set( col, row, 1 ); break;\n\n\t\t\t\t\tcase 5: coord.set( - col, row, - 1 ); break;\n\n\t\t\t\t}\n\n\t\t\t\t// weight assigned to this pixel\n\n\t\t\t\tconst lengthSq = coord.lengthSq();\n\n\t\t\t\tconst weight = 4 / ( Math.sqrt( lengthSq ) * lengthSq );\n\n\t\t\t\ttotalWeight += weight;\n\n\t\t\t\t// direction vector to this pixel\n\t\t\t\tdir.copy( coord ).normalize();\n\n\t\t\t\t// evaluate SH basis functions in direction dir\n\t\t\t\tSphericalHarmonics3.getBasisAt( dir, shBasis );\n\n\t\t\t\t// accummuulate\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tshCoefficients[ j ].x += shBasis[ j ] * color.r * weight;\n\t\t\t\t\tshCoefficients[ j ].y += shBasis[ j ] * color.g * weight;\n\t\t\t\t\tshCoefficients[ j ].z += shBasis[ j ] * color.b * weight;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalize\n\t\tconst norm = ( 4 * Math.PI ) / totalWeight;\n\n\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\tshCoefficients[ j ].x *= norm;\n\t\t\tshCoefficients[ j ].y *= norm;\n\t\t\tshCoefficients[ j ].z *= norm;\n\n\t\t}\n\n\t\treturn new LightProbe( sh );\n\n\t}\n\n}\n\nfunction convertColorToLinear( color, colorSpace ) {\n\n\tswitch ( colorSpace ) {\n\n\t\tcase SRGBColorSpace:\n\n\t\t\tcolor.convertSRGBToLinear();\n\t\t\tbreak;\n\n\t\tcase LinearSRGBColorSpace:\n\t\tcase NoColorSpace:\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tconsole.warn( 'WARNING: LightProbeGenerator convertColorToLinear() encountered an unsupported color space.' );\n\t\t\tbreak;\n\n\t}\n\n\treturn color;\n\n}\n\nexport { LightProbeGenerator };\n", "import {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tNearestFilter,\n\tRGBAFormat,\n\tUVMapping\n} from 'three';\n\n/**\n * Uniforms library for RectAreaLight shared webgl shaders\n *\n * NOTE: This is a temporary location for the BRDF approximation texture data\n * based off of Eric Heitz's work (see citation below). BRDF data for\n * RectAreaLight is currently approximated using a precomputed texture\n * of roughly 80kb in size. The hope is to find a better way to include\n * the large texture data before including the full RectAreaLight implementation\n * in the main build files.\n *\n * TODO: figure out a way to compress the LTC BRDF data\n */\n\n// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\n// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt\n// code: https://github.com/selfshadow/ltc_code/\n\nclass RectAreaLightTexturesLib {\n\n\tstatic init() {\n\n\t\t// source: https://github.com/selfshadow/ltc_code/tree/master/fit/results/ltc.js\n\n\t\tconst LTC_MAT_1 = [ 1, 0, 0, 2e-05, 1, 0, 0, 0.000503905, 1, 0, 0, 0.00201562, 1, 0, 0, 0.00453516, 1, 0, 0, 0.00806253, 1, 0, 0, 0.0125978, 1, 0, 0, 0.018141, 1, 0, 0, 0.0246924, 1, 0, 0, 0.0322525, 1, 0, 0, 0.0408213, 1, 0, 0, 0.0503999, 1, 0, 0, 0.0609894, 1, 0, 0, 0.0725906, 1, 0, 0, 0.0852058, 1, 0, 0, 0.0988363, 1, 0, 0, 0.113484, 1, 0, 0, 0.129153, 1, 0, 0, 0.145839, 1, 0, 0, 0.163548, 1, 0, 0, 0.182266, 1, 0, 0, 0.201942, 1, 0, 0, 0.222314, 1, 0, 0, 0.241906, 1, 0, 0, 0.262314, 1, 0, 0, 0.285754, 1, 0, 0, 0.310159, 1, 0, 0, 0.335426, 1, 0, 0, 0.361341, 1, 0, 0, 0.387445, 1, 0, 0, 0.412784, 1, 0, 0, 0.438197, 1, 0, 0, 0.466966, 1, 0, 0, 0.49559, 1, 0, 0, 0.523448, 1, 0, 0, 0.549938, 1, 0, 0, 0.57979, 1, 0, 0, 0.608746, 1, 0, 0, 0.636185, 1, 0, 0, 0.664748, 1, 0, 0, 0.69313, 1, 0, 0, 0.71966, 1, 0, 0, 0.747662, 1, 0, 0, 0.774023, 1, 0, 0, 0.799775, 1, 0, 0, 0.825274, 1, 0, 0, 0.849156, 1, 0, 0, 0.873248, 1, 0, 0, 0.89532, 1, 0, 0, 0.917565, 1, 0, 0, 0.937863, 1, 0, 0, 0.958139, 1, 0, 0, 0.976563, 1, 0, 0, 0.994658, 1, 0, 0, 1.0112, 1, 0, 0, 1.02712, 1, 0, 0, 1.04189, 1, 0, 0, 1.05568, 1, 0, 0, 1.06877, 1, 0, 0, 1.08058, 1, 0, 0, 1.09194, 1, 0, 0, 1.10191, 1, 0, 0, 1.11161, 1, 0, 0, 1.1199, 1, 0, 0, 1.12813, 0.999547, - 4.48815e-07, 0.0224417, 1.99902e-05, 0.999495, - 1.13079e-05, 0.0224406, 0.000503651, 0.999496, - 4.52317e-05, 0.0224406, 0.00201461, 0.999496, - 0.000101772, 0.0224406, 0.00453287, 0.999495, - 0.000180928, 0.0224406, 0.00805845, 0.999497, - 0.000282702, 0.0224406, 0.0125914, 0.999496, - 0.000407096, 0.0224406, 0.0181319, 0.999498, - 0.000554114, 0.0224406, 0.02468, 0.999499, - 0.000723768, 0.0224406, 0.0322363, 0.999495, - 0.000916058, 0.0224405, 0.0408009, 0.999499, - 0.00113101, 0.0224408, 0.050375, 0.999494, - 0.00136863, 0.0224405, 0.0609586, 0.999489, - 0.00162896, 0.0224401, 0.0725537, 0.999489, - 0.00191201, 0.0224414, 0.0851619, 0.999498, - 0.00221787, 0.0224413, 0.0987867, 0.999492, - 0.00254642, 0.0224409, 0.113426, 0.999507, - 0.00289779, 0.0224417, 0.129088, 0.999494, - 0.0032716, 0.0224386, 0.145767, 0.999546, - 0.0036673, 0.0224424, 0.163472, 0.999543, - 0.00408166, 0.0224387, 0.182182, 0.999499, - 0.00450056, 0.0224338, 0.201843, 0.999503, - 0.00483661, 0.0224203, 0.222198, 0.999546, - 0.00452928, 0.022315, 0.241714, 0.999508, - 0.00587403, 0.0224329, 0.262184, 0.999509, - 0.00638806, 0.0224271, 0.285609, 0.999501, - 0.00691028, 0.0224166, 0.309998, 0.999539, - 0.00741979, 0.0223989, 0.335262, 0.999454, - 0.00786282, 0.0223675, 0.361154, 0.999529, - 0.00811928, 0.0222828, 0.387224, 0.999503, - 0.00799941, 0.0221063, 0.41252, 0.999561, - 0.00952753, 0.0223057, 0.438006, 0.999557, - 0.0099134, 0.0222065, 0.466735, 0.999541, - 0.0100935, 0.0220402, 0.495332, 0.999562, - 0.00996821, 0.0218067, 0.523197, 0.999556, - 0.0105031, 0.0217096, 0.550223, 0.999561, - 0.0114191, 0.0217215, 0.579498, 0.999588, - 0.0111818, 0.0213357, 0.608416, 0.999633, - 0.0107725, 0.0208689, 0.635965, 0.999527, - 0.0121671, 0.0210149, 0.664476, 0.999508, - 0.0116005, 0.020431, 0.692786, 0.999568, - 0.0115604, 0.0199791, 0.719709, 0.999671, - 0.0121117, 0.0197415, 0.74737, 0.999688, - 0.0110769, 0.0188846, 0.773692, 0.99962, - 0.0122368, 0.0188452, 0.799534, 0.999823, - 0.0110325, 0.0178001, 0.825046, 0.999599, - 0.0114923, 0.0174221, 0.849075, 0.999619, - 0.0105923, 0.0164345, 0.872999, 0.999613, - 0.0105988, 0.0158227, 0.895371, 0.99964, - 0.00979861, 0.0148131, 0.917364, 0.99977, - 0.00967238, 0.0140721, 0.938002, 0.999726, - 0.00869175, 0.0129543, 0.957917, 0.99973, - 0.00866872, 0.0122329, 0.976557, 0.999773, - 0.00731956, 0.0108958, 0.994459, 0.999811, - 0.00756027, 0.0102715, 1.01118, 0.999862, - 0.00583732, 0.00878781, 1.02701, 0.999835, - 0.00631438, 0.00827529, 1.04186, 0.999871, - 0.00450785, 0.00674583, 1.05569, 0.999867, - 0.00486079, 0.00621041, 1.06861, 0.999939, - 0.00322072, 0.00478301, 1.08064, 0.999918, - 0.00318199, 0.00406395, 1.09181, 1.00003, - 0.00193348, 0.00280682, 1.10207, 0.999928, - 0.00153729, 0.00198741, 1.11152, 0.999933, - 0.000623666, 0.000917714, 1.12009, 1, - 1.02387e-06, 9.07581e-07, 1.12813, 0.997866, - 8.96716e-07, 0.0448334, 1.99584e-05, 0.997987, - 2.25945e-05, 0.0448389, 0.000502891, 0.997987, - 9.03781e-05, 0.0448388, 0.00201156, 0.997985, - 0.000203351, 0.0448388, 0.00452602, 0.997986, - 0.000361514, 0.0448388, 0.00804629, 0.997987, - 0.00056487, 0.0448389, 0.0125724, 0.997988, - 0.000813423, 0.0448389, 0.0181045, 0.997984, - 0.00110718, 0.0448387, 0.0246427, 0.997985, - 0.00144616, 0.0448388, 0.0321875, 0.997987, - 0.00183038, 0.044839, 0.0407392, 0.997983, - 0.00225987, 0.0448387, 0.0502986, 0.997991, - 0.00273467, 0.0448389, 0.0608667, 0.997984, - 0.00325481, 0.0448384, 0.0724444, 0.998002, - 0.00382043, 0.044839, 0.0850348, 0.997997, - 0.00443145, 0.0448396, 0.0986372, 0.998007, - 0.00508796, 0.0448397, 0.113255, 0.998008, - 0.00578985, 0.04484, 0.128891, 0.998003, - 0.00653683, 0.0448384, 0.145548, 0.997983, - 0.00732713, 0.0448358, 0.163221, 0.997985, - 0.00815454, 0.0448358, 0.181899, 0.998005, - 0.00898985, 0.0448286, 0.201533, 0.998026, - 0.00964404, 0.0447934, 0.221821, 0.998055, - 0.00922677, 0.044611, 0.241282, 0.99804, - 0.0117361, 0.0448245, 0.261791, 0.998048, - 0.0127628, 0.0448159, 0.285181, 0.998088, - 0.0138055, 0.0447996, 0.30954, 0.998058, - 0.0148206, 0.0447669, 0.334751, 0.998099, - 0.0156998, 0.044697, 0.36061, 0.998116, - 0.0161976, 0.0445122, 0.386603, 0.998195, - 0.015945, 0.0441711, 0.411844, 0.998168, - 0.0183947, 0.0444255, 0.43773, 0.998184, - 0.0197913, 0.0443809, 0.466009, 0.998251, - 0.0201426, 0.0440689, 0.494574, 0.998305, - 0.0198847, 0.0435632, 0.522405, 0.998273, - 0.0210577, 0.043414, 0.549967, 0.998254, - 0.0227901, 0.0433943, 0.578655, 0.998349, - 0.0223108, 0.0426529, 0.60758, 0.99843, - 0.0223088, 0.042, 0.635524, 0.998373, - 0.0241141, 0.0418987, 0.663621, 0.998425, - 0.0231446, 0.0408118, 0.691906, 0.998504, - 0.0233684, 0.0400565, 0.719339, 0.998443, - 0.0241652, 0.0394634, 0.74643, 0.99848, - 0.0228715, 0.0380002, 0.773086, 0.998569, - 0.023519, 0.0372322, 0.798988, 0.998619, - 0.0223108, 0.0356468, 0.824249, 0.998594, - 0.0223105, 0.034523, 0.848808, 0.998622, - 0.0213426, 0.0328887, 0.87227, 0.998669, - 0.0207912, 0.0314374, 0.895157, 0.998705, - 0.0198416, 0.0296925, 0.916769, 0.998786, - 0.0189168, 0.0279634, 0.937773, 0.998888, - 0.0178811, 0.0261597, 0.957431, 0.99906, - 0.0166845, 0.0242159, 0.976495, 0.999038, - 0.0155464, 0.0222638, 0.994169, 0.999237, - 0.0141349, 0.0201967, 1.01112, 0.999378, - 0.0129324, 0.0181744, 1.02692, 0.999433, - 0.0113192, 0.0159898, 1.04174, 0.999439, - 0.0101244, 0.0140385, 1.05559, 0.999614, - 0.00837456, 0.0117826, 1.06852, 0.999722, - 0.00721769, 0.00983745, 1.08069, 0.999817, - 0.00554067, 0.00769002, 1.09176, 0.99983, - 0.00426961, 0.005782, 1.10211, 0.999964, - 0.00273904, 0.00374503, 1.11152, 1.00001, - 0.00136739, 0.00187176, 1.12031, 0.999946, 3.93227e-05, - 2.8919e-05, 1.12804, 0.995847, - 1.3435e-06, 0.0671785, 1.9916e-05, 0.995464, - 3.38387e-05, 0.0671527, 0.000501622, 0.99547, - 0.000135355, 0.0671531, 0.00200649, 0.995471, - 0.00030455, 0.0671532, 0.00451461, 0.99547, - 0.000541423, 0.0671531, 0.008026, 0.995471, - 0.00084598, 0.0671531, 0.0125407, 0.99547, - 0.00121823, 0.0671531, 0.0180589, 0.99547, - 0.00165817, 0.0671531, 0.0245806, 0.995463, - 0.00216583, 0.0671526, 0.0321062, 0.995468, - 0.00274127, 0.0671527, 0.0406366, 0.995474, - 0.00338447, 0.0671534, 0.0501717, 0.995473, - 0.00409554, 0.0671533, 0.0607131, 0.995478, - 0.00487451, 0.0671531, 0.0722618, 0.995476, - 0.00572148, 0.0671532, 0.0848191, 0.995477, - 0.00663658, 0.0671539, 0.0983882, 0.995498, - 0.00761986, 0.0671541, 0.112972, 0.995509, - 0.00867094, 0.0671542, 0.128568, 0.995509, - 0.00978951, 0.0671531, 0.145183, 0.995503, - 0.0109725, 0.0671491, 0.162808, 0.995501, - 0.012211, 0.0671465, 0.181441, 0.99553, - 0.0134565, 0.0671371, 0.201015, 0.99555, - 0.014391, 0.0670831, 0.221206, 0.99558, - 0.014351, 0.0668883, 0.240813, 0.995577, - 0.0173997, 0.0671055, 0.261257, 0.995602, - 0.0191111, 0.0671178, 0.284467, 0.995623, - 0.0206705, 0.0670946, 0.308765, 0.995658, - 0.022184, 0.0670472, 0.333905, 0.995705, - 0.0234832, 0.0669417, 0.359677, 0.995719, - 0.0241933, 0.0666714, 0.385554, 0.995786, - 0.0243539, 0.066266, 0.410951, 0.995887, - 0.0271866, 0.0664367, 0.437163, 0.995944, - 0.0296012, 0.0664931, 0.464842, 0.996004, - 0.0301045, 0.0660105, 0.49332, 0.996128, - 0.0298311, 0.0652694, 0.521131, 0.996253, - 0.0316426, 0.0650739, 0.549167, 0.996244, - 0.0339043, 0.0649433, 0.57737, 0.996309, - 0.033329, 0.0638926, 0.606073, 0.996417, - 0.0338935, 0.0630849, 0.634527, 0.996372, - 0.0353104, 0.0625083, 0.66256, 0.996542, - 0.0348942, 0.0611986, 0.690516, 0.996568, - 0.0351614, 0.060069, 0.718317, 0.996711, - 0.0354317, 0.0588522, 0.74528, 0.996671, - 0.0349513, 0.0571902, 0.772061, 0.996865, - 0.0345622, 0.0555321, 0.798089, 0.996802, - 0.0342566, 0.0537816, 0.823178, 0.996992, - 0.0330862, 0.0516095, 0.847949, 0.996944, - 0.0324666, 0.0495537, 0.871431, 0.997146, - 0.0309544, 0.0470302, 0.894357, 0.997189, - 0.0299372, 0.0446043, 0.916142, 0.997471, - 0.0281389, 0.0418812, 0.937193, 0.997515, - 0.0268702, 0.0391823, 0.957, 0.997812, - 0.0247166, 0.0361338, 0.975936, 0.998027, - 0.0233525, 0.0333945, 0.99391, 0.998233, - 0.0209839, 0.0301917, 1.01075, 0.998481, - 0.0194309, 0.027271, 1.02669, 0.998859, - 0.0169728, 0.0240162, 1.04173, 0.99894, - 0.0152322, 0.0210517, 1.05551, 0.999132, - 0.0127497, 0.0178632, 1.06856, 0.999369, - 0.0108282, 0.014787, 1.08054, 0.999549, - 0.00845886, 0.0116185, 1.09185, 0.999805, - 0.0063937, 0.00867209, 1.10207, 0.99985, - 0.00414582, 0.00566823, 1.1117, 0.999912, - 0.00207443, 0.00277562, 1.12022, 1.00001, 8.70226e-05, - 5.3766e-05, 1.12832, 0.991943, - 1.78672e-06, 0.0893382, 1.98384e-05, 0.991952, - 4.50183e-05, 0.089339, 0.000499849, 0.991956, - 0.000180074, 0.0893394, 0.0019994, 0.991955, - 0.000405167, 0.0893393, 0.00449867, 0.991953, - 0.000720298, 0.0893391, 0.00799764, 0.991955, - 0.00112548, 0.0893393, 0.0124964, 0.991957, - 0.0016207, 0.0893395, 0.0179951, 0.991958, - 0.00220601, 0.0893396, 0.0244939, 0.991947, - 0.00288137, 0.0893385, 0.0319929, 0.991962, - 0.00364693, 0.0893399, 0.0404933, 0.991965, - 0.00450264, 0.0893399, 0.049995, 0.99198, - 0.00544862, 0.0893411, 0.0604995, 0.99197, - 0.00648491, 0.0893397, 0.0720074, 0.991976, - 0.00761164, 0.089341, 0.0845207, 0.99198, - 0.00882891, 0.0893405, 0.0980413, 0.991982, - 0.0101367, 0.0893396, 0.112571, 0.992008, - 0.011535, 0.0893415, 0.128115, 0.992026, - 0.0130228, 0.0893414, 0.144672, 0.992064, - 0.0145966, 0.0893418, 0.162241, 0.992041, - 0.0162421, 0.0893359, 0.180801, 0.992086, - 0.0178888, 0.0893214, 0.200302, 0.992157, - 0.0190368, 0.0892401, 0.220332, 0.992181, - 0.0195584, 0.0890525, 0.240144, 0.992175, - 0.0227257, 0.0892153, 0.260728, 0.99221, - 0.0254195, 0.089304, 0.283473, 0.99222, - 0.0274883, 0.0892703, 0.307673, 0.992317, - 0.0294905, 0.0892027, 0.332729, 0.992374, - 0.0311861, 0.0890577, 0.358387, 0.992505, - 0.0320656, 0.0886994, 0.384102, 0.992568, - 0.0329715, 0.0883198, 0.409767, 0.992675, - 0.036006, 0.0883602, 0.436145, 0.992746, - 0.0392897, 0.0884591, 0.463217, 0.992873, - 0.0399337, 0.0878287, 0.491557, 0.992934, - 0.040231, 0.0870108, 0.519516, 0.993091, - 0.0422013, 0.0865857, 0.547741, 0.993259, - 0.0443503, 0.0861937, 0.575792, 0.993455, - 0.0446368, 0.0851187, 0.604233, 0.993497, - 0.0454299, 0.0840576, 0.632925, 0.993694, - 0.0463296, 0.0829671, 0.660985, 0.993718, - 0.0470619, 0.0817185, 0.688714, 0.993973, - 0.0468838, 0.0800294, 0.716743, 0.994207, - 0.046705, 0.0781286, 0.74377, 0.994168, - 0.0469698, 0.0763337, 0.77042, 0.9945, - 0.0456816, 0.0738184, 0.796659, 0.994356, - 0.0455518, 0.0715545, 0.821868, 0.994747, - 0.0439488, 0.0686085, 0.846572, 0.994937, - 0.0430056, 0.065869, 0.870435, 0.995142, - 0.0413414, 0.0626446, 0.893272, 0.995451, - 0.0396521, 0.05929, 0.915376, 0.995445, - 0.0378453, 0.0558503, 0.936196, 0.995967, - 0.0355219, 0.0520949, 0.956376, 0.996094, - 0.0335146, 0.048377, 0.975327, 0.996622, - 0.030682, 0.0442575, 0.993471, 0.996938, - 0.0285504, 0.0404693, 1.01052, 0.997383, - 0.0253399, 0.0360903, 1.02637, 0.997714, - 0.0231651, 0.0322176, 1.04139, 0.998249, - 0.0198138, 0.0278433, 1.05542, 0.998596, - 0.0174337, 0.0238759, 1.06846, 0.998946, - 0.0141349, 0.0195944, 1.08056, 0.99928, - 0.0115603, 0.0156279, 1.09181, 0.999507, - 0.00839065, 0.0114607, 1.10213, 0.999697, - 0.005666, 0.00763325, 1.11169, 0.999869, - 0.00269902, 0.00364946, 1.12042, 1.00001, 6.23836e-05, - 3.19288e-05, 1.12832, 0.987221, - 2.22675e-06, 0.111332, 1.97456e-05, 0.98739, - 5.61116e-05, 0.111351, 0.000497563, 0.987448, - 0.000224453, 0.111357, 0.00199031, 0.987441, - 0.000505019, 0.111357, 0.0044782, 0.987442, - 0.000897816, 0.111357, 0.00796129, 0.987442, - 0.00140284, 0.111357, 0.0124396, 0.987444, - 0.00202012, 0.111357, 0.0179132, 0.987442, - 0.00274964, 0.111357, 0.0243824, 0.987446, - 0.00359147, 0.111357, 0.0318474, 0.987435, - 0.00454562, 0.111356, 0.0403086, 0.987461, - 0.00561225, 0.111358, 0.0497678, 0.987458, - 0.00679125, 0.111358, 0.0602239, 0.987443, - 0.0080828, 0.111356, 0.0716792, 0.987476, - 0.0094872, 0.111358, 0.0841364, 0.98749, - 0.0110044, 0.111361, 0.097597, 0.987508, - 0.0126344, 0.111362, 0.112062, 0.987494, - 0.0143767, 0.111357, 0.127533, 0.987526, - 0.0162307, 0.111359, 0.144015, 0.987558, - 0.0181912, 0.111361, 0.161502, 0.987602, - 0.0202393, 0.111355, 0.179979, 0.987692, - 0.022273, 0.111346, 0.199386, 0.987702, - 0.0235306, 0.111215, 0.219183, 0.987789, - 0.0247628, 0.111061, 0.239202, 0.987776, - 0.0280668, 0.111171, 0.259957, 0.987856, - 0.0316751, 0.111327, 0.282198, 0.987912, - 0.0342468, 0.111282, 0.306294, 0.988, - 0.0367205, 0.111198, 0.331219, 0.988055, - 0.0387766, 0.110994, 0.356708, 0.988241, - 0.0397722, 0.110547, 0.382234, 0.988399, - 0.0416076, 0.110198, 0.408227, 0.988539, - 0.0448192, 0.110137, 0.434662, 0.988661, - 0.0483793, 0.110143, 0.461442, 0.988967, - 0.0495895, 0.109453, 0.489318, 0.989073, - 0.0506797, 0.108628, 0.517516, 0.989274, - 0.0526953, 0.108003, 0.545844, 0.989528, - 0.054578, 0.107255, 0.573823, 0.989709, - 0.0561503, 0.106294, 0.601944, 0.989991, - 0.056866, 0.104896, 0.630855, 0.990392, - 0.0572914, 0.103336, 0.658925, 0.990374, - 0.0586224, 0.10189, 0.686661, 0.990747, - 0.0584764, 0.099783, 0.714548, 0.991041, - 0.0582662, 0.0974309, 0.74186, 0.991236, - 0.0584118, 0.0951678, 0.768422, 0.991585, - 0.0573055, 0.0921581, 0.794817, 0.991984, - 0.0564241, 0.0891167, 0.820336, 0.9921, - 0.0553608, 0.085805, 0.84493, 0.992749, - 0.0533816, 0.0820354, 0.868961, 0.99288, - 0.0518661, 0.0782181, 0.891931, 0.993511, - 0.0492492, 0.0738935, 0.914186, 0.993617, - 0.0471956, 0.0696402, 0.93532, 0.99411, - 0.044216, 0.0649659, 0.95543, 0.994595, - 0.0416654, 0.0603177, 0.974685, 0.994976, - 0.0384314, 0.0553493, 0.992807, 0.995579, - 0.0353491, 0.0503942, 1.00996, 0.996069, - 0.0319787, 0.0452123, 1.02606, 0.996718, - 0.028472, 0.0400112, 1.04114, 0.997173, - 0.0250789, 0.0349456, 1.05517, 0.997818, - 0.0213326, 0.029653, 1.0683, 0.998318, - 0.0178509, 0.024549, 1.0805, 0.998853, - 0.0141118, 0.0194197, 1.09177, 0.999218, - 0.0105914, 0.0143869, 1.1022, 0.999594, - 0.00693474, 0.00943517, 1.11175, 0.99975, - 0.00340478, 0.00464051, 1.12056, 1.00001, 0.000109172, - 0.000112821, 1.12853, 0.983383, - 2.66524e-06, 0.133358, 1.96534e-05, 0.981942, - 6.71009e-05, 0.133162, 0.000494804, 0.981946, - 0.000268405, 0.133163, 0.00197923, 0.981944, - 0.000603912, 0.133163, 0.00445326, 0.981941, - 0.00107362, 0.133162, 0.00791693, 0.981946, - 0.00167755, 0.133163, 0.0123703, 0.981944, - 0.00241569, 0.133162, 0.0178135, 0.981945, - 0.00328807, 0.133163, 0.0242466, 0.981945, - 0.00429472, 0.133162, 0.03167, 0.981955, - 0.00543573, 0.133164, 0.0400846, 0.981951, - 0.00671105, 0.133163, 0.0494901, 0.981968, - 0.00812092, 0.133165, 0.0598886, 0.981979, - 0.00966541, 0.133166, 0.0712811, 0.981996, - 0.0113446, 0.133168, 0.083669, 0.982014, - 0.0131585, 0.133169, 0.0970533, 0.982011, - 0.0151073, 0.133167, 0.111438, 0.982062, - 0.0171906, 0.133172, 0.126826, 0.9821, - 0.0194067, 0.133175, 0.143215, 0.982149, - 0.0217502, 0.133176, 0.160609, 0.982163, - 0.0241945, 0.133173, 0.178981, 0.982247, - 0.0265907, 0.133148, 0.198249, 0.982291, - 0.027916, 0.132974, 0.217795, 0.982396, - 0.0299663, 0.132868, 0.238042, 0.982456, - 0.0334544, 0.132934, 0.258901, 0.982499, - 0.0378636, 0.133137, 0.280639, 0.982617, - 0.0409274, 0.133085, 0.304604, 0.98274, - 0.0438523, 0.132985, 0.329376, 0.982944, - 0.0462288, 0.132728, 0.354697, 0.98308, - 0.0475995, 0.132228, 0.380102, 0.983391, - 0.0501901, 0.131924, 0.406256, 0.983514, - 0.0535899, 0.131737, 0.432735, 0.98373, - 0.0571858, 0.131567, 0.459359, 0.984056, - 0.0592353, 0.130932, 0.486637, 0.984234, - 0.0610488, 0.130092, 0.51509, 0.984748, - 0.0630758, 0.12923, 0.543461, 0.985073, - 0.0647398, 0.128174, 0.571376, 0.985195, - 0.0671941, 0.127133, 0.599414, 0.985734, - 0.0681345, 0.125576, 0.628134, 0.986241, - 0.0686089, 0.123639, 0.656399, 0.986356, - 0.0698511, 0.121834, 0.684258, 0.986894, - 0.0700931, 0.119454, 0.711818, 0.987382, - 0.0698321, 0.116718, 0.739511, 0.988109, - 0.0693975, 0.113699, 0.766267, 0.988363, - 0.0689584, 0.110454, 0.792456, 0.989112, - 0.0672353, 0.106602, 0.81813, 0.989241, - 0.0662034, 0.10267, 0.842889, 0.990333, - 0.0638938, 0.0981381, 0.867204, 0.990591, - 0.0618534, 0.0935388, 0.89038, 0.991106, - 0.0593117, 0.088553, 0.912576, 0.991919, - 0.0562676, 0.0832187, 0.934118, 0.992111, - 0.0534085, 0.0778302, 0.954254, 0.992997, - 0.0495459, 0.0720453, 0.973722, 0.993317, - 0.0463707, 0.0663458, 0.991949, 0.994133, - 0.0421245, 0.0601883, 1.00936, 0.994705, - 0.0384977, 0.0542501, 1.02559, 0.995495, - 0.0340956, 0.0479862, 1.04083, 0.996206, - 0.030105, 0.041887, 1.05497, 0.996971, - 0.0256095, 0.0355355, 1.06824, 0.997796, - 0.0213932, 0.0293655, 1.08056, 0.998272, - 0.0169612, 0.0232926, 1.09182, 0.998857, - 0.0126756, 0.0172786, 1.10219, 0.99939, - 0.00832486, 0.0113156, 1.11192, 0.999752, - 0.00410826, 0.00557892, 1.12075, 1, 0.000150957, - 0.000119101, 1.12885, 0.975169, - 3.09397e-06, 0.154669, 1.95073e-05, 0.975439, - 7.79608e-05, 0.154712, 0.000491534, 0.975464, - 0.000311847, 0.154716, 0.00196617, 0.975464, - 0.000701656, 0.154716, 0.00442387, 0.975462, - 0.0012474, 0.154715, 0.0078647, 0.975461, - 0.00194906, 0.154715, 0.0122886, 0.975464, - 0.00280667, 0.154715, 0.0176959, 0.975468, - 0.00382025, 0.154716, 0.0240867, 0.975471, - 0.00498985, 0.154716, 0.0314612, 0.975472, - 0.00631541, 0.154717, 0.0398199, 0.975486, - 0.00779719, 0.154718, 0.0491639, 0.975489, - 0.00943505, 0.154718, 0.0594932, 0.975509, - 0.0112295, 0.154721, 0.0708113, 0.97554, - 0.0131802, 0.154724, 0.0831176, 0.975557, - 0.0152876, 0.154726, 0.096415, 0.975585, - 0.0175512, 0.154728, 0.110705, 0.975605, - 0.0199713, 0.154729, 0.125992, 0.975645, - 0.0225447, 0.154729, 0.142272, 0.975711, - 0.0252649, 0.154735, 0.159549, 0.975788, - 0.0280986, 0.154736, 0.177805, 0.975872, - 0.0308232, 0.154704, 0.196911, 0.975968, - 0.0324841, 0.154525, 0.216324, 0.976063, - 0.0351281, 0.154432, 0.236628, 0.976157, - 0.0388618, 0.15446, 0.257539, 0.976204, - 0.0437704, 0.154665, 0.278975, 0.976358, - 0.047514, 0.154652, 0.302606, 0.976571, - 0.0508638, 0.154535, 0.327204, 0.976725, - 0.0534995, 0.154221, 0.352276, 0.977013, - 0.0555547, 0.153737, 0.377696, 0.977294, - 0.0586728, 0.153403, 0.403855, 0.977602, - 0.0622715, 0.15312, 0.430333, 0.977932, - 0.0658166, 0.152755, 0.456855, 0.978241, - 0.0689877, 0.152233, 0.483668, 0.978602, - 0.0712805, 0.15132, 0.512097, 0.979234, - 0.0732775, 0.150235, 0.540455, 0.97977, - 0.075163, 0.148978, 0.568486, 0.979995, - 0.0778026, 0.147755, 0.596524, 0.98078, - 0.0791854, 0.146019, 0.624825, 0.981628, - 0.0799666, 0.143906, 0.653403, 0.982067, - 0.0808532, 0.141561, 0.681445, 0.98271, - 0.0816024, 0.139025, 0.708918, 0.983734, - 0.0812511, 0.135764, 0.736594, 0.98431, - 0.0806201, 0.132152, 0.763576, 0.985071, - 0.0801605, 0.12846, 0.789797, 0.98618, - 0.0784208, 0.124084, 0.815804, 0.986886, - 0.0766643, 0.1193, 0.840869, 0.987485, - 0.0747744, 0.114236, 0.864952, 0.988431, - 0.0716701, 0.108654, 0.888431, 0.988886, - 0.0691609, 0.102994, 0.910963, 0.990024, - 0.0654048, 0.0967278, 0.932629, 0.990401, - 0.0619765, 0.090384, 0.95313, 0.991093, - 0.0579296, 0.0837885, 0.972587, 0.992018, - 0.0536576, 0.0770171, 0.991184, 0.992536, - 0.0493719, 0.0701486, 1.00863, 0.993421, - 0.0444813, 0.062953, 1.02494, 0.993928, - 0.040008, 0.0560455, 1.04017, 0.994994, - 0.0347982, 0.04856, 1.05463, 0.995866, - 0.0301017, 0.0416152, 1.06807, 0.996916, - 0.0248225, 0.0342597, 1.08039, 0.997766, - 0.0199229, 0.0271668, 1.09177, 0.998479, - 0.0147422, 0.0201387, 1.10235, 0.99921, - 0.00980173, 0.0131944, 1.11206, 0.999652, - 0.0047426, 0.00640712, 1.12104, 0.999998, 8.91673e-05, - 0.00010379, 1.12906, 0.967868, - 3.51885e-06, 0.175947, 1.93569e-05, 0.968001, - 8.86733e-05, 0.175972, 0.000487782, 0.96801, - 0.000354697, 0.175973, 0.00195115, 0.968012, - 0.000798063, 0.175974, 0.00439006, 0.968011, - 0.00141879, 0.175973, 0.00780461, 0.968011, - 0.00221686, 0.175973, 0.0121948, 0.968016, - 0.00319231, 0.175974, 0.0175607, 0.968019, - 0.00434515, 0.175974, 0.0239027, 0.968018, - 0.00567538, 0.175974, 0.0312208, 0.968033, - 0.00718308, 0.175977, 0.0395158, 0.968049, - 0.00886836, 0.175979, 0.0487885, 0.968047, - 0.0107312, 0.175978, 0.0590394, 0.968072, - 0.0127719, 0.175981, 0.0702705, 0.968108, - 0.0149905, 0.175986, 0.0824836, 0.968112, - 0.0173866, 0.175985, 0.0956783, 0.968173, - 0.0199611, 0.175993, 0.109862, 0.96827, - 0.0227128, 0.176008, 0.125033, 0.968292, - 0.025639, 0.17601, 0.141193, 0.968339, - 0.0287299, 0.176007, 0.158336, 0.968389, - 0.0319399, 0.176001, 0.176441, 0.968501, - 0.034941, 0.175962, 0.195359, 0.968646, - 0.0370812, 0.175793, 0.214686, 0.968789, - 0.0402329, 0.175708, 0.234973, 0.96886, - 0.0442601, 0.1757, 0.255871, 0.969013, - 0.049398, 0.175876, 0.277238, 0.969242, - 0.0539932, 0.17594, 0.300326, 0.969419, - 0.0577299, 0.175781, 0.324702, 0.969763, - 0.0605643, 0.175432, 0.349527, 0.970093, - 0.0634488, 0.174992, 0.374976, 0.970361, - 0.0670589, 0.174611, 0.401097, 0.970825, - 0.0708246, 0.174226, 0.427496, 0.971214, - 0.0742871, 0.173684, 0.453858, 0.971622, - 0.0782608, 0.173186, 0.480637, 0.972175, - 0.0813151, 0.172288, 0.508655, 0.972944, - 0.0832678, 0.170979, 0.536973, 0.973595, - 0.0855964, 0.169573, 0.565138, 0.974345, - 0.0882163, 0.168152, 0.593222, 0.975233, - 0.0901671, 0.166314, 0.621201, 0.976239, - 0.0912111, 0.163931, 0.649919, 0.977289, - 0.0916959, 0.161106, 0.678011, 0.978076, - 0.0927061, 0.158272, 0.705717, 0.979533, - 0.0925562, 0.15475, 0.733228, 0.980335, - 0.0918159, 0.150638, 0.760454, 0.981808, - 0.0908508, 0.146201, 0.786918, 0.983061, - 0.0896172, 0.141386, 0.812953, 0.984148, - 0.0871588, 0.135837, 0.838281, 0.985047, - 0.0850624, 0.130135, 0.862594, 0.986219, - 0.0818541, 0.123882, 0.88633, 0.987043, - 0.0784523, 0.117126, 0.908952, 0.988107, - 0.0749601, 0.110341, 0.930744, 0.988955, - 0.0703548, 0.102885, 0.951728, 0.989426, - 0.0662798, 0.0954167, 0.971166, 0.990421, - 0.0610834, 0.0876331, 0.989984, 0.991032, - 0.0562936, 0.0797785, 1.00765, 0.992041, - 0.0508154, 0.0718166, 1.02434, 0.992794, - 0.0454045, 0.0637125, 1.03976, 0.993691, - 0.0398194, 0.0555338, 1.05418, 0.994778, - 0.0341482, 0.0473388, 1.06772, 0.995915, - 0.028428, 0.0391016, 1.08028, 0.997109, - 0.022642, 0.0309953, 1.09185, 0.998095, - 0.0168738, 0.0230288, 1.10247, 0.998985, - 0.0111274, 0.0150722, 1.11229, 0.999581, - 0.00543881, 0.00740605, 1.12131, 1.00003, 0.000162239, - 0.000105549, 1.12946, 0.959505, - 3.93734e-06, 0.196876, 1.91893e-05, 0.959599, - 9.92157e-05, 0.196895, 0.000483544, 0.959641, - 0.000396868, 0.196903, 0.0019342, 0.959599, - 0.000892948, 0.196895, 0.00435193, 0.959603, - 0.00158747, 0.196896, 0.0077368, 0.959604, - 0.00248042, 0.196896, 0.0120888, 0.959605, - 0.00357184, 0.196896, 0.0174082, 0.959605, - 0.00486169, 0.196896, 0.0236949, 0.959613, - 0.00635008, 0.196897, 0.0309497, 0.959619, - 0.00803696, 0.196898, 0.0391725, 0.959636, - 0.00992255, 0.196901, 0.0483649, 0.959634, - 0.0120067, 0.1969, 0.0585266, 0.959675, - 0.0142898, 0.196906, 0.0696609, 0.959712, - 0.0167717, 0.196911, 0.0817678, 0.959752, - 0.0194524, 0.196918, 0.0948494, 0.959807, - 0.0223321, 0.196925, 0.10891, 0.959828, - 0.0254091, 0.196924, 0.123947, 0.959906, - 0.0286815, 0.196934, 0.139968, 0.960005, - 0.0321371, 0.196944, 0.156968, 0.960071, - 0.0357114, 0.196936, 0.17491, 0.960237, - 0.0389064, 0.196882, 0.193597, 0.960367, - 0.041623, 0.196731, 0.21285, 0.960562, - 0.0452655, 0.196654, 0.233075, 0.960735, - 0.0496207, 0.196643, 0.253941, 0.960913, - 0.0549379, 0.196774, 0.275278, 0.961121, - 0.0603414, 0.196893, 0.297733, 0.96139, - 0.0644244, 0.196717, 0.321877, 0.961818, - 0.067556, 0.196314, 0.346476, 0.962175, - 0.0712709, 0.195917, 0.371907, 0.96255, - 0.0752848, 0.1955, 0.397916, 0.963164, - 0.0792073, 0.195026, 0.424229, 0.963782, - 0.0828225, 0.194424, 0.450637, 0.964306, - 0.0873119, 0.193831, 0.477288, 0.964923, - 0.0911051, 0.192973, 0.504716, 0.966048, - 0.093251, 0.19151, 0.533053, 0.967024, - 0.0958983, 0.190013, 0.561366, 0.968038, - 0.09835, 0.188253, 0.589464, 0.969152, - 0.100754, 0.186257, 0.617433, 0.970557, - 0.102239, 0.183775, 0.645801, 0.972104, - 0.102767, 0.180645, 0.674278, 0.973203, - 0.103492, 0.177242, 0.702004, 0.975123, - 0.103793, 0.17345, 0.729529, 0.97641, - 0.102839, 0.168886, 0.756712, 0.978313, - 0.101687, 0.163892, 0.783801, 0.980036, - 0.100314, 0.158439, 0.809671, 0.981339, - 0.097836, 0.152211, 0.835402, 0.982794, - 0.0950006, 0.145679, 0.860081, 0.984123, - 0.0920994, 0.138949, 0.883757, 0.984918, - 0.0878641, 0.131283, 0.90685, 0.985999, - 0.083939, 0.123464, 0.928786, 0.987151, - 0.0791234, 0.115324, 0.94983, 0.987827, - 0.0739332, 0.106854, 0.96962, 0.988806, - 0.0688088, 0.0982691, 0.98861, 0.989588, - 0.0628962, 0.0893456, 1.00667, 0.990438, - 0.0573146, 0.0805392, 1.02344, 0.991506, - 0.0509433, 0.0713725, 1.03933, 0.992492, - 0.0448724, 0.0623732, 1.05378, 0.993663, - 0.0383497, 0.0530838, 1.06747, 0.994956, - 0.0319593, 0.0439512, 1.08007, 0.99634, - 0.025401, 0.0347803, 1.09182, 0.99761, - 0.0189687, 0.0257954, 1.1025, 0.99863, - 0.0124441, 0.0169893, 1.11247, 0.99947, - 0.00614003, 0.00829498, 1.12151, 1.00008, 0.000216624, - 0.000146107, 1.12993, 0.950129, - 4.34955e-06, 0.217413, 1.90081e-05, 0.950264, - 0.00010957, 0.217444, 0.00047884, 0.9503, - 0.000438299, 0.217451, 0.00191543, 0.950246, - 0.000986124, 0.21744, 0.00430951, 0.950246, - 0.00175311, 0.21744, 0.00766137, 0.950245, - 0.00273923, 0.21744, 0.011971, 0.950253, - 0.00394453, 0.217441, 0.0172385, 0.950258, - 0.00536897, 0.217442, 0.0234641, 0.950267, - 0.00701262, 0.217444, 0.030648, 0.950277, - 0.00887551, 0.217446, 0.038791, 0.950284, - 0.0109576, 0.217446, 0.0478931, 0.950312, - 0.0132591, 0.217451, 0.0579568, 0.950334, - 0.01578, 0.217454, 0.0689821, 0.950378, - 0.0185204, 0.217462, 0.0809714, 0.950417, - 0.0214803, 0.217467, 0.0939265, 0.950488, - 0.0246594, 0.217479, 0.10785, 0.950534, - 0.0280565, 0.217483, 0.122743, 0.950633, - 0.0316685, 0.217498, 0.138611, 0.950698, - 0.0354787, 0.217499, 0.155442, 0.950844, - 0.0394003, 0.217507, 0.173208, 0.950999, - 0.0426812, 0.217419, 0.191605, 0.951221, - 0.0461302, 0.217317, 0.21084, 0.951412, - 0.0502131, 0.217238, 0.230945, 0.951623, - 0.0549183, 0.21722, 0.251745, 0.951867, - 0.0604493, 0.217306, 0.273001, 0.952069, - 0.0665189, 0.217466, 0.294874, 0.952459, - 0.0709179, 0.217266, 0.318732, 0.952996, - 0.0746112, 0.216891, 0.34318, 0.953425, - 0.0789252, 0.216503, 0.36849, 0.953885, - 0.0833293, 0.216042, 0.394373, 0.954617, - 0.087371, 0.215469, 0.420505, 0.955429, - 0.0914054, 0.214802, 0.446907, 0.956068, - 0.0961671, 0.214146, 0.473522, 0.957094, - 0.10048, 0.213286, 0.50052, 0.958372, - 0.103248, 0.211796, 0.528715, 0.959654, - 0.106033, 0.21016, 0.557065, 0.961305, - 0.108384, 0.208149, 0.585286, 0.962785, - 0.111122, 0.206024, 0.613334, 0.964848, - 0.112981, 0.203442, 0.641334, 0.966498, - 0.113717, 0.19996, 0.669955, 0.968678, - 0.114121, 0.196105, 0.698094, 0.970489, - 0.114524, 0.191906, 0.725643, 0.972903, - 0.113792, 0.186963, 0.752856, 0.974701, - 0.112406, 0.181343, 0.780013, 0.976718, - 0.110685, 0.175185, 0.806268, 0.978905, - 0.108468, 0.168535, 0.832073, 0.980267, - 0.105061, 0.161106, 0.857149, 0.981967, - 0.101675, 0.153387, 0.881145, 0.983063, - 0.0974492, 0.145199, 0.904255, 0.984432, - 0.0925815, 0.136527, 0.926686, 0.985734, - 0.0877983, 0.127584, 0.947901, 0.986228, - 0.081884, 0.118125, 0.968111, 0.98719, - 0.0761208, 0.108594, 0.98719, 0.988228, - 0.0698196, 0.0989996, 1.00559, 0.989046, - 0.0632739, 0.0890074, 1.02246, 0.990242, - 0.056522, 0.0790832, 1.03841, 0.991252, - 0.0495272, 0.0689182, 1.05347, 0.992542, - 0.0425373, 0.0588592, 1.06724, 0.994096, - 0.0353198, 0.0486833, 1.08009, 0.995593, - 0.028235, 0.0385977, 1.09177, 0.99711, - 0.0209511, 0.0286457, 1.10274, 0.998263, - 0.0139289, 0.0188497, 1.11262, 0.999254, - 0.0067359, 0.009208, 1.12191, 0.999967, 0.000141846, - 6.57764e-05, 1.13024, 0.935608, - 4.74692e-06, 0.236466, 1.87817e-05, 0.93996, - 0.00011971, 0.237568, 0.000473646, 0.939959, - 0.000478845, 0.237567, 0.0018946, 0.939954, - 0.0010774, 0.237566, 0.00426284, 0.939956, - 0.00191538, 0.237566, 0.00757842, 0.939954, - 0.00299277, 0.237566, 0.0118413, 0.93996, - 0.00430961, 0.237567, 0.0170518, 0.939969, - 0.00586589, 0.237569, 0.02321, 0.939982, - 0.00766166, 0.237572, 0.0303164, 0.939987, - 0.00969686, 0.237572, 0.0383711, 0.939997, - 0.0119715, 0.237574, 0.0473751, 0.940031, - 0.0144858, 0.237581, 0.0573298, 0.940073, - 0.0172399, 0.237589, 0.0682366, 0.94012, - 0.0202335, 0.237598, 0.080097, 0.940162, - 0.0234663, 0.237604, 0.0929116, 0.940237, - 0.0269387, 0.237615, 0.106686, 0.940328, - 0.0306489, 0.237632, 0.121421, 0.940419, - 0.0345917, 0.237645, 0.137115, 0.940522, - 0.0387481, 0.237654, 0.153766, 0.940702, - 0.0429906, 0.237661, 0.17133, 0.940871, - 0.0465089, 0.237561, 0.189502, 0.941103, - 0.050531, 0.23748, 0.208616, 0.941369, - 0.0550657, 0.237423, 0.228595, 0.941641, - 0.0601337, 0.237399, 0.249287, 0.941903, - 0.0658804, 0.237443, 0.270467, 0.942224, - 0.0722674, 0.237597, 0.292024, 0.942633, - 0.0771788, 0.237419, 0.315272, 0.943172, - 0.0815623, 0.237068, 0.339579, 0.943691, - 0.0863973, 0.236682, 0.364717, 0.944382, - 0.0911536, 0.236213, 0.390435, 0.945392, - 0.0952967, 0.235562, 0.416425, 0.946185, - 0.0998948, 0.234832, 0.442772, 0.947212, - 0.104796, 0.234114, 0.469347, 0.948778, - 0.10928, 0.233222, 0.496162, 0.950149, - 0.113081, 0.231845, 0.523978, 0.951989, - 0.115893, 0.230005, 0.552295, 0.953921, - 0.11846, 0.227862, 0.580569, 0.955624, - 0.12115, 0.225439, 0.608698, 0.958234, - 0.123373, 0.222635, 0.636696, 0.960593, - 0.124519, 0.219093, 0.665208, 0.963201, - 0.124736, 0.214749, 0.693557, 0.965642, - 0.125012, 0.210059, 0.721334, 0.968765, - 0.124661, 0.204935, 0.748613, 0.971753, - 0.122996, 0.198661, 0.776224, 0.973751, - 0.120998, 0.191823, 0.802461, 0.976709, - 0.118583, 0.184359, 0.828399, 0.977956, - 0.115102, 0.176437, 0.853693, 0.979672, - 0.111077, 0.167681, 0.877962, 0.981816, - 0.10688, 0.158872, 0.901564, 0.98238, - 0.101469, 0.149398, 0.924057, 0.983964, - 0.0960013, 0.139436, 0.945751, 0.984933, - 0.0899626, 0.12943, 0.966272, 0.985694, - 0.0832973, 0.11894, 0.985741, 0.986822, - 0.0767082, 0.108349, 1.00407, 0.987725, - 0.0693614, 0.0976026, 1.02154, 0.98877, - 0.06211, 0.086652, 1.03757, 0.990129, - 0.0544143, 0.0756182, 1.05296, 0.991337, - 0.046744, 0.0645753, 1.06683, 0.992978, - 0.0387931, 0.0534683, 1.0798, 0.994676, - 0.030973, 0.0424137, 1.09181, 0.99645, - 0.0230311, 0.0314035, 1.10286, 0.997967, - 0.0152065, 0.0206869, 1.11291, 0.99922, - 0.00744837, 0.010155, 1.12237, 1.00002, 0.000240209, - 7.52767e-05, 1.13089, 0.922948, - 5.15351e-06, 0.255626, 1.86069e-05, 0.928785, - 0.000129623, 0.257244, 0.000468009, 0.928761, - 0.00051849, 0.257237, 0.00187202, 0.928751, - 0.0011666, 0.257235, 0.00421204, 0.928751, - 0.00207395, 0.257234, 0.0074881, 0.928754, - 0.00324055, 0.257235, 0.0117002, 0.92876, - 0.00466639, 0.257236, 0.0168486, 0.928763, - 0.00635149, 0.257237, 0.0229334, 0.928774, - 0.00829584, 0.257239, 0.029955, 0.928791, - 0.0104995, 0.257243, 0.0379139, 0.928804, - 0.0129623, 0.257245, 0.0468108, 0.928847, - 0.0156846, 0.257255, 0.0566473, 0.92889, - 0.0186661, 0.257263, 0.0674246, 0.928924, - 0.0219067, 0.257268, 0.0791433, 0.928989, - 0.0254066, 0.257282, 0.0918076, 0.92909, - 0.0291651, 0.257301, 0.105419, 0.92918, - 0.0331801, 0.257316, 0.119978, 0.92929, - 0.0374469, 0.257332, 0.135491, 0.929453, - 0.041939, 0.257357, 0.151948, 0.929586, - 0.0464612, 0.257347, 0.169275, 0.929858, - 0.0503426, 0.257269, 0.187257, 0.930125, - 0.0548409, 0.257199, 0.206204, 0.930403, - 0.0598063, 0.257149, 0.22601, 0.930726, - 0.0652437, 0.257122, 0.246561, 0.931098, - 0.0712376, 0.257153, 0.267618, 0.931396, - 0.0777506, 0.257237, 0.288993, 0.931947, - 0.0832374, 0.257124, 0.311527, 0.932579, - 0.0883955, 0.25683, 0.335697, 0.933194, - 0.0937037, 0.256444, 0.360634, 0.934013, - 0.0987292, 0.255939, 0.386126, 0.935307, - 0.103215, 0.255282, 0.412018, 0.936374, - 0.108234, 0.254538, 0.438292, 0.93776, - 0.113234, 0.253728, 0.464805, 0.939599, - 0.118013, 0.25275, 0.491464, 0.941036, - 0.122661, 0.251404, 0.518751, 0.94337, - 0.125477, 0.249435, 0.547133, 0.945318, - 0.128374, 0.247113, 0.575456, 0.947995, - 0.130996, 0.244441, 0.60372, 0.950818, - 0.133438, 0.241352, 0.63174, 0.954378, - 0.135004, 0.237849, 0.659971, 0.957151, - 0.135313, 0.233188, 0.688478, 0.960743, - 0.13521, 0.228001, 0.716767, 0.964352, - 0.135007, 0.222249, 0.744349, 0.967273, - 0.133523, 0.21542, 0.771786, 0.969767, - 0.131155, 0.208039, 0.798639, 0.973195, - 0.128492, 0.200076, 0.824774, 0.975557, - 0.125094, 0.191451, 0.850222, 0.977692, - 0.120578, 0.18184, 0.874761, 0.98026, - 0.115882, 0.172102, 0.898497, 0.981394, - 0.110372, 0.161859, 0.921636, 0.982386, - 0.10415, 0.15108, 0.943467, 0.983783, - 0.0978128, 0.140407, 0.964045, 0.98422, - 0.0906171, 0.129058, 0.98398, 0.985447, - 0.0832921, 0.117614, 1.00276, 0.986682, - 0.0754412, 0.10585, 1.02047, 0.987326, - 0.0673885, 0.0940943, 1.03678, 0.988707, - 0.0592565, 0.0822093, 1.05218, 0.990185, - 0.050717, 0.070192, 1.06652, 0.991866, - 0.0423486, 0.0582081, 1.07965, 0.993897, - 0.0336118, 0.0460985, 1.09188, 0.995841, - 0.0252178, 0.0342737, 1.10307, 0.997605, - 0.0164893, 0.0224829, 1.11324, 0.999037, - 0.00817112, 0.0110647, 1.12262, 1.00003, 0.000291686, - 0.000168673, 1.13139, 0.915304, - 5.52675e-06, 0.275999, 1.83285e-05, 0.91668, - 0.000139285, 0.276414, 0.000461914, 0.916664, - 0.00055713, 0.276409, 0.00184763, 0.916653, - 0.00125354, 0.276406, 0.00415715, 0.916651, - 0.00222851, 0.276405, 0.00739053, 0.916655, - 0.00348205, 0.276406, 0.0115478, 0.916653, - 0.00501414, 0.276405, 0.0166291, 0.916667, - 0.00682478, 0.276409, 0.0226346, 0.91668, - 0.00891398, 0.276412, 0.0295648, 0.91669, - 0.0112817, 0.276413, 0.0374199, 0.916727, - 0.013928, 0.276422, 0.0462016, 0.916759, - 0.0168528, 0.276429, 0.0559101, 0.916793, - 0.0200558, 0.276436, 0.0665466, 0.916849, - 0.0235373, 0.276448, 0.0781139, 0.916964, - 0.0272973, 0.276474, 0.0906156, 0.917047, - 0.0313344, 0.276491, 0.104051, 0.917152, - 0.0356465, 0.276511, 0.118424, 0.917286, - 0.0402271, 0.276533, 0.133736, 0.917469, - 0.0450408, 0.276564, 0.149978, 0.917686, - 0.0497872, 0.276563, 0.167057, 0.917953, - 0.0540937, 0.276493, 0.184846, 0.918228, - 0.0590709, 0.276437, 0.203614, 0.918572, - 0.0644277, 0.276398, 0.223212, 0.918918, - 0.0702326, 0.276362, 0.243584, 0.919356, - 0.076484, 0.276383, 0.264465, 0.919842, - 0.0830808, 0.276434, 0.285701, 0.920451, - 0.0892972, 0.276407, 0.307559, 0.921113, - 0.095016, 0.276128, 0.331501, 0.921881, - 0.100771, 0.275754, 0.356207, 0.923027, - 0.106029, 0.275254, 0.381477, 0.924364, - 0.111029, 0.274595, 0.40722, 0.925818, - 0.116345, 0.273841, 0.433385, 0.92746, - 0.121424, 0.272913, 0.459848, 0.929167, - 0.12657, 0.271837, 0.486493, 0.931426, - 0.131581, 0.270575, 0.513432, 0.934001, - 0.135038, 0.268512, 0.541502, 0.936296, - 0.138039, 0.266135, 0.569658, 0.939985, - 0.140687, 0.263271, 0.598375, 0.943516, - 0.143247, 0.260058, 0.626563, 0.94782, - 0.145135, 0.256138, 0.654711, 0.951023, - 0.145733, 0.251154, 0.683285, 0.955338, - 0.145554, 0.245562, 0.711831, 0.959629, - 0.145008, 0.239265, 0.739573, 0.963123, - 0.144003, 0.232064, 0.767027, 0.966742, - 0.141289, 0.224036, 0.794359, 0.969991, - 0.138247, 0.215305, 0.820361, 0.973403, - 0.134786, 0.206051, 0.846548, 0.975317, - 0.129966, 0.195914, 0.871541, 0.977647, - 0.12471, 0.185184, 0.895313, 0.980137, - 0.119086, 0.174161, 0.918398, 0.981031, - 0.112297, 0.162792, 0.940679, 0.982037, - 0.105372, 0.150952, 0.961991, 0.983164, - 0.097821, 0.138921, 0.981913, 0.983757, - 0.0897245, 0.126611, 1.00109, 0.985036, - 0.0815974, 0.114228, 1.01902, 0.986289, - 0.0727725, 0.101389, 1.03604, 0.987329, - 0.0639323, 0.0886476, 1.05149, 0.989193, - 0.0548109, 0.0756837, 1.06619, 0.990716, - 0.045687, 0.0627581, 1.07948, 0.992769, - 0.0364315, 0.0498337, 1.09172, 0.99524, - 0.0271761, 0.0370305, 1.1033, 0.997154, - 0.0179609, 0.0243959, 1.11353, 0.998845, - 0.00878063, 0.0119567, 1.12319, 1.00002, 0.000259038, - 0.000108146, 1.13177, 0.903945, - 5.91681e-06, 0.295126, 1.81226e-05, 0.903668, - 0.000148672, 0.295037, 0.000455367, 0.903677, - 0.000594683, 0.29504, 0.00182145, 0.903673, - 0.00133805, 0.295039, 0.00409831, 0.903666, - 0.00237872, 0.295036, 0.00728584, 0.903668, - 0.00371676, 0.295037, 0.0113842, 0.903679, - 0.00535212, 0.29504, 0.0163936, 0.903684, - 0.00728479, 0.295041, 0.0223141, 0.903698, - 0.00951473, 0.295044, 0.0291462, 0.903718, - 0.0120419, 0.295049, 0.0368904, 0.903754, - 0.0148664, 0.295058, 0.0455477, 0.903801, - 0.017988, 0.29507, 0.0551194, 0.903851, - 0.0214064, 0.295082, 0.0656058, 0.903921, - 0.0251219, 0.295097, 0.0770109, 0.904002, - 0.0291337, 0.295116, 0.0893354, 0.904111, - 0.033441, 0.29514, 0.102583, 0.904246, - 0.0380415, 0.295169, 0.116755, 0.904408, - 0.0429258, 0.295202, 0.131853, 0.904637, - 0.0480468, 0.295245, 0.147869, 0.904821, - 0.0529208, 0.295214, 0.164658, 0.905163, - 0.0577748, 0.295185, 0.182274, 0.905469, - 0.0631763, 0.295143, 0.200828, 0.905851, - 0.068917, 0.295112, 0.2202, 0.906322, - 0.0750861, 0.295104, 0.240372, 0.906761, - 0.0815855, 0.295086, 0.261082, 0.90735, - 0.0882138, 0.295095, 0.282123, 0.908087, - 0.095082, 0.295139, 0.303563, 0.908826, - 0.101488, 0.29492, 0.327028, 0.909832, - 0.107577, 0.294577, 0.351464, 0.911393, - 0.113033, 0.294115, 0.376497, 0.912804, - 0.118629, 0.293446, 0.402115, 0.914081, - 0.124232, 0.292581, 0.428111, 0.91637, - 0.129399, 0.29166, 0.454442, 0.91814, - 0.134892, 0.290422, 0.481024, 0.921179, - 0.140069, 0.289194, 0.507924, 0.924544, - 0.144431, 0.287421, 0.535557, 0.927995, - 0.147498, 0.284867, 0.563984, 0.931556, - 0.150197, 0.281722, 0.5923, 0.935777, - 0.152711, 0.278207, 0.620832, 0.940869, - 0.154836, 0.274148, 0.649069, 0.945994, - 0.155912, 0.269057, 0.677746, 0.949634, - 0.155641, 0.262799, 0.706293, 0.955032, - 0.154809, 0.256097, 0.734278, 0.95917, - 0.153678, 0.248618, 0.761751, 0.962931, - 0.151253, 0.239794, 0.789032, 0.966045, - 0.147625, 0.230281, 0.815422, 0.96971, - 0.143964, 0.220382, 0.841787, 0.972747, - 0.139464, 0.209846, 0.867446, 0.975545, - 0.133459, 0.198189, 0.892004, 0.978381, - 0.127424, 0.186362, 0.915458, 0.979935, - 0.120506, 0.173964, 0.937948, 0.980948, - 0.11282, 0.161429, 0.959732, 0.982234, - 0.104941, 0.148557, 0.980118, 0.982767, - 0.0962905, 0.135508, 0.999463, 0.983544, - 0.0873625, 0.122338, 1.01756, 0.984965, - 0.0783447, 0.108669, 1.03492, 0.986233, - 0.0684798, 0.0949911, 1.05087, 0.987796, - 0.0590867, 0.0811386, 1.0656, 0.989885, - 0.0489145, 0.0673099, 1.0794, 0.991821, - 0.0391, 0.0535665, 1.09174, 0.99448, - 0.029087, 0.0397529, 1.10341, 0.996769, - 0.019114, 0.0261463, 1.11383, 0.998641, - 0.00947007, 0.0128731, 1.1237, 0.999978, 0.000446316, - 0.000169093, 1.13253, 0.888362, - 6.27064e-06, 0.312578, 1.78215e-05, 0.889988, - 0.000157791, 0.313148, 0.000448451, 0.889825, - 0.000631076, 0.313092, 0.00179356, 0.88984, - 0.00141994, 0.313097, 0.00403554, 0.889828, - 0.0025243, 0.313092, 0.00717429, 0.889831, - 0.00394421, 0.313093, 0.0112099, 0.889831, - 0.00567962, 0.313093, 0.0161425, 0.889844, - 0.00773051, 0.313096, 0.0219724, 0.889858, - 0.0100968, 0.3131, 0.0286999, 0.889882, - 0.0127786, 0.313106, 0.0363256, 0.889918, - 0.0157757, 0.313116, 0.0448509, 0.889967, - 0.0190878, 0.313129, 0.0542758, 0.89003, - 0.022715, 0.313145, 0.0646032, 0.890108, - 0.0266566, 0.313165, 0.0758339, 0.890218, - 0.0309131, 0.313193, 0.0879729, 0.890351, - 0.0354819, 0.313226, 0.101019, 0.89051, - 0.0403613, 0.313263, 0.114979, 0.890672, - 0.0455385, 0.313294, 0.129848, 0.890882, - 0.0509444, 0.313333, 0.145616, 0.891189, - 0.0559657, 0.313324, 0.162122, 0.891457, - 0.0613123, 0.313281, 0.179524, 0.891856, - 0.0671488, 0.313281, 0.197855, 0.892312, - 0.0732732, 0.313268, 0.216991, 0.892819, - 0.0797865, 0.313263, 0.236924, 0.893369, - 0.0865269, 0.313247, 0.257433, 0.894045, - 0.0931592, 0.313205, 0.278215, 0.894884, - 0.100532, 0.313276, 0.299467, 0.895832, - 0.107716, 0.313205, 0.322276, 0.897043, - 0.114099, 0.312873, 0.34642, 0.898515, - 0.119941, 0.312331, 0.371187, 0.900191, - 0.126044, 0.311731, 0.396656, 0.90188, - 0.131808, 0.310859, 0.422488, 0.904359, - 0.137289, 0.309857, 0.448744, 0.906923, - 0.142991, 0.308714, 0.475239, 0.910634, - 0.148253, 0.307465, 0.501983, 0.914502, - 0.153332, 0.305774, 0.529254, 0.919046, - 0.156646, 0.303156, 0.557709, 0.923194, - 0.159612, 0.299928, 0.586267, 0.928858, - 0.162027, 0.296245, 0.614925, 0.934464, - 0.164203, 0.291832, 0.643187, 0.939824, - 0.165602, 0.286565, 0.671601, 0.944582, - 0.165383, 0.280073, 0.700213, 0.949257, - 0.164439, 0.272891, 0.728432, 0.954389, - 0.162953, 0.264771, 0.756082, 0.958595, - 0.161007, 0.255927, 0.78369, 0.962138, - 0.157243, 0.245769, 0.810769, 0.966979, - 0.152872, 0.235127, 0.836999, 0.969566, - 0.148209, 0.22347, 0.862684, 0.972372, - 0.142211, 0.211147, 0.887847, 0.975916, - 0.135458, 0.198606, 0.911843, 0.978026, - 0.128398, 0.185498, 0.934795, 0.979686, - 0.120313, 0.17171, 0.956787, 0.980748, - 0.11166, 0.158159, 0.978046, 0.981622, - 0.103035, 0.144399, 0.997693, 0.982356, - 0.0930328, 0.13001, 1.01642, 0.983308, - 0.0834627, 0.115778, 1.03366, 0.985037, - 0.0732249, 0.101327, 1.05014, 0.986493, - 0.0628145, 0.086554, 1.06507, 0.988484, - 0.0526556, 0.0720413, 1.07907, 0.991051, - 0.0415744, 0.0571151, 1.09189, 0.993523, - 0.0314275, 0.0426643, 1.10369, 0.99628, - 0.0203603, 0.0279325, 1.11423, 0.998344, - 0.0102446, 0.0138182, 1.12421, 0.999997, 0.00042612, - 0.000193628, 1.1333, 0.871555, - 6.60007e-06, 0.329176, 1.74749e-05, 0.875255, - 0.000166579, 0.330571, 0.000441051, 0.875644, - 0.000666394, 0.330718, 0.00176441, 0.875159, - 0.00149903, 0.330536, 0.00396899, 0.87516, - 0.00266493, 0.330536, 0.007056, 0.875158, - 0.00416393, 0.330535, 0.0110251, 0.87516, - 0.00599598, 0.330535, 0.0158764, 0.875163, - 0.00816108, 0.330536, 0.0216101, 0.875174, - 0.0106591, 0.330538, 0.0282266, 0.875199, - 0.0134899, 0.330545, 0.0357266, 0.875257, - 0.0166538, 0.330563, 0.0441117, 0.875304, - 0.0201501, 0.330575, 0.0533821, 0.875373, - 0.0239785, 0.330595, 0.0635395, 0.875464, - 0.0281389, 0.330619, 0.0745872, 0.875565, - 0.0326301, 0.330645, 0.0865255, 0.875691, - 0.0374516, 0.330676, 0.0993599, 0.875897, - 0.0425993, 0.330733, 0.113093, 0.876091, - 0.0480576, 0.330776, 0.127722, 0.876353, - 0.0537216, 0.330826, 0.143227, 0.876649, - 0.0589807, 0.330809, 0.159462, 0.877034, - 0.0647865, 0.330819, 0.176642, 0.877443, - 0.0709789, 0.330817, 0.194702, 0.877956, - 0.0774782, 0.330832, 0.213577, 0.878499, - 0.0843175, 0.330822, 0.233246, 0.879144, - 0.0912714, 0.330804, 0.253512, 0.879982, - 0.0980824, 0.330766, 0.274137, 0.88097, - 0.105823, 0.330864, 0.295209, 0.882051, - 0.113671, 0.330896, 0.317226, 0.883397, - 0.120303, 0.330545, 0.341068, 0.884987, - 0.12667, 0.330068, 0.365613, 0.886789, - 0.133118, 0.329418, 0.390807, 0.889311, - 0.139024, 0.328683, 0.416494, 0.891995, - 0.144971, 0.327729, 0.442618, 0.895106, - 0.150747, 0.326521, 0.469131, 0.899527, - 0.156283, 0.325229, 0.495921, 0.90504, - 0.161707, 0.32378, 0.523162, 0.909875, - 0.165661, 0.32122, 0.55092, 0.91561, - 0.168755, 0.317942, 0.579928, 0.921225, - 0.171193, 0.313983, 0.608539, 0.927308, - 0.17319, 0.309636, 0.636854, 0.933077, - 0.174819, 0.304262, 0.66523, 0.938766, - 0.175002, 0.297563, 0.693609, 0.943667, - 0.173946, 0.289613, 0.722157, 0.949033, - 0.172221, 0.281227, 0.750021, 0.953765, - 0.169869, 0.271545, 0.777466, 0.95804, - 0.166578, 0.261034, 0.804853, 0.962302, - 0.161761, 0.249434, 0.831569, 0.966544, - 0.156636, 0.237484, 0.857779, 0.969372, - 0.150784, 0.224395, 0.883051, 0.972486, - 0.143672, 0.210786, 0.907864, 0.975853, - 0.135772, 0.196556, 0.931223, 0.977975, - 0.127942, 0.182307, 0.954061, 0.979122, - 0.118347, 0.167607, 0.97531, 0.980719, - 0.109112, 0.152739, 0.995666, 0.981223, - 0.0991789, 0.137932, 1.01475, 0.98216, - 0.0883553, 0.122692, 1.03253, 0.983379, - 0.0780825, 0.107493, 1.04917, 0.985434, - 0.0665646, 0.0917791, 1.06464, 0.987332, - 0.0557714, 0.0764949, 1.07896, 0.990004, - 0.0442805, 0.060721, 1.09199, 0.992975, - 0.0331676, 0.0452284, 1.10393, 0.995811, - 0.0219547, 0.0297934, 1.11476, 0.9982, - 0.0107613, 0.0146415, 1.12484, 1.00002, 0.000248678, - 0.00014555, 1.13413, 0.859519, - 6.93595e-06, 0.347264, 1.71673e-05, 0.859843, - 0.00017503, 0.347394, 0.000433219, 0.859656, - 0.000700076, 0.347319, 0.00173277, 0.859671, - 0.00157517, 0.347325, 0.00389875, 0.859669, - 0.00280028, 0.347324, 0.00693112, 0.85967, - 0.0043754, 0.347324, 0.01083, 0.859665, - 0.00630049, 0.347321, 0.0155954, 0.859685, - 0.0085755, 0.347328, 0.0212278, 0.859694, - 0.0112003, 0.347329, 0.0277273, 0.859718, - 0.0141747, 0.347336, 0.0350946, 0.85976, - 0.0174988, 0.347348, 0.0433314, 0.85982, - 0.0211722, 0.347366, 0.0524384, 0.859892, - 0.0251941, 0.347387, 0.0624168, 0.860006, - 0.0295649, 0.347422, 0.0732708, 0.860122, - 0.0342825, 0.347453, 0.0849999, 0.860282, - 0.0393462, 0.347499, 0.0976102, 0.860482, - 0.0447513, 0.347554, 0.111104, 0.860719, - 0.0504775, 0.347614, 0.125479, 0.860998, - 0.0563577, 0.347666, 0.140703, 0.861322, - 0.0619473, 0.347662, 0.156681, 0.861724, - 0.0681277, 0.347684, 0.173597, 0.862198, - 0.0746567, 0.347709, 0.191371, 0.862733, - 0.0815234, 0.347727, 0.209976, 0.863371, - 0.0886643, 0.347744, 0.229351, 0.86414, - 0.0957908, 0.347734, 0.24934, 0.865138, - 0.102912, 0.34772, 0.269797, 0.866182, - 0.110924, 0.3478, 0.290654, 0.867436, - 0.119223, 0.347911, 0.312074, 0.869087, - 0.126197, 0.347649, 0.335438, 0.870859, - 0.133145, 0.347222, 0.359732, 0.872997, - 0.139869, 0.346645, 0.38467, 0.875939, - 0.146089, 0.345935, 0.41019, 0.879012, - 0.152334, 0.345012, 0.436218, 0.883353, - 0.15821, 0.343924, 0.462641, 0.888362, - 0.164097, 0.342636, 0.489449, 0.895026, - 0.169528, 0.341351, 0.516629, 0.900753, - 0.174408, 0.339115, 0.544109, 0.906814, - 0.17751, 0.335809, 0.572857, 0.912855, - 0.180101, 0.331597, 0.601554, 0.919438, - 0.182116, 0.32698, 0.630198, 0.925962, - 0.183494, 0.321449, 0.658404, 0.931734, - 0.184159, 0.314595, 0.686625, 0.93762, - 0.18304, 0.306462, 0.71531, 0.943858, - 0.181323, 0.297514, 0.744272, 0.948662, - 0.178683, 0.287447, 0.771462, 0.953299, - 0.175379, 0.276166, 0.798593, 0.957346, - 0.170395, 0.263758, 0.8256, 0.962565, - 0.165042, 0.251019, 0.852575, 0.966075, - 0.158655, 0.237011, 0.878316, 0.969048, - 0.151707, 0.222518, 0.90329, 0.972423, - 0.143271, 0.207848, 0.927745, 0.975833, - 0.134824, 0.192463, 0.950859, 0.977629, - 0.125444, 0.1768, 0.972947, 0.978995, - 0.114949, 0.161033, 0.993263, 0.980533, - 0.104936, 0.145523, 1.01337, 0.980745, - 0.0935577, 0.129799, 1.03128, 0.981814, - 0.0822956, 0.113486, 1.04825, 0.983943, - 0.0710082, 0.0972925, 1.06405, 0.986141, - 0.0587931, 0.0808138, 1.0785, 0.988878, - 0.0472755, 0.0644915, 1.09204, 0.992132, - 0.0349128, 0.0478128, 1.10413, 0.9953, - 0.0232407, 0.031621, 1.11527, 0.998117, - 0.0112713, 0.0154935, 1.12551, 1.00003, 0.000339743, - 0.000195763, 1.13504, 0.845441, - 7.29126e-06, 0.364305, 1.69208e-05, 0.843588, - 0.000183164, 0.363506, 0.000425067, 0.843412, - 0.00073253, 0.36343, 0.00169999, 0.843401, - 0.00164818, 0.363426, 0.00382495, 0.843399, - 0.00293008, 0.363425, 0.00679993, 0.843401, - 0.00457822, 0.363425, 0.010625, 0.843394, - 0.00659249, 0.363421, 0.0153002, 0.843398, - 0.00897282, 0.363421, 0.0208258, 0.843415, - 0.0117191, 0.363426, 0.0272024, 0.843438, - 0.0148312, 0.363432, 0.0344305, 0.843483, - 0.018309, 0.363447, 0.0425116, 0.84356, - 0.0221521, 0.363472, 0.0514471, 0.843646, - 0.0263597, 0.363499, 0.061238, 0.843743, - 0.0309315, 0.363527, 0.0718873, 0.84388, - 0.0358658, 0.363569, 0.0833969, 0.844079, - 0.0411624, 0.363631, 0.0957742, 0.844279, - 0.0468128, 0.363688, 0.109015, 0.844549, - 0.0527923, 0.363761, 0.123124, 0.844858, - 0.0588204, 0.363817, 0.138044, 0.84522, - 0.0647573, 0.36383, 0.153755, 0.845669, - 0.0713181, 0.363879, 0.170394, 0.846155, - 0.0781697, 0.363908, 0.187861, 0.846789, - 0.0853913, 0.363969, 0.206176, 0.847502, - 0.0928086, 0.363999, 0.225244, 0.8484, - 0.10005, 0.363997, 0.244926, 0.849461, - 0.107615, 0.364008, 0.265188, 0.850562, - 0.115814, 0.364055, 0.28587, 0.851962, - 0.124334, 0.364179, 0.306926, 0.854326, - 0.131995, 0.364233, 0.329605, 0.856295, - 0.139338, 0.363856, 0.35359, 0.858857, - 0.146346, 0.363347, 0.37831, 0.862428, - 0.152994, 0.362807, 0.403722, 0.866203, - 0.159463, 0.361963, 0.429537, 0.871629, - 0.165623, 0.36112, 0.456, 0.877365, - 0.171649, 0.359917, 0.482773, 0.883744, - 0.177151, 0.35848, 0.509705, 0.890693, - 0.182381, 0.356523, 0.537215, 0.897278, - 0.186076, 0.3533, 0.565493, 0.903958, - 0.188602, 0.349095, 0.594293, 0.910908, - 0.190755, 0.344215, 0.623165, 0.918117, - 0.192063, 0.338606, 0.651573, 0.924644, - 0.192758, 0.331544, 0.679869, 0.931054, - 0.192238, 0.323163, 0.708668, 0.937303, - 0.190035, 0.313529, 0.737201, 0.943387, - 0.187162, 0.303152, 0.764977, 0.948494, - 0.183876, 0.29146, 0.792683, 0.952546, - 0.178901, 0.277917, 0.819228, 0.958077, - 0.173173, 0.264753, 0.846559, 0.962462, - 0.16645, 0.25002, 0.872962, 0.966569, - 0.159452, 0.234873, 0.898729, 0.969108, - 0.15074, 0.218752, 0.923126, 0.973072, - 0.141523, 0.202673, 0.947278, 0.975452, - 0.132075, 0.186326, 0.969938, 0.977784, - 0.121257, 0.169396, 0.991325, 0.97899, - 0.110182, 0.153044, 1.01123, 0.979777, - 0.0989634, 0.136485, 1.0299, 0.980865, - 0.0865894, 0.119343, 1.04727, 0.982432, - 0.0746115, 0.102452, 1.06341, 0.984935, - 0.0621822, 0.0852423, 1.07834, 0.987776, - 0.0495694, 0.0678546, 1.092, 0.99103, - 0.0372386, 0.0506917, 1.1043, 0.99474, - 0.0244353, 0.0333316, 1.11576, 0.997768, - 0.0121448, 0.0164348, 1.12617, 1.00003, 0.00031774, - 0.000169504, 1.13598, 0.825551, - 7.56799e-06, 0.378425, 1.65099e-05, 0.82664, - 0.000190922, 0.378923, 0.000416504, 0.826323, - 0.000763495, 0.378779, 0.0016656, 0.826359, - 0.00171789, 0.378795, 0.00374768, 0.82636, - 0.00305402, 0.378795, 0.00666259, 0.826368, - 0.00477185, 0.378798, 0.0104104, 0.826364, - 0.00687131, 0.378795, 0.0149912, 0.826368, - 0.00935232, 0.378795, 0.0204054, 0.826376, - 0.0122146, 0.378797, 0.0266532, 0.826399, - 0.0154581, 0.378803, 0.0337355, 0.82646, - 0.0190825, 0.378824, 0.0416537, 0.826525, - 0.0230873, 0.378846, 0.0504091, 0.826614, - 0.0274719, 0.378876, 0.0600032, 0.82674, - 0.0322355, 0.378917, 0.0704393, 0.826888, - 0.0373766, 0.378964, 0.0817195, 0.827078, - 0.0428936, 0.379024, 0.0938492, 0.827318, - 0.0487778, 0.379099, 0.106828, 0.82764, - 0.0549935, 0.379199, 0.120659, 0.827926, - 0.0611058, 0.379227, 0.13526, 0.828325, - 0.0675054, 0.379275, 0.150713, 0.828801, - 0.0743455, 0.379332, 0.167034, 0.8294, - 0.0815523, 0.379415, 0.184209, 0.830094, - 0.0890779, 0.379495, 0.202203, 0.8309, - 0.096736, 0.379555, 0.220945, 0.831943, - 0.104135, 0.379577, 0.240306, 0.833037, - 0.112106, 0.379604, 0.260317, 0.834278, - 0.120554, 0.379668, 0.2808, 0.836192, - 0.129128, 0.3799, 0.301654, 0.838671, - 0.137541, 0.380109, 0.323502, 0.840939, - 0.14523, 0.379809, 0.347176, 0.844575, - 0.15248, 0.379593, 0.371706, 0.848379, - 0.159607, 0.37909, 0.39688, 0.853616, - 0.166267, 0.378617, 0.422702, 0.858921, - 0.172698, 0.377746, 0.448919, 0.865324, - 0.178823, 0.376749, 0.475661, 0.872207, - 0.184542, 0.375363, 0.502599, 0.880018, - 0.189836, 0.373657, 0.529914, 0.88694, - 0.194294, 0.370673, 0.557683, 0.894779, - 0.197022, 0.36662, 0.586848, 0.902242, - 0.199108, 0.36138, 0.615831, 0.909914, - 0.200398, 0.355434, 0.644478, 0.917088, - 0.20094, 0.348173, 0.672905, 0.923888, - 0.200671, 0.339482, 0.701327, 0.930495, - 0.198773, 0.32956, 0.730101, 0.937247, - 0.195394, 0.318363, 0.758383, 0.943108, - 0.191956, 0.306323, 0.786539, 0.948296, - 0.187227, 0.292576, 0.813637, 0.953472, - 0.181165, 0.278234, 0.840793, 0.958485, - 0.174119, 0.263054, 0.867712, 0.962714, - 0.166564, 0.246756, 0.893635, 0.966185, - 0.158181, 0.229945, 0.919028, 0.970146, - 0.148275, 0.212633, 0.943413, 0.973491, - 0.138157, 0.195229, 0.966627, 0.975741, - 0.127574, 0.178048, 0.988817, 0.977238, - 0.11554, 0.160312, 1.00924, 0.978411, - 0.10364, 0.142857, 1.02845, 0.979811, - 0.0913122, 0.125317, 1.04648, 0.98116, - 0.0782558, 0.107627, 1.06284, 0.983543, - 0.0655957, 0.0895862, 1.07798, 0.986789, - 0.0520411, 0.0713756, 1.092, 0.990292, - 0.0389727, 0.053228, 1.10484, 0.994187, - 0.025808, 0.0351945, 1.11642, 0.997499, - 0.0126071, 0.0173198, 1.12703, 0.999999, 0.000275604, - 0.000148602, 1.13674, 0.81075, - 7.8735e-06, 0.394456, 1.61829e-05, 0.808692, - 0.000198293, 0.393453, 0.000407564, 0.80846, - 0.000792877, 0.39334, 0.00162965, 0.808595, - 0.00178416, 0.393407, 0.00366711, 0.808597, - 0.00317182, 0.393408, 0.00651934, 0.808598, - 0.00495589, 0.393408, 0.0101866, 0.808591, - 0.00713627, 0.393403, 0.0146689, 0.808592, - 0.00971285, 0.393402, 0.0199667, 0.80861, - 0.0126855, 0.393407, 0.0260803, 0.808633, - 0.0160538, 0.393413, 0.0330107, 0.80868, - 0.0198175, 0.393429, 0.0407589, 0.808748, - 0.0239758, 0.393453, 0.0493264, 0.808854, - 0.0285286, 0.39349, 0.0587161, 0.808992, - 0.0334748, 0.39354, 0.0689304, 0.809141, - 0.0388116, 0.393588, 0.0799707, 0.809352, - 0.0445375, 0.39366, 0.0918432, 0.809608, - 0.0506427, 0.393742, 0.104549, 0.809915, - 0.0570708, 0.393834, 0.118085, 0.810253, - 0.0633526, 0.393885, 0.132377, 0.810687, - 0.0700966, 0.393953, 0.147537, 0.811233, - 0.0772274, 0.394047, 0.163543, 0.811865, - 0.0847629, 0.394148, 0.180394, 0.812648, - 0.0925663, 0.394265, 0.198051, 0.813583, - 0.100416, 0.394363, 0.216443, 0.814683, - 0.108119, 0.394402, 0.235502, 0.815948, - 0.11644, 0.394489, 0.255242, 0.817278, - 0.125036, 0.394542, 0.275441, 0.819605, - 0.133655, 0.39486, 0.296094, 0.822256, - 0.142682, 0.395248, 0.317309, 0.825349, - 0.150756, 0.395241, 0.340516, 0.829605, - 0.158392, 0.395285, 0.364819, 0.83391, - 0.165801, 0.394922, 0.389736, 0.839808, - 0.172677, 0.394691, 0.415409, 0.845708, - 0.179448, 0.394006, 0.441546, 0.853025, - 0.185746, 0.393279, 0.46832, 0.859666, - 0.191684, 0.391655, 0.495302, 0.86789, - 0.197146, 0.390068, 0.52262, 0.875845, - 0.201904, 0.38727, 0.550336, 0.882634, - 0.205023, 0.382688, 0.578825, 0.891076, - 0.207098, 0.377543, 0.608103, 0.900589, - 0.208474, 0.371752, 0.63723, 0.90791, - 0.209068, 0.364016, 0.665769, 0.915971, - 0.208655, 0.355593, 0.694428, 0.923455, - 0.20729, 0.345439, 0.723224, 0.931514, - 0.203821, 0.334099, 0.751925, 0.937885, - 0.19986, 0.321069, 0.780249, 0.943136, - 0.194993, 0.306571, 0.8077, 0.948818, - 0.189132, 0.291556, 0.83497, 0.954433, - 0.181617, 0.275745, 0.86188, 0.959078, - 0.173595, 0.258695, 0.888562, 0.962705, - 0.164855, 0.240825, 0.914008, 0.966753, - 0.155129, 0.22268, 0.939145, 0.970704, - 0.144241, 0.204542, 0.963393, 0.973367, - 0.133188, 0.185927, 0.985983, 0.975984, - 0.121146, 0.167743, 1.00704, 0.976994, - 0.108366, 0.149218, 1.02715, 0.978485, - 0.0956746, 0.13131, 1.0455, 0.980074, - 0.0820733, 0.112513, 1.06221, 0.98225, - 0.0684061, 0.0938323, 1.07782, 0.98553, - 0.0549503, 0.0749508, 1.09199, 0.989529, - 0.0407857, 0.055848, 1.10508, 0.993536, - 0.0271978, 0.0368581, 1.11684, 0.997247, - 0.0132716, 0.0181845, 1.12789, 1, 0.000431817, - 0.000198809, 1.13792, 0.785886, - 8.12608e-06, 0.405036, 1.57669e-05, 0.790388, - 0.000205278, 0.407355, 0.000398297, 0.790145, - 0.000820824, 0.407231, 0.00159263, 0.790135, - 0.00184681, 0.407226, 0.00358336, 0.790119, - 0.00328316, 0.407218, 0.00637039, 0.790126, - 0.00512988, 0.40722, 0.0099539, 0.79013, - 0.00738684, 0.407221, 0.0143339, 0.790135, - 0.0100538, 0.407221, 0.0195107, 0.790134, - 0.0131306, 0.407217, 0.0254848, 0.79016, - 0.0166169, 0.407224, 0.0322572, 0.790197, - 0.020512, 0.407236, 0.0398284, 0.790273, - 0.0248157, 0.407263, 0.0482014, 0.790381, - 0.029527, 0.407304, 0.0573777, 0.790521, - 0.0346446, 0.407355, 0.0673602, 0.790704, - 0.0401665, 0.40742, 0.0781522, 0.790925, - 0.0460896, 0.407499, 0.0897582, 0.791195, - 0.0524017, 0.407589, 0.10218, 0.791522, - 0.0590121, 0.407691, 0.11541, 0.791878, - 0.0654876, 0.407748, 0.12939, 0.792361, - 0.0725207, 0.407849, 0.144237, 0.792942, - 0.0799844, 0.407963, 0.159924, 0.79362, - 0.0877896, 0.408087, 0.176425, 0.794529, - 0.0958451, 0.408259, 0.193733, 0.795521, - 0.103827, 0.408362, 0.211756, 0.796778, - 0.111937, 0.408482, 0.230524, 0.798027, - 0.120521, 0.408547, 0.249967, 0.799813, - 0.129242, 0.408721, 0.269926, 0.802387, - 0.138048, 0.409148, 0.290338, 0.805279, - 0.147301, 0.409641, 0.311193, 0.809251, - 0.155895, 0.410154, 0.333611, 0.813733, - 0.163942, 0.410297, 0.357615, 0.819081, - 0.171666, 0.410373, 0.382339, 0.825427, - 0.178905, 0.410348, 0.407828, 0.83172, - 0.185812, 0.409486, 0.434034, 0.83877, - 0.192318, 0.408776, 0.460493, 0.845817, - 0.198249, 0.407176, 0.487346, 0.854664, - 0.204034, 0.405719, 0.514832, 0.863495, - 0.208908, 0.403282, 0.542401, 0.871883, - 0.212765, 0.399293, 0.570683, 0.88065, - 0.214911, 0.393803, 0.599947, 0.89004, - 0.216214, 0.387536, 0.62932, 0.898476, - 0.216745, 0.379846, 0.658319, 0.906738, - 0.216387, 0.370625, 0.687138, 0.914844, - 0.215053, 0.360139, 0.71601, 0.923877, - 0.212007, 0.348849, 0.745124, 0.931925, - 0.207481, 0.335639, 0.773366, 0.938054, - 0.202418, 0.320798, 0.801636, 0.943895, - 0.196507, 0.304772, 0.829055, 0.949468, - 0.189009, 0.288033, 0.856097, 0.955152, - 0.180539, 0.270532, 0.88301, 0.959403, - 0.171437, 0.251639, 0.909296, 0.963309, - 0.161661, 0.232563, 0.934868, 0.967399, - 0.150425, 0.213231, 0.959662, 0.972009, - 0.138659, 0.194247, 0.98302, 0.97433, - 0.126595, 0.174718, 1.00517, 0.975823, - 0.113205, 0.155518, 1.02566, 0.976371, - 0.0996096, 0.136709, 1.04418, 0.978705, - 0.0860754, 0.117571, 1.06146, 0.981477, - 0.0714438, 0.0980046, 1.07777, 0.984263, - 0.0572304, 0.0782181, 1.09214, 0.988423, - 0.0428875, 0.0584052, 1.10553, 0.993, - 0.0282442, 0.038522, 1.11758, 0.99704, - 0.0140183, 0.0190148, 1.12864, 0.999913, 0.000369494, - 0.000145203, 1.13901, 0.777662, - 8.4153e-06, 0.423844, 1.54403e-05, 0.770458, - 0.000211714, 0.419915, 0.00038845, 0.770716, - 0.000846888, 0.420055, 0.00155386, 0.770982, - 0.00190567, 0.420202, 0.00349653, 0.770981, - 0.00338782, 0.420201, 0.00621606, 0.77098, - 0.00529338, 0.4202, 0.00971274, 0.770983, - 0.00762223, 0.4202, 0.0139867, 0.770985, - 0.0103741, 0.420198, 0.0190381, 0.770996, - 0.0135489, 0.4202, 0.0248677, 0.771029, - 0.0171461, 0.420212, 0.0314764, 0.771052, - 0.0211647, 0.420215, 0.0388648, 0.771131, - 0.0256048, 0.420245, 0.047036, 0.771235, - 0.0304647, 0.420284, 0.0559911, 0.771383, - 0.0357436, 0.420341, 0.0657346, 0.771591, - 0.0414392, 0.420423, 0.0762694, 0.771819, - 0.0475462, 0.420506, 0.0875984, 0.772123, - 0.0540506, 0.420617, 0.099727, 0.772464, - 0.060797, 0.42072, 0.112637, 0.772855, - 0.0675393, 0.420799, 0.126313, 0.773317, - 0.0748323, 0.420893, 0.140824, 0.773981, - 0.0825681, 0.421058, 0.15617, 0.774746, - 0.0906307, 0.421226, 0.172322, 0.77566, - 0.0988982, 0.421397, 0.189253, 0.776837, - 0.106994, 0.421569, 0.206912, 0.778097, - 0.115528, 0.421704, 0.225359, 0.779588, - 0.124317, 0.421849, 0.24447, 0.781574, - 0.133139, 0.422097, 0.264156, 0.784451, - 0.142179, 0.422615, 0.284318, 0.787682, - 0.15165, 0.423269, 0.304902, 0.792433, - 0.160771, 0.424396, 0.3265, 0.797359, - 0.169166, 0.424772, 0.35014, 0.803986, - 0.177149, 0.425475, 0.374768, 0.809504, - 0.184745, 0.424996, 0.399928, 0.815885, - 0.19173, 0.424247, 0.425796, 0.823513, - 0.198525, 0.423515, 0.452287, 0.832549, - 0.204709, 0.422787, 0.479321, 0.841653, - 0.210447, 0.421187, 0.506718, 0.850401, - 0.215501, 0.418519, 0.53432, 0.859854, - 0.219752, 0.414715, 0.56242, 0.869364, - 0.222305, 0.409462, 0.591558, 0.878837, - 0.223744, 0.402926, 0.621074, 0.888636, - 0.224065, 0.395043, 0.650538, 0.898132, - 0.223742, 0.38564, 0.679538, 0.907181, - 0.222308, 0.375378, 0.708674, 0.915621, - 0.219837, 0.363212, 0.737714, 0.9239, - 0.215233, 0.349313, 0.767014, 0.931644, - 0.209592, 0.334162, 0.795133, 0.938887, - 0.203644, 0.317943, 0.823228, 0.945282, - 0.196349, 0.300581, 0.850822, 0.950758, - 0.18742, 0.282195, 0.877594, 0.956146, - 0.177879, 0.262481, 0.904564, 0.960355, - 0.167643, 0.242487, 0.930741, 0.965256, - 0.156671, 0.222668, 0.955868, 0.968029, - 0.144123, 0.201907, 0.979869, 0.97251, - 0.131305, 0.18202, 1.00291, 0.974925, - 0.118335, 0.161909, 1.02392, 0.975402, - 0.103714, 0.142129, 1.0433, 0.976987, - 0.089415, 0.122447, 1.06089, 0.979677, - 0.0748858, 0.102248, 1.07713, 0.983184, - 0.0596086, 0.0814851, 1.09218, 0.987466, - 0.0447671, 0.0609484, 1.10585, 0.992348, - 0.0295217, 0.0401835, 1.11829, 0.996674, - 0.0143917, 0.0198163, 1.12966, 1.00003, 0.000321364, - 0.000149983, 1.1402, 0.757901, - 8.69074e-06, 0.436176, 1.51011e-05, 0.751195, - 0.000217848, 0.432317, 0.000378533, 0.751178, - 0.000871373, 0.432307, 0.0015141, 0.751195, - 0.00196061, 0.432317, 0.0034068, 0.751198, - 0.00348552, 0.432318, 0.00605659, 0.751195, - 0.00544599, 0.432315, 0.00946353, 0.751207, - 0.00784203, 0.43232, 0.013628, 0.751213, - 0.0106732, 0.43232, 0.0185499, 0.751221, - 0.0139393, 0.432319, 0.0242302, 0.751244, - 0.0176398, 0.432325, 0.0306694, 0.7513, - 0.0217743, 0.432348, 0.0378698, 0.751358, - 0.0263412, 0.432367, 0.0458321, 0.751458, - 0.0313396, 0.432404, 0.0545587, 0.751608, - 0.0367682, 0.432464, 0.0640543, 0.7518, - 0.0426246, 0.43254, 0.0743222, 0.752065, - 0.0489031, 0.432645, 0.0853668, 0.752376, - 0.0555828, 0.432762, 0.0971911, 0.752715, - 0.0623861, 0.432859, 0.109768, 0.753137, - 0.069415, 0.432958, 0.123126, 0.753676, - 0.0770039, 0.433099, 0.137308, 0.754345, - 0.084971, 0.433272, 0.15229, 0.755235, - 0.0932681, 0.433504, 0.168075, 0.756186, - 0.10171, 0.433693, 0.184625, 0.757363, - 0.110019, 0.433857, 0.201897, 0.75884, - 0.11887, 0.434102, 0.220014, 0.760467, - 0.127881, 0.434306, 0.238778, 0.762969, - 0.136766, 0.434751, 0.258172, 0.765823, - 0.14612, 0.43529, 0.278062, 0.769676, - 0.15566, 0.436236, 0.298437, 0.774909, - 0.165177, 0.437754, 0.319532, 0.77994, - 0.17402, 0.438343, 0.342505, 0.785757, - 0.182201, 0.438609, 0.366693, 0.792487, - 0.190104, 0.438762, 0.391668, 0.80038, - 0.197438, 0.438795, 0.417494, 0.808494, - 0.204365, 0.438226, 0.443933, 0.817695, - 0.210714, 0.437283, 0.470929, 0.828111, - 0.216651, 0.436087, 0.498569, 0.837901, - 0.221804, 0.433717, 0.526165, 0.847813, - 0.226318, 0.430133, 0.554155, 0.858314, - 0.229297, 0.425213, 0.582822, 0.868891, - 0.230999, 0.418576, 0.612847, 0.878941, - 0.231155, 0.410405, 0.642445, 0.888809, - 0.230935, 0.400544, 0.672024, 0.898089, - 0.229343, 0.389613, 0.701366, 0.908081, - 0.226886, 0.377197, 0.730763, 0.916819, - 0.222676, 0.363397, 0.759642, 0.924968, - 0.216835, 0.347437, 0.788775, 0.932906, - 0.210245, 0.32995, 0.817135, 0.940025, - 0.202992, 0.312262, 0.844912, 0.946101, - 0.19436, 0.293313, 0.872164, 0.952835, - 0.184125, 0.273638, 0.899443, 0.957347, - 0.173657, 0.252385, 0.926389, 0.961434, - 0.162204, 0.231038, 0.951947, 0.965522, - 0.14979, 0.209834, 0.976751, 0.969412, - 0.136307, 0.188821, 1.00022, 0.973902, - 0.122527, 0.168013, 1.02229, 0.974045, - 0.108213, 0.147634, 1.04199, 0.975775, - 0.0927397, 0.12705, 1.06019, 0.978383, - 0.0778212, 0.106309, 1.07711, 0.98211, - 0.0621216, 0.0849279, 1.09245, 0.986517, - 0.0463847, 0.0633519, 1.10651, 0.991696, - 0.0309353, 0.0419698, 1.11903, 0.996349, - 0.0150914, 0.0206272, 1.13073, 1.00003, 0.000442449, - 0.000231396, 1.14146, 0.727498, - 8.85074e-06, 0.441528, 1.45832e-05, 0.730897, - 0.000223525, 0.443589, 0.000368298, 0.730796, - 0.000893996, 0.443528, 0.00147303, 0.730805, - 0.00201149, 0.443533, 0.00331433, 0.730814, - 0.00357596, 0.443538, 0.00589222, 0.730815, - 0.00558734, 0.443538, 0.00920678, 0.730822, - 0.00804544, 0.44354, 0.0132582, 0.730836, - 0.0109501, 0.443545, 0.0180468, 0.730848, - 0.0143008, 0.443546, 0.0235732, 0.730871, - 0.0180969, 0.443552, 0.0298382, 0.730915, - 0.022338, 0.443567, 0.0368438, 0.730982, - 0.0270225, 0.443591, 0.044591, 0.731076, - 0.0321491, 0.443627, 0.0530831, 0.731245, - 0.0377166, 0.443699, 0.0623243, 0.73144, - 0.0437216, 0.443777, 0.0723181, 0.7317, - 0.0501576, 0.443881, 0.0830691, 0.732034, - 0.0569942, 0.444014, 0.0945809, 0.732388, - 0.0638756, 0.444113, 0.106825, 0.732853, - 0.071203, 0.444247, 0.119859, 0.733473, - 0.0790076, 0.444442, 0.13369, 0.734195, - 0.0871937, 0.444645, 0.148304, 0.735069, - 0.095696, 0.444877, 0.163702, 0.736169, - 0.10426, 0.445133, 0.179861, 0.73747, - 0.112853, 0.44537, 0.196778, 0.738991, - 0.12199, 0.445651, 0.214496, 0.740865, - 0.131153, 0.445958, 0.232913, 0.743637, - 0.140245, 0.446548, 0.251977, 0.746797, - 0.149722, 0.447246, 0.271551, 0.751517, - 0.159341, 0.448656, 0.291774, 0.756156, - 0.169106, 0.449866, 0.312455, 0.761519, - 0.178436, 0.450919, 0.334552, 0.768295, - 0.186904, 0.451776, 0.358491, 0.776613, - 0.195117, 0.452832, 0.383446, 0.783966, - 0.202695, 0.45249, 0.408945, 0.793542, - 0.20985, 0.452587, 0.435364, 0.803192, - 0.216403, 0.451852, 0.462336, 0.813892, - 0.22251, 0.450708, 0.48987, 0.824968, - 0.227676, 0.4486, 0.517697, 0.835859, - 0.232443, 0.445156, 0.545975, 0.846825, - 0.235775, 0.440351, 0.574483, 0.858085, - 0.237897, 0.433641, 0.604246, 0.868825, - 0.238074, 0.425354, 0.634101, 0.879638, - 0.237661, 0.415383, 0.664201, 0.889966, - 0.236186, 0.404136, 0.693918, 0.899479, - 0.233599, 0.390917, 0.723481, 0.908769, - 0.229737, 0.376352, 0.75258, 0.917966, - 0.223836, 0.360372, 0.781764, 0.926304, - 0.217067, 0.342551, 0.811139, 0.934626, - 0.209309, 0.324238, 0.839585, 0.941841, - 0.20071, 0.304484, 0.867044, 0.94789, - 0.190602, 0.283607, 0.894579, 0.954196, - 0.179253, 0.262205, 0.921743, 0.958383, - 0.167646, 0.239847, 0.948026, 0.963119, - 0.155073, 0.218078, 0.973296, 0.966941, - 0.141426, 0.195899, 0.998135, 0.970836, - 0.126849, 0.174121, 1.02021, 0.973301, - 0.112296, 0.153052, 1.04085, 0.97448, - 0.0964965, 0.131733, 1.05946, 0.977045, - 0.080489, 0.10997, 1.07693, 0.980751, - 0.064844, 0.0881657, 1.09254, 0.985475, - 0.0481938, 0.0657987, 1.10697, 0.991089, - 0.0319185, 0.0435215, 1.12004, 0.996122, - 0.0158088, 0.0214779, 1.13173, 1.00001, 0.000372455, - 0.000200295, 1.14291, 0.708622, - 9.07597e-06, 0.45304, 1.41962e-05, 0.711162, - 0.000228911, 0.454662, 0.000358052, 0.709812, - 0.000914446, 0.453797, 0.00143034, 0.709865, - 0.00205819, 0.453834, 0.00321935, 0.709864, - 0.00365894, 0.453833, 0.00572331, 0.709855, - 0.00571692, 0.453826, 0.00894278, 0.709862, - 0.00823201, 0.453828, 0.012878, 0.709875, - 0.011204, 0.453832, 0.0175295, 0.709896, - 0.0146323, 0.453839, 0.0228978, 0.709925, - 0.0185163, 0.453847, 0.0289839, 0.709974, - 0.0228551, 0.453866, 0.0357894, 0.710045, - 0.0276473, 0.453892, 0.0433161, 0.710133, - 0.032891, 0.453924, 0.0515665, 0.710292, - 0.0385851, 0.453992, 0.0605458, 0.710485, - 0.0447254, 0.45407, 0.0702574, 0.710769, - 0.0513051, 0.454192, 0.0807077, 0.711106, - 0.0582733, 0.454329, 0.091896, 0.711516, - 0.0652866, 0.45446, 0.103814, 0.712071, - 0.0728426, 0.454653, 0.116508, 0.712676, - 0.0808307, 0.45484, 0.129968, 0.713476, - 0.0892216, 0.455096, 0.144206, 0.714377, - 0.0979047, 0.455346, 0.159212, 0.715579, - 0.106531, 0.455647, 0.174973, 0.716977, - 0.115492, 0.455961, 0.191504, 0.71862, - 0.124821, 0.456315, 0.208835, 0.72084, - 0.134079, 0.4568, 0.226869, 0.723786, - 0.143427, 0.457521, 0.245582, 0.727464, - 0.153061, 0.458475, 0.264957, 0.732771, - 0.162768, 0.460239, 0.284948, 0.736515, - 0.172627, 0.460899, 0.30522, 0.743519, - 0.182487, 0.463225, 0.326717, 0.750041, - 0.191295, 0.464027, 0.350113, 0.758589, - 0.199746, 0.465227, 0.374782, 0.767703, - 0.207584, 0.465877, 0.400226, 0.777484, - 0.214973, 0.465996, 0.426442, 0.788792, - 0.221796, 0.466019, 0.453688, 0.800194, - 0.228038, 0.465083, 0.481246, 0.811234, - 0.233346, 0.462506, 0.509086, 0.822859, - 0.238073, 0.459257, 0.537338, 0.835082, - 0.241764, 0.454863, 0.566108, 0.846332, - 0.244241, 0.448163, 0.595126, 0.858355, - 0.244736, 0.439709, 0.625574, 0.87034, - 0.244278, 0.429837, 0.65617, 0.881027, - 0.24255, 0.418002, 0.686029, 0.891007, - 0.239912, 0.404325, 0.716039, 0.900874, - 0.236133, 0.389222, 0.745518, 0.911072, - 0.230672, 0.373269, 0.775026, 0.920359, - 0.22356, 0.355083, 0.804521, 0.928604, - 0.215591, 0.335533, 0.834045, 0.937175, - 0.206503, 0.315278, 0.861612, 0.942825, - 0.196684, 0.293653, 0.889131, 0.949805, - 0.185116, 0.271503, 0.916853, 0.955535, - 0.172703, 0.248821, 0.943541, 0.959843, - 0.159978, 0.225591, 0.970132, 0.964393, - 0.146375, 0.202719, 0.994709, 0.968008, - 0.131269, 0.179928, 1.0186, 0.971013, - 0.11569, 0.158007, 1.03928, 0.973334, - 0.1003, 0.13624, 1.05887, 0.975775, - 0.0833352, 0.1138, 1.07652, 0.979579, - 0.0668981, 0.0913141, 1.09297, 0.984323, - 0.0500902, 0.0683051, 1.10734, 0.990351, - 0.0332377, 0.0451771, 1.12084, 0.995823, - 0.0161491, 0.0221705, 1.13296, 1.0001, 0.000234083, - 0.000108712, 1.14441, 0.683895, - 9.24677e-06, 0.46015, 1.37429e-05, 0.68833, - 0.000233383, 0.463134, 0.000346865, 0.688368, - 0.000933547, 0.463159, 0.00138748, 0.688367, - 0.00210049, 0.463159, 0.00312187, 0.688369, - 0.00373415, 0.463159, 0.00555004, 0.688377, - 0.00583449, 0.463163, 0.00867216, 0.688386, - 0.00840128, 0.463166, 0.0124884, 0.688398, - 0.0114343, 0.463169, 0.0169993, 0.688418, - 0.0149329, 0.463175, 0.0222054, 0.688453, - 0.0188964, 0.463188, 0.028108, 0.688515, - 0.0233239, 0.463214, 0.0347085, 0.68857, - 0.0282136, 0.463231, 0.0420091, 0.688679, - 0.033564, 0.463276, 0.0500132, 0.688854, - 0.0393733, 0.463356, 0.0587255, 0.689038, - 0.0456354, 0.46343, 0.0681476, 0.689321, - 0.0523433, 0.463553, 0.0782897, 0.689662, - 0.059412, 0.463693, 0.0891501, 0.690188, - 0.0665736, 0.4639, 0.100735, 0.690755, - 0.0743106, 0.464107, 0.113074, 0.691405, - 0.0824722, 0.464329, 0.126161, 0.692198, - 0.0910484, 0.464585, 0.140007, 0.693196, - 0.0998778, 0.464893, 0.154612, 0.69454, - 0.108651, 0.465285, 0.169984, 0.695921, - 0.117855, 0.465596, 0.186106, 0.697749, - 0.12734, 0.466056, 0.203034, 0.700375, - 0.136714, 0.466771, 0.220703, 0.703395, - 0.146386, 0.467579, 0.239062, 0.707904, - 0.156096, 0.469067, 0.258188, 0.711673, - 0.165904, 0.469851, 0.277759, 0.717489, - 0.175812, 0.471815, 0.297935, 0.724051, - 0.185931, 0.47389, 0.318916, 0.731965, - 0.195238, 0.47587, 0.341591, 0.741151, - 0.204021, 0.477523, 0.366062, 0.751416, - 0.212113, 0.478881, 0.391396, 0.761848, - 0.21979, 0.479226, 0.417599, 0.771886, - 0.2267, 0.478495, 0.444401, 0.783998, - 0.232991, 0.477622, 0.472084, 0.796523, - 0.238645, 0.475833, 0.500193, 0.808851, - 0.243396, 0.472568, 0.52865, 0.821191, - 0.247226, 0.467857, 0.557362, 0.834261, - 0.250102, 0.461871, 0.586768, 0.846762, - 0.251056, 0.453543, 0.617085, 0.859867, - 0.250604, 0.443494, 0.647659, 0.871948, - 0.248783, 0.431711, 0.678119, 0.882967, - 0.245855, 0.417911, 0.708399, 0.892826, - 0.242168, 0.401993, 0.738256, 0.90332, - 0.237062, 0.385371, 0.767999, 0.913633, - 0.22997, 0.366837, 0.798191, 0.922774, - 0.221687, 0.346372, 0.827756, 0.931371, - 0.212345, 0.325682, 0.856425, 0.938929, - 0.20206, 0.303665, 0.884299, 0.944821, - 0.190981, 0.280786, 0.912023, 0.951792, - 0.178065, 0.2573, 0.939669, 0.957712, - 0.164634, 0.233448, 0.96655, 0.961912, - 0.150863, 0.209504, 0.992366, 0.966382, - 0.13577, 0.18597, 1.01633, 0.969588, - 0.119593, 0.162905, 1.03843, 0.971777, - 0.103203, 0.14053, 1.05841, 0.97433, - 0.0865888, 0.117909, 1.07632, 0.978686, - 0.0690829, 0.0944101, 1.09326, 0.983281, - 0.0516568, 0.0705671, 1.10796, 0.989562, - 0.034558, 0.0468592, 1.12182, 0.995465, - 0.0167808, 0.0229846, 1.1342, 0.999991, 0.000373016, - 0.000235606, 1.1459, 0.662251, - 9.39016e-06, 0.468575, 1.32714e-05, 0.666634, - 0.000237624, 0.471675, 0.000335842, 0.666411, - 0.000950385, 0.471516, 0.00134321, 0.666399, - 0.00213833, 0.471509, 0.00302221, 0.666386, - 0.0038014, 0.471499, 0.00537283, 0.666405, - 0.00593958, 0.471511, 0.00839533, 0.666406, - 0.00855253, 0.471508, 0.0120898, 0.666428, - 0.0116401, 0.471519, 0.0164569, 0.666444, - 0.0152015, 0.471522, 0.0214971, 0.66649, - 0.0192362, 0.471543, 0.027212, 0.666537, - 0.0237428, 0.471558, 0.033603, 0.666617, - 0.0287198, 0.471591, 0.0406728, 0.666718, - 0.0341647, 0.471631, 0.0484238, 0.666889, - 0.0400759, 0.47171, 0.0568621, 0.667104, - 0.0464479, 0.471805, 0.0659915, 0.667374, - 0.0532677, 0.471923, 0.0758178, 0.667772, - 0.0603805, 0.472098, 0.0863425, 0.668371, - 0.0677392, 0.472363, 0.0975917, 0.668971, - 0.0756028, 0.472596, 0.109567, 0.669696, - 0.0839293, 0.472869, 0.122272, 0.670481, - 0.0926683, 0.473126, 0.135718, 0.6715, - 0.1016, 0.473442, 0.149914, 0.672911, - 0.110566, 0.47389, 0.164882, 0.674512, - 0.119984, 0.474354, 0.180602, 0.67651, - 0.129574, 0.474922, 0.19711, 0.679292, - 0.139106, 0.475764, 0.214371, 0.682798, - 0.148993, 0.476886, 0.232405, 0.686955, - 0.158737, 0.478179, 0.251153, 0.691406, - 0.168754, 0.479432, 0.270436, 0.697438, - 0.178703, 0.481481, 0.290374, 0.704761, - 0.188955, 0.484143, 0.311044, 0.713599, - 0.198814, 0.487007, 0.333003, 0.723194, - 0.207869, 0.488962, 0.357144, 0.732601, - 0.216189, 0.489815, 0.382169, 0.744193, - 0.22398, 0.490888, 0.408227, 0.754907, - 0.231156, 0.490355, 0.434928, 0.767403, - 0.23747, 0.489548, 0.462599, 0.78107, - 0.243503, 0.488274, 0.490908, 0.793893, - 0.248114, 0.484843, 0.519421, 0.807296, - 0.25222, 0.4803, 0.548561, 0.820529, - 0.255265, 0.474097, 0.577772, 0.833716, - 0.256741, 0.466041, 0.607782, 0.848403, - 0.25637, 0.456547, 0.638807, 0.860755, - 0.254804, 0.443946, 0.670058, 0.874012, - 0.251834, 0.430852, 0.700749, 0.885619, - 0.247867, 0.414903, 0.731446, 0.896069, - 0.242634, 0.397276, 0.761191, 0.906266, - 0.236093, 0.378535, 0.791053, 0.916759, - 0.227543, 0.358038, 0.821298, 0.92523, - 0.21783, 0.335705, 0.850747, 0.93436, - 0.207534, 0.313797, 0.879258, 0.941631, - 0.195983, 0.289671, 0.907734, 0.947564, - 0.183567, 0.265319, 0.935206, 0.953681, - 0.169345, 0.240815, 0.962739, 0.960008, - 0.154909, 0.216119, 0.989227, 0.964145, - 0.140161, 0.192096, 1.01465, 0.968171, - 0.123411, 0.167855, 1.03737, 0.969859, - 0.106525, 0.144817, 1.05767, 0.972666, - 0.0891023, 0.12149, 1.0761, 0.977055, - 0.0718094, 0.0975306, 1.09336, 0.982527, - 0.0534213, 0.0730217, 1.10878, 0.989001, - 0.0355579, 0.0483366, 1.12285, 0.99512, - 0.0176383, 0.023938, 1.13548, 1.00007, 0.000368831, - 0.000211581, 1.14744, 0.651047, - 9.60845e-06, 0.484101, 1.2922e-05, 0.644145, - 0.000241347, 0.478968, 0.000324578, 0.64396, - 0.000965142, 0.478831, 0.00129798, 0.64396, - 0.00217154, 0.47883, 0.00292046, 0.643968, - 0.00386049, 0.478835, 0.00519202, 0.643974, - 0.00603186, 0.478838, 0.0081128, 0.643977, - 0.0086854, 0.478836, 0.011683, 0.643982, - 0.0118207, 0.478834, 0.0159031, 0.644024, - 0.0154374, 0.478856, 0.0207743, 0.644059, - 0.0195343, 0.478868, 0.0262975, 0.644122, - 0.0241103, 0.478896, 0.0324747, 0.644207, - 0.0291638, 0.478933, 0.039309, 0.64432, - 0.0346919, 0.478981, 0.0468029, 0.644481, - 0.0406919, 0.479053, 0.0549614, 0.644722, - 0.047159, 0.479169, 0.0637909, 0.645013, - 0.0540748, 0.479302, 0.0732974, 0.645503, - 0.0612001, 0.479541, 0.0834898, 0.646117, - 0.0687303, 0.479829, 0.0943873, 0.646707, - 0.0767846, 0.480061, 0.105991, 0.647431, - 0.0852465, 0.480343, 0.11831, 0.64831, - 0.0940719, 0.48066, 0.131348, 0.649486, - 0.103056, 0.481083, 0.14514, 0.650864, - 0.112261, 0.481528, 0.159676, 0.652604, - 0.121852, 0.482102, 0.174979, 0.654825, - 0.131505, 0.482813, 0.191079, 0.657876, - 0.141189, 0.483876, 0.207927, 0.661339, - 0.151239, 0.48499, 0.225586, 0.665463, - 0.161091, 0.486279, 0.243947, 0.670542, - 0.171235, 0.487968, 0.262957, 0.677361, - 0.181347, 0.49053, 0.282781, 0.685672, - 0.191679, 0.493862, 0.303311, 0.694551, - 0.201781, 0.49699, 0.324607, 0.703753, - 0.211164, 0.498884, 0.347916, 0.713703, - 0.219675, 0.500086, 0.372628, 0.725911, - 0.227836, 0.501554, 0.398694, 0.73862, - 0.23533, 0.502193, 0.425529, 0.752118, - 0.241786, 0.501811, 0.453209, 0.76579, - 0.247865, 0.500185, 0.481381, 0.779568, - 0.252696, 0.497159, 0.51011, 0.793991, - 0.256802, 0.492765, 0.539322, 0.808182, - 0.259942, 0.486827, 0.569078, 0.821698, - 0.261703, 0.478386, 0.598818, 0.836009, - 0.262006, 0.468772, 0.629762, 0.849824, - 0.260333, 0.456352, 0.661366, 0.863888, - 0.257398, 0.442533, 0.69295, 0.876585, - 0.253264, 0.426573, 0.723608, 0.888665, - 0.248026, 0.408964, 0.754378, 0.899537, - 0.241487, 0.389677, 0.784761, 0.9094, - 0.233463, 0.368516, 0.814688, 0.920166, - 0.223397, 0.346624, 0.845009, 0.928899, - 0.21255, 0.322717, 0.874431, 0.937156, - 0.200869, 0.298698, 0.902922, 0.943861, - 0.188387, 0.273491, 0.931356, 0.949557, - 0.174341, 0.247866, 0.958854, 0.955862, - 0.158994, 0.222496, 0.986098, 0.961721, - 0.143664, 0.197522, 1.01229, 0.965976, - 0.127412, 0.17302, 1.03571, 0.968652, - 0.109798, 0.148954, 1.05699, 0.971084, - 0.0916787, 0.125044, 1.07587, 0.975584, - 0.0739634, 0.100577, 1.09372, 0.98122, - 0.055322, 0.0753666, 1.10948, 0.988253, - 0.0366825, 0.0498899, 1.12394, 0.99482, - 0.0180389, 0.024611, 1.13694, 1.00001, 0.000229839, - 0.000188283, 1.14919, 0.613867, - 9.64198e-06, 0.479449, 1.23452e-05, 0.621485, - 0.000244534, 0.485399, 0.000313091, 0.621429, - 0.000978202, 0.485353, 0.00125245, 0.62112, - 0.00220004, 0.485114, 0.00281687, 0.621119, - 0.0039111, 0.485112, 0.00500783, 0.621122, - 0.00611091, 0.485112, 0.00782498, 0.621133, - 0.00879922, 0.485117, 0.0112687, 0.621152, - 0.0119756, 0.485125, 0.0153394, 0.621183, - 0.0156396, 0.485139, 0.0200382, 0.621227, - 0.0197898, 0.485158, 0.0253663, 0.621298, - 0.0244253, 0.485192, 0.0313261, 0.621388, - 0.0295441, 0.485233, 0.0379204, 0.621507, - 0.0351432, 0.485286, 0.0451523, 0.621693, - 0.0412198, 0.485378, 0.0530277, 0.621933, - 0.0477673, 0.485495, 0.0615522, 0.622232, - 0.0547574, 0.485635, 0.0707316, 0.622809, - 0.0619417, 0.485943, 0.0805883, 0.623407, - 0.069625, 0.486232, 0.0911267, 0.62406, - 0.077796, 0.486516, 0.102354, 0.624835, - 0.0863731, 0.486838, 0.114279, 0.625758, - 0.095251, 0.487188, 0.126902, 0.627043, - 0.104299, 0.487695, 0.140285, 0.628438, - 0.113724, 0.488163, 0.154397, 0.630325, - 0.123417, 0.488858, 0.169267, 0.632801, - 0.133137, 0.489754, 0.184941, 0.635784, - 0.143052, 0.490815, 0.20136, 0.639406, - 0.153132, 0.492048, 0.218643, 0.643872, - 0.163143, 0.49363, 0.236615, 0.6499, - 0.17333, 0.496009, 0.255449, 0.657201, - 0.183622, 0.498994, 0.275006, 0.666221, - 0.194019, 0.502888, 0.295354, 0.674419, - 0.204192, 0.505459, 0.316244, 0.683729, - 0.21406, 0.507771, 0.33849, 0.695584, - 0.222854, 0.510245, 0.363166, 0.708583, - 0.231315, 0.512293, 0.389071, 0.721233, - 0.238911, 0.512747, 0.415737, 0.735134, - 0.245657, 0.512482, 0.443331, 0.750179, - 0.251879, 0.511526, 0.471891, 0.765073, - 0.256911, 0.508935, 0.500892, 0.779794, - 0.261144, 0.504341, 0.530294, 0.794801, - 0.264316, 0.498515, 0.560144, 0.810339, - 0.266276, 0.491015, 0.590213, 0.824818, - 0.266981, 0.481126, 0.620865, 0.839375, - 0.265778, 0.468685, 0.652687, 0.853043, - 0.262748, 0.453925, 0.684759, 0.867335, - 0.258474, 0.437912, 0.716209, 0.88037, - 0.253187, 0.419648, 0.747508, 0.891711, - 0.246476, 0.39982, 0.77797, 0.902896, - 0.238735, 0.37879, 0.808586, 0.913601, - 0.22885, 0.355891, 0.838843, 0.923019, - 0.217656, 0.331773, 0.869014, 0.933432, - 0.205539, 0.307356, 0.898512, 0.939691, - 0.192595, 0.281321, 0.9269, 0.946938, - 0.178945, 0.255441, 0.955297, 0.952372, - 0.163587, 0.229013, 0.983231, 0.95909, - 0.147214, 0.203179, 1.00971, 0.963675, - 0.13064, 0.17792, 1.03438, 0.968247, - 0.113121, 0.152898, 1.05625, 0.97001, - 0.0945824, 0.128712, 1.07598, 0.974458, - 0.0755648, 0.103349, 1.094, 0.980168, - 0.0571998, 0.0776731, 1.1104, 0.987295, - 0.0377994, 0.0514445, 1.12491, 0.994432, - 0.0186417, 0.025429, 1.13851, 0.999975, 0.000542714, - 0.000282356, 1.15108, 0.592656, - 9.80249e-06, 0.486018, 1.19532e-05, 0.598467, - 0.000247275, 0.490781, 0.000301531, 0.597934, - 0.000988317, 0.490343, 0.00120517, 0.597903, - 0.00222366, 0.490319, 0.0027116, 0.597913, - 0.00395315, 0.490327, 0.00482077, 0.597919, - 0.00617653, 0.490329, 0.00753264, 0.597936, - 0.00889375, 0.490339, 0.0108478, 0.597956, - 0.0121043, 0.490347, 0.0147668, 0.597992, - 0.0158073, 0.490365, 0.0192905, 0.598032, - 0.0200017, 0.490382, 0.0244204, 0.598109, - 0.0246865, 0.49042, 0.0301593, 0.598215, - 0.0298594, 0.490474, 0.03651, 0.59833, - 0.0355167, 0.490524, 0.0434757, 0.598525, - 0.0416559, 0.490624, 0.0510629, 0.598778, - 0.0482692, 0.490753, 0.0592781, 0.599135, - 0.0553114, 0.49094, 0.0681304, 0.599802, - 0.062542, 0.491328, 0.0776467, 0.600361, - 0.0703638, 0.491598, 0.0878184, 0.60101, - 0.0786256, 0.491882, 0.0986573, 0.601811, - 0.0872962, 0.492232, 0.11018, 0.602861, - 0.0962284, 0.492684, 0.1224, 0.604167, - 0.10538, 0.493213, 0.135354, 0.605693, - 0.114896, 0.493799, 0.149034, 0.607682, - 0.124654, 0.494576, 0.163469, 0.610672, - 0.13456, 0.4959, 0.178747, 0.613313, - 0.144581, 0.496713, 0.194723, 0.617603, - 0.154703, 0.498499, 0.211617, 0.622174, - 0.16489, 0.500188, 0.229183, 0.628855, - 0.175164, 0.503072, 0.247786, 0.636963, - 0.185565, 0.506798, 0.267116, 0.644866, - 0.195911, 0.509719, 0.28702, 0.653741, - 0.206104, 0.512776, 0.307763, 0.664942, - 0.216447, 0.516812, 0.329631, 0.67633, - 0.22552, 0.519181, 0.353515, 0.690012, - 0.234316, 0.521681, 0.379226, 0.704243, - 0.242032, 0.523129, 0.405901, 0.719396, - 0.249172, 0.523768, 0.433585, 0.734471, - 0.255543, 0.522541, 0.462085, 0.750539, - 0.260697, 0.520217, 0.491233, 0.766365, - 0.26501, 0.516293, 0.521094, 0.781677, - 0.268409, 0.509708, 0.551014, 0.797132, - 0.270399, 0.501944, 0.581463, 0.812655, - 0.271247, 0.492025, 0.612402, 0.828592, - 0.270708, 0.480424, 0.643798, 0.844044, - 0.268085, 0.465955, 0.67682, 0.857305, - 0.263459, 0.448425, 0.708496, 0.87114, - 0.258151, 0.430243, 0.74046, 0.884936, - 0.251171, 0.410578, 0.771583, 0.895772, - 0.243305, 0.38862, 0.802234, 0.906961, - 0.234037, 0.365214, 0.833179, 0.917775, - 0.222714, 0.34116, 0.86353, 0.927883, - 0.210175, 0.31572, 0.893557, 0.936617, - 0.196925, 0.289159, 0.922976, 0.943384, - 0.182788, 0.261996, 0.951606, 0.949713, - 0.167965, 0.235324, 0.979958, 0.955818, - 0.151109, 0.208408, 1.00765, 0.961344, - 0.133834, 0.182591, 1.03329, 0.965469, - 0.115987, 0.156958, 1.0557, 0.968693, - 0.09746, 0.132239, 1.07583, 0.973165, - 0.0778514, 0.106195, 1.09451, 0.979387, - 0.0585067, 0.0797669, 1.11137, 0.98671, - 0.0390409, 0.0530263, 1.12643, 0.994093, - 0.019408, 0.0263163, 1.14016, 1.00002, 0.000540029, - 0.000194487, 1.15299, 0.574483, - 9.89066e-06, 0.494533, 1.14896e-05, 0.574478, - 0.000249127, 0.494528, 0.000289403, 0.574607, - 0.000996811, 0.494637, 0.00115797, 0.574396, - 0.00224241, 0.494458, 0.00260498, 0.574377, - 0.00398632, 0.49444, 0.00463102, 0.574386, - 0.00622836, 0.494445, 0.00723623, 0.574401, - 0.0089683, 0.494453, 0.010421, 0.574419, - 0.0122056, 0.49446, 0.0141859, 0.574459, - 0.0159396, 0.494481, 0.0185322, 0.574525, - 0.0201692, 0.49452, 0.0234617, 0.574587, - 0.0248924, 0.494547, 0.0289762, 0.574697, - 0.0301074, 0.494604, 0.0350797, 0.574853, - 0.0358114, 0.494688, 0.0417767, 0.575027, - 0.041999, 0.494772, 0.0490718, 0.575294, - 0.0486618, 0.494915, 0.0569728, 0.575733, - 0.0557148, 0.495173, 0.0654955, 0.576356, - 0.0630489, 0.495537, 0.0746612, 0.576944, - 0.0709285, 0.495836, 0.0844615, 0.57765, - 0.0792723, 0.496177, 0.0949142, 0.578491, - 0.0880167, 0.496563, 0.10603, 0.579639, - 0.0969462, 0.497096, 0.117841, 0.580989, - 0.10622, 0.497684, 0.130367, 0.582587, - 0.115861, 0.498337, 0.143609, 0.584951, - 0.125605, 0.499414, 0.157625, 0.587602, - 0.135608, 0.500518, 0.172413, 0.59076, - 0.145742, 0.501767, 0.187999, 0.594992, - 0.155934, 0.503542, 0.20445, 0.600656, - 0.166303, 0.506135, 0.221764, 0.607816, - 0.176681, 0.509542, 0.24002, 0.61522, - 0.187071, 0.51263, 0.258992, 0.623702, - 0.197465, 0.516021, 0.278773, 0.634192, - 0.207816, 0.520422, 0.299377, 0.644936, - 0.218183, 0.524073, 0.320802, 0.657888, - 0.2278, 0.528049, 0.34384, 0.670666, - 0.236747, 0.52986, 0.36916, 0.685626, - 0.24484, 0.531892, 0.395867, 0.701304, - 0.252071, 0.532727, 0.423488, 0.717727, - 0.258714, 0.532146, 0.452201, 0.733914, - 0.264211, 0.529883, 0.481579, 0.750529, - 0.26859, 0.5259, 0.511558, 0.76747, - 0.272046, 0.51999, 0.542042, 0.785189, - 0.274225, 0.513083, 0.572799, 0.800954, - 0.275189, 0.502936, 0.603816, 0.816962, - 0.274946, 0.490921, 0.635461, 0.83336, - 0.272695, 0.47684, 0.6676, 0.848143, - 0.268223, 0.459405, 0.70051, 0.861818, - 0.262768, 0.440319, 0.732902, 0.876828, - 0.255872, 0.420123, 0.765084, 0.889312, - 0.247703, 0.398379, 0.796391, 0.900412, - 0.238381, 0.374496, 0.827333, 0.912251, - 0.227783, 0.349874, 0.858385, 0.921792, - 0.214832, 0.323181, 0.888652, 0.931273, - 0.200949, 0.296624, 0.917763, 0.940295, - 0.186537, 0.269211, 0.947878, 0.946812, - 0.171538, 0.241447, 0.977016, 0.953588, - 0.155254, 0.213829, 1.00501, 0.958841, - 0.137156, 0.186807, 1.03179, 0.963746, - 0.118699, 0.160706, 1.05502, 0.966468, - 0.0998358, 0.135504, 1.07568, 0.971178, - 0.0805186, 0.109131, 1.09479, 0.97831, - 0.0599348, 0.0818293, 1.1123, 0.985886, - 0.0399661, 0.0545872, 1.12771, 0.994021, - 0.0198682, 0.0269405, 1.14186, 1.00009, 0.000271022, - 0.00012989, 1.15514, 0.538716, - 9.90918e-06, 0.486732, 1.09675e-05, 0.550656, - 0.000250642, 0.497518, 0.000277412, 0.55057, - 0.00100265, 0.497441, 0.00110974, 0.550903, - 0.00225672, 0.497733, 0.00249779, 0.550568, - 0.00401046, 0.497438, 0.00443906, 0.550574, - 0.00626613, 0.49744, 0.00693637, 0.550591, - 0.0090226, 0.497449, 0.00998921, 0.550623, - 0.0122795, 0.497469, 0.0135984, 0.550667, - 0.0160361, 0.497495, 0.0177654, 0.550724, - 0.0202908, 0.497526, 0.0224915, 0.550792, - 0.0250421, 0.497557, 0.0277795, 0.550918, - 0.0302878, 0.49763, 0.0336334, 0.551058, - 0.0360241, 0.497701, 0.0400573, 0.551276, - 0.0422473, 0.497824, 0.0470585, 0.551551, - 0.0489441, 0.497977, 0.0546433, 0.552074, - 0.0559596, 0.498312, 0.0628367, 0.552681, - 0.0633978, 0.498679, 0.071646, 0.553324, - 0.0713176, 0.499031, 0.0810746, 0.554011, - 0.0797268, 0.499365, 0.091129, 0.55488, - 0.0885238, 0.499779, 0.101837, 0.556171, - 0.0974417, 0.500444, 0.113239, 0.557498, - 0.106841, 0.501025, 0.125316, 0.559299, - 0.116533, 0.501864, 0.138128, 0.561647, - 0.126298, 0.502967, 0.151695, 0.564347, - 0.136388, 0.504129, 0.16604, 0.567863, - 0.146576, 0.505713, 0.181207, 0.572569, - 0.156832, 0.507953, 0.197259, 0.578919, - 0.167323, 0.511186, 0.214258, 0.585387, - 0.177712, 0.514042, 0.232038, 0.593134, - 0.188184, 0.517484, 0.250733, 0.603295, - 0.198717, 0.522345, 0.270454, 0.613854, - 0.209177, 0.526751, 0.290807, 0.626092, - 0.219644, 0.531595, 0.312202, 0.637868, - 0.229494, 0.534721, 0.334435, 0.652458, - 0.238718, 0.538304, 0.359184, 0.666985, - 0.247061, 0.539875, 0.385637, 0.683301, - 0.254652, 0.541042, 0.41328, 0.69998, - 0.261376, 0.540735, 0.441903, 0.717824, - 0.267085, 0.539139, 0.471609, 0.734617, - 0.271465, 0.534958, 0.501446, 0.753663, - 0.27528, 0.53032, 0.532571, 0.770512, - 0.277617, 0.522134, 0.563641, 0.787356, - 0.278525, 0.51206, 0.595067, 0.806252, - 0.278512, 0.50119, 0.627226, 0.822061, - 0.277023, 0.486791, 0.659402, 0.838959, - 0.273175, 0.470467, 0.692874, 0.85379, - 0.267238, 0.450688, 0.725702, 0.868268, - 0.260327, 0.429741, 0.75832, 0.881994, - 0.251946, 0.407223, 0.790189, 0.893885, - 0.242432, 0.383214, 0.821625, 0.905118, - 0.231904, 0.357297, 0.853011, 0.916045, - 0.219545, 0.330733, 0.883773, 0.927614, - 0.205378, 0.303916, 0.914435, 0.936005, - 0.190388, 0.275941, 0.944502, 0.944533, - 0.1749, 0.247493, 0.974439, 0.950758, - 0.158588, 0.218996, 1.00286, 0.957078, - 0.141027, 0.191559, 1.0304, 0.962448, - 0.121507, 0.164457, 1.05466, 0.964993, - 0.102068, 0.138636, 1.0761, 0.970017, - 0.0822598, 0.111861, 1.09541, 0.97661, - 0.062033, 0.0843438, 1.11317, 0.985073, - 0.0409832, 0.0558496, 1.12911, 0.993515, - 0.020146, 0.0275331, 1.1438, 1.00006, 0.00027329, - 0.000107883, 1.15736, 0.525324, - 9.99341e-06, 0.498153, 1.05385e-05, 0.526513, - 0.000251605, 0.499277, 0.000265329, 0.526517, - 0.00100641, 0.499282, 0.0010613, 0.526588, - 0.00226466, 0.499337, 0.00238823, 0.526539, - 0.0040255, 0.499302, 0.00424535, 0.526547, - 0.00628954, 0.499306, 0.00663364, 0.526561, - 0.00905628, 0.499313, 0.00955337, 0.526593, - 0.0123253, 0.499334, 0.0130054, 0.526642, - 0.0160957, 0.499365, 0.0169911, 0.5267, - 0.0203661, 0.499396, 0.0215122, 0.526792, - 0.0251347, 0.499451, 0.0265718, 0.526904, - 0.0303985, 0.499511, 0.0321732, 0.527079, - 0.0361554, 0.499617, 0.0383231, 0.527285, - 0.0423982, 0.499731, 0.045026, 0.527602, - 0.0491121, 0.499924, 0.0522936, 0.528166, - 0.0561127, 0.500306, 0.0601528, 0.52879, - 0.0635988, 0.5007, 0.0686059, 0.529421, - 0.071581, 0.501048, 0.0776518, 0.530144, - 0.0799854, 0.501421, 0.0873148, 0.531062, - 0.0888032, 0.501884, 0.0976084, 0.532374, - 0.0977643, 0.50259, 0.108588, 0.533828, - 0.107197, 0.50329, 0.120234, 0.53581, - 0.116887, 0.504312, 0.132602, 0.538063, - 0.126755, 0.505365, 0.145721, 0.5409, - 0.136819, 0.506668, 0.159617, 0.544882, - 0.147117, 0.508731, 0.174369, 0.550238, - 0.157446, 0.511601, 0.190028, 0.556038, - 0.167988, 0.514431, 0.206587, 0.563031, - 0.178364, 0.517808, 0.224046, 0.571543, - 0.189007, 0.521937, 0.242503, 0.582255, - 0.199546, 0.527415, 0.261977, 0.59272, - 0.210084, 0.531682, 0.282162, 0.605648, - 0.220448, 0.537123, 0.303426, 0.61785, - 0.230593, 0.540664, 0.325323, 0.632223, - 0.240238, 0.544467, 0.348993, 0.648819, - 0.24887, 0.547594, 0.375462, 0.665825, - 0.256657, 0.54912, 0.403024, 0.683389, - 0.263711, 0.549294, 0.431773, 0.701495, - 0.269666, 0.547649, 0.461494, 0.719197, - 0.274169, 0.543786, 0.491623, 0.737906, - 0.278124, 0.538644, 0.522994, 0.756652, - 0.280632, 0.531057, 0.554775, 0.775279, - 0.281741, 0.521972, 0.586441, 0.792688, - 0.281652, 0.509613, 0.618596, 0.811894, - 0.280345, 0.496497, 0.651462, 0.827938, - 0.277128, 0.47968, 0.684023, 0.844837, - 0.271646, 0.460688, 0.718024, 0.859239, - 0.264397, 0.438872, 0.751207, 0.874088, - 0.256144, 0.41577, 0.784232, 0.887693, - 0.246311, 0.391369, 0.816191, 0.899402, - 0.235497, 0.365872, 0.847828, 0.910973, - 0.223631, 0.338618, 0.87934, 0.92204, - 0.209874, 0.310803, 0.910325, 0.930987, - 0.194265, 0.281802, 0.940695, 0.94, - 0.178125, 0.252836, 0.970958, 0.948018, - 0.161479, 0.224239, 1.00078, 0.955141, - 0.144038, 0.195857, 1.0288, 0.960513, - 0.124915, 0.168487, 1.05371, 0.963964, - 0.104284, 0.141495, 1.07596, 0.968713, - 0.0838732, 0.114437, 1.09628, 0.975524, - 0.0635579, 0.0863105, 1.11448, 0.98431, - 0.042291, 0.0574774, 1.13069, 0.992916, - 0.0209131, 0.0284343, 1.14568, 0.999926, 0.000743097, - 0.000379265, 1.15955, 0.501042, - 9.98428e-06, 0.498726, 1.00306e-05, 0.502992, - 0.000252112, 0.500665, 0.000253283, 0.502417, - 0.00100791, 0.500092, 0.00101259, 0.502965, - 0.00226919, 0.500621, 0.00227978, 0.502318, - 0.00403109, 0.499994, 0.00405011, 0.502333, - 0.00629832, 0.500005, 0.00632868, 0.502362, - 0.00906907, 0.500027, 0.00911446, 0.502369, - 0.0123423, 0.500023, 0.0124078, 0.50243, - 0.0161178, 0.500066, 0.016211, 0.502493, - 0.0203937, 0.500103, 0.0205256, 0.502592, - 0.0251684, 0.500166, 0.0253548, 0.502707, - 0.0304389, 0.50023, 0.0307029, 0.502881, - 0.0362015, 0.500335, 0.0365753, 0.503124, - 0.0424507, 0.500488, 0.0429798, 0.503443, - 0.0491582, 0.500686, 0.0499268, 0.504083, - 0.0561476, 0.501155, 0.0574541, 0.504668, - 0.0636846, 0.501524, 0.0655408, 0.505319, - 0.0716834, 0.501904, 0.0742072, 0.50609, - 0.0800925, 0.502321, 0.0834699, 0.507122, - 0.0888425, 0.502896, 0.0933603, 0.508414, - 0.097855, 0.503603, 0.10391, 0.509955, - 0.107304, 0.504416, 0.115113, 0.512061, - 0.116921, 0.505565, 0.127054, 0.514419, - 0.12689, 0.506732, 0.139709, 0.517529, - 0.136934, 0.508338, 0.153173, 0.522085, - 0.147327, 0.510987, 0.167528, 0.526986, - 0.157612, 0.513527, 0.182708, 0.533122, - 0.168213, 0.516717, 0.198881, 0.540807, - 0.178688, 0.520832, 0.215986, 0.550687, - 0.189511, 0.52632, 0.234335, 0.560567, - 0.199998, 0.531009, 0.253375, 0.571698, - 0.210652, 0.535839, 0.273499, 0.584364, - 0.220917, 0.541091, 0.294355, 0.599066, - 0.23137, 0.546875, 0.316525, 0.614148, - 0.241206, 0.551306, 0.339671, 0.631157, - 0.250379, 0.555187, 0.36531, 0.647919, - 0.258397, 0.556595, 0.392767, 0.666112, - 0.265528, 0.556949, 0.421397, 0.686158, - 0.271827, 0.556617, 0.451433, 0.704838, - 0.27674, 0.552975, 0.482131, 0.723957, - 0.280733, 0.547814, 0.513458, 0.74262, - 0.283359, 0.53997, 0.545446, 0.762009, - 0.284541, 0.530422, 0.57775, 0.781314, - 0.284507, 0.518546, 0.610434, 0.799116, - 0.283309, 0.504178, 0.643178, 0.817604, - 0.280378, 0.48843, 0.676248, 0.83459, - 0.275619, 0.469457, 0.709698, 0.850974, - 0.26856, 0.447698, 0.744245, 0.866747, - 0.260094, 0.424791, 0.777695, 0.881412, - 0.249929, 0.399913, 0.810392, 0.8936, - 0.239137, 0.37308, 0.842872, 0.905943, - 0.226818, 0.345705, 0.874677, 0.916408, - 0.213699, 0.31706, 0.906257, 0.927215, - 0.198428, 0.288444, 0.936881, 0.935625, - 0.181643, 0.258329, 0.96795, 0.944076, - 0.164386, 0.228488, 0.998216, 0.951229, - 0.146339, 0.199763, 1.02689, 0.958793, - 0.127709, 0.172153, 1.0535, 0.963219, - 0.107244, 0.144989, 1.07646, 0.967562, - 0.0857764, 0.11685, 1.09675, 0.974866, - 0.0645377, 0.0880571, 1.11576, 0.983353, - 0.0431732, 0.0587352, 1.13227, 0.992503, - 0.0218356, 0.0294181, 1.1478, 1.00003, 0.000605203, - 0.000231013, 1.16207, 0.482935, - 1.01177e-05, 0.504695, 9.68142e-06, 0.477554, - 0.000251521, 0.499071, 0.000240676, 0.477904, - 0.00100683, 0.499436, 0.00096342, 0.478368, - 0.00226636, 0.499899, 0.0021687, 0.477977, - 0.00402719, 0.499513, 0.00385384, 0.477993, - 0.00629226, 0.499525, 0.0060221, 0.478011, - 0.00906011, 0.499536, 0.00867289, 0.478051, - 0.0123305, 0.499566, 0.0118074, 0.478089, - 0.016102, 0.499587, 0.0154269, 0.478171, - 0.0203736, 0.499645, 0.0195341, 0.478254, - 0.025143, 0.499692, 0.0241318, 0.47839, - 0.0304071, 0.499779, 0.0292247, 0.478588, - 0.0361631, 0.499911, 0.0348196, 0.478812, - 0.0424023, 0.500046, 0.0409231, 0.479208, - 0.0490724, 0.500326, 0.047552, 0.479841, - 0.0560722, 0.500805, 0.0547377, 0.480392, - 0.0636125, 0.501152, 0.0624607, 0.481068, - 0.0716134, 0.501561, 0.0707473, 0.481898, - 0.0800062, 0.502054, 0.0796118, 0.483022, - 0.0886568, 0.502728, 0.0890974, 0.484332, - 0.0977553, 0.503479, 0.0992099, 0.486126, - 0.107173, 0.504546, 0.10999, 0.488066, - 0.11677, 0.50557, 0.121476, 0.490521, - 0.126725, 0.506849, 0.133672, 0.494232, - 0.136793, 0.50911, 0.146731, 0.498302, - 0.147116, 0.511345, 0.160577, 0.503565, - 0.157446, 0.514344, 0.175335, 0.510902, - 0.168121, 0.518824, 0.191207, 0.519263, - 0.178799, 0.523666, 0.208058, 0.528204, - 0.189407, 0.528296, 0.225875, 0.538854, - 0.200145, 0.533724, 0.244782, 0.551278, - 0.210701, 0.539833, 0.264753, 0.565222, - 0.221303, 0.546131, 0.285745, 0.579403, - 0.231688, 0.551496, 0.307592, 0.595469, - 0.241718, 0.556809, 0.330582, 0.610929, - 0.250992, 0.559641, 0.354995, 0.629433, - 0.259602, 0.562379, 0.382471, 0.648504, - 0.267038, 0.563676, 0.411126, 0.66756, - 0.273388, 0.562092, 0.440924, 0.689143, - 0.278788, 0.560807, 0.472118, 0.709056, - 0.282783, 0.555701, 0.503774, 0.729855, - 0.285836, 0.548698, 0.536364, 0.748954, - 0.287078, 0.538544, 0.56895, 0.768373, - 0.287133, 0.526711, 0.601991, 0.78827, - 0.285839, 0.512511, 0.635403, 0.807465, - 0.283238, 0.496323, 0.668797, 0.825194, - 0.27906, 0.477638, 0.702584, 0.842203, - 0.272286, 0.456253, 0.736393, 0.857749, - 0.263854, 0.432412, 0.77096, 0.874799, - 0.253943, 0.407806, 0.80489, 0.887497, - 0.24237, 0.38033, 0.83771, 0.89966, - 0.230278, 0.352446, 0.870376, 0.911753, - 0.21646, 0.323268, 0.902256, 0.923011, - 0.202071, 0.294314, 0.933306, 0.932375, - 0.185519, 0.264104, 0.965177, 0.940537, - 0.167604, 0.234035, 0.996303, 0.948904, - 0.149068, 0.20412, 1.0261, 0.955263, - 0.129539, 0.175431, 1.05304, 0.960303, - 0.109932, 0.148116, 1.07617, 0.965512, - 0.0880572, 0.119693, 1.09742, 0.973466, - 0.0660548, 0.0901619, 1.11721, 0.98284, - 0.0439228, 0.0599875, 1.13436, 0.992216, - 0.0219588, 0.0298975, 1.15006, 0.999946, 0.000119402, - 2.08547e-05, 1.16471, 0.447827, - 1.00414e-05, 0.491543, 9.14833e-06, 0.454778, - 0.000251257, 0.499172, 0.00022891, 0.453519, - 0.00100342, 0.497787, 0.000914184, 0.45357, - 0.00225776, 0.497847, 0.00205701, 0.453578, - 0.00401371, 0.497855, 0.00365705, 0.45357, - 0.00627107, 0.497841, 0.00571453, 0.453598, - 0.00902968, 0.497864, 0.00823019, 0.453627, - 0.0122888, 0.497882, 0.0112049, 0.453684, - 0.0160475, 0.497923, 0.0146405, 0.453764, - 0.0203044, 0.49798, 0.0185394, 0.453866, - 0.0250576, 0.498049, 0.0229054, 0.453996, - 0.0303028, 0.49813, 0.0277424, 0.454196, - 0.0360379, 0.498267, 0.0330587, 0.454457, - 0.0422521, 0.498445, 0.0388613, 0.454926, - 0.0488393, 0.498812, 0.0451767, 0.455525, - 0.0558653, 0.499272, 0.0520153, 0.456074, - 0.0633772, 0.499625, 0.0593754, 0.456752, - 0.0713606, 0.500049, 0.0672751, 0.457648, - 0.07971, 0.500615, 0.0757447, 0.458849, - 0.0883032, 0.501399, 0.0848231, 0.46029, - 0.0974095, 0.502293, 0.0945135, 0.462, - 0.106729, 0.503301, 0.104848, 0.464121, - 0.116354, 0.504533, 0.115884, 0.466889, - 0.126214, 0.506172, 0.127652, 0.470744, - 0.136324, 0.508667, 0.14024, 0.47488, - 0.146595, 0.510995, 0.153673, 0.480845, - 0.157027, 0.514832, 0.168053, 0.488262, - 0.167658, 0.519506, 0.183508, 0.496547, - 0.178343, 0.524347, 0.199948, 0.506254, - 0.188916, 0.52983, 0.217503, 0.517961, - 0.199975, 0.536357, 0.236272, 0.531484, - 0.210624, 0.543641, 0.256096, 0.545496, - 0.221227, 0.550048, 0.277085, 0.559497, - 0.231568, 0.555076, 0.298615, 0.575752, - 0.241698, 0.560541, 0.321547, 0.591999, - 0.251172, 0.564156, 0.345602, 0.610654, - 0.260178, 0.567607, 0.371851, 0.630484, - 0.268094, 0.56923, 0.40076, 0.651807, - 0.274661, 0.569779, 0.430801, 0.67239, - 0.280331, 0.566791, 0.461939, 0.693024, - 0.284501, 0.562007, 0.493854, 0.715473, - 0.287852, 0.555791, 0.526992, 0.736323, - 0.28929, 0.546345, 0.560102, 0.755771, - 0.289405, 0.534, 0.593543, 0.775424, - 0.2881, 0.519114, 0.627256, 0.795447, - 0.285562, 0.502543, 0.661464, 0.815319, - 0.281416, 0.484773, 0.695206, 0.831769, - 0.275523, 0.463445, 0.729044, 0.849464, - 0.267516, 0.440269, 0.764069, 0.866775, - 0.257584, 0.415049, 0.799089, 0.881252, - 0.245817, 0.388049, 0.831948, 0.894209, - 0.233127, 0.35889, 0.865526, 0.906922, - 0.219579, 0.329915, 0.89818, 0.919686, - 0.204491, 0.300441, 0.930013, 0.929044, - 0.188962, 0.269445, 0.962061, 0.938393, - 0.171079, 0.238402, 0.994214, 0.94661, - 0.15199, 0.208204, 1.02533, 0.953095, - 0.131953, 0.178653, 1.0529, 0.958644, - 0.111233, 0.150684, 1.0771, 0.963925, - 0.0903098, 0.122359, 1.09855, 0.971995, - 0.0680505, 0.0923342, 1.11874, 0.981658, - 0.0448512, 0.0614195, 1.13635, 0.991649, - 0.0221931, 0.0303582, 1.15238, 0.999985, 0.000393403, - 0.000111086, 1.16772, 0.396806, - 9.71563e-06, 0.457671, 8.42355e-06, 0.429186, - 0.000249421, 0.495017, 0.00021625, 0.429324, - 0.000998052, 0.495173, 0.000865322, 0.429175, - 0.00224487, 0.494999, 0.00194637, 0.429129, - 0.00399041, 0.494952, 0.00346004, 0.429153, - 0.00623476, 0.494974, 0.00540684, 0.429168, - 0.0089773, 0.494983, 0.00778714, 0.429207, - 0.0122175, 0.495012, 0.0106022, 0.429257, - 0.0159542, 0.495047, 0.0138535, 0.429338, - 0.0201864, 0.495106, 0.0175443, 0.429431, - 0.0249104, 0.495165, 0.0216774, 0.429587, - 0.0301252, 0.495279, 0.0262594, 0.429796, - 0.0358249, 0.495432, 0.0312968, 0.430065, - 0.0419972, 0.495621, 0.0367985, 0.430588, - 0.0485144, 0.496061, 0.042798, 0.43113, - 0.0555028, 0.496472, 0.0492914, 0.431743, - 0.0629852, 0.496904, 0.0562907, 0.432448, - 0.0709256, 0.497369, 0.0638056, 0.433414, - 0.0791942, 0.498032, 0.071885, 0.434638, - 0.0877346, 0.498854, 0.0805517, 0.43611, - 0.0968056, 0.499812, 0.0898047, 0.437859, - 0.106002, 0.500891, 0.0997142, 0.440017, - 0.115648, 0.502198, 0.110289, 0.443236, - 0.125427, 0.504389, 0.121644, 0.44697, - 0.135492, 0.506809, 0.133769, 0.451689, - 0.145746, 0.509858, 0.146787, 0.45811, - 0.156219, 0.514247, 0.160793, 0.465305, - 0.166834, 0.518816, 0.175791, 0.474085, - 0.177546, 0.524331, 0.191906, 0.484808, - 0.188262, 0.53104, 0.209199, 0.49732, - 0.199346, 0.538511, 0.227825, 0.509693, - 0.209951, 0.544554, 0.247269, 0.524367, - 0.220533, 0.551616, 0.267978, 0.539228, - 0.231082, 0.557368, 0.289672, 0.55644, - 0.241342, 0.563782, 0.31268, 0.574204, - 0.250964, 0.568851, 0.33651, 0.593388, - 0.260306, 0.57312, 0.362219, 0.613358, - 0.268667, 0.574916, 0.390322, 0.634512, - 0.275591, 0.575053, 0.420478, 0.65563, - 0.281328, 0.572404, 0.451614, 0.678265, - 0.285948, 0.568893, 0.484112, 0.70011, - 0.289408, 0.561878, 0.517348, 0.723005, - 0.291328, 0.55359, 0.551355, 0.743744, - 0.291418, 0.541099, 0.585109, 0.763949, - 0.290252, 0.526489, 0.619487, 0.784186, - 0.287648, 0.509496, 0.65404, 0.804304, - 0.283782, 0.491484, 0.688649, 0.823629, - 0.278067, 0.470517, 0.723133, 0.84094, - 0.270588, 0.44705, 0.757163, 0.857852, - 0.261188, 0.421252, 0.792816, 0.874934, - 0.249313, 0.394191, 0.827248, 0.888709, - 0.236492, 0.365359, 0.861074, 0.902589, - 0.222185, 0.336016, 0.894417, 0.914201, - 0.207314, 0.30527, 0.926825, 0.925978, - 0.191146, 0.274532, 0.9595, 0.93512, - 0.174135, 0.243393, 0.991583, 0.943656, - 0.155231, 0.212414, 1.02356, 0.951719, - 0.134403, 0.182005, 1.05239, 0.957164, - 0.113023, 0.153043, 1.07754, 0.962656, - 0.0914493, 0.124186, 1.09984, 0.970695, - 0.0694179, 0.0941654, 1.12, 0.980749, - 0.0466199, 0.0629671, 1.13849, 0.991205, - 0.0227032, 0.0311146, 1.15494, 0.999884, 0.000632388, - 0.000254483, 1.1706, 0.379821, - 9.57289e-06, 0.460637, 7.89337e-06, 0.405188, - 0.000247483, 0.491396, 0.000204064, 0.404796, - 0.000989434, 0.490914, 0.000815853, 0.40483, - 0.00222607, 0.490949, 0.00183559, 0.40473, - 0.00395723, 0.49084, 0.00326332, 0.404731, - 0.00618287, 0.490836, 0.00509945, 0.404768, - 0.00890258, 0.490871, 0.00734463, 0.404791, - 0.0121156, 0.490883, 0.00999992, 0.404857, - 0.0158214, 0.490938, 0.0130676, 0.404943, - 0.0200178, 0.491004, 0.0165503, 0.405059, - 0.0247027, 0.491093, 0.0204521, 0.405213, - 0.0298729, 0.491205, 0.0247788, 0.405399, - 0.0355226, 0.491333, 0.0295373, 0.405731, - 0.0416352, 0.491604, 0.034741, 0.406303, - 0.0480807, 0.492116, 0.0404255, 0.406814, - 0.0550458, 0.492506, 0.0465732, 0.407404, - 0.0624652, 0.492926, 0.0532058, 0.408149, - 0.0702958, 0.493442, 0.0603442, 0.409128, - 0.0784623, 0.494136, 0.0680297, 0.410408, - 0.087007, 0.495054, 0.0762786, 0.411813, - 0.0959639, 0.495962, 0.0851046, 0.413735, - 0.105075, 0.497257, 0.0945878, 0.416137, - 0.114646, 0.498882, 0.104725, 0.41934, - 0.124394, 0.501132, 0.11563, 0.423326, - 0.134328, 0.503883, 0.127325, 0.428419, - 0.14458, 0.50747, 0.139911, 0.43484, - 0.154979, 0.511964, 0.153481, 0.442641, - 0.165628, 0.517328, 0.168114, 0.452511, - 0.176365, 0.524258, 0.183995, 0.463473, - 0.187298, 0.531248, 0.200953, 0.475564, - 0.198244, 0.538367, 0.219176, 0.488664, - 0.208938, 0.545175, 0.238514, 0.504073, - 0.219599, 0.553227, 0.259129, 0.520832, - 0.230378, 0.560653, 0.280997, 0.538455, - 0.240703, 0.567523, 0.303821, 0.55709, - 0.250548, 0.573287, 0.327948, 0.576646, - 0.259964, 0.577795, 0.353362, 0.596705, - 0.268721, 0.580077, 0.380336, 0.618053, - 0.276054, 0.58018, 0.4101, 0.640303, - 0.282176, 0.578747, 0.44161, 0.662365, - 0.286931, 0.574294, 0.474106, 0.684542, - 0.290521, 0.567035, 0.507549, 0.707984, - 0.292672, 0.558687, 0.541853, 0.730913, - 0.293189, 0.547606, 0.576581, 0.752948, - 0.292199, 0.533471, 0.61172, 0.773452, - 0.289508, 0.516395, 0.646339, 0.794715, - 0.285716, 0.497873, 0.682131, 0.814251, - 0.280051, 0.476845, 0.716396, 0.833057, - 0.272873, 0.453449, 0.751503, 0.84959, - 0.263982, 0.427857, 0.786085, 0.867022, - 0.252745, 0.400335, 0.821355, 0.882277, - 0.239655, 0.371304, 0.85646, 0.895375, - 0.225386, 0.340397, 0.890828, 0.909347, - 0.209587, 0.310005, 0.923532, 0.921885, - 0.193433, 0.2796, 0.956419, 0.932127, - 0.176135, 0.247276, 0.989445, 0.941869, - 0.157872, 0.216186, 1.02221, 0.949735, - 0.137577, 0.185602, 1.05195, 0.956617, - 0.115285, 0.155767, 1.07822, 0.961974, - 0.0928418, 0.126103, 1.10149, 0.96972, - 0.0700592, 0.0956758, 1.12207, 0.98012, - 0.0474671, 0.0643269, 1.1408, 0.990825, - 0.0238113, 0.0320863, 1.1577, 0.999876, 0.000381574, - 8.12203e-05, 1.17403, 0.367636, - 9.61342e-06, 0.469176, 7.53287e-06, 0.380377, - 0.000244772, 0.485434, 0.000191797, 0.380416, - 0.000978857, 0.485475, 0.000767015, 0.380376, - 0.00220165, 0.485435, 0.00172522, 0.380419, - 0.00391408, 0.485487, 0.00306734, 0.380438, - 0.00611549, 0.485505, 0.00479332, 0.380462, - 0.00880558, 0.485525, 0.00690391, 0.380496, - 0.0119837, 0.485551, 0.00940039, 0.38056, - 0.0156487, 0.485605, 0.0122848, 0.38064, - 0.0197988, 0.485666, 0.0155601, 0.380767, - 0.0244324, 0.48577, 0.0192313, 0.380909, - 0.0295444, 0.485871, 0.0233032, 0.381142, - 0.0351321, 0.48606, 0.0277861, 0.381472, - 0.0411535, 0.486336, 0.0326939, 0.382015, - 0.0475408, 0.486833, 0.0380565, 0.382523, - 0.0544395, 0.487231, 0.0438615, 0.383129, - 0.061784, 0.487683, 0.0501332, 0.383952, - 0.0695085, 0.488313, 0.0568996, 0.38498, - 0.0775819, 0.489077, 0.0641952, 0.386331, - 0.0860443, 0.490113, 0.0720324, 0.387788, - 0.0948406, 0.491099, 0.0804379, 0.389808, - 0.103899, 0.492566, 0.0894899, 0.39252, - 0.113313, 0.494601, 0.0992098, 0.395493, - 0.123007, 0.496619, 0.109641, 0.399826, - 0.132859, 0.499912, 0.120919, 0.405341, - 0.143077, 0.504061, 0.133107, 0.411932, - 0.153465, 0.508905, 0.146263, 0.420591, - 0.164108, 0.515482, 0.160544, 0.43101, - 0.174893, 0.523191, 0.176123, 0.441881, - 0.185839, 0.53026, 0.192757, 0.453919, - 0.196633, 0.537295, 0.210535, 0.468715, - 0.207611, 0.546156, 0.229886, 0.485182, - 0.218517, 0.555173, 0.250543, 0.501926, - 0.229249, 0.562728, 0.27221, 0.51785, - 0.239481, 0.567494, 0.294892, 0.536947, - 0.249395, 0.573889, 0.318987, 0.557115, - 0.259, 0.578831, 0.344348, 0.577966, - 0.268075, 0.582055, 0.371223, 0.599489, - 0.276115, 0.583307, 0.399834, 0.62479, - 0.282523, 0.583902, 0.431415, 0.647504, - 0.287663, 0.57953, 0.464301, 0.670601, - 0.291538, 0.573103, 0.498123, 0.693539, - 0.293842, 0.563731, 0.532662, 0.717385, - 0.294681, 0.553169, 0.567925, 0.741533, - 0.293717, 0.539908, 0.603502, 0.762142, - 0.291156, 0.521902, 0.639074, 0.783014, - 0.28719, 0.502815, 0.674439, 0.805158, - 0.281773, 0.482598, 0.710497, 0.823646, - 0.274682, 0.458949, 0.7456, 0.841879, - 0.266184, 0.433129, 0.781085, 0.859515, - 0.255682, 0.406064, 0.816, 0.875335, - 0.242849, 0.376509, 0.851074, 0.890147, - 0.228329, 0.345502, 0.886473, 0.903144, - 0.212491, 0.31428, 0.920751, 0.916618, - 0.195695, 0.282994, 0.954606, 0.927953, - 0.178267, 0.251091, 0.988402, 0.937414, - 0.159549, 0.219107, 1.02141, 0.946823, - 0.140022, 0.18896, 1.05167, 0.954651, - 0.118154, 0.158667, 1.07819, 0.959955, - 0.0946636, 0.128808, 1.1025, 0.96858, - 0.0711792, 0.0973787, 1.12391, 0.97938, - 0.0475046, 0.0650965, 1.14322, 0.990498, - 0.024059, 0.0326267, 1.16077, 0.999844, - 5.12408e-05, 0.000112444, 1.17727, 0.316912, - 9.34977e-06, 0.425996, 6.95559e-06, 0.356423, - 0.000241372, 0.479108, 0.000179562, 0.356272, - 0.000965292, 0.478897, 0.00071811, 0.356262, - 0.00217182, 0.478894, 0.00161574, 0.356265, - 0.00386092, 0.478895, 0.00287261, 0.356278, - 0.0060324, 0.478905, 0.00448907, 0.356293, - 0.00868565, 0.478914, 0.00646572, 0.356346, - 0.0118207, 0.478965, 0.00880438, 0.356395, - 0.0154355, 0.479001, 0.0115066, 0.356484, - 0.019529, 0.479075, 0.0145762, 0.356609, - 0.0240991, 0.47918, 0.018018, 0.356766, - 0.0291413, 0.479305, 0.0218379, 0.357009, - 0.0346498, 0.479512, 0.0260454, 0.357424, - 0.0405462, 0.479909, 0.0306657, 0.357899, - 0.0468825, 0.480337, 0.0357054, 0.358424, - 0.0536887, 0.480771, 0.0411728, 0.359041, - 0.0609416, 0.481242, 0.0470841, 0.359903, - 0.0685239, 0.481943, 0.0534831, 0.360932, - 0.0764883, 0.482741, 0.0603795, 0.362196, - 0.0848364, 0.483688, 0.0678028, 0.363847, - 0.0935002, 0.484947, 0.0758086, 0.365972, - 0.102471, 0.486588, 0.0844173, 0.368741, - 0.111751, 0.488787, 0.0937199, 0.372146, - 0.121334, 0.491405, 0.103732, 0.377114, - 0.131147, 0.495604, 0.114608, 0.38226, - 0.141213, 0.499436, 0.126345, 0.389609, - 0.151632, 0.505334, 0.139116, 0.397925, - 0.162073, 0.51168, 0.152995, 0.407824, - 0.172819, 0.518876, 0.168071, 0.420014, - 0.183929, 0.527639, 0.184495, 0.434266, - 0.195032, 0.537588, 0.20232, 0.447352, - 0.205792, 0.544379, 0.221189, 0.463726, - 0.216704, 0.553422, 0.241616, 0.481406, - 0.227531, 0.562074, 0.263298, 0.498707, - 0.238017, 0.568227, 0.286116, 0.518039, - 0.247936, 0.574473, 0.3101, 0.538277, - 0.257437, 0.579191, 0.335401, 0.561166, - 0.266829, 0.584807, 0.362246, 0.583189, - 0.275329, 0.586476, 0.390609, 0.606024, - 0.28234, 0.585578, 0.420998, 0.632419, - 0.287924, 0.584496, 0.454357, 0.656128, - 0.291972, 0.577766, 0.488233, 0.679953, - 0.29456, 0.56875, 0.523248, 0.704654, - 0.295816, 0.558388, 0.559168, 0.729016, - 0.295157, 0.544826, 0.595326, 0.752062, - 0.292779, 0.528273, 0.631864, 0.773138, - 0.288681, 0.508482, 0.667793, 0.794869, - 0.283358, 0.487341, 0.704035, 0.815101, - 0.27608, 0.46354, 0.739925, 0.834212, - 0.26767, 0.438672, 0.775539, 0.852368, - 0.257397, 0.411239, 0.810895, 0.870207, - 0.245689, 0.3829, 0.846472, 0.884063, - 0.231452, 0.351496, 0.881788, 0.898284, - 0.215561, 0.31895, 0.917438, 0.912964, - 0.198208, 0.287367, 0.952422, 0.924666, - 0.180426, 0.254487, 0.987551, 0.934429, - 0.161525, 0.222226, 1.02142, 0.943485, - 0.141197, 0.191143, 1.05218, 0.9521, - 0.120085, 0.161112, 1.07937, 0.957876, - 0.0975881, 0.130982, 1.10403, 0.966943, - 0.0726842, 0.0990553, 1.12616, 0.978313, - 0.0483705, 0.0662818, 1.14619, 0.990048, - 0.0239072, 0.0329243, 1.16413, 0.999984, 0.000461885, - 7.72859e-05, 1.18099, 0.321287, - 9.35049e-06, 0.455413, 6.59662e-06, 0.332595, - 0.000237513, 0.471437, 0.000167562, 0.332729, - 0.000949964, 0.471618, 0.000670192, 0.332305, - 0.00213618, 0.471028, 0.00150712, 0.332326, - 0.00379765, 0.471055, 0.00267959, 0.332344, - 0.00593353, 0.471072, 0.00418751, 0.332356, - 0.00854349, 0.471077, 0.00603172, 0.332403, - 0.0116268, 0.471121, 0.00821362, 0.332461, - 0.0151824, 0.47117, 0.0107357, 0.332552, - 0.0192088, 0.471251, 0.0136014, 0.332657, - 0.0237024, 0.47133, 0.0168152, 0.332835, - 0.0286615, 0.471487, 0.0203853, 0.333083, - 0.0340765, 0.471708, 0.0243212, 0.333547, - 0.0398563, 0.47219, 0.0286518, 0.333989, - 0.0460916, 0.472587, 0.0333763, 0.334532, - 0.0527897, 0.473054, 0.0385084, 0.335167, - 0.0599284, 0.473568, 0.0440638, 0.33608, - 0.0673514, 0.474362, 0.0500962, 0.337146, - 0.0752237, 0.475231, 0.0566022, 0.338462, - 0.083418, 0.476282, 0.0636272, 0.34014, - 0.0919382, 0.477615, 0.0712153, 0.342341, - 0.100741, 0.479404, 0.079417, 0.345088, - 0.109905, 0.481618, 0.0882631, 0.349049, - 0.119369, 0.485081, 0.0978851, 0.353939, - 0.129033, 0.489317, 0.108336, 0.359893, - 0.139038, 0.494309, 0.119698, 0.366945, - 0.149411, 0.499983, 0.132024, 0.375814, - 0.159843, 0.507185, 0.145558, 0.387112, - 0.170664, 0.516392, 0.160433, 0.40023, - 0.181897, 0.526519, 0.176648, 0.412555, - 0.192785, 0.53423, 0.193922, 0.427023, - 0.203663, 0.542741, 0.212662, 0.443685, - 0.214695, 0.552066, 0.232944, 0.461499, - 0.225561, 0.560762, 0.254495, 0.480975, - 0.236257, 0.569421, 0.277531, 0.501, - 0.24639, 0.576101, 0.301724, 0.521691, - 0.256101, 0.581493, 0.327112, 0.543478, - 0.265289, 0.585221, 0.353917, 0.566094, - 0.273938, 0.587614, 0.381941, 0.589578, - 0.281679, 0.587991, 0.41172, 0.614583, - 0.287655, 0.585928, 0.444148, 0.641813, - 0.292228, 0.582092, 0.478617, 0.666189, - 0.295172, 0.57398, 0.51397, 0.690475, - 0.29648, 0.561676, 0.550118, 0.715543, - 0.296203, 0.548758, 0.586933, 0.740405, - 0.293999, 0.532792, 0.62384, 0.762183, - 0.28998, 0.512735, 0.660723, 0.786069, - 0.28478, 0.492402, 0.69807, 0.806812, - 0.277568, 0.469058, 0.734422, 0.826987, - 0.268951, 0.443017, 0.770946, 0.844588, - 0.259049, 0.415501, 0.80699, 0.863725, - 0.2471, 0.387328, 0.842107, 0.879137, - 0.234157, 0.356108, 0.878078, 0.894634, - 0.218719, 0.324315, 0.914058, 0.909162, - 0.201293, 0.291813, 0.949922, 0.92072, - 0.18267, 0.258474, 0.985337, 0.93158, - 0.163212, 0.225593, 1.0205, 0.941238, - 0.142771, 0.193986, 1.05273, 0.949293, - 0.120956, 0.163392, 1.08075, 0.956226, - 0.0985743, 0.132934, 1.10559, 0.96546, - 0.075118, 0.101255, 1.12823, 0.977403, - 0.0497921, 0.0675441, 1.149, 0.989648, - 0.0241574, 0.0334681, 1.16765, 1.00001, 0.0005762, - 0.000184807, 1.18519, 0.303474, - 9.16603e-06, 0.4542, 6.1243e-06, 0.308894, - 0.000232869, 0.462306, 0.000155592, 0.309426, - 0.000931661, 0.463093, 0.000622499, 0.308643, - 0.0020949, 0.461933, 0.00139979, 0.308651, - 0.0037242, 0.461941, 0.00248874, 0.308662, - 0.00581873, 0.46195, 0.00388933, 0.308687, - 0.00837818, 0.461974, 0.00560247, 0.308728, - 0.0114016, 0.462011, 0.00762948, 0.308789, - 0.0148884, 0.462067, 0.00997326, 0.308882, - 0.0188369, 0.462151, 0.0126375, 0.309007, - 0.0232436, 0.462263, 0.0156271, 0.30918, - 0.0281054, 0.462417, 0.0189498, 0.309442, - 0.0334065, 0.462667, 0.0226167, 0.309901, - 0.0390589, 0.463162, 0.0266614, 0.310331, - 0.0452042, 0.463555, 0.0310715, 0.310858, - 0.0517735, 0.464019, 0.0358698, 0.311576, - 0.0587359, 0.464669, 0.0410848, 0.312436, - 0.0660383, 0.465406, 0.0467453, 0.313526, - 0.0737266, 0.466339, 0.0528718, 0.314903, - 0.0817574, 0.467504, 0.0595039, 0.316814, - 0.090167, 0.469226, 0.0666888, 0.318965, - 0.0987555, 0.470981, 0.0744658, 0.322077, - 0.107792, 0.473814, 0.082912, 0.325947, - 0.117098, 0.477241, 0.0920846, 0.331008, - 0.126602, 0.48184, 0.102137, 0.337893, - 0.136619, 0.488334, 0.113135, 0.345106, - 0.146838, 0.494415, 0.12511, 0.355111, - 0.157357, 0.503275, 0.138356, 0.365095, - 0.167955, 0.510966, 0.152686, 0.378344, - 0.179157, 0.521508, 0.16856, 0.391599, - 0.190143, 0.530455, 0.18561, 0.407786, - 0.20123, 0.541275, 0.204308, 0.425294, - 0.212456, 0.551784, 0.224623, 0.444021, - 0.223568, 0.561493, 0.246172, 0.463418, - 0.234154, 0.569886, 0.268979, 0.484077, - 0.244546, 0.577116, 0.293411, 0.505513, - 0.254301, 0.582914, 0.318936, 0.527672, - 0.263564, 0.587208, 0.345856, 0.550565, - 0.272332, 0.589277, 0.374054, 0.573656, - 0.280011, 0.588426, 0.403276, 0.59827, - 0.286924, 0.587504, 0.43474, 0.624731, - 0.291994, 0.583401, 0.468767, 0.652396, - 0.295159, 0.576997, 0.504411, 0.67732, - 0.296954, 0.565863, 0.54114, 0.703147, - 0.296877, 0.552316, 0.57816, 0.728715, - 0.295147, 0.536773, 0.616124, 0.752448, - 0.291275, 0.51771, 0.653885, 0.775169, - 0.285905, 0.496087, 0.691537, 0.799307, - 0.279064, 0.474232, 0.729251, 0.819482, - 0.270294, 0.447676, 0.766267, 0.837659, - 0.260032, 0.419656, 0.802616, 0.856903, - 0.248497, 0.391328, 0.838583, 0.873325, - 0.235252, 0.360285, 0.874711, 0.889788, - 0.221126, 0.329215, 0.91077, 0.904486, - 0.204304, 0.296392, 0.94653, 0.917711, - 0.185562, 0.262159, 0.983828, 0.928969, - 0.165635, 0.229142, 1.01955, 0.939707, - 0.14442, 0.19673, 1.05317, 0.948167, - 0.122147, 0.165095, 1.0823, 0.955222, - 0.099098, 0.13451, 1.10791, 0.964401, - 0.0755332, 0.102476, 1.1312, 0.976605, - 0.0513817, 0.0689667, 1.15218, 0.989085, - 0.0258499, 0.034506, 1.17129, 0.999908, 0.000617773, - 0.000271268, 1.18961, 0.285803, - 9.05752e-06, 0.452348, 5.72272e-06, 0.284689, - 0.00022732, 0.450581, 0.000143626, 0.285263, - 0.000910214, 0.451482, 0.000575099, 0.285302, - 0.00204784, 0.451553, 0.00129395, 0.285318, - 0.00364057, 0.451574, 0.0023006, 0.28533, - 0.00568813, 0.451585, 0.00359547, 0.285361, - 0.00819001, 0.451618, 0.00517934, 0.285397, - 0.0111458, 0.45165, 0.007054, 0.285447, - 0.0145536, 0.451688, 0.00922167, 0.285527, - 0.0184127, 0.451758, 0.0116869, 0.285688, - 0.0227207, 0.451929, 0.0144555, 0.28584, - 0.0274712, 0.452055, 0.0175341, 0.286136, - 0.0326278, 0.452369, 0.0209406, 0.286574, - 0.0381792, 0.452853, 0.0246965, 0.287012, - 0.0441879, 0.453272, 0.0287996, 0.287542, - 0.0506096, 0.453752, 0.033268, 0.288299, - 0.0573634, 0.454488, 0.0381504, 0.289186, - 0.0645458, 0.455294, 0.0434447, 0.290302, - 0.0720405, 0.456301, 0.0491973, 0.291776, - 0.0799046, 0.457648, 0.0554453, 0.29372, - 0.088117, 0.459483, 0.0622311, 0.296052, - 0.0965328, 0.461571, 0.0695992, 0.299563, - 0.105409, 0.465085, 0.077658, 0.30335, - 0.114553, 0.468506, 0.0864176, 0.309167, - 0.123917, 0.474423, 0.0961078, 0.31529, - 0.13381, 0.47995, 0.106643, 0.324163, - 0.144021, 0.488592, 0.118322, 0.333272, - 0.154382, 0.496461, 0.131133, 0.344224, - 0.165015, 0.50562, 0.145208, 0.357733, - 0.176168, 0.516719, 0.16073, 0.373046, - 0.187468, 0.528513, 0.177807, 0.38788, - 0.198488, 0.537713, 0.196072, 0.405133, - 0.209545, 0.547999, 0.21605, 0.423845, - 0.220724, 0.55759, 0.237484, 0.443777, - 0.231518, 0.566246, 0.26039, 0.464824, - 0.242035, 0.574326, 0.284835, 0.486635, - 0.251898, 0.58037, 0.310518, 0.51012, - 0.261304, 0.58568, 0.337678, 0.535301, - 0.270384, 0.590197, 0.366242, 0.559193, - 0.27841, 0.590569, 0.395873, 0.583544, - 0.285325, 0.588161, 0.426857, 0.608834, - 0.291113, 0.584249, 0.459477, 0.635753, - 0.294882, 0.57763, 0.494734, 0.664367, - 0.297088, 0.569479, 0.532023, 0.689688, - 0.297364, 0.555064, 0.569629, 0.715732, - 0.295949, 0.539522, 0.608124, 0.741307, - 0.292259, 0.521613, 0.646231, 0.764949, - 0.287063, 0.49969, 0.684938, 0.788599, - 0.28012, 0.476747, 0.723548, 0.81048, - 0.27153, 0.45116, 0.761135, 0.831372, - 0.261289, 0.424101, 0.798916, 0.850092, - 0.249559, 0.39443, 0.835952, 0.867777, - 0.236348, 0.363849, 0.871606, 0.884632, - 0.221569, 0.332477, 0.907843, 0.90047, - 0.20618, 0.300667, 0.944187, 0.914524, - 0.188771, 0.266552, 0.981371, 0.926892, - 0.168362, 0.232349, 1.01841, 0.937951, - 0.146761, 0.199359, 1.05308, 0.947236, - 0.123813, 0.1675, 1.0839, 0.954367, - 0.099984, 0.136166, 1.11047, 0.963907, - 0.0759278, 0.103808, 1.13414, 0.976218, - 0.0511367, 0.0697061, 1.15575, 0.988772, - 0.0267415, 0.0352529, 1.17531, 0.999888, - 0.000520778, 0.000289926, 1.19389, 0.263546, - 8.83274e-06, 0.441896, 5.26783e-06, 0.262352, - 0.000221849, 0.439889, 0.000132311, 0.262325, - 0.000886683, 0.439848, 0.000528824, 0.26228, - 0.00199476, 0.439765, 0.00118975, 0.262372, - 0.00354671, 0.439922, 0.00211568, 0.26239, - 0.00554141, 0.439941, 0.00330652, 0.262412, - 0.00797888, 0.439961, 0.00476346, 0.262453, - 0.0108584, 0.440002, 0.00648818, 0.262528, - 0.0141788, 0.440085, 0.0084835, 0.262615, - 0.017938, 0.440166, 0.0107533, 0.262744, - 0.0221346, 0.440291, 0.0133044, 0.262939, - 0.026762, 0.440493, 0.0161445, 0.263277, - 0.0317573, 0.440889, 0.0192974, 0.26368, - 0.0371832, 0.441338, 0.0227699, 0.264106, - 0.0430371, 0.441753, 0.0265698, 0.264624, - 0.0493035, 0.442227, 0.0307178, 0.265378, - 0.0558669, 0.442985, 0.0352616, 0.266253, - 0.0628718, 0.443795, 0.0401968, 0.267478, - 0.0701569, 0.445008, 0.04559, 0.269062, - 0.077845, 0.446599, 0.0514539, 0.270926, - 0.0857941, 0.448349, 0.0578382, 0.273693, - 0.0940773, 0.451221, 0.0648363, 0.276746, - 0.102704, 0.454097, 0.0724389, 0.281693, - 0.111735, 0.459517, 0.0808744, 0.287335, - 0.121004, 0.46531, 0.0901551, 0.29448, - 0.130734, 0.472605, 0.100371, 0.30257, - 0.140777, 0.480251, 0.111644, 0.312465, - 0.15111, 0.489444, 0.124111, 0.324856, - 0.16189, 0.500919, 0.137979, 0.33774, - 0.172946, 0.511317, 0.153163, 0.35255, - 0.184152, 0.522684, 0.169817, 0.367786, - 0.19522, 0.53248, 0.187886, 0.385474, - 0.20632, 0.543326, 0.207634, 0.404976, - 0.217744, 0.554109, 0.229165, 0.425203, - 0.228691, 0.563395, 0.252068, 0.446704, - 0.239299, 0.571565, 0.276471, 0.468951, - 0.249348, 0.577935, 0.302323, 0.493487, - 0.258933, 0.584309, 0.329882, 0.517861, - 0.268009, 0.58773, 0.358525, 0.543309, - 0.276238, 0.589612, 0.388585, 0.569704, - 0.28356, 0.589294, 0.419787, 0.594871, - 0.289497, 0.585137, 0.452114, 0.622555, - 0.294452, 0.580356, 0.486466, 0.651167, - 0.296918, 0.57185, 0.523079, 0.677332, - 0.297647, 0.558428, 0.5611, 0.703718, - 0.296321, 0.542232, 0.599592, 0.730262, - 0.293339, 0.524541, 0.639138, 0.754304, - 0.288036, 0.502691, 0.677978, 0.778051, - 0.281018, 0.479212, 0.716537, 0.801557, - 0.272414, 0.454071, 0.75586, 0.822559, - 0.262419, 0.425952, 0.794477, 0.843051, - 0.250702, 0.397313, 0.832664, 0.86232, - 0.237264, 0.366534, 0.869876, 0.879044, - 0.222716, 0.334816, 0.906973, 0.896362, - 0.206827, 0.303143, 0.943558, 0.910342, - 0.189659, 0.269699, 0.979759, 0.924119, - 0.171108, 0.236411, 1.01718, 0.935374, - 0.149579, 0.202224, 1.05289, 0.944295, - 0.126295, 0.16989, 1.08496, 0.952227, - 0.101511, 0.138089, 1.11256, 0.962041, - 0.0766392, 0.105053, 1.1375, 0.97528, - 0.0511967, 0.070329, 1.15983, 0.988476, - 0.025463, 0.0351268, 1.17987, 0.999962, 2.86808e-05, 1.45564e-05, 1.19901, 0.227089, - 8.41413e-06, 0.404216, 4.72707e-06, 0.239725, - 0.000215083, 0.426708, 0.000120833, 0.239904, - 0.000860718, 0.427028, 0.000483555, 0.239911, - 0.00193661, 0.427039, 0.00108806, 0.239914, - 0.00344276, 0.42704, 0.00193457, 0.239933, - 0.00537907, 0.427064, 0.00302363, 0.239944, - 0.00774482, 0.427065, 0.00435604, 0.239993, - 0.01054, 0.427122, 0.00593398, 0.240052, - 0.0137626, 0.427179, 0.00775987, 0.240148, - 0.0174115, 0.427279, 0.00983854, 0.240278, - 0.021484, 0.42741, 0.0121763, 0.240472, - 0.0259729, 0.427618, 0.0147827, 0.240839, - 0.0308131, 0.428086, 0.0176837, 0.241201, - 0.0360893, 0.428482, 0.0208775, 0.241626, - 0.0417723, 0.428907, 0.0243821, 0.242207, - 0.0478337, 0.42952, 0.0282228, 0.24298, - 0.0542199, 0.430332, 0.0324333, 0.243881, - 0.0610015, 0.431222, 0.0370252, 0.245123, - 0.0680874, 0.432512, 0.0420535, 0.24667, - 0.0755482, 0.434088, 0.0475414, 0.248779, - 0.0832873, 0.436323, 0.0535542, 0.251665, - 0.0913546, 0.439509, 0.0601716, 0.255305, - 0.0998489, 0.443478, 0.0674282, 0.260049, - 0.108576, 0.448713, 0.0754673, 0.266192, - 0.117754, 0.455524, 0.084339, 0.273158, - 0.127294, 0.4627, 0.0941683, 0.282131, - 0.137311, 0.472068, 0.10515, 0.293332, - 0.147736, 0.483565, 0.117402, 0.304667, - 0.158357, 0.493702, 0.130824, 0.317785, - 0.169274, 0.504708, 0.145724, 0.333245, - 0.180595, 0.517107, 0.16215, 0.349843, - 0.191892, 0.528849, 0.180149, 0.367944, - 0.203168, 0.540301, 0.199746, 0.387579, - 0.214443, 0.551514, 0.221047, 0.408247, - 0.225624, 0.560906, 0.243981, 0.43014, - 0.236422, 0.56959, 0.268513, 0.452669, - 0.24654, 0.576098, 0.294409, 0.476196, - 0.256157, 0.580925, 0.322002, 0.501157, - 0.265289, 0.584839, 0.351052, 0.527632, - 0.273671, 0.587614, 0.3812, 0.555754, - 0.281254, 0.589119, 0.412994, 0.581682, - 0.287448, 0.585204, 0.445498, 0.608196, - 0.292614, 0.579006, 0.479505, 0.635661, - 0.296068, 0.571297, 0.514643, 0.664999, - 0.297395, 0.560855, 0.552213, 0.691039, - 0.296645, 0.544525, 0.591365, 0.7179, - 0.293785, 0.526535, 0.630883, 0.744059, - 0.289089, 0.50545, 0.670932, 0.76863, - 0.282239, 0.482514, 0.710904, 0.793273, - 0.273688, 0.457246, 0.750259, 0.814731, - 0.26328, 0.428872, 0.78948, 0.835603, - 0.251526, 0.399384, 0.828597, 0.85489, - 0.238339, 0.368811, 0.866892, 0.872828, - 0.223607, 0.336617, 0.90563, 0.889462, - 0.207538, 0.303997, 0.943538, 0.904929, - 0.190297, 0.270812, 0.980591, 0.919101, - 0.172034, 0.237453, 1.01935, 0.930536, - 0.152058, 0.204431, 1.05498, 0.941223, - 0.129515, 0.172495, 1.08717, 0.94982, - 0.104263, 0.140175, 1.11551, 0.960592, - 0.0781944, 0.106465, 1.14098, 0.974629, - 0.051688, 0.0711592, 1.16418, 0.98811, - 0.0253929, 0.0354432, 1.18465, 1.00004, 0.000804378, - 0.000330876, 1.20462, 0.214668, - 8.21282e-06, 0.406619, 4.33582e-06, 0.218053, - 0.000208144, 0.413025, 0.000109887, 0.217987, - 0.000832212, 0.412901, 0.000439362, 0.217971, - 0.00187246, 0.412876, 0.000988623, 0.217968, - 0.00332855, 0.41286, 0.00175772, 0.217985, - 0.00520055, 0.412882, 0.00274729, 0.218014, - 0.00748814, 0.412916, 0.00395842, 0.218054, - 0.0101901, 0.412957, 0.00539274, 0.218106, - 0.0133057, 0.413005, 0.00705348, 0.218217, - 0.0168342, 0.413139, 0.00894581, 0.218338, - 0.0207707, 0.413258, 0.0110754, 0.21855, - 0.0251001, 0.413509, 0.0134551, 0.218913, - 0.0297861, 0.413992, 0.0161081, 0.219265, - 0.0348956, 0.414383, 0.0190307, 0.219696, - 0.0403909, 0.414839, 0.0222458, 0.220329, - 0.0462003, 0.415567, 0.025792, 0.220989, - 0.0524208, 0.41621, 0.0296637, 0.222027, - 0.058948, 0.417385, 0.0339323, 0.223301, - 0.0658208, 0.418779, 0.0386055, 0.224988, - 0.0730347, 0.420665, 0.0437355, 0.227211, - 0.0805274, 0.423198, 0.0493844, 0.230131, - 0.088395, 0.426566, 0.0556135, 0.233908, - 0.0966208, 0.43091, 0.0624829, 0.239092, - 0.105223, 0.437148, 0.0701636, 0.245315, - 0.11424, 0.444302, 0.0786949, 0.253166, - 0.12368, 0.453262, 0.0882382, 0.262374, - 0.133569, 0.463211, 0.0988682, 0.273145, - 0.143836, 0.474271, 0.110727, 0.285512, - 0.154577, 0.4863, 0.123945, 0.299512, - 0.165501, 0.498817, 0.138581, 0.314287, - 0.176698, 0.510341, 0.154676, 0.331083, - 0.188066, 0.522583, 0.172459, 0.349615, - 0.199597, 0.534879, 0.191979, 0.369318, - 0.210843, 0.546083, 0.21309, 0.390377, - 0.222068, 0.5562, 0.235998, 0.412411, - 0.233059, 0.564704, 0.260518, 0.435715, - 0.24357, 0.572314, 0.286795, 0.461196, - 0.253356, 0.579395, 0.314559, 0.485587, - 0.262362, 0.581985, 0.343581, 0.511908, - 0.270895, 0.584347, 0.374367, 0.539798, - 0.278452, 0.58505, 0.406015, 0.567974, - 0.284877, 0.583344, 0.439168, 0.594303, - 0.290124, 0.577348, 0.473005, 0.622951, - 0.294183, 0.570751, 0.508534, 0.652404, - 0.296389, 0.561541, 0.544764, 0.679291, - 0.296605, 0.546426, 0.582927, 0.706437, - 0.294095, 0.528599, 0.622681, 0.734485, - 0.28978, 0.508676, 0.663567, 0.758841, - 0.283363, 0.484768, 0.704092, 0.78537, - 0.275015, 0.460434, 0.745101, 0.807315, - 0.264689, 0.432166, 0.784712, 0.8271, - 0.252597, 0.401807, 0.824241, 0.849191, - 0.239154, 0.371458, 0.863803, 0.867046, - 0.224451, 0.338873, 0.903063, 0.8852, - 0.208342, 0.306175, 0.942763, 0.901771, - 0.190684, 0.272759, 0.981559, 0.915958, - 0.172105, 0.239306, 1.02048, 0.928046, - 0.152214, 0.206071, 1.05765, 0.939961, - 0.130247, 0.17367, 1.08999, 0.948711, - 0.10672, 0.142201, 1.11829, 0.959305, - 0.0808688, 0.108454, 1.14467, 0.973009, - 0.0539145, 0.0728109, 1.16839, 0.987631, - 0.0262947, 0.0360625, 1.19004, 0.999978, 0.00132758, - 0.000559424, 1.21058, 0.193925, - 7.93421e-06, 0.391974, 3.92537e-06, 0.196746, - 0.000200315, 0.397675, 9.91033e-05, 0.19667, - 0.000801099, 0.397521, 0.000396342, 0.196633, - 0.00180246, 0.397445, 0.000891829, 0.196654, - 0.00320443, 0.397482, 0.00158582, 0.196659, - 0.00500647, 0.39748, 0.00247867, 0.196683, - 0.0072086, 0.397506, 0.00357167, 0.196728, - 0.00981001, 0.397562, 0.00486675, 0.196792, - 0.0128096, 0.397633, 0.00636707, 0.19689, - 0.0162055, 0.397746, 0.00807752, 0.197017, - 0.0199943, 0.397884, 0.0100052, 0.19729, - 0.024139, 0.39827, 0.0121691, 0.197583, - 0.0286671, 0.398639, 0.0145755, 0.197927, - 0.0335858, 0.399034, 0.0172355, 0.198383, - 0.0388806, 0.399554, 0.0201718, 0.199002, - 0.0444736, 0.400289, 0.0234194, 0.199739, - 0.0504583, 0.401111, 0.026984, 0.200784, - 0.056729, 0.402349, 0.0309217, 0.202075, - 0.0633643, 0.403841, 0.0352496, 0.203898, - 0.0703247, 0.406076, 0.0400313, 0.206199, - 0.0775565, 0.408841, 0.0453282, 0.209252, - 0.085184, 0.41259, 0.0511794, 0.213638, - 0.0931994, 0.418288, 0.0577459, 0.21881, - 0.101617, 0.424681, 0.0650508, 0.225642, - 0.11052, 0.433429, 0.0732759, 0.233717, - 0.119772, 0.442897, 0.0824683, 0.242823, - 0.129505, 0.452888, 0.0927484, 0.254772, - 0.139906, 0.466407, 0.104417, 0.266603, - 0.150402, 0.477413, 0.117211, 0.28073, - 0.161395, 0.490519, 0.131598, 0.295399, - 0.172465, 0.50201, 0.147407, 0.312705, - 0.183982, 0.515311, 0.165031, 0.331335, - 0.195532, 0.52786, 0.184336, 0.351037, - 0.206971, 0.5392, 0.205361, 0.372175, - 0.218117, 0.54941, 0.228043, 0.394548, - 0.229327, 0.558642, 0.25267, 0.419598, - 0.240052, 0.567861, 0.279071, 0.443922, - 0.249937, 0.573332, 0.306882, 0.471495, - 0.259407, 0.58013, 0.33661, 0.496769, - 0.267749, 0.580564, 0.367328, 0.524951, - 0.275524, 0.581696, 0.399753, 0.55318, - 0.282148, 0.579885, 0.433134, 0.581577, - 0.287533, 0.575471, 0.467534, 0.609231, - 0.291612, 0.567445, 0.502943, 0.637478, - 0.293911, 0.557657, 0.53871, 0.667795, - 0.295096, 0.546535, 0.576568, 0.694272, - 0.294073, 0.529561, 0.614929, 0.722937, - 0.290386, 0.510561, 0.655909, 0.749682, - 0.284481, 0.487846, 0.697663, 0.774754, - 0.276188, 0.462487, 0.738515, 0.799301, - 0.266215, 0.43481, 0.779802, 0.820762, - 0.254116, 0.404879, 0.820045, 0.843231, - 0.240393, 0.374559, 0.860294, 0.861857, - 0.225503, 0.341582, 0.900965, 0.880815, - 0.209382, 0.308778, 0.941727, 0.89766, - 0.19155, 0.275232, 0.980916, 0.912926, - 0.172346, 0.240938, 1.02162, 0.926391, - 0.151799, 0.207223, 1.0597, 0.938429, - 0.129968, 0.17484, 1.09291, 0.947834, - 0.10651, 0.142984, 1.12248, 0.958432, - 0.0824098, 0.109902, 1.149, 0.972402, - 0.0565242, 0.0744454, 1.1733, 0.987191, - 0.028427, 0.0373794, 1.19538, 0.999975, 3.85685e-05, - 4.203e-05, 1.21676, 0.178114, - 7.66075e-06, 0.385418, 3.54027e-06, 0.176074, - 0.000191966, 0.381002, 8.87135e-05, 0.17601, - 0.000767549, 0.380861, 0.000354715, 0.17598, - 0.00172696, 0.380798, 0.000798168, 0.175994, - 0.00307012, 0.380824, 0.00141928, 0.176017, - 0.00479684, 0.380858, 0.00221859, 0.176019, - 0.00690648, 0.380839, 0.00319714, 0.176072, - 0.00939888, 0.380913, 0.0043572, 0.176131, - 0.0122726, 0.380979, 0.005702, 0.176239, - 0.0155264, 0.38112, 0.00723689, 0.176371, - 0.0191551, 0.381272, 0.00896907, 0.176638, - 0.023117, 0.381669, 0.0109194, 0.176912, - 0.0274633, 0.382015, 0.0130903, 0.177279, - 0.032173, 0.382476, 0.0154949, 0.17774, - 0.0372219, 0.383041, 0.0181669, 0.178344, - 0.0426132, 0.38378, 0.0211209, 0.179153, - 0.0483309, 0.384773, 0.0243899, 0.180197, - 0.0543447, 0.386076, 0.0280062, 0.181581, - 0.0607122, 0.387809, 0.032004, 0.18344, - 0.0673855, 0.390205, 0.036453, 0.186139, - 0.0743989, 0.393944, 0.0414162, 0.189432, - 0.0817731, 0.39832, 0.0469394, 0.193795, - 0.0895464, 0.404188, 0.0531442, 0.199641, - 0.0978264, 0.4121, 0.0601374, 0.206679, - 0.106499, 0.421425, 0.0680078, 0.214865, - 0.115654, 0.431504, 0.076919, 0.224406, - 0.125268, 0.442526, 0.0868835, 0.235876, - 0.135475, 0.455465, 0.0981875, 0.248335, - 0.146023, 0.4681, 0.110759, 0.262868, - 0.157016, 0.482069, 0.124885, 0.278962, - 0.168245, 0.496182, 0.140645, 0.295082, - 0.17958, 0.507401, 0.157838, 0.313738, - 0.191227, 0.520252, 0.17695, 0.333573, - 0.202718, 0.531708, 0.197817, 0.356433, - 0.214424, 0.544509, 0.220785, 0.378853, - 0.225492, 0.55373, 0.245306, 0.402717, - 0.236236, 0.561348, 0.271593, 0.428375, - 0.246568, 0.568538, 0.299776, 0.454724, - 0.255941, 0.573462, 0.329433, 0.482291, - 0.264511, 0.576356, 0.360598, 0.509706, - 0.272129, 0.576446, 0.393204, 0.538805, - 0.278979, 0.575298, 0.427227, 0.568919, - 0.284528, 0.572154, 0.462157, 0.596804, - 0.288801, 0.564691, 0.497997, 0.625987, - 0.291334, 0.555134, 0.534467, 0.656414, - 0.292722, 0.545051, 0.571736, 0.683916, - 0.292185, 0.528813, 0.610158, 0.711809, - 0.290043, 0.51106, 0.649061, 0.739547, - 0.285246, 0.490103, 0.690081, 0.766914, - 0.277647, 0.465523, 0.732554, 0.791375, - 0.267603, 0.437718, 0.773982, 0.814772, - 0.256109, 0.40882, 0.81609, 0.836691, - 0.242281, 0.377823, 0.856849, 0.856984, - 0.227155, 0.34496, 0.898363, 0.876332, - 0.210395, 0.311335, 0.939471, 0.894988, - 0.192612, 0.277703, 0.980799, 0.911113, - 0.173236, 0.243019, 1.02215, 0.924092, - 0.152258, 0.209037, 1.06139, 0.936828, - 0.129575, 0.175909, 1.09635, 0.946869, - 0.10594, 0.143852, 1.12707, 0.958284, - 0.081318, 0.110289, 1.15419, 0.972325, - 0.0556133, 0.0747232, 1.17909, 0.986878, - 0.0297899, 0.0383149, 1.20163, 0.999936, - 0.00197169, 0.000912402, 1.22338, 0.151174, - 7.20365e-06, 0.351531, 3.09789e-06, 0.155594, - 0.00018279, 0.361806, 7.8608e-05, 0.156099, - 0.000731569, 0.362982, 0.000314615, 0.156053, - 0.00164578, 0.362869, 0.000707845, 0.156093, - 0.0029261, 0.362961, 0.00125884, 0.156099, - 0.00457155, 0.362959, 0.00196783, 0.15612, - 0.00658224, 0.362982, 0.00283622, 0.156168, - 0.00895774, 0.363048, 0.00386625, 0.156221, - 0.0116962, 0.363101, 0.00506109, 0.156324, - 0.0147973, 0.363241, 0.00642675, 0.156476, - 0.0182503, 0.363448, 0.00797175, 0.156731, - 0.0220266, 0.36384, 0.00971484, 0.156994, - 0.026176, 0.364179, 0.0116575, 0.157341, - 0.0306701, 0.36462, 0.0138207, 0.157867, - 0.0354591, 0.365364, 0.0162356, 0.15846, - 0.0406141, 0.366111, 0.0189092, 0.159308, - 0.0460519, 0.367248, 0.021885, 0.160426, - 0.0518096, 0.368767, 0.0252004, 0.161877, - 0.0578906, 0.370745, 0.0288825, 0.163995, - 0.0642812, 0.373831, 0.0330139, 0.16655, - 0.0710067, 0.377366, 0.0376283, 0.170237, - 0.0781522, 0.382799, 0.0428493, 0.175096, - 0.0857172, 0.389915, 0.0487324, 0.181069, - 0.0938025, 0.398487, 0.0554214, 0.188487, - 0.102363, 0.408799, 0.0630189, 0.197029, - 0.111343, 0.419991, 0.071634, 0.206684, - 0.120812, 0.431455, 0.0812797, 0.218698, - 0.131033, 0.445746, 0.0923651, 0.230726, - 0.141373, 0.457471, 0.104545, 0.245516, - 0.152387, 0.472388, 0.118449, 0.261551, - 0.163628, 0.486671, 0.133923, 0.277437, - 0.174814, 0.49762, 0.150849, 0.296662, - 0.186713, 0.51162, 0.169924, 0.31795, - 0.198513, 0.525435, 0.190848, 0.339422, - 0.210119, 0.536267, 0.213504, 0.362143, - 0.221354, 0.545982, 0.237947, 0.387198, - 0.23224, 0.555364, 0.264427, 0.412349, - 0.24257, 0.561489, 0.292519, 0.439274, - 0.252284, 0.566903, 0.322561, 0.466779, - 0.261023, 0.569614, 0.353952, 0.496011, - 0.26899, 0.571589, 0.387278, 0.524964, - 0.275498, 0.570325, 0.421356, 0.556518, - 0.281449, 0.568792, 0.457314, 0.584363, - 0.285526, 0.560268, 0.493199, 0.614214, - 0.28844, 0.55205, 0.530276, 0.645684, - 0.289777, 0.541906, 0.56855, 0.673446, - 0.289722, 0.526464, 0.606927, 0.701924, - 0.287792, 0.509872, 0.645945, 0.73037, - 0.284315, 0.490649, 0.685564, 0.757405, - 0.278804, 0.467964, 0.726511, 0.784025, - 0.269543, 0.441468, 0.768601, 0.808255, - 0.258117, 0.41216, 0.811321, 0.830739, - 0.244728, 0.380606, 0.853496, 0.851914, - 0.229428, 0.348111, 0.895374, 0.872586, - 0.212508, 0.314732, 0.937674, 0.891581, - 0.194025, 0.280338, 0.979869, 0.907641, - 0.174711, 0.245203, 1.02253, 0.922233, - 0.153509, 0.21077, 1.06371, 0.935878, - 0.130418, 0.177399, 1.09972, 0.946338, - 0.105558, 0.144507, 1.13124, 0.957265, - 0.080059, 0.110508, 1.15973, 0.971668, - 0.0539766, 0.0742311, 1.18515, 0.9866, - 0.0277101, 0.0375224, 1.20858, 1.00021, - 0.000515531, 0.000135226, 1.23135, 0.137468, - 6.86011e-06, 0.345041, 2.73315e-06, 0.13703, - 0.000173378, 0.343936, 6.90761e-05, 0.136986, - 0.000693048, 0.34383, 0.000276126, 0.136964, - 0.00155931, 0.343761, 0.000621337, 0.137003, - 0.00277211, 0.343863, 0.00110494, 0.137012, - 0.00433103, 0.343868, 0.00172744, 0.137043, - 0.00623606, 0.343916, 0.00249022, 0.13709, - 0.0084868, 0.343986, 0.00339559, 0.137145, - 0.0110814, 0.344045, 0.00444687, 0.137242, - 0.0140187, 0.344177, 0.00565007, 0.137431, - 0.0172713, 0.344491, 0.00701868, 0.137644, - 0.0208605, 0.344805, 0.00856042, 0.13791, - 0.024792, 0.345172, 0.0102863, 0.138295, - 0.0290461, 0.345734, 0.0122185, 0.138764, - 0.0335957, 0.346371, 0.0143771, 0.139415, - 0.038467, 0.347298, 0.0167894, 0.140272, - 0.0436176, 0.348527, 0.0194895, 0.141457, - 0.0491016, 0.350276, 0.0225043, 0.14303, - 0.0548764, 0.352646, 0.0258962, 0.145289, - 0.0610096, 0.356206, 0.0297168, 0.148502, - 0.0674777, 0.361488, 0.0340562, 0.152188, - 0.074345, 0.367103, 0.0389534, 0.157359, - 0.0817442, 0.375247, 0.0445541, 0.16379, - 0.0896334, 0.385064, 0.0509535, 0.171376, - 0.098005, 0.396082, 0.0582611, 0.179901, - 0.106817, 0.407418, 0.06654, 0.189892, - 0.116239, 0.420031, 0.075994, 0.201838, - 0.12627, 0.434321, 0.0867239, 0.214311, - 0.136701, 0.447631, 0.0987517, 0.228902, - 0.147616, 0.462046, 0.112353, 0.245107, - 0.158871, 0.476942, 0.127605, 0.262292, - 0.170261, 0.490285, 0.144469, 0.281215, - 0.182017, 0.503783, 0.163282, 0.301058, - 0.193729, 0.515505, 0.183873, 0.322752, - 0.205512, 0.52682, 0.206466, 0.347547, - 0.217214, 0.539473, 0.231194, 0.370969, - 0.227966, 0.546625, 0.257288, 0.397533, - 0.238555, 0.55472, 0.285789, 0.42398, - 0.248278, 0.559468, 0.315746, 0.452928, - 0.257422, 0.564095, 0.347724, 0.482121, - 0.265306, 0.565426, 0.380922, 0.510438, - 0.272043, 0.563205, 0.415639, 0.541188, - 0.277614, 0.561087, 0.451702, 0.571667, - 0.281927, 0.554922, 0.48845, 0.602432, - 0.285015, 0.546838, 0.526442, 0.634126, - 0.286512, 0.537415, 0.564896, 0.662816, - 0.286388, 0.522906, 0.604037, 0.692411, - 0.284734, 0.507003, 0.643795, 0.720946, - 0.281297, 0.488398, 0.68298, 0.748293, - 0.276262, 0.466353, 0.723466, 0.776931, - 0.269978, 0.443573, 0.764565, 0.801065, - 0.260305, 0.415279, 0.805838, 0.825843, - 0.247426, 0.384773, 0.849985, 0.84807, - 0.232437, 0.352555, 0.893174, 0.869122, - 0.215806, 0.318642, 0.936564, 0.888963, - 0.197307, 0.28381, 0.980253, 0.905547, - 0.177203, 0.247888, 1.02463, 0.918554, - 0.155542, 0.212904, 1.06714, 0.931395, - 0.131948, 0.1787, 1.10451, 0.941749, - 0.106723, 0.145902, 1.13694, 0.954551, - 0.0804939, 0.111193, 1.1666, 0.970279, - 0.0534239, 0.0744697, 1.19249, 0.986117, - 0.0257452, 0.0368788, 1.21665, 0.999938, 0.00190634, - 0.0010291, 1.23981, 0.118493, - 6.47439e-06, 0.32272, 2.3772e-06, 0.118765, - 0.000163023, 0.323456, 5.98573e-05, 0.118772, - 0.00065212, 0.323477, 0.000239447, 0.118843, - 0.00146741, 0.323657, 0.000538881, 0.118804, - 0.00260846, 0.323553, 0.00095826, 0.118826, - 0.00407576, 0.323595, 0.00149845, 0.118846, - 0.00586826, 0.323617, 0.00216047, 0.118886, - 0.00798578, 0.32367, 0.00294679, 0.118947, - 0.0104273, 0.323753, 0.00386124, 0.119055, - 0.0131909, 0.323922, 0.00490999, 0.119241, - 0.0162444, 0.324251, 0.00610804, 0.11944, - 0.0196339, 0.324544, 0.00745805, 0.119739, - 0.0233378, 0.325026, 0.00897805, 0.12011, - 0.0273179, 0.325586, 0.0106895, 0.120571, - 0.0316143, 0.326231, 0.0126073, 0.12124, - 0.0361939, 0.327264, 0.0147654, 0.122162, - 0.0410511, 0.328733, 0.0172001, 0.123378, - 0.0462233, 0.330659, 0.0199375, 0.125183, - 0.0517109, 0.333754, 0.0230498, 0.127832, - 0.0575652, 0.338507, 0.026597, 0.130909, - 0.0637441, 0.343666, 0.0306345, 0.135221, - 0.0704302, 0.351063, 0.035273, 0.14082, - 0.0776364, 0.360604, 0.0406137, 0.146781, - 0.0852293, 0.369638, 0.0466788, 0.155121, - 0.0935351, 0.3827, 0.0537628, 0.16398, - 0.102234, 0.39522, 0.0617985, 0.173926, - 0.111465, 0.40793, 0.07097, 0.185137, - 0.121296, 0.42105, 0.0813426, 0.19826, - 0.13169, 0.435735, 0.0931596, 0.212938, - 0.142614, 0.450932, 0.106547, 0.229046, - 0.153884, 0.465726, 0.121575, 0.246246, - 0.165382, 0.479461, 0.138286, 0.264637, - 0.176806, 0.492106, 0.15666, 0.284959, - 0.188793, 0.504774, 0.17728, 0.308157, - 0.200763, 0.518805, 0.19988, 0.330951, - 0.21239, 0.528231, 0.224293, 0.3549, - 0.223521, 0.536376, 0.250541, 0.381502, - 0.234169, 0.544846, 0.278902, 0.409529, - 0.244077, 0.551717, 0.309227, 0.437523, - 0.253363, 0.55517, 0.341426, 0.467624, - 0.261659, 0.557772, 0.37518, 0.497268, - 0.268498, 0.556442, 0.41007, 0.528294, - 0.274018, 0.553915, 0.446445, 0.559053, - 0.278169, 0.549153, 0.483779, 0.589329, - 0.281229, 0.539878, 0.522249, 0.622503, - 0.282902, 0.53162, 0.561754, 0.652382, - 0.282815, 0.518119, 0.601544, 0.681847, - 0.281247, 0.502187, 0.641574, 0.712285, - 0.277986, 0.484824, 0.682633, 0.740094, - 0.273017, 0.463483, 0.723426, 0.768478, - 0.266692, 0.441299, 0.763747, 0.794556, - 0.258358, 0.415238, 0.805565, 0.819408, - 0.248807, 0.386912, 0.847254, 0.843411, - 0.236214, 0.356165, 0.891091, 0.862397, - 0.219794, 0.320562, 0.936174, 0.883113, - 0.201768, 0.285322, 0.982562, 0.90023, - 0.181672, 0.249713, 1.02862, 0.915192, - 0.159279, 0.214546, 1.07163, 0.928458, - 0.134725, 0.180285, 1.10995, 0.94069, - 0.10913, 0.147119, 1.14354, 0.953409, - 0.0821315, 0.112492, 1.17372, 0.969537, - 0.0542677, 0.0752014, 1.20043, 0.985612, - 0.0259096, 0.0370361, 1.22528, 0.999835, 0.00298198, - 0.00151801, 1.24959, 0.10097, - 6.02574e-06, 0.300277, 2.02619e-06, 0.101577, - 0.000152164, 0.302077, 5.11662e-05, 0.101572, - 0.000608889, 0.302066, 0.000204751, 0.101566, - 0.00136997, 0.302047, 0.000460753, 0.101592, - 0.00243557, 0.302114, 0.000819497, 0.101608, - 0.0038053, 0.30214, 0.00128154, 0.101627, - 0.00547906, 0.30216, 0.0018483, 0.101669, - 0.00745647, 0.302224, 0.00252223, 0.101732, - 0.00973615, 0.302318, 0.00330716, 0.101844, - 0.0123097, 0.302513, 0.00421061, 0.102025, - 0.0151681, 0.30285, 0.00524481, 0.102224, - 0.0183334, 0.303166, 0.0064154, 0.102515, - 0.0217819, 0.303654, 0.00774063, 0.102886, - 0.0255067, 0.304243, 0.0092398, 0.103395, - 0.029514, 0.305089, 0.0109339, 0.104109, - 0.0337912, 0.306301, 0.0128561, 0.105074, - 0.0383565, 0.30798, 0.0150338, 0.10654, - 0.0432132, 0.310726, 0.0175228, 0.108478, - 0.0484244, 0.314351, 0.0203648, 0.111015, - 0.0539339, 0.319032, 0.0236325, 0.114682, - 0.0598885, 0.32605, 0.0274188, 0.11911, - 0.0663375, 0.334109, 0.0317905, 0.124736, - 0.0733011, 0.344013, 0.0368502, 0.131479, - 0.0807744, 0.355358, 0.0427104, 0.139283, - 0.0888204, 0.367614, 0.0494788, 0.148054, - 0.0973394, 0.380072, 0.0572367, 0.159037, - 0.10665, 0.395678, 0.0662704, 0.169794, - 0.116221, 0.40795, 0.0763192, 0.18314, - 0.126632, 0.423546, 0.087956, 0.197515, - 0.137383, 0.438213, 0.101042, 0.213514, - 0.148641, 0.453248, 0.115827, 0.23065, - 0.160117, 0.46688, 0.132283, 0.249148, - 0.171807, 0.479962, 0.150644, 0.270219, - 0.183695, 0.494618, 0.171073, 0.292338, - 0.195574, 0.506937, 0.193378, 0.314999, - 0.207205, 0.516463, 0.217585, 0.340991, - 0.218955, 0.528123, 0.24428, 0.367982, - 0.229917, 0.537025, 0.272784, 0.39432, - 0.239737, 0.541627, 0.302742, 0.423364, - 0.249048, 0.546466, 0.335112, 0.453751, - 0.257329, 0.549466, 0.369032, 0.48416, - 0.264623, 0.549503, 0.404577, 0.515262, - 0.270411, 0.547008, 0.441337, 0.547036, - 0.274581, 0.542249, 0.479162, 0.576614, - 0.277266, 0.533015, 0.517904, 0.611143, - 0.279144, 0.525512, 0.558508, 0.640989, - 0.279001, 0.51154, 0.598995, 0.671182, - 0.277324, 0.495641, 0.639935, 0.700848, - 0.273908, 0.477526, 0.681017, 0.729862, - 0.269063, 0.457955, 0.722764, 0.758273, - 0.262282, 0.434846, 0.764349, 0.784121, - 0.254281, 0.409203, 0.806206, 0.809798, - 0.24505, 0.382694, 0.848617, 0.834953, - 0.233861, 0.354034, 0.892445, 0.856817, - 0.221308, 0.321764, 0.936263, 0.877609, - 0.205996, 0.288118, 0.982401, 0.897489, - 0.186702, 0.253277, 1.02975, 0.913792, - 0.164618, 0.217963, 1.07488, 0.92785, - 0.140023, 0.183221, 1.11487, 0.940378, - 0.11328, 0.149385, 1.14947, 0.95273, - 0.0853958, 0.114152, 1.1807, 0.969059, - 0.0568698, 0.0769845, 1.20912, 0.985574, - 0.0276502, 0.0381186, 1.23498, 0.999943, 0.00239052, - 0.00126861, 1.25987, 0.0852715, - 5.60067e-06, 0.279021, 1.71162e-06, 0.0854143, - 0.000140871, 0.279483, 4.30516e-05, 0.0854191, - 0.000563385, 0.2795, 0.000172184, 0.0854188, - 0.00126753, 0.279493, 0.000387464, 0.0854229, - 0.00225337, 0.279501, 0.00068918, 0.0854443, - 0.00352086, 0.279549, 0.00107803, 0.0854697, - 0.00506962, 0.279591, 0.00155536, 0.0855093, - 0.00689873, 0.279652, 0.00212354, 0.0855724, - 0.00900821, 0.279752, 0.00278703, 0.0856991, - 0.0113799, 0.280011, 0.0035551, 0.085855, - 0.0140314, 0.280297, 0.00443449, 0.0860682, - 0.016963, 0.280682, 0.00543636, 0.086344, - 0.0201438, 0.281159, 0.0065788, 0.0867426, - 0.0235999, 0.281886, 0.00787977, 0.087239, - 0.0273069, 0.282745, 0.0093606, 0.0879815, - 0.031269, 0.284139, 0.011056, 0.0891258, - 0.035531, 0.28647, 0.0130065, 0.0906909, - 0.0400947, 0.289708, 0.0152495, 0.0927624, - 0.0449638, 0.293904, 0.0178454, 0.0958376, - 0.0502427, 0.300471, 0.0208915, 0.0995827, - 0.0559514, 0.30806, 0.0244247, 0.104526, - 0.0622152, 0.317874, 0.0285721, 0.110532, - 0.0690046, 0.329332, 0.0334227, 0.117385, - 0.0763068, 0.341217, 0.0390466, 0.12522, - 0.084184, 0.353968, 0.0455786, 0.134037, - 0.0925248, 0.366797, 0.0530773, 0.144014, - 0.101487, 0.380209, 0.0617424, 0.156013, - 0.111273, 0.395956, 0.071777, 0.168872, - 0.121431, 0.41053, 0.0830905, 0.183089, - 0.132105, 0.425073, 0.0959341, 0.198763, - 0.143286, 0.439833, 0.110448, 0.216159, - 0.154841, 0.454507, 0.126769, 0.234859, - 0.166588, 0.468368, 0.14495, 0.255879, - 0.178626, 0.482846, 0.165233, 0.27677, - 0.190218, 0.493489, 0.187217, 0.301184, - 0.202227, 0.506549, 0.211659, 0.325852, - 0.213764, 0.5158, 0.237922, 0.352824, - 0.22487, 0.525442, 0.26632, 0.380882, - 0.235246, 0.532487, 0.296691, 0.410137, - 0.244847, 0.537703, 0.329179, 0.439787, - 0.253122, 0.540361, 0.363135, 0.472291, - 0.260517, 0.542734, 0.399222, 0.501856, - 0.266519, 0.538826, 0.436352, 0.534816, - 0.270905, 0.535152, 0.474505, 0.565069, - 0.273826, 0.525979, 0.513988, 0.597154, - 0.275333, 0.516394, 0.554852, 0.630473, - 0.275314, 0.506206, 0.596592, 0.660574, - 0.273323, 0.489769, 0.638117, 0.692015, - 0.270008, 0.472578, 0.680457, 0.720647, - 0.265001, 0.452134, 0.723008, 0.750528, - 0.258311, 0.430344, 0.765954, 0.777568, - 0.250046, 0.405624, 0.809012, 0.80387, - 0.240114, 0.378339, 0.852425, 0.828439, - 0.228737, 0.349877, 0.895346, 0.851472, - 0.216632, 0.318968, 0.940695, 0.873906, - 0.202782, 0.287489, 0.987235, 0.89467, - 0.187059, 0.254394, 1.03348, 0.912281, - 0.168818, 0.221294, 1.07812, 0.927358, - 0.146494, 0.18675, 1.11928, 0.940385, - 0.120009, 0.152322, 1.15609, 0.952672, - 0.0917183, 0.117514, 1.18875, 0.968496, - 0.0620321, 0.0797405, 1.21821, 0.985236, - 0.0314945, 0.0402383, 1.24523, 0.99998, - 0.000575153, 0.000110644, 1.27133, 0.0702429, - 5.12222e-06, 0.255273, 1.40947e-06, 0.0702981, - 0.000128826, 0.255469, 3.54488e-05, 0.0703691, - 0.000515562, 0.255727, 0.000141874, 0.0703805, - 0.00116, 0.255754, 0.00031929, 0.0703961, - 0.00206224, 0.255813, 0.000567999, 0.0704102, - 0.00322223, 0.255839, 0.00088871, 0.0704298, - 0.00463928, 0.255863, 0.00128272, 0.0704759, - 0.00631375, 0.255953, 0.00175283, 0.0705434, - 0.00824317, 0.256079, 0.00230342, 0.0706693, - 0.010412, 0.25636, 0.0029443, 0.0708189, - 0.0128439, 0.256647, 0.00368031, 0.0710364, - 0.0155177, 0.257084, 0.00452614, 0.0713223, - 0.0184374, 0.257637, 0.00549706, 0.0717182, - 0.0216002, 0.258416, 0.00661246, 0.072321, - 0.0249966, 0.259699, 0.00790147, 0.0731446, - 0.0286566, 0.261475, 0.0093884, 0.0743352, - 0.0325888, 0.264132, 0.0111186, 0.0760676, - 0.036843, 0.26815, 0.013145, 0.078454, - 0.0414292, 0.273636, 0.0155251, 0.0818618, - 0.0464634, 0.281653, 0.0183525, 0.0857382, - 0.0519478, 0.289992, 0.0216642, 0.0908131, - 0.0579836, 0.30066, 0.0255956, 0.0967512, - 0.0645124, 0.312204, 0.0301954, 0.103717, - 0.0716505, 0.325001, 0.0356017, 0.111596, - 0.0793232, 0.338129, 0.041896, 0.120933, - 0.087645, 0.352853, 0.0492447, 0.130787, - 0.096492, 0.366192, 0.0576749, 0.142311, - 0.105973, 0.380864, 0.0673969, 0.155344, - 0.116182, 0.396575, 0.0785899, 0.169535, - 0.126815, 0.411443, 0.0912377, 0.185173, - 0.138015, 0.426256, 0.105607, 0.201755, - 0.149325, 0.439607, 0.121551, 0.221334, - 0.161207, 0.455467, 0.139608, 0.241461, - 0.173162, 0.469096, 0.159591, 0.26294, - 0.18504, 0.481014, 0.18156, 0.286776, - 0.196881, 0.493291, 0.205781, 0.311596, - 0.208311, 0.503556, 0.231819, 0.338667, - 0.219671, 0.513268, 0.260274, 0.366021, - 0.230451, 0.519414, 0.290862, 0.395875, - 0.240131, 0.526766, 0.323196, 0.425564, - 0.248566, 0.52905, 0.357071, 0.457094, - 0.256195, 0.530796, 0.393262, 0.488286, - 0.262331, 0.528703, 0.430797, 0.522291, - 0.267141, 0.52727, 0.470231, 0.554172, - 0.270411, 0.519848, 0.510477, 0.586427, - 0.271986, 0.510307, 0.551594, 0.619638, - 0.27192, 0.499158, 0.593849, 0.650656, - 0.269817, 0.483852, 0.636314, 0.68284, - 0.266267, 0.467515, 0.679679, 0.714356, - 0.26113, 0.44931, 0.723884, 0.742717, - 0.254067, 0.425789, 0.767245, 0.770894, - 0.245652, 0.401144, 0.811819, 0.797358, - 0.235554, 0.374224, 0.856315, 0.823377, - 0.223896, 0.346167, 0.901077, 0.847456, - 0.210865, 0.316056, 0.946502, 0.870697, - 0.196574, 0.284503, 0.993711, 0.891068, - 0.180814, 0.251628, 1.04134, 0.909267, - 0.163314, 0.219065, 1.08609, 0.925653, - 0.143304, 0.186446, 1.12702, 0.940017, - 0.121322, 0.153416, 1.16371, 0.952398, - 0.0973872, 0.120334, 1.19712, 0.967568, - 0.0698785, 0.08352, 1.22791, 0.984772, - 0.0390031, 0.0439209, 1.25672, 1.00026, - 0.0070087, 0.00315668, 1.28428, 0.0556653, - 4.59654e-06, 0.227325, 1.12556e-06, 0.0565238, - 0.000116382, 0.230826, 2.84985e-05, 0.0565717, - 0.000465666, 0.231026, 0.000114036, 0.0565859, - 0.00104773, 0.231079, 0.000256656, 0.0565761, - 0.00186255, 0.231025, 0.00045663, 0.0565913, - 0.00291002, 0.231058, 0.000714664, 0.0566108, - 0.00418998, 0.231085, 0.00103224, 0.0566532, - 0.00570206, 0.231169, 0.00141202, 0.0567473, - 0.00743666, 0.231417, 0.00186018, 0.0568567, - 0.00940298, 0.231661, 0.00238264, 0.0569859, - 0.0115991, 0.231895, 0.00298699, 0.0572221, - 0.0140096, 0.232456, 0.00368957, 0.057519, - 0.0166508, 0.233096, 0.00450303, 0.0579534, - 0.01951, 0.234094, 0.00544945, 0.0585922, - 0.0225991, 0.235629, 0.00655564, 0.0595647, - 0.0259416, 0.238106, 0.00785724, 0.0609109, - 0.0295661, 0.241557, 0.00939127, 0.0628751, - 0.0335126, 0.246652, 0.0112198, 0.0656908, - 0.0378604, 0.254091, 0.0134168, 0.0691347, - 0.0426543, 0.262666, 0.0160374, 0.0732165, - 0.0478967, 0.272029, 0.0191514, 0.0782863, - 0.0536716, 0.283007, 0.0228597, 0.0843973, - 0.0600683, 0.295732, 0.0272829, 0.0913598, - 0.0670095, 0.308779, 0.032484, 0.0994407, - 0.0745516, 0.322886, 0.0385886, 0.108189, - 0.082712, 0.336408, 0.0457133, 0.118574, - 0.0914927, 0.351692, 0.0539832, 0.129989, - 0.100854, 0.366502, 0.0635162, 0.142722, - 0.110837, 0.381675, 0.0744386, 0.156654, - 0.121353, 0.3963, 0.0868483, 0.172151, - 0.132414, 0.411477, 0.100963, 0.188712, - 0.143809, 0.42508, 0.116795, 0.208093, - 0.155765, 0.441328, 0.134715, 0.227936, - 0.167608, 0.454328, 0.154396, 0.249495, - 0.179579, 0.467235, 0.176179, 0.27362, - 0.191488, 0.480248, 0.200193, 0.296371, - 0.202618, 0.487886, 0.225775, 0.324234, - 0.214133, 0.499632, 0.25441, 0.353049, - 0.225212, 0.509532, 0.285077, 0.381785, - 0.234875, 0.514265, 0.317047, 0.414038, - 0.244205, 0.521282, 0.351874, 0.445251, - 0.252145, 0.522931, 0.388279, 0.476819, - 0.258433, 0.520947, 0.425825, 0.509209, - 0.263411, 0.517669, 0.465104, 0.542759, - 0.266732, 0.512841, 0.505741, 0.574822, - 0.268263, 0.503317, 0.547611, 0.609324, - 0.268489, 0.493035, 0.590953, 0.641772, - 0.266941, 0.478816, 0.63488, 0.674049, - 0.263297, 0.462863, 0.679072, 0.705071, - 0.257618, 0.442931, 0.723487, 0.734709, - 0.250625, 0.421299, 0.768708, 0.763704, - 0.24179, 0.397085, 0.814375, 0.791818, - 0.231115, 0.370577, 0.859907, 0.817439, - 0.21922, 0.34232, 0.906715, 0.843202, - 0.205658, 0.312627, 0.953943, 0.866639, - 0.190563, 0.280933, 1.00185, 0.888129, - 0.173978, 0.248393, 1.05105, 0.907239, - 0.155485, 0.216007, 1.09704, 0.923893, - 0.134782, 0.183233, 1.13857, 0.938882, - 0.11249, 0.150376, 1.17539, 0.952464, - 0.0890706, 0.117177, 1.20924, 0.968529, - 0.0646523, 0.0813095, 1.24055, 0.984763, - 0.038606, 0.0439378, 1.27018, 1.00053, - 0.01238, 0.00598668, 1.29873, 0.0437928, - 4.09594e-06, 0.204012, 8.79224e-07, 0.0440166, - 0.000103395, 0.205049, 2.21946e-05, 0.0440529, - 0.000413633, 0.205225, 8.87981e-05, 0.0440493, - 0.000930594, 0.2052, 0.000199858, 0.0439884, - 0.00165352, 0.204901, 0.000355495, 0.0440716, - 0.0025849, 0.205255, 0.000556983, 0.0440968, - 0.00372222, 0.205311, 0.000805326, 0.0441359, - 0.00506478, 0.205391, 0.00110333, 0.0442231, - 0.00660384, 0.205638, 0.00145768, 0.0443254, - 0.00835246, 0.205877, 0.00187275, 0.0444832, - 0.0102992, 0.20627, 0.00235938, 0.0447001, - 0.0124449, 0.206796, 0.0029299, 0.0450168, - 0.0147935, 0.207593, 0.0036005, 0.0454816, - 0.017336, 0.208819, 0.00439246, 0.0462446, - 0.0201156, 0.211036, 0.00533864, 0.0473694, - 0.0231568, 0.214388, 0.00646984, 0.0490191, - 0.0264941, 0.219357, 0.00783856, 0.0512776, - 0.030184, 0.226061, 0.00950182, 0.0541279, - 0.0342661, 0.234094, 0.0115156, 0.0578989, - 0.0388539, 0.244297, 0.0139687, 0.0620835, - 0.0438735, 0.254457, 0.0169015, 0.0673497, - 0.04951, 0.266706, 0.0204554, 0.0731759, - 0.0556263, 0.278753, 0.0246606, 0.0803937, - 0.0624585, 0.29309, 0.0297126, 0.0879287, - 0.0697556, 0.305856, 0.0355868, 0.0970669, - 0.0778795, 0.321059, 0.0425768, 0.106508, - 0.0863541, 0.333873, 0.05056, 0.11776, - 0.0955935, 0.349008, 0.0598972, 0.130081, - 0.105438, 0.363776, 0.0706314, 0.144454, - 0.115899, 0.380112, 0.0828822, 0.1596, - 0.126827, 0.394843, 0.0967611, 0.176097, - 0.138161, 0.409033, 0.112381, 0.194726, - 0.149904, 0.424257, 0.129952, 0.213944, - 0.161675, 0.436945, 0.149333, 0.235516, - 0.173659, 0.450176, 0.170892, 0.260564, - 0.185963, 0.466305, 0.194984, 0.285183, - 0.197582, 0.477328, 0.220805, 0.311095, - 0.208697, 0.486566, 0.248694, 0.338924, - 0.219519, 0.494811, 0.279015, 0.369757, - 0.229766, 0.504065, 0.311725, 0.3996, - 0.238879, 0.507909, 0.345844, 0.430484, - 0.246802, 0.509805, 0.381749, 0.46413, - 0.253924, 0.511436, 0.420251, 0.497077, - 0.259319, 0.508787, 0.459957, 0.530434, - 0.263297, 0.50394, 0.501356, 0.565725, - 0.265619, 0.49804, 0.544252, 0.599254, - 0.265842, 0.487346, 0.587856, 0.631251, - 0.263978, 0.472975, 0.631969, 0.663972, - 0.26043, 0.457135, 0.677471, 0.697724, - 0.255358, 0.439844, 0.723744, 0.727725, - 0.248308, 0.417872, 0.770653, 0.756417, - 0.239181, 0.39273, 0.817357, 0.785419, - 0.22814, 0.367839, 0.864221, 0.81266, - 0.215681, 0.339449, 0.912701, 0.839391, - 0.201623, 0.309279, 0.962419, 0.86366, - 0.185624, 0.278029, 1.0122, 0.885028, - 0.16797, 0.245294, 1.06186, 0.904639, - 0.148336, 0.212689, 1.10934, 0.922048, - 0.12637, 0.179616, 1.15063, 0.936952, - 0.102928, 0.146749, 1.18885, 0.951895, - 0.0785268, 0.112733, 1.22352, 0.967198, - 0.0530153, 0.0760056, 1.25681, 0.984405, - 0.02649, 0.0383183, 1.28762, 1.00021, 0.00070019, - 0.00020039, 1.31656, 0.0325964, - 3.55447e-06, 0.176706, 6.55682e-07, 0.0329333, - 8.99174e-05, 0.178527, 1.65869e-05, 0.0329181, - 0.000359637, 0.178453, 6.63498e-05, 0.0329085, - 0.000808991, 0.178383, 0.000149332, 0.0329181, - 0.00143826, 0.178394, 0.000265873, 0.0329425, - 0.00224678, 0.178517, 0.000416597, 0.0329511, - 0.00323575, 0.17849, 0.000603299, 0.033011, - 0.00439875, 0.178695, 0.000829422, 0.0330733, - 0.00574059, 0.178843, 0.00109908, 0.0331857, - 0.00725896, 0.179176, 0.00141933, 0.0333445, - 0.00895289, 0.179618, 0.0017999, 0.0335674, - 0.0108219, 0.180238, 0.00225316, 0.033939, - 0.0128687, 0.181417, 0.00279765, 0.0345239, - 0.015114, 0.183395, 0.0034564, 0.0354458, - 0.017596, 0.186616, 0.00425864, 0.0368313, - 0.0203524, 0.191547, 0.00524936, 0.0386115, - 0.0234105, 0.197508, 0.00647033, 0.0410303, - 0.0268509, 0.205395, 0.00798121, 0.0442245, - 0.0307481, 0.215365, 0.0098557, 0.0478659, - 0.0350863, 0.225595, 0.0121417, 0.0522416, - 0.0399506, 0.236946, 0.0149385, 0.0574513, - 0.045357, 0.249442, 0.0183189, 0.0631208, - 0.0512863, 0.261222, 0.0223644, 0.0701124, - 0.0579273, 0.275418, 0.0272418, 0.0777331, - 0.0650652, 0.288989, 0.0329458, 0.0862709, - 0.0728813, 0.302546, 0.0396819, 0.096103, - 0.081363, 0.317164, 0.04757, 0.106976, - 0.0904463, 0.331733, 0.0567012, 0.119175, - 0.100105, 0.34661, 0.067202, 0.132919, - 0.110375, 0.362249, 0.0792588, 0.147727, - 0.121115, 0.376978, 0.0928672, 0.163618, - 0.132299, 0.390681, 0.108228, 0.182234, - 0.143887, 0.406571, 0.125502, 0.201809, - 0.155827, 0.42042, 0.144836, 0.225041, - 0.168357, 0.438411, 0.166706, 0.247621, - 0.18004, 0.450368, 0.189909, 0.27097, - 0.191536, 0.460083, 0.215251, 0.296658, - 0.203024, 0.469765, 0.243164, 0.325892, - 0.214056, 0.481837, 0.273388, 0.35406, - 0.224104, 0.487474, 0.305344, 0.384372, - 0.233489, 0.492773, 0.339741, 0.41749, - 0.241874, 0.498451, 0.376287, 0.45013, - 0.248834, 0.499632, 0.414195, 0.481285, - 0.254658, 0.495233, 0.454077, 0.519183, - 0.259367, 0.496401, 0.496352, 0.551544, - 0.261818, 0.487686, 0.538798, 0.587349, - 0.262964, 0.479453, 0.583626, 0.621679, - 0.262128, 0.467709, 0.629451, 0.654991, - 0.258998, 0.452123, 0.67566, 0.686873, - 0.254119, 0.433495, 0.723248, 0.719801, - 0.246946, 0.413657, 0.771156, 0.750355, - 0.237709, 0.390366, 0.81989, 0.780033, - 0.226549, 0.364947, 0.868601, 0.809254, - 0.214186, 0.337256, 0.920034, 0.836576, - 0.199639, 0.307395, 0.971706, 0.861774, - 0.183169, 0.275431, 1.02479, 0.885707, - 0.165111, 0.243431, 1.07837, 0.904742, - 0.144363, 0.210921, 1.12783, 0.915604, - 0.121305, 0.17647, 1.17254, 0.930959, - 0.0962119, 0.143106, 1.21012, 0.948404, - 0.069969, 0.108112, 1.24474, 0.967012, - 0.0427586, 0.0708478, 1.27718, 0.984183, - 0.0147043, 0.032335, 1.3083, 0.999577, 0.0142165, - 0.00726867, 1.3382, 0.0229227, - 2.99799e-06, 0.148623, 4.62391e-07, 0.0232194, - 7.58796e-05, 0.15054, 1.17033e-05, 0.0232315, - 0.000303636, 0.15063, 4.68397e-05, 0.0232354, - 0.000683189, 0.150624, 0.000105472, 0.0232092, - 0.0012136, 0.150445, 0.000187744, 0.0232523, - 0.00189765, 0.150679, 0.000294847, 0.0232828, - 0.00273247, 0.150789, 0.000428013, 0.0233371, - 0.00371287, 0.150995, 0.000591134, 0.0234015, - 0.00484794, 0.15118, 0.000787642, 0.023514, - 0.00612877, 0.151562, 0.00102547, 0.023679, - 0.00756125, 0.152116, 0.00131351, 0.0239559, - 0.00914651, 0.153162, 0.00166594, 0.0244334, - 0.010904, 0.155133, 0.00210182, 0.025139, - 0.0128615, 0.158035, 0.00264406, 0.0262598, - 0.0150628, 0.162751, 0.00332923, 0.0277875, - 0.0175532, 0.168944, 0.00419773, 0.0298472, - 0.0203981, 0.176835, 0.00530034, 0.0325444, - 0.023655, 0.186686, 0.00669777, 0.0355581, - 0.0272982, 0.196248, 0.00842661, 0.0392841, - 0.0314457, 0.207352, 0.0105854, 0.0436815, - 0.0361157, 0.219279, 0.0132458, 0.0485272, - 0.0412932, 0.230728, 0.0164736, 0.0541574, - 0.0470337, 0.242994, 0.0203715, 0.0609479, - 0.0535002, 0.257042, 0.0250953, 0.0685228, - 0.0605409, 0.27102, 0.0306856, 0.0768042, - 0.0680553, 0.28406, 0.037193, 0.0864844, - 0.0765011, 0.299186, 0.0449795, 0.0969415, - 0.0852674, 0.3132, 0.0538316, 0.108478, - 0.0947333, 0.327138, 0.0641149, 0.121705, - 0.10481, 0.342345, 0.0759185, 0.136743, - 0.115474, 0.358472, 0.0894116, 0.152986, - 0.126536, 0.374067, 0.104562, 0.170397, - 0.138061, 0.388267, 0.121632, 0.191392, - 0.150203, 0.406467, 0.140996, 0.211566, - 0.161751, 0.418641, 0.161696, 0.233567, - 0.173407, 0.430418, 0.184557, 0.257769, - 0.185397, 0.44277, 0.210092, 0.28531, - 0.197048, 0.457191, 0.237827, 0.311726, - 0.20784, 0.464712, 0.267253, 0.340537, - 0.218345, 0.472539, 0.299332, 0.372921, - 0.228306, 0.482331, 0.333988, 0.402924, - 0.236665, 0.484378, 0.369722, 0.434475, - 0.244097, 0.484717, 0.407836, 0.469736, - 0.250547, 0.487093, 0.448465, 0.505045, - 0.25511, 0.485575, 0.490263, 0.540262, - 0.258444, 0.481225, 0.534495, 0.576347, - 0.259903, 0.473481, 0.579451, 0.608656, - 0.259572, 0.4603, 0.625604, 0.646679, - 0.257908, 0.450341, 0.674511, 0.679902, - 0.253663, 0.431561, 0.723269, 0.714159, - 0.247419, 0.412684, 0.773263, 0.745345, - 0.239122, 0.389388, 0.824182, 0.778248, - 0.228837, 0.365361, 0.876634, 0.807208, - 0.216197, 0.337667, 0.92945, 0.835019, - 0.201772, 0.307197, 0.985261, 0.860261, - 0.185291, 0.274205, 1.04299, 0.877601, - 0.165809, 0.240178, 1.09816, 0.898211, - 0.143897, 0.207571, 1.14694, 0.915789, - 0.119513, 0.174904, 1.19008, 0.931831, - 0.0932919, 0.141423, 1.2297, 0.949244, - 0.0656528, 0.105603, 1.26553, 0.967527, - 0.0370262, 0.0679551, 1.29986, 0.984139, - 0.00730117, 0.0283133, 1.33252, 0.999713, 0.0234648, - 0.0121785, 1.36397, 0.0152135, - 2.45447e-06, 0.122795, 3.04092e-07, 0.0151652, - 6.15778e-05, 0.122399, 7.6292e-06, 0.0151181, - 0.000245948, 0.122023, 3.04802e-05, 0.0151203, - 0.000553394, 0.12203, 6.86634e-05, 0.015125, - 0.000983841, 0.122037, 0.000122463, 0.0151427, - 0.00153774, 0.12214, 0.000192706, 0.0151708, - 0.0022103, 0.122237, 0.000281219, 0.0152115, - 0.00300741, 0.12238, 0.000390804, 0.0152877, - 0.00392494, 0.1227, 0.000526317, 0.015412, - 0.00496597, 0.123244, 0.00069443, 0.0156201, - 0.00613314, 0.124228, 0.00090547, 0.0159658, - 0.00744113, 0.125945, 0.0011732, 0.0165674, - 0.00892546, 0.129098, 0.00151888, 0.017487, - 0.010627, 0.133865, 0.00197007, 0.018839, - 0.0126043, 0.140682, 0.0025637, 0.020554, - 0.0148814, 0.148534, 0.00333637, 0.0226727, - 0.0175123, 0.157381, 0.00433738, 0.0251879, - 0.0205266, 0.166685, 0.00561664, 0.0283635, - 0.0240319, 0.177796, 0.00725563, 0.0318694, - 0.0279432, 0.188251, 0.00928811, 0.0361044, - 0.0324313, 0.200038, 0.011835, 0.0406656, - 0.0373527, 0.210685, 0.0149146, 0.0463846, - 0.0430132, 0.224182, 0.0187254, 0.0525696, - 0.0491013, 0.23634, 0.0232283, 0.0598083, - 0.0559175, 0.250013, 0.0286521, 0.0679437, - 0.0633657, 0.263981, 0.0350634, 0.0771181, - 0.0714602, 0.278072, 0.0425882, 0.0881273, - 0.0803502, 0.29511, 0.0514487, 0.0996628, - 0.0896903, 0.309976, 0.0615766, 0.112702, - 0.099644, 0.325611, 0.0732139, 0.126488, - 0.109829, 0.339321, 0.0862324, 0.142625, - 0.120859, 0.35574, 0.101275, 0.15953, - 0.131956, 0.369845, 0.117892, 0.176991, - 0.143145, 0.38146, 0.136205, 0.199715, - 0.155292, 0.40052, 0.157252, 0.220787, - 0.167066, 0.412055, 0.179966, 0.243697, - 0.178396, 0.423133, 0.204418, 0.272106, - 0.190433, 0.439524, 0.232141, 0.297637, - 0.201265, 0.447041, 0.261109, 0.325273, - 0.211834, 0.454488, 0.292627, 0.357219, - 0.221889, 0.465004, 0.326669, 0.387362, - 0.230729, 0.468527, 0.362426, 0.423131, - 0.23924, 0.475836, 0.401533, 0.45543, - 0.246067, 0.475017, 0.441902, 0.493393, - 0.251557, 0.478017, 0.484239, 0.526253, - 0.255571, 0.4709, 0.528586, 0.560554, - 0.257752, 0.463167, 0.574346, 0.599306, - 0.258076, 0.456452, 0.621655, 0.634541, - 0.256471, 0.443725, 0.670492, 0.668907, - 0.253283, 0.428719, 0.721943, 0.705619, - 0.247562, 0.411348, 0.772477, 0.739034, - 0.240626, 0.388939, 0.8264, 0.771408, - 0.231493, 0.36425, 0.881702, 0.803312, - 0.220125, 0.337321, 0.9385, 0.828457, - 0.206645, 0.305364, 0.997437, 0.854819, - 0.190664, 0.273715, 1.05693, 0.878666, - 0.171429, 0.242218, 1.11251, 0.898404, - 0.149235, 0.209556, 1.16398, 0.917416, - 0.12435, 0.176863, 1.21014, 0.933133, - 0.0972703, 0.142775, 1.25178, 0.95066, - 0.0683607, 0.106735, 1.29028, 0.968589, - 0.0378724, 0.0681609, 1.32703, 0.984776, - 0.00605712, 0.0273966, 1.36158, 0.99994, 0.0263276, - 0.0138124, 1.3943, 0.00867437, - 1.86005e-06, 0.0928979, 1.73682e-07, 0.00864003, - 4.66389e-05, 0.0925237, 4.35505e-06, 0.00864593, - 0.000186594, 0.0925806, 1.74322e-05, 0.00864095, - 0.000419639, 0.0924903, 3.92862e-05, 0.00863851, - 0.000746272, 0.0924589, 7.02598e-05, 0.00868531, - 0.00116456, 0.0929, 0.000111188, 0.00869667, - 0.00167711, 0.0928529, 0.000163867, 0.00874332, - 0.00228051, 0.0930914, 0.00023104, 0.00882709, - 0.00297864, 0.0935679, 0.00031741, 0.00898874, - 0.00377557, 0.0946165, 0.000430186, 0.00929346, - 0.00469247, 0.0967406, 0.000580383, 0.00978271, - 0.00575491, 0.100084, 0.000783529, 0.0105746, - 0.00701514, 0.105447, 0.00106304, 0.0116949, - 0.00851797, 0.112494, 0.00144685, 0.0130419, - 0.0102757, 0.119876, 0.00196439, 0.0148375, - 0.012381, 0.129034, 0.00266433, 0.0168725, - 0.01482, 0.137812, 0.00358364, 0.0193689, - 0.0176563, 0.147696, 0.00478132, 0.0222691, - 0.0209211, 0.157795, 0.00631721, 0.0256891, - 0.0246655, 0.168431, 0.00826346, 0.0294686, - 0.0288597, 0.178587, 0.0106714, 0.0340412, - 0.0336441, 0.190251, 0.0136629, 0.0393918, - 0.039033, 0.202999, 0.0173272, 0.0453947, - 0.0450087, 0.215655, 0.0217448, 0.0521936, - 0.0515461, 0.228686, 0.0269941, 0.0600279, - 0.058817, 0.242838, 0.033272, 0.0692398, - 0.0667228, 0.258145, 0.0406457, 0.0793832, - 0.0752401, 0.273565, 0.0492239, 0.0902297, - 0.0841851, 0.287735, 0.0590105, 0.102014, - 0.0936479, 0.301161, 0.0702021, 0.116054, - 0.103967, 0.317438, 0.0832001, 0.13191, - 0.114622, 0.334166, 0.0977951, 0.148239, - 0.125452, 0.348192, 0.113985, 0.165809, - 0.136453, 0.361094, 0.131928, 0.184616, - 0.147648, 0.373534, 0.151811, 0.207491, - 0.159607, 0.39101, 0.174476, 0.230106, - 0.171119, 0.402504, 0.198798, 0.257036, - 0.182906, 0.418032, 0.225796, 0.281172, - 0.193605, 0.425468, 0.254027, 0.312034, - 0.204771, 0.440379, 0.285713, 0.340402, - 0.214988, 0.445406, 0.319196, 0.370231, - 0.224711, 0.44968, 0.35537, 0.407105, - 0.233516, 0.460747, 0.393838, 0.439037, - 0.240801, 0.460624, 0.433747, 0.47781, - 0.24762, 0.465957, 0.477234, 0.510655, - 0.251823, 0.460054, 0.52044, 0.550584, - 0.255552, 0.459172, 0.567853, 0.585872, - 0.257036, 0.450311, 0.615943, 0.620466, - 0.257535, 0.437763, 0.667693, 0.660496, - 0.255248, 0.426639, 0.718988, 0.695578, - 0.251141, 0.409185, 0.772503, 0.732176, - 0.244718, 0.39015, 0.827023, 0.760782, - 0.236782, 0.362594, 0.885651, 0.79422, - 0.225923, 0.33711, 0.943756, 0.824521, - 0.213855, 0.308272, 1.00874, 0.854964, - 0.197723, 0.278529, 1.06764, 0.878065, - 0.179209, 0.246208, 1.12836, 0.899834, - 0.157569, 0.21329, 1.18318, 0.918815, - 0.133206, 0.181038, 1.23161, 0.934934, - 0.106545, 0.146993, 1.27644, 0.952115, - 0.0780574, 0.111175, 1.31842, 0.96906, - 0.0478279, 0.0728553, 1.35839, 0.985178, - 0.0160014, 0.032579, 1.39697, 1.00039, 0.0173126, - 0.0095256, 1.43312, 0.00384146, - 1.24311e-06, 0.0613583, 7.78271e-08, 0.00390023, - 3.14043e-05, 0.0622919, 1.96626e-06, 0.00389971, - 0.000125622, 0.0622632, 7.87379e-06, 0.00389491, - 0.000282352, 0.0620659, 1.778e-05, 0.00391618, - 0.000502512, 0.0624687, 3.20918e-05, 0.00392662, - 0.000784458, 0.0625113, 5.15573e-05, 0.00396053, - 0.00112907, 0.0628175, 7.78668e-05, 0.00401911, - 0.00153821, 0.0633286, 0.000113811, 0.00414994, - 0.0020208, 0.0646443, 0.00016445, 0.00441223, - 0.00260007, 0.0673886, 0.000237734, 0.00484427, - 0.0033097, 0.0716528, 0.000345929, 0.00549109, - 0.00418966, 0.0774998, 0.000505987, 0.00636293, - 0.00527331, 0.0844758, 0.000739208, 0.00746566, - 0.00660428, 0.0921325, 0.00107347, 0.00876625, - 0.00818826, 0.0997067, 0.00153691, 0.0103125, - 0.0100811, 0.107433, 0.00217153, 0.0123309, - 0.0123643, 0.117088, 0.00303427, 0.0146274, - 0.0150007, 0.126438, 0.00416018, 0.0172295, - 0.0180531, 0.135672, 0.00561513, 0.0204248, - 0.0215962, 0.146244, 0.007478, 0.0241597, - 0.0256234, 0.157481, 0.00981046, 0.0284693, - 0.0302209, 0.169125, 0.0127148, 0.033445, - 0.0353333, 0.181659, 0.0162453, 0.0391251, - 0.0410845, 0.1944, 0.0205417, 0.0454721, - 0.0473451, 0.207082, 0.0256333, 0.0530983, - 0.0542858, 0.221656, 0.0317036, 0.0615356, - 0.0618384, 0.236036, 0.0388319, 0.0703363, - 0.0697631, 0.248398, 0.046974, 0.0810391, - 0.0784757, 0.263611, 0.0565246, 0.0920144, - 0.0873488, 0.275857, 0.0671724, 0.105584, - 0.0973652, 0.292555, 0.0798105, 0.119506, - 0.107271, 0.306333, 0.0935945, 0.134434, - 0.117608, 0.318888, 0.109106, 0.153399, - 0.128938, 0.337552, 0.127074, 0.171258, - 0.139944, 0.349955, 0.14643, 0.191059, - 0.151288, 0.361545, 0.168, 0.215069, - 0.163018, 0.378421, 0.192082, 0.237838, - 0.174226, 0.38879, 0.217838, 0.266965, - 0.186063, 0.405857, 0.246931, 0.292827, - 0.196909, 0.414146, 0.277505, 0.324352, - 0.207473, 0.426955, 0.310711, 0.354427, - 0.217713, 0.433429, 0.346794, 0.389854, - 0.227183, 0.443966, 0.385237, 0.420749, - 0.235131, 0.44471, 0.424955, 0.459597, - 0.242786, 0.451729, 0.468446, 0.495316, - 0.248767, 0.45072, 0.513422, 0.534903, - 0.253351, 0.450924, 0.560618, 0.572369, - 0.256277, 0.445266, 0.609677, 0.612383, - 0.2576, 0.438798, 0.660995, 0.644037, - 0.256931, 0.421693, 0.713807, 0.686749, - 0.254036, 0.4109, 0.767616, 0.719814, - 0.249785, 0.390151, 0.82533, 0.754719, - 0.244283, 0.367847, 0.888311, 0.792022, - 0.235076, 0.345013, 0.948177, 0.822404, - 0.225061, 0.316193, 1.01661, 0.853084, - 0.211113, 0.287013, 1.08075, 0.879871, - 0.19449, 0.255424, 1.14501, 0.901655, - 0.174023, 0.222879, 1.20203, 0.919957, - 0.1509, 0.18989, 1.25698, 0.938412, - 0.124923, 0.15606, 1.30588, 0.953471, - 0.0968139, 0.120512, 1.3529, 0.970451, - 0.066734, 0.0828515, 1.3986, 0.985522, - 0.034734, 0.0424458, 1.44148, 1.00099, - 0.00102222, 0.000678929, 1.48398, 0.000965494, - 6.27338e-07, 0.0306409, 1.97672e-08, 0.00099168, - 1.58573e-05, 0.0314638, 4.99803e-07, 0.000991068, - 6.34012e-05, 0.031363, 2.00682e-06, 0.000974567, - 0.00014144, 0.03036, 4.57312e-06, 0.000998079, - 0.000252812, 0.031496, 8.60131e-06, 0.00102243, - 0.000396506, 0.0319955, 1.48288e-05, 0.00107877, - 0.000577593, 0.0331376, 2.49141e-05, 0.00121622, - 0.000816816, 0.0359396, 4.23011e-05, 0.0014455, - 0.00113761, 0.0399652, 7.24613e-05, 0.00178791, - 0.00156959, 0.0450556, 0.000123929, 0.00225668, - 0.00214064, 0.0508025, 0.000208531, 0.00285627, - 0.00287655, 0.0568443, 0.000341969, 0.0035991, - 0.00380271, 0.0630892, 0.000544158, 0.00455524, - 0.00496264, 0.0702204, 0.000842423, 0.00569143, - 0.0063793, 0.0773426, 0.00126704, 0.00716928, - 0.00813531, 0.0860839, 0.00186642, 0.00885307, - 0.0101946, 0.0944079, 0.00267014, 0.0109316, - 0.0126386, 0.103951, 0.00374033, 0.0133704, - 0.0154876, 0.113786, 0.0051304, 0.0161525, - 0.0187317, 0.123477, 0.00688858, 0.0194267, - 0.0224652, 0.133986, 0.00910557, 0.0230967, - 0.0265976, 0.143979, 0.0118074, 0.0273627, - 0.0312848, 0.154645, 0.0151266, 0.0323898, - 0.0365949, 0.166765, 0.0191791, 0.0379225, - 0.0422914, 0.177932, 0.0239236, 0.0447501, - 0.0487469, 0.19167, 0.0296568, 0.0519391, - 0.0556398, 0.203224, 0.0362924, 0.0599464, - 0.0631646, 0.215652, 0.0440585, 0.0702427, - 0.0714308, 0.232089, 0.0531619, 0.0806902, - 0.0800605, 0.245258, 0.0634564, 0.0923194, - 0.0892815, 0.258609, 0.0752481, 0.106938, - 0.09931, 0.276654, 0.0888914, 0.121238, - 0.109575, 0.289847, 0.104055, 0.138817, - 0.120461, 0.307566, 0.121266, 0.15595, - 0.131209, 0.320117, 0.139944, 0.178418, - 0.143049, 0.339677, 0.161591, 0.197875, - 0.154074, 0.349886, 0.184303, 0.224368, - 0.166307, 0.369352, 0.210669, 0.252213, - 0.178051, 0.386242, 0.238895, 0.277321, - 0.189335, 0.395294, 0.269182, 0.310332, - 0.200683, 0.412148, 0.302508, 0.338809, - 0.210856, 0.418266, 0.337264, 0.372678, - 0.220655, 0.428723, 0.374881, 0.405632, - 0.230053, 0.433887, 0.415656, 0.442293, - 0.237993, 0.439911, 0.457982, 0.477256, - 0.244897, 0.440175, 0.502831, 0.515592, - 0.250657, 0.441079, 0.550277, 0.550969, - 0.255459, 0.435219, 0.601102, 0.592883, - 0.257696, 0.432882, 0.651785, 0.629092, - 0.259894, 0.421054, 0.708961, 0.672033, - 0.258592, 0.41177, 0.763806, 0.709147, - 0.256525, 0.395267, 0.824249, 0.745367, - 0.254677, 0.375013, 0.8951, 0.784715, - 0.247892, 0.353906, 0.959317, 0.818107, - 0.240162, 0.327801, 1.03153, 0.847895, - 0.229741, 0.298821, 1.10601, 0.879603, - 0.213084, 0.269115, 1.164, 0.902605, - 0.195242, 0.236606, 1.22854, 0.922788, - 0.174505, 0.203442, 1.29017, 0.944831, - 0.150169, 0.169594, 1.34157, 0.959656, - 0.124099, 0.135909, 1.3956, 0.972399, - 0.0960626, 0.0990563, 1.45128, 0.986549, - 0.0657097, 0.0602348, 1.50312, 1.00013, - 0.0333558, 0.0186694, 1.55364, 6.19747e-06, - 1e-07, 0.00778326, 7.96756e-11, 2.37499e-08, - 9.99999e-08, 2.82592e-05, 1.14596e-10, 1.00292e-06, - 1.66369e-06, 0.000250354, 6.77492e-09, 3.50752e-06, - 6.37769e-06, 0.000357289, 6.31655e-08, 8.26445e-06, - 1.74689e-05, 0.000516179, 3.1851e-07, 2.42481e-05, - 4.50868e-05, 0.0010223, 1.30577e-06, 4.55631e-05, - 8.9044e-05, 0.00144302, 3.74587e-06, 9.71222e-05, - 0.000178311, 0.00241912, 1.02584e-05, 0.000171403, - 0.000313976, 0.00354938, 2.36481e-05, 0.000292747, - 0.000520026, 0.00513765, 4.96014e-05, 0.000789827, - 0.00118187, 0.0238621, 0.000139056, 0.00114093, - 0.00171827, 0.0286691, 0.000244093, 0.00176119, - 0.00249667, 0.0368565, 0.000420623, 0.0022233, - 0.00333742, 0.0400469, 0.00065673, 0.00343382, - 0.00481976, 0.0535751, 0.00109323, 0.00427602, - 0.00600755, 0.057099, 0.00155268, 0.00461435, - 0.00737637, 0.0551084, 0.00215031, 0.00695698, - 0.00971401, 0.0715767, 0.00316529, 0.00867619, - 0.0120943, 0.0793314, 0.00436995, 0.0106694, - 0.0148202, 0.0869391, 0.0058959, 0.0140351, - 0.0183501, 0.101572, 0.00798757, 0.0168939, - 0.022006, 0.11018, 0.0104233, 0.020197, - 0.0261568, 0.119041, 0.0134167, 0.0254702, - 0.0312778, 0.135404, 0.0173009, 0.0298384, - 0.0362469, 0.1437, 0.0215428, 0.035159, - 0.042237, 0.15512, 0.0268882, 0.0427685, - 0.0488711, 0.17128, 0.033235, 0.0494848, - 0.0557997, 0.181813, 0.0404443, 0.0592394, - 0.0635578, 0.198745, 0.0490043, 0.0681463, - 0.071838, 0.210497, 0.0588239, 0.0804753, - 0.0809297, 0.228864, 0.0702835, 0.0942205, - 0.0906488, 0.247008, 0.0834012, 0.106777, - 0.100216, 0.258812, 0.0975952, 0.124471, - 0.110827, 0.278617, 0.114162, 0.138389, - 0.121193, 0.287049, 0.131983, 0.159543, - 0.13253, 0.307151, 0.152541, 0.176432, - 0.143611, 0.31564, 0.174673, 0.201723, - 0.15548, 0.33538, 0.199842, 0.229721, - 0.167166, 0.355256, 0.227097, 0.250206, - 0.178238, 0.360047, 0.256014, 0.282118, - 0.189905, 0.378761, 0.28855, 0.312821, - 0.201033, 0.39181, 0.323348, 0.341482, - 0.211584, 0.397716, 0.360564, 0.377368, - 0.221314, 0.410141, 0.400004, 0.418229, - 0.230474, 0.423485, 0.442371, 0.444881, - 0.239443, 0.418874, 0.488796, 0.488899, - 0.245987, 0.427545, 0.535012, 0.520317, - 0.253948, 0.422147, 0.589678, 0.568566, - 0.256616, 0.42719, 0.637683, 0.599607, - 0.26376, 0.415114, 0.703363, 0.64222, - 0.268687, 0.408715, 0.771363, 0.685698, - 0.2694, 0.399722, 0.83574, 0.732327, - 0.266642, 0.388651, 0.897764, 0.769873, - 0.267712, 0.369198, 0.983312, 0.806733, - 0.263479, 0.346802, 1.06222, 0.843466, - 0.254575, 0.321368, 1.13477, 0.873008, - 0.242749, 0.29211, 1.20712, 0.908438, - 0.22725, 0.262143, 1.27465, 0.936321, - 0.207621, 0.228876, 1.33203, 0.950353, - 0.187932, 0.19484, 1.40439, 0.96442, - 0.165154, 0.163178, 1.4732, 0.979856, - 0.139302, 0.127531, 1.53574, 0.982561, - 0.11134, 0.0903457, 1.59982, 0.996389, - 0.0808124, 0.0489007, 1.6577 ];\n\n\t\tconst LTC_MAT_2 = [ 1, 0, 0, 0, 1, 7.91421e-31, 0, 0, 1, 1.04392e-24, 0, 0, 1, 3.49405e-21, 0, 0, 1, 1.09923e-18, 0, 0, 1, 9.47414e-17, 0, 0, 1, 3.59627e-15, 0, 0, 1, 7.72053e-14, 0, 0, 1, 1.08799e-12, 0, 0, 1, 1.10655e-11, 0, 0, 1, 8.65818e-11, 0, 0, 0.999998, 5.45037e-10, 0, 0, 0.999994, 2.85095e-09, 0, 0, 0.999989, 1.26931e-08, 0, 0, 0.999973, 4.89938e-08, 0, 0, 0.999947, 1.66347e-07, 0, 0, 0.999894, 5.02694e-07, 0, 0, 0.999798, 1.36532e-06, 0, 0, 0.999617, 3.35898e-06, 0, 0, 0.999234, 7.52126e-06, 0, 0, 0.998258, 1.52586e-05, 0, 0, 0.99504, 2.66207e-05, 0, 0, 0.980816, 2.36802e-05, 0, 0, 0.967553, 2.07684e-06, 0, 0, 0.966877, 4.03733e-06, 0, 0, 0.965752, 7.41174e-06, 0, 0, 0.96382, 1.27746e-05, 0, 0, 0.960306, 2.02792e-05, 0, 0, 0.953619, 2.80232e-05, 0, 0, 0.941103, 2.78816e-05, 0, 0, 0.926619, 1.60221e-05, 0, 0, 0.920983, 2.35164e-05, 0, 0, 0.912293, 3.11924e-05, 0, 0.0158731, 0.899277, 3.48118e-05, 0, 0.0476191, 0.880884, 2.6041e-05, 0, 0.0793651, 0.870399, 3.38726e-05, 0, 0.111111, 0.856138, 3.92906e-05, 0, 0.142857, 0.837436, 3.72874e-05, 0, 0.174603, 0.820973, 3.92558e-05, 0, 0.206349, 0.803583, 4.34658e-05, 0, 0.238095, 0.782168, 4.0256e-05, 0, 0.269841, 0.764107, 4.48159e-05, 0, 0.301587, 0.743092, 4.57627e-05, 0, 0.333333, 0.721626, 4.55314e-05, 0, 0.365079, 0.700375, 4.77335e-05, 0, 0.396825, 0.677334, 4.61072e-05, 0, 0.428571, 0.655702, 4.84393e-05, 0, 0.460317, 0.632059, 4.64583e-05, 0, 0.492064, 0.610125, 4.83923e-05, 0, 0.52381, 0.58653, 4.64342e-05, 0, 0.555556, 0.564508, 4.77033e-05, 0, 0.587302, 0.541405, 4.59263e-05, 0, 0.619048, 0.519556, 4.6412e-05, 0, 0.650794, 0.497292, 4.48913e-05, 0, 0.68254, 0.475898, 4.45789e-05, 0, 0.714286, 0.454722, 4.33496e-05, 0, 0.746032, 0.434042, 4.23054e-05, 0, 0.777778, 0.414126, 4.13737e-05, 0, 0.809524, 0.394387, 3.97265e-05, 0, 0.84127, 0.375841, 3.90709e-05, 0, 0.873016, 0.357219, 3.69938e-05, 0, 0.904762, 0.340084, 3.65618e-05, 0, 0.936508, 0.322714, 3.42533e-05, 0, 0.968254, 0.306974, 3.39596e-05, 0, 1, 1, 1.01524e-18, 0, 0, 1, 1.0292e-18, 0, 0, 1, 1.30908e-18, 0, 0, 1, 4.73331e-18, 0, 0, 1, 6.25319e-17, 0, 0, 1, 1.07932e-15, 0, 0, 1, 1.63779e-14, 0, 0, 1, 2.03198e-13, 0, 0, 1, 2.04717e-12, 0, 0, 0.999999, 1.68995e-11, 0, 0, 0.999998, 1.15855e-10, 0, 0, 0.999996, 6.6947e-10, 0, 0, 0.999991, 3.30863e-09, 0, 0, 0.999983, 1.41737e-08, 0, 0, 0.999968, 5.32626e-08, 0, 0, 0.99994, 1.77431e-07, 0, 0, 0.999891, 5.28835e-07, 0, 0, 0.999797, 1.42169e-06, 0, 0, 0.999617, 3.47057e-06, 0, 0, 0.999227, 7.7231e-06, 0, 0, 0.998239, 1.55753e-05, 0, 0, 0.994937, 2.68495e-05, 0, 0, 0.980225, 2.13742e-05, 0, 0, 0.967549, 2.1631e-06, 0, 0, 0.966865, 4.17989e-06, 0, 0, 0.965739, 7.63341e-06, 0, 0, 0.963794, 1.30892e-05, 0, 0, 0.960244, 2.06456e-05, 0, 0, 0.953495, 2.82016e-05, 0, 0.000148105, 0.940876, 2.71581e-05, 0, 0.002454, 0.926569, 1.64159e-05, 0, 0.00867491, 0.920905, 2.39521e-05, 0, 0.01956, 0.912169, 3.15127e-05, 0, 0.035433, 0.899095, 3.46626e-05, 0, 0.056294, 0.882209, 2.90223e-05, 0, 0.0818191, 0.870272, 3.42992e-05, 0, 0.111259, 0.855977, 3.94164e-05, 0, 0.142857, 0.837431, 3.72343e-05, 0, 0.174603, 0.820826, 3.96691e-05, 0, 0.206349, 0.803408, 4.35395e-05, 0, 0.238095, 0.782838, 4.19579e-05, 0, 0.269841, 0.763941, 4.50953e-05, 0, 0.301587, 0.742904, 4.55847e-05, 0, 0.333333, 0.721463, 4.58833e-05, 0, 0.365079, 0.700197, 4.77159e-05, 0, 0.396825, 0.677501, 4.70641e-05, 0, 0.428571, 0.655527, 4.84732e-05, 0, 0.460317, 0.6324, 4.76834e-05, 0, 0.492064, 0.609964, 4.84213e-05, 0, 0.52381, 0.586839, 4.75541e-05, 0, 0.555556, 0.564353, 4.76951e-05, 0, 0.587302, 0.541589, 4.67611e-05, 0, 0.619048, 0.519413, 4.63493e-05, 0, 0.650794, 0.497337, 4.53994e-05, 0, 0.68254, 0.475797, 4.45308e-05, 0, 0.714286, 0.454659, 4.35787e-05, 0, 0.746032, 0.434065, 4.24839e-05, 0, 0.777778, 0.414018, 4.1436e-05, 0, 0.809524, 0.39455, 4.01902e-05, 0, 0.84127, 0.375742, 3.90813e-05, 0, 0.873016, 0.357501, 3.77116e-05, 0, 0.904762, 0.339996, 3.6535e-05, 0, 0.936508, 0.323069, 3.51265e-05, 0, 0.968254, 0.306897, 3.39112e-05, 0, 1, 1, 1.0396e-15, 0, 0, 1, 1.04326e-15, 0, 0, 1, 1.10153e-15, 0, 0, 1, 1.44668e-15, 0, 0, 1, 3.4528e-15, 0, 0, 1, 1.75958e-14, 0, 0, 1, 1.2627e-13, 0, 0, 1, 9.36074e-13, 0, 0, 1, 6.45742e-12, 0, 0, 0.999998, 4.01228e-11, 0, 0, 0.999997, 2.22338e-10, 0, 0, 0.999995, 1.0967e-09, 0, 0, 0.999991, 4.82132e-09, 0, 0, 0.999981, 1.89434e-08, 0, 0, 0.999967, 6.67716e-08, 0, 0, 0.999938, 2.12066e-07, 0, 0, 0.999886, 6.0977e-07, 0, 0, 0.999792, 1.59504e-06, 0, 0, 0.999608, 3.81191e-06, 0, 0, 0.999209, 8.33727e-06, 0, 0, 0.998179, 1.65288e-05, 0, 0, 0.994605, 2.74387e-05, 0, 0, 0.979468, 1.67316e-05, 0, 0, 0.967529, 2.42877e-06, 0, 0, 0.966836, 4.61696e-06, 0, 0, 0.96569, 8.30977e-06, 0, 0, 0.963706, 1.40427e-05, 0, 2.44659e-06, 0.960063, 2.17353e-05, 0, 0.000760774, 0.953113, 2.86606e-05, 0, 0.00367261, 0.940192, 2.47691e-05, 0, 0.00940263, 0.927731, 1.95814e-05, 0, 0.018333, 0.920669, 2.52531e-05, 0, 0.0306825, 0.911799, 3.24277e-05, 0, 0.0465556, 0.89857, 3.40982e-05, 0, 0.0659521, 0.883283, 3.19622e-05, 0, 0.0887677, 0.86989, 3.5548e-05, 0, 0.114784, 0.855483, 3.97143e-05, 0, 0.143618, 0.837987, 3.91665e-05, 0, 0.174606, 0.820546, 4.11306e-05, 0, 0.206349, 0.802878, 4.36753e-05, 0, 0.238095, 0.783402, 4.44e-05, 0, 0.269841, 0.763439, 4.58726e-05, 0, 0.301587, 0.742925, 4.67097e-05, 0, 0.333333, 0.721633, 4.78887e-05, 0, 0.365079, 0.69985, 4.81251e-05, 0, 0.396825, 0.67783, 4.91811e-05, 0, 0.428571, 0.655126, 4.88199e-05, 0, 0.460318, 0.632697, 4.96025e-05, 0, 0.492064, 0.609613, 4.8829e-05, 0, 0.52381, 0.587098, 4.92754e-05, 0, 0.555556, 0.564119, 4.82625e-05, 0, 0.587302, 0.541813, 4.82807e-05, 0, 0.619048, 0.519342, 4.71552e-05, 0, 0.650794, 0.497514, 4.66765e-05, 0, 0.68254, 0.475879, 4.55582e-05, 0, 0.714286, 0.454789, 4.46007e-05, 0, 0.746032, 0.434217, 4.35382e-05, 0, 0.777778, 0.414086, 4.21753e-05, 0, 0.809524, 0.394744, 4.12093e-05, 0, 0.84127, 0.375782, 3.96634e-05, 0, 0.873016, 0.357707, 3.86419e-05, 0, 0.904762, 0.340038, 3.70345e-05, 0, 0.936508, 0.323284, 3.59725e-05, 0, 0.968254, 0.306954, 3.436e-05, 0, 1, 1, 5.99567e-14, 0, 0, 1, 6.00497e-14, 0, 0, 1, 6.14839e-14, 0, 0, 1, 6.86641e-14, 0, 0, 1, 9.72658e-14, 0, 0, 1, 2.21271e-13, 0, 0, 1, 8.33195e-13, 0, 0, 1, 4.03601e-12, 0, 0, 0.999999, 2.06001e-11, 0, 0, 0.999998, 1.01739e-10, 0, 0, 0.999997, 4.70132e-10, 0, 0, 0.999993, 2.00436e-09, 0, 0, 0.999988, 7.83682e-09, 0, 0, 0.999979, 2.80338e-08, 0, 0, 0.999962, 9.17033e-08, 0, 0, 0.999933, 2.74514e-07, 0, 0, 0.999881, 7.53201e-07, 0, 0, 0.999783, 1.89826e-06, 0, 0, 0.999594, 4.40279e-06, 0, 0, 0.999178, 9.3898e-06, 0, 0, 0.998073, 1.81265e-05, 0, 0, 0.993993, 2.80487e-05, 0, 0, 0.979982, 1.49422e-05, 0, 0, 0.968145, 3.78481e-06, 0, 0, 0.966786, 5.3771e-06, 0, 0, 0.965611, 9.47508e-06, 0, 3.88934e-05, 0.963557, 1.56616e-05, 0, 0.0009693, 0.959752, 2.35144e-05, 0, 0.00370329, 0.952461, 2.91568e-05, 0, 0.00868428, 0.940193, 2.40102e-05, 0, 0.0161889, 0.929042, 2.31235e-05, 0, 0.0263948, 0.920266, 2.73968e-05, 0, 0.0394088, 0.911178, 3.37915e-05, 0, 0.0552818, 0.897873, 3.33629e-05, 0, 0.0740138, 0.884053, 3.51405e-05, 0, 0.0955539, 0.869455, 3.78034e-05, 0, 0.119795, 0.854655, 3.99378e-05, 0, 0.14656, 0.838347, 4.19108e-05, 0, 0.175573, 0.820693, 4.40831e-05, 0, 0.206388, 0.802277, 4.45599e-05, 0, 0.238095, 0.783634, 4.72691e-05, 0, 0.269841, 0.763159, 4.76984e-05, 0, 0.301587, 0.742914, 4.91487e-05, 0, 0.333333, 0.721662, 5.02312e-05, 0, 0.365079, 0.699668, 5.02817e-05, 0, 0.396825, 0.677839, 5.1406e-05, 0, 0.428571, 0.655091, 5.11095e-05, 0, 0.460317, 0.632665, 5.16067e-05, 0, 0.492064, 0.609734, 5.12255e-05, 0, 0.52381, 0.587043, 5.10263e-05, 0, 0.555556, 0.564298, 5.0565e-05, 0, 0.587302, 0.541769, 4.97951e-05, 0, 0.619048, 0.519529, 4.92698e-05, 0, 0.650794, 0.497574, 4.82066e-05, 0, 0.68254, 0.476028, 4.73689e-05, 0, 0.714286, 0.454961, 4.61941e-05, 0, 0.746032, 0.434341, 4.50618e-05, 0, 0.777778, 0.414364, 4.38355e-05, 0, 0.809524, 0.394832, 4.24196e-05, 0, 0.84127, 0.376109, 4.12563e-05, 0, 0.873016, 0.35779, 3.96226e-05, 0, 0.904762, 0.340379, 3.84886e-05, 0, 0.936508, 0.323385, 3.68214e-05, 0, 0.968254, 0.307295, 3.56636e-05, 0, 1, 1, 1.06465e-12, 0, 0, 1, 1.06555e-12, 0, 0, 1, 1.07966e-12, 0, 0, 1, 1.14601e-12, 0, 0, 1, 1.37123e-12, 0, 0, 1, 2.1243e-12, 0, 0, 0.999999, 4.89653e-12, 0, 0, 0.999999, 1.60283e-11, 0, 0, 0.999998, 6.2269e-11, 0, 0, 0.999997, 2.51859e-10, 0, 0, 0.999996, 9.96192e-10, 0, 0, 0.999992, 3.74531e-09, 0, 0, 0.999986, 1.32022e-08, 0, 0, 0.999975, 4.33315e-08, 0, 0, 0.999959, 1.31956e-07, 0, 0, 0.999927, 3.72249e-07, 0, 0, 0.999871, 9.72461e-07, 0, 0, 0.999771, 2.35343e-06, 0, 0, 0.999572, 5.2768e-06, 0, 0, 0.999133, 1.09237e-05, 0, 0, 0.997912, 2.03675e-05, 0, 0, 0.993008, 2.79396e-05, 0, 0, 0.980645, 1.39604e-05, 0, 0, 0.970057, 6.46596e-06, 0, 0, 0.966717, 6.5089e-06, 0, 4.74145e-05, 0.965497, 1.11863e-05, 0, 0.00089544, 0.96334, 1.79857e-05, 0, 0.0032647, 0.959294, 2.59045e-05, 0, 0.0075144, 0.951519, 2.92327e-05, 0, 0.0138734, 0.940517, 2.49769e-05, 0, 0.0224952, 0.93014, 2.6803e-05, 0, 0.0334828, 0.91972, 3.03656e-05, 0, 0.0468973, 0.910294, 3.53323e-05, 0, 0.0627703, 0.897701, 3.51002e-05, 0, 0.0811019, 0.884522, 3.88104e-05, 0, 0.10186, 0.869489, 4.12932e-05, 0, 0.124985, 0.853983, 4.15781e-05, 0, 0.150372, 0.838425, 4.54066e-05, 0, 0.177868, 0.820656, 4.71624e-05, 0, 0.207245, 0.801875, 4.75243e-05, 0, 0.238143, 0.783521, 5.05621e-05, 0, 0.269841, 0.763131, 5.0721e-05, 0, 0.301587, 0.74261, 5.23293e-05, 0, 0.333333, 0.72148, 5.28699e-05, 0, 0.365079, 0.699696, 5.38677e-05, 0, 0.396825, 0.677592, 5.39255e-05, 0, 0.428571, 0.65525, 5.46367e-05, 0, 0.460317, 0.632452, 5.41348e-05, 0, 0.492064, 0.609903, 5.44976e-05, 0, 0.52381, 0.586928, 5.36201e-05, 0, 0.555556, 0.564464, 5.35185e-05, 0, 0.587302, 0.541801, 5.24949e-05, 0, 0.619048, 0.519681, 5.1812e-05, 0, 0.650794, 0.497685, 5.07687e-05, 0, 0.68254, 0.47622, 4.96243e-05, 0, 0.714286, 0.455135, 4.85714e-05, 0, 0.746032, 0.4346, 4.71847e-05, 0, 0.777778, 0.414564, 4.59294e-05, 0, 0.809524, 0.395165, 4.44705e-05, 0, 0.84127, 0.376333, 4.30772e-05, 0, 0.873016, 0.358197, 4.16229e-05, 0, 0.904762, 0.34064, 4.01019e-05, 0, 0.936508, 0.323816, 3.86623e-05, 0, 0.968254, 0.307581, 3.70933e-05, 0, 1, 1, 9.91541e-12, 0, 0, 1, 9.92077e-12, 0, 0, 1, 1.00041e-11, 0, 0, 1, 1.0385e-11, 0, 0, 1, 1.15777e-11, 0, 0, 1, 1.50215e-11, 0, 0, 0.999999, 2.54738e-11, 0, 0, 0.999999, 5.98822e-11, 0, 0, 0.999998, 1.79597e-10, 0, 0, 0.999997, 6.02367e-10, 0, 0, 0.999994, 2.06835e-09, 0, 0, 0.99999, 6.94952e-09, 0, 0, 0.999984, 2.23363e-08, 0, 0, 0.999972, 6.78578e-08, 0, 0, 0.999952, 1.93571e-07, 0, 0, 0.999919, 5.16594e-07, 0, 0, 0.99986, 1.28739e-06, 0, 0, 0.999753, 2.99298e-06, 0, 0, 0.999546, 6.48258e-06, 0, 0, 0.999074, 1.29985e-05, 0, 0, 0.997671, 2.32176e-05, 0, 0, 0.991504, 2.56701e-05, 0, 0, 0.981148, 1.31141e-05, 0, 0, 0.971965, 8.69048e-06, 0, 2.80182e-05, 0.966624, 8.08301e-06, 0, 0.000695475, 0.965344, 1.35235e-05, 0, 0.00265522, 0.963048, 2.10592e-05, 0, 0.00622975, 0.958673, 2.87473e-05, 0, 0.0116234, 0.950262, 2.81379e-05, 0, 0.018976, 0.940836, 2.71089e-05, 0, 0.0283844, 0.930996, 3.0926e-05, 0, 0.0399151, 0.919848, 3.48359e-05, 0, 0.0536063, 0.909136, 3.66092e-05, 0, 0.0694793, 0.897554, 3.84162e-05, 0, 0.0875342, 0.884691, 4.30971e-05, 0, 0.107749, 0.869414, 4.47803e-05, 0, 0.130087, 0.853462, 4.52858e-05, 0, 0.154481, 0.838187, 4.95769e-05, 0, 0.180833, 0.820381, 5.02709e-05, 0, 0.209005, 0.801844, 5.22713e-05, 0, 0.238791, 0.783061, 5.41505e-05, 0, 0.269869, 0.763205, 5.53712e-05, 0, 0.301587, 0.742362, 5.64909e-05, 0, 0.333333, 0.721393, 5.72646e-05, 0, 0.365079, 0.699676, 5.81012e-05, 0, 0.396825, 0.677395, 5.8096e-05, 0, 0.428571, 0.655208, 5.85766e-05, 0, 0.460317, 0.632451, 5.83602e-05, 0, 0.492064, 0.609839, 5.80234e-05, 0, 0.52381, 0.587093, 5.77161e-05, 0, 0.555556, 0.564467, 5.68447e-05, 0, 0.587302, 0.542043, 5.63166e-05, 0, 0.619048, 0.519826, 5.5156e-05, 0, 0.650794, 0.497952, 5.41682e-05, 0, 0.68254, 0.476477, 5.28971e-05, 0, 0.714286, 0.455412, 5.14952e-05, 0, 0.746032, 0.434926, 5.02222e-05, 0, 0.777778, 0.4149, 4.85779e-05, 0, 0.809524, 0.395552, 4.72242e-05, 0, 0.84127, 0.376712, 4.54891e-05, 0, 0.873016, 0.358622, 4.40924e-05, 0, 0.904762, 0.341048, 4.22984e-05, 0, 0.936508, 0.324262, 4.08582e-05, 0, 0.968254, 0.308013, 3.90839e-05, 0, 1, 1, 6.13913e-11, 0, 0, 1, 6.14145e-11, 0, 0, 1, 6.17708e-11, 0, 0, 1, 6.33717e-11, 0, 0, 1, 6.81648e-11, 0, 0, 1, 8.08291e-11, 0, 0, 1, 1.14608e-10, 0, 0, 0.999998, 2.10507e-10, 0, 0, 0.999997, 4.99595e-10, 0, 0, 0.999995, 1.39897e-09, 0, 0, 0.999994, 4.19818e-09, 0, 0, 0.999988, 1.27042e-08, 0, 0, 0.999979, 3.75153e-08, 0, 0, 0.999965, 1.06206e-07, 0, 0, 0.999945, 2.85381e-07, 0, 0, 0.999908, 7.23611e-07, 0, 0, 0.999846, 1.7255e-06, 0, 0, 0.999733, 3.86104e-06, 0, 0, 0.999511, 8.08493e-06, 0, 0, 0.998993, 1.56884e-05, 0, 0, 0.997326, 2.65538e-05, 0, 0, 0.989706, 2.06466e-05, 0, 0, 0.981713, 1.30756e-05, 0, 7.0005e-06, 0.973636, 1.06473e-05, 0, 0.000464797, 0.966509, 1.0194e-05, 0, 0.00201743, 0.965149, 1.65881e-05, 0, 0.00497549, 0.962669, 2.49147e-05, 0, 0.00953262, 0.95786, 3.17449e-05, 0, 0.0158211, 0.949334, 2.81045e-05, 0, 0.0239343, 0.941041, 3.03263e-05, 0, 0.0339372, 0.931575, 3.56754e-05, 0, 0.0458738, 0.920102, 3.97075e-05, 0, 0.059772, 0.908002, 3.84886e-05, 0, 0.075645, 0.897269, 4.3027e-05, 0, 0.0934929, 0.884559, 4.79925e-05, 0, 0.113302, 0.869161, 4.8246e-05, 0, 0.135045, 0.853342, 5.09505e-05, 0, 0.158678, 0.837633, 5.42846e-05, 0, 0.184136, 0.820252, 5.54139e-05, 0, 0.211325, 0.801872, 5.81412e-05, 0, 0.240113, 0.782418, 5.85535e-05, 0, 0.270306, 0.7631, 6.10923e-05, 0, 0.301594, 0.742183, 6.13678e-05, 0, 0.333333, 0.721098, 6.27275e-05, 0, 0.365079, 0.699512, 6.29413e-05, 0, 0.396825, 0.677372, 6.36351e-05, 0, 0.428571, 0.655059, 6.33555e-05, 0, 0.460317, 0.632567, 6.36513e-05, 0, 0.492064, 0.609784, 6.28965e-05, 0, 0.52381, 0.587237, 6.25546e-05, 0, 0.555556, 0.564525, 6.15825e-05, 0, 0.587302, 0.542181, 6.05048e-05, 0, 0.619048, 0.520017, 5.96329e-05, 0, 0.650794, 0.498204, 5.81516e-05, 0, 0.68254, 0.476742, 5.69186e-05, 0, 0.714286, 0.455803, 5.53833e-05, 0, 0.746032, 0.435251, 5.37807e-05, 0, 0.777778, 0.415374, 5.22025e-05, 0, 0.809524, 0.395921, 5.03421e-05, 0, 0.84127, 0.377253, 4.88211e-05, 0, 0.873016, 0.359021, 4.68234e-05, 0, 0.904762, 0.341637, 4.53269e-05, 0, 0.936508, 0.3247, 4.33014e-05, 0, 0.968254, 0.308625, 4.18007e-05, 0, 1, 1, 2.86798e-10, 0, 0, 1, 2.86877e-10, 0, 0, 1, 2.88094e-10, 0, 0, 1, 2.93506e-10, 0, 0, 1, 3.09262e-10, 0, 0, 0.999999, 3.48593e-10, 0, 0, 0.999999, 4.44582e-10, 0, 0, 0.999998, 6.88591e-10, 0, 0, 0.999996, 1.34391e-09, 0, 0, 0.999993, 3.17438e-09, 0, 0, 0.999989, 8.35609e-09, 0, 0, 0.999983, 2.28677e-08, 0, 0, 0.999974, 6.23361e-08, 0, 0, 0.999959, 1.65225e-07, 0, 0, 0.999936, 4.19983e-07, 0, 0, 0.999896, 1.01546e-06, 0, 0, 0.99983, 2.32376e-06, 0, 0, 0.999709, 5.0156e-06, 0, 0, 0.999469, 1.0167e-05, 0, 0, 0.998886, 1.90775e-05, 0, 0, 0.996819, 3.00511e-05, 0, 0, 0.988837, 1.85092e-05, 0, 1.68222e-07, 0.982178, 1.34622e-05, 0, 0.000259622, 0.975017, 1.25961e-05, 0, 0.00142595, 0.967101, 1.3507e-05, 0, 0.00382273, 0.964905, 2.05003e-05, 0, 0.00764164, 0.96218, 2.9546e-05, 0, 0.0130121, 0.956821, 3.43738e-05, 0, 0.0200253, 0.948829, 3.05063e-05, 0, 0.0287452, 0.941092, 3.46487e-05, 0, 0.039218, 0.931883, 4.12061e-05, 0, 0.0514748, 0.920211, 4.44651e-05, 0, 0.0655351, 0.907307, 4.31252e-05, 0, 0.0814082, 0.89684, 4.90382e-05, 0, 0.0990939, 0.884119, 5.3334e-05, 0, 0.118583, 0.869148, 5.4114e-05, 0, 0.139856, 0.853377, 5.78536e-05, 0, 0.162882, 0.836753, 5.92285e-05, 0, 0.187615, 0.820063, 6.22787e-05, 0, 0.213991, 0.801694, 6.45492e-05, 0, 0.241918, 0.782116, 6.5353e-05, 0, 0.271267, 0.762673, 6.74344e-05, 0, 0.301847, 0.742133, 6.82788e-05, 0, 0.333333, 0.720779, 6.91959e-05, 0, 0.365079, 0.699386, 6.96817e-05, 0, 0.396826, 0.67732, 6.99583e-05, 0, 0.428572, 0.654888, 6.98447e-05, 0, 0.460318, 0.632499, 6.94063e-05, 0, 0.492064, 0.609825, 6.91612e-05, 0, 0.52381, 0.587287, 6.81576e-05, 0, 0.555556, 0.564743, 6.74138e-05, 0, 0.587302, 0.542409, 6.61617e-05, 0, 0.619048, 0.520282, 6.47785e-05, 0, 0.650794, 0.498506, 6.33836e-05, 0, 0.68254, 0.477102, 6.15905e-05, 0, 0.714286, 0.456167, 6.01013e-05, 0, 0.746032, 0.435728, 5.81457e-05, 0, 0.777778, 0.415809, 5.64215e-05, 0, 0.809524, 0.396517, 5.44997e-05, 0, 0.84127, 0.377737, 5.25061e-05, 0, 0.873016, 0.359698, 5.06831e-05, 0, 0.904762, 0.342164, 4.8568e-05, 0, 0.936508, 0.325417, 4.67826e-05, 0, 0.968254, 0.309186, 4.46736e-05, 0, 1, 1, 1.09018e-09, 0, 0, 1, 1.0904e-09, 0, 0, 1, 1.09393e-09, 0, 0, 1, 1.1095e-09, 0, 0, 1, 1.154e-09, 0, 0, 1, 1.26089e-09, 0, 0, 0.999999, 1.5059e-09, 0, 0, 0.999997, 2.07899e-09, 0, 0, 0.999994, 3.48164e-09, 0, 0, 0.999993, 7.05728e-09, 0, 0, 0.999987, 1.63692e-08, 0, 0, 0.999981, 4.06033e-08, 0, 0, 0.999969, 1.0245e-07, 0, 0, 0.999953, 2.55023e-07, 0, 0, 0.999925, 6.1511e-07, 0, 0, 0.999881, 1.42218e-06, 0, 0, 0.99981, 3.13086e-06, 0, 0, 0.99968, 6.53119e-06, 0, 0, 0.999418, 1.2832e-05, 0, 0, 0.998748, 2.32497e-05, 0, 0, 0.996066, 3.29522e-05, 0, 0, 0.988379, 1.79613e-05, 0, 0.000108799, 0.982567, 1.43715e-05, 0, 0.000921302, 0.976097, 1.48096e-05, 0, 0.00280738, 0.968475, 1.78905e-05, 0, 0.00596622, 0.964606, 2.53921e-05, 0, 0.0105284, 0.961564, 3.48623e-05, 0, 0.0165848, 0.955517, 3.57612e-05, 0, 0.0242, 0.948381, 3.43493e-05, 0, 0.03342, 0.941095, 4.05849e-05, 0, 0.0442777, 0.931923, 4.75394e-05, 0, 0.0567958, 0.91996, 4.84328e-05, 0, 0.0709879, 0.907419, 5.02146e-05, 0, 0.086861, 0.89618, 5.61654e-05, 0, 0.104415, 0.88337, 5.87612e-05, 0, 0.123643, 0.869046, 6.18057e-05, 0, 0.144531, 0.853278, 6.57392e-05, 0, 0.167057, 0.836091, 6.6303e-05, 0, 0.191188, 0.819644, 7.04445e-05, 0, 0.216878, 0.801246, 7.14071e-05, 0, 0.244062, 0.782031, 7.40093e-05, 0, 0.272649, 0.762066, 7.4685e-05, 0, 0.302509, 0.741964, 7.66647e-05, 0, 0.333442, 0.720554, 7.66328e-05, 0, 0.365079, 0.699098, 7.77857e-05, 0, 0.396826, 0.677189, 7.74633e-05, 0, 0.428572, 0.65484, 7.76235e-05, 0, 0.460318, 0.632496, 7.70316e-05, 0, 0.492064, 0.609908, 7.62669e-05, 0, 0.52381, 0.587312, 7.53972e-05, 0, 0.555556, 0.564938, 7.39994e-05, 0, 0.587302, 0.542577, 7.28382e-05, 0, 0.619048, 0.52062, 7.1112e-05, 0, 0.650794, 0.498819, 6.94004e-05, 0, 0.68254, 0.477555, 6.75575e-05, 0, 0.714286, 0.456568, 6.53449e-05, 0, 0.746032, 0.436278, 6.36068e-05, 0, 0.777778, 0.41637, 6.13466e-05, 0, 0.809524, 0.397144, 5.94177e-05, 0, 0.84127, 0.378412, 5.70987e-05, 0, 0.873016, 0.360376, 5.50419e-05, 0, 0.904762, 0.342906, 5.27422e-05, 0, 0.936508, 0.326136, 5.06544e-05, 0, 0.968254, 0.30997, 4.84307e-05, 0, 1, 1, 3.54014e-09, 0, 0, 1, 3.54073e-09, 0, 0, 1, 3.54972e-09, 0, 0, 1, 3.58929e-09, 0, 0, 1, 3.70093e-09, 0, 0, 0.999999, 3.96194e-09, 0, 0, 0.999998, 4.53352e-09, 0, 0, 0.999997, 5.78828e-09, 0, 0, 0.999994, 8.63812e-09, 0, 0, 0.999991, 1.53622e-08, 0, 0, 0.999985, 3.16356e-08, 0, 0, 0.999977, 7.12781e-08, 0, 0, 0.999964, 1.66725e-07, 0, 0, 0.999945, 3.90501e-07, 0, 0, 0.999912, 8.95622e-07, 0, 0, 0.999866, 1.98428e-06, 0, 0, 0.999786, 4.21038e-06, 0, 0, 0.999647, 8.50239e-06, 0, 0, 0.999356, 1.62059e-05, 0, 0, 0.998563, 2.82652e-05, 0, 0, 0.994928, 3.36309e-05, 0, 2.44244e-05, 0.987999, 1.78458e-05, 0, 0.000523891, 0.982893, 1.59162e-05, 0, 0.00194729, 0.977044, 1.78056e-05, 0, 0.00451099, 0.969972, 2.30624e-05, 0, 0.00835132, 0.964237, 3.13922e-05, 0, 0.013561, 0.960791, 4.06145e-05, 0, 0.0202056, 0.954292, 3.72796e-05, 0, 0.0283321, 0.948052, 4.03199e-05, 0, 0.0379739, 0.940938, 4.79537e-05, 0, 0.0491551, 0.931689, 5.45292e-05, 0, 0.0618918, 0.91987, 5.4038e-05, 0, 0.0761941, 0.907665, 5.89909e-05, 0, 0.0920672, 0.895281, 6.42651e-05, 0, 0.109511, 0.882621, 6.59707e-05, 0, 0.12852, 0.86873, 7.09973e-05, 0, 0.149085, 0.853008, 7.42221e-05, 0, 0.171189, 0.835944, 7.61754e-05, 0, 0.194809, 0.818949, 7.97052e-05, 0, 0.21991, 0.800951, 8.12434e-05, 0, 0.246447, 0.781847, 8.38075e-05, 0, 0.274352, 0.761649, 8.4501e-05, 0, 0.303535, 0.74152, 8.60258e-05, 0, 0.333857, 0.720495, 8.66233e-05, 0, 0.365104, 0.698742, 8.68326e-05, 0, 0.396826, 0.677096, 8.7133e-05, 0, 0.428572, 0.654782, 8.63497e-05, 0, 0.460318, 0.632335, 8.60206e-05, 0, 0.492064, 0.610031, 8.49337e-05, 0, 0.52381, 0.587457, 8.38279e-05, 0, 0.555556, 0.56513, 8.2309e-05, 0, 0.587302, 0.542877, 8.03542e-05, 0, 0.619048, 0.5209, 7.86928e-05, 0, 0.650794, 0.499291, 7.65171e-05, 0, 0.68254, 0.477971, 7.44753e-05, 0, 0.714286, 0.457221, 7.2209e-05, 0, 0.746032, 0.436803, 6.97448e-05, 0, 0.777778, 0.417083, 6.75333e-05, 0, 0.809524, 0.397749, 6.48058e-05, 0, 0.84127, 0.379177, 6.25759e-05, 0, 0.873016, 0.361061, 5.98584e-05, 0, 0.904762, 0.343713, 5.75797e-05, 0, 0.936508, 0.326894, 5.49999e-05, 0, 0.968254, 0.310816, 5.27482e-05, 0, 1, 1, 1.0153e-08, 0, 0, 1, 1.01544e-08, 0, 0, 1, 1.01751e-08, 0, 0, 1, 1.02662e-08, 0, 0, 1, 1.0521e-08, 0, 0, 0.999999, 1.11049e-08, 0, 0, 0.999999, 1.23408e-08, 0, 0, 0.999996, 1.4924e-08, 0, 0, 0.999992, 2.04471e-08, 0, 0, 0.999989, 3.26539e-08, 0, 0, 0.99998, 6.03559e-08, 0, 0, 0.999971, 1.23936e-07, 0, 0, 0.999955, 2.69058e-07, 0, 0, 0.999933, 5.93604e-07, 0, 0, 0.999901, 1.29633e-06, 0, 0, 0.999847, 2.75621e-06, 0, 0, 0.999761, 5.64494e-06, 0, 0, 0.999607, 1.10485e-05, 0, 0, 0.999282, 2.04388e-05, 0, 0, 0.99831, 3.41084e-05, 0, 2.2038e-07, 0.993288, 2.94949e-05, 0, 0.000242388, 0.987855, 1.92736e-05, 0, 0.0012503, 0.983167, 1.82383e-05, 0, 0.0032745, 0.977908, 2.18633e-05, 0, 0.00646321, 0.971194, 2.90662e-05, 0, 0.0109133, 0.963867, 3.86401e-05, 0, 0.0166927, 0.95982, 4.62827e-05, 0, 0.0238494, 0.953497, 4.20705e-05, 0, 0.0324178, 0.947621, 4.77743e-05, 0, 0.0424225, 0.940611, 5.68258e-05, 0, 0.0538808, 0.931174, 6.18061e-05, 0, 0.0668047, 0.919919, 6.27098e-05, 0, 0.0812014, 0.907856, 6.94714e-05, 0, 0.0970745, 0.894509, 7.35008e-05, 0, 0.114424, 0.881954, 7.63369e-05, 0, 0.133246, 0.868309, 8.21896e-05, 0, 0.153534, 0.852511, 8.3769e-05, 0, 0.175275, 0.835821, 8.81615e-05, 0, 0.198453, 0.817981, 8.96368e-05, 0, 0.223042, 0.800504, 9.30906e-05, 0, 0.249009, 0.78141, 9.45056e-05, 0, 0.276304, 0.761427, 9.63605e-05, 0, 0.304862, 0.74094, 9.68088e-05, 0, 0.334584, 0.720233, 9.81481e-05, 0, 0.365322, 0.698592, 9.79122e-05, 0, 0.396826, 0.676763, 9.81057e-05, 0, 0.428571, 0.654808, 9.73956e-05, 0, 0.460318, 0.632326, 9.62619e-05, 0, 0.492064, 0.610049, 9.52996e-05, 0, 0.52381, 0.58763, 9.33334e-05, 0, 0.555556, 0.565261, 9.17573e-05, 0, 0.587302, 0.543244, 8.96636e-05, 0, 0.619048, 0.521273, 8.73304e-05, 0, 0.650794, 0.499818, 8.52648e-05, 0, 0.68254, 0.478536, 8.23961e-05, 0, 0.714286, 0.457826, 7.9939e-05, 0, 0.746032, 0.437549, 7.7126e-05, 0, 0.777778, 0.41776, 7.43043e-05, 0, 0.809524, 0.39863, 7.16426e-05, 0, 0.84127, 0.379954, 6.86456e-05, 0, 0.873016, 0.362025, 6.60514e-05, 0, 0.904762, 0.344581, 6.30755e-05, 0, 0.936508, 0.327909, 6.05439e-05, 0, 0.968254, 0.311736, 5.76345e-05, 0, 1, 1, 2.63344e-08, 0, 0, 1, 2.63373e-08, 0, 0, 1, 2.63815e-08, 0, 0, 1, 2.65753e-08, 0, 0, 1, 2.71132e-08, 0, 0, 0.999999, 2.83279e-08, 0, 0, 0.999997, 3.0833e-08, 0, 0, 0.999995, 3.58711e-08, 0, 0, 0.999992, 4.61266e-08, 0, 0, 0.999985, 6.7574e-08, 0, 0, 0.999977, 1.1358e-07, 0, 0, 0.999966, 2.13657e-07, 0, 0, 0.999948, 4.31151e-07, 0, 0, 0.999923, 8.96656e-07, 0, 0, 0.999884, 1.86603e-06, 0, 0, 0.999826, 3.81115e-06, 0, 0, 0.999732, 7.54184e-06, 0, 0, 0.999561, 1.43192e-05, 0, 0, 0.999191, 2.57061e-05, 0, 0, 0.997955, 4.05724e-05, 0, 7.44132e-05, 0.992228, 2.76537e-05, 0, 0.000716477, 0.987638, 2.08885e-05, 0, 0.0022524, 0.983395, 2.15226e-05, 0, 0.00484816, 0.978614, 2.70795e-05, 0, 0.00860962, 0.972389, 3.65282e-05, 0, 0.0136083, 0.964392, 4.74747e-05, 0, 0.0198941, 0.95861, 5.09141e-05, 0, 0.0275023, 0.952806, 4.8963e-05, 0, 0.0364584, 0.94712, 5.71119e-05, 0, 0.04678, 0.940104, 6.71704e-05, 0, 0.0584799, 0.930398, 6.87586e-05, 0, 0.0715665, 0.919866, 7.38161e-05, 0, 0.086045, 0.907853, 8.13235e-05, 0, 0.101918, 0.894078, 8.34582e-05, 0, 0.119186, 0.881177, 8.92093e-05, 0, 0.137845, 0.867575, 9.44548e-05, 0, 0.157891, 0.852107, 9.69607e-05, 0, 0.179316, 0.835502, 0.000101456, 0, 0.202106, 0.81756, 0.000103256, 0, 0.226243, 0.79984, 0.000106954, 0, 0.251704, 0.780998, 0.000108066, 0, 0.278451, 0.761132, 0.000110111, 0, 0.306436, 0.740429, 0.000110459, 0, 0.335586, 0.719836, 0.000111219, 0, 0.365796, 0.698467, 0.00011145, 0, 0.3969, 0.676446, 0.000110393, 0, 0.428571, 0.654635, 0.000110035, 0, 0.460318, 0.632411, 0.000108548, 0, 0.492064, 0.609986, 0.000106963, 0, 0.52381, 0.587872, 0.000105238, 0, 0.555556, 0.565528, 0.000102665, 0, 0.587302, 0.543563, 0.000100543, 0, 0.619048, 0.52176, 9.76182e-05, 0, 0.650794, 0.500188, 9.47099e-05, 0, 0.68254, 0.479204, 9.19929e-05, 0, 0.714286, 0.458413, 8.86139e-05, 0, 0.746032, 0.438314, 8.57839e-05, 0, 0.777778, 0.418573, 8.2411e-05, 0, 0.809524, 0.39947, 7.92211e-05, 0, 0.84127, 0.380892, 7.59546e-05, 0, 0.873016, 0.362953, 7.27571e-05, 0, 0.904762, 0.345601, 6.95738e-05, 0, 0.936508, 0.328895, 6.64907e-05, 0, 0.968254, 0.312808, 6.34277e-05, 0, 1, 1, 6.28647e-08, 0, 0, 1, 6.28705e-08, 0, 0, 1, 6.29587e-08, 0, 0, 1, 6.33441e-08, 0, 0, 0.999999, 6.44087e-08, 0, 0, 0.999998, 6.67856e-08, 0, 0, 0.999997, 7.15889e-08, 0, 0, 0.999995, 8.09577e-08, 0, 0, 0.999989, 9.92764e-08, 0, 0, 0.999983, 1.35834e-07, 0, 0, 0.999974, 2.10482e-07, 0, 0, 0.999959, 3.65215e-07, 0, 0, 0.999939, 6.86693e-07, 0, 0, 0.999911, 1.3472e-06, 0, 0, 0.999868, 2.6731e-06, 0, 0, 0.999804, 5.24756e-06, 0, 0, 0.9997, 1.00403e-05, 0, 0, 0.99951, 1.85019e-05, 0, 0, 0.999078, 3.22036e-05, 0, 6.20676e-06, 0.997428, 4.70002e-05, 0, 0.000341552, 0.99162, 2.87123e-05, 0, 0.00143727, 0.987479, 2.34706e-05, 0, 0.00349201, 0.983582, 2.60083e-05, 0, 0.0066242, 0.979186, 3.37927e-05, 0, 0.0109113, 0.97325, 4.54689e-05, 0, 0.0164064, 0.965221, 5.73759e-05, 0, 0.0231463, 0.957262, 5.44114e-05, 0, 0.0311571, 0.952211, 5.87006e-05, 0, 0.0404572, 0.946631, 6.92256e-05, 0, 0.0510592, 0.939391, 7.87819e-05, 0, 0.0629723, 0.929795, 7.92368e-05, 0, 0.0762025, 0.91965, 8.75075e-05, 0, 0.090753, 0.907737, 9.50903e-05, 0, 0.106626, 0.893899, 9.72963e-05, 0, 0.123822, 0.880239, 0.00010459, 0, 0.142337, 0.866562, 0.000107689, 0, 0.16217, 0.85164, 0.000113081, 0, 0.183314, 0.835021, 0.000116636, 0, 0.20576, 0.817311, 0.000120074, 0, 0.229496, 0.798845, 0.000121921, 0, 0.254502, 0.780479, 0.00012475, 0, 0.280753, 0.760694, 0.000125255, 0, 0.308212, 0.740142, 0.000126719, 0, 0.336825, 0.719248, 0.00012636, 0, 0.366517, 0.698209, 0.000126712, 0, 0.397167, 0.676398, 0.000125769, 0, 0.428578, 0.654378, 0.000124432, 0, 0.460318, 0.632484, 0.000123272, 0, 0.492064, 0.610113, 0.00012085, 0, 0.52381, 0.587931, 0.000118411, 0, 0.555556, 0.565872, 0.00011569, 0, 0.587302, 0.543814, 0.000112521, 0, 0.619048, 0.522265, 0.000109737, 0, 0.650794, 0.500835, 0.000106228, 0, 0.68254, 0.479818, 0.000102591, 0, 0.714286, 0.459258, 9.91288e-05, 0, 0.746032, 0.439061, 9.52325e-05, 0, 0.777778, 0.419552, 9.1895e-05, 0, 0.809524, 0.400399, 8.79051e-05, 0, 0.84127, 0.381976, 8.44775e-05, 0, 0.873016, 0.364009, 8.06316e-05, 0, 0.904762, 0.346761, 7.71848e-05, 0, 0.936508, 0.330049, 7.35429e-05, 0, 0.968254, 0.314018, 7.02103e-05, 0, 1, 1, 1.39968e-07, 0, 0, 1, 1.39979e-07, 0, 0, 1, 1.40145e-07, 0, 0, 1, 1.4087e-07, 0, 0, 0.999999, 1.42865e-07, 0, 0, 0.999998, 1.47279e-07, 0, 0, 0.999997, 1.56057e-07, 0, 0, 0.999992, 1.7276e-07, 0, 0, 0.999989, 2.04352e-07, 0, 0, 0.99998, 2.6494e-07, 0, 0, 0.999969, 3.83435e-07, 0, 0, 0.999953, 6.18641e-07, 0, 0, 0.999929, 1.08755e-06, 0, 0, 0.999898, 2.01497e-06, 0, 0, 0.999849, 3.81346e-06, 0, 0, 0.999778, 7.19815e-06, 0, 0, 0.999661, 1.33215e-05, 0, 0, 0.999451, 2.38313e-05, 0, 0, 0.998936, 4.01343e-05, 0, 0.000113724, 0.99662, 5.17346e-05, 0, 0.000820171, 0.991094, 3.04323e-05, 0, 0.00238143, 0.987487, 2.81757e-05, 0, 0.00493527, 0.983731, 3.20048e-05, 0, 0.00856859, 0.979647, 4.23905e-05, 0, 0.0133393, 0.973837, 5.62935e-05, 0, 0.0192863, 0.96584, 6.77442e-05, 0, 0.0264369, 0.956309, 6.23073e-05, 0, 0.03481, 0.951523, 7.04131e-05, 0, 0.0444184, 0.946003, 8.36594e-05, 0, 0.0552713, 0.938454, 9.11736e-05, 0, 0.0673749, 0.929279, 9.38264e-05, 0, 0.0807329, 0.919239, 0.000103754, 0, 0.0953479, 0.907293, 0.000109928, 0, 0.111221, 0.893936, 0.000115257, 0, 0.128352, 0.879674, 0.000122265, 0, 0.14674, 0.865668, 0.000125733, 0, 0.166382, 0.850998, 0.000132305, 0, 0.187276, 0.834498, 0.000134844, 0, 0.209413, 0.816903, 0.000139276, 0, 0.232786, 0.798235, 0.000140984, 0, 0.257382, 0.779724, 0.00014378, 0, 0.283181, 0.760251, 0.000144623, 0, 0.310156, 0.739808, 0.000145228, 0, 0.338269, 0.718762, 0.00014539, 0, 0.367461, 0.697815, 0.000144432, 0, 0.397646, 0.67631, 0.000143893, 0, 0.428685, 0.654278, 0.000141846, 0, 0.460318, 0.632347, 0.00013935, 0, 0.492064, 0.610296, 0.000137138, 0, 0.52381, 0.588039, 0.000133806, 0, 0.555556, 0.566218, 0.000130755, 0, 0.587302, 0.544346, 0.000127128, 0, 0.619048, 0.522701, 0.000123002, 0, 0.650794, 0.501542, 0.000119443, 0, 0.68254, 0.480508, 0.000115055, 0, 0.714286, 0.460092, 0.000111032, 0, 0.746032, 0.440021, 0.000106635, 0, 0.777778, 0.420446, 0.000102162, 0, 0.809524, 0.401512, 9.8184e-05, 0, 0.84127, 0.38299, 9.36497e-05, 0, 0.873016, 0.365232, 8.9813e-05, 0, 0.904762, 0.347865, 8.53073e-05, 0, 0.936508, 0.331342, 8.17068e-05, 0, 0.968254, 0.315202, 7.73818e-05, 0, 1, 1, 2.9368e-07, 0, 0, 1, 2.937e-07, 0, 0, 1, 2.93998e-07, 0, 0, 1, 2.95298e-07, 0, 0, 0.999999, 2.98865e-07, 0, 0, 0.999998, 3.067e-07, 0, 0, 0.999995, 3.22082e-07, 0, 0, 0.999992, 3.50767e-07, 0, 0, 0.999986, 4.03538e-07, 0, 0, 0.999976, 5.01372e-07, 0, 0, 0.999964, 6.8562e-07, 0, 0, 0.999945, 1.0374e-06, 0, 0, 0.999919, 1.71269e-06, 0, 0, 0.999882, 3.00175e-06, 0, 0, 0.999829, 5.42144e-06, 0, 0, 0.999749, 9.84182e-06, 0, 0, 0.99962, 1.76213e-05, 0, 0, 0.999382, 3.05995e-05, 0, 1.38418e-05, 0.998751, 4.96686e-05, 0, 0.000389844, 0.995344, 5.10733e-05, 0, 0.00150343, 0.990768, 3.45829e-05, 0, 0.00352451, 0.987464, 3.42841e-05, 0, 0.00655379, 0.983846, 3.99072e-05, 0, 0.0106554, 0.980007, 5.33219e-05, 0, 0.0158723, 0.974494, 6.96992e-05, 0, 0.0222333, 0.96622, 7.76754e-05, 0, 0.029758, 0.956273, 7.47718e-05, 0, 0.0384596, 0.950952, 8.64611e-05, 0, 0.0483473, 0.945215, 0.000100464, 0, 0.0594266, 0.937287, 0.000103729, 0, 0.0717019, 0.928649, 0.000111665, 0, 0.0851752, 0.918791, 0.00012353, 0, 0.0998479, 0.906685, 0.000127115, 0, 0.115721, 0.893706, 0.00013628, 0, 0.132794, 0.879248, 0.000142427, 0, 0.151067, 0.864685, 0.000148091, 0, 0.170538, 0.850032, 0.000153517, 0, 0.191204, 0.833853, 0.000157322, 0, 0.213063, 0.816353, 0.000161086, 0, 0.236107, 0.797834, 0.000164111, 0, 0.260329, 0.778831, 0.000165446, 0, 0.285714, 0.759756, 0.000167492, 0, 0.312243, 0.739419, 0.000166928, 0, 0.339887, 0.718491, 0.000167, 0, 0.368604, 0.697392, 0.000165674, 0, 0.398329, 0.676102, 0.000163815, 0, 0.428961, 0.654243, 0.000162003, 0, 0.460331, 0.632176, 0.000158831, 0, 0.492064, 0.610407, 0.000155463, 0, 0.52381, 0.588394, 0.000152062, 0, 0.555556, 0.56645, 0.000147665, 0, 0.587302, 0.5449, 0.00014375, 0, 0.619048, 0.523276, 0.000138905, 0, 0.650794, 0.502179, 0.000134189, 0, 0.68254, 0.481359, 0.000129392, 0, 0.714286, 0.46092, 0.000124556, 0, 0.746032, 0.441084, 0.00011957, 0, 0.777778, 0.421517, 0.000114652, 0, 0.809524, 0.402721, 0.000109688, 0, 0.84127, 0.384222, 0.000104667, 0, 0.873016, 0.366534, 9.99633e-05, 0, 0.904762, 0.349205, 9.50177e-05, 0, 0.936508, 0.332702, 9.07301e-05, 0, 0.968254, 0.316599, 8.59769e-05, 0, 1, 1, 5.85473e-07, 0, 0, 1, 5.85507e-07, 0, 0, 1, 5.8602e-07, 0, 0, 0.999999, 5.88259e-07, 0, 0, 0.999999, 5.94381e-07, 0, 0, 0.999998, 6.07754e-07, 0, 0, 0.999995, 6.33729e-07, 0, 0, 0.99999, 6.8137e-07, 0, 0, 0.999984, 7.67003e-07, 0, 0, 0.999973, 9.21212e-07, 0, 0, 0.999959, 1.20218e-06, 0, 0, 0.999936, 1.72024e-06, 0, 0, 0.999907, 2.68088e-06, 0, 0, 0.999866, 4.45512e-06, 0, 0, 0.999806, 7.68481e-06, 0, 0, 0.999716, 1.342e-05, 0, 0, 0.999576, 2.32473e-05, 0, 0, 0.9993, 3.91694e-05, 0, 0.000129917, 0.998498, 6.08429e-05, 0, 0.000845035, 0.994132, 4.89743e-05, 0, 0.00237616, 0.99031, 3.84644e-05, 0, 0.00484456, 0.987409, 4.21768e-05, 0, 0.00832472, 0.983981, 5.04854e-05, 0, 0.0128643, 0.980268, 6.71028e-05, 0, 0.0184947, 0.974875, 8.52749e-05, 0, 0.025237, 0.966063, 8.5531e-05, 0, 0.0331046, 0.956779, 9.00588e-05, 0, 0.0421067, 0.950259, 0.00010577, 0, 0.0522487, 0.944239, 0.000119458, 0, 0.0635343, 0.936341, 0.000122164, 0, 0.0759654, 0.928047, 0.000134929, 0, 0.0895434, 0.918065, 0.000145544, 0, 0.104269, 0.906267, 0.000150531, 0, 0.120142, 0.893419, 0.000161652, 0, 0.137163, 0.878758, 0.00016593, 0, 0.15533, 0.863699, 0.000174014, 0, 0.174645, 0.848876, 0.000177877, 0, 0.195106, 0.833032, 0.000184049, 0, 0.21671, 0.815557, 0.000186088, 0, 0.239454, 0.797323, 0.00019054, 0, 0.263332, 0.778124, 0.000191765, 0, 0.288336, 0.758929, 0.000192535, 0, 0.314451, 0.738979, 0.000192688, 0, 0.341658, 0.718213, 0.000191522, 0, 0.369924, 0.696947, 0.000190491, 0, 0.399202, 0.675807, 0.000187913, 0, 0.429416, 0.654147, 0.000184451, 0, 0.460447, 0.63229, 0.000181442, 0, 0.492064, 0.610499, 0.000177139, 0, 0.523809, 0.588747, 0.000172596, 0, 0.555555, 0.566783, 0.000167457, 0, 0.587301, 0.545359, 0.000162518, 0, 0.619048, 0.523984, 0.000156818, 0, 0.650794, 0.502917, 0.000151884, 0, 0.68254, 0.482294, 0.000145514, 0, 0.714286, 0.461945, 0.000140199, 0, 0.746032, 0.442133, 0.000134101, 0, 0.777778, 0.422705, 0.000128374, 0, 0.809524, 0.403916, 0.000122996, 0, 0.84127, 0.38554, 0.000116808, 0, 0.873016, 0.367909, 0.000111973, 0, 0.904762, 0.350651, 0.000105938, 0, 0.936508, 0.334208, 0.000101355, 0, 0.968254, 0.318123, 9.57629e-05, 0, 1, 1, 1.11633e-06, 0, 0, 1, 1.11639e-06, 0, 0, 1, 1.11725e-06, 0, 0, 1, 1.12096e-06, 0, 0, 0.999999, 1.1311e-06, 0, 0, 0.999997, 1.15315e-06, 0, 0, 0.999995, 1.1956e-06, 0, 0, 0.999989, 1.27239e-06, 0, 0, 0.999981, 1.40772e-06, 0, 0, 0.999969, 1.64541e-06, 0, 0, 0.999952, 2.06607e-06, 0, 0, 0.999928, 2.81783e-06, 0, 0, 0.999895, 4.16835e-06, 0, 0, 0.999848, 6.58728e-06, 0, 0, 0.999781, 1.08648e-05, 0, 0, 0.999682, 1.82579e-05, 0, 0, 0.999523, 3.06003e-05, 0, 1.59122e-05, 0.999205, 4.99862e-05, 0, 0.000391184, 0.998131, 7.3306e-05, 0, 0.00147534, 0.993334, 5.13229e-05, 0, 0.0034227, 0.99016, 4.67783e-05, 0, 0.00632232, 0.987321, 5.23413e-05, 0, 0.0102295, 0.984099, 6.4267e-05, 0, 0.0151794, 0.980432, 8.43042e-05, 0, 0.0211947, 0.974976, 0.000102819, 0, 0.0282899, 0.966429, 9.96234e-05, 0, 0.0364739, 0.957633, 0.000111074, 0, 0.0457522, 0.949422, 0.000128644, 0, 0.0561278, 0.943045, 0.000140076, 0, 0.0676023, 0.935448, 0.000146349, 0, 0.0801762, 0.927225, 0.000161854, 0, 0.0938499, 0.917033, 0.000169135, 0, 0.108623, 0.905762, 0.000179987, 0, 0.124496, 0.892879, 0.000189832, 0, 0.141469, 0.878435, 0.000195881, 0, 0.159541, 0.863114, 0.00020466, 0, 0.178713, 0.84776, 0.000209473, 0, 0.198985, 0.832084, 0.000214861, 0, 0.220355, 0.814915, 0.000217695, 0, 0.242823, 0.796711, 0.000220313, 0, 0.266385, 0.777603, 0.00022313, 0, 0.291036, 0.757991, 0.000222471, 0, 0.316767, 0.738371, 0.000222869, 0, 0.343563, 0.717872, 0.000221243, 0, 0.371402, 0.696619, 0.000218089, 0, 0.400248, 0.675379, 0.00021562, 0, 0.430047, 0.65411, 0.00021169, 0, 0.460709, 0.63241, 0.000206947, 0, 0.492079, 0.61046, 0.000201709, 0, 0.52381, 0.58903, 0.000196753, 0, 0.555556, 0.567267, 0.000189637, 0, 0.587302, 0.545886, 0.000184735, 0, 0.619048, 0.524714, 0.000177257, 0, 0.650794, 0.503789, 0.000171424, 0, 0.68254, 0.483204, 0.000164688, 0, 0.714286, 0.462976, 0.000157172, 0, 0.746032, 0.443294, 0.000151341, 0, 0.777778, 0.423988, 0.000143737, 0, 0.809524, 0.405325, 0.000138098, 0, 0.84127, 0.386981, 0.000130698, 0, 0.873016, 0.369436, 0.000125276, 0, 0.904762, 0.35219, 0.000118349, 0, 0.936508, 0.335804, 0.00011312, 0, 0.968254, 0.319749, 0.000106687, 0, 1, 1, 2.04685e-06, 0, 0, 1, 2.04694e-06, 0, 0, 1, 2.04831e-06, 0, 0, 0.999999, 2.05428e-06, 0, 0, 0.999999, 2.07056e-06, 0, 0, 0.999997, 2.10581e-06, 0, 0, 0.999993, 2.1732e-06, 0, 0, 0.999987, 2.29365e-06, 0, 0, 0.999979, 2.50243e-06, 0, 0, 0.999965, 2.86127e-06, 0, 0, 0.999947, 3.48028e-06, 0, 0, 0.999918, 4.55588e-06, 0, 0, 0.999881, 6.43303e-06, 0, 0, 0.999828, 9.70064e-06, 0, 0, 0.999753, 1.53233e-05, 0, 0, 0.999642, 2.4793e-05, 0, 0, 0.999464, 4.02032e-05, 0, 0.000122947, 0.999089, 6.35852e-05, 0, 0.000807414, 0.997567, 8.57026e-05, 0, 0.00227206, 0.992903, 5.94912e-05, 0, 0.00462812, 0.990011, 5.78515e-05, 0, 0.00794162, 0.987192, 6.5399e-05, 0, 0.0122534, 0.98418, 8.19675e-05, 0, 0.0175888, 0.980491, 0.000105514, 0, 0.0239635, 0.974779, 0.000121532, 0, 0.031387, 0.96675, 0.000119144, 0, 0.0398644, 0.958248, 0.000136125, 0, 0.0493982, 0.948884, 0.000155408, 0, 0.0599896, 0.941673, 0.000162281, 0, 0.0716382, 0.934521, 0.000176754, 0, 0.0843437, 0.926205, 0.000192873, 0, 0.0981056, 0.916089, 0.000200038, 0, 0.112923, 0.904963, 0.000213624, 0, 0.128796, 0.892089, 0.000221834, 0, 0.145725, 0.878028, 0.000232619, 0, 0.163709, 0.86249, 0.000238632, 0, 0.182749, 0.846587, 0.000247002, 0, 0.202847, 0.830988, 0.000250702, 0, 0.224001, 0.814165, 0.000255562, 0, 0.246214, 0.796135, 0.000257505, 0, 0.269482, 0.777052, 0.000258625, 0, 0.293805, 0.757201, 0.000258398, 0, 0.319176, 0.737655, 0.000256714, 0, 0.345587, 0.717477, 0.000255187, 0, 0.373021, 0.696433, 0.000251792, 0, 0.401454, 0.675084, 0.000247223, 0, 0.430844, 0.653907, 0.000242213, 0, 0.461125, 0.632561, 0.000237397, 0, 0.492187, 0.610658, 0.000229313, 0, 0.52381, 0.589322, 0.000224402, 0, 0.555556, 0.567857, 0.000216116, 0, 0.587302, 0.54652, 0.000209124, 0, 0.619048, 0.525433, 0.000201601, 0, 0.650794, 0.504679, 0.000192957, 0, 0.68254, 0.484203, 0.000186052, 0, 0.714286, 0.464203, 0.000177672, 0, 0.746032, 0.444549, 0.000170005, 0, 0.777778, 0.425346, 0.000162401, 0, 0.809524, 0.406706, 0.0001544, 0, 0.84127, 0.388576, 0.000147437, 0, 0.873016, 0.37094, 0.000139493, 0, 0.904762, 0.353996, 0.000133219, 0, 0.936508, 0.337391, 0.000125573, 0, 0.968254, 0.321648, 0.000119867, 0, 1, 1, 3.62511e-06, 0, 0, 1, 3.62525e-06, 0, 0, 1, 3.62739e-06, 0, 0, 0.999999, 3.63673e-06, 0, 0, 0.999998, 3.66214e-06, 0, 0, 0.999996, 3.71698e-06, 0, 0, 0.999992, 3.82116e-06, 0, 0, 0.999986, 4.00554e-06, 0, 0, 0.999976, 4.32058e-06, 0, 0, 0.999961, 4.85194e-06, 0, 0, 0.999938, 5.74808e-06, 0, 0, 0.999908, 7.26643e-06, 0, 0, 0.999865, 9.84707e-06, 0, 0, 0.999807, 1.42217e-05, 0, 0, 0.999723, 2.15581e-05, 0, 0, 0.999602, 3.36114e-05, 0, 1.19113e-05, 0.999398, 5.27353e-05, 0, 0.000355813, 0.998946, 8.05809e-05, 0, 0.00137768, 0.996647, 9.42908e-05, 0, 0.00322469, 0.992298, 6.68733e-05, 0, 0.00597897, 0.989802, 7.16564e-05, 0, 0.00968903, 0.987019, 8.21355e-05, 0, 0.0143845, 0.984219, 0.000104555, 0, 0.0200831, 0.980425, 0.000131245, 0, 0.0267948, 0.974241, 0.000139613, 0, 0.034525, 0.967006, 0.000145931, 0, 0.0432757, 0.95893, 0.000167153, 0, 0.0530471, 0.949157, 0.000188146, 0, 0.0638386, 0.94062, 0.000194625, 0, 0.0756487, 0.933509, 0.000213721, 0, 0.0884762, 0.925088, 0.000229616, 0, 0.10232, 0.915178, 0.000239638, 0, 0.117178, 0.904093, 0.000254814, 0, 0.133051, 0.891337, 0.000263685, 0, 0.149939, 0.877326, 0.000274789, 0, 0.167841, 0.861794, 0.000280534, 0, 0.18676, 0.845758, 0.000289534, 0, 0.206696, 0.829792, 0.000294446, 0, 0.22765, 0.813037, 0.000296877, 0, 0.249625, 0.795285, 0.000300217, 0, 0.27262, 0.776323, 0.000299826, 0, 0.296636, 0.756673, 0.000299787, 0, 0.321671, 0.736856, 0.000297867, 0, 0.347718, 0.716883, 0.000294052, 0, 0.374768, 0.696089, 0.000289462, 0, 0.402804, 0.67505, 0.000285212, 0, 0.431796, 0.653509, 0.00027653, 0, 0.461695, 0.63258, 0.000271759, 0, 0.49242, 0.61104, 0.000262811, 0, 0.523822, 0.589567, 0.000255151, 0, 0.555556, 0.568322, 0.000246434, 0, 0.587302, 0.547235, 0.000237061, 0, 0.619048, 0.52616, 0.000228343, 0, 0.650794, 0.505716, 0.000219236, 0, 0.68254, 0.485274, 0.000209595, 0, 0.714286, 0.465411, 0.000201011, 0, 0.746032, 0.445854, 0.00019109, 0, 0.777778, 0.426911, 0.000182897, 0, 0.809524, 0.408222, 0.000173569, 0, 0.84127, 0.390307, 0.000165496, 0, 0.873016, 0.372624, 0.000156799, 0, 0.904762, 0.355804, 0.00014917, 0, 0.936508, 0.33924, 0.000140907, 0, 0.968254, 0.323534, 0.000134062, 0, 1, 1, 6.22487e-06, 0, 0, 1, 6.2251e-06, 0, 0, 1, 6.22837e-06, 0, 0, 0.999999, 6.24259e-06, 0, 0, 0.999998, 6.28127e-06, 0, 0, 0.999996, 6.36451e-06, 0, 0, 0.999991, 6.5218e-06, 0, 0, 0.999984, 6.79782e-06, 0, 0, 0.999973, 7.26361e-06, 0, 0, 0.999955, 8.03644e-06, 0, 0, 0.999931, 9.31397e-06, 0, 0, 0.999896, 1.14299e-05, 0, 0, 0.999847, 1.49402e-05, 0, 0, 0.999784, 2.07461e-05, 0, 0, 0.999692, 3.02493e-05, 0, 0, 0.999554, 4.54957e-05, 0, 9.97275e-05, 0.999326, 6.90762e-05, 0, 0.000724813, 0.998757, 0.000101605, 0, 0.0020972, 0.995367, 9.58745e-05, 0, 0.00432324, 0.99209, 8.32808e-05, 0, 0.00746347, 0.989517, 8.87601e-05, 0, 0.0115534, 0.987008, 0.00010564, 0, 0.0166134, 0.98421, 0.000133179, 0, 0.0226552, 0.98021, 0.000161746, 0, 0.0296838, 0.973676, 0.000161821, 0, 0.0377016, 0.967052, 0.000178635, 0, 0.0467079, 0.959385, 0.000206765, 0, 0.0567013, 0.949461, 0.00022476, 0, 0.0676796, 0.939578, 0.00023574, 0, 0.0796403, 0.932416, 0.00025893, 0, 0.0925812, 0.923759, 0.000271228, 0, 0.106501, 0.914223, 0.000289165, 0, 0.121397, 0.902942, 0.000301156, 0, 0.13727, 0.890419, 0.000313852, 0, 0.15412, 0.876639, 0.000324408, 0, 0.171946, 0.861316, 0.00033249, 0, 0.190751, 0.84496, 0.000338497, 0, 0.210537, 0.828427, 0.000345861, 0, 0.231305, 0.811871, 0.000347863, 0, 0.253057, 0.794397, 0.000350225, 0, 0.275797, 0.775726, 0.000349915, 0, 0.299525, 0.75617, 0.000347297, 0, 0.324242, 0.736091, 0.000344232, 0, 0.349947, 0.716213, 0.000340835, 0, 0.376633, 0.695736, 0.000332369, 0, 0.404289, 0.674961, 0.000327943, 0, 0.432895, 0.653518, 0.000318533, 0, 0.462415, 0.632574, 0.000310391, 0, 0.492788, 0.61134, 0.000300755, 0, 0.523909, 0.590017, 0.000290506, 0, 0.555556, 0.568752, 0.000280446, 0, 0.587302, 0.548061, 0.000269902, 0, 0.619048, 0.52711, 0.000258815, 0, 0.650794, 0.506682, 0.000248481, 0, 0.68254, 0.486524, 0.000237141, 0, 0.714286, 0.466812, 0.000226872, 0, 0.746032, 0.44732, 0.000216037, 0, 0.777778, 0.428473, 0.000205629, 0, 0.809524, 0.409921, 0.000195691, 0, 0.84127, 0.392028, 0.000185457, 0, 0.873016, 0.374606, 0.000176436, 0, 0.904762, 0.357601, 0.000166508, 0, 0.936508, 0.341348, 0.000158385, 0, 0.968254, 0.32542, 0.000149203, 0, 1, 1, 1.03967e-05, 0, 0, 1, 1.0397e-05, 0, 0, 1, 1.04019e-05, 0, 0, 0.999999, 1.04231e-05, 0, 0, 0.999998, 1.04806e-05, 0, 0, 0.999995, 1.06042e-05, 0, 0, 0.999991, 1.08366e-05, 0, 0, 0.999982, 1.12415e-05, 0, 0, 0.999968, 1.19174e-05, 0, 0, 0.99995, 1.30227e-05, 0, 0, 0.999922, 1.48176e-05, 0, 0, 0.999884, 1.77303e-05, 0, 0, 0.99983, 2.24564e-05, 0, 0, 0.999758, 3.00966e-05, 0, 0, 0.999654, 4.23193e-05, 0, 5.49083e-06, 0.999503, 6.14848e-05, 0, 0.000296087, 0.999237, 9.03576e-05, 0, 0.00123144, 0.998491, 0.0001271, 0, 0.00295954, 0.994594, 0.000107754, 0, 0.00555829, 0.99178, 0.000103025, 0, 0.00907209, 0.989265, 0.00011154, 0, 0.0135257, 0.986998, 0.000136296, 0, 0.0189327, 0.984137, 0.000169154, 0, 0.0252993, 0.979798, 0.000196671, 0, 0.0326272, 0.97337, 0.000196678, 0, 0.0409157, 0.967239, 0.000223121, 0, 0.0501623, 0.959543, 0.000253809, 0, 0.0603638, 0.949466, 0.000265972, 0, 0.0715171, 0.939074, 0.000288372, 0, 0.0836187, 0.931118, 0.000310983, 0, 0.0966657, 0.922525, 0.000325561, 0, 0.110656, 0.912983, 0.000345725, 0, 0.125588, 0.901617, 0.0003556, 0, 0.141461, 0.889487, 0.000374012, 0, 0.158275, 0.875787, 0.000383445, 0, 0.176031, 0.860654, 0.000393972, 0, 0.19473, 0.844417, 0.000400311, 0, 0.214374, 0.82741, 0.000405004, 0, 0.234967, 0.810545, 0.000407378, 0, 0.256512, 0.793312, 0.000407351, 0, 0.279011, 0.774847, 0.000406563, 0, 0.302468, 0.755621, 0.000404903, 0, 0.326887, 0.735511, 0.000397486, 0, 0.352266, 0.715435, 0.00039357, 0, 0.378605, 0.695403, 0.000384739, 0, 0.405897, 0.674681, 0.000376108, 0, 0.43413, 0.65359, 0.000365997, 0, 0.463277, 0.632471, 0.000354957, 0, 0.493295, 0.61151, 0.000343593, 0, 0.524106, 0.59064, 0.000331841, 0, 0.555561, 0.569386, 0.000318891, 0, 0.587302, 0.548785, 0.0003072, 0, 0.619048, 0.528146, 0.00029361, 0, 0.650794, 0.507872, 0.000281709, 0, 0.68254, 0.487805, 0.000268627, 0, 0.714286, 0.468196, 0.000255887, 0, 0.746032, 0.448922, 0.000243997, 0, 0.777778, 0.430093, 0.000231662, 0, 0.809524, 0.411845, 0.000220339, 0, 0.84127, 0.393808, 0.000208694, 0, 0.873016, 0.376615, 0.000198045, 0, 0.904762, 0.359655, 0.000187375, 0, 0.936508, 0.343452, 0.000177371, 0, 0.968254, 0.32765, 0.000167525, 0, 1, 1, 1.69351e-05, 0, 0, 1, 1.69356e-05, 0, 0, 1, 1.69427e-05, 0, 0, 0.999999, 1.69736e-05, 0, 0, 0.999998, 1.70575e-05, 0, 0, 0.999995, 1.72372e-05, 0, 0, 0.99999, 1.75739e-05, 0, 0, 0.999979, 1.81568e-05, 0, 0, 0.999966, 1.91206e-05, 0, 0, 0.999944, 2.0677e-05, 0, 0, 0.999912, 2.31644e-05, 0, 0, 0.999869, 2.71268e-05, 0, 0, 0.999811, 3.34272e-05, 0, 0, 0.99973, 4.33979e-05, 0, 0, 0.999617, 5.90083e-05, 0, 6.80315e-05, 0.999445, 8.29497e-05, 0, 0.000612796, 0.999138, 0.000118019, 0, 0.00187408, 0.998095, 0.000156712, 0, 0.00395791, 0.993919, 0.000125054, 0, 0.00692144, 0.991333, 0.000126091, 0, 0.0107962, 0.989226, 0.000144912, 0, 0.0155986, 0.986954, 0.000175737, 0, 0.0213364, 0.983982, 0.000213883, 0, 0.0280114, 0.979128, 0.000234526, 0, 0.0356226, 0.973327, 0.000243725, 0, 0.0441668, 0.967416, 0.0002773, 0, 0.0536399, 0.959729, 0.000308799, 0, 0.0640376, 0.949758, 0.000322447, 0, 0.0753554, 0.939173, 0.000350021, 0, 0.0875893, 0.9296, 0.000370089, 0, 0.100736, 0.921181, 0.000391365, 0, 0.114793, 0.91164, 0.000413636, 0, 0.129759, 0.900435, 0.000427068, 0, 0.145632, 0.888183, 0.000441046, 0, 0.162412, 0.874772, 0.000454968, 0, 0.180101, 0.859566, 0.000461882, 0, 0.1987, 0.843579, 0.000471556, 0, 0.218213, 0.826453, 0.000474335, 0, 0.238641, 0.809164, 0.000477078, 0, 0.259989, 0.792179, 0.00047755, 0, 0.282262, 0.773866, 0.000472573, 0, 0.305464, 0.754944, 0.000469765, 0, 0.329599, 0.735133, 0.000462371, 0, 0.35467, 0.714858, 0.000453674, 0, 0.380678, 0.694829, 0.000443888, 0, 0.407622, 0.674453, 0.000432052, 0, 0.435493, 0.653685, 0.000420315, 0, 0.464275, 0.632666, 0.000406829, 0, 0.493938, 0.611676, 0.000392234, 0, 0.524422, 0.591193, 0.000379208, 0, 0.555624, 0.570145, 0.00036319, 0, 0.587302, 0.549566, 0.000349111, 0, 0.619048, 0.529278, 0.000334166, 0, 0.650794, 0.509026, 0.000318456, 0, 0.68254, 0.489186, 0.00030449, 0, 0.714286, 0.469662, 0.000289051, 0, 0.746032, 0.450691, 0.000275494, 0, 0.777778, 0.431841, 0.000261437, 0, 0.809524, 0.413752, 0.000247846, 0, 0.84127, 0.395951, 0.000235085, 0, 0.873016, 0.378633, 0.000222245, 0, 0.904762, 0.36194, 0.000210533, 0, 0.936508, 0.345599, 0.000198494, 0, 0.968254, 0.329999, 0.000188133, 0, 1, 1, 2.69663e-05, 0, 0, 1, 2.6967e-05, 0, 0, 1, 2.69772e-05, 0, 0, 0.999999, 2.70214e-05, 0, 0, 0.999998, 2.71415e-05, 0, 0, 0.999994, 2.7398e-05, 0, 0, 0.999988, 2.78771e-05, 0, 0, 0.999977, 2.87019e-05, 0, 0, 0.999961, 3.00544e-05, 0, 0, 0.999937, 3.22138e-05, 0, 0, 0.999904, 3.56163e-05, 0, 0, 0.999854, 4.09465e-05, 0, 0, 0.99979, 4.92651e-05, 0, 0, 0.999699, 6.21722e-05, 0, 8.8288e-07, 0.999572, 8.19715e-05, 0, 0.000223369, 0.999381, 0.000111689, 0, 0.00105414, 0.999016, 0.000153862, 0, 0.0026493, 0.997437, 0.000187667, 0, 0.00508608, 0.993545, 0.000155672, 0, 0.00840554, 0.991135, 0.000161455, 0, 0.012629, 0.989157, 0.000188241, 0, 0.0177661, 0.986874, 0.000226229, 0, 0.0238198, 0.983714, 0.000268668, 0, 0.0307887, 0.978301, 0.000277109, 0, 0.0386688, 0.973227, 0.000303446, 0, 0.0474554, 0.967317, 0.000341851, 0, 0.0571428, 0.959477, 0.000370885, 0, 0.0677256, 0.950012, 0.000392753, 0, 0.0791988, 0.939484, 0.00042781, 0, 0.0915576, 0.928135, 0.000443866, 0, 0.104798, 0.919819, 0.000472959, 0, 0.118918, 0.910049, 0.000491551, 0, 0.133915, 0.899181, 0.000512616, 0, 0.149788, 0.886881, 0.000523563, 0, 0.166537, 0.87359, 0.000540183, 0, 0.184164, 0.858613, 0.000547386, 0, 0.202669, 0.842809, 0.000554809, 0, 0.222056, 0.825727, 0.000558316, 0, 0.242329, 0.808086, 0.000557824, 0, 0.263492, 0.790728, 0.000556346, 0, 0.285551, 0.772987, 0.000552672, 0, 0.30851, 0.7541, 0.000543738, 0, 0.332376, 0.734669, 0.000536107, 0, 0.357153, 0.714411, 0.000523342, 0, 0.382845, 0.694196, 0.000512238, 0, 0.409454, 0.674252, 0.000497465, 0, 0.436977, 0.65357, 0.000481096, 0, 0.465404, 0.632999, 0.000467054, 0, 0.494713, 0.611994, 0.000448771, 0, 0.524864, 0.591604, 0.000431889, 0, 0.555779, 0.571134, 0.000415238, 0, 0.587302, 0.550528, 0.000396369, 0, 0.619048, 0.530292, 0.000379477, 0, 0.650794, 0.510364, 0.000361488, 0, 0.68254, 0.490749, 0.000343787, 0, 0.714286, 0.471266, 0.000327822, 0, 0.746032, 0.452462, 0.000310626, 0, 0.777778, 0.433907, 0.000295352, 0, 0.809524, 0.415659, 0.000279179, 0, 0.84127, 0.398138, 0.000264685, 0, 0.873016, 0.380833, 0.000249905, 0, 0.904762, 0.364247, 0.000236282, 0, 0.936508, 0.348041, 0.000222905, 0, 0.968254, 0.332389, 0.000210522, 0, 1, 1, 4.20604e-05, 0, 0, 1, 4.20614e-05, 0, 0, 1, 4.20757e-05, 0, 0, 0.999999, 4.2138e-05, 0, 0, 0.999997, 4.23067e-05, 0, 0, 0.999993, 4.26668e-05, 0, 0, 0.999986, 4.33372e-05, 0, 0, 0.999974, 4.44857e-05, 0, 0, 0.999956, 4.63554e-05, 0, 0, 0.99993, 4.93105e-05, 0, 0, 0.999892, 5.39077e-05, 0, 0, 0.999838, 6.10005e-05, 0, 0, 0.999767, 7.18822e-05, 0, 0, 0.999666, 8.84581e-05, 0, 3.65471e-05, 0.999525, 0.000113398, 0, 0.000485623, 0.999311, 0.000150043, 0, 0.00162096, 0.998865, 0.000200063, 0, 0.00355319, 0.996278, 0.000211014, 0, 0.00633818, 0.992956, 0.000189672, 0, 0.0100043, 0.991017, 0.000210262, 0, 0.0145648, 0.989055, 0.000244292, 0, 0.0200237, 0.986741, 0.000290481, 0, 0.0263798, 0.983288, 0.000334303, 0, 0.033629, 0.977784, 0.000340307, 0, 0.0417652, 0.973037, 0.000377864, 0, 0.0507821, 0.967181, 0.0004239, 0, 0.060673, 0.958971, 0.000443854, 0, 0.0714314, 0.950093, 0.000483039, 0, 0.0830518, 0.939552, 0.000517934, 0, 0.0955288, 0.927678, 0.000539449, 0, 0.108859, 0.918278, 0.000568604, 0, 0.123038, 0.908449, 0.000588505, 0, 0.138065, 0.897713, 0.000612473, 0, 0.153938, 0.885533, 0.000625575, 0, 0.170657, 0.872131, 0.00063854, 0, 0.188224, 0.857517, 0.000647034, 0, 0.20664, 0.841796, 0.00065209, 0, 0.225909, 0.824726, 0.0006544, 0, 0.246035, 0.807297, 0.000655744, 0, 0.267022, 0.789058, 0.000646716, 0, 0.288878, 0.77189, 0.000643898, 0, 0.311607, 0.753082, 0.000629973, 0, 0.335216, 0.7341, 0.000621564, 0, 0.359713, 0.714094, 0.000605171, 0, 0.385103, 0.693839, 0.000588752, 0, 0.41139, 0.673891, 0.000573294, 0, 0.438576, 0.653565, 0.000552682, 0, 0.466656, 0.633326, 0.000533446, 0, 0.495617, 0.612582, 0.000514635, 0, 0.525431, 0.59205, 0.00049303, 0, 0.556041, 0.571918, 0.000471842, 0, 0.587338, 0.551572, 0.000451713, 0, 0.619048, 0.531553, 0.000430049, 0, 0.650794, 0.51175, 0.000410445, 0, 0.68254, 0.49238, 0.000390098, 0, 0.714286, 0.473143, 0.000370033, 0, 0.746032, 0.45423, 0.000351205, 0, 0.777778, 0.435963, 0.000332049, 0, 0.809524, 0.41787, 0.000315021, 0, 0.84127, 0.400387, 0.000297315, 0, 0.873016, 0.383332, 0.000281385, 0, 0.904762, 0.366665, 0.000265397, 0, 0.936508, 0.350633, 0.000250601, 0, 0.968254, 0.334964, 0.00023589, 0, 1, 1, 6.43736e-05, 0, 0, 1, 6.4375e-05, 0, 0, 1, 6.43947e-05, 0, 0, 0.999999, 6.4481e-05, 0, 0, 0.999997, 6.47143e-05, 0, 0, 0.999994, 6.52119e-05, 0, 0, 0.999985, 6.61359e-05, 0, 0, 0.999972, 6.77116e-05, 0, 0, 0.999952, 7.02599e-05, 0, 0, 0.999922, 7.42517e-05, 0, 0, 0.99988, 8.03906e-05, 0, 0, 0.99982, 8.97315e-05, 0, 0, 0.999741, 0.000103838, 0, 0, 0.999629, 0.00012496, 0, 0.000149024, 0.999474, 0.000156161, 0, 0.000861027, 0.999229, 0.000201034, 0, 0.00231198, 0.998662, 0.000259069, 0, 0.00458147, 0.995299, 0.000245439, 0, 0.00770895, 0.992732, 0.00024498, 0, 0.0117126, 0.990847, 0.000273211, 0, 0.0165989, 0.988911, 0.000316492, 0, 0.0223674, 0.98654, 0.00037161, 0, 0.0290135, 0.982636, 0.000410352, 0, 0.0365309, 0.977346, 0.000421756, 0, 0.0449117, 0.972909, 0.000475578, 0, 0.0541481, 0.966821, 0.000522482, 0, 0.0642326, 0.958686, 0.000545008, 0, 0.075158, 0.949754, 0.000589286, 0, 0.0869181, 0.939184, 0.000619995, 0, 0.0995074, 0.927505, 0.000654266, 0, 0.112922, 0.916606, 0.000682362, 0, 0.127157, 0.906707, 0.000704286, 0, 0.142212, 0.895937, 0.000725909, 0, 0.158085, 0.883913, 0.000743939, 0, 0.174776, 0.870642, 0.000755157, 0, 0.192287, 0.856241, 0.000764387, 0, 0.210619, 0.84069, 0.000771032, 0, 0.229775, 0.823728, 0.000765906, 0, 0.249761, 0.806481, 0.000767604, 0, 0.270582, 0.787924, 0.000754385, 0, 0.292243, 0.770588, 0.000749668, 0, 0.314753, 0.751991, 0.000731613, 0, 0.338118, 0.733407, 0.000717655, 0, 0.362347, 0.713688, 0.000700604, 0, 0.387447, 0.693595, 0.000678765, 0, 0.413424, 0.673426, 0.000657042, 0, 0.440284, 0.65359, 0.000635892, 0, 0.468027, 0.633576, 0.000611569, 0, 0.496645, 0.613144, 0.000586011, 0, 0.526122, 0.592711, 0.000563111, 0, 0.556417, 0.572722, 0.000537699, 0, 0.587451, 0.552762, 0.000512556, 0, 0.619048, 0.532985, 0.000489757, 0, 0.650794, 0.513219, 0.000464139, 0, 0.68254, 0.493992, 0.000442193, 0, 0.714286, 0.47509, 0.000418629, 0, 0.746032, 0.456287, 0.000397045, 0, 0.777778, 0.438152, 0.000375504, 0, 0.809524, 0.420294, 0.00035492, 0, 0.84127, 0.402749, 0.000335327, 0, 0.873016, 0.385879, 0.000316422, 0, 0.904762, 0.369352, 0.000298333, 0, 0.936508, 0.353301, 0.000281417, 0, 0.968254, 0.337781, 0.000265203, 0, 1, 1, 9.68267e-05, 0, 0, 1, 9.68284e-05, 0, 0, 1, 9.68556e-05, 0, 0, 0.999999, 9.69733e-05, 0, 0, 0.999997, 9.72913e-05, 0, 0, 0.999993, 9.79688e-05, 0, 0, 0.999984, 9.92239e-05, 0, 0, 0.999969, 0.000101356, 0, 0, 0.999946, 0.000104784, 0, 0, 0.999913, 0.000110111, 0, 0, 0.999868, 0.000118217, 0, 0, 0.999801, 0.000130396, 0, 0, 0.999712, 0.000148523, 0, 1.24907e-05, 0.999589, 0.000175233, 0, 0.000355405, 0.999416, 0.000213999, 0, 0.0013528, 0.999136, 0.000268529, 0, 0.00312557, 0.998367, 0.000333088, 0, 0.00573045, 0.994701, 0.000304757, 0, 0.00919397, 0.992497, 0.000318031, 0, 0.0135261, 0.990608, 0.000353863, 0, 0.0187278, 0.988715, 0.000409044, 0, 0.0247947, 0.986241, 0.000472967, 0, 0.0317196, 0.981696, 0.000495104, 0, 0.039494, 0.977097, 0.000532873, 0, 0.0481087, 0.972583, 0.000594447, 0, 0.0575549, 0.966142, 0.000636867, 0, 0.0678242, 0.95823, 0.000669899, 0, 0.0789089, 0.949677, 0.000719499, 0, 0.0908023, 0.939226, 0.000750584, 0, 0.103499, 0.927501, 0.000793183, 0, 0.116993, 0.915199, 0.00081995, 0, 0.131282, 0.90498, 0.000847654, 0, 0.146364, 0.894243, 0.000868929, 0, 0.162237, 0.882154, 0.000884278, 0, 0.178902, 0.869161, 0.000898108, 0, 0.196358, 0.854751, 0.000901254, 0, 0.21461, 0.839368, 0.00090679, 0, 0.23366, 0.822874, 0.000901541, 0, 0.253512, 0.805514, 0.000897297, 0, 0.274174, 0.78716, 0.000881856, 0, 0.29565, 0.769061, 0.000870032, 0, 0.31795, 0.751, 0.000851719, 0, 0.341081, 0.732614, 0.000830671, 0, 0.365053, 0.713171, 0.000806569, 0, 0.389874, 0.693472, 0.00078338, 0, 0.415553, 0.673528, 0.000756404, 0, 0.442098, 0.653397, 0.000726872, 0, 0.469512, 0.633781, 0.000700494, 0, 0.497794, 0.613877, 0.00067105, 0, 0.526935, 0.593506, 0.000640361, 0, 0.556908, 0.573667, 0.000613502, 0, 0.587657, 0.553932, 0.000583177, 0, 0.61906, 0.534345, 0.000554375, 0, 0.650794, 0.515042, 0.000527811, 0, 0.68254, 0.495674, 0.000499367, 0, 0.714286, 0.477132, 0.00047429, 0, 0.746032, 0.458609, 0.000447726, 0, 0.777778, 0.440354, 0.000424205, 0, 0.809524, 0.422765, 0.000399549, 0, 0.84127, 0.405472, 0.000378315, 0, 0.873016, 0.388482, 0.000355327, 0, 0.904762, 0.372191, 0.000336122, 0, 0.936508, 0.356099, 0.000315247, 0, 0.968254, 0.340737, 0.00029794, 0, 1, 1, 0.000143327, 0, 0, 1, 0.00014333, 0, 0, 1, 0.000143366, 0, 0, 0.999999, 0.000143524, 0, 0, 0.999996, 0.000143952, 0, 0, 0.999991, 0.000144862, 0, 0, 0.999981, 0.000146544, 0, 0, 0.999966, 0.000149391, 0, 0, 0.999941, 0.000153946, 0, 0, 0.999905, 0.000160971, 0, 0, 0.999852, 0.000171562, 0, 0, 0.99978, 0.00018729, 0, 0, 0.999681, 0.000210386, 0, 8.26239e-05, 0.999546, 0.000243906, 0, 0.000664807, 0.999352, 0.000291739, 0, 0.00196192, 0.999027, 0.000357419, 0, 0.00405941, 0.997886, 0.000422349, 0, 0.00699664, 0.99419, 0.000385008, 0, 0.0107896, 0.99214, 0.000409775, 0, 0.0154415, 0.990274, 0.000456418, 0, 0.0209488, 0.988455, 0.000527008, 0, 0.0273037, 0.985804, 0.000597685, 0, 0.0344969, 0.98103, 0.000613124, 0, 0.0425183, 0.976674, 0.000668321, 0, 0.0513575, 0.972021, 0.000736985, 0, 0.0610046, 0.965274, 0.000773789, 0, 0.0714508, 0.958046, 0.000830852, 0, 0.0826877, 0.949333, 0.000875766, 0, 0.0947085, 0.939135, 0.000917088, 0, 0.107507, 0.927119, 0.000952244, 0, 0.121078, 0.91469, 0.000990626, 0, 0.135419, 0.903006, 0.00101304, 0, 0.150526, 0.892368, 0.00103834, 0, 0.166399, 0.880231, 0.00105002, 0, 0.183038, 0.867432, 0.00106331, 0, 0.200443, 0.853208, 0.00106783, 0, 0.218618, 0.837956, 0.00106458, 0, 0.237566, 0.821772, 0.00105945, 0, 0.257291, 0.804328, 0.00104685, 0, 0.2778, 0.786465, 0.00103178, 0, 0.2991, 0.768004, 0.00101077, 0, 0.321199, 0.74972, 0.000985504, 0, 0.344106, 0.731682, 0.000962893, 0, 0.36783, 0.712813, 0.000932146, 0, 0.392383, 0.693139, 0.00089871, 0, 0.417774, 0.673566, 0.000869678, 0, 0.444013, 0.653483, 0.000835525, 0, 0.471107, 0.633891, 0.000799853, 0, 0.49906, 0.614433, 0.000766838, 0, 0.527869, 0.594586, 0.000732227, 0, 0.557517, 0.574769, 0.000696442, 0, 0.587966, 0.555149, 0.000663935, 0, 0.61913, 0.535898, 0.000629826, 0, 0.650794, 0.516753, 0.000596486, 0, 0.68254, 0.497816, 0.000567078, 0, 0.714286, 0.479034, 0.000534399, 0, 0.746032, 0.460975, 0.000507013, 0, 0.777778, 0.442935, 0.000477421, 0, 0.809524, 0.425263, 0.000451101, 0, 0.84127, 0.408248, 0.000424964, 0, 0.873016, 0.391339, 0.00039993, 0, 0.904762, 0.37513, 0.000377619, 0, 0.936508, 0.359172, 0.000354418, 0, 0.968254, 0.343876, 0.000334823, 0, 1, 1, 0.000209042, 0, 0, 1, 0.000209045, 0, 0, 1, 0.000209093, 0, 0, 0.999999, 0.000209304, 0, 0, 0.999996, 0.000209871, 0, 0, 0.999991, 0.000211078, 0, 0, 0.999979, 0.000213304, 0, 0, 0.999963, 0.000217061, 0, 0, 0.999933, 0.000223042, 0, 0, 0.999894, 0.000232206, 0, 0, 0.999837, 0.000245901, 0, 0, 0.999756, 0.000266023, 0, 1.02927e-06, 0.999648, 0.000295204, 0, 0.000233468, 0.999499, 0.000336958, 0, 0.00108237, 0.999283, 0.000395563, 0, 0.00268832, 0.998896, 0.000473785, 0, 0.00511138, 0.997006, 0.000520008, 0, 0.00837705, 0.993819, 0.000497261, 0, 0.0124928, 0.991632, 0.000523722, 0, 0.0174561, 0.989875, 0.000587258, 0, 0.0232596, 0.988109, 0.000676329, 0, 0.0298932, 0.985155, 0.000747701, 0, 0.0373453, 0.980479, 0.000768803, 0, 0.0456045, 0.976271, 0.000841054, 0, 0.0546593, 0.971347, 0.000911469, 0, 0.0644994, 0.964528, 0.000953057, 0, 0.0751152, 0.957632, 0.00102221, 0, 0.0864981, 0.948681, 0.00106122, 0, 0.0986407, 0.938716, 0.00111857, 0, 0.111537, 0.926629, 0.00114762, 0, 0.125182, 0.914025, 0.00118995, 0, 0.139571, 0.901026, 0.00121228, 0, 0.154703, 0.890358, 0.00123946, 0, 0.170576, 0.878283, 0.0012527, 0, 0.18719, 0.865459, 0.00125536, 0, 0.204547, 0.851407, 0.00126134, 0, 0.222648, 0.836276, 0.00124759, 0, 0.241498, 0.820436, 0.00124443, 0, 0.261101, 0.803253, 0.00122071, 0, 0.281465, 0.785562, 0.00120107, 0, 0.302595, 0.76718, 0.00117762, 0, 0.324501, 0.748551, 0.00114289, 0, 0.347192, 0.730564, 0.00110872, 0, 0.370679, 0.712253, 0.00107636, 0, 0.394973, 0.692867, 0.00103646, 0, 0.420085, 0.673695, 0.000996793, 0, 0.446027, 0.653912, 0.00095675, 0, 0.47281, 0.634129, 0.000916739, 0, 0.500441, 0.615004, 0.000874401, 0, 0.528921, 0.595587, 0.000833411, 0, 0.558244, 0.575965, 0.000794556, 0, 0.588384, 0.5566, 0.00075196, 0, 0.619281, 0.537428, 0.000716381, 0, 0.650795, 0.518623, 0.000676558, 0, 0.68254, 0.499964, 0.00064074, 0, 0.714286, 0.481356, 0.000605984, 0, 0.746032, 0.463279, 0.000570256, 0, 0.777778, 0.445673, 0.000540138, 0, 0.809524, 0.428032, 0.000507299, 0, 0.84127, 0.411112, 0.000479553, 0, 0.873016, 0.394444, 0.000450737, 0, 0.904762, 0.378247, 0.000424269, 0, 0.936508, 0.362415, 0.000399111, 0, 0.968254, 0.347103, 0.000375274, 0, 1, 1, 0.000300729, 0, 0, 1, 0.000300733, 0, 0, 1, 0.000300797, 0, 0, 0.999998, 0.000301072, 0, 0, 0.999996, 0.000301817, 0, 0, 0.999989, 0.000303398, 0, 0, 0.999977, 0.000306309, 0, 0, 0.999958, 0.000311209, 0, 0, 0.999927, 0.000318975, 0, 0, 0.999884, 0.000330804, 0, 0, 0.99982, 0.00034834, 0, 0, 0.999733, 0.000373854, 0, 3.26995e-05, 0.999613, 0.000410424, 0, 0.000477174, 0.999447, 0.000462047, 0, 0.00161099, 0.999204, 0.000533322, 0, 0.00353153, 0.998725, 0.000624964, 0, 0.00627965, 0.995871, 0.000631786, 0, 0.0098693, 0.993194, 0.000632017, 0, 0.0143011, 0.991541, 0.00068923, 0, 0.019568, 0.989773, 0.000766892, 0, 0.0256593, 0.987647, 0.000863668, 0, 0.0325625, 0.984193, 0.000922089, 0, 0.0402647, 0.980016, 0.000970749, 0, 0.0487532, 0.975859, 0.00106027, 0, 0.058016, 0.970514, 0.00112239, 0, 0.0680419, 0.963625, 0.00117212, 0, 0.0788208, 0.956959, 0.00125211, 0, 0.0903439, 0.947956, 0.00129411, 0, 0.102604, 0.93809, 0.00135879, 0, 0.115594, 0.92659, 0.00139309, 0, 0.129309, 0.913829, 0.00143253, 0, 0.143745, 0.90005, 0.00145809, 0, 0.158901, 0.888129, 0.0014748, 0, 0.174774, 0.87607, 0.00148756, 0, 0.191365, 0.863461, 0.00148714, 0, 0.208674, 0.849594, 0.00148892, 0, 0.226705, 0.834531, 0.00146496, 0, 0.245461, 0.81903, 0.0014579, 0, 0.264947, 0.802122, 0.00143039, 0, 0.28517, 0.78445, 0.00139717, 0, 0.306137, 0.766434, 0.00136312, 0, 0.327857, 0.747816, 0.00132597, 0, 0.350341, 0.729519, 0.00128323, 0, 0.373598, 0.711454, 0.00123803, 0, 0.397642, 0.692699, 0.00119097, 0, 0.422485, 0.673723, 0.00114565, 0, 0.448139, 0.654386, 0.00109552, 0, 0.474619, 0.634673, 0.00104553, 0, 0.501933, 0.615554, 0.00099985, 0, 0.530089, 0.596462, 0.000948207, 0, 0.559087, 0.577385, 0.000902299, 0, 0.588913, 0.558257, 0.000856448, 0, 0.619525, 0.5392, 0.000810395, 0, 0.650826, 0.520543, 0.000768558, 0, 0.68254, 0.502206, 0.0007239, 0, 0.714286, 0.48402, 0.000685794, 0, 0.746032, 0.465779, 0.00064471, 0, 0.777778, 0.448455, 0.000609583, 0, 0.809524, 0.431091, 0.00057227, 0, 0.84127, 0.414147, 0.00054042, 0, 0.873016, 0.39765, 0.000506545, 0, 0.904762, 0.381576, 0.000477635, 0, 0.936508, 0.365881, 0.000448446, 0, 0.968254, 0.350582, 0.000421424, 0, 1, 1, 0.000427144, 0, 0, 1, 0.000427151, 0, 0, 1, 0.000427232, 0, 0, 0.999998, 0.00042759, 0, 0, 0.999995, 0.000428555, 0, 0, 0.999988, 0.000430603, 0, 0, 0.999976, 0.000434368, 0, 0, 0.999952, 0.000440688, 0, 0, 0.999919, 0.000450667, 0, 0, 0.999871, 0.00046578, 0, 0, 0.999801, 0.000488024, 0, 0, 0.999704, 0.000520092, 0, 0.000129791, 0.999572, 0.000565553, 0, 0.000821056, 0.999389, 0.000628906, 0, 0.00225241, 0.999114, 0.000714911, 0, 0.00449109, 0.998488, 0.000819218, 0, 0.00756249, 0.995234, 0.00080415, 0, 0.0114716, 0.993021, 0.000830181, 0, 0.0162131, 0.991407, 0.000902645, 0, 0.021776, 0.989625, 0.000996934, 0, 0.0281471, 0.987064, 0.00109707, 0, 0.0353118, 0.983265, 0.00114353, 0, 0.0432562, 0.979535, 0.0012272, 0, 0.0519665, 0.975224, 0.00132642, 0, 0.0614298, 0.969574, 0.00138092, 0, 0.0716348, 0.963021, 0.00145896, 0, 0.0825709, 0.956046, 0.00152834, 0, 0.094229, 0.947136, 0.00158217, 0, 0.106602, 0.937313, 0.0016347, 0, 0.119682, 0.926073, 0.00168383, 0, 0.133465, 0.913121, 0.00171627, 0, 0.147947, 0.899165, 0.00174229, 0, 0.163125, 0.885891, 0.00176137, 0, 0.178998, 0.873783, 0.00176406, 0, 0.195566, 0.861331, 0.00176156, 0, 0.21283, 0.847569, 0.00175346, 0, 0.230793, 0.832785, 0.00172753, 0, 0.249459, 0.817442, 0.00170204, 0, 0.268832, 0.800613, 0.00166576, 0, 0.28892, 0.783597, 0.00162909, 0, 0.30973, 0.76571, 0.0015826, 0, 0.331271, 0.747021, 0.00153106, 0, 0.353554, 0.728593, 0.00148036, 0, 0.37659, 0.710661, 0.00142808, 0, 0.400391, 0.692426, 0.00136906, 0, 0.424973, 0.673623, 0.00131066, 0, 0.450347, 0.65494, 0.00125569, 0, 0.476531, 0.635448, 0.00119517, 0, 0.503535, 0.616221, 0.00113828, 0, 0.531372, 0.597531, 0.0010816, 0, 0.560047, 0.578795, 0.00102673, 0, 0.589554, 0.559892, 0.000970985, 0, 0.619869, 0.541307, 0.000919773, 0, 0.650923, 0.522608, 0.000868479, 0, 0.68254, 0.504484, 0.00082137, 0, 0.714286, 0.486603, 0.000772916, 0, 0.746032, 0.468802, 0.000730353, 0, 0.777778, 0.451172, 0.000684955, 0, 0.809524, 0.434348, 0.000647565, 0, 0.84127, 0.417445, 0.000605863, 0, 0.873016, 0.401077, 0.000571885, 0, 0.904762, 0.385039, 0.000536034, 0, 0.936508, 0.369483, 0.000504227, 0, 0.968254, 0.354272, 0.000473165, 0, 1, 1, 0.000599525, 0, 0, 1, 0.000599533, 0, 0, 1, 0.000599639, 0, 0, 0.999998, 0.000600097, 0, 0, 0.999994, 0.000601336, 0, 0, 0.999987, 0.000603958, 0, 0, 0.999972, 0.000608775, 0, 0, 0.999949, 0.000616842, 0, 0, 0.999912, 0.000629534, 0, 0, 0.999857, 0.000648658, 0, 0, 0.999781, 0.000676615, 0, 5.38873e-06, 0.999674, 0.000716574, 0, 0.000308602, 0.999528, 0.000772641, 0, 0.00127003, 0.999326, 0.000849806, 0, 0.00300783, 0.999009, 0.000952682, 0, 0.00556637, 0.998112, 0.00106394, 0, 0.00895889, 0.994496, 0.00102228, 0, 0.0131827, 0.992806, 0.00108586, 0, 0.0182277, 0.991211, 0.0011759, 0, 0.0240795, 0.989415, 0.00128955, 0, 0.030723, 0.986499, 0.00139038, 0, 0.0381418, 0.982679, 0.00144539, 0, 0.046321, 0.978839, 0.00153954, 0, 0.0552459, 0.974295, 0.00164417, 0, 0.0649034, 0.968784, 0.00171517, 0, 0.0752814, 0.962324, 0.00180282, 0, 0.0863693, 0.954956, 0.00186387, 0, 0.0981578, 0.94624, 0.00193817, 0, 0.110639, 0.936517, 0.00198156, 0, 0.123806, 0.925186, 0.00203042, 0, 0.137655, 0.91252, 0.0020664, 0, 0.15218, 0.898441, 0.00207822, 0, 0.16738, 0.884394, 0.0020992, 0, 0.183253, 0.871273, 0.00208748, 0, 0.199799, 0.859057, 0.00208686, 0, 0.21702, 0.845243, 0.00205519, 0, 0.234918, 0.830723, 0.00202868, 0, 0.253496, 0.815801, 0.00199501, 0, 0.272761, 0.79914, 0.00194193, 0, 0.292719, 0.782372, 0.00188824, 0, 0.313377, 0.76482, 0.00183695, 0, 0.334745, 0.746586, 0.00177418, 0, 0.356833, 0.7281, 0.00170628, 0, 0.379654, 0.709842, 0.00164063, 0, 0.403221, 0.692019, 0.00157355, 0, 0.427548, 0.67364, 0.00150262, 0, 0.452651, 0.655277, 0.00143473, 0, 0.478545, 0.636438, 0.00136371, 0, 0.505246, 0.617364, 0.00129911, 0, 0.532768, 0.598603, 0.00123014, 0, 0.561122, 0.580195, 0.00116587, 0, 0.590309, 0.561786, 0.00110398, 0, 0.620318, 0.543377, 0.00104148, 0, 0.651102, 0.525093, 0.000983984, 0, 0.682545, 0.506791, 0.00092667, 0, 0.714286, 0.489291, 0.000874326, 0, 0.746032, 0.471811, 0.000821734, 0, 0.777778, 0.454435, 0.000774698, 0, 0.809524, 0.437493, 0.000727302, 0, 0.84127, 0.420977, 0.000684039, 0, 0.873016, 0.404729, 0.00064373, 0, 0.904762, 0.388756, 0.00060285, 0, 0.936508, 0.373344, 0.00056765, 0, 0.968254, 0.358191, 0.000531929, 0, 1, 1, 0.000832169, 0, 0, 1, 0.000832178, 0, 0, 1, 0.00083231, 0, 0, 0.999998, 0.000832893, 0, 0, 0.999995, 0.000834465, 0, 0, 0.999985, 0.000837791, 0, 0, 0.999969, 0.000843893, 0, 0, 0.999944, 0.000854086, 0, 0, 0.999903, 0.000870071, 0, 0, 0.999843, 0.000894042, 0, 0, 0.999759, 0.000928865, 0, 5.31805e-05, 0.999643, 0.000978242, 0, 0.000579365, 0.99948, 0.00104684, 0, 0.00182774, 0.999255, 0.00114012, 0, 0.00387804, 0.998885, 0.00126188, 0, 0.00675709, 0.997405, 0.00135888, 0, 0.010468, 0.99424, 0.00133626, 0, 0.0150018, 0.992458, 0.00140905, 0, 0.0203443, 0.990929, 0.00152305, 0, 0.0264786, 0.989116, 0.00165882, 0, 0.0333875, 0.985624, 0.00174128, 0, 0.0410536, 0.982003, 0.00182108, 0, 0.0494609, 0.978336, 0.00194498, 0, 0.0585941, 0.973184, 0.00202708, 0, 0.0684396, 0.9678, 0.00212166, 0, 0.0789851, 0.961348, 0.00221366, 0, 0.0902199, 0.953841, 0.00228219, 0, 0.102134, 0.94534, 0.00235662, 0, 0.114721, 0.935552, 0.00240572, 0, 0.127972, 0.924064, 0.00244405, 0, 0.141884, 0.911827, 0.00247557, 0, 0.156451, 0.897731, 0.00248374, 0, 0.171672, 0.883409, 0.00249863, 0, 0.187545, 0.868625, 0.00246688, 0, 0.20407, 0.856529, 0.00246523, 0, 0.221249, 0.842999, 0.00242368, 0, 0.239083, 0.828505, 0.00237354, 0, 0.257578, 0.813825, 0.00232588, 0, 0.276738, 0.797813, 0.00226731, 0, 0.296569, 0.781097, 0.00219704, 0, 0.31708, 0.764038, 0.00212394, 0, 0.338281, 0.746067, 0.00204786, 0, 0.360181, 0.727687, 0.00196728, 0, 0.382794, 0.709571, 0.00188779, 0, 0.406133, 0.691503, 0.00180532, 0, 0.430213, 0.673673, 0.00171849, 0, 0.45505, 0.655732, 0.00164147, 0, 0.480662, 0.637399, 0.00155858, 0, 0.507065, 0.618616, 0.00147641, 0, 0.534278, 0.60005, 0.00140125, 0, 0.562313, 0.581713, 0.00132441, 0, 0.59118, 0.563546, 0.00125014, 0, 0.620875, 0.545605, 0.00118249, 0, 0.651373, 0.527559, 0.0011116, 0, 0.682593, 0.509764, 0.00104979, 0, 0.714286, 0.49193, 0.000985977, 0, 0.746032, 0.475011, 0.000928592, 0, 0.777778, 0.457878, 0.000873466, 0, 0.809524, 0.440979, 0.000819585, 0, 0.84127, 0.424613, 0.000772365, 0, 0.873016, 0.408549, 0.000722195, 0, 0.904762, 0.392771, 0.000680014, 0, 0.936508, 0.377317, 0.000636797, 0, 0.968254, 0.362352, 0.000598318, 0, 1, 1, 0.00114313, 0, 0, 1, 0.00114314, 0, 0, 0.999999, 0.00114331, 0, 0, 0.999998, 0.00114404, 0, 0, 0.999994, 0.00114601, 0, 0, 0.999984, 0.00115019, 0, 0, 0.999967, 0.00115784, 0, 0, 0.999937, 0.0011706, 0, 0, 0.999894, 0.00119054, 0, 0, 0.999828, 0.00122031, 0, 0, 0.999735, 0.00126331, 0, 0.000169263, 0.999606, 0.00132382, 0, 0.000949167, 0.999426, 0.0014071, 0, 0.00249668, 0.999173, 0.00151895, 0, 0.00486392, 0.99873, 0.00166102, 0, 0.00806323, 0.996243, 0.0017023, 0, 0.0120895, 0.993779, 0.00172782, 0, 0.0169288, 0.9919, 0.0018108, 0, 0.0225633, 0.990524, 0.00196028, 0, 0.028974, 0.98868, 0.00212014, 0, 0.036142, 0.984663, 0.00217598, 0, 0.044049, 0.981457, 0.00230563, 0, 0.0526781, 0.977608, 0.00243966, 0, 0.0620137, 0.972215, 0.00251336, 0, 0.0720418, 0.966798, 0.0026285, 0, 0.0827499, 0.960241, 0.00271409, 0, 0.0941271, 0.952489, 0.00278381, 0, 0.106164, 0.944127, 0.00285399, 0, 0.118852, 0.934282, 0.00290994, 0, 0.132185, 0.923271, 0.00294558, 0, 0.146157, 0.910803, 0.00296269, 0, 0.160766, 0.896705, 0.00296803, 0, 0.176007, 0.88238, 0.00296637, 0, 0.19188, 0.867116, 0.00293163, 0, 0.208385, 0.853636, 0.00289418, 0, 0.225523, 0.840469, 0.00284663, 0, 0.243296, 0.82639, 0.00278594, 0, 0.261709, 0.811759, 0.00271618, 0, 0.280767, 0.796113, 0.00263187, 0, 0.300476, 0.779518, 0.00254589, 0, 0.320845, 0.763142, 0.00246003, 0, 0.341883, 0.745464, 0.00236529, 0, 0.363601, 0.727491, 0.00226536, 0, 0.386011, 0.709414, 0.00216375, 0, 0.409128, 0.691396, 0.00207127, 0, 0.432967, 0.67368, 0.00197106, 0, 0.457545, 0.656049, 0.00187022, 0, 0.482881, 0.638188, 0.00177605, 0, 0.508992, 0.620177, 0.00168482, 0, 0.535899, 0.601506, 0.00158909, 0, 0.563619, 0.58362, 0.00150583, 0, 0.592165, 0.565496, 0.00141791, 0, 0.621544, 0.54789, 0.00133693, 0, 0.651743, 0.530323, 0.00126038, 0, 0.682709, 0.512795, 0.00118556, 0, 0.714286, 0.495199, 0.00111527, 0, 0.746032, 0.478101, 0.0010489, 0, 0.777778, 0.461511, 0.000984264, 0, 0.809524, 0.444879, 0.00092591, 0, 0.84127, 0.428424, 0.000866582, 0, 0.873016, 0.412495, 0.000814463, 0, 0.904762, 0.396975, 0.000764498, 0, 0.936508, 0.381614, 0.000715967, 0, 0.968254, 0.366732, 0.000672483, 0, 1, 1, 0.00155501, 0, 0, 1, 0.00155503, 0, 0, 1, 0.00155524, 0, 0, 0.999998, 0.00155615, 0, 0, 0.999994, 0.0015586, 0, 0, 0.999983, 0.00156379, 0, 0, 0.999963, 0.0015733, 0, 0, 0.999932, 0.00158911, 0, 0, 0.999882, 0.00161376, 0, 0, 0.99981, 0.00165041, 0, 1.00875e-05, 0.999708, 0.00170304, 0, 0.000367658, 0.999565, 0.00177658, 0, 0.0014234, 0.999368, 0.00187688, 0, 0.00327939, 0.999081, 0.00200989, 0, 0.00596629, 0.99852, 0.00217177, 0, 0.0094852, 0.99549, 0.0021745, 0, 0.013824, 0.993252, 0.00222357, 0, 0.0189642, 0.991727, 0.00235022, 0, 0.0248856, 0.989951, 0.00250561, 0, 0.0315669, 0.988029, 0.00268829, 0, 0.0389882, 0.984029, 0.0027496, 0, 0.0471302, 0.980683, 0.00289793, 0, 0.0559754, 0.976554, 0.00303315, 0, 0.0655081, 0.97139, 0.00313257, 0, 0.0757138, 0.965544, 0.00323656, 0, 0.08658, 0.95912, 0.00333432, 0, 0.0980954, 0.951183, 0.0034039, 0, 0.110251, 0.942974, 0.00347515, 0, 0.123038, 0.932642, 0.00350381, 0, 0.13645, 0.922158, 0.00354519, 0, 0.150482, 0.909404, 0.00353851, 0, 0.165129, 0.896071, 0.0035435, 0, 0.18039, 0.881206, 0.00349936, 0, 0.196263, 0.866077, 0.00347256, 0, 0.212748, 0.85093, 0.003415, 0, 0.229847, 0.837703, 0.00333367, 0, 0.247561, 0.823878, 0.003249, 0, 0.265895, 0.809449, 0.00316347, 0, 0.284854, 0.794379, 0.00306351, 0, 0.304445, 0.778138, 0.0029499, 0, 0.324675, 0.761997, 0.00284099, 0, 0.345555, 0.744938, 0.00272104, 0, 0.367095, 0.727212, 0.00260715, 0, 0.389309, 0.709549, 0.00248855, 0, 0.41221, 0.691704, 0.00236783, 0, 0.435814, 0.673689, 0.00225178, 0, 0.460138, 0.656453, 0.00213765, 0, 0.485203, 0.639128, 0.00202178, 0, 0.511028, 0.621512, 0.00191443, 0, 0.537634, 0.603598, 0.00180977, 0, 0.565041, 0.58559, 0.00170456, 0, 0.593268, 0.567852, 0.00160927, 0, 0.622327, 0.5503, 0.00151395, 0, 0.652217, 0.533033, 0.00142499, 0, 0.682907, 0.515942, 0.00133955, 0, 0.714296, 0.498814, 0.0012602, 0, 0.746032, 0.481595, 0.00118188, 0, 0.777778, 0.465117, 0.00111171, 0, 0.809524, 0.448865, 0.00104091, 0, 0.84127, 0.432711, 0.000976618, 0, 0.873016, 0.416822, 0.00091859, 0, 0.904762, 0.401272, 0.000857704, 0, 0.936508, 0.386226, 0.000807172, 0, 0.968254, 0.371321, 0.00075464, 0, 1, 1, 0.00209596, 0, 0, 1, 0.00209598, 0, 0, 1, 0.00209624, 0, 0, 0.999997, 0.00209736, 0, 0, 0.999991, 0.00210039, 0, 0, 0.999979, 0.00210678, 0, 0, 0.999959, 0.00211847, 0, 0, 0.999925, 0.0021379, 0, 0, 0.99987, 0.00216809, 0, 0, 0.999791, 0.00221281, 0, 6.81487e-05, 0.999677, 0.00227669, 0, 0.000658161, 0.999521, 0.00236533, 0, 0.00200635, 0.999301, 0.00248514, 0, 0.0041779, 0.998977, 0.00264185, 0, 0.00718648, 0.998191, 0.00281695, 0, 0.0110239, 0.994801, 0.00278518, 0, 0.015672, 0.993091, 0.00288774, 0, 0.0211091, 0.991571, 0.00303931, 0, 0.0273123, 0.9897, 0.00321643, 0, 0.034259, 0.987023, 0.00337332, 0, 0.0419282, 0.983289, 0.00346146, 0, 0.0502998, 0.979892, 0.00363704, 0, 0.0593562, 0.975111, 0.00373601, 0, 0.069081, 0.970351, 0.0038842, 0, 0.0794598, 0.964131, 0.00397053, 0, 0.0904798, 0.957747, 0.00408078, 0, 0.10213, 0.949536, 0.00413533, 0, 0.1144, 0.941372, 0.00420305, 0, 0.127284, 0.931049, 0.00422815, 0, 0.140772, 0.920647, 0.00425048, 0, 0.154862, 0.908033, 0.0042281, 0, 0.169548, 0.895028, 0.00422026, 0, 0.184828, 0.879968, 0.00415042, 0, 0.200701, 0.864875, 0.00408821, 0, 0.217167, 0.84918, 0.00400909, 0, 0.234227, 0.834934, 0.00391178, 0, 0.251884, 0.821397, 0.00380066, 0, 0.270141, 0.807135, 0.00367974, 0, 0.289004, 0.792363, 0.00355172, 0, 0.308479, 0.776661, 0.003411, 0, 0.328575, 0.760705, 0.00328123, 0, 0.349301, 0.744408, 0.00314003, 0, 0.370668, 0.726994, 0.0029906, 0, 0.392689, 0.709598, 0.00285034, 0, 0.415379, 0.692112, 0.00271179, 0, 0.438754, 0.674435, 0.00257185, 0, 0.46283, 0.65676, 0.00243425, 0, 0.48763, 0.639982, 0.00230351, 0, 0.513173, 0.622983, 0.0021777, 0, 0.539482, 0.605471, 0.00204991, 0, 0.566579, 0.58796, 0.00193759, 0, 0.594488, 0.570463, 0.00181976, 0, 0.623226, 0.553058, 0.00171497, 0, 0.6528, 0.535894, 0.00161109, 0, 0.683198, 0.519089, 0.00151394, 0, 0.714354, 0.502454, 0.00142122, 0, 0.746032, 0.485681, 0.00133488, 0, 0.777778, 0.468935, 0.00124975, 0, 0.809524, 0.452951, 0.00117309, 0, 0.84127, 0.437139, 0.00110155, 0, 0.873016, 0.421446, 0.00103124, 0, 0.904762, 0.405951, 0.000966387, 0, 0.936508, 0.391003, 0.000908119, 0, 0.968254, 0.376198, 0.000848057, 0, 1, 1, 0.00280076, 0, 0, 1, 0.00280078, 0, 0, 0.999999, 0.00280109, 0, 0, 0.999997, 0.00280246, 0, 0, 0.999992, 0.00280616, 0, 0, 0.999979, 0.00281396, 0, 0, 0.999956, 0.00282822, 0, 0, 0.999916, 0.00285186, 0, 0, 0.999857, 0.0028885, 0, 0, 0.999768, 0.00294259, 0, 0.000196026, 0.999645, 0.00301946, 0, 0.00104842, 0.99947, 0.00312541, 0, 0.00270199, 0.999229, 0.00326733, 0, 0.00519449, 0.998852, 0.00344992, 0, 0.00852602, 0.997558, 0.00361052, 0, 0.0126804, 0.994417, 0.0035898, 0, 0.017635, 0.992824, 0.00372393, 0, 0.023365, 0.991344, 0.00390695, 0, 0.0298456, 0.989337, 0.00410392, 0, 0.0370529, 0.985811, 0.00420987, 0, 0.0449651, 0.982772, 0.00437488, 0, 0.0535615, 0.979001, 0.00455069, 0, 0.0628243, 0.974102, 0.00464462, 0, 0.0727368, 0.969197, 0.00480577, 0, 0.0832844, 0.962759, 0.00487818, 0, 0.0944545, 0.956207, 0.00498176, 0, 0.106236, 0.947909, 0.00503392, 0, 0.118619, 0.939596, 0.00507474, 0, 0.131595, 0.929642, 0.00509798, 0, 0.145159, 0.918807, 0.00508476, 0, 0.159305, 0.906921, 0.00505634, 0, 0.174028, 0.893312, 0.00498845, 0, 0.189327, 0.878933, 0.0049133, 0, 0.2052, 0.863986, 0.0048259, 0, 0.221647, 0.847936, 0.00470848, 0, 0.23867, 0.832253, 0.00456889, 0, 0.25627, 0.818619, 0.00442726, 0, 0.274453, 0.804788, 0.00427677, 0, 0.293222, 0.790241, 0.00411906, 0, 0.312585, 0.775162, 0.00394833, 0, 0.33255, 0.759463, 0.00377366, 0, 0.353126, 0.743598, 0.00361026, 0, 0.374324, 0.72697, 0.00343627, 0, 0.396158, 0.709646, 0.00326422, 0, 0.418641, 0.69277, 0.00309717, 0, 0.44179, 0.675371, 0.0029356, 0, 0.465624, 0.657863, 0.00277712, 0, 0.490163, 0.640772, 0.00261738, 0, 0.515429, 0.624441, 0.0024737, 0, 0.541445, 0.607497, 0.00233125, 0, 0.568236, 0.590438, 0.00218994, 0, 0.595828, 0.573224, 0.0020664, 0, 0.624242, 0.556168, 0.00193526, 0, 0.653496, 0.539232, 0.00182463, 0, 0.683588, 0.522352, 0.00170735, 0, 0.714482, 0.506172, 0.00160555, 0, 0.746032, 0.489842, 0.00150451, 0, 0.777778, 0.473463, 0.00140938, 0, 0.809524, 0.457266, 0.00132568, 0, 0.84127, 0.441609, 0.0012376, 0, 0.873016, 0.426348, 0.00116265, 0, 0.904762, 0.411002, 0.00108935, 0, 0.936508, 0.396045, 0.00101946, 0, 0.968254, 0.381448, 0.000955665, 0, 1, 1, 0.0037121, 0, 0, 1, 0.00371213, 0, 0, 1, 0.00371251, 0, 0, 0.999997, 0.00371417, 0, 0, 0.99999, 0.00371863, 0, 0, 0.999977, 0.00372807, 0, 0, 0.99995, 0.00374529, 0, 0, 0.999908, 0.0037738, 0, 0, 0.999843, 0.00381789, 0, 1.23596e-05, 0.999745, 0.00388273, 0, 0.000407442, 0.999608, 0.00397443, 0, 0.0015447, 0.999415, 0.00409998, 0, 0.00351385, 0.999143, 0.00426662, 0, 0.0063316, 0.9987, 0.00447625, 0, 0.00998679, 0.996363, 0.00455323, 0, 0.0144569, 0.994021, 0.00461052, 0, 0.0197151, 0.992372, 0.00476359, 0, 0.0257344, 0.991007, 0.00499101, 0, 0.0324882, 0.988767, 0.0051972, 0, 0.0399517, 0.984872, 0.00528407, 0, 0.0481022, 0.982004, 0.00548926, 0, 0.0569191, 0.977714, 0.00564385, 0, 0.0663839, 0.973076, 0.0057693, 0, 0.0764801, 0.967565, 0.0058924, 0, 0.0871928, 0.961384, 0.00599629, 0, 0.0985095, 0.954435, 0.00605998, 0, 0.110419, 0.946303, 0.0061133, 0, 0.122912, 0.937662, 0.00612028, 0, 0.13598, 0.927867, 0.00612209, 0, 0.149617, 0.916475, 0.00604813, 0, 0.163817, 0.90541, 0.00603088, 0, 0.178577, 0.891591, 0.00592218, 0, 0.193894, 0.877573, 0.00578854, 0, 0.209767, 0.862511, 0.00566648, 0, 0.226196, 0.846861, 0.00551481, 0, 0.243182, 0.83068, 0.00533754, 0, 0.260728, 0.815725, 0.00515487, 0, 0.278837, 0.802321, 0.0049655, 0, 0.297515, 0.787826, 0.00475421, 0, 0.316768, 0.773454, 0.00456002, 0, 0.336605, 0.758224, 0.00434727, 0, 0.357034, 0.74265, 0.00414444, 0, 0.378067, 0.726729, 0.00393738, 0, 0.399717, 0.710155, 0.00373575, 0, 0.421998, 0.693312, 0.00353736, 0, 0.444928, 0.67653, 0.00334368, 0, 0.468523, 0.659444, 0.00315981, 0, 0.492806, 0.642051, 0.00297809, 0, 0.517798, 0.625758, 0.00280592, 0, 0.543525, 0.609615, 0.00264254, 0, 0.570012, 0.592919, 0.00248459, 0, 0.597288, 0.576298, 0.00233327, 0, 0.625379, 0.559489, 0.00219519, 0, 0.654307, 0.542891, 0.00205441, 0, 0.684084, 0.526255, 0.00193385, 0, 0.714693, 0.509853, 0.00180745, 0, 0.746044, 0.494131, 0.00169817, 0, 0.777778, 0.478114, 0.0015913, 0, 0.809524, 0.462274, 0.00148981, 0, 0.84127, 0.446412, 0.00139537, 0, 0.873016, 0.431274, 0.00130984, 0, 0.904762, 0.41635, 0.00122403, 0, 0.936508, 0.401476, 0.00114809, 0, 0.968254, 0.386993, 0.00107563, 0, 1, 1, 0.00488216, 0, 0, 1, 0.0048822, 0, 0, 1, 0.00488265, 0, 0, 0.999997, 0.00488463, 0, 0, 0.999988, 0.00488999, 0, 0, 0.999974, 0.00490129, 0, 0, 0.999946, 0.00492191, 0, 0, 0.999897, 0.00495598, 0, 0, 0.999825, 0.00500855, 0, 7.44791e-05, 0.999718, 0.00508559, 0, 0.000712744, 0.999565, 0.005194, 0, 0.00215249, 0.999352, 0.00534147, 0, 0.00444576, 0.999046, 0.00553523, 0, 0.00759218, 0.998492, 0.00577016, 0, 0.0115714, 0.995564, 0.00578487, 0, 0.0163557, 0.993339, 0.00586414, 0, 0.021915, 0.991834, 0.00606002, 0, 0.0282201, 0.990496, 0.00633312, 0, 0.0352433, 0.987826, 0.00651941, 0, 0.042959, 0.98383, 0.00660842, 0, 0.0513439, 0.98109, 0.00685523, 0, 0.0603772, 0.976131, 0.00695778, 0, 0.0700402, 0.971922, 0.00714236, 0, 0.0803163, 0.965901, 0.00721437, 0, 0.0911908, 0.959606, 0.00732017, 0, 0.102651, 0.952504, 0.00735788, 0, 0.114686, 0.944365, 0.00738493, 0, 0.127286, 0.935652, 0.00737969, 0, 0.140443, 0.925813, 0.00733612, 0, 0.154151, 0.914397, 0.00723094, 0, 0.168405, 0.903257, 0.00714002, 0, 0.183201, 0.890015, 0.00700149, 0, 0.198536, 0.876014, 0.00682813, 0, 0.214409, 0.861436, 0.00665567, 0, 0.23082, 0.845752, 0.00644526, 0, 0.24777, 0.829169, 0.00621635, 0, 0.265263, 0.813435, 0.00597789, 0, 0.283301, 0.799701, 0.00575694, 0, 0.301889, 0.785726, 0.00549866, 0, 0.321035, 0.77152, 0.0052503, 0, 0.340746, 0.75683, 0.00499619, 0, 0.361032, 0.741951, 0.0047543, 0, 0.381904, 0.726367, 0.0045084, 0, 0.403374, 0.710537, 0.00426784, 0, 0.425457, 0.693965, 0.00403487, 0, 0.448169, 0.677724, 0.0038075, 0, 0.47153, 0.66117, 0.00359431, 0, 0.495561, 0.644274, 0.00338354, 0, 0.520284, 0.627449, 0.00318163, 0, 0.545725, 0.611645, 0.00299672, 0, 0.571911, 0.595614, 0.00281016, 0, 0.598873, 0.579426, 0.00264252, 0, 0.62664, 0.563016, 0.00247509, 0, 0.655239, 0.546728, 0.00232647, 0, 0.684692, 0.530539, 0.00217803, 0, 0.714999, 0.514164, 0.00204216, 0, 0.746106, 0.498344, 0.00191403, 0, 0.777778, 0.482957, 0.00179203, 0, 0.809524, 0.467336, 0.00167695, 0, 0.84127, 0.451994, 0.00157567, 0, 0.873016, 0.436514, 0.00147113, 0, 0.904762, 0.42178, 0.00138034, 0, 0.936508, 0.407271, 0.00129219, 0, 0.968254, 0.392822, 0.0012098, 0, 1, 1, 0.00637427, 0, 0, 1, 0.00637431, 0, 0, 0.999999, 0.00637485, 0, 0, 0.999996, 0.00637721, 0, 0, 0.999987, 0.00638357, 0, 0, 0.999971, 0.006397, 0, 0, 0.999939, 0.00642142, 0, 0, 0.999888, 0.00646177, 0, 0, 0.999807, 0.00652387, 0, 0.000207916, 0.999689, 0.00661454, 0, 0.00112051, 0.99952, 0.00674155, 0, 0.00287719, 0.999283, 0.00691313, 0, 0.00550145, 0.998936, 0.00713598, 0, 0.00897928, 0.998165, 0.00738501, 0, 0.0132829, 0.994847, 0.00734388, 0, 0.01838, 0.993182, 0.00749991, 0, 0.0242381, 0.991665, 0.0077246, 0, 0.030826, 0.989708, 0.00797579, 0, 0.0381152, 0.986663, 0.00813011, 0, 0.0460794, 0.983288, 0.00830365, 0, 0.0546951, 0.980104, 0.00853496, 0, 0.0639411, 0.974855, 0.00861045, 0, 0.0737988, 0.97045, 0.00879133, 0, 0.0842516, 0.964509, 0.00886377, 0, 0.0952848, 0.957594, 0.00890346, 0, 0.106886, 0.950546, 0.00893289, 0, 0.119044, 0.942225, 0.00890074, 0, 0.131749, 0.933365, 0.00886826, 0, 0.144994, 0.923202, 0.0087316, 0, 0.158772, 0.912605, 0.00863082, 0, 0.173078, 0.901099, 0.00847403, 0, 0.187908, 0.888177, 0.00825838, 0, 0.203261, 0.873955, 0.00801834, 0, 0.219134, 0.860091, 0.00779026, 0, 0.235527, 0.84434, 0.00752478, 0, 0.252443, 0.828517, 0.00724074, 0, 0.269883, 0.81239, 0.00693769, 0, 0.287851, 0.79721, 0.00664817, 0, 0.306352, 0.783489, 0.00634763, 0, 0.325393, 0.769514, 0.00604221, 0, 0.344981, 0.755419, 0.00573568, 0, 0.365126, 0.741083, 0.00544359, 0, 0.385839, 0.726059, 0.00515515, 0, 0.407132, 0.710809, 0.00487139, 0, 0.42902, 0.695052, 0.00459846, 0, 0.45152, 0.678886, 0.00433412, 0, 0.474651, 0.663042, 0.00407981, 0, 0.498433, 0.646634, 0.00384264, 0, 0.52289, 0.630117, 0.00360897, 0, 0.548048, 0.613804, 0.00338863, 0, 0.573936, 0.598338, 0.00318486, 0, 0.600584, 0.582687, 0.00298377, 0, 0.628027, 0.566809, 0.00280082, 0, 0.656295, 0.550817, 0.00262255, 0, 0.685417, 0.534937, 0.00245835, 0, 0.715406, 0.519151, 0.00230574, 0, 0.74624, 0.503118, 0.0021549, 0, 0.777778, 0.487723, 0.00202008, 0, 0.809524, 0.472725, 0.00189355, 0, 0.84127, 0.457599, 0.00177108, 0, 0.873016, 0.442558, 0.00165843, 0, 0.904762, 0.427624, 0.00155494, 0, 0.936508, 0.413171, 0.00145273, 0, 0.968254, 0.399122, 0.00136454, 0, 1, 1, 0.00826496, 0, 0, 1, 0.00826499, 0, 0, 1, 0.00826564, 0, 0, 0.999996, 0.00826842, 0, 0, 0.999987, 0.00827589, 0, 0, 0.999967, 0.00829167, 0, 0, 0.999933, 0.00832037, 0, 0, 0.999876, 0.00836768, 0, 1.09338e-05, 0.999786, 0.00844031, 0, 0.000427145, 0.999655, 0.00854603, 0, 0.0016384, 0.999468, 0.00869337, 0, 0.00372392, 0.999203, 0.008891, 0, 0.00668513, 0.998803, 0.00914387, 0, 0.0104968, 0.99748, 0.00935838, 0, 0.015125, 0.994446, 0.00933309, 0, 0.0205338, 0.99292, 0.00953084, 0, 0.0266884, 0.991414, 0.0097893, 0, 0.0335565, 0.989049, 0.0100228, 0, 0.0411086, 0.98582, 0.0101664, 0, 0.0493181, 0.982441, 0.0103582, 0, 0.0581613, 0.978595, 0.0105292, 0, 0.0676169, 0.973495, 0.0106274, 0, 0.0776661, 0.968405, 0.0107261, 0, 0.0882926, 0.962717, 0.0108234, 0, 0.0994817, 0.955478, 0.0108102, 0, 0.111221, 0.948275, 0.0107914, 0, 0.123499, 0.940006, 0.0107161, 0, 0.136308, 0.930831, 0.0106309, 0, 0.149639, 0.920648, 0.0104083, 0, 0.163485, 0.910205, 0.0102312, 0, 0.177843, 0.898445, 0.0100051, 0, 0.192707, 0.885986, 0.00971928, 0, 0.208077, 0.872204, 0.00940747, 0, 0.22395, 0.858436, 0.0091085, 0, 0.240326, 0.843454, 0.00876595, 0, 0.257208, 0.827437, 0.00839794, 0, 0.274596, 0.811488, 0.00803692, 0, 0.292496, 0.796039, 0.00767352, 0, 0.310911, 0.781083, 0.0073097, 0, 0.329849, 0.767642, 0.00694032, 0, 0.349316, 0.753901, 0.00657476, 0, 0.369323, 0.740131, 0.00622699, 0, 0.38988, 0.725845, 0.0058838, 0, 0.410999, 0.710991, 0.00555586, 0, 0.432696, 0.696002, 0.00523089, 0, 0.454987, 0.680461, 0.00492494, 0, 0.47789, 0.664875, 0.00463464, 0, 0.501426, 0.649273, 0.00435422, 0, 0.52562, 0.63302, 0.0040875, 0, 0.550498, 0.61705, 0.00384075, 0, 0.576089, 0.601154, 0.00359557, 0, 0.602427, 0.586008, 0.00337636, 0, 0.629544, 0.570699, 0.00316019, 0, 0.657479, 0.555166, 0.00296033, 0, 0.686264, 0.539645, 0.00277552, 0, 0.715924, 0.524159, 0.00259499, 0, 0.746459, 0.508682, 0.00243257, 0, 0.777789, 0.493163, 0.00227851, 0, 0.809524, 0.478004, 0.00213083, 0, 0.84127, 0.46347, 0.00199502, 0, 0.873016, 0.448778, 0.00186967, 0, 0.904762, 0.434105, 0.00174732, 0, 0.936508, 0.419576, 0.00163861, 0, 0.968254, 0.405541, 0.00153341, 0, 1, 1, 0.0106462, 0, 0, 1, 0.0106462, 0, 0, 0.999999, 0.010647, 0, 0, 0.999995, 0.0106502, 0, 0, 0.999985, 0.0106589, 0, 0, 0.999964, 0.0106773, 0, 0, 0.999925, 0.0107106, 0, 0, 0.999861, 0.0107655, 0, 7.12986e-05, 0.999763, 0.0108497, 0, 0.000743959, 0.999616, 0.0109716, 0, 0.00227361, 0.999408, 0.0111408, 0, 0.0046983, 0.999112, 0.0113659, 0, 0.00800158, 0.998637, 0.0116475, 0, 0.0121493, 0.996223, 0.0117231, 0, 0.0171023, 0.994006, 0.0118064, 0, 0.0228218, 0.992444, 0.0120254, 0, 0.0292711, 0.991028, 0.0123314, 0, 0.036417, 0.98803, 0.0124954, 0, 0.0442295, 0.984816, 0.0126538, 0, 0.0526815, 0.981399, 0.0128537, 0, 0.0617492, 0.977085, 0.0129694, 0, 0.0714114, 0.972154, 0.013091, 0, 0.0816495, 0.966617, 0.0131166, 0, 0.0924472, 0.960628, 0.0131583, 0, 0.10379, 0.953295, 0.0131094, 0, 0.115665, 0.94575, 0.0129966, 0, 0.128062, 0.937654, 0.0128796, 0, 0.140972, 0.927716, 0.0126477, 0, 0.154387, 0.917932, 0.0123889, 0, 0.168301, 0.907719, 0.012131, 0, 0.182709, 0.89584, 0.0118013, 0, 0.197608, 0.883526, 0.0114145, 0, 0.212994, 0.870301, 0.0110075, 0, 0.228867, 0.856272, 0.0106019, 0, 0.245227, 0.842251, 0.0101938, 0, 0.262074, 0.826466, 0.00973254, 0, 0.279412, 0.810859, 0.0092846, 0, 0.297244, 0.795051, 0.00883304, 0, 0.315575, 0.780053, 0.00840272, 0, 0.334412, 0.76575, 0.00796438, 0, 0.35376, 0.752298, 0.00752526, 0, 0.373631, 0.739153, 0.00711486, 0, 0.394034, 0.725514, 0.00670361, 0, 0.414983, 0.711473, 0.00632656, 0, 0.436491, 0.696936, 0.00595206, 0, 0.458575, 0.682126, 0.00559191, 0, 0.481253, 0.667027, 0.00525362, 0, 0.504547, 0.651875, 0.00493805, 0, 0.528481, 0.636463, 0.00462848, 0, 0.553081, 0.620641, 0.00433936, 0, 0.578377, 0.604931, 0.00407, 0, 0.604404, 0.589549, 0.00380864, 0, 0.631197, 0.574712, 0.00357049, 0, 0.658795, 0.559775, 0.00334466, 0, 0.687238, 0.544514, 0.00312505, 0, 0.716559, 0.529555, 0.00293199, 0, 0.746776, 0.514402, 0.00274204, 0, 0.777849, 0.499302, 0.00256647, 0, 0.809524, 0.484114, 0.00239901, 0, 0.84127, 0.469308, 0.00225148, 0, 0.873016, 0.455133, 0.00210178, 0, 0.904762, 0.440939, 0.0019727, 0, 0.936508, 0.426627, 0.00184382, 0, 0.968254, 0.412509, 0.00172548, 0, 1, 1, 0.013628, 0, 0, 1, 0.0136281, 0, 0, 0.999999, 0.0136289, 0, 0, 0.999995, 0.0136327, 0, 0, 0.999983, 0.0136427, 0, 0, 0.99996, 0.0136638, 0, 0, 0.999917, 0.0137022, 0, 0, 0.999846, 0.0137652, 0, 0.000204597, 0.999736, 0.0138615, 0, 0.00116837, 0.999573, 0.0140007, 0, 0.00303325, 0.99934, 0.0141927, 0, 0.00580613, 0.999004, 0.0144457, 0, 0.00945626, 0.998407, 0.0147489, 0, 0.0139421, 0.995464, 0.014731, 0, 0.0192202, 0.993328, 0.0148283, 0, 0.0252495, 0.991799, 0.0150797, 0, 0.0319921, 0.990397, 0.0154316, 0, 0.0394138, 0.986835, 0.0155005, 0, 0.0474843, 0.983938, 0.0157308, 0, 0.0561763, 0.980154, 0.0158753, 0, 0.0654661, 0.975659, 0.0159581, 0, 0.0753326, 0.970171, 0.0159832, 0, 0.0857571, 0.964803, 0.0160084, 0, 0.0967236, 0.958366, 0.0159484, 0, 0.108218, 0.950613, 0.0158001, 0, 0.120227, 0.942874, 0.0155845, 0, 0.132741, 0.935005, 0.0154292, 0, 0.145751, 0.924991, 0.0150742, 0, 0.159249, 0.914814, 0.0146757, 0, 0.17323, 0.904743, 0.0143097, 0, 0.187687, 0.893216, 0.0138695, 0, 0.202619, 0.880769, 0.0133706, 0, 0.218021, 0.868136, 0.0128606, 0, 0.233894, 0.85469, 0.0123403, 0, 0.250238, 0.840593, 0.0118091, 0, 0.267052, 0.825808, 0.011253, 0, 0.284341, 0.81009, 0.0107099, 0, 0.302106, 0.79504, 0.0101636, 0, 0.320354, 0.779757, 0.00964041, 0, 0.33909, 0.764697, 0.00911896, 0, 0.358322, 0.750913, 0.00859533, 0, 0.378059, 0.738175, 0.00811592, 0, 0.398311, 0.725242, 0.00764504, 0, 0.41909, 0.711864, 0.00718885, 0, 0.440412, 0.698009, 0.00675843, 0, 0.462292, 0.683841, 0.00634984, 0, 0.484748, 0.669391, 0.00595502, 0, 0.507802, 0.654731, 0.00558671, 0, 0.531477, 0.639805, 0.00523578, 0, 0.555802, 0.624789, 0.00490834, 0, 0.580805, 0.609325, 0.00459448, 0, 0.606522, 0.593975, 0.00430342, 0, 0.63299, 0.578983, 0.00403019, 0, 0.66025, 0.564442, 0.0037707, 0, 0.688346, 0.549835, 0.0035316, 0, 0.717319, 0.535039, 0.00330255, 0, 0.7472, 0.520403, 0.00308932, 0, 0.777982, 0.505687, 0.00289335, 0, 0.809524, 0.490939, 0.00270818, 0, 0.84127, 0.476233, 0.0025343, 0, 0.873016, 0.461624, 0.00237097, 0, 0.904762, 0.447833, 0.00222065, 0, 0.936508, 0.433992, 0.00207561, 0, 0.968254, 0.420147, 0.00194955, 0, 1, 1, 0.0173415, 0, 0, 1, 0.0173416, 0, 0, 0.999999, 0.0173426, 0, 0, 0.999995, 0.0173468, 0, 0, 0.999983, 0.0173582, 0, 0, 0.999954, 0.0173822, 0, 0, 0.999908, 0.0174258, 0, 6.69501e-06, 0.999828, 0.0174973, 0, 0.000427399, 0.999705, 0.0176063, 0, 0.00171019, 0.999524, 0.0177631, 0, 0.0039248, 0.999263, 0.0179781, 0, 0.00705382, 0.998878, 0.018258, 0, 0.0110552, 0.998012, 0.0185551, 0, 0.0158812, 0.994614, 0.0184264, 0, 0.0214852, 0.993132, 0.0186385, 0, 0.0278239, 0.991563, 0.0189067, 0, 0.0348585, 0.989298, 0.0191577, 0, 0.0425544, 0.986036, 0.0192522, 0, 0.050881, 0.982558, 0.0194063, 0, 0.059811, 0.978531, 0.019486, 0, 0.0693209, 0.974198, 0.0195847, 0, 0.0793895, 0.968148, 0.0194749, 0, 0.0899984, 0.962565, 0.0194277, 0, 0.101132, 0.956041, 0.0192991, 0, 0.112775, 0.947749, 0.0189893, 0, 0.124917, 0.94018, 0.018704, 0, 0.137547, 0.93165, 0.0183458, 0, 0.150655, 0.921798, 0.0178775, 0, 0.164236, 0.911573, 0.0173618, 0, 0.178281, 0.901569, 0.0168482, 0, 0.192788, 0.890341, 0.016265, 0, 0.207752, 0.877835, 0.0156199, 0, 0.223171, 0.865472, 0.0149516, 0, 0.239044, 0.852905, 0.0143274, 0, 0.255371, 0.838906, 0.0136643, 0, 0.272153, 0.824888, 0.0129903, 0, 0.289393, 0.809977, 0.0123218, 0, 0.307093, 0.794697, 0.0116572, 0, 0.325259, 0.780028, 0.0110307, 0, 0.343896, 0.765124, 0.0104236, 0, 0.363012, 0.750411, 0.0098219, 0, 0.382617, 0.737264, 0.00924397, 0, 0.402719, 0.724799, 0.00868719, 0, 0.423332, 0.712253, 0.00816476, 0, 0.444469, 0.699267, 0.00767262, 0, 0.466146, 0.685618, 0.00719746, 0, 0.488383, 0.671736, 0.00673916, 0, 0.511199, 0.657777, 0.00631937, 0, 0.534618, 0.643497, 0.00592411, 0, 0.558668, 0.62889, 0.00553928, 0, 0.58338, 0.614299, 0.0051934, 0, 0.608787, 0.599197, 0.00485985, 0, 0.634929, 0.584175, 0.00454357, 0, 0.661849, 0.569541, 0.00425787, 0, 0.689594, 0.555193, 0.00397905, 0, 0.718211, 0.540947, 0.00372364, 0, 0.747742, 0.526593, 0.00348599, 0, 0.778205, 0.512335, 0.00326103, 0, 0.80953, 0.498017, 0.00305137, 0, 0.84127, 0.483609, 0.00285485, 0, 0.873016, 0.469368, 0.00267472, 0, 0.904762, 0.455037, 0.00249945, 0, 0.936508, 0.441493, 0.00234792, 0, 0.968254, 0.428147, 0.00219936, 0, 1, 1, 0.0219422, 0, 0, 1, 0.0219423, 0, 0, 0.999998, 0.0219434, 0, 0, 0.999993, 0.0219481, 0, 0, 0.999981, 0.021961, 0, 0, 0.999949, 0.0219879, 0, 0, 0.999896, 0.0220367, 0, 5.93194e-05, 0.999808, 0.0221167, 0, 0.00075364, 0.99967, 0.0222383, 0, 0.00237884, 0.999466, 0.0224125, 0, 0.00495612, 0.999174, 0.0226495, 0, 0.00844887, 0.998725, 0.0229525, 0, 0.0128058, 0.996979, 0.0231123, 0, 0.0179742, 0.994317, 0.0230742, 0, 0.0239047, 0.992781, 0.0232895, 0, 0.0305526, 0.991191, 0.0235734, 0, 0.0378786, 0.987787, 0.0236152, 0, 0.0458475, 0.985092, 0.0237994, 0, 0.0544287, 0.981121, 0.0238553, 0, 0.0635952, 0.976924, 0.0238706, 0, 0.0733233, 0.97218, 0.0238704, 0, 0.0835922, 0.965956, 0.0236598, 0, 0.0943839, 0.959998, 0.0234735, 0, 0.105682, 0.953245, 0.0232277, 0, 0.117474, 0.944445, 0.0226973, 0, 0.129747, 0.937087, 0.0223527, 0, 0.142491, 0.928341, 0.0218144, 0, 0.155697, 0.9184, 0.0211516, 0, 0.169358, 0.907959, 0.0204553, 0, 0.183469, 0.89808, 0.0197673, 0, 0.198024, 0.887047, 0.0189915, 0, 0.21302, 0.875221, 0.0182082, 0, 0.228455, 0.86269, 0.0173584, 0, 0.244329, 0.850735, 0.0165718, 0, 0.260639, 0.837545, 0.0157524, 0, 0.277389, 0.823639, 0.0149482, 0, 0.29458, 0.809699, 0.0141431, 0, 0.312216, 0.794797, 0.0133527, 0, 0.3303, 0.780578, 0.0126193, 0, 0.34884, 0.766019, 0.0118914, 0, 0.367842, 0.751447, 0.0111839, 0, 0.387315, 0.737275, 0.010514, 0, 0.40727, 0.724545, 0.00987277, 0, 0.427717, 0.712644, 0.00926569, 0, 0.448671, 0.700432, 0.00869029, 0, 0.470149, 0.687664, 0.00814691, 0, 0.492167, 0.674288, 0.00763012, 0, 0.514746, 0.660966, 0.00714437, 0, 0.537911, 0.647264, 0.00668457, 0, 0.561688, 0.633431, 0.00626581, 0, 0.586108, 0.619133, 0.00585593, 0, 0.611206, 0.604935, 0.00548188, 0, 0.637022, 0.590236, 0.00513288, 0, 0.663599, 0.575473, 0.0047906, 0, 0.690989, 0.561228, 0.00448895, 0, 0.719242, 0.547054, 0.00420233, 0, 0.748411, 0.533175, 0.00392869, 0, 0.778531, 0.519163, 0.00367445, 0, 0.809583, 0.505328, 0.00344097, 0, 0.84127, 0.491446, 0.00322003, 0, 0.873016, 0.477356, 0.00301283, 0, 0.904762, 0.46356, 0.00282592, 0, 0.936508, 0.449623, 0.00264956, 0, 0.968254, 0.436068, 0.00246956, 0, 1, 1, 0.0276135, 0, 0, 1, 0.0276136, 0, 0, 0.999998, 0.0276148, 0, 0, 0.999993, 0.0276201, 0, 0, 0.999976, 0.0276342, 0, 0, 0.999945, 0.027664, 0, 0, 0.999884, 0.0277179, 0, 0.00018679, 0.999784, 0.027806, 0, 0.00119607, 0.99963, 0.0279394, 0, 0.00318407, 0.999401, 0.0281295, 0, 0.00613601, 0.999066, 0.0283858, 0, 0.00999963, 0.998524, 0.0287027, 0, 0.0147164, 0.995702, 0.0286256, 0, 0.0202295, 0.993593, 0.0286733, 0, 0.0264876, 0.992067, 0.0288989, 0, 0.0334452, 0.990548, 0.0292135, 0, 0.0410621, 0.986775, 0.0291296, 0, 0.0493032, 0.984054, 0.0293099, 0, 0.0581381, 0.979481, 0.0291881, 0, 0.0675397, 0.975297, 0.0291598, 0, 0.0774848, 0.96981, 0.028954, 0, 0.0879528, 0.963524, 0.028628, 0, 0.0989258, 0.957398, 0.0283135, 0, 0.110388, 0.950088, 0.0278469, 0, 0.122327, 0.941538, 0.0271798, 0, 0.134729, 0.933332, 0.0265388, 0, 0.147587, 0.924392, 0.0257776, 0, 0.160889, 0.914581, 0.024916, 0, 0.174631, 0.904347, 0.0240242, 0, 0.188806, 0.894324, 0.0231229, 0, 0.203409, 0.883724, 0.022153, 0, 0.218437, 0.872207, 0.0211355, 0, 0.233888, 0.859927, 0.0201048, 0, 0.249761, 0.848373, 0.0191263, 0, 0.266056, 0.836023, 0.0181306, 0, 0.282774, 0.82289, 0.0171718, 0, 0.299917, 0.809324, 0.0162196, 0, 0.317488, 0.795361, 0.0152622, 0, 0.335493, 0.781253, 0.01439, 0, 0.353936, 0.767338, 0.013533, 0, 0.372825, 0.753156, 0.0127244, 0, 0.392168, 0.739122, 0.0119454, 0, 0.411976, 0.725358, 0.0112054, 0, 0.432259, 0.712949, 0.010487, 0, 0.453032, 0.701621, 0.00984032, 0, 0.47431, 0.689703, 0.00921495, 0, 0.496111, 0.677216, 0.00862492, 0, 0.518456, 0.664217, 0.00806882, 0, 0.541367, 0.65137, 0.00755922, 0, 0.564872, 0.638, 0.00705705, 0, 0.589001, 0.62453, 0.00661266, 0, 0.613789, 0.610601, 0.00618432, 0, 0.639277, 0.59676, 0.00578033, 0, 0.66551, 0.582433, 0.00540927, 0, 0.692539, 0.568026, 0.00506104, 0, 0.720422, 0.55414, 0.0047353, 0, 0.749216, 0.540178, 0.00442889, 0, 0.778974, 0.526513, 0.00414363, 0, 0.809711, 0.512954, 0.00388237, 0, 0.84127, 0.499403, 0.00362875, 0, 0.873016, 0.486026, 0.00340827, 0, 0.904762, 0.472345, 0.00318598, 0, 0.936508, 0.458828, 0.00297635, 0, 0.968254, 0.445379, 0.00279447, 0, 1, 1, 0.0345716, 0, 0, 1, 0.0345717, 0, 0, 0.999999, 0.034573, 0, 0, 0.999991, 0.0345787, 0, 0, 0.999974, 0.0345941, 0, 0, 0.999937, 0.0346263, 0, 1.88589e-06, 0.999869, 0.0346847, 0, 0.000409238, 0.999757, 0.0347798, 0, 0.0017674, 0.999582, 0.0349233, 0, 0.00413658, 0.999322, 0.0351265, 0, 0.00747408, 0.998939, 0.0353967, 0, 0.0117157, 0.998219, 0.0357018, 0, 0.0167966, 0.994974, 0.0354726, 0, 0.0226572, 0.993201, 0.0355621, 0, 0.0292445, 0.991573, 0.0357641, 0, 0.0365123, 0.989301, 0.0359252, 0, 0.0444203, 0.985712, 0.0358017, 0, 0.0529334, 0.982411, 0.0358353, 0, 0.0620214, 0.977827, 0.035617, 0, 0.0716574, 0.973278, 0.0354398, 0, 0.0818186, 0.967397, 0.0350483, 0, 0.0924846, 0.960696, 0.0344795, 0, 0.103638, 0.954349, 0.0339861, 0, 0.115263, 0.946066, 0.0331323, 0, 0.127348, 0.938012, 0.032359, 0, 0.13988, 0.929413, 0.0314413, 0, 0.152849, 0.920355, 0.0304103, 0, 0.166248, 0.910586, 0.0292785, 0, 0.18007, 0.900609, 0.0281391, 0, 0.194308, 0.890093, 0.0269103, 0, 0.208958, 0.880013, 0.0257269, 0, 0.224018, 0.869001, 0.0244671, 0, 0.239485, 0.85751, 0.0232252, 0, 0.255359, 0.84582, 0.0220117, 0, 0.271638, 0.834383, 0.0208274, 0, 0.288324, 0.822158, 0.0196628, 0, 0.305419, 0.809056, 0.0185306, 0, 0.322927, 0.795832, 0.0174174, 0, 0.340851, 0.782547, 0.0163758, 0, 0.359199, 0.7689, 0.015391, 0, 0.377975, 0.755526, 0.0144488, 0, 0.397189, 0.741681, 0.0135372, 0, 0.416851, 0.728178, 0.0126957, 0, 0.436971, 0.714642, 0.0118812, 0, 0.457564, 0.702756, 0.0111165, 0, 0.478644, 0.69175, 0.0104145, 0, 0.500229, 0.680159, 0.00974439, 0, 0.522339, 0.668073, 0.00911926, 0, 0.544997, 0.655405, 0.00851393, 0, 0.56823, 0.642921, 0.00797637, 0, 0.592068, 0.629993, 0.00745119, 0, 0.616546, 0.616828, 0.00696972, 0, 0.641705, 0.603305, 0.00652425, 0, 0.66759, 0.589833, 0.00610188, 0, 0.694255, 0.575945, 0.00570834, 0, 0.72176, 0.561745, 0.00533384, 0, 0.750168, 0.548277, 0.00500001, 0, 0.779545, 0.534467, 0.00467582, 0, 0.809933, 0.521032, 0.00438092, 0, 0.841272, 0.507877, 0.00410348, 0, 0.873016, 0.494654, 0.00383618, 0, 0.904762, 0.481592, 0.00358699, 0, 0.936508, 0.468509, 0.00337281, 0, 0.968254, 0.455293, 0.00316196, 0, 1, 1, 0.0430698, 0, 0, 1, 0.0430699, 0, 0, 0.999998, 0.0430713, 0, 0, 0.999991, 0.0430773, 0, 0, 0.99997, 0.0430936, 0, 0, 0.999928, 0.0431277, 0, 4.06396e-05, 0.999852, 0.0431893, 0, 0.000744376, 0.999724, 0.0432895, 0, 0.0024806, 0.999527, 0.0434397, 0, 0.00524779, 0.99923, 0.0436507, 0, 0.00898164, 0.998783, 0.0439255, 0, 0.0136083, 0.997507, 0.0441104, 0, 0.0190582, 0.994418, 0.0438225, 0, 0.0252694, 0.992864, 0.0439396, 0, 0.0321879, 0.991127, 0.0440962, 0, 0.039767, 0.987331, 0.0438408, 0, 0.0479667, 0.984819, 0.0438991, 0, 0.056752, 0.980384, 0.0435906, 0, 0.0660929, 0.975846, 0.0432543, 0, 0.075963, 0.970748, 0.0428293, 0, 0.0863398, 0.964303, 0.042153, 0, 0.0972035, 0.95772, 0.0414111, 0, 0.108537, 0.950747, 0.0405893, 0, 0.120325, 0.942533, 0.0394887, 0, 0.132554, 0.934045, 0.0383544, 0, 0.145215, 0.924942, 0.037057, 0, 0.158296, 0.915811, 0.0356993, 0, 0.17179, 0.90612, 0.0342401, 0, 0.185691, 0.896434, 0.0328078, 0, 0.199993, 0.886021, 0.031288, 0, 0.214691, 0.876081, 0.0297776, 0, 0.229782, 0.865608, 0.0282334, 0, 0.245265, 0.854924, 0.026749, 0, 0.261138, 0.843607, 0.02526, 0, 0.277401, 0.832456, 0.0238214, 0, 0.294056, 0.821342, 0.0224682, 0, 0.311104, 0.809303, 0.0211297, 0, 0.328548, 0.796468, 0.0198387, 0, 0.346394, 0.784046, 0.0186227, 0, 0.364645, 0.771262, 0.0174561, 0, 0.38331, 0.758118, 0.0163806, 0, 0.402396, 0.745075, 0.0153287, 0, 0.421912, 0.731926, 0.0143647, 0, 0.44187, 0.71863, 0.0134363, 0, 0.462283, 0.705414, 0.0125603, 0, 0.483165, 0.693792, 0.0117508, 0, 0.504535, 0.683108, 0.0110016, 0, 0.52641, 0.67183, 0.0102757, 0, 0.548816, 0.66015, 0.00962044, 0, 0.571776, 0.647907, 0.00898031, 0, 0.595323, 0.635734, 0.00840811, 0, 0.619489, 0.623208, 0.00786211, 0, 0.644317, 0.610438, 0.00734953, 0, 0.669852, 0.597345, 0.00687688, 0, 0.696148, 0.584138, 0.00643469, 0, 0.723267, 0.5707, 0.00602236, 0, 0.75128, 0.556966, 0.0056324, 0, 0.780258, 0.543607, 0.00528277, 0, 0.810268, 0.530213, 0.00493999, 0, 0.841311, 0.516912, 0.00462265, 0, 0.873016, 0.503916, 0.0043307, 0, 0.904762, 0.491146, 0.00406858, 0, 0.936508, 0.478439, 0.00381436, 0, 0.968254, 0.465834, 0.00358003, 0, 1, 1, 0.0534039, 0, 0, 1, 0.053404, 0, 0, 0.999998, 0.0534055, 0, 0, 0.999989, 0.0534116, 0, 0, 0.999968, 0.0534283, 0, 0, 0.999918, 0.0534633, 0, 0.000155895, 0.99983, 0.0535262, 0, 0.00120914, 0.999685, 0.0536281, 0, 0.00334944, 0.999461, 0.0537799, 0, 0.00653077, 0.999119, 0.0539902, 0, 0.0106718, 0.998582, 0.0542524, 0, 0.0156907, 0.995919, 0.0540318, 0, 0.0215147, 0.993735, 0.0538914, 0, 0.0280801, 0.992126, 0.0539557, 0, 0.0353323, 0.990266, 0.0540401, 0, 0.0432247, 0.986317, 0.0536064, 0, 0.0517172, 0.983213, 0.0534425, 0, 0.0607754, 0.978303, 0.0528622, 0, 0.0703698, 0.973665, 0.0523363, 0, 0.0804742, 0.968091, 0.0516165, 0, 0.0910667, 0.961026, 0.0505434, 0, 0.102128, 0.954333, 0.049523, 0, 0.113641, 0.946372, 0.0481698, 0, 0.125591, 0.938254, 0.0467674, 0, 0.137965, 0.929516, 0.0452341, 0, 0.150754, 0.920106, 0.0435083, 0, 0.163947, 0.910899, 0.0417399, 0, 0.177537, 0.901532, 0.0399389, 0, 0.191516, 0.891919, 0.0380901, 0, 0.205881, 0.882006, 0.0362341, 0, 0.220626, 0.871965, 0.0343444, 0, 0.235749, 0.862145, 0.0324832, 0, 0.251248, 0.852058, 0.0306681, 0, 0.267121, 0.84161, 0.0289097, 0, 0.283368, 0.830806, 0.0272079, 0, 0.299992, 0.820476, 0.0256089, 0, 0.316992, 0.809514, 0.0240394, 0, 0.334374, 0.797865, 0.0225379, 0, 0.35214, 0.785621, 0.0211235, 0, 0.370296, 0.773765, 0.0197908, 0, 0.388849, 0.761629, 0.0185235, 0, 0.407807, 0.748891, 0.0173358, 0, 0.427178, 0.736437, 0.0162305, 0, 0.446974, 0.723707, 0.0151778, 0, 0.467207, 0.710606, 0.0141791, 0, 0.487892, 0.698019, 0.0132592, 0, 0.509046, 0.686203, 0.0123887, 0, 0.530687, 0.675692, 0.0115976, 0, 0.552839, 0.664826, 0.0108325, 0, 0.575527, 0.65349, 0.0101348, 0, 0.59878, 0.641774, 0.00947756, 0, 0.622634, 0.629794, 0.00886058, 0, 0.647128, 0.617647, 0.00828526, 0, 0.672308, 0.60534, 0.00775312, 0, 0.698231, 0.592718, 0.00726033, 0, 0.724958, 0.579746, 0.00679731, 0, 0.752563, 0.566763, 0.00636111, 0, 0.781127, 0.553515, 0.00595228, 0, 0.810733, 0.540118, 0.00556876, 0, 0.841426, 0.527325, 0.00523051, 0, 0.873016, 0.514265, 0.00490712, 0, 0.904762, 0.501406, 0.00460297, 0, 0.936508, 0.488922, 0.00431247, 0, 0.968254, 0.476541, 0.0040472, 0, 1, 1, 0.0659184, 0, 0, 1, 0.0659185, 0, 0, 0.999998, 0.06592, 0, 0, 0.999988, 0.0659259, 0, 0, 0.999963, 0.0659423, 0, 0, 0.999907, 0.0659764, 0, 0.000374198, 0.999806, 0.0660376, 0, 0.00182071, 0.999639, 0.0661361, 0, 0.0043894, 0.999378, 0.0662814, 0, 0.00800055, 0.998985, 0.0664779, 0, 0.0125594, 0.998285, 0.0666914, 0, 0.0179786, 0.995071, 0.0661989, 0, 0.0241822, 0.993172, 0.0660454, 0, 0.031106, 0.991438, 0.0660105, 0, 0.0386952, 0.988428, 0.0656875, 0, 0.0469032, 0.985218, 0.0652913, 0, 0.0556905, 0.981128, 0.0647107, 0, 0.065023, 0.976015, 0.0638491, 0, 0.0748717, 0.97097, 0.062993, 0, 0.0852112, 0.964582, 0.0617927, 0, 0.0960199, 0.957383, 0.0603626, 0, 0.107279, 0.949969, 0.0588128, 0, 0.118971, 0.941843, 0.0570274, 0, 0.131084, 0.933624, 0.0551885, 0, 0.143604, 0.924543, 0.053122, 0, 0.156521, 0.914919, 0.0508897, 0, 0.169825, 0.905773, 0.0486418, 0, 0.18351, 0.896434, 0.0463364, 0, 0.197569, 0.887195, 0.0440623, 0, 0.211997, 0.877706, 0.0417799, 0, 0.226789, 0.867719, 0.03945, 0, 0.241944, 0.858587, 0.037243, 0, 0.257458, 0.849317, 0.0350956, 0, 0.273331, 0.839585, 0.0329852, 0, 0.289563, 0.829856, 0.0310028, 0, 0.306154, 0.819589, 0.0290953, 0, 0.323108, 0.809714, 0.0272738, 0, 0.340426, 0.79934, 0.0255631, 0, 0.358113, 0.788224, 0.0239175, 0, 0.376175, 0.776619, 0.0223831, 0, 0.394616, 0.76521, 0.0209298, 0, 0.413445, 0.753716, 0.0195786, 0, 0.432671, 0.741564, 0.0183001, 0, 0.452305, 0.729413, 0.0171259, 0, 0.472358, 0.717146, 0.0159933, 0, 0.492845, 0.70436, 0.0149495, 0, 0.513783, 0.69219, 0.0139681, 0, 0.535189, 0.680289, 0.0130577, 0, 0.557087, 0.669611, 0.0122198, 0, 0.5795, 0.659113, 0.0114174, 0, 0.602459, 0.648148, 0.0106729, 0, 0.625997, 0.636905, 0.00998997, 0, 0.650154, 0.625154, 0.00934313, 0, 0.674976, 0.613481, 0.00874839, 0, 0.700518, 0.60154, 0.00818265, 0, 0.726845, 0.58943, 0.00766889, 0, 0.754032, 0.576828, 0.00717153, 0, 0.782167, 0.564194, 0.00672696, 0, 0.811344, 0.551501, 0.00630863, 0, 0.841644, 0.538635, 0.00592177, 0, 0.873016, 0.525724, 0.00554888, 0, 0.904762, 0.513209, 0.00520225, 0, 0.936508, 0.500457, 0.00488231, 0, 0.968254, 0.48799, 0.00457153, 0, 1, 1, 0.0810131, 0, 0, 1, 0.0810133, 0, 0, 0.999997, 0.0810145, 0, 0, 0.999985, 0.08102, 0, 0, 0.999956, 0.0810347, 0, 1.95026e-05, 0.999893, 0.0810656, 0, 0.000719316, 0.999777, 0.0811205, 0, 0.00259774, 0.999583, 0.081208, 0, 0.00561807, 0.999281, 0.0813343, 0, 0.00967472, 0.998813, 0.0814969, 0, 0.0146627, 0.997597, 0.0815217, 0, 0.0204902, 0.994379, 0.0808502, 0, 0.0270802, 0.992744, 0.0806792, 0, 0.0343674, 0.990745, 0.0804589, 0, 0.0422974, 0.986646, 0.0796107, 0, 0.0508242, 0.983611, 0.0790913, 0, 0.0599087, 0.978869, 0.0780746, 0, 0.0695175, 0.973475, 0.0768218, 0, 0.0796223, 0.967845, 0.0754926, 0, 0.0901983, 0.960778, 0.0737063, 0, 0.101224, 0.953333, 0.0718052, 0, 0.112682, 0.945274, 0.0695946, 0, 0.124555, 0.936955, 0.0672492, 0, 0.136831, 0.928319, 0.0647732, 0, 0.149496, 0.919075, 0.0620947, 0, 0.162542, 0.909114, 0.0591816, 0, 0.175958, 0.900137, 0.0563917, 0, 0.189739, 0.891069, 0.0535392, 0, 0.203877, 0.882262, 0.0507642, 0, 0.218368, 0.873232, 0.0479793, 0, 0.233208, 0.864042, 0.045226, 0, 0.248393, 0.855002, 0.0425413, 0, 0.263923, 0.846569, 0.0400126, 0, 0.279796, 0.837714, 0.0375269, 0, 0.296012, 0.828918, 0.0352027, 0, 0.312573, 0.819783, 0.0330011, 0, 0.329479, 0.810129, 0.0308908, 0, 0.346734, 0.800866, 0.0289112, 0, 0.364342, 0.79093, 0.0270255, 0, 0.382307, 0.780593, 0.0252758, 0, 0.400637, 0.769511, 0.0236178, 0, 0.419337, 0.758558, 0.0220652, 0, 0.438418, 0.747632, 0.0206289, 0, 0.457889, 0.736146, 0.0192873, 0, 0.477761, 0.724093, 0.0180333, 0, 0.49805, 0.71234, 0.0168264, 0, 0.51877, 0.700201, 0.015746, 0, 0.53994, 0.687949, 0.0147027, 0, 0.561581, 0.676163, 0.0137512, 0, 0.583718, 0.665001, 0.0128655, 0, 0.60638, 0.65472, 0.0120366, 0, 0.629599, 0.644213, 0.0112604, 0, 0.653415, 0.633382, 0.0105413, 0, 0.677874, 0.62212, 0.00986498, 0, 0.70303, 0.610631, 0.00923308, 0, 0.728948, 0.599078, 0.00864206, 0, 0.755706, 0.587519, 0.00811784, 0, 0.783396, 0.575505, 0.00761237, 0, 0.812121, 0.563148, 0.00713949, 0, 0.841989, 0.550828, 0.00668379, 0, 0.873035, 0.538458, 0.00627715, 0, 0.904762, 0.525905, 0.00588336, 0, 0.936508, 0.513517, 0.00552687, 0, 0.968254, 0.501395, 0.00519681, 0, 1, 1, 0.0991506, 0, 0, 1, 0.0991504, 0, 0, 0.999996, 0.0991515, 0, 0, 0.999984, 0.0991558, 0, 0, 0.999947, 0.0991672, 0, 0.000114389, 0.999874, 0.0991912, 0, 0.00121503, 0.999739, 0.0992331, 0, 0.00356108, 0.999514, 0.0992983, 0, 0.00705578, 0.999159, 0.0993877, 0, 0.011574, 0.998586, 0.0994837, 0, 0.017003, 0.995731, 0.0988425, 0, 0.0232484, 0.993384, 0.098276, 0, 0.0302318, 0.991615, 0.0979269, 0, 0.0378884, 0.989029, 0.0973432, 0, 0.0461641, 0.985373, 0.0963539, 0, 0.0550136, 0.981278, 0.0952306, 0, 0.0643988, 0.975777, 0.0936233, 0, 0.0742868, 0.970526, 0.0920219, 0, 0.0846501, 0.963755, 0.0898912, 0, 0.0954644, 0.956676, 0.0876064, 0, 0.106709, 0.948099, 0.0847751, 0, 0.118367, 0.939718, 0.0818638, 0, 0.130423, 0.931305, 0.078857, 0, 0.142862, 0.922342, 0.0756127, 0, 0.155674, 0.912842, 0.0721473, 0, 0.168849, 0.903304, 0.0686195, 0, 0.182378, 0.89411, 0.0650589, 0, 0.196255, 0.885512, 0.0616022, 0, 0.210473, 0.877193, 0.0582434, 0, 0.225027, 0.86877, 0.0548979, 0, 0.239915, 0.860267, 0.0516095, 0, 0.255132, 0.851915, 0.048468, 0, 0.270678, 0.843912, 0.0454447, 0, 0.286551, 0.83604, 0.0425612, 0, 0.302751, 0.828245, 0.0398752, 0, 0.31928, 0.820159, 0.0373198, 0, 0.336138, 0.81167, 0.034916, 0, 0.35333, 0.802659, 0.0326402, 0, 0.370858, 0.793921, 0.0304901, 0, 0.388728, 0.784713, 0.0284857, 0, 0.406944, 0.774946, 0.0266186, 0, 0.425515, 0.76448, 0.0248593, 0, 0.444449, 0.753793, 0.0232114, 0, 0.463756, 0.743506, 0.0217039, 0, 0.483447, 0.732555, 0.0202841, 0, 0.503535, 0.720965, 0.0189648, 0, 0.524036, 0.709422, 0.0177189, 0, 0.544968, 0.697756, 0.0165626, 0, 0.56635, 0.685565, 0.015483, 0, 0.588208, 0.673987, 0.0144892, 0, 0.610569, 0.66244, 0.0135607, 0, 0.633466, 0.651675, 0.0126956, 0, 0.656936, 0.641598, 0.0118788, 0, 0.681025, 0.63121, 0.0111261, 0, 0.705788, 0.620514, 0.010437, 0, 0.731289, 0.609366, 0.00978747, 0, 0.757606, 0.598137, 0.00917257, 0, 0.784834, 0.586966, 0.00859778, 0, 0.813085, 0.575549, 0.00806803, 0, 0.842485, 0.563797, 0.00757294, 0, 0.87313, 0.551758, 0.00710592, 0, 0.904762, 0.539894, 0.0066841, 0, 0.936508, 0.527901, 0.00627901, 0, 0.968254, 0.515819, 0.00590506, 0, 1, 1, 0.120864, 0, 0, 1, 0.120864, 0, 0, 0.999996, 0.120864, 0, 0, 0.99998, 0.120867, 0, 0, 0.99994, 0.120872, 0, 0.000323781, 0.999852, 0.120884, 0, 0.00188693, 0.999693, 0.120903, 0, 0.00473489, 0.999426, 0.120929, 0, 0.00872704, 0.999002, 0.120955, 0, 0.0137237, 0.998235, 0.120918, 0, 0.0196068, 0.994608, 0.119764, 0, 0.0262803, 0.992997, 0.119265, 0, 0.0336657, 0.990968, 0.11863, 0, 0.0416987, 0.987002, 0.117261, 0, 0.0503261, 0.983524, 0.116009, 0, 0.0595035, 0.97875, 0.114252, 0, 0.0691935, 0.972652, 0.11193, 0, 0.0793645, 0.966613, 0.109555, 0, 0.0899894, 0.959275, 0.106612, 0, 0.101045, 0.951272, 0.103375, 0, 0.112512, 0.942323, 0.0996594, 0, 0.124372, 0.933679, 0.0958841, 0, 0.136611, 0.924822, 0.0919265, 0, 0.149216, 0.915742, 0.0878061, 0, 0.162176, 0.906348, 0.0834894, 0, 0.175482, 0.896883, 0.079085, 0, 0.189125, 0.88774, 0.0746745, 0, 0.203098, 0.87986, 0.0705773, 0, 0.217396, 0.871998, 0.0665005, 0, 0.232015, 0.864325, 0.0625413, 0, 0.24695, 0.856685, 0.0586781, 0, 0.2622, 0.84925, 0.0550063, 0, 0.277761, 0.841719, 0.0514727, 0, 0.293634, 0.834755, 0.0481398, 0, 0.309819, 0.827853, 0.0450172, 0, 0.326315, 0.820888, 0.0420969, 0, 0.343126, 0.813616, 0.0393702, 0, 0.360254, 0.805767, 0.0367771, 0, 0.377701, 0.797338, 0.0343274, 0, 0.395474, 0.789122, 0.0320529, 0, 0.413577, 0.780601, 0.0299485, 0, 0.432018, 0.771424, 0.0279812, 0, 0.450804, 0.761502, 0.0261054, 0, 0.469944, 0.751166, 0.0243942, 0, 0.489451, 0.741276, 0.0228087, 0, 0.509337, 0.730898, 0.0213265, 0, 0.529617, 0.719878, 0.0199307, 0, 0.550307, 0.708379, 0.0186574, 0, 0.571428, 0.697165, 0.0174446, 0, 0.593003, 0.685554, 0.0163144, 0, 0.615059, 0.673631, 0.015276, 0, 0.637628, 0.662385, 0.0143003, 0, 0.660746, 0.651059, 0.0134112, 0, 0.68446, 0.640451, 0.0125794, 0, 0.70882, 0.630536, 0.011793, 0, 0.733893, 0.620316, 0.0110547, 0, 0.759756, 0.609722, 0.0103668, 0, 0.786505, 0.598804, 0.00973009, 0, 0.814259, 0.587871, 0.00912812, 0, 0.843157, 0.577121, 0.00858916, 0, 0.87334, 0.566019, 0.00807333, 0, 0.904762, 0.554664, 0.00759687, 0, 0.936508, 0.543101, 0.00714759, 0, 0.968254, 0.531558, 0.00673418, 0, 1, 1, 0.146767, 0, 0, 1, 0.146767, 0, 0, 0.999997, 0.146767, 0, 0, 0.999977, 0.146765, 0, 3.20658e-06, 0.999929, 0.146762, 0, 0.000682576, 0.999823, 0.146753, 0, 0.00276402, 0.999633, 0.146735, 0, 0.00614771, 0.999314, 0.146699, 0, 0.0106613, 0.998796, 0.14662, 0, 0.0161546, 0.997124, 0.146107, 0, 0.0225063, 0.994062, 0.144857, 0, 0.0296198, 0.992154, 0.144011, 0, 0.037417, 0.989186, 0.142712, 0, 0.0458348, 0.985279, 0.140926, 0, 0.0548211, 0.980826, 0.13885, 0, 0.0643326, 0.975056, 0.136168, 0, 0.074333, 0.969005, 0.133217, 0, 0.0847917, 0.961554, 0.12959, 0, 0.0956828, 0.954206, 0.125886, 0, 0.106984, 0.945046, 0.121335, 0, 0.118675, 0.935678, 0.116492, 0, 0.130741, 0.926748, 0.111635, 0, 0.143166, 0.917764, 0.106625, 0, 0.155939, 0.908358, 0.101325, 0, 0.169049, 0.899219, 0.0960249, 0, 0.182487, 0.890089, 0.0906527, 0, 0.196245, 0.881488, 0.0853905, 0, 0.210317, 0.874031, 0.0804177, 0, 0.224697, 0.866932, 0.0756005, 0, 0.23938, 0.859976, 0.0709019, 0, 0.254364, 0.853375, 0.0664391, 0, 0.269646, 0.846971, 0.0622012, 0, 0.285223, 0.840483, 0.058129, 0, 0.301096, 0.833969, 0.0542762, 0, 0.317265, 0.82806, 0.0507042, 0, 0.333729, 0.822128, 0.047368, 0, 0.350491, 0.815989, 0.044272, 0, 0.367554, 0.809336, 0.0413444, 0, 0.38492, 0.802177, 0.038601, 0, 0.402594, 0.79441, 0.0360227, 0, 0.420582, 0.786573, 0.0336383, 0, 0.438891, 0.778619, 0.0314321, 0, 0.457527, 0.77, 0.029362, 0, 0.476499, 0.760698, 0.0274102, 0, 0.49582, 0.750932, 0.0256146, 0, 0.5155, 0.740993, 0.023974, 0, 0.535555, 0.731159, 0.0224182, 0, 0.556, 0.720836, 0.0209889, 0, 0.576855, 0.709913, 0.0196411, 0, 0.598143, 0.698415, 0.0183824, 0, 0.619888, 0.68745, 0.0172222, 0, 0.642123, 0.676154, 0.0161509, 0, 0.664883, 0.664383, 0.0151397, 0, 0.688211, 0.6533, 0.0141873, 0, 0.71216, 0.642072, 0.0133105, 0, 0.736792, 0.631412, 0.0124932, 0, 0.762186, 0.621622, 0.0117408, 0, 0.788439, 0.611681, 0.0110358, 0, 0.815672, 0.60142, 0.0103775, 0, 0.844034, 0.59083, 0.00975623, 0, 0.873699, 0.580254, 0.00918084, 0, 0.904765, 0.569841, 0.00864721, 0, 0.936508, 0.559224, 0.00815731, 0, 0.968254, 0.548315, 0.00767924, 0, 1, 1, 0.177563, 0, 0, 1, 0.177563, 0, 0, 0.999994, 0.177562, 0, 0, 0.999972, 0.177555, 0, 6.64171e-05, 0.999914, 0.177536, 0, 0.0012276, 0.999787, 0.177496, 0, 0.00388025, 0.999556, 0.17742, 0, 0.00783463, 0.999165, 0.177285, 0, 0.0128953, 0.9985, 0.177037, 0, 0.0189053, 0.995388, 0.175634, 0, 0.025742, 0.993102, 0.174375, 0, 0.033309, 0.990992, 0.173121, 0, 0.0415298, 0.986932, 0.170896, 0, 0.0503425, 0.982786, 0.16847, 0, 0.0596964, 0.977592, 0.165455, 0, 0.0695498, 0.971075, 0.161676, 0, 0.0798676, 0.963967, 0.157458, 0, 0.0906201, 0.956397, 0.152836, 0, 0.101783, 0.947489, 0.147467, 0, 0.113333, 0.937564, 0.14145, 0, 0.125254, 0.928182, 0.135383, 0, 0.137529, 0.919027, 0.129212, 0, 0.150144, 0.909618, 0.12276, 0, 0.163088, 0.900492, 0.116273, 0, 0.176351, 0.891671, 0.1098, 0, 0.189924, 0.883146, 0.103362, 0, 0.203799, 0.875151, 0.0970799, 0, 0.21797, 0.868338, 0.0911732, 0, 0.232433, 0.862033, 0.0854966, 0, 0.247182, 0.856107, 0.0800691, 0, 0.262216, 0.850644, 0.0749618, 0, 0.27753, 0.845261, 0.070079, 0, 0.293124, 0.839885, 0.0654321, 0, 0.308997, 0.834609, 0.0610975, 0, 0.325149, 0.829083, 0.0569741, 0, 0.341581, 0.82404, 0.0531736, 0, 0.358294, 0.818968, 0.049665, 0, 0.37529, 0.813496, 0.0463856, 0, 0.392573, 0.807533, 0.0433217, 0, 0.410148, 0.80099, 0.0404402, 0, 0.428019, 0.793891, 0.0377578, 0, 0.446192, 0.786281, 0.0352616, 0, 0.464676, 0.778773, 0.0329577, 0, 0.483478, 0.770737, 0.030808, 0, 0.502608, 0.762094, 0.0287964, 0, 0.522079, 0.752898, 0.0269254, 0, 0.541905, 0.743306, 0.0251926, 0, 0.5621, 0.733416, 0.023595, 0, 0.582684, 0.723742, 0.0221155, 0, 0.603677, 0.713542, 0.0207435, 0, 0.625106, 0.702755, 0.019434, 0, 0.646998, 0.691484, 0.0182046, 0, 0.66939, 0.680531, 0.0170771, 0, 0.692324, 0.66953, 0.0160339, 0, 0.715849, 0.658126, 0.0150677, 0, 0.740028, 0.646933, 0.0141551, 0, 0.764937, 0.636107, 0.0133179, 0, 0.790673, 0.625271, 0.0125284, 0, 0.817358, 0.615225, 0.0117937, 0, 0.84515, 0.605678, 0.0111181, 0, 0.874244, 0.59583, 0.0104759, 0, 0.904828, 0.585704, 0.00986672, 0, 0.936508, 0.575413, 0.00929712, 0, 0.968254, 0.565373, 0.00876713, 0, 1, 1, 0.214058, 0, 0, 0.999999, 0.214058, 0, 0, 0.999994, 0.214055, 0, 0, 0.999966, 0.214039, 0, 0.000259642, 0.999893, 0.213998, 0, 0.00200075, 0.999737, 0.21391, 0, 0.00527775, 0.999449, 0.213745, 0, 0.00983959, 0.99896, 0.213458, 0, 0.0154755, 0.9979, 0.212855, 0, 0.0220249, 0.994278, 0.210779, 0, 0.0293654, 0.992254, 0.20926, 0, 0.0374021, 0.98881, 0.206908, 0, 0.0460604, 0.984715, 0.204009, 0, 0.0552802, 0.979738, 0.200471, 0, 0.0650127, 0.972884, 0.195813, 0, 0.0752175, 0.965996, 0.190856, 0, 0.0858612, 0.957974, 0.185077, 0, 0.0969155, 0.949155, 0.17868, 0, 0.108356, 0.939288, 0.171513, 0, 0.120163, 0.928996, 0.163838, 0, 0.132319, 0.919563, 0.156246, 0, 0.144808, 0.910004, 0.148359, 0, 0.157618, 0.900791, 0.140417, 0, 0.170737, 0.892135, 0.132569, 0, 0.184155, 0.883803, 0.124741, 0, 0.197866, 0.876034, 0.117091, 0, 0.211861, 0.869219, 0.109835, 0, 0.226134, 0.863062, 0.102859, 0, 0.240682, 0.857795, 0.0962928, 0, 0.255499, 0.853009, 0.0900725, 0, 0.270583, 0.848603, 0.0842101, 0, 0.285931, 0.844335, 0.0786527, 0, 0.301542, 0.840208, 0.0734397, 0, 0.317415, 0.836035, 0.0685334, 0, 0.33355, 0.83172, 0.0639275, 0, 0.349948, 0.827135, 0.0595909, 0, 0.36661, 0.822797, 0.0556204, 0, 0.383539, 0.818387, 0.0519394, 0, 0.400738, 0.813565, 0.0485317, 0, 0.41821, 0.808142, 0.0453138, 0, 0.435961, 0.802212, 0.0423354, 0, 0.453997, 0.79573, 0.0395553, 0, 0.472324, 0.788741, 0.036988, 0, 0.490951, 0.781093, 0.0345688, 0, 0.509887, 0.773597, 0.0323297, 0, 0.529144, 0.765622, 0.0302719, 0, 0.548735, 0.757083, 0.0283477, 0, 0.568674, 0.747992, 0.0265562, 0, 0.588979, 0.738591, 0.0248844, 0, 0.609671, 0.728719, 0.0233342, 0, 0.630773, 0.719146, 0.0219081, 0, 0.652314, 0.709165, 0.0205711, 0, 0.674328, 0.69875, 0.0193248, 0, 0.696854, 0.687884, 0.0181582, 0, 0.719942, 0.676818, 0.0170746, 0, 0.743651, 0.666247, 0.0160718, 0, 0.768057, 0.655284, 0.0151262, 0, 0.793253, 0.64401, 0.0142561, 0, 0.819363, 0.633353, 0.0134327, 0, 0.846547, 0.622674, 0.012653, 0, 0.875017, 0.612265, 0.0119354, 0, 0.905021, 0.602455, 0.0112533, 0, 0.936508, 0.593147, 0.0106234, 0, 0.968254, 0.583592, 0.0100213, 0, 1, 1, 0.25717, 0, 0, 1, 0.25717, 0, 0, 0.999992, 0.257164, 0, 0, 0.999958, 0.257135, 0, 0.000641715, 0.999864, 0.25706, 0, 0.00305314, 0.999666, 0.256897, 0, 0.00700975, 0.999302, 0.256596, 0, 0.0122194, 0.998663, 0.25607, 0, 0.0184622, 0.995607, 0.254123, 0, 0.0255773, 0.993094, 0.252081, 0, 0.0334439, 0.9907, 0.249867, 0, 0.0419696, 0.98594, 0.246118, 0, 0.0510823, 0.981214, 0.242049, 0, 0.0607242, 0.974966, 0.236869, 0, 0.0708486, 0.967589, 0.230724, 0, 0.081417, 0.95915, 0.223635, 0, 0.0923974, 0.950257, 0.21596, 0, 0.103763, 0.940165, 0.207296, 0, 0.115491, 0.929396, 0.197901, 0, 0.127562, 0.919288, 0.188437, 0, 0.13996, 0.909428, 0.178762, 0, 0.15267, 0.900105, 0.169072, 0, 0.165679, 0.891418, 0.159478, 0, 0.178979, 0.883347, 0.15002, 0, 0.192558, 0.875992, 0.140813, 0, 0.20641, 0.869466, 0.13196, 0, 0.220529, 0.863699, 0.123501, 0, 0.234907, 0.858553, 0.115436, 0, 0.249542, 0.854379, 0.107901, 0, 0.264428, 0.850894, 0.10088, 0, 0.279564, 0.847632, 0.0942296, 0, 0.294947, 0.844571, 0.0879861, 0, 0.310575, 0.84163, 0.0821534, 0, 0.326448, 0.838542, 0.0766409, 0, 0.342566, 0.835412, 0.0715322, 0, 0.358929, 0.831899, 0.0666883, 0, 0.37554, 0.828177, 0.0622175, 0, 0.392399, 0.82416, 0.0580452, 0, 0.409511, 0.820393, 0.054267, 0, 0.426878, 0.816068, 0.0507172, 0, 0.444506, 0.811201, 0.0474041, 0, 0.4624, 0.805785, 0.0443174, 0, 0.480566, 0.799878, 0.0414562, 0, 0.499013, 0.793469, 0.0388147, 0, 0.517749, 0.786473, 0.0363453, 0, 0.536785, 0.778874, 0.0340225, 0, 0.556134, 0.771277, 0.0318599, 0, 0.575809, 0.763426, 0.0298859, 0, 0.595827, 0.755044, 0.0280357, 0, 0.616207, 0.746161, 0.0262979, 0, 0.636973, 0.737124, 0.0247295, 0, 0.65815, 0.72761, 0.0232514, 0, 0.679772, 0.717822, 0.0218755, 0, 0.701876, 0.708279, 0.0205942, 0, 0.724509, 0.698333, 0.0193947, 0, 0.74773, 0.68802, 0.0182717, 0, 0.771609, 0.677321, 0.0172044, 0, 0.79624, 0.666504, 0.0162122, 0, 0.821743, 0.656184, 0.0152924, 0, 0.84828, 0.64556, 0.0144326, 0, 0.876069, 0.634636, 0.0136157, 0, 0.905404, 0.624124, 0.0128612, 0, 0.936508, 0.613914, 0.0121435, 0, 0.968254, 0.603589, 0.0114887, 0, 1, 1, 0.307946, 0, 0, 0.999999, 0.307945, 0, 0, 0.999988, 0.307934, 0, 2.04479e-05, 0.999944, 0.307886, 0, 0.00127833, 0.999824, 0.307756, 0, 0.00445047, 0.999565, 0.30748, 0, 0.00914673, 0.999085, 0.306966, 0, 0.0150498, 0.998103, 0.306004, 0, 0.0219367, 0.994249, 0.303028, 0, 0.0296485, 0.991807, 0.300435, 0, 0.038068, 0.987773, 0.296554, 0, 0.0471062, 0.982673, 0.2916, 0, 0.0566942, 0.976623, 0.285641, 0, 0.0667768, 0.968757, 0.27815, 0, 0.0773099, 0.959849, 0.269529, 0, 0.088257, 0.950663, 0.260248, 0, 0.0995879, 0.940129, 0.249704, 0, 0.111277, 0.92895, 0.238291, 0, 0.123304, 0.917996, 0.226501, 0, 0.13565, 0.907813, 0.214669, 0, 0.148299, 0.898305, 0.202835, 0, 0.161237, 0.889626, 0.191158, 0, 0.174455, 0.88175, 0.179695, 0, 0.187941, 0.874715, 0.168548, 0, 0.201687, 0.868746, 0.15792, 0, 0.215687, 0.863703, 0.147807, 0, 0.229933, 0.859315, 0.138149, 0, 0.24442, 0.855538, 0.128993, 0, 0.259145, 0.852428, 0.120414, 0, 0.274103, 0.850168, 0.112498, 0, 0.289293, 0.848132, 0.105054, 0, 0.304711, 0.846291, 0.0981087, 0, 0.320357, 0.844431, 0.0915942, 0, 0.33623, 0.842493, 0.0855056, 0, 0.35233, 0.840368, 0.0798204, 0, 0.368658, 0.83798, 0.0745097, 0, 0.385214, 0.83523, 0.0695424, 0, 0.402002, 0.832091, 0.0649092, 0, 0.419023, 0.828667, 0.0606291, 0, 0.436282, 0.824805, 0.0566523, 0, 0.453782, 0.820988, 0.0530229, 0, 0.471529, 0.816635, 0.0496364, 0, 0.489528, 0.811725, 0.0464658, 0, 0.507788, 0.806316, 0.0435082, 0, 0.526317, 0.800469, 0.0407873, 0, 0.545124, 0.794107, 0.038255, 0, 0.564221, 0.787218, 0.0358825, 0, 0.583621, 0.779872, 0.0336785, 0, 0.603341, 0.772097, 0.0316379, 0, 0.623397, 0.764484, 0.0297379, 0, 0.643812, 0.756428, 0.0279581, 0, 0.664611, 0.748022, 0.0263153, 0, 0.685824, 0.739268, 0.0247799, 0, 0.707488, 0.73024, 0.0233385, 0, 0.729646, 0.720893, 0.0220035, 0, 0.752354, 0.71119, 0.0207555, 0, 0.77568, 0.701791, 0.0195843, 0, 0.799715, 0.692184, 0.0184891, 0, 0.824574, 0.682258, 0.0174541, 0, 0.850417, 0.67206, 0.0164873, 0, 0.877466, 0.661717, 0.0155959, 0, 0.90604, 0.651462, 0.0147519, 0, 0.936528, 0.641467, 0.0139727, 0, 0.968254, 0.631229, 0.0132363, 0, 1, 1, 0.367573, 0, 0, 0.999999, 0.367571, 0, 0, 0.999984, 0.367553, 0, 0.000183382, 0.999925, 0.367473, 0, 0.00225254, 0.999759, 0.367259, 0, 0.00628165, 0.99941, 0.366801, 0, 0.0117858, 0.998739, 0.365946, 0, 0.0184359, 0.995529, 0.363191, 0, 0.0260114, 0.992875, 0.360171, 0, 0.0343581, 0.989135, 0.355981, 0, 0.0433637, 0.984166, 0.350401, 0, 0.0529438, 0.977871, 0.343348, 0, 0.0630334, 0.96951, 0.334341, 0, 0.0735805, 0.959964, 0.323862, 0, 0.0845437, 0.950162, 0.312521, 0, 0.095889, 0.938882, 0.299577, 0, 0.107588, 0.926992, 0.285573, 0, 0.119617, 0.915589, 0.271212, 0, 0.131957, 0.904791, 0.256611, 0, 0.144591, 0.895177, 0.242224, 0, 0.157503, 0.886403, 0.227952, 0, 0.170682, 0.878957, 0.214192, 0, 0.184117, 0.872418, 0.200795, 0, 0.197799, 0.867029, 0.188015, 0, 0.21172, 0.862835, 0.175975, 0, 0.225873, 0.859411, 0.164526, 0, 0.240253, 0.856655, 0.153693, 0, 0.254854, 0.854519, 0.14352, 0, 0.269673, 0.852828, 0.13397, 0, 0.284707, 0.851412, 0.124984, 0, 0.299953, 0.850609, 0.116748, 0, 0.315408, 0.849855, 0.10905, 0, 0.331073, 0.849017, 0.101839, 0, 0.346946, 0.848079, 0.0951359, 0, 0.363028, 0.846911, 0.0888774, 0, 0.379318, 0.845445, 0.0830375, 0, 0.395818, 0.84362, 0.0775844, 0, 0.41253, 0.841411, 0.0725054, 0, 0.429457, 0.838768, 0.0677691, 0, 0.446602, 0.835801, 0.0634016, 0, 0.463968, 0.832341, 0.0593095, 0, 0.481561, 0.828424, 0.0555121, 0, 0.499386, 0.824312, 0.052024, 0, 0.51745, 0.819918, 0.0487865, 0, 0.535761, 0.815072, 0.0457801, 0, 0.554328, 0.809863, 0.0430184, 0, 0.573162, 0.804164, 0.0404245, 0, 0.592275, 0.798034, 0.0380146, 0, 0.611681, 0.791436, 0.0357436, 0, 0.631398, 0.784498, 0.0336475, 0, 0.651445, 0.777125, 0.0316666, 0, 0.671845, 0.769365, 0.0298122, 0, 0.692628, 0.761579, 0.0281001, 0, 0.713827, 0.753746, 0.0265049, 0, 0.735484, 0.745573, 0.0250067, 0, 0.75765, 0.737083, 0.0236026, 0, 0.78039, 0.728545, 0.0223302, 0, 0.803789, 0.719691, 0.0211243, 0, 0.82796, 0.710569, 0.0199983, 0, 0.853056, 0.701216, 0.0189569, 0, 0.879298, 0.692094, 0.0179702, 0, 0.907014, 0.682909, 0.0170418, 0, 0.936691, 0.673509, 0.0161732, 0, 0.968254, 0.663863, 0.0153406, 0, 1, 1, 0.437395, 0, 0, 0.999998, 0.437394, 0, 0, 0.99998, 0.437363, 0, 0.000616704, 0.999891, 0.437232, 0, 0.00367925, 0.999656, 0.436877, 0, 0.00867446, 0.999148, 0.436121, 0, 0.0150679, 0.997959, 0.434564, 0, 0.022531, 0.993464, 0.430134, 0, 0.0308507, 0.990606, 0.426077, 0, 0.0398805, 0.985027, 0.419397, 0, 0.0495148, 0.978491, 0.41118, 0, 0.0596749, 0.969643, 0.40048, 0, 0.0703001, 0.959189, 0.38769, 0, 0.0813427, 0.948223, 0.373575, 0, 0.0927641, 0.935955, 0.357622, 0, 0.104533, 0.923237, 0.34043, 0, 0.116624, 0.911074, 0.322735, 0, 0.129015, 0.899724, 0.30479, 0, 0.141687, 0.890189, 0.287392, 0, 0.154626, 0.881796, 0.270248, 0, 0.167818, 0.874781, 0.253659, 0, 0.181252, 0.869166, 0.237786, 0, 0.194918, 0.864725, 0.222618, 0, 0.208807, 0.861565, 0.208356, 0, 0.222913, 0.859284, 0.194867, 0, 0.237229, 0.857677, 0.18212, 0, 0.25175, 0.856714, 0.17018, 0, 0.266473, 0.856155, 0.158969, 0, 0.281392, 0.8558, 0.148413, 0, 0.296505, 0.855672, 0.138578, 0, 0.311811, 0.855538, 0.129345, 0, 0.327306, 0.855689, 0.120861, 0, 0.342991, 0.855767, 0.112969, 0, 0.358864, 0.855618, 0.105593, 0, 0.374925, 0.85525, 0.0987451, 0, 0.391176, 0.854583, 0.0923727, 0, 0.407616, 0.853534, 0.0864143, 0, 0.424249, 0.852061, 0.0808338, 0, 0.441076, 0.850253, 0.0756771, 0, 0.4581, 0.848004, 0.0708612, 0, 0.475324, 0.845333, 0.0663784, 0, 0.492754, 0.842376, 0.0622631, 0, 0.510394, 0.838956, 0.0584112, 0, 0.528251, 0.835121, 0.0548328, 0, 0.546331, 0.830842, 0.0514838, 0, 0.564644, 0.826212, 0.048355, 0, 0.583198, 0.821522, 0.0454714, 0, 0.602005, 0.816551, 0.0428263, 0, 0.621078, 0.811211, 0.0403612, 0, 0.640434, 0.805479, 0.038039, 0, 0.660089, 0.799409, 0.0358739, 0, 0.680066, 0.79306, 0.0338727, 0, 0.70039, 0.786395, 0.0319985, 0, 0.721094, 0.779416, 0.030241, 0, 0.742215, 0.77214, 0.0285951, 0, 0.7638, 0.764636, 0.0270747, 0, 0.785912, 0.756836, 0.0256354, 0, 0.808628, 0.749315, 0.0243027, 0, 0.832055, 0.741561, 0.0230497, 0, 0.856338, 0.733589, 0.0218801, 0, 0.88169, 0.725479, 0.020784, 0, 0.908441, 0.717255, 0.0197702, 0, 0.937125, 0.708829, 0.0188168, 0, 0.968254, 0.700191, 0.0179113, 0, 1, 1, 0.518937, 0, 0, 0.999998, 0.518933, 0, 0, 0.999967, 0.518883, 0, 0.00147741, 0.999832, 0.51866, 0, 0.00573221, 0.999466, 0.518057, 0, 0.011826, 0.998644, 0.516752, 0, 0.0192116, 0.994458, 0.512347, 0, 0.027573, 0.991223, 0.507675, 0, 0.0367099, 0.985515, 0.500188, 0, 0.046487, 0.978308, 0.490408, 0, 0.0568071, 0.968359, 0.477357, 0, 0.0675984, 0.95682, 0.461752, 0, 0.0788059, 0.943929, 0.443796, 0, 0.090386, 0.930224, 0.423893, 0, 0.102304, 0.916514, 0.402682, 0, 0.114532, 0.903653, 0.380914, 0, 0.127047, 0.892315, 0.359212, 0, 0.139828, 0.882942, 0.338102, 0, 0.152861, 0.875438, 0.31773, 0, 0.16613, 0.869642, 0.298186, 0, 0.179624, 0.865304, 0.279491, 0, 0.193332, 0.862382, 0.261804, 0, 0.207247, 0.860666, 0.245146, 0, 0.22136, 0.859788, 0.229406, 0, 0.235666, 0.859608, 0.214605, 0, 0.250158, 0.859912, 0.200691, 0, 0.264832, 0.86053, 0.187623, 0, 0.279684, 0.861368, 0.17539, 0, 0.294711, 0.862237, 0.163901, 0, 0.309911, 0.863127, 0.153175, 0, 0.32528, 0.863923, 0.143147, 0, 0.340819, 0.864567, 0.133781, 0, 0.356524, 0.865013, 0.125042, 0, 0.372397, 0.86539, 0.116952, 0, 0.388438, 0.865591, 0.109476, 0, 0.404645, 0.865517, 0.102542, 0, 0.421022, 0.865084, 0.0960688, 0, 0.437569, 0.864309, 0.0900499, 0, 0.454287, 0.863151, 0.0844328, 0, 0.471181, 0.861649, 0.0792218, 0, 0.488253, 0.859742, 0.0743482, 0, 0.505507, 0.857446, 0.0697963, 0, 0.522947, 0.854757, 0.0655364, 0, 0.54058, 0.851783, 0.061608, 0, 0.558412, 0.848516, 0.0579701, 0, 0.576449, 0.844897, 0.0545742, 0, 0.594701, 0.840956, 0.0514167, 0, 0.613178, 0.836676, 0.0484598, 0, 0.631892, 0.832075, 0.0456934, 0, 0.650856, 0.827191, 0.0431178, 0, 0.670088, 0.822295, 0.0407718, 0, 0.689606, 0.817294, 0.0386032, 0, 0.709434, 0.812013, 0.0365675, 0, 0.7296, 0.806465, 0.0346547, 0, 0.750138, 0.800691, 0.0328717, 0, 0.771093, 0.794709, 0.031211, 0, 0.792519, 0.788493, 0.0296504, 0, 0.814488, 0.782049, 0.0281782, 0, 0.837097, 0.775403, 0.0267965, 0, 0.860481, 0.76857, 0.0255002, 0, 0.884842, 0.761536, 0.0242759, 0, 0.910494, 0.754303, 0.0231142, 0, 0.937985, 0.74692, 0.0220305, 0, 0.968254, 0.739745, 0.0210192, 0, 1, 1, 0.613914, 0, 0, 0.999996, 0.613907, 0, 9.63597e-05, 0.999942, 0.613814, 0, 0.00301247, 0.999704, 0.613407, 0, 0.00870385, 0.999046, 0.612302, 0, 0.0160714, 0.995516, 0.608266, 0, 0.0245899, 0.991726, 0.602863, 0, 0.0339681, 0.985157, 0.593956, 0, 0.0440254, 0.97642, 0.581748, 0, 0.0546409, 0.964404, 0.565183, 0, 0.0657284, 0.950601, 0.545273, 0, 0.0772246, 0.935158, 0.522129, 0, 0.0890812, 0.919364, 0.496782, 0, 0.10126, 0.904754, 0.470571, 0, 0.113731, 0.89176, 0.444037, 0, 0.126469, 0.881492, 0.418322, 0, 0.139454, 0.873656, 0.393522, 0, 0.15267, 0.868053, 0.369795, 0, 0.166101, 0.864336, 0.347171, 0, 0.179736, 0.862259, 0.325737, 0, 0.193565, 0.861556, 0.305532, 0, 0.207578, 0.861776, 0.286416, 0, 0.221769, 0.862661, 0.268355, 0, 0.23613, 0.864015, 0.251334, 0, 0.250656, 0.865711, 0.235352, 0, 0.265343, 0.867519, 0.220302, 0, 0.280187, 0.869351, 0.206161, 0, 0.295183, 0.871144, 0.192908, 0, 0.31033, 0.872839, 0.180505, 0, 0.325624, 0.874307, 0.168848, 0, 0.341065, 0.875667, 0.158021, 0, 0.35665, 0.876758, 0.147877, 0, 0.37238, 0.87764, 0.138441, 0, 0.388253, 0.878237, 0.129627, 0, 0.404269, 0.878563, 0.121415, 0, 0.42043, 0.878572, 0.113741, 0, 0.436735, 0.87842, 0.106652, 0, 0.453187, 0.878057, 0.100097, 0, 0.469786, 0.877413, 0.0940128, 0, 0.486536, 0.87646, 0.0883462, 0, 0.503439, 0.875233, 0.0830924, 0, 0.520498, 0.8737, 0.0781975, 0, 0.537717, 0.871873, 0.07364, 0, 0.555102, 0.86978, 0.0694103, 0, 0.572657, 0.867405, 0.0654696, 0, 0.59039, 0.864751, 0.0617914, 0, 0.608307, 0.861818, 0.0583491, 0, 0.626419, 0.858645, 0.0551443, 0, 0.644733, 0.855307, 0.0521894, 0, 0.663264, 0.851736, 0.0494334, 0, 0.682025, 0.847927, 0.0468504, 0, 0.701032, 0.843888, 0.0444261, 0, 0.720308, 0.839629, 0.0421497, 0, 0.739875, 0.835158, 0.0400082, 0, 0.759764, 0.830509, 0.0380076, 0, 0.780014, 0.825714, 0.0361488, 0, 0.800673, 0.820729, 0.0343956, 0, 0.821803, 0.815751, 0.0327781, 0, 0.843492, 0.810752, 0.031275, 0, 0.86586, 0.805587, 0.0298542, 0, 0.889087, 0.800317, 0.0285397, 0, 0.913466, 0.79489, 0.0272948, 0, 0.93952, 0.789314, 0.0261139, 0, 0.96835, 0.783593, 0.0249938, 0, 1, 1, 0.724258, 0, 0, 0.999992, 0.724243, 0, 0.000726889, 0.99987, 0.724044, 0, 0.00569574, 0.999336, 0.72317, 0, 0.0131702, 0.996271, 0.719432, 0, 0.0220738, 0.991159, 0.712576, 0, 0.0319405, 0.982465, 0.700927, 0, 0.0425202, 0.97049, 0.684297, 0, 0.0536599, 0.953973, 0.661244, 0, 0.065258, 0.935546, 0.633804, 0, 0.0772427, 0.916596, 0.603071, 0, 0.0895616, 0.899353, 0.57105, 0, 0.102175, 0.885216, 0.539206, 0, 0.11505, 0.875076, 0.508714, 0, 0.128164, 0.868334, 0.479571, 0, 0.141495, 0.864414, 0.451796, 0, 0.155026, 0.862678, 0.425328, 0, 0.168745, 0.862835, 0.400352, 0, 0.182639, 0.864067, 0.376532, 0, 0.196699, 0.866086, 0.35391, 0, 0.210915, 0.868557, 0.332424, 0, 0.225282, 0.871271, 0.312053, 0, 0.239792, 0.874058, 0.292764, 0, 0.25444, 0.8768, 0.27453, 0, 0.269223, 0.87939, 0.257297, 0, 0.284135, 0.8819, 0.24114, 0, 0.299174, 0.884187, 0.225934, 0, 0.314337, 0.886262, 0.211669, 0, 0.329622, 0.888119, 0.198311, 0, 0.345026, 0.889709, 0.185783, 0, 0.360549, 0.891054, 0.174063, 0, 0.376189, 0.892196, 0.163143, 0, 0.391946, 0.893101, 0.152952, 0, 0.407819, 0.893803, 0.143475, 0, 0.423808, 0.894277, 0.134647, 0, 0.439914, 0.894532, 0.126434, 0, 0.456137, 0.894576, 0.1188, 0, 0.472479, 0.894393, 0.111694, 0, 0.48894, 0.893976, 0.105069, 0, 0.505523, 0.893346, 0.0989077, 0, 0.52223, 0.892502, 0.0931724, 0, 0.539064, 0.891441, 0.0878276, 0, 0.556028, 0.890276, 0.082903, 0, 0.573125, 0.888972, 0.0783505, 0, 0.590361, 0.887469, 0.0741083, 0, 0.607741, 0.885785, 0.0701633, 0, 0.62527, 0.883914, 0.0664835, 0, 0.642957, 0.881872, 0.0630567, 0, 0.660809, 0.879651, 0.0598527, 0, 0.678836, 0.877267, 0.0568615, 0, 0.69705, 0.874717, 0.05406, 0, 0.715465, 0.872012, 0.0514378, 0, 0.734098, 0.869157, 0.0489805, 0, 0.752968, 0.866155, 0.0466727, 0, 0.772101, 0.863014, 0.0445056, 0, 0.791529, 0.859748, 0.0424733, 0, 0.81129, 0.856416, 0.0405957, 0, 0.831438, 0.852958, 0.0388273, 0, 0.852044, 0.849382, 0.0371619, 0, 0.87321, 0.845694, 0.0355959, 0, 0.89509, 0.841893, 0.0341155, 0, 0.917932, 0.837981, 0.0327141, 0, 0.942204, 0.833963, 0.0313856, 0, 0.968981, 0.829847, 0.0301275, 0, 1, 1, 0.85214, 0, 0, 0.999969, 0.852095, 0, 0.00279627, 0.999483, 0.851408, 0, 0.0107635, 0.994545, 0.84579, 0, 0.0206454, 0.986188, 0.835231, 0, 0.0315756, 0.969847, 0.814687, 0, 0.0432021, 0.945951, 0.783735, 0, 0.0553396, 0.91917, 0.746074, 0, 0.0678766, 0.895488, 0.706938, 0, 0.0807395, 0.878232, 0.669534, 0, 0.0938767, 0.868252, 0.635168, 0, 0.10725, 0.863873, 0.603069, 0, 0.120832, 0.863369, 0.572514, 0, 0.134598, 0.86545, 0.543169, 0, 0.148533, 0.868803, 0.514578, 0, 0.16262, 0.872794, 0.486762, 0, 0.176849, 0.87702, 0.459811, 0, 0.19121, 0.881054, 0.433654, 0, 0.205694, 0.884974, 0.408574, 0, 0.220294, 0.888587, 0.384525, 0, 0.235005, 0.891877, 0.36156, 0, 0.24982, 0.894793, 0.339661, 0, 0.264737, 0.89743, 0.318913, 0, 0.279751, 0.899796, 0.299302, 0, 0.294859, 0.901943, 0.280843, 0, 0.310058, 0.903858, 0.263481, 0, 0.325346, 0.905574, 0.247197, 0, 0.340721, 0.907069, 0.231915, 0, 0.356181, 0.908379, 0.217614, 0, 0.371725, 0.90952, 0.20425, 0, 0.387353, 0.910483, 0.191758, 0, 0.403063, 0.91128, 0.180092, 0, 0.418854, 0.911936, 0.169222, 0, 0.434727, 0.912454, 0.159098, 0, 0.450682, 0.912835, 0.149668, 0, 0.466718, 0.913078, 0.140884, 0, 0.482837, 0.913192, 0.132709, 0, 0.499038, 0.913175, 0.125095, 0, 0.515324, 0.91304, 0.118012, 0, 0.531695, 0.912781, 0.111417, 0, 0.548153, 0.91241, 0.105281, 0, 0.5647, 0.911924, 0.0995691, 0, 0.581338, 0.911331, 0.0942531, 0, 0.59807, 0.910637, 0.0893076, 0, 0.6149, 0.90984, 0.0846998, 0, 0.63183, 0.908941, 0.0804044, 0, 0.648865, 0.907944, 0.0763984, 0, 0.666011, 0.906857, 0.0726638, 0, 0.683273, 0.90568, 0.0691783, 0, 0.700659, 0.904416, 0.0659222, 0, 0.718176, 0.903067, 0.0628782, 0, 0.735834, 0.901637, 0.0600307, 0, 0.753646, 0.900128, 0.0573647, 0, 0.771625, 0.898544, 0.0548668, 0, 0.78979, 0.89689, 0.052527, 0, 0.808162, 0.895165, 0.0503306, 0, 0.826771, 0.893371, 0.0482668, 0, 0.845654, 0.891572, 0.0463605, 0, 0.864863, 0.889763, 0.0445998, 0, 0.884472, 0.887894, 0.0429451, 0, 0.904592, 0.885967, 0.0413884, 0, 0.925407, 0.883984, 0.0399225, 0, 0.947271, 0.881945, 0.0385405, 0, 0.97105, 0.879854, 0.0372362, 0, 1, 0.999804, 0.995833, 0, 0, 0.938155, 0.933611, 0, 0.0158731, 0.864755, 0.854311, 0, 0.0317461, 0.888594, 0.865264, 0, 0.0476191, 0.905575, 0.863922, 0, 0.0634921, 0.915125, 0.850558, 0, 0.0793651, 0.920665, 0.829254, 0, 0.0952381, 0.924073, 0.802578, 0, 0.111111, 0.926304, 0.772211, 0, 0.126984, 0.927829, 0.739366, 0, 0.142857, 0.928924, 0.705033, 0, 0.15873, 0.92973, 0.670019, 0, 0.174603, 0.930339, 0.634993, 0, 0.190476, 0.930811, 0.600485, 0, 0.206349, 0.931191, 0.566897, 0, 0.222222, 0.93149, 0.534485, 0, 0.238095, 0.931737, 0.503429, 0, 0.253968, 0.931939, 0.473811, 0, 0.269841, 0.932108, 0.445668, 0, 0.285714, 0.93225, 0.418993, 0, 0.301587, 0.932371, 0.393762, 0, 0.31746, 0.932474, 0.369939, 0, 0.333333, 0.932562, 0.347479, 0, 0.349206, 0.932638, 0.326336, 0, 0.365079, 0.932703, 0.306462, 0, 0.380952, 0.93276, 0.287805, 0, 0.396825, 0.932809, 0.270313, 0, 0.412698, 0.932851, 0.253933, 0, 0.428571, 0.932887, 0.23861, 0, 0.444444, 0.932917, 0.224289, 0, 0.460317, 0.932943, 0.210917, 0, 0.47619, 0.932965, 0.19844, 0, 0.492063, 0.932982, 0.186807, 0, 0.507937, 0.932995, 0.175966, 0, 0.52381, 0.933005, 0.165869, 0, 0.539683, 0.933011, 0.156468, 0, 0.555556, 0.933013, 0.147719, 0, 0.571429, 0.933013, 0.139579, 0, 0.587302, 0.93301, 0.132007, 0, 0.603175, 0.933004, 0.124965, 0, 0.619048, 0.932994, 0.118416, 0, 0.634921, 0.932982, 0.112326, 0, 0.650794, 0.932968, 0.106663, 0, 0.666667, 0.93295, 0.101397, 0, 0.68254, 0.932931, 0.0964993, 0, 0.698413, 0.932908, 0.0919438, 0, 0.714286, 0.932883, 0.0877057, 0, 0.730159, 0.932856, 0.0837623, 0, 0.746032, 0.932827, 0.0800921, 0, 0.761905, 0.932796, 0.0766754, 0, 0.777778, 0.932762, 0.0734936, 0, 0.793651, 0.932727, 0.0705296, 0, 0.809524, 0.932689, 0.0677676, 0, 0.825397, 0.93265, 0.0651929, 0, 0.84127, 0.932609, 0.0627917, 0, 0.857143, 0.932565, 0.0605515, 0, 0.873016, 0.932521, 0.0584606, 0, 0.888889, 0.932474, 0.0565082, 0, 0.904762, 0.932427, 0.0546841, 0, 0.920635, 0.932377, 0.0529793, 0, 0.936508, 0.932326, 0.0513851, 0, 0.952381, 0.932274, 0.0498936, 0, 0.968254, 0.93222, 0.0484975, 0, 0.984127, 0.932164, 0.0471899, 0, 1 ];\n\n\t\t// data textures\n\n\t\tconst ltc_float_1 = new Float32Array( LTC_MAT_1 );\n\t\tconst ltc_float_2 = new Float32Array( LTC_MAT_2 );\n\n\t\tconst LTC_FLOAT_1 = new DataTexture( ltc_float_1, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\t\tconst LTC_FLOAT_2 = new DataTexture( ltc_float_2, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\n\t\tLTC_FLOAT_1.needsUpdate = true;\n\t\tLTC_FLOAT_2.needsUpdate = true;\n\n\t\tconst ltc_half_1 = new Uint16Array( LTC_MAT_1.length );\n\n\t\tLTC_MAT_1.forEach( function ( x, index ) {\n\n\t\t\tltc_half_1[ index ] = DataUtils.toHalfFloat( x );\n\n\t\t} );\n\n\t\tconst ltc_half_2 = new Uint16Array( LTC_MAT_2.length );\n\n\t\tLTC_MAT_2.forEach( function ( x, index ) {\n\n\t\t\tltc_half_2[ index ] = DataUtils.toHalfFloat( x );\n\n\t\t} );\n\n\t\tconst LTC_HALF_1 = new DataTexture( ltc_half_1, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\t\tconst LTC_HALF_2 = new DataTexture( ltc_half_2, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\n\t\tLTC_HALF_1.needsUpdate = true;\n\t\tLTC_HALF_2.needsUpdate = true;\n\n\t\tthis.LTC_HALF_1 = LTC_HALF_1;\n\t\tthis.LTC_HALF_1 = LTC_HALF_2;\n\n\t\tthis.LTC_FLOAT_1 = LTC_FLOAT_1;\n\t\tthis.LTC_FLOAT_2 = LTC_FLOAT_2;\n\n\t\treturn this;\n\n\t}\n\n}\n\nRectAreaLightTexturesLib.LTC_HALF_1 = null;\nRectAreaLightTexturesLib.LTC_HALF_1 = null;\n\nRectAreaLightTexturesLib.LTC_FLOAT_1 = null;\nRectAreaLightTexturesLib.LTC_FLOAT_2 = null;\n\nexport { RectAreaLightTexturesLib };\n", "import { UniformsLib } from 'three';\nimport { RectAreaLightTexturesLib } from './RectAreaLightTexturesLib.js';\n\nclass RectAreaLightUniformsLib {\n\n\tstatic init() {\n\n\t\tRectAreaLightTexturesLib.init();\n\n\t\tconst { LTC_FLOAT_1, LTC_FLOAT_2, LTC_HALF_1, LTC_HALF_2 } = RectAreaLightTexturesLib;\n\n\t\t// data textures\n\n\t\tUniformsLib.LTC_FLOAT_1 = LTC_FLOAT_1;\n\t\tUniformsLib.LTC_FLOAT_2 = LTC_FLOAT_2;\n\n\t\tUniformsLib.LTC_HALF_1 = LTC_HALF_1;\n\t\tUniformsLib.LTC_HALF_2 = LTC_HALF_2;\n\n\t}\n\n}\n\nexport { RectAreaLightUniformsLib };\n", "import {\n\tBox3,\n\tFloat32BufferAttribute,\n\tInstancedBufferGeometry,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tSphere,\n\tVector3,\n\tWireframeGeometry\n} from 'three';\n\nconst _box = new Box3();\nconst _vector = new Vector3();\n\nclass LineSegmentsGeometry extends InstancedBufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isLineSegmentsGeometry = true;\n\n\t\tthis.type = 'LineSegmentsGeometry';\n\n\t\tconst positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\t\tconst uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\n\t\tconst index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\n\n\t\tthis.setIndex( index );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined ) {\n\n\t\t\tstart.applyMatrix4( matrix );\n\n\t\t\tend.applyMatrix4( matrix );\n\n\t\t\tstart.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetPositions( array ) {\n\n\t\tlet lineSegments;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tlineSegments = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tlineSegments = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\n\n\t\tthis.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\n\t\tthis.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\n\n\t\t//\n\n\t\tthis.computeBoundingBox();\n\t\tthis.computeBoundingSphere();\n\n\t\treturn this;\n\n\t}\n\n\tsetColors( array ) {\n\n\t\tlet colors;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tcolors = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tcolors = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\n\n\t\tthis.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\n\t\tthis.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\n\n\t\treturn this;\n\n\t}\n\n\tfromWireframeGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromEdgesGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromMesh( mesh ) {\n\n\t\tthis.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) );\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tfromLineSegments( lineSegments ) {\n\n\t\tconst geometry = lineSegments.geometry;\n\n\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( start );\n\n\t\t\t_box.setFromBufferAttribute( end );\n\n\t\t\tthis.boundingBox.union( _box );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\tthis.boundingBox.getCenter( center );\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = start.count; i < il; i ++ ) {\n\n\t\t\t\t_vector.fromBufferAttribute( start, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t\t_vector.fromBufferAttribute( end, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\t// todo\n\n\t}\n\n\tapplyMatrix( matrix ) {\n\n\t\tconsole.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' );\n\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n}\n\nexport { LineSegmentsGeometry };\n", "import {\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2,\n} from 'three';\n\nUniformsLib.line = {\n\n\tworldUnits: { value: 1 },\n\tlinewidth: { value: 1 },\n\tresolution: { value: new Vector2( 1, 1 ) },\n\tdashOffset: { value: 0 },\n\tdashScale: { value: 1 },\n\tdashSize: { value: 1 },\n\tgapSize: { value: 1 } // todo FIX - maybe change to totalSize\n\n};\n\nShaderLib[ 'line' ] = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.line\n\t] ),\n\n\tvertexShader:\n\t/* glsl */`\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tworldStart = start.xyz;\n\t\t\t\tworldEnd = end.xyz;\n\n\t\t\t#else\n\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\t\tvec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );\n\t\t\t\tvec3 worldUp = normalize( cross( worldDir, tmpFwd ) );\n\t\t\t\tvec3 worldFwd = cross( worldDir, worldUp );\n\t\t\t\tworldPos = position.y < 0.5 ? start: end;\n\n\t\t\t\t// height offset\n\t\t\t\tfloat hw = linewidth * 0.5;\n\t\t\t\tworldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp;\n\n\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t// won't be rendering the endcaps\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t// cap extension\n\t\t\t\t\tworldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir;\n\n\t\t\t\t\t// add width to the box\n\t\t\t\t\tworldPos.xyz += worldFwd * hw;\n\n\t\t\t\t\t// endcaps\n\t\t\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\t\t\tworldPos.xyz -= worldFwd * 2.0 * hw;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t\t// project the worldpos\n\t\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t// segments overlap neatly\n\t\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\t#else\n\n\t\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\tdir.x /= aspect;\n\t\t\t\toffset.x /= aspect;\n\n\t\t\t\t// sign flip\n\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t// endcaps\n\t\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\t\toffset += - dir;\n\n\t\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\t\toffset += dir;\n\n\t\t\t\t}\n\n\t\t\t\t// adjust for linewidth\n\t\t\t\toffset *= linewidth;\n\n\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\toffset /= resolution.y;\n\n\t\t\t\t// select end\n\t\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t\t// back to clip space\n\t\t\t\toffset *= clip.w;\n\n\t\t\t\tclip.xy += offset;\n\n\t\t\t#endif\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}\n\t\t`,\n\n\tfragmentShader:\n\t/* glsl */`\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\t\tuniform float linewidth;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float dashSize;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\tfloat mua;\n\t\t\tfloat mub;\n\n\t\t\tvec3 p13 = p1 - p3;\n\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\tmua = numer / denom;\n\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\treturn vec2( mua, mub );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tfloat alpha = opacity;\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\t\tvec3 delta = p1 - p2;\n\t\t\t\tfloat len = length( delta );\n\t\t\t\tfloat norm = len / linewidth;\n\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\tfloat dnorm = fwidth( norm );\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tif ( norm > 0.5 ) {\n\n\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#endif\n\n\t\t\t#else\n\n\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\tfloat len2 = a * a + b * b;\n\t\t\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t#else\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, alpha );\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}\n\t\t`\n};\n\nclass LineMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( {\n\n\t\t\ttype: 'LineMaterial',\n\n\t\t\tuniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ),\n\n\t\t\tvertexShader: ShaderLib[ 'line' ].vertexShader,\n\t\t\tfragmentShader: ShaderLib[ 'line' ].fragmentShader,\n\n\t\t\tclipping: true // required for clipping support\n\n\t\t} );\n\n\t\tthis.isLineMaterial = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget color() {\n\n\t\treturn this.uniforms.diffuse.value;\n\n\t}\n\n\tset color( value ) {\n\n\t\tthis.uniforms.diffuse.value = value;\n\n\t}\n\n\tget worldUnits() {\n\n\t\treturn 'WORLD_UNITS' in this.defines;\n\n\t}\n\n\tset worldUnits( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.WORLD_UNITS = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.WORLD_UNITS;\n\n\t\t}\n\n\t}\n\n\tget linewidth() {\n\n\t\treturn this.uniforms.linewidth.value;\n\n\t}\n\n\tset linewidth( value ) {\n\n\t\tif ( ! this.uniforms.linewidth ) return;\n\t\tthis.uniforms.linewidth.value = value;\n\n\t}\n\n\tget dashed() {\n\n\t\treturn 'USE_DASH' in this.defines;\n\n\t}\n\n\tset dashed( value ) {\n\n\t\tif ( ( value === true ) !== this.dashed ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_DASH = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_DASH;\n\n\t\t}\n\n\t}\n\n\tget dashScale() {\n\n\t\treturn this.uniforms.dashScale.value;\n\n\t}\n\n\tset dashScale( value ) {\n\n\t\tthis.uniforms.dashScale.value = value;\n\n\t}\n\n\tget dashSize() {\n\n\t\treturn this.uniforms.dashSize.value;\n\n\t}\n\n\tset dashSize( value ) {\n\n\t\tthis.uniforms.dashSize.value = value;\n\n\t}\n\n\tget dashOffset() {\n\n\t\treturn this.uniforms.dashOffset.value;\n\n\t}\n\n\tset dashOffset( value ) {\n\n\t\tthis.uniforms.dashOffset.value = value;\n\n\t}\n\n\tget gapSize() {\n\n\t\treturn this.uniforms.gapSize.value;\n\n\t}\n\n\tset gapSize( value ) {\n\n\t\tthis.uniforms.gapSize.value = value;\n\n\t}\n\n\tget opacity() {\n\n\t\treturn this.uniforms.opacity.value;\n\n\t}\n\n\tset opacity( value ) {\n\n\t\tif ( ! this.uniforms ) return;\n\t\tthis.uniforms.opacity.value = value;\n\n\t}\n\n\tget resolution() {\n\n\t\treturn this.uniforms.resolution.value;\n\n\t}\n\n\tset resolution( value ) {\n\n\t\tthis.uniforms.resolution.value.copy( value );\n\n\t}\n\n\tget alphaToCoverage() {\n\n\t\treturn 'USE_ALPHA_TO_COVERAGE' in this.defines;\n\n\t}\n\n\tset alphaToCoverage( value ) {\n\n\t\tif ( ! this.defines ) return;\n\n\t\tif ( ( value === true ) !== this.alphaToCoverage ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_ALPHA_TO_COVERAGE = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_ALPHA_TO_COVERAGE;\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineMaterial };\n", "import {\n\tBox3,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tLine3,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tSphere,\n\tVector3,\n\tVector4\n} from 'three';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nconst _viewport = new Vector4();\n\nconst _start = new Vector3();\nconst _end = new Vector3();\n\nconst _start4 = new Vector4();\nconst _end4 = new Vector4();\n\nconst _ssOrigin = new Vector4();\nconst _ssOrigin3 = new Vector3();\nconst _mvMatrix = new Matrix4();\nconst _line = new Line3();\nconst _closestPoint = new Vector3();\n\nconst _box = new Box3();\nconst _sphere = new Sphere();\nconst _clipToWorldVector = new Vector4();\n\nlet _ray, _lineWidth;\n\n// Returns the margin required to expand by in world space given the distance from the camera,\n// line width, resolution, and camera projection\nfunction getWorldSpaceHalfWidth( camera, distance, resolution ) {\n\n\t// transform into clip space, adjust the x and y values by the pixel width offset, then\n\t// transform back into world space to get world offset. Note clip space is [-1, 1] so full\n\t// width does not need to be halved.\n\t_clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\t_clipToWorldVector.x = _lineWidth / resolution.width;\n\t_clipToWorldVector.y = _lineWidth / resolution.height;\n\t_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\n\treturn Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );\n\n}\n\nfunction raycastWorldUnits( lineSegments, intersects ) {\n\n\tconst matrixWorld = lineSegments.matrixWorld;\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t_line.applyMatrix4( matrixWorld );\n\n\t\tconst pointOnLine = new Vector3();\n\t\tconst point = new Vector3();\n\n\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\t\tconst isInside = point.distanceTo( pointOnLine ) < _lineWidth * 0.5;\n\n\t\tif ( isInside ) {\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint,\n\t\t\t\tpointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nfunction raycastScreenSpace( lineSegments, camera, intersects ) {\n\n\tconst projectionMatrix = camera.projectionMatrix;\n\tconst material = lineSegments.material;\n\tconst resolution = material.resolution;\n\tconst matrixWorld = lineSegments.matrixWorld;\n\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tconst near = - camera.near;\n\n\t//\n\n\t// pick a point 1 unit out along the ray to avoid the ray origin\n\t// sitting at the camera origin which will cause \"w\" to be 0 when\n\t// applying the projection matrix.\n\t_ray.at( 1, _ssOrigin );\n\n\t// ndc space [ - 1.0, 1.0 ]\n\t_ssOrigin.w = 1;\n\t_ssOrigin.applyMatrix4( camera.matrixWorldInverse );\n\t_ssOrigin.applyMatrix4( projectionMatrix );\n\t_ssOrigin.multiplyScalar( 1 / _ssOrigin.w );\n\n\t// screen space\n\t_ssOrigin.x *= resolution.x / 2;\n\t_ssOrigin.y *= resolution.y / 2;\n\t_ssOrigin.z = 0;\n\n\t_ssOrigin3.copy( _ssOrigin );\n\n\t_mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_start4.fromBufferAttribute( instanceStart, i );\n\t\t_end4.fromBufferAttribute( instanceEnd, i );\n\n\t\t_start4.w = 1;\n\t\t_end4.w = 1;\n\n\t\t// camera space\n\t\t_start4.applyMatrix4( _mvMatrix );\n\t\t_end4.applyMatrix4( _mvMatrix );\n\n\t\t// skip the segment if it's entirely behind the camera\n\t\tconst isBehindCameraNear = _start4.z > near && _end4.z > near;\n\t\tif ( isBehindCameraNear ) {\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\t// trim the segment if it extends behind camera near\n\t\tif ( _start4.z > near ) {\n\n\t\t\tconst deltaDist = _start4.z - _end4.z;\n\t\t\tconst t = ( _start4.z - near ) / deltaDist;\n\t\t\t_start4.lerp( _end4, t );\n\n\t\t} else if ( _end4.z > near ) {\n\n\t\t\tconst deltaDist = _end4.z - _start4.z;\n\t\t\tconst t = ( _end4.z - near ) / deltaDist;\n\t\t\t_end4.lerp( _start4, t );\n\n\t\t}\n\n\t\t// clip space\n\t\t_start4.applyMatrix4( projectionMatrix );\n\t\t_end4.applyMatrix4( projectionMatrix );\n\n\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t_start4.multiplyScalar( 1 / _start4.w );\n\t\t_end4.multiplyScalar( 1 / _end4.w );\n\n\t\t// screen space\n\t\t_start4.x *= resolution.x / 2;\n\t\t_start4.y *= resolution.y / 2;\n\n\t\t_end4.x *= resolution.x / 2;\n\t\t_end4.y *= resolution.y / 2;\n\n\t\t// create 2d segment\n\t\t_line.start.copy( _start4 );\n\t\t_line.start.z = 0;\n\n\t\t_line.end.copy( _end4 );\n\t\t_line.end.z = 0;\n\n\t\t// get closest point on ray to segment\n\t\tconst param = _line.closestPointToPointParameter( _ssOrigin3, true );\n\t\t_line.at( param, _closestPoint );\n\n\t\t// check if the intersection point is within clip space\n\t\tconst zPos = MathUtils.lerp( _start4.z, _end4.z, param );\n\t\tconst isInClipSpace = zPos >= - 1 && zPos <= 1;\n\n\t\tconst isInside = _ssOrigin3.distanceTo( _closestPoint ) < _lineWidth * 0.5;\n\n\t\tif ( isInClipSpace && isInside ) {\n\n\t\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t_line.start.applyMatrix4( matrixWorld );\n\t\t\t_line.end.applyMatrix4( matrixWorld );\n\n\t\t\tconst pointOnLine = new Vector3();\n\t\t\tconst point = new Vector3();\n\n\t\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint: point,\n\t\t\t\tpointOnLine: pointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nclass LineSegments2 extends Mesh {\n\n\tconstructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments2 = true;\n\n\t\tthis.type = 'LineSegments2';\n\n\t}\n\n\t// for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst instanceStart = geometry.attributes.instanceStart;\n\t\tconst instanceEnd = geometry.attributes.instanceEnd;\n\t\tconst lineDistances = new Float32Array( 2 * instanceStart.count );\n\n\t\tfor ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {\n\n\t\t\t_start.fromBufferAttribute( instanceStart, i );\n\t\t\t_end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );\n\n\t\t}\n\n\t\tconst instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst worldUnits = this.material.worldUnits;\n\t\tconst camera = raycaster.camera;\n\n\t\tif ( camera === null && ! worldUnits ) {\n\n\t\t\tconsole.error( 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.' );\n\n\t\t}\n\n\t\tconst threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;\n\n\t\t_ray = raycaster.ray;\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\t_lineWidth = material.linewidth + threshold;\n\n\t\t// check if we intersect the sphere bounds\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\t_sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );\n\n\t\t// increase the sphere bounds by the worst case line screen space width\n\t\tlet sphereMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tsphereMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) );\n\t\t\tsphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, material.resolution );\n\n\t\t}\n\n\t\t_sphere.radius += sphereMargin;\n\n\t\tif ( _ray.intersectsSphere( _sphere ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// check if we intersect the box bounds\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\t_box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );\n\n\t\t// increase the box bounds by the worst case line width\n\t\tlet boxMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tboxMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) );\n\t\t\tboxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, material.resolution );\n\n\t\t}\n\n\t\t_box.expandByScalar( boxMargin );\n\n\t\tif ( _ray.intersectsBox( _box ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( worldUnits ) {\n\n\t\t\traycastWorldUnits( this, intersects );\n\n\t\t} else {\n\n\t\t\traycastScreenSpace( this, camera, intersects );\n\n\t\t}\n\n\t}\n\n\tonBeforeRender( renderer ) {\n\n\t\tconst uniforms = this.material.uniforms;\n\n\t\tif ( uniforms && uniforms.resolution ) {\n\n\t\t\trenderer.getViewport( _viewport );\n\t\t\tthis.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineSegments2 };\n", "import { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\n\nclass LineGeometry extends LineSegmentsGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isLineGeometry = true;\n\n\t\tthis.type = 'LineGeometry';\n\n\t}\n\n\tsetPositions( array ) {\n\n\t\t// converts [ x1, y1, z1, x2, y2, z2, ... ] to pairs format\n\n\t\tconst length = array.length - 3;\n\t\tconst points = new Float32Array( 2 * length );\n\n\t\tfor ( let i = 0; i < length; i += 3 ) {\n\n\t\t\tpoints[ 2 * i ] = array[ i ];\n\t\t\tpoints[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tpoints[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tpoints[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tpoints[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tpoints[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tsuper.setPositions( points );\n\n\t\treturn this;\n\n\t}\n\n\tsetColors( array ) {\n\n\t\t// converts [ r1, g1, b1, r2, g2, b2, ... ] to pairs format\n\n\t\tconst length = array.length - 3;\n\t\tconst colors = new Float32Array( 2 * length );\n\n\t\tfor ( let i = 0; i < length; i += 3 ) {\n\n\t\t\tcolors[ 2 * i ] = array[ i ];\n\t\t\tcolors[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tcolors[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tcolors[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tcolors[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tcolors[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tsuper.setColors( colors );\n\n\t\treturn this;\n\n\t}\n\n\tfromLine( line ) {\n\n\t\tconst geometry = line.geometry;\n\n\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { LineGeometry };\n", "import { LineSegments2 } from '../lines/LineSegments2.js';\nimport { LineGeometry } from '../lines/LineGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nclass Line2 extends LineSegments2 {\n\n\tconstructor( geometry = new LineGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLine2 = true;\n\n\t\tthis.type = 'Line2';\n\n\t}\n\n}\n\nexport { Line2 };\n", "import {\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tMesh,\n\tVector3,\n\tVector4\n} from 'three';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nconst _start = new Vector3();\nconst _end = new Vector3();\nconst _viewport = new Vector4();\n\nclass Wireframe extends Mesh {\n\n\tconstructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isWireframe = true;\n\n\t\tthis.type = 'Wireframe';\n\n\t}\n\n\t// for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst instanceStart = geometry.attributes.instanceStart;\n\t\tconst instanceEnd = geometry.attributes.instanceEnd;\n\t\tconst lineDistances = new Float32Array( 2 * instanceStart.count );\n\n\t\tfor ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {\n\n\t\t\t_start.fromBufferAttribute( instanceStart, i );\n\t\t\t_end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );\n\n\t\t}\n\n\t\tconst instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\treturn this;\n\n\t}\n\n\tonBeforeRender( renderer ) {\n\n\t\tconst uniforms = this.material.uniforms;\n\n\t\tif ( uniforms && uniforms.resolution ) {\n\n\t\t\trenderer.getViewport( _viewport );\n\t\t\tthis.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );\n\n\t\t}\n\n\t}\n\n}\n\nexport { Wireframe };\n", "import {\n\tWireframeGeometry\n} from 'three';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\n\nclass WireframeGeometry2 extends LineSegmentsGeometry {\n\n\tconstructor( geometry ) {\n\n\t\tsuper();\n\n\t\tthis.isWireframeGeometry2 = true;\n\n\t\tthis.type = 'WireframeGeometry2';\n\n\t\tthis.fromWireframeGeometry( new WireframeGeometry( geometry ) );\n\n\t\t// set colors, maybe\n\n\t}\n\n}\n\nexport { WireframeGeometry2 };\n", "import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tNoColorSpace,\n\tLinearFilter,\n\tLinearSRGBColorSpace,\n\tRedFormat,\n\tRGBAFormat\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\n/**\n * OpenEXR loader currently supports uncompressed, ZIP(S), RLE, PIZ and DWA/B compression.\n * Supports reading as UnsignedByte, HalfFloat and Float type data texture.\n *\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation, so I have preserved their copyright notices.\n */\n\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n\n// // End of OpenEXR license -------------------------------------------------\n\nclass EXRLoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst USHORT_RANGE = ( 1 << 16 );\n\t\tconst BITMAP_SIZE = ( USHORT_RANGE >> 3 );\n\n\t\tconst HUF_ENCBITS = 16; // literal (value) bit length\n\t\tconst HUF_DECBITS = 14; // decoding bit size (>= 8)\n\n\t\tconst HUF_ENCSIZE = ( 1 << HUF_ENCBITS ) + 1; // encoding table size\n\t\tconst HUF_DECSIZE = 1 << HUF_DECBITS; // decoding table size\n\t\tconst HUF_DECMASK = HUF_DECSIZE - 1;\n\n\t\tconst NBITS = 16;\n\t\tconst A_OFFSET = 1 << ( NBITS - 1 );\n\t\tconst MOD_MASK = ( 1 << NBITS ) - 1;\n\n\t\tconst SHORT_ZEROCODE_RUN = 59;\n\t\tconst LONG_ZEROCODE_RUN = 63;\n\t\tconst SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;\n\n\t\tconst ULONG_SIZE = 8;\n\t\tconst FLOAT32_SIZE = 4;\n\t\tconst INT32_SIZE = 4;\n\t\tconst INT16_SIZE = 2;\n\t\tconst INT8_SIZE = 1;\n\n\t\tconst STATIC_HUFFMAN = 0;\n\t\tconst DEFLATE = 1;\n\n\t\tconst UNKNOWN = 0;\n\t\tconst LOSSY_DCT = 1;\n\t\tconst RLE = 2;\n\n\t\tconst logBase = Math.pow( 2.7182818, 2.2 );\n\n\t\tfunction reverseLutFromBitmap( bitmap, lut ) {\n\n\t\t\tlet k = 0;\n\n\t\t\tfor ( let i = 0; i < USHORT_RANGE; ++ i ) {\n\n\t\t\t\tif ( ( i == 0 ) || ( bitmap[ i >> 3 ] & ( 1 << ( i & 7 ) ) ) ) {\n\n\t\t\t\t\tlut[ k ++ ] = i;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst n = k - 1;\n\n\t\t\twhile ( k < USHORT_RANGE ) lut[ k ++ ] = 0;\n\n\t\t\treturn n;\n\n\t\t}\n\n\t\tfunction hufClearDecTable( hdec ) {\n\n\t\t\tfor ( let i = 0; i < HUF_DECSIZE; i ++ ) {\n\n\t\t\t\thdec[ i ] = {};\n\t\t\t\thdec[ i ].len = 0;\n\t\t\t\thdec[ i ].lit = 0;\n\t\t\t\thdec[ i ].p = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst getBitsReturn = { l: 0, c: 0, lc: 0 };\n\n\t\tfunction getBits( nBits, c, lc, uInt8Array, inOffset ) {\n\n\t\t\twhile ( lc < nBits ) {\n\n\t\t\t\tc = ( c << 8 ) | parseUint8Array( uInt8Array, inOffset );\n\t\t\t\tlc += 8;\n\n\t\t\t}\n\n\t\t\tlc -= nBits;\n\n\t\t\tgetBitsReturn.l = ( c >> lc ) & ( ( 1 << nBits ) - 1 );\n\t\t\tgetBitsReturn.c = c;\n\t\t\tgetBitsReturn.lc = lc;\n\n\t\t}\n\n\t\tconst hufTableBuffer = new Array( 59 );\n\n\t\tfunction hufCanonicalCodeTable( hcode ) {\n\n\t\t\tfor ( let i = 0; i <= 58; ++ i ) hufTableBuffer[ i ] = 0;\n\t\t\tfor ( let i = 0; i < HUF_ENCSIZE; ++ i ) hufTableBuffer[ hcode[ i ] ] += 1;\n\n\t\t\tlet c = 0;\n\n\t\t\tfor ( let i = 58; i > 0; -- i ) {\n\n\t\t\t\tconst nc = ( ( c + hufTableBuffer[ i ] ) >> 1 );\n\t\t\t\thufTableBuffer[ i ] = c;\n\t\t\t\tc = nc;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < HUF_ENCSIZE; ++ i ) {\n\n\t\t\t\tconst l = hcode[ i ];\n\t\t\t\tif ( l > 0 ) hcode[ i ] = l | ( hufTableBuffer[ l ] ++ << 6 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction hufUnpackEncTable( uInt8Array, inOffset, ni, im, iM, hcode ) {\n\n\t\t\tconst p = inOffset;\n\t\t\tlet c = 0;\n\t\t\tlet lc = 0;\n\n\t\t\tfor ( ; im <= iM; im ++ ) {\n\n\t\t\t\tif ( p.value - inOffset.value > ni ) return false;\n\n\t\t\t\tgetBits( 6, c, lc, uInt8Array, p );\n\n\t\t\t\tconst l = getBitsReturn.l;\n\t\t\t\tc = getBitsReturn.c;\n\t\t\t\tlc = getBitsReturn.lc;\n\n\t\t\t\thcode[ im ] = l;\n\n\t\t\t\tif ( l == LONG_ZEROCODE_RUN ) {\n\n\t\t\t\t\tif ( p.value - inOffset.value > ni ) {\n\n\t\t\t\t\t\tthrow new Error( 'Something wrong with hufUnpackEncTable' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgetBits( 8, c, lc, uInt8Array, p );\n\n\t\t\t\t\tlet zerun = getBitsReturn.l + SHORTEST_LONG_RUN;\n\t\t\t\t\tc = getBitsReturn.c;\n\t\t\t\t\tlc = getBitsReturn.lc;\n\n\t\t\t\t\tif ( im + zerun > iM + 1 ) {\n\n\t\t\t\t\t\tthrow new Error( 'Something wrong with hufUnpackEncTable' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( zerun -- ) hcode[ im ++ ] = 0;\n\n\t\t\t\t\tim --;\n\n\t\t\t\t} else if ( l >= SHORT_ZEROCODE_RUN ) {\n\n\t\t\t\t\tlet zerun = l - SHORT_ZEROCODE_RUN + 2;\n\n\t\t\t\t\tif ( im + zerun > iM + 1 ) {\n\n\t\t\t\t\t\tthrow new Error( 'Something wrong with hufUnpackEncTable' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( zerun -- ) hcode[ im ++ ] = 0;\n\n\t\t\t\t\tim --;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thufCanonicalCodeTable( hcode );\n\n\t\t}\n\n\t\tfunction hufLength( code ) {\n\n\t\t\treturn code & 63;\n\n\t\t}\n\n\t\tfunction hufCode( code ) {\n\n\t\t\treturn code >> 6;\n\n\t\t}\n\n\t\tfunction hufBuildDecTable( hcode, im, iM, hdecod ) {\n\n\t\t\tfor ( ; im <= iM; im ++ ) {\n\n\t\t\t\tconst c = hufCode( hcode[ im ] );\n\t\t\t\tconst l = hufLength( hcode[ im ] );\n\n\t\t\t\tif ( c >> l ) {\n\n\t\t\t\t\tthrow new Error( 'Invalid table entry' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( l > HUF_DECBITS ) {\n\n\t\t\t\t\tconst pl = hdecod[ ( c >> ( l - HUF_DECBITS ) ) ];\n\n\t\t\t\t\tif ( pl.len ) {\n\n\t\t\t\t\t\tthrow new Error( 'Invalid table entry' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpl.lit ++;\n\n\t\t\t\t\tif ( pl.p ) {\n\n\t\t\t\t\t\tconst p = pl.p;\n\t\t\t\t\t\tpl.p = new Array( pl.lit );\n\n\t\t\t\t\t\tfor ( let i = 0; i < pl.lit - 1; ++ i ) {\n\n\t\t\t\t\t\t\tpl.p[ i ] = p[ i ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpl.p = new Array( 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpl.p[ pl.lit - 1 ] = im;\n\n\t\t\t\t} else if ( l ) {\n\n\t\t\t\t\tlet plOffset = 0;\n\n\t\t\t\t\tfor ( let i = 1 << ( HUF_DECBITS - l ); i > 0; i -- ) {\n\n\t\t\t\t\t\tconst pl = hdecod[ ( c << ( HUF_DECBITS - l ) ) + plOffset ];\n\n\t\t\t\t\t\tif ( pl.len || pl.p ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'Invalid table entry' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpl.len = l;\n\t\t\t\t\t\tpl.lit = im;\n\n\t\t\t\t\t\tplOffset ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst getCharReturn = { c: 0, lc: 0 };\n\n\t\tfunction getChar( c, lc, uInt8Array, inOffset ) {\n\n\t\t\tc = ( c << 8 ) | parseUint8Array( uInt8Array, inOffset );\n\t\t\tlc += 8;\n\n\t\t\tgetCharReturn.c = c;\n\t\t\tgetCharReturn.lc = lc;\n\n\t\t}\n\n\t\tconst getCodeReturn = { c: 0, lc: 0 };\n\n\t\tfunction getCode( po, rlc, c, lc, uInt8Array, inOffset, outBuffer, outBufferOffset, outBufferEndOffset ) {\n\n\t\t\tif ( po == rlc ) {\n\n\t\t\t\tif ( lc < 8 ) {\n\n\t\t\t\t\tgetChar( c, lc, uInt8Array, inOffset );\n\t\t\t\t\tc = getCharReturn.c;\n\t\t\t\t\tlc = getCharReturn.lc;\n\n\t\t\t\t}\n\n\t\t\t\tlc -= 8;\n\n\t\t\t\tlet cs = ( c >> lc );\n\t\t\t\tcs = new Uint8Array( [ cs ] )[ 0 ];\n\n\t\t\t\tif ( outBufferOffset.value + cs > outBufferEndOffset ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t\tconst s = outBuffer[ outBufferOffset.value - 1 ];\n\n\t\t\t\twhile ( cs -- > 0 ) {\n\n\t\t\t\t\toutBuffer[ outBufferOffset.value ++ ] = s;\n\n\t\t\t\t}\n\n\t\t\t} else if ( outBufferOffset.value < outBufferEndOffset ) {\n\n\t\t\t\toutBuffer[ outBufferOffset.value ++ ] = po;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\tgetCodeReturn.c = c;\n\t\t\tgetCodeReturn.lc = lc;\n\n\t\t}\n\n\t\tfunction UInt16( value ) {\n\n\t\t\treturn ( value & 0xFFFF );\n\n\t\t}\n\n\t\tfunction Int16( value ) {\n\n\t\t\tconst ref = UInt16( value );\n\t\t\treturn ( ref > 0x7FFF ) ? ref - 0x10000 : ref;\n\n\t\t}\n\n\t\tconst wdec14Return = { a: 0, b: 0 };\n\n\t\tfunction wdec14( l, h ) {\n\n\t\t\tconst ls = Int16( l );\n\t\t\tconst hs = Int16( h );\n\n\t\t\tconst hi = hs;\n\t\t\tconst ai = ls + ( hi & 1 ) + ( hi >> 1 );\n\n\t\t\tconst as = ai;\n\t\t\tconst bs = ai - hi;\n\n\t\t\twdec14Return.a = as;\n\t\t\twdec14Return.b = bs;\n\n\t\t}\n\n\t\tfunction wdec16( l, h ) {\n\n\t\t\tconst m = UInt16( l );\n\t\t\tconst d = UInt16( h );\n\n\t\t\tconst bb = ( m - ( d >> 1 ) ) & MOD_MASK;\n\t\t\tconst aa = ( d + bb - A_OFFSET ) & MOD_MASK;\n\n\t\t\twdec14Return.a = aa;\n\t\t\twdec14Return.b = bb;\n\n\t\t}\n\n\t\tfunction wav2Decode( buffer, j, nx, ox, ny, oy, mx ) {\n\n\t\t\tconst w14 = mx < ( 1 << 14 );\n\t\t\tconst n = ( nx > ny ) ? ny : nx;\n\t\t\tlet p = 1;\n\t\t\tlet p2;\n\t\t\tlet py;\n\n\t\t\twhile ( p <= n ) p <<= 1;\n\n\t\t\tp >>= 1;\n\t\t\tp2 = p;\n\t\t\tp >>= 1;\n\n\t\t\twhile ( p >= 1 ) {\n\n\t\t\t\tpy = 0;\n\t\t\t\tconst ey = py + oy * ( ny - p2 );\n\t\t\t\tconst oy1 = oy * p;\n\t\t\t\tconst oy2 = oy * p2;\n\t\t\t\tconst ox1 = ox * p;\n\t\t\t\tconst ox2 = ox * p2;\n\t\t\t\tlet i00, i01, i10, i11;\n\n\t\t\t\tfor ( ; py <= ey; py += oy2 ) {\n\n\t\t\t\t\tlet px = py;\n\t\t\t\t\tconst ex = py + ox * ( nx - p2 );\n\n\t\t\t\t\tfor ( ; px <= ex; px += ox2 ) {\n\n\t\t\t\t\t\tconst p01 = px + ox1;\n\t\t\t\t\t\tconst p10 = px + oy1;\n\t\t\t\t\t\tconst p11 = p10 + ox1;\n\n\t\t\t\t\t\tif ( w14 ) {\n\n\t\t\t\t\t\t\twdec14( buffer[ px + j ], buffer[ p10 + j ] );\n\n\t\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\t\ti10 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec14( buffer[ p01 + j ], buffer[ p11 + j ] );\n\n\t\t\t\t\t\t\ti01 = wdec14Return.a;\n\t\t\t\t\t\t\ti11 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec14( i00, i01 );\n\n\t\t\t\t\t\t\tbuffer[ px + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p01 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec14( i10, i11 );\n\n\t\t\t\t\t\t\tbuffer[ p10 + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p11 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\twdec16( buffer[ px + j ], buffer[ p10 + j ] );\n\n\t\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\t\ti10 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec16( buffer[ p01 + j ], buffer[ p11 + j ] );\n\n\t\t\t\t\t\t\ti01 = wdec14Return.a;\n\t\t\t\t\t\t\ti11 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec16( i00, i01 );\n\n\t\t\t\t\t\t\tbuffer[ px + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p01 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec16( i10, i11 );\n\n\t\t\t\t\t\t\tbuffer[ p10 + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p11 + j ] = wdec14Return.b;\n\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( nx & p ) {\n\n\t\t\t\t\t\tconst p10 = px + oy1;\n\n\t\t\t\t\t\tif ( w14 )\n\t\t\t\t\t\t\twdec14( buffer[ px + j ], buffer[ p10 + j ] );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twdec16( buffer[ px + j ], buffer[ p10 + j ] );\n\n\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\tbuffer[ p10 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\tbuffer[ px + j ] = i00;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ny & p ) {\n\n\t\t\t\t\tlet px = py;\n\t\t\t\t\tconst ex = py + ox * ( nx - p2 );\n\n\t\t\t\t\tfor ( ; px <= ex; px += ox2 ) {\n\n\t\t\t\t\t\tconst p01 = px + ox1;\n\n\t\t\t\t\t\tif ( w14 )\n\t\t\t\t\t\t\twdec14( buffer[ px + j ], buffer[ p01 + j ] );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twdec16( buffer[ px + j ], buffer[ p01 + j ] );\n\n\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\tbuffer[ p01 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\tbuffer[ px + j ] = i00;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tp2 = p;\n\t\t\t\tp >>= 1;\n\n\t\t\t}\n\n\t\t\treturn py;\n\n\t\t}\n\n\t\tfunction hufDecode( encodingTable, decodingTable, uInt8Array, inOffset, ni, rlc, no, outBuffer, outOffset ) {\n\n\t\t\tlet c = 0;\n\t\t\tlet lc = 0;\n\t\t\tconst outBufferEndOffset = no;\n\t\t\tconst inOffsetEnd = Math.trunc( inOffset.value + ( ni + 7 ) / 8 );\n\n\t\t\twhile ( inOffset.value < inOffsetEnd ) {\n\n\t\t\t\tgetChar( c, lc, uInt8Array, inOffset );\n\n\t\t\t\tc = getCharReturn.c;\n\t\t\t\tlc = getCharReturn.lc;\n\n\t\t\t\twhile ( lc >= HUF_DECBITS ) {\n\n\t\t\t\t\tconst index = ( c >> ( lc - HUF_DECBITS ) ) & HUF_DECMASK;\n\t\t\t\t\tconst pl = decodingTable[ index ];\n\n\t\t\t\t\tif ( pl.len ) {\n\n\t\t\t\t\t\tlc -= pl.len;\n\n\t\t\t\t\t\tgetCode( pl.lit, rlc, c, lc, uInt8Array, inOffset, outBuffer, outOffset, outBufferEndOffset );\n\n\t\t\t\t\t\tc = getCodeReturn.c;\n\t\t\t\t\t\tlc = getCodeReturn.lc;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ! pl.p ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'hufDecode issues' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet j;\n\n\t\t\t\t\t\tfor ( j = 0; j < pl.lit; j ++ ) {\n\n\t\t\t\t\t\t\tconst l = hufLength( encodingTable[ pl.p[ j ] ] );\n\n\t\t\t\t\t\t\twhile ( lc < l && inOffset.value < inOffsetEnd ) {\n\n\t\t\t\t\t\t\t\tgetChar( c, lc, uInt8Array, inOffset );\n\n\t\t\t\t\t\t\t\tc = getCharReturn.c;\n\t\t\t\t\t\t\t\tlc = getCharReturn.lc;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( lc >= l ) {\n\n\t\t\t\t\t\t\t\tif ( hufCode( encodingTable[ pl.p[ j ] ] ) == ( ( c >> ( lc - l ) ) & ( ( 1 << l ) - 1 ) ) ) {\n\n\t\t\t\t\t\t\t\t\tlc -= l;\n\n\t\t\t\t\t\t\t\t\tgetCode( pl.p[ j ], rlc, c, lc, uInt8Array, inOffset, outBuffer, outOffset, outBufferEndOffset );\n\n\t\t\t\t\t\t\t\t\tc = getCodeReturn.c;\n\t\t\t\t\t\t\t\t\tlc = getCodeReturn.lc;\n\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( j == pl.lit ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'hufDecode issues' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst i = ( 8 - ni ) & 7;\n\n\t\t\tc >>= i;\n\t\t\tlc -= i;\n\n\t\t\twhile ( lc > 0 ) {\n\n\t\t\t\tconst pl = decodingTable[ ( c << ( HUF_DECBITS - lc ) ) & HUF_DECMASK ];\n\n\t\t\t\tif ( pl.len ) {\n\n\t\t\t\t\tlc -= pl.len;\n\n\t\t\t\t\tgetCode( pl.lit, rlc, c, lc, uInt8Array, inOffset, outBuffer, outOffset, outBufferEndOffset );\n\n\t\t\t\t\tc = getCodeReturn.c;\n\t\t\t\t\tlc = getCodeReturn.lc;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'hufDecode issues' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction hufUncompress( uInt8Array, inDataView, inOffset, nCompressed, outBuffer, nRaw ) {\n\n\t\t\tconst outOffset = { value: 0 };\n\t\t\tconst initialInOffset = inOffset.value;\n\n\t\t\tconst im = parseUint32( inDataView, inOffset );\n\t\t\tconst iM = parseUint32( inDataView, inOffset );\n\n\t\t\tinOffset.value += 4;\n\n\t\t\tconst nBits = parseUint32( inDataView, inOffset );\n\n\t\t\tinOffset.value += 4;\n\n\t\t\tif ( im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE ) {\n\n\t\t\t\tthrow new Error( 'Something wrong with HUF_ENCSIZE' );\n\n\t\t\t}\n\n\t\t\tconst freq = new Array( HUF_ENCSIZE );\n\t\t\tconst hdec = new Array( HUF_DECSIZE );\n\n\t\t\thufClearDecTable( hdec );\n\n\t\t\tconst ni = nCompressed - ( inOffset.value - initialInOffset );\n\n\t\t\thufUnpackEncTable( uInt8Array, inOffset, ni, im, iM, freq );\n\n\t\t\tif ( nBits > 8 * ( nCompressed - ( inOffset.value - initialInOffset ) ) ) {\n\n\t\t\t\tthrow new Error( 'Something wrong with hufUncompress' );\n\n\t\t\t}\n\n\t\t\thufBuildDecTable( freq, im, iM, hdec );\n\n\t\t\thufDecode( freq, hdec, uInt8Array, inOffset, nBits, iM, nRaw, outBuffer, outOffset );\n\n\t\t}\n\n\t\tfunction applyLut( lut, data, nData ) {\n\n\t\t\tfor ( let i = 0; i < nData; ++ i ) {\n\n\t\t\t\tdata[ i ] = lut[ data[ i ] ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction predictor( source ) {\n\n\t\t\tfor ( let t = 1; t < source.length; t ++ ) {\n\n\t\t\t\tconst d = source[ t - 1 ] + source[ t ] - 128;\n\t\t\t\tsource[ t ] = d;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction interleaveScalar( source, out ) {\n\n\t\t\tlet t1 = 0;\n\t\t\tlet t2 = Math.floor( ( source.length + 1 ) / 2 );\n\t\t\tlet s = 0;\n\t\t\tconst stop = source.length - 1;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tif ( s > stop ) break;\n\t\t\t\tout[ s ++ ] = source[ t1 ++ ];\n\n\t\t\t\tif ( s > stop ) break;\n\t\t\t\tout[ s ++ ] = source[ t2 ++ ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction decodeRunLength( source ) {\n\n\t\t\tlet size = source.byteLength;\n\t\t\tconst out = new Array();\n\t\t\tlet p = 0;\n\n\t\t\tconst reader = new DataView( source );\n\n\t\t\twhile ( size > 0 ) {\n\n\t\t\t\tconst l = reader.getInt8( p ++ );\n\n\t\t\t\tif ( l < 0 ) {\n\n\t\t\t\t\tconst count = - l;\n\t\t\t\t\tsize -= count + 1;\n\n\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\tout.push( reader.getUint8( p ++ ) );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst count = l;\n\t\t\t\t\tsize -= 2;\n\n\t\t\t\t\tconst value = reader.getUint8( p ++ );\n\n\t\t\t\t\tfor ( let i = 0; i < count + 1; i ++ ) {\n\n\t\t\t\t\t\tout.push( value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn out;\n\n\t\t}\n\n\t\tfunction lossyDctDecode( cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer ) {\n\n\t\t\tlet dataView = new DataView( outBuffer.buffer );\n\n\t\t\tconst width = channelData[ cscSet.idx[ 0 ] ].width;\n\t\t\tconst height = channelData[ cscSet.idx[ 0 ] ].height;\n\n\t\t\tconst numComp = 3;\n\n\t\t\tconst numFullBlocksX = Math.floor( width / 8.0 );\n\t\t\tconst numBlocksX = Math.ceil( width / 8.0 );\n\t\t\tconst numBlocksY = Math.ceil( height / 8.0 );\n\t\t\tconst leftoverX = width - ( numBlocksX - 1 ) * 8;\n\t\t\tconst leftoverY = height - ( numBlocksY - 1 ) * 8;\n\n\t\t\tconst currAcComp = { value: 0 };\n\t\t\tconst currDcComp = new Array( numComp );\n\t\t\tconst dctData = new Array( numComp );\n\t\t\tconst halfZigBlock = new Array( numComp );\n\t\t\tconst rowBlock = new Array( numComp );\n\t\t\tconst rowOffsets = new Array( numComp );\n\n\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\trowOffsets[ comp ] = rowPtrs[ cscSet.idx[ comp ] ];\n\t\t\t\tcurrDcComp[ comp ] = ( comp < 1 ) ? 0 : currDcComp[ comp - 1 ] + numBlocksX * numBlocksY;\n\t\t\t\tdctData[ comp ] = new Float32Array( 64 );\n\t\t\t\thalfZigBlock[ comp ] = new Uint16Array( 64 );\n\t\t\t\trowBlock[ comp ] = new Uint16Array( numBlocksX * 64 );\n\n\t\t\t}\n\n\t\t\tfor ( let blocky = 0; blocky < numBlocksY; ++ blocky ) {\n\n\t\t\t\tlet maxY = 8;\n\n\t\t\t\tif ( blocky == numBlocksY - 1 )\n\t\t\t\t\tmaxY = leftoverY;\n\n\t\t\t\tlet maxX = 8;\n\n\t\t\t\tfor ( let blockx = 0; blockx < numBlocksX; ++ blockx ) {\n\n\t\t\t\t\tif ( blockx == numBlocksX - 1 )\n\t\t\t\t\t\tmaxX = leftoverX;\n\n\t\t\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\t\t\thalfZigBlock[ comp ].fill( 0 );\n\n\t\t\t\t\t\t// set block DC component\n\t\t\t\t\t\thalfZigBlock[ comp ][ 0 ] = dcBuffer[ currDcComp[ comp ] ++ ];\n\t\t\t\t\t\t// set block AC components\n\t\t\t\t\t\tunRleAC( currAcComp, acBuffer, halfZigBlock[ comp ] );\n\n\t\t\t\t\t\t// UnZigZag block to float\n\t\t\t\t\t\tunZigZag( halfZigBlock[ comp ], dctData[ comp ] );\n\t\t\t\t\t\t// decode float dct\n\t\t\t\t\t\tdctInverse( dctData[ comp ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( numComp == 3 ) {\n\n\t\t\t\t\t\tcsc709Inverse( dctData );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\t\t\tconvertToHalf( dctData[ comp ], rowBlock[ comp ], blockx * 64 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} // blockx\n\n\t\t\t\tlet offset = 0;\n\n\t\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\t\tconst type = channelData[ cscSet.idx[ comp ] ].type;\n\n\t\t\t\t\tfor ( let y = 8 * blocky; y < 8 * blocky + maxY; ++ y ) {\n\n\t\t\t\t\t\toffset = rowOffsets[ comp ][ y ];\n\n\t\t\t\t\t\tfor ( let blockx = 0; blockx < numFullBlocksX; ++ blockx ) {\n\n\t\t\t\t\t\t\tconst src = blockx * 64 + ( ( y & 0x7 ) * 8 );\n\n\t\t\t\t\t\t\tdataView.setUint16( offset + 0 * INT16_SIZE * type, rowBlock[ comp ][ src + 0 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 1 * INT16_SIZE * type, rowBlock[ comp ][ src + 1 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 2 * INT16_SIZE * type, rowBlock[ comp ][ src + 2 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 3 * INT16_SIZE * type, rowBlock[ comp ][ src + 3 ], true );\n\n\t\t\t\t\t\t\tdataView.setUint16( offset + 4 * INT16_SIZE * type, rowBlock[ comp ][ src + 4 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 5 * INT16_SIZE * type, rowBlock[ comp ][ src + 5 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 6 * INT16_SIZE * type, rowBlock[ comp ][ src + 6 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 7 * INT16_SIZE * type, rowBlock[ comp ][ src + 7 ], true );\n\n\t\t\t\t\t\t\toffset += 8 * INT16_SIZE * type;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// handle partial X blocks\n\t\t\t\t\tif ( numFullBlocksX != numBlocksX ) {\n\n\t\t\t\t\t\tfor ( let y = 8 * blocky; y < 8 * blocky + maxY; ++ y ) {\n\n\t\t\t\t\t\t\tconst offset = rowOffsets[ comp ][ y ] + 8 * numFullBlocksX * INT16_SIZE * type;\n\t\t\t\t\t\t\tconst src = numFullBlocksX * 64 + ( ( y & 0x7 ) * 8 );\n\n\t\t\t\t\t\t\tfor ( let x = 0; x < maxX; ++ x ) {\n\n\t\t\t\t\t\t\t\tdataView.setUint16( offset + x * INT16_SIZE * type, rowBlock[ comp ][ src + x ], true );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} // comp\n\n\t\t\t} // blocky\n\n\t\t\tconst halfRow = new Uint16Array( width );\n\t\t\tdataView = new DataView( outBuffer.buffer );\n\n\t\t\t// convert channels back to float, if needed\n\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\tchannelData[ cscSet.idx[ comp ] ].decoded = true;\n\t\t\t\tconst type = channelData[ cscSet.idx[ comp ] ].type;\n\n\t\t\t\tif ( channelData[ comp ].type != 2 ) continue;\n\n\t\t\t\tfor ( let y = 0; y < height; ++ y ) {\n\n\t\t\t\t\tconst offset = rowOffsets[ comp ][ y ];\n\n\t\t\t\t\tfor ( let x = 0; x < width; ++ x ) {\n\n\t\t\t\t\t\thalfRow[ x ] = dataView.getUint16( offset + x * INT16_SIZE * type, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let x = 0; x < width; ++ x ) {\n\n\t\t\t\t\t\tdataView.setFloat32( offset + x * INT16_SIZE * type, decodeFloat16( halfRow[ x ] ), true );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction unRleAC( currAcComp, acBuffer, halfZigBlock ) {\n\n\t\t\tlet acValue;\n\t\t\tlet dctComp = 1;\n\n\t\t\twhile ( dctComp < 64 ) {\n\n\t\t\t\tacValue = acBuffer[ currAcComp.value ];\n\n\t\t\t\tif ( acValue == 0xff00 ) {\n\n\t\t\t\t\tdctComp = 64;\n\n\t\t\t\t} else if ( acValue >> 8 == 0xff ) {\n\n\t\t\t\t\tdctComp += acValue & 0xff;\n\n\t\t\t\t} else {\n\n\t\t\t\t\thalfZigBlock[ dctComp ] = acValue;\n\t\t\t\t\tdctComp ++;\n\n\t\t\t\t}\n\n\t\t\t\tcurrAcComp.value ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction unZigZag( src, dst ) {\n\n\t\t\tdst[ 0 ] = decodeFloat16( src[ 0 ] );\n\t\t\tdst[ 1 ] = decodeFloat16( src[ 1 ] );\n\t\t\tdst[ 2 ] = decodeFloat16( src[ 5 ] );\n\t\t\tdst[ 3 ] = decodeFloat16( src[ 6 ] );\n\t\t\tdst[ 4 ] = decodeFloat16( src[ 14 ] );\n\t\t\tdst[ 5 ] = decodeFloat16( src[ 15 ] );\n\t\t\tdst[ 6 ] = decodeFloat16( src[ 27 ] );\n\t\t\tdst[ 7 ] = decodeFloat16( src[ 28 ] );\n\t\t\tdst[ 8 ] = decodeFloat16( src[ 2 ] );\n\t\t\tdst[ 9 ] = decodeFloat16( src[ 4 ] );\n\n\t\t\tdst[ 10 ] = decodeFloat16( src[ 7 ] );\n\t\t\tdst[ 11 ] = decodeFloat16( src[ 13 ] );\n\t\t\tdst[ 12 ] = decodeFloat16( src[ 16 ] );\n\t\t\tdst[ 13 ] = decodeFloat16( src[ 26 ] );\n\t\t\tdst[ 14 ] = decodeFloat16( src[ 29 ] );\n\t\t\tdst[ 15 ] = decodeFloat16( src[ 42 ] );\n\t\t\tdst[ 16 ] = decodeFloat16( src[ 3 ] );\n\t\t\tdst[ 17 ] = decodeFloat16( src[ 8 ] );\n\t\t\tdst[ 18 ] = decodeFloat16( src[ 12 ] );\n\t\t\tdst[ 19 ] = decodeFloat16( src[ 17 ] );\n\n\t\t\tdst[ 20 ] = decodeFloat16( src[ 25 ] );\n\t\t\tdst[ 21 ] = decodeFloat16( src[ 30 ] );\n\t\t\tdst[ 22 ] = decodeFloat16( src[ 41 ] );\n\t\t\tdst[ 23 ] = decodeFloat16( src[ 43 ] );\n\t\t\tdst[ 24 ] = decodeFloat16( src[ 9 ] );\n\t\t\tdst[ 25 ] = decodeFloat16( src[ 11 ] );\n\t\t\tdst[ 26 ] = decodeFloat16( src[ 18 ] );\n\t\t\tdst[ 27 ] = decodeFloat16( src[ 24 ] );\n\t\t\tdst[ 28 ] = decodeFloat16( src[ 31 ] );\n\t\t\tdst[ 29 ] = decodeFloat16( src[ 40 ] );\n\n\t\t\tdst[ 30 ] = decodeFloat16( src[ 44 ] );\n\t\t\tdst[ 31 ] = decodeFloat16( src[ 53 ] );\n\t\t\tdst[ 32 ] = decodeFloat16( src[ 10 ] );\n\t\t\tdst[ 33 ] = decodeFloat16( src[ 19 ] );\n\t\t\tdst[ 34 ] = decodeFloat16( src[ 23 ] );\n\t\t\tdst[ 35 ] = decodeFloat16( src[ 32 ] );\n\t\t\tdst[ 36 ] = decodeFloat16( src[ 39 ] );\n\t\t\tdst[ 37 ] = decodeFloat16( src[ 45 ] );\n\t\t\tdst[ 38 ] = decodeFloat16( src[ 52 ] );\n\t\t\tdst[ 39 ] = decodeFloat16( src[ 54 ] );\n\n\t\t\tdst[ 40 ] = decodeFloat16( src[ 20 ] );\n\t\t\tdst[ 41 ] = decodeFloat16( src[ 22 ] );\n\t\t\tdst[ 42 ] = decodeFloat16( src[ 33 ] );\n\t\t\tdst[ 43 ] = decodeFloat16( src[ 38 ] );\n\t\t\tdst[ 44 ] = decodeFloat16( src[ 46 ] );\n\t\t\tdst[ 45 ] = decodeFloat16( src[ 51 ] );\n\t\t\tdst[ 46 ] = decodeFloat16( src[ 55 ] );\n\t\t\tdst[ 47 ] = decodeFloat16( src[ 60 ] );\n\t\t\tdst[ 48 ] = decodeFloat16( src[ 21 ] );\n\t\t\tdst[ 49 ] = decodeFloat16( src[ 34 ] );\n\n\t\t\tdst[ 50 ] = decodeFloat16( src[ 37 ] );\n\t\t\tdst[ 51 ] = decodeFloat16( src[ 47 ] );\n\t\t\tdst[ 52 ] = decodeFloat16( src[ 50 ] );\n\t\t\tdst[ 53 ] = decodeFloat16( src[ 56 ] );\n\t\t\tdst[ 54 ] = decodeFloat16( src[ 59 ] );\n\t\t\tdst[ 55 ] = decodeFloat16( src[ 61 ] );\n\t\t\tdst[ 56 ] = decodeFloat16( src[ 35 ] );\n\t\t\tdst[ 57 ] = decodeFloat16( src[ 36 ] );\n\t\t\tdst[ 58 ] = decodeFloat16( src[ 48 ] );\n\t\t\tdst[ 59 ] = decodeFloat16( src[ 49 ] );\n\n\t\t\tdst[ 60 ] = decodeFloat16( src[ 57 ] );\n\t\t\tdst[ 61 ] = decodeFloat16( src[ 58 ] );\n\t\t\tdst[ 62 ] = decodeFloat16( src[ 62 ] );\n\t\t\tdst[ 63 ] = decodeFloat16( src[ 63 ] );\n\n\t\t}\n\n\t\tfunction dctInverse( data ) {\n\n\t\t\tconst a = 0.5 * Math.cos( 3.14159 / 4.0 );\n\t\t\tconst b = 0.5 * Math.cos( 3.14159 / 16.0 );\n\t\t\tconst c = 0.5 * Math.cos( 3.14159 / 8.0 );\n\t\t\tconst d = 0.5 * Math.cos( 3.0 * 3.14159 / 16.0 );\n\t\t\tconst e = 0.5 * Math.cos( 5.0 * 3.14159 / 16.0 );\n\t\t\tconst f = 0.5 * Math.cos( 3.0 * 3.14159 / 8.0 );\n\t\t\tconst g = 0.5 * Math.cos( 7.0 * 3.14159 / 16.0 );\n\n\t\t\tconst alpha = new Array( 4 );\n\t\t\tconst beta = new Array( 4 );\n\t\t\tconst theta = new Array( 4 );\n\t\t\tconst gamma = new Array( 4 );\n\n\t\t\tfor ( let row = 0; row < 8; ++ row ) {\n\n\t\t\t\tconst rowPtr = row * 8;\n\n\t\t\t\talpha[ 0 ] = c * data[ rowPtr + 2 ];\n\t\t\t\talpha[ 1 ] = f * data[ rowPtr + 2 ];\n\t\t\t\talpha[ 2 ] = c * data[ rowPtr + 6 ];\n\t\t\t\talpha[ 3 ] = f * data[ rowPtr + 6 ];\n\n\t\t\t\tbeta[ 0 ] = b * data[ rowPtr + 1 ] + d * data[ rowPtr + 3 ] + e * data[ rowPtr + 5 ] + g * data[ rowPtr + 7 ];\n\t\t\t\tbeta[ 1 ] = d * data[ rowPtr + 1 ] - g * data[ rowPtr + 3 ] - b * data[ rowPtr + 5 ] - e * data[ rowPtr + 7 ];\n\t\t\t\tbeta[ 2 ] = e * data[ rowPtr + 1 ] - b * data[ rowPtr + 3 ] + g * data[ rowPtr + 5 ] + d * data[ rowPtr + 7 ];\n\t\t\t\tbeta[ 3 ] = g * data[ rowPtr + 1 ] - e * data[ rowPtr + 3 ] + d * data[ rowPtr + 5 ] - b * data[ rowPtr + 7 ];\n\n\t\t\t\ttheta[ 0 ] = a * ( data[ rowPtr + 0 ] + data[ rowPtr + 4 ] );\n\t\t\t\ttheta[ 3 ] = a * ( data[ rowPtr + 0 ] - data[ rowPtr + 4 ] );\n\t\t\t\ttheta[ 1 ] = alpha[ 0 ] + alpha[ 3 ];\n\t\t\t\ttheta[ 2 ] = alpha[ 1 ] - alpha[ 2 ];\n\n\t\t\t\tgamma[ 0 ] = theta[ 0 ] + theta[ 1 ];\n\t\t\t\tgamma[ 1 ] = theta[ 3 ] + theta[ 2 ];\n\t\t\t\tgamma[ 2 ] = theta[ 3 ] - theta[ 2 ];\n\t\t\t\tgamma[ 3 ] = theta[ 0 ] - theta[ 1 ];\n\n\t\t\t\tdata[ rowPtr + 0 ] = gamma[ 0 ] + beta[ 0 ];\n\t\t\t\tdata[ rowPtr + 1 ] = gamma[ 1 ] + beta[ 1 ];\n\t\t\t\tdata[ rowPtr + 2 ] = gamma[ 2 ] + beta[ 2 ];\n\t\t\t\tdata[ rowPtr + 3 ] = gamma[ 3 ] + beta[ 3 ];\n\n\t\t\t\tdata[ rowPtr + 4 ] = gamma[ 3 ] - beta[ 3 ];\n\t\t\t\tdata[ rowPtr + 5 ] = gamma[ 2 ] - beta[ 2 ];\n\t\t\t\tdata[ rowPtr + 6 ] = gamma[ 1 ] - beta[ 1 ];\n\t\t\t\tdata[ rowPtr + 7 ] = gamma[ 0 ] - beta[ 0 ];\n\n\t\t\t}\n\n\t\t\tfor ( let column = 0; column < 8; ++ column ) {\n\n\t\t\t\talpha[ 0 ] = c * data[ 16 + column ];\n\t\t\t\talpha[ 1 ] = f * data[ 16 + column ];\n\t\t\t\talpha[ 2 ] = c * data[ 48 + column ];\n\t\t\t\talpha[ 3 ] = f * data[ 48 + column ];\n\n\t\t\t\tbeta[ 0 ] = b * data[ 8 + column ] + d * data[ 24 + column ] + e * data[ 40 + column ] + g * data[ 56 + column ];\n\t\t\t\tbeta[ 1 ] = d * data[ 8 + column ] - g * data[ 24 + column ] - b * data[ 40 + column ] - e * data[ 56 + column ];\n\t\t\t\tbeta[ 2 ] = e * data[ 8 + column ] - b * data[ 24 + column ] + g * data[ 40 + column ] + d * data[ 56 + column ];\n\t\t\t\tbeta[ 3 ] = g * data[ 8 + column ] - e * data[ 24 + column ] + d * data[ 40 + column ] - b * data[ 56 + column ];\n\n\t\t\t\ttheta[ 0 ] = a * ( data[ column ] + data[ 32 + column ] );\n\t\t\t\ttheta[ 3 ] = a * ( data[ column ] - data[ 32 + column ] );\n\n\t\t\t\ttheta[ 1 ] = alpha[ 0 ] + alpha[ 3 ];\n\t\t\t\ttheta[ 2 ] = alpha[ 1 ] - alpha[ 2 ];\n\n\t\t\t\tgamma[ 0 ] = theta[ 0 ] + theta[ 1 ];\n\t\t\t\tgamma[ 1 ] = theta[ 3 ] + theta[ 2 ];\n\t\t\t\tgamma[ 2 ] = theta[ 3 ] - theta[ 2 ];\n\t\t\t\tgamma[ 3 ] = theta[ 0 ] - theta[ 1 ];\n\n\t\t\t\tdata[ 0 + column ] = gamma[ 0 ] + beta[ 0 ];\n\t\t\t\tdata[ 8 + column ] = gamma[ 1 ] + beta[ 1 ];\n\t\t\t\tdata[ 16 + column ] = gamma[ 2 ] + beta[ 2 ];\n\t\t\t\tdata[ 24 + column ] = gamma[ 3 ] + beta[ 3 ];\n\n\t\t\t\tdata[ 32 + column ] = gamma[ 3 ] - beta[ 3 ];\n\t\t\t\tdata[ 40 + column ] = gamma[ 2 ] - beta[ 2 ];\n\t\t\t\tdata[ 48 + column ] = gamma[ 1 ] - beta[ 1 ];\n\t\t\t\tdata[ 56 + column ] = gamma[ 0 ] - beta[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction csc709Inverse( data ) {\n\n\t\t\tfor ( let i = 0; i < 64; ++ i ) {\n\n\t\t\t\tconst y = data[ 0 ][ i ];\n\t\t\t\tconst cb = data[ 1 ][ i ];\n\t\t\t\tconst cr = data[ 2 ][ i ];\n\n\t\t\t\tdata[ 0 ][ i ] = y + 1.5747 * cr;\n\t\t\t\tdata[ 1 ][ i ] = y - 0.1873 * cb - 0.4682 * cr;\n\t\t\t\tdata[ 2 ][ i ] = y + 1.8556 * cb;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction convertToHalf( src, dst, idx ) {\n\n\t\t\tfor ( let i = 0; i < 64; ++ i ) {\n\n\t\t\t\tdst[ idx + i ] = DataUtils.toHalfFloat( toLinear( src[ i ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction toLinear( float ) {\n\n\t\t\tif ( float <= 1 ) {\n\n\t\t\t\treturn Math.sign( float ) * Math.pow( Math.abs( float ), 2.2 );\n\n\t\t\t} else {\n\n\t\t\t\treturn Math.sign( float ) * Math.pow( logBase, Math.abs( float ) - 1.0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction uncompressRAW( info ) {\n\n\t\t\treturn new DataView( info.array.buffer, info.offset.value, info.size );\n\n\t\t}\n\n\t\tfunction uncompressRLE( info ) {\n\n\t\t\tconst compressed = info.viewer.buffer.slice( info.offset.value, info.offset.value + info.size );\n\n\t\t\tconst rawBuffer = new Uint8Array( decodeRunLength( compressed ) );\n\t\t\tconst tmpBuffer = new Uint8Array( rawBuffer.length );\n\n\t\t\tpredictor( rawBuffer ); // revert predictor\n\n\t\t\tinterleaveScalar( rawBuffer, tmpBuffer ); // interleave pixels\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressZIP( info ) {\n\n\t\t\tconst compressed = info.array.slice( info.offset.value, info.offset.value + info.size );\n\n\t\t\tconst rawBuffer = fflate.unzlibSync( compressed );\n\t\t\tconst tmpBuffer = new Uint8Array( rawBuffer.length );\n\n\t\t\tpredictor( rawBuffer ); // revert predictor\n\n\t\t\tinterleaveScalar( rawBuffer, tmpBuffer ); // interleave pixels\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressPIZ( info ) {\n\n\t\t\tconst inDataView = info.viewer;\n\t\t\tconst inOffset = { value: info.offset.value };\n\n\t\t\tconst outBuffer = new Uint16Array( info.columns * info.lines * ( info.inputChannels.length * info.type ) );\n\t\t\tconst bitmap = new Uint8Array( BITMAP_SIZE );\n\n\t\t\t// Setup channel info\n\t\t\tlet outBufferEnd = 0;\n\t\t\tconst pizChannelData = new Array( info.inputChannels.length );\n\t\t\tfor ( let i = 0, il = info.inputChannels.length; i < il; i ++ ) {\n\n\t\t\t\tpizChannelData[ i ] = {};\n\t\t\t\tpizChannelData[ i ][ 'start' ] = outBufferEnd;\n\t\t\t\tpizChannelData[ i ][ 'end' ] = pizChannelData[ i ][ 'start' ];\n\t\t\t\tpizChannelData[ i ][ 'nx' ] = info.columns;\n\t\t\t\tpizChannelData[ i ][ 'ny' ] = info.lines;\n\t\t\t\tpizChannelData[ i ][ 'size' ] = info.type;\n\n\t\t\t\toutBufferEnd += pizChannelData[ i ].nx * pizChannelData[ i ].ny * pizChannelData[ i ].size;\n\n\t\t\t}\n\n\t\t\t// Read range compression data\n\n\t\t\tconst minNonZero = parseUint16( inDataView, inOffset );\n\t\t\tconst maxNonZero = parseUint16( inDataView, inOffset );\n\n\t\t\tif ( maxNonZero >= BITMAP_SIZE ) {\n\n\t\t\t\tthrow new Error( 'Something is wrong with PIZ_COMPRESSION BITMAP_SIZE' );\n\n\t\t\t}\n\n\t\t\tif ( minNonZero <= maxNonZero ) {\n\n\t\t\t\tfor ( let i = 0; i < maxNonZero - minNonZero + 1; i ++ ) {\n\n\t\t\t\t\tbitmap[ i + minNonZero ] = parseUint8( inDataView, inOffset );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Reverse LUT\n\t\t\tconst lut = new Uint16Array( USHORT_RANGE );\n\t\t\tconst maxValue = reverseLutFromBitmap( bitmap, lut );\n\n\t\t\tconst length = parseUint32( inDataView, inOffset );\n\n\t\t\t// Huffman decoding\n\t\t\thufUncompress( info.array, inDataView, inOffset, length, outBuffer, outBufferEnd );\n\n\t\t\t// Wavelet decoding\n\t\t\tfor ( let i = 0; i < info.inputChannels.length; ++ i ) {\n\n\t\t\t\tconst cd = pizChannelData[ i ];\n\n\t\t\t\tfor ( let j = 0; j < pizChannelData[ i ].size; ++ j ) {\n\n\t\t\t\t\twav2Decode(\n\t\t\t\t\t\toutBuffer,\n\t\t\t\t\t\tcd.start + j,\n\t\t\t\t\t\tcd.nx,\n\t\t\t\t\t\tcd.size,\n\t\t\t\t\t\tcd.ny,\n\t\t\t\t\t\tcd.nx * cd.size,\n\t\t\t\t\t\tmaxValue\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Expand the pixel data to their original range\n\t\t\tapplyLut( lut, outBuffer, outBufferEnd );\n\n\t\t\t// Rearrange the pixel data into the format expected by the caller.\n\t\t\tlet tmpOffset = 0;\n\t\t\tconst tmpBuffer = new Uint8Array( outBuffer.buffer.byteLength );\n\t\t\tfor ( let y = 0; y < info.lines; y ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < info.inputChannels.length; c ++ ) {\n\n\t\t\t\t\tconst cd = pizChannelData[ c ];\n\n\t\t\t\t\tconst n = cd.nx * cd.size;\n\t\t\t\t\tconst cp = new Uint8Array( outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE );\n\n\t\t\t\t\ttmpBuffer.set( cp, tmpOffset );\n\t\t\t\t\ttmpOffset += n * INT16_SIZE;\n\t\t\t\t\tcd.end += n;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressPXR( info ) {\n\n\t\t\tconst compressed = info.array.slice( info.offset.value, info.offset.value + info.size );\n\n\t\t\tconst rawBuffer = fflate.unzlibSync( compressed );\n\n\t\t\tconst byteSize = info.inputChannels.length * info.lines * info.columns * info.totalBytes;\n\t\t\tconst tmpBuffer = new ArrayBuffer( byteSize );\n\t\t\tconst viewer = new DataView( tmpBuffer );\n\n\t\t\tlet tmpBufferEnd = 0;\n\t\t\tlet writePtr = 0;\n\t\t\tconst ptr = new Array( 4 );\n\n\t\t\tfor ( let y = 0; y < info.lines; y ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < info.inputChannels.length; c ++ ) {\n\n\t\t\t\t\tlet pixel = 0;\n\n\t\t\t\t\tconst type = info.inputChannels[ c ].pixelType;\n\t\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t\tcase 1:\n\n\t\t\t\t\t\t\tptr[ 0 ] = tmpBufferEnd;\n\t\t\t\t\t\t\tptr[ 1 ] = ptr[ 0 ] + info.columns;\n\t\t\t\t\t\t\ttmpBufferEnd = ptr[ 1 ] + info.columns;\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < info.columns; ++ j ) {\n\n\t\t\t\t\t\t\t\tconst diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 8 ) | rawBuffer[ ptr[ 1 ] ++ ];\n\n\t\t\t\t\t\t\t\tpixel += diff;\n\n\t\t\t\t\t\t\t\tviewer.setUint16( writePtr, pixel, true );\n\t\t\t\t\t\t\t\twritePtr += 2;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 2:\n\n\t\t\t\t\t\t\tptr[ 0 ] = tmpBufferEnd;\n\t\t\t\t\t\t\tptr[ 1 ] = ptr[ 0 ] + info.columns;\n\t\t\t\t\t\t\tptr[ 2 ] = ptr[ 1 ] + info.columns;\n\t\t\t\t\t\t\ttmpBufferEnd = ptr[ 2 ] + info.columns;\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < info.columns; ++ j ) {\n\n\t\t\t\t\t\t\t\tconst diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 24 ) | ( rawBuffer[ ptr[ 1 ] ++ ] << 16 ) | ( rawBuffer[ ptr[ 2 ] ++ ] << 8 );\n\n\t\t\t\t\t\t\t\tpixel += diff;\n\n\t\t\t\t\t\t\t\tviewer.setUint32( writePtr, pixel, true );\n\t\t\t\t\t\t\t\twritePtr += 4;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn viewer;\n\n\t\t}\n\n\t\tfunction uncompressDWA( info ) {\n\n\t\t\tconst inDataView = info.viewer;\n\t\t\tconst inOffset = { value: info.offset.value };\n\t\t\tconst outBuffer = new Uint8Array( info.columns * info.lines * ( info.inputChannels.length * info.type * INT16_SIZE ) );\n\n\t\t\t// Read compression header information\n\t\t\tconst dwaHeader = {\n\n\t\t\t\tversion: parseInt64( inDataView, inOffset ),\n\t\t\t\tunknownUncompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\tunknownCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\tacCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\tdcCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\trleCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\trleUncompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\trleRawSize: parseInt64( inDataView, inOffset ),\n\t\t\t\ttotalAcUncompressedCount: parseInt64( inDataView, inOffset ),\n\t\t\t\ttotalDcUncompressedCount: parseInt64( inDataView, inOffset ),\n\t\t\t\tacCompression: parseInt64( inDataView, inOffset )\n\n\t\t\t};\n\n\t\t\tif ( dwaHeader.version < 2 )\n\t\t\t\tthrow new Error( 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported' );\n\n\t\t\t// Read channel ruleset information\n\t\t\tconst channelRules = new Array();\n\t\t\tlet ruleSize = parseUint16( inDataView, inOffset ) - INT16_SIZE;\n\n\t\t\twhile ( ruleSize > 0 ) {\n\n\t\t\t\tconst name = parseNullTerminatedString( inDataView.buffer, inOffset );\n\t\t\t\tconst value = parseUint8( inDataView, inOffset );\n\t\t\t\tconst compression = ( value >> 2 ) & 3;\n\t\t\t\tconst csc = ( value >> 4 ) - 1;\n\t\t\t\tconst index = new Int8Array( [ csc ] )[ 0 ];\n\t\t\t\tconst type = parseUint8( inDataView, inOffset );\n\n\t\t\t\tchannelRules.push( {\n\t\t\t\t\tname: name,\n\t\t\t\t\tindex: index,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tcompression: compression,\n\t\t\t\t} );\n\n\t\t\t\truleSize -= name.length + 3;\n\n\t\t\t}\n\n\t\t\t// Classify channels\n\t\t\tconst channels = EXRHeader.channels;\n\t\t\tconst channelData = new Array( info.inputChannels.length );\n\n\t\t\tfor ( let i = 0; i < info.inputChannels.length; ++ i ) {\n\n\t\t\t\tconst cd = channelData[ i ] = {};\n\t\t\t\tconst channel = channels[ i ];\n\n\t\t\t\tcd.name = channel.name;\n\t\t\t\tcd.compression = UNKNOWN;\n\t\t\t\tcd.decoded = false;\n\t\t\t\tcd.type = channel.pixelType;\n\t\t\t\tcd.pLinear = channel.pLinear;\n\t\t\t\tcd.width = info.columns;\n\t\t\t\tcd.height = info.lines;\n\n\t\t\t}\n\n\t\t\tconst cscSet = {\n\t\t\t\tidx: new Array( 3 )\n\t\t\t};\n\n\t\t\tfor ( let offset = 0; offset < info.inputChannels.length; ++ offset ) {\n\n\t\t\t\tconst cd = channelData[ offset ];\n\n\t\t\t\tfor ( let i = 0; i < channelRules.length; ++ i ) {\n\n\t\t\t\t\tconst rule = channelRules[ i ];\n\n\t\t\t\t\tif ( cd.name == rule.name ) {\n\n\t\t\t\t\t\tcd.compression = rule.compression;\n\n\t\t\t\t\t\tif ( rule.index >= 0 ) {\n\n\t\t\t\t\t\t\tcscSet.idx[ rule.index ] = offset;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcd.offset = offset;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet acBuffer, dcBuffer, rleBuffer;\n\n\t\t\t// Read DCT - AC component data\n\t\t\tif ( dwaHeader.acCompressedSize > 0 ) {\n\n\t\t\t\tswitch ( dwaHeader.acCompression ) {\n\n\t\t\t\t\tcase STATIC_HUFFMAN:\n\n\t\t\t\t\t\tacBuffer = new Uint16Array( dwaHeader.totalAcUncompressedCount );\n\t\t\t\t\t\thufUncompress( info.array, inDataView, inOffset, dwaHeader.acCompressedSize, acBuffer, dwaHeader.totalAcUncompressedCount );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase DEFLATE:\n\n\t\t\t\t\t\tconst compressed = info.array.slice( inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount );\n\t\t\t\t\t\tconst data = fflate.unzlibSync( compressed );\n\t\t\t\t\t\tacBuffer = new Uint16Array( data.buffer );\n\t\t\t\t\t\tinOffset.value += dwaHeader.totalAcUncompressedCount;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\t// Read DCT - DC component data\n\t\t\tif ( dwaHeader.dcCompressedSize > 0 ) {\n\n\t\t\t\tconst zlibInfo = {\n\t\t\t\t\tarray: info.array,\n\t\t\t\t\toffset: inOffset,\n\t\t\t\t\tsize: dwaHeader.dcCompressedSize\n\t\t\t\t};\n\t\t\t\tdcBuffer = new Uint16Array( uncompressZIP( zlibInfo ).buffer );\n\t\t\t\tinOffset.value += dwaHeader.dcCompressedSize;\n\n\t\t\t}\n\n\t\t\t// Read RLE compressed data\n\t\t\tif ( dwaHeader.rleRawSize > 0 ) {\n\n\t\t\t\tconst compressed = info.array.slice( inOffset.value, inOffset.value + dwaHeader.rleCompressedSize );\n\t\t\t\tconst data = fflate.unzlibSync( compressed );\n\t\t\t\trleBuffer = decodeRunLength( data.buffer );\n\n\t\t\t\tinOffset.value += dwaHeader.rleCompressedSize;\n\n\t\t\t}\n\n\t\t\t// Prepare outbuffer data offset\n\t\t\tlet outBufferEnd = 0;\n\t\t\tconst rowOffsets = new Array( channelData.length );\n\t\t\tfor ( let i = 0; i < rowOffsets.length; ++ i ) {\n\n\t\t\t\trowOffsets[ i ] = new Array();\n\n\t\t\t}\n\n\t\t\tfor ( let y = 0; y < info.lines; ++ y ) {\n\n\t\t\t\tfor ( let chan = 0; chan < channelData.length; ++ chan ) {\n\n\t\t\t\t\trowOffsets[ chan ].push( outBufferEnd );\n\t\t\t\t\toutBufferEnd += channelData[ chan ].width * info.type * INT16_SIZE;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Lossy DCT decode RGB channels\n\t\t\tlossyDctDecode( cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer );\n\n\t\t\t// Decode other channels\n\t\t\tfor ( let i = 0; i < channelData.length; ++ i ) {\n\n\t\t\t\tconst cd = channelData[ i ];\n\n\t\t\t\tif ( cd.decoded ) continue;\n\n\t\t\t\tswitch ( cd.compression ) {\n\n\t\t\t\t\tcase RLE:\n\n\t\t\t\t\t\tlet row = 0;\n\t\t\t\t\t\tlet rleOffset = 0;\n\n\t\t\t\t\t\tfor ( let y = 0; y < info.lines; ++ y ) {\n\n\t\t\t\t\t\t\tlet rowOffsetBytes = rowOffsets[ i ][ row ];\n\n\t\t\t\t\t\t\tfor ( let x = 0; x < cd.width; ++ x ) {\n\n\t\t\t\t\t\t\t\tfor ( let byte = 0; byte < INT16_SIZE * cd.type; ++ byte ) {\n\n\t\t\t\t\t\t\t\t\toutBuffer[ rowOffsetBytes ++ ] = rleBuffer[ rleOffset + byte * cd.width * cd.height ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\trleOffset ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\trow ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LOSSY_DCT: // skip\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'EXRLoader.parse: unsupported channel compression' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new DataView( outBuffer.buffer );\n\n\t\t}\n\n\t\tfunction parseNullTerminatedString( buffer, offset ) {\n\n\t\t\tconst uintBuffer = new Uint8Array( buffer );\n\t\t\tlet endOffset = 0;\n\n\t\t\twhile ( uintBuffer[ offset.value + endOffset ] != 0 ) {\n\n\t\t\t\tendOffset += 1;\n\n\t\t\t}\n\n\t\t\tconst stringValue = new TextDecoder().decode(\n\t\t\t\tuintBuffer.slice( offset.value, offset.value + endOffset )\n\t\t\t);\n\n\t\t\toffset.value = offset.value + endOffset + 1;\n\n\t\t\treturn stringValue;\n\n\t\t}\n\n\t\tfunction parseFixedLengthString( buffer, offset, size ) {\n\n\t\t\tconst stringValue = new TextDecoder().decode(\n\t\t\t\tnew Uint8Array( buffer ).slice( offset.value, offset.value + size )\n\t\t\t);\n\n\t\t\toffset.value = offset.value + size;\n\n\t\t\treturn stringValue;\n\n\t\t}\n\n\t\tfunction parseRational( dataView, offset ) {\n\n\t\t\tconst x = parseInt32( dataView, offset );\n\t\t\tconst y = parseUint32( dataView, offset );\n\n\t\t\treturn [ x, y ];\n\n\t\t}\n\n\t\tfunction parseTimecode( dataView, offset ) {\n\n\t\t\tconst x = parseUint32( dataView, offset );\n\t\t\tconst y = parseUint32( dataView, offset );\n\n\t\t\treturn [ x, y ];\n\n\t\t}\n\n\t\tfunction parseInt32( dataView, offset ) {\n\n\t\t\tconst Int32 = dataView.getInt32( offset.value, true );\n\n\t\t\toffset.value = offset.value + INT32_SIZE;\n\n\t\t\treturn Int32;\n\n\t\t}\n\n\t\tfunction parseUint32( dataView, offset ) {\n\n\t\t\tconst Uint32 = dataView.getUint32( offset.value, true );\n\n\t\t\toffset.value = offset.value + INT32_SIZE;\n\n\t\t\treturn Uint32;\n\n\t\t}\n\n\t\tfunction parseUint8Array( uInt8Array, offset ) {\n\n\t\t\tconst Uint8 = uInt8Array[ offset.value ];\n\n\t\t\toffset.value = offset.value + INT8_SIZE;\n\n\t\t\treturn Uint8;\n\n\t\t}\n\n\t\tfunction parseUint8( dataView, offset ) {\n\n\t\t\tconst Uint8 = dataView.getUint8( offset.value );\n\n\t\t\toffset.value = offset.value + INT8_SIZE;\n\n\t\t\treturn Uint8;\n\n\t\t}\n\n\t\tconst parseInt64 = function ( dataView, offset ) {\n\n\t\t\tlet int;\n\n\t\t\tif ( 'getBigInt64' in DataView.prototype ) {\n\n\t\t\t\tint = Number( dataView.getBigInt64( offset.value, true ) );\n\n\t\t\t} else {\n\n\t\t\t\tint = dataView.getUint32( offset.value + 4, true ) + Number( dataView.getUint32( offset.value, true ) << 32 );\n\n\t\t\t}\n\n\t\t\toffset.value += ULONG_SIZE;\n\n\t\t\treturn int;\n\n\t\t};\n\n\t\tfunction parseFloat32( dataView, offset ) {\n\n\t\t\tconst float = dataView.getFloat32( offset.value, true );\n\n\t\t\toffset.value += FLOAT32_SIZE;\n\n\t\t\treturn float;\n\n\t\t}\n\n\t\tfunction decodeFloat32( dataView, offset ) {\n\n\t\t\treturn DataUtils.toHalfFloat( parseFloat32( dataView, offset ) );\n\n\t\t}\n\n\t\t// https://stackoverflow.com/questions/5678432/decompressing-half-precision-floats-in-javascript\n\t\tfunction decodeFloat16( binary ) {\n\n\t\t\tconst exponent = ( binary & 0x7C00 ) >> 10,\n\t\t\t\tfraction = binary & 0x03FF;\n\n\t\t\treturn ( binary >> 15 ? - 1 : 1 ) * (\n\t\t\t\texponent ?\n\t\t\t\t\t(\n\t\t\t\t\t\texponent === 0x1F ?\n\t\t\t\t\t\t\tfraction ? NaN : Infinity :\n\t\t\t\t\t\t\tMath.pow( 2, exponent - 15 ) * ( 1 + fraction / 0x400 )\n\t\t\t\t\t) :\n\t\t\t\t\t6.103515625e-5 * ( fraction / 0x400 )\n\t\t\t);\n\n\t\t}\n\n\t\tfunction parseUint16( dataView, offset ) {\n\n\t\t\tconst Uint16 = dataView.getUint16( offset.value, true );\n\n\t\t\toffset.value += INT16_SIZE;\n\n\t\t\treturn Uint16;\n\n\t\t}\n\n\t\tfunction parseFloat16( buffer, offset ) {\n\n\t\t\treturn decodeFloat16( parseUint16( buffer, offset ) );\n\n\t\t}\n\n\t\tfunction parseChlist( dataView, buffer, offset, size ) {\n\n\t\t\tconst startOffset = offset.value;\n\t\t\tconst channels = [];\n\n\t\t\twhile ( offset.value < ( startOffset + size - 1 ) ) {\n\n\t\t\t\tconst name = parseNullTerminatedString( buffer, offset );\n\t\t\t\tconst pixelType = parseInt32( dataView, offset );\n\t\t\t\tconst pLinear = parseUint8( dataView, offset );\n\t\t\t\toffset.value += 3; // reserved, three chars\n\t\t\t\tconst xSampling = parseInt32( dataView, offset );\n\t\t\t\tconst ySampling = parseInt32( dataView, offset );\n\n\t\t\t\tchannels.push( {\n\t\t\t\t\tname: name,\n\t\t\t\t\tpixelType: pixelType,\n\t\t\t\t\tpLinear: pLinear,\n\t\t\t\t\txSampling: xSampling,\n\t\t\t\t\tySampling: ySampling\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\toffset.value += 1;\n\n\t\t\treturn channels;\n\n\t\t}\n\n\t\tfunction parseChromaticities( dataView, offset ) {\n\n\t\t\tconst redX = parseFloat32( dataView, offset );\n\t\t\tconst redY = parseFloat32( dataView, offset );\n\t\t\tconst greenX = parseFloat32( dataView, offset );\n\t\t\tconst greenY = parseFloat32( dataView, offset );\n\t\t\tconst blueX = parseFloat32( dataView, offset );\n\t\t\tconst blueY = parseFloat32( dataView, offset );\n\t\t\tconst whiteX = parseFloat32( dataView, offset );\n\t\t\tconst whiteY = parseFloat32( dataView, offset );\n\n\t\t\treturn { redX: redX, redY: redY, greenX: greenX, greenY: greenY, blueX: blueX, blueY: blueY, whiteX: whiteX, whiteY: whiteY };\n\n\t\t}\n\n\t\tfunction parseCompression( dataView, offset ) {\n\n\t\t\tconst compressionCodes = [\n\t\t\t\t'NO_COMPRESSION',\n\t\t\t\t'RLE_COMPRESSION',\n\t\t\t\t'ZIPS_COMPRESSION',\n\t\t\t\t'ZIP_COMPRESSION',\n\t\t\t\t'PIZ_COMPRESSION',\n\t\t\t\t'PXR24_COMPRESSION',\n\t\t\t\t'B44_COMPRESSION',\n\t\t\t\t'B44A_COMPRESSION',\n\t\t\t\t'DWAA_COMPRESSION',\n\t\t\t\t'DWAB_COMPRESSION'\n\t\t\t];\n\n\t\t\tconst compression = parseUint8( dataView, offset );\n\n\t\t\treturn compressionCodes[ compression ];\n\n\t\t}\n\n\t\tfunction parseBox2i( dataView, offset ) {\n\n\t\t\tconst xMin = parseInt32( dataView, offset );\n\t\t\tconst yMin = parseInt32( dataView, offset );\n\t\t\tconst xMax = parseInt32( dataView, offset );\n\t\t\tconst yMax = parseInt32( dataView, offset );\n\n\t\t\treturn { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };\n\n\t\t}\n\n\t\tfunction parseLineOrder( dataView, offset ) {\n\n\t\t\tconst lineOrders = [\n\t\t\t\t'INCREASING_Y',\n\t\t\t\t'DECREASING_Y',\n\t\t\t\t'RANDOM_Y',\n\t\t\t];\n\n\t\t\tconst lineOrder = parseUint8( dataView, offset );\n\n\t\t\treturn lineOrders[ lineOrder ];\n\n\t\t}\n\n\t\tfunction parseEnvmap( dataView, offset ) {\n\n\t\t\tconst envmaps = [\n\t\t\t\t'ENVMAP_LATLONG',\n\t\t\t\t'ENVMAP_CUBE'\n\t\t\t];\n\n\t\t\tconst envmap = parseUint8( dataView, offset );\n\n\t\t\treturn envmaps[ envmap ];\n\n\t\t}\n\n\t\tfunction parseTiledesc( dataView, offset ) {\n\n\t\t\tconst levelModes = [\n\t\t\t\t'ONE_LEVEL',\n\t\t\t\t'MIPMAP_LEVELS',\n\t\t\t\t'RIPMAP_LEVELS',\n\t\t\t];\n\n\t\t\tconst roundingModes = [\n\t\t\t\t'ROUND_DOWN',\n\t\t\t\t'ROUND_UP',\n\t\t\t];\n\n\t\t\tconst xSize = parseUint32( dataView, offset );\n\t\t\tconst ySize = parseUint32( dataView, offset );\n\t\t\tconst modes = parseUint8( dataView, offset );\n\n\t\t\treturn {\n\t\t\t\txSize: xSize,\n\t\t\t\tySize: ySize,\n\t\t\t\tlevelMode: levelModes[ modes & 0xf ],\n\t\t\t\troundingMode: roundingModes[ modes >> 4 ]\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseV2f( dataView, offset ) {\n\n\t\t\tconst x = parseFloat32( dataView, offset );\n\t\t\tconst y = parseFloat32( dataView, offset );\n\n\t\t\treturn [ x, y ];\n\n\t\t}\n\n\t\tfunction parseV3f( dataView, offset ) {\n\n\t\t\tconst x = parseFloat32( dataView, offset );\n\t\t\tconst y = parseFloat32( dataView, offset );\n\t\t\tconst z = parseFloat32( dataView, offset );\n\n\t\t\treturn [ x, y, z ];\n\n\t\t}\n\n\t\tfunction parseValue( dataView, buffer, offset, type, size ) {\n\n\t\t\tif ( type === 'string' || type === 'stringvector' || type === 'iccProfile' ) {\n\n\t\t\t\treturn parseFixedLengthString( buffer, offset, size );\n\n\t\t\t} else if ( type === 'chlist' ) {\n\n\t\t\t\treturn parseChlist( dataView, buffer, offset, size );\n\n\t\t\t} else if ( type === 'chromaticities' ) {\n\n\t\t\t\treturn parseChromaticities( dataView, offset );\n\n\t\t\t} else if ( type === 'compression' ) {\n\n\t\t\t\treturn parseCompression( dataView, offset );\n\n\t\t\t} else if ( type === 'box2i' ) {\n\n\t\t\t\treturn parseBox2i( dataView, offset );\n\n\t\t\t} else if ( type === 'envmap' ) {\n\n\t\t\t\treturn parseEnvmap( dataView, offset );\n\n\t\t\t} else if ( type === 'tiledesc' ) {\n\n\t\t\t\treturn parseTiledesc( dataView, offset );\n\n\t\t\t} else if ( type === 'lineOrder' ) {\n\n\t\t\t\treturn parseLineOrder( dataView, offset );\n\n\t\t\t} else if ( type === 'float' ) {\n\n\t\t\t\treturn parseFloat32( dataView, offset );\n\n\t\t\t} else if ( type === 'v2f' ) {\n\n\t\t\t\treturn parseV2f( dataView, offset );\n\n\t\t\t} else if ( type === 'v3f' ) {\n\n\t\t\t\treturn parseV3f( dataView, offset );\n\n\t\t\t} else if ( type === 'int' ) {\n\n\t\t\t\treturn parseInt32( dataView, offset );\n\n\t\t\t} else if ( type === 'rational' ) {\n\n\t\t\t\treturn parseRational( dataView, offset );\n\n\t\t\t} else if ( type === 'timecode' ) {\n\n\t\t\t\treturn parseTimecode( dataView, offset );\n\n\t\t\t} else if ( type === 'preview' ) {\n\n\t\t\t\toffset.value += size;\n\t\t\t\treturn 'skipped';\n\n\t\t\t} else {\n\n\t\t\t\toffset.value += size;\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction roundLog2( x, mode ) {\n\n\t\t\tconst log2 = Math.log2( x );\n\t\t\treturn mode == 'ROUND_DOWN' ? Math.floor( log2 ) : Math.ceil( log2 );\n\n\t\t}\n\n\t\tfunction calculateTileLevels( tiledesc, w, h ) {\n\n\t\t\tlet num = 0;\n\n\t\t\tswitch ( tiledesc.levelMode ) {\n\n\t\t\t\tcase 'ONE_LEVEL':\n\t\t\t\t\tnum = 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'MIPMAP_LEVELS':\n\t\t\t\t\tnum = roundLog2( Math.max( w, h ), tiledesc.roundingMode ) + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RIPMAP_LEVELS':\n\t\t\t\t\tthrow new Error( 'THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.' );\n\n\t\t\t}\n\n\t\t\treturn num;\n\n\t\t}\n\n\t\tfunction calculateTiles( count, dataSize, size, roundingMode ) {\n\n\t\t\tconst tiles = new Array( count );\n\n\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\tconst b = ( 1 << i );\n\t\t\t\tlet s = ( dataSize / b ) | 0;\n\n\t\t\t\tif ( roundingMode == 'ROUND_UP' && s * b < dataSize ) s += 1;\n\n\t\t\t\tconst l = Math.max( s, 1 );\n\n\t\t\t\ttiles[ i ] = ( ( l + size - 1 ) / size ) | 0;\n\n\t\t\t}\n\n\t\t\treturn tiles;\n\n\t\t}\n\n\t\tfunction parseTiles() {\n\n\t\t\tconst EXRDecoder = this;\n\t\t\tconst offset = EXRDecoder.offset;\n\t\t\tconst tmpOffset = { value: 0 };\n\n\t\t\tfor ( let tile = 0; tile < EXRDecoder.tileCount; tile ++ ) {\n\n\t\t\t\tconst tileX = parseInt32( EXRDecoder.viewer, offset );\n\t\t\t\tconst tileY = parseInt32( EXRDecoder.viewer, offset );\n\t\t\t\toffset.value += 8; // skip levels - only parsing top-level\n\t\t\t\tEXRDecoder.size = parseUint32( EXRDecoder.viewer, offset );\n\n\t\t\t\tconst startX = tileX * EXRDecoder.blockWidth;\n\t\t\t\tconst startY = tileY * EXRDecoder.blockHeight;\n\t\t\t\tEXRDecoder.columns = ( startX + EXRDecoder.blockWidth > EXRDecoder.width ) ? EXRDecoder.width - startX : EXRDecoder.blockWidth;\n\t\t\t\tEXRDecoder.lines = ( startY + EXRDecoder.blockHeight > EXRDecoder.height ) ? EXRDecoder.height - startY : EXRDecoder.blockHeight;\n\n\t\t\t\tconst bytesBlockLine = EXRDecoder.columns * EXRDecoder.totalBytes;\n\t\t\t\tconst isCompressed = EXRDecoder.size < EXRDecoder.lines * bytesBlockLine;\n\t\t\t\tconst viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );\n\n\t\t\t\toffset.value += EXRDecoder.size;\n\n\t\t\t\tfor ( let line = 0; line < EXRDecoder.lines; line ++ ) {\n\n\t\t\t\t\tconst lineOffset = line * EXRDecoder.columns * EXRDecoder.totalBytes;\n\n\t\t\t\t\tfor ( let channelID = 0; channelID < EXRDecoder.inputChannels.length; channelID ++ ) {\n\n\t\t\t\t\t\tconst name = EXRHeader.channels[ channelID ].name;\n\t\t\t\t\t\tconst lOff = EXRDecoder.channelByteOffsets[ name ] * EXRDecoder.columns;\n\t\t\t\t\t\tconst cOff = EXRDecoder.decodeChannels[ name ];\n\n\t\t\t\t\t\tif ( cOff === undefined ) continue;\n\n\t\t\t\t\t\ttmpOffset.value = lineOffset + lOff;\n\t\t\t\t\t\tconst outLineOffset = ( EXRDecoder.height - ( 1 + startY + line ) ) * EXRDecoder.outLineWidth;\n\n\t\t\t\t\t\tfor ( let x = 0; x < EXRDecoder.columns; x ++ ) {\n\n\t\t\t\t\t\t\tconst outIndex = outLineOffset + ( x + startX ) * EXRDecoder.outputChannels + cOff;\n\t\t\t\t\t\t\tEXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseScanline() {\n\n\t\t\tconst EXRDecoder = this;\n\t\t\tconst offset = EXRDecoder.offset;\n\t\t\tconst tmpOffset = { value: 0 };\n\n\t\t\tfor ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.blockHeight; scanlineBlockIdx ++ ) {\n\n\t\t\t\tconst line = parseInt32( EXRDecoder.viewer, offset ) - EXRHeader.dataWindow.yMin; // line_no\n\t\t\t\tEXRDecoder.size = parseUint32( EXRDecoder.viewer, offset ); // data_len\n\t\t\t\tEXRDecoder.lines = ( ( line + EXRDecoder.blockHeight > EXRDecoder.height ) ? ( EXRDecoder.height - line ) : EXRDecoder.blockHeight );\n\n\t\t\t\tconst bytesPerLine = EXRDecoder.columns * EXRDecoder.totalBytes;\n\t\t\t\tconst isCompressed = EXRDecoder.size < EXRDecoder.lines * bytesPerLine;\n\t\t\t\tconst viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );\n\n\t\t\t\toffset.value += EXRDecoder.size;\n\n\t\t\t\tfor ( let line_y = 0; line_y < EXRDecoder.blockHeight; line_y ++ ) {\n\n\t\t\t\t\tconst scan_y = scanlineBlockIdx * EXRDecoder.blockHeight;\n\t\t\t\t\tconst true_y = line_y + EXRDecoder.scanOrder( scan_y );\n\t\t\t\t\tif ( true_y >= EXRDecoder.height ) continue;\n\n\t\t\t\t\tconst lineOffset = line_y * bytesPerLine;\n\t\t\t\t\tconst outLineOffset = ( EXRDecoder.height - 1 - true_y ) * EXRDecoder.outLineWidth;\n\n\t\t\t\t\tfor ( let channelID = 0; channelID < EXRDecoder.inputChannels.length; channelID ++ ) {\n\n\t\t\t\t\t\tconst name = EXRHeader.channels[ channelID ].name;\n\t\t\t\t\t\tconst lOff = EXRDecoder.channelByteOffsets[ name ] * EXRDecoder.columns;\n\t\t\t\t\t\tconst cOff = EXRDecoder.decodeChannels[ name ];\n\n\t\t\t\t\t\tif ( cOff === undefined ) continue;\n\n\t\t\t\t\t\ttmpOffset.value = lineOffset + lOff;\n\n\t\t\t\t\t\tfor ( let x = 0; x < EXRDecoder.columns; x ++ ) {\n\n\t\t\t\t\t\t\tconst outIndex = outLineOffset + x * EXRDecoder.outputChannels + cOff;\n\t\t\t\t\t\t\tEXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseHeader( dataView, buffer, offset ) {\n\n\t\t\tconst EXRHeader = {};\n\n\t\t\tif ( dataView.getUint32( 0, true ) != 20000630 ) { // magic\n\n\t\t\t\tthrow new Error( 'THREE.EXRLoader: Provided file doesn\\'t appear to be in OpenEXR format.' );\n\n\t\t\t}\n\n\t\t\tEXRHeader.version = dataView.getUint8( 4 );\n\n\t\t\tconst spec = dataView.getUint8( 5 ); // fullMask\n\n\t\t\tEXRHeader.spec = {\n\t\t\t\tsingleTile: !! ( spec & 2 ),\n\t\t\t\tlongName: !! ( spec & 4 ),\n\t\t\t\tdeepFormat: !! ( spec & 8 ),\n\t\t\t\tmultiPart: !! ( spec & 16 ),\n\t\t\t};\n\n\t\t\t// start of header\n\n\t\t\toffset.value = 8; // start at 8 - after pre-amble\n\n\t\t\tlet keepReading = true;\n\n\t\t\twhile ( keepReading ) {\n\n\t\t\t\tconst attributeName = parseNullTerminatedString( buffer, offset );\n\n\t\t\t\tif ( attributeName == 0 ) {\n\n\t\t\t\t\tkeepReading = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst attributeType = parseNullTerminatedString( buffer, offset );\n\t\t\t\t\tconst attributeSize = parseUint32( dataView, offset );\n\t\t\t\t\tconst attributeValue = parseValue( dataView, buffer, offset, attributeType, attributeSize );\n\n\t\t\t\t\tif ( attributeValue === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( `THREE.EXRLoader: Skipped unknown header attribute type \\'${attributeType}\\'.` );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tEXRHeader[ attributeName ] = attributeValue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( spec & ~ 0x06 ) != 0 ) { // unsupported deep-image, multi-part\n\n\t\t\t\tconsole.error( 'THREE.EXRHeader:', EXRHeader );\n\t\t\t\tthrow new Error( 'THREE.EXRLoader: Provided file is currently unsupported.' );\n\n\t\t\t}\n\n\t\t\treturn EXRHeader;\n\n\t\t}\n\n\t\tfunction setupDecoder( EXRHeader, dataView, uInt8Array, offset, outputType ) {\n\n\t\t\tconst EXRDecoder = {\n\t\t\t\tsize: 0,\n\t\t\t\tviewer: dataView,\n\t\t\t\tarray: uInt8Array,\n\t\t\t\toffset: offset,\n\t\t\t\twidth: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,\n\t\t\t\theight: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,\n\t\t\t\tinputChannels: EXRHeader.channels,\n\t\t\t\tchannelByteOffsets: {},\n\t\t\t\tscanOrder: null,\n\t\t\t\ttotalBytes: null,\n\t\t\t\tcolumns: null,\n\t\t\t\tlines: null,\n\t\t\t\ttype: null,\n\t\t\t\tuncompress: null,\n\t\t\t\tgetter: null,\n\t\t\t\tformat: null,\n\t\t\t\tcolorSpace: LinearSRGBColorSpace,\n\t\t\t};\n\n\t\t\tswitch ( EXRHeader.compression ) {\n\n\t\t\t\tcase 'NO_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 1;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressRAW;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RLE_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 1;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressRLE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZIPS_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 1;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressZIP;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZIP_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 16;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressZIP;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PIZ_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 32;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressPIZ;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PXR24_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 16;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressPXR;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DWAA_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 32;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressDWA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DWAB_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 256;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressDWA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported' );\n\n\t\t\t}\n\n\t\t\tconst channels = {};\n\t\t\tfor ( const channel of EXRHeader.channels ) {\n\n\t\t\t\tswitch ( channel.name ) {\n\n\t\t\t\t\tcase 'Y':\n\t\t\t\t\tcase 'R':\n\t\t\t\t\tcase 'G':\n\t\t\t\t\tcase 'B':\n\t\t\t\t\tcase 'A':\n\t\t\t\t\t\tchannels[ channel.name ] = true;\n\t\t\t\t\t\tEXRDecoder.type = channel.pixelType;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// RGB images will be converted to RGBA format, preventing software emulation in select devices.\n\t\t\tlet fillAlpha = false;\n\n\t\t\tif ( channels.R && channels.G && channels.B ) {\n\n\t\t\t\tfillAlpha = ! channels.A;\n\t\t\t\tEXRDecoder.outputChannels = 4;\n\t\t\t\tEXRDecoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };\n\n\t\t\t} else if ( channels.Y ) {\n\n\t\t\t\tEXRDecoder.outputChannels = 1;\n\t\t\t\tEXRDecoder.decodeChannels = { Y: 0 };\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'EXRLoader.parse: file contains unsupported data channels.' );\n\n\t\t\t}\n\n\t\t\tif ( EXRDecoder.type == 1 ) {\n\n\t\t\t\t// half\n\t\t\t\tswitch ( outputType ) {\n\n\t\t\t\t\tcase FloatType:\n\t\t\t\t\t\tEXRDecoder.getter = parseFloat16;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\t\t\t\t\t\tEXRDecoder.getter = parseUint16;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( EXRDecoder.type == 2 ) {\n\n\t\t\t\t// float\n\t\t\t\tswitch ( outputType ) {\n\n\t\t\t\t\tcase FloatType:\n\t\t\t\t\t\tEXRDecoder.getter = parseFloat32;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\t\t\t\t\t\tEXRDecoder.getter = decodeFloat32;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'EXRLoader.parse: unsupported pixelType ' + EXRDecoder.type + ' for ' + EXRHeader.compression + '.' );\n\n\t\t\t}\n\n\t\t\tEXRDecoder.columns = EXRDecoder.width;\n\t\t\tconst size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;\n\n\t\t\tswitch ( outputType ) {\n\n\t\t\t\tcase FloatType:\n\t\t\t\t\tEXRDecoder.byteArray = new Float32Array( size );\n\n\t\t\t\t\t// Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten\n\t\t\t\t\tif ( fillAlpha )\n\t\t\t\t\t\tEXRDecoder.byteArray.fill( 1, 0, size );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase HalfFloatType:\n\t\t\t\t\tEXRDecoder.byteArray = new Uint16Array( size );\n\n\t\t\t\t\tif ( fillAlpha )\n\t\t\t\t\t\tEXRDecoder.byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error( 'THREE.EXRLoader: unsupported type: ', outputType );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlet byteOffset = 0;\n\t\t\tfor ( const channel of EXRHeader.channels ) {\n\n\t\t\t\tif ( EXRDecoder.decodeChannels[ channel.name ] !== undefined ) {\n\n\t\t\t\t\tEXRDecoder.channelByteOffsets[ channel.name ] = byteOffset;\n\n\t\t\t\t}\n\n\t\t\t\tbyteOffset += channel.pixelType * 2;\n\n\t\t\t}\n\n\t\t\tEXRDecoder.totalBytes = byteOffset;\n\t\t\tEXRDecoder.outLineWidth = EXRDecoder.width * EXRDecoder.outputChannels;\n\n\t\t\tif ( EXRHeader.lineOrder === 'INCREASING_Y' ) {\n\n\t\t\t\tEXRDecoder.scanOrder = ( y ) => y;\n\n\t\t\t} else {\n\n\t\t\t\tEXRDecoder.scanOrder = ( y ) => EXRDecoder.height - 1 - y;\n\n\t\t\t}\n\n\t\t\tif ( EXRDecoder.outputChannels == 4 ) {\n\n\t\t\t\tEXRDecoder.format = RGBAFormat;\n\t\t\t\tEXRDecoder.colorSpace = LinearSRGBColorSpace;\n\n\t\t\t} else {\n\n\t\t\t\tEXRDecoder.format = RedFormat;\n\t\t\t\tEXRDecoder.colorSpace = NoColorSpace;\n\n\t\t\t}\n\n\t\t\tif ( EXRHeader.spec.singleTile ) {\n\n\t\t\t\tEXRDecoder.blockHeight = EXRHeader.tiles.ySize;\n\t\t\t\tEXRDecoder.blockWidth = EXRHeader.tiles.xSize;\n\n\t\t\t\tconst numXLevels = calculateTileLevels( EXRHeader.tiles, EXRDecoder.width, EXRDecoder.height );\n\t\t\t\t// const numYLevels = calculateTileLevels( EXRHeader.tiles, EXRDecoder.width, EXRDecoder.height );\n\n\t\t\t\tconst numXTiles = calculateTiles( numXLevels, EXRDecoder.width, EXRHeader.tiles.xSize, EXRHeader.tiles.roundingMode );\n\t\t\t\tconst numYTiles = calculateTiles( numXLevels, EXRDecoder.height, EXRHeader.tiles.ySize, EXRHeader.tiles.roundingMode );\n\n\t\t\t\tEXRDecoder.tileCount = numXTiles[ 0 ] * numYTiles[ 0 ];\n\n\t\t\t\tfor ( let l = 0; l < numXLevels; l ++ )\n\t\t\t\t\tfor ( let y = 0; y < numYTiles[ l ]; y ++ )\n\t\t\t\t\t\tfor ( let x = 0; x < numXTiles[ l ]; x ++ )\n\t\t\t\t\t\t\tparseInt64( dataView, offset ); // tileOffset\n\n\t\t\t\tEXRDecoder.decode = parseTiles.bind( EXRDecoder );\n\n\t\t\t} else {\n\n\t\t\t\tEXRDecoder.blockWidth = EXRDecoder.width;\n\t\t\t\tconst blockCount = Math.ceil( EXRDecoder.height / EXRDecoder.blockHeight );\n\n\t\t\t\tfor ( let i = 0; i < blockCount; i ++ )\n\t\t\t\t\tparseInt64( dataView, offset ); // scanlineOffset\n\n\t\t\t\tEXRDecoder.decode = parseScanline.bind( EXRDecoder );\n\n\t\t\t}\n\n\t\t\treturn EXRDecoder;\n\n\t\t}\n\n\t\t// start parsing file [START]\n\t\tconst offset = { value: 0 };\n\t\tconst bufferDataView = new DataView( buffer );\n\t\tconst uInt8Array = new Uint8Array( buffer );\n\n\t\t// get header information and validate format.\n\t\tconst EXRHeader = parseHeader( bufferDataView, buffer, offset );\n\n\t\t// get input compression information and prepare decoding.\n\t\tconst EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );\n\n\t\t// parse input data\n\t\tEXRDecoder.decode();\n\n\t\treturn {\n\t\t\theader: EXRHeader,\n\t\t\twidth: EXRDecoder.width,\n\t\t\theight: EXRDecoder.height,\n\t\t\tdata: EXRDecoder.byteArray,\n\t\t\tformat: EXRDecoder.format,\n\t\t\tcolorSpace: EXRDecoder.colorSpace,\n\t\t\ttype: this.type,\n\t\t};\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\ttexture.colorSpace = texData.colorSpace;\n\t\t\ttexture.minFilter = LinearFilter;\n\t\t\ttexture.magFilter = LinearFilter;\n\t\t\ttexture.generateMipmaps = false;\n\t\t\ttexture.flipY = false;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn super.load( url, onLoadCallback, onProgress, onError );\n\n\t}\n\n}\n\nexport { EXRLoader };\n", "import {\n\tBufferGeometryLoader,\n\tCanvasTexture,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tLinearFilter,\n\tLine,\n\tLineBasicMaterial,\n\tLoader,\n\tMatrix4,\n\tMesh,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tObject3D,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tRectAreaLight,\n\tRepeatWrapping,\n\tSpotLight,\n\tSprite,\n\tSpriteMaterial,\n\tTextureLoader\n} from 'three';\n\nimport { EXRLoader } from '../loaders/EXRLoader.js';\n\nconst _taskCache = new WeakMap();\n\nclass Rhino3dmLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.libraryPath = '';\n\t\tthis.libraryPending = null;\n\t\tthis.libraryBinary = null;\n\t\tthis.libraryConfig = {};\n\n\t\tthis.url = '';\n\n\t\tthis.workerLimit = 4;\n\t\tthis.workerPool = [];\n\t\tthis.workerNextTaskID = 1;\n\t\tthis.workerSourceURL = '';\n\t\tthis.workerConfig = {};\n\n\t\tthis.materials = [];\n\t\tthis.warnings = [];\n\n\t}\n\n\tsetLibraryPath( path ) {\n\n\t\tthis.libraryPath = path;\n\n\t\treturn this;\n\n\t}\n\n\tsetWorkerLimit( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\n\t\tthis.url = url;\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t\t// again from this thread.\n\t\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\t\treturn cachedTask.promise.then( onLoad ).catch( onError );\n\n\t\t\t}\n\n\t\t\tthis.decodeObjects( buffer, url )\n\t\t\t\t.then( result => {\n\n\t\t\t\t\tresult.userData.warnings = this.warnings;\n\t\t\t\t\tonLoad( result );\n\n\t\t\t\t } )\n\t\t\t\t.catch( e => onError( e ) );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tdebug() {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t}\n\n\tdecodeObjects( buffer, url ) {\n\n\t\tlet worker;\n\t\tlet taskID;\n\n\t\tconst taskCost = buffer.byteLength;\n\n\t\tconst objectPending = this._getWorker( taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\t\t\t\ttaskID = this.workerNextTaskID ++;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, buffer }, [ buffer ] );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.data ) )\n\t\t\t.catch( e => {\n\n\t\t\t\tthrow e;\n\n\t\t\t} );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tobjectPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t//this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffer, {\n\n\t\t\turl: url,\n\t\t\tpromise: objectPending\n\n\t\t} );\n\n\t\treturn objectPending;\n\n\t}\n\n\tparse( data, onLoad, onError ) {\n\n\t\tthis.decodeObjects( data, '' )\n\t\t\t.then( result => {\n\n\t\t\t\tresult.userData.warnings = this.warnings;\n\t\t\t\tonLoad( result );\n\n\t\t\t} )\n\t\t\t.catch( e => onError( e ) );\n\n\t}\n\n\t_compareMaterials( material ) {\n\n\t\tconst mat = {};\n\t\tmat.name = material.name;\n\t\tmat.color = {};\n\t\tmat.color.r = material.color.r;\n\t\tmat.color.g = material.color.g;\n\t\tmat.color.b = material.color.b;\n\t\tmat.type = material.type;\n\t\tmat.vertexColors = material.vertexColors;\n\n\t\tconst json = JSON.stringify( mat );\n\n\t\tfor ( let i = 0; i < this.materials.length; i ++ ) {\n\n\t\t\tconst m = this.materials[ i ];\n\t\t\tconst _mat = {};\n\t\t\t_mat.name = m.name;\n\t\t\t_mat.color = {};\n\t\t\t_mat.color.r = m.color.r;\n\t\t\t_mat.color.g = m.color.g;\n\t\t\t_mat.color.b = m.color.b;\n\t\t\t_mat.type = m.type;\n\t\t\t_mat.vertexColors = m.vertexColors;\n\n\t\t\tif ( JSON.stringify( _mat ) === json ) {\n\n\t\t\t\treturn m;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials.push( material );\n\n\t\treturn material;\n\n\t}\n\n\t_createMaterial( material, renderEnvironment ) {\n\n\t\tif ( material === undefined ) {\n\n\t\t\treturn new MeshStandardMaterial( {\n\t\t\t\tcolor: new Color( 1, 1, 1 ),\n\t\t\t\tmetalness: 0.8,\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tside: DoubleSide\n\t\t\t} );\n\n\t\t}\n\n\t\t//console.log(material)\n\n\t\tconst mat = new MeshPhysicalMaterial( {\n\n\t\t\tcolor: new Color( material.diffuseColor.r / 255.0, material.diffuseColor.g / 255.0, material.diffuseColor.b / 255.0 ),\n\t\t\temissive: new Color( material.emissionColor.r, material.emissionColor.g, material.emissionColor.b ),\n\t\t\tflatShading: material.disableLighting,\n\t\t\tior: material.indexOfRefraction,\n\t\t\tname: material.name,\n\t\t\treflectivity: material.reflectivity,\n\t\t\topacity: 1.0 - material.transparency,\n\t\t\tside: DoubleSide,\n\t\t\tspecularColor: material.specularColor,\n\t\t\ttransparent: material.transparency > 0 ? true : false\n\n\t\t} );\n\n\t\tmat.userData.id = material.id;\n\n\t\tif ( material.pbrSupported ) {\n\n\t\t\tconst pbr = material.pbr;\n\n\t\t\tmat.anisotropy = pbr.anisotropic;\n\t\t\tmat.anisotropyRotation = pbr.anisotropicRotation;\n\t\t\tmat.color = new Color( pbr.baseColor.r, pbr.baseColor.g, pbr.baseColor.b );\n\t\t\tmat.clearcoat = pbr.clearcoat;\n\t\t\tmat.clearcoatRoughness = pbr.clearcoatRoughness;\n\t\t\tmat.metalness = pbr.metallic;\n\t\t\tmat.transmission = 1 - pbr.opacity;\n\t\t\tmat.roughness = pbr.roughness;\n\t\t\tmat.sheen = pbr.sheen;\n\t\t\tmat.specularIntensity = pbr.specular;\n\t\t\tmat.thickness = pbr.subsurface;\n\n\t\t}\n\n\t\tif ( material.pbrSupported && material.pbr.opacity === 0 && material.transparency === 1 ) {\n\n\t\t\t//some compromises\n\n\t\t\tmat.opacity = 0.2;\n\t\t\tmat.transmission = 1.00;\n\n\t\t}\n\n\t\tconst textureLoader = new TextureLoader();\n\n\t\tfor ( let i = 0; i < material.textures.length; i ++ ) {\n\n\t\t\tconst texture = material.textures[ i ];\n\n\t\t\tif ( texture.image !== null ) {\n\n\t\t\t\tconst map = textureLoader.load( texture.image );\n\n\t\t\t\t//console.log(texture.type )\n\n\t\t\t\tswitch ( texture.type ) {\n\n\t\t\t\t\tcase 'Bump':\n\n\t\t\t\t\t\tmat.bumpMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Diffuse':\n\n\t\t\t\t\t\tmat.map = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Emap':\n\n\t\t\t\t\t\tmat.envMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Opacity':\n\n\t\t\t\t\t\tmat.transmissionMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Transparency':\n\n\t\t\t\t\t\tmat.alphaMap = map;\n\t\t\t\t\t\tmat.transparent = true;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Alpha':\n\n\t\t\t\t\t\tmat.alphaMap = map;\n\t\t\t\t\t\tmat.transparent = true;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_AmbientOcclusion':\n\n\t\t\t\t\t\tmat.aoMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Anisotropic':\n\n\t\t\t\t\t\tmat.anisotropyMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_BaseColor':\n\n\t\t\t\t\t\tmat.map = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Clearcoat':\n\n\t\t\t\t\t\tmat.clearcoatMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_ClearcoatBump':\n\n\t\t\t\t\t\tmat.clearcoatNormalMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_ClearcoatRoughness':\n\n\t\t\t\t\t\tmat.clearcoatRoughnessMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Displacement':\n\n\t\t\t\t\t\tmat.displacementMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Emission':\n\n\t\t\t\t\t\tmat.emissiveMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Metallic':\n\n\t\t\t\t\t\tmat.metalnessMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Roughness':\n\n\t\t\t\t\t\tmat.roughnessMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Sheen':\n\n\t\t\t\t\t\tmat.sheenColorMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Specular':\n\n\t\t\t\t\t\tmat.specularColorMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Subsurface':\n\n\t\t\t\t\t\tmat.thicknessMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tthis.warnings.push( {\n\t\t\t\t\t\t\tmessage: `THREE.3DMLoader: No conversion exists for 3dm ${texture.type}.`,\n\t\t\t\t\t\t\ttype: 'no conversion'\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tmap.wrapS = texture.wrapU === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\t\t\t\tmap.wrapT = texture.wrapV === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\t\t\tif ( texture.repeat ) {\n\n\t\t\t\t\tmap.repeat.set( texture.repeat[ 0 ], texture.repeat[ 1 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( renderEnvironment ) {\n\n\t\t\tnew EXRLoader().load( renderEnvironment.image, function ( texture ) {\n\n\t\t\t\ttexture.mapping = THREE.EquirectangularReflectionMapping;\n\t\t\t\tmat.envMap = texture;\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn mat;\n\n\t}\n\n\t_createGeometry( data ) {\n\n\t\tconst object = new Object3D();\n\t\tconst instanceDefinitionObjects = [];\n\t\tconst instanceDefinitions = [];\n\t\tconst instanceReferences = [];\n\n\t\tobject.userData[ 'layers' ] = data.layers;\n\t\tobject.userData[ 'groups' ] = data.groups;\n\t\tobject.userData[ 'settings' ] = data.settings;\n\t\tobject.userData.settings[ 'renderSettings' ] = data.renderSettings;\n\t\tobject.userData[ 'objectType' ] = 'File3dm';\n\t\tobject.userData[ 'materials' ] = null;\n\n\t\tobject.name = this.url;\n\n\t\tlet objects = data.objects;\n\t\tconst materials = data.materials;\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\tconst obj = objects[ i ];\n\t\t\tconst attributes = obj.attributes;\n\n\t\t\tswitch ( obj.objectType ) {\n\n\t\t\t\tcase 'InstanceDefinition':\n\n\t\t\t\t\tinstanceDefinitions.push( obj );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'InstanceReference':\n\n\t\t\t\t\tinstanceReferences.push( obj );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tlet matId = null;\n\n\t\t\t\t\tswitch ( attributes.materialSource.name ) {\n\n\t\t\t\t\t\tcase 'ObjectMaterialSource_MaterialFromLayer':\n\t\t\t\t\t\t\t//check layer index\n\t\t\t\t\t\t\tif ( attributes.layerIndex >= 0 ) {\n\n\t\t\t\t\t\t\t\tmatId = data.layers[ attributes.layerIndex ].renderMaterialIndex;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ObjectMaterialSource_MaterialFromObject':\n\n\t\t\t\t\t\t\tif ( attributes.materialIndex >= 0 ) {\n\n\t\t\t\t\t\t\t\tmatId = attributes.materialIndex;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet material = null;\n\n\t\t\t\t\tif ( matId >= 0 ) {\n\n\t\t\t\t\t\tconst rMaterial = materials[ matId ];\n\t\t\t\t\t\tmaterial = this._createMaterial( rMaterial, data.renderEnvironment );\n\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst _object = this._createObject( obj, material );\n\n\t\t\t\t\tif ( _object === undefined ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst layer = data.layers[ attributes.layerIndex ];\n\n\t\t\t\t\t_object.visible = layer ? data.layers[ attributes.layerIndex ].visible : true;\n\n\t\t\t\t\tif ( attributes.isInstanceDefinitionObject ) {\n\n\t\t\t\t\t\tinstanceDefinitionObjects.push( _object );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.add( _object );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < instanceDefinitions.length; i ++ ) {\n\n\t\t\tconst iDef = instanceDefinitions[ i ];\n\n\t\t\tobjects = [];\n\n\t\t\tfor ( let j = 0; j < iDef.attributes.objectIds.length; j ++ ) {\n\n\t\t\t\tconst objId = iDef.attributes.objectIds[ j ];\n\n\t\t\t\tfor ( let p = 0; p < instanceDefinitionObjects.length; p ++ ) {\n\n\t\t\t\t\tconst idoId = instanceDefinitionObjects[ p ].userData.attributes.id;\n\n\t\t\t\t\tif ( objId === idoId ) {\n\n\t\t\t\t\t\tobjects.push( instanceDefinitionObjects[ p ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Currently clones geometry and does not take advantage of instancing\n\n\t\t\tfor ( let j = 0; j < instanceReferences.length; j ++ ) {\n\n\t\t\t\tconst iRef = instanceReferences[ j ];\n\n\t\t\t\tif ( iRef.geometry.parentIdefId === iDef.attributes.id ) {\n\n\t\t\t\t\tconst iRefObject = new Object3D();\n\t\t\t\t\tconst xf = iRef.geometry.xform.array;\n\n\t\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\t\tmatrix.set( ...xf );\n\n\t\t\t\t\tiRefObject.applyMatrix4( matrix );\n\n\t\t\t\t\tfor ( let p = 0; p < objects.length; p ++ ) {\n\n\t\t\t\t\t\tiRefObject.add( objects[ p ].clone( true ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.add( iRefObject );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tobject.userData[ 'materials' ] = this.materials;\n\t\tobject.name = '';\n\t\treturn object;\n\n\t}\n\n\t_createObject( obj, mat ) {\n\n\t\tconst loader = new BufferGeometryLoader();\n\n\t\tconst attributes = obj.attributes;\n\n\t\tlet geometry, material, _color, color;\n\n\t\tswitch ( obj.objectType ) {\n\n\t\t\tcase 'Point':\n\t\t\tcase 'PointSet':\n\n\t\t\t\tgeometry = loader.parse( obj.geometry );\n\n\t\t\t\tif ( geometry.attributes.hasOwnProperty( 'color' ) ) {\n\n\t\t\t\t\tmaterial = new PointsMaterial( { vertexColors: true, sizeAttenuation: false, size: 2 } );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_color = attributes.drawColor;\n\t\t\t\t\tcolor = new Color( _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 );\n\t\t\t\t\tmaterial = new PointsMaterial( { color: color, sizeAttenuation: false, size: 2 } );\n\n\t\t\t\t}\n\n\t\t\t\tmaterial = this._compareMaterials( material );\n\n\t\t\t\tconst points = new Points( geometry, material );\n\t\t\t\tpoints.userData[ 'attributes' ] = attributes;\n\t\t\t\tpoints.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tpoints.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn points;\n\n\t\t\tcase 'Mesh':\n\t\t\tcase 'Extrusion':\n\t\t\tcase 'SubD':\n\t\t\tcase 'Brep':\n\n\t\t\t\tif ( obj.geometry === null ) return;\n\n\t\t\t\tgeometry = loader.parse( obj.geometry );\n\n\n\t\t\t\tif ( mat === null ) {\n\n\t\t\t\t\tmat = this._createMaterial();\n\n\t\t\t\t}\n\n\n\t\t\t\tif ( geometry.attributes.hasOwnProperty( 'color' ) ) {\n\n\t\t\t\t\tmat.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tmat = this._compareMaterials( mat );\n\n\t\t\t\tconst mesh = new Mesh( geometry, mat );\n\t\t\t\tmesh.castShadow = attributes.castsShadows;\n\t\t\t\tmesh.receiveShadow = attributes.receivesShadows;\n\t\t\t\tmesh.userData[ 'attributes' ] = attributes;\n\t\t\t\tmesh.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tmesh.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn mesh;\n\n\t\t\tcase 'Curve':\n\n\t\t\t\tgeometry = loader.parse( obj.geometry );\n\n\t\t\t\t_color = attributes.drawColor;\n\t\t\t\tcolor = new Color( _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 );\n\n\t\t\t\tmaterial = new LineBasicMaterial( { color: color } );\n\t\t\t\tmaterial = this._compareMaterials( material );\n\n\t\t\t\tconst lines = new Line( geometry, material );\n\t\t\t\tlines.userData[ 'attributes' ] = attributes;\n\t\t\t\tlines.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tlines.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn lines;\n\n\t\t\tcase 'TextDot':\n\n\t\t\t\tgeometry = obj.geometry;\n\n\t\t\t\tconst ctx = document.createElement( 'canvas' ).getContext( '2d' );\n\t\t\t\tconst font = `${geometry.fontHeight}px ${geometry.fontFace}`;\n\t\t\t\tctx.font = font;\n\t\t\t\tconst width = ctx.measureText( geometry.text ).width + 10;\n\t\t\t\tconst height = geometry.fontHeight + 10;\n\n\t\t\t\tconst r = window.devicePixelRatio;\n\n\t\t\t\tctx.canvas.width = width * r;\n\t\t\t\tctx.canvas.height = height * r;\n\t\t\t\tctx.canvas.style.width = width + 'px';\n\t\t\t\tctx.canvas.style.height = height + 'px';\n\t\t\t\tctx.setTransform( r, 0, 0, r, 0, 0 );\n\n\t\t\t\tctx.font = font;\n\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\tctx.textAlign = 'center';\n\t\t\t\tcolor = attributes.drawColor;\n\t\t\t\tctx.fillStyle = `rgba(${color.r},${color.g},${color.b},${color.a})`;\n\t\t\t\tctx.fillRect( 0, 0, width, height );\n\t\t\t\tctx.fillStyle = 'white';\n\t\t\t\tctx.fillText( geometry.text, width / 2, height / 2 );\n\n\t\t\t\tconst texture = new CanvasTexture( ctx.canvas );\n\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\t\t\ttexture.wrapT = ClampToEdgeWrapping;\n\n\t\t\t\tmaterial = new SpriteMaterial( { map: texture, depthTest: false } );\n\t\t\t\tconst sprite = new Sprite( material );\n\t\t\t\tsprite.position.set( geometry.point[ 0 ], geometry.point[ 1 ], geometry.point[ 2 ] );\n\t\t\t\tsprite.scale.set( width / 10, height / 10, 1.0 );\n\n\t\t\t\tsprite.userData[ 'attributes' ] = attributes;\n\t\t\t\tsprite.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tsprite.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn sprite;\n\n\t\t\tcase 'Light':\n\n\t\t\t\tgeometry = obj.geometry;\n\n\t\t\t\tlet light;\n\n\t\t\t\tswitch ( geometry.lightStyle.name ) {\n\n\t\t\t\t\tcase 'LightStyle_WorldPoint':\n\n\t\t\t\t\t\tlight = new PointLight();\n\t\t\t\t\t\tlight.castShadow = attributes.castsShadows;\n\t\t\t\t\t\tlight.position.set( geometry.location[ 0 ], geometry.location[ 1 ], geometry.location[ 2 ] );\n\t\t\t\t\t\tlight.shadow.normalBias = 0.1;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LightStyle_WorldSpot':\n\n\t\t\t\t\t\tlight = new SpotLight();\n\t\t\t\t\t\tlight.castShadow = attributes.castsShadows;\n\t\t\t\t\t\tlight.position.set( geometry.location[ 0 ], geometry.location[ 1 ], geometry.location[ 2 ] );\n\t\t\t\t\t\tlight.target.position.set( geometry.direction[ 0 ], geometry.direction[ 1 ], geometry.direction[ 2 ] );\n\t\t\t\t\t\tlight.angle = geometry.spotAngleRadians;\n\t\t\t\t\t\tlight.shadow.normalBias = 0.1;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LightStyle_WorldRectangular':\n\n\t\t\t\t\t\tlight = new RectAreaLight();\n\t\t\t\t\t\tconst width = Math.abs( geometry.width[ 2 ] );\n\t\t\t\t\t\tconst height = Math.abs( geometry.length[ 0 ] );\n\t\t\t\t\t\tlight.position.set( geometry.location[ 0 ] - ( height / 2 ), geometry.location[ 1 ], geometry.location[ 2 ] - ( width / 2 ) );\n\t\t\t\t\t\tlight.height = height;\n\t\t\t\t\t\tlight.width = width;\n\t\t\t\t\t\tlight.lookAt( geometry.direction[ 0 ], geometry.direction[ 1 ], geometry.direction[ 2 ] );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LightStyle_WorldDirectional':\n\n\t\t\t\t\t\tlight = new DirectionalLight();\n\t\t\t\t\t\tlight.castShadow = attributes.castsShadows;\n\t\t\t\t\t\tlight.position.set( geometry.location[ 0 ], geometry.location[ 1 ], geometry.location[ 2 ] );\n\t\t\t\t\t\tlight.target.position.set( geometry.direction[ 0 ], geometry.direction[ 1 ], geometry.direction[ 2 ] );\n\t\t\t\t\t\tlight.shadow.normalBias = 0.1;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LightStyle_WorldLinear':\n\t\t\t\t\t\t// no conversion exists, warning has already been printed to the console\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( light ) {\n\n\t\t\t\t\tlight.intensity = geometry.intensity;\n\t\t\t\t\t_color = geometry.diffuse;\n\t\t\t\t\tcolor = new Color( _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 );\n\t\t\t\t\tlight.color = color;\n\t\t\t\t\tlight.userData[ 'attributes' ] = attributes;\n\t\t\t\t\tlight.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\t}\n\n\t\t\t\treturn light;\n\n\t\t}\n\n\t}\n\n\t_initLibrary() {\n\n\t\tif ( ! this.libraryPending ) {\n\n\t\t\t// Load rhino3dm wrapper.\n\t\t\tconst jsLoader = new FileLoader( this.manager );\n\t\t\tjsLoader.setPath( this.libraryPath );\n\t\t\tconst jsContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tjsLoader.load( 'rhino3dm.js', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\t// Load rhino3dm WASM binary.\n\t\t\tconst binaryLoader = new FileLoader( this.manager );\n\t\t\tbinaryLoader.setPath( this.libraryPath );\n\t\t\tbinaryLoader.setResponseType( 'arraybuffer' );\n\t\t\tconst binaryContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tbinaryLoader.load( 'rhino3dm.wasm', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\tthis.libraryPending = Promise.all( [ jsContent, binaryContent ] )\n\t\t\t\t.then( ( [ jsContent, binaryContent ] ) => {\n\n\t\t\t\t\t//this.libraryBinary = binaryContent;\n\t\t\t\t\tthis.libraryConfig.wasmBinary = binaryContent;\n\n\t\t\t\t\tconst fn = Rhino3dmWorker.toString();\n\n\t\t\t\t\tconst body = [\n\t\t\t\t\t\t'/* rhino3dm.js */',\n\t\t\t\t\t\tjsContent,\n\t\t\t\t\t\t'/* worker */',\n\t\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t\t].join( '\\n' );\n\n\t\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\treturn this.libraryPending;\n\n\t}\n\n\t_getWorker( taskCost ) {\n\n\t\treturn this._initLibrary().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( {\n\t\t\t\t\ttype: 'init',\n\t\t\t\t\tlibraryConfig: this.libraryConfig\n\t\t\t\t} );\n\n\t\t\t\tworker.onmessage = e => {\n\n\t\t\t\t\tconst message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'warning':\n\t\t\t\t\t\t\tthis.warnings.push( message.data );\n\t\t\t\t\t\t\tconsole.warn( message.data );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.Rhino3dmLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst worker = this.workerPool[ this.workerPool.length - 1 ];\n\n\t\t\tworker._taskLoad += taskCost;\n\n\t\t\treturn worker;\n\n\t\t} );\n\n\t}\n\n\t_releaseTask( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* WEB WORKER */\n\nfunction Rhino3dmWorker() {\n\n\tlet libraryPending;\n\tlet libraryConfig;\n\tlet rhino;\n\tlet taskID;\n\n\tonmessage = function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\n\t\t\t\tlibraryConfig = message.libraryConfig;\n\t\t\t\tconst wasmBinary = libraryConfig.wasmBinary;\n\t\t\t\tlet RhinoModule;\n\t\t\t\tlibraryPending = new Promise( function ( resolve ) {\n\n\t\t\t\t\t/* Like Basis Loader */\n\t\t\t\t\tRhinoModule = { wasmBinary, onRuntimeInitialized: resolve };\n\n\t\t\t\t\trhino3dm( RhinoModule ); // eslint-disable-line no-undef\n\n\t\t\t\t } ).then( () => {\n\n\t\t\t\t\trhino = RhinoModule;\n\n\t\t\t\t } );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\n\t\t\t\ttaskID = message.id;\n\t\t\t\tconst buffer = message.buffer;\n\t\t\t\tlibraryPending.then( () => {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst data = decodeObjects( rhino, buffer );\n\t\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, data } );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error } );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeObjects( rhino, buffer ) {\n\n\t\tconst arr = new Uint8Array( buffer );\n\t\tconst doc = rhino.File3dm.fromByteArray( arr );\n\n\t\tconst objects = [];\n\t\tconst materials = [];\n\t\tconst layers = [];\n\t\tconst views = [];\n\t\tconst namedViews = [];\n\t\tconst groups = [];\n\t\tconst strings = [];\n\n\t\t//Handle objects\n\n\t\tconst objs = doc.objects();\n\t\tconst cnt = objs.count;\n\n\t\tfor ( let i = 0; i < cnt; i ++ ) {\n\n\t\t\tconst _object = objs.get( i );\n\n\t\t\tconst object = extractObjectData( _object, doc );\n\n\t\t\t_object.delete();\n\n\t\t\tif ( object ) {\n\n\t\t\t\tobjects.push( object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Handle instance definitions\n\t\t// console.log( `Instance Definitions Count: ${doc.instanceDefinitions().count()}` );\n\n\t\tfor ( let i = 0; i < doc.instanceDefinitions().count; i ++ ) {\n\n\t\t\tconst idef = doc.instanceDefinitions().get( i );\n\t\t\tconst idefAttributes = extractProperties( idef );\n\t\t\tidefAttributes.objectIds = idef.getObjectIds();\n\n\t\t\tobjects.push( { geometry: null, attributes: idefAttributes, objectType: 'InstanceDefinition' } );\n\n\t\t}\n\n\t\t// Handle materials\n\n\t\tconst textureTypes = [\n\t\t\t// rhino.TextureType.Bitmap,\n\t\t\trhino.TextureType.Diffuse,\n\t\t\trhino.TextureType.Bump,\n\t\t\trhino.TextureType.Transparency,\n\t\t\trhino.TextureType.Opacity,\n\t\t\trhino.TextureType.Emap\n\t\t];\n\n\t\tconst pbrTextureTypes = [\n\t\t\trhino.TextureType.PBR_BaseColor,\n\t\t\trhino.TextureType.PBR_Subsurface,\n\t\t\trhino.TextureType.PBR_SubsurfaceScattering,\n\t\t\trhino.TextureType.PBR_SubsurfaceScatteringRadius,\n\t\t\trhino.TextureType.PBR_Metallic,\n\t\t\trhino.TextureType.PBR_Specular,\n\t\t\trhino.TextureType.PBR_SpecularTint,\n\t\t\trhino.TextureType.PBR_Roughness,\n\t\t\trhino.TextureType.PBR_Anisotropic,\n\t\t\trhino.TextureType.PBR_Anisotropic_Rotation,\n\t\t\trhino.TextureType.PBR_Sheen,\n\t\t\trhino.TextureType.PBR_SheenTint,\n\t\t\trhino.TextureType.PBR_Clearcoat,\n\t\t\trhino.TextureType.PBR_ClearcoatBump,\n\t\t\trhino.TextureType.PBR_ClearcoatRoughness,\n\t\t\trhino.TextureType.PBR_OpacityIor,\n\t\t\trhino.TextureType.PBR_OpacityRoughness,\n\t\t\trhino.TextureType.PBR_Emission,\n\t\t\trhino.TextureType.PBR_AmbientOcclusion,\n\t\t\trhino.TextureType.PBR_Displacement\n\t\t];\n\n\t\tfor ( let i = 0; i < doc.materials().count; i ++ ) {\n\n\t\t\tconst _material = doc.materials().get( i );\n\n\t\t\tconst material = extractProperties( _material );\n\n\t\t\tconst textures = [];\n\n\t\t\ttextures.push( ...extractTextures( _material, textureTypes, doc ) );\n\n\t\t\tmaterial.pbrSupported = _material.physicallyBased().supported;\n\n\t\t\tif ( material.pbrSupported ) {\n\n\t\t\t\ttextures.push( ...extractTextures( _material, pbrTextureTypes, doc ) );\n\t\t\t\tmaterial.pbr = extractProperties( _material.physicallyBased() );\n\n\t\t\t}\n\n\t\t\tmaterial.textures = textures;\n\n\t\t\tmaterials.push( material );\n\n\t\t\t_material.delete();\n\n\t\t}\n\n\t\t// Handle layers\n\n\t\tfor ( let i = 0; i < doc.layers().count; i ++ ) {\n\n\t\t\tconst _layer = doc.layers().get( i );\n\t\t\tconst layer = extractProperties( _layer );\n\n\t\t\tlayers.push( layer );\n\n\t\t\t_layer.delete();\n\n\t\t}\n\n\t\t// Handle views\n\n\t\tfor ( let i = 0; i < doc.views().count; i ++ ) {\n\n\t\t\tconst _view = doc.views().get( i );\n\t\t\tconst view = extractProperties( _view );\n\n\t\t\tviews.push( view );\n\n\t\t\t_view.delete();\n\n\t\t}\n\n\t\t// Handle named views\n\n\t\tfor ( let i = 0; i < doc.namedViews().count; i ++ ) {\n\n\t\t\tconst _namedView = doc.namedViews().get( i );\n\t\t\tconst namedView = extractProperties( _namedView );\n\n\t\t\tnamedViews.push( namedView );\n\n\t\t\t_namedView.delete();\n\n\t\t}\n\n\t\t// Handle groups\n\n\t\tfor ( let i = 0; i < doc.groups().count; i ++ ) {\n\n\t\t\tconst _group = doc.groups().get( i );\n\t\t\tconst group = extractProperties( _group );\n\n\t\t\tgroups.push( group );\n\n\t\t\t_group.delete();\n\n\t\t}\n\n\t\t// Handle settings\n\n\t\tconst settings = extractProperties( doc.settings() );\n\n\t\t//TODO: Handle other document stuff like dimstyles, instance definitions, bitmaps etc.\n\n\t\t// Handle dimstyles\n\t\t// console.log( `Dimstyle Count: ${doc.dimstyles().count()}` );\n\n\t\t// Handle bitmaps\n\t\t// console.log( `Bitmap Count: ${doc.bitmaps().count()}` );\n\n\t\t// Handle strings\n\t\t// console.log( `Document Strings Count: ${doc.strings().count()}` );\n\t\t// Note: doc.strings().documentUserTextCount() counts any doc.strings defined in a section\n\t\t// console.log( `Document User Text Count: ${doc.strings().documentUserTextCount()}` );\n\n\t\tconst strings_count = doc.strings().count;\n\n\t\tfor ( let i = 0; i < strings_count; i ++ ) {\n\n\t\t\tstrings.push( doc.strings().get( i ) );\n\n\t\t}\n\n\t\t// Handle Render Environments for Material Environment\n\n\t\t// get the id of the active render environment skylight, which we'll use for environment texture\n\t\tconst reflectionId = doc.settings().renderSettings().renderEnvironments.reflectionId;\n\n\t\tconst rc = doc.renderContent();\n\n\t\tlet renderEnvironment = null;\n\n\t\tfor ( let i = 0; i < rc.count; i ++ ) {\n\n\t\t\tconst content = rc.get( i );\n\n\t\t\tswitch ( content.kind ) {\n\n\t\t\t\tcase 'environment':\n\n\t\t\t\t\tconst id = content.id;\n\n\t\t\t\t\t// there could be multiple render environments in a 3dm file\n\t\t\t\t\tif ( id !== reflectionId ) break;\n\n\t\t\t\t\tconst renderTexture = content.findChild( 'texture' );\n\t\t\t\t\tconst fileName = renderTexture.fileName;\n\n\t\t\t\t\tfor ( let j = 0; j < doc.embeddedFiles().count; j ++ ) {\n\n\t\t\t\t\t\tconst _fileName = doc.embeddedFiles().get( j ).fileName;\n\n\t\t\t\t\t\tif ( fileName === _fileName ) {\n\n\t\t\t\t\t\t\tconst background = doc.getEmbeddedFileAsBase64( fileName );\n\t\t\t\t\t\t\tconst backgroundImage = 'data:image/png;base64,' + background;\n\t\t\t\t\t\t\trenderEnvironment = { type: 'renderEnvironment', image: backgroundImage, name: fileName };\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Handle Render Settings\n\n\t\tconst renderSettings = {\n\t\t\tambientLight: doc.settings().renderSettings().ambientLight,\n\t\t\tbackgroundColorTop: doc.settings().renderSettings().backgroundColorTop,\n\t\t\tbackgroundColorBottom: doc.settings().renderSettings().backgroundColorBottom,\n\t\t\tuseHiddenLights: doc.settings().renderSettings().useHiddenLights,\n\t\t\tdepthCue: doc.settings().renderSettings().depthCue,\n\t\t\tflatShade: doc.settings().renderSettings().flatShade,\n\t\t\trenderBackFaces: doc.settings().renderSettings().renderBackFaces,\n\t\t\trenderPoints: doc.settings().renderSettings().renderPoints,\n\t\t\trenderCurves: doc.settings().renderSettings().renderCurves,\n\t\t\trenderIsoParams: doc.settings().renderSettings().renderIsoParams,\n\t\t\trenderMeshEdges: doc.settings().renderSettings().renderMeshEdges,\n\t\t\trenderAnnotations: doc.settings().renderSettings().renderAnnotations,\n\t\t\tuseViewportSize: doc.settings().renderSettings().useViewportSize,\n\t\t\tscaleBackgroundToFit: doc.settings().renderSettings().scaleBackgroundToFit,\n\t\t\ttransparentBackground: doc.settings().renderSettings().transparentBackground,\n\t\t\timageDpi: doc.settings().renderSettings().imageDpi,\n\t\t\tshadowMapLevel: doc.settings().renderSettings().shadowMapLevel,\n\t\t\tnamedView: doc.settings().renderSettings().namedView,\n\t\t\tsnapShot: doc.settings().renderSettings().snapShot,\n\t\t\tspecificViewport: doc.settings().renderSettings().specificViewport,\n\t\t\tgroundPlane: extractProperties( doc.settings().renderSettings().groundPlane ),\n\t\t\tsafeFrame: extractProperties( doc.settings().renderSettings().safeFrame ),\n\t\t\tdithering: extractProperties( doc.settings().renderSettings().dithering ),\n\t\t\tskylight: extractProperties( doc.settings().renderSettings().skylight ),\n\t\t\tlinearWorkflow: extractProperties( doc.settings().renderSettings().linearWorkflow ),\n\t\t\trenderChannels: extractProperties( doc.settings().renderSettings().renderChannels ),\n\t\t\tsun: extractProperties( doc.settings().renderSettings().sun ),\n\t\t\trenderEnvironments: extractProperties( doc.settings().renderSettings().renderEnvironments ),\n\t\t\tpostEffects: extractProperties( doc.settings().renderSettings().postEffects ),\n\n\t\t};\n\n\t\tdoc.delete();\n\n\t\treturn { objects, materials, layers, views, namedViews, groups, strings, settings, renderSettings, renderEnvironment };\n\n\t}\n\n\tfunction extractTextures( m, tTypes, d ) {\n\n\t\tconst textures = [];\n\n\t\tfor ( let i = 0; i < tTypes.length; i ++ ) {\n\n\t\t\tconst _texture = m.getTexture( tTypes[ i ] );\n\t\t\tif ( _texture ) {\n\n\t\t\t\tlet textureType = tTypes[ i ].constructor.name;\n\t\t\t\ttextureType = textureType.substring( 12, textureType.length );\n\t\t\t\tconst texture = extractTextureData( _texture, textureType, d );\n\t\t\t\ttextures.push( texture );\n\t\t\t\t_texture.delete();\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tfunction extractTextureData( t, tType, d ) {\n\n\t\tconst texture = { type: tType };\n\n\t\tconst image = d.getEmbeddedFileAsBase64( t.fileName );\n\n\t\ttexture.wrapU = t.wrapU;\n\t\ttexture.wrapV = t.wrapV;\n\t\ttexture.wrapW = t.wrapW;\n\t\tconst uvw = t.uvwTransform.toFloatArray( true );\n\n\t\ttexture.repeat = [ uvw[ 0 ], uvw[ 5 ] ];\n\n\t\tif ( image ) {\n\n\t\t\ttexture.image = 'data:image/png;base64,' + image;\n\n\t\t} else {\n\n\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\tmessage: `THREE.3DMLoader: Image for ${tType} texture not embedded in file.`,\n\t\t\t\ttype: 'missing resource'\n\t\t\t}\n\n\t\t\t} );\n\n\t\t\ttexture.image = null;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction extractObjectData( object, doc ) {\n\n\t\tconst _geometry = object.geometry();\n\t\tconst _attributes = object.attributes();\n\t\tlet objectType = _geometry.objectType;\n\t\tlet geometry, attributes, position, data, mesh;\n\n\t\t// skip instance definition objects\n\t\t//if( _attributes.isInstanceDefinitionObject ) { continue; }\n\n\t\t// TODO: handle other geometry types\n\t\tswitch ( objectType ) {\n\n\t\t\tcase rhino.ObjectType.Curve:\n\n\t\t\t\tconst pts = curveToPoints( _geometry, 100 );\n\n\t\t\t\tposition = {};\n\t\t\t\tattributes = {};\n\t\t\t\tdata = {};\n\n\t\t\t\tposition.itemSize = 3;\n\t\t\t\tposition.type = 'Float32Array';\n\t\t\t\tposition.array = [];\n\n\t\t\t\tfor ( let j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\t\tposition.array.push( pts[ j ][ 0 ] );\n\t\t\t\t\tposition.array.push( pts[ j ][ 1 ] );\n\t\t\t\t\tposition.array.push( pts[ j ][ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\tattributes.position = position;\n\t\t\t\tdata.attributes = attributes;\n\n\t\t\t\tgeometry = { data };\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Point:\n\n\t\t\t\tconst pt = _geometry.location;\n\n\t\t\t\tposition = {};\n\t\t\t\tconst color = {};\n\t\t\t\tattributes = {};\n\t\t\t\tdata = {};\n\n\t\t\t\tposition.itemSize = 3;\n\t\t\t\tposition.type = 'Float32Array';\n\t\t\t\tposition.array = [ pt[ 0 ], pt[ 1 ], pt[ 2 ] ];\n\n\t\t\t\tconst _color = _attributes.drawColor( doc );\n\n\t\t\t\tcolor.itemSize = 3;\n\t\t\t\tcolor.type = 'Float32Array';\n\t\t\t\tcolor.array = [ _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 ];\n\n\t\t\t\tattributes.position = position;\n\t\t\t\tattributes.color = color;\n\t\t\t\tdata.attributes = attributes;\n\n\t\t\t\tgeometry = { data };\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.PointSet:\n\t\t\tcase rhino.ObjectType.Mesh:\n\n\t\t\t\tgeometry = _geometry.toThreejsJSON();\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Brep:\n\n\t\t\t\tconst faces = _geometry.faces();\n\t\t\t\tmesh = new rhino.Mesh();\n\n\t\t\t\tfor ( let faceIndex = 0; faceIndex < faces.count; faceIndex ++ ) {\n\n\t\t\t\t\tconst face = faces.get( faceIndex );\n\t\t\t\t\tconst _mesh = face.getMesh( rhino.MeshType.Any );\n\n\t\t\t\t\tif ( _mesh ) {\n\n\t\t\t\t\t\tmesh.append( _mesh );\n\t\t\t\t\t\t_mesh.delete();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tface.delete();\n\n\t\t\t\t}\n\n\t\t\t\tif ( mesh.faces().count > 0 ) {\n\n\t\t\t\t\tmesh.compact();\n\t\t\t\t\tgeometry = mesh.toThreejsJSON();\n\t\t\t\t\tfaces.delete();\n\n\t\t\t\t}\n\n\t\t\t\tmesh.delete();\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Extrusion:\n\n\t\t\t\tmesh = _geometry.getMesh( rhino.MeshType.Any );\n\n\t\t\t\tif ( mesh ) {\n\n\t\t\t\t\tgeometry = mesh.toThreejsJSON();\n\t\t\t\t\tmesh.delete();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.TextDot:\n\n\t\t\t\tgeometry = extractProperties( _geometry );\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Light:\n\n\t\t\t\tgeometry = extractProperties( _geometry );\n\n\t\t\t\tif ( geometry.lightStyle.name === 'LightStyle_WorldLinear' ) {\n\n\t\t\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\t\t\tmessage: `THREE.3DMLoader: No conversion exists for ${objectType.constructor.name} ${geometry.lightStyle.name}`,\n\t\t\t\t\t\ttype: 'no conversion',\n\t\t\t\t\t\tguid: _attributes.id\n\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.InstanceReference:\n\n\t\t\t\tgeometry = extractProperties( _geometry );\n\t\t\t\tgeometry.xform = extractProperties( _geometry.xform );\n\t\t\t\tgeometry.xform.array = _geometry.xform.toFloatArray( true );\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.SubD:\n\n\t\t\t\t// TODO: precalculate resulting vertices and faces and warn on excessive results\n\t\t\t\t_geometry.subdivide( 3 );\n\t\t\t\tmesh = rhino.Mesh.createFromSubDControlNet( _geometry, false );\n\t\t\t\tif ( mesh ) {\n\n\t\t\t\t\tgeometry = mesh.toThreejsJSON();\n\t\t\t\t\tmesh.delete();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t\t/*\n\t\t\t\tcase rhino.ObjectType.Annotation:\n\t\t\t\tcase rhino.ObjectType.Hatch:\n\t\t\t\tcase rhino.ObjectType.ClipPlane:\n\t\t\t\t*/\n\n\t\t\tdefault:\n\n\t\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\t\tmessage: `THREE.3DMLoader: Conversion not implemented for ${objectType.constructor.name}`,\n\t\t\t\t\ttype: 'not implemented',\n\t\t\t\t\tguid: _attributes.id\n\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( geometry ) {\n\n\t\t\tattributes = extractProperties( _attributes );\n\t\t\tattributes.geometry = extractProperties( _geometry );\n\n\t\t\tif ( _attributes.groupCount > 0 ) {\n\n\t\t\t\tattributes.groupIds = _attributes.getGroupList();\n\n\t\t\t}\n\n\t\t\tif ( _attributes.userStringCount > 0 ) {\n\n\t\t\t\tattributes.userStrings = _attributes.getUserStrings();\n\n\t\t\t}\n\n\t\t\tif ( _geometry.userStringCount > 0 ) {\n\n\t\t\t\tattributes.geometry.userStrings = _geometry.getUserStrings();\n\n\t\t\t}\n\n\t\t\tif ( _attributes.decals().count > 0 ) {\n\n\t\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\t\tmessage: 'THREE.3DMLoader: No conversion exists for the decals associated with this object.',\n\t\t\t\t\ttype: 'no conversion',\n\t\t\t\t\tguid: _attributes.id\n\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tattributes.drawColor = _attributes.drawColor( doc );\n\n\t\t\tobjectType = objectType.constructor.name;\n\t\t\tobjectType = objectType.substring( 11, objectType.length );\n\n\t\t\treturn { geometry, attributes, objectType };\n\n\t\t} else {\n\n\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\tmessage: `THREE.3DMLoader: ${objectType.constructor.name} has no associated mesh geometry.`,\n\t\t\t\ttype: 'missing mesh',\n\t\t\t\tguid: _attributes.id\n\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tfunction extractProperties( object ) {\n\n\t\tconst result = {};\n\n\t\tfor ( const property in object ) {\n\n\t\t\tconst value = object[ property ];\n\n\t\t\tif ( typeof value !== 'function' ) {\n\n\t\t\t\tif ( typeof value === 'object' && value !== null && value.hasOwnProperty( 'constructor' ) ) {\n\n\t\t\t\t\tresult[ property ] = { name: value.constructor.name, value: value.value };\n\n\t\t\t\t} else if ( typeof value === 'object' && value !== null ) {\n\n\t\t\t\t\tresult[ property ] = extractProperties( value );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresult[ property ] = value;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// these are functions that could be called to extract more data.\n\t\t\t\t//console.log( `${property}: ${object[ property ].constructor.name}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction curveToPoints( curve, pointLimit ) {\n\n\t\tlet pointCount = pointLimit;\n\t\tlet rc = [];\n\t\tconst ts = [];\n\n\t\tif ( curve instanceof rhino.LineCurve ) {\n\n\t\t\treturn [ curve.pointAtStart, curve.pointAtEnd ];\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.PolylineCurve ) {\n\n\t\t\tpointCount = curve.pointCount;\n\t\t\tfor ( let i = 0; i < pointCount; i ++ ) {\n\n\t\t\t\trc.push( curve.point( i ) );\n\n\t\t\t}\n\n\t\t\treturn rc;\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.PolyCurve ) {\n\n\t\t\tconst segmentCount = curve.segmentCount;\n\n\t\t\tfor ( let i = 0; i < segmentCount; i ++ ) {\n\n\t\t\t\tconst segment = curve.segmentCurve( i );\n\t\t\t\tconst segmentArray = curveToPoints( segment, pointCount );\n\t\t\t\trc = rc.concat( segmentArray );\n\t\t\t\tsegment.delete();\n\n\t\t\t}\n\n\t\t\treturn rc;\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.ArcCurve ) {\n\n\t\t\tpointCount = Math.floor( curve.angleDegrees / 5 );\n\t\t\tpointCount = pointCount < 2 ? 2 : pointCount;\n\t\t\t// alternative to this hardcoded version: https://stackoverflow.com/a/18499923/2179399\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.NurbsCurve && curve.degree === 1 ) {\n\n\t\t\tconst pLine = curve.tryGetPolyline();\n\n\t\t\tfor ( let i = 0; i < pLine.count; i ++ ) {\n\n\t\t\t\trc.push( pLine.get( i ) );\n\n\t\t\t}\n\n\t\t\tpLine.delete();\n\n\t\t\treturn rc;\n\n\t\t}\n\n\t\tconst domain = curve.domain;\n\t\tconst divisions = pointCount - 1.0;\n\n\t\tfor ( let j = 0; j < pointCount; j ++ ) {\n\n\t\t\tconst t = domain[ 0 ] + ( j / divisions ) * ( domain[ 1 ] - domain[ 0 ] );\n\n\t\t\tif ( t === domain[ 0 ] || t === domain[ 1 ] ) {\n\n\t\t\t\tts.push( t );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst tan = curve.tangentAt( t );\n\t\t\tconst prevTan = curve.tangentAt( ts.slice( - 1 )[ 0 ] );\n\n\t\t\t// Duplicated from THREE.Vector3\n\t\t\t// How to pass imports to worker?\n\n\t\t\tconst tS = tan[ 0 ] * tan[ 0 ] + tan[ 1 ] * tan[ 1 ] + tan[ 2 ] * tan[ 2 ];\n\t\t\tconst ptS = prevTan[ 0 ] * prevTan[ 0 ] + prevTan[ 1 ] * prevTan[ 1 ] + prevTan[ 2 ] * prevTan[ 2 ];\n\n\t\t\tconst denominator = Math.sqrt( tS * ptS );\n\n\t\t\tlet angle;\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\tangle = Math.PI / 2;\n\n\t\t\t} else {\n\n\t\t\t\tconst theta = ( tan.x * prevTan.x + tan.y * prevTan.y + tan.z * prevTan.z ) / denominator;\n\t\t\t\tangle = Math.acos( Math.max( - 1, Math.min( 1, theta ) ) );\n\n\t\t\t}\n\n\t\t\tif ( angle < 0.1 ) continue;\n\n\t\t\tts.push( t );\n\n\t\t}\n\n\t\trc = ts.map( t => curve.pointAt( t ) );\n\t\treturn rc;\n\n\t}\n\n}\n\nexport { Rhino3dmLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLoader,\n\tMatrix4,\n\tMesh,\n\tMeshPhongMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tRepeatWrapping,\n\tTextureLoader,\n\tSRGBColorSpace\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\nconst COLOR_SPACE_3MF = SRGBColorSpace;\n\n/**\n *\n * 3D Manufacturing Format (3MF) specification: https://3mf.io/specification/\n *\n * The following features from the core specification are supported:\n *\n * - 3D Models\n * - Object Resources (Meshes and Components)\n * - Material Resources (Base Materials)\n *\n * 3MF Materials and Properties Extension are only partially supported.\n *\n * - Texture 2D\n * - Texture 2D Groups\n * - Color Groups (Vertex Colors)\n * - Metallic Display Properties (PBR)\n */\n\nclass ThreeMFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.availableExtensions = [];\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tconst scope = this;\n\t\tconst textureLoader = new TextureLoader( this.manager );\n\n\t\tfunction loadDocument( data ) {\n\n\t\t\tlet zip = null;\n\t\t\tlet file = null;\n\n\t\t\tlet relsName;\n\t\t\tlet modelRelsName;\n\t\t\tconst modelPartNames = [];\n\t\t\tconst texturesPartNames = [];\n\n\t\t\tlet modelRels;\n\t\t\tconst modelParts = {};\n\t\t\tconst printTicketParts = {};\n\t\t\tconst texturesParts = {};\n\n\t\t\tconst textDecoder = new TextDecoder();\n\n\t\t\ttry {\n\n\t\t\t\tzip = fflate.unzipSync( new Uint8Array( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( e instanceof ReferenceError ) {\n\n\t\t\t\t\tconsole.error( 'THREE.3MFLoader: fflate missing and file is compressed.' );\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( file in zip ) {\n\n\t\t\t\tif ( file.match( /\\_rels\\/.rels$/ ) ) {\n\n\t\t\t\t\trelsName = file;\n\n\t\t\t\t} else if ( file.match( /3D\\/_rels\\/.*\\.model\\.rels$/ ) ) {\n\n\t\t\t\t\tmodelRelsName = file;\n\n\t\t\t\t} else if ( file.match( /^3D\\/.*\\.model$/ ) ) {\n\n\t\t\t\t\tmodelPartNames.push( file );\n\n\t\t\t\t} else if ( file.match( /^3D\\/Textures?\\/.*/ ) ) {\n\n\t\t\t\t\ttexturesPartNames.push( file );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( relsName === undefined ) throw new Error( 'THREE.ThreeMFLoader: Cannot find relationship file `rels` in 3MF archive.' );\n\n\t\t\t//\n\n\t\t\tconst relsView = zip[ relsName ];\n\t\t\tconst relsFileText = textDecoder.decode( relsView );\n\t\t\tconst rels = parseRelsXml( relsFileText );\n\n\t\t\t//\n\n\t\t\tif ( modelRelsName ) {\n\n\t\t\t\tconst relsView = zip[ modelRelsName ];\n\t\t\t\tconst relsFileText = textDecoder.decode( relsView );\n\t\t\t\tmodelRels = parseRelsXml( relsFileText );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < modelPartNames.length; i ++ ) {\n\n\t\t\t\tconst modelPart = modelPartNames[ i ];\n\t\t\t\tconst view = zip[ modelPart ];\n\n\t\t\t\tconst fileText = textDecoder.decode( view );\n\t\t\t\tconst xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );\n\n\t\t\t\tif ( xmlData.documentElement.nodeName.toLowerCase() !== 'model' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.3MFLoader: Error loading 3MF - no 3MF document found: ', modelPart );\n\n\t\t\t\t}\n\n\t\t\t\tconst modelNode = xmlData.querySelector( 'model' );\n\t\t\t\tconst extensions = {};\n\n\t\t\t\tfor ( let i = 0; i < modelNode.attributes.length; i ++ ) {\n\n\t\t\t\t\tconst attr = modelNode.attributes[ i ];\n\t\t\t\t\tif ( attr.name.match( /^xmlns:(.+)$/ ) ) {\n\n\t\t\t\t\t\textensions[ attr.value ] = RegExp.$1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst modelData = parseModelNode( modelNode );\n\t\t\t\tmodelData[ 'xml' ] = modelNode;\n\n\t\t\t\tif ( 0 < Object.keys( extensions ).length ) {\n\n\t\t\t\t\tmodelData[ 'extensions' ] = extensions;\n\n\t\t\t\t}\n\n\t\t\t\tmodelParts[ modelPart ] = modelData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < texturesPartNames.length; i ++ ) {\n\n\t\t\t\tconst texturesPartName = texturesPartNames[ i ];\n\t\t\t\ttexturesParts[ texturesPartName ] = zip[ texturesPartName ].buffer;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\trels: rels,\n\t\t\t\tmodelRels: modelRels,\n\t\t\t\tmodel: modelParts,\n\t\t\t\tprintTicket: printTicketParts,\n\t\t\t\ttexture: texturesParts\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseRelsXml( relsFileText ) {\n\n\t\t\tconst relationships = [];\n\n\t\t\tconst relsXmlData = new DOMParser().parseFromString( relsFileText, 'application/xml' );\n\n\t\t\tconst relsNodes = relsXmlData.querySelectorAll( 'Relationship' );\n\n\t\t\tfor ( let i = 0; i < relsNodes.length; i ++ ) {\n\n\t\t\t\tconst relsNode = relsNodes[ i ];\n\n\t\t\t\tconst relationship = {\n\t\t\t\t\ttarget: relsNode.getAttribute( 'Target' ), //required\n\t\t\t\t\tid: relsNode.getAttribute( 'Id' ), //required\n\t\t\t\t\ttype: relsNode.getAttribute( 'Type' ) //required\n\t\t\t\t};\n\n\t\t\t\trelationships.push( relationship );\n\n\t\t\t}\n\n\t\t\treturn relationships;\n\n\t\t}\n\n\t\tfunction parseMetadataNodes( metadataNodes ) {\n\n\t\t\tconst metadataData = {};\n\n\t\t\tfor ( let i = 0; i < metadataNodes.length; i ++ ) {\n\n\t\t\t\tconst metadataNode = metadataNodes[ i ];\n\t\t\t\tconst name = metadataNode.getAttribute( 'name' );\n\t\t\t\tconst validNames = [\n\t\t\t\t\t'Title',\n\t\t\t\t\t'Designer',\n\t\t\t\t\t'Description',\n\t\t\t\t\t'Copyright',\n\t\t\t\t\t'LicenseTerms',\n\t\t\t\t\t'Rating',\n\t\t\t\t\t'CreationDate',\n\t\t\t\t\t'ModificationDate'\n\t\t\t\t];\n\n\t\t\t\tif ( 0 <= validNames.indexOf( name ) ) {\n\n\t\t\t\t\tmetadataData[ name ] = metadataNode.textContent;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn metadataData;\n\n\t\t}\n\n\t\tfunction parseBasematerialsNode( basematerialsNode ) {\n\n\t\t\tconst basematerialsData = {\n\t\t\t\tid: basematerialsNode.getAttribute( 'id' ), // required\n\t\t\t\tbasematerials: []\n\t\t\t};\n\n\t\t\tconst basematerialNodes = basematerialsNode.querySelectorAll( 'base' );\n\n\t\t\tfor ( let i = 0; i < basematerialNodes.length; i ++ ) {\n\n\t\t\t\tconst basematerialNode = basematerialNodes[ i ];\n\t\t\t\tconst basematerialData = parseBasematerialNode( basematerialNode );\n\t\t\t\tbasematerialData.index = i; // the order and count of the material nodes form an implicit 0-based index\n\t\t\t\tbasematerialsData.basematerials.push( basematerialData );\n\n\t\t\t}\n\n\t\t\treturn basematerialsData;\n\n\t\t}\n\n\t\tfunction parseTexture2DNode( texture2DNode ) {\n\n\t\t\tconst texture2dData = {\n\t\t\t\tid: texture2DNode.getAttribute( 'id' ), // required\n\t\t\t\tpath: texture2DNode.getAttribute( 'path' ), // required\n\t\t\t\tcontenttype: texture2DNode.getAttribute( 'contenttype' ), // required\n\t\t\t\ttilestyleu: texture2DNode.getAttribute( 'tilestyleu' ),\n\t\t\t\ttilestylev: texture2DNode.getAttribute( 'tilestylev' ),\n\t\t\t\tfilter: texture2DNode.getAttribute( 'filter' ),\n\t\t\t};\n\n\t\t\treturn texture2dData;\n\n\t\t}\n\n\t\tfunction parseTextures2DGroupNode( texture2DGroupNode ) {\n\n\t\t\tconst texture2DGroupData = {\n\t\t\t\tid: texture2DGroupNode.getAttribute( 'id' ), // required\n\t\t\t\ttexid: texture2DGroupNode.getAttribute( 'texid' ), // required\n\t\t\t\tdisplaypropertiesid: texture2DGroupNode.getAttribute( 'displaypropertiesid' )\n\t\t\t};\n\n\t\t\tconst tex2coordNodes = texture2DGroupNode.querySelectorAll( 'tex2coord' );\n\n\t\t\tconst uvs = [];\n\n\t\t\tfor ( let i = 0; i < tex2coordNodes.length; i ++ ) {\n\n\t\t\t\tconst tex2coordNode = tex2coordNodes[ i ];\n\t\t\t\tconst u = tex2coordNode.getAttribute( 'u' );\n\t\t\t\tconst v = tex2coordNode.getAttribute( 'v' );\n\n\t\t\t\tuvs.push( parseFloat( u ), parseFloat( v ) );\n\n\t\t\t}\n\n\t\t\ttexture2DGroupData[ 'uvs' ] = new Float32Array( uvs );\n\n\t\t\treturn texture2DGroupData;\n\n\t\t}\n\n\t\tfunction parseColorGroupNode( colorGroupNode ) {\n\n\t\t\tconst colorGroupData = {\n\t\t\t\tid: colorGroupNode.getAttribute( 'id' ), // required\n\t\t\t\tdisplaypropertiesid: colorGroupNode.getAttribute( 'displaypropertiesid' )\n\t\t\t};\n\n\t\t\tconst colorNodes = colorGroupNode.querySelectorAll( 'color' );\n\n\t\t\tconst colors = [];\n\t\t\tconst colorObject = new Color();\n\n\t\t\tfor ( let i = 0; i < colorNodes.length; i ++ ) {\n\n\t\t\t\tconst colorNode = colorNodes[ i ];\n\t\t\t\tconst color = colorNode.getAttribute( 'color' );\n\n\t\t\t\tcolorObject.setStyle( color.substring( 0, 7 ), COLOR_SPACE_3MF );\n\n\t\t\t\tcolors.push( colorObject.r, colorObject.g, colorObject.b );\n\n\t\t\t}\n\n\t\t\tcolorGroupData[ 'colors' ] = new Float32Array( colors );\n\n\t\t\treturn colorGroupData;\n\n\t\t}\n\n\t\tfunction parseMetallicDisplaypropertiesNode( metallicDisplaypropetiesNode ) {\n\n\t\t\tconst metallicDisplaypropertiesData = {\n\t\t\t\tid: metallicDisplaypropetiesNode.getAttribute( 'id' ) // required\n\t\t\t};\n\n\t\t\tconst metallicNodes = metallicDisplaypropetiesNode.querySelectorAll( 'pbmetallic' );\n\n\t\t\tconst metallicData = [];\n\n\t\t\tfor ( let i = 0; i < metallicNodes.length; i ++ ) {\n\n\t\t\t\tconst metallicNode = metallicNodes[ i ];\n\n\t\t\t\tmetallicData.push( {\n\t\t\t\t\tname: metallicNode.getAttribute( 'name' ), // required\n\t\t\t\t\tmetallicness: parseFloat( metallicNode.getAttribute( 'metallicness' ) ), // required\n\t\t\t\t\troughness: parseFloat( metallicNode.getAttribute( 'roughness' ) ) // required\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tmetallicDisplaypropertiesData.data = metallicData;\n\n\t\t\treturn metallicDisplaypropertiesData;\n\n\t\t}\n\n\t\tfunction parseBasematerialNode( basematerialNode ) {\n\n\t\t\tconst basematerialData = {};\n\n\t\t\tbasematerialData[ 'name' ] = basematerialNode.getAttribute( 'name' ); // required\n\t\t\tbasematerialData[ 'displaycolor' ] = basematerialNode.getAttribute( 'displaycolor' ); // required\n\t\t\tbasematerialData[ 'displaypropertiesid' ] = basematerialNode.getAttribute( 'displaypropertiesid' );\n\n\t\t\treturn basematerialData;\n\n\t\t}\n\n\t\tfunction parseMeshNode( meshNode ) {\n\n\t\t\tconst meshData = {};\n\n\t\t\tconst vertices = [];\n\t\t\tconst vertexNodes = meshNode.querySelectorAll( 'vertices vertex' );\n\n\t\t\tfor ( let i = 0; i < vertexNodes.length; i ++ ) {\n\n\t\t\t\tconst vertexNode = vertexNodes[ i ];\n\t\t\t\tconst x = vertexNode.getAttribute( 'x' );\n\t\t\t\tconst y = vertexNode.getAttribute( 'y' );\n\t\t\t\tconst z = vertexNode.getAttribute( 'z' );\n\n\t\t\t\tvertices.push( parseFloat( x ), parseFloat( y ), parseFloat( z ) );\n\n\t\t\t}\n\n\t\t\tmeshData[ 'vertices' ] = new Float32Array( vertices );\n\n\t\t\tconst triangleProperties = [];\n\t\t\tconst triangles = [];\n\t\t\tconst triangleNodes = meshNode.querySelectorAll( 'triangles triangle' );\n\n\t\t\tfor ( let i = 0; i < triangleNodes.length; i ++ ) {\n\n\t\t\t\tconst triangleNode = triangleNodes[ i ];\n\t\t\t\tconst v1 = triangleNode.getAttribute( 'v1' );\n\t\t\t\tconst v2 = triangleNode.getAttribute( 'v2' );\n\t\t\t\tconst v3 = triangleNode.getAttribute( 'v3' );\n\t\t\t\tconst p1 = triangleNode.getAttribute( 'p1' );\n\t\t\t\tconst p2 = triangleNode.getAttribute( 'p2' );\n\t\t\t\tconst p3 = triangleNode.getAttribute( 'p3' );\n\t\t\t\tconst pid = triangleNode.getAttribute( 'pid' );\n\n\t\t\t\tconst triangleProperty = {};\n\n\t\t\t\ttriangleProperty[ 'v1' ] = parseInt( v1, 10 );\n\t\t\t\ttriangleProperty[ 'v2' ] = parseInt( v2, 10 );\n\t\t\t\ttriangleProperty[ 'v3' ] = parseInt( v3, 10 );\n\n\t\t\t\ttriangles.push( triangleProperty[ 'v1' ], triangleProperty[ 'v2' ], triangleProperty[ 'v3' ] );\n\n\t\t\t\t// optional\n\n\t\t\t\tif ( p1 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p1' ] = parseInt( p1, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( p2 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p2' ] = parseInt( p2, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( p3 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p3' ] = parseInt( p3, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( pid ) {\n\n\t\t\t\t\ttriangleProperty[ 'pid' ] = pid;\n\n\t\t\t\t}\n\n\t\t\t\tif ( 0 < Object.keys( triangleProperty ).length ) {\n\n\t\t\t\t\ttriangleProperties.push( triangleProperty );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmeshData[ 'triangleProperties' ] = triangleProperties;\n\t\t\tmeshData[ 'triangles' ] = new Uint32Array( triangles );\n\n\t\t\treturn meshData;\n\n\t\t}\n\n\t\tfunction parseComponentsNode( componentsNode ) {\n\n\t\t\tconst components = [];\n\n\t\t\tconst componentNodes = componentsNode.querySelectorAll( 'component' );\n\n\t\t\tfor ( let i = 0; i < componentNodes.length; i ++ ) {\n\n\t\t\t\tconst componentNode = componentNodes[ i ];\n\t\t\t\tconst componentData = parseComponentNode( componentNode );\n\t\t\t\tcomponents.push( componentData );\n\n\t\t\t}\n\n\t\t\treturn components;\n\n\t\t}\n\n\t\tfunction parseComponentNode( componentNode ) {\n\n\t\t\tconst componentData = {};\n\n\t\t\tcomponentData[ 'objectId' ] = componentNode.getAttribute( 'objectid' ); // required\n\n\t\t\tconst transform = componentNode.getAttribute( 'transform' );\n\n\t\t\tif ( transform ) {\n\n\t\t\t\tcomponentData[ 'transform' ] = parseTransform( transform );\n\n\t\t\t}\n\n\t\t\treturn componentData;\n\n\t\t}\n\n\t\tfunction parseTransform( transform ) {\n\n\t\t\tconst t = [];\n\t\t\ttransform.split( ' ' ).forEach( function ( s ) {\n\n\t\t\t\tt.push( parseFloat( s ) );\n\n\t\t\t} );\n\n\t\t\tconst matrix = new Matrix4();\n\t\t\tmatrix.set(\n\t\t\t\tt[ 0 ], t[ 3 ], t[ 6 ], t[ 9 ],\n\t\t\t\tt[ 1 ], t[ 4 ], t[ 7 ], t[ 10 ],\n\t\t\t\tt[ 2 ], t[ 5 ], t[ 8 ], t[ 11 ],\n\t\t\t\t 0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\treturn matrix;\n\n\t\t}\n\n\t\tfunction parseObjectNode( objectNode ) {\n\n\t\t\tconst objectData = {\n\t\t\t\ttype: objectNode.getAttribute( 'type' )\n\t\t\t};\n\n\t\t\tconst id = objectNode.getAttribute( 'id' );\n\n\t\t\tif ( id ) {\n\n\t\t\t\tobjectData[ 'id' ] = id;\n\n\t\t\t}\n\n\t\t\tconst pid = objectNode.getAttribute( 'pid' );\n\n\t\t\tif ( pid ) {\n\n\t\t\t\tobjectData[ 'pid' ] = pid;\n\n\t\t\t}\n\n\t\t\tconst pindex = objectNode.getAttribute( 'pindex' );\n\n\t\t\tif ( pindex ) {\n\n\t\t\t\tobjectData[ 'pindex' ] = pindex;\n\n\t\t\t}\n\n\t\t\tconst thumbnail = objectNode.getAttribute( 'thumbnail' );\n\n\t\t\tif ( thumbnail ) {\n\n\t\t\t\tobjectData[ 'thumbnail' ] = thumbnail;\n\n\t\t\t}\n\n\t\t\tconst partnumber = objectNode.getAttribute( 'partnumber' );\n\n\t\t\tif ( partnumber ) {\n\n\t\t\t\tobjectData[ 'partnumber' ] = partnumber;\n\n\t\t\t}\n\n\t\t\tconst name = objectNode.getAttribute( 'name' );\n\n\t\t\tif ( name ) {\n\n\t\t\t\tobjectData[ 'name' ] = name;\n\n\t\t\t}\n\n\t\t\tconst meshNode = objectNode.querySelector( 'mesh' );\n\n\t\t\tif ( meshNode ) {\n\n\t\t\t\tobjectData[ 'mesh' ] = parseMeshNode( meshNode );\n\n\t\t\t}\n\n\t\t\tconst componentsNode = objectNode.querySelector( 'components' );\n\n\t\t\tif ( componentsNode ) {\n\n\t\t\t\tobjectData[ 'components' ] = parseComponentsNode( componentsNode );\n\n\t\t\t}\n\n\t\t\treturn objectData;\n\n\t\t}\n\n\t\tfunction parseResourcesNode( resourcesNode ) {\n\n\t\t\tconst resourcesData = {};\n\n\t\t\tresourcesData[ 'basematerials' ] = {};\n\t\t\tconst basematerialsNodes = resourcesNode.querySelectorAll( 'basematerials' );\n\n\t\t\tfor ( let i = 0; i < basematerialsNodes.length; i ++ ) {\n\n\t\t\t\tconst basematerialsNode = basematerialsNodes[ i ];\n\t\t\t\tconst basematerialsData = parseBasematerialsNode( basematerialsNode );\n\t\t\t\tresourcesData[ 'basematerials' ][ basematerialsData[ 'id' ] ] = basematerialsData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'texture2d' ] = {};\n\t\t\tconst textures2DNodes = resourcesNode.querySelectorAll( 'texture2d' );\n\n\t\t\tfor ( let i = 0; i < textures2DNodes.length; i ++ ) {\n\n\t\t\t\tconst textures2DNode = textures2DNodes[ i ];\n\t\t\t\tconst texture2DData = parseTexture2DNode( textures2DNode );\n\t\t\t\tresourcesData[ 'texture2d' ][ texture2DData[ 'id' ] ] = texture2DData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'colorgroup' ] = {};\n\t\t\tconst colorGroupNodes = resourcesNode.querySelectorAll( 'colorgroup' );\n\n\t\t\tfor ( let i = 0; i < colorGroupNodes.length; i ++ ) {\n\n\t\t\t\tconst colorGroupNode = colorGroupNodes[ i ];\n\t\t\t\tconst colorGroupData = parseColorGroupNode( colorGroupNode );\n\t\t\t\tresourcesData[ 'colorgroup' ][ colorGroupData[ 'id' ] ] = colorGroupData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'pbmetallicdisplayproperties' ] = {};\n\t\t\tconst pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll( 'pbmetallicdisplayproperties' );\n\n\t\t\tfor ( let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i ++ ) {\n\n\t\t\t\tconst pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[ i ];\n\t\t\t\tconst pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode( pbmetallicdisplaypropertiesNode );\n\t\t\t\tresourcesData[ 'pbmetallicdisplayproperties' ][ pbmetallicdisplaypropertiesData[ 'id' ] ] = pbmetallicdisplaypropertiesData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'texture2dgroup' ] = {};\n\t\t\tconst textures2DGroupNodes = resourcesNode.querySelectorAll( 'texture2dgroup' );\n\n\t\t\tfor ( let i = 0; i < textures2DGroupNodes.length; i ++ ) {\n\n\t\t\t\tconst textures2DGroupNode = textures2DGroupNodes[ i ];\n\t\t\t\tconst textures2DGroupData = parseTextures2DGroupNode( textures2DGroupNode );\n\t\t\t\tresourcesData[ 'texture2dgroup' ][ textures2DGroupData[ 'id' ] ] = textures2DGroupData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'object' ] = {};\n\t\t\tconst objectNodes = resourcesNode.querySelectorAll( 'object' );\n\n\t\t\tfor ( let i = 0; i < objectNodes.length; i ++ ) {\n\n\t\t\t\tconst objectNode = objectNodes[ i ];\n\t\t\t\tconst objectData = parseObjectNode( objectNode );\n\t\t\t\tresourcesData[ 'object' ][ objectData[ 'id' ] ] = objectData;\n\n\t\t\t}\n\n\t\t\treturn resourcesData;\n\n\t\t}\n\n\t\tfunction parseBuildNode( buildNode ) {\n\n\t\t\tconst buildData = [];\n\t\t\tconst itemNodes = buildNode.querySelectorAll( 'item' );\n\n\t\t\tfor ( let i = 0; i < itemNodes.length; i ++ ) {\n\n\t\t\t\tconst itemNode = itemNodes[ i ];\n\t\t\t\tconst buildItem = {\n\t\t\t\t\tobjectId: itemNode.getAttribute( 'objectid' )\n\t\t\t\t};\n\t\t\t\tconst transform = itemNode.getAttribute( 'transform' );\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tbuildItem[ 'transform' ] = parseTransform( transform );\n\n\t\t\t\t}\n\n\t\t\t\tbuildData.push( buildItem );\n\n\t\t\t}\n\n\t\t\treturn buildData;\n\n\t\t}\n\n\t\tfunction parseModelNode( modelNode ) {\n\n\t\t\tconst modelData = { unit: modelNode.getAttribute( 'unit' ) || 'millimeter' };\n\t\t\tconst metadataNodes = modelNode.querySelectorAll( 'metadata' );\n\n\t\t\tif ( metadataNodes ) {\n\n\t\t\t\tmodelData[ 'metadata' ] = parseMetadataNodes( metadataNodes );\n\n\t\t\t}\n\n\t\t\tconst resourcesNode = modelNode.querySelector( 'resources' );\n\n\t\t\tif ( resourcesNode ) {\n\n\t\t\t\tmodelData[ 'resources' ] = parseResourcesNode( resourcesNode );\n\n\t\t\t}\n\n\t\t\tconst buildNode = modelNode.querySelector( 'build' );\n\n\t\t\tif ( buildNode ) {\n\n\t\t\t\tmodelData[ 'build' ] = parseBuildNode( buildNode );\n\n\t\t\t}\n\n\t\t\treturn modelData;\n\n\t\t}\n\n\t\tfunction buildTexture( texture2dgroup, objects, modelData, textureData ) {\n\n\t\t\tconst texid = texture2dgroup.texid;\n\t\t\tconst texture2ds = modelData.resources.texture2d;\n\t\t\tconst texture2d = texture2ds[ texid ];\n\n\t\t\tif ( texture2d ) {\n\n\t\t\t\tconst data = textureData[ texture2d.path ];\n\t\t\t\tconst type = texture2d.contenttype;\n\n\t\t\t\tconst blob = new Blob( [ data ], { type: type } );\n\t\t\t\tconst sourceURI = URL.createObjectURL( blob );\n\n\t\t\t\tconst texture = textureLoader.load( sourceURI, function () {\n\n\t\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t\t} );\n\n\t\t\t\ttexture.colorSpace = COLOR_SPACE_3MF;\n\n\t\t\t\t// texture parameters\n\n\t\t\t\tswitch ( texture2d.tilestyleu ) {\n\n\t\t\t\t\tcase 'wrap':\n\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mirror':\n\t\t\t\t\t\ttexture.wrapS = MirroredRepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'clamp':\n\t\t\t\t\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( texture2d.tilestylev ) {\n\n\t\t\t\t\tcase 'wrap':\n\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mirror':\n\t\t\t\t\t\ttexture.wrapT = MirroredRepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'clamp':\n\t\t\t\t\t\ttexture.wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( texture2d.filter ) {\n\n\t\t\t\t\tcase 'auto':\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'linear':\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'nearest':\n\t\t\t\t\t\ttexture.magFilter = NearestFilter;\n\t\t\t\t\t\ttexture.minFilter = NearestFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\treturn texture;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildBasematerialsMeshes( basematerials, triangleProperties, meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tconst objectPindex = objectData.pindex;\n\n\t\t\tconst materialMap = {};\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\t\t\t\tconst pindex = ( triangleProperty.p1 !== undefined ) ? triangleProperty.p1 : objectPindex;\n\n\t\t\t\tif ( materialMap[ pindex ] === undefined ) materialMap[ pindex ] = [];\n\n\t\t\t\tmaterialMap[ pindex ].push( triangleProperty );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst keys = Object.keys( materialMap );\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, l = keys.length; i < l; i ++ ) {\n\n\t\t\t\tconst materialIndex = keys[ i ];\n\t\t\t\tconst trianglePropertiesProps = materialMap[ materialIndex ];\n\t\t\t\tconst basematerialData = basematerials.basematerials[ materialIndex ];\n\t\t\t\tconst material = getBuild( basematerialData, objects, modelData, textureData, objectData, buildBasematerial );\n\n\t\t\t\t//\n\n\t\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\t\tconst positionData = [];\n\n\t\t\t\tconst vertices = meshData.vertices;\n\n\t\t\t\tfor ( let j = 0, jl = trianglePropertiesProps.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst triangleProperty = trianglePropertiesProps[ j ];\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 2 ] );\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 2 ] );\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 2 ] );\n\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\n\t\t\t\t//\n\n\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\treturn meshes;\n\n\t\t}\n\n\t\tfunction buildTexturedMesh( texture2dgroup, triangleProperties, meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\t// geometry\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positionData = [];\n\t\t\tconst uvData = [];\n\n\t\t\tconst vertices = meshData.vertices;\n\t\t\tconst uvs = texture2dgroup.uvs;\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 2 ] );\n\n\t\t\t\t//\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p1 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p1 * 2 ) + 1 ] );\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p2 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p2 * 2 ) + 1 ] );\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p3 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p3 * 2 ) + 1 ] );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvData, 2 ) );\n\n\t\t\t// material\n\n\t\t\tconst texture = getBuild( texture2dgroup, objects, modelData, textureData, objectData, buildTexture );\n\n\t\t\tconst material = new MeshPhongMaterial( { map: texture, flatShading: true } );\n\n\t\t\t// mesh\n\n\t\t\tconst mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildVertexColorMesh( colorgroup, triangleProperties, meshData, objectData ) {\n\n\t\t\t// geometry\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positionData = [];\n\t\t\tconst colorData = [];\n\n\t\t\tconst vertices = meshData.vertices;\n\t\t\tconst colors = colorgroup.colors;\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\n\t\t\t\tconst v1 = triangleProperty.v1;\n\t\t\t\tconst v2 = triangleProperty.v2;\n\t\t\t\tconst v3 = triangleProperty.v3;\n\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 2 ] );\n\n\t\t\t\t//\n\n\t\t\t\tconst p1 = ( triangleProperty.p1 !== undefined ) ? triangleProperty.p1 : objectData.pindex;\n\t\t\t\tconst p2 = ( triangleProperty.p2 !== undefined ) ? triangleProperty.p2 : p1;\n\t\t\t\tconst p3 = ( triangleProperty.p3 !== undefined ) ? triangleProperty.p3 : p1;\n\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 2 ] );\n\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 2 ] );\n\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 2 ] );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colorData, 3 ) );\n\n\t\t\t// material\n\n\t\t\tconst material = new MeshPhongMaterial( { vertexColors: true, flatShading: true } );\n\n\t\t\t// mesh\n\n\t\t\tconst mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildDefaultMesh( meshData ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( new BufferAttribute( meshData[ 'triangles' ], 1 ) );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( meshData[ 'vertices' ], 3 ) );\n\n\t\t\tconst material = new MeshPhongMaterial( {\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tcolor: 0xffffff,\n\t\t\t\tflatShading: true\n\t\t\t} );\n\n\t\t\tconst mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tconst keys = Object.keys( resourceMap );\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\tconst resourceId = keys[ i ];\n\t\t\t\tconst triangleProperties = resourceMap[ resourceId ];\n\t\t\t\tconst resourceType = getResourceType( resourceId, modelData );\n\n\t\t\t\tswitch ( resourceType ) {\n\n\t\t\t\t\tcase 'material':\n\t\t\t\t\t\tconst basematerials = modelData.resources.basematerials[ resourceId ];\n\t\t\t\t\t\tconst newMeshes = buildBasematerialsMeshes( basematerials, triangleProperties, meshData, objects, modelData, textureData, objectData );\n\n\t\t\t\t\t\tfor ( let j = 0, jl = newMeshes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmeshes.push( newMeshes[ j ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tconst texture2dgroup = modelData.resources.texture2dgroup[ resourceId ];\n\t\t\t\t\t\tmeshes.push( buildTexturedMesh( texture2dgroup, triangleProperties, meshData, objects, modelData, textureData, objectData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tconst colorgroup = modelData.resources.colorgroup[ resourceId ];\n\t\t\t\t\t\tmeshes.push( buildVertexColorMesh( colorgroup, triangleProperties, meshData, objectData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'default':\n\t\t\t\t\t\tmeshes.push( buildDefaultMesh( meshData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.3MFLoader: Unsupported resource type.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( objectData.name ) {\n\n\t\t\t\tfor ( let i = 0; i < meshes.length; i ++ ) {\n\n\t\t\t\t\tmeshes[ i ].name = objectData.name;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn meshes;\n\n\t\t}\n\n\t\tfunction getResourceType( pid, modelData ) {\n\n\t\t\tif ( modelData.resources.texture2dgroup[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'texture';\n\n\t\t\t} else if ( modelData.resources.basematerials[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'material';\n\n\t\t\t} else if ( modelData.resources.colorgroup[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'vertexColors';\n\n\t\t\t} else if ( pid === 'default' ) {\n\n\t\t\t\treturn 'default';\n\n\t\t\t} else {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction analyzeObject( meshData, objectData ) {\n\n\t\t\tconst resourceMap = {};\n\n\t\t\tconst triangleProperties = meshData[ 'triangleProperties' ];\n\n\t\t\tconst objectPid = objectData.pid;\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\t\t\t\tlet pid = ( triangleProperty.pid !== undefined ) ? triangleProperty.pid : objectPid;\n\n\t\t\t\tif ( pid === undefined ) pid = 'default';\n\n\t\t\t\tif ( resourceMap[ pid ] === undefined ) resourceMap[ pid ] = [];\n\n\t\t\t\tresourceMap[ pid ].push( triangleProperty );\n\n\t\t\t}\n\n\t\t\treturn resourceMap;\n\n\t\t}\n\n\t\tfunction buildGroup( meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tconst group = new Group();\n\n\t\t\tconst resourceMap = analyzeObject( meshData, objectData );\n\t\t\tconst meshes = buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData );\n\n\t\t\tfor ( let i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction applyExtensions( extensions, meshData, modelXml ) {\n\n\t\t\tif ( ! extensions ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst availableExtensions = [];\n\t\t\tconst keys = Object.keys( extensions );\n\n\t\t\tfor ( let i = 0; i < keys.length; i ++ ) {\n\n\t\t\t\tconst ns = keys[ i ];\n\n\t\t\t\tfor ( let j = 0; j < scope.availableExtensions.length; j ++ ) {\n\n\t\t\t\t\tconst extension = scope.availableExtensions[ j ];\n\n\t\t\t\t\tif ( extension.ns === ns ) {\n\n\t\t\t\t\t\tavailableExtensions.push( extension );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < availableExtensions.length; i ++ ) {\n\n\t\t\t\tconst extension = availableExtensions[ i ];\n\t\t\t\textension.apply( modelXml, extensions[ extension[ 'ns' ] ], meshData );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getBuild( data, objects, modelData, textureData, objectData, builder ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\tdata.build = builder( data, objects, modelData, textureData, objectData );\n\n\t\t\treturn data.build;\n\n\t\t}\n\n\t\tfunction buildBasematerial( materialData, objects, modelData ) {\n\n\t\t\tlet material;\n\n\t\t\tconst displaypropertiesid = materialData.displaypropertiesid;\n\t\t\tconst pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties;\n\n\t\t\tif ( displaypropertiesid !== null && pbmetallicdisplayproperties[ displaypropertiesid ] !== undefined ) {\n\n\t\t\t\t// metallic display property, use StandardMaterial\n\n\t\t\t\tconst pbmetallicdisplayproperty = pbmetallicdisplayproperties[ displaypropertiesid ];\n\t\t\t\tconst metallicData = pbmetallicdisplayproperty.data[ materialData.index ];\n\n\t\t\t\tmaterial = new MeshStandardMaterial( { flatShading: true, roughness: metallicData.roughness, metalness: metallicData.metallicness } );\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise use PhongMaterial\n\n\t\t\t\tmaterial = new MeshPhongMaterial( { flatShading: true } );\n\n\t\t\t}\n\n\t\t\tmaterial.name = materialData.name;\n\n\t\t\t// displaycolor MUST be specified with a value of a 6 or 8 digit hexadecimal number, e.g. \"#RRGGBB\" or \"#RRGGBBAA\"\n\n\t\t\tconst displaycolor = materialData.displaycolor;\n\n\t\t\tconst color = displaycolor.substring( 0, 7 );\n\t\t\tmaterial.color.setStyle( color, COLOR_SPACE_3MF );\n\n\t\t\t// process alpha if set\n\n\t\t\tif ( displaycolor.length === 9 ) {\n\n\t\t\t\tmaterial.opacity = parseInt( displaycolor.charAt( 7 ) + displaycolor.charAt( 8 ), 16 ) / 255;\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction buildComposite( compositeData, objects, modelData, textureData ) {\n\n\t\t\tconst composite = new Group();\n\n\t\t\tfor ( let j = 0; j < compositeData.length; j ++ ) {\n\n\t\t\t\tconst component = compositeData[ j ];\n\t\t\t\tlet build = objects[ component.objectId ];\n\n\t\t\t\tif ( build === undefined ) {\n\n\t\t\t\t\tbuildObject( component.objectId, objects, modelData, textureData );\n\t\t\t\t\tbuild = objects[ component.objectId ];\n\n\t\t\t\t}\n\n\t\t\t\tconst object3D = build.clone();\n\n\t\t\t\t// apply component transform\n\n\t\t\t\tconst transform = component.transform;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tobject3D.applyMatrix4( transform );\n\n\t\t\t\t}\n\n\t\t\t\tcomposite.add( object3D );\n\n\t\t\t}\n\n\t\t\treturn composite;\n\n\t\t}\n\n\t\tfunction buildObject( objectId, objects, modelData, textureData ) {\n\n\t\t\tconst objectData = modelData[ 'resources' ][ 'object' ][ objectId ];\n\n\t\t\tif ( objectData[ 'mesh' ] ) {\n\n\t\t\t\tconst meshData = objectData[ 'mesh' ];\n\n\t\t\t\tconst extensions = modelData[ 'extensions' ];\n\t\t\t\tconst modelXml = modelData[ 'xml' ];\n\n\t\t\t\tapplyExtensions( extensions, meshData, modelXml );\n\n\t\t\t\tobjects[ objectData.id ] = getBuild( meshData, objects, modelData, textureData, objectData, buildGroup );\n\n\t\t\t} else {\n\n\t\t\t\tconst compositeData = objectData[ 'components' ];\n\n\t\t\t\tobjects[ objectData.id ] = getBuild( compositeData, objects, modelData, textureData, objectData, buildComposite );\n\n\t\t\t}\n\n\t\t\tif ( objectData.name ) {\n\n\t\t\t\tobjects[ objectData.id ].name = objectData.name;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildObjects( data3mf ) {\n\n\t\t\tconst modelsData = data3mf.model;\n\t\t\tconst modelRels = data3mf.modelRels;\n\t\t\tconst objects = {};\n\t\t\tconst modelsKeys = Object.keys( modelsData );\n\t\t\tconst textureData = {};\n\n\t\t\t// evaluate model relationships to textures\n\n\t\t\tif ( modelRels ) {\n\n\t\t\t\tfor ( let i = 0, l = modelRels.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst modelRel = modelRels[ i ];\n\t\t\t\t\tconst textureKey = modelRel.target.substring( 1 );\n\n\t\t\t\t\tif ( data3mf.texture[ textureKey ] ) {\n\n\t\t\t\t\t\ttextureData[ modelRel.target ] = data3mf.texture[ textureKey ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// start build\n\n\t\t\tfor ( let i = 0; i < modelsKeys.length; i ++ ) {\n\n\t\t\t\tconst modelsKey = modelsKeys[ i ];\n\t\t\t\tconst modelData = modelsData[ modelsKey ];\n\n\t\t\t\tconst objectIds = Object.keys( modelData[ 'resources' ][ 'object' ] );\n\n\t\t\t\tfor ( let j = 0; j < objectIds.length; j ++ ) {\n\n\t\t\t\t\tconst objectId = objectIds[ j ];\n\n\t\t\t\t\tbuildObject( objectId, objects, modelData, textureData );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn objects;\n\n\t\t}\n\n\t\tfunction fetch3DModelPart( rels ) {\n\n\t\t\tfor ( let i = 0; i < rels.length; i ++ ) {\n\n\t\t\t\tconst rel = rels[ i ];\n\t\t\t\tconst extension = rel.target.split( '.' ).pop();\n\n\t\t\t\tif ( extension.toLowerCase() === 'model' ) return rel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction build( objects, data3mf ) {\n\n\t\t\tconst group = new Group();\n\n\t\t\tconst relationship = fetch3DModelPart( data3mf[ 'rels' ] );\n\t\t\tconst buildData = data3mf.model[ relationship[ 'target' ].substring( 1 ) ][ 'build' ];\n\n\t\t\tfor ( let i = 0; i < buildData.length; i ++ ) {\n\n\t\t\t\tconst buildItem = buildData[ i ];\n\t\t\t\tconst object3D = objects[ buildItem[ 'objectId' ] ].clone();\n\n\t\t\t\t// apply transform\n\n\t\t\t\tconst transform = buildItem[ 'transform' ];\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tobject3D.applyMatrix4( transform );\n\n\t\t\t\t}\n\n\t\t\t\tgroup.add( object3D );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tconst data3mf = loadDocument( data );\n\t\tconst objects = buildObjects( data3mf );\n\n\t\treturn build( objects, data3mf );\n\n\t}\n\n\taddExtension( extension ) {\n\n\t\tthis.availableExtensions.push( extension );\n\n\t}\n\n}\n\nexport { ThreeMFLoader };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLoader,\n\tMesh,\n\tMeshPhongMaterial\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\n/**\n * Description: Early release of an AMF Loader following the pattern of the\n * example loaders in the three.js project.\n *\n * Usage:\n *\tconst loader = new AMFLoader();\n *\tloader.load('/path/to/project.amf', function(objecttree) {\n *\t\tscene.add(objecttree);\n *\t});\n *\n * Materials now supported, material colors supported\n * Zip support, requires fflate\n * No constellation support (yet)!\n *\n */\n\nclass AMFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction loadDocument( data ) {\n\n\t\t\tlet view = new DataView( data );\n\t\t\tconst magic = String.fromCharCode( view.getUint8( 0 ), view.getUint8( 1 ) );\n\n\t\t\tif ( magic === 'PK' ) {\n\n\t\t\t\tlet zip = null;\n\t\t\t\tlet file = null;\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Loading Zip' );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tzip = fflate.unzipSync( new Uint8Array( data ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( e instanceof ReferenceError ) {\n\n\t\t\t\t\t\tconsole.log( 'THREE.AMFLoader: fflate missing and file is compressed.' );\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( file in zip ) {\n\n\t\t\t\t\tif ( file.toLowerCase().slice( - 4 ) === '.amf' ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Trying to load file asset: ' + file );\n\t\t\t\tview = new DataView( zip[ file ].buffer );\n\n\t\t\t}\n\n\t\t\tconst fileText = new TextDecoder().decode( view );\n\t\t\tconst xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );\n\n\t\t\tif ( xmlData.documentElement.nodeName.toLowerCase() !== 'amf' ) {\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Error loading AMF - no AMF document found.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn xmlData;\n\n\t\t}\n\n\t\tfunction loadDocumentScale( node ) {\n\n\t\t\tlet scale = 1.0;\n\t\t\tlet unit = 'millimeter';\n\n\t\t\tif ( node.documentElement.attributes.unit !== undefined ) {\n\n\t\t\t\tunit = node.documentElement.attributes.unit.value.toLowerCase();\n\n\t\t\t}\n\n\t\t\tconst scaleUnits = {\n\t\t\t\tmillimeter: 1.0,\n\t\t\t\tinch: 25.4,\n\t\t\t\tfeet: 304.8,\n\t\t\t\tmeter: 1000.0,\n\t\t\t\tmicron: 0.001\n\t\t\t};\n\n\t\t\tif ( scaleUnits[ unit ] !== undefined ) {\n\n\t\t\t\tscale = scaleUnits[ unit ];\n\n\t\t\t}\n\n\t\t\tconsole.log( 'THREE.AMFLoader: Unit scale: ' + scale );\n\t\t\treturn scale;\n\n\t\t}\n\n\t\tfunction loadMaterials( node ) {\n\n\t\t\tlet matName = 'AMF Material';\n\t\t\tconst matId = node.attributes.id.textContent;\n\t\t\tlet color = { r: 1.0, g: 1.0, b: 1.0, a: 1.0 };\n\n\t\t\tlet loadedMaterial = null;\n\n\t\t\tfor ( let i = 0; i < node.childNodes.length; i ++ ) {\n\n\t\t\t\tconst matChildEl = node.childNodes[ i ];\n\n\t\t\t\tif ( matChildEl.nodeName === 'metadata' && matChildEl.attributes.type !== undefined ) {\n\n\t\t\t\t\tif ( matChildEl.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\tmatName = matChildEl.textContent;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( matChildEl.nodeName === 'color' ) {\n\n\t\t\t\t\tcolor = loadColor( matChildEl );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tloadedMaterial = new MeshPhongMaterial( {\n\t\t\t\tflatShading: true,\n\t\t\t\tcolor: new Color( color.r, color.g, color.b ),\n\t\t\t\tname: matName\n\t\t\t} );\n\n\t\t\tif ( color.a !== 1.0 ) {\n\n\t\t\t\tloadedMaterial.transparent = true;\n\t\t\t\tloadedMaterial.opacity = color.a;\n\n\t\t\t}\n\n\t\t\treturn { id: matId, material: loadedMaterial };\n\n\t\t}\n\n\t\tfunction loadColor( node ) {\n\n\t\t\tconst color = { r: 1.0, g: 1.0, b: 1.0, a: 1.0 };\n\n\t\t\tfor ( let i = 0; i < node.childNodes.length; i ++ ) {\n\n\t\t\t\tconst matColor = node.childNodes[ i ];\n\n\t\t\t\tif ( matColor.nodeName === 'r' ) {\n\n\t\t\t\t\tcolor.r = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'g' ) {\n\n\t\t\t\t\tcolor.g = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'b' ) {\n\n\t\t\t\t\tcolor.b = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'a' ) {\n\n\t\t\t\t\tcolor.a = matColor.textContent;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tfunction loadMeshVolume( node ) {\n\n\t\t\tconst volume = { name: '', triangles: [], materialid: null };\n\n\t\t\tlet currVolumeNode = node.firstElementChild;\n\n\t\t\tif ( node.attributes.materialid !== undefined ) {\n\n\t\t\t\tvolume.materialId = node.attributes.materialid.nodeValue;\n\n\t\t\t}\n\n\t\t\twhile ( currVolumeNode ) {\n\n\t\t\t\tif ( currVolumeNode.nodeName === 'metadata' ) {\n\n\t\t\t\t\tif ( currVolumeNode.attributes.type !== undefined ) {\n\n\t\t\t\t\t\tif ( currVolumeNode.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\t\tvolume.name = currVolumeNode.textContent;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( currVolumeNode.nodeName === 'triangle' ) {\n\n\t\t\t\t\tconst v1 = currVolumeNode.getElementsByTagName( 'v1' )[ 0 ].textContent;\n\t\t\t\t\tconst v2 = currVolumeNode.getElementsByTagName( 'v2' )[ 0 ].textContent;\n\t\t\t\t\tconst v3 = currVolumeNode.getElementsByTagName( 'v3' )[ 0 ].textContent;\n\n\t\t\t\t\tvolume.triangles.push( v1, v2, v3 );\n\n\t\t\t\t}\n\n\t\t\t\tcurrVolumeNode = currVolumeNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn volume;\n\n\t\t}\n\n\t\tfunction loadMeshVertices( node ) {\n\n\t\t\tconst vertArray = [];\n\t\t\tconst normalArray = [];\n\t\t\tlet currVerticesNode = node.firstElementChild;\n\n\t\t\twhile ( currVerticesNode ) {\n\n\t\t\t\tif ( currVerticesNode.nodeName === 'vertex' ) {\n\n\t\t\t\t\tlet vNode = currVerticesNode.firstElementChild;\n\n\t\t\t\t\twhile ( vNode ) {\n\n\t\t\t\t\t\tif ( vNode.nodeName === 'coordinates' ) {\n\n\t\t\t\t\t\t\tconst x = vNode.getElementsByTagName( 'x' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst y = vNode.getElementsByTagName( 'y' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst z = vNode.getElementsByTagName( 'z' )[ 0 ].textContent;\n\n\t\t\t\t\t\t\tvertArray.push( x, y, z );\n\n\t\t\t\t\t\t} else if ( vNode.nodeName === 'normal' ) {\n\n\t\t\t\t\t\t\tconst nx = vNode.getElementsByTagName( 'nx' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst ny = vNode.getElementsByTagName( 'ny' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst nz = vNode.getElementsByTagName( 'nz' )[ 0 ].textContent;\n\n\t\t\t\t\t\t\tnormalArray.push( nx, ny, nz );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvNode = vNode.nextElementSibling;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrVerticesNode = currVerticesNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn { 'vertices': vertArray, 'normals': normalArray };\n\n\t\t}\n\n\t\tfunction loadObject( node ) {\n\n\t\t\tconst objId = node.attributes.id.textContent;\n\t\t\tconst loadedObject = { name: 'amfobject', meshes: [] };\n\t\t\tlet currColor = null;\n\t\t\tlet currObjNode = node.firstElementChild;\n\n\t\t\twhile ( currObjNode ) {\n\n\t\t\t\tif ( currObjNode.nodeName === 'metadata' ) {\n\n\t\t\t\t\tif ( currObjNode.attributes.type !== undefined ) {\n\n\t\t\t\t\t\tif ( currObjNode.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\t\tloadedObject.name = currObjNode.textContent;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( currObjNode.nodeName === 'color' ) {\n\n\t\t\t\t\tcurrColor = loadColor( currObjNode );\n\n\t\t\t\t} else if ( currObjNode.nodeName === 'mesh' ) {\n\n\t\t\t\t\tlet currMeshNode = currObjNode.firstElementChild;\n\t\t\t\t\tconst mesh = { vertices: [], normals: [], volumes: [], color: currColor };\n\n\t\t\t\t\twhile ( currMeshNode ) {\n\n\t\t\t\t\t\tif ( currMeshNode.nodeName === 'vertices' ) {\n\n\t\t\t\t\t\t\tconst loadedVertices = loadMeshVertices( currMeshNode );\n\n\t\t\t\t\t\t\tmesh.normals = mesh.normals.concat( loadedVertices.normals );\n\t\t\t\t\t\t\tmesh.vertices = mesh.vertices.concat( loadedVertices.vertices );\n\n\t\t\t\t\t\t} else if ( currMeshNode.nodeName === 'volume' ) {\n\n\t\t\t\t\t\t\tmesh.volumes.push( loadMeshVolume( currMeshNode ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrMeshNode = currMeshNode.nextElementSibling;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tloadedObject.meshes.push( mesh );\n\n\t\t\t\t}\n\n\t\t\t\tcurrObjNode = currObjNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn { 'id': objId, 'obj': loadedObject };\n\n\t\t}\n\n\t\tconst xmlData = loadDocument( data );\n\t\tlet amfName = '';\n\t\tlet amfAuthor = '';\n\t\tconst amfScale = loadDocumentScale( xmlData );\n\t\tconst amfMaterials = {};\n\t\tconst amfObjects = {};\n\t\tconst childNodes = xmlData.documentElement.childNodes;\n\n\t\tlet i, j;\n\n\t\tfor ( i = 0; i < childNodes.length; i ++ ) {\n\n\t\t\tconst child = childNodes[ i ];\n\n\t\t\tif ( child.nodeName === 'metadata' ) {\n\n\t\t\t\tif ( child.attributes.type !== undefined ) {\n\n\t\t\t\t\tif ( child.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\tamfName = child.textContent;\n\n\t\t\t\t\t} else if ( child.attributes.type.value === 'author' ) {\n\n\t\t\t\t\t\tamfAuthor = child.textContent;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( child.nodeName === 'material' ) {\n\n\t\t\t\tconst loadedMaterial = loadMaterials( child );\n\n\t\t\t\tamfMaterials[ loadedMaterial.id ] = loadedMaterial.material;\n\n\t\t\t} else if ( child.nodeName === 'object' ) {\n\n\t\t\t\tconst loadedObject = loadObject( child );\n\n\t\t\t\tamfObjects[ loadedObject.id ] = loadedObject.obj;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst sceneObject = new Group();\n\t\tconst defaultMaterial = new MeshPhongMaterial( {\n\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\tcolor: 0xaaaaff,\n\t\t\tflatShading: true\n\t\t} );\n\n\t\tsceneObject.name = amfName;\n\t\tsceneObject.userData.author = amfAuthor;\n\t\tsceneObject.userData.loader = 'AMF';\n\n\t\tfor ( const id in amfObjects ) {\n\n\t\t\tconst part = amfObjects[ id ];\n\t\t\tconst meshes = part.meshes;\n\t\t\tconst newObject = new Group();\n\t\t\tnewObject.name = part.name || '';\n\n\t\t\tfor ( i = 0; i < meshes.length; i ++ ) {\n\n\t\t\t\tlet objDefaultMaterial = defaultMaterial;\n\t\t\t\tconst mesh = meshes[ i ];\n\t\t\t\tconst vertices = new Float32BufferAttribute( mesh.vertices, 3 );\n\t\t\t\tlet normals = null;\n\n\t\t\t\tif ( mesh.normals.length ) {\n\n\t\t\t\t\tnormals = new Float32BufferAttribute( mesh.normals, 3 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( mesh.color ) {\n\n\t\t\t\t\tconst color = mesh.color;\n\n\t\t\t\t\tobjDefaultMaterial = defaultMaterial.clone();\n\t\t\t\t\tobjDefaultMaterial.color = new Color( color.r, color.g, color.b );\n\n\t\t\t\t\tif ( color.a !== 1.0 ) {\n\n\t\t\t\t\t\tobjDefaultMaterial.transparent = true;\n\t\t\t\t\t\tobjDefaultMaterial.opacity = color.a;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst volumes = mesh.volumes;\n\n\t\t\t\tfor ( j = 0; j < volumes.length; j ++ ) {\n\n\t\t\t\t\tconst volume = volumes[ j ];\n\t\t\t\t\tconst newGeometry = new BufferGeometry();\n\t\t\t\t\tlet material = objDefaultMaterial;\n\n\t\t\t\t\tnewGeometry.setIndex( volume.triangles );\n\t\t\t\t\tnewGeometry.setAttribute( 'position', vertices.clone() );\n\n\t\t\t\t\tif ( normals ) {\n\n\t\t\t\t\t\tnewGeometry.setAttribute( 'normal', normals.clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( amfMaterials[ volume.materialId ] !== undefined ) {\n\n\t\t\t\t\t\tmaterial = amfMaterials[ volume.materialId ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnewGeometry.scale( amfScale, amfScale, amfScale );\n\t\t\t\t\tnewObject.add( new Mesh( newGeometry, material.clone() ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tsceneObject.add( newObject );\n\n\t\t}\n\n\t\treturn sceneObject;\n\n\t}\n\n}\n\nexport { AMFLoader };\n", "import {\n\tAnimationClip,\n\tBone,\n\tFileLoader,\n\tLoader,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tSkeleton,\n\tVector3,\n\tVectorKeyframeTrack\n} from 'three';\n\n/**\n * Description: reads BVH files and outputs a single Skeleton and an AnimationClip\n *\n * Currently only supports bvh files containing a single root.\n *\n */\n\nclass BVHLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.animateBonePositions = true;\n\t\tthis.animateBoneRotations = true;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\t/*\n\t\t\treads a string array (lines) from a BVH file\n\t\t\tand outputs a skeleton structure including motion data\n\n\t\t\treturns thee root node:\n\t\t\t{ name: '', channels: [], children: [] }\n\t\t*/\n\t\tfunction readBvh( lines ) {\n\n\t\t\t// read model structure\n\n\t\t\tif ( nextLine( lines ) !== 'HIERARCHY' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: HIERARCHY expected.' );\n\n\t\t\t}\n\n\t\t\tconst list = []; // collects flat array of all bones\n\t\t\tconst root = readNode( lines, nextLine( lines ), list );\n\n\t\t\t// read motion data\n\n\t\t\tif ( nextLine( lines ) !== 'MOTION' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: MOTION expected.' );\n\n\t\t\t}\n\n\t\t\t// number of frames\n\n\t\t\tlet tokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\tconst numFrames = parseInt( tokens[ 1 ] );\n\n\t\t\tif ( isNaN( numFrames ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Failed to read number of frames.' );\n\n\t\t\t}\n\n\t\t\t// frame time\n\n\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\tconst frameTime = parseFloat( tokens[ 2 ] );\n\n\t\t\tif ( isNaN( frameTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Failed to read frame time.' );\n\n\t\t\t}\n\n\t\t\t// read frame data line by line\n\n\t\t\tfor ( let i = 0; i < numFrames; i ++ ) {\n\n\t\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\t\treadFrameData( tokens, i * frameTime, root );\n\n\t\t\t}\n\n\t\t\treturn list;\n\n\t\t}\n\n\t\t/*\n\t\t\tRecursively reads data from a single frame into the bone hierarchy.\n\t\t\tThe passed bone hierarchy has to be structured in the same order as the BVH file.\n\t\t\tkeyframe data is stored in bone.frames.\n\n\t\t\t- data: splitted string array (frame values), values are shift()ed so\n\t\t\tthis should be empty after parsing the whole hierarchy.\n\t\t\t- frameTime: playback time for this keyframe.\n\t\t\t- bone: the bone to read frame data from.\n\t\t*/\n\t\tfunction readFrameData( data, frameTime, bone ) {\n\n\t\t\t// end sites have no motion data\n\n\t\t\tif ( bone.type === 'ENDSITE' ) return;\n\n\t\t\t// add keyframe\n\n\t\t\tconst keyframe = {\n\t\t\t\ttime: frameTime,\n\t\t\t\tposition: new Vector3(),\n\t\t\t\trotation: new Quaternion()\n\t\t\t};\n\n\t\t\tbone.frames.push( keyframe );\n\n\t\t\tconst quat = new Quaternion();\n\n\t\t\tconst vx = new Vector3( 1, 0, 0 );\n\t\t\tconst vy = new Vector3( 0, 1, 0 );\n\t\t\tconst vz = new Vector3( 0, 0, 1 );\n\n\t\t\t// parse values for each channel in node\n\n\t\t\tfor ( let i = 0; i < bone.channels.length; i ++ ) {\n\n\t\t\t\tswitch ( bone.channels[ i ] ) {\n\n\t\t\t\t\tcase 'Xposition':\n\t\t\t\t\t\tkeyframe.position.x = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Yposition':\n\t\t\t\t\t\tkeyframe.position.y = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Zposition':\n\t\t\t\t\t\tkeyframe.position.z = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Xrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vx, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Yrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vy, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Zrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vz, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.BVHLoader: Invalid channel type.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// parse child nodes\n\n\t\t\tfor ( let i = 0; i < bone.children.length; i ++ ) {\n\n\t\t\t\treadFrameData( data, frameTime, bone.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t Recursively parses the HIERACHY section of the BVH file\n\n\t\t - lines: all lines of the file. lines are consumed as we go along.\n\t\t - firstline: line containing the node type and name e.g. 'JOINT hip'\n\t\t - list: collects a flat list of nodes\n\n\t\t returns: a BVH node including children\n\t\t*/\n\t\tfunction readNode( lines, firstline, list ) {\n\n\t\t\tconst node = { name: '', type: '', frames: [] };\n\t\t\tlist.push( node );\n\n\t\t\t// parse node type and name\n\n\t\t\tlet tokens = firstline.split( /[\\s]+/ );\n\n\t\t\tif ( tokens[ 0 ].toUpperCase() === 'END' && tokens[ 1 ].toUpperCase() === 'SITE' ) {\n\n\t\t\t\tnode.type = 'ENDSITE';\n\t\t\t\tnode.name = 'ENDSITE'; // bvh end sites have no name\n\n\t\t\t} else {\n\n\t\t\t\tnode.name = tokens[ 1 ];\n\t\t\t\tnode.type = tokens[ 0 ].toUpperCase();\n\n\t\t\t}\n\n\t\t\tif ( nextLine( lines ) !== '{' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected opening { after type & name' );\n\n\t\t\t}\n\n\t\t\t// parse OFFSET\n\n\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\n\t\t\tif ( tokens[ 0 ] !== 'OFFSET' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected OFFSET but got: ' + tokens[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( tokens.length !== 4 ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Invalid number of values for OFFSET.' );\n\n\t\t\t}\n\n\t\t\tconst offset = new Vector3(\n\t\t\t\tparseFloat( tokens[ 1 ] ),\n\t\t\t\tparseFloat( tokens[ 2 ] ),\n\t\t\t\tparseFloat( tokens[ 3 ] )\n\t\t\t);\n\n\t\t\tif ( isNaN( offset.x ) || isNaN( offset.y ) || isNaN( offset.z ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Invalid values of OFFSET.' );\n\n\t\t\t}\n\n\t\t\tnode.offset = offset;\n\n\t\t\t// parse CHANNELS definitions\n\n\t\t\tif ( node.type !== 'ENDSITE' ) {\n\n\t\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\n\t\t\t\tif ( tokens[ 0 ] !== 'CHANNELS' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected CHANNELS definition.' );\n\n\t\t\t\t}\n\n\t\t\t\tconst numChannels = parseInt( tokens[ 1 ] );\n\t\t\t\tnode.channels = tokens.splice( 2, numChannels );\n\t\t\t\tnode.children = [];\n\n\t\t\t}\n\n\t\t\t// read children\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tconst line = nextLine( lines );\n\n\t\t\t\tif ( line === '}' ) {\n\n\t\t\t\t\treturn node;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnode.children.push( readNode( lines, line, list ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t\trecursively converts the internal bvh node structure to a Bone hierarchy\n\n\t\t\tsource: the bvh root node\n\t\t\tlist: pass an empty array, collects a flat list of all converted THREE.Bones\n\n\t\t\treturns the root Bone\n\t\t*/\n\t\tfunction toTHREEBone( source, list ) {\n\n\t\t\tconst bone = new Bone();\n\t\t\tlist.push( bone );\n\n\t\t\tbone.position.add( source.offset );\n\t\t\tbone.name = source.name;\n\n\t\t\tif ( source.type !== 'ENDSITE' ) {\n\n\t\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\t\tbone.add( toTHREEBone( source.children[ i ], list ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bone;\n\n\t\t}\n\n\t\t/*\n\t\t\tbuilds a AnimationClip from the keyframe data saved in each bone.\n\n\t\t\tbone: bvh root node\n\n\t\t\treturns: a AnimationClip containing position and quaternion tracks\n\t\t*/\n\t\tfunction toTHREEAnimation( bones ) {\n\n\t\t\tconst tracks = [];\n\n\t\t\t// create a position and quaternion animation track for each node\n\n\t\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\t\tconst bone = bones[ i ];\n\n\t\t\t\tif ( bone.type === 'ENDSITE' )\n\t\t\t\t\tcontinue;\n\n\t\t\t\t// track data\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst positions = [];\n\t\t\t\tconst rotations = [];\n\n\t\t\t\tfor ( let j = 0; j < bone.frames.length; j ++ ) {\n\n\t\t\t\t\tconst frame = bone.frames[ j ];\n\n\t\t\t\t\ttimes.push( frame.time );\n\n\t\t\t\t\t// the animation system animates the position property,\n\t\t\t\t\t// so we have to add the joint offset to all values\n\n\t\t\t\t\tpositions.push( frame.position.x + bone.offset.x );\n\t\t\t\t\tpositions.push( frame.position.y + bone.offset.y );\n\t\t\t\t\tpositions.push( frame.position.z + bone.offset.z );\n\n\t\t\t\t\trotations.push( frame.rotation.x );\n\t\t\t\t\trotations.push( frame.rotation.y );\n\t\t\t\t\trotations.push( frame.rotation.z );\n\t\t\t\t\trotations.push( frame.rotation.w );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.animateBonePositions ) {\n\n\t\t\t\t\ttracks.push( new VectorKeyframeTrack( bone.name + '.position', times, positions ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.animateBoneRotations ) {\n\n\t\t\t\t\ttracks.push( new QuaternionKeyframeTrack( bone.name + '.quaternion', times, rotations ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( 'animation', - 1, tracks );\n\n\t\t}\n\n\t\t/*\n\t\t\treturns the next non-empty line in lines\n\t\t*/\n\t\tfunction nextLine( lines ) {\n\n\t\t\tlet line;\n\t\t\t// skip empty lines\n\t\t\twhile ( ( line = lines.shift().trim() ).length === 0 ) { }\n\n\t\t\treturn line;\n\n\t\t}\n\n\t\tconst scope = this;\n\n\t\tconst lines = text.split( /[\\r\\n]+/g );\n\n\t\tconst bones = readBvh( lines );\n\n\t\tconst threeBones = [];\n\t\ttoTHREEBone( bones[ 0 ], threeBones );\n\n\t\tconst threeClip = toTHREEAnimation( bones );\n\n\t\treturn {\n\t\t\tskeleton: new Skeleton( threeBones ),\n\t\t\tclip: threeClip\n\t\t};\n\n\t}\n\n}\n\nexport { BVHLoader };\n", "import {\n\tDataTextureLoader,\n\tLinearMipmapLinearFilter\n} from 'three';\n\nclass TGALoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\t// reference from vthibault, https://github.com/vthibault/roBrowser/blob/master/src/Loaders/Targa.js\n\n\t\tfunction tgaCheckHeader( header ) {\n\n\t\t\tswitch ( header.image_type ) {\n\n\t\t\t\t// check indexed type\n\n\t\t\t\tcase TGA_TYPE_INDEXED:\n\t\t\t\tcase TGA_TYPE_RLE_INDEXED:\n\t\t\t\t\tif ( header.colormap_length > 256 || header.colormap_size !== 24 || header.colormap_type !== 1 ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid type colormap data for indexed type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// check colormap type\n\n\t\t\t\tcase TGA_TYPE_RGB:\n\t\t\t\tcase TGA_TYPE_GREY:\n\t\t\t\tcase TGA_TYPE_RLE_RGB:\n\t\t\t\tcase TGA_TYPE_RLE_GREY:\n\t\t\t\t\tif ( header.colormap_type ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid type colormap data for colormap type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// What the need of a file without data ?\n\n\t\t\t\tcase TGA_TYPE_NO_DATA:\n\t\t\t\t\tthrow new Error( 'THREE.TGALoader: No data.' );\n\n\t\t\t\t\t// Invalid type ?\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid type ' + header.image_type );\n\n\t\t\t}\n\n\t\t\t// check image width and height\n\n\t\t\tif ( header.width <= 0 || header.height <= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid image size.' );\n\n\t\t\t}\n\n\t\t\t// check image pixel size\n\n\t\t\tif ( header.pixel_size !== 8 && header.pixel_size !== 16 &&\n\t\t\t\theader.pixel_size !== 24 && header.pixel_size !== 32 ) {\n\n\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid pixel size ' + header.pixel_size );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse tga image buffer\n\n\t\tfunction tgaParse( use_rle, use_pal, header, offset, data ) {\n\n\t\t\tlet pixel_data,\n\t\t\t\tpalettes;\n\n\t\t\tconst pixel_size = header.pixel_size >> 3;\n\t\t\tconst pixel_total = header.width * header.height * pixel_size;\n\n\t\t\t // read palettes\n\n\t\t\t if ( use_pal ) {\n\n\t\t\t\t palettes = data.subarray( offset, offset += header.colormap_length * ( header.colormap_size >> 3 ) );\n\n\t\t\t }\n\n\t\t\t // read RLE\n\n\t\t\t if ( use_rle ) {\n\n\t\t\t\t pixel_data = new Uint8Array( pixel_total );\n\n\t\t\t\tlet c, count, i;\n\t\t\t\tlet shift = 0;\n\t\t\t\tconst pixels = new Uint8Array( pixel_size );\n\n\t\t\t\twhile ( shift < pixel_total ) {\n\n\t\t\t\t\tc = data[ offset ++ ];\n\t\t\t\t\tcount = ( c & 0x7f ) + 1;\n\n\t\t\t\t\t// RLE pixels\n\n\t\t\t\t\tif ( c & 0x80 ) {\n\n\t\t\t\t\t\t// bind pixel tmp array\n\n\t\t\t\t\t\tfor ( i = 0; i < pixel_size; ++ i ) {\n\n\t\t\t\t\t\t\tpixels[ i ] = data[ offset ++ ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// copy pixel array\n\n\t\t\t\t\t\tfor ( i = 0; i < count; ++ i ) {\n\n\t\t\t\t\t\t\tpixel_data.set( pixels, shift + i * pixel_size );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tshift += pixel_size * count;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// raw pixels\n\n\t\t\t\t\t\tcount *= pixel_size;\n\n\t\t\t\t\t\tfor ( i = 0; i < count; ++ i ) {\n\n\t\t\t\t\t\t\tpixel_data[ shift + i ] = data[ offset ++ ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tshift += count;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t } else {\n\n\t\t\t\t// raw pixels\n\n\t\t\t\tpixel_data = data.subarray(\n\t\t\t\t\t offset, offset += ( use_pal ? header.width * header.height : pixel_total )\n\t\t\t\t);\n\n\t\t\t }\n\n\t\t\t return {\n\t\t\t\tpixel_data: pixel_data,\n\t\t\t\tpalettes: palettes\n\t\t\t };\n\n\t\t}\n\n\t\tfunction tgaGetImageData8bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image, palettes ) {\n\n\t\t\tconst colormap = palettes;\n\t\t\tlet color, i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i ++ ) {\n\n\t\t\t\t\tcolor = image[ i ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = colormap[ ( color * 3 ) + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = colormap[ ( color * 3 ) + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = colormap[ ( color * 3 ) + 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData16bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet color, i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 2 ) {\n\n\t\t\t\t\tcolor = image[ i + 0 ] + ( image[ i + 1 ] << 8 );\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = ( color & 0x7C00 ) >> 7;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = ( color & 0x03E0 ) >> 2;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = ( color & 0x001F ) << 3;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = ( color & 0x8000 ) ? 0 : 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData24bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 3 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData32bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 4 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 2 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = image[ i + 3 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageDataGrey8bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet color, i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i ++ ) {\n\n\t\t\t\t\tcolor = image[ i ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageDataGrey16bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 2 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = image[ i + 1 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction getTgaRGBA( data, width, height, image, palette ) {\n\n\t\t\tlet x_start,\n\t\t\t\ty_start,\n\t\t\t\tx_step,\n\t\t\t\ty_step,\n\t\t\t\tx_end,\n\t\t\t\ty_end;\n\n\t\t\tswitch ( ( header.flags & TGA_ORIGIN_MASK ) >> TGA_ORIGIN_SHIFT ) {\n\n\t\t\t\tdefault:\n\t\t\t\tcase TGA_ORIGIN_UL:\n\t\t\t\t\tx_start = 0;\n\t\t\t\t\tx_step = 1;\n\t\t\t\t\tx_end = width;\n\t\t\t\t\ty_start = 0;\n\t\t\t\t\ty_step = 1;\n\t\t\t\t\ty_end = height;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_BL:\n\t\t\t\t\tx_start = 0;\n\t\t\t\t\tx_step = 1;\n\t\t\t\t\tx_end = width;\n\t\t\t\t\ty_start = height - 1;\n\t\t\t\t\ty_step = - 1;\n\t\t\t\t\ty_end = - 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_UR:\n\t\t\t\t\tx_start = width - 1;\n\t\t\t\t\tx_step = - 1;\n\t\t\t\t\tx_end = - 1;\n\t\t\t\t\ty_start = 0;\n\t\t\t\t\ty_step = 1;\n\t\t\t\t\ty_end = height;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_BR:\n\t\t\t\t\tx_start = width - 1;\n\t\t\t\t\tx_step = - 1;\n\t\t\t\t\tx_end = - 1;\n\t\t\t\t\ty_start = height - 1;\n\t\t\t\t\ty_step = - 1;\n\t\t\t\t\ty_end = - 1;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( use_grey ) {\n\n\t\t\t\tswitch ( header.pixel_size ) {\n\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\ttgaGetImageDataGrey8bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 16:\n\t\t\t\t\t\ttgaGetImageDataGrey16bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Format not supported.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( header.pixel_size ) {\n\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\ttgaGetImageData8bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image, palette );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 16:\n\t\t\t\t\t\ttgaGetImageData16bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 24:\n\t\t\t\t\t\ttgaGetImageData24bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 32:\n\t\t\t\t\t\ttgaGetImageData32bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Format not supported.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Load image data according to specific method\n\t\t\t// let func = 'tgaGetImageData' + (use_grey ? 'Grey' : '') + (header.pixel_size) + 'bits';\n\t\t\t// func(data, y_start, y_step, y_end, x_start, x_step, x_end, width, image, palette );\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// TGA constants\n\n\t\tconst TGA_TYPE_NO_DATA = 0,\n\t\t\tTGA_TYPE_INDEXED = 1,\n\t\t\tTGA_TYPE_RGB = 2,\n\t\t\tTGA_TYPE_GREY = 3,\n\t\t\tTGA_TYPE_RLE_INDEXED = 9,\n\t\t\tTGA_TYPE_RLE_RGB = 10,\n\t\t\tTGA_TYPE_RLE_GREY = 11,\n\n\t\t\tTGA_ORIGIN_MASK = 0x30,\n\t\t\tTGA_ORIGIN_SHIFT = 0x04,\n\t\t\tTGA_ORIGIN_BL = 0x00,\n\t\t\tTGA_ORIGIN_BR = 0x01,\n\t\t\tTGA_ORIGIN_UL = 0x02,\n\t\t\tTGA_ORIGIN_UR = 0x03;\n\n\t\tif ( buffer.length < 19 ) throw new Error( 'THREE.TGALoader: Not enough data to contain header.' );\n\n\t\tlet offset = 0;\n\n\t\tconst content = new Uint8Array( buffer ),\n\t\t\theader = {\n\t\t\t\tid_length: content[ offset ++ ],\n\t\t\t\tcolormap_type: content[ offset ++ ],\n\t\t\t\timage_type: content[ offset ++ ],\n\t\t\t\tcolormap_index: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tcolormap_length: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tcolormap_size: content[ offset ++ ],\n\t\t\t\torigin: [\n\t\t\t\t\tcontent[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\t\tcontent[ offset ++ ] | content[ offset ++ ] << 8\n\t\t\t\t],\n\t\t\t\twidth: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\theight: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tpixel_size: content[ offset ++ ],\n\t\t\t\tflags: content[ offset ++ ]\n\t\t\t};\n\n\t\t// check tga if it is valid format\n\n\t\ttgaCheckHeader( header );\n\n\t\tif ( header.id_length + offset > buffer.length ) {\n\n\t\t\tthrow new Error( 'THREE.TGALoader: No data.' );\n\n\t\t}\n\n\t\t// skip the needn't data\n\n\t\toffset += header.id_length;\n\n\t\t// get targa information about RLE compression and palette\n\n\t\tlet use_rle = false,\n\t\t\tuse_pal = false,\n\t\t\tuse_grey = false;\n\n\t\tswitch ( header.image_type ) {\n\n\t\t\tcase TGA_TYPE_RLE_INDEXED:\n\t\t\t\tuse_rle = true;\n\t\t\t\tuse_pal = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_INDEXED:\n\t\t\t\tuse_pal = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RLE_RGB:\n\t\t\t\tuse_rle = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RGB:\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RLE_GREY:\n\t\t\t\tuse_rle = true;\n\t\t\t\tuse_grey = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_GREY:\n\t\t\t\tuse_grey = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t//\n\n\t\tconst imageData = new Uint8Array( header.width * header.height * 4 );\n\t\tconst result = tgaParse( use_rle, use_pal, header, offset, content );\n\t\tgetTgaRGBA( imageData, header.width, header.height, result.pixel_data, result.palettes );\n\n\t\treturn {\n\n\t\t\tdata: imageData,\n\t\t\twidth: header.width,\n\t\t\theight: header.height,\n\t\t\tflipY: true,\n\t\t\tgenerateMipmaps: true,\n\t\t\tminFilter: LinearMipmapLinearFilter,\n\n\t\t};\n\n\t}\n\n}\n\nexport { TGALoader };\n", "import {\n\tAmbientLight,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tLoaderUtils,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tScene,\n\tSkeleton,\n\tSkinnedMesh,\n\tSpotLight,\n\tTextureLoader,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace\n} from 'three';\nimport { TGALoader } from '../loaders/TGALoader.js';\n\nclass ColladaLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text, path ) {\n\n\t\tfunction getElementsByTagName( xml, name ) {\n\n\t\t\t// Non recursive xml.getElementsByTagName() ...\n\n\t\t\tconst array = [];\n\t\t\tconst childNodes = xml.childNodes;\n\n\t\t\tfor ( let i = 0, l = childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = childNodes[ i ];\n\n\t\t\t\tif ( child.nodeName === name ) {\n\n\t\t\t\t\tarray.push( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseStrings( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tconst parts = text.trim().split( /\\s+/ );\n\t\t\tconst array = new Array( parts.length );\n\n\t\t\tfor ( let i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parts[ i ];\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseFloats( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tconst parts = text.trim().split( /\\s+/ );\n\t\t\tconst array = new Array( parts.length );\n\n\t\t\tfor ( let i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseFloat( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseInts( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tconst parts = text.trim().split( /\\s+/ );\n\t\t\tconst array = new Array( parts.length );\n\n\t\t\tfor ( let i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseInt( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseId( text ) {\n\n\t\t\treturn text.substring( 1 );\n\n\t\t}\n\n\t\tfunction generateId() {\n\n\t\t\treturn 'three_default_' + ( count ++ );\n\n\t\t}\n\n\t\tfunction isEmpty( object ) {\n\n\t\t\treturn Object.keys( object ).length === 0;\n\n\t\t}\n\n\t\t// asset\n\n\t\tfunction parseAsset( xml ) {\n\n\t\t\treturn {\n\t\t\t\tunit: parseAssetUnit( getElementsByTagName( xml, 'unit' )[ 0 ] ),\n\t\t\t\tupAxis: parseAssetUpAxis( getElementsByTagName( xml, 'up_axis' )[ 0 ] )\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseAssetUnit( xml ) {\n\n\t\t\tif ( ( xml !== undefined ) && ( xml.hasAttribute( 'meter' ) === true ) ) {\n\n\t\t\t\treturn parseFloat( xml.getAttribute( 'meter' ) );\n\n\t\t\t} else {\n\n\t\t\t\treturn 1; // default 1 meter\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAssetUpAxis( xml ) {\n\n\t\t\treturn xml !== undefined ? xml.textContent : 'Y_UP';\n\n\t\t}\n\n\t\t// library\n\n\t\tfunction parseLibrary( xml, libraryName, nodeName, parser ) {\n\n\t\t\tconst library = getElementsByTagName( xml, libraryName )[ 0 ];\n\n\t\t\tif ( library !== undefined ) {\n\n\t\t\t\tconst elements = getElementsByTagName( library, nodeName );\n\n\t\t\t\tfor ( let i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\t\tparser( elements[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildLibrary( data, builder ) {\n\n\t\t\tfor ( const name in data ) {\n\n\t\t\t\tconst object = data[ name ];\n\t\t\t\tobject.build = builder( data[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// get\n\n\t\tfunction getBuild( data, builder ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\tdata.build = builder( data );\n\n\t\t\treturn data.build;\n\n\t\t}\n\n\t\t// animation\n\n\t\tfunction parseAnimation( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsources: {},\n\t\t\t\tsamplers: {},\n\t\t\t\tchannels: {}\n\t\t\t};\n\n\t\t\tlet hasChildren = false;\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tlet id;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.samplers[ id ] = parseAnimationSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'channel':\n\t\t\t\t\t\tid = child.getAttribute( 'target' );\n\t\t\t\t\t\tdata.channels[ id ] = parseAnimationChannel( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'animation':\n\t\t\t\t\t\t// hierarchy of related animations\n\t\t\t\t\t\tparseAnimation( child );\n\t\t\t\t\t\thasChildren = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasChildren === false ) {\n\n\t\t\t\t// since 'id' attributes can be optional, it's necessary to generate a UUID for unqiue assignment\n\n\t\t\t\tlibrary.animations[ xml.getAttribute( 'id' ) || MathUtils.generateUUID() ] = data;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimationSampler( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinputs: {},\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseAnimationChannel( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tconst target = xml.getAttribute( 'target' );\n\n\t\t\t// parsing SID Addressing Syntax\n\n\t\t\tlet parts = target.split( '/' );\n\n\t\t\tconst id = parts.shift();\n\t\t\tlet sid = parts.shift();\n\n\t\t\t// check selection syntax\n\n\t\t\tconst arraySyntax = ( sid.indexOf( '(' ) !== - 1 );\n\t\t\tconst memberSyntax = ( sid.indexOf( '.' ) !== - 1 );\n\n\t\t\tif ( memberSyntax ) {\n\n\t\t\t\t// member selection access\n\n\t\t\t\tparts = sid.split( '.' );\n\t\t\t\tsid = parts.shift();\n\t\t\t\tdata.member = parts.shift();\n\n\t\t\t} else if ( arraySyntax ) {\n\n\t\t\t\t// array-access syntax. can be used to express fields in one-dimensional vectors or two-dimensional matrices.\n\n\t\t\t\tconst indices = sid.split( '(' );\n\t\t\t\tsid = indices.shift();\n\n\t\t\t\tfor ( let i = 0; i < indices.length; i ++ ) {\n\n\t\t\t\t\tindices[ i ] = parseInt( indices[ i ].replace( /\\)/, '' ) );\n\n\t\t\t\t}\n\n\t\t\t\tdata.indices = indices;\n\n\t\t\t}\n\n\t\t\tdata.id = id;\n\t\t\tdata.sid = sid;\n\n\t\t\tdata.arraySyntax = arraySyntax;\n\t\t\tdata.memberSyntax = memberSyntax;\n\n\t\t\tdata.sampler = parseId( xml.getAttribute( 'source' ) );\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildAnimation( data ) {\n\n\t\t\tconst tracks = [];\n\n\t\t\tconst channels = data.channels;\n\t\t\tconst samplers = data.samplers;\n\t\t\tconst sources = data.sources;\n\n\t\t\tfor ( const target in channels ) {\n\n\t\t\t\tif ( channels.hasOwnProperty( target ) ) {\n\n\t\t\t\t\tconst channel = channels[ target ];\n\t\t\t\t\tconst sampler = samplers[ channel.sampler ];\n\n\t\t\t\t\tconst inputId = sampler.inputs.INPUT;\n\t\t\t\t\tconst outputId = sampler.inputs.OUTPUT;\n\n\t\t\t\t\tconst inputSource = sources[ inputId ];\n\t\t\t\t\tconst outputSource = sources[ outputId ];\n\n\t\t\t\t\tconst animation = buildAnimationChannel( channel, inputSource, outputSource );\n\n\t\t\t\t\tcreateKeyframeTracks( animation, tracks );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction getAnimation( id ) {\n\n\t\t\treturn getBuild( library.animations[ id ], buildAnimation );\n\n\t\t}\n\n\t\tfunction buildAnimationChannel( channel, inputSource, outputSource ) {\n\n\t\t\tconst node = library.nodes[ channel.id ];\n\t\t\tconst object3D = getNode( node.id );\n\n\t\t\tconst transform = node.transforms[ channel.sid ];\n\t\t\tconst defaultMatrix = node.matrix.clone().transpose();\n\n\t\t\tlet time, stride;\n\t\t\tlet i, il, j, jl;\n\n\t\t\tconst data = {};\n\n\t\t\t// the collada spec allows the animation of data in various ways.\n\t\t\t// depending on the transform type (matrix, translate, rotate, scale), we execute different logic\n\n\t\t\tswitch ( transform ) {\n\n\t\t\t\tcase 'matrix':\n\n\t\t\t\t\tfor ( i = 0, il = inputSource.array.length; i < il; i ++ ) {\n\n\t\t\t\t\t\ttime = inputSource.array[ i ];\n\t\t\t\t\t\tstride = i * outputSource.stride;\n\n\t\t\t\t\t\tif ( data[ time ] === undefined ) data[ time ] = {};\n\n\t\t\t\t\t\tif ( channel.arraySyntax === true ) {\n\n\t\t\t\t\t\t\tconst value = outputSource.array[ stride ];\n\t\t\t\t\t\t\tconst index = channel.indices[ 0 ] + 4 * channel.indices[ 1 ];\n\n\t\t\t\t\t\t\tdata[ time ][ index ] = value;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( j = 0, jl = outputSource.stride; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tdata[ time ][ j ] = outputSource.array[ stride + j ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'scale':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tconst keyframes = prepareAnimationData( data, defaultMatrix );\n\n\t\t\tconst animation = {\n\t\t\t\tname: object3D.uuid,\n\t\t\t\tkeyframes: keyframes\n\t\t\t};\n\n\t\t\treturn animation;\n\n\t\t}\n\n\t\tfunction prepareAnimationData( data, defaultMatrix ) {\n\n\t\t\tconst keyframes = [];\n\n\t\t\t// transfer data into a sortable array\n\n\t\t\tfor ( const time in data ) {\n\n\t\t\t\tkeyframes.push( { time: parseFloat( time ), value: data[ time ] } );\n\n\t\t\t}\n\n\t\t\t// ensure keyframes are sorted by time\n\n\t\t\tkeyframes.sort( ascending );\n\n\t\t\t// now we clean up all animation data, so we can use them for keyframe tracks\n\n\t\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\t\ttransformAnimationData( keyframes, i, defaultMatrix.elements[ i ] );\n\n\t\t\t}\n\n\t\t\treturn keyframes;\n\n\t\t\t// array sort function\n\n\t\t\tfunction ascending( a, b ) {\n\n\t\t\t\treturn a.time - b.time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst position = new Vector3();\n\t\tconst scale = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\n\t\tfunction createKeyframeTracks( animation, tracks ) {\n\n\t\t\tconst keyframes = animation.keyframes;\n\t\t\tconst name = animation.name;\n\n\t\t\tconst times = [];\n\t\t\tconst positionData = [];\n\t\t\tconst quaternionData = [];\n\t\t\tconst scaleData = [];\n\n\t\t\tfor ( let i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tconst time = keyframe.time;\n\t\t\t\tconst value = keyframe.value;\n\n\t\t\t\tmatrix.fromArray( value ).transpose();\n\t\t\t\tmatrix.decompose( position, quaternion, scale );\n\n\t\t\t\ttimes.push( time );\n\t\t\t\tpositionData.push( position.x, position.y, position.z );\n\t\t\t\tquaternionData.push( quaternion.x, quaternion.y, quaternion.z, quaternion.w );\n\t\t\t\tscaleData.push( scale.x, scale.y, scale.z );\n\n\t\t\t}\n\n\t\t\tif ( positionData.length > 0 ) tracks.push( new VectorKeyframeTrack( name + '.position', times, positionData ) );\n\t\t\tif ( quaternionData.length > 0 ) tracks.push( new QuaternionKeyframeTrack( name + '.quaternion', times, quaternionData ) );\n\t\t\tif ( scaleData.length > 0 ) tracks.push( new VectorKeyframeTrack( name + '.scale', times, scaleData ) );\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction transformAnimationData( keyframes, property, defaultValue ) {\n\n\t\t\tlet keyframe;\n\n\t\t\tlet empty = true;\n\t\t\tlet i, l;\n\n\t\t\t// check, if values of a property are missing in our keyframes\n\n\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === undefined ) {\n\n\t\t\t\t\tkeyframe.value[ property ] = null; // mark as missing\n\n\t\t\t\t} else {\n\n\t\t\t\t\tempty = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( empty === true ) {\n\n\t\t\t\t// no values at all, so we set a default value\n\n\t\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\t\tkeyframe.value[ property ] = defaultValue;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// filling gaps\n\n\t\t\t\tcreateMissingKeyframes( keyframes, property );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction createMissingKeyframes( keyframes, property ) {\n\n\t\t\tlet prev, next;\n\n\t\t\tfor ( let i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === null ) {\n\n\t\t\t\t\tprev = getPrev( keyframes, i, property );\n\t\t\t\t\tnext = getNext( keyframes, i, property );\n\n\t\t\t\t\tif ( prev === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = next.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( next === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = prev.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinterpolate( keyframe, prev, next, property );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getPrev( keyframes, i, property ) {\n\n\t\t\twhile ( i >= 0 ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti --;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction getNext( keyframes, i, property ) {\n\n\t\t\twhile ( i < keyframes.length ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction interpolate( key, prev, next, property ) {\n\n\t\t\tif ( ( next.time - prev.time ) === 0 ) {\n\n\t\t\t\tkey.value[ property ] = prev.value[ property ];\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tkey.value[ property ] = ( ( key.time - prev.time ) * ( next.value[ property ] - prev.value[ property ] ) / ( next.time - prev.time ) ) + prev.value[ property ];\n\n\t\t}\n\n\t\t// animation clips\n\n\t\tfunction parseAnimationClip( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'id' ) || 'default',\n\t\t\t\tstart: parseFloat( xml.getAttribute( 'start' ) || 0 ),\n\t\t\t\tend: parseFloat( xml.getAttribute( 'end' ) || 0 ),\n\t\t\t\tanimations: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_animation':\n\t\t\t\t\t\tdata.animations.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.clips[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildAnimationClip( data ) {\n\n\t\t\tconst tracks = [];\n\n\t\t\tconst name = data.name;\n\t\t\tconst duration = ( data.end - data.start ) || - 1;\n\t\t\tconst animations = data.animations;\n\n\t\t\tfor ( let i = 0, il = animations.length; i < il; i ++ ) {\n\n\t\t\t\tconst animationTracks = getAnimation( animations[ i ] );\n\n\t\t\t\tfor ( let j = 0, jl = animationTracks.length; j < jl; j ++ ) {\n\n\t\t\t\t\ttracks.push( animationTracks[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( name, duration, tracks );\n\n\t\t}\n\n\t\tfunction getAnimationClip( id ) {\n\n\t\t\treturn getBuild( library.clips[ id ], buildAnimationClip );\n\n\t\t}\n\n\t\t// controller\n\n\t\tfunction parseController( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'skin':\n\t\t\t\t\t\t// there is exactly one skin per controller\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.skin = parseSkin( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'morph':\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Morph target animation not supported yet.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.controllers[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSkin( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsources: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_shape_matrix':\n\t\t\t\t\t\tdata.bindShapeMatrix = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tconst id = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'joints':\n\t\t\t\t\t\tdata.joints = parseJoints( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertex_weights':\n\t\t\t\t\t\tdata.vertexWeights = parseVertexWeights( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseJoints( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseVertexWeights( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconst offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = { id: id, offset: offset };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tdata.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tdata.v = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildController( data ) {\n\n\t\t\tconst build = {\n\t\t\t\tid: data.id\n\t\t\t};\n\n\t\t\tconst geometry = library.geometries[ build.id ];\n\n\t\t\tif ( data.skin !== undefined ) {\n\n\t\t\t\tbuild.skin = buildSkin( data.skin );\n\n\t\t\t\t// we enhance the 'sources' property of the corresponding geometry with our skin data\n\n\t\t\t\tgeometry.sources.skinIndices = build.skin.indices;\n\t\t\t\tgeometry.sources.skinWeights = build.skin.weights;\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildSkin( data ) {\n\n\t\t\tconst BONE_LIMIT = 4;\n\n\t\t\tconst build = {\n\t\t\t\tjoints: [], // this must be an array to preserve the joint order\n\t\t\t\tindices: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t},\n\t\t\t\tweights: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst sources = data.sources;\n\t\t\tconst vertexWeights = data.vertexWeights;\n\n\t\t\tconst vcount = vertexWeights.vcount;\n\t\t\tconst v = vertexWeights.v;\n\t\t\tconst jointOffset = vertexWeights.inputs.JOINT.offset;\n\t\t\tconst weightOffset = vertexWeights.inputs.WEIGHT.offset;\n\n\t\t\tconst jointSource = data.sources[ data.joints.inputs.JOINT ];\n\t\t\tconst inverseSource = data.sources[ data.joints.inputs.INV_BIND_MATRIX ];\n\n\t\t\tconst weights = sources[ vertexWeights.inputs.WEIGHT.id ].array;\n\t\t\tlet stride = 0;\n\n\t\t\tlet i, j, l;\n\n\t\t\t// process skin data for each vertex\n\n\t\t\tfor ( i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\tconst jointCount = vcount[ i ]; // this is the amount of joints that affect a single vertex\n\t\t\t\tconst vertexSkinData = [];\n\n\t\t\t\tfor ( j = 0; j < jointCount; j ++ ) {\n\n\t\t\t\t\tconst skinIndex = v[ stride + jointOffset ];\n\t\t\t\t\tconst weightId = v[ stride + weightOffset ];\n\t\t\t\t\tconst skinWeight = weights[ weightId ];\n\n\t\t\t\t\tvertexSkinData.push( { index: skinIndex, weight: skinWeight } );\n\n\t\t\t\t\tstride += 2;\n\n\t\t\t\t}\n\n\t\t\t\t// we sort the joints in descending order based on the weights.\n\t\t\t\t// this ensures, we only procced the most important joints of the vertex\n\n\t\t\t\tvertexSkinData.sort( descending );\n\n\t\t\t\t// now we provide for each vertex a set of four index and weight values.\n\t\t\t\t// the order of the skin data matches the order of vertices\n\n\t\t\t\tfor ( j = 0; j < BONE_LIMIT; j ++ ) {\n\n\t\t\t\t\tconst d = vertexSkinData[ j ];\n\n\t\t\t\t\tif ( d !== undefined ) {\n\n\t\t\t\t\t\tbuild.indices.array.push( d.index );\n\t\t\t\t\t\tbuild.weights.array.push( d.weight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbuild.indices.array.push( 0 );\n\t\t\t\t\t\tbuild.weights.array.push( 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup bind matrix\n\n\t\t\tif ( data.bindShapeMatrix ) {\n\n\t\t\t\tbuild.bindMatrix = new Matrix4().fromArray( data.bindShapeMatrix ).transpose();\n\n\t\t\t} else {\n\n\t\t\t\tbuild.bindMatrix = new Matrix4().identity();\n\n\t\t\t}\n\n\t\t\t// process bones and inverse bind matrix data\n\n\t\t\tfor ( i = 0, l = jointSource.array.length; i < l; i ++ ) {\n\n\t\t\t\tconst name = jointSource.array[ i ];\n\t\t\t\tconst boneInverse = new Matrix4().fromArray( inverseSource.array, i * inverseSource.stride ).transpose();\n\n\t\t\t\tbuild.joints.push( { name: name, boneInverse: boneInverse } );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t\t// array sort function\n\n\t\t\tfunction descending( a, b ) {\n\n\t\t\t\treturn b.weight - a.weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getController( id ) {\n\n\t\t\treturn getBuild( library.controllers[ id ], buildController );\n\n\t\t}\n\n\t\t// image\n\n\t\tfunction parseImage( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinit_from: getElementsByTagName( xml, 'init_from' )[ 0 ].textContent\n\t\t\t};\n\n\t\t\tlibrary.images[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildImage( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data.init_from;\n\n\t\t}\n\n\t\tfunction getImage( id ) {\n\n\t\t\tconst data = library.images[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildImage );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find image with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// effect\n\n\t\tfunction parseEffect( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'profile_COMMON':\n\t\t\t\t\t\tdata.profile = parseEffectProfileCOMMON( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.effects[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseEffectProfileCOMMON( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsurfaces: {},\n\t\t\t\tsamplers: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'newparam':\n\t\t\t\t\t\tparseEffectNewparam( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tdata.technique = parseEffectTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tdata.extra = parseEffectExtra( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectNewparam( xml, data ) {\n\n\t\t\tconst sid = xml.getAttribute( 'sid' );\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'surface':\n\t\t\t\t\t\tdata.surfaces[ sid ] = parseEffectSurface( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler2D':\n\t\t\t\t\t\tdata.samplers[ sid ] = parseEffectSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectSurface( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'init_from':\n\t\t\t\t\t\tdata.init_from = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectSampler( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.source = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'constant':\n\t\t\t\t\tcase 'lambert':\n\t\t\t\t\tcase 'blinn':\n\t\t\t\t\tcase 'phong':\n\t\t\t\t\t\tdata.type = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseEffectParameters( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tdata.extra = parseEffectExtra( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameters( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\tcase 'ambient':\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectParameter( child );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\t\tdata[ child.nodeName ] = {\n\t\t\t\t\t\t\topaque: child.hasAttribute( 'opaque' ) ? child.getAttribute( 'opaque' ) : 'A_ONE',\n\t\t\t\t\t\t\tdata: parseEffectParameter( child )\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameter( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'float':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tdata[ child.nodeName ] = { id: child.getAttribute( 'texture' ), extra: parseEffectParameterTexture( child ) };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTexture( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\ttechnique: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tparseEffectParameterTextureExtra( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtra( xml, data ) {\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tparseEffectParameterTextureExtraTechnique( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtraTechnique( xml, data ) {\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'repeatU':\n\t\t\t\t\tcase 'repeatV':\n\t\t\t\t\tcase 'offsetU':\n\t\t\t\t\tcase 'offsetV':\n\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'wrapU':\n\t\t\t\t\tcase 'wrapV':\n\n\t\t\t\t\t\t// some files have values for wrapU/wrapV which become NaN via parseInt\n\n\t\t\t\t\t\tif ( child.textContent.toUpperCase() === 'TRUE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 1;\n\n\t\t\t\t\t\t} else if ( child.textContent.toUpperCase() === 'FALSE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseInt( child.textContent );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectExtraTechniqueBump( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectExtra( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tdata.technique = parseEffectExtraTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectExtraTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'double_sided':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseInt( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectExtraTechniqueBump( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectExtraTechniqueBump( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tdata[ child.nodeName ] = { id: child.getAttribute( 'texture' ), texcoord: child.getAttribute( 'texcoord' ), extra: parseEffectParameterTexture( child ) };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildEffect( data ) {\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getEffect( id ) {\n\n\t\t\treturn getBuild( library.effects[ id ], buildEffect );\n\n\t\t}\n\n\t\t// material\n\n\t\tfunction parseMaterial( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_effect':\n\t\t\t\t\t\tdata.url = parseId( child.getAttribute( 'url' ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.materials[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction getTextureLoader( image ) {\n\n\t\t\tlet loader;\n\n\t\t\tlet extension = image.slice( ( image.lastIndexOf( '.' ) - 1 >>> 0 ) + 2 ); // http://www.jstips.co/en/javascript/get-file-extension/\n\t\t\textension = extension.toLowerCase();\n\n\t\t\tswitch ( extension ) {\n\n\t\t\t\tcase 'tga':\n\t\t\t\t\tloader = tgaLoader;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tloader = textureLoader;\n\n\t\t\t}\n\n\t\t\treturn loader;\n\n\t\t}\n\n\t\tfunction buildMaterial( data ) {\n\n\t\t\tconst effect = getEffect( data.url );\n\t\t\tconst technique = effect.profile.technique;\n\n\t\t\tlet material;\n\n\t\t\tswitch ( technique.type ) {\n\n\t\t\t\tcase 'phong':\n\t\t\t\tcase 'blinn':\n\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'lambert':\n\t\t\t\t\tmaterial = new MeshLambertMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tmaterial = new MeshBasicMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tmaterial.name = data.name || '';\n\n\t\t\tfunction getTexture( textureObject, colorSpace = null ) {\n\n\t\t\t\tconst sampler = effect.profile.samplers[ textureObject.id ];\n\t\t\t\tlet image = null;\n\n\t\t\t\t// get image\n\n\t\t\t\tif ( sampler !== undefined ) {\n\n\t\t\t\t\tconst surface = effect.profile.surfaces[ sampler.source ];\n\t\t\t\t\timage = getImage( surface.init_from );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530).' );\n\t\t\t\t\timage = getImage( textureObject.id );\n\n\t\t\t\t}\n\n\t\t\t\t// create texture if image is avaiable\n\n\t\t\t\tif ( image !== null ) {\n\n\t\t\t\t\tconst loader = getTextureLoader( image );\n\n\t\t\t\t\tif ( loader !== undefined ) {\n\n\t\t\t\t\t\tconst texture = loader.load( image );\n\n\t\t\t\t\t\tconst extra = textureObject.extra;\n\n\t\t\t\t\t\tif ( extra !== undefined && extra.technique !== undefined && isEmpty( extra.technique ) === false ) {\n\n\t\t\t\t\t\t\tconst technique = extra.technique;\n\n\t\t\t\t\t\t\ttexture.wrapS = technique.wrapU ? RepeatWrapping : ClampToEdgeWrapping;\n\t\t\t\t\t\t\ttexture.wrapT = technique.wrapV ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\t\t\t\t\t\ttexture.offset.set( technique.offsetU || 0, technique.offsetV || 0 );\n\t\t\t\t\t\t\ttexture.repeat.set( technique.repeatU || 1, technique.repeatV || 1 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\t\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( colorSpace !== null ) {\n\n\t\t\t\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Loader for texture %s not found.', image );\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t create texture with ID:', textureObject.id );\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst parameters = technique.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tconst parameter = parameters[ key ];\n\n\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\t\tif ( parameter.color ) material.color.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.map = getTexture( parameter.texture, SRGBColorSpace );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\t\tif ( parameter.color && material.specular ) material.specular.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.specularMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tif ( parameter.texture ) material.normalMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'ambient':\n\t\t\t\t\t\tif ( parameter.texture ) material.lightMap = getTexture( parameter.texture, SRGBColorSpace );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\t\tif ( parameter.float && material.shininess ) material.shininess = parameter.float;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\t\tif ( parameter.color && material.emissive ) material.emissive.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.emissiveMap = getTexture( parameter.texture, SRGBColorSpace );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmaterial.color.convertSRGBToLinear();\n\t\t\tif ( material.specular ) material.specular.convertSRGBToLinear();\n\t\t\tif ( material.emissive ) material.emissive.convertSRGBToLinear();\n\n\t\t\t//\n\n\t\t\tlet transparent = parameters[ 'transparent' ];\n\t\t\tlet transparency = parameters[ 'transparency' ];\n\n\t\t\t// does not exist but \n\n\t\t\tif ( transparency === undefined && transparent ) {\n\n\t\t\t\ttransparency = {\n\t\t\t\t\tfloat: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\t// does not exist but \n\n\t\t\tif ( transparent === undefined && transparency ) {\n\n\t\t\t\ttransparent = {\n\t\t\t\t\topaque: 'A_ONE',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcolor: [ 1, 1, 1, 1 ]\n\t\t\t\t\t} };\n\n\t\t\t}\n\n\t\t\tif ( transparent && transparency ) {\n\n\t\t\t\t// handle case if a texture exists but no color\n\n\t\t\t\tif ( transparent.data.texture ) {\n\n\t\t\t\t\t// we do not set an alpha map (see #13792)\n\n\t\t\t\t\tmaterial.transparent = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst color = transparent.data.color;\n\n\t\t\t\t\tswitch ( transparent.opaque ) {\n\n\t\t\t\t\t\tcase 'A_ONE':\n\t\t\t\t\t\t\tmaterial.opacity = color[ 3 ] * transparency.float;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'RGB_ZERO':\n\t\t\t\t\t\t\tmaterial.opacity = 1 - ( color[ 0 ] * transparency.float );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'A_ZERO':\n\t\t\t\t\t\t\tmaterial.opacity = 1 - ( color[ 3 ] * transparency.float );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'RGB_ONE':\n\t\t\t\t\t\t\tmaterial.opacity = color[ 0 ] * transparency.float;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Invalid opaque type \"%s\" of transparent tag.', transparent.opaque );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material.opacity < 1 ) material.transparent = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\n\t\t\tif ( technique.extra !== undefined && technique.extra.technique !== undefined ) {\n\n\t\t\t\tconst techniques = technique.extra.technique;\n\n\t\t\t\tfor ( const k in techniques ) {\n\n\t\t\t\t\tconst v = techniques[ k ];\n\n\t\t\t\t\tswitch ( k ) {\n\n\t\t\t\t\t\tcase 'double_sided':\n\t\t\t\t\t\t\tmaterial.side = ( v === 1 ? DoubleSide : FrontSide );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\t\tmaterial.normalMap = getTexture( v.texture );\n\t\t\t\t\t\t\tmaterial.normalScale = new Vector2( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction getMaterial( id ) {\n\n\t\t\treturn getBuild( library.materials[ id ], buildMaterial );\n\n\t\t}\n\n\t\t// camera\n\n\t\tfunction parseCamera( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'optics':\n\t\t\t\t\t\tdata.optics = parseCameraOptics( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.cameras[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseCameraOptics( xml ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\treturn parseCameraTechnique( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {};\n\n\t\t}\n\n\t\tfunction parseCameraTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'perspective':\n\t\t\t\t\tcase 'orthographic':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseCameraParameters( child );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseCameraParameters( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'xfov':\n\t\t\t\t\tcase 'yfov':\n\t\t\t\t\tcase 'xmag':\n\t\t\t\t\tcase 'ymag':\n\t\t\t\t\tcase 'znear':\n\t\t\t\t\tcase 'zfar':\n\t\t\t\t\tcase 'aspect_ratio':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildCamera( data ) {\n\n\t\t\tlet camera;\n\n\t\t\tswitch ( data.optics.technique ) {\n\n\t\t\t\tcase 'perspective':\n\t\t\t\t\tcamera = new PerspectiveCamera(\n\t\t\t\t\t\tdata.optics.parameters.yfov,\n\t\t\t\t\t\tdata.optics.parameters.aspect_ratio,\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'orthographic':\n\t\t\t\t\tlet ymag = data.optics.parameters.ymag;\n\t\t\t\t\tlet xmag = data.optics.parameters.xmag;\n\t\t\t\t\tconst aspectRatio = data.optics.parameters.aspect_ratio;\n\n\t\t\t\t\txmag = ( xmag === undefined ) ? ( ymag * aspectRatio ) : xmag;\n\t\t\t\t\tymag = ( ymag === undefined ) ? ( xmag / aspectRatio ) : ymag;\n\n\t\t\t\t\txmag *= 0.5;\n\t\t\t\t\tymag *= 0.5;\n\n\t\t\t\t\tcamera = new OrthographicCamera(\n\t\t\t\t\t\t- xmag, xmag, ymag, - ymag, // left, right, top, bottom\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcamera.name = data.name || '';\n\n\t\t\treturn camera;\n\n\t\t}\n\n\t\tfunction getCamera( id ) {\n\n\t\t\tconst data = library.cameras[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildCamera );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find camera with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// light\n\n\t\tfunction parseLight( xml ) {\n\n\t\t\tlet data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tdata = parseLightTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.lights[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseLightTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'directional':\n\t\t\t\t\tcase 'point':\n\t\t\t\t\tcase 'spot':\n\t\t\t\t\tcase 'ambient':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseLightParameters( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseLightParameters( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.color = new Color().fromArray( array ).convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'falloff_angle':\n\t\t\t\t\t\tdata.falloffAngle = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'quadratic_attenuation':\n\t\t\t\t\t\tconst f = parseFloat( child.textContent );\n\t\t\t\t\t\tdata.distance = f ? Math.sqrt( 1 / f ) : 0;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildLight( data ) {\n\n\t\t\tlet light;\n\n\t\t\tswitch ( data.technique ) {\n\n\t\t\t\tcase 'directional':\n\t\t\t\t\tlight = new DirectionalLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'point':\n\t\t\t\t\tlight = new PointLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'spot':\n\t\t\t\t\tlight = new SpotLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ambient':\n\t\t\t\t\tlight = new AmbientLight();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( data.parameters.color ) light.color.copy( data.parameters.color );\n\t\t\tif ( data.parameters.distance ) light.distance = data.parameters.distance;\n\n\t\t\treturn light;\n\n\t\t}\n\n\t\tfunction getLight( id ) {\n\n\t\t\tconst data = library.lights[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildLight );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find light with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// geometry\n\n\t\tfunction parseGeometry( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tsources: {},\n\t\t\t\tvertices: {},\n\t\t\t\tprimitives: []\n\t\t\t};\n\n\t\t\tconst mesh = getElementsByTagName( xml, 'mesh' )[ 0 ];\n\n\t\t\t// the following tags inside geometry are not supported yet (see https://github.com/mrdoob/three.js/pull/12606): convex_mesh, spline, brep\n\t\t\tif ( mesh === undefined ) return;\n\n\t\t\tfor ( let i = 0; i < mesh.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = mesh.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tconst id = child.getAttribute( 'id' );\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertices':\n\t\t\t\t\t\t// data.sources[ id ] = data.sources[ parseId( getElementsByTagName( child, 'input' )[ 0 ].getAttribute( 'source' ) ) ];\n\t\t\t\t\t\tdata.vertices = parseGeometryVertices( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'polygons':\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unsupported primitive type: ', child.nodeName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\t\tdata.primitives.push( parseGeometryPrimitive( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.geometries[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSource( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tarray: [],\n\t\t\t\tstride: 3\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'float_array':\n\t\t\t\t\t\tdata.array = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Name_array':\n\t\t\t\t\t\tdata.array = parseStrings( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tconst accessor = getElementsByTagName( child, 'accessor' )[ 0 ];\n\n\t\t\t\t\t\tif ( accessor !== undefined ) {\n\n\t\t\t\t\t\t\tdata.stride = parseInt( accessor.getAttribute( 'stride' ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryVertices( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tdata[ child.getAttribute( 'semantic' ) ] = parseId( child.getAttribute( 'source' ) );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryPrimitive( xml ) {\n\n\t\t\tconst primitive = {\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tmaterial: xml.getAttribute( 'material' ),\n\t\t\t\tcount: parseInt( xml.getAttribute( 'count' ) ),\n\t\t\t\tinputs: {},\n\t\t\t\tstride: 0,\n\t\t\t\thasUV: false\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tconst offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tconst set = parseInt( child.getAttribute( 'set' ) );\n\t\t\t\t\t\tconst inputname = ( set > 0 ? semantic + set : semantic );\n\t\t\t\t\t\tprimitive.inputs[ inputname ] = { id: id, offset: offset };\n\t\t\t\t\t\tprimitive.stride = Math.max( primitive.stride, offset + 1 );\n\t\t\t\t\t\tif ( semantic === 'TEXCOORD' ) primitive.hasUV = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tprimitive.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'p':\n\t\t\t\t\t\tprimitive.p = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn primitive;\n\n\t\t}\n\n\t\tfunction groupPrimitives( primitives ) {\n\n\t\t\tconst build = {};\n\n\t\t\tfor ( let i = 0; i < primitives.length; i ++ ) {\n\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\tif ( build[ primitive.type ] === undefined ) build[ primitive.type ] = [];\n\n\t\t\t\tbuild[ primitive.type ].push( primitive );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction checkUVCoordinates( primitives ) {\n\n\t\t\tlet count = 0;\n\n\t\t\tfor ( let i = 0, l = primitives.length; i < l; i ++ ) {\n\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\tif ( primitive.hasUV === true ) {\n\n\t\t\t\t\tcount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( count > 0 && count < primitives.length ) {\n\n\t\t\t\tprimitives.uvsNeedsFix = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildGeometry( data ) {\n\n\t\t\tconst build = {};\n\n\t\t\tconst sources = data.sources;\n\t\t\tconst vertices = data.vertices;\n\t\t\tconst primitives = data.primitives;\n\n\t\t\tif ( primitives.length === 0 ) return {};\n\n\t\t\t// our goal is to create one buffer geometry for a single type of primitives\n\t\t\t// first, we group all primitives by their type\n\n\t\t\tconst groupedPrimitives = groupPrimitives( primitives );\n\n\t\t\tfor ( const type in groupedPrimitives ) {\n\n\t\t\t\tconst primitiveType = groupedPrimitives[ type ];\n\n\t\t\t\t// second, ensure consistent uv coordinates for each type of primitives (polylist,triangles or lines)\n\n\t\t\t\tcheckUVCoordinates( primitiveType );\n\n\t\t\t\t// third, create a buffer geometry for each type of primitives\n\n\t\t\t\tbuild[ type ] = buildGeometryType( primitiveType, sources, vertices );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryType( primitives, sources, vertices ) {\n\n\t\t\tconst build = {};\n\n\t\t\tconst position = { array: [], stride: 0 };\n\t\t\tconst normal = { array: [], stride: 0 };\n\t\t\tconst uv = { array: [], stride: 0 };\n\t\t\tconst uv1 = { array: [], stride: 0 };\n\t\t\tconst color = { array: [], stride: 0 };\n\n\t\t\tconst skinIndex = { array: [], stride: 4 };\n\t\t\tconst skinWeight = { array: [], stride: 4 };\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst materialKeys = [];\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let p = 0; p < primitives.length; p ++ ) {\n\n\t\t\t\tconst primitive = primitives[ p ];\n\t\t\t\tconst inputs = primitive.inputs;\n\n\t\t\t\t// groups\n\n\t\t\t\tlet count = 0;\n\n\t\t\t\tswitch ( primitive.type ) {\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\t\tcount = primitive.count * 2;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\t\tcount = primitive.count * 3;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'polylist':\n\n\t\t\t\t\t\tfor ( let g = 0; g < primitive.count; g ++ ) {\n\n\t\t\t\t\t\t\tconst vc = primitive.vcount[ g ];\n\n\t\t\t\t\t\t\tswitch ( vc ) {\n\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\tcount += 3; // single triangle\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t\tcount += 6; // quad, subdivided into two triangles\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tcount += ( vc - 2 ) * 3; // polylist with more than four vertices\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unknow primitive type:', primitive.type );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addGroup( start, count, p );\n\t\t\t\tstart += count;\n\n\t\t\t\t// material\n\n\t\t\t\tif ( primitive.material ) {\n\n\t\t\t\t\tmaterialKeys.push( primitive.material );\n\n\t\t\t\t}\n\n\t\t\t\t// geometry data\n\n\t\t\t\tfor ( const name in inputs ) {\n\n\t\t\t\t\tconst input = inputs[ name ];\n\n\t\t\t\t\tswitch ( name )\t{\n\n\t\t\t\t\t\tcase 'VERTEX':\n\t\t\t\t\t\t\tfor ( const key in vertices ) {\n\n\t\t\t\t\t\t\t\tconst id = vertices[ key ];\n\n\t\t\t\t\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\t\t\t\t\tcase 'POSITION':\n\t\t\t\t\t\t\t\t\t\tconst prevLength = position.array.length;\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, position.array );\n\t\t\t\t\t\t\t\t\t\tposition.stride = sources[ id ].stride;\n\n\t\t\t\t\t\t\t\t\t\tif ( sources.skinWeights && sources.skinIndices ) {\n\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinIndices, input.offset, skinIndex.array );\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinWeights, input.offset, skinWeight.array );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// see #3803\n\n\t\t\t\t\t\t\t\t\t\tif ( primitive.hasUV === false && primitives.uvsNeedsFix === true ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst count = ( position.array.length - prevLength ) / position.stride;\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// fill missing uv coordinates\n\n\t\t\t\t\t\t\t\t\t\t\t\tuv.array.push( 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, normal.array );\n\t\t\t\t\t\t\t\t\t\tnormal.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, color.array );\n\t\t\t\t\t\t\t\t\t\tcolor.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, uv.array );\n\t\t\t\t\t\t\t\t\t\tuv.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'TEXCOORD1':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, uv1.array );\n\t\t\t\t\t\t\t\t\t\tuv.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Semantic \"%s\" not handled in geometry build process.', key );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, normal.array );\n\t\t\t\t\t\t\tnormal.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, color.array, true );\n\t\t\t\t\t\t\tcolor.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, uv.array );\n\t\t\t\t\t\t\tuv.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD1':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, uv1.array );\n\t\t\t\t\t\t\tuv1.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tif ( position.array.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position.array, position.stride ) );\n\t\t\tif ( normal.array.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal.array, normal.stride ) );\n\t\t\tif ( color.array.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color.array, color.stride ) );\n\t\t\tif ( uv.array.length > 0 ) geometry.setAttribute( 'uv', new Float32BufferAttribute( uv.array, uv.stride ) );\n\t\t\tif ( uv1.array.length > 0 ) geometry.setAttribute( 'uv1', new Float32BufferAttribute( uv1.array, uv1.stride ) );\n\n\t\t\tif ( skinIndex.array.length > 0 ) geometry.setAttribute( 'skinIndex', new Float32BufferAttribute( skinIndex.array, skinIndex.stride ) );\n\t\t\tif ( skinWeight.array.length > 0 ) geometry.setAttribute( 'skinWeight', new Float32BufferAttribute( skinWeight.array, skinWeight.stride ) );\n\n\t\t\tbuild.data = geometry;\n\t\t\tbuild.type = primitives[ 0 ].type;\n\t\t\tbuild.materialKeys = materialKeys;\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryData( primitive, source, offset, array, isColor = false ) {\n\n\t\t\tconst indices = primitive.p;\n\t\t\tconst stride = primitive.stride;\n\t\t\tconst vcount = primitive.vcount;\n\n\t\t\tfunction pushVector( i ) {\n\n\t\t\t\tlet index = indices[ i + offset ] * sourceStride;\n\t\t\t\tconst length = index + sourceStride;\n\n\t\t\t\tfor ( ; index < length; index ++ ) {\n\n\t\t\t\t\tarray.push( sourceArray[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( isColor ) {\n\n\t\t\t\t\t// convert the vertex colors from srgb to linear if present\n\t\t\t\t\tconst startIndex = array.length - sourceStride - 1;\n\t\t\t\t\ttempColor.setRGB(\n\t\t\t\t\t\tarray[ startIndex + 0 ],\n\t\t\t\t\t\tarray[ startIndex + 1 ],\n\t\t\t\t\t\tarray[ startIndex + 2 ]\n\t\t\t\t\t).convertSRGBToLinear();\n\n\t\t\t\t\tarray[ startIndex + 0 ] = tempColor.r;\n\t\t\t\t\tarray[ startIndex + 1 ] = tempColor.g;\n\t\t\t\t\tarray[ startIndex + 2 ] = tempColor.b;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst sourceArray = source.array;\n\t\t\tconst sourceStride = source.stride;\n\n\t\t\tif ( primitive.vcount !== undefined ) {\n\n\t\t\t\tlet index = 0;\n\n\t\t\t\tfor ( let i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst count = vcount[ i ];\n\n\t\t\t\t\tif ( count === 4 ) {\n\n\t\t\t\t\t\tconst a = index + stride * 0;\n\t\t\t\t\t\tconst b = index + stride * 1;\n\t\t\t\t\t\tconst c = index + stride * 2;\n\t\t\t\t\t\tconst d = index + stride * 3;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( d );\n\t\t\t\t\t\tpushVector( b ); pushVector( c ); pushVector( d );\n\n\t\t\t\t\t} else if ( count === 3 ) {\n\n\t\t\t\t\t\tconst a = index + stride * 0;\n\t\t\t\t\t\tconst b = index + stride * 1;\n\t\t\t\t\t\tconst c = index + stride * 2;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( c );\n\n\t\t\t\t\t} else if ( count > 4 ) {\n\n\t\t\t\t\t\tfor ( let k = 1, kl = ( count - 2 ); k <= kl; k ++ ) {\n\n\t\t\t\t\t\t\tconst a = index + stride * 0;\n\t\t\t\t\t\t\tconst b = index + stride * k;\n\t\t\t\t\t\t\tconst c = index + stride * ( k + 1 );\n\n\t\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( c );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tindex += stride * count;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += stride ) {\n\n\t\t\t\t\tpushVector( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getGeometry( id ) {\n\n\t\t\treturn getBuild( library.geometries[ id ], buildGeometry );\n\n\t\t}\n\n\t\t// kinematics\n\n\t\tfunction parseKinematicsModel( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tjoints: {},\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tparseKinematicsTechniqueCommon( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsModels[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildKinematicsModel( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsModel( id ) {\n\n\t\t\treturn getBuild( library.kinematicsModels[ id ], buildKinematicsModel );\n\n\t\t}\n\n\t\tfunction parseKinematicsTechniqueCommon( xml, data ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'joint':\n\t\t\t\t\t\tdata.joints[ child.getAttribute( 'sid' ) ] = parseKinematicsJoint( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseKinematicsJoint( xml ) {\n\n\t\t\tlet data;\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\tdata = parseKinematicsJointParameter( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsJointParameter( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\taxis: new Vector3(),\n\t\t\t\tlimits: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 0\n\t\t\t\t},\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tstatic: false,\n\t\t\t\tzeroPosition: 0,\n\t\t\t\tmiddlePosition: 0\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tconst array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.axis.fromArray( array );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'limits':\n\t\t\t\t\t\tconst max = child.getElementsByTagName( 'max' )[ 0 ];\n\t\t\t\t\t\tconst min = child.getElementsByTagName( 'min' )[ 0 ];\n\n\t\t\t\t\t\tdata.limits.max = parseFloat( max.textContent );\n\t\t\t\t\t\tdata.limits.min = parseFloat( min.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// if min is equal to or greater than max, consider the joint static\n\n\t\t\tif ( data.limits.min >= data.limits.max ) {\n\n\t\t\t\tdata.static = true;\n\n\t\t\t}\n\n\t\t\t// calculate middle position\n\n\t\t\tdata.middlePosition = ( data.limits.min + data.limits.max ) / 2.0;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsLink( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tattachments: [],\n\t\t\t\ttransforms: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'attachment_full':\n\t\t\t\t\t\tdata.attachments.push( parseKinematicsAttachment( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsAttachment( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tjoint: xml.getAttribute( 'joint' ).split( '/' ).pop(),\n\t\t\t\ttransforms: [],\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsTransform( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\ttype: xml.nodeName\n\t\t\t};\n\n\t\t\tconst array = parseFloats( xml.textContent );\n\n\t\t\tswitch ( data.type ) {\n\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tdata.obj = new Matrix4();\n\t\t\t\t\tdata.obj.fromArray( array ).transpose();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tdata.obj = new Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tdata.obj = new Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tdata.angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// physics\n\n\t\tfunction parsePhysicsModel( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\trigidBodies: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'rigid_body':\n\t\t\t\t\t\tdata.rigidBodies[ child.getAttribute( 'name' ) ] = {};\n\t\t\t\t\t\tparsePhysicsRigidBody( child, data.rigidBodies[ child.getAttribute( 'name' ) ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.physicsModels[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parsePhysicsRigidBody( xml, data ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tparsePhysicsTechniqueCommon( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parsePhysicsTechniqueCommon( xml, data ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'inertia':\n\t\t\t\t\t\tdata.inertia = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mass':\n\t\t\t\t\t\tdata.mass = parseFloats( child.textContent )[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// scene\n\n\t\tfunction parseKinematicsScene( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tbindJointAxis: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_joint_axis':\n\t\t\t\t\t\tdata.bindJointAxis.push( parseKinematicsBindJointAxis( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsScenes[ parseId( xml.getAttribute( 'url' ) ) ] = data;\n\n\t\t}\n\n\t\tfunction parseKinematicsBindJointAxis( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\ttarget: xml.getAttribute( 'target' ).split( '/' ).pop()\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tconst param = child.getElementsByTagName( 'param' )[ 0 ];\n\t\t\t\t\t\tdata.axis = param.textContent;\n\t\t\t\t\t\tconst tmpJointIndex = data.axis.split( 'inst_' ).pop().split( 'axis' )[ 0 ];\n\t\t\t\t\t\tdata.jointIndex = tmpJointIndex.substring( 0, tmpJointIndex.length - 1 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildKinematicsScene( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsScene( id ) {\n\n\t\t\treturn getBuild( library.kinematicsScenes[ id ], buildKinematicsScene );\n\n\t\t}\n\n\t\tfunction setupKinematics() {\n\n\t\t\tconst kinematicsModelId = Object.keys( library.kinematicsModels )[ 0 ];\n\t\t\tconst kinematicsSceneId = Object.keys( library.kinematicsScenes )[ 0 ];\n\t\t\tconst visualSceneId = Object.keys( library.visualScenes )[ 0 ];\n\n\t\t\tif ( kinematicsModelId === undefined || kinematicsSceneId === undefined ) return;\n\n\t\t\tconst kinematicsModel = getKinematicsModel( kinematicsModelId );\n\t\t\tconst kinematicsScene = getKinematicsScene( kinematicsSceneId );\n\t\t\tconst visualScene = getVisualScene( visualSceneId );\n\n\t\t\tconst bindJointAxis = kinematicsScene.bindJointAxis;\n\t\t\tconst jointMap = {};\n\n\t\t\tfor ( let i = 0, l = bindJointAxis.length; i < l; i ++ ) {\n\n\t\t\t\tconst axis = bindJointAxis[ i ];\n\n\t\t\t\t// the result of the following query is an element of type 'translate', 'rotate','scale' or 'matrix'\n\n\t\t\t\tconst targetElement = collada.querySelector( '[sid=\"' + axis.target + '\"]' );\n\n\t\t\t\tif ( targetElement ) {\n\n\t\t\t\t\t// get the parent of the transform element\n\n\t\t\t\t\tconst parentVisualElement = targetElement.parentElement;\n\n\t\t\t\t\t// connect the joint of the kinematics model with the element in the visual scene\n\n\t\t\t\t\tconnect( axis.jointIndex, parentVisualElement );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction connect( jointIndex, visualElement ) {\n\n\t\t\t\tconst visualElementName = visualElement.getAttribute( 'name' );\n\t\t\t\tconst joint = kinematicsModel.joints[ jointIndex ];\n\n\t\t\t\tvisualScene.traverse( function ( object ) {\n\n\t\t\t\t\tif ( object.name === visualElementName ) {\n\n\t\t\t\t\t\tjointMap[ jointIndex ] = {\n\t\t\t\t\t\t\tobject: object,\n\t\t\t\t\t\t\ttransforms: buildTransformList( visualElement ),\n\t\t\t\t\t\t\tjoint: joint,\n\t\t\t\t\t\t\tposition: joint.zeroPosition\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst m0 = new Matrix4();\n\n\t\t\tkinematics = {\n\n\t\t\t\tjoints: kinematicsModel && kinematicsModel.joints,\n\n\t\t\t\tgetJointValue: function ( jointIndex ) {\n\n\t\t\t\t\tconst jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\treturn jointData.position;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' doesn\\'t exist.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetJointValue: function ( jointIndex, value ) {\n\n\t\t\t\t\tconst jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\tconst joint = jointData.joint;\n\n\t\t\t\t\t\tif ( value > joint.limits.max || value < joint.limits.min ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' value ' + value + ' outside of limits (min: ' + joint.limits.min + ', max: ' + joint.limits.max + ').' );\n\n\t\t\t\t\t\t} else if ( joint.static ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' is static.' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconst object = jointData.object;\n\t\t\t\t\t\t\tconst axis = joint.axis;\n\t\t\t\t\t\t\tconst transforms = jointData.transforms;\n\n\t\t\t\t\t\t\tmatrix.identity();\n\n\t\t\t\t\t\t\t// each update, we have to apply all transforms in the correct order\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < transforms.length; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst transform = transforms[ i ];\n\n\t\t\t\t\t\t\t\t// if there is a connection of the transform node with a joint, apply the joint value\n\n\t\t\t\t\t\t\t\tif ( transform.sid && transform.sid.indexOf( jointIndex ) !== - 1 ) {\n\n\t\t\t\t\t\t\t\t\tswitch ( joint.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( axis, MathUtils.degToRad( value ) ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( axis.x * value, axis.y * value, axis.z * value ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unknown joint type: ' + joint.type );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tswitch ( transform.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( transform.obj.x, transform.obj.y, transform.obj.z ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.scale( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( transform.obj, transform.angle ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tobject.matrix.copy( matrix );\n\t\t\t\t\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\t\t\t\t\tjointMap[ jointIndex ].position = value;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.log( 'THREE.ColladaLoader: ' + jointIndex + ' does not exist.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction buildTransformList( node ) {\n\n\t\t\tconst transforms = [];\n\n\t\t\tconst xml = collada.querySelector( '[id=\"' + node.id + '\"]' );\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tlet array, vector;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tconst matrix = new Matrix4().fromArray( array ).transpose();\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: matrix\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tvector = new Vector3().fromArray( array );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tvector = new Vector3().fromArray( array );\n\t\t\t\t\t\tconst angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector,\n\t\t\t\t\t\t\tangle: angle\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn transforms;\n\n\t\t}\n\n\t\t// nodes\n\n\t\tfunction prepareNodes( xml ) {\n\n\t\t\tconst elements = xml.getElementsByTagName( 'node' );\n\n\t\t\t// ensure all node elements have id attributes\n\n\t\t\tfor ( let i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tconst element = elements[ i ];\n\n\t\t\t\tif ( element.hasAttribute( 'id' ) === false ) {\n\n\t\t\t\t\telement.setAttribute( 'id', generateId() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst matrix = new Matrix4();\n\t\tconst vector = new Vector3();\n\n\t\tfunction parseNode( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\ttype: xml.getAttribute( 'type' ),\n\t\t\t\tid: xml.getAttribute( 'id' ),\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tmatrix: new Matrix4(),\n\t\t\t\tnodes: [],\n\t\t\t\tinstanceCameras: [],\n\t\t\t\tinstanceControllers: [],\n\t\t\t\tinstanceLights: [],\n\t\t\t\tinstanceGeometries: [],\n\t\t\t\tinstanceNodes: [],\n\t\t\t\ttransforms: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tlet array;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'node':\n\t\t\t\t\t\tdata.nodes.push( child.getAttribute( 'id' ) );\n\t\t\t\t\t\tparseNode( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_camera':\n\t\t\t\t\t\tdata.instanceCameras.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_controller':\n\t\t\t\t\t\tdata.instanceControllers.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_light':\n\t\t\t\t\t\tdata.instanceLights.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_geometry':\n\t\t\t\t\t\tdata.instanceGeometries.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_node':\n\t\t\t\t\t\tdata.instanceNodes.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.fromArray( array ).transpose() );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tvector.fromArray( array );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeTranslation( vector.x, vector.y, vector.z ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tconst angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeRotationAxis( vector.fromArray( array ), angle ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.scale( vector.fromArray( array ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasNode( data.id ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.', data.id );\n\n\t\t\t} else {\n\n\t\t\t\tlibrary.nodes[ data.id ] = data;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseNodeInstance( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tid: parseId( xml.getAttribute( 'url' ) ),\n\t\t\t\tmaterials: {},\n\t\t\t\tskeletons: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_material':\n\t\t\t\t\t\tconst instances = child.getElementsByTagName( 'instance_material' );\n\n\t\t\t\t\t\tfor ( let j = 0; j < instances.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst instance = instances[ j ];\n\t\t\t\t\t\t\tconst symbol = instance.getAttribute( 'symbol' );\n\t\t\t\t\t\t\tconst target = instance.getAttribute( 'target' );\n\n\t\t\t\t\t\t\tdata.materials[ symbol ] = parseId( target );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skeleton':\n\t\t\t\t\t\tdata.skeletons.push( parseId( child.textContent ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildSkeleton( skeletons, joints ) {\n\n\t\t\tconst boneData = [];\n\t\t\tconst sortedBoneData = [];\n\n\t\t\tlet i, j, data;\n\n\t\t\t// a skeleton can have multiple root bones. collada expresses this\n\t\t\t// situtation with multiple \"skeleton\" tags per controller instance\n\n\t\t\tfor ( i = 0; i < skeletons.length; i ++ ) {\n\n\t\t\t\tconst skeleton = skeletons[ i ];\n\n\t\t\t\tlet root;\n\n\t\t\t\tif ( hasNode( skeleton ) ) {\n\n\t\t\t\t\troot = getNode( skeleton );\n\t\t\t\t\tbuildBoneHierarchy( root, joints, boneData );\n\n\t\t\t\t} else if ( hasVisualScene( skeleton ) ) {\n\n\t\t\t\t\t// handle case where the skeleton refers to the visual scene (#13335)\n\n\t\t\t\t\tconst visualScene = library.visualScenes[ skeleton ];\n\t\t\t\t\tconst children = visualScene.children;\n\n\t\t\t\t\tfor ( let j = 0; j < children.length; j ++ ) {\n\n\t\t\t\t\t\tconst child = children[ j ];\n\n\t\t\t\t\t\tif ( child.type === 'JOINT' ) {\n\n\t\t\t\t\t\t\tconst root = getNode( child.id );\n\t\t\t\t\t\t\tbuildBoneHierarchy( root, joints, boneData );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.ColladaLoader: Unable to find root bone of skeleton with ID:', skeleton );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// sort bone data (the order is defined in the corresponding controller)\n\n\t\t\tfor ( i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < boneData.length; j ++ ) {\n\n\t\t\t\t\tdata = boneData[ j ];\n\n\t\t\t\t\tif ( data.bone.name === joints[ i ].name ) {\n\n\t\t\t\t\t\tsortedBoneData[ i ] = data;\n\t\t\t\t\t\tdata.processed = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add unprocessed bone data at the end of the list\n\n\t\t\tfor ( i = 0; i < boneData.length; i ++ ) {\n\n\t\t\t\tdata = boneData[ i ];\n\n\t\t\t\tif ( data.processed === false ) {\n\n\t\t\t\t\tsortedBoneData.push( data );\n\t\t\t\t\tdata.processed = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup arrays for skeleton creation\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( i = 0; i < sortedBoneData.length; i ++ ) {\n\n\t\t\t\tdata = sortedBoneData[ i ];\n\n\t\t\t\tbones.push( data.bone );\n\t\t\t\tboneInverses.push( data.boneInverse );\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t}\n\n\t\tfunction buildBoneHierarchy( root, joints, boneData ) {\n\n\t\t\t// setup bone data from visual scene\n\n\t\t\troot.traverse( function ( object ) {\n\n\t\t\t\tif ( object.isBone === true ) {\n\n\t\t\t\t\tlet boneInverse;\n\n\t\t\t\t\t// retrieve the boneInverse from the controller data\n\n\t\t\t\t\tfor ( let i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\t\t\tconst joint = joints[ i ];\n\n\t\t\t\t\t\tif ( joint.name === object.name ) {\n\n\t\t\t\t\t\t\tboneInverse = joint.boneInverse;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( boneInverse === undefined ) {\n\n\t\t\t\t\t\t// Unfortunately, there can be joints in the visual scene that are not part of the\n\t\t\t\t\t\t// corresponding controller. In this case, we have to create a dummy boneInverse matrix\n\t\t\t\t\t\t// for the respective bone. This bone won't affect any vertices, because there are no skin indices\n\t\t\t\t\t\t// and weights defined for it. But we still have to add the bone to the sorted bone list in order to\n\t\t\t\t\t\t// ensure a correct animation of the model.\n\n\t\t\t\t\t\tboneInverse = new Matrix4();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.push( { bone: object, boneInverse: boneInverse, processed: false } );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction buildNode( data ) {\n\n\t\t\tconst objects = [];\n\n\t\t\tconst matrix = data.matrix;\n\t\t\tconst nodes = data.nodes;\n\t\t\tconst type = data.type;\n\t\t\tconst instanceCameras = data.instanceCameras;\n\t\t\tconst instanceControllers = data.instanceControllers;\n\t\t\tconst instanceLights = data.instanceLights;\n\t\t\tconst instanceGeometries = data.instanceGeometries;\n\t\t\tconst instanceNodes = data.instanceNodes;\n\n\t\t\t// nodes\n\n\t\t\tfor ( let i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( nodes[ i ] ) );\n\n\t\t\t}\n\n\t\t\t// instance cameras\n\n\t\t\tfor ( let i = 0, l = instanceCameras.length; i < l; i ++ ) {\n\n\t\t\t\tconst instanceCamera = getCamera( instanceCameras[ i ] );\n\n\t\t\t\tif ( instanceCamera !== null ) {\n\n\t\t\t\t\tobjects.push( instanceCamera.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance controllers\n\n\t\t\tfor ( let i = 0, l = instanceControllers.length; i < l; i ++ ) {\n\n\t\t\t\tconst instance = instanceControllers[ i ];\n\t\t\t\tconst controller = getController( instance.id );\n\t\t\t\tconst geometries = getGeometry( controller.id );\n\t\t\t\tconst newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tconst skeletons = instance.skeletons;\n\t\t\t\tconst joints = controller.skin.joints;\n\n\t\t\t\tconst skeleton = buildSkeleton( skeletons, joints );\n\n\t\t\t\tfor ( let j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst object = newObjects[ j ];\n\n\t\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t\tobject.bind( skeleton, controller.skin.bindMatrix );\n\t\t\t\t\t\tobject.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects.push( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance lights\n\n\t\t\tfor ( let i = 0, l = instanceLights.length; i < l; i ++ ) {\n\n\t\t\t\tconst instanceLight = getLight( instanceLights[ i ] );\n\n\t\t\t\tif ( instanceLight !== null ) {\n\n\t\t\t\t\tobjects.push( instanceLight.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance geometries\n\n\t\t\tfor ( let i = 0, l = instanceGeometries.length; i < l; i ++ ) {\n\n\t\t\t\tconst instance = instanceGeometries[ i ];\n\n\t\t\t\t// a single geometry instance in collada can lead to multiple object3Ds.\n\t\t\t\t// this is the case when primitives are combined like triangles and lines\n\n\t\t\t\tconst geometries = getGeometry( instance.id );\n\t\t\t\tconst newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tfor ( let j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tobjects.push( newObjects[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance nodes\n\n\t\t\tfor ( let i = 0, l = instanceNodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( instanceNodes[ i ] ).clone() );\n\n\t\t\t}\n\n\t\t\tlet object;\n\n\t\t\tif ( nodes.length === 0 && objects.length === 1 ) {\n\n\t\t\t\tobject = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tobject = ( type === 'JOINT' ) ? new Bone() : new Group();\n\n\t\t\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t\t\tobject.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tobject.name = ( type === 'JOINT' ) ? data.sid : data.name;\n\t\t\tobject.matrix.copy( matrix );\n\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tconst fallbackMaterial = new MeshBasicMaterial( {\n\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\tcolor: 0xff00ff\n\t\t} );\n\n\t\tfunction resolveMaterialBinding( keys, instanceMaterials ) {\n\n\t\t\tconst materials = [];\n\n\t\t\tfor ( let i = 0, l = keys.length; i < l; i ++ ) {\n\n\t\t\t\tconst id = instanceMaterials[ keys[ i ] ];\n\n\t\t\t\tif ( id === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Material with key %s not found. Apply fallback material.', keys[ i ] );\n\t\t\t\t\tmaterials.push( fallbackMaterial );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials.push( getMaterial( id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materials;\n\n\t\t}\n\n\t\tfunction buildObjects( geometries, instanceMaterials ) {\n\n\t\t\tconst objects = [];\n\n\t\t\tfor ( const type in geometries ) {\n\n\t\t\t\tconst geometry = geometries[ type ];\n\n\t\t\t\tconst materials = resolveMaterialBinding( geometry.materialKeys, instanceMaterials );\n\n\t\t\t\t// handle case if no materials are defined\n\n\t\t\t\tif ( materials.length === 0 ) {\n\n\t\t\t\t\tif ( type === 'lines' || type === 'linestrips' ) {\n\n\t\t\t\t\t\tmaterials.push( new LineBasicMaterial() );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials.push( new MeshPhongMaterial() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Collada allows to use phong and lambert materials with lines. Replacing these cases with LineBasicMaterial.\n\n\t\t\t\tif ( type === 'lines' || type === 'linestrips' ) {\n\n\t\t\t\t\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\t\t\tif ( material.isMeshPhongMaterial === true || material.isMeshLambertMaterial === true ) {\n\n\t\t\t\t\t\t\tconst lineMaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t\t// copy compatible properties\n\n\t\t\t\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\t\t\t\tlineMaterial.opacity = material.opacity;\n\t\t\t\t\t\t\tlineMaterial.transparent = material.transparent;\n\n\t\t\t\t\t\t\t// replace material\n\n\t\t\t\t\t\t\tmaterials[ i ] = lineMaterial;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// regard skinning\n\n\t\t\t\tconst skinning = ( geometry.data.attributes.skinIndex !== undefined );\n\n\t\t\t\t// choose between a single or multi materials (material array)\n\n\t\t\t\tconst material = ( materials.length === 1 ) ? materials[ 0 ] : materials;\n\n\t\t\t\t// now create a specific 3D object\n\n\t\t\t\tlet object;\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\t\tobject = new LineSegments( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\t\tobject = new Line( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\t\tif ( skinning ) {\n\n\t\t\t\t\t\t\tobject = new SkinnedMesh( geometry.data, material );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tobject = new Mesh( geometry.data, material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tobjects.push( object );\n\n\t\t\t}\n\n\t\t\treturn objects;\n\n\t\t}\n\n\t\tfunction hasNode( id ) {\n\n\t\t\treturn library.nodes[ id ] !== undefined;\n\n\t\t}\n\n\t\tfunction getNode( id ) {\n\n\t\t\treturn getBuild( library.nodes[ id ], buildNode );\n\n\t\t}\n\n\t\t// visual scenes\n\n\t\tfunction parseVisualScene( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tchildren: []\n\t\t\t};\n\n\t\t\tprepareNodes( xml );\n\n\t\t\tconst elements = getElementsByTagName( xml, 'node' );\n\n\t\t\tfor ( let i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tdata.children.push( parseNode( elements[ i ] ) );\n\n\t\t\t}\n\n\t\t\tlibrary.visualScenes[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildVisualScene( data ) {\n\n\t\t\tconst group = new Group();\n\t\t\tgroup.name = data.name;\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tgroup.add( getNode( child.id ) );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction hasVisualScene( id ) {\n\n\t\t\treturn library.visualScenes[ id ] !== undefined;\n\n\t\t}\n\n\t\tfunction getVisualScene( id ) {\n\n\t\t\treturn getBuild( library.visualScenes[ id ], buildVisualScene );\n\n\t\t}\n\n\t\t// scenes\n\n\t\tfunction parseScene( xml ) {\n\n\t\t\tconst instance = getElementsByTagName( xml, 'instance_visual_scene' )[ 0 ];\n\t\t\treturn getVisualScene( parseId( instance.getAttribute( 'url' ) ) );\n\n\t\t}\n\n\t\tfunction setupAnimations() {\n\n\t\t\tconst clips = library.clips;\n\n\t\t\tif ( isEmpty( clips ) === true ) {\n\n\t\t\t\tif ( isEmpty( library.animations ) === false ) {\n\n\t\t\t\t\t// if there are animations but no clips, we create a default clip for playback\n\n\t\t\t\t\tconst tracks = [];\n\n\t\t\t\t\tfor ( const id in library.animations ) {\n\n\t\t\t\t\t\tconst animationTracks = getAnimation( id );\n\n\t\t\t\t\t\tfor ( let i = 0, l = animationTracks.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\ttracks.push( animationTracks[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tanimations.push( new AnimationClip( 'default', - 1, tracks ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( const id in clips ) {\n\n\t\t\t\t\tanimations.push( getAnimationClip( id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// convert the parser error element into text with each child elements text\n\t\t// separated by new lines.\n\n\t\tfunction parserErrorToText( parserError ) {\n\n\t\t\tlet result = '';\n\t\t\tconst stack = [ parserError ];\n\n\t\t\twhile ( stack.length ) {\n\n\t\t\t\tconst node = stack.shift();\n\n\t\t\t\tif ( node.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t\t\tresult += node.textContent;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresult += '\\n';\n\t\t\t\t\tstack.push.apply( stack, node.childNodes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result.trim();\n\n\t\t}\n\n\t\tif ( text.length === 0 ) {\n\n\t\t\treturn { scene: new Scene() };\n\n\t\t}\n\n\t\tconst xml = new DOMParser().parseFromString( text, 'application/xml' );\n\n\t\tconst collada = getElementsByTagName( xml, 'COLLADA' )[ 0 ];\n\n\t\tconst parserError = xml.getElementsByTagName( 'parsererror' )[ 0 ];\n\t\tif ( parserError !== undefined ) {\n\n\t\t\t// Chrome will return parser error with a div in it\n\n\t\t\tconst errorElement = getElementsByTagName( parserError, 'div' )[ 0 ];\n\t\t\tlet errorText;\n\n\t\t\tif ( errorElement ) {\n\n\t\t\t\terrorText = errorElement.textContent;\n\n\t\t\t} else {\n\n\t\t\t\terrorText = parserErrorToText( parserError );\n\n\t\t\t}\n\n\t\t\tconsole.error( 'THREE.ColladaLoader: Failed to parse collada file.\\n', errorText );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// metadata\n\n\t\tconst version = collada.getAttribute( 'version' );\n\t\tconsole.debug( 'THREE.ColladaLoader: File version', version );\n\n\t\tconst asset = parseAsset( getElementsByTagName( collada, 'asset' )[ 0 ] );\n\t\tconst textureLoader = new TextureLoader( this.manager );\n\t\ttextureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\tlet tgaLoader;\n\n\t\tif ( TGALoader ) {\n\n\t\t\ttgaLoader = new TGALoader( this.manager );\n\t\t\ttgaLoader.setPath( this.resourcePath || path );\n\n\t\t}\n\n\t\t//\n\n\t\tconst tempColor = new Color();\n\t\tconst animations = [];\n\t\tlet kinematics = {};\n\t\tlet count = 0;\n\n\t\t//\n\n\t\tconst library = {\n\t\t\tanimations: {},\n\t\t\tclips: {},\n\t\t\tcontrollers: {},\n\t\t\timages: {},\n\t\t\teffects: {},\n\t\t\tmaterials: {},\n\t\t\tcameras: {},\n\t\t\tlights: {},\n\t\t\tgeometries: {},\n\t\t\tnodes: {},\n\t\t\tvisualScenes: {},\n\t\t\tkinematicsModels: {},\n\t\t\tphysicsModels: {},\n\t\t\tkinematicsScenes: {}\n\t\t};\n\n\t\tparseLibrary( collada, 'library_animations', 'animation', parseAnimation );\n\t\tparseLibrary( collada, 'library_animation_clips', 'animation_clip', parseAnimationClip );\n\t\tparseLibrary( collada, 'library_controllers', 'controller', parseController );\n\t\tparseLibrary( collada, 'library_images', 'image', parseImage );\n\t\tparseLibrary( collada, 'library_effects', 'effect', parseEffect );\n\t\tparseLibrary( collada, 'library_materials', 'material', parseMaterial );\n\t\tparseLibrary( collada, 'library_cameras', 'camera', parseCamera );\n\t\tparseLibrary( collada, 'library_lights', 'light', parseLight );\n\t\tparseLibrary( collada, 'library_geometries', 'geometry', parseGeometry );\n\t\tparseLibrary( collada, 'library_nodes', 'node', parseNode );\n\t\tparseLibrary( collada, 'library_visual_scenes', 'visual_scene', parseVisualScene );\n\t\tparseLibrary( collada, 'library_kinematics_models', 'kinematics_model', parseKinematicsModel );\n\t\tparseLibrary( collada, 'library_physics_models', 'physics_model', parsePhysicsModel );\n\t\tparseLibrary( collada, 'scene', 'instance_kinematics_scene', parseKinematicsScene );\n\n\t\tbuildLibrary( library.animations, buildAnimation );\n\t\tbuildLibrary( library.clips, buildAnimationClip );\n\t\tbuildLibrary( library.controllers, buildController );\n\t\tbuildLibrary( library.images, buildImage );\n\t\tbuildLibrary( library.effects, buildEffect );\n\t\tbuildLibrary( library.materials, buildMaterial );\n\t\tbuildLibrary( library.cameras, buildCamera );\n\t\tbuildLibrary( library.lights, buildLight );\n\t\tbuildLibrary( library.geometries, buildGeometry );\n\t\tbuildLibrary( library.visualScenes, buildVisualScene );\n\n\t\tsetupAnimations();\n\t\tsetupKinematics();\n\n\t\tconst scene = parseScene( getElementsByTagName( collada, 'scene' )[ 0 ] );\n\t\tscene.animations = animations;\n\n\t\tif ( asset.upAxis === 'Z_UP' ) {\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: You are loading an asset with a Z-UP coordinate system. The loader just rotates the asset to transform it into Y-UP. The vertex data are not converted, see #24289.' );\n\t\t\tscene.rotation.set( - Math.PI / 2, 0, 0 );\n\n\t\t}\n\n\t\tscene.scale.multiplyScalar( asset.unit );\n\n\t\treturn {\n\t\t\tget animations() {\n\n\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Please access animations over scene.animations now.' );\n\t\t\t\treturn animations;\n\n\t\t\t},\n\t\t\tkinematics: kinematics,\n\t\t\tlibrary: library,\n\t\t\tscene: scene\n\t\t};\n\n\t}\n\n}\n\nexport { ColladaLoader };\n", "import {\n\tCompressedTextureLoader,\n\tRGBAFormat,\n\tRGBA_S3TC_DXT3_Format,\n\tRGBA_S3TC_DXT5_Format,\n\tRGB_ETC1_Format,\n\tRGB_S3TC_DXT1_Format,\n\tRGB_BPTC_SIGNED_Format,\n\tRGB_BPTC_UNSIGNED_Format\n} from 'three';\n\nclass DDSLoader extends CompressedTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tparse( buffer, loadMipmaps ) {\n\n\t\tconst dds = { mipmaps: [], width: 0, height: 0, format: null, mipmapCount: 1 };\n\n\t\t// Adapted from @toji's DDS utils\n\t\t// https://github.com/toji/webgl-texture-utils/blob/master/texture-util/dds.js\n\n\t\t// All values and structures referenced from:\n\t\t// http://msdn.microsoft.com/en-us/library/bb943991.aspx/\n\n\t\tconst DDS_MAGIC = 0x20534444;\n\n\t\t// const DDSD_CAPS = 0x1;\n\t\t// const DDSD_HEIGHT = 0x2;\n\t\t// const DDSD_WIDTH = 0x4;\n\t\t// const DDSD_PITCH = 0x8;\n\t\t// const DDSD_PIXELFORMAT = 0x1000;\n\t\tconst DDSD_MIPMAPCOUNT = 0x20000;\n\t\t// const DDSD_LINEARSIZE = 0x80000;\n\t\t// const DDSD_DEPTH = 0x800000;\n\n\t\t// const DDSCAPS_COMPLEX = 0x8;\n\t\t// const DDSCAPS_MIPMAP = 0x400000;\n\t\t// const DDSCAPS_TEXTURE = 0x1000;\n\n\t\tconst DDSCAPS2_CUBEMAP = 0x200;\n\t\tconst DDSCAPS2_CUBEMAP_POSITIVEX = 0x400;\n\t\tconst DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800;\n\t\tconst DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000;\n\t\tconst DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000;\n\t\tconst DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000;\n\t\tconst DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000;\n\t\t// const DDSCAPS2_VOLUME = 0x200000;\n\n\t\t// const DDPF_ALPHAPIXELS = 0x1;\n\t\t// const DDPF_ALPHA = 0x2;\n\t\t// const DDPF_FOURCC = 0x4;\n\t\t// const DDPF_RGB = 0x40;\n\t\t// const DDPF_YUV = 0x200;\n\t\t// const DDPF_LUMINANCE = 0x20000;\n\n\t\tconst DXGI_FORMAT_BC6H_UF16 = 95;\n\t\tconst DXGI_FORMAT_BC6H_SF16 = 96;\n\n\t\tfunction fourCCToInt32( value ) {\n\n\t\t\treturn value.charCodeAt( 0 ) +\n\t\t\t\t( value.charCodeAt( 1 ) << 8 ) +\n\t\t\t\t( value.charCodeAt( 2 ) << 16 ) +\n\t\t\t\t( value.charCodeAt( 3 ) << 24 );\n\n\t\t}\n\n\t\tfunction int32ToFourCC( value ) {\n\n\t\t\treturn String.fromCharCode(\n\t\t\t\tvalue & 0xff,\n\t\t\t\t( value >> 8 ) & 0xff,\n\t\t\t\t( value >> 16 ) & 0xff,\n\t\t\t\t( value >> 24 ) & 0xff\n\t\t\t);\n\n\t\t}\n\n\t\tfunction loadARGBMip( buffer, dataOffset, width, height ) {\n\n\t\t\tconst dataLength = width * height * 4;\n\t\t\tconst srcBuffer = new Uint8Array( buffer, dataOffset, dataLength );\n\t\t\tconst byteArray = new Uint8Array( dataLength );\n\t\t\tlet dst = 0;\n\t\t\tlet src = 0;\n\t\t\tfor ( let y = 0; y < height; y ++ ) {\n\n\t\t\t\tfor ( let x = 0; x < width; x ++ ) {\n\n\t\t\t\t\tconst b = srcBuffer[ src ]; src ++;\n\t\t\t\t\tconst g = srcBuffer[ src ]; src ++;\n\t\t\t\t\tconst r = srcBuffer[ src ]; src ++;\n\t\t\t\t\tconst a = srcBuffer[ src ]; src ++;\n\t\t\t\t\tbyteArray[ dst ] = r; dst ++;\t//r\n\t\t\t\t\tbyteArray[ dst ] = g; dst ++;\t//g\n\t\t\t\t\tbyteArray[ dst ] = b; dst ++;\t//b\n\t\t\t\t\tbyteArray[ dst ] = a; dst ++;\t//a\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn byteArray;\n\n\t\t}\n\n\t\tconst FOURCC_DXT1 = fourCCToInt32( 'DXT1' );\n\t\tconst FOURCC_DXT3 = fourCCToInt32( 'DXT3' );\n\t\tconst FOURCC_DXT5 = fourCCToInt32( 'DXT5' );\n\t\tconst FOURCC_ETC1 = fourCCToInt32( 'ETC1' );\n\t\tconst FOURCC_DX10 = fourCCToInt32( 'DX10' );\n\n\t\tconst headerLengthInt = 31; // The header length in 32 bit ints\n\t\tconst extendedHeaderLengthInt = 5; // The extended header length in 32 bit ints\n\n\t\t// Offsets into the header array\n\n\t\tconst off_magic = 0;\n\n\t\tconst off_size = 1;\n\t\tconst off_flags = 2;\n\t\tconst off_height = 3;\n\t\tconst off_width = 4;\n\n\t\tconst off_mipmapCount = 7;\n\n\t\t// const off_pfFlags = 20;\n\t\tconst off_pfFourCC = 21;\n\t\tconst off_RGBBitCount = 22;\n\t\tconst off_RBitMask = 23;\n\t\tconst off_GBitMask = 24;\n\t\tconst off_BBitMask = 25;\n\t\tconst off_ABitMask = 26;\n\n\t\t// const off_caps = 27;\n\t\tconst off_caps2 = 28;\n\t\t// const off_caps3 = 29;\n\t\t// const off_caps4 = 30;\n\n\t\t// If fourCC = DX10, the extended header starts after 32\n\t\tconst off_dxgiFormat = 0;\n\n\t\t// Parse header\n\n\t\tconst header = new Int32Array( buffer, 0, headerLengthInt );\n\n\t\tif ( header[ off_magic ] !== DDS_MAGIC ) {\n\n\t\t\tconsole.error( 'THREE.DDSLoader.parse: Invalid magic number in DDS header.' );\n\t\t\treturn dds;\n\n\t\t}\n\n\t\tlet blockBytes;\n\n\t\tconst fourCC = header[ off_pfFourCC ];\n\n\t\tlet isRGBAUncompressed = false;\n\n\t\tlet dataOffset = header[ off_size ] + 4;\n\n\t\tswitch ( fourCC ) {\n\n\t\t\tcase FOURCC_DXT1:\n\n\t\t\t\tblockBytes = 8;\n\t\t\t\tdds.format = RGB_S3TC_DXT1_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_DXT3:\n\n\t\t\t\tblockBytes = 16;\n\t\t\t\tdds.format = RGBA_S3TC_DXT3_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_DXT5:\n\n\t\t\t\tblockBytes = 16;\n\t\t\t\tdds.format = RGBA_S3TC_DXT5_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_ETC1:\n\n\t\t\t\tblockBytes = 8;\n\t\t\t\tdds.format = RGB_ETC1_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_DX10:\n\n\t\t\t\tdataOffset += extendedHeaderLengthInt * 4;\n\t\t\t\tconst extendedHeader = new Int32Array( buffer, ( headerLengthInt + 1 ) * 4, extendedHeaderLengthInt );\n\t\t\t\tconst dxgiFormat = extendedHeader[ off_dxgiFormat ];\n\t\t\t\tswitch ( dxgiFormat ) {\n\n\t\t\t\t\tcase DXGI_FORMAT_BC6H_SF16: {\n\n\t\t\t\t\t\tblockBytes = 16;\n\t\t\t\t\t\tdds.format = RGB_BPTC_SIGNED_Format;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcase DXGI_FORMAT_BC6H_UF16: {\n\n\t\t\t\t\t\tblockBytes = 16;\n\t\t\t\t\t\tdds.format = RGB_BPTC_UNSIGNED_Format;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault: {\n\n\t\t\t\t\t\tconsole.error( 'THREE.DDSLoader.parse: Unsupported DXGI_FORMAT code ', dxgiFormat );\n\t\t\t\t\t\treturn dds;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tif ( header[ off_RGBBitCount ] === 32\n\t\t\t\t\t&& header[ off_RBitMask ] & 0xff0000\n\t\t\t\t\t&& header[ off_GBitMask ] & 0xff00\n\t\t\t\t\t&& header[ off_BBitMask ] & 0xff\n\t\t\t\t\t&& header[ off_ABitMask ] & 0xff000000 ) {\n\n\t\t\t\t\tisRGBAUncompressed = true;\n\t\t\t\t\tblockBytes = 64;\n\t\t\t\t\tdds.format = RGBAFormat;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.DDSLoader.parse: Unsupported FourCC code ', int32ToFourCC( fourCC ) );\n\t\t\t\t\treturn dds;\n\n\t\t\t\t}\n\n\t\t}\n\n\t\tdds.mipmapCount = 1;\n\n\t\tif ( header[ off_flags ] & DDSD_MIPMAPCOUNT && loadMipmaps !== false ) {\n\n\t\t\tdds.mipmapCount = Math.max( 1, header[ off_mipmapCount ] );\n\n\t\t}\n\n\t\tconst caps2 = header[ off_caps2 ];\n\t\tdds.isCubemap = caps2 & DDSCAPS2_CUBEMAP ? true : false;\n\t\tif ( dds.isCubemap && (\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEX ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEY ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ )\n\t\t) ) {\n\n\t\t\tconsole.error( 'THREE.DDSLoader.parse: Incomplete cubemap faces' );\n\t\t\treturn dds;\n\n\t\t}\n\n\t\tdds.width = header[ off_width ];\n\t\tdds.height = header[ off_height ];\n\n\t\t// Extract mipmaps buffers\n\n\t\tconst faces = dds.isCubemap ? 6 : 1;\n\n\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\tlet width = dds.width;\n\t\t\tlet height = dds.height;\n\n\t\t\tfor ( let i = 0; i < dds.mipmapCount; i ++ ) {\n\n\t\t\t\tlet byteArray, dataLength;\n\n\t\t\t\tif ( isRGBAUncompressed ) {\n\n\t\t\t\t\tbyteArray = loadARGBMip( buffer, dataOffset, width, height );\n\t\t\t\t\tdataLength = byteArray.length;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdataLength = Math.max( 4, width ) / 4 * Math.max( 4, height ) / 4 * blockBytes;\n\t\t\t\t\tbyteArray = new Uint8Array( buffer, dataOffset, dataLength );\n\n\t\t\t\t}\n\n\t\t\t\tconst mipmap = { 'data': byteArray, 'width': width, 'height': height };\n\t\t\t\tdds.mipmaps.push( mipmap );\n\n\t\t\t\tdataOffset += dataLength;\n\n\t\t\t\twidth = Math.max( width >> 1, 1 );\n\t\t\t\theight = Math.max( height >> 1, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn dds;\n\n\t}\n\n}\n\nexport { DDSLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tLoader,\n\tLinearSRGBColorSpace,\n\tSRGBColorSpace\n} from 'three';\n\nconst _taskCache = new WeakMap();\n\nclass DRACOLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.decoderPath = '';\n\t\tthis.decoderConfig = {};\n\t\tthis.decoderBinary = null;\n\t\tthis.decoderPending = null;\n\n\t\tthis.workerLimit = 4;\n\t\tthis.workerPool = [];\n\t\tthis.workerNextTaskID = 1;\n\t\tthis.workerSourceURL = '';\n\n\t\tthis.defaultAttributeIDs = {\n\t\t\tposition: 'POSITION',\n\t\t\tnormal: 'NORMAL',\n\t\t\tcolor: 'COLOR',\n\t\t\tuv: 'TEX_COORD'\n\t\t};\n\t\tthis.defaultAttributeTypes = {\n\t\t\tposition: 'Float32Array',\n\t\t\tnormal: 'Float32Array',\n\t\t\tcolor: 'Float32Array',\n\t\t\tuv: 'Float32Array'\n\t\t};\n\n\t}\n\n\tsetDecoderPath( path ) {\n\n\t\tthis.decoderPath = path;\n\n\t\treturn this;\n\n\t}\n\n\tsetDecoderConfig( config ) {\n\n\t\tthis.decoderConfig = config;\n\n\t\treturn this;\n\n\t}\n\n\tsetWorkerLimit( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\tthis.parse( buffer, onLoad, onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\n\tparse( buffer, onLoad, onError = ()=>{} ) {\n\n\t\tthis.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace, onError ).catch( onError );\n\n\t}\n\n\tdecodeDracoFile( buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace, onError = () => {} ) {\n\n\t\tconst taskConfig = {\n\t\t\tattributeIDs: attributeIDs || this.defaultAttributeIDs,\n\t\t\tattributeTypes: attributeTypes || this.defaultAttributeTypes,\n\t\t\tuseUniqueIDs: !! attributeIDs,\n\t\t\tvertexColorSpace: vertexColorSpace,\n\t\t};\n\n\t\treturn this.decodeGeometry( buffer, taskConfig ).then( callback ).catch( onError );\n\n\t}\n\n\tdecodeGeometry( buffer, taskConfig ) {\n\n\t\tconst taskKey = JSON.stringify( taskConfig );\n\n\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t// again from this thread.\n\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\tif ( cachedTask.key === taskKey ) {\n\n\t\t\t\treturn cachedTask.promise;\n\n\t\t\t} else if ( buffer.byteLength === 0 ) {\n\n\t\t\t\t// Technically, it would be possible to wait for the previous task to complete,\n\t\t\t\t// transfer the buffer back, and decode again with the second configuration. That\n\t\t\t\t// is complex, and I don't know of any reason to decode a Draco buffer twice in\n\t\t\t\t// different ways, so this is left unimplemented.\n\t\t\t\tthrow new Error(\n\n\t\t\t\t\t'THREE.DRACOLoader: Unable to re-decode a buffer with different ' +\n\t\t\t\t\t'settings. Buffer has already been transferred.'\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet worker;\n\t\tconst taskID = this.workerNextTaskID ++;\n\t\tconst taskCost = buffer.byteLength;\n\n\t\t// Obtain a worker and assign a task, and construct a geometry instance\n\t\t// when the task completes.\n\t\tconst geometryPending = this._getWorker( taskID, taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, taskConfig, buffer }, [ buffer ] );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.geometry ) );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tgeometryPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffer, {\n\n\t\t\tkey: taskKey,\n\t\t\tpromise: geometryPending\n\n\t\t} );\n\n\t\treturn geometryPending;\n\n\t}\n\n\t_createGeometry( geometryData ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( geometryData.index ) {\n\n\t\t\tgeometry.setIndex( new BufferAttribute( geometryData.index.array, 1 ) );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < geometryData.attributes.length; i ++ ) {\n\n\t\t\tconst result = geometryData.attributes[ i ];\n\t\t\tconst name = result.name;\n\t\t\tconst array = result.array;\n\t\t\tconst itemSize = result.itemSize;\n\n\t\t\tconst attribute = new BufferAttribute( array, itemSize );\n\n\t\t\tif ( name === 'color' ) {\n\n\t\t\t\tthis._assignVertexColorSpace( attribute, result.vertexColorSpace );\n\n\t\t\t\tattribute.normalized = ( array instanceof Float32Array ) === false;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( name, attribute );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n\t_assignVertexColorSpace( attribute, inputColorSpace ) {\n\n\t\t// While .drc files do not specify colorspace, the only 'official' tooling\n\t\t// is PLY and OBJ converters, which use sRGB. We'll assume sRGB when a .drc\n\t\t// file is passed into .load() or .parse(). GLTFLoader uses internal APIs\n\t\t// to decode geometry, and vertex colors are already Linear-sRGB in there.\n\n\t\tif ( inputColorSpace !== SRGBColorSpace ) return;\n\n\t\tconst _color = new Color();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\t_color.fromBufferAttribute( attribute, i ).convertSRGBToLinear();\n\t\t\tattribute.setXYZ( i, _color.r, _color.g, _color.b );\n\n\t\t}\n\n\t}\n\n\t_loadLibrary( url, responseType ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.decoderPath );\n\t\tloader.setResponseType( responseType );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tloader.load( url, resolve, undefined, reject );\n\n\t\t} );\n\n\t}\n\n\tpreload() {\n\n\t\tthis._initDecoder();\n\n\t\treturn this;\n\n\t}\n\n\t_initDecoder() {\n\n\t\tif ( this.decoderPending ) return this.decoderPending;\n\n\t\tconst useJS = typeof WebAssembly !== 'object' || this.decoderConfig.type === 'js';\n\t\tconst librariesPending = [];\n\n\t\tif ( useJS ) {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.js', 'text' ) );\n\n\t\t} else {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_wasm_wrapper.js', 'text' ) );\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.wasm', 'arraybuffer' ) );\n\n\t\t}\n\n\t\tthis.decoderPending = Promise.all( librariesPending )\n\t\t\t.then( ( libraries ) => {\n\n\t\t\t\tconst jsContent = libraries[ 0 ];\n\n\t\t\t\tif ( ! useJS ) {\n\n\t\t\t\t\tthis.decoderConfig.wasmBinary = libraries[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tconst fn = DRACOWorker.toString();\n\n\t\t\t\tconst body = [\n\t\t\t\t\t'/* draco decoder */',\n\t\t\t\t\tjsContent,\n\t\t\t\t\t'',\n\t\t\t\t\t'/* worker */',\n\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t} );\n\n\t\treturn this.decoderPending;\n\n\t}\n\n\t_getWorker( taskID, taskCost ) {\n\n\t\treturn this._initDecoder().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( { type: 'init', decoderConfig: this.decoderConfig } );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tconst message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.DRACOLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst worker = this.workerPool[ this.workerPool.length - 1 ];\n\t\t\tworker._taskCosts[ taskID ] = taskCost;\n\t\t\tworker._taskLoad += taskCost;\n\t\t\treturn worker;\n\n\t\t} );\n\n\t}\n\n\t_releaseTask( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t}\n\n\tdebug() {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\tif ( this.workerSourceURL !== '' ) {\n\n\t\t\tURL.revokeObjectURL( this.workerSourceURL );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* WEB WORKER */\n\nfunction DRACOWorker() {\n\n\tlet decoderConfig;\n\tlet decoderPending;\n\n\tonmessage = function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tdecoderConfig = message.decoderConfig;\n\t\t\t\tdecoderPending = new Promise( function ( resolve/*, reject*/ ) {\n\n\t\t\t\t\tdecoderConfig.onModuleLoaded = function ( draco ) {\n\n\t\t\t\t\t\t// Module is Promise-like. Wrap before resolving to avoid loop.\n\t\t\t\t\t\tresolve( { draco: draco } );\n\n\t\t\t\t\t};\n\n\t\t\t\t\tDracoDecoderModule( decoderConfig ); // eslint-disable-line no-undef\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\t\t\t\tconst buffer = message.buffer;\n\t\t\t\tconst taskConfig = message.taskConfig;\n\t\t\t\tdecoderPending.then( ( module ) => {\n\n\t\t\t\t\tconst draco = module.draco;\n\t\t\t\t\tconst decoder = new draco.Decoder();\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst geometry = decodeGeometry( draco, decoder, new Int8Array( buffer ), taskConfig );\n\n\t\t\t\t\t\tconst buffers = geometry.attributes.map( ( attr ) => attr.array.buffer );\n\n\t\t\t\t\t\tif ( geometry.index ) buffers.push( geometry.index.array.buffer );\n\n\t\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, geometry }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t} finally {\n\n\t\t\t\t\t\tdraco.destroy( decoder );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeGeometry( draco, decoder, array, taskConfig ) {\n\n\t\tconst attributeIDs = taskConfig.attributeIDs;\n\t\tconst attributeTypes = taskConfig.attributeTypes;\n\n\t\tlet dracoGeometry;\n\t\tlet decodingStatus;\n\n\t\tconst geometryType = decoder.GetEncodedGeometryType( array );\n\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tdracoGeometry = new draco.Mesh();\n\t\t\tdecodingStatus = decoder.DecodeArrayToMesh( array, array.byteLength, dracoGeometry );\n\n\t\t} else if ( geometryType === draco.POINT_CLOUD ) {\n\n\t\t\tdracoGeometry = new draco.PointCloud();\n\t\t\tdecodingStatus = decoder.DecodeArrayToPointCloud( array, array.byteLength, dracoGeometry );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Unexpected geometry type.' );\n\n\t\t}\n\n\t\tif ( ! decodingStatus.ok() || dracoGeometry.ptr === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Decoding failed: ' + decodingStatus.error_msg() );\n\n\t\t}\n\n\t\tconst geometry = { index: null, attributes: [] };\n\n\t\t// Gather all vertex attributes.\n\t\tfor ( const attributeName in attributeIDs ) {\n\n\t\t\tconst attributeType = self[ attributeTypes[ attributeName ] ];\n\n\t\t\tlet attribute;\n\t\t\tlet attributeID;\n\n\t\t\t// A Draco file may be created with default vertex attributes, whose attribute IDs\n\t\t\t// are mapped 1:1 from their semantic name (POSITION, NORMAL, ...). Alternatively,\n\t\t\t// a Draco file may contain a custom set of attributes, identified by known unique\n\t\t\t// IDs. glTF files always do the latter, and `.drc` files typically do the former.\n\t\t\tif ( taskConfig.useUniqueIDs ) {\n\n\t\t\t\tattributeID = attributeIDs[ attributeName ];\n\t\t\t\tattribute = decoder.GetAttributeByUniqueId( dracoGeometry, attributeID );\n\n\t\t\t} else {\n\n\t\t\t\tattributeID = decoder.GetAttributeId( dracoGeometry, draco[ attributeIDs[ attributeName ] ] );\n\n\t\t\t\tif ( attributeID === - 1 ) continue;\n\n\t\t\t\tattribute = decoder.GetAttribute( dracoGeometry, attributeID );\n\n\t\t\t}\n\n\t\t\tconst attributeResult = decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute );\n\n\t\t\tif ( attributeName === 'color' ) {\n\n\t\t\t\tattributeResult.vertexColorSpace = taskConfig.vertexColorSpace;\n\n\t\t\t}\n\n\t\t\tgeometry.attributes.push( attributeResult );\n\n\t\t}\n\n\t\t// Add index.\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tgeometry.index = decodeIndex( draco, decoder, dracoGeometry );\n\n\t\t}\n\n\t\tdraco.destroy( dracoGeometry );\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction decodeIndex( draco, decoder, dracoGeometry ) {\n\n\t\tconst numFaces = dracoGeometry.num_faces();\n\t\tconst numIndices = numFaces * 3;\n\t\tconst byteLength = numIndices * 4;\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetTrianglesUInt32Array( dracoGeometry, byteLength, ptr );\n\t\tconst index = new Uint32Array( draco.HEAPF32.buffer, ptr, numIndices ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn { array: index, itemSize: 1 };\n\n\t}\n\n\tfunction decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) {\n\n\t\tconst numComponents = attribute.num_components();\n\t\tconst numPoints = dracoGeometry.num_points();\n\t\tconst numValues = numPoints * numComponents;\n\t\tconst byteLength = numValues * attributeType.BYTES_PER_ELEMENT;\n\t\tconst dataType = getDracoDataType( draco, attributeType );\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetAttributeDataArrayForAllPoints( dracoGeometry, attribute, dataType, byteLength, ptr );\n\t\tconst array = new attributeType( draco.HEAPF32.buffer, ptr, numValues ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn {\n\t\t\tname: attributeName,\n\t\t\tarray: array,\n\t\t\titemSize: numComponents\n\t\t};\n\n\t}\n\n\tfunction getDracoDataType( draco, attributeType ) {\n\n\t\tswitch ( attributeType ) {\n\n\t\t\tcase Float32Array: return draco.DT_FLOAT32;\n\t\t\tcase Int8Array: return draco.DT_INT8;\n\t\t\tcase Int16Array: return draco.DT_INT16;\n\t\t\tcase Int32Array: return draco.DT_INT32;\n\t\t\tcase Uint8Array: return draco.DT_UINT8;\n\t\t\tcase Uint16Array: return draco.DT_UINT16;\n\t\t\tcase Uint32Array: return draco.DT_UINT32;\n\n\t\t}\n\n\t}\n\n}\n\nexport { DRACOLoader };\n", "import {\n\tAmbientLight,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tEquirectangularReflectionMapping,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLoader,\n\tLoaderUtils,\n\tMathUtils,\n\tMatrix3,\n\tMatrix4,\n\tMesh,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tUint16BufferAttribute,\n\tVector2,\n\tVector3,\n\tVector4,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tShapeUtils\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\nimport { NURBSCurve } from '../curves/NURBSCurve.js';\n\n/**\n * Loader loads FBX file and generates Group representing FBX scene.\n * Requires FBX file to be >= 7.0 and in ASCII or >= 6400 in Binary format\n * Versions lower than this may load but will probably have errors\n *\n * Needs Support:\n * Morph normals / blend shape normals\n *\n * FBX format references:\n * \thttps://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html (C++ SDK reference)\n *\n * Binary format specification:\n *\thttps://code.blender.org/2013/08/fbx-binary-file-format-specification/\n */\n\n\nlet fbxTree;\nlet connections;\nlet sceneGraph;\n\nclass FBXLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( FBXBuffer, path ) {\n\n\t\tif ( isFbxFormatBinary( FBXBuffer ) ) {\n\n\t\t\tfbxTree = new BinaryParser().parse( FBXBuffer );\n\n\t\t} else {\n\n\t\t\tconst FBXText = convertArrayBufferToString( FBXBuffer );\n\n\t\t\tif ( ! isFbxFormatASCII( FBXText ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown format.' );\n\n\t\t\t}\n\n\t\t\tif ( getFbxVersion( FBXText ) < 7000 ) {\n\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + getFbxVersion( FBXText ) );\n\n\t\t\t}\n\n\t\t\tfbxTree = new TextParser().parse( FBXText );\n\n\t\t}\n\n\t\t// console.log( fbxTree );\n\n\t\tconst textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\treturn new FBXTreeParser( textureLoader, this.manager ).parse( fbxTree );\n\n\t}\n\n}\n\n// Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group\nclass FBXTreeParser {\n\n\tconstructor( textureLoader, manager ) {\n\n\t\tthis.textureLoader = textureLoader;\n\t\tthis.manager = manager;\n\n\t}\n\n\tparse() {\n\n\t\tconnections = this.parseConnections();\n\n\t\tconst images = this.parseImages();\n\t\tconst textures = this.parseTextures( images );\n\t\tconst materials = this.parseMaterials( textures );\n\t\tconst deformers = this.parseDeformers();\n\t\tconst geometryMap = new GeometryParser().parse( deformers );\n\n\t\tthis.parseScene( deformers, geometryMap, materials );\n\n\t\treturn sceneGraph;\n\n\t}\n\n\t// Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry )\n\t// and details the connection type\n\tparseConnections() {\n\n\t\tconst connectionMap = new Map();\n\n\t\tif ( 'Connections' in fbxTree ) {\n\n\t\t\tconst rawConnections = fbxTree.Connections.connections;\n\n\t\t\trawConnections.forEach( function ( rawConnection ) {\n\n\t\t\t\tconst fromID = rawConnection[ 0 ];\n\t\t\t\tconst toID = rawConnection[ 1 ];\n\t\t\t\tconst relationship = rawConnection[ 2 ];\n\n\t\t\t\tif ( ! connectionMap.has( fromID ) ) {\n\n\t\t\t\t\tconnectionMap.set( fromID, {\n\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tconst parentRelationship = { ID: toID, relationship: relationship };\n\t\t\t\tconnectionMap.get( fromID ).parents.push( parentRelationship );\n\n\t\t\t\tif ( ! connectionMap.has( toID ) ) {\n\n\t\t\t\t\tconnectionMap.set( toID, {\n\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tconst childRelationship = { ID: fromID, relationship: relationship };\n\t\t\t\tconnectionMap.get( toID ).children.push( childRelationship );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn connectionMap;\n\n\t}\n\n\t// Parse FBXTree.Objects.Video for embedded image data\n\t// These images are connected to textures in FBXTree.Objects.Textures\n\t// via FBXTree.Connections.\n\tparseImages() {\n\n\t\tconst images = {};\n\t\tconst blobs = {};\n\n\t\tif ( 'Video' in fbxTree.Objects ) {\n\n\t\t\tconst videoNodes = fbxTree.Objects.Video;\n\n\t\t\tfor ( const nodeID in videoNodes ) {\n\n\t\t\t\tconst videoNode = videoNodes[ nodeID ];\n\n\t\t\t\tconst id = parseInt( nodeID );\n\n\t\t\t\timages[ id ] = videoNode.RelativeFilename || videoNode.Filename;\n\n\t\t\t\t// raw image data is in videoNode.Content\n\t\t\t\tif ( 'Content' in videoNode ) {\n\n\t\t\t\t\tconst arrayBufferContent = ( videoNode.Content instanceof ArrayBuffer ) && ( videoNode.Content.byteLength > 0 );\n\t\t\t\t\tconst base64Content = ( typeof videoNode.Content === 'string' ) && ( videoNode.Content !== '' );\n\n\t\t\t\t\tif ( arrayBufferContent || base64Content ) {\n\n\t\t\t\t\t\tconst image = this.parseImage( videoNodes[ nodeID ] );\n\n\t\t\t\t\t\tblobs[ videoNode.RelativeFilename || videoNode.Filename ] = image;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const id in images ) {\n\n\t\t\tconst filename = images[ id ];\n\n\t\t\tif ( blobs[ filename ] !== undefined ) images[ id ] = blobs[ filename ];\n\t\t\telse images[ id ] = images[ id ].split( '\\\\' ).pop();\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\t// Parse embedded image data in FBXTree.Video.Content\n\tparseImage( videoNode ) {\n\n\t\tconst content = videoNode.Content;\n\t\tconst fileName = videoNode.RelativeFilename || videoNode.Filename;\n\t\tconst extension = fileName.slice( fileName.lastIndexOf( '.' ) + 1 ).toLowerCase();\n\n\t\tlet type;\n\n\t\tswitch ( extension ) {\n\n\t\t\tcase 'bmp':\n\n\t\t\t\ttype = 'image/bmp';\n\t\t\t\tbreak;\n\n\t\t\tcase 'jpg':\n\t\t\tcase 'jpeg':\n\n\t\t\t\ttype = 'image/jpeg';\n\t\t\t\tbreak;\n\n\t\t\tcase 'png':\n\n\t\t\t\ttype = 'image/png';\n\t\t\t\tbreak;\n\n\t\t\tcase 'tif':\n\n\t\t\t\ttype = 'image/tiff';\n\t\t\t\tbreak;\n\n\t\t\tcase 'tga':\n\n\t\t\t\tif ( this.manager.getHandler( '.tga' ) === null ) {\n\n\t\t\t\t\tconsole.warn( 'FBXLoader: TGA loader not found, skipping ', fileName );\n\n\t\t\t\t}\n\n\t\t\t\ttype = 'image/tga';\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'FBXLoader: Image type \"' + extension + '\" is not supported.' );\n\t\t\t\treturn;\n\n\t\t}\n\n\t\tif ( typeof content === 'string' ) { // ASCII format\n\n\t\t\treturn 'data:' + type + ';base64,' + content;\n\n\t\t} else { // Binary Format\n\n\t\t\tconst array = new Uint8Array( content );\n\t\t\treturn window.URL.createObjectURL( new Blob( [ array ], { type: type } ) );\n\n\t\t}\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Texture\n\t// These contain details such as UV scaling, cropping, rotation etc and are connected\n\t// to images in FBXTree.Objects.Video\n\tparseTextures( images ) {\n\n\t\tconst textureMap = new Map();\n\n\t\tif ( 'Texture' in fbxTree.Objects ) {\n\n\t\t\tconst textureNodes = fbxTree.Objects.Texture;\n\t\t\tfor ( const nodeID in textureNodes ) {\n\n\t\t\t\tconst texture = this.parseTexture( textureNodes[ nodeID ], images );\n\t\t\t\ttextureMap.set( parseInt( nodeID ), texture );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textureMap;\n\n\t}\n\n\t// Parse individual node in FBXTree.Objects.Texture\n\tparseTexture( textureNode, images ) {\n\n\t\tconst texture = this.loadTexture( textureNode, images );\n\n\t\ttexture.ID = textureNode.id;\n\n\t\ttexture.name = textureNode.attrName;\n\n\t\tconst wrapModeU = textureNode.WrapModeU;\n\t\tconst wrapModeV = textureNode.WrapModeV;\n\n\t\tconst valueU = wrapModeU !== undefined ? wrapModeU.value : 0;\n\t\tconst valueV = wrapModeV !== undefined ? wrapModeV.value : 0;\n\n\t\t// http://download.autodesk.com/us/fbx/SDKdocs/FBX_SDK_Help/files/fbxsdkref/class_k_fbx_texture.html#889640e63e2e681259ea81061b85143a\n\t\t// 0: repeat(default), 1: clamp\n\n\t\ttexture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\t\ttexture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\tif ( 'Scaling' in textureNode ) {\n\n\t\t\tconst values = textureNode.Scaling.value;\n\n\t\t\ttexture.repeat.x = values[ 0 ];\n\t\t\ttexture.repeat.y = values[ 1 ];\n\n\t\t}\n\n\t\tif ( 'Translation' in textureNode ) {\n\n\t\t\tconst values = textureNode.Translation.value;\n\n\t\t\ttexture.offset.x = values[ 0 ];\n\t\t\ttexture.offset.y = values[ 1 ];\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t// load a texture specified as a blob or data URI, or via an external URL using TextureLoader\n\tloadTexture( textureNode, images ) {\n\n\t\tconst nonNativeExtensions = new Set( [ 'tga', 'tif', 'tiff', 'exr', 'dds', 'hdr', 'ktx2' ] );\n\n\t\tconst extension = textureNode.FileName.split( '.' ).pop().toLowerCase();\n\n\t\tconst loader = nonNativeExtensions.has( extension ) ? this.manager.getHandler( `.${extension}` ) : this.textureLoader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tconsole.warn(\n\t\t\t\t`FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`,\n\t\t\t\ttextureNode.RelativeFilename\n\t\t\t);\n\t\t\treturn new Texture();\n\n\t\t}\n\n\t\tconst loaderPath = loader.path;\n\n\t\tif ( ! loaderPath ) {\n\n\t\t\tloader.setPath( this.textureLoader.path );\n\n\t\t}\n\n\t\tconst children = connections.get( textureNode.id ).children;\n\n\t\tlet fileName;\n\n\t\tif ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {\n\n\t\t\tfileName = images[ children[ 0 ].ID ];\n\n\t\t\tif ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {\n\n\t\t\t\tloader.setPath( undefined );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst texture = loader.load( fileName );\n\n\t\t// revert to initial path\n\t\tloader.setPath( loaderPath );\n\n\t\treturn texture;\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Material\n\tparseMaterials( textureMap ) {\n\n\t\tconst materialMap = new Map();\n\n\t\tif ( 'Material' in fbxTree.Objects ) {\n\n\t\t\tconst materialNodes = fbxTree.Objects.Material;\n\n\t\t\tfor ( const nodeID in materialNodes ) {\n\n\t\t\t\tconst material = this.parseMaterial( materialNodes[ nodeID ], textureMap );\n\n\t\t\t\tif ( material !== null ) materialMap.set( parseInt( nodeID ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materialMap;\n\n\t}\n\n\t// Parse single node in FBXTree.Objects.Material\n\t// Materials are connected to texture maps in FBXTree.Objects.Textures\n\t// FBX format currently only supports Lambert and Phong shading models\n\tparseMaterial( materialNode, textureMap ) {\n\n\t\tconst ID = materialNode.id;\n\t\tconst name = materialNode.attrName;\n\t\tlet type = materialNode.ShadingModel;\n\n\t\t// Case where FBX wraps shading model in property object.\n\t\tif ( typeof type === 'object' ) {\n\n\t\t\ttype = type.value;\n\n\t\t}\n\n\t\t// Ignore unused materials which don't have any connections.\n\t\tif ( ! connections.has( ID ) ) return null;\n\n\t\tconst parameters = this.parseParameters( materialNode, textureMap, ID );\n\n\t\tlet material;\n\n\t\tswitch ( type.toLowerCase() ) {\n\n\t\t\tcase 'phong':\n\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\tbreak;\n\t\t\tcase 'lambert':\n\t\t\t\tmaterial = new MeshLambertMaterial();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: unknown material type \"%s\". Defaulting to MeshPhongMaterial.', type );\n\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tmaterial.setValues( parameters );\n\t\tmaterial.name = name;\n\n\t\treturn material;\n\n\t}\n\n\t// Parse FBX material and return parameters suitable for a three.js material\n\t// Also parse the texture map and return any textures associated with the material\n\tparseParameters( materialNode, textureMap, ID ) {\n\n\t\tconst parameters = {};\n\n\t\tif ( materialNode.BumpFactor ) {\n\n\t\t\tparameters.bumpScale = materialNode.BumpFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Diffuse ) {\n\n\t\t\tparameters.color = new Color().fromArray( materialNode.Diffuse.value ).convertSRGBToLinear();\n\n\t\t} else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) {\n\n\t\t\t// The blender exporter exports diffuse here instead of in materialNode.Diffuse\n\t\t\tparameters.color = new Color().fromArray( materialNode.DiffuseColor.value ).convertSRGBToLinear();\n\n\t\t}\n\n\t\tif ( materialNode.DisplacementFactor ) {\n\n\t\t\tparameters.displacementScale = materialNode.DisplacementFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Emissive ) {\n\n\t\t\tparameters.emissive = new Color().fromArray( materialNode.Emissive.value ).convertSRGBToLinear();\n\n\t\t} else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) {\n\n\t\t\t// The blender exporter exports emissive color here instead of in materialNode.Emissive\n\t\t\tparameters.emissive = new Color().fromArray( materialNode.EmissiveColor.value ).convertSRGBToLinear();\n\n\t\t}\n\n\t\tif ( materialNode.EmissiveFactor ) {\n\n\t\t\tparameters.emissiveIntensity = parseFloat( materialNode.EmissiveFactor.value );\n\n\t\t}\n\n\t\tif ( materialNode.Opacity ) {\n\n\t\t\tparameters.opacity = parseFloat( materialNode.Opacity.value );\n\n\t\t}\n\n\t\tif ( parameters.opacity < 1.0 ) {\n\n\t\t\tparameters.transparent = true;\n\n\t\t}\n\n\t\tif ( materialNode.ReflectionFactor ) {\n\n\t\t\tparameters.reflectivity = materialNode.ReflectionFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Shininess ) {\n\n\t\t\tparameters.shininess = materialNode.Shininess.value;\n\n\t\t}\n\n\t\tif ( materialNode.Specular ) {\n\n\t\t\tparameters.specular = new Color().fromArray( materialNode.Specular.value ).convertSRGBToLinear();\n\n\t\t} else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) {\n\n\t\t\t// The blender exporter exports specular color here instead of in materialNode.Specular\n\t\t\tparameters.specular = new Color().fromArray( materialNode.SpecularColor.value ).convertSRGBToLinear();\n\n\t\t}\n\n\t\tconst scope = this;\n\t\tconnections.get( ID ).children.forEach( function ( child ) {\n\n\t\t\tconst type = child.relationship;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'Bump':\n\t\t\t\t\tparameters.bumpMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Maya|TEX_ao_map':\n\t\t\t\t\tparameters.aoMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DiffuseColor':\n\t\t\t\tcase 'Maya|TEX_color_map':\n\t\t\t\t\tparameters.map = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.map !== undefined ) {\n\n\t\t\t\t\t\tparameters.map.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DisplacementColor':\n\t\t\t\t\tparameters.displacementMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EmissiveColor':\n\t\t\t\t\tparameters.emissiveMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.emissiveMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.emissiveMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'NormalMap':\n\t\t\t\tcase 'Maya|TEX_normal_map':\n\t\t\t\t\tparameters.normalMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ReflectionColor':\n\t\t\t\t\tparameters.envMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.envMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.envMap.mapping = EquirectangularReflectionMapping;\n\t\t\t\t\t\tparameters.envMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpecularColor':\n\t\t\t\t\tparameters.specularMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.specularMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.specularMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'TransparentColor':\n\t\t\t\tcase 'TransparencyFactor':\n\t\t\t\t\tparameters.alphaMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tparameters.transparent = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'AmbientColor':\n\t\t\t\tcase 'ShininessExponent': // AKA glossiness map\n\t\t\t\tcase 'SpecularFactor': // AKA specularLevel\n\t\t\t\tcase 'VectorDisplacementColor': // NOTE: Seems to be a copy of DisplacementColor\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: %s map is not supported in three.js, skipping texture.', type );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn parameters;\n\n\t}\n\n\t// get a texture from the textureMap for use by a material.\n\tgetTexture( textureMap, id ) {\n\n\t\t// if the texture is a layered texture, just use the first layer and issue a warning\n\t\tif ( 'LayeredTexture' in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture ) {\n\n\t\t\tconsole.warn( 'THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.' );\n\t\t\tid = connections.get( id ).children[ 0 ].ID;\n\n\t\t}\n\n\t\treturn textureMap.get( id );\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Deformer\n\t// Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here\n\t// Generates map of Skeleton-like objects for use later when generating and binding skeletons.\n\tparseDeformers() {\n\n\t\tconst skeletons = {};\n\t\tconst morphTargets = {};\n\n\t\tif ( 'Deformer' in fbxTree.Objects ) {\n\n\t\t\tconst DeformerNodes = fbxTree.Objects.Deformer;\n\n\t\t\tfor ( const nodeID in DeformerNodes ) {\n\n\t\t\t\tconst deformerNode = DeformerNodes[ nodeID ];\n\n\t\t\t\tconst relationships = connections.get( parseInt( nodeID ) );\n\n\t\t\t\tif ( deformerNode.attrType === 'Skin' ) {\n\n\t\t\t\t\tconst skeleton = this.parseSkeleton( relationships, DeformerNodes );\n\t\t\t\t\tskeleton.ID = nodeID;\n\n\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: skeleton attached to more than one geometry is not supported.' );\n\t\t\t\t\tskeleton.geometryID = relationships.parents[ 0 ].ID;\n\n\t\t\t\t\tskeletons[ nodeID ] = skeleton;\n\n\t\t\t\t} else if ( deformerNode.attrType === 'BlendShape' ) {\n\n\t\t\t\t\tconst morphTarget = {\n\t\t\t\t\t\tid: nodeID,\n\t\t\t\t\t};\n\n\t\t\t\t\tmorphTarget.rawTargets = this.parseMorphTargets( relationships, DeformerNodes );\n\t\t\t\t\tmorphTarget.id = nodeID;\n\n\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: morph target attached to more than one geometry is not supported.' );\n\n\t\t\t\t\tmorphTargets[ nodeID ] = morphTarget;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tskeletons: skeletons,\n\t\t\tmorphTargets: morphTargets,\n\n\t\t};\n\n\t}\n\n\t// Parse single nodes in FBXTree.Objects.Deformer\n\t// The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster'\n\t// Each skin node represents a skeleton and each cluster node represents a bone\n\tparseSkeleton( relationships, deformerNodes ) {\n\n\t\tconst rawBones = [];\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst boneNode = deformerNodes[ child.ID ];\n\n\t\t\tif ( boneNode.attrType !== 'Cluster' ) return;\n\n\t\t\tconst rawBone = {\n\n\t\t\t\tID: child.ID,\n\t\t\t\tindices: [],\n\t\t\t\tweights: [],\n\t\t\t\ttransformLink: new Matrix4().fromArray( boneNode.TransformLink.a ),\n\t\t\t\t// transform: new Matrix4().fromArray( boneNode.Transform.a ),\n\t\t\t\t// linkMode: boneNode.Mode,\n\n\t\t\t};\n\n\t\t\tif ( 'Indexes' in boneNode ) {\n\n\t\t\t\trawBone.indices = boneNode.Indexes.a;\n\t\t\t\trawBone.weights = boneNode.Weights.a;\n\n\t\t\t}\n\n\t\t\trawBones.push( rawBone );\n\n\t\t} );\n\n\t\treturn {\n\n\t\t\trawBones: rawBones,\n\t\t\tbones: []\n\n\t\t};\n\n\t}\n\n\t// The top level morph deformer node has type \"BlendShape\" and sub nodes have type \"BlendShapeChannel\"\n\tparseMorphTargets( relationships, deformerNodes ) {\n\n\t\tconst rawMorphTargets = [];\n\n\t\tfor ( let i = 0; i < relationships.children.length; i ++ ) {\n\n\t\t\tconst child = relationships.children[ i ];\n\n\t\t\tconst morphTargetNode = deformerNodes[ child.ID ];\n\n\t\t\tconst rawMorphTarget = {\n\n\t\t\t\tname: morphTargetNode.attrName,\n\t\t\t\tinitialWeight: morphTargetNode.DeformPercent,\n\t\t\t\tid: morphTargetNode.id,\n\t\t\t\tfullWeights: morphTargetNode.FullWeights.a\n\n\t\t\t};\n\n\t\t\tif ( morphTargetNode.attrType !== 'BlendShapeChannel' ) return;\n\n\t\t\trawMorphTarget.geoID = connections.get( parseInt( child.ID ) ).children.filter( function ( child ) {\n\n\t\t\t\treturn child.relationship === undefined;\n\n\t\t\t} )[ 0 ].ID;\n\n\t\t\trawMorphTargets.push( rawMorphTarget );\n\n\t\t}\n\n\t\treturn rawMorphTargets;\n\n\t}\n\n\t// create the main Group() to be returned by the loader\n\tparseScene( deformers, geometryMap, materialMap ) {\n\n\t\tsceneGraph = new Group();\n\n\t\tconst modelMap = this.parseModels( deformers.skeletons, geometryMap, materialMap );\n\n\t\tconst modelNodes = fbxTree.Objects.Model;\n\n\t\tconst scope = this;\n\t\tmodelMap.forEach( function ( model ) {\n\n\t\t\tconst modelNode = modelNodes[ model.ID ];\n\t\t\tscope.setLookAtProperties( model, modelNode );\n\n\t\t\tconst parentConnections = connections.get( model.ID ).parents;\n\n\t\t\tparentConnections.forEach( function ( connection ) {\n\n\t\t\t\tconst parent = modelMap.get( connection.ID );\n\t\t\t\tif ( parent !== undefined ) parent.add( model );\n\n\t\t\t} );\n\n\t\t\tif ( model.parent === null ) {\n\n\t\t\t\tsceneGraph.add( model );\n\n\t\t\t}\n\n\n\t\t} );\n\n\t\tthis.bindSkeleton( deformers.skeletons, geometryMap, modelMap );\n\n\t\tthis.addGlobalSceneSettings();\n\n\t\tsceneGraph.traverse( function ( node ) {\n\n\t\t\tif ( node.userData.transformData ) {\n\n\t\t\t\tif ( node.parent ) {\n\n\t\t\t\t\tnode.userData.transformData.parentMatrix = node.parent.matrix;\n\t\t\t\t\tnode.userData.transformData.parentMatrixWorld = node.parent.matrixWorld;\n\n\t\t\t\t}\n\n\t\t\t\tconst transform = generateTransform( node.userData.transformData );\n\n\t\t\t\tnode.applyMatrix4( transform );\n\t\t\t\tnode.updateWorldMatrix();\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst animations = new AnimationParser().parse();\n\n\t\t// if all the models where already combined in a single group, just return that\n\t\tif ( sceneGraph.children.length === 1 && sceneGraph.children[ 0 ].isGroup ) {\n\n\t\t\tsceneGraph.children[ 0 ].animations = animations;\n\t\t\tsceneGraph = sceneGraph.children[ 0 ];\n\n\t\t}\n\n\t\tsceneGraph.animations = animations;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.Model\n\tparseModels( skeletons, geometryMap, materialMap ) {\n\n\t\tconst modelMap = new Map();\n\t\tconst modelNodes = fbxTree.Objects.Model;\n\n\t\tfor ( const nodeID in modelNodes ) {\n\n\t\t\tconst id = parseInt( nodeID );\n\t\t\tconst node = modelNodes[ nodeID ];\n\t\t\tconst relationships = connections.get( id );\n\n\t\t\tlet model = this.buildSkeleton( relationships, skeletons, id, node.attrName );\n\n\t\t\tif ( ! model ) {\n\n\t\t\t\tswitch ( node.attrType ) {\n\n\t\t\t\t\tcase 'Camera':\n\t\t\t\t\t\tmodel = this.createCamera( relationships );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Light':\n\t\t\t\t\t\tmodel = this.createLight( relationships );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Mesh':\n\t\t\t\t\t\tmodel = this.createMesh( relationships, geometryMap, materialMap );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'NurbsCurve':\n\t\t\t\t\t\tmodel = this.createCurve( relationships, geometryMap );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'LimbNode':\n\t\t\t\t\tcase 'Root':\n\t\t\t\t\t\tmodel = new Bone();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Null':\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmodel = new Group();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tmodel.name = node.attrName ? PropertyBinding.sanitizeNodeName( node.attrName ) : '';\n\t\t\t\tmodel.userData.originalName = node.attrName;\n\n\t\t\t\tmodel.ID = id;\n\n\t\t\t}\n\n\t\t\tthis.getTransformData( model, node );\n\t\t\tmodelMap.set( id, model );\n\n\t\t}\n\n\t\treturn modelMap;\n\n\t}\n\n\tbuildSkeleton( relationships, skeletons, id, name ) {\n\n\t\tlet bone = null;\n\n\t\trelationships.parents.forEach( function ( parent ) {\n\n\t\t\tfor ( const ID in skeletons ) {\n\n\t\t\t\tconst skeleton = skeletons[ ID ];\n\n\t\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t\tif ( rawBone.ID === parent.ID ) {\n\n\t\t\t\t\t\tconst subBone = bone;\n\t\t\t\t\t\tbone = new Bone();\n\n\t\t\t\t\t\tbone.matrixWorld.copy( rawBone.transformLink );\n\n\t\t\t\t\t\t// set name and id here - otherwise in cases where \"subBone\" is created it will not have a name / id\n\n\t\t\t\t\t\tbone.name = name ? PropertyBinding.sanitizeNodeName( name ) : '';\n\t\t\t\t\t\tbone.userData.originalName = name;\n\t\t\t\t\t\tbone.ID = id;\n\n\t\t\t\t\t\tskeleton.bones[ i ] = bone;\n\n\t\t\t\t\t\t// In cases where a bone is shared between multiple meshes\n\t\t\t\t\t\t// duplicate the bone here and and it as a child of the first bone\n\t\t\t\t\t\tif ( subBone !== null ) {\n\n\t\t\t\t\t\t\tbone.add( subBone );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn bone;\n\n\t}\n\n\t// create a PerspectiveCamera or OrthographicCamera\n\tcreateCamera( relationships ) {\n\n\t\tlet model;\n\t\tlet cameraAttribute;\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\tcameraAttribute = attr;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( cameraAttribute === undefined ) {\n\n\t\t\tmodel = new Object3D();\n\n\t\t} else {\n\n\t\t\tlet type = 0;\n\t\t\tif ( cameraAttribute.CameraProjectionType !== undefined && cameraAttribute.CameraProjectionType.value === 1 ) {\n\n\t\t\t\ttype = 1;\n\n\t\t\t}\n\n\t\t\tlet nearClippingPlane = 1;\n\t\t\tif ( cameraAttribute.NearPlane !== undefined ) {\n\n\t\t\t\tnearClippingPlane = cameraAttribute.NearPlane.value / 1000;\n\n\t\t\t}\n\n\t\t\tlet farClippingPlane = 1000;\n\t\t\tif ( cameraAttribute.FarPlane !== undefined ) {\n\n\t\t\t\tfarClippingPlane = cameraAttribute.FarPlane.value / 1000;\n\n\t\t\t}\n\n\n\t\t\tlet width = window.innerWidth;\n\t\t\tlet height = window.innerHeight;\n\n\t\t\tif ( cameraAttribute.AspectWidth !== undefined && cameraAttribute.AspectHeight !== undefined ) {\n\n\t\t\t\twidth = cameraAttribute.AspectWidth.value;\n\t\t\t\theight = cameraAttribute.AspectHeight.value;\n\n\t\t\t}\n\n\t\t\tconst aspect = width / height;\n\n\t\t\tlet fov = 45;\n\t\t\tif ( cameraAttribute.FieldOfView !== undefined ) {\n\n\t\t\t\tfov = cameraAttribute.FieldOfView.value;\n\n\t\t\t}\n\n\t\t\tconst focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 0: // Perspective\n\t\t\t\t\tmodel = new PerspectiveCamera( fov, aspect, nearClippingPlane, farClippingPlane );\n\t\t\t\t\tif ( focalLength !== null ) model.setFocalLength( focalLength );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // Orthographic\n\t\t\t\t\tmodel = new OrthographicCamera( - width / 2, width / 2, height / 2, - height / 2, nearClippingPlane, farClippingPlane );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown camera type ' + type + '.' );\n\t\t\t\t\tmodel = new Object3D();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\t// Create a DirectionalLight, PointLight or SpotLight\n\tcreateLight( relationships ) {\n\n\t\tlet model;\n\t\tlet lightAttribute;\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\tlightAttribute = attr;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( lightAttribute === undefined ) {\n\n\t\t\tmodel = new Object3D();\n\n\t\t} else {\n\n\t\t\tlet type;\n\n\t\t\t// LightType can be undefined for Point lights\n\t\t\tif ( lightAttribute.LightType === undefined ) {\n\n\t\t\t\ttype = 0;\n\n\t\t\t} else {\n\n\t\t\t\ttype = lightAttribute.LightType.value;\n\n\t\t\t}\n\n\t\t\tlet color = 0xffffff;\n\n\t\t\tif ( lightAttribute.Color !== undefined ) {\n\n\t\t\t\tcolor = new Color().fromArray( lightAttribute.Color.value ).convertSRGBToLinear();\n\n\t\t\t}\n\n\t\t\tlet intensity = ( lightAttribute.Intensity === undefined ) ? 1 : lightAttribute.Intensity.value / 100;\n\n\t\t\t// light disabled\n\t\t\tif ( lightAttribute.CastLightOnObject !== undefined && lightAttribute.CastLightOnObject.value === 0 ) {\n\n\t\t\t\tintensity = 0;\n\n\t\t\t}\n\n\t\t\tlet distance = 0;\n\t\t\tif ( lightAttribute.FarAttenuationEnd !== undefined ) {\n\n\t\t\t\tif ( lightAttribute.EnableFarAttenuation !== undefined && lightAttribute.EnableFarAttenuation.value === 0 ) {\n\n\t\t\t\t\tdistance = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdistance = lightAttribute.FarAttenuationEnd.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// TODO: could this be calculated linearly from FarAttenuationStart to FarAttenuationEnd?\n\t\t\tconst decay = 1;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 0: // Point\n\t\t\t\t\tmodel = new PointLight( color, intensity, distance, decay );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // Directional\n\t\t\t\t\tmodel = new DirectionalLight( color, intensity );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2: // Spot\n\t\t\t\t\tlet angle = Math.PI / 3;\n\n\t\t\t\t\tif ( lightAttribute.InnerAngle !== undefined ) {\n\n\t\t\t\t\t\tangle = MathUtils.degToRad( lightAttribute.InnerAngle.value );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet penumbra = 0;\n\t\t\t\t\tif ( lightAttribute.OuterAngle !== undefined ) {\n\n\t\t\t\t\t\t// TODO: this is not correct - FBX calculates outer and inner angle in degrees\n\t\t\t\t\t\t// with OuterAngle > InnerAngle && OuterAngle <= Math.PI\n\t\t\t\t\t\t// while three.js uses a penumbra between (0, 1) to attenuate the inner angle\n\t\t\t\t\t\tpenumbra = MathUtils.degToRad( lightAttribute.OuterAngle.value );\n\t\t\t\t\t\tpenumbra = Math.max( penumbra, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmodel = new SpotLight( color, intensity, distance, angle, penumbra, decay );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown light type ' + lightAttribute.LightType.value + ', defaulting to a PointLight.' );\n\t\t\t\t\tmodel = new PointLight( color, intensity );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( lightAttribute.CastShadows !== undefined && lightAttribute.CastShadows.value === 1 ) {\n\n\t\t\t\tmodel.castShadow = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\tcreateMesh( relationships, geometryMap, materialMap ) {\n\n\t\tlet model;\n\t\tlet geometry = null;\n\t\tlet material = null;\n\t\tconst materials = [];\n\n\t\t// get geometry and materials(s) from connections\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tif ( geometryMap.has( child.ID ) ) {\n\n\t\t\t\tgeometry = geometryMap.get( child.ID );\n\n\t\t\t}\n\n\t\t\tif ( materialMap.has( child.ID ) ) {\n\n\t\t\t\tmaterials.push( materialMap.get( child.ID ) );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( materials.length > 1 ) {\n\n\t\t\tmaterial = materials;\n\n\t\t} else if ( materials.length > 0 ) {\n\n\t\t\tmaterial = materials[ 0 ];\n\n\t\t} else {\n\n\t\t\tmaterial = new MeshPhongMaterial( {\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tcolor: 0xcccccc\n\t\t\t} );\n\t\t\tmaterials.push( material );\n\n\t\t}\n\n\t\tif ( 'color' in geometry.attributes ) {\n\n\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( geometry.FBX_Deformer ) {\n\n\t\t\tmodel = new SkinnedMesh( geometry, material );\n\t\t\tmodel.normalizeSkinWeights();\n\n\t\t} else {\n\n\t\t\tmodel = new Mesh( geometry, material );\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\tcreateCurve( relationships, geometryMap ) {\n\n\t\tconst geometry = relationships.children.reduce( function ( geo, child ) {\n\n\t\t\tif ( geometryMap.has( child.ID ) ) geo = geometryMap.get( child.ID );\n\n\t\t\treturn geo;\n\n\t\t}, null );\n\n\t\t// FBX does not list materials for Nurbs lines, so we'll just put our own in here.\n\t\tconst material = new LineBasicMaterial( {\n\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\tcolor: 0x3300ff,\n\t\t\tlinewidth: 1\n\t\t} );\n\t\treturn new Line( geometry, material );\n\n\t}\n\n\t// parse the model node for transform data\n\tgetTransformData( model, modelNode ) {\n\n\t\tconst transformData = {};\n\n\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\telse transformData.eulerOrder = 'ZYX';\n\n\t\tif ( 'Lcl_Translation' in modelNode ) transformData.translation = modelNode.Lcl_Translation.value;\n\n\t\tif ( 'PreRotation' in modelNode ) transformData.preRotation = modelNode.PreRotation.value;\n\t\tif ( 'Lcl_Rotation' in modelNode ) transformData.rotation = modelNode.Lcl_Rotation.value;\n\t\tif ( 'PostRotation' in modelNode ) transformData.postRotation = modelNode.PostRotation.value;\n\n\t\tif ( 'Lcl_Scaling' in modelNode ) transformData.scale = modelNode.Lcl_Scaling.value;\n\n\t\tif ( 'ScalingOffset' in modelNode ) transformData.scalingOffset = modelNode.ScalingOffset.value;\n\t\tif ( 'ScalingPivot' in modelNode ) transformData.scalingPivot = modelNode.ScalingPivot.value;\n\n\t\tif ( 'RotationOffset' in modelNode ) transformData.rotationOffset = modelNode.RotationOffset.value;\n\t\tif ( 'RotationPivot' in modelNode ) transformData.rotationPivot = modelNode.RotationPivot.value;\n\n\t\tmodel.userData.transformData = transformData;\n\n\t}\n\n\tsetLookAtProperties( model, modelNode ) {\n\n\t\tif ( 'LookAtProperty' in modelNode ) {\n\n\t\t\tconst children = connections.get( model.ID ).children;\n\n\t\t\tchildren.forEach( function ( child ) {\n\n\t\t\t\tif ( child.relationship === 'LookAtProperty' ) {\n\n\t\t\t\t\tconst lookAtTarget = fbxTree.Objects.Model[ child.ID ];\n\n\t\t\t\t\tif ( 'Lcl_Translation' in lookAtTarget ) {\n\n\t\t\t\t\t\tconst pos = lookAtTarget.Lcl_Translation.value;\n\n\t\t\t\t\t\t// DirectionalLight, SpotLight\n\t\t\t\t\t\tif ( model.target !== undefined ) {\n\n\t\t\t\t\t\t\tmodel.target.position.fromArray( pos );\n\t\t\t\t\t\t\tsceneGraph.add( model.target );\n\n\t\t\t\t\t\t} else { // Cameras and other Object3Ds\n\n\t\t\t\t\t\t\tmodel.lookAt( new Vector3().fromArray( pos ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tbindSkeleton( skeletons, geometryMap, modelMap ) {\n\n\t\tconst bindMatrices = this.parsePoseNodes();\n\n\t\tfor ( const ID in skeletons ) {\n\n\t\t\tconst skeleton = skeletons[ ID ];\n\n\t\t\tconst parents = connections.get( parseInt( skeleton.ID ) ).parents;\n\n\t\t\tparents.forEach( function ( parent ) {\n\n\t\t\t\tif ( geometryMap.has( parent.ID ) ) {\n\n\t\t\t\t\tconst geoID = parent.ID;\n\t\t\t\t\tconst geoRelationships = connections.get( geoID );\n\n\t\t\t\t\tgeoRelationships.parents.forEach( function ( geoConnParent ) {\n\n\t\t\t\t\t\tif ( modelMap.has( geoConnParent.ID ) ) {\n\n\t\t\t\t\t\t\tconst model = modelMap.get( geoConnParent.ID );\n\n\t\t\t\t\t\t\tmodel.bind( new Skeleton( skeleton.bones ), bindMatrices[ geoConnParent.ID ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tparsePoseNodes() {\n\n\t\tconst bindMatrices = {};\n\n\t\tif ( 'Pose' in fbxTree.Objects ) {\n\n\t\t\tconst BindPoseNode = fbxTree.Objects.Pose;\n\n\t\t\tfor ( const nodeID in BindPoseNode ) {\n\n\t\t\t\tif ( BindPoseNode[ nodeID ].attrType === 'BindPose' && BindPoseNode[ nodeID ].NbPoseNodes > 0 ) {\n\n\t\t\t\t\tconst poseNodes = BindPoseNode[ nodeID ].PoseNode;\n\n\t\t\t\t\tif ( Array.isArray( poseNodes ) ) {\n\n\t\t\t\t\t\tposeNodes.forEach( function ( poseNode ) {\n\n\t\t\t\t\t\t\tbindMatrices[ poseNode.Node ] = new Matrix4().fromArray( poseNode.Matrix.a );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbindMatrices[ poseNodes.Node ] = new Matrix4().fromArray( poseNodes.Matrix.a );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bindMatrices;\n\n\t}\n\n\taddGlobalSceneSettings() {\n\n\t\tif ( 'GlobalSettings' in fbxTree ) {\n\n\t\t\tif ( 'AmbientColor' in fbxTree.GlobalSettings ) {\n\n\t\t\t\t// Parse ambient color - if it's not set to black (default), create an ambient light\n\n\t\t\t\tconst ambientColor = fbxTree.GlobalSettings.AmbientColor.value;\n\t\t\t\tconst r = ambientColor[ 0 ];\n\t\t\t\tconst g = ambientColor[ 1 ];\n\t\t\t\tconst b = ambientColor[ 2 ];\n\n\t\t\t\tif ( r !== 0 || g !== 0 || b !== 0 ) {\n\n\t\t\t\t\tconst color = new Color( r, g, b ).convertSRGBToLinear();\n\t\t\t\t\tsceneGraph.add( new AmbientLight( color, 1 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( 'UnitScaleFactor' in fbxTree.GlobalSettings ) {\n\n\t\t\t\tsceneGraph.userData.unitScaleFactor = fbxTree.GlobalSettings.UnitScaleFactor.value;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n// parse Geometry data from FBXTree and return map of BufferGeometries\nclass GeometryParser {\n\n\tconstructor() {\n\n\t\tthis.negativeMaterialIndices = false;\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Geometry\n\tparse( deformers ) {\n\n\t\tconst geometryMap = new Map();\n\n\t\tif ( 'Geometry' in fbxTree.Objects ) {\n\n\t\t\tconst geoNodes = fbxTree.Objects.Geometry;\n\n\t\t\tfor ( const nodeID in geoNodes ) {\n\n\t\t\t\tconst relationships = connections.get( parseInt( nodeID ) );\n\t\t\t\tconst geo = this.parseGeometry( relationships, geoNodes[ nodeID ], deformers );\n\n\t\t\t\tgeometryMap.set( parseInt( nodeID ), geo );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// report warnings\n\n\t\tif ( this.negativeMaterialIndices === true ) {\n\n\t\t\tconsole.warn( 'THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected.' );\n\n\t\t}\n\n\t\treturn geometryMap;\n\n\t}\n\n\t// Parse single node in FBXTree.Objects.Geometry\n\tparseGeometry( relationships, geoNode, deformers ) {\n\n\t\tswitch ( geoNode.attrType ) {\n\n\t\t\tcase 'Mesh':\n\t\t\t\treturn this.parseMeshGeometry( relationships, geoNode, deformers );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NurbsCurve':\n\t\t\t\treturn this.parseNurbsGeometry( geoNode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t// Parse single node mesh geometry in FBXTree.Objects.Geometry\n\tparseMeshGeometry( relationships, geoNode, deformers ) {\n\n\t\tconst skeletons = deformers.skeletons;\n\t\tconst morphTargets = [];\n\n\t\tconst modelNodes = relationships.parents.map( function ( parent ) {\n\n\t\t\treturn fbxTree.Objects.Model[ parent.ID ];\n\n\t\t} );\n\n\t\t// don't create geometry if it is not associated with any models\n\t\tif ( modelNodes.length === 0 ) return;\n\n\t\tconst skeleton = relationships.children.reduce( function ( skeleton, child ) {\n\n\t\t\tif ( skeletons[ child.ID ] !== undefined ) skeleton = skeletons[ child.ID ];\n\n\t\t\treturn skeleton;\n\n\t\t}, null );\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tif ( deformers.morphTargets[ child.ID ] !== undefined ) {\n\n\t\t\t\tmorphTargets.push( deformers.morphTargets[ child.ID ] );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Assume one model and get the preRotation from that\n\t\t// if there is more than one model associated with the geometry this may cause problems\n\t\tconst modelNode = modelNodes[ 0 ];\n\n\t\tconst transformData = {};\n\n\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\tif ( 'GeometricTranslation' in modelNode ) transformData.translation = modelNode.GeometricTranslation.value;\n\t\tif ( 'GeometricRotation' in modelNode ) transformData.rotation = modelNode.GeometricRotation.value;\n\t\tif ( 'GeometricScaling' in modelNode ) transformData.scale = modelNode.GeometricScaling.value;\n\n\t\tconst transform = generateTransform( transformData );\n\n\t\treturn this.genGeometry( geoNode, skeleton, morphTargets, transform );\n\n\t}\n\n\t// Generate a BufferGeometry from a node in FBXTree.Objects.Geometry\n\tgenGeometry( geoNode, skeleton, morphTargets, preTransform ) {\n\n\t\tconst geo = new BufferGeometry();\n\t\tif ( geoNode.attrName ) geo.name = geoNode.attrName;\n\n\t\tconst geoInfo = this.parseGeoNode( geoNode, skeleton );\n\t\tconst buffers = this.genBuffers( geoInfo );\n\n\t\tconst positionAttribute = new Float32BufferAttribute( buffers.vertex, 3 );\n\n\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\tgeo.setAttribute( 'position', positionAttribute );\n\n\t\tif ( buffers.colors.length > 0 ) {\n\n\t\t\tgeo.setAttribute( 'color', new Float32BufferAttribute( buffers.colors, 3 ) );\n\n\t\t}\n\n\t\tif ( skeleton ) {\n\n\t\t\tgeo.setAttribute( 'skinIndex', new Uint16BufferAttribute( buffers.weightsIndices, 4 ) );\n\n\t\t\tgeo.setAttribute( 'skinWeight', new Float32BufferAttribute( buffers.vertexWeights, 4 ) );\n\n\t\t\t// used later to bind the skeleton to the model\n\t\t\tgeo.FBX_Deformer = skeleton;\n\n\t\t}\n\n\t\tif ( buffers.normal.length > 0 ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( preTransform );\n\n\t\t\tconst normalAttribute = new Float32BufferAttribute( buffers.normal, 3 );\n\t\t\tnormalAttribute.applyNormalMatrix( normalMatrix );\n\n\t\t\tgeo.setAttribute( 'normal', normalAttribute );\n\n\t\t}\n\n\t\tbuffers.uvs.forEach( function ( uvBuffer, i ) {\n\n\t\t\tconst name = i === 0 ? 'uv' : `uv${ i }`;\n\n\t\t\tgeo.setAttribute( name, new Float32BufferAttribute( buffers.uvs[ i ], 2 ) );\n\n\t\t} );\n\n\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t// Convert the material indices of each vertex into rendering groups on the geometry.\n\t\t\tlet prevMaterialIndex = buffers.materialIndex[ 0 ];\n\t\t\tlet startIndex = 0;\n\n\t\t\tbuffers.materialIndex.forEach( function ( currentIndex, i ) {\n\n\t\t\t\tif ( currentIndex !== prevMaterialIndex ) {\n\n\t\t\t\t\tgeo.addGroup( startIndex, i - startIndex, prevMaterialIndex );\n\n\t\t\t\t\tprevMaterialIndex = currentIndex;\n\t\t\t\t\tstartIndex = i;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// the loop above doesn't add the last group, do that here.\n\t\t\tif ( geo.groups.length > 0 ) {\n\n\t\t\t\tconst lastGroup = geo.groups[ geo.groups.length - 1 ];\n\t\t\t\tconst lastIndex = lastGroup.start + lastGroup.count;\n\n\t\t\t\tif ( lastIndex !== buffers.materialIndex.length ) {\n\n\t\t\t\t\tgeo.addGroup( lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// case where there are multiple materials but the whole geometry is only\n\t\t\t// using one of them\n\t\t\tif ( geo.groups.length === 0 ) {\n\n\t\t\t\tgeo.addGroup( 0, buffers.materialIndex.length, buffers.materialIndex[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.addMorphTargets( geo, geoNode, morphTargets, preTransform );\n\n\t\treturn geo;\n\n\t}\n\n\tparseGeoNode( geoNode, skeleton ) {\n\n\t\tconst geoInfo = {};\n\n\t\tgeoInfo.vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : [];\n\t\tgeoInfo.vertexIndices = ( geoNode.PolygonVertexIndex !== undefined ) ? geoNode.PolygonVertexIndex.a : [];\n\n\t\tif ( geoNode.LayerElementColor ) {\n\n\t\t\tgeoInfo.color = this.parseVertexColors( geoNode.LayerElementColor[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementMaterial ) {\n\n\t\t\tgeoInfo.material = this.parseMaterialIndices( geoNode.LayerElementMaterial[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementNormal ) {\n\n\t\t\tgeoInfo.normal = this.parseNormals( geoNode.LayerElementNormal[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementUV ) {\n\n\t\t\tgeoInfo.uv = [];\n\n\t\t\tlet i = 0;\n\t\t\twhile ( geoNode.LayerElementUV[ i ] ) {\n\n\t\t\t\tif ( geoNode.LayerElementUV[ i ].UV ) {\n\n\t\t\t\t\tgeoInfo.uv.push( this.parseUVs( geoNode.LayerElementUV[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeoInfo.weightTable = {};\n\n\t\tif ( skeleton !== null ) {\n\n\t\t\tgeoInfo.skeleton = skeleton;\n\n\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t// loop over the bone's vertex indices and weights\n\t\t\t\trawBone.indices.forEach( function ( index, j ) {\n\n\t\t\t\t\tif ( geoInfo.weightTable[ index ] === undefined ) geoInfo.weightTable[ index ] = [];\n\n\t\t\t\t\tgeoInfo.weightTable[ index ].push( {\n\n\t\t\t\t\t\tid: i,\n\t\t\t\t\t\tweight: rawBone.weights[ j ],\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn geoInfo;\n\n\t}\n\n\tgenBuffers( geoInfo ) {\n\n\t\tconst buffers = {\n\t\t\tvertex: [],\n\t\t\tnormal: [],\n\t\t\tcolors: [],\n\t\t\tuvs: [],\n\t\t\tmaterialIndex: [],\n\t\t\tvertexWeights: [],\n\t\t\tweightsIndices: [],\n\t\t};\n\n\t\tlet polygonIndex = 0;\n\t\tlet faceLength = 0;\n\t\tlet displayedWeightsWarning = false;\n\n\t\t// these will hold data for a single face\n\t\tlet facePositionIndexes = [];\n\t\tlet faceNormals = [];\n\t\tlet faceColors = [];\n\t\tlet faceUVs = [];\n\t\tlet faceWeights = [];\n\t\tlet faceWeightIndices = [];\n\n\t\tconst scope = this;\n\t\tgeoInfo.vertexIndices.forEach( function ( vertexIndex, polygonVertexIndex ) {\n\n\t\t\tlet materialIndex;\n\t\t\tlet endOfFace = false;\n\n\t\t\t// Face index and vertex index arrays are combined in a single array\n\t\t\t// A cube with quad faces looks like this:\n\t\t\t// PolygonVertexIndex: *24 {\n\t\t\t// a: 0, 1, 3, -3, 2, 3, 5, -5, 4, 5, 7, -7, 6, 7, 1, -1, 1, 7, 5, -4, 6, 0, 2, -5\n\t\t\t// }\n\t\t\t// Negative numbers mark the end of a face - first face here is 0, 1, 3, -3\n\t\t\t// to find index of last vertex bit shift the index: ^ - 1\n\t\t\tif ( vertexIndex < 0 ) {\n\n\t\t\t\tvertexIndex = vertexIndex ^ - 1; // equivalent to ( x * -1 ) - 1\n\t\t\t\tendOfFace = true;\n\n\t\t\t}\n\n\t\t\tlet weightIndices = [];\n\t\t\tlet weights = [];\n\n\t\t\tfacePositionIndexes.push( vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2 );\n\n\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color );\n\n\t\t\t\tfaceColors.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\tif ( geoInfo.weightTable[ vertexIndex ] !== undefined ) {\n\n\t\t\t\t\tgeoInfo.weightTable[ vertexIndex ].forEach( function ( wt ) {\n\n\t\t\t\t\t\tweights.push( wt.weight );\n\t\t\t\t\t\tweightIndices.push( wt.id );\n\n\t\t\t\t\t} );\n\n\n\t\t\t\t}\n\n\t\t\t\tif ( weights.length > 4 ) {\n\n\t\t\t\t\tif ( ! displayedWeightsWarning ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.' );\n\t\t\t\t\t\tdisplayedWeightsWarning = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst wIndex = [ 0, 0, 0, 0 ];\n\t\t\t\t\tconst Weight = [ 0, 0, 0, 0 ];\n\n\t\t\t\t\tweights.forEach( function ( weight, weightIndex ) {\n\n\t\t\t\t\t\tlet currentWeight = weight;\n\t\t\t\t\t\tlet currentIndex = weightIndices[ weightIndex ];\n\n\t\t\t\t\t\tWeight.forEach( function ( comparedWeight, comparedWeightIndex, comparedWeightArray ) {\n\n\t\t\t\t\t\t\tif ( currentWeight > comparedWeight ) {\n\n\t\t\t\t\t\t\t\tcomparedWeightArray[ comparedWeightIndex ] = currentWeight;\n\t\t\t\t\t\t\t\tcurrentWeight = comparedWeight;\n\n\t\t\t\t\t\t\t\tconst tmp = wIndex[ comparedWeightIndex ];\n\t\t\t\t\t\t\t\twIndex[ comparedWeightIndex ] = currentIndex;\n\t\t\t\t\t\t\t\tcurrentIndex = tmp;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tweightIndices = wIndex;\n\t\t\t\t\tweights = Weight;\n\n\t\t\t\t}\n\n\t\t\t\t// if the weight array is shorter than 4 pad with 0s\n\t\t\t\twhile ( weights.length < 4 ) {\n\n\t\t\t\t\tweights.push( 0 );\n\t\t\t\t\tweightIndices.push( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 4; ++ i ) {\n\n\t\t\t\t\tfaceWeights.push( weights[ i ] );\n\t\t\t\t\tfaceWeightIndices.push( weightIndices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal );\n\n\t\t\t\tfaceNormals.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\tmaterialIndex = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material )[ 0 ];\n\n\t\t\t\tif ( materialIndex < 0 ) {\n\n\t\t\t\t\tscope.negativeMaterialIndices = true;\n\t\t\t\t\tmaterialIndex = 0; // fallback\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\tgeoInfo.uv.forEach( function ( uv, i ) {\n\n\t\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, uv );\n\n\t\t\t\t\tif ( faceUVs[ i ] === undefined ) {\n\n\t\t\t\t\t\tfaceUVs[ i ] = [];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceUVs[ i ].push( data[ 0 ] );\n\t\t\t\t\tfaceUVs[ i ].push( data[ 1 ] );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfaceLength ++;\n\n\t\t\tif ( endOfFace ) {\n\n\t\t\t\tscope.genFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength );\n\n\t\t\t\tpolygonIndex ++;\n\t\t\t\tfaceLength = 0;\n\n\t\t\t\t// reset arrays for the next face\n\t\t\t\tfacePositionIndexes = [];\n\t\t\t\tfaceNormals = [];\n\t\t\t\tfaceColors = [];\n\t\t\t\tfaceUVs = [];\n\t\t\t\tfaceWeights = [];\n\t\t\t\tfaceWeightIndices = [];\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn buffers;\n\n\t}\n\n\t// See https://www.khronos.org/opengl/wiki/Calculating_a_Surface_Normal\n\tgetNormalNewell( vertices ) {\n\n\t\tconst normal = new Vector3( 0.0, 0.0, 0.0 );\n\n\t\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\t\tconst current = vertices[ i ];\n\t\t\tconst next = vertices[ ( i + 1 ) % vertices.length ];\n\n\t\t\tnormal.x += ( current.y - next.y ) * ( current.z + next.z );\n\t\t\tnormal.y += ( current.z - next.z ) * ( current.x + next.x );\n\t\t\tnormal.z += ( current.x - next.x ) * ( current.y + next.y );\n\n\t\t}\n\n\t\tnormal.normalize();\n\n\t\treturn normal;\n\n\t}\n\n\tgetNormalTangentAndBitangent( vertices ) {\n\n\t\tconst normalVector = this.getNormalNewell( vertices );\n\t\t// Avoid up being equal or almost equal to normalVector\n\t\tconst up = Math.abs( normalVector.z ) > 0.5 ? new Vector3( 0.0, 1.0, 0.0 ) : new Vector3( 0.0, 0.0, 1.0 );\n\t\tconst tangent = up.cross( normalVector ).normalize();\n\t\tconst bitangent = normalVector.clone().cross( tangent ).normalize();\n\n\t\treturn {\n\t\t\tnormal: normalVector,\n\t\t\ttangent: tangent,\n\t\t\tbitangent: bitangent\n\t\t};\n\n\t}\n\n\tflattenVertex( vertex, normalTangent, normalBitangent ) {\n\n\t\treturn new Vector2(\n\t\t\tvertex.dot( normalTangent ),\n\t\t\tvertex.dot( normalBitangent )\n\t\t);\n\n\t}\n\n\t// Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris\n\tgenFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength ) {\n\n\t\tlet triangles;\n\n\t\tif ( faceLength > 3 ) {\n\n\t\t\t// Triangulate n-gon using earcut\n\n\t\t\tconst vertices = [];\n\t\t\t// in morphing scenario vertexPositions represent morphPositions\n\t\t\t// while baseVertexPositions represent the original geometry's positions\n\t\t\tconst positions = geoInfo.baseVertexPositions || geoInfo.vertexPositions;\n\t\t\tfor ( let i = 0; i < facePositionIndexes.length; i += 3 ) {\n\n\t\t\t\tvertices.push(\n\t\t\t\t\tnew Vector3(\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i ] ],\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i + 1 ] ],\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i + 2 ] ]\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tconst { tangent, bitangent } = this.getNormalTangentAndBitangent( vertices );\n\t\t\tconst triangulationInput = [];\n\n\t\t\tfor ( const vertex of vertices ) {\n\n\t\t\t\ttriangulationInput.push( this.flattenVertex( vertex, tangent, bitangent ) );\n\n\t\t\t}\n\n\t\t\t// When vertices is an array of [0,0,0] elements (which is the case for vertices not participating in morph)\n\t\t\t// the triangulationInput will be an array of [0,0] elements\n\t\t\t// resulting in an array of 0 triangles being returned from ShapeUtils.triangulateShape\n\t\t\t// leading to not pushing into buffers.vertex the redundant vertices (the vertices that are not morphed).\n\t\t\t// That's why, in order to support morphing scenario, \"positions\" is looking first for baseVertexPositions,\n\t\t\t// so that we don't end up with an array of 0 triangles for the faces not participating in morph.\n\t\t\ttriangles = ShapeUtils.triangulateShape( triangulationInput, [] );\n\n\t\t} else {\n\n\t\t\t// Regular triangle, skip earcut triangulation step\n\t\t\ttriangles = [[ 0, 1, 2 ]];\n\n\t\t}\n\n\t\tfor ( const [ i0, i1, i2 ] of triangles ) {\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 + 2 ] ] );\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 + 2 ] ] );\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 + 2 ] ] );\n\n\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 3 ] );\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 3 ] );\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 3 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 + 2 ] );\n\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 + 2 ] );\n\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 + 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 + 2 ] );\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 + 2 ] );\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 + 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\tgeoInfo.uv.forEach( function ( uv, j ) {\n\n\t\t\t\t\tif ( buffers.uvs[ j ] === undefined ) buffers.uvs[ j ] = [];\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i0 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i0 * 2 + 1 ] );\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i1 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i1 * 2 + 1 ] );\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i2 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i2 * 2 + 1 ] );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\taddMorphTargets( parentGeo, parentGeoNode, morphTargets, preTransform ) {\n\n\t\tif ( morphTargets.length === 0 ) return;\n\n\t\tparentGeo.morphTargetsRelative = true;\n\n\t\tparentGeo.morphAttributes.position = [];\n\t\t// parentGeo.morphAttributes.normal = []; // not implemented\n\n\t\tconst scope = this;\n\t\tmorphTargets.forEach( function ( morphTarget ) {\n\n\t\t\tmorphTarget.rawTargets.forEach( function ( rawTarget ) {\n\n\t\t\t\tconst morphGeoNode = fbxTree.Objects.Geometry[ rawTarget.geoID ];\n\n\t\t\t\tif ( morphGeoNode !== undefined ) {\n\n\t\t\t\t\tscope.genMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t// a morph geometry node is similar to a standard node, and the node is also contained\n\t// in FBXTree.Objects.Geometry, however it can only have attributes for position, normal\n\t// and a special attribute Index defining which vertices of the original geometry are affected\n\t// Normal and position attributes only have data for the vertices that are affected by the morph\n\tgenMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, name ) {\n\n\t\tconst basePositions = parentGeoNode.Vertices !== undefined ? parentGeoNode.Vertices.a : [];\n\t\tconst baseIndices = parentGeoNode.PolygonVertexIndex !== undefined ? parentGeoNode.PolygonVertexIndex.a : [];\n\n\t\tconst morphPositionsSparse = morphGeoNode.Vertices !== undefined ? morphGeoNode.Vertices.a : [];\n\t\tconst morphIndices = morphGeoNode.Indexes !== undefined ? morphGeoNode.Indexes.a : [];\n\n\t\tconst length = parentGeo.attributes.position.count * 3;\n\t\tconst morphPositions = new Float32Array( length );\n\n\t\tfor ( let i = 0; i < morphIndices.length; i ++ ) {\n\n\t\t\tconst morphIndex = morphIndices[ i ] * 3;\n\n\t\t\tmorphPositions[ morphIndex ] = morphPositionsSparse[ i * 3 ];\n\t\t\tmorphPositions[ morphIndex + 1 ] = morphPositionsSparse[ i * 3 + 1 ];\n\t\t\tmorphPositions[ morphIndex + 2 ] = morphPositionsSparse[ i * 3 + 2 ];\n\n\t\t}\n\n\t\t// TODO: add morph normal support\n\t\tconst morphGeoInfo = {\n\t\t\tvertexIndices: baseIndices,\n\t\t\tvertexPositions: morphPositions,\n\t\t\tbaseVertexPositions: basePositions\n\t\t};\n\n\t\tconst morphBuffers = this.genBuffers( morphGeoInfo );\n\n\t\tconst positionAttribute = new Float32BufferAttribute( morphBuffers.vertex, 3 );\n\t\tpositionAttribute.name = name || morphGeoNode.attrName;\n\n\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\tparentGeo.morphAttributes.position.push( positionAttribute );\n\n\t}\n\n\t// Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists\n\tparseNormals( NormalNode ) {\n\n\t\tconst mappingType = NormalNode.MappingInformationType;\n\t\tconst referenceType = NormalNode.ReferenceInformationType;\n\t\tconst buffer = NormalNode.Normals.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tif ( 'NormalIndex' in NormalNode ) {\n\n\t\t\t\tindexBuffer = NormalNode.NormalIndex.a;\n\n\t\t\t} else if ( 'NormalsIndex' in NormalNode ) {\n\n\t\t\t\tindexBuffer = NormalNode.NormalsIndex.a;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 3,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists\n\tparseUVs( UVNode ) {\n\n\t\tconst mappingType = UVNode.MappingInformationType;\n\t\tconst referenceType = UVNode.ReferenceInformationType;\n\t\tconst buffer = UVNode.UV.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tindexBuffer = UVNode.UVIndex.a;\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 2,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists\n\tparseVertexColors( ColorNode ) {\n\n\t\tconst mappingType = ColorNode.MappingInformationType;\n\t\tconst referenceType = ColorNode.ReferenceInformationType;\n\t\tconst buffer = ColorNode.Colors.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tindexBuffer = ColorNode.ColorIndex.a;\n\n\t\t}\n\n\t\tfor ( let i = 0, c = new Color(); i < buffer.length; i += 4 ) {\n\n\t\t\tc.fromArray( buffer, i ).convertSRGBToLinear().toArray( buffer, i );\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 4,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists\n\tparseMaterialIndices( MaterialNode ) {\n\n\t\tconst mappingType = MaterialNode.MappingInformationType;\n\t\tconst referenceType = MaterialNode.ReferenceInformationType;\n\n\t\tif ( mappingType === 'NoMappingInformation' ) {\n\n\t\t\treturn {\n\t\t\t\tdataSize: 1,\n\t\t\t\tbuffer: [ 0 ],\n\t\t\t\tindices: [ 0 ],\n\t\t\t\tmappingType: 'AllSame',\n\t\t\t\treferenceType: referenceType\n\t\t\t};\n\n\t\t}\n\n\t\tconst materialIndexBuffer = MaterialNode.Materials.a;\n\n\t\t// Since materials are stored as indices, there's a bit of a mismatch between FBX and what\n\t\t// we expect.So we create an intermediate buffer that points to the index in the buffer,\n\t\t// for conforming with the other functions we've written for other data.\n\t\tconst materialIndices = [];\n\n\t\tfor ( let i = 0; i < materialIndexBuffer.length; ++ i ) {\n\n\t\t\tmaterialIndices.push( i );\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 1,\n\t\t\tbuffer: materialIndexBuffer,\n\t\t\tindices: materialIndices,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Generate a NurbGeometry from a node in FBXTree.Objects.Geometry\n\tparseNurbsGeometry( geoNode ) {\n\n\t\tconst order = parseInt( geoNode.Order );\n\n\t\tif ( isNaN( order ) ) {\n\n\t\t\tconsole.error( 'THREE.FBXLoader: Invalid Order %s given for geometry ID: %s', geoNode.Order, geoNode.id );\n\t\t\treturn new BufferGeometry();\n\n\t\t}\n\n\t\tconst degree = order - 1;\n\n\t\tconst knots = geoNode.KnotVector.a;\n\t\tconst controlPoints = [];\n\t\tconst pointsValues = geoNode.Points.a;\n\n\t\tfor ( let i = 0, l = pointsValues.length; i < l; i += 4 ) {\n\n\t\t\tcontrolPoints.push( new Vector4().fromArray( pointsValues, i ) );\n\n\t\t}\n\n\t\tlet startKnot, endKnot;\n\n\t\tif ( geoNode.Form === 'Closed' ) {\n\n\t\t\tcontrolPoints.push( controlPoints[ 0 ] );\n\n\t\t} else if ( geoNode.Form === 'Periodic' ) {\n\n\t\t\tstartKnot = degree;\n\t\t\tendKnot = knots.length - 1 - startKnot;\n\n\t\t\tfor ( let i = 0; i < degree; ++ i ) {\n\n\t\t\t\tcontrolPoints.push( controlPoints[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst curve = new NURBSCurve( degree, knots, controlPoints, startKnot, endKnot );\n\t\tconst points = curve.getPoints( controlPoints.length * 12 );\n\n\t\treturn new BufferGeometry().setFromPoints( points );\n\n\t}\n\n}\n\n// parse animation data from FBXTree\nclass AnimationParser {\n\n\t// take raw animation clips and turn them into three.js animation clips\n\tparse() {\n\n\t\tconst animationClips = [];\n\n\t\tconst rawClips = this.parseClips();\n\n\t\tif ( rawClips !== undefined ) {\n\n\t\t\tfor ( const key in rawClips ) {\n\n\t\t\t\tconst rawClip = rawClips[ key ];\n\n\t\t\t\tconst clip = this.addClip( rawClip );\n\n\t\t\t\tanimationClips.push( clip );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animationClips;\n\n\t}\n\n\tparseClips() {\n\n\t\t// since the actual transformation data is stored in FBXTree.Objects.AnimationCurve,\n\t\t// if this is undefined we can safely assume there are no animations\n\t\tif ( fbxTree.Objects.AnimationCurve === undefined ) return undefined;\n\n\t\tconst curveNodesMap = this.parseAnimationCurveNodes();\n\n\t\tthis.parseAnimationCurves( curveNodesMap );\n\n\t\tconst layersMap = this.parseAnimationLayers( curveNodesMap );\n\t\tconst rawClips = this.parseAnimStacks( layersMap );\n\n\t\treturn rawClips;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationCurveNode\n\t// each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation )\n\t// and is referenced by an AnimationLayer\n\tparseAnimationCurveNodes() {\n\n\t\tconst rawCurveNodes = fbxTree.Objects.AnimationCurveNode;\n\n\t\tconst curveNodesMap = new Map();\n\n\t\tfor ( const nodeID in rawCurveNodes ) {\n\n\t\t\tconst rawCurveNode = rawCurveNodes[ nodeID ];\n\n\t\t\tif ( rawCurveNode.attrName.match( /S|R|T|DeformPercent/ ) !== null ) {\n\n\t\t\t\tconst curveNode = {\n\n\t\t\t\t\tid: rawCurveNode.id,\n\t\t\t\t\tattr: rawCurveNode.attrName,\n\t\t\t\t\tcurves: {},\n\n\t\t\t\t};\n\n\t\t\t\tcurveNodesMap.set( curveNode.id, curveNode );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn curveNodesMap;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationCurve and connect them up to\n\t// previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated\n\t// axis ( e.g. times and values of x rotation)\n\tparseAnimationCurves( curveNodesMap ) {\n\n\t\tconst rawCurves = fbxTree.Objects.AnimationCurve;\n\n\t\t// TODO: Many values are identical up to roundoff error, but won't be optimised\n\t\t// e.g. position times: [0, 0.4, 0. 8]\n\t\t// position values: [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.235384487103147e-7, 93.67520904541016, -0.9982695579528809]\n\t\t// clearly, this should be optimised to\n\t\t// times: [0], positions [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809]\n\t\t// this shows up in nearly every FBX file, and generally time array is length > 100\n\n\t\tfor ( const nodeID in rawCurves ) {\n\n\t\t\tconst animationCurve = {\n\n\t\t\t\tid: rawCurves[ nodeID ].id,\n\t\t\t\ttimes: rawCurves[ nodeID ].KeyTime.a.map( convertFBXTimeToSeconds ),\n\t\t\t\tvalues: rawCurves[ nodeID ].KeyValueFloat.a,\n\n\t\t\t};\n\n\t\t\tconst relationships = connections.get( animationCurve.id );\n\n\t\t\tif ( relationships !== undefined ) {\n\n\t\t\t\tconst animationCurveID = relationships.parents[ 0 ].ID;\n\t\t\t\tconst animationCurveRelationship = relationships.parents[ 0 ].relationship;\n\n\t\t\t\tif ( animationCurveRelationship.match( /X/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'x' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /Y/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'y' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /Z/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'z' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /DeformPercent/ ) && curveNodesMap.has( animationCurveID ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'morph' ] = animationCurve;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references\n\t// to various AnimationCurveNodes and is referenced by an AnimationStack node\n\t// note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack\n\tparseAnimationLayers( curveNodesMap ) {\n\n\t\tconst rawLayers = fbxTree.Objects.AnimationLayer;\n\n\t\tconst layersMap = new Map();\n\n\t\tfor ( const nodeID in rawLayers ) {\n\n\t\t\tconst layerCurveNodes = [];\n\n\t\t\tconst connection = connections.get( parseInt( nodeID ) );\n\n\t\t\tif ( connection !== undefined ) {\n\n\t\t\t\t// all the animationCurveNodes used in the layer\n\t\t\t\tconst children = connection.children;\n\n\t\t\t\tchildren.forEach( function ( child, i ) {\n\n\t\t\t\t\tif ( curveNodesMap.has( child.ID ) ) {\n\n\t\t\t\t\t\tconst curveNode = curveNodesMap.get( child.ID );\n\n\t\t\t\t\t\t// check that the curves are defined for at least one axis, otherwise ignore the curveNode\n\t\t\t\t\t\tif ( curveNode.curves.x !== undefined || curveNode.curves.y !== undefined || curveNode.curves.z !== undefined ) {\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconst modelID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tif ( modelID !== undefined ) {\n\n\t\t\t\t\t\t\t\t\tconst rawModel = fbxTree.Objects.Model[ modelID.toString() ];\n\n\t\t\t\t\t\t\t\t\tif ( rawModel === undefined ) {\n\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered a unused curve.', child );\n\t\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst node = {\n\n\t\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\t\tID: rawModel.id,\n\t\t\t\t\t\t\t\t\t\tinitialPosition: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\tinitialRotation: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\tinitialScale: [ 1, 1, 1 ],\n\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tsceneGraph.traverse( function ( child ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( child.ID === rawModel.id ) {\n\n\t\t\t\t\t\t\t\t\t\t\tnode.transform = child.matrix;\n\n\t\t\t\t\t\t\t\t\t\t\tif ( child.userData.transformData ) node.eulerOrder = child.userData.transformData.eulerOrder;\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t\tif ( ! node.transform ) node.transform = new Matrix4();\n\n\t\t\t\t\t\t\t\t\t// if the animated model is pre rotated, we'll have to apply the pre rotations to every\n\t\t\t\t\t\t\t\t\t// animation value as well\n\t\t\t\t\t\t\t\t\tif ( 'PreRotation' in rawModel ) node.preRotation = rawModel.PreRotation.value;\n\t\t\t\t\t\t\t\t\tif ( 'PostRotation' in rawModel ) node.postRotation = rawModel.PostRotation.value;\n\n\t\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] ) layerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t} else if ( curveNode.curves.morph !== undefined ) {\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconst deformerID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tconst morpherID = connections.get( deformerID ).parents[ 0 ].ID;\n\t\t\t\t\t\t\t\tconst geoID = connections.get( morpherID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\t// assuming geometry is not used in more than one model\n\t\t\t\t\t\t\t\tconst modelID = connections.get( geoID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tconst rawModel = fbxTree.Objects.Model[ modelID ];\n\n\t\t\t\t\t\t\t\tconst node = {\n\n\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\tmorphName: fbxTree.Objects.Deformer[ deformerID ].attrName,\n\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlayerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tlayersMap.set( parseInt( nodeID ), layerCurveNodes );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn layersMap;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation\n\t// hierarchy. Each Stack node will be used to create a AnimationClip\n\tparseAnimStacks( layersMap ) {\n\n\t\tconst rawStacks = fbxTree.Objects.AnimationStack;\n\n\t\t// connect the stacks (clips) up to the layers\n\t\tconst rawClips = {};\n\n\t\tfor ( const nodeID in rawStacks ) {\n\n\t\t\tconst children = connections.get( parseInt( nodeID ) ).children;\n\n\t\t\tif ( children.length > 1 ) {\n\n\t\t\t\t// it seems like stacks will always be associated with a single layer. But just in case there are files\n\t\t\t\t// where there are multiple layers per stack, we'll display a warning\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.' );\n\n\t\t\t}\n\n\t\t\tconst layer = layersMap.get( children[ 0 ].ID );\n\n\t\t\trawClips[ nodeID ] = {\n\n\t\t\t\tname: rawStacks[ nodeID ].attrName,\n\t\t\t\tlayer: layer,\n\n\t\t\t};\n\n\t\t}\n\n\t\treturn rawClips;\n\n\t}\n\n\taddClip( rawClip ) {\n\n\t\tlet tracks = [];\n\n\t\tconst scope = this;\n\t\trawClip.layer.forEach( function ( rawTracks ) {\n\n\t\t\ttracks = tracks.concat( scope.generateTracks( rawTracks ) );\n\n\t\t} );\n\n\t\treturn new AnimationClip( rawClip.name, - 1, tracks );\n\n\t}\n\n\tgenerateTracks( rawTracks ) {\n\n\t\tconst tracks = [];\n\n\t\tlet initialPosition = new Vector3();\n\t\tlet initialScale = new Vector3();\n\n\t\tif ( rawTracks.transform ) rawTracks.transform.decompose( initialPosition, new Quaternion(), initialScale );\n\n\t\tinitialPosition = initialPosition.toArray();\n\t\tinitialScale = initialScale.toArray();\n\n\t\tif ( rawTracks.T !== undefined && Object.keys( rawTracks.T.curves ).length > 0 ) {\n\n\t\t\tconst positionTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.T.curves, initialPosition, 'position' );\n\t\t\tif ( positionTrack !== undefined ) tracks.push( positionTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.R !== undefined && Object.keys( rawTracks.R.curves ).length > 0 ) {\n\n\t\t\tconst rotationTrack = this.generateRotationTrack( rawTracks.modelName, rawTracks.R.curves, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder );\n\t\t\tif ( rotationTrack !== undefined ) tracks.push( rotationTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.S !== undefined && Object.keys( rawTracks.S.curves ).length > 0 ) {\n\n\t\t\tconst scaleTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.S.curves, initialScale, 'scale' );\n\t\t\tif ( scaleTrack !== undefined ) tracks.push( scaleTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.DeformPercent !== undefined ) {\n\n\t\t\tconst morphTrack = this.generateMorphTrack( rawTracks );\n\t\t\tif ( morphTrack !== undefined ) tracks.push( morphTrack );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\tgenerateVectorTrack( modelName, curves, initialValue, type ) {\n\n\t\tconst times = this.getTimesForAllAxes( curves );\n\t\tconst values = this.getKeyframeTrackValues( times, curves, initialValue );\n\n\t\treturn new VectorKeyframeTrack( modelName + '.' + type, times, values );\n\n\t}\n\n\tgenerateRotationTrack( modelName, curves, preRotation, postRotation, eulerOrder ) {\n\n\t\tlet times;\n\t\tlet values;\n\n\t\tif ( curves.x !== undefined && curves.y !== undefined && curves.z !== undefined ) {\n\n\t\t\tconst result = this.interpolateRotations( curves.x, curves.y, curves.z, eulerOrder );\n\n\t\t\ttimes = result[ 0 ];\n\t\t\tvalues = result[ 1 ];\n\n\t\t}\n\n\t\tif ( preRotation !== undefined ) {\n\n\t\t\tpreRotation = preRotation.map( MathUtils.degToRad );\n\t\t\tpreRotation.push( eulerOrder );\n\n\t\t\tpreRotation = new Euler().fromArray( preRotation );\n\t\t\tpreRotation = new Quaternion().setFromEuler( preRotation );\n\n\t\t}\n\n\t\tif ( postRotation !== undefined ) {\n\n\t\t\tpostRotation = postRotation.map( MathUtils.degToRad );\n\t\t\tpostRotation.push( eulerOrder );\n\n\t\t\tpostRotation = new Euler().fromArray( postRotation );\n\t\t\tpostRotation = new Quaternion().setFromEuler( postRotation ).invert();\n\n\t\t}\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst euler = new Euler();\n\n\t\tconst quaternionValues = [];\n\n\t\tif ( ! values || ! times ) return new QuaternionKeyframeTrack( modelName + '.quaternion', [ 0 ], [ 0 ] );\n\n\t\tfor ( let i = 0; i < values.length; i += 3 ) {\n\n\t\t\teuler.set( values[ i ], values[ i + 1 ], values[ i + 2 ], eulerOrder );\n\t\t\tquaternion.setFromEuler( euler );\n\n\t\t\tif ( preRotation !== undefined ) quaternion.premultiply( preRotation );\n\t\t\tif ( postRotation !== undefined ) quaternion.multiply( postRotation );\n\n\t\t\t// Check unroll\n\t\t\tif ( i > 2 ) {\n\n\t\t\t\tconst prevQuat = new Quaternion().fromArray(\n\t\t\t\t\tquaternionValues,\n\t\t\t\t\t( ( i - 3 ) / 3 ) * 4\n\t\t\t\t);\n\n\t\t\t\tif ( prevQuat.dot( quaternion ) < 0 ) {\n\n\t\t\t\t\tquaternion.set( - quaternion.x, - quaternion.y, - quaternion.z, - quaternion.w );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tquaternion.toArray( quaternionValues, ( i / 3 ) * 4 );\n\n\t\t}\n\n\t\treturn new QuaternionKeyframeTrack( modelName + '.quaternion', times, quaternionValues );\n\n\t}\n\n\tgenerateMorphTrack( rawTracks ) {\n\n\t\tconst curves = rawTracks.DeformPercent.curves.morph;\n\t\tconst values = curves.values.map( function ( val ) {\n\n\t\t\treturn val / 100;\n\n\t\t} );\n\n\t\tconst morphNum = sceneGraph.getObjectByName( rawTracks.modelName ).morphTargetDictionary[ rawTracks.morphName ];\n\n\t\treturn new NumberKeyframeTrack( rawTracks.modelName + '.morphTargetInfluences[' + morphNum + ']', curves.times, values );\n\n\t}\n\n\t// For all animated objects, times are defined separately for each axis\n\t// Here we'll combine the times into one sorted array without duplicates\n\tgetTimesForAllAxes( curves ) {\n\n\t\tlet times = [];\n\n\t\t// first join together the times for each axis, if defined\n\t\tif ( curves.x !== undefined ) times = times.concat( curves.x.times );\n\t\tif ( curves.y !== undefined ) times = times.concat( curves.y.times );\n\t\tif ( curves.z !== undefined ) times = times.concat( curves.z.times );\n\n\t\t// then sort them\n\t\ttimes = times.sort( function ( a, b ) {\n\n\t\t\treturn a - b;\n\n\t\t} );\n\n\t\t// and remove duplicates\n\t\tif ( times.length > 1 ) {\n\n\t\t\tlet targetIndex = 1;\n\t\t\tlet lastValue = times[ 0 ];\n\t\t\tfor ( let i = 1; i < times.length; i ++ ) {\n\n\t\t\t\tconst currentValue = times[ i ];\n\t\t\t\tif ( currentValue !== lastValue ) {\n\n\t\t\t\t\ttimes[ targetIndex ] = currentValue;\n\t\t\t\t\tlastValue = currentValue;\n\t\t\t\t\ttargetIndex ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttimes = times.slice( 0, targetIndex );\n\n\t\t}\n\n\t\treturn times;\n\n\t}\n\n\tgetKeyframeTrackValues( times, curves, initialValue ) {\n\n\t\tconst prevValue = initialValue;\n\n\t\tconst values = [];\n\n\t\tlet xIndex = - 1;\n\t\tlet yIndex = - 1;\n\t\tlet zIndex = - 1;\n\n\t\ttimes.forEach( function ( time ) {\n\n\t\t\tif ( curves.x ) xIndex = curves.x.times.indexOf( time );\n\t\t\tif ( curves.y ) yIndex = curves.y.times.indexOf( time );\n\t\t\tif ( curves.z ) zIndex = curves.z.times.indexOf( time );\n\n\t\t\t// if there is an x value defined for this frame, use that\n\t\t\tif ( xIndex !== - 1 ) {\n\n\t\t\t\tconst xValue = curves.x.values[ xIndex ];\n\t\t\t\tvalues.push( xValue );\n\t\t\t\tprevValue[ 0 ] = xValue;\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise use the x value from the previous frame\n\t\t\t\tvalues.push( prevValue[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( yIndex !== - 1 ) {\n\n\t\t\t\tconst yValue = curves.y.values[ yIndex ];\n\t\t\t\tvalues.push( yValue );\n\t\t\t\tprevValue[ 1 ] = yValue;\n\n\t\t\t} else {\n\n\t\t\t\tvalues.push( prevValue[ 1 ] );\n\n\t\t\t}\n\n\t\t\tif ( zIndex !== - 1 ) {\n\n\t\t\t\tconst zValue = curves.z.values[ zIndex ];\n\t\t\t\tvalues.push( zValue );\n\t\t\t\tprevValue[ 2 ] = zValue;\n\n\t\t\t} else {\n\n\t\t\t\tvalues.push( prevValue[ 2 ] );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn values;\n\n\t}\n\n\t// Rotations are defined as Euler angles which can have values of any size\n\t// These will be converted to quaternions which don't support values greater than\n\t// PI, so we'll interpolate large rotations\n\tinterpolateRotations( curvex, curvey, curvez, eulerOrder ) {\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\t// Add first frame\n\t\ttimes.push( curvex.times[ 0 ] );\n\t\tvalues.push( MathUtils.degToRad( curvex.values[ 0 ] ) );\n\t\tvalues.push( MathUtils.degToRad( curvey.values[ 0 ] ) );\n\t\tvalues.push( MathUtils.degToRad( curvez.values[ 0 ] ) );\n\n\t\tfor ( let i = 1; i < curvex.values.length; i ++ ) {\n\n\t\t\tconst initialValue = [\n\t\t\t\tcurvex.values[ i - 1 ],\n\t\t\t\tcurvey.values[ i - 1 ],\n\t\t\t\tcurvez.values[ i - 1 ],\n\t\t\t];\n\n\t\t\tif ( isNaN( initialValue[ 0 ] ) || isNaN( initialValue[ 1 ] ) || isNaN( initialValue[ 2 ] ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst initialValueRad = initialValue.map( MathUtils.degToRad );\n\n\t\t\tconst currentValue = [\n\t\t\t\tcurvex.values[ i ],\n\t\t\t\tcurvey.values[ i ],\n\t\t\t\tcurvez.values[ i ],\n\t\t\t];\n\n\t\t\tif ( isNaN( currentValue[ 0 ] ) || isNaN( currentValue[ 1 ] ) || isNaN( currentValue[ 2 ] ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValueRad = currentValue.map( MathUtils.degToRad );\n\n\t\t\tconst valuesSpan = [\n\t\t\t\tcurrentValue[ 0 ] - initialValue[ 0 ],\n\t\t\t\tcurrentValue[ 1 ] - initialValue[ 1 ],\n\t\t\t\tcurrentValue[ 2 ] - initialValue[ 2 ],\n\t\t\t];\n\n\t\t\tconst absoluteSpan = [\n\t\t\t\tMath.abs( valuesSpan[ 0 ] ),\n\t\t\t\tMath.abs( valuesSpan[ 1 ] ),\n\t\t\t\tMath.abs( valuesSpan[ 2 ] ),\n\t\t\t];\n\n\t\t\tif ( absoluteSpan[ 0 ] >= 180 || absoluteSpan[ 1 ] >= 180 || absoluteSpan[ 2 ] >= 180 ) {\n\n\t\t\t\tconst maxAbsSpan = Math.max( ...absoluteSpan );\n\n\t\t\t\tconst numSubIntervals = maxAbsSpan / 180;\n\n\t\t\t\tconst E1 = new Euler( ...initialValueRad, eulerOrder );\n\t\t\t\tconst E2 = new Euler( ...currentValueRad, eulerOrder );\n\n\t\t\t\tconst Q1 = new Quaternion().setFromEuler( E1 );\n\t\t\t\tconst Q2 = new Quaternion().setFromEuler( E2 );\n\n\t\t\t\t// Check unroll\n\t\t\t\tif ( Q1.dot( Q2 ) ) {\n\n\t\t\t\t\tQ2.set( - Q2.x, - Q2.y, - Q2.z, - Q2.w );\n\n\t\t\t\t}\n\n\t\t\t\t// Interpolate\n\t\t\t\tconst initialTime = curvex.times[ i - 1 ];\n\t\t\t\tconst timeSpan = curvex.times[ i ] - initialTime;\n\n\t\t\t\tconst Q = new Quaternion();\n\t\t\t\tconst E = new Euler();\n\t\t\t\tfor ( let t = 0; t < 1; t += 1 / numSubIntervals ) {\n\n\t\t\t\t\tQ.copy( Q1.clone().slerp( Q2.clone(), t ) );\n\n\t\t\t\t\ttimes.push( initialTime + t * timeSpan );\n\t\t\t\t\tE.setFromQuaternion( Q, eulerOrder );\n\n\t\t\t\t\tvalues.push( E.x );\n\t\t\t\t\tvalues.push( E.y );\n\t\t\t\t\tvalues.push( E.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttimes.push( curvex.times[ i ] );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvex.values[ i ] ) );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvey.values[ i ] ) );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvez.values[ i ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn [ times, values ];\n\n\t}\n\n}\n\n// parse an FBX file in ASCII format\nclass TextParser {\n\n\tgetPrevNode() {\n\n\t\treturn this.nodeStack[ this.currentIndent - 2 ];\n\n\t}\n\n\tgetCurrentNode() {\n\n\t\treturn this.nodeStack[ this.currentIndent - 1 ];\n\n\t}\n\n\tgetCurrentProp() {\n\n\t\treturn this.currentProp;\n\n\t}\n\n\tpushStack( node ) {\n\n\t\tthis.nodeStack.push( node );\n\t\tthis.currentIndent += 1;\n\n\t}\n\n\tpopStack() {\n\n\t\tthis.nodeStack.pop();\n\t\tthis.currentIndent -= 1;\n\n\t}\n\n\tsetCurrentProp( val, name ) {\n\n\t\tthis.currentProp = val;\n\t\tthis.currentPropName = name;\n\n\t}\n\n\tparse( text ) {\n\n\t\tthis.currentIndent = 0;\n\n\t\tthis.allNodes = new FBXTree();\n\t\tthis.nodeStack = [];\n\t\tthis.currentProp = [];\n\t\tthis.currentPropName = '';\n\n\t\tconst scope = this;\n\n\t\tconst split = text.split( /[\\r\\n]+/ );\n\n\t\tsplit.forEach( function ( line, i ) {\n\n\t\t\tconst matchComment = line.match( /^[\\s\\t]*;/ );\n\t\t\tconst matchEmpty = line.match( /^[\\s\\t]*$/ );\n\n\t\t\tif ( matchComment || matchEmpty ) return;\n\n\t\t\tconst matchBeginning = line.match( '^\\\\t{' + scope.currentIndent + '}(\\\\w+):(.*){', '' );\n\t\t\tconst matchProperty = line.match( '^\\\\t{' + ( scope.currentIndent ) + '}(\\\\w+):[\\\\s\\\\t\\\\r\\\\n](.*)' );\n\t\t\tconst matchEnd = line.match( '^\\\\t{' + ( scope.currentIndent - 1 ) + '}}' );\n\n\t\t\tif ( matchBeginning ) {\n\n\t\t\t\tscope.parseNodeBegin( line, matchBeginning );\n\n\t\t\t} else if ( matchProperty ) {\n\n\t\t\t\tscope.parseNodeProperty( line, matchProperty, split[ ++ i ] );\n\n\t\t\t} else if ( matchEnd ) {\n\n\t\t\t\tscope.popStack();\n\n\t\t\t} else if ( line.match( /^[^\\s\\t}]/ ) ) {\n\n\t\t\t\t// large arrays are split over multiple lines terminated with a ',' character\n\t\t\t\t// if this is encountered the line needs to be joined to the previous line\n\t\t\t\tscope.parseNodePropertyContinued( line );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this.allNodes;\n\n\t}\n\n\tparseNodeBegin( line, property ) {\n\n\t\tconst nodeName = property[ 1 ].trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\tconst nodeAttrs = property[ 2 ].split( ',' ).map( function ( attr ) {\n\n\t\t\treturn attr.trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\t} );\n\n\t\tconst node = { name: nodeName };\n\t\tconst attrs = this.parseNodeAttr( nodeAttrs );\n\n\t\tconst currentNode = this.getCurrentNode();\n\n\t\t// a top node\n\t\tif ( this.currentIndent === 0 ) {\n\n\t\t\tthis.allNodes.add( nodeName, node );\n\n\t\t} else { // a subnode\n\n\t\t\t// if the subnode already exists, append it\n\t\t\tif ( nodeName in currentNode ) {\n\n\t\t\t\t// special case Pose needs PoseNodes as an array\n\t\t\t\tif ( nodeName === 'PoseNode' ) {\n\n\t\t\t\t\tcurrentNode.PoseNode.push( node );\n\n\t\t\t\t} else if ( currentNode[ nodeName ].id !== undefined ) {\n\n\t\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\t\tcurrentNode[ nodeName ][ currentNode[ nodeName ].id ] = currentNode[ nodeName ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( attrs.id !== '' ) currentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t} else if ( typeof attrs.id === 'number' ) {\n\n\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\tcurrentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t} else if ( nodeName !== 'Properties70' ) {\n\n\t\t\t\tif ( nodeName === 'PoseNode' )\tcurrentNode[ nodeName ] = [ node ];\n\t\t\t\telse currentNode[ nodeName ] = node;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( typeof attrs.id === 'number' ) node.id = attrs.id;\n\t\tif ( attrs.name !== '' ) node.attrName = attrs.name;\n\t\tif ( attrs.type !== '' ) node.attrType = attrs.type;\n\n\t\tthis.pushStack( node );\n\n\t}\n\n\tparseNodeAttr( attrs ) {\n\n\t\tlet id = attrs[ 0 ];\n\n\t\tif ( attrs[ 0 ] !== '' ) {\n\n\t\t\tid = parseInt( attrs[ 0 ] );\n\n\t\t\tif ( isNaN( id ) ) {\n\n\t\t\t\tid = attrs[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet name = '', type = '';\n\n\t\tif ( attrs.length > 1 ) {\n\n\t\t\tname = attrs[ 1 ].replace( /^(\\w+)::/, '' );\n\t\t\ttype = attrs[ 2 ];\n\n\t\t}\n\n\t\treturn { id: id, name: name, type: type };\n\n\t}\n\n\tparseNodeProperty( line, property, contentLine ) {\n\n\t\tlet propName = property[ 1 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\t\tlet propValue = property[ 2 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\n\t\t// for special case: base64 image data follows \"Content: ,\" line\n\t\t//\tContent: ,\n\t\t//\t \"/9j/4RDaRXhpZgAATU0A...\"\n\t\tif ( propName === 'Content' && propValue === ',' ) {\n\n\t\t\tpropValue = contentLine.replace( /\"/g, '' ).replace( /,$/, '' ).trim();\n\n\t\t}\n\n\t\tconst currentNode = this.getCurrentNode();\n\t\tconst parentName = currentNode.name;\n\n\t\tif ( parentName === 'Properties70' ) {\n\n\t\t\tthis.parseNodeSpecialProperty( line, propName, propValue );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Connections\n\t\tif ( propName === 'C' ) {\n\n\t\t\tconst connProps = propValue.split( ',' ).slice( 1 );\n\t\t\tconst from = parseInt( connProps[ 0 ] );\n\t\t\tconst to = parseInt( connProps[ 1 ] );\n\n\t\t\tlet rest = propValue.split( ',' ).slice( 3 );\n\n\t\t\trest = rest.map( function ( elem ) {\n\n\t\t\t\treturn elem.trim().replace( /^\"/, '' );\n\n\t\t\t} );\n\n\t\t\tpropName = 'connections';\n\t\t\tpropValue = [ from, to ];\n\t\t\tappend( propValue, rest );\n\n\t\t\tif ( currentNode[ propName ] === undefined ) {\n\n\t\t\t\tcurrentNode[ propName ] = [];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Node\n\t\tif ( propName === 'Node' ) currentNode.id = propValue;\n\n\t\t// connections\n\t\tif ( propName in currentNode && Array.isArray( currentNode[ propName ] ) ) {\n\n\t\t\tcurrentNode[ propName ].push( propValue );\n\n\t\t} else {\n\n\t\t\tif ( propName !== 'a' ) currentNode[ propName ] = propValue;\n\t\t\telse currentNode.a = propValue;\n\n\t\t}\n\n\t\tthis.setCurrentProp( currentNode, propName );\n\n\t\t// convert string to array, unless it ends in ',' in which case more will be added to it\n\t\tif ( propName === 'a' && propValue.slice( - 1 ) !== ',' ) {\n\n\t\t\tcurrentNode.a = parseNumberArray( propValue );\n\n\t\t}\n\n\t}\n\n\tparseNodePropertyContinued( line ) {\n\n\t\tconst currentNode = this.getCurrentNode();\n\n\t\tcurrentNode.a += line;\n\n\t\t// if the line doesn't end in ',' we have reached the end of the property value\n\t\t// so convert the string to an array\n\t\tif ( line.slice( - 1 ) !== ',' ) {\n\n\t\t\tcurrentNode.a = parseNumberArray( currentNode.a );\n\n\t\t}\n\n\t}\n\n\t// parse \"Property70\"\n\tparseNodeSpecialProperty( line, propName, propValue ) {\n\n\t\t// split this\n\t\t// P: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\",1,1,1\n\t\t// into array like below\n\t\t// [\"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\", \"1,1,1\" ]\n\t\tconst props = propValue.split( '\",' ).map( function ( prop ) {\n\n\t\t\treturn prop.trim().replace( /^\\\"/, '' ).replace( /\\s/, '_' );\n\n\t\t} );\n\n\t\tconst innerPropName = props[ 0 ];\n\t\tconst innerPropType1 = props[ 1 ];\n\t\tconst innerPropType2 = props[ 2 ];\n\t\tconst innerPropFlag = props[ 3 ];\n\t\tlet innerPropValue = props[ 4 ];\n\n\t\t// cast values where needed, otherwise leave as strings\n\t\tswitch ( innerPropType1 ) {\n\n\t\t\tcase 'int':\n\t\t\tcase 'enum':\n\t\t\tcase 'bool':\n\t\t\tcase 'ULongLong':\n\t\t\tcase 'double':\n\t\t\tcase 'Number':\n\t\t\tcase 'FieldOfView':\n\t\t\t\tinnerPropValue = parseFloat( innerPropValue );\n\t\t\t\tbreak;\n\n\t\t\tcase 'Color':\n\t\t\tcase 'ColorRGB':\n\t\t\tcase 'Vector3D':\n\t\t\tcase 'Lcl_Translation':\n\t\t\tcase 'Lcl_Rotation':\n\t\t\tcase 'Lcl_Scaling':\n\t\t\t\tinnerPropValue = parseNumberArray( innerPropValue );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// CAUTION: these props must append to parent's parent\n\t\tthis.getPrevNode()[ innerPropName ] = {\n\n\t\t\t'type': innerPropType1,\n\t\t\t'type2': innerPropType2,\n\t\t\t'flag': innerPropFlag,\n\t\t\t'value': innerPropValue\n\n\t\t};\n\n\t\tthis.setCurrentProp( this.getPrevNode(), innerPropName );\n\n\t}\n\n}\n\n// Parse an FBX file in Binary format\nclass BinaryParser {\n\n\tparse( buffer ) {\n\n\t\tconst reader = new BinaryReader( buffer );\n\t\treader.skip( 23 ); // skip magic 23 bytes\n\n\t\tconst version = reader.getUint32();\n\n\t\tif ( version < 6400 ) {\n\n\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + version );\n\n\t\t}\n\n\t\tconst allNodes = new FBXTree();\n\n\t\twhile ( ! this.endOfContent( reader ) ) {\n\n\t\t\tconst node = this.parseNode( reader, version );\n\t\t\tif ( node !== null ) allNodes.add( node.name, node );\n\n\t\t}\n\n\t\treturn allNodes;\n\n\t}\n\n\t// Check if reader has reached the end of content.\n\tendOfContent( reader ) {\n\n\t\t// footer size: 160bytes + 16-byte alignment padding\n\t\t// - 16bytes: magic\n\t\t// - padding til 16-byte alignment (at least 1byte?)\n\t\t//\t(seems like some exporters embed fixed 15 or 16bytes?)\n\t\t// - 4bytes: magic\n\t\t// - 4bytes: version\n\t\t// - 120bytes: zero\n\t\t// - 16bytes: magic\n\t\tif ( reader.size() % 16 === 0 ) {\n\n\t\t\treturn ( ( reader.getOffset() + 160 + 16 ) & ~ 0xf ) >= reader.size();\n\n\t\t} else {\n\n\t\t\treturn reader.getOffset() + 160 + 16 >= reader.size();\n\n\t\t}\n\n\t}\n\n\t// recursively parse nodes until the end of the file is reached\n\tparseNode( reader, version ) {\n\n\t\tconst node = {};\n\n\t\t// The first three data sizes depends on version.\n\t\tconst endOffset = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\t\tconst numProperties = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\n\t\t( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); // the returned propertyListLen is not used\n\n\t\tconst nameLen = reader.getUint8();\n\t\tconst name = reader.getString( nameLen );\n\n\t\t// Regards this node as NULL-record if endOffset is zero\n\t\tif ( endOffset === 0 ) return null;\n\n\t\tconst propertyList = [];\n\n\t\tfor ( let i = 0; i < numProperties; i ++ ) {\n\n\t\t\tpropertyList.push( this.parseProperty( reader ) );\n\n\t\t}\n\n\t\t// Regards the first three elements in propertyList as id, attrName, and attrType\n\t\tconst id = propertyList.length > 0 ? propertyList[ 0 ] : '';\n\t\tconst attrName = propertyList.length > 1 ? propertyList[ 1 ] : '';\n\t\tconst attrType = propertyList.length > 2 ? propertyList[ 2 ] : '';\n\n\t\t// check if this node represents just a single property\n\t\t// like (name, 0) set or (name2, [0, 1, 2]) set of {name: 0, name2: [0, 1, 2]}\n\t\tnode.singleProperty = ( numProperties === 1 && reader.getOffset() === endOffset ) ? true : false;\n\n\t\twhile ( endOffset > reader.getOffset() ) {\n\n\t\t\tconst subNode = this.parseNode( reader, version );\n\n\t\t\tif ( subNode !== null ) this.parseSubNode( name, node, subNode );\n\n\t\t}\n\n\t\tnode.propertyList = propertyList; // raw property list used by parent\n\n\t\tif ( typeof id === 'number' ) node.id = id;\n\t\tif ( attrName !== '' ) node.attrName = attrName;\n\t\tif ( attrType !== '' ) node.attrType = attrType;\n\t\tif ( name !== '' ) node.name = name;\n\n\t\treturn node;\n\n\t}\n\n\tparseSubNode( name, node, subNode ) {\n\n\t\t// special case: child node is single property\n\t\tif ( subNode.singleProperty === true ) {\n\n\t\t\tconst value = subNode.propertyList[ 0 ];\n\n\t\t\tif ( Array.isArray( value ) ) {\n\n\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t\tsubNode.a = value;\n\n\t\t\t} else {\n\n\t\t\t\tnode[ subNode.name ] = value;\n\n\t\t\t}\n\n\t\t} else if ( name === 'Connections' && subNode.name === 'C' ) {\n\n\t\t\tconst array = [];\n\n\t\t\tsubNode.propertyList.forEach( function ( property, i ) {\n\n\t\t\t\t// first Connection is FBX type (OO, OP, etc.). We'll discard these\n\t\t\t\tif ( i !== 0 ) array.push( property );\n\n\t\t\t} );\n\n\t\t\tif ( node.connections === undefined ) {\n\n\t\t\t\tnode.connections = [];\n\n\t\t\t}\n\n\t\t\tnode.connections.push( array );\n\n\t\t} else if ( subNode.name === 'Properties70' ) {\n\n\t\t\tconst keys = Object.keys( subNode );\n\n\t\t\tkeys.forEach( function ( key ) {\n\n\t\t\t\tnode[ key ] = subNode[ key ];\n\n\t\t\t} );\n\n\t\t} else if ( name === 'Properties70' && subNode.name === 'P' ) {\n\n\t\t\tlet innerPropName = subNode.propertyList[ 0 ];\n\t\t\tlet innerPropType1 = subNode.propertyList[ 1 ];\n\t\t\tconst innerPropType2 = subNode.propertyList[ 2 ];\n\t\t\tconst innerPropFlag = subNode.propertyList[ 3 ];\n\t\t\tlet innerPropValue;\n\n\t\t\tif ( innerPropName.indexOf( 'Lcl ' ) === 0 ) innerPropName = innerPropName.replace( 'Lcl ', 'Lcl_' );\n\t\t\tif ( innerPropType1.indexOf( 'Lcl ' ) === 0 ) innerPropType1 = innerPropType1.replace( 'Lcl ', 'Lcl_' );\n\n\t\t\tif ( innerPropType1 === 'Color' || innerPropType1 === 'ColorRGB' || innerPropType1 === 'Vector' || innerPropType1 === 'Vector3D' || innerPropType1.indexOf( 'Lcl_' ) === 0 ) {\n\n\t\t\t\tinnerPropValue = [\n\t\t\t\t\tsubNode.propertyList[ 4 ],\n\t\t\t\t\tsubNode.propertyList[ 5 ],\n\t\t\t\t\tsubNode.propertyList[ 6 ]\n\t\t\t\t];\n\n\t\t\t} else {\n\n\t\t\t\tinnerPropValue = subNode.propertyList[ 4 ];\n\n\t\t\t}\n\n\t\t\t// this will be copied to parent, see above\n\t\t\tnode[ innerPropName ] = {\n\n\t\t\t\t'type': innerPropType1,\n\t\t\t\t'type2': innerPropType2,\n\t\t\t\t'flag': innerPropFlag,\n\t\t\t\t'value': innerPropValue\n\n\t\t\t};\n\n\t\t} else if ( node[ subNode.name ] === undefined ) {\n\n\t\t\tif ( typeof subNode.id === 'number' ) {\n\n\t\t\t\tnode[ subNode.name ] = {};\n\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t} else {\n\n\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( subNode.name === 'PoseNode' ) {\n\n\t\t\t\tif ( ! Array.isArray( node[ subNode.name ] ) ) {\n\n\t\t\t\t\tnode[ subNode.name ] = [ node[ subNode.name ] ];\n\n\t\t\t\t}\n\n\t\t\t\tnode[ subNode.name ].push( subNode );\n\n\t\t\t} else if ( node[ subNode.name ][ subNode.id ] === undefined ) {\n\n\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tparseProperty( reader ) {\n\n\t\tconst type = reader.getString( 1 );\n\t\tlet length;\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'C':\n\t\t\t\treturn reader.getBoolean();\n\n\t\t\tcase 'D':\n\t\t\t\treturn reader.getFloat64();\n\n\t\t\tcase 'F':\n\t\t\t\treturn reader.getFloat32();\n\n\t\t\tcase 'I':\n\t\t\t\treturn reader.getInt32();\n\n\t\t\tcase 'L':\n\t\t\t\treturn reader.getInt64();\n\n\t\t\tcase 'R':\n\t\t\t\tlength = reader.getUint32();\n\t\t\t\treturn reader.getArrayBuffer( length );\n\n\t\t\tcase 'S':\n\t\t\t\tlength = reader.getUint32();\n\t\t\t\treturn reader.getString( length );\n\n\t\t\tcase 'Y':\n\t\t\t\treturn reader.getInt16();\n\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'f':\n\t\t\tcase 'i':\n\t\t\tcase 'l':\n\n\t\t\t\tconst arrayLength = reader.getUint32();\n\t\t\t\tconst encoding = reader.getUint32(); // 0: non-compressed, 1: compressed\n\t\t\t\tconst compressedLength = reader.getUint32();\n\n\t\t\t\tif ( encoding === 0 ) {\n\n\t\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t\treturn reader.getBooleanArray( arrayLength );\n\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\treturn reader.getFloat64Array( arrayLength );\n\n\t\t\t\t\t\tcase 'f':\n\t\t\t\t\t\t\treturn reader.getFloat32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'i':\n\t\t\t\t\t\t\treturn reader.getInt32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\treturn reader.getInt64Array( arrayLength );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst data = fflate.unzlibSync( new Uint8Array( reader.getArrayBuffer( compressedLength ) ) );\n\t\t\t\tconst reader2 = new BinaryReader( data.buffer );\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'b':\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\treturn reader2.getBooleanArray( arrayLength );\n\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\treturn reader2.getFloat64Array( arrayLength );\n\n\t\t\t\t\tcase 'f':\n\t\t\t\t\t\treturn reader2.getFloat32Array( arrayLength );\n\n\t\t\t\t\tcase 'i':\n\t\t\t\t\t\treturn reader2.getInt32Array( arrayLength );\n\n\t\t\t\t\tcase 'l':\n\t\t\t\t\t\treturn reader2.getInt64Array( arrayLength );\n\n\t\t\t\t}\n\n\t\t\t\tbreak; // cannot happen but is required by the DeepScan\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown property type ' + type );\n\n\t\t}\n\n\t}\n\n}\n\nclass BinaryReader {\n\n\tconstructor( buffer, littleEndian ) {\n\n\t\tthis.dv = new DataView( buffer );\n\t\tthis.offset = 0;\n\t\tthis.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true;\n\t\tthis._textDecoder = new TextDecoder();\n\n\t}\n\n\tgetOffset() {\n\n\t\treturn this.offset;\n\n\t}\n\n\tsize() {\n\n\t\treturn this.dv.buffer.byteLength;\n\n\t}\n\n\tskip( length ) {\n\n\t\tthis.offset += length;\n\n\t}\n\n\t// seems like true/false representation depends on exporter.\n\t// true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54)\n\t// then sees LSB.\n\tgetBoolean() {\n\n\t\treturn ( this.getUint8() & 1 ) === 1;\n\n\t}\n\n\tgetBooleanArray( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getBoolean() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetUint8() {\n\n\t\tconst value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t}\n\n\tgetInt16() {\n\n\t\tconst value = this.dv.getInt16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t}\n\n\tgetInt32() {\n\n\t\tconst value = this.dv.getInt32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetInt32Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetUint32() {\n\n\t\tconst value = this.dv.getUint32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\t// JavaScript doesn't support 64-bit integer so calculate this here\n\t// 1 << 32 will return 1 so using multiply operation instead here.\n\t// There's a possibility that this method returns wrong value if the value\n\t// is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.\n\t// TODO: safely handle 64-bit integer\n\tgetInt64() {\n\n\t\tlet low, high;\n\n\t\tif ( this.littleEndian ) {\n\n\t\t\tlow = this.getUint32();\n\t\t\thigh = this.getUint32();\n\n\t\t} else {\n\n\t\t\thigh = this.getUint32();\n\t\t\tlow = this.getUint32();\n\n\t\t}\n\n\t\t// calculate negative value\n\t\tif ( high & 0x80000000 ) {\n\n\t\t\thigh = ~ high & 0xFFFFFFFF;\n\t\t\tlow = ~ low & 0xFFFFFFFF;\n\n\t\t\tif ( low === 0xFFFFFFFF ) high = ( high + 1 ) & 0xFFFFFFFF;\n\n\t\t\tlow = ( low + 1 ) & 0xFFFFFFFF;\n\n\t\t\treturn - ( high * 0x100000000 + low );\n\n\t\t}\n\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetInt64Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\t// Note: see getInt64() comment\n\tgetUint64() {\n\n\t\tlet low, high;\n\n\t\tif ( this.littleEndian ) {\n\n\t\t\tlow = this.getUint32();\n\t\t\thigh = this.getUint32();\n\n\t\t} else {\n\n\t\t\thigh = this.getUint32();\n\t\t\tlow = this.getUint32();\n\n\t\t}\n\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetFloat32() {\n\n\t\tconst value = this.dv.getFloat32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetFloat32Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetFloat64() {\n\n\t\tconst value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t}\n\n\tgetFloat64Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetArrayBuffer( size ) {\n\n\t\tconst value = this.dv.buffer.slice( this.offset, this.offset + size );\n\t\tthis.offset += size;\n\t\treturn value;\n\n\t}\n\n\tgetString( size ) {\n\n\t\tconst start = this.offset;\n\t\tlet a = new Uint8Array( this.dv.buffer, start, size );\n\n\t\tthis.skip( size );\n\n\t\tconst nullByte = a.indexOf( 0 );\n\t\tif ( nullByte >= 0 ) a = new Uint8Array( this.dv.buffer, start, nullByte );\n\n\t\treturn this._textDecoder.decode( a );\n\n\t}\n\n}\n\n// FBXTree holds a representation of the FBX data, returned by the TextParser ( FBX ASCII format)\n// and BinaryParser( FBX Binary format)\nclass FBXTree {\n\n\tadd( key, val ) {\n\n\t\tthis[ key ] = val;\n\n\t}\n\n}\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction isFbxFormatBinary( buffer ) {\n\n\tconst CORRECT = 'Kaydara\\u0020FBX\\u0020Binary\\u0020\\u0020\\0';\n\n\treturn buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString( buffer, 0, CORRECT.length );\n\n}\n\nfunction isFbxFormatASCII( text ) {\n\n\tconst CORRECT = [ 'K', 'a', 'y', 'd', 'a', 'r', 'a', '\\\\', 'F', 'B', 'X', '\\\\', 'B', 'i', 'n', 'a', 'r', 'y', '\\\\', '\\\\' ];\n\n\tlet cursor = 0;\n\n\tfunction read( offset ) {\n\n\t\tconst result = text[ offset - 1 ];\n\t\ttext = text.slice( cursor + offset );\n\t\tcursor ++;\n\t\treturn result;\n\n\t}\n\n\tfor ( let i = 0; i < CORRECT.length; ++ i ) {\n\n\t\tconst num = read( 1 );\n\t\tif ( num === CORRECT[ i ] ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nfunction getFbxVersion( text ) {\n\n\tconst versionRegExp = /FBXVersion: (\\d+)/;\n\tconst match = text.match( versionRegExp );\n\n\tif ( match ) {\n\n\t\tconst version = parseInt( match[ 1 ] );\n\t\treturn version;\n\n\t}\n\n\tthrow new Error( 'THREE.FBXLoader: Cannot find the version number for the file given.' );\n\n}\n\n// Converts FBX ticks into real time seconds.\nfunction convertFBXTimeToSeconds( time ) {\n\n\treturn time / 46186158000;\n\n}\n\nconst dataArray = [];\n\n// extracts the data from the correct position in the FBX array based on indexing type\nfunction getData( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {\n\n\tlet index;\n\n\tswitch ( infoObject.mappingType ) {\n\n\t\tcase 'ByPolygonVertex' :\n\t\t\tindex = polygonVertexIndex;\n\t\t\tbreak;\n\t\tcase 'ByPolygon' :\n\t\t\tindex = polygonIndex;\n\t\t\tbreak;\n\t\tcase 'ByVertice' :\n\t\t\tindex = vertexIndex;\n\t\t\tbreak;\n\t\tcase 'AllSame' :\n\t\t\tindex = infoObject.indices[ 0 ];\n\t\t\tbreak;\n\t\tdefault :\n\t\t\tconsole.warn( 'THREE.FBXLoader: unknown attribute mapping type ' + infoObject.mappingType );\n\n\t}\n\n\tif ( infoObject.referenceType === 'IndexToDirect' ) index = infoObject.indices[ index ];\n\n\tconst from = index * infoObject.dataSize;\n\tconst to = from + infoObject.dataSize;\n\n\treturn slice( dataArray, infoObject.buffer, from, to );\n\n}\n\nconst tempEuler = new Euler();\nconst tempVec = new Vector3();\n\n// generate transformation from FBX transform data\n// ref: https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_10CDD63C_79C1_4F2D_BB28_AD2BE65A02ED_htm\n// ref: http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/index.html?url=cpp_ref/_transformations_2main_8cxx-example.html,topicNumber=cpp_ref__transformations_2main_8cxx_example_htmlfc10a1e1-b18d-4e72-9dc0-70d0f1959f5e\nfunction generateTransform( transformData ) {\n\n\tconst lTranslationM = new Matrix4();\n\tconst lPreRotationM = new Matrix4();\n\tconst lRotationM = new Matrix4();\n\tconst lPostRotationM = new Matrix4();\n\n\tconst lScalingM = new Matrix4();\n\tconst lScalingPivotM = new Matrix4();\n\tconst lScalingOffsetM = new Matrix4();\n\tconst lRotationOffsetM = new Matrix4();\n\tconst lRotationPivotM = new Matrix4();\n\n\tconst lParentGX = new Matrix4();\n\tconst lParentLX = new Matrix4();\n\tconst lGlobalT = new Matrix4();\n\n\tconst inheritType = ( transformData.inheritType ) ? transformData.inheritType : 0;\n\n\tif ( transformData.translation ) lTranslationM.setPosition( tempVec.fromArray( transformData.translation ) );\n\n\tif ( transformData.preRotation ) {\n\n\t\tconst array = transformData.preRotation.map( MathUtils.degToRad );\n\t\tarray.push( transformData.eulerOrder || Euler.DEFAULT_ORDER );\n\t\tlPreRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t}\n\n\tif ( transformData.rotation ) {\n\n\t\tconst array = transformData.rotation.map( MathUtils.degToRad );\n\t\tarray.push( transformData.eulerOrder || Euler.DEFAULT_ORDER );\n\t\tlRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t}\n\n\tif ( transformData.postRotation ) {\n\n\t\tconst array = transformData.postRotation.map( MathUtils.degToRad );\n\t\tarray.push( transformData.eulerOrder || Euler.DEFAULT_ORDER );\n\t\tlPostRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\t\tlPostRotationM.invert();\n\n\t}\n\n\tif ( transformData.scale ) lScalingM.scale( tempVec.fromArray( transformData.scale ) );\n\n\t// Pivots and offsets\n\tif ( transformData.scalingOffset ) lScalingOffsetM.setPosition( tempVec.fromArray( transformData.scalingOffset ) );\n\tif ( transformData.scalingPivot ) lScalingPivotM.setPosition( tempVec.fromArray( transformData.scalingPivot ) );\n\tif ( transformData.rotationOffset ) lRotationOffsetM.setPosition( tempVec.fromArray( transformData.rotationOffset ) );\n\tif ( transformData.rotationPivot ) lRotationPivotM.setPosition( tempVec.fromArray( transformData.rotationPivot ) );\n\n\t// parent transform\n\tif ( transformData.parentMatrixWorld ) {\n\n\t\tlParentLX.copy( transformData.parentMatrix );\n\t\tlParentGX.copy( transformData.parentMatrixWorld );\n\n\t}\n\n\tconst lLRM = lPreRotationM.clone().multiply( lRotationM ).multiply( lPostRotationM );\n\t// Global Rotation\n\tconst lParentGRM = new Matrix4();\n\tlParentGRM.extractRotation( lParentGX );\n\n\t// Global Shear*Scaling\n\tconst lParentTM = new Matrix4();\n\tlParentTM.copyPosition( lParentGX );\n\n\tconst lParentGRSM = lParentTM.clone().invert().multiply( lParentGX );\n\tconst lParentGSM = lParentGRM.clone().invert().multiply( lParentGRSM );\n\tconst lLSM = lScalingM;\n\n\tconst lGlobalRS = new Matrix4();\n\n\tif ( inheritType === 0 ) {\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM );\n\n\t} else if ( inheritType === 1 ) {\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM );\n\n\t} else {\n\n\t\tconst lParentLSM = new Matrix4().scale( new Vector3().setFromMatrixScale( lParentLX ) );\n\t\tconst lParentLSM_inv = lParentLSM.clone().invert();\n\t\tconst lParentGSM_noLocal = lParentGSM.clone().multiply( lParentLSM_inv );\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lLSM );\n\n\t}\n\n\tconst lRotationPivotM_inv = lRotationPivotM.clone().invert();\n\tconst lScalingPivotM_inv = lScalingPivotM.clone().invert();\n\t// Calculate the local transform matrix\n\tlet lTransform = lTranslationM.clone().multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv );\n\n\tconst lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition( lTransform );\n\n\tconst lGlobalTranslation = lParentGX.clone().multiply( lLocalTWithAllPivotAndOffsetInfo );\n\tlGlobalT.copyPosition( lGlobalTranslation );\n\n\tlTransform = lGlobalT.clone().multiply( lGlobalRS );\n\n\t// from global to local\n\tlTransform.premultiply( lParentGX.invert() );\n\n\treturn lTransform;\n\n}\n\n// Returns the three.js intrinsic Euler order corresponding to FBX extrinsic Euler order\n// ref: http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_class_fbx_euler_html\nfunction getEulerOrder( order ) {\n\n\torder = order || 0;\n\n\tconst enums = [\n\t\t'ZYX', // -> XYZ extrinsic\n\t\t'YZX', // -> XZY extrinsic\n\t\t'XZY', // -> YZX extrinsic\n\t\t'ZXY', // -> YXZ extrinsic\n\t\t'YXZ', // -> ZXY extrinsic\n\t\t'XYZ', // -> ZYX extrinsic\n\t\t//'SphericXYZ', // not possible to support\n\t];\n\n\tif ( order === 6 ) {\n\n\t\tconsole.warn( 'THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.' );\n\t\treturn enums[ 0 ];\n\n\t}\n\n\treturn enums[ order ];\n\n}\n\n// Parses comma separated list of numbers and returns them an array.\n// Used internally by the TextParser\nfunction parseNumberArray( value ) {\n\n\tconst array = value.split( ',' ).map( function ( val ) {\n\n\t\treturn parseFloat( val );\n\n\t} );\n\n\treturn array;\n\n}\n\nfunction convertArrayBufferToString( buffer, from, to ) {\n\n\tif ( from === undefined ) from = 0;\n\tif ( to === undefined ) to = buffer.byteLength;\n\n\treturn new TextDecoder().decode( new Uint8Array( buffer, from, to ) );\n\n}\n\nfunction append( a, b ) {\n\n\tfor ( let i = 0, j = a.length, l = b.length; i < l; i ++, j ++ ) {\n\n\t\ta[ j ] = b[ i ];\n\n\t}\n\n}\n\nfunction slice( a, b, from, to ) {\n\n\tfor ( let i = from, j = 0; i < to; i ++, j ++ ) {\n\n\t\ta[ j ] = b[ i ];\n\n\t}\n\n\treturn a;\n\n}\n\n\nexport { FBXLoader };\n", "import {\n\tFileLoader,\n\tLoader,\n\tShapePath\n} from 'three';\n\nclass FontLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tconst font = scope.parse( JSON.parse( text ) );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\treturn new Font( json );\n\n\t}\n\n}\n\n//\n\nclass Font {\n\n\tconstructor( data ) {\n\n\t\tthis.isFont = true;\n\n\t\tthis.type = 'Font';\n\n\t\tthis.data = data;\n\n\t}\n\n\tgenerateShapes( text, size = 100 ) {\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data );\n\n\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tshapes.push( ...paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nfunction createPaths( text, size, data ) {\n\n\tconst chars = Array.from( text );\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\nexport { FontLoader, Font };\n", "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader\n} from 'three';\n\n/**\n * GCodeLoader is used to load gcode files usually used for 3D printing or CNC applications.\n *\n * Gcode files are composed by commands used by machines to create objects.\n *\n * @class GCodeLoader\n * @param {Manager} manager Loading manager.\n */\n\nclass GCodeLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.splitLayer = false;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tlet state = { x: 0, y: 0, z: 0, e: 0, f: 0, extruding: false, relative: false };\n\t\tconst layers = [];\n\n\t\tlet currentLayer = undefined;\n\n\t\tconst pathMaterial = new LineBasicMaterial( { color: 0xFF0000 } );\n\t\tpathMaterial.name = 'path';\n\n\t\tconst extrudingMaterial = new LineBasicMaterial( { color: 0x00FF00 } );\n\t\textrudingMaterial.name = 'extruded';\n\n\t\tfunction newLayer( line ) {\n\n\t\t\tcurrentLayer = { vertex: [], pathVertex: [], z: line.z };\n\t\t\tlayers.push( currentLayer );\n\n\t\t}\n\n\t\t//Create lie segment between p1 and p2\n\t\tfunction addSegment( p1, p2 ) {\n\n\t\t\tif ( currentLayer === undefined ) {\n\n\t\t\t\tnewLayer( p1 );\n\n\t\t\t}\n\n\t\t\tif ( state.extruding ) {\n\n\t\t\t\tcurrentLayer.vertex.push( p1.x, p1.y, p1.z );\n\t\t\t\tcurrentLayer.vertex.push( p2.x, p2.y, p2.z );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentLayer.pathVertex.push( p1.x, p1.y, p1.z );\n\t\t\t\tcurrentLayer.pathVertex.push( p2.x, p2.y, p2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction delta( v1, v2 ) {\n\n\t\t\treturn state.relative ? v2 : v2 - v1;\n\n\t\t}\n\n\t\tfunction absolute( v1, v2 ) {\n\n\t\t\treturn state.relative ? v1 + v2 : v2;\n\n\t\t}\n\n\t\tconst lines = data.replace( /;.+/g, '' ).split( '\\n' );\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tconst tokens = lines[ i ].split( ' ' );\n\t\t\tconst cmd = tokens[ 0 ].toUpperCase();\n\n\t\t\t//Argumments\n\t\t\tconst args = {};\n\t\t\ttokens.splice( 1 ).forEach( function ( token ) {\n\n\t\t\t\tif ( token[ 0 ] !== undefined ) {\n\n\t\t\t\t\tconst key = token[ 0 ].toLowerCase();\n\t\t\t\t\tconst value = parseFloat( token.substring( 1 ) );\n\t\t\t\t\targs[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t//Process commands\n\t\t\t//G0/G1 – Linear Movement\n\t\t\tif ( cmd === 'G0' || cmd === 'G1' ) {\n\n\t\t\t\tconst line = {\n\t\t\t\t\tx: args.x !== undefined ? absolute( state.x, args.x ) : state.x,\n\t\t\t\t\ty: args.y !== undefined ? absolute( state.y, args.y ) : state.y,\n\t\t\t\t\tz: args.z !== undefined ? absolute( state.z, args.z ) : state.z,\n\t\t\t\t\te: args.e !== undefined ? absolute( state.e, args.e ) : state.e,\n\t\t\t\t\tf: args.f !== undefined ? absolute( state.f, args.f ) : state.f,\n\t\t\t\t};\n\n\t\t\t\t//Layer change detection is or made by watching Z, it's made by watching when we extrude at a new Z position\n\t\t\t\tif ( delta( state.e, line.e ) > 0 ) {\n\n\t\t\t\t\tstate.extruding = delta( state.e, line.e ) > 0;\n\n\t\t\t\t\tif ( currentLayer == undefined || line.z != currentLayer.z ) {\n\n\t\t\t\t\t\tnewLayer( line );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\taddSegment( state, line );\n\t\t\t\tstate = line;\n\n\t\t\t} else if ( cmd === 'G2' || cmd === 'G3' ) {\n\n\t\t\t\t//G2/G3 - Arc Movement ( G2 clock wise and G3 counter clock wise )\n\t\t\t\t//console.warn( 'THREE.GCodeLoader: Arc command not supported' );\n\n\t\t\t} else if ( cmd === 'G90' ) {\n\n\t\t\t\t//G90: Set to Absolute Positioning\n\t\t\t\tstate.relative = false;\n\n\t\t\t} else if ( cmd === 'G91' ) {\n\n\t\t\t\t//G91: Set to state.relative Positioning\n\t\t\t\tstate.relative = true;\n\n\t\t\t} else if ( cmd === 'G92' ) {\n\n\t\t\t\t//G92: Set Position\n\t\t\t\tconst line = state;\n\t\t\t\tline.x = args.x !== undefined ? args.x : line.x;\n\t\t\t\tline.y = args.y !== undefined ? args.y : line.y;\n\t\t\t\tline.z = args.z !== undefined ? args.z : line.z;\n\t\t\t\tline.e = args.e !== undefined ? args.e : line.e;\n\n\t\t\t} else {\n\n\t\t\t\t//console.warn( 'THREE.GCodeLoader: Command not supported:' + cmd );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addObject( vertex, extruding, i ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertex, 3 ) );\n\t\t\tconst segments = new LineSegments( geometry, extruding ? extrudingMaterial : pathMaterial );\n\t\t\tsegments.name = 'layer' + i;\n\t\t\tobject.add( segments );\n\n\t\t}\n\n\t\tconst object = new Group();\n\t\tobject.name = 'gcode';\n\n\t\tif ( this.splitLayer ) {\n\n\t\t\tfor ( let i = 0; i < layers.length; i ++ ) {\n\n\t\t\t\tconst layer = layers[ i ];\n\t\t\t\taddObject( layer.vertex, true, i );\n\t\t\t\taddObject( layer.pathVertex, false, i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst vertex = [],\n\t\t\t\tpathVertex = [];\n\n\t\t\tfor ( let i = 0; i < layers.length; i ++ ) {\n\n\t\t\t\tconst layer = layers[ i ];\n\t\t\t\tconst layerVertex = layer.vertex;\n\t\t\t\tconst layerPathVertex = layer.pathVertex;\n\n\t\t\t\tfor ( let j = 0; j < layerVertex.length; j ++ ) {\n\n\t\t\t\t\tvertex.push( layerVertex[ j ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < layerPathVertex.length; j ++ ) {\n\n\t\t\t\t\tpathVertex.push( layerPathVertex[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\taddObject( vertex, true, layers.length );\n\t\t\taddObject( pathVertex, false, layers.length );\n\n\t\t}\n\n\t\tobject.rotation.set( - Math.PI / 2, 0, 0 );\n\n\t\treturn object;\n\n\t}\n\n}\n\nexport { GCodeLoader };\n", "import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tInstancedBufferAttribute\n} from 'three';\nimport { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureAVIFExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\t// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file\n\t\t\t// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'\n\t\t\t// resourcePath = 'https://my-cnd-server.com/assets/models/'\n\t\t\t// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'\n\t\t\t// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'\n\t\t\tconst relativeUrl = LoaderUtils.extractUrlBase( url );\n\t\t\tresourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetDDSLoader() {\n\n\t\tthrow new Error(\n\n\t\t\t'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n\n\t\t);\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( textDecoder.decode( data ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\n\t\t\tif ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );\n\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_DISPERSION: 'KHR_materials_dispersion',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_MATERIALS_BUMP: 'EXT_materials_bump',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_TEXTURE_AVIF: 'EXT_texture_avif',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tassignExtrasToUserData( lightNode, lightDef );\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tgetDependency( type, index ) {\n\n\t\tif ( type !== 'light' ) return;\n\n\t\treturn this._loadLight( index );\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tconst colorFactor = extension.sheenColorFactor;\n\t\t\tmaterialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;\n\n\t\tif ( extension.bumpTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials anisotropy Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.anisotropyStrength !== undefined ) {\n\n\t\t\tmaterialParams.anisotropy = extension.anisotropyStrength;\n\n\t\t}\n\n\t\tif ( extension.anisotropyRotation !== undefined ) {\n\n\t\t\tmaterialParams.anisotropyRotation = extension.anisotropyRotation;\n\n\t\t}\n\n\t\tif ( extension.anisotropyTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * AVIF Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n */\nclass GLTFTextureAVIFExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image.\n\t\t\t\timage.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName === '_COLOR_0' ) {\n\n\t\t\t\t\t\tconst attr = attributes[ attributeName ];\n\t\t\t\t\t\tinstancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );\n\n\t\t\t\t\t} else if ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tthis.header = {\n\t\t\tmagic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = textDecoder.decode( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )\n\t\t\t&& transform.offset === undefined\n\t\t\t&& transform.rotation === undefined\n\t\t\t&& transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\ttexture.channel = transform.texCoord;\n\n\t\t}\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_q.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv1',\n\tTEXCOORD_2: 'uv2',\n\tTEXCOORD_3: 'uv3',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D|Material|BufferGeometry} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @param {BufferGeometry} geometry\n * @param {Array} targets\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tlet geometryKey;\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\tif ( primitiveDef.targets !== undefined ) {\n\n\t\tfor ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {\n\n\t\t\tgeometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );\n\n\t\t}\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\n\treturn 'image/png';\n\n}\n\nconst _identityMatrix = new Matrix4();\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Node cache\n\t\tthis.nodeCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tlet isSafari = false;\n\t\tlet safariVersion = - 1;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tconst userAgent = navigator.userAgent;\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;\n\t\t\tconst safariMatch = userAgent.match( /Version\\/(\\d+)/ );\n\t\t\tsafariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;\n\n\t\t\tisFirefox = userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\t\tthis.nodeCache = {};\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\treturn Promise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tfor ( const scene of result.scenes ) {\n\n\t\t\t\t\tscene.updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadNode && ext.loadNode( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext != this && ext.getDependency && ext.getDependency( type, index );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( ! dependency ) {\n\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\t\t\tconst normalized = accessorDef.normalized === true;\n\n\t\t\tconst array = new TypedArray( accessorDef.count * itemSize );\n\t\t\treturn Promise.resolve( new BufferAttribute( array, itemSize, normalized ) );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tif ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {\n\n\t\t\t\ttexture.name = sourceDef.uri;\n\n\t\t\t}\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( texture, sourceDef );\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, colorSpace ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\tif ( ! texture ) return null;\n\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {\n\n\t\t\t\ttexture = texture.clone();\n\t\t\t\ttexture.channel = mapDef.texCoord;\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\tlineMaterial.map = material.map;\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tconst emissiveFactor = materialDef.emissiveFactor;\n\t\t\tmaterialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tconst material = new materialType( materialParams );\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tif ( sanitizedName in this.nodeNamesUsed ) {\n\n\t\t\treturn sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );\n\n\t\t} else {\n\n\t\t\tthis.nodeNamesUsed[ sanitizedName ] = 0;\n\n\t\t\treturn sanitizedName;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array} primitives\n\t * @return {Promise>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true ) {\n\n\t\t\t\t\t\t// normalize skin weights to fix malformed assets (see #15319)\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {\n\n\t\t\tpending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );\n\n\t\t}\n\n\t\tif ( skinDef.inverseBindMatrices !== undefined ) {\n\n\t\t\tpending.push( this.getDependency( 'accessor', skinDef.inverseBindMatrices ) );\n\n\t\t} else {\n\n\t\t\tpending.push( null );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst inverseBindMatrices = results.pop();\n\t\t\tconst jointNodes = results;\n\n\t\t\t// Note that bones (joint nodes) may or may not be in the\n\t\t\t// scene graph at this time.\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( let i = 0, il = jointNodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst jointNode = jointNodes[ i ];\n\n\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\tif ( inverseBindMatrices !== null ) {\n\n\t\t\t\t\t\tmat.fromArray( inverseBindMatrices.array, i * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\t\tconst animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tif ( target.node === undefined ) continue;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tif ( node.updateMatrix ) {\n\n\t\t\t\t\tnode.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tconst createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );\n\n\t\t\t\tif ( createdTracks ) {\n\n\t\t\t\t\tfor ( let k = 0; k < createdTracks.length; k ++ ) {\n\n\t\t\t\t\t\ttracks.push( createdTracks[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( animationName, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tconst nodePending = parser._loadNodeShallow( nodeIndex );\n\n\t\tconst childPending = [];\n\t\tconst childrenDef = nodeDef.children || [];\n\n\t\tfor ( let i = 0, il = childrenDef.length; i < il; i ++ ) {\n\n\t\t\tchildPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );\n\n\t\t}\n\n\t\tconst skeletonPending = nodeDef.skin === undefined\n\t\t\t? Promise.resolve( null )\n\t\t\t: parser.getDependency( 'skin', nodeDef.skin );\n\n\t\treturn Promise.all( [\n\t\t\tnodePending,\n\t\t\tPromise.all( childPending ),\n\t\t\tskeletonPending\n\t\t] ).then( function ( results ) {\n\n\t\t\tconst node = results[ 0 ];\n\t\t\tconst children = results[ 1 ];\n\t\t\tconst skeleton = results[ 2 ];\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\t// This full traverse should be fine because\n\t\t\t\t// child glTF nodes have not been added to this node yet.\n\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\tif ( ! mesh.isSkinnedMesh ) return;\n\n\t\t\t\t\tmesh.bind( skeleton, _identityMatrix );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tnode.add( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t// ._loadNodeShallow() parses a single node.\n\t// skin and child nodes are created and added in .loadNode() (no '_' prefix).\n\t_loadNodeShallow( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\t// This method is called from .loadNode() and .loadSkin().\n\t\t// Cache a node to avoid duplication.\n\n\t\tif ( this.nodeCache[ nodeIndex ] !== undefined ) {\n\n\t\t\treturn this.nodeCache[ nodeIndex ];\n\n\t\t}\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\tconst pending = [];\n\n\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t} );\n\n\t\tif ( meshPromise ) {\n\n\t\t\tpending.push( meshPromise );\n\n\t\t}\n\n\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t} ).forEach( function ( promise ) {\n\n\t\t\tpending.push( promise );\n\n\t\t} );\n\n\t\tthis.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t\treturn this.nodeCache[ nodeIndex ];\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( parser.getDependency( 'node', nodeIds[ i ] ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( nodes ) {\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tscene.add( nodes[ i ] );\n\n\t\t\t}\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n\t_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {\n\n\t\tconst tracks = [];\n\n\t\tconst targetName = node.name ? node.name : node.uuid;\n\t\tconst targetNames = [];\n\n\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\ttargetNames.push( targetName );\n\n\t\t}\n\n\t\tlet TypedKeyframeTrack;\n\n\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.position:\n\t\t\tcase PATH_PROPERTIES.scale:\n\n\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tswitch ( outputAccessor.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 3:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\n\t\tconst outputArray = this._getArrayFromAccessor( outputAccessor );\n\n\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\tinputAccessor.array,\n\t\t\t\toutputArray,\n\t\t\t\tinterpolation\n\t\t\t);\n\n\t\t\t// Override interpolation with custom factory method.\n\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\tthis._createCubicSplineTrackInterpolant( track );\n\n\t\t\t}\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\t_getArrayFromAccessor( accessor ) {\n\n\t\tlet outputArray = accessor.array;\n\n\t\tif ( accessor.normalized ) {\n\n\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t}\n\n\t\t\toutputArray = scaled;\n\n\t\t}\n\n\t\treturn outputArray;\n\n\t}\n\n\t_createCubicSplineTrackInterpolant( track ) {\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t};\n\n\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tif ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {\n\n\t\tconsole.warn( `THREE.GLTFLoader: Converting vertex colors from \"srgb-linear\" to \"${ColorManagement.workingColorSpace}\" not supported.` );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\nexport { GLTFLoader };\n", "import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tLinearSRGBColorSpace\n} from 'three';\n\n// https://github.com/mrdoob/three.js/issues/5552\n// http://en.wikipedia.org/wiki/RGBE_image_format\n\nclass RGBELoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\t// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n\tparse( buffer ) {\n\n\t\tconst\n\t\t\t/* default error routine. change this to change error handling */\n\t\t\trgbe_read_error = 1,\n\t\t\trgbe_write_error = 2,\n\t\t\trgbe_format_error = 3,\n\t\t\trgbe_memory_error = 4,\n\t\t\trgbe_error = function ( rgbe_error_code, msg ) {\n\n\t\t\t\tswitch ( rgbe_error_code ) {\n\n\t\t\t\t\tcase rgbe_read_error: throw new Error( 'THREE.RGBELoader: Read Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_write_error: throw new Error( 'THREE.RGBELoader: Write Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_format_error: throw new Error( 'THREE.RGBELoader: Bad File Format: ' + ( msg || '' ) );\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase rgbe_memory_error: throw new Error( 'THREE.RGBELoader: Memory Error: ' + ( msg || '' ) );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/* offsets to red, green, and blue components in a data (float) pixel */\n\t\t\t//RGBE_DATA_RED = 0,\n\t\t\t//RGBE_DATA_GREEN = 1,\n\t\t\t//RGBE_DATA_BLUE = 2,\n\n\t\t\t/* number of floats per pixel, use 4 since stored in rgba image format */\n\t\t\t//RGBE_DATA_SIZE = 4,\n\n\t\t\t/* flags indicating which fields in an rgbe_header_info are valid */\n\t\t\tRGBE_VALID_PROGRAMTYPE = 1,\n\t\t\tRGBE_VALID_FORMAT = 2,\n\t\t\tRGBE_VALID_DIMENSIONS = 4,\n\n\t\t\tNEWLINE = '\\n',\n\n\t\t\tfgets = function ( buffer, lineLimit, consume ) {\n\n\t\t\t\tconst chunkSize = 128;\n\n\t\t\t\tlineLimit = ! lineLimit ? 1024 : lineLimit;\n\t\t\t\tlet p = buffer.pos,\n\t\t\t\t\ti = - 1, len = 0, s = '',\n\t\t\t\t\tchunk = String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\twhile ( ( 0 > ( i = chunk.indexOf( NEWLINE ) ) ) && ( len < lineLimit ) && ( p < buffer.byteLength ) ) {\n\n\t\t\t\t\ts += chunk; len += chunk.length;\n\t\t\t\t\tp += chunkSize;\n\t\t\t\t\tchunk += String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( - 1 < i ) {\n\n\t\t\t\t\t/*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n\t\t\t\t\tif ( false !== consume ) buffer.pos += len + i + 1;\n\t\t\t\t\treturn s + chunk.slice( 0, i );\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/* minimal header reading. modify if you want to parse more information */\n\t\t\tRGBE_ReadHeader = function ( buffer ) {\n\n\n\t\t\t\t// regexes to parse header info fields\n\t\t\t\tconst magic_token_re = /^#\\?(\\S+)/,\n\t\t\t\t\tgamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\texposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\tformat_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n\t\t\t\t\tdimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n\n\t\t\t\t\t// RGBE format header struct\n\t\t\t\t\theader = {\n\n\t\t\t\t\t\tvalid: 0, /* indicate which fields are valid */\n\n\t\t\t\t\t\tstring: '', /* the actual header string */\n\n\t\t\t\t\t\tcomments: '', /* comments found in header */\n\n\t\t\t\t\t\tprogramtype: 'RGBE', /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */\n\n\t\t\t\t\t\tformat: '', /* RGBE format, default 32-bit_rle_rgbe */\n\n\t\t\t\t\t\tgamma: 1.0, /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */\n\n\t\t\t\t\t\texposure: 1.0, /* a value of 1.0 in an image corresponds to watts/steradian/m^2. defaults to 1.0 */\n\n\t\t\t\t\t\twidth: 0, height: 0 /* image dimensions, width/height */\n\n\t\t\t\t\t};\n\n\t\t\t\tlet line, match;\n\n\t\t\t\tif ( buffer.pos >= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_read_error, 'no header found' );\n\n\t\t\t\t}\n\n\t\t\t\t/* if you want to require the magic token then uncomment the next line */\n\t\t\t\tif ( ! ( match = line.match( magic_token_re ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'bad initial token' );\n\n\t\t\t\t}\n\n\t\t\t\theader.valid |= RGBE_VALID_PROGRAMTYPE;\n\t\t\t\theader.programtype = match[ 1 ];\n\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tline = fgets( buffer );\n\t\t\t\t\tif ( false === line ) break;\n\t\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\t\tif ( '#' === line.charAt( 0 ) ) {\n\n\t\t\t\t\t\theader.comments += line + '\\n';\n\t\t\t\t\t\tcontinue; // comment line\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( gamma_re ) ) {\n\n\t\t\t\t\t\theader.gamma = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( exposure_re ) ) {\n\n\t\t\t\t\t\theader.exposure = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( format_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_FORMAT;\n\t\t\t\t\t\theader.format = match[ 1 ];//'32-bit_rle_rgbe';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( dimensions_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_DIMENSIONS;\n\t\t\t\t\t\theader.height = parseInt( match[ 1 ], 10 );\n\t\t\t\t\t\theader.width = parseInt( match[ 2 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( header.valid & RGBE_VALID_FORMAT ) && ( header.valid & RGBE_VALID_DIMENSIONS ) ) break;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_FORMAT ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing format specifier' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_DIMENSIONS ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing image size specifier' );\n\n\t\t\t\t}\n\n\t\t\t\treturn header;\n\n\t\t\t},\n\n\t\t\tRGBE_ReadPixels_RLE = function ( buffer, w, h ) {\n\n\t\t\t\tconst scanline_width = w;\n\n\t\t\t\tif (\n\t\t\t\t\t// run length encoding is not allowed so read flat\n\t\t\t\t\t( ( scanline_width < 8 ) || ( scanline_width > 0x7fff ) ) ||\n\t\t\t\t\t// this file is not run length encoded\n\t\t\t\t\t( ( 2 !== buffer[ 0 ] ) || ( 2 !== buffer[ 1 ] ) || ( buffer[ 2 ] & 0x80 ) )\n\t\t\t\t) {\n\n\t\t\t\t\t// return the flat buffer\n\t\t\t\t\treturn new Uint8Array( buffer );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scanline_width !== ( ( buffer[ 2 ] << 8 ) | buffer[ 3 ] ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'wrong scanline width' );\n\n\t\t\t\t}\n\n\t\t\t\tconst data_rgba = new Uint8Array( 4 * w * h );\n\n\t\t\t\tif ( ! data_rgba.length ) {\n\n\t\t\t\t\trgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );\n\n\t\t\t\t}\n\n\t\t\t\tlet offset = 0, pos = 0;\n\n\t\t\t\tconst ptr_end = 4 * scanline_width;\n\t\t\t\tconst rgbeStart = new Uint8Array( 4 );\n\t\t\t\tconst scanline_buffer = new Uint8Array( ptr_end );\n\t\t\t\tlet num_scanlines = h;\n\n\t\t\t\t// read in each successive scanline\n\t\t\t\twhile ( ( num_scanlines > 0 ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\tif ( pos + 4 > buffer.byteLength ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_read_error );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trgbeStart[ 0 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 1 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 2 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 3 ] = buffer[ pos ++ ];\n\n\t\t\t\t\tif ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] << 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad rgbe scanline format' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// read each of the four channels for the scanline into the buffer\n\t\t\t\t\t// first red, then green, then blue, then exponent\n\t\t\t\t\tlet ptr = 0, count;\n\n\t\t\t\t\twhile ( ( ptr < ptr_end ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\t\tcount = buffer[ pos ++ ];\n\t\t\t\t\t\tconst isEncodedRun = count > 128;\n\t\t\t\t\t\tif ( isEncodedRun ) count -= 128;\n\n\t\t\t\t\t\tif ( ( 0 === count ) || ( ptr + count > ptr_end ) ) {\n\n\t\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad scanline data' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( isEncodedRun ) {\n\n\t\t\t\t\t\t\t// a (encoded) run of the same value\n\t\t\t\t\t\t\tconst byteValue = buffer[ pos ++ ];\n\t\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\tscanline_buffer[ ptr ++ ] = byteValue;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//ptr += count;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// a literal-run\n\t\t\t\t\t\t\tscanline_buffer.set( buffer.subarray( pos, pos + count ), ptr );\n\t\t\t\t\t\t\tptr += count; pos += count;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// now convert data from buffer into rgba\n\t\t\t\t\t// first red, then green, then blue, then exponent (alpha)\n\t\t\t\t\tconst l = scanline_width; //scanline_buffer.byteLength;\n\t\t\t\t\tfor ( let i = 0; i < l; i ++ ) {\n\n\t\t\t\t\t\tlet off = 0;\n\t\t\t\t\t\tdata_rgba[ offset ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 1 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 2 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 3 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnum_scanlines --;\n\n\t\t\t\t}\n\n\t\t\t\treturn data_rgba;\n\n\t\t\t};\n\n\t\tconst RGBEByteToRGBFloat = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;\n\t\t\tdestArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;\n\t\t\tdestArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;\n\t\t\tdestArray[ destOffset + 3 ] = 1;\n\n\t\t};\n\n\t\tconst RGBEByteToRGBHalf = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\t// clamping to 65504, the maximum representable value in float16\n\t\t\tdestArray[ destOffset + 0 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 0 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 1 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 1 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 2 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 2 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\t\t};\n\n\t\tconst byteArray = new Uint8Array( buffer );\n\t\tbyteArray.pos = 0;\n\t\tconst rgbe_header_info = RGBE_ReadHeader( byteArray );\n\n\t\tconst w = rgbe_header_info.width,\n\t\t\th = rgbe_header_info.height,\n\t\t\timage_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );\n\n\n\t\tlet data, type;\n\t\tlet numElements;\n\n\t\tswitch ( this.type ) {\n\n\t\t\tcase FloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst floatArray = new Float32Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = floatArray;\n\t\t\t\ttype = FloatType;\n\t\t\t\tbreak;\n\n\t\t\tcase HalfFloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst halfArray = new Uint16Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = halfArray;\n\t\t\t\ttype = HalfFloatType;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tthrow new Error( 'THREE.RGBELoader: Unsupported type: ' + this.type );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\treturn {\n\t\t\twidth: w, height: h,\n\t\t\tdata: data,\n\t\t\theader: rgbe_header_info.string,\n\t\t\tgamma: rgbe_header_info.gamma,\n\t\t\texposure: rgbe_header_info.exposure,\n\t\t\ttype: type\n\t\t};\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\tswitch ( texture.type ) {\n\n\t\t\t\tcase FloatType:\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn super.load( url, onLoadCallback, onProgress, onError );\n\n\t}\n\n}\n\nexport { RGBELoader };\n", "import {\n\tCubeTexture,\n\tDataTexture,\n\tFileLoader,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tLinearSRGBColorSpace,\n\tLoader\n} from 'three';\nimport { RGBELoader } from '../loaders/RGBELoader.js';\n\nclass HDRCubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.hdrLoader = new RGBELoader();\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\ttexture.type = this.type;\n\n\t\tswitch ( texture.type ) {\n\n\t\t\tcase FloatType:\n\n\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\tbreak;\n\n\t\t\tcase HalfFloatType:\n\n\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst scope = this;\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadHDRData( i, onLoad, onProgress, onError ) {\n\n\t\t\tnew FileLoader( scope.manager )\n\t\t\t\t.setPath( scope.path )\n\t\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t\t.setWithCredentials( scope.withCredentials )\n\t\t\t\t.load( urls[ i ], function ( buffer ) {\n\n\t\t\t\t\tloaded ++;\n\n\t\t\t\t\tconst texData = scope.hdrLoader.parse( buffer );\n\n\t\t\t\t\tif ( ! texData ) return;\n\n\t\t\t\t\tif ( texData.data !== undefined ) {\n\n\t\t\t\t\t\tconst dataTexture = new DataTexture( texData.data, texData.width, texData.height );\n\n\t\t\t\t\t\tdataTexture.type = texture.type;\n\t\t\t\t\t\tdataTexture.colorSpace = texture.colorSpace;\n\t\t\t\t\t\tdataTexture.format = texture.format;\n\t\t\t\t\t\tdataTexture.minFilter = texture.minFilter;\n\t\t\t\t\t\tdataTexture.magFilter = texture.magFilter;\n\t\t\t\t\t\tdataTexture.generateMipmaps = texture.generateMipmaps;\n\n\t\t\t\t\t\ttexture.images[ i ] = dataTexture;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; i ++ ) {\n\n\t\t\tloadHDRData( i, onLoad, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\tthis.hdrLoader.setDataType( value );\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { HDRCubeTextureLoader };\n", "import {\n\tDataTexture,\n\tFileLoader,\n\tFloatType,\n\tRedFormat,\n\tMathUtils,\n\tLoader,\n\tUnsignedByteType,\n\tLinearFilter,\n\tHalfFloatType,\n\tDataUtils\n} from 'three';\n\nclass IESLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\t_getIESValues( iesLamp, type ) {\n\n\t\tconst width = 360;\n\t\tconst height = 180;\n\t\tconst size = width * height;\n\n\t\tconst data = new Array( size );\n\n\t\tfunction interpolateCandelaValues( phi, theta ) {\n\n\t\t\tlet phiIndex = 0, thetaIndex = 0;\n\t\t\tlet startTheta = 0, endTheta = 0, startPhi = 0, endPhi = 0;\n\n\t\t\tfor ( let i = 0; i < iesLamp.numHorAngles - 1; ++ i ) { // numHorAngles = horAngles.length-1 because of extra padding, so this wont cause an out of bounds error\n\n\t\t\t\tif ( theta < iesLamp.horAngles[ i + 1 ] || i == iesLamp.numHorAngles - 2 ) {\n\n\t\t\t\t\tthetaIndex = i;\n\t\t\t\t\tstartTheta = iesLamp.horAngles[ i ];\n\t\t\t\t\tendTheta = iesLamp.horAngles[ i + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < iesLamp.numVerAngles - 1; ++ i ) {\n\n\t\t\t\tif ( phi < iesLamp.verAngles[ i + 1 ] || i == iesLamp.numVerAngles - 2 ) {\n\n\t\t\t\t\tphiIndex = i;\n\t\t\t\t\tstartPhi = iesLamp.verAngles[ i ];\n\t\t\t\t\tendPhi = iesLamp.verAngles[ i + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst deltaTheta = endTheta - startTheta;\n\t\t\tconst deltaPhi = endPhi - startPhi;\n\n\t\t\tif ( deltaPhi === 0 ) // Outside range\n\t\t\t\treturn 0;\n\n\t\t\tconst t1 = deltaTheta === 0 ? 0 : ( theta - startTheta ) / deltaTheta;\n\t\t\tconst t2 = ( phi - startPhi ) / deltaPhi;\n\n\t\t\tconst nextThetaIndex = deltaTheta === 0 ? thetaIndex : thetaIndex + 1;\n\n\t\t\tconst v1 = MathUtils.lerp( iesLamp.candelaValues[ thetaIndex ][ phiIndex ], iesLamp.candelaValues[ nextThetaIndex ][ phiIndex ], t1 );\n\t\t\tconst v2 = MathUtils.lerp( iesLamp.candelaValues[ thetaIndex ][ phiIndex + 1 ], iesLamp.candelaValues[ nextThetaIndex ][ phiIndex + 1 ], t1 );\n\t\t\tconst v = MathUtils.lerp( v1, v2, t2 );\n\n\t\t\treturn v;\n\n\t\t}\n\n\t\tconst startTheta = iesLamp.horAngles[ 0 ], endTheta = iesLamp.horAngles[ iesLamp.numHorAngles - 1 ];\n\n\t\tfor ( let i = 0; i < size; ++ i ) {\n\n\t\t\tlet theta = i % width;\n\t\t\tconst phi = Math.floor( i / width );\n\n\t\t\tif ( endTheta - startTheta !== 0 && ( theta < startTheta || theta >= endTheta ) ) { // Handle symmetry for hor angles\n\n\t\t\t\ttheta %= endTheta * 2;\n\n\t\t\t\tif ( theta > endTheta )\n\t\t\t\t\ttheta = endTheta * 2 - theta;\n\n\t\t\t}\n\n\t\t\tdata[ phi + theta * height ] = interpolateCandelaValues( phi, theta );\n\n\t\t}\n\n\t\tlet result = null;\n\n\t\tif ( type === UnsignedByteType ) result = Uint8Array.from( data.map( v => Math.min( v * 0xFF, 0xFF ) ) );\n\t\telse if ( type === HalfFloatType ) result = Uint16Array.from( data.map( v => DataUtils.toHalfFloat( v ) ) );\n\t\telse if ( type === FloatType ) result = Float32Array.from( data );\n\t\telse console.error( 'IESLoader: Unsupported type:', type );\n\n\t\treturn result;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'text' );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\n\t\tloader.load( url, text => {\n\n\t\t\tonLoad( this.parse( text ) );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst type = this.type;\n\n\t\tconst iesLamp = new IESLamp( text );\n\t\tconst data = this._getIESValues( iesLamp, type );\n\n\t\tconst texture = new DataTexture( data, 180, 1, RedFormat, type );\n\t\ttexture.minFilter = LinearFilter;\n\t\ttexture.magFilter = LinearFilter;\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n\nfunction IESLamp( text ) {\n\n\tconst _self = this;\n\n\tconst textArray = text.split( '\\n' );\n\n\tlet lineNumber = 0;\n\tlet line;\n\n\t_self.verAngles = [ ];\n\t_self.horAngles = [ ];\n\n\t_self.candelaValues = [ ];\n\n\t_self.tiltData = { };\n\t_self.tiltData.angles = [ ];\n\t_self.tiltData.mulFactors = [ ];\n\n\tfunction textToArray( text ) {\n\n\t\ttext = text.replace( /^\\s+|\\s+$/g, '' ); // remove leading or trailing spaces\n\t\ttext = text.replace( /,/g, ' ' ); // replace commas with spaces\n\t\ttext = text.replace( /\\s\\s+/g, ' ' ); // replace white space/tabs etc by single whitespace\n\n\t\tconst array = text.split( ' ' );\n\n\t\treturn array;\n\n\t}\n\n\tfunction readArray( count, array ) {\n\n\t\twhile ( true ) {\n\n\t\t\tconst line = textArray[ lineNumber ++ ];\n\t\t\tconst lineData = textToArray( line );\n\n\t\t\tfor ( let i = 0; i < lineData.length; ++ i ) {\n\n\t\t\t\tarray.push( Number( lineData[ i ] ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length === count )\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction readTilt() {\n\n\t\tlet line = textArray[ lineNumber ++ ];\n\t\tlet lineData = textToArray( line );\n\n\t\t_self.tiltData.lampToLumGeometry = Number( lineData[ 0 ] );\n\n\t\tline = textArray[ lineNumber ++ ];\n\t\tlineData = textToArray( line );\n\n\t\t_self.tiltData.numAngles = Number( lineData[ 0 ] );\n\n\t\treadArray( _self.tiltData.numAngles, _self.tiltData.angles );\n\t\treadArray( _self.tiltData.numAngles, _self.tiltData.mulFactors );\n\n\t}\n\n\tfunction readLampValues() {\n\n\t\tconst values = [ ];\n\t\treadArray( 10, values );\n\n\t\t_self.count = Number( values[ 0 ] );\n\t\t_self.lumens = Number( values[ 1 ] );\n\t\t_self.multiplier = Number( values[ 2 ] );\n\t\t_self.numVerAngles = Number( values[ 3 ] );\n\t\t_self.numHorAngles = Number( values[ 4 ] );\n\t\t_self.gonioType = Number( values[ 5 ] );\n\t\t_self.units = Number( values[ 6 ] );\n\t\t_self.width = Number( values[ 7 ] );\n\t\t_self.length = Number( values[ 8 ] );\n\t\t_self.height = Number( values[ 9 ] );\n\n\t}\n\n\tfunction readLampFactors() {\n\n\t\tconst values = [ ];\n\t\treadArray( 3, values );\n\n\t\t_self.ballFactor = Number( values[ 0 ] );\n\t\t_self.blpFactor = Number( values[ 1 ] );\n\t\t_self.inputWatts = Number( values[ 2 ] );\n\n\t}\n\n\twhile ( true ) {\n\n\t\tline = textArray[ lineNumber ++ ];\n\n\t\tif ( line.includes( 'TILT' ) ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tif ( ! line.includes( 'NONE' ) ) {\n\n\t\tif ( line.includes( 'INCLUDE' ) ) {\n\n\t\t\treadTilt();\n\n\t\t} else {\n\n\t\t\t// TODO:: Read tilt data from a file\n\n\t\t}\n\n\t}\n\n\treadLampValues();\n\n\treadLampFactors();\n\n\t// Initialize candela value array\n\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\t_self.candelaValues.push( [ ] );\n\n\t}\n\n\t// Parse Angles\n\treadArray( _self.numVerAngles, _self.verAngles );\n\treadArray( _self.numHorAngles, _self.horAngles );\n\n\t// Parse Candela values\n\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\treadArray( _self.numVerAngles, _self.candelaValues[ i ] );\n\n\t}\n\n\t// Calculate actual candela values, and normalize.\n\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\tfor ( let j = 0; j < _self.numVerAngles; ++ j ) {\n\n\t\t\t_self.candelaValues[ i ][ j ] *= _self.candelaValues[ i ][ j ] * _self.multiplier\n\t\t\t\t* _self.ballFactor * _self.blpFactor;\n\n\t\t}\n\n\t}\n\n\tlet maxVal = - 1;\n\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\tfor ( let j = 0; j < _self.numVerAngles; ++ j ) {\n\n\t\t\tconst value = _self.candelaValues[ i ][ j ];\n\t\t\tmaxVal = maxVal < value ? value : maxVal;\n\n\t\t}\n\n\t}\n\n\tconst bNormalize = true;\n\tif ( bNormalize && maxVal > 0 ) {\n\n\t\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\t\tfor ( let j = 0; j < _self.numVerAngles; ++ j ) {\n\n\t\t\t\t_self.candelaValues[ i ][ j ] /= maxVal;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n\nexport { IESLoader };\n", "import {\n\tFileLoader,\n\tGroup,\n\tLoader,\n\tLoadingManager\n} from 'three';\nimport { ColladaLoader } from '../loaders/ColladaLoader.js';\nimport * as fflate from '../libs/fflate.module.js';\n\nclass KMZLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction findFile( url ) {\n\n\t\t\tfor ( const path in zip ) {\n\n\t\t\t\tif ( path.slice( - url.length ) === url ) {\n\n\t\t\t\t\treturn zip[ path ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst manager = new LoadingManager();\n\t\tmanager.setURLModifier( function ( url ) {\n\n\t\t\tconst image = findFile( url );\n\n\t\t\tif ( image ) {\n\n\t\t\t\tconsole.log( 'Loading', url );\n\n\t\t\t\tconst blob = new Blob( [ image.buffer ], { type: 'application/octet-stream' } );\n\t\t\t\treturn URL.createObjectURL( blob );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t} );\n\n\t\t//\n\n\t\tconst zip = fflate.unzipSync( new Uint8Array( data ) );\n\n\t\tif ( zip[ 'doc.kml' ] ) {\n\n\t\t\tconst xml = new DOMParser().parseFromString( fflate.strFromU8( zip[ 'doc.kml' ] ), 'application/xml' );\n\n\t\t\tconst model = xml.querySelector( 'Placemark Model Link href' );\n\n\t\t\tif ( model ) {\n\n\t\t\t\tconst loader = new ColladaLoader( manager );\n\t\t\t\treturn loader.parse( fflate.strFromU8( zip[ model.textContent ] ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'KMZLoader: Missing doc.kml file.' );\n\n\t\t\tfor ( const path in zip ) {\n\n\t\t\t\tconst extension = path.split( '.' ).pop().toLowerCase();\n\n\t\t\t\tif ( extension === 'dae' ) {\n\n\t\t\t\t\tconst loader = new ColladaLoader( manager );\n\t\t\t\t\treturn loader.parse( fflate.strFromU8( zip[ path ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'KMZLoader: Couldn\\'t find .dae file.' );\n\t\treturn { scene: new Group() };\n\n\t}\n\n}\n\nexport { KMZLoader };\n", "/**\n * @author Deepkolos / https://github.com/deepkolos\n */\n\nexport class WorkerPool {\n\n\tconstructor( pool = 4 ) {\n\n\t\tthis.pool = pool;\n\t\tthis.queue = [];\n\t\tthis.workers = [];\n\t\tthis.workersResolve = [];\n\t\tthis.workerStatus = 0;\n\n\t}\n\n\t_initWorker( workerId ) {\n\n\t\tif ( ! this.workers[ workerId ] ) {\n\n\t\t\tconst worker = this.workerCreator();\n\t\t\tworker.addEventListener( 'message', this._onMessage.bind( this, workerId ) );\n\t\t\tthis.workers[ workerId ] = worker;\n\n\t\t}\n\n\t}\n\n\t_getIdleWorker() {\n\n\t\tfor ( let i = 0; i < this.pool; i ++ )\n\t\t\tif ( ! ( this.workerStatus & ( 1 << i ) ) ) return i;\n\n\t\treturn - 1;\n\n\t}\n\n\t_onMessage( workerId, msg ) {\n\n\t\tconst resolve = this.workersResolve[ workerId ];\n\t\tresolve && resolve( msg );\n\n\t\tif ( this.queue.length ) {\n\n\t\t\tconst { resolve, msg, transfer } = this.queue.shift();\n\t\t\tthis.workersResolve[ workerId ] = resolve;\n\t\t\tthis.workers[ workerId ].postMessage( msg, transfer );\n\n\t\t} else {\n\n\t\t\tthis.workerStatus ^= 1 << workerId;\n\n\t\t}\n\n\t}\n\n\tsetWorkerCreator( workerCreator ) {\n\n\t\tthis.workerCreator = workerCreator;\n\n\t}\n\n\tsetWorkerLimit( pool ) {\n\n\t\tthis.pool = pool;\n\n\t}\n\n\tpostMessage( msg, transfer ) {\n\n\t\treturn new Promise( ( resolve ) => {\n\n\t\t\tconst workerId = this._getIdleWorker();\n\n\t\t\tif ( workerId !== - 1 ) {\n\n\t\t\t\tthis._initWorker( workerId );\n\t\t\t\tthis.workerStatus |= 1 << workerId;\n\t\t\t\tthis.workersResolve[ workerId ] = resolve;\n\t\t\t\tthis.workers[ workerId ].postMessage( msg, transfer );\n\n\t\t\t} else {\n\n\t\t\t\tthis.queue.push( { resolve, msg, transfer } );\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.workers.forEach( ( worker ) => worker.terminate() );\n\t\tthis.workersResolve.length = 0;\n\t\tthis.workers.length = 0;\n\t\tthis.queue.length = 0;\n\t\tthis.workerStatus = 0;\n\n\t}\n\n}\n", "let A,I,B;const g={env:{emscripten_notify_memory_growth:function(A){B=new Uint8Array(I.exports.memory.buffer)}}};class Q{init(){return A||(A=\"undefined\"!=typeof fetch?fetch(\"data:application/wasm;base64,\"+C).then(A=>A.arrayBuffer()).then(A=>WebAssembly.instantiate(A,g)).then(this._init):WebAssembly.instantiate(Buffer.from(C,\"base64\"),g).then(this._init),A)}_init(A){I=A.instance,g.env.emscripten_notify_memory_growth(0)}decode(A,g=0){if(!I)throw new Error(\"ZSTDDecoder: Await .init() before decoding.\");const Q=A.byteLength,C=I.exports.malloc(Q);B.set(A,C),g=g||Number(I.exports.ZSTD_findDecompressedSize(C,Q));const E=I.exports.malloc(g),i=I.exports.ZSTD_decompress(E,g,C,Q),D=B.slice(E,E+i);return I.exports.free(C),I.exports.free(E),D}}const C=\"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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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\";export{Q as ZSTDDecoder};\n", "/**\n * Loader for KTX 2.0 GPU Texture containers.\n *\n * KTX 2.0 is a container format for various GPU texture formats. The loader\n * supports Basis Universal GPU textures, which can be quickly transcoded to\n * a wide variety of GPU texture compression formats, as well as some\n * uncompressed DataTexture and Data3DTexture formats.\n *\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n */\n\nimport {\n\tCompressedTexture,\n\tCompressedArrayTexture,\n\tCompressedCubeTexture,\n\tData3DTexture,\n\tDataTexture,\n\tDisplayP3ColorSpace,\n\tFileLoader,\n\tFloatType,\n\tHalfFloatType,\n\tNoColorSpace,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearDisplayP3ColorSpace,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tRedFormat,\n\tRGB_ETC1_Format,\n\tRGB_ETC2_Format,\n\tRGB_PVRTC_4BPPV1_Format,\n\tRGBA_ASTC_4x4_Format,\n\tRGBA_ASTC_6x6_Format,\n\tRGBA_BPTC_Format,\n\tRGBA_ETC2_EAC_Format,\n\tRGBA_PVRTC_4BPPV1_Format,\n\tRGBA_S3TC_DXT5_Format,\n\tRGBA_S3TC_DXT1_Format,\n\tRGBAFormat,\n\tRGFormat,\n\tSRGBColorSpace,\n\tUnsignedByteType,\n} from 'three';\nimport { WorkerPool } from '../utils/WorkerPool.js';\nimport {\n\tread,\n\tKHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n\tKHR_DF_TRANSFER_SRGB,\n\tKHR_SUPERCOMPRESSION_NONE,\n\tKHR_SUPERCOMPRESSION_ZSTD,\n\tVK_FORMAT_UNDEFINED,\n\tVK_FORMAT_R16_SFLOAT,\n\tVK_FORMAT_R16G16_SFLOAT,\n\tVK_FORMAT_R16G16B16A16_SFLOAT,\n\tVK_FORMAT_R32_SFLOAT,\n\tVK_FORMAT_R32G32_SFLOAT,\n\tVK_FORMAT_R32G32B32A32_SFLOAT,\n\tVK_FORMAT_R8_SRGB,\n\tVK_FORMAT_R8_UNORM,\n\tVK_FORMAT_R8G8_SRGB,\n\tVK_FORMAT_R8G8_UNORM,\n\tVK_FORMAT_R8G8B8A8_SRGB,\n\tVK_FORMAT_R8G8B8A8_UNORM,\n\tVK_FORMAT_ASTC_6x6_SRGB_BLOCK,\n\tVK_FORMAT_ASTC_6x6_UNORM_BLOCK,\n\tKHR_DF_PRIMARIES_UNSPECIFIED,\n\tKHR_DF_PRIMARIES_BT709,\n\tKHR_DF_PRIMARIES_DISPLAYP3\n} from '../libs/ktx-parse.module.js';\nimport { ZSTDDecoder } from '../libs/zstddec.module.js';\n\nconst _taskCache = new WeakMap();\n\nlet _activeLoaders = 0;\n\nlet _zstd;\n\nclass KTX2Loader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.transcoderPath = '';\n\t\tthis.transcoderBinary = null;\n\t\tthis.transcoderPending = null;\n\n\t\tthis.workerPool = new WorkerPool();\n\t\tthis.workerSourceURL = '';\n\t\tthis.workerConfig = null;\n\n\t\tif ( typeof MSC_TRANSCODER !== 'undefined' ) {\n\n\t\t\tconsole.warn(\n\n\t\t\t\t'THREE.KTX2Loader: Please update to latest \"basis_transcoder\".'\n\t\t\t\t+ ' \"msc_basis_transcoder\" is no longer supported in three.js r125+.'\n\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\tsetTranscoderPath( path ) {\n\n\t\tthis.transcoderPath = path;\n\n\t\treturn this;\n\n\t}\n\n\tsetWorkerLimit( num ) {\n\n\t\tthis.workerPool.setWorkerLimit( num );\n\n\t\treturn this;\n\n\t}\n\n\tasync detectSupportAsync( renderer ) {\n\n\t\tthis.workerConfig = {\n\t\t\tastcSupported: await renderer.hasFeatureAsync( 'texture-compression-astc' ),\n\t\t\tetc1Supported: await renderer.hasFeatureAsync( 'texture-compression-etc1' ),\n\t\t\tetc2Supported: await renderer.hasFeatureAsync( 'texture-compression-etc2' ),\n\t\t\tdxtSupported: await renderer.hasFeatureAsync( 'texture-compression-bc' ),\n\t\t\tbptcSupported: await renderer.hasFeatureAsync( 'texture-compression-bptc' ),\n\t\t\tpvrtcSupported: await renderer.hasFeatureAsync( 'texture-compression-pvrtc' )\n\t\t};\n\n\t\treturn this;\n\n\t}\n\n\tdetectSupport( renderer ) {\n\n\t\tif ( renderer.isWebGPURenderer === true ) {\n\n\t\t\tthis.workerConfig = {\n\t\t\t\tastcSupported: renderer.hasFeature( 'texture-compression-astc' ),\n\t\t\t\tetc1Supported: renderer.hasFeature( 'texture-compression-etc1' ),\n\t\t\t\tetc2Supported: renderer.hasFeature( 'texture-compression-etc2' ),\n\t\t\t\tdxtSupported: renderer.hasFeature( 'texture-compression-bc' ),\n\t\t\t\tbptcSupported: renderer.hasFeature( 'texture-compression-bptc' ),\n\t\t\t\tpvrtcSupported: renderer.hasFeature( 'texture-compression-pvrtc' )\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tthis.workerConfig = {\n\t\t\t\tastcSupported: renderer.extensions.has( 'WEBGL_compressed_texture_astc' ),\n\t\t\t\tetc1Supported: renderer.extensions.has( 'WEBGL_compressed_texture_etc1' ),\n\t\t\t\tetc2Supported: renderer.extensions.has( 'WEBGL_compressed_texture_etc' ),\n\t\t\t\tdxtSupported: renderer.extensions.has( 'WEBGL_compressed_texture_s3tc' ),\n\t\t\t\tbptcSupported: renderer.extensions.has( 'EXT_texture_compression_bptc' ),\n\t\t\t\tpvrtcSupported: renderer.extensions.has( 'WEBGL_compressed_texture_pvrtc' )\n\t\t\t\t\t|| renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )\n\t\t\t};\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinit() {\n\n\t\tif ( ! this.transcoderPending ) {\n\n\t\t\t// Load transcoder wrapper.\n\t\t\tconst jsLoader = new FileLoader( this.manager );\n\t\t\tjsLoader.setPath( this.transcoderPath );\n\t\t\tjsLoader.setWithCredentials( this.withCredentials );\n\t\t\tconst jsContent = jsLoader.loadAsync( 'basis_transcoder.js' );\n\n\t\t\t// Load transcoder WASM binary.\n\t\t\tconst binaryLoader = new FileLoader( this.manager );\n\t\t\tbinaryLoader.setPath( this.transcoderPath );\n\t\t\tbinaryLoader.setResponseType( 'arraybuffer' );\n\t\t\tbinaryLoader.setWithCredentials( this.withCredentials );\n\t\t\tconst binaryContent = binaryLoader.loadAsync( 'basis_transcoder.wasm' );\n\n\t\t\tthis.transcoderPending = Promise.all( [ jsContent, binaryContent ] )\n\t\t\t\t.then( ( [ jsContent, binaryContent ] ) => {\n\n\t\t\t\t\tconst fn = KTX2Loader.BasisWorker.toString();\n\n\t\t\t\t\tconst body = [\n\t\t\t\t\t\t'/* constants */',\n\t\t\t\t\t\t'let _EngineFormat = ' + JSON.stringify( KTX2Loader.EngineFormat ),\n\t\t\t\t\t\t'let _TranscoderFormat = ' + JSON.stringify( KTX2Loader.TranscoderFormat ),\n\t\t\t\t\t\t'let _BasisFormat = ' + JSON.stringify( KTX2Loader.BasisFormat ),\n\t\t\t\t\t\t'/* basis_transcoder.js */',\n\t\t\t\t\t\tjsContent,\n\t\t\t\t\t\t'/* worker */',\n\t\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t\t].join( '\\n' );\n\n\t\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\t\t\t\t\tthis.transcoderBinary = binaryContent;\n\n\t\t\t\t\tthis.workerPool.setWorkerCreator( () => {\n\n\t\t\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\t\t\t\t\t\tconst transcoderBinary = this.transcoderBinary.slice( 0 );\n\n\t\t\t\t\t\tworker.postMessage( { type: 'init', config: this.workerConfig, transcoderBinary }, [ transcoderBinary ] );\n\n\t\t\t\t\t\treturn worker;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\tif ( _activeLoaders > 0 ) {\n\n\t\t\t\t// Each instance loads a transcoder and allocates workers, increasing network and memory cost.\n\n\t\t\t\tconsole.warn(\n\n\t\t\t\t\t'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.'\n\t\t\t\t\t+ ' Use a single KTX2Loader instance, or call .dispose() on old instances.'\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\t_activeLoaders ++;\n\n\t\t}\n\n\t\treturn this.transcoderPending;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.workerConfig === null ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.' );\n\n\t\t}\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t\t// again from this thread.\n\t\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\t\treturn cachedTask.promise.then( onLoad ).catch( onError );\n\n\t\t\t}\n\n\t\t\tthis._createTexture( buffer )\n\t\t\t\t.then( ( texture ) => onLoad ? onLoad( texture ) : null )\n\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t_createTextureFrom( transcodeResult, container ) {\n\n\t\tconst { faces, width, height, format, type, error, dfdFlags } = transcodeResult;\n\n\t\tif ( type === 'error' ) return Promise.reject( error );\n\n\t\tlet texture;\n\n\t\tif ( container.faceCount === 6 ) {\n\n\t\t\ttexture = new CompressedCubeTexture( faces, format, UnsignedByteType );\n\n\t\t} else {\n\n\t\t\tconst mipmaps = faces[ 0 ].mipmaps;\n\n\t\t\ttexture = container.layerCount > 1\n\t\t\t\t? new CompressedArrayTexture( mipmaps, width, height, container.layerCount, format, UnsignedByteType )\n\t\t\t\t: new CompressedTexture( mipmaps, width, height, format, UnsignedByteType );\n\n\t\t}\n\n\t\ttexture.minFilter = faces[ 0 ].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;\n\t\ttexture.magFilter = LinearFilter;\n\t\ttexture.generateMipmaps = false;\n\n\t\ttexture.needsUpdate = true;\n\t\ttexture.colorSpace = parseColorSpace( container );\n\t\ttexture.premultiplyAlpha = !! ( dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED );\n\n\t\treturn texture;\n\n\t}\n\n\t/**\n\t * @param {ArrayBuffer} buffer\n\t * @param {object?} config\n\t * @return {Promise}\n\t */\n\tasync _createTexture( buffer, config = {} ) {\n\n\t\tconst container = read( new Uint8Array( buffer ) );\n\n\t\tif ( container.vkFormat !== VK_FORMAT_UNDEFINED ) {\n\n\t\t\treturn createRawTexture( container );\n\n\t\t}\n\n\t\t//\n\t\tconst taskConfig = config;\n\t\tconst texturePending = this.init().then( () => {\n\n\t\t\treturn this.workerPool.postMessage( { type: 'transcode', buffer, taskConfig: taskConfig }, [ buffer ] );\n\n\t\t} ).then( ( e ) => this._createTextureFrom( e.data, container ) );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffer, { promise: texturePending } );\n\n\t\treturn texturePending;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.workerPool.dispose();\n\t\tif ( this.workerSourceURL ) URL.revokeObjectURL( this.workerSourceURL );\n\n\t\t_activeLoaders --;\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n/* CONSTANTS */\n\nKTX2Loader.BasisFormat = {\n\tETC1S: 0,\n\tUASTC_4x4: 1,\n};\n\nKTX2Loader.TranscoderFormat = {\n\tETC1: 0,\n\tETC2: 1,\n\tBC1: 2,\n\tBC3: 3,\n\tBC4: 4,\n\tBC5: 5,\n\tBC7_M6_OPAQUE_ONLY: 6,\n\tBC7_M5: 7,\n\tPVRTC1_4_RGB: 8,\n\tPVRTC1_4_RGBA: 9,\n\tASTC_4x4: 10,\n\tATC_RGB: 11,\n\tATC_RGBA_INTERPOLATED_ALPHA: 12,\n\tRGBA32: 13,\n\tRGB565: 14,\n\tBGR565: 15,\n\tRGBA4444: 16,\n};\n\nKTX2Loader.EngineFormat = {\n\tRGBAFormat: RGBAFormat,\n\tRGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,\n\tRGBA_BPTC_Format: RGBA_BPTC_Format,\n\tRGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,\n\tRGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,\n\tRGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,\n\tRGB_ETC1_Format: RGB_ETC1_Format,\n\tRGB_ETC2_Format: RGB_ETC2_Format,\n\tRGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,\n\tRGBA_S3TC_DXT1_Format: RGBA_S3TC_DXT1_Format,\n};\n\n\n/* WEB WORKER */\n\nKTX2Loader.BasisWorker = function () {\n\n\tlet config;\n\tlet transcoderPending;\n\tlet BasisModule;\n\n\tconst EngineFormat = _EngineFormat; // eslint-disable-line no-undef\n\tconst TranscoderFormat = _TranscoderFormat; // eslint-disable-line no-undef\n\tconst BasisFormat = _BasisFormat; // eslint-disable-line no-undef\n\n\tself.addEventListener( 'message', function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tconfig = message.config;\n\t\t\t\tinit( message.transcoderBinary );\n\t\t\t\tbreak;\n\n\t\t\tcase 'transcode':\n\t\t\t\ttranscoderPending.then( () => {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode( message.buffer );\n\n\t\t\t\t\t\tself.postMessage( { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdFlags }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t} );\n\n\tfunction init( wasmBinary ) {\n\n\t\ttranscoderPending = new Promise( ( resolve ) => {\n\n\t\t\tBasisModule = { wasmBinary, onRuntimeInitialized: resolve };\n\t\t\tBASIS( BasisModule ); // eslint-disable-line no-undef\n\n\t\t} ).then( () => {\n\n\t\t\tBasisModule.initializeBasis();\n\n\t\t\tif ( BasisModule.KTX2File === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.KTX2Loader: Please update Basis Universal transcoder.' );\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tfunction transcode( buffer ) {\n\n\t\tconst ktx2File = new BasisModule.KTX2File( new Uint8Array( buffer ) );\n\n\t\tfunction cleanup() {\n\n\t\t\tktx2File.close();\n\t\t\tktx2File.delete();\n\n\t\t}\n\n\t\tif ( ! ktx2File.isValid() ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file' );\n\n\t\t}\n\n\t\tconst basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;\n\t\tconst width = ktx2File.getWidth();\n\t\tconst height = ktx2File.getHeight();\n\t\tconst layerCount = ktx2File.getLayers() || 1;\n\t\tconst levelCount = ktx2File.getLevels();\n\t\tconst faceCount = ktx2File.getFaces();\n\t\tconst hasAlpha = ktx2File.getHasAlpha();\n\t\tconst dfdFlags = ktx2File.getDFDFlags();\n\n\t\tconst { transcoderFormat, engineFormat } = getTranscoderFormat( basisFormat, width, height, hasAlpha );\n\n\t\tif ( ! width || ! height || ! levelCount ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.KTX2Loader:\tInvalid texture' );\n\n\t\t}\n\n\t\tif ( ! ktx2File.startTranscoding() ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.KTX2Loader: .startTranscoding failed' );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst buffers = [];\n\n\t\tfor ( let face = 0; face < faceCount; face ++ ) {\n\n\t\t\tconst mipmaps = [];\n\n\t\t\tfor ( let mip = 0; mip < levelCount; mip ++ ) {\n\n\t\t\t\tconst layerMips = [];\n\n\t\t\t\tlet mipWidth, mipHeight;\n\n\t\t\t\tfor ( let layer = 0; layer < layerCount; layer ++ ) {\n\n\t\t\t\t\tconst levelInfo = ktx2File.getImageLevelInfo( mip, layer, face );\n\n\t\t\t\t\tif ( face === 0 && mip === 0 && layer === 0 && ( levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0 ) ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( levelCount > 1 ) {\n\n\t\t\t\t\t\tmipWidth = levelInfo.origWidth;\n\t\t\t\t\t\tmipHeight = levelInfo.origHeight;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Handles non-multiple-of-four dimensions in textures without mipmaps. Textures with\n\t\t\t\t\t\t// mipmaps must use multiple-of-four dimensions, for some texture formats and APIs.\n\t\t\t\t\t\t// See mrdoob/three.js#25908.\n\t\t\t\t\t\tmipWidth = levelInfo.width;\n\t\t\t\t\t\tmipHeight = levelInfo.height;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst dst = new Uint8Array( ktx2File.getImageTranscodedSizeInBytes( mip, layer, 0, transcoderFormat ) );\n\t\t\t\t\tconst status = ktx2File.transcodeImage( dst, mip, layer, face, transcoderFormat, 0, - 1, - 1 );\n\n\t\t\t\t\tif ( ! status ) {\n\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\tthrow new Error( 'THREE.KTX2Loader: .transcodeImage failed.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayerMips.push( dst );\n\n\t\t\t\t}\n\n\t\t\t\tconst mipData = concat( layerMips );\n\n\t\t\t\tmipmaps.push( { data: mipData, width: mipWidth, height: mipHeight } );\n\t\t\t\tbuffers.push( mipData.buffer );\n\n\t\t\t}\n\n\t\t\tfaces.push( { mipmaps, width, height, format: engineFormat } );\n\n\t\t}\n\n\t\tcleanup();\n\n\t\treturn { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags };\n\n\t}\n\n\t//\n\n\t// Optimal choice of a transcoder target format depends on the Basis format (ETC1S or UASTC),\n\t// device capabilities, and texture dimensions. The list below ranks the formats separately\n\t// for ETC1S and UASTC.\n\t//\n\t// In some cases, transcoding UASTC to RGBA32 might be preferred for higher quality (at\n\t// significant memory cost) compared to ETC1/2, BC1/3, and PVRTC. The transcoder currently\n\t// chooses RGBA32 only as a last resort and does not expose that option to the caller.\n\tconst FORMAT_OPTIONS = [\n\t\t{\n\t\t\tif: 'astcSupported',\n\t\t\tbasisFormat: [ BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4 ],\n\t\t\tengineFormat: [ EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format ],\n\t\t\tpriorityETC1S: Infinity,\n\t\t\tpriorityUASTC: 1,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'bptcSupported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5 ],\n\t\t\tengineFormat: [ EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format ],\n\t\t\tpriorityETC1S: 3,\n\t\t\tpriorityUASTC: 2,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'dxtSupported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.BC1, TranscoderFormat.BC3 ],\n\t\t\tengineFormat: [ EngineFormat.RGBA_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format ],\n\t\t\tpriorityETC1S: 4,\n\t\t\tpriorityUASTC: 5,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'etc2Supported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.ETC1, TranscoderFormat.ETC2 ],\n\t\t\tengineFormat: [ EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format ],\n\t\t\tpriorityETC1S: 1,\n\t\t\tpriorityUASTC: 3,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'etc1Supported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.ETC1 ],\n\t\t\tengineFormat: [ EngineFormat.RGB_ETC1_Format ],\n\t\t\tpriorityETC1S: 2,\n\t\t\tpriorityUASTC: 4,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'pvrtcSupported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA ],\n\t\t\tengineFormat: [ EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format ],\n\t\t\tpriorityETC1S: 5,\n\t\t\tpriorityUASTC: 6,\n\t\t\tneedsPowerOfTwo: true,\n\t\t},\n\t];\n\n\tconst ETC1S_OPTIONS = FORMAT_OPTIONS.sort( function ( a, b ) {\n\n\t\treturn a.priorityETC1S - b.priorityETC1S;\n\n\t} );\n\tconst UASTC_OPTIONS = FORMAT_OPTIONS.sort( function ( a, b ) {\n\n\t\treturn a.priorityUASTC - b.priorityUASTC;\n\n\t} );\n\n\tfunction getTranscoderFormat( basisFormat, width, height, hasAlpha ) {\n\n\t\tlet transcoderFormat;\n\t\tlet engineFormat;\n\n\t\tconst options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS;\n\n\t\tfor ( let i = 0; i < options.length; i ++ ) {\n\n\t\t\tconst opt = options[ i ];\n\n\t\t\tif ( ! config[ opt.if ] ) continue;\n\t\t\tif ( ! opt.basisFormat.includes( basisFormat ) ) continue;\n\t\t\tif ( hasAlpha && opt.transcoderFormat.length < 2 ) continue;\n\t\t\tif ( opt.needsPowerOfTwo && ! ( isPowerOfTwo( width ) && isPowerOfTwo( height ) ) ) continue;\n\n\t\t\ttranscoderFormat = opt.transcoderFormat[ hasAlpha ? 1 : 0 ];\n\t\t\tengineFormat = opt.engineFormat[ hasAlpha ? 1 : 0 ];\n\n\t\t\treturn { transcoderFormat, engineFormat };\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.' );\n\n\t\ttranscoderFormat = TranscoderFormat.RGBA32;\n\t\tengineFormat = EngineFormat.RGBAFormat;\n\n\t\treturn { transcoderFormat, engineFormat };\n\n\t}\n\n\tfunction isPowerOfTwo( value ) {\n\n\t\tif ( value <= 2 ) return true;\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t}\n\n\t/** Concatenates N byte arrays. */\n\tfunction concat( arrays ) {\n\n\t\tif ( arrays.length === 1 ) return arrays[ 0 ];\n\n\t\tlet totalByteLength = 0;\n\n\t\tfor ( let i = 0; i < arrays.length; i ++ ) {\n\n\t\t\tconst array = arrays[ i ];\n\t\t\ttotalByteLength += array.byteLength;\n\n\t\t}\n\n\t\tconst result = new Uint8Array( totalByteLength );\n\n\t\tlet byteOffset = 0;\n\n\t\tfor ( let i = 0; i < arrays.length; i ++ ) {\n\n\t\t\tconst array = arrays[ i ];\n\t\t\tresult.set( array, byteOffset );\n\n\t\t\tbyteOffset += array.byteLength;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n};\n\n//\n// Parsing for non-Basis textures. These textures are may have supercompression\n// like Zstd, but they do not require transcoding.\n\nconst UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGFormat, RedFormat ] );\n\nconst FORMAT_MAP = {\n\n\t[ VK_FORMAT_R32G32B32A32_SFLOAT ]: RGBAFormat,\n\t[ VK_FORMAT_R16G16B16A16_SFLOAT ]: RGBAFormat,\n\t[ VK_FORMAT_R8G8B8A8_UNORM ]: RGBAFormat,\n\t[ VK_FORMAT_R8G8B8A8_SRGB ]: RGBAFormat,\n\n\t[ VK_FORMAT_R32G32_SFLOAT ]: RGFormat,\n\t[ VK_FORMAT_R16G16_SFLOAT ]: RGFormat,\n\t[ VK_FORMAT_R8G8_UNORM ]: RGFormat,\n\t[ VK_FORMAT_R8G8_SRGB ]: RGFormat,\n\n\t[ VK_FORMAT_R32_SFLOAT ]: RedFormat,\n\t[ VK_FORMAT_R16_SFLOAT ]: RedFormat,\n\t[ VK_FORMAT_R8_SRGB ]: RedFormat,\n\t[ VK_FORMAT_R8_UNORM ]: RedFormat,\n\n\t[ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: RGBA_ASTC_6x6_Format,\n\t[ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: RGBA_ASTC_6x6_Format,\n\n};\n\nconst TYPE_MAP = {\n\n\t[ VK_FORMAT_R32G32B32A32_SFLOAT ]: FloatType,\n\t[ VK_FORMAT_R16G16B16A16_SFLOAT ]: HalfFloatType,\n\t[ VK_FORMAT_R8G8B8A8_UNORM ]: UnsignedByteType,\n\t[ VK_FORMAT_R8G8B8A8_SRGB ]: UnsignedByteType,\n\n\t[ VK_FORMAT_R32G32_SFLOAT ]: FloatType,\n\t[ VK_FORMAT_R16G16_SFLOAT ]: HalfFloatType,\n\t[ VK_FORMAT_R8G8_UNORM ]: UnsignedByteType,\n\t[ VK_FORMAT_R8G8_SRGB ]: UnsignedByteType,\n\n\t[ VK_FORMAT_R32_SFLOAT ]: FloatType,\n\t[ VK_FORMAT_R16_SFLOAT ]: HalfFloatType,\n\t[ VK_FORMAT_R8_SRGB ]: UnsignedByteType,\n\t[ VK_FORMAT_R8_UNORM ]: UnsignedByteType,\n\n\t[ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: UnsignedByteType,\n\t[ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: UnsignedByteType,\n\n};\n\nasync function createRawTexture( container ) {\n\n\tconst { vkFormat } = container;\n\n\tif ( FORMAT_MAP[ vkFormat ] === undefined ) {\n\n\t\tthrow new Error( 'THREE.KTX2Loader: Unsupported vkFormat.' );\n\n\t}\n\n\t//\n\n\tlet zstd;\n\n\tif ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD ) {\n\n\t\tif ( ! _zstd ) {\n\n\t\t\t_zstd = new Promise( async ( resolve ) => {\n\n\t\t\t\tconst zstd = new ZSTDDecoder();\n\t\t\t\tawait zstd.init();\n\t\t\t\tresolve( zstd );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tzstd = await _zstd;\n\n\t}\n\n\t//\n\n\tconst mipmaps = [];\n\n\n\tfor ( let levelIndex = 0; levelIndex < container.levels.length; levelIndex ++ ) {\n\n\t\tconst levelWidth = Math.max( 1, container.pixelWidth >> levelIndex );\n\t\tconst levelHeight = Math.max( 1, container.pixelHeight >> levelIndex );\n\t\tconst levelDepth = container.pixelDepth ? Math.max( 1, container.pixelDepth >> levelIndex ) : 0;\n\n\t\tconst level = container.levels[ levelIndex ];\n\n\t\tlet levelData;\n\n\t\tif ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE ) {\n\n\t\t\tlevelData = level.levelData;\n\n\t\t} else if ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD ) {\n\n\t\t\tlevelData = zstd.decode( level.levelData, level.uncompressedByteLength );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Unsupported supercompressionScheme.' );\n\n\t\t}\n\n\t\tlet data;\n\n\t\tif ( TYPE_MAP[ vkFormat ] === FloatType ) {\n\n\t\t\tdata = new Float32Array(\n\n\t\t\t\tlevelData.buffer,\n\t\t\t\tlevelData.byteOffset,\n\t\t\t\tlevelData.byteLength / Float32Array.BYTES_PER_ELEMENT\n\n\t\t\t);\n\n\t\t} else if ( TYPE_MAP[ vkFormat ] === HalfFloatType ) {\n\n\t\t\tdata = new Uint16Array(\n\n\t\t\t\tlevelData.buffer,\n\t\t\t\tlevelData.byteOffset,\n\t\t\t\tlevelData.byteLength / Uint16Array.BYTES_PER_ELEMENT\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tdata = levelData;\n\n\t\t}\n\n\t\tmipmaps.push( {\n\n\t\t\tdata: data,\n\t\t\twidth: levelWidth,\n\t\t\theight: levelHeight,\n\t\t\tdepth: levelDepth,\n\n\t\t} );\n\n\t}\n\n\tlet texture;\n\n\tif ( UNCOMPRESSED_FORMATS.has( FORMAT_MAP[ vkFormat ] ) ) {\n\n\t\ttexture = container.pixelDepth === 0\n\t\t\t? new DataTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight )\n\t\t\t: new Data3DTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight, container.pixelDepth );\n\n\t} else {\n\n\t\tif ( container.pixelDepth > 0 ) throw new Error( 'THREE.KTX2Loader: Unsupported pixelDepth.' );\n\n\t\ttexture = new CompressedTexture( mipmaps, container.pixelWidth, container.pixelHeight );\n\n\t}\n\n\ttexture.mipmaps = mipmaps;\n\n\ttexture.type = TYPE_MAP[ vkFormat ];\n\ttexture.format = FORMAT_MAP[ vkFormat ];\n\ttexture.colorSpace = parseColorSpace( container );\n\ttexture.needsUpdate = true;\n\n\t//\n\n\treturn Promise.resolve( texture );\n\n}\n\nfunction parseColorSpace( container ) {\n\n\tconst dfd = container.dataFormatDescriptor[ 0 ];\n\n\tif ( dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709 ) {\n\n\t\treturn dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace;\n\n\t} else if ( dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3 ) {\n\n\t\treturn dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace;\n\n\t} else if ( dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED ) {\n\n\t\treturn NoColorSpace;\n\n\t} else {\n\n\t\tconsole.warn( `THREE.KTX2Loader: Unsupported color primaries, \"${ dfd.colorPrimaries }\"` );\n\t\treturn NoColorSpace;\n\n\t}\n\n}\n\nexport { KTX2Loader };\n", "import {\n\tCompressedTextureLoader\n} from 'three';\n\n/**\n * for description see https://www.khronos.org/opengles/sdk/tools/KTX/\n * for file layout see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/\n *\n * ported from https://github.com/BabylonJS/Babylon.js/blob/master/src/Misc/khronosTextureContainer.ts\n */\n\n\nclass KTXLoader extends CompressedTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tparse( buffer, loadMipmaps ) {\n\n\t\tconst ktx = new KhronosTextureContainer( buffer, 1 );\n\n\t\treturn {\n\t\t\tmipmaps: ktx.mipmaps( loadMipmaps ),\n\t\t\twidth: ktx.pixelWidth,\n\t\t\theight: ktx.pixelHeight,\n\t\t\tformat: ktx.glInternalFormat,\n\t\t\tisCubemap: ktx.numberOfFaces === 6,\n\t\t\tmipmapCount: ktx.numberOfMipmapLevels\n\t\t};\n\n\t}\n\n}\n\n\nconst HEADER_LEN = 12 + ( 13 * 4 ); // identifier + header elements (not including key value meta-data pairs)\n// load types\nconst COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()\n//const COMPRESSED_3D = 1; // uses a gl.compressedTexImage3D()\n//const TEX_2D = 2; // uses a gl.texImage2D()\n//const TEX_3D = 3; // uses a gl.texImage3D()\n\nclass KhronosTextureContainer {\n\n\t/**\n\t * @param {ArrayBuffer} arrayBuffer- contents of the KTX container file\n\t * @param {number} facesExpected- should be either 1 or 6, based whether a cube texture or or\n\t * @param {boolean} threeDExpected- provision for indicating that data should be a 3D texture, not implemented\n\t * @param {boolean} textureArrayExpected- provision for indicating that data should be a texture array, not implemented\n\t */\n\tconstructor( arrayBuffer, facesExpected /*, threeDExpected, textureArrayExpected */ ) {\n\n\t\tthis.arrayBuffer = arrayBuffer;\n\n\t\t// Test that it is a ktx formatted file, based on the first 12 bytes, character representation is:\n\t\t// '´', 'K', 'T', 'X', ' ', '1', '1', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n\t\t// 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A\n\t\tconst identifier = new Uint8Array( this.arrayBuffer, 0, 12 );\n\t\tif ( identifier[ 0 ] !== 0xAB ||\n\t\t\tidentifier[ 1 ] !== 0x4B ||\n\t\t\tidentifier[ 2 ] !== 0x54 ||\n\t\t\tidentifier[ 3 ] !== 0x58 ||\n\t\t\tidentifier[ 4 ] !== 0x20 ||\n\t\t\tidentifier[ 5 ] !== 0x31 ||\n\t\t\tidentifier[ 6 ] !== 0x31 ||\n\t\t\tidentifier[ 7 ] !== 0xBB ||\n\t\t\tidentifier[ 8 ] !== 0x0D ||\n\t\t\tidentifier[ 9 ] !== 0x0A ||\n\t\t\tidentifier[ 10 ] !== 0x1A ||\n\t\t\tidentifier[ 11 ] !== 0x0A ) {\n\n\t\t\tconsole.error( 'texture missing KTX identifier' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// load the reset of the header in native 32 bit uint\n\t\tconst dataSize = Uint32Array.BYTES_PER_ELEMENT;\n\t\tconst headerDataView = new DataView( this.arrayBuffer, 12, 13 * dataSize );\n\t\tconst endianness = headerDataView.getUint32( 0, true );\n\t\tconst littleEndian = endianness === 0x04030201;\n\n\t\tthis.glType = headerDataView.getUint32( 1 * dataSize, littleEndian ); // must be 0 for compressed textures\n\t\tthis.glTypeSize = headerDataView.getUint32( 2 * dataSize, littleEndian ); // must be 1 for compressed textures\n\t\tthis.glFormat = headerDataView.getUint32( 3 * dataSize, littleEndian ); // must be 0 for compressed textures\n\t\tthis.glInternalFormat = headerDataView.getUint32( 4 * dataSize, littleEndian ); // the value of arg passed to gl.compressedTexImage2D(,,x,,,,)\n\t\tthis.glBaseInternalFormat = headerDataView.getUint32( 5 * dataSize, littleEndian ); // specify GL_RGB, GL_RGBA, GL_ALPHA, etc (un-compressed only)\n\t\tthis.pixelWidth = headerDataView.getUint32( 6 * dataSize, littleEndian ); // level 0 value of arg passed to gl.compressedTexImage2D(,,,x,,,)\n\t\tthis.pixelHeight = headerDataView.getUint32( 7 * dataSize, littleEndian ); // level 0 value of arg passed to gl.compressedTexImage2D(,,,,x,,)\n\t\tthis.pixelDepth = headerDataView.getUint32( 8 * dataSize, littleEndian ); // level 0 value of arg passed to gl.compressedTexImage3D(,,,,,x,,)\n\t\tthis.numberOfArrayElements = headerDataView.getUint32( 9 * dataSize, littleEndian ); // used for texture arrays\n\t\tthis.numberOfFaces = headerDataView.getUint32( 10 * dataSize, littleEndian ); // used for cubemap textures, should either be 1 or 6\n\t\tthis.numberOfMipmapLevels = headerDataView.getUint32( 11 * dataSize, littleEndian ); // number of levels; disregard possibility of 0 for compressed textures\n\t\tthis.bytesOfKeyValueData = headerDataView.getUint32( 12 * dataSize, littleEndian ); // the amount of space after the header for meta-data\n\n\t\t// Make sure we have a compressed type. Not only reduces work, but probably better to let dev know they are not compressing.\n\t\tif ( this.glType !== 0 ) {\n\n\t\t\tconsole.warn( 'only compressed formats currently supported' );\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// value of zero is an indication to generate mipmaps @ runtime. Not usually allowed for compressed, so disregard.\n\t\t\tthis.numberOfMipmapLevels = Math.max( 1, this.numberOfMipmapLevels );\n\n\t\t}\n\n\t\tif ( this.pixelHeight === 0 || this.pixelDepth !== 0 ) {\n\n\t\t\tconsole.warn( 'only 2D textures currently supported' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.numberOfArrayElements !== 0 ) {\n\n\t\t\tconsole.warn( 'texture arrays not currently supported' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.numberOfFaces !== facesExpected ) {\n\n\t\t\tconsole.warn( 'number of faces expected' + facesExpected + ', but found ' + this.numberOfFaces );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// we now have a completely validated file, so could use existence of loadType as success\n\t\t// would need to make this more elaborate & adjust checks above to support more than one load type\n\t\tthis.loadType = COMPRESSED_2D;\n\n\t}\n\n\tmipmaps( loadMipmaps ) {\n\n\t\tconst mipmaps = [];\n\n\t\t// initialize width & height for level 1\n\t\tlet dataOffset = HEADER_LEN + this.bytesOfKeyValueData;\n\t\tlet width = this.pixelWidth;\n\t\tlet height = this.pixelHeight;\n\t\tconst mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1;\n\n\t\tfor ( let level = 0; level < mipmapCount; level ++ ) {\n\n\t\t\tconst imageSize = new Int32Array( this.arrayBuffer, dataOffset, 1 )[ 0 ]; // size per face, since not supporting array cubemaps\n\t\t\tdataOffset += 4; // size of the image + 4 for the imageSize field\n\n\t\t\tfor ( let face = 0; face < this.numberOfFaces; face ++ ) {\n\n\t\t\t\tconst byteArray = new Uint8Array( this.arrayBuffer, dataOffset, imageSize );\n\n\t\t\t\tmipmaps.push( { 'data': byteArray, 'width': width, 'height': height } );\n\n\t\t\t\tdataOffset += imageSize;\n\t\t\t\tdataOffset += 3 - ( ( imageSize + 3 ) % 4 ); // add padding for odd sized image\n\n\t\t\t}\n\n\t\t\twidth = Math.max( 1.0, width * 0.5 );\n\t\t\theight = Math.max( 1.0, height * 0.5 );\n\n\t\t}\n\n\t\treturn mipmaps;\n\n\t}\n\n}\n\nexport { KTXLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMatrix4,\n\tMesh,\n\tMeshStandardMaterial,\n\tShaderMaterial,\n\tSRGBColorSpace,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector3,\n\tRay\n} from 'three';\n\n// Special surface finish tag types.\n// Note: \"MATERIAL\" tag (e.g. GLITTER, SPECKLE) is not implemented\nconst FINISH_TYPE_DEFAULT = 0;\nconst FINISH_TYPE_CHROME = 1;\nconst FINISH_TYPE_PEARLESCENT = 2;\nconst FINISH_TYPE_RUBBER = 3;\nconst FINISH_TYPE_MATTE_METALLIC = 4;\nconst FINISH_TYPE_METAL = 5;\n\n// State machine to search a subobject path.\n// The LDraw standard establishes these various possible subfolders.\nconst FILE_LOCATION_TRY_PARTS = 0;\nconst FILE_LOCATION_TRY_P = 1;\nconst FILE_LOCATION_TRY_MODELS = 2;\nconst FILE_LOCATION_AS_IS = 3;\nconst FILE_LOCATION_TRY_RELATIVE = 4;\nconst FILE_LOCATION_TRY_ABSOLUTE = 5;\nconst FILE_LOCATION_NOT_FOUND = 6;\n\nconst MAIN_COLOUR_CODE = '16';\nconst MAIN_EDGE_COLOUR_CODE = '24';\n\nconst COLOR_SPACE_LDRAW = SRGBColorSpace;\n\nconst _tempVec0 = new Vector3();\nconst _tempVec1 = new Vector3();\n\nclass LDrawConditionalLineMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tdiffuse: {\n\t\t\t\t\t\tvalue: new Color()\n\t\t\t\t\t},\n\t\t\t\t\topacity: {\n\t\t\t\t\t\tvalue: 1.0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: /* glsl */`\n\t\t\t\tattribute vec3 control0;\n\t\t\t\tattribute vec3 control1;\n\t\t\t\tattribute vec3 direction;\n\t\t\t\tvarying float discardFlag;\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\tvoid main() {\n\t\t\t\t\t#include \n\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t\t// Transform the line segment ends and control points into camera clip space\n\t\t\t\t\tvec4 c0 = projectionMatrix * modelViewMatrix * vec4( control0, 1.0 );\n\t\t\t\t\tvec4 c1 = projectionMatrix * modelViewMatrix * vec4( control1, 1.0 );\n\t\t\t\t\tvec4 p0 = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tvec4 p1 = projectionMatrix * modelViewMatrix * vec4( position + direction, 1.0 );\n\n\t\t\t\t\tc0.xy /= c0.w;\n\t\t\t\t\tc1.xy /= c1.w;\n\t\t\t\t\tp0.xy /= p0.w;\n\t\t\t\t\tp1.xy /= p1.w;\n\n\t\t\t\t\t// Get the direction of the segment and an orthogonal vector\n\t\t\t\t\tvec2 dir = p1.xy - p0.xy;\n\t\t\t\t\tvec2 norm = vec2( -dir.y, dir.x );\n\n\t\t\t\t\t// Get control point directions from the line\n\t\t\t\t\tvec2 c0dir = c0.xy - p1.xy;\n\t\t\t\t\tvec2 c1dir = c1.xy - p1.xy;\n\n\t\t\t\t\t// If the vectors to the controls points are pointed in different directions away\n\t\t\t\t\t// from the line segment then the line should not be drawn.\n\t\t\t\t\tfloat d0 = dot( normalize( norm ), normalize( c0dir ) );\n\t\t\t\t\tfloat d1 = dot( normalize( norm ), normalize( c1dir ) );\n\t\t\t\t\tdiscardFlag = float( sign( d0 ) != sign( d1 ) );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\t\t\tuniform vec3 diffuse;\n\t\t\tuniform float opacity;\n\t\t\tvarying float discardFlag;\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\tvoid main() {\n\n\t\t\t\tif ( discardFlag > 0.5 ) discard;\n\n\t\t\t\t#include \n\t\t\t\tvec3 outgoingLight = vec3( 0.0 );\n\t\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\toutgoingLight = diffuseColor.rgb; // simple shader\n\t\t\t\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t}\n\t\t\t`,\n\n\t\t} );\n\n\t\tObject.defineProperties( this, {\n\n\t\t\topacity: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.opacity.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.opacity.value = value;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcolor: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.diffuse.value;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.setValues( parameters );\n\t\tthis.isLDrawConditionalLineMaterial = true;\n\n\t}\n\n}\n\nclass ConditionalLineSegments extends LineSegments {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\t\tthis.isConditionalLine = true;\n\n\t}\n\n}\n\nfunction generateFaceNormals( faces ) {\n\n\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tconst face = faces[ i ];\n\t\tconst vertices = face.vertices;\n\t\tconst v0 = vertices[ 0 ];\n\t\tconst v1 = vertices[ 1 ];\n\t\tconst v2 = vertices[ 2 ];\n\n\t\t_tempVec0.subVectors( v1, v0 );\n\t\t_tempVec1.subVectors( v2, v1 );\n\t\tface.faceNormal = new Vector3()\n\t\t\t.crossVectors( _tempVec0, _tempVec1 )\n\t\t\t.normalize();\n\n\t}\n\n}\n\nconst _ray = new Ray();\nfunction smoothNormals( faces, lineSegments, checkSubSegments = false ) {\n\n\t// NOTE: 1e2 is pretty coarse but was chosen to quantize the resulting value because\n\t// it allows edges to be smoothed as expected (see minifig arms).\n\t// --\n\t// And the vector values are initialize multiplied by 1 + 1e-10 to account for floating\n\t// point errors on vertices along quantization boundaries. Ie after matrix multiplication\n\t// vertices that should be merged might be set to \"1.7\" and \"1.6999...\" meaning they won't\n\t// get merged. This added epsilon attempts to push these error values to the same quantized\n\t// value for the sake of hashing. See \"AT-ST mini\" dishes. See mrdoob/three#23169.\n\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\n\t\treturn `${ x },${ y },${ z }`;\n\n\t}\n\n\tfunction hashEdge( v0, v1 ) {\n\n\t\treturn `${ hashVertex( v0 ) }_${ hashVertex( v1 ) }`;\n\n\t}\n\n\t// converts the two vertices to a ray with a normalized direction and origin of 0, 0, 0 projected\n\t// onto the original line.\n\tfunction toNormalizedRay( v0, v1, targetRay ) {\n\n\t\ttargetRay.direction.subVectors( v1, v0 ).normalize();\n\n\t\tconst scalar = v0.dot( targetRay.direction );\n\t\ttargetRay.origin.copy( v0 ).addScaledVector( targetRay.direction, - scalar );\n\n\t\treturn targetRay;\n\n\t}\n\n\tfunction hashRay( ray ) {\n\n\t\treturn hashEdge( ray.origin, ray.direction );\n\n\t}\n\n\tconst hardEdges = new Set();\n\tconst hardEdgeRays = new Map();\n\tconst halfEdgeList = {};\n\tconst normals = [];\n\n\t// Save the list of hard edges by hash\n\tfor ( let i = 0, l = lineSegments.length; i < l; i ++ ) {\n\n\t\tconst ls = lineSegments[ i ];\n\t\tconst vertices = ls.vertices;\n\t\tconst v0 = vertices[ 0 ];\n\t\tconst v1 = vertices[ 1 ];\n\t\thardEdges.add( hashEdge( v0, v1 ) );\n\t\thardEdges.add( hashEdge( v1, v0 ) );\n\n\t\t// only generate the hard edge ray map if we're checking subsegments because it's more expensive to check\n\t\t// and requires more memory.\n\t\tif ( checkSubSegments ) {\n\n\t\t\t// add both ray directions to the map\n\t\t\tconst ray = toNormalizedRay( v0, v1, new Ray() );\n\t\t\tconst rh1 = hashRay( ray );\n\t\t\tif ( ! hardEdgeRays.has( rh1 ) ) {\n\n\t\t\t\ttoNormalizedRay( v1, v0, ray );\n\t\t\t\tconst rh2 = hashRay( ray );\n\n\t\t\t\tconst info = {\n\t\t\t\t\tray,\n\t\t\t\t\tdistances: [],\n\t\t\t\t};\n\n\t\t\t\thardEdgeRays.set( rh1, info );\n\t\t\t\thardEdgeRays.set( rh2, info );\n\n\t\t\t}\n\n\t\t\t// store both segments ends in min, max order in the distances array to check if a face edge is a\n\t\t\t// subsegment later.\n\t\t\tconst info = hardEdgeRays.get( rh1 );\n\t\t\tlet d0 = info.ray.direction.dot( v0 );\n\t\t\tlet d1 = info.ray.direction.dot( v1 );\n\t\t\tif ( d0 > d1 ) {\n\n\t\t\t\t[ d0, d1 ] = [ d1, d0 ];\n\n\t\t\t}\n\n\t\t\tinfo.distances.push( d0, d1 );\n\n\t\t}\n\n\t}\n\n\t// track the half edges associated with each triangle\n\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tconst tri = faces[ i ];\n\t\tconst vertices = tri.vertices;\n\t\tconst vertCount = vertices.length;\n\t\tfor ( let i2 = 0; i2 < vertCount; i2 ++ ) {\n\n\t\t\tconst index = i2;\n\t\t\tconst next = ( i2 + 1 ) % vertCount;\n\t\t\tconst v0 = vertices[ index ];\n\t\t\tconst v1 = vertices[ next ];\n\t\t\tconst hash = hashEdge( v0, v1 );\n\n\t\t\t// don't add the triangle if the edge is supposed to be hard\n\t\t\tif ( hardEdges.has( hash ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// if checking subsegments then check to see if this edge lies on a hard edge ray and whether its within any ray bounds\n\t\t\tif ( checkSubSegments ) {\n\n\t\t\t\ttoNormalizedRay( v0, v1, _ray );\n\n\t\t\t\tconst rayHash = hashRay( _ray );\n\t\t\t\tif ( hardEdgeRays.has( rayHash ) ) {\n\n\t\t\t\t\tconst info = hardEdgeRays.get( rayHash );\n\t\t\t\t\tconst { ray, distances } = info;\n\t\t\t\t\tlet d0 = ray.direction.dot( v0 );\n\t\t\t\t\tlet d1 = ray.direction.dot( v1 );\n\n\t\t\t\t\tif ( d0 > d1 ) {\n\n\t\t\t\t\t\t[ d0, d1 ] = [ d1, d0 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// return early if the face edge is found to be a subsegment of a line edge meaning the edge will have \"hard\" normals\n\t\t\t\t\tlet found = false;\n\t\t\t\t\tfor ( let i = 0, l = distances.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\tif ( d0 >= distances[ i ] && d1 <= distances[ i + 1 ] ) {\n\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( found ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst info = {\n\t\t\t\tindex: index,\n\t\t\t\ttri: tri\n\t\t\t};\n\t\t\thalfEdgeList[ hash ] = info;\n\n\t\t}\n\n\t}\n\n\t// Iterate until we've tried to connect all faces to share normals\n\twhile ( true ) {\n\n\t\t// Stop if there are no more faces left\n\t\tlet halfEdge = null;\n\t\tfor ( const key in halfEdgeList ) {\n\n\t\t\thalfEdge = halfEdgeList[ key ];\n\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( halfEdge === null ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t\t// Exhaustively find all connected faces\n\t\tconst queue = [ halfEdge ];\n\t\twhile ( queue.length > 0 ) {\n\n\t\t\t// initialize all vertex normals in this triangle\n\t\t\tconst tri = queue.pop().tri;\n\t\t\tconst vertices = tri.vertices;\n\t\t\tconst vertNormals = tri.normals;\n\t\t\tconst faceNormal = tri.faceNormal;\n\n\t\t\t// Check if any edge is connected to another triangle edge\n\t\t\tconst vertCount = vertices.length;\n\t\t\tfor ( let i2 = 0; i2 < vertCount; i2 ++ ) {\n\n\t\t\t\tconst index = i2;\n\t\t\t\tconst next = ( i2 + 1 ) % vertCount;\n\t\t\t\tconst v0 = vertices[ index ];\n\t\t\t\tconst v1 = vertices[ next ];\n\n\t\t\t\t// delete this triangle from the list so it won't be found again\n\t\t\t\tconst hash = hashEdge( v0, v1 );\n\t\t\t\tdelete halfEdgeList[ hash ];\n\n\t\t\t\tconst reverseHash = hashEdge( v1, v0 );\n\t\t\t\tconst otherInfo = halfEdgeList[ reverseHash ];\n\t\t\t\tif ( otherInfo ) {\n\n\t\t\t\t\tconst otherTri = otherInfo.tri;\n\t\t\t\t\tconst otherIndex = otherInfo.index;\n\t\t\t\t\tconst otherNormals = otherTri.normals;\n\t\t\t\t\tconst otherVertCount = otherNormals.length;\n\t\t\t\t\tconst otherFaceNormal = otherTri.faceNormal;\n\n\t\t\t\t\t// NOTE: If the angle between faces is > 67.5 degrees then assume it's\n\t\t\t\t\t// hard edge. There are some cases where the line segments do not line up exactly\n\t\t\t\t\t// with or span multiple triangle edges (see Lunar Vehicle wheels).\n\t\t\t\t\tif ( Math.abs( otherTri.faceNormal.dot( tri.faceNormal ) ) < 0.25 ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if this triangle has already been traversed then it won't be in\n\t\t\t\t\t// the halfEdgeList. If it has not then add it to the queue and delete\n\t\t\t\t\t// it so it won't be found again.\n\t\t\t\t\tif ( reverseHash in halfEdgeList ) {\n\n\t\t\t\t\t\tqueue.push( otherInfo );\n\t\t\t\t\t\tdelete halfEdgeList[ reverseHash ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// share the first normal\n\t\t\t\t\tconst otherNext = ( otherIndex + 1 ) % otherVertCount;\n\t\t\t\t\tif (\n\t\t\t\t\t\tvertNormals[ index ] && otherNormals[ otherNext ] &&\n\t\t\t\t\t\tvertNormals[ index ] !== otherNormals[ otherNext ]\n\t\t\t\t\t) {\n\n\t\t\t\t\t\totherNormals[ otherNext ].norm.add( vertNormals[ index ].norm );\n\t\t\t\t\t\tvertNormals[ index ].norm = otherNormals[ otherNext ].norm;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet sharedNormal1 = vertNormals[ index ] || otherNormals[ otherNext ];\n\t\t\t\t\tif ( sharedNormal1 === null ) {\n\n\t\t\t\t\t\t// it's possible to encounter an edge of a triangle that has already been traversed meaning\n\t\t\t\t\t\t// both edges already have different normals defined and shared. To work around this we create\n\t\t\t\t\t\t// a wrapper object so when those edges are merged the normals can be updated everywhere.\n\t\t\t\t\t\tsharedNormal1 = { norm: new Vector3() };\n\t\t\t\t\t\tnormals.push( sharedNormal1.norm );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( vertNormals[ index ] === null ) {\n\n\t\t\t\t\t\tvertNormals[ index ] = sharedNormal1;\n\t\t\t\t\t\tsharedNormal1.norm.add( faceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( otherNormals[ otherNext ] === null ) {\n\n\t\t\t\t\t\totherNormals[ otherNext ] = sharedNormal1;\n\t\t\t\t\t\tsharedNormal1.norm.add( otherFaceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// share the second normal\n\t\t\t\t\tif (\n\t\t\t\t\t\tvertNormals[ next ] && otherNormals[ otherIndex ] &&\n\t\t\t\t\t\tvertNormals[ next ] !== otherNormals[ otherIndex ]\n\t\t\t\t\t) {\n\n\t\t\t\t\t\totherNormals[ otherIndex ].norm.add( vertNormals[ next ].norm );\n\t\t\t\t\t\tvertNormals[ next ].norm = otherNormals[ otherIndex ].norm;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet sharedNormal2 = vertNormals[ next ] || otherNormals[ otherIndex ];\n\t\t\t\t\tif ( sharedNormal2 === null ) {\n\n\t\t\t\t\t\tsharedNormal2 = { norm: new Vector3() };\n\t\t\t\t\t\tnormals.push( sharedNormal2.norm );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( vertNormals[ next ] === null ) {\n\n\t\t\t\t\t\tvertNormals[ next ] = sharedNormal2;\n\t\t\t\t\t\tsharedNormal2.norm.add( faceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( otherNormals[ otherIndex ] === null ) {\n\n\t\t\t\t\t\totherNormals[ otherIndex ] = sharedNormal2;\n\t\t\t\t\t\tsharedNormal2.norm.add( otherFaceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// The normals of each face have been added up so now we average them by normalizing the vector.\n\tfor ( let i = 0, l = normals.length; i < l; i ++ ) {\n\n\t\tnormals[ i ].normalize();\n\n\t}\n\n}\n\nfunction isPartType( type ) {\n\n\treturn type === 'Part' || type === 'Unofficial_Part';\n\n}\n\nfunction isPrimitiveType( type ) {\n\n\treturn /primitive/i.test( type ) || type === 'Subpart';\n\n}\n\nclass LineParser {\n\n\tconstructor( line, lineNumber ) {\n\n\t\tthis.line = line;\n\t\tthis.lineLength = line.length;\n\t\tthis.currentCharIndex = 0;\n\t\tthis.currentChar = ' ';\n\t\tthis.lineNumber = lineNumber;\n\n\t}\n\n\tseekNonSpace() {\n\n\t\twhile ( this.currentCharIndex < this.lineLength ) {\n\n\t\t\tthis.currentChar = this.line.charAt( this.currentCharIndex );\n\n\t\t\tif ( this.currentChar !== ' ' && this.currentChar !== '\\t' ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.currentCharIndex ++;\n\n\t\t}\n\n\t}\n\n\tgetToken() {\n\n\t\tconst pos0 = this.currentCharIndex ++;\n\n\t\t// Seek space\n\t\twhile ( this.currentCharIndex < this.lineLength ) {\n\n\t\t\tthis.currentChar = this.line.charAt( this.currentCharIndex );\n\n\t\t\tif ( this.currentChar === ' ' || this.currentChar === '\\t' ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.currentCharIndex ++;\n\n\t\t}\n\n\t\tconst pos1 = this.currentCharIndex;\n\n\t\tthis.seekNonSpace();\n\n\t\treturn this.line.substring( pos0, pos1 );\n\n\t}\n\n\tgetVector() {\n\n\t\treturn new Vector3( parseFloat( this.getToken() ), parseFloat( this.getToken() ), parseFloat( this.getToken() ) );\n\n\t}\n\n\tgetRemainingString() {\n\n\t\treturn this.line.substring( this.currentCharIndex, this.lineLength );\n\n\t}\n\n\tisAtTheEnd() {\n\n\t\treturn this.currentCharIndex >= this.lineLength;\n\n\t}\n\n\tsetToEnd() {\n\n\t\tthis.currentCharIndex = this.lineLength;\n\n\t}\n\n\tgetLineNumberString() {\n\n\t\treturn this.lineNumber >= 0 ? ' at line ' + this.lineNumber : '';\n\n\t}\n\n}\n\n// Fetches and parses an intermediate representation of LDraw parts files.\nclass LDrawParsedCache {\n\n\tconstructor( loader ) {\n\n\t\tthis.loader = loader;\n\t\tthis._cache = {};\n\n\t}\n\n\tcloneResult( original ) {\n\n\t\tconst result = {};\n\n\t\t// vertices are transformed and normals computed before being converted to geometry\n\t\t// so these pieces must be cloned.\n\t\tresult.faces = original.faces.map( face => {\n\n\t\t\treturn {\n\t\t\t\tcolorCode: face.colorCode,\n\t\t\t\tmaterial: face.material,\n\t\t\t\tvertices: face.vertices.map( v => v.clone() ),\n\t\t\t\tnormals: face.normals.map( () => null ),\n\t\t\t\tfaceNormal: null\n\t\t\t};\n\n\t\t} );\n\n\t\tresult.conditionalSegments = original.conditionalSegments.map( face => {\n\n\t\t\treturn {\n\t\t\t\tcolorCode: face.colorCode,\n\t\t\t\tmaterial: face.material,\n\t\t\t\tvertices: face.vertices.map( v => v.clone() ),\n\t\t\t\tcontrolPoints: face.controlPoints.map( v => v.clone() )\n\t\t\t};\n\n\t\t} );\n\n\t\tresult.lineSegments = original.lineSegments.map( face => {\n\n\t\t\treturn {\n\t\t\t\tcolorCode: face.colorCode,\n\t\t\t\tmaterial: face.material,\n\t\t\t\tvertices: face.vertices.map( v => v.clone() )\n\t\t\t};\n\n\t\t} );\n\n\t\t// none if this is subsequently modified\n\t\tresult.type = original.type;\n\t\tresult.category = original.category;\n\t\tresult.keywords = original.keywords;\n\t\tresult.author = original.author;\n\t\tresult.subobjects = original.subobjects;\n\t\tresult.fileName = original.fileName;\n\t\tresult.totalFaces = original.totalFaces;\n\t\tresult.startingBuildingStep = original.startingBuildingStep;\n\t\tresult.materials = original.materials;\n\t\tresult.group = null;\n\t\treturn result;\n\n\t}\n\n\tasync fetchData( fileName ) {\n\n\t\tlet triedLowerCase = false;\n\t\tlet locationState = FILE_LOCATION_TRY_PARTS;\n\t\twhile ( locationState !== FILE_LOCATION_NOT_FOUND ) {\n\n\t\t\tlet subobjectURL = fileName;\n\t\t\tswitch ( locationState ) {\n\n\t\t\t\tcase FILE_LOCATION_AS_IS:\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_PARTS:\n\t\t\t\t\tsubobjectURL = 'parts/' + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_P:\n\t\t\t\t\tsubobjectURL = 'p/' + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_MODELS:\n\t\t\t\t\tsubobjectURL = 'models/' + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_RELATIVE:\n\t\t\t\t\tsubobjectURL = fileName.substring( 0, fileName.lastIndexOf( '/' ) + 1 ) + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_ABSOLUTE:\n\n\t\t\t\t\tif ( triedLowerCase ) {\n\n\t\t\t\t\t\t// Try absolute path\n\t\t\t\t\t\tlocationState = FILE_LOCATION_NOT_FOUND;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Next attempt is lower case\n\t\t\t\t\t\tfileName = fileName.toLowerCase();\n\t\t\t\t\t\tsubobjectURL = fileName;\n\t\t\t\t\t\ttriedLowerCase = true;\n\t\t\t\t\t\tlocationState = FILE_LOCATION_TRY_PARTS;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tconst loader = this.loader;\n\t\t\tconst fileLoader = new FileLoader( loader.manager );\n\t\t\tfileLoader.setPath( loader.partsLibraryPath );\n\t\t\tfileLoader.setRequestHeader( loader.requestHeader );\n\t\t\tfileLoader.setWithCredentials( loader.withCredentials );\n\n\t\t\ttry {\n\n\t\t\t\tconst text = await fileLoader.loadAsync( subobjectURL );\n\t\t\t\treturn text;\n\n\t\t\t} catch ( _ ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthrow new Error( 'LDrawLoader: Subobject \"' + fileName + '\" could not be loaded.' );\n\n\t}\n\n\tparse( text, fileName = null ) {\n\n\t\tconst loader = this.loader;\n\n\t\t// final results\n\t\tconst faces = [];\n\t\tconst lineSegments = [];\n\t\tconst conditionalSegments = [];\n\t\tconst subobjects = [];\n\t\tconst materials = {};\n\n\t\tconst getLocalMaterial = colorCode => {\n\n\t\t\treturn materials[ colorCode ] || null;\n\n\t\t};\n\n\t\tlet type = 'Model';\n\t\tlet category = null;\n\t\tlet keywords = null;\n\t\tlet author = null;\n\t\tlet totalFaces = 0;\n\n\t\t// split into lines\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tconst numLines = lines.length;\n\n\t\tlet parsingEmbeddedFiles = false;\n\t\tlet currentEmbeddedFileName = null;\n\t\tlet currentEmbeddedText = null;\n\n\t\tlet bfcCertified = false;\n\t\tlet bfcCCW = true;\n\t\tlet bfcInverted = false;\n\t\tlet bfcCull = true;\n\n\t\tlet startingBuildingStep = false;\n\n\t\t// Parse all line commands\n\t\tfor ( let lineIndex = 0; lineIndex < numLines; lineIndex ++ ) {\n\n\t\t\tconst line = lines[ lineIndex ];\n\n\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\tif ( parsingEmbeddedFiles ) {\n\n\t\t\t\tif ( line.startsWith( '0 FILE ' ) ) {\n\n\t\t\t\t\t// Save previous embedded file in the cache\n\t\t\t\t\tthis.setData( currentEmbeddedFileName, currentEmbeddedText );\n\n\t\t\t\t\t// New embedded text file\n\t\t\t\t\tcurrentEmbeddedFileName = line.substring( 7 );\n\t\t\t\t\tcurrentEmbeddedText = '';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentEmbeddedText += line + '\\n';\n\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst lp = new LineParser( line, lineIndex + 1 );\n\t\t\tlp.seekNonSpace();\n\n\t\t\tif ( lp.isAtTheEnd() ) {\n\n\t\t\t\t// Empty line\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// Parse the line type\n\t\t\tconst lineType = lp.getToken();\n\n\t\t\tlet material;\n\t\t\tlet colorCode;\n\t\t\tlet segment;\n\t\t\tlet ccw;\n\t\t\tlet doubleSided;\n\t\t\tlet v0, v1, v2, v3, c0, c1;\n\n\t\t\tswitch ( lineType ) {\n\n\t\t\t\t// Line type 0: Comment or META\n\t\t\t\tcase '0':\n\n\t\t\t\t\t// Parse meta directive\n\t\t\t\t\tconst meta = lp.getToken();\n\n\t\t\t\t\tif ( meta ) {\n\n\t\t\t\t\t\tswitch ( meta ) {\n\n\t\t\t\t\t\t\tcase '!LDRAW_ORG':\n\n\t\t\t\t\t\t\t\ttype = lp.getToken();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '!COLOUR':\n\n\t\t\t\t\t\t\t\tmaterial = loader.parseColorMetaDirective( lp );\n\t\t\t\t\t\t\t\tif ( material ) {\n\n\t\t\t\t\t\t\t\t\tmaterials[ material.userData.code ] = material;\n\n\t\t\t\t\t\t\t\t}\telse {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'LDrawLoader: Error parsing material' + lp.getLineNumberString() );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '!CATEGORY':\n\n\t\t\t\t\t\t\t\tcategory = lp.getToken();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '!KEYWORDS':\n\n\t\t\t\t\t\t\t\tconst newKeywords = lp.getRemainingString().split( ',' );\n\t\t\t\t\t\t\t\tif ( newKeywords.length > 0 ) {\n\n\t\t\t\t\t\t\t\t\tif ( ! keywords ) {\n\n\t\t\t\t\t\t\t\t\t\tkeywords = [];\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tnewKeywords.forEach( function ( keyword ) {\n\n\t\t\t\t\t\t\t\t\t\tkeywords.push( keyword.trim() );\n\n\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'FILE':\n\n\t\t\t\t\t\t\t\tif ( lineIndex > 0 ) {\n\n\t\t\t\t\t\t\t\t\t// Start embedded text files parsing\n\t\t\t\t\t\t\t\t\tparsingEmbeddedFiles = true;\n\t\t\t\t\t\t\t\t\tcurrentEmbeddedFileName = lp.getRemainingString();\n\t\t\t\t\t\t\t\t\tcurrentEmbeddedText = '';\n\n\t\t\t\t\t\t\t\t\tbfcCertified = false;\n\t\t\t\t\t\t\t\t\tbfcCCW = true;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'BFC':\n\n\t\t\t\t\t\t\t\t// Changes to the backface culling state\n\t\t\t\t\t\t\t\twhile ( ! lp.isAtTheEnd() ) {\n\n\t\t\t\t\t\t\t\t\tconst token = lp.getToken();\n\n\t\t\t\t\t\t\t\t\tswitch ( token ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'CERTIFY':\n\t\t\t\t\t\t\t\t\t\tcase 'NOCERTIFY':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcCertified = token === 'CERTIFY';\n\t\t\t\t\t\t\t\t\t\t\tbfcCCW = true;\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'CW':\n\t\t\t\t\t\t\t\t\t\tcase 'CCW':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcCCW = token === 'CCW';\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'INVERTNEXT':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcInverted = true;\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'CLIP':\n\t\t\t\t\t\t\t\t\t\tcase 'NOCLIP':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcCull = token === 'CLIP';\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.LDrawLoader: BFC directive \"' + token + '\" is unknown.' );\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'STEP':\n\n\t\t\t\t\t\t\t\tstartingBuildingStep = true;\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'Author:':\n\n\t\t\t\t\t\t\t\tauthor = lp.getToken();\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t// Other meta directives are not implemented\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 1: Sub-object file\n\t\t\t\tcase '1':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\n\t\t\t\t\tconst posX = parseFloat( lp.getToken() );\n\t\t\t\t\tconst posY = parseFloat( lp.getToken() );\n\t\t\t\t\tconst posZ = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m0 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m1 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m2 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m3 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m4 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m5 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m6 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m7 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m8 = parseFloat( lp.getToken() );\n\n\t\t\t\t\tconst matrix = new Matrix4().set(\n\t\t\t\t\t\tm0, m1, m2, posX,\n\t\t\t\t\t\tm3, m4, m5, posY,\n\t\t\t\t\t\tm6, m7, m8, posZ,\n\t\t\t\t\t\t0, 0, 0, 1\n\t\t\t\t\t);\n\n\t\t\t\t\tlet fileName = lp.getRemainingString().trim().replace( /\\\\/g, '/' );\n\n\t\t\t\t\tif ( loader.fileMap[ fileName ] ) {\n\n\t\t\t\t\t\t// Found the subobject path in the preloaded file path map\n\t\t\t\t\t\tfileName = loader.fileMap[ fileName ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Standardized subfolders\n\t\t\t\t\t\tif ( fileName.startsWith( 's/' ) ) {\n\n\t\t\t\t\t\t\tfileName = 'parts/' + fileName;\n\n\t\t\t\t\t\t} else if ( fileName.startsWith( '48/' ) ) {\n\n\t\t\t\t\t\t\tfileName = 'p/' + fileName;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tsubobjects.push( {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tmatrix: matrix,\n\t\t\t\t\t\tfileName: fileName,\n\t\t\t\t\t\tinverted: bfcInverted,\n\t\t\t\t\t\tstartingBuildingStep: startingBuildingStep\n\t\t\t\t\t} );\n\n\t\t\t\t\tstartingBuildingStep = false;\n\t\t\t\t\tbfcInverted = false;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 2: Line segment\n\t\t\t\tcase '2':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\tv1 = lp.getVector();\n\n\t\t\t\t\tsegment = {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tvertices: [ v0, v1 ],\n\t\t\t\t\t};\n\n\t\t\t\t\tlineSegments.push( segment );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 5: Conditional Line segment\n\t\t\t\tcase '5':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\tc0 = lp.getVector();\n\t\t\t\t\tc1 = lp.getVector();\n\n\t\t\t\t\tsegment = {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tvertices: [ v0, v1 ],\n\t\t\t\t\t\tcontrolPoints: [ c0, c1 ],\n\t\t\t\t\t};\n\n\t\t\t\t\tconditionalSegments.push( segment );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 3: Triangle\n\t\t\t\tcase '3':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tccw = bfcCCW;\n\t\t\t\t\tdoubleSided = ! bfcCertified || ! bfcCull;\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv2 = lp.getVector();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv2 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv0 = lp.getVector();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\tvertices: [ v0, v1, v2 ],\n\t\t\t\t\t\tnormals: [ null, null, null ],\n\t\t\t\t\t} );\n\t\t\t\t\ttotalFaces ++;\n\n\t\t\t\t\tif ( doubleSided === true ) {\n\n\t\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\t\tvertices: [ v2, v1, v0 ],\n\t\t\t\t\t\t\tnormals: [ null, null, null ],\n\t\t\t\t\t\t} );\n\t\t\t\t\t\ttotalFaces ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 4: Quadrilateral\n\t\t\t\tcase '4':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tccw = bfcCCW;\n\t\t\t\t\tdoubleSided = ! bfcCertified || ! bfcCull;\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv2 = lp.getVector();\n\t\t\t\t\t\tv3 = lp.getVector();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv3 = lp.getVector();\n\t\t\t\t\t\tv2 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv0 = lp.getVector();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// specifically place the triangle diagonal in the v0 and v1 slots so we can\n\t\t\t\t\t// account for the doubling of vertices later when smoothing normals.\n\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\tvertices: [ v0, v1, v2, v3 ],\n\t\t\t\t\t\tnormals: [ null, null, null, null ],\n\t\t\t\t\t} );\n\t\t\t\t\ttotalFaces += 2;\n\n\t\t\t\t\tif ( doubleSided === true ) {\n\n\t\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\t\tvertices: [ v3, v2, v1, v0 ],\n\t\t\t\t\t\t\tnormals: [ null, null, null, null ],\n\t\t\t\t\t\t} );\n\t\t\t\t\t\ttotalFaces += 2;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'LDrawLoader: Unknown line type \"' + lineType + '\"' + lp.getLineNumberString() + '.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parsingEmbeddedFiles ) {\n\n\t\t\tthis.setData( currentEmbeddedFileName, currentEmbeddedText );\n\n\t\t}\n\n\t\treturn {\n\t\t\tfaces,\n\t\t\tconditionalSegments,\n\t\t\tlineSegments,\n\t\t\ttype,\n\t\t\tcategory,\n\t\t\tkeywords,\n\t\t\tauthor,\n\t\t\tsubobjects,\n\t\t\ttotalFaces,\n\t\t\tstartingBuildingStep,\n\t\t\tmaterials,\n\t\t\tfileName,\n\t\t\tgroup: null\n\t\t};\n\n\t}\n\n\t// returns an (optionally cloned) instance of the data\n\tgetData( fileName, clone = true ) {\n\n\t\tconst key = fileName.toLowerCase();\n\t\tconst result = this._cache[ key ];\n\t\tif ( result === null || result instanceof Promise ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( clone ) {\n\n\t\t\treturn this.cloneResult( result );\n\n\t\t} else {\n\n\t\t\treturn result;\n\n\t\t}\n\n\t}\n\n\t// kicks off a fetch and parse of the requested data if it hasn't already been loaded. Returns when\n\t// the data is ready to use and can be retrieved synchronously with \"getData\".\n\tasync ensureDataLoaded( fileName ) {\n\n\t\tconst key = fileName.toLowerCase();\n\t\tif ( ! ( key in this._cache ) ) {\n\n\t\t\t// replace the promise with a copy of the parsed data for immediate processing\n\t\t\tthis._cache[ key ] = this.fetchData( fileName ).then( text => {\n\n\t\t\t\tconst info = this.parse( text, fileName );\n\t\t\t\tthis._cache[ key ] = info;\n\t\t\t\treturn info;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tawait this._cache[ key ];\n\n\t}\n\n\t// sets the data in the cache from parsed data\n\tsetData( fileName, text ) {\n\n\t\tconst key = fileName.toLowerCase();\n\t\tthis._cache[ key ] = this.parse( text, fileName );\n\n\t}\n\n}\n\n// returns the material for an associated color code. If the color code is 16 for a face or 24 for\n// an edge then the passthroughColorCode is used.\nfunction getMaterialFromCode( colorCode, parentColorCode, materialHierarchy, forEdge ) {\n\n\tconst isPassthrough = ! forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;\n\tif ( isPassthrough ) {\n\n\t\tcolorCode = parentColorCode;\n\n\t}\n\n\treturn materialHierarchy[ colorCode ] || null;\n\n}\n\n// Class used to parse and build LDraw parts as three.js objects and cache them if they're a \"Part\" type.\nclass LDrawPartsGeometryCache {\n\n\tconstructor( loader ) {\n\n\t\tthis.loader = loader;\n\t\tthis.parseCache = new LDrawParsedCache( loader );\n\t\tthis._cache = {};\n\n\t}\n\n\t// Convert the given file information into a mesh by processing subobjects.\n\tasync processIntoMesh( info ) {\n\n\t\tconst loader = this.loader;\n\t\tconst parseCache = this.parseCache;\n\t\tconst faceMaterials = new Set();\n\n\t\t// Processes the part subobject information to load child parts and merge geometry onto part\n\t\t// piece object.\n\t\tconst processInfoSubobjects = async ( info, subobject = null ) => {\n\n\t\t\tconst subobjects = info.subobjects;\n\t\t\tconst promises = [];\n\n\t\t\t// Trigger load of all subobjects. If a subobject isn't a primitive then load it as a separate\n\t\t\t// group which lets instruction steps apply correctly.\n\t\t\tfor ( let i = 0, l = subobjects.length; i < l; i ++ ) {\n\n\t\t\t\tconst subobject = subobjects[ i ];\n\t\t\t\tconst promise = parseCache.ensureDataLoaded( subobject.fileName ).then( () => {\n\n\t\t\t\t\tconst subobjectInfo = parseCache.getData( subobject.fileName, false );\n\t\t\t\t\tif ( ! isPrimitiveType( subobjectInfo.type ) ) {\n\n\t\t\t\t\t\treturn this.loadModel( subobject.fileName ).catch( error => {\n\n\t\t\t\t\t\t\tconsole.warn( error );\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn processInfoSubobjects( parseCache.getData( subobject.fileName ), subobject );\n\n\t\t\t\t} );\n\n\t\t\t\tpromises.push( promise );\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\t\t\tgroup.userData.category = info.category;\n\t\t\tgroup.userData.keywords = info.keywords;\n\t\t\tgroup.userData.author = info.author;\n\t\t\tgroup.userData.type = info.type;\n\t\t\tgroup.userData.fileName = info.fileName;\n\t\t\tinfo.group = group;\n\n\t\t\tconst subobjectInfos = await Promise.all( promises );\n\t\t\tfor ( let i = 0, l = subobjectInfos.length; i < l; i ++ ) {\n\n\t\t\t\tconst subobject = info.subobjects[ i ];\n\t\t\t\tconst subobjectInfo = subobjectInfos[ i ];\n\n\t\t\t\tif ( subobjectInfo === null ) {\n\n\t\t\t\t\t// the subobject failed to load\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// if the subobject was loaded as a separate group then apply the parent scopes materials\n\t\t\t\tif ( subobjectInfo.isGroup ) {\n\n\t\t\t\t\tconst subobjectGroup = subobjectInfo;\n\t\t\t\t\tsubobject.matrix.decompose( subobjectGroup.position, subobjectGroup.quaternion, subobjectGroup.scale );\n\t\t\t\t\tsubobjectGroup.userData.startingBuildingStep = subobject.startingBuildingStep;\n\t\t\t\t\tsubobjectGroup.name = subobject.fileName;\n\n\t\t\t\t\tloader.applyMaterialsToMesh( subobjectGroup, subobject.colorCode, info.materials );\n\t\t\t\t\tsubobjectGroup.userData.colorCode = subobject.colorCode;\n\n\t\t\t\t\tgroup.add( subobjectGroup );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// add the subobject group if it has children in case it has both children and primitives\n\t\t\t\tif ( subobjectInfo.group.children.length ) {\n\n\t\t\t\t\tgroup.add( subobjectInfo.group );\n\n\t\t\t\t}\n\n\t\t\t\t// transform the primitives into the local space of the parent piece and append them to\n\t\t\t\t// to the parent primitives list.\n\t\t\t\tconst parentLineSegments = info.lineSegments;\n\t\t\t\tconst parentConditionalSegments = info.conditionalSegments;\n\t\t\t\tconst parentFaces = info.faces;\n\n\t\t\t\tconst lineSegments = subobjectInfo.lineSegments;\n\t\t\t\tconst conditionalSegments = subobjectInfo.conditionalSegments;\n\n\t\t\t\tconst faces = subobjectInfo.faces;\n\t\t\t\tconst matrix = subobject.matrix;\n\t\t\t\tconst inverted = subobject.inverted;\n\t\t\t\tconst matrixScaleInverted = matrix.determinant() < 0;\n\t\t\t\tconst colorCode = subobject.colorCode;\n\n\t\t\t\tconst lineColorCode = colorCode === MAIN_COLOUR_CODE ? MAIN_EDGE_COLOUR_CODE : colorCode;\n\t\t\t\tfor ( let i = 0, l = lineSegments.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst ls = lineSegments[ i ];\n\t\t\t\t\tconst vertices = ls.vertices;\n\t\t\t\t\tvertices[ 0 ].applyMatrix4( matrix );\n\t\t\t\t\tvertices[ 1 ].applyMatrix4( matrix );\n\t\t\t\t\tls.colorCode = ls.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : ls.colorCode;\n\t\t\t\t\tls.material = ls.material || getMaterialFromCode( ls.colorCode, ls.colorCode, info.materials, true );\n\n\t\t\t\t\tparentLineSegments.push( ls );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, l = conditionalSegments.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst os = conditionalSegments[ i ];\n\t\t\t\t\tconst vertices = os.vertices;\n\t\t\t\t\tconst controlPoints = os.controlPoints;\n\t\t\t\t\tvertices[ 0 ].applyMatrix4( matrix );\n\t\t\t\t\tvertices[ 1 ].applyMatrix4( matrix );\n\t\t\t\t\tcontrolPoints[ 0 ].applyMatrix4( matrix );\n\t\t\t\t\tcontrolPoints[ 1 ].applyMatrix4( matrix );\n\t\t\t\t\tos.colorCode = os.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : os.colorCode;\n\t\t\t\t\tos.material = os.material || getMaterialFromCode( os.colorCode, os.colorCode, info.materials, true );\n\n\t\t\t\t\tparentConditionalSegments.push( os );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst tri = faces[ i ];\n\t\t\t\t\tconst vertices = tri.vertices;\n\t\t\t\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvertices[ i ].applyMatrix4( matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttri.colorCode = tri.colorCode === MAIN_COLOUR_CODE ? colorCode : tri.colorCode;\n\t\t\t\t\ttri.material = tri.material || getMaterialFromCode( tri.colorCode, colorCode, info.materials, false );\n\t\t\t\t\tfaceMaterials.add( tri.colorCode );\n\n\t\t\t\t\t// If the scale of the object is negated then the triangle winding order\n\t\t\t\t\t// needs to be flipped.\n\t\t\t\t\tif ( matrixScaleInverted !== inverted ) {\n\n\t\t\t\t\t\tvertices.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tparentFaces.push( tri );\n\n\t\t\t\t}\n\n\t\t\t\tinfo.totalFaces += subobjectInfo.totalFaces;\n\n\t\t\t}\n\n\t\t\t// Apply the parent subobjects pass through material code to this object. This is done several times due\n\t\t\t// to material scoping.\n\t\t\tif ( subobject ) {\n\n\t\t\t\tloader.applyMaterialsToMesh( group, subobject.colorCode, info.materials );\n\t\t\t\tgroup.userData.colorCode = subobject.colorCode;\n\n\t\t\t}\n\n\t\t\treturn info;\n\n\t\t};\n\n\t\t// Track material use to see if we need to use the normal smooth slow path for hard edges.\n\t\tfor ( let i = 0, l = info.faces; i < l; i ++ ) {\n\n\t\t\tfaceMaterials.add( info.faces[ i ].colorCode );\n\n\t\t}\n\n\t\tawait processInfoSubobjects( info );\n\n\t\tif ( loader.smoothNormals ) {\n\n\t\t\tconst checkSubSegments = faceMaterials.size > 1;\n\t\t\tgenerateFaceNormals( info.faces );\n\t\t\tsmoothNormals( info.faces, info.lineSegments, checkSubSegments );\n\n\t\t}\n\n\t\t// Add the primitive objects and metadata.\n\t\tconst group = info.group;\n\t\tif ( info.faces.length > 0 ) {\n\n\t\t\tgroup.add( createObject( this.loader, info.faces, 3, false, info.totalFaces ) );\n\n\t\t}\n\n\t\tif ( info.lineSegments.length > 0 ) {\n\n\t\t\tgroup.add( createObject( this.loader, info.lineSegments, 2 ) );\n\n\t\t}\n\n\t\tif ( info.conditionalSegments.length > 0 ) {\n\n\t\t\tgroup.add( createObject( this.loader, info.conditionalSegments, 2, true ) );\n\n\t\t}\n\n\t\treturn group;\n\n\t}\n\n\thasCachedModel( fileName ) {\n\n\t\treturn fileName !== null && fileName.toLowerCase() in this._cache;\n\n\t}\n\n\tasync getCachedModel( fileName ) {\n\n\t\tif ( fileName !== null && this.hasCachedModel( fileName ) ) {\n\n\t\t\tconst key = fileName.toLowerCase();\n\t\t\tconst group = await this._cache[ key ];\n\t\t\treturn group.clone();\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\t// Loads and parses the model with the given file name. Returns a cached copy if available.\n\tasync loadModel( fileName ) {\n\n\t\tconst parseCache = this.parseCache;\n\t\tconst key = fileName.toLowerCase();\n\t\tif ( this.hasCachedModel( fileName ) ) {\n\n\t\t\t// Return cached model if available.\n\t\t\treturn this.getCachedModel( fileName );\n\n\t\t} else {\n\n\t\t\t// Otherwise parse a new model.\n\t\t\t// Ensure the file data is loaded and pre parsed.\n\t\t\tawait parseCache.ensureDataLoaded( fileName );\n\n\t\t\tconst info = parseCache.getData( fileName );\n\t\t\tconst promise = this.processIntoMesh( info );\n\n\t\t\t// Now that the file has loaded it's possible that another part parse has been waiting in parallel\n\t\t\t// so check the cache again to see if it's been added since the last async operation so we don't\n\t\t\t// do unnecessary work.\n\t\t\tif ( this.hasCachedModel( fileName ) ) {\n\n\t\t\t\treturn this.getCachedModel( fileName );\n\n\t\t\t}\n\n\t\t\t// Cache object if it's a part so it can be reused later.\n\t\t\tif ( isPartType( info.type ) ) {\n\n\t\t\t\tthis._cache[ key ] = promise;\n\n\t\t\t}\n\n\t\t\t// return a copy\n\t\t\tconst group = await promise;\n\t\t\treturn group.clone();\n\n\t\t}\n\n\t}\n\n\t// parses the given model text into a renderable object. Returns cached copy if available.\n\tasync parseModel( text ) {\n\n\t\tconst parseCache = this.parseCache;\n\t\tconst info = parseCache.parse( text );\n\t\tif ( isPartType( info.type ) && this.hasCachedModel( info.fileName ) ) {\n\n\t\t\treturn this.getCachedModel( info.fileName );\n\n\t\t}\n\n\t\treturn this.processIntoMesh( info );\n\n\t}\n\n}\n\nfunction sortByMaterial( a, b ) {\n\n\tif ( a.colorCode === b.colorCode ) {\n\n\t\treturn 0;\n\n\t}\n\n\tif ( a.colorCode < b.colorCode ) {\n\n\t\treturn - 1;\n\n\t}\n\n\treturn 1;\n\n}\n\nfunction createObject( loader, elements, elementSize, isConditionalSegments = false, totalElements = null ) {\n\n\t// Creates a LineSegments (elementSize = 2) or a Mesh (elementSize = 3 )\n\t// With per face / segment material, implemented with mesh groups and materials array\n\n\t// Sort the faces or line segments by color code to make later the mesh groups\n\telements.sort( sortByMaterial );\n\n\tif ( totalElements === null ) {\n\n\t\ttotalElements = elements.length;\n\n\t}\n\n\tconst positions = new Float32Array( elementSize * totalElements * 3 );\n\tconst normals = elementSize === 3 ? new Float32Array( elementSize * totalElements * 3 ) : null;\n\tconst materials = [];\n\n\tconst quadArray = new Array( 6 );\n\tconst bufferGeometry = new BufferGeometry();\n\tlet prevMaterial = null;\n\tlet index0 = 0;\n\tlet numGroupVerts = 0;\n\tlet offset = 0;\n\n\tfor ( let iElem = 0, nElem = elements.length; iElem < nElem; iElem ++ ) {\n\n\t\tconst elem = elements[ iElem ];\n\t\tlet vertices = elem.vertices;\n\t\tif ( vertices.length === 4 ) {\n\n\t\t\tquadArray[ 0 ] = vertices[ 0 ];\n\t\t\tquadArray[ 1 ] = vertices[ 1 ];\n\t\t\tquadArray[ 2 ] = vertices[ 2 ];\n\t\t\tquadArray[ 3 ] = vertices[ 0 ];\n\t\t\tquadArray[ 4 ] = vertices[ 2 ];\n\t\t\tquadArray[ 5 ] = vertices[ 3 ];\n\t\t\tvertices = quadArray;\n\n\t\t}\n\n\t\tfor ( let j = 0, l = vertices.length; j < l; j ++ ) {\n\n\t\t\tconst v = vertices[ j ];\n\t\t\tconst index = offset + j * 3;\n\t\t\tpositions[ index + 0 ] = v.x;\n\t\t\tpositions[ index + 1 ] = v.y;\n\t\t\tpositions[ index + 2 ] = v.z;\n\n\t\t}\n\n\t\t// create the normals array if this is a set of faces\n\t\tif ( elementSize === 3 ) {\n\n\t\t\tif ( ! elem.faceNormal ) {\n\n\t\t\t\tconst v0 = vertices[ 0 ];\n\t\t\t\tconst v1 = vertices[ 1 ];\n\t\t\t\tconst v2 = vertices[ 2 ];\n\t\t\t\t_tempVec0.subVectors( v1, v0 );\n\t\t\t\t_tempVec1.subVectors( v2, v1 );\n\t\t\t\telem.faceNormal = new Vector3()\n\t\t\t\t\t.crossVectors( _tempVec0, _tempVec1 )\n\t\t\t\t\t.normalize();\n\n\t\t\t}\n\n\t\t\tlet elemNormals = elem.normals;\n\t\t\tif ( elemNormals.length === 4 ) {\n\n\t\t\t\tquadArray[ 0 ] = elemNormals[ 0 ];\n\t\t\t\tquadArray[ 1 ] = elemNormals[ 1 ];\n\t\t\t\tquadArray[ 2 ] = elemNormals[ 2 ];\n\t\t\t\tquadArray[ 3 ] = elemNormals[ 0 ];\n\t\t\t\tquadArray[ 4 ] = elemNormals[ 2 ];\n\t\t\t\tquadArray[ 5 ] = elemNormals[ 3 ];\n\t\t\t\telemNormals = quadArray;\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, l = elemNormals.length; j < l; j ++ ) {\n\n\t\t\t\t// use face normal if a vertex normal is not provided\n\t\t\t\tlet n = elem.faceNormal;\n\t\t\t\tif ( elemNormals[ j ] ) {\n\n\t\t\t\t\tn = elemNormals[ j ].norm;\n\n\t\t\t\t}\n\n\t\t\t\tconst index = offset + j * 3;\n\t\t\t\tnormals[ index + 0 ] = n.x;\n\t\t\t\tnormals[ index + 1 ] = n.y;\n\t\t\t\tnormals[ index + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( prevMaterial !== elem.colorCode ) {\n\n\t\t\tif ( prevMaterial !== null ) {\n\n\t\t\t\tbufferGeometry.addGroup( index0, numGroupVerts, materials.length - 1 );\n\n\t\t\t}\n\n\t\t\tconst material = elem.material;\n\n\t\t\tif ( material !== null ) {\n\n\t\t\t\tif ( elementSize === 3 ) {\n\n\t\t\t\t\tmaterials.push( material );\n\n\t\t\t\t} else if ( elementSize === 2 ) {\n\n\t\t\t\t\tif ( isConditionalSegments ) {\n\n\t\t\t\t\t\tconst edgeMaterial = loader.edgeMaterialCache.get( material );\n\n\t\t\t\t\t\tmaterials.push( loader.conditionalEdgeMaterialCache.get( edgeMaterial ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials.push( loader.edgeMaterialCache.get( material ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a material has not been made available yet then keep the color code string in the material array\n\t\t\t\t// to save the spot for the material once a parent scopes materials are being applied to the object.\n\t\t\t\tmaterials.push( elem.colorCode );\n\n\t\t\t}\n\n\t\t\tprevMaterial = elem.colorCode;\n\t\t\tindex0 = offset / 3;\n\t\t\tnumGroupVerts = vertices.length;\n\n\t\t} else {\n\n\t\t\tnumGroupVerts += vertices.length;\n\n\t\t}\n\n\t\toffset += 3 * vertices.length;\n\n\t}\n\n\tif ( numGroupVerts > 0 ) {\n\n\t\tbufferGeometry.addGroup( index0, Infinity, materials.length - 1 );\n\n\t}\n\n\tbufferGeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tif ( normals !== null ) {\n\n\t\tbufferGeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tlet object3d = null;\n\n\tif ( elementSize === 2 ) {\n\n\t\tif ( isConditionalSegments ) {\n\n\t\t\tobject3d = new ConditionalLineSegments( bufferGeometry, materials.length === 1 ? materials[ 0 ] : materials );\n\n\t\t} else {\n\n\t\t\tobject3d = new LineSegments( bufferGeometry, materials.length === 1 ? materials[ 0 ] : materials );\n\n\t\t}\n\n\t} else if ( elementSize === 3 ) {\n\n\t\tobject3d = new Mesh( bufferGeometry, materials.length === 1 ? materials[ 0 ] : materials );\n\n\t}\n\n\tif ( isConditionalSegments ) {\n\n\t\tobject3d.isConditionalLine = true;\n\n\t\tconst controlArray0 = new Float32Array( elements.length * 3 * 2 );\n\t\tconst controlArray1 = new Float32Array( elements.length * 3 * 2 );\n\t\tconst directionArray = new Float32Array( elements.length * 3 * 2 );\n\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\tconst os = elements[ i ];\n\t\t\tconst vertices = os.vertices;\n\t\t\tconst controlPoints = os.controlPoints;\n\t\t\tconst c0 = controlPoints[ 0 ];\n\t\t\tconst c1 = controlPoints[ 1 ];\n\t\t\tconst v0 = vertices[ 0 ];\n\t\t\tconst v1 = vertices[ 1 ];\n\t\t\tconst index = i * 3 * 2;\n\t\t\tcontrolArray0[ index + 0 ] = c0.x;\n\t\t\tcontrolArray0[ index + 1 ] = c0.y;\n\t\t\tcontrolArray0[ index + 2 ] = c0.z;\n\t\t\tcontrolArray0[ index + 3 ] = c0.x;\n\t\t\tcontrolArray0[ index + 4 ] = c0.y;\n\t\t\tcontrolArray0[ index + 5 ] = c0.z;\n\n\t\t\tcontrolArray1[ index + 0 ] = c1.x;\n\t\t\tcontrolArray1[ index + 1 ] = c1.y;\n\t\t\tcontrolArray1[ index + 2 ] = c1.z;\n\t\t\tcontrolArray1[ index + 3 ] = c1.x;\n\t\t\tcontrolArray1[ index + 4 ] = c1.y;\n\t\t\tcontrolArray1[ index + 5 ] = c1.z;\n\n\t\t\tdirectionArray[ index + 0 ] = v1.x - v0.x;\n\t\t\tdirectionArray[ index + 1 ] = v1.y - v0.y;\n\t\t\tdirectionArray[ index + 2 ] = v1.z - v0.z;\n\t\t\tdirectionArray[ index + 3 ] = v1.x - v0.x;\n\t\t\tdirectionArray[ index + 4 ] = v1.y - v0.y;\n\t\t\tdirectionArray[ index + 5 ] = v1.z - v0.z;\n\n\t\t}\n\n\t\tbufferGeometry.setAttribute( 'control0', new BufferAttribute( controlArray0, 3, false ) );\n\t\tbufferGeometry.setAttribute( 'control1', new BufferAttribute( controlArray1, 3, false ) );\n\t\tbufferGeometry.setAttribute( 'direction', new BufferAttribute( directionArray, 3, false ) );\n\n\t}\n\n\treturn object3d;\n\n}\n\n//\n\nclass LDrawLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t// Array of THREE.Material\n\t\tthis.materials = [];\n\t\tthis.materialLibrary = {};\n\t\tthis.edgeMaterialCache = new WeakMap();\n\t\tthis.conditionalEdgeMaterialCache = new WeakMap();\n\n\t\t// This also allows to handle the embedded text files (\"0 FILE\" lines)\n\t\tthis.partsCache = new LDrawPartsGeometryCache( this );\n\n\t\t// This object is a map from file names to paths. It agilizes the paths search. If it is not set then files will be searched by trial and error.\n\t\tthis.fileMap = {};\n\n\t\t// Initializes the materials library with default materials\n\t\tthis.setMaterials( [] );\n\n\t\t// If this flag is set to true the vertex normals will be smoothed.\n\t\tthis.smoothNormals = true;\n\n\t\t// The path to load parts from the LDraw parts library from.\n\t\tthis.partsLibraryPath = '';\n\n\t\t// Material assigned to not available colors for meshes and edges\n\t\tthis.missingColorMaterial = new MeshStandardMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, color: 0xFF00FF, roughness: 0.3, metalness: 0 } );\n\t\tthis.missingEdgeColorMaterial = new LineBasicMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, color: 0xFF00FF } );\n\t\tthis.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, fog: true, color: 0xFF00FF } );\n\t\tthis.edgeMaterialCache.set( this.missingColorMaterial, this.missingEdgeColorMaterial );\n\t\tthis.conditionalEdgeMaterialCache.set( this.missingEdgeColorMaterial, this.missingConditionalEdgeColorMaterial );\n\n\t}\n\n\tsetPartsLibraryPath( path ) {\n\n\t\tthis.partsLibraryPath = path;\n\t\treturn this;\n\n\t}\n\n\tasync preloadMaterials( url ) {\n\n\t\tconst fileLoader = new FileLoader( this.manager );\n\t\tfileLoader.setPath( this.path );\n\t\tfileLoader.setRequestHeader( this.requestHeader );\n\t\tfileLoader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await fileLoader.loadAsync( url );\n\t\tconst colorLineRegex = /^0 !COLOUR/;\n\t\tconst lines = text.split( /[\\n\\r]/g );\n\t\tconst materials = [];\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ];\n\t\t\tif ( colorLineRegex.test( line ) ) {\n\n\t\t\t\tconst directive = line.replace( colorLineRegex, '' );\n\t\t\t\tconst material = this.parseColorMetaDirective( new LineParser( directive ) );\n\t\t\t\tmaterials.push( material );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setMaterials( materials );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst fileLoader = new FileLoader( this.manager );\n\t\tfileLoader.setPath( this.path );\n\t\tfileLoader.setRequestHeader( this.requestHeader );\n\t\tfileLoader.setWithCredentials( this.withCredentials );\n\t\tfileLoader.load( url, text => {\n\n\t\t\tthis.partsCache\n\t\t\t\t.parseModel( text, this.materialLibrary )\n\t\t\t\t.then( group => {\n\n\t\t\t\t\tthis.applyMaterialsToMesh( group, MAIN_COLOUR_CODE, this.materialLibrary, true );\n\t\t\t\t\tthis.computeBuildingSteps( group );\n\t\t\t\t\tgroup.userData.fileName = url;\n\t\t\t\t\tonLoad( group );\n\n\t\t\t\t} )\n\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text, onLoad, onError ) {\n\n\t\tthis.partsCache\n\t\t\t.parseModel( text, this.materialLibrary )\n\t\t\t.then( group => {\n\n\t\t\t\tthis.applyMaterialsToMesh( group, MAIN_COLOUR_CODE, this.materialLibrary, true );\n\t\t\t\tthis.computeBuildingSteps( group );\n\t\t\t\tgroup.userData.fileName = '';\n\t\t\t\tonLoad( group );\n\n\t\t\t} )\n\t\t\t.catch( onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materialLibrary = {};\n\t\tthis.materials = [];\n\t\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\tthis.addMaterial( materials[ i ] );\n\n\t\t}\n\n\t\t// Add default main triangle and line edge materials (used in pieces that can be colored with a main color)\n\t\tthis.addMaterial( this.parseColorMetaDirective( new LineParser( 'Main_Colour CODE 16 VALUE #FF8080 EDGE #333333' ) ) );\n\t\tthis.addMaterial( this.parseColorMetaDirective( new LineParser( 'Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333' ) ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFileMap( fileMap ) {\n\n\t\tthis.fileMap = fileMap;\n\n\t\treturn this;\n\n\t}\n\n\taddMaterial( material ) {\n\n\t\t// Adds a material to the material library which is on top of the parse scopes stack. And also to the materials array\n\n\t\tconst matLib = this.materialLibrary;\n\t\tif ( ! matLib[ material.userData.code ] ) {\n\n\t\t\tthis.materials.push( material );\n\t\t\tmatLib[ material.userData.code ] = material;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetMaterial( colorCode ) {\n\n\t\tif ( colorCode.startsWith( '0x2' ) ) {\n\n\t\t\t// Special 'direct' material value (RGB color)\n\t\t\tconst color = colorCode.substring( 3 );\n\n\t\t\treturn this.parseColorMetaDirective( new LineParser( 'Direct_Color_' + color + ' CODE -1 VALUE #' + color + ' EDGE #' + color + '' ) );\n\n\t\t}\n\n\t\treturn this.materialLibrary[ colorCode ] || null;\n\n\t}\n\n\t// Applies the appropriate materials to a prebuilt hierarchy of geometry. Assumes that color codes are present\n\t// in the material array if they need to be filled in.\n\tapplyMaterialsToMesh( group, parentColorCode, materialHierarchy, finalMaterialPass = false ) {\n\n\t\t// find any missing materials as indicated by a color code string and replace it with a material from the current material lib\n\t\tconst loader = this;\n\t\tconst parentIsPassthrough = parentColorCode === MAIN_COLOUR_CODE;\n\t\tgroup.traverse( c => {\n\n\t\t\tif ( c.isMesh || c.isLineSegments ) {\n\n\t\t\t\tif ( Array.isArray( c.material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = c.material.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tif ( ! c.material[ i ].isMaterial ) {\n\n\t\t\t\t\t\t\tc.material[ i ] = getMaterial( c, c.material[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( ! c.material.isMaterial ) {\n\n\t\t\t\t\tc.material = getMaterial( c, c.material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\n\t\t// Returns the appropriate material for the object (line or face) given color code. If the code is \"pass through\"\n\t\t// (24 for lines, 16 for edges) then the pass through color code is used. If that is also pass through then it's\n\t\t// simply returned for the subsequent material application.\n\t\tfunction getMaterial( c, colorCode ) {\n\n\t\t\t// if our parent is a passthrough color code and we don't have the current material color available then\n\t\t\t// return early.\n\t\t\tif ( parentIsPassthrough && ! ( colorCode in materialHierarchy ) && ! finalMaterialPass ) {\n\n\t\t\t\treturn colorCode;\n\n\t\t\t}\n\n\t\t\tconst forEdge = c.isLineSegments || c.isConditionalLine;\n\t\t\tconst isPassthrough = ! forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;\n\t\t\tif ( isPassthrough ) {\n\n\t\t\t\tcolorCode = parentColorCode;\n\n\t\t\t}\n\n\t\t\tlet material = null;\n\t\t\tif ( colorCode in materialHierarchy ) {\n\n\t\t\t\tmaterial = materialHierarchy[ colorCode ];\n\n\t\t\t} else if ( finalMaterialPass ) {\n\n\t\t\t\t// see if we can get the final material from from the \"getMaterial\" function which will attempt to\n\t\t\t\t// parse the \"direct\" colors\n\t\t\t\tmaterial = loader.getMaterial( colorCode );\n\t\t\t\tif ( material === null ) {\n\n\t\t\t\t\t// otherwise throw a warning if this is final opportunity to set the material\n\t\t\t\t\tconsole.warn( `LDrawLoader: Material properties for code ${ colorCode } not available.` );\n\n\t\t\t\t\t// And return the 'missing color' material\n\t\t\t\t\tmaterial = loader.missingColorMaterial;\n\n\t\t\t\t}\n\n\n\t\t\t} else {\n\n\t\t\t\treturn colorCode;\n\n\t\t\t}\n\n\t\t\tif ( c.isLineSegments ) {\n\n\t\t\t\tmaterial = loader.edgeMaterialCache.get( material );\n\n\t\t\t\tif ( c.isConditionalLine ) {\n\n\t\t\t\t\tmaterial = loader.conditionalEdgeMaterialCache.get( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t}\n\n\tgetMainMaterial() {\n\n\t\treturn this.getMaterial( MAIN_COLOUR_CODE );\n\n\t}\n\n\tgetMainEdgeMaterial() {\n\n\t\tconst mat = this.getMaterial( MAIN_EDGE_COLOUR_CODE );\n\t\treturn mat ? this.edgeMaterialCache.get( mat ) : null;\n\n\t}\n\n\tparseColorMetaDirective( lineParser ) {\n\n\t\t// Parses a color definition and returns a THREE.Material\n\n\t\tlet code = null;\n\n\t\t// Triangle and line colors\n\t\tlet fillColor = '#FF00FF';\n\t\tlet edgeColor = '#FF00FF';\n\n\t\t// Transparency\n\t\tlet alpha = 1;\n\t\tlet isTransparent = false;\n\t\t// Self-illumination:\n\t\tlet luminance = 0;\n\n\t\tlet finishType = FINISH_TYPE_DEFAULT;\n\n\t\tlet edgeMaterial = null;\n\n\t\tconst name = lineParser.getToken();\n\t\tif ( ! name ) {\n\n\t\t\tthrow new Error( 'LDrawLoader: Material name was expected after \"!COLOUR tag' + lineParser.getLineNumberString() + '.' );\n\n\t\t}\n\n\t\t// Parse tag tokens and their parameters\n\t\tlet token = null;\n\t\twhile ( true ) {\n\n\t\t\ttoken = lineParser.getToken();\n\n\t\t\tif ( ! token ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( ! parseLuminance( token ) ) {\n\n\t\t\t\tswitch ( token.toUpperCase() ) {\n\n\t\t\t\t\tcase 'CODE':\n\n\t\t\t\t\t\tcode = lineParser.getToken();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'VALUE':\n\n\t\t\t\t\t\tfillColor = lineParser.getToken();\n\t\t\t\t\t\tif ( fillColor.startsWith( '0x' ) ) {\n\n\t\t\t\t\t\t\tfillColor = '#' + fillColor.substring( 2 );\n\n\t\t\t\t\t\t} else if ( ! fillColor.startsWith( '#' ) ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid color while parsing material' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'EDGE':\n\n\t\t\t\t\t\tedgeColor = lineParser.getToken();\n\t\t\t\t\t\tif ( edgeColor.startsWith( '0x' ) ) {\n\n\t\t\t\t\t\t\tedgeColor = '#' + edgeColor.substring( 2 );\n\n\t\t\t\t\t\t} else if ( ! edgeColor.startsWith( '#' ) ) {\n\n\t\t\t\t\t\t\t// Try to see if edge color is a color code\n\t\t\t\t\t\t\tedgeMaterial = this.getMaterial( edgeColor );\n\t\t\t\t\t\t\tif ( ! edgeMaterial ) {\n\n\t\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid edge color while parsing material' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Get the edge material for this triangle material\n\t\t\t\t\t\t\tedgeMaterial = this.edgeMaterialCache.get( edgeMaterial );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ALPHA':\n\n\t\t\t\t\t\talpha = parseInt( lineParser.getToken() );\n\n\t\t\t\t\t\tif ( isNaN( alpha ) ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid alpha value in material definition' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\talpha = Math.max( 0, Math.min( 1, alpha / 255 ) );\n\n\t\t\t\t\t\tif ( alpha < 1 ) {\n\n\t\t\t\t\t\t\tisTransparent = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LUMINANCE':\n\n\t\t\t\t\t\tif ( ! parseLuminance( lineParser.getToken() ) ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid luminance value in material definition' + LineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CHROME':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_CHROME;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PEARLESCENT':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_PEARLESCENT;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RUBBER':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_RUBBER;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'MATTE_METALLIC':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_MATTE_METALLIC;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'METAL':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_METAL;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'MATERIAL':\n\t\t\t\t\t\t// Not implemented\n\t\t\t\t\t\tlineParser.setToEnd();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Unknown token \"' + token + '\" while parsing material' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet material = null;\n\n\t\tswitch ( finishType ) {\n\n\t\t\tcase FINISH_TYPE_DEFAULT:\n\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.3, metalness: 0 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_PEARLESCENT:\n\n\t\t\t\t// Try to imitate pearlescency by making the surface glossy\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.3, metalness: 0.25 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_CHROME:\n\n\t\t\t\t// Mirror finish surface\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0, metalness: 1 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_RUBBER:\n\n\t\t\t\t// Rubber finish\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.9, metalness: 0 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_MATTE_METALLIC:\n\n\t\t\t\t// Brushed metal finish\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.8, metalness: 0.4 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_METAL:\n\n\t\t\t\t// Average metal finish\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.2, metalness: 0.85 } );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// Should not happen\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tmaterial.color.setStyle( fillColor, COLOR_SPACE_LDRAW );\n\t\tmaterial.transparent = isTransparent;\n\t\tmaterial.premultipliedAlpha = true;\n\t\tmaterial.opacity = alpha;\n\t\tmaterial.depthWrite = ! isTransparent;\n\n\t\tmaterial.polygonOffset = true;\n\t\tmaterial.polygonOffsetFactor = 1;\n\n\t\tif ( luminance !== 0 ) {\n\n\t\t\tmaterial.emissive.setStyle( fillColor, COLOR_SPACE_LDRAW ).multiplyScalar( luminance );\n\n\t\t}\n\n\t\tif ( ! edgeMaterial ) {\n\n\t\t\t// This is the material used for edges\n\t\t\tedgeMaterial = new LineBasicMaterial( {\n\t\t\t\tcolor: new Color().setStyle( edgeColor, COLOR_SPACE_LDRAW ),\n\t\t\t\ttransparent: isTransparent,\n\t\t\t\topacity: alpha,\n\t\t\t\tdepthWrite: ! isTransparent\n\t\t\t} );\n\t\t\tedgeMaterial.color;\n\t\t\tedgeMaterial.userData.code = code;\n\t\t\tedgeMaterial.name = name + ' - Edge';\n\n\t\t\t// This is the material used for conditional edges\n\t\t\tconst conditionalEdgeMaterial = new LDrawConditionalLineMaterial( {\n\n\t\t\t\tfog: true,\n\t\t\t\ttransparent: isTransparent,\n\t\t\t\tdepthWrite: ! isTransparent,\n\t\t\t\tcolor: new Color().setStyle( edgeColor, COLOR_SPACE_LDRAW ),\n\t\t\t\topacity: alpha,\n\n\t\t\t} );\n\t\t\tconditionalEdgeMaterial.userData.code = code;\n\t\t\tconditionalEdgeMaterial.name = name + ' - Conditional Edge';\n\n\t\t\tthis.conditionalEdgeMaterialCache.set( edgeMaterial, conditionalEdgeMaterial );\n\n\t\t}\n\n\t\tmaterial.userData.code = code;\n\t\tmaterial.name = name;\n\n\t\tthis.edgeMaterialCache.set( material, edgeMaterial );\n\n\t\tthis.addMaterial( material );\n\n\t\treturn material;\n\n\t\tfunction parseLuminance( token ) {\n\n\t\t\t// Returns success\n\n\t\t\tlet lum;\n\n\t\t\tif ( token.startsWith( 'LUMINANCE' ) ) {\n\n\t\t\t\tlum = parseInt( token.substring( 9 ) );\n\n\t\t\t} else {\n\n\t\t\t\tlum = parseInt( token );\n\n\t\t\t}\n\n\t\t\tif ( isNaN( lum ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\tluminance = Math.max( 0, Math.min( 1, lum / 255 ) );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\tcomputeBuildingSteps( model ) {\n\n\t\t// Sets userdata.buildingStep number in Group objects and userData.numBuildingSteps number in the root Group object.\n\n\t\tlet stepNumber = 0;\n\n\t\tmodel.traverse( c => {\n\n\t\t\tif ( c.isGroup ) {\n\n\t\t\t\tif ( c.userData.startingBuildingStep ) {\n\n\t\t\t\t\tstepNumber ++;\n\n\t\t\t\t}\n\n\t\t\t\tc.userData.buildingStep = stepNumber;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tmodel.userData.numBuildingSteps = stepNumber + 1;\n\n\t}\n\n}\n\nexport { LDrawLoader };\n", "// http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492\n// https://community.foundry.com/discuss/topic/103636/format-spec-for-3dl?mode=Post&postID=895258\n\nimport {\n\tClampToEdgeWrapping,\n\tData3DTexture,\n\tFileLoader,\n\tFloatType,\n\tLinearFilter,\n\tLoader,\n\tRGBAFormat,\n\tUnsignedByteType,\n} from 'three';\n\nexport class LUT3dlLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = UnsignedByteType;\n\n\t}\n\n\tsetType( type ) {\n\n\t\tif ( type !== UnsignedByteType && type !== FloatType ) {\n\n\t\t\tthrow new Error( 'LUT3dlLoader: Unsupported type' );\n\n\t\t}\n\n\t\tthis.type = type;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'text' );\n\t\tloader.load( url, text => {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( this.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( input ) {\n\n\t\tconst regExpGridInfo = /^[\\d ]+$/m;\n\t\tconst regExpDataPoints = /^([\\d.e+-]+) +([\\d.e+-]+) +([\\d.e+-]+) *$/gm;\n\n\t\t// The first line describes the positions of values on the LUT grid.\n\t\tlet result = regExpGridInfo.exec( input );\n\n\t\tif ( result === null ) {\n\n\t\t\tthrow new Error( 'LUT3dlLoader: Missing grid information' );\n\n\t\t}\n\n\t\tconst gridLines = result[ 0 ].trim().split( /\\s+/g ).map( Number );\n\t\tconst gridStep = gridLines[ 1 ] - gridLines[ 0 ];\n\t\tconst size = gridLines.length;\n\t\tconst sizeSq = size ** 2;\n\n\t\tfor ( let i = 1, l = gridLines.length; i < l; ++ i ) {\n\n\t\t\tif ( gridStep !== ( gridLines[ i ] - gridLines[ i - 1 ] ) ) {\n\n\t\t\t\tthrow new Error( 'LUT3dlLoader: Inconsistent grid size' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst dataFloat = new Float32Array( size ** 3 * 4 );\n\t\tlet maxValue = 0.0;\n\t\tlet index = 0;\n\n\t\twhile ( ( result = regExpDataPoints.exec( input ) ) !== null ) {\n\n\t\t\tconst r = Number( result[ 1 ] );\n\t\t\tconst g = Number( result[ 2 ] );\n\t\t\tconst b = Number( result[ 3 ] );\n\n\t\t\tmaxValue = Math.max( maxValue, r, g, b );\n\n\t\t\tconst bLayer = index % size;\n\t\t\tconst gLayer = Math.floor( index / size ) % size;\n\t\t\tconst rLayer = Math.floor( index / ( sizeSq ) ) % size;\n\n\t\t\t// b grows first, then g, then r.\n\t\t\tconst d4 = ( bLayer * sizeSq + gLayer * size + rLayer ) * 4;\n\t\t\tdataFloat[ d4 + 0 ] = r;\n\t\t\tdataFloat[ d4 + 1 ] = g;\n\t\t\tdataFloat[ d4 + 2 ] = b;\n\n\t\t\t++ index;\n\n\t\t}\n\n\t\t// Determine the bit depth to scale the values to [0.0, 1.0].\n\t\tconst bits = Math.ceil( Math.log2( maxValue ) );\n\t\tconst maxBitValue = Math.pow( 2, bits );\n\n\t\tconst data = this.type === UnsignedByteType ? new Uint8Array( dataFloat.length ) : dataFloat;\n\t\tconst scale = this.type === UnsignedByteType ? 255 : 1;\n\n\t\tfor ( let i = 0, l = data.length; i < l; i += 4 ) {\n\n\t\t\tconst i1 = i + 1;\n\t\t\tconst i2 = i + 2;\n\t\t\tconst i3 = i + 3;\n\n\t\t\t// Note: data is dataFloat when type is FloatType.\n\t\t\tdata[ i ] = dataFloat[ i ] / maxBitValue * scale;\n\t\t\tdata[ i1 ] = dataFloat[ i1 ] / maxBitValue * scale;\n\t\t\tdata[ i2 ] = dataFloat[ i2 ] / maxBitValue * scale;\n\t\t\tdata[ i3 ] = scale;\n\n\t\t}\n\n\t\tconst texture3D = new Data3DTexture();\n\t\ttexture3D.image.data = data;\n\t\ttexture3D.image.width = size;\n\t\ttexture3D.image.height = size;\n\t\ttexture3D.image.depth = size;\n\t\ttexture3D.format = RGBAFormat;\n\t\ttexture3D.type = this.type;\n\t\ttexture3D.magFilter = LinearFilter;\n\t\ttexture3D.minFilter = LinearFilter;\n\t\ttexture3D.wrapS = ClampToEdgeWrapping;\n\t\ttexture3D.wrapT = ClampToEdgeWrapping;\n\t\ttexture3D.wrapR = ClampToEdgeWrapping;\n\t\ttexture3D.generateMipmaps = false;\n\t\ttexture3D.needsUpdate = true;\n\n\t\treturn {\n\t\t\tsize,\n\t\t\ttexture3D,\n\t\t};\n\n\t}\n\n}\n", "// https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf\n\nimport {\n\tClampToEdgeWrapping,\n\tData3DTexture,\n\tFileLoader,\n\tFloatType,\n\tLinearFilter,\n\tLoader,\n\tUnsignedByteType,\n\tVector3,\n} from 'three';\n\nexport class LUTCubeLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = UnsignedByteType;\n\n\t}\n\n\tsetType( type ) {\n\n\t\tif ( type !== UnsignedByteType && type !== FloatType ) {\n\n\t\t\tthrow new Error( 'LUTCubeLoader: Unsupported type' );\n\n\t\t}\n\n\t\tthis.type = type;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'text' );\n\t\tloader.load( url, text => {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( this.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( input ) {\n\n\t\tconst regExpTitle = /TITLE +\"([^\"]*)\"/;\n\t\tconst regExpSize = /LUT_3D_SIZE +(\\d+)/;\n\t\tconst regExpDomainMin = /DOMAIN_MIN +([\\d.]+) +([\\d.]+) +([\\d.]+)/;\n\t\tconst regExpDomainMax = /DOMAIN_MAX +([\\d.]+) +([\\d.]+) +([\\d.]+)/;\n\t\tconst regExpDataPoints = /^([\\d.e+-]+) +([\\d.e+-]+) +([\\d.e+-]+) *$/gm;\n\n\t\tlet result = regExpTitle.exec( input );\n\t\tconst title = ( result !== null ) ? result[ 1 ] : null;\n\n\t\tresult = regExpSize.exec( input );\n\n\t\tif ( result === null ) {\n\n\t\t\tthrow new Error( 'LUTCubeLoader: Missing LUT_3D_SIZE information' );\n\n\t\t}\n\n\t\tconst size = Number( result[ 1 ] );\n\t\tconst length = size ** 3 * 4;\n\t\tconst data = this.type === UnsignedByteType ? new Uint8Array( length ) : new Float32Array( length );\n\n\t\tconst domainMin = new Vector3( 0, 0, 0 );\n\t\tconst domainMax = new Vector3( 1, 1, 1 );\n\n\t\tresult = regExpDomainMin.exec( input );\n\n\t\tif ( result !== null ) {\n\n\t\t\tdomainMin.set( Number( result[ 1 ] ), Number( result[ 2 ] ), Number( result[ 3 ] ) );\n\n\t\t}\n\n\t\tresult = regExpDomainMax.exec( input );\n\n\t\tif ( result !== null ) {\n\n\t\t\tdomainMax.set( Number( result[ 1 ] ), Number( result[ 2 ] ), Number( result[ 3 ] ) );\n\n\t\t}\n\n\t\tif ( domainMin.x > domainMax.x || domainMin.y > domainMax.y || domainMin.z > domainMax.z ) {\n\n\t\t\tthrow new Error( 'LUTCubeLoader: Invalid input domain' );\n\n\t\t}\n\n\t\tconst scale = this.type === UnsignedByteType ? 255 : 1;\n\t\tlet i = 0;\n\n\t\twhile ( ( result = regExpDataPoints.exec( input ) ) !== null ) {\n\n\t\t\tdata[ i ++ ] = Number( result[ 1 ] ) * scale;\n\t\t\tdata[ i ++ ] = Number( result[ 2 ] ) * scale;\n\t\t\tdata[ i ++ ] = Number( result[ 3 ] ) * scale;\n\t\t\tdata[ i ++ ] = scale;\n\n\t\t}\n\n\t\tconst texture3D = new Data3DTexture();\n\t\ttexture3D.image.data = data;\n\t\ttexture3D.image.width = size;\n\t\ttexture3D.image.height = size;\n\t\ttexture3D.image.depth = size;\n\t\ttexture3D.type = this.type;\n\t\ttexture3D.magFilter = LinearFilter;\n\t\ttexture3D.minFilter = LinearFilter;\n\t\ttexture3D.wrapS = ClampToEdgeWrapping;\n\t\ttexture3D.wrapT = ClampToEdgeWrapping;\n\t\ttexture3D.wrapR = ClampToEdgeWrapping;\n\t\ttexture3D.generateMipmaps = false;\n\t\ttexture3D.needsUpdate = true;\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tsize,\n\t\t\tdomainMin,\n\t\t\tdomainMax,\n\t\t\ttexture3D,\n\t\t};\n\n\t}\n\n}\n", "class LWO2Parser {\n\n\tconstructor( IFFParser ) {\n\n\t\tthis.IFF = IFFParser;\n\n\t}\n\n\tparseBlock() {\n\n\t\tthis.IFF.debugger.offset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.closeForms();\n\n\t\tconst blockID = this.IFF.reader.getIDTag();\n\t\tlet length = this.IFF.reader.getUint32(); // size of data in bytes\n\t\tif ( length > this.IFF.reader.dv.byteLength - this.IFF.reader.offset ) {\n\n\t\t\tthis.IFF.reader.offset -= 4;\n\t\t\tlength = this.IFF.reader.getUint16();\n\n\t\t}\n\n\t\tthis.IFF.debugger.dataOffset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.length = length;\n\n\t\t// Data types may be found in either LWO2 OR LWO3 spec\n\t\tswitch ( blockID ) {\n\n\t\t\tcase 'FORM': // form blocks may consist of sub -chunks or sub-forms\n\t\t\t\tthis.IFF.parseForm( length );\n\t\t\t\tbreak;\n\n\t\t\t// SKIPPED CHUNKS\n\t\t\t// if break; is called directly, the position in the lwoTree is not created\n\t\t\t// any sub chunks and forms are added to the parent form instead\n\t\t\t// MISC skipped\n\t\t\tcase 'ICON': // Thumbnail Icon Image\n\t\t\tcase 'VMPA': // Vertex Map Parameter\n\t\t\tcase 'BBOX': // bounding box\n\t\t\t// case 'VMMD':\n\t\t\t// case 'VTYP':\n\n\t\t\t// normal maps can be specified, normally on models imported from other applications. Currently ignored\n\t\t\tcase 'NORM':\n\n\t\t\t// ENVL FORM skipped\n\t\t\tcase 'PRE ':\n\t\t\tcase 'POST':\n\t\t\tcase 'KEY ':\n\t\t\tcase 'SPAN':\n\n\t\t\t// CLIP FORM skipped\n\t\t\tcase 'TIME':\n\t\t\tcase 'CLRS':\n\t\t\tcase 'CLRA':\n\t\t\tcase 'FILT':\n\t\t\tcase 'DITH':\n\t\t\tcase 'CONT':\n\t\t\tcase 'BRIT':\n\t\t\tcase 'SATR':\n\t\t\tcase 'HUE ':\n\t\t\tcase 'GAMM':\n\t\t\tcase 'NEGA':\n\t\t\tcase 'IFLT':\n\t\t\tcase 'PFLT':\n\n\t\t\t// Image Map Layer skipped\n\t\t\tcase 'PROJ':\n\t\t\tcase 'AXIS':\n\t\t\tcase 'AAST':\n\t\t\tcase 'PIXB':\n\t\t\tcase 'AUVO':\n\t\t\tcase 'STCK':\n\n\t\t\t// Procedural Textures skipped\n\t\t\tcase 'PROC':\n\t\t\tcase 'VALU':\n\t\t\tcase 'FUNC':\n\n\t\t\t// Gradient Textures skipped\n\t\t\tcase 'PNAM':\n\t\t\tcase 'INAM':\n\t\t\tcase 'GRST':\n\t\t\tcase 'GREN':\n\t\t\tcase 'GRPT':\n\t\t\tcase 'FKEY':\n\t\t\tcase 'IKEY':\n\n\t\t\t// Texture Mapping Form skipped\n\t\t\tcase 'CSYS':\n\n\t\t\t// Surface CHUNKs skipped\n\t\t\tcase 'OPAQ': // top level 'opacity' checkbox\n\t\t\tcase 'CMAP': // clip map\n\n\t\t\t// Surface node CHUNKS skipped\n\t\t\t// These mainly specify the node editor setup in LW\n\t\t\tcase 'NLOC':\n\t\t\tcase 'NZOM':\n\t\t\tcase 'NVER':\n\t\t\tcase 'NSRV':\n\t\t\tcase 'NVSK': // unknown\n\t\t\tcase 'NCRD':\n\t\t\tcase 'WRPW': // image wrap w ( for cylindrical and spherical projections)\n\t\t\tcase 'WRPH': // image wrap h\n\t\t\tcase 'NMOD':\n\t\t\tcase 'NSEL':\n\t\t\tcase 'NPRW':\n\t\t\tcase 'NPLA':\n\t\t\tcase 'NODS':\n\t\t\tcase 'VERS':\n\t\t\tcase 'ENUM':\n\t\t\tcase 'TAG ':\n\t\t\tcase 'OPAC':\n\n\t\t\t// Car Material CHUNKS\n\t\t\tcase 'CGMD':\n\t\t\tcase 'CGTY':\n\t\t\tcase 'CGST':\n\t\t\tcase 'CGEN':\n\t\t\tcase 'CGTS':\n\t\t\tcase 'CGTE':\n\t\t\tcase 'OSMP':\n\t\t\tcase 'OMDE':\n\t\t\tcase 'OUTR':\n\t\t\tcase 'FLAG':\n\n\t\t\tcase 'TRNL':\n\t\t\tcase 'GLOW':\n\t\t\tcase 'GVAL': // glow intensity\n\t\t\tcase 'SHRP':\n\t\t\tcase 'RFOP':\n\t\t\tcase 'RSAN':\n\t\t\tcase 'TROP':\n\t\t\tcase 'RBLR':\n\t\t\tcase 'TBLR':\n\t\t\tcase 'CLRH':\n\t\t\tcase 'CLRF':\n\t\t\tcase 'ADTR':\n\t\t\tcase 'LINE':\n\t\t\tcase 'ALPH':\n\t\t\tcase 'VCOL':\n\t\t\tcase 'ENAB':\n\t\t\t\tthis.IFF.debugger.skipped = true;\n\t\t\t\tthis.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SURF':\n\t\t\t\tthis.IFF.parseSurfaceLwo2( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'CLIP':\n\t\t\t\tthis.IFF.parseClipLwo2( length );\n\t\t\t\tbreak;\n\n\t\t\t// Texture node chunks (not in spec)\n\t\t\tcase 'IPIX': // usePixelBlending\n\t\t\tcase 'IMIP': // useMipMaps\n\t\t\tcase 'IMOD': // imageBlendingMode\n\t\t\tcase 'AMOD': // unknown\n\t\t\tcase 'IINV': // imageInvertAlpha\n\t\t\tcase 'INCR': // imageInvertColor\n\t\t\tcase 'IAXS': // imageAxis ( for non-UV maps)\n\t\t\tcase 'IFOT': // imageFallofType\n\t\t\tcase 'ITIM': // timing for animated textures\n\t\t\tcase 'IWRL':\n\t\t\tcase 'IUTI':\n\t\t\tcase 'IINX':\n\t\t\tcase 'IINY':\n\t\t\tcase 'IINZ':\n\t\t\tcase 'IREF': // possibly a VX for reused texture nodes\n\t\t\t\tif ( length === 4 ) this.IFF.currentNode[ blockID ] = this.IFF.reader.getInt32();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'OTAG':\n\t\t\t\tthis.IFF.parseObjectTag();\n\t\t\t\tbreak;\n\n\t\t\tcase 'LAYR':\n\t\t\t\tthis.IFF.parseLayer( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PNTS':\n\t\t\t\tthis.IFF.parsePoints( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAP':\n\t\t\t\tthis.IFF.parseVertexMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'AUVU':\n\t\t\tcase 'AUVN':\n\t\t\t\tthis.IFF.reader.skip( length - 1 );\n\t\t\t\tthis.IFF.reader.getVariableLengthIndex(); // VX\n\t\t\t\tbreak;\n\n\t\t\tcase 'POLS':\n\t\t\t\tthis.IFF.parsePolygonList( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TAGS':\n\t\t\t\tthis.IFF.parseTagStrings( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PTAG':\n\t\t\t\tthis.IFF.parsePolygonTagMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAD':\n\t\t\t\tthis.IFF.parseVertexMapping( length, true );\n\t\t\t\tbreak;\n\n\t\t\t// Misc CHUNKS\n\t\t\tcase 'DESC': // Description Line\n\t\t\t\tthis.IFF.currentForm.description = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'TEXT':\n\t\t\tcase 'CMNT':\n\t\t\tcase 'NCOM':\n\t\t\t\tthis.IFF.currentForm.comment = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Envelope Form\n\t\t\tcase 'NAME':\n\t\t\t\tthis.IFF.currentForm.channelName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Image Map Layer\n\t\t\tcase 'WRAP':\n\t\t\t\tthis.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAG':\n\t\t\t\tconst index = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tthis.IFF.currentForm.imageIndex = index;\n\t\t\t\tbreak;\n\n\t\t\t// Texture Mapping Form\n\t\t\tcase 'OREF':\n\t\t\t\tthis.IFF.currentForm.referenceObject = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROID':\n\t\t\t\tthis.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\t// Surface Blocks\n\t\t\tcase 'SSHN':\n\t\t\t\tthis.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'AOVN':\n\t\t\t\tthis.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks\n\t\t\tcase 'NSTA':\n\t\t\t\tthis.IFF.currentForm.disabled = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NRNM':\n\t\t\t\tthis.IFF.currentForm.realName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NNME':\n\t\t\t\tthis.IFF.currentForm.refName = this.IFF.reader.getString();\n\t\t\t\tthis.IFF.currentSurface.nodes[ this.IFF.currentForm.refName ] = this.IFF.currentForm;\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks : connections\n\t\t\tcase 'INME':\n\t\t\t\tif ( ! this.IFF.currentForm.nodeName ) this.IFF.currentForm.nodeName = [];\n\t\t\t\tthis.IFF.currentForm.nodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINN':\n\t\t\t\tif ( ! this.IFF.currentForm.inputNodeName ) this.IFF.currentForm.inputNodeName = [];\n\t\t\t\tthis.IFF.currentForm.inputNodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputName ) this.IFF.currentForm.inputName = [];\n\t\t\t\tthis.IFF.currentForm.inputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IONM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputOutputName ) this.IFF.currentForm.inputOutputName = [];\n\t\t\t\tthis.IFF.currentForm.inputOutputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'FNAM':\n\t\t\t\tthis.IFF.currentForm.fileName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'CHAN': // NOTE: ENVL Forms may also have CHAN chunk, however ENVL is currently ignored\n\t\t\t\tif ( length === 4 ) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\t// LWO2 Spec chunks: these are needed since the SURF FORMs are often in LWO2 format\n\t\t\tcase 'SMAN':\n\t\t\t\tconst maxSmoothingAngle = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.currentSurface.attributes.smooth = ( maxSmoothingAngle < 0 ) ? false : true;\n\t\t\t\tbreak;\n\n\t\t\t// LWO2: Basic Surface Parameters\n\t\t\tcase 'COLR':\n\t\t\t\tthis.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array( 3 ) };\n\t\t\t\tthis.IFF.reader.skip( 2 ); // VX: envelope\n\t\t\t\tbreak;\n\n\t\t\tcase 'LUMI':\n\t\t\t\tthis.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SPEC':\n\t\t\t\tthis.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'DIFF':\n\t\t\t\tthis.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'REFL':\n\t\t\t\tthis.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'GLOS':\n\t\t\t\tthis.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TRAN':\n\t\t\t\tthis.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'BUMP':\n\t\t\t\tthis.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SIDE':\n\t\t\t\tthis.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIND':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAP':\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TMAP':\n\t\t\t\tthis.IFF.debugger.skipped = true;\n\t\t\t\tthis.IFF.reader.skip( length ); // needs implementing\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUVI': // uv channel name\n\t\t\t\tthis.IFF.currentNode.UVChannel = this.IFF.reader.getString( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUTL': // widthWrappingMode: 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n\t\t\t\tthis.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\t\t\tcase 'IVTL': // heightWrappingMode\n\t\t\t\tthis.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\t// LWO2 USE\n\t\t\tcase 'BLOK':\n\t\t\t\t// skip\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.IFF.parseUnknownCHUNK( blockID, length );\n\n\t\t}\n\n\t\tif ( blockID != 'FORM' ) {\n\n\t\t\tthis.IFF.debugger.node = 1;\n\t\t\tthis.IFF.debugger.nodeID = blockID;\n\t\t\tthis.IFF.debugger.log();\n\n\t\t}\n\n\t\tif ( this.IFF.reader.offset >= this.IFF.currentFormEnd ) {\n\n\t\t\tthis.IFF.currentForm = this.IFF.parentForm;\n\n\t\t}\n\n\t}\n\n}\n\nexport { LWO2Parser };\n", "class LWO3Parser {\n\n\tconstructor( IFFParser ) {\n\n\t\tthis.IFF = IFFParser;\n\n\t}\n\n\tparseBlock() {\n\n\t\tthis.IFF.debugger.offset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.closeForms();\n\n\t\tconst blockID = this.IFF.reader.getIDTag();\n\t\tconst length = this.IFF.reader.getUint32(); // size of data in bytes\n\n\t\tthis.IFF.debugger.dataOffset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.length = length;\n\n\t\t// Data types may be found in either LWO2 OR LWO3 spec\n\t\tswitch ( blockID ) {\n\n\t\t\tcase 'FORM': // form blocks may consist of sub -chunks or sub-forms\n\t\t\t\tthis.IFF.parseForm( length );\n\t\t\t\tbreak;\n\n\t\t\t// SKIPPED CHUNKS\n\t\t\t// MISC skipped\n\t\t\tcase 'ICON': // Thumbnail Icon Image\n\t\t\tcase 'VMPA': // Vertex Map Parameter\n\t\t\tcase 'BBOX': // bounding box\n\t\t\t// case 'VMMD':\n\t\t\t// case 'VTYP':\n\n\t\t\t// normal maps can be specified, normally on models imported from other applications. Currently ignored\n\t\t\tcase 'NORM':\n\n\t\t\t// ENVL FORM skipped\n\t\t\tcase 'PRE ': // Pre-loop behavior for the keyframe\n\t\t\tcase 'POST': // Post-loop behavior for the keyframe\n\t\t\tcase 'KEY ':\n\t\t\tcase 'SPAN':\n\n\t\t\t// CLIP FORM skipped\n\t\t\tcase 'TIME':\n\t\t\tcase 'CLRS':\n\t\t\tcase 'CLRA':\n\t\t\tcase 'FILT':\n\t\t\tcase 'DITH':\n\t\t\tcase 'CONT':\n\t\t\tcase 'BRIT':\n\t\t\tcase 'SATR':\n\t\t\tcase 'HUE ':\n\t\t\tcase 'GAMM':\n\t\t\tcase 'NEGA':\n\t\t\tcase 'IFLT':\n\t\t\tcase 'PFLT':\n\n\t\t\t// Image Map Layer skipped\n\t\t\tcase 'PROJ':\n\t\t\tcase 'AXIS':\n\t\t\tcase 'AAST':\n\t\t\tcase 'PIXB':\n\t\t\tcase 'STCK':\n\n\t\t\t// Procedural Textures skipped\n\t\t\tcase 'VALU':\n\n\t\t\t// Gradient Textures skipped\n\t\t\tcase 'PNAM':\n\t\t\tcase 'INAM':\n\t\t\tcase 'GRST':\n\t\t\tcase 'GREN':\n\t\t\tcase 'GRPT':\n\t\t\tcase 'FKEY':\n\t\t\tcase 'IKEY':\n\n\t\t\t// Texture Mapping Form skipped\n\t\t\tcase 'CSYS':\n\n\t\t\t\t// Surface CHUNKs skipped\n\t\t\tcase 'OPAQ': // top level 'opacity' checkbox\n\t\t\tcase 'CMAP': // clip map\n\n\t\t\t// Surface node CHUNKS skipped\n\t\t\t// These mainly specify the node editor setup in LW\n\t\t\tcase 'NLOC':\n\t\t\tcase 'NZOM':\n\t\t\tcase 'NVER':\n\t\t\tcase 'NSRV':\n\t\t\tcase 'NCRD':\n\t\t\tcase 'NMOD':\n\t\t\tcase 'NSEL':\n\t\t\tcase 'NPRW':\n\t\t\tcase 'NPLA':\n\t\t\tcase 'VERS':\n\t\t\tcase 'ENUM':\n\t\t\tcase 'TAG ':\n\n\t\t\t// Car Material CHUNKS\n\t\t\tcase 'CGMD':\n\t\t\tcase 'CGTY':\n\t\t\tcase 'CGST':\n\t\t\tcase 'CGEN':\n\t\t\tcase 'CGTS':\n\t\t\tcase 'CGTE':\n\t\t\tcase 'OSMP':\n\t\t\tcase 'OMDE':\n\t\t\tcase 'OUTR':\n\t\t\tcase 'FLAG':\n\n\t\t\tcase 'TRNL':\n\t\t\tcase 'SHRP':\n\t\t\tcase 'RFOP':\n\t\t\tcase 'RSAN':\n\t\t\tcase 'TROP':\n\t\t\tcase 'RBLR':\n\t\t\tcase 'TBLR':\n\t\t\tcase 'CLRH':\n\t\t\tcase 'CLRF':\n\t\t\tcase 'ADTR':\n\t\t\tcase 'GLOW':\n\t\t\tcase 'LINE':\n\t\t\tcase 'ALPH':\n\t\t\tcase 'VCOL':\n\t\t\tcase 'ENAB':\n\t\t\t\tthis.IFF.debugger.skipped = true;\n\t\t\t\tthis.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\t// Texture node chunks (not in spec)\n\t\t\tcase 'IPIX': // usePixelBlending\n\t\t\tcase 'IMIP': // useMipMaps\n\t\t\tcase 'IMOD': // imageBlendingMode\n\t\t\tcase 'AMOD': // unknown\n\t\t\tcase 'IINV': // imageInvertAlpha\n\t\t\tcase 'INCR': // imageInvertColor\n\t\t\tcase 'IAXS': // imageAxis ( for non-UV maps)\n\t\t\tcase 'IFOT': // imageFallofType\n\t\t\tcase 'ITIM': // timing for animated textures\n\t\t\tcase 'IWRL':\n\t\t\tcase 'IUTI':\n\t\t\tcase 'IINX':\n\t\t\tcase 'IINY':\n\t\t\tcase 'IINZ':\n\t\t\tcase 'IREF': // possibly a VX for reused texture nodes\n\t\t\t\tif ( length === 4 ) this.IFF.currentNode[ blockID ] = this.IFF.reader.getInt32();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'OTAG':\n\t\t\t\tthis.IFF.parseObjectTag();\n\t\t\t\tbreak;\n\n\t\t\tcase 'LAYR':\n\t\t\t\tthis.IFF.parseLayer( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PNTS':\n\t\t\t\tthis.IFF.parsePoints( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAP':\n\t\t\t\tthis.IFF.parseVertexMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'POLS':\n\t\t\t\tthis.IFF.parsePolygonList( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TAGS':\n\t\t\t\tthis.IFF.parseTagStrings( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PTAG':\n\t\t\t\tthis.IFF.parsePolygonTagMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAD':\n\t\t\t\tthis.IFF.parseVertexMapping( length, true );\n\t\t\t\tbreak;\n\n\t\t\t// Misc CHUNKS\n\t\t\tcase 'DESC': // Description Line\n\t\t\t\tthis.IFF.currentForm.description = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'TEXT':\n\t\t\tcase 'CMNT':\n\t\t\tcase 'NCOM':\n\t\t\t\tthis.IFF.currentForm.comment = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Envelope Form\n\t\t\tcase 'NAME':\n\t\t\t\tthis.IFF.currentForm.channelName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Image Map Layer\n\t\t\tcase 'WRAP':\n\t\t\t\tthis.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAG':\n\t\t\t\tconst index = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tthis.IFF.currentForm.imageIndex = index;\n\t\t\t\tbreak;\n\n\t\t\t// Texture Mapping Form\n\t\t\tcase 'OREF':\n\t\t\t\tthis.IFF.currentForm.referenceObject = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROID':\n\t\t\t\tthis.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\t// Surface Blocks\n\t\t\tcase 'SSHN':\n\t\t\t\tthis.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'AOVN':\n\t\t\t\tthis.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks\n\t\t\tcase 'NSTA':\n\t\t\t\tthis.IFF.currentForm.disabled = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NRNM':\n\t\t\t\tthis.IFF.currentForm.realName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NNME':\n\t\t\t\tthis.IFF.currentForm.refName = this.IFF.reader.getString();\n\t\t\t\tthis.IFF.currentSurface.nodes[ this.IFF.currentForm.refName ] = this.IFF.currentForm;\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks : connections\n\t\t\tcase 'INME':\n\t\t\t\tif ( ! this.IFF.currentForm.nodeName ) this.IFF.currentForm.nodeName = [];\n\t\t\t\tthis.IFF.currentForm.nodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINN':\n\t\t\t\tif ( ! this.IFF.currentForm.inputNodeName ) this.IFF.currentForm.inputNodeName = [];\n\t\t\t\tthis.IFF.currentForm.inputNodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputName ) this.IFF.currentForm.inputName = [];\n\t\t\t\tthis.IFF.currentForm.inputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IONM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputOutputName ) this.IFF.currentForm.inputOutputName = [];\n\t\t\t\tthis.IFF.currentForm.inputOutputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'FNAM':\n\t\t\t\tthis.IFF.currentForm.fileName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'CHAN': // NOTE: ENVL Forms may also have CHAN chunk, however ENVL is currently ignored\n\t\t\t\tif ( length === 4 ) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\t// LWO2 Spec chunks: these are needed since the SURF FORMs are often in LWO2 format\n\t\t\tcase 'SMAN':\n\t\t\t\tconst maxSmoothingAngle = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.currentSurface.attributes.smooth = ( maxSmoothingAngle < 0 ) ? false : true;\n\t\t\t\tbreak;\n\n\t\t\t// LWO2: Basic Surface Parameters\n\t\t\tcase 'COLR':\n\t\t\t\tthis.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array( 3 ) };\n\t\t\t\tthis.IFF.reader.skip( 2 ); // VX: envelope\n\t\t\t\tbreak;\n\n\t\t\tcase 'LUMI':\n\t\t\t\tthis.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SPEC':\n\t\t\t\tthis.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'DIFF':\n\t\t\t\tthis.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'REFL':\n\t\t\t\tthis.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'GLOS':\n\t\t\t\tthis.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TRAN':\n\t\t\t\tthis.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'BUMP':\n\t\t\t\tthis.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SIDE':\n\t\t\t\tthis.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIND':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAP':\n\t\t\t\tthis.IFF.currentSurface.attributes.imageMapIndex = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUVI': // uv channel name\n\t\t\t\tthis.IFF.currentNode.UVChannel = this.IFF.reader.getString( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUTL': // widthWrappingMode: 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n\t\t\t\tthis.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\t\t\tcase 'IVTL': // heightWrappingMode\n\t\t\t\tthis.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.IFF.parseUnknownCHUNK( blockID, length );\n\n\t\t}\n\n\t\tif ( blockID != 'FORM' ) {\n\n\t\t\tthis.IFF.debugger.node = 1;\n\t\t\tthis.IFF.debugger.nodeID = blockID;\n\t\t\tthis.IFF.debugger.log();\n\n\t\t}\n\n\t\tif ( this.IFF.reader.offset >= this.IFF.currentFormEnd ) {\n\n\t\t\tthis.IFF.currentForm = this.IFF.parentForm;\n\n\t\t}\n\n\t}\n\n}\n\nexport { LWO3Parser };\n", "/**\n * === IFFParser ===\n * - Parses data from the IFF buffer.\n * - LWO3 files are in IFF format and can contain the following data types, referred to by shorthand codes\n *\n * ATOMIC DATA TYPES\n * ID Tag - 4x 7 bit uppercase ASCII chars: ID4\n * signed integer, 1, 2, or 4 byte length: I1, I2, I4\n * unsigned integer, 1, 2, or 4 byte length: U1, U2, U4\n * float, 4 byte length: F4\n * string, series of ASCII chars followed by null byte (If the length of the string including the null terminating byte is odd, an extra null is added so that the data that follows will begin on an even byte boundary): S0\n *\n * COMPOUND DATA TYPES\n * Variable-length Index (index into an array or collection): U2 or U4 : VX\n * Color (RGB): F4 + F4 + F4: COL12\n * Coordinate (x, y, z): F4 + F4 + F4: VEC12\n * Percentage F4 data type from 0->1 with 1 = 100%: FP4\n * Angle in radian F4: ANG4\n * Filename (string) S0: FNAM0\n * XValue F4 + index (VX) + optional envelope( ENVL ): XVAL\n * XValue vector VEC12 + index (VX) + optional envelope( ENVL ): XVAL3\n *\n * The IFF file is arranged in chunks:\n * CHUNK = ID4 + length (U4) + length X bytes of data + optional 0 pad byte\n * optional 0 pad byte is there to ensure chunk ends on even boundary, not counted in size\n *\n * COMPOUND DATA TYPES\n * - Chunks are combined in Forms (collections of chunks)\n * - FORM = string 'FORM' (ID4) + length (U4) + type (ID4) + optional ( CHUNK | FORM )\n * - CHUNKS and FORMS are collectively referred to as blocks\n * - The entire file is contained in one top level FORM\n *\n **/\n\nimport { LWO2Parser } from './LWO2Parser.js';\nimport { LWO3Parser } from './LWO3Parser.js';\n\nclass IFFParser {\n\n\tconstructor() {\n\n\t\tthis.debugger = new Debugger();\n\t\t// this.debugger.enable(); // un-comment to log IFF hierarchy.\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tthis.reader = new DataViewReader( buffer );\n\n\t\tthis.tree = {\n\t\t\tmaterials: {},\n\t\t\tlayers: [],\n\t\t\ttags: [],\n\t\t\ttextures: [],\n\t\t};\n\n\t\t// start out at the top level to add any data before first layer is encountered\n\t\tthis.currentLayer = this.tree;\n\t\tthis.currentForm = this.tree;\n\n\t\tthis.parseTopForm();\n\n\t\tif ( this.tree.format === undefined ) return;\n\n\t\tif ( this.tree.format === 'LWO2' ) {\n\n\t\t\tthis.parser = new LWO2Parser( this );\n\t\t\twhile ( ! this.reader.endOfFile() ) this.parser.parseBlock();\n\n\t\t} else if ( this.tree.format === 'LWO3' ) {\n\n\t\t\tthis.parser = new LWO3Parser( this );\n\t\t\twhile ( ! this.reader.endOfFile() ) this.parser.parseBlock();\n\n\t\t}\n\n\t\tthis.debugger.offset = this.reader.offset;\n\t\tthis.debugger.closeForms();\n\n\t\treturn this.tree;\n\n\t}\n\n\tparseTopForm() {\n\n\t\tthis.debugger.offset = this.reader.offset;\n\n\t\tvar topForm = this.reader.getIDTag();\n\n\t\tif ( topForm !== 'FORM' ) {\n\n\t\t\tconsole.warn( 'LWOLoader: Top-level FORM missing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar length = this.reader.getUint32();\n\n\t\tthis.debugger.dataOffset = this.reader.offset;\n\t\tthis.debugger.length = length;\n\n\t\tvar type = this.reader.getIDTag();\n\n\t\tif ( type === 'LWO2' ) {\n\n\t\t\tthis.tree.format = type;\n\n\t\t} else if ( type === 'LWO3' ) {\n\n\t\t\tthis.tree.format = type;\n\n\t\t}\n\n\t\tthis.debugger.node = 0;\n\t\tthis.debugger.nodeID = type;\n\t\tthis.debugger.log();\n\n\t\treturn;\n\n\t}\n\n\n\t///\n\t// FORM PARSING METHODS\n\t///\n\n\t// Forms are organisational and can contain any number of sub chunks and sub forms\n\t// FORM ::= 'FORM'[ID4], length[U4], type[ID4], ( chunk[CHUNK] | form[FORM] ) * }\n\tparseForm( length ) {\n\n\t\tvar type = this.reader.getIDTag();\n\n\t\tswitch ( type ) {\n\n\t\t\t// SKIPPED FORMS\n\t\t\t// if skipForm( length ) is called, the entire form and any sub forms and chunks are skipped\n\n\t\t\tcase 'ISEQ': // Image sequence\n\t\t\tcase 'ANIM': // plug in animation\n\t\t\tcase 'STCC': // Color-cycling Still\n\t\t\tcase 'VPVL':\n\t\t\tcase 'VPRM':\n\t\t\tcase 'NROT':\n\t\t\tcase 'WRPW': // image wrap w ( for cylindrical and spherical projections)\n\t\t\tcase 'WRPH': // image wrap h\n\t\t\tcase 'FUNC':\n\t\t\tcase 'FALL':\n\t\t\tcase 'OPAC':\n\t\t\tcase 'GRAD': // gradient texture\n\t\t\tcase 'ENVS':\n\t\t\tcase 'VMOP':\n\t\t\tcase 'VMBG':\n\n\t\t\t// Car Material FORMS\n\t\t\tcase 'OMAX':\n\t\t\tcase 'STEX':\n\t\t\tcase 'CKBG':\n\t\t\tcase 'CKEY':\n\t\t\tcase 'VMLA':\n\t\t\tcase 'VMLB':\n\t\t\t\tthis.debugger.skipped = true;\n\t\t\t\tthis.skipForm( length ); // not currently supported\n\t\t\t\tbreak;\n\n\t\t\t// if break; is called directly, the position in the lwoTree is not created\n\t\t\t// any sub chunks and forms are added to the parent form instead\n\t\t\tcase 'META':\n\t\t\tcase 'NNDS':\n\t\t\tcase 'NODS':\n\t\t\tcase 'NDTA':\n\t\t\tcase 'ADAT':\n\t\t\tcase 'AOVS':\n\t\t\tcase 'BLOK':\n\n\t\t\t// used by texture nodes\n\t\t\tcase 'IBGC': // imageBackgroundColor\n\t\t\tcase 'IOPC': // imageOpacity\n\t\t\tcase 'IIMG': // hold reference to image path\n\t\t\tcase 'TXTR':\n\t\t\t\t// this.setupForm( type, length );\n\t\t\t\tthis.debugger.length = 4;\n\t\t\t\tthis.debugger.skipped = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 'IFAL': // imageFallof\n\t\t\tcase 'ISCL': // imageScale\n\t\t\tcase 'IPOS': // imagePosition\n\t\t\tcase 'IROT': // imageRotation\n\t\t\tcase 'IBMP':\n\t\t\tcase 'IUTD':\n\t\t\tcase 'IVTD':\n\t\t\t\tthis.parseTextureNodeAttribute( type );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ENVL':\n\t\t\t\tthis.parseEnvelope( length );\n\t\t\t\tbreak;\n\n\t\t\t\t// CLIP FORM AND SUB FORMS\n\n\t\t\tcase 'CLIP':\n\t\t\t\tif ( this.tree.format === 'LWO2' ) {\n\n\t\t\t\t\tthis.parseForm( length );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.parseClip( length );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'STIL':\n\t\t\t\tthis.parseImage();\n\t\t\t\tbreak;\n\n\t\t\tcase 'XREF': // clone of another STIL\n\t\t\t\tthis.reader.skip( 8 ); // unknown\n\t\t\t\tthis.currentForm.referenceTexture = {\n\t\t\t\t\tindex: this.reader.getUint32(),\n\t\t\t\t\trefName: this.reader.getString() // internal unique ref\n\t\t\t\t};\n\t\t\t\tbreak;\n\n\t\t\t\t// Not in spec, used by texture nodes\n\n\t\t\tcase 'IMST':\n\t\t\t\tthis.parseImageStateForm( length );\n\t\t\t\tbreak;\n\n\t\t\t\t// SURF FORM AND SUB FORMS\n\n\t\t\tcase 'SURF':\n\t\t\t\tthis.parseSurfaceForm( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VALU': // Not in spec\n\t\t\t\tthis.parseValueForm( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NTAG':\n\t\t\t\tthis.parseSubNode( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ATTR': // BSDF Node Attributes\n\t\t\tcase 'SATR': // Standard Node Attributes\n\t\t\t\tthis.setupForm( 'attributes', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NCON':\n\t\t\t\tthis.parseConnections( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SSHA':\n\t\t\t\tthis.parentForm = this.currentForm;\n\t\t\t\tthis.currentForm = this.currentSurface;\n\t\t\t\tthis.setupForm( 'surfaceShader', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SSHD':\n\t\t\t\tthis.setupForm( 'surfaceShaderData', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ENTR': // Not in spec\n\t\t\t\tthis.parseEntryForm( length );\n\t\t\t\tbreak;\n\n\t\t\t\t// Image Map Layer\n\n\t\t\tcase 'IMAP':\n\t\t\t\tthis.parseImageMap( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TAMP':\n\t\t\t\tthis.parseXVAL( 'amplitude', length );\n\t\t\t\tbreak;\n\n\t\t\t\t//Texture Mapping Form\n\n\t\t\tcase 'TMAP':\n\t\t\t\tthis.setupForm( 'textureMap', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'CNTR':\n\t\t\t\tthis.parseXVAL3( 'center', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SIZE':\n\t\t\t\tthis.parseXVAL3( 'scale', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROTA':\n\t\t\t\tthis.parseXVAL3( 'rotation', length );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.parseUnknownForm( type, length );\n\n\t\t}\n\n\t\tthis.debugger.node = 0;\n\t\tthis.debugger.nodeID = type;\n\t\tthis.debugger.log();\n\n\t}\n\n\tsetupForm( type, length ) {\n\n\t\tif ( ! this.currentForm ) this.currentForm = this.currentNode;\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tif ( ! this.currentForm[ type ] ) {\n\n\t\t\tthis.currentForm[ type ] = {};\n\t\t\tthis.currentForm = this.currentForm[ type ];\n\n\n\t\t} else {\n\n\t\t\t// should never see this unless there's a bug in the reader\n\t\t\tconsole.warn( 'LWOLoader: form already exists on parent: ', type, this.currentForm );\n\n\t\t\tthis.currentForm = this.currentForm[ type ];\n\n\t\t}\n\n\n\t}\n\n\tskipForm( length ) {\n\n\t\tthis.reader.skip( length - 4 );\n\n\t}\n\n\tparseUnknownForm( type, length ) {\n\n\t\tconsole.warn( 'LWOLoader: unknown FORM encountered: ' + type, length );\n\n\t\tprintBuffer( this.reader.dv.buffer, this.reader.offset, length - 4 );\n\t\tthis.reader.skip( length - 4 );\n\n\t}\n\n\tparseSurfaceForm( length ) {\n\n\t\tthis.reader.skip( 8 ); // unknown Uint32 x2\n\n\t\tvar name = this.reader.getString();\n\n\t\tvar surface = {\n\t\t\tattributes: {}, // LWO2 style non-node attributes will go here\n\t\t\tconnections: {},\n\t\t\tname: name,\n\t\t\tinputName: name,\n\t\t\tnodes: {},\n\t\t\tsource: this.reader.getString(),\n\t\t};\n\n\t\tthis.tree.materials[ name ] = surface;\n\t\tthis.currentSurface = surface;\n\n\t\tthis.parentForm = this.tree.materials;\n\t\tthis.currentForm = surface;\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\n\t}\n\n\tparseSurfaceLwo2( length ) {\n\n\t\tvar name = this.reader.getString();\n\n\t\tvar surface = {\n\t\t\tattributes: {}, // LWO2 style non-node attributes will go here\n\t\t\tconnections: {},\n\t\t\tname: name,\n\t\t\tnodes: {},\n\t\t\tsource: this.reader.getString(),\n\t\t};\n\n\t\tthis.tree.materials[ name ] = surface;\n\t\tthis.currentSurface = surface;\n\n\t\tthis.parentForm = this.tree.materials;\n\t\tthis.currentForm = surface;\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\n\t}\n\n\tparseSubNode( length ) {\n\n\t\t// parse the NRNM CHUNK of the subnode FORM to get\n\t\t// a meaningful name for the subNode\n\t\t// some subnodes can be renamed, but Input and Surface cannot\n\n\t\tthis.reader.skip( 8 ); // NRNM + length\n\t\tvar name = this.reader.getString();\n\n\t\tvar node = {\n\t\t\tname: name\n\t\t};\n\t\tthis.currentForm = node;\n\t\tthis.currentNode = node;\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\n\n\t}\n\n\t// collect attributes from all nodes at the top level of a surface\n\tparseConnections( length ) {\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tthis.currentForm = this.currentSurface.connections;\n\n\t}\n\n\t// surface node attribute data, e.g. specular, roughness etc\n\tparseEntryForm( length ) {\n\n\t\tthis.reader.skip( 8 ); // NAME + length\n\t\tvar name = this.reader.getString();\n\t\tthis.currentForm = this.currentNode.attributes;\n\n\t\tthis.setupForm( name, length );\n\n\t}\n\n\t// parse values from material - doesn't match up to other LWO3 data types\n\t// sub form of entry form\n\tparseValueForm() {\n\n\t\tthis.reader.skip( 8 ); // unknown + length\n\n\t\tvar valueType = this.reader.getString();\n\n\t\tif ( valueType === 'double' ) {\n\n\t\t\tthis.currentForm.value = this.reader.getUint64();\n\n\t\t} else if ( valueType === 'int' ) {\n\n\t\t\tthis.currentForm.value = this.reader.getUint32();\n\n\t\t} else if ( valueType === 'vparam' ) {\n\n\t\t\tthis.reader.skip( 24 );\n\t\t\tthis.currentForm.value = this.reader.getFloat64();\n\n\t\t} else if ( valueType === 'vparam3' ) {\n\n\t\t\tthis.reader.skip( 24 );\n\t\t\tthis.currentForm.value = this.reader.getFloat64Array( 3 );\n\n\t\t}\n\n\t}\n\n\t// holds various data about texture node image state\n\t// Data other thanmipMapLevel unknown\n\tparseImageStateForm() {\n\n\t\tthis.reader.skip( 8 ); // unknown\n\n\t\tthis.currentForm.mipMapLevel = this.reader.getFloat32();\n\n\t}\n\n\t// LWO2 style image data node OR LWO3 textures defined at top level in editor (not as SURF node)\n\tparseImageMap( length ) {\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tif ( ! this.currentForm.maps ) this.currentForm.maps = [];\n\n\t\tvar map = {};\n\t\tthis.currentForm.maps.push( map );\n\t\tthis.currentForm = map;\n\n\t\tthis.reader.skip( 10 ); // unknown, could be an issue if it contains a VX\n\n\t}\n\n\tparseTextureNodeAttribute( type ) {\n\n\t\tthis.reader.skip( 28 ); // FORM + length + VPRM + unknown + Uint32 x2 + float32\n\n\t\tthis.reader.skip( 20 ); // FORM + length + VPVL + float32 + Uint32\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'ISCL':\n\t\t\t\tthis.currentNode.scale = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\t\t\tcase 'IPOS':\n\t\t\t\tthis.currentNode.position = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\t\t\tcase 'IROT':\n\t\t\t\tthis.currentNode.rotation = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\t\t\tcase 'IFAL':\n\t\t\t\tthis.currentNode.falloff = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IBMP':\n\t\t\t\tthis.currentNode.amplitude = this.reader.getFloat32();\n\t\t\t\tbreak;\n\t\t\tcase 'IUTD':\n\t\t\t\tthis.currentNode.uTiles = this.reader.getFloat32();\n\t\t\t\tbreak;\n\t\t\tcase 'IVTD':\n\t\t\t\tthis.currentNode.vTiles = this.reader.getFloat32();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tthis.reader.skip( 2 ); // unknown\n\n\n\t}\n\n\t// ENVL forms are currently ignored\n\tparseEnvelope( length ) {\n\n\t\tthis.reader.skip( length - 4 ); // skipping entirely for now\n\n\t}\n\n\t///\n\t// CHUNK PARSING METHODS\n\t///\n\n\t// clips can either be defined inside a surface node, or at the top\n\t// level and they have a different format in each case\n\tparseClip( length ) {\n\n\t\tvar tag = this.reader.getIDTag();\n\n\t\t// inside surface node\n\t\tif ( tag === 'FORM' ) {\n\n\t\t\tthis.reader.skip( 16 );\n\n\t\t\tthis.currentNode.fileName = this.reader.getString();\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// otherwise top level\n\t\tthis.reader.setOffset( this.reader.offset - 4 );\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tthis.reader.skip( 8 ); // unknown\n\n\t\tvar texture = {\n\t\t\tindex: this.reader.getUint32()\n\t\t};\n\t\tthis.tree.textures.push( texture );\n\t\tthis.currentForm = texture;\n\n\t}\n\n\tparseClipLwo2( length ) {\n\n\t\tvar texture = {\n\t\t\tindex: this.reader.getUint32(),\n\t\t\tfileName: ''\n\t\t};\n\n\t\t// seach STIL block\n\t\twhile ( true ) {\n\n\t\t\tvar tag = this.reader.getIDTag();\n\t\t\tvar n_length = this.reader.getUint16();\n\t\t\tif ( tag === 'STIL' ) {\n\n\t\t\t\ttexture.fileName = this.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( n_length >= length ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.tree.textures.push( texture );\n\t\tthis.currentForm = texture;\n\n\t}\n\n\tparseImage() {\n\n\t\tthis.reader.skip( 8 ); // unknown\n\t\tthis.currentForm.fileName = this.reader.getString();\n\n\t}\n\n\tparseXVAL( type, length ) {\n\n\t\tvar endOffset = this.reader.offset + length - 4;\n\t\tthis.reader.skip( 8 );\n\n\t\tthis.currentForm[ type ] = this.reader.getFloat32();\n\n\t\tthis.reader.setOffset( endOffset ); // set end offset directly to skip optional envelope\n\n\t}\n\n\tparseXVAL3( type, length ) {\n\n\t\tvar endOffset = this.reader.offset + length - 4;\n\t\tthis.reader.skip( 8 );\n\n\t\tthis.currentForm[ type ] = {\n\t\t\tx: this.reader.getFloat32(),\n\t\t\ty: this.reader.getFloat32(),\n\t\t\tz: this.reader.getFloat32(),\n\t\t};\n\n\t\tthis.reader.setOffset( endOffset );\n\n\t}\n\n\t// Tags associated with an object\n\t// OTAG { type[ID4], tag-string[S0] }\n\tparseObjectTag() {\n\n\t\tif ( ! this.tree.objectTags ) this.tree.objectTags = {};\n\n\t\tthis.tree.objectTags[ this.reader.getIDTag() ] = {\n\t\t\ttagString: this.reader.getString()\n\t\t};\n\n\t}\n\n\t// Signals the start of a new layer. All the data chunks which follow will be included in this layer until another layer chunk is encountered.\n\t// LAYR: number[U2], flags[U2], pivot[VEC12], name[S0], parent[U2]\n\tparseLayer( length ) {\n\n\t\tvar number = this.reader.getUint16();\n\t\tvar flags = this.reader.getUint16(); // If the least significant bit of flags is set, the layer is hidden.\n\t\tvar pivot = this.reader.getFloat32Array( 3 ); // Note: this seems to be superflous, as the geometry is translated when pivot is present\n\t\tvar layer = {\n\t\t\tnumber: number,\n\t\t\tflags: flags, // If the least significant bit of flags is set, the layer is hidden.\n\t\t\tpivot: [ - pivot[ 0 ], pivot[ 1 ], pivot[ 2 ] ], // Note: this seems to be superflous, as the geometry is translated when pivot is present\n\t\t\tname: this.reader.getString(),\n\t\t};\n\n\t\tthis.tree.layers.push( layer );\n\t\tthis.currentLayer = layer;\n\n\t\tvar parsedLength = 16 + stringOffset( this.currentLayer.name ); // index ( 2 ) + flags( 2 ) + pivot( 12 ) + stringlength\n\n\t\t// if we have not reached then end of the layer block, there must be a parent defined\n\t\tthis.currentLayer.parent = ( parsedLength < length ) ? this.reader.getUint16() : - 1; // omitted or -1 for no parent\n\n\t}\n\n\t// VEC12 * ( F4 + F4 + F4 ) array of x,y,z vectors\n\t// Converting from left to right handed coordinate system:\n\t// x -> -x and switch material FrontSide -> BackSide\n\tparsePoints( length ) {\n\n\t\tthis.currentPoints = [];\n\t\tfor ( var i = 0; i < length / 4; i += 3 ) {\n\n\t\t\t// x -> -x to match three.js right handed coords\n\t\t\tthis.currentPoints.push( - this.reader.getFloat32(), this.reader.getFloat32(), this.reader.getFloat32() );\n\n\t\t}\n\n\t}\n\n\t// parse VMAP or VMAD\n\t// Associates a set of floating-point vectors with a set of points.\n\t// VMAP: { type[ID4], dimension[U2], name[S0], ( vert[VX], value[F4] # dimension ) * }\n\n\t// VMAD Associates a set of floating-point vectors with the vertices of specific polygons.\n\t// Similar to VMAP UVs, but associates with polygon vertices rather than points\n\t// to solve to problem of UV seams: VMAD chunks are paired with VMAPs of the same name,\n\t// if they exist. The vector values in the VMAD will then replace those in the\n\t// corresponding VMAP, but only for calculations involving the specified polygons.\n\t// VMAD { type[ID4], dimension[U2], name[S0], ( vert[VX], poly[VX], value[F4] # dimension ) * }\n\tparseVertexMapping( length, discontinuous ) {\n\n\t\tvar finalOffset = this.reader.offset + length;\n\n\t\tvar channelName = this.reader.getString();\n\n\t\tif ( this.reader.offset === finalOffset ) {\n\n\t\t\t// then we are in a texture node and the VMAP chunk is just a reference to a UV channel name\n\t\t\tthis.currentForm.UVChannel = channelName;\n\t\t\treturn;\n\n\t\t}\n\n\t\t// otherwise reset to initial length and parse normal VMAP CHUNK\n\t\tthis.reader.setOffset( this.reader.offset - stringOffset( channelName ) );\n\n\t\tvar type = this.reader.getIDTag();\n\n\t\tthis.reader.getUint16(); // dimension\n\t\tvar name = this.reader.getString();\n\n\t\tvar remainingLength = length - 6 - stringOffset( name );\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'TXUV':\n\t\t\t\tthis.parseUVMapping( name, finalOffset, discontinuous );\n\t\t\t\tbreak;\n\t\t\tcase 'MORF':\n\t\t\tcase 'SPOT':\n\t\t\t\tthis.parseMorphTargets( name, finalOffset, type ); // can't be discontinuous\n\t\t\t\tbreak;\n\t\t\t// unsupported VMAPs\n\t\t\tcase 'APSL':\n\t\t\tcase 'NORM':\n\t\t\tcase 'WGHT':\n\t\t\tcase 'MNVW':\n\t\t\tcase 'PICK':\n\t\t\tcase 'RGB ':\n\t\t\tcase 'RGBA':\n\t\t\t\tthis.reader.skip( remainingLength );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'LWOLoader: unknown vertex map type: ' + type );\n\t\t\t\tthis.reader.skip( remainingLength );\n\n\t\t}\n\n\t}\n\n\tparseUVMapping( name, finalOffset, discontinuous ) {\n\n\t\tvar uvIndices = [];\n\t\tvar polyIndices = [];\n\t\tvar uvs = [];\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tuvIndices.push( this.reader.getVariableLengthIndex() );\n\n\t\t\tif ( discontinuous ) polyIndices.push( this.reader.getVariableLengthIndex() );\n\n\t\t\tuvs.push( this.reader.getFloat32(), this.reader.getFloat32() );\n\n\t\t}\n\n\t\tif ( discontinuous ) {\n\n\t\t\tif ( ! this.currentLayer.discontinuousUVs ) this.currentLayer.discontinuousUVs = {};\n\n\t\t\tthis.currentLayer.discontinuousUVs[ name ] = {\n\t\t\t\tuvIndices: uvIndices,\n\t\t\t\tpolyIndices: polyIndices,\n\t\t\t\tuvs: uvs,\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tif ( ! this.currentLayer.uvs ) this.currentLayer.uvs = {};\n\n\t\t\tthis.currentLayer.uvs[ name ] = {\n\t\t\t\tuvIndices: uvIndices,\n\t\t\t\tuvs: uvs,\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tparseMorphTargets( name, finalOffset, type ) {\n\n\t\tvar indices = [];\n\t\tvar points = [];\n\n\t\ttype = ( type === 'MORF' ) ? 'relative' : 'absolute';\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tindices.push( this.reader.getVariableLengthIndex() );\n\t\t\t// z -> -z to match three.js right handed coords\n\t\t\tpoints.push( this.reader.getFloat32(), this.reader.getFloat32(), - this.reader.getFloat32() );\n\n\t\t}\n\n\t\tif ( ! this.currentLayer.morphTargets ) this.currentLayer.morphTargets = {};\n\n\t\tthis.currentLayer.morphTargets[ name ] = {\n\t\t\tindices: indices,\n\t\t\tpoints: points,\n\t\t\ttype: type,\n\t\t};\n\n\t}\n\n\t// A list of polygons for the current layer.\n\t// POLS { type[ID4], ( numvert+flags[U2], vert[VX] # numvert ) * }\n\tparsePolygonList( length ) {\n\n\t\tvar finalOffset = this.reader.offset + length;\n\t\tvar type = this.reader.getIDTag();\n\n\t\tvar indices = [];\n\n\t\t// hold a list of polygon sizes, to be split up later\n\t\tvar polygonDimensions = [];\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tvar numverts = this.reader.getUint16();\n\n\t\t\t//var flags = numverts & 64512; // 6 high order bits are flags - ignoring for now\n\t\t\tnumverts = numverts & 1023; // remaining ten low order bits are vertex num\n\t\t\tpolygonDimensions.push( numverts );\n\n\t\t\tfor ( var j = 0; j < numverts; j ++ ) indices.push( this.reader.getVariableLengthIndex() );\n\n\t\t}\n\n\t\tvar geometryData = {\n\t\t\ttype: type,\n\t\t\tvertexIndices: indices,\n\t\t\tpolygonDimensions: polygonDimensions,\n\t\t\tpoints: this.currentPoints\n\t\t};\n\n\t\t// Note: assuming that all polys will be lines or points if the first is\n\t\tif ( polygonDimensions[ 0 ] === 1 ) geometryData.type = 'points';\n\t\telse if ( polygonDimensions[ 0 ] === 2 ) geometryData.type = 'lines';\n\n\t\tthis.currentLayer.geometry = geometryData;\n\n\t}\n\n\t// Lists the tag strings that can be associated with polygons by the PTAG chunk.\n\t// TAGS { tag-string[S0] * }\n\tparseTagStrings( length ) {\n\n\t\tthis.tree.tags = this.reader.getStringArray( length );\n\n\t}\n\n\t// Associates tags of a given type with polygons in the most recent POLS chunk.\n\t// PTAG { type[ID4], ( poly[VX], tag[U2] ) * }\n\tparsePolygonTagMapping( length ) {\n\n\t\tvar finalOffset = this.reader.offset + length;\n\t\tvar type = this.reader.getIDTag();\n\t\tif ( type === 'SURF' ) this.parseMaterialIndices( finalOffset );\n\t\telse { //PART, SMGP, COLR not supported\n\n\t\t\tthis.reader.skip( length - 4 );\n\n\t\t}\n\n\t}\n\n\tparseMaterialIndices( finalOffset ) {\n\n\t\t// array holds polygon index followed by material index\n\t\tthis.currentLayer.geometry.materialIndices = [];\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tvar polygonIndex = this.reader.getVariableLengthIndex();\n\t\t\tvar materialIndex = this.reader.getUint16();\n\n\t\t\tthis.currentLayer.geometry.materialIndices.push( polygonIndex, materialIndex );\n\n\t\t}\n\n\t}\n\n\tparseUnknownCHUNK( blockID, length ) {\n\n\t\tconsole.warn( 'LWOLoader: unknown chunk type: ' + blockID + ' length: ' + length );\n\n\t\t// print the chunk plus some bytes padding either side\n\t\t// printBuffer( this.reader.dv.buffer, this.reader.offset - 20, length + 40 );\n\n\t\tvar data = this.reader.getString( length );\n\n\t\tthis.currentForm[ blockID ] = data;\n\n\t}\n\n}\n\n\nclass DataViewReader {\n\n\tconstructor( buffer ) {\n\n\t\tthis.dv = new DataView( buffer );\n\t\tthis.offset = 0;\n\t\tthis._textDecoder = new TextDecoder();\n\t\tthis._bytes = new Uint8Array( buffer );\n\n\t}\n\n\tsize() {\n\n\t\treturn this.dv.buffer.byteLength;\n\n\t}\n\n\tsetOffset( offset ) {\n\n\t\tif ( offset > 0 && offset < this.dv.buffer.byteLength ) {\n\n\t\t\tthis.offset = offset;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'LWOLoader: invalid buffer offset' );\n\n\t\t}\n\n\t}\n\n\tendOfFile() {\n\n\t\tif ( this.offset >= this.size() ) return true;\n\t\treturn false;\n\n\t}\n\n\tskip( length ) {\n\n\t\tthis.offset += length;\n\n\t}\n\n\tgetUint8() {\n\n\t\tvar value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t}\n\n\tgetUint16() {\n\n\t\tvar value = this.dv.getUint16( this.offset );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t}\n\n\tgetInt32() {\n\n\t\tvar value = this.dv.getInt32( this.offset, false );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetUint32() {\n\n\t\tvar value = this.dv.getUint32( this.offset, false );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetUint64() {\n\n\t\tvar low, high;\n\n\t\thigh = this.getUint32();\n\t\tlow = this.getUint32();\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetFloat32() {\n\n\t\tvar value = this.dv.getFloat32( this.offset, false );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetFloat32Array( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetFloat64() {\n\n\t\tvar value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t}\n\n\tgetFloat64Array( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\t// get variable-length index data type\n\t// VX ::= index[U2] | (index + 0xFF000000)[U4]\n\t// If the index value is less than 65,280 (0xFF00),then VX === U2\n\t// otherwise VX === U4 with bits 24-31 set\n\t// When reading an index, if the first byte encountered is 255 (0xFF), then\n\t// the four-byte form is being used and the first byte should be discarded or masked out.\n\tgetVariableLengthIndex() {\n\n\t\tvar firstByte = this.getUint8();\n\n\t\tif ( firstByte === 255 ) {\n\n\t\t\treturn this.getUint8() * 65536 + this.getUint8() * 256 + this.getUint8();\n\n\t\t}\n\n\t\treturn firstByte * 256 + this.getUint8();\n\n\t}\n\n\t// An ID tag is a sequence of 4 bytes containing 7-bit ASCII values\n\tgetIDTag() {\n\n\t\treturn this.getString( 4 );\n\n\t}\n\n\tgetString( size ) {\n\n\t\tif ( size === 0 ) return;\n\n\t\tconst start = this.offset;\n\n\t\tlet result;\n\t\tlet length;\n\n\t\tif ( size ) {\n\n\t\t\tlength = size;\n\t\t\tresult = this._textDecoder.decode( new Uint8Array( this.dv.buffer, start, size ) );\n\n\t\t} else {\n\n\t\t\t// use 1:1 mapping of buffer to avoid redundant new array creation.\n\t\t\tlength = this._bytes.indexOf( 0, start ) - start;\n\n\t\t\tresult = this._textDecoder.decode( new Uint8Array( this.dv.buffer, start, length ) );\n\n\t\t\t// account for null byte in length\n\t\t\tlength ++;\n\n\t\t\t// if string with terminating nullbyte is uneven, extra nullbyte is added, skip that too\n\t\t\tlength += length % 2;\n\n\t\t}\n\n\t\tthis.skip( length );\n\n\t\treturn result;\n\n\t}\n\n\tgetStringArray( size ) {\n\n\t\tvar a = this.getString( size );\n\t\ta = a.split( '\\0' );\n\n\t\treturn a.filter( Boolean ); // return array with any empty strings removed\n\n\t}\n\n}\n\n\n// ************** DEBUGGER **************\n\nclass Debugger {\n\n\tconstructor() {\n\n\t\tthis.active = false;\n\t\tthis.depth = 0;\n\t\tthis.formList = [];\n\n\t}\n\n\tenable() {\n\n\t\tthis.active = true;\n\n\t}\n\n\tlog() {\n\n\t\tif ( ! this.active ) return;\n\n\t\tvar nodeType;\n\n\t\tswitch ( this.node ) {\n\n\t\t\tcase 0:\n\t\t\t\tnodeType = 'FORM';\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\tnodeType = 'CHK';\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\tnodeType = 'S-CHK';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconsole.log(\n\t\t\t'| '.repeat( this.depth ) +\n\t\t\tnodeType,\n\t\t\tthis.nodeID,\n\t\t\t`( ${this.offset} ) -> ( ${this.dataOffset + this.length} )`,\n\t\t\t( ( this.node == 0 ) ? ' {' : '' ),\n\t\t\t( ( this.skipped ) ? 'SKIPPED' : '' ),\n\t\t\t( ( this.node == 0 && this.skipped ) ? '}' : '' )\n\t\t);\n\n\t\tif ( this.node == 0 && ! this.skipped ) {\n\n\t\t\tthis.depth += 1;\n\t\t\tthis.formList.push( this.dataOffset + this.length );\n\n\t\t}\n\n\t\tthis.skipped = false;\n\n\t}\n\n\tcloseForms() {\n\n\t\tif ( ! this.active ) return;\n\n\t\tfor ( var i = this.formList.length - 1; i >= 0; i -- ) {\n\n\t\t\tif ( this.offset >= this.formList[ i ] ) {\n\n\t\t\t\tthis.depth -= 1;\n\t\t\t\tconsole.log( '| '.repeat( this.depth ) + '}' );\n\t\t\t\tthis.formList.splice( - 1, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction isEven( num ) {\n\n\treturn num % 2;\n\n}\n\n// calculate the length of the string in the buffer\n// this will be string.length + nullbyte + optional padbyte to make the length even\nfunction stringOffset( string ) {\n\n\treturn string.length + 1 + ( isEven( string.length + 1 ) ? 1 : 0 );\n\n}\n\n// for testing purposes, dump buffer to console\n// printBuffer( this.reader.dv.buffer, this.reader.offset, length );\nfunction printBuffer( buffer, from, to ) {\n\n\tconsole.log( new TextDecoder().decode( new Uint8Array( buffer, from, to ) ) );\n\n}\n\nexport { IFFParser };\n", "/**\n * @version 1.1.1\n *\n * @desc Load files in LWO3 and LWO2 format on Three.js\n *\n * LWO3 format specification:\n * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html\n *\n * LWO2 format specification:\n * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html\n *\n **/\n\nimport {\n\tAddOperation,\n\tBackSide,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDoubleSide,\n\tEquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMesh,\n\tMeshPhongMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tPoints,\n\tPointsMaterial,\n\tRepeatWrapping,\n\tSRGBColorSpace,\n\tTextureLoader,\n\tVector2\n} from 'three';\n\nimport { IFFParser } from './lwo/IFFParser.js';\n\nlet _lwoTree;\n\nclass LWOLoader extends Loader {\n\n\tconstructor( manager, parameters = {} ) {\n\n\t\tsuper( manager );\n\n\t\tthis.resourcePath = ( parameters.resourcePath !== undefined ) ? parameters.resourcePath : '';\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? extractParentUrl( url, 'Objects' ) : scope.path;\n\n\t\t// give the mesh a default name based on the filename\n\t\tconst modelName = url.split( path ).pop().split( '.' )[ 0 ];\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t// console.time( 'Total parsing: ' );\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer, path, modelName ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t\t// console.timeEnd( 'Total parsing: ' );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( iffBuffer, path, modelName ) {\n\n\t\t_lwoTree = new IFFParser().parse( iffBuffer );\n\n\t\t// console.log( 'lwoTree', lwoTree );\n\n\t\tconst textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\treturn new LWOTreeParser( textureLoader ).parse( modelName );\n\n\t}\n\n}\n\n// Parse the lwoTree object\nclass LWOTreeParser {\n\n\tconstructor( textureLoader ) {\n\n\t\tthis.textureLoader = textureLoader;\n\n\t}\n\n\tparse( modelName ) {\n\n\t\tthis.materials = new MaterialParser( this.textureLoader ).parse();\n\t\tthis.defaultLayerName = modelName;\n\n\t\tthis.meshes = this.parseLayers();\n\n\t\treturn {\n\t\t\tmaterials: this.materials,\n\t\t\tmeshes: this.meshes,\n\t\t};\n\n\t}\n\n\tparseLayers() {\n\n\t\t// array of all meshes for building hierarchy\n\t\tconst meshes = [];\n\n\t\t// final array containing meshes with scene graph hierarchy set up\n\t\tconst finalMeshes = [];\n\n\t\tconst geometryParser = new GeometryParser();\n\n\t\tconst scope = this;\n\t\t_lwoTree.layers.forEach( function ( layer ) {\n\n\t\t\tconst geometry = geometryParser.parse( layer.geometry, layer );\n\n\t\t\tconst mesh = scope.parseMesh( geometry, layer );\n\n\t\t\tmeshes[ layer.number ] = mesh;\n\n\t\t\tif ( layer.parent === - 1 ) finalMeshes.push( mesh );\n\t\t\telse meshes[ layer.parent ].add( mesh );\n\n\n\t\t} );\n\n\t\tthis.applyPivots( finalMeshes );\n\n\t\treturn finalMeshes;\n\n\t}\n\n\tparseMesh( geometry, layer ) {\n\n\t\tlet mesh;\n\n\t\tconst materials = this.getMaterials( geometry.userData.matNames, layer.geometry.type );\n\n\t\tif ( layer.geometry.type === 'points' ) mesh = new Points( geometry, materials );\n\t\telse if ( layer.geometry.type === 'lines' ) mesh = new LineSegments( geometry, materials );\n\t\telse mesh = new Mesh( geometry, materials );\n\n\t\tif ( layer.name ) mesh.name = layer.name;\n\t\telse mesh.name = this.defaultLayerName + '_layer_' + layer.number;\n\n\t\tmesh.userData.pivot = layer.pivot;\n\n\t\treturn mesh;\n\n\t}\n\n\t// TODO: may need to be reversed in z to convert LWO to three.js coordinates\n\tapplyPivots( meshes ) {\n\n\t\tmeshes.forEach( function ( mesh ) {\n\n\t\t\tmesh.traverse( function ( child ) {\n\n\t\t\t\tconst pivot = child.userData.pivot;\n\n\t\t\t\tchild.position.x += pivot[ 0 ];\n\t\t\t\tchild.position.y += pivot[ 1 ];\n\t\t\t\tchild.position.z += pivot[ 2 ];\n\n\t\t\t\tif ( child.parent ) {\n\n\t\t\t\t\tconst parentPivot = child.parent.userData.pivot;\n\n\t\t\t\t\tchild.position.x -= parentPivot[ 0 ];\n\t\t\t\t\tchild.position.y -= parentPivot[ 1 ];\n\t\t\t\t\tchild.position.z -= parentPivot[ 2 ];\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tgetMaterials( namesArray, type ) {\n\n\t\tconst materials = [];\n\n\t\tconst scope = this;\n\n\t\tnamesArray.forEach( function ( name, i ) {\n\n\t\t\tmaterials[ i ] = scope.getMaterialByName( name );\n\n\t\t} );\n\n\t\t// convert materials to line or point mats if required\n\t\tif ( type === 'points' || type === 'lines' ) {\n\n\t\t\tmaterials.forEach( function ( mat, i ) {\n\n\t\t\t\tconst spec = {\n\t\t\t\t\tcolor: mat.color,\n\t\t\t\t};\n\n\t\t\t\tif ( type === 'points' ) {\n\n\t\t\t\t\tspec.size = 0.1;\n\t\t\t\t\tspec.map = mat.map;\n\t\t\t\t\tmaterials[ i ] = new PointsMaterial( spec );\n\n\t\t\t\t} else if ( type === 'lines' ) {\n\n\t\t\t\t\tmaterials[ i ] = new LineBasicMaterial( spec );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// if there is only one material, return that directly instead of array\n\t\tconst filtered = materials.filter( Boolean );\n\t\tif ( filtered.length === 1 ) return filtered[ 0 ];\n\n\t\treturn materials;\n\n\t}\n\n\tgetMaterialByName( name ) {\n\n\t\treturn this.materials.filter( function ( m ) {\n\n\t\t\treturn m.name === name;\n\n\t\t} )[ 0 ];\n\n\t}\n\n}\n\nclass MaterialParser {\n\n\tconstructor( textureLoader ) {\n\n\t\tthis.textureLoader = textureLoader;\n\n\t}\n\n\tparse() {\n\n\t\tconst materials = [];\n\t\tthis.textures = {};\n\n\t\tfor ( const name in _lwoTree.materials ) {\n\n\t\t\tif ( _lwoTree.format === 'LWO3' ) {\n\n\t\t\t\tmaterials.push( this.parseMaterial( _lwoTree.materials[ name ], name, _lwoTree.textures ) );\n\n\t\t\t} else if ( _lwoTree.format === 'LWO2' ) {\n\n\t\t\t\tmaterials.push( this.parseMaterialLwo2( _lwoTree.materials[ name ], name, _lwoTree.textures ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseMaterial( materialData, name, textures ) {\n\n\t\tlet params = {\n\t\t\tname: name,\n\t\t\tside: this.getSide( materialData.attributes ),\n\t\t\tflatShading: this.getSmooth( materialData.attributes ),\n\t\t};\n\n\t\tconst connections = this.parseConnections( materialData.connections, materialData.nodes );\n\n\t\tconst maps = this.parseTextureNodes( connections.maps );\n\n\t\tthis.parseAttributeImageMaps( connections.attributes, textures, maps, materialData.maps );\n\n\t\tconst attributes = this.parseAttributes( connections.attributes, maps );\n\n\t\tthis.parseEnvMap( connections, maps, attributes );\n\n\t\tparams = Object.assign( maps, params );\n\t\tparams = Object.assign( params, attributes );\n\n\t\tconst materialType = this.getMaterialType( connections.attributes );\n\n\t\tif ( materialType !== MeshPhongMaterial ) delete params.refractionRatio; // PBR materials do not support \"refractionRatio\"\n\n\t\treturn new materialType( params );\n\n\t}\n\n\tparseMaterialLwo2( materialData, name/*, textures*/ ) {\n\n\t\tlet params = {\n\t\t\tname: name,\n\t\t\tside: this.getSide( materialData.attributes ),\n\t\t\tflatShading: this.getSmooth( materialData.attributes ),\n\t\t};\n\n\t\tconst attributes = this.parseAttributes( materialData.attributes, {} );\n\t\tparams = Object.assign( params, attributes );\n\t\treturn new MeshPhongMaterial( params );\n\n\t}\n\n\t// Note: converting from left to right handed coords by switching x -> -x in vertices, and\n\t// then switching mat FrontSide -> BackSide\n\t// NB: this means that FrontSide and BackSide have been switched!\n\tgetSide( attributes ) {\n\n\t\tif ( ! attributes.side ) return BackSide;\n\n\t\tswitch ( attributes.side ) {\n\n\t\t\tcase 0:\n\t\t\tcase 1:\n\t\t\t\treturn BackSide;\n\t\t\tcase 2: return FrontSide;\n\t\t\tcase 3: return DoubleSide;\n\n\t\t}\n\n\t}\n\n\tgetSmooth( attributes ) {\n\n\t\tif ( ! attributes.smooth ) return true;\n\t\treturn ! attributes.smooth;\n\n\t}\n\n\tparseConnections( connections, nodes ) {\n\n\t\tconst materialConnections = {\n\t\t\tmaps: {}\n\t\t};\n\n\t\tconst inputName = connections.inputName;\n\t\tconst inputNodeName = connections.inputNodeName;\n\t\tconst nodeName = connections.nodeName;\n\n\t\tconst scope = this;\n\t\tinputName.forEach( function ( name, index ) {\n\n\t\t\tif ( name === 'Material' ) {\n\n\t\t\t\tconst matNode = scope.getNodeByRefName( inputNodeName[ index ], nodes );\n\t\t\t\tmaterialConnections.attributes = matNode.attributes;\n\t\t\t\tmaterialConnections.envMap = matNode.fileName;\n\t\t\t\tmaterialConnections.name = inputNodeName[ index ];\n\n\t\t\t}\n\n\t\t} );\n\n\t\tnodeName.forEach( function ( name, index ) {\n\n\t\t\tif ( name === materialConnections.name ) {\n\n\t\t\t\tmaterialConnections.maps[ inputName[ index ] ] = scope.getNodeByRefName( inputNodeName[ index ], nodes );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn materialConnections;\n\n\t}\n\n\tgetNodeByRefName( refName, nodes ) {\n\n\t\tfor ( const name in nodes ) {\n\n\t\t\tif ( nodes[ name ].refName === refName ) return nodes[ name ];\n\n\t\t}\n\n\t}\n\n\tparseTextureNodes( textureNodes ) {\n\n\t\tconst maps = {};\n\n\t\tfor ( const name in textureNodes ) {\n\n\t\t\tconst node = textureNodes[ name ];\n\t\t\tconst path = node.fileName;\n\n\t\t\tif ( ! path ) return;\n\n\t\t\tconst texture = this.loadTexture( path );\n\n\t\t\tif ( node.widthWrappingMode !== undefined ) texture.wrapS = this.getWrappingType( node.widthWrappingMode );\n\t\t\tif ( node.heightWrappingMode !== undefined ) texture.wrapT = this.getWrappingType( node.heightWrappingMode );\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'Color':\n\t\t\t\t\tmaps.map = texture;\n\t\t\t\t\tmaps.map.colorSpace = SRGBColorSpace;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Roughness':\n\t\t\t\t\tmaps.roughnessMap = texture;\n\t\t\t\t\tmaps.roughness = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Specular':\n\t\t\t\t\tmaps.specularMap = texture;\n\t\t\t\t\tmaps.specularMap.colorSpace = SRGBColorSpace;\n\t\t\t\t\tmaps.specular = 0xffffff;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Luminous':\n\t\t\t\t\tmaps.emissiveMap = texture;\n\t\t\t\t\tmaps.emissiveMap.colorSpace = SRGBColorSpace;\n\t\t\t\t\tmaps.emissive = 0x808080;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Luminous Color':\n\t\t\t\t\tmaps.emissive = 0x808080;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Metallic':\n\t\t\t\t\tmaps.metalnessMap = texture;\n\t\t\t\t\tmaps.metalness = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Transparency':\n\t\t\t\tcase 'Alpha':\n\t\t\t\t\tmaps.alphaMap = texture;\n\t\t\t\t\tmaps.transparent = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Normal':\n\t\t\t\t\tmaps.normalMap = texture;\n\t\t\t\t\tif ( node.amplitude !== undefined ) maps.normalScale = new Vector2( node.amplitude, node.amplitude );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Bump':\n\t\t\t\t\tmaps.bumpMap = texture;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// LWO BSDF materials can have both spec and rough, but this is not valid in three\n\t\tif ( maps.roughnessMap && maps.specularMap ) delete maps.specularMap;\n\n\t\treturn maps;\n\n\t}\n\n\t// maps can also be defined on individual material attributes, parse those here\n\t// This occurs on Standard (Phong) surfaces\n\tparseAttributeImageMaps( attributes, textures, maps ) {\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tif ( attribute.maps ) {\n\n\t\t\t\tconst mapData = attribute.maps[ 0 ];\n\n\t\t\t\tconst path = this.getTexturePathByIndex( mapData.imageIndex, textures );\n\t\t\t\tif ( ! path ) return;\n\n\t\t\t\tconst texture = this.loadTexture( path );\n\n\t\t\t\tif ( mapData.wrap !== undefined ) texture.wrapS = this.getWrappingType( mapData.wrap.w );\n\t\t\t\tif ( mapData.wrap !== undefined ) texture.wrapT = this.getWrappingType( mapData.wrap.h );\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'Color':\n\t\t\t\t\t\tmaps.map = texture;\n\t\t\t\t\t\tmaps.map.colorSpace = SRGBColorSpace;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Diffuse':\n\t\t\t\t\t\tmaps.aoMap = texture;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Roughness':\n\t\t\t\t\t\tmaps.roughnessMap = texture;\n\t\t\t\t\t\tmaps.roughness = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Specular':\n\t\t\t\t\t\tmaps.specularMap = texture;\n\t\t\t\t\t\tmaps.specularMap.colorSpace = SRGBColorSpace;\n\t\t\t\t\t\tmaps.specular = 0xffffff;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Luminosity':\n\t\t\t\t\t\tmaps.emissiveMap = texture;\n\t\t\t\t\t\tmaps.emissiveMap.colorSpace = SRGBColorSpace;\n\t\t\t\t\t\tmaps.emissive = 0x808080;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Metallic':\n\t\t\t\t\t\tmaps.metalnessMap = texture;\n\t\t\t\t\t\tmaps.metalness = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Transparency':\n\t\t\t\t\tcase 'Alpha':\n\t\t\t\t\t\tmaps.alphaMap = texture;\n\t\t\t\t\t\tmaps.transparent = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Normal':\n\t\t\t\t\t\tmaps.normalMap = texture;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Bump':\n\t\t\t\t\t\tmaps.bumpMap = texture;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tparseAttributes( attributes, maps ) {\n\n\t\tconst params = {};\n\n\t\t// don't use color data if color map is present\n\t\tif ( attributes.Color && ! maps.map ) {\n\n\t\t\tparams.color = new Color().fromArray( attributes.Color.value );\n\n\t\t} else {\n\n\t\t\tparams.color = new Color();\n\n\t\t}\n\n\n\t\tif ( attributes.Transparency && attributes.Transparency.value !== 0 ) {\n\n\t\t\tparams.opacity = 1 - attributes.Transparency.value;\n\t\t\tparams.transparent = true;\n\n\t\t}\n\n\t\tif ( attributes[ 'Bump Height' ] ) params.bumpScale = attributes[ 'Bump Height' ].value * 0.1;\n\n\t\tthis.parsePhysicalAttributes( params, attributes, maps );\n\t\tthis.parseStandardAttributes( params, attributes, maps );\n\t\tthis.parsePhongAttributes( params, attributes, maps );\n\n\t\treturn params;\n\n\t}\n\n\tparsePhysicalAttributes( params, attributes/*, maps*/ ) {\n\n\t\tif ( attributes.Clearcoat && attributes.Clearcoat.value > 0 ) {\n\n\t\t\tparams.clearcoat = attributes.Clearcoat.value;\n\n\t\t\tif ( attributes[ 'Clearcoat Gloss' ] ) {\n\n\t\t\t\tparams.clearcoatRoughness = 0.5 * ( 1 - attributes[ 'Clearcoat Gloss' ].value );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tparseStandardAttributes( params, attributes, maps ) {\n\n\n\t\tif ( attributes.Luminous ) {\n\n\t\t\tparams.emissiveIntensity = attributes.Luminous.value;\n\n\t\t\tif ( attributes[ 'Luminous Color' ] && ! maps.emissive ) {\n\n\t\t\t\tparams.emissive = new Color().fromArray( attributes[ 'Luminous Color' ].value );\n\n\t\t\t} else {\n\n\t\t\t\tparams.emissive = new Color( 0x808080 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( attributes.Roughness && ! maps.roughnessMap ) params.roughness = attributes.Roughness.value;\n\t\tif ( attributes.Metallic && ! maps.metalnessMap ) params.metalness = attributes.Metallic.value;\n\n\t}\n\n\tparsePhongAttributes( params, attributes, maps ) {\n\n\t\tif ( attributes[ 'Refraction Index' ] ) params.refractionRatio = 0.98 / attributes[ 'Refraction Index' ].value;\n\n\t\tif ( attributes.Diffuse ) params.color.multiplyScalar( attributes.Diffuse.value );\n\n\t\tif ( attributes.Reflection ) {\n\n\t\t\tparams.reflectivity = attributes.Reflection.value;\n\t\t\tparams.combine = AddOperation;\n\n\t\t}\n\n\t\tif ( attributes.Luminosity ) {\n\n\t\t\tparams.emissiveIntensity = attributes.Luminosity.value;\n\n\t\t\tif ( ! maps.emissiveMap && ! maps.map ) {\n\n\t\t\t\tparams.emissive = params.color;\n\n\t\t\t} else {\n\n\t\t\t\tparams.emissive = new Color( 0x808080 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse specular if there is no roughness - we will interpret the material as 'Phong' in this case\n\t\tif ( ! attributes.Roughness && attributes.Specular && ! maps.specularMap ) {\n\n\t\t\tif ( attributes[ 'Color Highlight' ] ) {\n\n\t\t\t\tparams.specular = new Color().setScalar( attributes.Specular.value ).lerp( params.color.clone().multiplyScalar( attributes.Specular.value ), attributes[ 'Color Highlight' ].value );\n\n\t\t\t} else {\n\n\t\t\t\tparams.specular = new Color().setScalar( attributes.Specular.value );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( params.specular && attributes.Glossiness ) params.shininess = 7 + Math.pow( 2, attributes.Glossiness.value * 12 + 2 );\n\n\t}\n\n\tparseEnvMap( connections, maps, attributes ) {\n\n\t\tif ( connections.envMap ) {\n\n\t\t\tconst envMap = this.loadTexture( connections.envMap );\n\n\t\t\tif ( attributes.transparent && attributes.opacity < 0.999 ) {\n\n\t\t\t\tenvMap.mapping = EquirectangularRefractionMapping;\n\n\t\t\t\t// Reflectivity and refraction mapping don't work well together in Phong materials\n\t\t\t\tif ( attributes.reflectivity !== undefined ) {\n\n\t\t\t\t\tdelete attributes.reflectivity;\n\t\t\t\t\tdelete attributes.combine;\n\n\t\t\t\t}\n\n\t\t\t\tif ( attributes.metalness !== undefined ) {\n\n\t\t\t\t\tattributes.metalness = 1; // For most transparent materials metalness should be set to 1 if not otherwise defined. If set to 0 no refraction will be visible\n\n\t\t\t\t}\n\n\t\t\t\tattributes.opacity = 1; // transparency fades out refraction, forcing opacity to 1 ensures a closer visual match to the material in Lightwave.\n\n\t\t\t} else envMap.mapping = EquirectangularReflectionMapping;\n\n\t\t\tmaps.envMap = envMap;\n\n\t\t}\n\n\t}\n\n\t// get texture defined at top level by its index\n\tgetTexturePathByIndex( index ) {\n\n\t\tlet fileName = '';\n\n\t\tif ( ! _lwoTree.textures ) return fileName;\n\n\t\t_lwoTree.textures.forEach( function ( texture ) {\n\n\t\t\tif ( texture.index === index ) fileName = texture.fileName;\n\n\t\t} );\n\n\t\treturn fileName;\n\n\t}\n\n\tloadTexture( path ) {\n\n\t\tif ( ! path ) return null;\n\n\t\tconst texture = this.textureLoader.load(\n\t\t\tpath,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfunction () {\n\n\t\t\t\tconsole.warn( 'LWOLoader: non-standard resource hierarchy. Use \\`resourcePath\\` parameter to specify root content directory.' );\n\n\t\t\t}\n\t\t);\n\n\t\treturn texture;\n\n\t}\n\n\t// 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n\tgetWrappingType( num ) {\n\n\t\tswitch ( num ) {\n\n\t\t\tcase 0:\n\t\t\t\tconsole.warn( 'LWOLoader: \"Reset\" texture wrapping type is not supported in three.js' );\n\t\t\t\treturn ClampToEdgeWrapping;\n\t\t\tcase 1: return RepeatWrapping;\n\t\t\tcase 2: return MirroredRepeatWrapping;\n\t\t\tcase 3: return ClampToEdgeWrapping;\n\n\t\t}\n\n\t}\n\n\tgetMaterialType( nodeData ) {\n\n\t\tif ( nodeData.Clearcoat && nodeData.Clearcoat.value > 0 ) return MeshPhysicalMaterial;\n\t\tif ( nodeData.Roughness ) return MeshStandardMaterial;\n\t\treturn MeshPhongMaterial;\n\n\t}\n\n}\n\nclass GeometryParser {\n\n\tparse( geoData, layer ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( geoData.points, 3 ) );\n\n\t\tconst indices = this.splitIndices( geoData.vertexIndices, geoData.polygonDimensions );\n\t\tgeometry.setIndex( indices );\n\n\t\tthis.parseGroups( geometry, geoData );\n\n\t\tgeometry.computeVertexNormals();\n\n\t\tthis.parseUVs( geometry, layer, indices );\n\t\tthis.parseMorphTargets( geometry, layer, indices );\n\n\t\t// TODO: z may need to be reversed to account for coordinate system change\n\t\tgeometry.translate( - layer.pivot[ 0 ], - layer.pivot[ 1 ], - layer.pivot[ 2 ] );\n\n\t\t// let userData = geometry.userData;\n\t\t// geometry = geometry.toNonIndexed()\n\t\t// geometry.userData = userData;\n\n\t\treturn geometry;\n\n\t}\n\n\t// split quads into tris\n\tsplitIndices( indices, polygonDimensions ) {\n\n\t\tconst remappedIndices = [];\n\n\t\tlet i = 0;\n\t\tpolygonDimensions.forEach( function ( dim ) {\n\n\t\t\tif ( dim < 4 ) {\n\n\t\t\t\tfor ( let k = 0; k < dim; k ++ ) remappedIndices.push( indices[ i + k ] );\n\n\t\t\t} else if ( dim === 4 ) {\n\n\t\t\t\tremappedIndices.push(\n\t\t\t\t\tindices[ i ],\n\t\t\t\t\tindices[ i + 1 ],\n\t\t\t\t\tindices[ i + 2 ],\n\n\t\t\t\t\tindices[ i ],\n\t\t\t\t\tindices[ i + 2 ],\n\t\t\t\t\tindices[ i + 3 ]\n\n\t\t\t\t);\n\n\t\t\t} else if ( dim > 4 ) {\n\n\t\t\t\tfor ( let k = 1; k < dim - 1; k ++ ) {\n\n\t\t\t\t\tremappedIndices.push( indices[ i ], indices[ i + k ], indices[ i + k + 1 ] );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'LWOLoader: polygons with greater than 4 sides are not supported' );\n\n\t\t\t}\n\n\t\t\ti += dim;\n\n\t\t} );\n\n\t\treturn remappedIndices;\n\n\t}\n\n\t// NOTE: currently ignoring poly indices and assuming that they are intelligently ordered\n\tparseGroups( geometry, geoData ) {\n\n\t\tconst tags = _lwoTree.tags;\n\t\tconst matNames = [];\n\n\t\tlet elemSize = 3;\n\t\tif ( geoData.type === 'lines' ) elemSize = 2;\n\t\tif ( geoData.type === 'points' ) elemSize = 1;\n\n\t\tconst remappedIndices = this.splitMaterialIndices( geoData.polygonDimensions, geoData.materialIndices );\n\n\t\tlet indexNum = 0; // create new indices in numerical order\n\t\tconst indexPairs = {}; // original indices mapped to numerical indices\n\n\t\tlet prevMaterialIndex;\n\t\tlet materialIndex;\n\n\t\tlet prevStart = 0;\n\t\tlet currentCount = 0;\n\n\t\tfor ( let i = 0; i < remappedIndices.length; i += 2 ) {\n\n\t\t\tmaterialIndex = remappedIndices[ i + 1 ];\n\n\t\t\tif ( i === 0 ) matNames[ indexNum ] = tags[ materialIndex ];\n\n\t\t\tif ( prevMaterialIndex === undefined ) prevMaterialIndex = materialIndex;\n\n\t\t\tif ( materialIndex !== prevMaterialIndex ) {\n\n\t\t\t\tlet currentIndex;\n\t\t\t\tif ( indexPairs[ tags[ prevMaterialIndex ] ] ) {\n\n\t\t\t\t\tcurrentIndex = indexPairs[ tags[ prevMaterialIndex ] ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentIndex = indexNum;\n\t\t\t\t\tindexPairs[ tags[ prevMaterialIndex ] ] = indexNum;\n\t\t\t\t\tmatNames[ indexNum ] = tags[ prevMaterialIndex ];\n\t\t\t\t\tindexNum ++;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addGroup( prevStart, currentCount, currentIndex );\n\n\t\t\t\tprevStart += currentCount;\n\n\t\t\t\tprevMaterialIndex = materialIndex;\n\t\t\t\tcurrentCount = 0;\n\n\t\t\t}\n\n\t\t\tcurrentCount += elemSize;\n\n\t\t}\n\n\t\t// the loop above doesn't add the last group, do that here.\n\t\tif ( geometry.groups.length > 0 ) {\n\n\t\t\tlet currentIndex;\n\t\t\tif ( indexPairs[ tags[ materialIndex ] ] ) {\n\n\t\t\t\tcurrentIndex = indexPairs[ tags[ materialIndex ] ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentIndex = indexNum;\n\t\t\t\tindexPairs[ tags[ materialIndex ] ] = indexNum;\n\t\t\t\tmatNames[ indexNum ] = tags[ materialIndex ];\n\n\t\t\t}\n\n\t\t\tgeometry.addGroup( prevStart, currentCount, currentIndex );\n\n\t\t}\n\n\t\t// Mat names from TAGS chunk, used to build up an array of materials for this geometry\n\t\tgeometry.userData.matNames = matNames;\n\n\t}\n\n\tsplitMaterialIndices( polygonDimensions, indices ) {\n\n\t\tconst remappedIndices = [];\n\n\t\tpolygonDimensions.forEach( function ( dim, i ) {\n\n\t\t\tif ( dim <= 3 ) {\n\n\t\t\t\tremappedIndices.push( indices[ i * 2 ], indices[ i * 2 + 1 ] );\n\n\t\t\t} else if ( dim === 4 ) {\n\n\t\t\t\tremappedIndices.push( indices[ i * 2 ], indices[ i * 2 + 1 ], indices[ i * 2 ], indices[ i * 2 + 1 ] );\n\n\t\t\t} else {\n\n\t\t\t\t // ignore > 4 for now\n\t\t\t\tfor ( let k = 0; k < dim - 2; k ++ ) {\n\n\t\t\t\t\tremappedIndices.push( indices[ i * 2 ], indices[ i * 2 + 1 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn remappedIndices;\n\n\t}\n\n\t// UV maps:\n\t// 1: are defined via index into an array of points, not into a geometry\n\t// - the geometry is also defined by an index into this array, but the indexes may not match\n\t// 2: there can be any number of UV maps for a single geometry. Here these are combined,\n\t// \twith preference given to the first map encountered\n\t// 3: UV maps can be partial - that is, defined for only a part of the geometry\n\t// 4: UV maps can be VMAP or VMAD (discontinuous, to allow for seams). In practice, most\n\t// UV maps are defined as partially VMAP and partially VMAD\n\t// VMADs are currently not supported\n\tparseUVs( geometry, layer ) {\n\n\t\t// start by creating a UV map set to zero for the whole geometry\n\t\tconst remappedUVs = Array.from( Array( geometry.attributes.position.count * 2 ), function () {\n\n\t\t\treturn 0;\n\n\t\t} );\n\n\t\tfor ( const name in layer.uvs ) {\n\n\t\t\tconst uvs = layer.uvs[ name ].uvs;\n\t\t\tconst uvIndices = layer.uvs[ name ].uvIndices;\n\n\t\t\tuvIndices.forEach( function ( i, j ) {\n\n\t\t\t\tremappedUVs[ i * 2 ] = uvs[ j * 2 ];\n\t\t\t\tremappedUVs[ i * 2 + 1 ] = uvs[ j * 2 + 1 ];\n\n\t\t\t} );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( remappedUVs, 2 ) );\n\n\t}\n\n\tparseMorphTargets( geometry, layer ) {\n\n\t\tlet num = 0;\n\t\tfor ( const name in layer.morphTargets ) {\n\n\t\t\tconst remappedPoints = geometry.attributes.position.array.slice();\n\n\t\t\tif ( ! geometry.morphAttributes.position ) geometry.morphAttributes.position = [];\n\n\t\t\tconst morphPoints = layer.morphTargets[ name ].points;\n\t\t\tconst morphIndices = layer.morphTargets[ name ].indices;\n\t\t\tconst type = layer.morphTargets[ name ].type;\n\n\t\t\tmorphIndices.forEach( function ( i, j ) {\n\n\t\t\t\tif ( type === 'relative' ) {\n\n\t\t\t\t\tremappedPoints[ i * 3 ] += morphPoints[ j * 3 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 1 ] += morphPoints[ j * 3 + 1 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 2 ] += morphPoints[ j * 3 + 2 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tremappedPoints[ i * 3 ] = morphPoints[ j * 3 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 1 ] = morphPoints[ j * 3 + 1 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 2 ] = morphPoints[ j * 3 + 2 ];\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tgeometry.morphAttributes.position[ num ] = new Float32BufferAttribute( remappedPoints, 3 );\n\t\t\tgeometry.morphAttributes.position[ num ].name = name;\n\n\t\t\tnum ++;\n\n\t\t}\n\n\t\tgeometry.morphTargetsRelative = false;\n\n\t}\n\n}\n\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction extractParentUrl( url, dir ) {\n\n\tconst index = url.indexOf( dir );\n\n\tif ( index === - 1 ) return './';\n\n\treturn url.slice( 0, index );\n\n}\n\nexport { LWOLoader };\n", "import {\n\tDataUtils,\n\tDataTextureLoader,\n\tFloatType,\n\tHalfFloatType,\n\tRGBAFormat\n} from 'three';\n\nclass LogLuvLoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst ifds = UTIF.decode( buffer );\n\t\tUTIF.decodeImage( buffer, ifds[ 0 ] );\n\t\tconst rgba = UTIF.toRGBA( ifds[ 0 ], this.type );\n\n\t\treturn {\n\t\t\twidth: ifds[ 0 ].width,\n\t\t\theight: ifds[ 0 ].height,\n\t\t\tdata: rgba,\n\t\t\tformat: RGBAFormat,\n\t\t\ttype: this.type,\n\t\t\tflipY: true\n\t\t};\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n}\n\n// from https://github.com/photopea/UTIF.js (MIT License)\n\nconst UTIF = {};\n\nUTIF.decode = function ( buff, prm ) {\n\n\tif ( prm == null ) prm = { parseMN: true, debug: false }; // read MakerNote, debug\n\tvar data = new Uint8Array( buff ), offset = 0;\n\n\tvar id = UTIF._binBE.readASCII( data, offset, 2 ); offset += 2;\n\tvar bin = id == 'II' ? UTIF._binLE : UTIF._binBE;\n\tbin.readUshort( data, offset ); offset += 2;\n\n\tvar ifdo = bin.readUint( data, offset );\n\tvar ifds = [];\n\twhile ( true ) {\n\n\t\tvar cnt = bin.readUshort( data, ifdo ), typ = bin.readUshort( data, ifdo + 4 ); if ( cnt != 0 ) if ( typ < 1 || 13 < typ ) {\n\n\t\t\tconsole.log( 'error in TIFF' ); break;\n\n\t\t}\n\n\n\t\tUTIF._readIFD( bin, data, ifdo, ifds, 0, prm );\n\n\t\tifdo = bin.readUint( data, ifdo + 2 + cnt * 12 );\n\t\tif ( ifdo == 0 ) break;\n\n\t}\n\n\treturn ifds;\n\n};\n\nUTIF.decodeImage = function ( buff, img, ifds ) {\n\n\tif ( img.data ) return;\n\tvar data = new Uint8Array( buff );\n\tvar id = UTIF._binBE.readASCII( data, 0, 2 );\n\n\tif ( img[ 't256' ] == null ) return;\t// No width => probably not an image\n\timg.isLE = id == 'II';\n\timg.width = img[ 't256' ][ 0 ]; //delete img[\"t256\"];\n\timg.height = img[ 't257' ][ 0 ]; //delete img[\"t257\"];\n\n\tvar cmpr = img[ 't259' ] ? img[ 't259' ][ 0 ] : 1; //delete img[\"t259\"];\n\tvar fo = img[ 't266' ] ? img[ 't266' ][ 0 ] : 1; //delete img[\"t266\"];\n\tif ( img[ 't284' ] && img[ 't284' ][ 0 ] == 2 ) console.log( 'PlanarConfiguration 2 should not be used!' );\n\tif ( cmpr == 7 && img[ 't258' ] && img[ 't258' ].length > 3 ) img[ 't258' ] = img[ 't258' ].slice( 0, 3 );\n\n\tvar bipp; // bits per pixel\n\tif ( img[ 't258' ] ) bipp = Math.min( 32, img[ 't258' ][ 0 ] ) * img[ 't258' ].length;\n\telse bipp = ( img[ 't277' ] ? img[ 't277' ][ 0 ] : 1 );\n\t// Some .NEF files have t258==14, even though they use 16 bits per pixel\n\tif ( cmpr == 1 && img[ 't279' ] != null && img[ 't278' ] && img[ 't262' ][ 0 ] == 32803 ) {\n\n\t\tbipp = Math.round( ( img[ 't279' ][ 0 ] * 8 ) / ( img.width * img[ 't278' ][ 0 ] ) );\n\n\t}\n\n\tvar bipl = Math.ceil( img.width * bipp / 8 ) * 8;\n\tvar soff = img[ 't273' ]; if ( soff == null ) soff = img[ 't324' ];\n\tvar bcnt = img[ 't279' ]; if ( cmpr == 1 && soff.length == 1 ) bcnt = [ img.height * ( bipl >>> 3 ) ]; if ( bcnt == null ) bcnt = img[ 't325' ];\n\t//bcnt[0] = Math.min(bcnt[0], data.length); // Hasselblad, \"RAW_HASSELBLAD_H3D39II.3FR\"\n\tvar bytes = new Uint8Array( img.height * ( bipl >>> 3 ) ), bilen = 0;\n\n\tif ( img[ 't322' ] != null ) {\n\n\t\tvar tw = img[ 't322' ][ 0 ], th = img[ 't323' ][ 0 ];\n\t\tvar tx = Math.floor( ( img.width + tw - 1 ) / tw );\n\t\tvar ty = Math.floor( ( img.height + th - 1 ) / th );\n\t\tvar tbuff = new Uint8Array( Math.ceil( tw * th * bipp / 8 ) | 0 );\n\t\tfor ( var y = 0; y < ty; y ++ )\n\t\t\tfor ( var x = 0; x < tx; x ++ ) {\n\n\t\t\t\tvar i = y * tx + x; for ( var j = 0; j < tbuff.length; j ++ ) tbuff[ j ] = 0;\n\t\t\t\tUTIF.decode._decompress( img, ifds, data, soff[ i ], bcnt[ i ], cmpr, tbuff, 0, fo );\n\t\t\t\t// Might be required for 7 too. Need to check\n\t\t\t\tif ( cmpr == 6 ) bytes = tbuff;\n\t\t\t\telse UTIF._copyTile( tbuff, Math.ceil( tw * bipp / 8 ) | 0, th, bytes, Math.ceil( img.width * bipp / 8 ) | 0, img.height, Math.ceil( x * tw * bipp / 8 ) | 0, y * th );\n\n\t\t\t}\n\n\t\tbilen = bytes.length * 8;\n\n\t} else {\n\n\t\tvar rps = img[ 't278' ] ? img[ 't278' ][ 0 ] : img.height; rps = Math.min( rps, img.height );\n\t\tfor ( var i = 0; i < soff.length; i ++ ) {\n\n\t\t\tUTIF.decode._decompress( img, ifds, data, soff[ i ], bcnt[ i ], cmpr, bytes, Math.ceil( bilen / 8 ) | 0, fo );\n\t\t\tbilen += bipl * rps;\n\n\t\t}\n\n\t\tbilen = Math.min( bilen, bytes.length * 8 );\n\n\t}\n\n\timg.data = new Uint8Array( bytes.buffer, 0, Math.ceil( bilen / 8 ) | 0 );\n\n};\n\nUTIF.decode._decompress = function ( img, ifds, data, off, len, cmpr, tgt, toff ) {\n\n\t//console.log(\"compression\", cmpr);\n\t//var time = Date.now();\n\tif ( cmpr == 34676 ) UTIF.decode._decodeLogLuv32( img, data, off, len, tgt, toff );\n\telse console.log( 'Unsupported compression', cmpr );\n\n\t//console.log(Date.now()-time);\n\n\tvar bps = ( img[ 't258' ] ? Math.min( 32, img[ 't258' ][ 0 ] ) : 1 );\n\tvar noc = ( img[ 't277' ] ? img[ 't277' ][ 0 ] : 1 ), bpp = ( bps * noc ) >>> 3, h = ( img[ 't278' ] ? img[ 't278' ][ 0 ] : img.height ), bpl = Math.ceil( bps * noc * img.width / 8 );\n\n\t// convert to Little Endian /*\n\tif ( bps == 16 && ! img.isLE && img[ 't33422' ] == null ) // not DNG\n\t\tfor ( var y = 0; y < h; y ++ ) {\n\n\t\t\t//console.log(\"fixing endianity\");\n\t\t\tvar roff = toff + y * bpl;\n\t\t\tfor ( var x = 1; x < bpl; x += 2 ) {\n\n\t\t\t\tvar t = tgt[ roff + x ]; tgt[ roff + x ] = tgt[ roff + x - 1 ]; tgt[ roff + x - 1 ] = t;\n\n\t\t\t}\n\n\t\t} //*/\n\n\tif ( img[ 't317' ] && img[ 't317' ][ 0 ] == 2 ) {\n\n\t\tfor ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar ntoff = toff + y * bpl;\n\t\t\tif ( bps == 16 ) for ( var j = bpp; j < bpl; j += 2 ) {\n\n\t\t\t\tvar nv = ( ( tgt[ ntoff + j + 1 ] << 8 ) | tgt[ ntoff + j ] ) + ( ( tgt[ ntoff + j - bpp + 1 ] << 8 ) | tgt[ ntoff + j - bpp ] );\n\t\t\t\ttgt[ ntoff + j ] = nv & 255; tgt[ ntoff + j + 1 ] = ( nv >>> 8 ) & 255;\n\n\t\t\t}\n\t\t\telse if ( noc == 3 ) for ( var j = 3; j < bpl; j += 3 ) {\n\n\t\t\t\ttgt[ ntoff + j ] = ( tgt[ ntoff + j ] + tgt[ ntoff + j - 3 ] ) & 255;\n\t\t\t\ttgt[ ntoff + j + 1 ] = ( tgt[ ntoff + j + 1 ] + tgt[ ntoff + j - 2 ] ) & 255;\n\t\t\t\ttgt[ ntoff + j + 2 ] = ( tgt[ ntoff + j + 2 ] + tgt[ ntoff + j - 1 ] ) & 255;\n\n\t\t\t}\n\t\t\telse for ( var j = bpp; j < bpl; j ++ ) tgt[ ntoff + j ] = ( tgt[ ntoff + j ] + tgt[ ntoff + j - bpp ] ) & 255;\n\n\t\t}\n\n\t}\n\n};\n\nUTIF.decode._decodeLogLuv32 = function ( img, data, off, len, tgt, toff ) {\n\n\tvar w = img.width, qw = w * 4;\n\tvar io = 0, out = new Uint8Array( qw );\n\n\twhile ( io < len ) {\n\n\t\tvar oo = 0;\n\t\twhile ( oo < qw ) {\n\n\t\t\tvar c = data[ off + io ]; io ++;\n\t\t\tif ( c < 128 ) {\n\n\t\t\t\tfor ( var j = 0; j < c; j ++ ) out[ oo + j ] = data[ off + io + j ]; oo += c; io += c;\n\n\t\t\t} else {\n\n\t\t\t\tc = c - 126; for ( var j = 0; j < c; j ++ ) out[ oo + j ] = data[ off + io ]; oo += c; io ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var x = 0; x < w; x ++ ) {\n\n\t\t\ttgt[ toff + 0 ] = out[ x ];\n\t\t\ttgt[ toff + 1 ] = out[ x + w ];\n\t\t\ttgt[ toff + 2 ] = out[ x + w * 2 ];\n\t\t\ttgt[ toff + 4 ] = out[ x + w * 3 ];\n\t\t\ttoff += 6;\n\n\t\t}\n\n\t}\n\n};\n\nUTIF.tags = {};\n//UTIF.ttypes = { 256:3,257:3,258:3, 259:3, 262:3, 273:4, 274:3, 277:3,278:4,279:4, 282:5, 283:5, 284:3, 286:5,287:5, 296:3, 305:2, 306:2, 338:3, 513:4, 514:4, 34665:4 };\n// start at tag 250\nUTIF._types = function () {\n\n\tvar main = new Array( 250 ); main.fill( 0 );\n\tmain = main.concat( [ 0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 2, 2, 2, 2, 4, 3, 0, 0, 3, 4, 4, 3, 3, 5, 5, 3, 2, 5, 5, 0, 0, 0, 0, 4, 4, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 5, 5, 3, 0, 3, 3, 4, 4, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] );\n\tvar rest = { 33432: 2, 33434: 5, 33437: 5, 34665: 4, 34850: 3, 34853: 4, 34855: 3, 34864: 3, 34866: 4, 36864: 7, 36867: 2, 36868: 2, 37121: 7, 37377: 10, 37378: 5, 37380: 10, 37381: 5, 37383: 3, 37384: 3, 37385: 3, 37386: 5, 37510: 7, 37520: 2, 37521: 2, 37522: 2, 40960: 7, 40961: 3, 40962: 4, 40963: 4, 40965: 4, 41486: 5, 41487: 5, 41488: 3, 41985: 3, 41986: 3, 41987: 3, 41988: 5, 41989: 3, 41990: 3, 41993: 3, 41994: 3, 41995: 7, 41996: 3, 42032: 2, 42033: 2, 42034: 5, 42036: 2, 42037: 2, 59932: 7 };\n\treturn {\n\t\tbasic: {\n\t\t\tmain: main,\n\t\t\trest: rest\n\t\t},\n\t\tgps: {\n\t\t\tmain: [ 1, 2, 5, 2, 5, 1, 5, 5, 0, 9 ],\n\t\t\trest: { 18: 2, 29: 2 }\n\t\t}\n\t};\n\n}();\n\nUTIF._readIFD = function ( bin, data, offset, ifds, depth, prm ) {\n\n\tvar cnt = bin.readUshort( data, offset ); offset += 2;\n\tvar ifd = {};\n\n\tif ( prm.debug ) console.log( ' '.repeat( depth ), ifds.length - 1, '>>>----------------' );\n\tfor ( var i = 0; i < cnt; i ++ ) {\n\n\t\tvar tag = bin.readUshort( data, offset ); offset += 2;\n\t\tvar type = bin.readUshort( data, offset ); offset += 2;\n\t\tvar num = bin.readUint( data, offset ); offset += 4;\n\t\tvar voff = bin.readUint( data, offset ); offset += 4;\n\n\t\tvar arr = [];\n\t\t//ifd[\"t\"+tag+\"-\"+UTIF.tags[tag]] = arr;\n\t\tif ( type == 1 || type == 7 ) {\n\n\t\t\tarr = new Uint8Array( data.buffer, ( num < 5 ? offset - 4 : voff ), num );\n\n\t\t}\n\n\t\tif ( type == 2 ) {\n\n\t\t\tvar o0 = ( num < 5 ? offset - 4 : voff ), c = data[ o0 ], len = Math.max( 0, Math.min( num - 1, data.length - o0 ) );\n\t\t\tif ( c < 128 || len == 0 ) arr.push( bin.readASCII( data, o0, len ) );\n\t\t\telse arr = new Uint8Array( data.buffer, o0, len );\n\n\t\t}\n\n\t\tif ( type == 3 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readUshort( data, ( num < 3 ? offset - 4 : voff ) + 2 * j ) );\n\n\t\t}\n\n\t\tif ( type == 4\n\t\t|| type == 13 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readUint( data, ( num < 2 ? offset - 4 : voff ) + 4 * j ) );\n\n\t\t}\n\n\t\tif ( type == 5 || type == 10 ) {\n\n\t\t\tvar ri = type == 5 ? bin.readUint : bin.readInt;\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( [ ri( data, voff + j * 8 ), ri( data, voff + j * 8 + 4 ) ] );\n\n\t\t}\n\n\t\tif ( type == 8 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readShort( data, ( num < 3 ? offset - 4 : voff ) + 2 * j ) );\n\n\t\t}\n\n\t\tif ( type == 9 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readInt( data, ( num < 2 ? offset - 4 : voff ) + 4 * j ) );\n\n\t\t}\n\n\t\tif ( type == 11 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readFloat( data, voff + j * 4 ) );\n\n\t\t}\n\n\t\tif ( type == 12 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readDouble( data, voff + j * 8 ) );\n\n\t\t}\n\n\t\tif ( num != 0 && arr.length == 0 ) {\n\n\t\t\tconsole.log( tag, 'unknown TIFF tag type: ', type, 'num:', num ); if ( i == 0 ) return; continue;\n\n\t\t}\n\n\t\tif ( prm.debug ) console.log( ' '.repeat( depth ), tag, type, UTIF.tags[ tag ], arr );\n\n\t\tifd[ 't' + tag ] = arr;\n\n\t\tif ( tag == 330 || tag == 34665 || tag == 34853 || ( tag == 50740 && bin.readUshort( data, bin.readUint( arr, 0 ) ) < 300 ) || tag == 61440 ) {\n\n\t\t\tvar oarr = tag == 50740 ? [ bin.readUint( arr, 0 ) ] : arr;\n\t\t\tvar subfd = [];\n\t\t\tfor ( var j = 0; j < oarr.length; j ++ ) UTIF._readIFD( bin, data, oarr[ j ], subfd, depth + 1, prm );\n\t\t\tif ( tag == 330 ) ifd.subIFD = subfd;\n\t\t\tif ( tag == 34665 ) ifd.exifIFD = subfd[ 0 ];\n\t\t\tif ( tag == 34853 ) ifd.gpsiIFD = subfd[ 0 ]; //console.log(\"gps\", subfd[0]); }\n\t\t\tif ( tag == 50740 ) ifd.dngPrvt = subfd[ 0 ];\n\t\t\tif ( tag == 61440 ) ifd.fujiIFD = subfd[ 0 ];\n\n\t\t}\n\n\t\tif ( tag == 37500 && prm.parseMN ) {\n\n\t\t\tvar mn = arr;\n\t\t\t//console.log(bin.readASCII(mn,0,mn.length), mn);\n\t\t\tif ( bin.readASCII( mn, 0, 5 ) == 'Nikon' ) ifd.makerNote = UTIF[ 'decode' ]( mn.slice( 10 ).buffer )[ 0 ];\n\t\t\telse if ( bin.readUshort( data, voff ) < 300 && bin.readUshort( data, voff + 4 ) <= 12 ) {\n\n\t\t\t\tvar subsub = []; UTIF._readIFD( bin, data, voff, subsub, depth + 1, prm );\n\t\t\t\tifd.makerNote = subsub[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tifds.push( ifd );\n\tif ( prm.debug ) console.log( ' '.repeat( depth ), '<<<---------------' );\n\treturn offset;\n\n};\n\nUTIF.toRGBA = function ( out, type ) {\n\n\tconst w = out.width, h = out.height, area = w * h, data = out.data;\n\n\tlet img;\n\n\tswitch ( type ) {\n\n\t\tcase HalfFloatType:\n\n\t\t\timg = new Uint16Array( area * 4 );\n\t\t\tbreak;\n\n\t\tcase FloatType:\n\n\t\t\timg = new Float32Array( area * 4 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.LogLuvLoader: Unsupported texture data type: ' + type );\n\n\t}\n\n\tlet intp = out[ 't262' ] ? out[ 't262' ][ 0 ] : 2;\n\tconst bps = out[ 't258' ] ? Math.min( 32, out[ 't258' ][ 0 ] ) : 1;\n\n\tif ( out[ 't262' ] == null && bps == 1 ) intp = 0;\n\n\tif ( intp == 32845 ) {\n\n\t\tfor ( let y = 0; y < h; y ++ ) {\n\n\t\t\tfor ( let x = 0; x < w; x ++ ) {\n\n\t\t\t\tconst si = ( y * w + x ) * 6, qi = ( y * w + x ) * 4;\n\t\t\t\tlet L = ( data[ si + 1 ] << 8 ) | data[ si ];\n\n\t\t\t\tL = Math.pow( 2, ( L + 0.5 ) / 256 - 64 );\n\t\t\t\tconst u = ( data[ si + 3 ] + 0.5 ) / 410;\n\t\t\t\tconst v = ( data[ si + 5 ] + 0.5 ) / 410;\n\n\t\t\t\t// Luv to xyY\n\t\t\t\tconst sX = ( 9 * u ) / ( 6 * u - 16 * v + 12 );\n\t\t\t\tconst sY = ( 4 * v ) / ( 6 * u - 16 * v + 12 );\n\t\t\t\tconst bY = L;\n\n\t\t\t\t// xyY to XYZ\n\t\t\t\tconst X = ( sX * bY ) / sY, Y = bY, Z = ( 1 - sX - sY ) * bY / sY;\n\n\t\t\t\t// XYZ to linear RGB\n\t\t\t\tconst r = 2.690 * X - 1.276 * Y - 0.414 * Z;\n\t\t\t\tconst g = - 1.022 * X + 1.978 * Y + 0.044 * Z;\n\t\t\t\tconst b = 0.061 * X - 0.224 * Y + 1.163 * Z;\n\n\t\t\t\tif ( type === HalfFloatType ) {\n\n\t\t\t\t\timg[ qi ] = DataUtils.toHalfFloat( Math.min( r, 65504 ) );\n\t\t\t\t\timg[ qi + 1 ] = DataUtils.toHalfFloat( Math.min( g, 65504 ) );\n\t\t\t\t\timg[ qi + 2 ] = DataUtils.toHalfFloat( Math.min( b, 65504 ) );\n\t\t\t\t\timg[ qi + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\timg[ qi ] = r;\n\t\t\t\t\timg[ qi + 1 ] = g;\n\t\t\t\t\timg[ qi + 2 ] = b;\n\t\t\t\t\timg[ qi + 3 ] = 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\tthrow new Error( 'THREE.LogLuvLoader: Unsupported Photometric interpretation: ' + intp );\n\n\t}\n\n\treturn img;\n\n};\n\nUTIF._binBE =\n{\n\tnextZero: function ( data, o ) {\n\n\t\twhile ( data[ o ] != 0 ) o ++; return o;\n\n\t},\n\treadUshort: function ( buff, p ) {\n\n\t\treturn ( buff[ p ] << 8 ) | buff[ p + 1 ];\n\n\t},\n\treadShort: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 1 ]; a[ 1 ] = buff[ p + 0 ]; return UTIF._binBE.i16[ 0 ];\n\n\t},\n\treadInt: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 3 ]; a[ 1 ] = buff[ p + 2 ]; a[ 2 ] = buff[ p + 1 ]; a[ 3 ] = buff[ p + 0 ]; return UTIF._binBE.i32[ 0 ];\n\n\t},\n\treadUint: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 3 ]; a[ 1 ] = buff[ p + 2 ]; a[ 2 ] = buff[ p + 1 ]; a[ 3 ] = buff[ p + 0 ]; return UTIF._binBE.ui32[ 0 ];\n\n\t},\n\treadASCII: function ( buff, p, l ) {\n\n\t\tvar s = ''; for ( var i = 0; i < l; i ++ ) s += String.fromCharCode( buff[ p + i ] ); return s;\n\n\t},\n\treadFloat: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; for ( var i = 0; i < 4; i ++ ) a[ i ] = buff[ p + 3 - i ]; return UTIF._binBE.fl32[ 0 ];\n\n\t},\n\treadDouble: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; for ( var i = 0; i < 8; i ++ ) a[ i ] = buff[ p + 7 - i ]; return UTIF._binBE.fl64[ 0 ];\n\n\t},\n\n\twriteUshort: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >> 8 ) & 255; buff[ p + 1 ] = n & 255;\n\n\t},\n\twriteInt: function ( buff, p, n ) {\n\n\t\tvar a = UTIF._binBE.ui8; UTIF._binBE.i32[ 0 ] = n; buff[ p + 3 ] = a[ 0 ]; buff[ p + 2 ] = a[ 1 ]; buff[ p + 1 ] = a[ 2 ]; buff[ p + 0 ] = a[ 3 ];\n\n\t},\n\twriteUint: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >> 24 ) & 255; buff[ p + 1 ] = ( n >> 16 ) & 255; buff[ p + 2 ] = ( n >> 8 ) & 255; buff[ p + 3 ] = ( n >> 0 ) & 255;\n\n\t},\n\twriteASCII: function ( buff, p, s ) {\n\n\t\tfor ( var i = 0; i < s.length; i ++ ) buff[ p + i ] = s.charCodeAt( i );\n\n\t},\n\twriteDouble: function ( buff, p, n ) {\n\n\t\tUTIF._binBE.fl64[ 0 ] = n;\n\t\tfor ( var i = 0; i < 8; i ++ ) buff[ p + i ] = UTIF._binBE.ui8[ 7 - i ];\n\n\t}\n};\nUTIF._binBE.ui8 = new Uint8Array( 8 );\nUTIF._binBE.i16 = new Int16Array( UTIF._binBE.ui8.buffer );\nUTIF._binBE.i32 = new Int32Array( UTIF._binBE.ui8.buffer );\nUTIF._binBE.ui32 = new Uint32Array( UTIF._binBE.ui8.buffer );\nUTIF._binBE.fl32 = new Float32Array( UTIF._binBE.ui8.buffer );\nUTIF._binBE.fl64 = new Float64Array( UTIF._binBE.ui8.buffer );\n\nUTIF._binLE =\n{\n\tnextZero: UTIF._binBE.nextZero,\n\treadUshort: function ( buff, p ) {\n\n\t\treturn ( buff[ p + 1 ] << 8 ) | buff[ p ];\n\n\t},\n\treadShort: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 0 ]; a[ 1 ] = buff[ p + 1 ]; return UTIF._binBE.i16[ 0 ];\n\n\t},\n\treadInt: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 0 ]; a[ 1 ] = buff[ p + 1 ]; a[ 2 ] = buff[ p + 2 ]; a[ 3 ] = buff[ p + 3 ]; return UTIF._binBE.i32[ 0 ];\n\n\t},\n\treadUint: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 0 ]; a[ 1 ] = buff[ p + 1 ]; a[ 2 ] = buff[ p + 2 ]; a[ 3 ] = buff[ p + 3 ]; return UTIF._binBE.ui32[ 0 ];\n\n\t},\n\treadASCII: UTIF._binBE.readASCII,\n\treadFloat: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; for ( var i = 0; i < 4; i ++ ) a[ i ] = buff[ p + i ]; return UTIF._binBE.fl32[ 0 ];\n\n\t},\n\treadDouble: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; for ( var i = 0; i < 8; i ++ ) a[ i ] = buff[ p + i ]; return UTIF._binBE.fl64[ 0 ];\n\n\t},\n\n\twriteUshort: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n ) & 255; buff[ p + 1 ] = ( n >> 8 ) & 255;\n\n\t},\n\twriteInt: function ( buff, p, n ) {\n\n\t\tvar a = UTIF._binBE.ui8; UTIF._binBE.i32[ 0 ] = n; buff[ p + 0 ] = a[ 0 ]; buff[ p + 1 ] = a[ 1 ]; buff[ p + 2 ] = a[ 2 ]; buff[ p + 3 ] = a[ 3 ];\n\n\t},\n\twriteUint: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >>> 0 ) & 255; buff[ p + 1 ] = ( n >>> 8 ) & 255; buff[ p + 2 ] = ( n >>> 16 ) & 255; buff[ p + 3 ] = ( n >>> 24 ) & 255;\n\n\t},\n\twriteASCII: UTIF._binBE.writeASCII\n};\nUTIF._copyTile = function ( tb, tw, th, b, w, h, xoff, yoff ) {\n\n\t//log(\"copyTile\", tw, th, w, h, xoff, yoff);\n\tvar xlim = Math.min( tw, w - xoff );\n\tvar ylim = Math.min( th, h - yoff );\n\tfor ( var y = 0; y < ylim; y ++ ) {\n\n\t\tvar tof = ( yoff + y ) * w + xoff;\n\t\tvar sof = y * tw;\n\t\tfor ( var x = 0; x < xlim; x ++ ) b[ tof + x ] = tb[ sof + x ];\n\n\t}\n\n};\n\nexport { LogLuvLoader };\n", "const lottie = {};\n\nif (typeof document !== 'undefined') {\n\nconst svgNS = 'http://www.w3.org/2000/svg';\n\nlet locationHref = '';\nlet _useWebWorker = false;\n\nconst initialDefaultFrame = -999999;\n\nconst setWebWorker = (flag) => { _useWebWorker = !!flag; };\nconst getWebWorker = () => _useWebWorker;\n\nconst setLocationHref = (value) => { locationHref = value; };\nconst getLocationHref = () => locationHref;\n\nfunction createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n}\n\nfunction extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n}\n\nfunction getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n}\n\nfunction createProxyFunction(prototype) {\n function ProxyFunction() {}\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n}\n\n// import Howl from '../../3rd_party/howler';\n\nconst audioControllerFactory = (function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n\n AudioController.prototype = {\n addAudio: function (audio) {\n this.audios.push(audio);\n },\n pause: function () {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function () {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function (rateValue) {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function (assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n } if (window.Howl) {\n return new window.Howl({\n src: [assetPath],\n });\n }\n return {\n isPlaying: false,\n play: function () { this.isPlaying = true; },\n seek: function () { this.isPlaying = false; },\n playing: function () {},\n rate: function () {},\n setVolume: function () {},\n };\n },\n setAudioFactory: function (audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function (value) {\n this._volume = value;\n this._updateVolume();\n },\n mute: function () {\n this._isMuted = true;\n this._updateVolume();\n },\n unmute: function () {\n this._isMuted = false;\n this._updateVolume();\n },\n getVolume: function () {\n return this._volume;\n },\n _updateVolume: function () {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n },\n };\n\n return function () {\n return new AudioController();\n };\n}());\n\nconst createTypedArray = (function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n default:\n value = 1.1;\n break;\n }\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n return arr;\n }\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n } if (type === 'int16') {\n return new Int16Array(len);\n } if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n return createRegularArray(type, len);\n }\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n return createRegularArray;\n}());\n\nfunction createSizedArray(len) {\n return Array.apply(null, { length: len });\n}\n\nlet subframeEnabled = true;\nlet expressionsPlugin = null;\nlet idPrefix$1 = '';\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nlet _shouldRoundValues = false;\nconst bmPow = Math.pow;\nconst bmSqrt = Math.sqrt;\nconst bmFloor = Math.floor;\nconst bmMax = Math.max;\nconst bmMin = Math.min;\n\nconst BMMath = {};\n(function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n}());\n\nfunction ProjectInterface$1() { return {}; }\nBMMath.random = Math.random;\nBMMath.abs = function (val) {\n var tOfVal = typeof val;\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n return absArr;\n }\n return Math.abs(val);\n};\nlet defaultCurveSegments = 150;\nconst degToRads = Math.PI / 180;\nconst roundCorner = 0.5519;\n\nfunction roundValues(flag) {\n _shouldRoundValues = !!flag;\n}\n\nfunction bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n return value;\n}\n\nfunction styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n}\n\nfunction BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n}\n\nfunction BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n}\n\nfunction BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n}\n\nfunction BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n}\n\nfunction BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n}\n\nfunction BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n}\n\nfunction BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n}\n\nfunction BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n}\n\nconst createElementID = (function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n}());\n\nfunction HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n return [r,\n g,\n b];\n}\n\nfunction RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = (max === 0 ? 0 : d / max);\n var v = max / 255;\n\n switch (max) {\n case min: h = 0; break;\n case r: h = (g - b) + d * (g < b ? 6 : 0); h /= 6 * d; break;\n case g: h = (b - r) + d * 2; h /= 6 * d; break;\n case b: h = (r - g) + d * 4; h /= 6 * d; break;\n default: break;\n }\n\n return [\n h,\n s,\n v,\n ];\n}\n\nfunction addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n}\n\nfunction addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n}\n\nfunction addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n}\n\nconst rgbToHex = (function () {\n var colorMap = [];\n var i;\n var hex;\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n if (g < 0) {\n g = 0;\n }\n if (b < 0) {\n b = 0;\n }\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n}());\n\nconst setSubframeEnabled = (flag) => { subframeEnabled = !!flag; };\nconst getSubframeEnabled = () => subframeEnabled;\nconst setExpressionsPlugin = (value) => { expressionsPlugin = value; };\nconst getExpressionsPlugin = () => expressionsPlugin;\nconst setDefaultCurveSegments = (value) => { defaultCurveSegments = value; };\nconst getDefaultCurveSegments = () => defaultCurveSegments;\nconst setIdPrefix = (value) => { idPrefix$1 = value; };\nconst getIdPrefix = () => idPrefix$1;\n\nfunction createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n}\n\nconst dataManager = (function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function () {\n\n },\n postMessage: function (path) {\n workerFn({\n data: path,\n });\n },\n };\n var _workerSelf = {\n postMessage: function (data) {\n workerProxy.onmessage({\n data: data,\n });\n },\n };\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (('ks' in layerData) && !layerData.completed) {\n layerData.completed = true;\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets);\n // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n i += 1;\n }\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n return JSON.parse(JSON.stringify(comp.layers));\n }\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n if (minimum[0] > animVersion[0]) {\n return true;\n } if (animVersion[0] > minimum[0]) {\n return false;\n }\n if (minimum[1] > animVersion[1]) {\n return true;\n } if (animVersion[1] > minimum[1]) {\n return false;\n }\n if (minimum[2] > animVersion[2]) {\n return true;\n } if (animVersion[2] > minimum[2]) {\n return false;\n }\n return null;\n }\n\n var checkText = (function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [\n {\n s: documentData,\n t: 0,\n },\n ],\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }());\n\n var checkChars = (function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: { k: [0, 0], a: 0 },\n s: { k: [100, 100], a: 0 },\n a: { k: [0, 0], a: 0 },\n r: { k: 0, a: 0 },\n o: { k: 100, a: 0 },\n };\n if (!animationData.chars[i].t) {\n charData.data.shapes.push(\n {\n ty: 'no',\n }\n );\n charData.data.shapes[0].it.push(\n {\n p: { k: [0, 0], a: 0 },\n s: { k: [100, 100], a: 0 },\n a: { k: [0, 0], a: 0 },\n r: { k: 0, a: 0 },\n o: { k: 100, a: 0 },\n sk: { k: 0, a: 0 },\n sa: { k: 0, a: 0 },\n ty: 'tr',\n }\n );\n }\n }\n }\n }\n };\n }());\n\n var checkPathProperties = (function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a,\n };\n }\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p,\n };\n }\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r,\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }());\n\n var checkColors = (function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }());\n\n var checkShapes = (function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }());\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\n // data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n\n return moduleOb;\n }\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = (function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n if (xhr.response && typeof xhr.response === 'object') {\n return xhr.response;\n } if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n } if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n // set responseType after calling open or IE will break.\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n try {\n xhr.open('GET', path, true);\n } catch (error) {\n xhr.open('GET', fullPath + '/' + path, true);\n }\n xhr.send();\n }\n return {\n load: loadAsset,\n };\n }());\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(\n e.data.path,\n e.data.fullPath,\n function (data) {\n _workerSelf.dataManager.completeData(data);\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success',\n });\n },\n function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error',\n });\n }\n );\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n _workerSelf.dataManager.completeData(animation);\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success',\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(\n e.data.path,\n e.data.fullPath,\n function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success',\n });\n },\n function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error',\n });\n }\n );\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError,\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId,\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId,\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId,\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation,\n };\n}());\n\nconst ImagePreloader = (function () {\n var proxyImage = (function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }());\n\n function imageLoaded() {\n this.loadedAssets += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n if (box.width || _count > 500) {\n this._imageLoaded();\n clearInterval(intervalId);\n }\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n var ob = {\n img: img,\n assetData: assetData,\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData,\n };\n return ob;\n }\n\n function createFootageData(data) {\n var ob = {\n assetData: data,\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n i += 1;\n }\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType,\n };\n\n return ImagePreloaderFactory;\n}());\n\nfunction BaseEvent() {}\nBaseEvent.prototype = {\n triggerEvent: function (eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function (eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function (eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n i -= 1;\n len -= 1;\n }\n i += 1;\n }\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n },\n};\n\nconst markerParser = (\n\n function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n if (keysCount === 0) {\n throw new Error();\n }\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr,\n };\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm,\n };\n }\n }\n markers.push(markerData);\n }\n return markers;\n };\n }());\n\nconst ProjectInterface = (function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n return this.compositions[i].compInterface;\n }\n i += 1;\n }\n return null;\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n\n _thisProjectFunction.registerComposition = registerComposition;\n\n return _thisProjectFunction;\n };\n}());\n\nconst renderers = {};\n\nconst registerRenderer = (key, value) => {\n renderers[key] = value;\n};\n\nfunction getRenderer(key) {\n return renderers[key];\n}\n\nconst AnimationItem = function () {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n};\n\nextendPrototype([BaseEvent], AnimationItem);\n\nAnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n var animType = 'svg';\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n const RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n if (params.loop === ''\n || params.loop === null\n || params.loop === undefined\n || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(\n params.path,\n this.configAnimation,\n this.onSetupError\n );\n }\n};\n\nAnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n};\n\nAnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(\n data,\n this.configAnimation\n );\n};\n\nAnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (typeof animationData !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n var params = {\n wrapper: wrapper,\n animationData: animationData,\n };\n var wrapperAttributes = wrapper.attributes;\n\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value\n : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value\n : wrapperAttributes.getNamedItem('bm-path')\n ? wrapperAttributes.getNamedItem('bm-path').value\n : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value\n : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value\n : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value\n : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value\n : wrapperAttributes.getNamedItem('bm-renderer')\n ? wrapperAttributes.getNamedItem('bm-renderer').value\n : 'canvas';\n\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value\n : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value\n : wrapperAttributes.getNamedItem('bm-loop')\n ? wrapperAttributes.getNamedItem('bm-loop').value\n : '';\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value\n : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value\n : wrapperAttributes.getNamedItem('bm-autoplay')\n ? wrapperAttributes.getNamedItem('bm-autoplay').value\n : true;\n params.autoplay = autoplay !== 'false';\n\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value\n : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value\n : wrapperAttributes.getNamedItem('bm-name')\n ? wrapperAttributes.getNamedItem('bm-name').value\n : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value\n : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value\n : wrapperAttributes.getNamedItem('bm-prerender')\n ? wrapperAttributes.getNamedItem('bm-prerender').value\n : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n this.setParams(params);\n};\n\nAnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n i += 1;\n }\n }\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n if (data.assets) {\n len = data.assets.length;\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n this.animationData.__complete = false;\n dataManager.completeAnimation(\n this.animationData,\n this.onSegmentComplete\n );\n};\n\nAnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.loadNextSegment();\n};\n\nAnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n};\n\nAnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n this.loadNextSegment();\n};\n\nAnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n};\n\nAnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n};\n\nAnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n try {\n this.animationData = animData;\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n this.renderer.configAnimation(animData);\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n};\n\nAnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n};\n\nAnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded\n && this.renderer.globalData.fontManager.isLoaded\n && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas')\n && (this.imagePreloader.loadedFootages())\n ) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n if (this.autoplay) {\n this.play();\n }\n }\n};\n\nAnimationItem.prototype.resize = function () {\n this.renderer.updateContainerSize();\n};\n\nAnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n};\n\nAnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n};\n\nAnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n try {\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n};\n\nAnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_pause');\n this.audioController.resume();\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n};\n\nAnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_play');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n};\n\nAnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n};\n\nAnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n};\n\nAnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n return null;\n};\n\nAnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n this.pause();\n};\n\nAnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n this.play();\n};\n\nAnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false;\n // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + (nextValue % this.totalFrames));\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n};\n\nAnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n this.trigger('segmentStart');\n};\nAnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n};\n\nAnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n if (typeof arr[0] === 'object') {\n var i;\n var len = arr.length;\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n if (this.isPaused) {\n this.play();\n }\n};\n\nAnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n if (forceFlag) {\n this.checkSegments(0);\n }\n};\nAnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n return false;\n};\n\nAnimationItem.prototype.destroy = function (name) {\n if ((name && this.name !== name) || !this.renderer) {\n return;\n }\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.renderer = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n};\n\nAnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n};\n\nAnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n};\n\nAnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n};\n\nAnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.setVolume(val);\n};\n\nAnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n};\n\nAnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.mute();\n};\n\nAnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.unmute();\n};\n\nAnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n};\n\nAnimationItem.prototype.getPath = function () {\n return this.path;\n};\n\nAnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n};\n\nAnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n i += 1;\n }\n return null;\n};\n\nAnimationItem.prototype.hide = function () {\n this.renderer.hide();\n};\n\nAnimationItem.prototype.show = function () {\n this.renderer.show();\n};\n\nAnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n};\n\nAnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {\n // TODO: decide how to handle catch case\n }\n};\n\nAnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n default:\n this.triggerEvent(name);\n }\n }\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n};\n\nAnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n};\n\nAnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n};\n\nconst animationManager = (function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n var i = 0;\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n i += 1;\n }\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({ elem: element, animation: animItem });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n initTime = nowTime;\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n for (i = (len - 1); i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')),\n [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n registerAnimation(animElements[i], animationData);\n }\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize;\n // moduleOb.start = start;\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n}());\n\n/* eslint-disable */\nconst BezierFactory = (function () {\n /**\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n *\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\n * Usage:\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\n *\n */\n\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n if (beziers[str]) {\n return beziers[str];\n }\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n }\n\n // These values are established by empiricism with tests (tradeoff: performance VS precision)\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\n function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\n function C(aA1) { return 3.0 * aA1; }\n\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n /**\n * points is an array of [ mX1, mY1, mX2, mY2 ]\n */\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n\n get: function (x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n\n // Private part\n\n _precompute: function () {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n if (mX1 !== mY1 || mX2 !== mY2) { this._calcSampleValues(); }\n },\n\n _calcSampleValues: function () {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\n */\n _getTForX: function (aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } if (initialSlope === 0.0) {\n return guessForT;\n }\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n },\n };\n\n return ob;\n}());\n\nconst pooling = (function () {\n function double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n double: double,\n };\n}());\n\nconst poolFactory = (function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n\n var ob = {\n newElement: newElement,\n release: release,\n };\n\n function newElement() {\n var element;\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength *= 2;\n }\n if (_release) {\n _release(element);\n }\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n}());\n\nconst bezierLengthPool = (function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments()),\n };\n }\n return poolFactory(8, create);\n}());\n\nconst segmentsLengthPool = (function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0,\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n}());\n\nfunction bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = (x1 * y2) + (y1 * x3) + (x2 * y3) - (x3 * y2) - (y3 * x1) - (x2 * y1);\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = (function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n lastPoint[i] = point[i];\n }\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }());\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = (function () {\n var storedData = {};\n\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n return storedData[bezierName];\n };\n }());\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n flag = false;\n }\n }\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n var t0t0t0 = t0 * t0 * t0;\n //\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n var t0t0t1 = t0 * t0 * t1;\n //\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n var t0t1t1 = t0 * t1 * t1;\n //\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n var t1t1t1 = t1 * t1 * t1;\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D,\n };\n}\n\nconst bez = bezFunction();\n\nconst PropertyFactory = (function () {\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n iterationIndex = 0;\n break;\n }\n if ((nextKeyData.t - offsetTime) > frameNum) {\n iterationIndex = i;\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n keyframeMetadata = this.keyframesMetadata[i] || {};\n\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n var bezierData = keyframeMetadata.bezierData;\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n }\n // caching._lastKeyframeIndex = -1;\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n\n var segmentPerc;\n var addedLength = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastAddedLength : 0;\n j = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n break;\n }\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n caching.lastIndex = iterationIndex;\n return newValue;\n }\n\n // based on @Toji's https://github.com/toji/gl-matrix/\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n if ((1.0 - cosom) > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n if (!(frameNum === this._caching.lastFrame || (this._caching.lastFrame !== initFrame && ((this._caching.lastFrame >= endTime && frameNum >= endTime) || (this._caching.lastFrame < initTime && frameNum < initTime))))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame, lastIndex: 0, value: 0, _lastKeyframeIndex: -1,\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n if ((s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1])) || (s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2]))) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || (s[2] === e[2] && to[2] === 0 && ti[2] === 0)) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n this._caching = { lastFrame: initFrame, lastIndex: 0, value: createTypedArray('float32', arrLen) };\n this.addEffect = addEffect;\n }\n\n function getProp(elem, data, type, mult, container) {\n var p;\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof (data.k[0]) === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n default:\n break;\n }\n }\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n return p;\n }\n\n var ob = {\n getProp: getProp,\n };\n return ob;\n}());\n\nfunction DynamicPropertyContainer() {}\nDynamicPropertyContainer.prototype = {\n addDynamicProperty: function (prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function () {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function (container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n },\n};\n\nconst pointPool = (function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n return poolFactory(8, create);\n}());\n\nfunction ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n}\n\nShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n};\n\nShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n this._length = len;\n};\n\nShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n};\n\nShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n case 'i':\n arr = this.i;\n break;\n case 'o':\n arr = this.o;\n break;\n default:\n arr = [];\n break;\n }\n if (!arr[pos] || (arr[pos] && !replace)) {\n arr[pos] = pointPool.newElement();\n }\n arr[pos][0] = x;\n arr[pos][1] = y;\n};\n\nShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n};\n\nShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n var cnt = this._length - 1;\n var len = this._length;\n\n var i;\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n return newPath;\n};\n\nconst shapePool = (function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n\n return factory;\n}());\n\nfunction ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n}\n\nShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n this.shapes[this._length] = shapeData;\n this._length += 1;\n};\n\nShapeCollection.prototype.releaseShapes = function () {\n var i;\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n this._length = 0;\n};\n\nconst shapeCollectionPool = (function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release,\n };\n\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength *= 2;\n }\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n}());\n\nconst ShapePropertyFactory = (function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\n keyPropS = kf[kf.length - 1].s[0];\n }else{\n keyPropS = kf[kf.length - 2].e[0];\n } */\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n if ((nextKeyData.t - this.offsetTime) > frameNum) {\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / ((nextKeyData.t - this.offsetTime) - (keyData.t - this.offsetTime)));\n }\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n keyPropS = keyData.s[0];\n }\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n if (!(lastFrame !== initFrame && ((lastFrame < initTime && frameNum < initTime) || (lastFrame > endTime && frameNum > endTime)))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching);\n /// /\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n var i;\n var len = shape1._length;\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0]\n || shape1.v[i][1] !== shape2.v[i][1]\n || shape1.o[i][0] !== shape2.o[i][0]\n || shape1.o[i][1] !== shape2.o[i][1]\n || shape1.i[i][0] !== shape2.i[i][0]\n || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n } if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var finalValue;\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n var i;\n var len = this.effectsSequence.length;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = { lastFrame: initFrame, lastIndex: 0 };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = (function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function () {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n var _cw = this.d !== 3;\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n },\n };\n\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n\n return EllShapePropertyFactory;\n }());\n\n var StarShapeProperty = (function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function () {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = (Math.PI * 2) / numPts;\n /* this.v.v.length = numPts;\n this.v.i.length = numPts;\n this.v.o.length = numPts; */\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = (2 * Math.PI * longRad) / (numPts * 2);\n var shortPerimSegment = (2 * Math.PI * shortRad) / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n\n /* this.v.v[i] = [x,y];\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\n this.v._length = numPts; */\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function () {\n var numPts = Math.floor(this.pt.v);\n var angle = (Math.PI * 2) / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = (2 * Math.PI * rad) / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n this.paths.length = 0;\n this.paths[0] = this.v;\n },\n\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n\n return StarShapePropertyFactory;\n }());\n\n var RectShapeProperty = (function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function () {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape,\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n\n return RectShapePropertyFactory;\n }());\n\n function getShapeProp(elem, data, type) {\n var prop;\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n}());\n\n/*!\n Transformation Matrix v2.0\n (c) Epistemex 2014-2015\n www.epistemex.com\n By Ken Fyrstenberg\n Contributions by leeoniya.\n License: MIT, header required.\n */\n\n/**\n * 2D transformation matrix object initialized with identity matrix.\n *\n * The matrix can synchronize a canvas context by supplying the context\n * as an argument, or later apply current absolute transform to an\n * existing context.\n *\n * All values are handled as floating point values.\n *\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\n * @prop {number} a - scale x\n * @prop {number} b - shear y\n * @prop {number} c - shear x\n * @prop {number} d - scale y\n * @prop {number} e - translate x\n * @prop {number} f - translate y\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\n * @constructor\n */\n\nconst Matrix = (function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\n ._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\n ._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2;\n // }\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n\n /* matrix order (canvas compatible):\n * ace\n * bdf\n * 001\n */\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n\n this._identityCalculated = false;\n return this;\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n i += 1;\n }\n return true;\n }\n\n function clone(matr) {\n var i;\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14],\n };\n /* return {\n x: x * me.a + y * me.c + me.e,\n y: x * me.b + y * me.d + me.f\n }; */\n }\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [\n x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14],\n ];\n }\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n /* if(this.isIdentity()) {\n return '';\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n if ((val < 0.000001 && val > 0) || (val > -0.000001 && val < 0)) {\n return _rnd(val * v) / v;\n }\n return val;\n }\n\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n /* if(this.isIdentity()) {\n return '';\n } */\n var props = this.props;\n var _a = roundMatrixProperty(props[0]);\n var _b = roundMatrixProperty(props[1]);\n var _c = roundMatrixProperty(props[4]);\n var _d = roundMatrixProperty(props[5]);\n var _e = roundMatrixProperty(props[12]);\n var _f = roundMatrixProperty(props[13]);\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n}());\n\nvar standalone = '__[STANDALONE]__';\nvar animationData = '__[ANIMATIONDATA]__';\nvar renderer = '';\n\nfunction setLocation(href) {\n setLocationHref(href);\n}\n\nfunction searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n}\n\nfunction setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n}\n\nfunction setPrefix(prefix) {\n setIdPrefix(prefix);\n}\n\nfunction loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n return animationManager.loadAnimation(params);\n}\n\nfunction setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n}\n\nfunction inBrowser() {\n return typeof navigator !== 'undefined';\n}\n\nfunction installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n}\n\nfunction getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n case 'matrix':\n return Matrix;\n default:\n return null;\n }\n}\n\nlottie.play = animationManager.play;\nlottie.pause = animationManager.pause;\nlottie.setLocationHref = setLocation;\nlottie.togglePause = animationManager.togglePause;\nlottie.setSpeed = animationManager.setSpeed;\nlottie.setDirection = animationManager.setDirection;\nlottie.stop = animationManager.stop;\nlottie.searchAnimations = searchAnimations;\nlottie.registerAnimation = animationManager.registerAnimation;\nlottie.loadAnimation = loadAnimation;\nlottie.setSubframeRendering = setSubframeRendering;\nlottie.resize = animationManager.resize;\n// lottie.start = start;\nlottie.goToAndStop = animationManager.goToAndStop;\nlottie.destroy = animationManager.destroy;\nlottie.setQuality = setQuality;\nlottie.inBrowser = inBrowser;\nlottie.installPlugin = installPlugin;\nlottie.freeze = animationManager.freeze;\nlottie.unfreeze = animationManager.unfreeze;\nlottie.setVolume = animationManager.setVolume;\nlottie.mute = animationManager.mute;\nlottie.unmute = animationManager.unmute;\nlottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\nlottie.useWebWorker = setWebWorker;\nlottie.setIDPrefix = setPrefix;\nlottie.__getFactory = getFactory;\nlottie.version = '[[BM_VERSION]]';\n\nfunction checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n}\n\nfunction getQueryVariable(variable) {\n var vars = queryString.split('&');\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n if (decodeURIComponent(pair[0]) == variable) { // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n return null;\n}\nvar queryString = '';\nif (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: '',\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n renderer = getQueryVariable('renderer');\n}\nvar readyStateCheckInterval = setInterval(checkReady, 100);\n\n// this adds bodymovin to the window object for backwards compatibility\ntry {\n if (!(typeof exports === 'object' && typeof module !== 'undefined')\n && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n} catch (err) {\n //\n}\n\nconst ShapeModifiers = (function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n}());\n\nfunction ShapeModifier() {}\nShapeModifier.prototype.initModifierProperties = function () {};\nShapeModifier.prototype.addShapeToModifier = function () {};\nShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = { shape: data.sh, data: data, localShapeCollection: shapeCollectionPool.newShapeCollection() };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n};\nShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n};\nShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n};\n\nextendPrototype([DynamicPropertyContainer], ShapeModifier);\n\nfunction TrimModifier() {\n}\nextendPrototype([ShapeModifier], TrimModifier);\nTrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n};\n\nTrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n};\n\nTrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n if (e <= 1) {\n segments.push({\n s: s,\n e: e,\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1,\n });\n } else {\n segments.push({\n s: s,\n e: 1,\n });\n segments.push({\n s: 0,\n e: e - 1,\n });\n }\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = ((segmentOb.e * totalModifierLength - addedLength) / shapeLength);\n }\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n return shapeSegments;\n};\n\nTrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n pathsData.length = 0;\n return pathsData;\n};\n\nTrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n if (this._mdf || _isFirstFrame) {\n var o = (this.o.v % 360) / 360;\n if (o < 0) {\n o += 1;\n }\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!((e === 1 && s === 0) || (e === 0 && s === 1))) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes();\n // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n jLen = edges.length;\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE,\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1),\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength,\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1),\n });\n }\n var newShapesData = this.addShapes(shapeData, segments[0]);\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n};\n\nTrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n};\n\nTrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n};\n\nTrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n};\n\nTrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n shapes.push(shapePath);\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n if (addedLength > shapeSegment.e) {\n break;\n }\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n return shapes;\n};\n\nfunction PuckerAndBloatModifier() {}\nextendPrototype([ShapeModifier], PuckerAndBloatModifier);\nPuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n};\n\nPuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n return clonedPath;\n};\n\nPuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n};\n\nconst TransformPropertyFactory = (function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\n .rotateY(this.or.v[1])\n .rotateX(this.or.v[0]);\n }\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\n .rotateY(this.or.v[1])\n .rotateX(this.or.v[0]);\n }\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t / frameRate), 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[0].t) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[0].t) / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t / frameRate), 0);\n v1[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t / frameRate), 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n if (!this.a.k) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\n .rotateY(this.or.v[1])\n .rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {\n //\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix();\n // Precalculated matrix with non animated properties\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || { k: [0, 0, 0] }, 1, 0, this);\n }\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\n // sh Indicates it needs to be capped between -180 and 180\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this);\n }\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n this.a = PropertyFactory.getProp(elem, data.a || { k: [0, 0, 0] }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || { k: [100, 100, 100] }, 1, 0.01, this);\n // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = { _mdf: false, v: 1 };\n }\n this._isDirty = true;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient,\n };\n\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty,\n };\n}());\n\nfunction RepeaterModifier() {}\nextendPrototype([ShapeModifier], RepeaterModifier);\n\nRepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n};\n\nRepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n};\n\nRepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n while (pos > 0) {\n pos -= 1;\n // this._elements.unshift(arr.splice(pos,1)[0]);\n this._elements.unshift(arr[pos]);\n }\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n};\n\nRepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n};\n\nRepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n};\n\nRepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n};\n\nRepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr',\n };\n group.it.push({\n a: { a: 0, ix: 1, k: [0, 0] }, nm: 'Transform', o: { a: 0, ix: 7, k: 100 }, p: { a: 0, ix: 2, k: [0, 0] }, r: { a: 1, ix: 6, k: [{ s: 0, e: 0, t: 0 }, { s: 0, e: 0, t: 1 }] }, s: { a: 0, ix: 3, k: [100, 100] }, sa: { a: 0, ix: 5, k: 0 }, sk: { a: 0, ix: 4, k: 0 }, ty: 'tr',\n });\n\n this.arr.splice(0, 0, group);\n this._groups.splice(0, 0, group);\n this._currentCopies += 1;\n }\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n cont = 0;\n var renderFlag;\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n cont += 1;\n }\n\n this._currentCopies = copies;\n /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1\n ? this.so.v\n : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if ((i !== 0 && dir === 1) || (i !== this._currentCopies - 1 && dir === -1)) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n this.matrix.reset();\n } else {\n this.matrix.reset();\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n return hasReloaded;\n};\n\nRepeaterModifier.prototype.addShape = function () {};\n\nfunction RoundCornersModifier() {}\nextendPrototype([ShapeModifier], RoundCornersModifier);\nRoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n};\n\nRoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\n clonedPath.o[index] = currentO;\n clonedPath.i[index] = currentI; */\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n return clonedPath;\n};\n\nRoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n};\n\nfunction getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n\n var fWeight = 'normal'; var\n fStyle = 'normal';\n var len = styles.length;\n var styleName;\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n case 'bold':\n fWeight = '700';\n break;\n case 'black':\n fWeight = '900';\n break;\n case 'medium':\n fWeight = '500';\n break;\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight,\n };\n}\n\nconst FontManager = (function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: [],\n },\n };\n var combinedCharacters = [];\n // Hindi characters\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366,\n 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379,\n 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n\n var surrogateModifiers = [\n 'd83cdffb',\n 'd83cdffc',\n 'd83cdffd',\n 'd83cdffe',\n 'd83cdfff',\n ];\n\n var zeroWidthJoiner = [65039, 8205];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span');\n // Node is invisible to screen readers.\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span');\n // Characters that vary significantly among different fonts\n node.innerText = 'giItT1WQy@!-/#';\n // Visible - so we can measure it - but not on the screen\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px';\n // Large font size makes even subtle changes obvious\n parentNode.style.fontSize = '300px';\n // Reset any font properties\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode);\n\n // Remember width with no applied web font\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return { node: node, w: width, parent: parentNode };\n }\n\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(fontData, def) {\n var engine = (document.body && def) ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px';\n // tHelper.style.fontFamily = fontData.fFamily;\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n return helper.measureText(text).width;\n }\n return {\n measureText: measure,\n };\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach((data) => {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n if (!this.chars) {\n this.chars = [];\n }\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n j += 1;\n }\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(char, style, font) {\n var i = 0;\n var len = this.chars.length;\n while (i < len) {\n if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n i += 1;\n }\n if (((typeof char === 'string' && char.charCodeAt(0) !== 13) || !char)\n && console\n && console.warn // eslint-disable-line no-console\n && !this._warned\n ) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', char, style, font); // eslint-disable-line no-console\n }\n return emptyChar;\n }\n\n function measureText(char, fontName, size) {\n var fontData = this.getFontByName(fontName);\n var index = char.charCodeAt(0);\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper;\n if (char === ' ') {\n var doubleSize = tHelper.measureText('|' + char + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index + 1] = tHelper.measureText(char) / 100;\n }\n }\n return fontData.cache[index + 1] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n i += 1;\n }\n return this.fonts[0];\n }\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n if (!secondCharCode) {\n return firstCharCode === zeroWidthJoiner[1];\n }\n return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\n }\n\n function isCombinedCharacter(char) {\n return combinedCharacters.indexOf(char) !== -1;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function () {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isCombinedCharacter = isCombinedCharacter;\n\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded,\n };\n\n Font.prototype = fontPrototype;\n\n return Font;\n}());\n\nfunction RenderableElement() {\n\n}\n\nRenderableElement.prototype = {\n initRenderable: function () {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false;\n // layer's display state\n this.hidden = false;\n // If layer's transparency equals 0, it can be hidden\n this.isTransparent = false;\n // list of animated components\n this.renderableComponents = [];\n },\n addRenderableComponent: function (component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function (component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function (num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function () {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n /**\n * @function\n * Initializes frame related properties.\n *\n * @param {number} num\n * current frame number in Layer's time\n *\n */\n checkLayerLimits: function (num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function () {\n var i;\n var len = this.renderableComponents.length;\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n },\n sourceRectAtTime: function () {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100,\n };\n },\n getLayerSize: function () {\n if (this.data.ty === 5) {\n return { w: this.data.textData.width, h: this.data.textData.height };\n }\n return { w: this.data.width, h: this.data.height };\n },\n};\n\nconst MaskManagerInterface = (function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function () {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n return this._mask.prop;\n },\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function () {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n return this._mask.op.v * 100;\n },\n });\n\n var MaskManager = function (maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n var i;\n var len = maskManager.viewData.length;\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function (name) {\n i = 0;\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n i += 1;\n }\n return null;\n };\n return maskFunction;\n };\n return MaskManager;\n}());\n\nconst ExpressionPropertyInterface = (function () {\n var defaultUnidimensionalValue = { pv: 0, v: 0, mult: 1 };\n var defaultMultidimensionalValue = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function () {\n return property.getVelocityAtTime(property.comp.currentFrame);\n },\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n var value = '';\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n\n return function () {\n if (property.k) {\n property.getValue();\n }\n val = property.v * mult;\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n var mult = 1 / property.mult;\n var len = (property.data && property.data.l) || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n\n return function () {\n if (property.k) {\n property.getValue();\n }\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n return expressionValue;\n };\n }\n\n // TODO: try to avoid using this getter\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n } if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n return MultidimensionalPropertyInterface(property);\n };\n}());\n\nconst TransformExpressionInterface = (function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n default:\n return null;\n }\n }\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz),\n });\n\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r),\n });\n\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx),\n });\n\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry),\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s),\n });\n var _px;\n var _py;\n var _pz;\n var _transformFactory;\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n Object.defineProperty(_thisFunction, 'position', {\n get: function () {\n if (transform.p) {\n return _transformFactory();\n }\n return [\n _px(),\n _py(),\n _pz ? _pz() : 0];\n },\n });\n\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px),\n });\n\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py),\n });\n\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz),\n });\n\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a),\n });\n\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o),\n });\n\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk),\n });\n\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa),\n });\n\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or),\n });\n\n return _thisFunction;\n };\n}());\n\nconst LayerExpressionInterface = (function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n return toWorldMat;\n }\n\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n return toWorldMat.inversePoint(arr);\n }\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n default:\n return null;\n }\n }\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function () {\n return elem.hierarchy.length;\n },\n },\n parent: {\n get: function () {\n return elem.hierarchy[0].layerInterface;\n },\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function () {\n return transformInterface;\n },\n },\n active: {\n get: function () {\n return elem.isInRange;\n },\n },\n });\n\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n}());\n\nconst propertyGroupFactory = (function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n }\n return parentPropertyGroup(val - 1);\n };\n };\n}());\n\nconst PropertyInterface = (function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName,\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n }\n return propertyGroup(val - 1);\n }\n\n return _propertyGroup;\n };\n}());\n\nconst EffectsExpressionInterface = (function () {\n var ob = {\n createEffectsInterface: createEffectsInterface,\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n var groupInterface = function (name) {\n i = 0;\n len = effects.length;\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n i += 1;\n }\n return null;\n };\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function () {\n return effects.length;\n },\n });\n return groupInterface;\n }\n return null;\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n return effectElements[i]();\n }\n i += 1;\n }\n throw new Error();\n }\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i;\n var len = data.ef.length;\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function () {\n return effectElements[0]();\n },\n });\n }\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function () {\n return data.np;\n },\n },\n _name: { value: data.nm },\n propertyGroup: { value: _propertyGroup },\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n}());\n\nconst CompExpressionInterface = (function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n i += 1;\n }\n return null;\n // return {active:false};\n }\n Object.defineProperty(_thisLayerFunction, '_name', { value: comp.data.nm });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n}());\n\nconst ShapePathInterface = (\n\n function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function () {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n },\n },\n shape: {\n get: function () {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n },\n },\n _name: { value: shape.nm },\n ix: { value: shape.ix },\n propertyIndex: { value: shape.ix },\n mn: { value: shape.mn },\n propertyGroup: { value: propertyGroup },\n });\n return interfaceFunction;\n };\n }()\n);\n\nconst ShapeExpressionInterface = (function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {\n // arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n i += 1;\n }\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n return null;\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n default:\n return interfaceFunction.transform;\n }\n };\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function () {\n return shape.nm;\n },\n });\n // interfaceFunction.content = interfaceFunction;\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n } if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c),\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o),\n },\n _name: { value: shape.nm },\n mn: { value: shape.mn },\n });\n\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s),\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e),\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o),\n },\n type: {\n get: function () {\n return 'a';\n },\n },\n _name: { value: shape.nm },\n mn: { value: shape.mn },\n });\n\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p),\n });\n }\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n } if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n } if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c),\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o),\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w),\n },\n dash: {\n get: function () {\n return dashOb;\n },\n },\n _name: { value: shape.nm },\n mn: { value: shape.mn },\n });\n\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s),\n },\n end: {\n get: ExpressionPropertyInterface(view.e),\n },\n offset: {\n get: ExpressionPropertyInterface(view.o),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n if ((shape.sk && shape.sk.ix === value) || value === 'Skew') {\n return interfaceFunction.skew;\n }\n if ((shape.sa && shape.sa.ix === value) || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o),\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p),\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a),\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s),\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r),\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk),\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s),\n },\n position: {\n get: ExpressionPropertyInterface(prop.p),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p),\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r),\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt),\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or),\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os),\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir),\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p),\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r),\n },\n size: {\n get: ExpressionPropertyInterface(prop.s),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n } if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c),\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n if (value === 0) {\n return propertyGroup;\n }\n return interfaces[value - 1];\n }\n var i = 0;\n var len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n i += 1;\n }\n return null;\n }\n function parentGroupWrapper() {\n return propertyGroup;\n }\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n}());\n\nconst TextExpressionInterface = (function () {\n return function (elem) {\n var _prevValue;\n var _sourceText;\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n default:\n return null;\n }\n }\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function () {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n if (stringValue !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n }\n return _sourceText;\n },\n });\n return _thisLayerFunction;\n };\n}());\n\nconst getBlendMode = (function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity',\n };\n\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n}());\n\nfunction SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n}\nfunction PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n}\nfunction LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction NoValueEffect() {\n this.p = {};\n}\n\nfunction EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n}\n\nfunction GroupEffect(data, element) {\n this.init(data, element);\n}\n\nextendPrototype([DynamicPropertyContainer], GroupEffect);\n\nGroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\nGroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n for (i = 0; i < len; i += 1) {\n eff = null;\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n};\n\nfunction BaseElement() {\n}\n\nBaseElement.prototype = {\n checkMasks: function () {\n if (!this.data.hasMask) {\n return false;\n }\n var i = 0;\n var len = this.data.masksProperties.length;\n while (i < len) {\n if ((this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false)) {\n return true;\n }\n i += 1;\n }\n return false;\n },\n initExpressions: function () {\n this.layerInterface = LayerExpressionInterface(this);\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function () {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function (data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID();\n\n // Stretch factor for old animations missing this property.\n if (!this.data.sr) {\n this.data.sr = 1;\n }\n // effects manager\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function () {\n return this.type;\n },\n sourceRectAtTime: function () {},\n};\n\n/**\n * @file\n * Handles element's layer frame update.\n * Checks layer in point and out point\n *\n */\n\nfunction FrameElement() {}\n\nFrameElement.prototype = {\n /**\n * @function\n * Initializes frame related properties.\n *\n */\n initFrame: function () {\n // set to true when inpoint is rendered\n this._isFirstFrame = false;\n // list of animated properties\n this.dynamicProperties = [];\n // If layer has been modified in current tick this will be true\n this._mdf = false;\n },\n /**\n * @function\n * Calculates all dynamic values\n *\n * @param {number} num\n * current frame number in Layer's time\n * @param {boolean} isVisible\n * if layers is currently in range\n *\n */\n prepareProperties: function (num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n if (isVisible || (this._isParent && this.dynamicProperties[i].propType === 'transform')) {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function (prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n },\n};\n\nconst FootageInterface = (function () {\n var outlineInterfaceFactory = (function (elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n if (typeof currentProperty === 'object') {\n return searchProperty;\n }\n return currentProperty;\n }\n var propertyNameIndex = value.indexOf(currentPropertyName);\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n if (typeof currentProperty === 'object') {\n return searchProperty;\n }\n return currentProperty;\n }\n return '';\n }\n return init;\n });\n\n var dataInterfaceFactory = function (elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n return null;\n }\n\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n return null;\n }\n\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n}());\n\nfunction FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n}\n\nFootageElement.prototype.prepareFrame = function () {\n};\n\nextendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\nFootageElement.prototype.getBaseElement = function () {\n return null;\n};\n\nFootageElement.prototype.renderFrame = function () {\n};\n\nFootageElement.prototype.destroy = function () {\n};\n\nFootageElement.prototype.initExpressions = function () {\n this.layerInterface = FootageInterface(this);\n};\n\nFootageElement.prototype.getFootageData = function () {\n return this.footageData;\n};\n\nfunction AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : { k: [100] }, 1, 0.01, this);\n}\n\nAudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n};\n\nextendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\nAudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing()\n || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1\n ) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n};\n\nAudioElement.prototype.show = function () {\n // this.audio.play()\n};\n\nAudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n};\n\nAudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n};\n\nAudioElement.prototype.resume = function () {\n this._canPlay = true;\n};\n\nAudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n};\n\nAudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n};\n\nAudioElement.prototype.getBaseElement = function () {\n return null;\n};\n\nAudioElement.prototype.destroy = function () {\n};\n\nAudioElement.prototype.sourceRectAtTime = function () {\n};\n\nAudioElement.prototype.initExpressions = function () {\n};\n\nfunction BaseRenderer() {}\nBaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n if (data.ip - data.st <= (num - this.layers[i].st) && data.op - data.st > (num - this.layers[i].st)) {\n this.buildItem(i);\n }\n }\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n this.checkPendingElements();\n};\n\nBaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n case 0:\n return this.createComp(layer);\n case 1:\n return this.createSolid(layer);\n case 3:\n return this.createNull(layer);\n case 4:\n return this.createShape(layer);\n case 5:\n return this.createText(layer);\n case 6:\n return this.createAudio(layer);\n case 13:\n return this.createCamera(layer);\n case 15:\n return this.createFootage(layer);\n default:\n return this.createNull(layer);\n }\n};\n\nBaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n};\n\nBaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n};\n\nBaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n};\n\nBaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n this.checkPendingElements();\n};\n\nBaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n for (i = 0; i < len; i += 1) {\n j = 0;\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n j += 1;\n }\n }\n};\n\nBaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n};\n\nBaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n};\nBaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n while (i < len) {\n if (layers[i].ind == parentName) { // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n i += 1;\n }\n};\n\nBaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n};\n\nBaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n};\n\nBaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n if (path.length === 0) {\n return element;\n }\n return element.getElementByPath(path);\n};\n\nBaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h,\n };\n};\n\nfunction TransformElement() {}\n\nTransformElement.prototype = {\n initTransform: function () {\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 },\n _matMdf: false,\n _opMdf: false,\n mat: new Matrix(),\n };\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n }\n\n // TODO: check TYPE 11: Guided elements\n if (this.data.ty !== 11) {\n // this.createElements();\n }\n },\n renderTransform: function () {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length;\n // Checking if any of the transformation matrices in the hierarchy chain has changed.\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n }\n }\n },\n globalToLocal: function (pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n var i;\n var len = transforms.length;\n var ptNew;\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\n // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n return pt;\n },\n mHelper: new Matrix(),\n};\n\nfunction MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n for (i = 0; i < len; i += 1) {\n if ((properties[i].mode !== 'a' && properties[i].mode !== 'n') || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: '',\n };\n defs.appendChild(path);\n } else {\n count += 1;\n\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n }\n\n // TODO move this to a factory or to a constructor\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0,\n };\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n }\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect,\n };\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n\n len = currentMasks.length;\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n}\n\nMaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n};\n\nMaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n};\n\nMaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n};\n\nMaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n};\n\nMaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n }\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n }\n // pathNodes.__renderedString = pathString;\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n viewData.lastPath = pathString;\n }\n};\n\nMaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n};\n\nconst filtersFactory = (function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n}());\n\nconst featureSupport = (function () {\n var ob = {\n maskType: true,\n };\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n return ob;\n}());\n\nvar registeredEffects = {};\nvar idPrefix = 'filter_result_';\n\nfunction SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n if (registeredEffects[type].countsAsEffect) {\n count += 1;\n }\n }\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n}\n\nSVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n};\n\nfunction registerEffect(id, effect, countsAsEffect) {\n registeredEffects[id] = {\n effect,\n countsAsEffect,\n };\n}\n\nfunction SVGBaseElement() {\n}\n\nSVGBaseElement.prototype = {\n initRendererElement: function () {\n this.layerElement = createNS('g');\n },\n createContainerElements: function () {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null;\n // If this layer acts as a mask for the following layer\n var filId;\n var fil;\n var gg;\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) { // eslint-disable-line eqeqeq\n var masker = createNS('mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker);\n // This is only for IE and Edge when mask if of type alpha\n if (!featureSupport.maskType && this.data.td == 1) { // eslint-disable-line eqeqeq\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (this.data.td == 2) { // eslint-disable-line eqeqeq\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', this.layerId);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n /// /\n\n // This solution doesn't work on Android when meta tag with viewport attribute is set\n /* var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\n fil.appendChild(feColorMatrix); */\n /// /\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc);\n /// /\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n maskGrouper.appendChild(this.layerElement);\n layerElementParent = maskGrouper;\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n this.globalData.defs.appendChild(maskGroup);\n }\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function () {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n }\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\n }\n },\n destroyBaseElement: function () {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function () {\n if (this.data.hd) {\n return null;\n }\n return this.baseElement;\n },\n createRenderableComponents: function () {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n },\n setMatte: function (id) {\n if (!this.matteElement) {\n return;\n }\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n },\n};\n\n/**\n * @file\n * Handles AE's layer parenting property.\n *\n */\n\nfunction HierarchyElement() {}\n\nHierarchyElement.prototype = {\n /**\n * @function\n * Initializes hierarchy properties\n *\n */\n initHierarchy: function () {\n // element's parent list\n this.hierarchy = [];\n // if element is parent of another layer _isParent will be true\n this._isParent = false;\n this.checkParenting();\n },\n /**\n * @function\n * Sets layer's hierarchy.\n * @param {array} hierarch\n * layer's parent list\n *\n */\n setHierarchy: function (hierarchy) {\n this.hierarchy = hierarchy;\n },\n /**\n * @function\n * Sets layer as parent.\n *\n */\n setAsParent: function () {\n this._isParent = true;\n },\n /**\n * @function\n * Searches layer's parenting chain\n *\n */\n checkParenting: function () {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n },\n};\n\nfunction RenderableDOMElement() {}\n\n(function () {\n var _prototype = {\n initElement: function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function () {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function () {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function () {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function () {},\n prepareFrame: function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function () {\n this.innerElem = null;\n this.destroyBaseElement();\n },\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n}());\n\nfunction IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0, left: 0, width: this.assetData.w, height: this.assetData.h,\n };\n}\n\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\nIImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n\n this.layerElement.appendChild(this.innerElem);\n};\n\nIImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n};\n\nfunction ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n}\n\nfunction IShapeElement() {\n}\n\nIShapeElement.prototype = {\n addShapeToModifiers: function (data) {\n var i;\n var len = this.shapeModifiers.length;\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function (data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n return false;\n },\n renderModifiers: function () {\n if (!this.shapeModifiers.length) {\n return;\n }\n var i;\n var len = this.shapes.length;\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);\n // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n\n searchProcessedElement: function (elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n i += 1;\n }\n return 0;\n },\n addProcessedElement: function (elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n while (i) {\n i -= 1;\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function (num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n },\n};\n\nconst lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square',\n};\n\nconst lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel',\n};\n\nfunction SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level;\n // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n this._isAnimated = !!shape.k;\n // TODO: commenting this for now since all shapes are animated\n var i = 0;\n var len = transformers.length;\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n i += 1;\n }\n}\n\nSVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n};\n\nfunction SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n}\n\nSVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n};\n\nfunction DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = { n: data[i].n, p: prop };\n }\n if (!this.k) {\n this.getValue(true);\n }\n this._isAnimated = this.k;\n}\n\nDashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n};\nextendPrototype([DynamicPropertyContainer], DashProperty);\n\nfunction SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n}\n\nextendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\nfunction SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n}\n\nextendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\nfunction SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n}\n\nextendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\nfunction GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? (data.k.k[0].s.length - data.p * 4) : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n}\n\nGradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n if (diff > 0.01) {\n return false;\n }\n i += 1;\n }\n return true;\n};\n\nGradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n return true;\n};\n\nGradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n if (this.o.length) {\n len = this.prop.v.length;\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n this._mdf = !forceRender;\n }\n};\n\nextendPrototype([DynamicPropertyContainer], GradientProperty);\n\nfunction SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n}\n\nSVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || { k: 0 }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || { k: 0 }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n};\n\nSVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n};\n\nSVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n};\n\nextendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\nfunction SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n}\n\nextendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\nfunction ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n}\n\nfunction SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container,\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n}\n\nconst buildShapeString = function (pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n return shapeString;\n};\n\nconst SVGElementsRenderer = (function () {\n var _identityMatrix = new Matrix();\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction,\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n case 'gf':\n return renderGradient;\n case 'gs':\n return renderGradientStroke;\n case 'st':\n return renderStroke;\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n case 'tr':\n return renderContentTransform;\n case 'no':\n return renderNoop;\n default:\n return null;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderNoop() {\n\n }\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var props;\n var iterations;\n var k;\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (iterations > 0) {\n props = itemData.transformers[k].mProps.v.props;\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n paths = itemData.sh.paths;\n jLen = paths._length;\n if (redraw) {\n pathStringTransformed = '';\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n var stops;\n var i;\n var len;\n var stop;\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n\n var percent = itemData.h.v;\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n }\n // gfill.setAttribute('fy','200');\n }\n }\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n}());\n\nfunction SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = [];\n // Full shape data\n this.shapesData = data.shapes;\n // List of styles that will be applied to shapes\n this.stylesList = [];\n // List of modifiers that will be applied to shapes\n this.shapeModifiers = [];\n // List of items in shape tree\n this.itemsData = [];\n // List of items in previous shape tree\n this.processedElements = [];\n // List of animated components\n this.animatedContents = [];\n this.initElement(data, globalData, comp);\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n this.prevViewData = [];\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n}\n\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\nSVGShapeElement.prototype.initSecondaryElement = function () {\n};\n\nSVGShapeElement.prototype.identityMatrix = new Matrix();\n\nSVGShapeElement.prototype.buildExpressionInterface = function () {};\n\nSVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n};\n\n/*\nThis method searches for multiple shapes that affect a single element and one of them is animated\n*/\nSVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n};\n\nSVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n};\n\nSVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n\n var pathElement = styleOb.pElem;\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n};\n\nSVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n return elementData;\n};\n\nSVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n};\n\nSVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n};\n\nSVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n i += 1;\n }\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data,\n });\n};\n\nSVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n};\n\nSVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n};\n\nSVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n len = ownStyles.length;\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n};\n\nSVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n this.renderShape();\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);\n // Adding M0 0 fixes same mask bug on all browsers\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n};\n\nSVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n};\n\nSVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n};\n\nfunction LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true,\n };\n}\n\nLetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n return updated;\n};\n\nfunction TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false,\n\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n}\n\nTextProperty.prototype.defaultBoxWidth = [0, 0];\n\nTextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n return obj;\n};\n\nTextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n};\n\nTextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n};\n\nTextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n return this.kf;\n};\n\nTextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n};\n\nTextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var i; var\n len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n};\n\nTextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0; var\n len = textKeys.length;\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n i += 1;\n }\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n return this.data.d.k[this.keysIndex].s;\n};\n\nTextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n while (i < len) {\n charCode = text.charCodeAt(i);\n if (FontManager.isCombinedCharacter(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n shouldCombine = false;\n } else {\n charactersArray.push(text.substr(i, 2));\n }\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n shouldCombine = true;\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n shouldCombine = true;\n } else {\n charactersArray.push(text.charAt(i));\n }\n i += 1;\n }\n return charactersArray;\n};\n\nTextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i; var\n len;\n var newLineFlag; var index = 0; var\n val;\n var anchorGrouping = data.m.g;\n var currentSize = 0; var currentPos = 0; var currentLine = 0; var\n lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j; var\n jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData; var\n cLength = 0;\n\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = (documentData.tr / 1000) * documentData.finalSize;\n var charCode;\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight; var\n finalText;\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = (documentData.tr / 1000) * documentData.finalSize;\n var lastSpaceIndex = -1;\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : (charData.w * documentData.finalSize) / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r');\n // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n currentHeight += (fontData.ascent * documentData.finalSize) / 100;\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = (documentData.finalSize * documentData.lh) / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : (charData.w * documentData.finalSize) / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n }\n\n //\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n letters.push({\n l: cLength, an: cLength, add: currentSize, n: newLineFlag, anIndexes: [], val: val, line: currentLine, animatorJustifyOffset: 0,\n });\n if (anchorGrouping == 2) { // eslint-disable-line eqeqeq\n currentSize += cLength;\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) { // eslint-disable-line eqeqeq\n currentSize += cLength;\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n default:\n documentData.justifyOffset = 0;\n }\n }\n documentData.lineWidths = lineWidths;\n\n var animators = data.a; var animatorData; var\n letterData;\n jLen = animators.length;\n var based; var ind; var\n indexes = [];\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n ind = 0;\n based = animatorData.s.b;\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n if ((based == 1 && letterData.val !== '') || (based == 2 && letterData.val !== '' && letterData.val !== ' ') || (based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1)) || (based == 4 && (letterData.n || i == len - 1))) { // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n ind += 1;\n }\n }\n data.a[j].s.totalChars = ind;\n var currentInd = -1; var\n newInd;\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n if (currentInd != letterData.anIndexes[j]) { // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = (fontData.ascent * documentData.finalSize) / 100;\n};\n\nTextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.elem.addDynamicProperty(this);\n};\n\nTextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n};\n\nTextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n};\n\nTextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n};\n\nconst TextSelectorProp = (function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || { k: 0 }, 0, 0, this);\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = { v: 100 };\n }\n this.o = PropertyFactory.getProp(elem, data.o || { k: 0 }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || { k: 0 }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || { k: 0 }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || { k: 100 }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function (ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - (x * x) / (a * a));\n }\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + (Math.cos((Math.PI + Math.PI * 2 * (ind) / (e - s))))) / 2; // eslint-disable-line\n }\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n mult = easer(mult);\n }\n // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n var threshold = 0.5 - smoothness * 0.5;\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n return mult * this.a.v;\n },\n getValue: function (newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = (this.e.v / divisor) + o;\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n this.finalS = s;\n this.finalE = e;\n },\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp,\n };\n}());\n\nfunction TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = { propType: false };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData,\n };\n\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n}\n\nfunction TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {},\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n}\n\nTextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m),\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n};\n\nTextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n if (this._pathData.r.v) {\n paths = paths.reverse();\n }\n // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n pathInfo = {\n tLength: 0,\n segments: [],\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i],\n paths.v[i + 1],\n [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n i = len;\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i],\n paths.v[0],\n [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n this._pathData.pi = pathInfo;\n }\n pathInfo = this._pathData.pi;\n\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n\n jLen = animators.length;\n\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO;\n\n //\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n isNewLine = false;\n }\n }\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n }\n //\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n default:\n break;\n }\n currentLine = letters[i].line;\n }\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n currentLength += (alignment[0] * letters[i].an) * 0.005;\n var animatorOffset = 0;\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n flag = true;\n // Force alignment only works with a single line for now\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + ((totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind) / (len - 1);\n currentLength += this._pathData.f.v;\n }\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate((-alignment[0] * letters[i].an) * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n\n // Grouping alignment\n matrixHelper.translate((-alignment[0] * letters[i].an) * 0.005, (-alignment[1] * yOff) * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult[0]), 1 + ((animatorProps.s.v[1] - 1) * mult[1]), 1);\n } else {\n matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult), 1 + ((animatorProps.s.v[1] - 1) * mult), 1);\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += ((animatorProps.o.v) * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += ((animatorProps.o.v) * mult - elemOpacity) * mult;\n }\n }\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n\n matrixHelper.translate(0, (alignment[1] * yOff) * 0.01 + yPos, 0);\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = (Math.atan(tanAngle) * 180) / Math.PI;\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n matrixHelper.rotate((-rot * Math.PI) / 180);\n }\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= (alignment[0] * letters[i].an) * 0.005;\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += (documentData.tr * 0.001) * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n default:\n break;\n }\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate((alignment[0] * letters[i].an) * 0.005, (alignment[1] * yOff) * 0.01, 0);\n xPos += letters[i].l + (documentData.tr * 0.001) * documentData.finalSize;\n }\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n};\n\nTextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n};\n\nTextAnimatorProperty.prototype.mHelper = new Matrix();\nTextAnimatorProperty.prototype.defaultPropsArray = [];\nextendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\nfunction ITextElement() {\n}\n\nITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n};\n\nITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n};\n\nITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n return shapeStr;\n};\n\nITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n};\n\nITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n};\n\nITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n};\n\nITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n matrixHelper.translate(0, -documentData.ls, 0);\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n default:\n break;\n }\n matrixHelper.translate(xPos, yPos, 0);\n};\n\nITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n};\n\nITextElement.prototype.emptyProp = new LetterProps();\n\nITextElement.prototype.destroy = function () {\n\n};\n\nvar emptyShapeData = {\n shapes: [],\n};\n\nfunction SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n}\n\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\nSVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n};\n\nSVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n i += 1;\n }\n textContents.push(currentTextContent);\n return textContents;\n};\n\nSVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n return data;\n};\n\nSVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n this.layerElement.setAttribute('aria-label', documentData.t);\n\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n case 2:\n justify = 'middle';\n break;\n default:\n justify = 'start';\n break;\n }\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null,\n };\n }\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null,\n };\n }\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0;\n // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n xPos += trackingOffset;\n }\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(\n documentData.finalText[i],\n fontData.fStyle,\n this.globalData.fontManager.getFontByName(documentData.f).fFamily\n );\n var glyphElement;\n // t === 1 means the character has been replaced with an animated shaped\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement);\n // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n }\n //\n }\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n};\n\nSVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height,\n };\n }\n return this.bbox;\n};\n\nSVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n};\n\nSVGTextLottieElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n\n var letters = this.textProperty.currentData.l;\n\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n};\n\nfunction ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n}\nextendPrototype([IImageElement], ISolidElement);\n\nISolidElement.prototype.createContent = function () {\n var rect = createNS('rect');\n /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n};\n\nfunction NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n}\n\nNullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n};\n\nNullElement.prototype.renderFrame = function () {\n};\n\nNullElement.prototype.getBaseElement = function () {\n return null;\n};\n\nNullElement.prototype.destroy = function () {\n};\n\nNullElement.prototype.sourceRectAtTime = function () {\n};\n\nNullElement.prototype.hide = function () {\n};\n\nextendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\nfunction SVGRendererBase() {\n}\n\nextendPrototype([BaseRenderer], SVGRendererBase);\n\nSVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);\n // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n this.animationItem.wrapper.appendChild(this.svgElement);\n // Mask animation\n var defs = this.globalData.defs;\n\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n};\n\nSVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n};\n\nSVGRendererBase.prototype.updateContainerSize = function () {\n};\n\nSVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n\n elements[pos] = element;\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n element.initExpressions();\n }\n this.appendElementInPos(element, pos);\n if (this.layers[pos].tt) {\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n};\n\nSVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n i += 1;\n }\n }\n }\n};\n\nSVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n }\n // console.log('-------');\n // console.log('FRAME ',num);\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n};\n\nSVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n if (!newElement) {\n return;\n }\n var i = 0;\n var nextElement;\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n i += 1;\n }\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n};\n\nSVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n};\n\nSVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n};\n\nfunction ICompElement() {}\n\nextendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\nICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n this.hide();\n};\n\n/* ICompElement.prototype.hide = function(){\n if(!this.hidden){\n this.hideElement();\n var i,len = this.elements.length;\n for( i = 0; i < len; i+=1 ){\n if(this.elements[i]){\n this.elements[i].hide();\n }\n }\n }\n}; */\n\nICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n var i;\n var len = this.elements.length;\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n }\n // This iteration needs to be backwards because of how expressions connect between each other\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n};\n\nICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n};\n\nICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n};\n\nICompElement.prototype.getElements = function () {\n return this.elements;\n};\n\nICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n};\n\nICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n};\n\nfunction SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\n}\n\nextendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\nSVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n};\n\nfunction SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\n imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\n contentVisibility: (config && config.contentVisibility) || 'visible',\n progressiveLoad: (config && config.progressiveLoad) || false,\n hideOnTransparent: !((config && config.hideOnTransparent === false)),\n viewBoxOnly: (config && config.viewBoxOnly) || false,\n viewBoxSize: (config && config.viewBoxSize) || false,\n className: (config && config.className) || '',\n id: (config && config.id) || '',\n focusable: config && config.focusable,\n filterSize: {\n width: (config && config.filterSize && config.filterSize.width) || '100%',\n height: (config && config.filterSize && config.filterSize.height) || '100%',\n x: (config && config.filterSize && config.filterSize.x) || '0%',\n y: (config && config.filterSize && config.filterSize.y) || '0%',\n },\n width: (config && config.width),\n height: (config && config.height),\n };\n\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig,\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n}\n\nextendPrototype([SVGRendererBase], SVGRenderer);\n\nSVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n};\n\nfunction CVContextData() {\n this.saved = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n this.cO = 1;\n var i;\n var len = 15;\n this.savedOp = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n this._length = len;\n}\n\nCVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var currentSavedOp = this.savedOp;\n this.savedOp = createTypedArray('float32', newLength);\n this.savedOp.set(currentSavedOp);\n var i = 0;\n for (i = this._length; i < newLength; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n this._length = newLength;\n};\n\nCVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.cO = 1;\n};\n\nfunction ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n}\n\nShapeTransformManager.prototype = {\n addTransformSequence: function (transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n var sequence = this.sequences[key];\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false,\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n return sequence;\n },\n processSequence: function (sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n i += 1;\n }\n if (_mdf) {\n var props;\n sequence.finalTransform.reset();\n for (i = len - 1; i >= 0; i -= 1) {\n props = sequence.transforms[i].transform.mProps.v.props;\n sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n }\n }\n sequence._mdf = _mdf;\n },\n processSequences: function (isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function () {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n },\n};\n\nfunction CVEffects() {\n\n}\nCVEffects.prototype.renderFrame = function () {};\n\nfunction CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n this.hasMasks = hasMasks;\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n}\n\nCVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n this.element.globalData.renderer.save(true);\n ctx.clip();\n};\n\nCVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\nCVMaskElement.prototype.destroy = function () {\n this.element = null;\n};\n\nfunction CVBaseElement() {\n}\n\nCVBaseElement.prototype = {\n createElements: function () {},\n initRendererElement: function () {},\n createContainerElements: function () {\n this.canvasContext = this.globalData.canvasContext;\n this.renderableEffectsManager = new CVEffects(this);\n },\n createContent: function () {},\n setBlendMode: function () {\n var globalData = this.globalData;\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function () {\n this.maskManager = new CVMaskElement(this.data, this);\n },\n hideElement: function () {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function () {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n renderFrame: function () {\n if (this.hidden || this.data.hd) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function () {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix(),\n};\nCVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\nCVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\nfunction CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: [],\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n}\n\nCVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\nfunction CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n}\n\nextendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n\nCVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n\nCVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: false };\n\nCVShapeElement.prototype.dashResetter = [];\n\nCVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n};\n\nCVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true,\n };\n var elementData = {};\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || { k: 0 }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || { k: 0 }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n if (data.lj == 1) { // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem.do = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n};\n\nCVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: [],\n };\n return elementData;\n};\n\nCVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this),\n },\n };\n return elementData;\n};\n\nCVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n};\n\nCVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n};\n\nCVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n};\n\nCVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n};\n\nCVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n};\n\nCVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n};\n\nCVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n};\n\nCVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n};\n\nCVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type;\n\n // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n if (!(((type === 'st' || type === 'gs') && currentStyle.wi === 0) || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n if (type === 'st' || type === 'gs') {\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n ctx.lineWidth = currentStyle.wi;\n ctx.lineCap = currentStyle.lc;\n ctx.lineJoin = currentStyle.lj;\n ctx.miterLimit = currentStyle.ml || 0;\n } else {\n ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n renderer.ctxOpacity(currentStyle.coOp);\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle.do;\n }\n }\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n if (type === 'st' || type === 'gs') {\n ctx.stroke();\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n if (type !== 'st' && type !== 'gs') {\n ctx.fill(currentStyle.r);\n }\n renderer.restore();\n }\n }\n};\n\nCVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {\n //\n }\n }\n if (isMain) {\n this.drawLayer();\n }\n};\n\nCVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n });\n }\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]),\n });\n }\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n });\n }\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]),\n });\n shapeNodes.push({\n t: 'z',\n });\n }\n }\n }\n styledShape.trNodes = shapeNodes;\n }\n};\n\nCVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n};\n\nCVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb('\n + bmFloor(itemData.c.v[0]) + ','\n + bmFloor(itemData.c.v[1]) + ','\n + bmFloor(itemData.c.v[2]) + ')';\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n};\n\nCVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || (styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf))) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n\n var percent = itemData.h.v;\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n styleElem.grd = grd;\n }\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n};\n\nCVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem.do = d.dashoffset[0];\n }\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n};\n\nCVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n};\n\nfunction CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: '',\n };\n this.initElement(data, globalData, comp);\n}\nextendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n\nCVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\nCVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n\n var hasFill = false;\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n this.fill = hasFill;\n var hasStroke = false;\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length;\n // this.tHelper.font = this.values.fValue;\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = (charData && charData.data) || {};\n matrixHelper.reset();\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = { elem: commands };\n }\n cnt += 1;\n }\n};\n\nCVTextElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n\n var letters = this.textProperty.currentData.l;\n\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\n }\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n lastFill = renderedLetter.fc;\n ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n ctx.fillStyle = this.values.fill;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.fill();\n /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n ctx.lineWidth = this.values.sWidth;\n }\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n ctx.strokeStyle = this.values.stroke;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.stroke();\n /// ctx.strokeText(letters[i].val,0,0);\n }\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n};\n\nfunction CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n}\nextendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n\nCVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\nCVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\nCVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n if ((imgRel > canvasRel && par === 'xMidYMid slice') || (imgRel < canvasRel && par !== 'xMidYMid slice')) {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n};\n\nCVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n};\n\nCVImageElement.prototype.destroy = function () {\n this.img = null;\n};\n\nfunction CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n}\nextendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n\nCVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\nCVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\nCVSolidElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n};\n\nfunction CanvasRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: (config && config.clearCanvas !== undefined) ? config.clearCanvas : true,\n context: (config && config.context) || null,\n progressiveLoad: (config && config.progressiveLoad) || false,\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\n imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\n contentVisibility: (config && config.contentVisibility) || 'visible',\n className: (config && config.className) || '',\n id: (config && config.id) || '',\n };\n this.renderConfig.dpr = (config && config.dpr) || 1;\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1;\n }\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1,\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n}\nextendPrototype([BaseRenderer], CanvasRendererBase);\n\nCanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n};\n\nCanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n};\n\nCanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n};\n\nCanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n};\n\nCanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\nCanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n this.transformMat.cloneFromProps(props);\n var cProps = this.contextData.cTr.props;\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]);\n // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\n var trProps = this.contextData.cTr.props;\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n};\n\nCanvasRendererBase.prototype.ctxOpacity = function (op) {\n /* if(op === 1){\n return;\n } */\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n return;\n }\n this.contextData.cO *= op < 0 ? 0 : op;\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n this.canvasContext.globalAlpha = this.contextData.cO;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n }\n};\n\nCanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n this.contextData.reset();\n};\n\nCanvasRendererBase.prototype.save = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n if (actionFlag) {\n this.canvasContext.save();\n }\n var props = this.contextData.cTr.props;\n if (this.contextData._length <= this.contextData.cArrPos) {\n this.contextData.duplicate();\n }\n var i;\n var arr = this.contextData.saved[this.contextData.cArrPos];\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n};\n\nCanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n if (actionFlag) {\n this.canvasContext.restore();\n this.globalData.blendMode = 'source-over';\n }\n this.contextData.cArrPos -= 1;\n var popped = this.contextData.saved[this.contextData.cArrPos];\n var i;\n var arr = this.contextData.cTr.props;\n for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\n }\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n popped = this.contextData.savedOp[this.contextData.cArrPos];\n this.contextData.cO = popped;\n if (this.globalData.currentGlobalAlpha !== popped) {\n this.canvasContext.globalAlpha = popped;\n this.globalData.currentGlobalAlpha = popped;\n }\n};\n\nCanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0,\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n\n this.updateContainerSize();\n};\n\nCanvasRendererBase.prototype.updateContainerSize = function () {\n this.reset();\n var elementWidth;\n var elementHeight;\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n } else {\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n }\n var elementRel;\n var animationRel;\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n if ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))) {\n this.transformCanvas.tx = ((elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2) * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n if (yPos === 'YMid' && ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))) {\n this.transformCanvas.ty = ((elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2) * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))) {\n this.transformCanvas.ty = ((elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w))) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n};\n\nCanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if ((this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender) || this.destroyed || num === -1) {\n return;\n }\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num;\n\n // console.log('--------');\n // console.log('NEW: ',num);\n var i;\n var len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n};\n\nCanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\n element.resize(this.globalData.transformCanvas);\n } */\n};\n\nCanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n};\n\nCanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n};\n\nCanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n};\n\nfunction CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\n}\n\nextendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\nCVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n};\n\nCVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.layers = null;\n this.elements = null;\n};\n\nCVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n};\n\nfunction CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: (config && config.clearCanvas !== undefined) ? config.clearCanvas : true,\n context: (config && config.context) || null,\n progressiveLoad: (config && config.progressiveLoad) || false,\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\n imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\n contentVisibility: (config && config.contentVisibility) || 'visible',\n className: (config && config.className) || '',\n id: (config && config.id) || '',\n };\n this.renderConfig.dpr = (config && config.dpr) || 1;\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1;\n }\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1,\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n}\nextendPrototype([CanvasRendererBase], CanvasRenderer);\n\nCanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n};\n\n// Registering renderers\nregisterRenderer('canvas', CanvasRenderer);\n\n// Registering shape modifiers\nShapeModifiers.registerModifier('tm', TrimModifier);\nShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\nShapeModifiers.registerModifier('rp', RepeaterModifier);\nShapeModifiers.registerModifier('rd', RoundCornersModifier);\n\nconst Expressions = (function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i;\n var len = registers.length;\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n return ob;\n}());\n\n/* eslint-disable */\n/*\n Copyright 2014 David Bau.\n\n Permission is hereby granted, free of charge, to any person obtaining\n a copy of this software and associated documentation files (the\n \"Software\"), to deal in the Software without restriction, including\n without limitation the rights to use, copy, modify, merge, publish,\n distribute, sublicense, and/or sell copies of the Software, and to\n permit persons to whom the Software is furnished to do so, subject to\n the following conditions:\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n */\n\nfunction seedRandom(pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n var global = this,\n width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\n function seedrandom(seed, options, callback) {\n var key = [];\n options = (options === true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed === null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; };\n prng.quick = function() { return arc4.g(4) / 0x100000000; };\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); };\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n }\n math['seed' + rngname] = seedrandom;\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\n function ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n }\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n }\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\n function flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n }\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\n function mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n }\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\n function autoseed() {\n try {\n if (nodecrypto) { return tostring(nodecrypto.randomBytes(width)); }\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n }\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n }\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\n mixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\n\n// End anonymous scope, and pass initial values.\n};\n\nfunction initialize$2(BMMath) {\n seedRandom([], BMMath);\n}\n\nvar propTypes = {\n SHAPE: 'shape',\n};\n\n/* eslint-disable camelcase */\n\nconst ExpressionManager = (function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n initialize$2(BMMath);\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n }\n\n function $bm_neg(a) {\n var tOfA = typeof a;\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n return -a;\n }\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n return retArr;\n }\n if (a.propType) {\n return a.v;\n }\n return -a;\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n if (tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a + b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n i += 1;\n }\n return retArr;\n }\n return 0;\n }\n var add = sum;\n\n function sub(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n return a - b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n i += 1;\n }\n return retArr;\n }\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n return arr;\n }\n return 0;\n }\n\n function div(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n return arr;\n }\n return 0;\n }\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n return a % b;\n }\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n var degrees_to_radians = radiansToDegrees;\n\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0]; var g = val[1]; var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = 0; // achromatic\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n\n var r;\n var g;\n var b;\n\n if (s === 0) {\n r = l; // achromatic\n b = l; // achromatic\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n if (t <= tMin) {\n return value1;\n } if (t >= tMax) {\n return value2;\n }\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n return arr;\n }\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n if (max.length) {\n var i;\n var len = max.length;\n if (!min) {\n min = createTypedArray('float32', len);\n }\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n return arr;\n }\n if (min === undefined) {\n min = 0;\n }\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n for (i = 0; i < len; i += 1) {\n inVertexPoint = (inTangents && inTangents[i]) ? inTangents[i] : arrPlaceholder;\n outVertexPoint = (outTangents && outTangents[i]) ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n var _needsRandom = val.indexOf('random') !== -1;\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function () {\n return thisProperty.v;\n },\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n\n var scoped_bm_rt;\n // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n var numKeys = property.kf ? data.k.length : 0;\n\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random();\n // addedAmps[j] += -amp + amp*2*rnd;\n }\n iWiggle += 1;\n }\n // var rnd2 = BMMath.random();\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc;\n // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n return arr;\n }\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n var mult = fn(t);\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n return arr;\n }\n return (val2 - val1) * mult + val1;\n }\n\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n if (!data.k.length || typeof (data.k[0]) === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n break;\n }\n }\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n if (!data.k.length || typeof (data.k[0]) === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: [],\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n\n lenKey = arr.length;\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n return obKey;\n }\n\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return fr / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n return value.substring(init, end);\n }\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n return value.substr(init, end);\n }\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\n rotation = transform.rotation;\n scale = transform.scale; */\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n if (!effect) {\n effect = thisLayer(4);\n }\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n expression_function();\n this.frameExpressionId = elem.globalData.frameId;\n\n // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE\n ? scoped_bm_rt.v\n : scoped_bm_rt;\n return scoped_bm_rt;\n }\n // Bundlers will see these as dead code and unless we reference them\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath];\n return ob;\n}());\n\nconst expressionHelpers = (function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n if (v1.length) {\n var i;\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n var delta = -0.001;\n // frameNum += this.elem.data.st;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty,\n };\n}());\n\nfunction addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var firstKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (iterations % 2 !== 0) {\n return this.getValueAtTime(((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n return ret;\n }\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n return ret;\n }\n return lastValue + (lastValue - nextLastValue) * (((currentFrame - lastKeyFrame)) / 0.001);\n }\n return this.getValueAtTime((((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var lastKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n if (iterations % 2 === 0) {\n return this.getValueAtTime((((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration) + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n return ret;\n }\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + ((firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame)) / 0.001;\n }\n return ret;\n }\n return firstValue + ((firstValue - nextFirstValue) * (firstKeyFrame - currentFrame)) / 0.001;\n }\n return this.getValueAtTime(((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame))) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n if (samples <= 1) {\n return this.pv;\n }\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n var sampleValue;\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n i += 1;\n }\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n return value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix(),\n };\n }\n /// /\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(\n -anchor[0] * this.a.mult,\n -anchor[1] * this.a.mult,\n anchor[2] * this.a.mult\n );\n }\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(\n scale[0] * this.s.mult,\n scale[1] * this.s.mult,\n scale[2] * this.s.mult\n );\n }\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult)\n .rotateY(rotationY * this.ry.mult)\n .rotateX(rotationX * this.rx.mult)\n .rotateZ(-orientation[2] * this.or.mult)\n .rotateY(orientation[1] * this.or.mult)\n .rotateX(orientation[0] * this.or.mult);\n }\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(\n positionX * this.px.mult,\n positionY * this.py.mult,\n -positionZ * this.pz.mult\n );\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(\n position[0] * this.p.mult,\n position[1] * this.p.mult,\n -position[2] * this.p.mult\n );\n }\n return matrix;\n /// /\n }\n\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container);\n // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value,\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame,\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n ShapeExpressions.prototype = {\n vertices: function (prop, time) {\n if (this.k) {\n this.getValue();\n }\n var shapePath = this.v;\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n return arr;\n },\n points: function (time) {\n return this.vertices('v', time);\n },\n inTangents: function (time) {\n return this.vertices('i', time);\n },\n outTangents: function (time) {\n return this.vertices('o', time);\n },\n isClosed: function () {\n return this.v.c;\n },\n pointOnPath: function (perc, time) {\n var shapePath = this.v;\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = (shapePath.c && i === len - 1) ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n i += 1;\n }\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n return pt;\n },\n vectorOnPath: function (perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) { // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) { // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n if (magnitude === 0) {\n return [0, 0];\n }\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function (perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function (perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime,\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n };\n}\n\nfunction initialize$1() {\n addPropertyDecorator();\n}\n\nfunction addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n return null;\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n}\n\nfunction initialize() {\n addDecorator();\n}\n\n// Registering expression plugin\nsetExpressionsPlugin(Expressions);\ninitialize$1();\ninitialize();\n\n}\n\nexport { lottie as default };\n", "import {\n\tFileLoader,\n\tLoader,\n\tCanvasTexture,\n\tNearestFilter,\n\tSRGBColorSpace\n} from 'three';\n\nimport lottie from '../libs/lottie_canvas.module.js';\n\nclass LottieLoader extends Loader {\n\n\tsetQuality( value ) {\n\n\t\tthis._quality = value;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst quality = this._quality || 1;\n\n\t\tconst texture = new CanvasTexture();\n\t\ttexture.minFilter = NearestFilter;\n\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tconst data = JSON.parse( text );\n\n\t\t\t// lottie uses container.offetWidth and offsetHeight\n\t\t\t// to define width/height\n\n\t\t\tconst container = document.createElement( 'div' );\n\t\t\tcontainer.style.width = data.w + 'px';\n\t\t\tcontainer.style.height = data.h + 'px';\n\t\t\tdocument.body.appendChild( container );\n\n\t\t\tconst animation = lottie.loadAnimation( {\n\t\t\t\tcontainer: container,\n\t\t\t\tanimType: 'canvas',\n\t\t\t\tloop: true,\n\t\t\t\tautoplay: true,\n\t\t\t\tanimationData: data,\n\t\t\t\trendererSettings: { dpr: quality }\n\t\t\t} );\n\n\t\t\ttexture.animation = animation;\n\t\t\ttexture.image = animation.container;\n\n\t\t\tanimation.addEventListener( 'enterFrame', function () {\n\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t} );\n\n\t\t\tcontainer.style.display = 'none';\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nexport { LottieLoader };\n", "import {\n\tAnimationClip,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tVector3\n} from 'three';\n\nconst _normalData = [\n\t[ - 0.525731, 0.000000, 0.850651 ], [ - 0.442863, 0.238856, 0.864188 ],\n\t[ - 0.295242, 0.000000, 0.955423 ], [ - 0.309017, 0.500000, 0.809017 ],\n\t[ - 0.162460, 0.262866, 0.951056 ], [ 0.000000, 0.000000, 1.000000 ],\n\t[ 0.000000, 0.850651, 0.525731 ], [ - 0.147621, 0.716567, 0.681718 ],\n\t[ 0.147621, 0.716567, 0.681718 ], [ 0.000000, 0.525731, 0.850651 ],\n\t[ 0.309017, 0.500000, 0.809017 ], [ 0.525731, 0.000000, 0.850651 ],\n\t[ 0.295242, 0.000000, 0.955423 ], [ 0.442863, 0.238856, 0.864188 ],\n\t[ 0.162460, 0.262866, 0.951056 ], [ - 0.681718, 0.147621, 0.716567 ],\n\t[ - 0.809017, 0.309017, 0.500000 ], [ - 0.587785, 0.425325, 0.688191 ],\n\t[ - 0.850651, 0.525731, 0.000000 ], [ - 0.864188, 0.442863, 0.238856 ],\n\t[ - 0.716567, 0.681718, 0.147621 ], [ - 0.688191, 0.587785, 0.425325 ],\n\t[ - 0.500000, 0.809017, 0.309017 ], [ - 0.238856, 0.864188, 0.442863 ],\n\t[ - 0.425325, 0.688191, 0.587785 ], [ - 0.716567, 0.681718, - 0.147621 ],\n\t[ - 0.500000, 0.809017, - 0.309017 ], [ - 0.525731, 0.850651, 0.000000 ],\n\t[ 0.000000, 0.850651, - 0.525731 ], [ - 0.238856, 0.864188, - 0.442863 ],\n\t[ 0.000000, 0.955423, - 0.295242 ], [ - 0.262866, 0.951056, - 0.162460 ],\n\t[ 0.000000, 1.000000, 0.000000 ], [ 0.000000, 0.955423, 0.295242 ],\n\t[ - 0.262866, 0.951056, 0.162460 ], [ 0.238856, 0.864188, 0.442863 ],\n\t[ 0.262866, 0.951056, 0.162460 ], [ 0.500000, 0.809017, 0.309017 ],\n\t[ 0.238856, 0.864188, - 0.442863 ], [ 0.262866, 0.951056, - 0.162460 ],\n\t[ 0.500000, 0.809017, - 0.309017 ], [ 0.850651, 0.525731, 0.000000 ],\n\t[ 0.716567, 0.681718, 0.147621 ], [ 0.716567, 0.681718, - 0.147621 ],\n\t[ 0.525731, 0.850651, 0.000000 ], [ 0.425325, 0.688191, 0.587785 ],\n\t[ 0.864188, 0.442863, 0.238856 ], [ 0.688191, 0.587785, 0.425325 ],\n\t[ 0.809017, 0.309017, 0.500000 ], [ 0.681718, 0.147621, 0.716567 ],\n\t[ 0.587785, 0.425325, 0.688191 ], [ 0.955423, 0.295242, 0.000000 ],\n\t[ 1.000000, 0.000000, 0.000000 ], [ 0.951056, 0.162460, 0.262866 ],\n\t[ 0.850651, - 0.525731, 0.000000 ], [ 0.955423, - 0.295242, 0.000000 ],\n\t[ 0.864188, - 0.442863, 0.238856 ], [ 0.951056, - 0.162460, 0.262866 ],\n\t[ 0.809017, - 0.309017, 0.500000 ], [ 0.681718, - 0.147621, 0.716567 ],\n\t[ 0.850651, 0.000000, 0.525731 ], [ 0.864188, 0.442863, - 0.238856 ],\n\t[ 0.809017, 0.309017, - 0.500000 ], [ 0.951056, 0.162460, - 0.262866 ],\n\t[ 0.525731, 0.000000, - 0.850651 ], [ 0.681718, 0.147621, - 0.716567 ],\n\t[ 0.681718, - 0.147621, - 0.716567 ], [ 0.850651, 0.000000, - 0.525731 ],\n\t[ 0.809017, - 0.309017, - 0.500000 ], [ 0.864188, - 0.442863, - 0.238856 ],\n\t[ 0.951056, - 0.162460, - 0.262866 ], [ 0.147621, 0.716567, - 0.681718 ],\n\t[ 0.309017, 0.500000, - 0.809017 ], [ 0.425325, 0.688191, - 0.587785 ],\n\t[ 0.442863, 0.238856, - 0.864188 ], [ 0.587785, 0.425325, - 0.688191 ],\n\t[ 0.688191, 0.587785, - 0.425325 ], [ - 0.147621, 0.716567, - 0.681718 ],\n\t[ - 0.309017, 0.500000, - 0.809017 ], [ 0.000000, 0.525731, - 0.850651 ],\n\t[ - 0.525731, 0.000000, - 0.850651 ], [ - 0.442863, 0.238856, - 0.864188 ],\n\t[ - 0.295242, 0.000000, - 0.955423 ], [ - 0.162460, 0.262866, - 0.951056 ],\n\t[ 0.000000, 0.000000, - 1.000000 ], [ 0.295242, 0.000000, - 0.955423 ],\n\t[ 0.162460, 0.262866, - 0.951056 ], [ - 0.442863, - 0.238856, - 0.864188 ],\n\t[ - 0.309017, - 0.500000, - 0.809017 ], [ - 0.162460, - 0.262866, - 0.951056 ],\n\t[ 0.000000, - 0.850651, - 0.525731 ], [ - 0.147621, - 0.716567, - 0.681718 ],\n\t[ 0.147621, - 0.716567, - 0.681718 ], [ 0.000000, - 0.525731, - 0.850651 ],\n\t[ 0.309017, - 0.500000, - 0.809017 ], [ 0.442863, - 0.238856, - 0.864188 ],\n\t[ 0.162460, - 0.262866, - 0.951056 ], [ 0.238856, - 0.864188, - 0.442863 ],\n\t[ 0.500000, - 0.809017, - 0.309017 ], [ 0.425325, - 0.688191, - 0.587785 ],\n\t[ 0.716567, - 0.681718, - 0.147621 ], [ 0.688191, - 0.587785, - 0.425325 ],\n\t[ 0.587785, - 0.425325, - 0.688191 ], [ 0.000000, - 0.955423, - 0.295242 ],\n\t[ 0.000000, - 1.000000, 0.000000 ], [ 0.262866, - 0.951056, - 0.162460 ],\n\t[ 0.000000, - 0.850651, 0.525731 ], [ 0.000000, - 0.955423, 0.295242 ],\n\t[ 0.238856, - 0.864188, 0.442863 ], [ 0.262866, - 0.951056, 0.162460 ],\n\t[ 0.500000, - 0.809017, 0.309017 ], [ 0.716567, - 0.681718, 0.147621 ],\n\t[ 0.525731, - 0.850651, 0.000000 ], [ - 0.238856, - 0.864188, - 0.442863 ],\n\t[ - 0.500000, - 0.809017, - 0.309017 ], [ - 0.262866, - 0.951056, - 0.162460 ],\n\t[ - 0.850651, - 0.525731, 0.000000 ], [ - 0.716567, - 0.681718, - 0.147621 ],\n\t[ - 0.716567, - 0.681718, 0.147621 ], [ - 0.525731, - 0.850651, 0.000000 ],\n\t[ - 0.500000, - 0.809017, 0.309017 ], [ - 0.238856, - 0.864188, 0.442863 ],\n\t[ - 0.262866, - 0.951056, 0.162460 ], [ - 0.864188, - 0.442863, 0.238856 ],\n\t[ - 0.809017, - 0.309017, 0.500000 ], [ - 0.688191, - 0.587785, 0.425325 ],\n\t[ - 0.681718, - 0.147621, 0.716567 ], [ - 0.442863, - 0.238856, 0.864188 ],\n\t[ - 0.587785, - 0.425325, 0.688191 ], [ - 0.309017, - 0.500000, 0.809017 ],\n\t[ - 0.147621, - 0.716567, 0.681718 ], [ - 0.425325, - 0.688191, 0.587785 ],\n\t[ - 0.162460, - 0.262866, 0.951056 ], [ 0.442863, - 0.238856, 0.864188 ],\n\t[ 0.162460, - 0.262866, 0.951056 ], [ 0.309017, - 0.500000, 0.809017 ],\n\t[ 0.147621, - 0.716567, 0.681718 ], [ 0.000000, - 0.525731, 0.850651 ],\n\t[ 0.425325, - 0.688191, 0.587785 ], [ 0.587785, - 0.425325, 0.688191 ],\n\t[ 0.688191, - 0.587785, 0.425325 ], [ - 0.955423, 0.295242, 0.000000 ],\n\t[ - 0.951056, 0.162460, 0.262866 ], [ - 1.000000, 0.000000, 0.000000 ],\n\t[ - 0.850651, 0.000000, 0.525731 ], [ - 0.955423, - 0.295242, 0.000000 ],\n\t[ - 0.951056, - 0.162460, 0.262866 ], [ - 0.864188, 0.442863, - 0.238856 ],\n\t[ - 0.951056, 0.162460, - 0.262866 ], [ - 0.809017, 0.309017, - 0.500000 ],\n\t[ - 0.864188, - 0.442863, - 0.238856 ], [ - 0.951056, - 0.162460, - 0.262866 ],\n\t[ - 0.809017, - 0.309017, - 0.500000 ], [ - 0.681718, 0.147621, - 0.716567 ],\n\t[ - 0.681718, - 0.147621, - 0.716567 ], [ - 0.850651, 0.000000, - 0.525731 ],\n\t[ - 0.688191, 0.587785, - 0.425325 ], [ - 0.587785, 0.425325, - 0.688191 ],\n\t[ - 0.425325, 0.688191, - 0.587785 ], [ - 0.425325, - 0.688191, - 0.587785 ],\n\t[ - 0.587785, - 0.425325, - 0.688191 ], [ - 0.688191, - 0.587785, - 0.425325 ]\n];\n\nclass MD2Loader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst data = new DataView( buffer );\n\n\t\t// http://tfc.duke.free.fr/coding/md2-specs-en.html\n\n\t\tconst header = {};\n\t\tconst headerNames = [\n\t\t\t'ident', 'version',\n\t\t\t'skinwidth', 'skinheight',\n\t\t\t'framesize',\n\t\t\t'num_skins', 'num_vertices', 'num_st', 'num_tris', 'num_glcmds', 'num_frames',\n\t\t\t'offset_skins', 'offset_st', 'offset_tris', 'offset_frames', 'offset_glcmds', 'offset_end'\n\t\t];\n\n\t\tfor ( let i = 0; i < headerNames.length; i ++ ) {\n\n\t\t\theader[ headerNames[ i ] ] = data.getInt32( i * 4, true );\n\n\t\t}\n\n\t\tif ( header.ident !== 844121161 || header.version !== 8 ) {\n\n\t\t\tconsole.error( 'Not a valid MD2 file' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( header.offset_end !== data.byteLength ) {\n\n\t\t\tconsole.error( 'Corrupted MD2 file' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\t// uvs\n\n\t\tconst uvsTemp = [];\n\t\tlet offset = header.offset_st;\n\n\t\tfor ( let i = 0, l = header.num_st; i < l; i ++ ) {\n\n\t\t\tconst u = data.getInt16( offset + 0, true );\n\t\t\tconst v = data.getInt16( offset + 2, true );\n\n\t\t\tuvsTemp.push( u / header.skinwidth, 1 - ( v / header.skinheight ) );\n\n\t\t\toffset += 4;\n\n\t\t}\n\n\t\t// triangles\n\n\t\toffset = header.offset_tris;\n\n\t\tconst vertexIndices = [];\n\t\tconst uvIndices = [];\n\n\t\tfor ( let i = 0, l = header.num_tris; i < l; i ++ ) {\n\n\t\t\tvertexIndices.push(\n\t\t\t\tdata.getUint16( offset + 0, true ),\n\t\t\t\tdata.getUint16( offset + 2, true ),\n\t\t\t\tdata.getUint16( offset + 4, true )\n\t\t\t);\n\n\t\t\tuvIndices.push(\n\t\t\t\tdata.getUint16( offset + 6, true ),\n\t\t\t\tdata.getUint16( offset + 8, true ),\n\t\t\t\tdata.getUint16( offset + 10, true )\n\t\t\t);\n\n\t\t\toffset += 12;\n\n\t\t}\n\n\t\t// frames\n\n\t\tconst translation = new Vector3();\n\t\tconst scale = new Vector3();\n\n\t\tconst frames = [];\n\n\t\toffset = header.offset_frames;\n\n\t\tfor ( let i = 0, l = header.num_frames; i < l; i ++ ) {\n\n\t\t\tscale.set(\n\t\t\t\tdata.getFloat32( offset + 0, true ),\n\t\t\t\tdata.getFloat32( offset + 4, true ),\n\t\t\t\tdata.getFloat32( offset + 8, true )\n\t\t\t);\n\n\t\t\ttranslation.set(\n\t\t\t\tdata.getFloat32( offset + 12, true ),\n\t\t\t\tdata.getFloat32( offset + 16, true ),\n\t\t\t\tdata.getFloat32( offset + 20, true )\n\t\t\t);\n\n\t\t\toffset += 24;\n\n\t\t\tconst string = [];\n\n\t\t\tfor ( let j = 0; j < 16; j ++ ) {\n\n\t\t\t\tconst character = data.getUint8( offset + j );\n\t\t\t\tif ( character === 0 ) break;\n\n\t\t\t\tstring[ j ] = character;\n\n\t\t\t}\n\n\t\t\tconst frame = {\n\t\t\t\tname: String.fromCharCode.apply( null, string ),\n\t\t\t\tvertices: [],\n\t\t\t\tnormals: []\n\t\t\t};\n\n\t\t\toffset += 16;\n\n\t\t\tfor ( let j = 0; j < header.num_vertices; j ++ ) {\n\n\t\t\t\tlet x = data.getUint8( offset ++ );\n\t\t\t\tlet y = data.getUint8( offset ++ );\n\t\t\t\tlet z = data.getUint8( offset ++ );\n\t\t\t\tconst n = _normalData[ data.getUint8( offset ++ ) ];\n\n\t\t\t\tx = x * scale.x + translation.x;\n\t\t\t\ty = y * scale.y + translation.y;\n\t\t\t\tz = z * scale.z + translation.z;\n\n\t\t\t\tframe.vertices.push( x, z, y ); // convert to Y-up\n\t\t\t\tframe.normals.push( n[ 0 ], n[ 2 ], n[ 1 ] ); // convert to Y-up\n\n\t\t\t}\n\n\t\t\tframes.push( frame );\n\n\t\t}\n\n\t\t// static\n\n\t\tconst positions = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tconst verticesTemp = frames[ 0 ].vertices;\n\t\tconst normalsTemp = frames[ 0 ].normals;\n\n\t\tfor ( let i = 0, l = vertexIndices.length; i < l; i ++ ) {\n\n\t\t\tconst vertexIndex = vertexIndices[ i ];\n\t\t\tlet stride = vertexIndex * 3;\n\n\t\t\t//\n\n\t\t\tconst x = verticesTemp[ stride ];\n\t\t\tconst y = verticesTemp[ stride + 1 ];\n\t\t\tconst z = verticesTemp[ stride + 2 ];\n\n\t\t\tpositions.push( x, y, z );\n\n\t\t\t//\n\n\t\t\tconst nx = normalsTemp[ stride ];\n\t\t\tconst ny = normalsTemp[ stride + 1 ];\n\t\t\tconst nz = normalsTemp[ stride + 2 ];\n\n\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t//\n\n\t\t\tconst uvIndex = uvIndices[ i ];\n\t\t\tstride = uvIndex * 2;\n\n\t\t\tconst u = uvsTemp[ stride ];\n\t\t\tconst v = uvsTemp[ stride + 1 ];\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// animation\n\n\t\tconst morphPositions = [];\n\t\tconst morphNormals = [];\n\n\t\tfor ( let i = 0, l = frames.length; i < l; i ++ ) {\n\n\t\t\tconst frame = frames[ i ];\n\t\t\tconst attributeName = frame.name;\n\n\t\t\tif ( frame.vertices.length > 0 ) {\n\n\t\t\t\tconst positions = [];\n\n\t\t\t\tfor ( let j = 0, jl = vertexIndices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertexIndex = vertexIndices[ j ];\n\t\t\t\t\tconst stride = vertexIndex * 3;\n\n\t\t\t\t\tconst x = frame.vertices[ stride ];\n\t\t\t\t\tconst y = frame.vertices[ stride + 1 ];\n\t\t\t\t\tconst z = frame.vertices[ stride + 2 ];\n\n\t\t\t\t\tpositions.push( x, y, z );\n\n\t\t\t\t}\n\n\t\t\t\tconst positionAttribute = new Float32BufferAttribute( positions, 3 );\n\t\t\t\tpositionAttribute.name = attributeName;\n\n\t\t\t\tmorphPositions.push( positionAttribute );\n\n\t\t\t}\n\n\t\t\tif ( frame.normals.length > 0 ) {\n\n\t\t\t\tconst normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = vertexIndices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertexIndex = vertexIndices[ j ];\n\t\t\t\t\tconst stride = vertexIndex * 3;\n\n\t\t\t\t\tconst nx = frame.normals[ stride ];\n\t\t\t\t\tconst ny = frame.normals[ stride + 1 ];\n\t\t\t\t\tconst nz = frame.normals[ stride + 2 ];\n\n\t\t\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t\t}\n\n\t\t\t\tconst normalAttribute = new Float32BufferAttribute( normals, 3 );\n\t\t\t\tnormalAttribute.name = attributeName;\n\n\t\t\t\tmorphNormals.push( normalAttribute );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.morphAttributes.position = morphPositions;\n\t\tgeometry.morphAttributes.normal = morphNormals;\n\t\tgeometry.morphTargetsRelative = false;\n\n\t\tgeometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences( frames, 10 );\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nexport { MD2Loader };\n", "/**\n * MDD is a special format that stores a position for every vertex in a model for every frame in an animation.\n * Similar to BVH, it can be used to transfer animation data between different 3D applications or engines.\n *\n * MDD stores its data in binary format (big endian) in the following way:\n *\n * number of frames (a single uint32)\n * number of vertices (a single uint32)\n * time values for each frame (sequence of float32)\n * vertex data for each frame (sequence of float32)\n */\n\nimport {\n\tAnimationClip,\n\tBufferAttribute,\n\tFileLoader,\n\tLoader,\n\tNumberKeyframeTrack\n} from 'three';\n\nclass MDDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\tonLoad( scope.parse( data ) );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tconst view = new DataView( data );\n\n\t\tconst totalFrames = view.getUint32( 0 );\n\t\tconst totalPoints = view.getUint32( 4 );\n\n\t\tlet offset = 8;\n\n\t\t// animation clip\n\n\t\tconst times = new Float32Array( totalFrames );\n\t\tconst values = new Float32Array( totalFrames * totalFrames ).fill( 0 );\n\n\t\tfor ( let i = 0; i < totalFrames; i ++ ) {\n\n\t\t\ttimes[ i ] = view.getFloat32( offset ); offset += 4;\n\t\t\tvalues[ ( totalFrames * i ) + i ] = 1;\n\n\t\t}\n\n\t\tconst track = new NumberKeyframeTrack( '.morphTargetInfluences', times, values );\n\t\tconst clip = new AnimationClip( 'default', times[ times.length - 1 ], [ track ] );\n\n\t\t// morph targets\n\n\t\tconst morphTargets = [];\n\n\t\tfor ( let i = 0; i < totalFrames; i ++ ) {\n\n\t\t\tconst morphTarget = new Float32Array( totalPoints * 3 );\n\n\t\t\tfor ( let j = 0; j < totalPoints; j ++ ) {\n\n\t\t\t\tconst stride = ( j * 3 );\n\n\t\t\t\tmorphTarget[ stride + 0 ] = view.getFloat32( offset ); offset += 4; // x\n\t\t\t\tmorphTarget[ stride + 1 ] = view.getFloat32( offset ); offset += 4; // y\n\t\t\t\tmorphTarget[ stride + 2 ] = view.getFloat32( offset ); offset += 4; // z\n\n\t\t\t}\n\n\t\t\tconst attribute = new BufferAttribute( morphTarget, 3 );\n\t\t\tattribute.name = 'morph_' + i;\n\n\t\t\tmorphTargets.push( attribute );\n\n\t\t}\n\n\t\treturn {\n\t\t\tmorphTargets: morphTargets,\n\t\t\tclip: clip\n\t\t};\n\n\t}\n\n}\n\nexport { MDDLoader };\n", "/**\n * MMD Toon Shader\n *\n * This shader is extended from MeshPhongMaterial, and merged algorithms with\n * MeshToonMaterial and MeshMetcapMaterial.\n * Ideas came from https://github.com/mrdoob/three.js/issues/19609\n *\n * Combining steps:\n * * Declare matcap uniform.\n * * Add gradientmap_pars_fragment.\n * * Use gradient irradiances instead of dotNL irradiance from MeshPhongMaterial.\n * (Replace lights_phong_pars_fragment with lights_mmd_toon_pars_fragment)\n * * Add mmd_toon_matcap_fragment.\n */\n\nimport { UniformsUtils, ShaderLib } from 'three';\n\nconst lights_mmd_toon_pars_fragment = /* glsl */`\nvarying vec3 vViewPosition;\n\nstruct BlinnPhongMaterial {\n\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n\n};\n\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n\n}\n\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n`;\n\nconst mmd_toon_matcap_fragment = /* glsl */`\n#ifdef USE_MATCAP\n\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; // 0.495 to remove artifacts caused by undersized matcap disks\n\tvec4 matcapColor = texture2D( matcap, uv );\n\n\t#ifdef MATCAP_BLENDING_MULTIPLY\n\n\t\toutgoingLight *= matcapColor.rgb;\n\n\t#elif defined( MATCAP_BLENDING_ADD )\n\n\t\toutgoingLight += matcapColor.rgb;\n\n\t#endif\n\n#endif\n`;\n\nconst MMDToonShader = {\n\n\tname: 'MMDToonShader',\n\n\tdefines: {\n\t\tTOON: true,\n\t\tMATCAP: true,\n\t\tMATCAP_BLENDING_ADD: true,\n\t},\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib.toon.uniforms,\n\t\tShaderLib.phong.uniforms,\n\t\tShaderLib.matcap.uniforms,\n\t] ),\n\n\tvertexShader:\n\t\tShaderLib.phong.vertexShader\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t''\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t''\n\t\t\t),\n\n\tfragmentShader:\n\t\tShaderLib.phong.fragmentShader\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t`\n\t\t\t\t\t#ifdef USE_MATCAP\n\t\t\t\t\t\tuniform sampler2D matcap;\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#include \n\t\t\t\t`\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t`\n\t\t\t\t\t#include \n\t\t\t\t`\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t''\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\tlights_mmd_toon_pars_fragment\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t`\n\t\t\t\t\t${mmd_toon_matcap_fragment}\n\t\t\t\t`\n\t\t\t)\n\n};\n\nexport { MMDToonShader };\n", "import {\n\tAddOperation,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tColor,\n\tCustomBlending,\n\tTangentSpaceNormalMap,\n\tDoubleSide,\n\tDstAlphaFactor,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tInterpolant,\n\tLoader,\n\tLoaderUtils,\n\tUniformsUtils,\n\tShaderMaterial,\n\tMultiplyOperation,\n\tNearestFilter,\n\tNumberKeyframeTrack,\n\tOneMinusSrcAlphaFactor,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSrcAlphaFactor,\n\tSRGBColorSpace,\n\tTextureLoader,\n\tUint16BufferAttribute,\n\tVector3,\n\tVectorKeyframeTrack,\n\tRGB_S3TC_DXT1_Format,\n\tRGB_PVRTC_4BPPV1_Format,\n\tRGB_PVRTC_2BPPV1_Format,\n\tRGB_ETC1_Format,\n\tRGB_ETC2_Format\n} from 'three';\nimport { MMDToonShader } from '../shaders/MMDToonShader.js';\nimport { TGALoader } from '../loaders/TGALoader.js';\nimport { MMDParser } from '../libs/mmdparser.module.js';\n\n/**\n * Dependencies\n * - mmd-parser https://github.com/takahirox/mmd-parser\n * - TGALoader\n * - OutlineEffect\n *\n * MMDLoader creates Three.js Objects from MMD resources as\n * PMD, PMX, VMD, and VPD files.\n *\n * PMD/PMX is a model data format, VMD is a motion data format\n * VPD is a posing data format used in MMD(Miku Miku Dance).\n *\n * MMD official site\n * - https://sites.google.com/view/evpvp/\n *\n * PMD, VMD format (in Japanese)\n * - http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4\n *\n * PMX format\n * - https://gist.github.com/felixjones/f8a06bd48f9da9a4539f\n *\n * TODO\n * - light motion in vmd support.\n * - SDEF support.\n * - uv/material/bone morphing support.\n * - more precise grant skinning support.\n * - shadow support.\n */\n\n/**\n * @param {THREE.LoadingManager} manager\n */\nclass MMDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.loader = new FileLoader( this.manager );\n\n\t\tthis.parser = null; // lazy generation\n\t\tthis.meshBuilder = new MeshBuilder( this.manager );\n\t\tthis.animationBuilder = new AnimationBuilder();\n\n\t}\n\n\t/**\n\t * @param {string} animationPath\n\t * @return {MMDLoader}\n\t */\n\tsetAnimationPath( animationPath ) {\n\n\t\tthis.animationPath = animationPath;\n\t\treturn this;\n\n\t}\n\n\t// Load MMD assets as Three.js Object\n\n\t/**\n\t * Loads Model file (.pmd or .pmx) as a SkinnedMesh.\n\t *\n\t * @param {string} url - url to Model(.pmd or .pmx) file\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst builder = this.meshBuilder.setCrossOrigin( this.crossOrigin );\n\n\t\t// resource path\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\tresourcePath = this.path;\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\tconst parser = this._getParser();\n\t\tconst extractModelExtension = this._extractModelExtension;\n\n\t\tthis.loader\n\t\t\t.setMimeType( undefined )\n\t\t\t.setPath( this.path )\n\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t.load( url, function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst modelExtension = extractModelExtension( buffer );\n\n\t\t\t\t\tif ( modelExtension !== 'pmd' && modelExtension !== 'pmx' ) {\n\n\t\t\t\t\t\tif ( onError ) onError( new Error( 'THREE.MMDLoader: Unknown model file extension .' + modelExtension + '.' ) );\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst data = modelExtension === 'pmd' ? parser.parsePmd( buffer, true ) : parser.parsePmx( buffer, true );\n\n\t\t\t\t\tonLoad( builder.build( data, resourcePath, onProgress, onError ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Loads Motion file(s) (.vmd) as a AnimationClip.\n\t * If two or more files are specified, they'll be merged.\n\t *\n\t * @param {string|Array} url - url(s) to animation(.vmd) file(s)\n\t * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadAnimation( url, object, onLoad, onProgress, onError ) {\n\n\t\tconst builder = this.animationBuilder;\n\n\t\tthis.loadVMD( url, function ( vmd ) {\n\n\t\t\tonLoad( object.isCamera\n\t\t\t\t? builder.buildCameraAnimation( vmd )\n\t\t\t\t: builder.build( vmd, object ) );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Loads mode file and motion file(s) as an object containing\n\t * a SkinnedMesh and a AnimationClip.\n\t * Tracks of AnimationClip are fitting to the model.\n\t *\n\t * @param {string} modelUrl - url to Model(.pmd or .pmx) file\n\t * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadWithAnimation( modelUrl, vmdUrl, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tthis.load( modelUrl, function ( mesh ) {\n\n\t\t\tscope.loadAnimation( vmdUrl, mesh, function ( animation ) {\n\n\t\t\t\tonLoad( {\n\t\t\t\t\tmesh: mesh,\n\t\t\t\t\tanimation: animation\n\t\t\t\t} );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t// Load MMD assets as Object data parsed by MMDParser\n\n\t/**\n\t * Loads .pmd file as an Object.\n\t *\n\t * @param {string} url - url to .pmd file\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadPMD( url, onLoad, onProgress, onError ) {\n\n\t\tconst parser = this._getParser();\n\n\t\tthis.loader\n\t\t\t.setMimeType( undefined )\n\t\t\t.setPath( this.path )\n\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t.load( url, function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( parser.parsePmd( buffer, true ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Loads .pmx file as an Object.\n\t *\n\t * @param {string} url - url to .pmx file\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadPMX( url, onLoad, onProgress, onError ) {\n\n\t\tconst parser = this._getParser();\n\n\t\tthis.loader\n\t\t\t.setMimeType( undefined )\n\t\t\t.setPath( this.path )\n\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t.load( url, function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( parser.parsePmx( buffer, true ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Loads .vmd file as an Object. If two or more files are specified\n\t * they'll be merged.\n\t *\n\t * @param {string|Array} url - url(s) to .vmd file(s)\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadVMD( url, onLoad, onProgress, onError ) {\n\n\t\tconst urls = Array.isArray( url ) ? url : [ url ];\n\n\t\tconst vmds = [];\n\t\tconst vmdNum = urls.length;\n\n\t\tconst parser = this._getParser();\n\n\t\tthis.loader\n\t\t\t.setMimeType( undefined )\n\t\t\t.setPath( this.animationPath )\n\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials );\n\n\t\tfor ( let i = 0, il = urls.length; i < il; i ++ ) {\n\n\t\t\tthis.loader.load( urls[ i ], function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tvmds.push( parser.parseVmd( buffer, true ) );\n\n\t\t\t\t\tif ( vmds.length === vmdNum ) onLoad( parser.mergeVmds( vmds ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Loads .vpd file as an Object.\n\t *\n\t * @param {string} url - url to .vpd file\n\t * @param {boolean} isUnicode\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadVPD( url, isUnicode, onLoad, onProgress, onError ) {\n\n\t\tconst parser = this._getParser();\n\n\t\tthis.loader\n\t\t\t.setMimeType( isUnicode ? undefined : 'text/plain; charset=shift_jis' )\n\t\t\t.setPath( this.animationPath )\n\t\t\t.setResponseType( 'text' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t.load( url, function ( text ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( parser.parseVpd( text, true ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t}\n\n\t// private methods\n\n\t_extractModelExtension( buffer ) {\n\n\t\tconst decoder = new TextDecoder( 'utf-8' );\n\t\tconst bytes = new Uint8Array( buffer, 0, 3 );\n\t\treturn decoder.decode( bytes ).toLowerCase();\n\n\t}\n\n\t_getParser() {\n\n\t\tif ( this.parser === null ) {\n\n\t\t\tthis.parser = new MMDParser.Parser();\n\n\t\t}\n\n\t\treturn this.parser;\n\n\t}\n\n}\n\n// Utilities\n\n/*\n\t * base64 encoded defalut toon textures toon00.bmp - toon10.bmp.\n\t * We don't need to request external toon image files.\n\t */\nconst DEFAULT_TOON_TEXTURES = [\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACMElEQVRYR+2Xv4pTQRTGf2dubhLdICiii2KnYKHVolhauKWPoGAnNr6BD6CvIVaihYuI2i1ia0BY0MZGRHQXjZj/mSPnnskfNWiWZUlzJ5k7M2cm833nO5Mziej2DWWJRUoCpQKlAntSQCqgw39/iUWAGmh37jrRnVsKlgpiqmkoGVABA7E57fvY+pJDdgKqF6HzFCSADkDq+F6AHABtQ+UMVE5D7zXod7fFNhTEckTbj5XQgHzNN+5tQvc5NG7C6BNkp6D3EmpXHDR+dQAjFLchW3VS9rlw3JBh+B7ys5Cf9z0GW1C/7P32AyBAOAz1q4jGliIH3YPuBnSfQX4OGreTIgEYQb/pBDtPnEQ4CivXYPAWBk13oHrB54yA9QuSn2H4AcKRpEILDt0BUzj+RLR1V5EqjD66NPRBVpLcQwjHoHYJOhsQv6U4mnzmrIXJCFr4LDwm/xBUoboG9XX4cc9VKdYoSA2yk5NQLJaKDUjTBoveG3Z2TElTxwjNK4M3LEZgUdDdruvcXzKBpStgp2NPiWi3ks9ZXxIoFVi+AvHLdc9TqtjL3/aYjpPlrzOcEnK62Szhimdd7xX232zFDTgtxezOu3WNMRLjiKgjtOhHVMd1loynVHvOgjuIIJMaELEqhJAV/RCSLbWTcfPFakFgFlALTRRvx+ok6Hlp/Q+v3fmx90bMyUzaEAhmM3KvHlXTL5DxnbGf/1M8RNNACLL5MNtPxP/mypJAqcDSFfgFhpYqWUzhTEAAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII='\n];\n\nconst NON_ALPHA_CHANNEL_FORMATS = [\n\tRGB_S3TC_DXT1_Format,\n\tRGB_PVRTC_4BPPV1_Format,\n\tRGB_PVRTC_2BPPV1_Format,\n\tRGB_ETC1_Format,\n\tRGB_ETC2_Format\n];\n\n// Builders. They build Three.js object from Object data parsed by MMDParser.\n\n/**\n * @param {THREE.LoadingManager} manager\n */\nclass MeshBuilder {\n\n\tconstructor( manager ) {\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.geometryBuilder = new GeometryBuilder();\n\t\tthis.materialBuilder = new MaterialBuilder( manager );\n\n\t}\n\n\t/**\n\t * @param {string} crossOrigin\n\t * @return {MeshBuilder}\n\t */\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @param {Object} data - parsed PMD/PMX data\n\t * @param {string} resourcePath\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t * @return {SkinnedMesh}\n\t */\n\tbuild( data, resourcePath, onProgress, onError ) {\n\n\t\tconst geometry = this.geometryBuilder.build( data );\n\t\tconst material = this.materialBuilder\n\t\t\t.setCrossOrigin( this.crossOrigin )\n\t\t\t.setResourcePath( resourcePath )\n\t\t\t.build( data, geometry, onProgress, onError );\n\n\t\tconst mesh = new SkinnedMesh( geometry, material );\n\n\t\tconst skeleton = new Skeleton( initBones( mesh ) );\n\t\tmesh.bind( skeleton );\n\n\t\t// console.log( mesh ); // for console debug\n\n\t\treturn mesh;\n\n\t}\n\n}\n\n// TODO: Try to remove this function\n\nfunction initBones( mesh ) {\n\n\tconst geometry = mesh.geometry;\n\n\tconst bones = [];\n\n\tif ( geometry && geometry.bones !== undefined ) {\n\n\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\tfor ( let i = 0, il = geometry.bones.length; i < il; i ++ ) {\n\n\t\t\tconst gbone = geometry.bones[ i ];\n\n\t\t\t// create new 'Bone' object\n\n\t\t\tconst bone = new Bone();\n\t\t\tbones.push( bone );\n\n\t\t\t// apply values\n\n\t\t\tbone.name = gbone.name;\n\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t}\n\n\t\t// second, create bone hierarchy\n\n\t\tfor ( let i = 0, il = geometry.bones.length; i < il; i ++ ) {\n\n\t\t\tconst gbone = geometry.bones[ i ];\n\n\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\tmesh.add( bones[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t// let's update the corresponding matrices\n\n\tmesh.updateMatrixWorld( true );\n\n\treturn bones;\n\n}\n\n//\n\nclass GeometryBuilder {\n\n\t/**\n\t * @param {Object} data - parsed PMD/PMX data\n\t * @return {BufferGeometry}\n\t */\n\tbuild( data ) {\n\n\t\t// for geometry\n\t\tconst positions = [];\n\t\tconst uvs = [];\n\t\tconst normals = [];\n\n\t\tconst indices = [];\n\n\t\tconst groups = [];\n\n\t\tconst bones = [];\n\t\tconst skinIndices = [];\n\t\tconst skinWeights = [];\n\n\t\tconst morphTargets = [];\n\t\tconst morphPositions = [];\n\n\t\tconst iks = [];\n\t\tconst grants = [];\n\n\t\tconst rigidBodies = [];\n\t\tconst constraints = [];\n\n\t\t// for work\n\t\tlet offset = 0;\n\t\tconst boneTypeTable = {};\n\n\t\t// positions, normals, uvs, skinIndices, skinWeights\n\n\t\tfor ( let i = 0; i < data.metadata.vertexCount; i ++ ) {\n\n\t\t\tconst v = data.vertices[ i ];\n\n\t\t\tfor ( let j = 0, jl = v.position.length; j < jl; j ++ ) {\n\n\t\t\t\tpositions.push( v.position[ j ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = v.normal.length; j < jl; j ++ ) {\n\n\t\t\t\tnormals.push( v.normal[ j ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = v.uv.length; j < jl; j ++ ) {\n\n\t\t\t\tuvs.push( v.uv[ j ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\tskinIndices.push( v.skinIndices.length - 1 >= j ? v.skinIndices[ j ] : 0.0 );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\tskinWeights.push( v.skinWeights.length - 1 >= j ? v.skinWeights[ j ] : 0.0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < data.metadata.faceCount; i ++ ) {\n\n\t\t\tconst face = data.faces[ i ];\n\n\t\t\tfor ( let j = 0, jl = face.indices.length; j < jl; j ++ ) {\n\n\t\t\t\tindices.push( face.indices[ j ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// groups\n\n\t\tfor ( let i = 0; i < data.metadata.materialCount; i ++ ) {\n\n\t\t\tconst material = data.materials[ i ];\n\n\t\t\tgroups.push( {\n\t\t\t\toffset: offset * 3,\n\t\t\t\tcount: material.faceCount * 3\n\t\t\t} );\n\n\t\t\toffset += material.faceCount;\n\n\t\t}\n\n\t\t// bones\n\n\t\tfor ( let i = 0; i < data.metadata.rigidBodyCount; i ++ ) {\n\n\t\t\tconst body = data.rigidBodies[ i ];\n\t\t\tlet value = boneTypeTable[ body.boneIndex ];\n\n\t\t\t// keeps greater number if already value is set without any special reasons\n\t\t\tvalue = value === undefined ? body.type : Math.max( body.type, value );\n\n\t\t\tboneTypeTable[ body.boneIndex ] = value;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < data.metadata.boneCount; i ++ ) {\n\n\t\t\tconst boneData = data.bones[ i ];\n\n\t\t\tconst bone = {\n\t\t\t\tindex: i,\n\t\t\t\ttransformationClass: boneData.transformationClass,\n\t\t\t\tparent: boneData.parentIndex,\n\t\t\t\tname: boneData.name,\n\t\t\t\tpos: boneData.position.slice( 0, 3 ),\n\t\t\t\trotq: [ 0, 0, 0, 1 ],\n\t\t\t\tscl: [ 1, 1, 1 ],\n\t\t\t\trigidBodyType: boneTypeTable[ i ] !== undefined ? boneTypeTable[ i ] : - 1\n\t\t\t};\n\n\t\t\tif ( bone.parent !== - 1 ) {\n\n\t\t\t\tbone.pos[ 0 ] -= data.bones[ bone.parent ].position[ 0 ];\n\t\t\t\tbone.pos[ 1 ] -= data.bones[ bone.parent ].position[ 1 ];\n\t\t\t\tbone.pos[ 2 ] -= data.bones[ bone.parent ].position[ 2 ];\n\n\t\t\t}\n\n\t\t\tbones.push( bone );\n\n\t\t}\n\n\t\t// iks\n\n\t\t// TODO: remove duplicated codes between PMD and PMX\n\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\tfor ( let i = 0; i < data.metadata.ikCount; i ++ ) {\n\n\t\t\t\tconst ik = data.iks[ i ];\n\n\t\t\t\tconst param = {\n\t\t\t\t\ttarget: ik.target,\n\t\t\t\t\teffector: ik.effector,\n\t\t\t\t\titeration: ik.iteration,\n\t\t\t\t\tmaxAngle: ik.maxAngle * 4,\n\t\t\t\t\tlinks: []\n\t\t\t\t};\n\n\t\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst link = {};\n\t\t\t\t\tlink.index = ik.links[ j ].index;\n\t\t\t\t\tlink.enabled = true;\n\n\t\t\t\t\tif ( data.bones[ link.index ].name.indexOf( 'ひざ' ) >= 0 ) {\n\n\t\t\t\t\t\tlink.limitation = new Vector3( 1.0, 0.0, 0.0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tparam.links.push( link );\n\n\t\t\t\t}\n\n\t\t\t\tiks.push( param );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < data.metadata.boneCount; i ++ ) {\n\n\t\t\t\tconst ik = data.bones[ i ].ik;\n\n\t\t\t\tif ( ik === undefined ) continue;\n\n\t\t\t\tconst param = {\n\t\t\t\t\ttarget: i,\n\t\t\t\t\teffector: ik.effector,\n\t\t\t\t\titeration: ik.iteration,\n\t\t\t\t\tmaxAngle: ik.maxAngle,\n\t\t\t\t\tlinks: []\n\t\t\t\t};\n\n\t\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst link = {};\n\t\t\t\t\tlink.index = ik.links[ j ].index;\n\t\t\t\t\tlink.enabled = true;\n\n\t\t\t\t\tif ( ik.links[ j ].angleLimitation === 1 ) {\n\n\t\t\t\t\t\t// Revert if rotationMin/Max doesn't work well\n\t\t\t\t\t\t// link.limitation = new Vector3( 1.0, 0.0, 0.0 );\n\n\t\t\t\t\t\tconst rotationMin = ik.links[ j ].lowerLimitationAngle;\n\t\t\t\t\t\tconst rotationMax = ik.links[ j ].upperLimitationAngle;\n\n\t\t\t\t\t\t// Convert Left to Right coordinate by myself because\n\t\t\t\t\t\t// MMDParser doesn't convert. It's a MMDParser's bug\n\n\t\t\t\t\t\tconst tmp1 = - rotationMax[ 0 ];\n\t\t\t\t\t\tconst tmp2 = - rotationMax[ 1 ];\n\t\t\t\t\t\trotationMax[ 0 ] = - rotationMin[ 0 ];\n\t\t\t\t\t\trotationMax[ 1 ] = - rotationMin[ 1 ];\n\t\t\t\t\t\trotationMin[ 0 ] = tmp1;\n\t\t\t\t\t\trotationMin[ 1 ] = tmp2;\n\n\t\t\t\t\t\tlink.rotationMin = new Vector3().fromArray( rotationMin );\n\t\t\t\t\t\tlink.rotationMax = new Vector3().fromArray( rotationMax );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tparam.links.push( link );\n\n\t\t\t\t}\n\n\t\t\t\tiks.push( param );\n\n\t\t\t\t// Save the reference even from bone data for efficiently\n\t\t\t\t// simulating PMX animation system\n\t\t\t\tbones[ i ].ik = param;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// grants\n\n\t\tif ( data.metadata.format === 'pmx' ) {\n\n\t\t\t// bone index -> grant entry map\n\t\t\tconst grantEntryMap = {};\n\n\t\t\tfor ( let i = 0; i < data.metadata.boneCount; i ++ ) {\n\n\t\t\t\tconst boneData = data.bones[ i ];\n\t\t\t\tconst grant = boneData.grant;\n\n\t\t\t\tif ( grant === undefined ) continue;\n\n\t\t\t\tconst param = {\n\t\t\t\t\tindex: i,\n\t\t\t\t\tparentIndex: grant.parentIndex,\n\t\t\t\t\tratio: grant.ratio,\n\t\t\t\t\tisLocal: grant.isLocal,\n\t\t\t\t\taffectRotation: grant.affectRotation,\n\t\t\t\t\taffectPosition: grant.affectPosition,\n\t\t\t\t\ttransformationClass: boneData.transformationClass\n\t\t\t\t};\n\n\t\t\t\tgrantEntryMap[ i ] = { parent: null, children: [], param: param, visited: false };\n\n\t\t\t}\n\n\t\t\tconst rootEntry = { parent: null, children: [], param: null, visited: false };\n\n\t\t\t// Build a tree representing grant hierarchy\n\n\t\t\tfor ( const boneIndex in grantEntryMap ) {\n\n\t\t\t\tconst grantEntry = grantEntryMap[ boneIndex ];\n\t\t\t\tconst parentGrantEntry = grantEntryMap[ grantEntry.parentIndex ] || rootEntry;\n\n\t\t\t\tgrantEntry.parent = parentGrantEntry;\n\t\t\t\tparentGrantEntry.children.push( grantEntry );\n\n\t\t\t}\n\n\t\t\t// Sort grant parameters from parents to children because\n\t\t\t// grant uses parent's transform that parent's grant is already applied\n\t\t\t// so grant should be applied in order from parents to children\n\n\t\t\tfunction traverse( entry ) {\n\n\t\t\t\tif ( entry.param ) {\n\n\t\t\t\t\tgrants.push( entry.param );\n\n\t\t\t\t\t// Save the reference even from bone data for efficiently\n\t\t\t\t\t// simulating PMX animation system\n\t\t\t\t\tbones[ entry.param.index ].grant = entry.param;\n\n\t\t\t\t}\n\n\t\t\t\tentry.visited = true;\n\n\t\t\t\tfor ( let i = 0, il = entry.children.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst child = entry.children[ i ];\n\n\t\t\t\t\t// Cut off a loop if exists. (Is a grant loop invalid?)\n\t\t\t\t\tif ( ! child.visited ) traverse( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttraverse( rootEntry );\n\n\t\t}\n\n\t\t// morph\n\n\t\tfunction updateAttributes( attribute, morph, ratio ) {\n\n\t\t\tfor ( let i = 0; i < morph.elementCount; i ++ ) {\n\n\t\t\t\tconst element = morph.elements[ i ];\n\n\t\t\t\tlet index;\n\n\t\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\t\tindex = data.morphs[ 0 ].elements[ element.index ].index;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = element.index;\n\n\t\t\t\t}\n\n\t\t\t\tattribute.array[ index * 3 + 0 ] += element.position[ 0 ] * ratio;\n\t\t\t\tattribute.array[ index * 3 + 1 ] += element.position[ 1 ] * ratio;\n\t\t\t\tattribute.array[ index * 3 + 2 ] += element.position[ 2 ] * ratio;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < data.metadata.morphCount; i ++ ) {\n\n\t\t\tconst morph = data.morphs[ i ];\n\t\t\tconst params = { name: morph.name };\n\n\t\t\tconst attribute = new Float32BufferAttribute( data.metadata.vertexCount * 3, 3 );\n\t\t\tattribute.name = morph.name;\n\n\t\t\tfor ( let j = 0; j < data.metadata.vertexCount * 3; j ++ ) {\n\n\t\t\t\tattribute.array[ j ] = positions[ j ];\n\n\t\t\t}\n\n\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\tif ( i !== 0 ) {\n\n\t\t\t\t\tupdateAttributes( attribute, morph, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( morph.type === 0 ) { // group\n\n\t\t\t\t\tfor ( let j = 0; j < morph.elementCount; j ++ ) {\n\n\t\t\t\t\t\tconst morph2 = data.morphs[ morph.elements[ j ].index ];\n\t\t\t\t\t\tconst ratio = morph.elements[ j ].ratio;\n\n\t\t\t\t\t\tif ( morph2.type === 1 ) {\n\n\t\t\t\t\t\t\tupdateAttributes( attribute, morph2, ratio );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( morph.type === 1 ) { // vertex\n\n\t\t\t\t\tupdateAttributes( attribute, morph, 1.0 );\n\n\t\t\t\t} else if ( morph.type === 2 ) { // bone\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 3 ) { // uv\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 4 ) { // additional uv1\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 5 ) { // additional uv2\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 6 ) { // additional uv3\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 7 ) { // additional uv4\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 8 ) { // material\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmorphTargets.push( params );\n\t\t\tmorphPositions.push( attribute );\n\n\t\t}\n\n\t\t// rigid bodies from rigidBodies field.\n\n\t\tfor ( let i = 0; i < data.metadata.rigidBodyCount; i ++ ) {\n\n\t\t\tconst rigidBody = data.rigidBodies[ i ];\n\t\t\tconst params = {};\n\n\t\t\tfor ( const key in rigidBody ) {\n\n\t\t\t\tparams[ key ] = rigidBody[ key ];\n\n\t\t\t}\n\n\t\t\t/*\n\t\t\t\t * RigidBody position parameter in PMX seems global position\n\t\t\t\t * while the one in PMD seems offset from corresponding bone.\n\t\t\t\t * So unify being offset.\n\t\t\t\t */\n\t\t\tif ( data.metadata.format === 'pmx' ) {\n\n\t\t\t\tif ( params.boneIndex !== - 1 ) {\n\n\t\t\t\t\tconst bone = data.bones[ params.boneIndex ];\n\t\t\t\t\tparams.position[ 0 ] -= bone.position[ 0 ];\n\t\t\t\t\tparams.position[ 1 ] -= bone.position[ 1 ];\n\t\t\t\t\tparams.position[ 2 ] -= bone.position[ 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\trigidBodies.push( params );\n\n\t\t}\n\n\t\t// constraints from constraints field.\n\n\t\tfor ( let i = 0; i < data.metadata.constraintCount; i ++ ) {\n\n\t\t\tconst constraint = data.constraints[ i ];\n\t\t\tconst params = {};\n\n\t\t\tfor ( const key in constraint ) {\n\n\t\t\t\tparams[ key ] = constraint[ key ];\n\n\t\t\t}\n\n\t\t\tconst bodyA = rigidBodies[ params.rigidBodyIndex1 ];\n\t\t\tconst bodyB = rigidBodies[ params.rigidBodyIndex2 ];\n\n\t\t\t// Refer to http://www20.atpages.jp/katwat/wp/?p=4135\n\t\t\tif ( bodyA.type !== 0 && bodyB.type === 2 ) {\n\n\t\t\t\tif ( bodyA.boneIndex !== - 1 && bodyB.boneIndex !== - 1 &&\n\t\t\t\t\t data.bones[ bodyB.boneIndex ].parentIndex === bodyA.boneIndex ) {\n\n\t\t\t\t\tbodyB.type = 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconstraints.push( params );\n\n\t\t}\n\n\t\t// build BufferGeometry.\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tgeometry.setAttribute( 'skinIndex', new Uint16BufferAttribute( skinIndices, 4 ) );\n\t\tgeometry.setAttribute( 'skinWeight', new Float32BufferAttribute( skinWeights, 4 ) );\n\t\tgeometry.setIndex( indices );\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tgeometry.addGroup( groups[ i ].offset, groups[ i ].count, i );\n\n\t\t}\n\n\t\tgeometry.bones = bones;\n\n\t\tgeometry.morphTargets = morphTargets;\n\t\tgeometry.morphAttributes.position = morphPositions;\n\t\tgeometry.morphTargetsRelative = false;\n\n\t\tgeometry.userData.MMD = {\n\t\t\tbones: bones,\n\t\t\tiks: iks,\n\t\t\tgrants: grants,\n\t\t\trigidBodies: rigidBodies,\n\t\t\tconstraints: constraints,\n\t\t\tformat: data.metadata.format\n\t\t};\n\n\t\tgeometry.computeBoundingSphere();\n\n\t\treturn geometry;\n\n\t}\n\n}\n\n//\n\n/**\n * @param {THREE.LoadingManager} manager\n */\nclass MaterialBuilder {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = manager;\n\n\t\tthis.textureLoader = new TextureLoader( this.manager );\n\t\tthis.tgaLoader = null; // lazy generation\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.resourcePath = undefined;\n\n\t}\n\n\t/**\n\t * @param {string} crossOrigin\n\t * @return {MaterialBuilder}\n\t */\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @param {string} resourcePath\n\t * @return {MaterialBuilder}\n\t */\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @param {Object} data - parsed PMD/PMX data\n\t * @param {BufferGeometry} geometry - some properties are dependend on geometry\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t * @return {Array}\n\t */\n\tbuild( data, geometry /*, onProgress, onError */ ) {\n\n\t\tconst materials = [];\n\n\t\tconst textures = {};\n\n\t\tthis.textureLoader.setCrossOrigin( this.crossOrigin );\n\n\t\t// materials\n\n\t\tfor ( let i = 0; i < data.metadata.materialCount; i ++ ) {\n\n\t\t\tconst material = data.materials[ i ];\n\n\t\t\tconst params = { userData: { MMD: {} } };\n\n\t\t\tif ( material.name !== undefined ) params.name = material.name;\n\n\t\t\t/*\n\t\t\t\t * Color\n\t\t\t\t *\n\t\t\t\t * MMD MMDToonMaterial\n\t\t\t\t * ambient - emissive * a\n\t\t\t\t * (a = 1.0 without map texture or 0.2 with map texture)\n\t\t\t\t *\n\t\t\t\t * MMDToonMaterial doesn't have ambient. Set it to emissive instead.\n\t\t\t\t * It'll be too bright if material has map texture so using coef 0.2.\n\t\t\t\t */\n\t\t\tparams.diffuse = new Color().setRGB(\n\t\t\t\tmaterial.diffuse[ 0 ],\n\t\t\t\tmaterial.diffuse[ 1 ],\n\t\t\t\tmaterial.diffuse[ 2 ],\n\t\t\t\tSRGBColorSpace\n\t\t\t);\n\t\t\tparams.opacity = material.diffuse[ 3 ];\n\t\t\tparams.specular = new Color().setRGB( ...material.specular, SRGBColorSpace );\n\t\t\tparams.shininess = material.shininess;\n\t\t\tparams.emissive = new Color().setRGB( ...material.ambient, SRGBColorSpace );\n\t\t\tparams.transparent = params.opacity !== 1.0;\n\n\t\t\t//\n\n\t\t\tparams.fog = true;\n\n\t\t\t// blend\n\n\t\t\tparams.blending = CustomBlending;\n\t\t\tparams.blendSrc = SrcAlphaFactor;\n\t\t\tparams.blendDst = OneMinusSrcAlphaFactor;\n\t\t\tparams.blendSrcAlpha = SrcAlphaFactor;\n\t\t\tparams.blendDstAlpha = DstAlphaFactor;\n\n\t\t\t// side\n\n\t\t\tif ( data.metadata.format === 'pmx' && ( material.flag & 0x1 ) === 1 ) {\n\n\t\t\t\tparams.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tparams.side = params.opacity === 1.0 ? FrontSide : DoubleSide;\n\n\t\t\t}\n\n\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\t// map, matcap\n\n\t\t\t\tif ( material.fileName ) {\n\n\t\t\t\t\tconst fileName = material.fileName;\n\t\t\t\t\tconst fileNames = fileName.split( '*' );\n\n\t\t\t\t\t// fileNames[ 0 ]: mapFileName\n\t\t\t\t\t// fileNames[ 1 ]: matcapFileName( optional )\n\n\t\t\t\t\tparams.map = this._loadTexture( fileNames[ 0 ], textures );\n\n\t\t\t\t\tif ( fileNames.length > 1 ) {\n\n\t\t\t\t\t\tconst extension = fileNames[ 1 ].slice( - 4 ).toLowerCase();\n\n\t\t\t\t\t\tparams.matcap = this._loadTexture(\n\t\t\t\t\t\t\tfileNames[ 1 ],\n\t\t\t\t\t\t\ttextures\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tparams.matcapCombine = extension === '.sph'\n\t\t\t\t\t\t\t? MultiplyOperation\n\t\t\t\t\t\t\t: AddOperation;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// gradientMap\n\n\t\t\t\tconst toonFileName = ( material.toonIndex === - 1 )\n\t\t\t\t\t? 'toon00.bmp'\n\t\t\t\t\t: data.toonTextures[ material.toonIndex ].fileName;\n\n\t\t\t\tparams.gradientMap = this._loadTexture(\n\t\t\t\t\ttoonFileName,\n\t\t\t\t\ttextures,\n\t\t\t\t\t{\n\t\t\t\t\t\tisToonTexture: true,\n\t\t\t\t\t\tisDefaultToonTexture: this._isDefaultToonTexture( toonFileName )\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// parameters for OutlineEffect\n\n\t\t\t\tparams.userData.outlineParameters = {\n\t\t\t\t\tthickness: material.edgeFlag === 1 ? 0.003 : 0.0,\n\t\t\t\t\tcolor: [ 0, 0, 0 ],\n\t\t\t\t\talpha: 1.0,\n\t\t\t\t\tvisible: material.edgeFlag === 1\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\t// map\n\n\t\t\t\tif ( material.textureIndex !== - 1 ) {\n\n\t\t\t\t\tparams.map = this._loadTexture( data.textures[ material.textureIndex ], textures );\n\n\t\t\t\t\t// Since PMX spec don't have standard to list map files except color map and env map,\n\t\t\t\t\t// we need to save file name for further mapping, like matching normal map file names after model loaded.\n\t\t\t\t\t// ref: https://gist.github.com/felixjones/f8a06bd48f9da9a4539f#texture\n\t\t\t\t\tparams.userData.MMD.mapFileName = data.textures[ material.textureIndex ];\n\n\t\t\t\t}\n\n\t\t\t\t// matcap TODO: support m.envFlag === 3\n\n\t\t\t\tif ( material.envTextureIndex !== - 1 && ( material.envFlag === 1 || material.envFlag == 2 ) ) {\n\n\t\t\t\t\tparams.matcap = this._loadTexture(\n\t\t\t\t\t\tdata.textures[ material.envTextureIndex ],\n\t\t\t\t\t\ttextures\n\t\t\t\t\t);\n\n\t\t\t\t\t// Same as color map above, keep file name in userData for further usage.\n\t\t\t\t\tparams.userData.MMD.matcapFileName = data.textures[ material.envTextureIndex ];\n\n\t\t\t\t\tparams.matcapCombine = material.envFlag === 1\n\t\t\t\t\t\t? MultiplyOperation\n\t\t\t\t\t\t: AddOperation;\n\n\t\t\t\t}\n\n\t\t\t\t// gradientMap\n\n\t\t\t\tlet toonFileName, isDefaultToon;\n\n\t\t\t\tif ( material.toonIndex === - 1 || material.toonFlag !== 0 ) {\n\n\t\t\t\t\ttoonFileName = 'toon' + ( '0' + ( material.toonIndex + 1 ) ).slice( - 2 ) + '.bmp';\n\t\t\t\t\tisDefaultToon = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttoonFileName = data.textures[ material.toonIndex ];\n\t\t\t\t\tisDefaultToon = false;\n\n\t\t\t\t}\n\n\t\t\t\tparams.gradientMap = this._loadTexture(\n\t\t\t\t\ttoonFileName,\n\t\t\t\t\ttextures,\n\t\t\t\t\t{\n\t\t\t\t\t\tisToonTexture: true,\n\t\t\t\t\t\tisDefaultToonTexture: isDefaultToon\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// parameters for OutlineEffect\n\t\t\t\tparams.userData.outlineParameters = {\n\t\t\t\t\tthickness: material.edgeSize / 300, // TODO: better calculation?\n\t\t\t\t\tcolor: material.edgeColor.slice( 0, 3 ),\n\t\t\t\t\talpha: material.edgeColor[ 3 ],\n\t\t\t\t\tvisible: ( material.flag & 0x10 ) !== 0 && material.edgeSize > 0.0\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tif ( params.map !== undefined ) {\n\n\t\t\t\tif ( ! params.transparent ) {\n\n\t\t\t\t\tthis._checkImageTransparency( params.map, geometry, i );\n\n\t\t\t\t}\n\n\t\t\t\tparams.emissive.multiplyScalar( 0.2 );\n\n\t\t\t}\n\n\t\t\tmaterials.push( new MMDToonMaterial( params ) );\n\n\t\t}\n\n\t\tif ( data.metadata.format === 'pmx' ) {\n\n\t\t\t// set transparent true if alpha morph is defined.\n\n\t\t\tfunction checkAlphaMorph( elements, materials ) {\n\n\t\t\t\tfor ( let i = 0, il = elements.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst element = elements[ i ];\n\n\t\t\t\t\tif ( element.index === - 1 ) continue;\n\n\t\t\t\t\tconst material = materials[ element.index ];\n\n\t\t\t\t\tif ( material.opacity !== element.diffuse[ 3 ] ) {\n\n\t\t\t\t\t\tmaterial.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = data.morphs.length; i < il; i ++ ) {\n\n\t\t\t\tconst morph = data.morphs[ i ];\n\t\t\t\tconst elements = morph.elements;\n\n\t\t\t\tif ( morph.type === 0 ) {\n\n\t\t\t\t\tfor ( let j = 0, jl = elements.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst morph2 = data.morphs[ elements[ j ].index ];\n\n\t\t\t\t\t\tif ( morph2.type !== 8 ) continue;\n\n\t\t\t\t\t\tcheckAlphaMorph( morph2.elements, materials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( morph.type === 8 ) {\n\n\t\t\t\t\tcheckAlphaMorph( elements, materials );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\t// private methods\n\n\t_getTGALoader() {\n\n\t\tif ( this.tgaLoader === null ) {\n\n\t\t\tif ( TGALoader === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.MMDLoader: Import TGALoader' );\n\n\t\t\t}\n\n\t\t\tthis.tgaLoader = new TGALoader( this.manager );\n\n\t\t}\n\n\t\treturn this.tgaLoader;\n\n\t}\n\n\t_isDefaultToonTexture( name ) {\n\n\t\tif ( name.length !== 10 ) return false;\n\n\t\treturn /toon(10|0[0-9])\\.bmp/.test( name );\n\n\t}\n\n\t_loadTexture( filePath, textures, params, onProgress, onError ) {\n\n\t\tparams = params || {};\n\n\t\tconst scope = this;\n\n\t\tlet fullPath;\n\n\t\tif ( params.isDefaultToonTexture === true ) {\n\n\t\t\tlet index;\n\n\t\t\ttry {\n\n\t\t\t\tindex = parseInt( filePath.match( /toon([0-9]{2})\\.bmp$/ )[ 1 ] );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.MMDLoader: ' + filePath + ' seems like a '\n\t\t\t\t\t\t+ 'not right default texture path. Using toon00.bmp instead.' );\n\n\t\t\t\tindex = 0;\n\n\t\t\t}\n\n\t\t\tfullPath = DEFAULT_TOON_TEXTURES[ index ];\n\n\t\t} else {\n\n\t\t\tfullPath = this.resourcePath + filePath;\n\n\t\t}\n\n\t\tif ( textures[ fullPath ] !== undefined ) return textures[ fullPath ];\n\n\t\tlet loader = this.manager.getHandler( fullPath );\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = ( filePath.slice( - 4 ).toLowerCase() === '.tga' )\n\t\t\t\t? this._getTGALoader()\n\t\t\t\t: this.textureLoader;\n\n\t\t}\n\n\t\tconst texture = loader.load( fullPath, function ( t ) {\n\n\t\t\t// MMD toon texture is Axis-Y oriented\n\t\t\t// but Three.js gradient map is Axis-X oriented.\n\t\t\t// So here replaces the toon texture image with the rotated one.\n\t\t\tif ( params.isToonTexture === true ) {\n\n\t\t\t\tt.image = scope._getRotatedImage( t.image );\n\n\t\t\t\tt.magFilter = NearestFilter;\n\t\t\t\tt.minFilter = NearestFilter;\n\n\t\t\t}\n\n\t\t\tt.flipY = false;\n\t\t\tt.wrapS = RepeatWrapping;\n\t\t\tt.wrapT = RepeatWrapping;\n\t\t\tt.colorSpace = SRGBColorSpace;\n\n\t\t\tfor ( let i = 0; i < texture.readyCallbacks.length; i ++ ) {\n\n\t\t\t\ttexture.readyCallbacks[ i ]( texture );\n\n\t\t\t}\n\n\t\t\tdelete texture.readyCallbacks;\n\n\t\t}, onProgress, onError );\n\n\t\ttexture.readyCallbacks = [];\n\n\t\ttextures[ fullPath ] = texture;\n\n\t\treturn texture;\n\n\t}\n\n\t_getRotatedImage( image ) {\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tconst context = canvas.getContext( '2d' );\n\n\t\tconst width = image.width;\n\t\tconst height = image.height;\n\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tcontext.clearRect( 0, 0, width, height );\n\t\tcontext.translate( width / 2.0, height / 2.0 );\n\t\tcontext.rotate( 0.5 * Math.PI ); // 90.0 * Math.PI / 180.0\n\t\tcontext.translate( - width / 2.0, - height / 2.0 );\n\t\tcontext.drawImage( image, 0, 0 );\n\n\t\treturn context.getImageData( 0, 0, width, height );\n\n\t}\n\n\t// Check if the partial image area used by the texture is transparent.\n\t_checkImageTransparency( map, geometry, groupIndex ) {\n\n\t\tmap.readyCallbacks.push( function ( texture ) {\n\n\t\t\t// Is there any efficient ways?\n\t\t\tfunction createImageData( image ) {\n\n\t\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\t\tcanvas.width = image.width;\n\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0 );\n\n\t\t\t\treturn context.getImageData( 0, 0, canvas.width, canvas.height );\n\n\t\t\t}\n\n\t\t\tfunction detectImageTransparency( image, uvs, indices ) {\n\n\t\t\t\tconst width = image.width;\n\t\t\t\tconst height = image.height;\n\t\t\t\tconst data = image.data;\n\t\t\t\tconst threshold = 253;\n\n\t\t\t\tif ( data.length / ( width * height ) !== 4 ) return false;\n\n\t\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\tconst centerUV = { x: 0.0, y: 0.0 };\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tconst index = indices[ i * 3 + j ];\n\t\t\t\t\t\tconst uv = { x: uvs[ index * 2 + 0 ], y: uvs[ index * 2 + 1 ] };\n\n\t\t\t\t\t\tif ( getAlphaByUv( image, uv ) < threshold ) return true;\n\n\t\t\t\t\t\tcenterUV.x += uv.x;\n\t\t\t\t\t\tcenterUV.y += uv.y;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcenterUV.x /= 3;\n\t\t\t\t\tcenterUV.y /= 3;\n\n\t\t\t\t\tif ( getAlphaByUv( image, centerUV ) < threshold ) return true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t/*\n\t\t\t\t * This method expects\n\t\t\t\t * texture.flipY = false\n\t\t\t\t * texture.wrapS = RepeatWrapping\n\t\t\t\t * texture.wrapT = RepeatWrapping\n\t\t\t\t * TODO: more precise\n\t\t\t\t */\n\t\t\tfunction getAlphaByUv( image, uv ) {\n\n\t\t\t\tconst width = image.width;\n\t\t\t\tconst height = image.height;\n\n\t\t\t\tlet x = Math.round( uv.x * width ) % width;\n\t\t\t\tlet y = Math.round( uv.y * height ) % height;\n\n\t\t\t\tif ( x < 0 ) x += width;\n\t\t\t\tif ( y < 0 ) y += height;\n\n\t\t\t\tconst index = y * width + x;\n\n\t\t\t\treturn image.data[ index * 4 + 3 ];\n\n\t\t\t}\n\n\t\t\tif ( texture.isCompressedTexture === true ) {\n\n\t\t\t\tif ( NON_ALPHA_CHANNEL_FORMATS.includes( texture.format ) ) {\n\n\t\t\t\t\tmap.transparent = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// any other way to check transparency of CompressedTexture?\n\t\t\t\t\tmap.transparent = true;\n\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst imageData = texture.image.data !== undefined\n\t\t\t\t? texture.image\n\t\t\t\t: createImageData( texture.image );\n\n\t\t\tconst group = geometry.groups[ groupIndex ];\n\n\t\t\tif ( detectImageTransparency(\n\t\t\t\timageData,\n\t\t\t\tgeometry.attributes.uv.array,\n\t\t\t\tgeometry.index.array.slice( group.start, group.start + group.count ) ) ) {\n\n\t\t\t\tmap.transparent = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\n//\n\nclass AnimationBuilder {\n\n\t/**\n\t * @param {Object} vmd - parsed VMD data\n\t * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n\t * @return {AnimationClip}\n\t */\n\tbuild( vmd, mesh ) {\n\n\t\t// combine skeletal and morph animations\n\n\t\tconst tracks = this.buildSkeletalAnimation( vmd, mesh ).tracks;\n\t\tconst tracks2 = this.buildMorphAnimation( vmd, mesh ).tracks;\n\n\t\tfor ( let i = 0, il = tracks2.length; i < il; i ++ ) {\n\n\t\t\ttracks.push( tracks2[ i ] );\n\n\t\t}\n\n\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t}\n\n\t/**\n\t * @param {Object} vmd - parsed VMD data\n\t * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n\t * @return {AnimationClip}\n\t */\n\tbuildSkeletalAnimation( vmd, mesh ) {\n\n\t\tfunction pushInterpolation( array, interpolation, index ) {\n\n\t\t\tarray.push( interpolation[ index + 0 ] / 127 ); // x1\n\t\t\tarray.push( interpolation[ index + 8 ] / 127 ); // x2\n\t\t\tarray.push( interpolation[ index + 4 ] / 127 ); // y1\n\t\t\tarray.push( interpolation[ index + 12 ] / 127 ); // y2\n\n\t\t}\n\n\t\tconst tracks = [];\n\n\t\tconst motions = {};\n\t\tconst bones = mesh.skeleton.bones;\n\t\tconst boneNameDictionary = {};\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tboneNameDictionary[ bones[ i ].name ] = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < vmd.metadata.motionCount; i ++ ) {\n\n\t\t\tconst motion = vmd.motions[ i ];\n\t\t\tconst boneName = motion.boneName;\n\n\t\t\tif ( boneNameDictionary[ boneName ] === undefined ) continue;\n\n\t\t\tmotions[ boneName ] = motions[ boneName ] || [];\n\t\t\tmotions[ boneName ].push( motion );\n\n\t\t}\n\n\t\tfor ( const key in motions ) {\n\n\t\t\tconst array = motions[ key ];\n\n\t\t\tarray.sort( function ( a, b ) {\n\n\t\t\t\treturn a.frameNum - b.frameNum;\n\n\t\t\t} );\n\n\t\t\tconst times = [];\n\t\t\tconst positions = [];\n\t\t\tconst rotations = [];\n\t\t\tconst pInterpolations = [];\n\t\t\tconst rInterpolations = [];\n\n\t\t\tconst basePosition = mesh.skeleton.getBoneByName( key ).position.toArray();\n\n\t\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\tconst time = array[ i ].frameNum / 30;\n\t\t\t\tconst position = array[ i ].position;\n\t\t\t\tconst rotation = array[ i ].rotation;\n\t\t\t\tconst interpolation = array[ i ].interpolation;\n\n\t\t\t\ttimes.push( time );\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) positions.push( basePosition[ j ] + position[ j ] );\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) rotations.push( rotation[ j ] );\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) pushInterpolation( pInterpolations, interpolation, j );\n\n\t\t\t\tpushInterpolation( rInterpolations, interpolation, 3 );\n\n\t\t\t}\n\n\t\t\tconst targetName = '.bones[' + key + ']';\n\n\t\t\ttracks.push( this._createTrack( targetName + '.position', VectorKeyframeTrack, times, positions, pInterpolations ) );\n\t\t\ttracks.push( this._createTrack( targetName + '.quaternion', QuaternionKeyframeTrack, times, rotations, rInterpolations ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t}\n\n\t/**\n\t * @param {Object} vmd - parsed VMD data\n\t * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n\t * @return {AnimationClip}\n\t */\n\tbuildMorphAnimation( vmd, mesh ) {\n\n\t\tconst tracks = [];\n\n\t\tconst morphs = {};\n\t\tconst morphTargetDictionary = mesh.morphTargetDictionary;\n\n\t\tfor ( let i = 0; i < vmd.metadata.morphCount; i ++ ) {\n\n\t\t\tconst morph = vmd.morphs[ i ];\n\t\t\tconst morphName = morph.morphName;\n\n\t\t\tif ( morphTargetDictionary[ morphName ] === undefined ) continue;\n\n\t\t\tmorphs[ morphName ] = morphs[ morphName ] || [];\n\t\t\tmorphs[ morphName ].push( morph );\n\n\t\t}\n\n\t\tfor ( const key in morphs ) {\n\n\t\t\tconst array = morphs[ key ];\n\n\t\t\tarray.sort( function ( a, b ) {\n\n\t\t\t\treturn a.frameNum - b.frameNum;\n\n\t\t\t} );\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\ttimes.push( array[ i ].frameNum / 30 );\n\t\t\t\tvalues.push( array[ i ].weight );\n\n\t\t\t}\n\n\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluences[' + morphTargetDictionary[ key ] + ']', times, values ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t}\n\n\t/**\n\t * @param {Object} vmd - parsed VMD data\n\t * @return {AnimationClip}\n\t */\n\tbuildCameraAnimation( vmd ) {\n\n\t\tfunction pushVector3( array, vec ) {\n\n\t\t\tarray.push( vec.x );\n\t\t\tarray.push( vec.y );\n\t\t\tarray.push( vec.z );\n\n\t\t}\n\n\t\tfunction pushQuaternion( array, q ) {\n\n\t\t\tarray.push( q.x );\n\t\t\tarray.push( q.y );\n\t\t\tarray.push( q.z );\n\t\t\tarray.push( q.w );\n\n\t\t}\n\n\t\tfunction pushInterpolation( array, interpolation, index ) {\n\n\t\t\tarray.push( interpolation[ index * 4 + 0 ] / 127 ); // x1\n\t\t\tarray.push( interpolation[ index * 4 + 1 ] / 127 ); // x2\n\t\t\tarray.push( interpolation[ index * 4 + 2 ] / 127 ); // y1\n\t\t\tarray.push( interpolation[ index * 4 + 3 ] / 127 ); // y2\n\n\t\t}\n\n\t\tconst cameras = vmd.cameras === undefined ? [] : vmd.cameras.slice();\n\n\t\tcameras.sort( function ( a, b ) {\n\n\t\t\treturn a.frameNum - b.frameNum;\n\n\t\t} );\n\n\t\tconst times = [];\n\t\tconst centers = [];\n\t\tconst quaternions = [];\n\t\tconst positions = [];\n\t\tconst fovs = [];\n\n\t\tconst cInterpolations = [];\n\t\tconst qInterpolations = [];\n\t\tconst pInterpolations = [];\n\t\tconst fInterpolations = [];\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst euler = new Euler();\n\t\tconst position = new Vector3();\n\t\tconst center = new Vector3();\n\n\t\tfor ( let i = 0, il = cameras.length; i < il; i ++ ) {\n\n\t\t\tconst motion = cameras[ i ];\n\n\t\t\tconst time = motion.frameNum / 30;\n\t\t\tconst pos = motion.position;\n\t\t\tconst rot = motion.rotation;\n\t\t\tconst distance = motion.distance;\n\t\t\tconst fov = motion.fov;\n\t\t\tconst interpolation = motion.interpolation;\n\n\t\t\ttimes.push( time );\n\n\t\t\tposition.set( 0, 0, - distance );\n\t\t\tcenter.set( pos[ 0 ], pos[ 1 ], pos[ 2 ] );\n\n\t\t\teuler.set( - rot[ 0 ], - rot[ 1 ], - rot[ 2 ] );\n\t\t\tquaternion.setFromEuler( euler );\n\n\t\t\tposition.add( center );\n\t\t\tposition.applyQuaternion( quaternion );\n\n\t\t\tpushVector3( centers, center );\n\t\t\tpushQuaternion( quaternions, quaternion );\n\t\t\tpushVector3( positions, position );\n\n\t\t\tfovs.push( fov );\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tpushInterpolation( cInterpolations, interpolation, j );\n\n\t\t\t}\n\n\t\t\tpushInterpolation( qInterpolations, interpolation, 3 );\n\n\t\t\t// use the same parameter for x, y, z axis.\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tpushInterpolation( pInterpolations, interpolation, 4 );\n\n\t\t\t}\n\n\t\t\tpushInterpolation( fInterpolations, interpolation, 5 );\n\n\t\t}\n\n\t\tconst tracks = [];\n\n\t\t// I expect an object whose name 'target' exists under THREE.Camera\n\t\ttracks.push( this._createTrack( 'target.position', VectorKeyframeTrack, times, centers, cInterpolations ) );\n\n\t\ttracks.push( this._createTrack( '.quaternion', QuaternionKeyframeTrack, times, quaternions, qInterpolations ) );\n\t\ttracks.push( this._createTrack( '.position', VectorKeyframeTrack, times, positions, pInterpolations ) );\n\t\ttracks.push( this._createTrack( '.fov', NumberKeyframeTrack, times, fovs, fInterpolations ) );\n\n\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t}\n\n\t// private method\n\n\t_createTrack( node, typedKeyframeTrack, times, values, interpolations ) {\n\n\t\t/*\n\t\t\t * optimizes here not to let KeyframeTrackPrototype optimize\n\t\t\t * because KeyframeTrackPrototype optimizes times and values but\n\t\t\t * doesn't optimize interpolations.\n\t\t\t */\n\t\tif ( times.length > 2 ) {\n\n\t\t\ttimes = times.slice();\n\t\t\tvalues = values.slice();\n\t\t\tinterpolations = interpolations.slice();\n\n\t\t\tconst stride = values.length / times.length;\n\t\t\tconst interpolateStride = interpolations.length / times.length;\n\n\t\t\tlet index = 1;\n\n\t\t\tfor ( let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < stride; i ++ ) {\n\n\t\t\t\t\tif ( values[ index * stride + i ] !== values[ ( index - 1 ) * stride + i ] ||\n\t\t\t\t\t\t\tvalues[ index * stride + i ] !== values[ aheadIndex * stride + i ] ) {\n\n\t\t\t\t\t\tindex ++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( aheadIndex > index ) {\n\n\t\t\t\t\ttimes[ index ] = times[ aheadIndex ];\n\n\t\t\t\t\tfor ( let i = 0; i < stride; i ++ ) {\n\n\t\t\t\t\t\tvalues[ index * stride + i ] = values[ aheadIndex * stride + i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0; i < interpolateStride; i ++ ) {\n\n\t\t\t\t\t\tinterpolations[ index * interpolateStride + i ] = interpolations[ aheadIndex * interpolateStride + i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttimes.length = index + 1;\n\t\t\tvalues.length = ( index + 1 ) * stride;\n\t\t\tinterpolations.length = ( index + 1 ) * interpolateStride;\n\n\t\t}\n\n\t\tconst track = new typedKeyframeTrack( node, times, values );\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodCubicBezier( result ) {\n\n\t\t\treturn new CubicBezierInterpolation( this.times, this.values, this.getValueSize(), result, new Float32Array( interpolations ) );\n\n\t\t};\n\n\t\treturn track;\n\n\t}\n\n}\n\n// interpolation\n\nclass CubicBezierInterpolation extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer, params ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis.interpolationParams = params;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\t\tconst params = this.interpolationParams;\n\n\t\tconst offset1 = i1 * stride;\n\t\tconst offset0 = offset1 - stride;\n\n\t\t// No interpolation if next key frame is in one frame in 30fps.\n\t\t// This is from MMD animation spec.\n\t\t// '1.5' is for precision loss. times are Float32 in Three.js Animation system.\n\t\tconst weight1 = ( ( t1 - t0 ) < 1 / 30 * 1.5 ) ? 0.0 : ( t - t0 ) / ( t1 - t0 );\n\n\t\tif ( stride === 4 ) { // Quaternion\n\n\t\t\tconst x1 = params[ i1 * 4 + 0 ];\n\t\t\tconst x2 = params[ i1 * 4 + 1 ];\n\t\t\tconst y1 = params[ i1 * 4 + 2 ];\n\t\t\tconst y2 = params[ i1 * 4 + 3 ];\n\n\t\t\tconst ratio = this._calculate( x1, x2, y1, y2, weight1 );\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset0, values, offset1, ratio );\n\n\t\t} else if ( stride === 3 ) { // Vector3\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tconst x1 = params[ i1 * 12 + i * 4 + 0 ];\n\t\t\t\tconst x2 = params[ i1 * 12 + i * 4 + 1 ];\n\t\t\t\tconst y1 = params[ i1 * 12 + i * 4 + 2 ];\n\t\t\t\tconst y2 = params[ i1 * 12 + i * 4 + 3 ];\n\n\t\t\t\tconst ratio = this._calculate( x1, x2, y1, y2, weight1 );\n\n\t\t\t\tresult[ i ] = values[ offset0 + i ] * ( 1 - ratio ) + values[ offset1 + i ] * ratio;\n\n\t\t\t}\n\n\t\t} else { // Number\n\n\t\t\tconst x1 = params[ i1 * 4 + 0 ];\n\t\t\tconst x2 = params[ i1 * 4 + 1 ];\n\t\t\tconst y1 = params[ i1 * 4 + 2 ];\n\t\t\tconst y2 = params[ i1 * 4 + 3 ];\n\n\t\t\tconst ratio = this._calculate( x1, x2, y1, y2, weight1 );\n\n\t\t\tresult[ 0 ] = values[ offset0 ] * ( 1 - ratio ) + values[ offset1 ] * ratio;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t_calculate( x1, x2, y1, y2, x ) {\n\n\t\t/*\n\t\t\t * Cubic Bezier curves\n\t\t\t * https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Cubic_B.C3.A9zier_curves\n\t\t\t *\n\t\t\t * B(t) = ( 1 - t ) ^ 3 * P0\n\t\t\t * + 3 * ( 1 - t ) ^ 2 * t * P1\n\t\t\t * + 3 * ( 1 - t ) * t^2 * P2\n\t\t\t * + t ^ 3 * P3\n\t\t\t * ( 0 <= t <= 1 )\n\t\t\t *\n\t\t\t * MMD uses Cubic Bezier curves for bone and camera animation interpolation.\n\t\t\t * http://d.hatena.ne.jp/edvakf/20111016/1318716097\n\t\t\t *\n\t\t\t * x = ( 1 - t ) ^ 3 * x0\n\t\t\t * + 3 * ( 1 - t ) ^ 2 * t * x1\n\t\t\t * + 3 * ( 1 - t ) * t^2 * x2\n\t\t\t * + t ^ 3 * x3\n\t\t\t * y = ( 1 - t ) ^ 3 * y0\n\t\t\t * + 3 * ( 1 - t ) ^ 2 * t * y1\n\t\t\t * + 3 * ( 1 - t ) * t^2 * y2\n\t\t\t * + t ^ 3 * y3\n\t\t\t * ( x0 = 0, y0 = 0 )\n\t\t\t * ( x3 = 1, y3 = 1 )\n\t\t\t * ( 0 <= t, x1, x2, y1, y2 <= 1 )\n\t\t\t *\n\t\t\t * Here solves this equation with Bisection method,\n\t\t\t * https://en.wikipedia.org/wiki/Bisection_method\n\t\t\t * gets t, and then calculate y.\n\t\t\t *\n\t\t\t * f(t) = 3 * ( 1 - t ) ^ 2 * t * x1\n\t\t\t * + 3 * ( 1 - t ) * t^2 * x2\n\t\t\t * + t ^ 3 - x = 0\n\t\t\t *\n\t\t\t * (Another option: Newton's method\n\t\t\t * https://en.wikipedia.org/wiki/Newton%27s_method)\n\t\t\t */\n\n\t\tlet c = 0.5;\n\t\tlet t = c;\n\t\tlet s = 1.0 - t;\n\t\tconst loop = 15;\n\t\tconst eps = 1e-5;\n\t\tconst math = Math;\n\n\t\tlet sst3, stt3, ttt;\n\n\t\tfor ( let i = 0; i < loop; i ++ ) {\n\n\t\t\tsst3 = 3.0 * s * s * t;\n\t\t\tstt3 = 3.0 * s * t * t;\n\t\t\tttt = t * t * t;\n\n\t\t\tconst ft = ( sst3 * x1 ) + ( stt3 * x2 ) + ( ttt ) - x;\n\n\t\t\tif ( math.abs( ft ) < eps ) break;\n\n\t\t\tc /= 2.0;\n\n\t\t\tt += ( ft < 0 ) ? c : - c;\n\t\t\ts = 1.0 - t;\n\n\t\t}\n\n\t\treturn ( sst3 * y1 ) + ( stt3 * y2 ) + ttt;\n\n\t}\n\n}\n\nclass MMDToonMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMMDToonMaterial = true;\n\n\t\tthis.type = 'MMDToonMaterial';\n\n\t\tthis._matcapCombine = AddOperation;\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\n\t\tthis.combine = MultiplyOperation;\n\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.lights = true;\n\n\t\tthis.vertexShader = MMDToonShader.vertexShader;\n\t\tthis.fragmentShader = MMDToonShader.fragmentShader;\n\n\t\tthis.defines = Object.assign( {}, MMDToonShader.defines );\n\t\tObject.defineProperty( this, 'matcapCombine', {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._matcapCombine;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._matcapCombine = value;\n\n\t\t\t\tswitch ( value ) {\n\n\t\t\t\t\tcase MultiplyOperation:\n\t\t\t\t\t\tthis.defines.MATCAP_BLENDING_MULTIPLY = true;\n\t\t\t\t\t\tdelete this.defines.MATCAP_BLENDING_ADD;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase AddOperation:\n\t\t\t\t\t\tthis.defines.MATCAP_BLENDING_ADD = true;\n\t\t\t\t\t\tdelete this.defines.MATCAP_BLENDING_MULTIPLY;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t} );\n\n\t\tthis.uniforms = UniformsUtils.clone( MMDToonShader.uniforms );\n\n\t\t// merged from MeshToon/Phong/MatcapMaterial\n\t\tconst exposePropertyNames = [\n\t\t\t'specular',\n\t\t\t'opacity',\n\t\t\t'diffuse',\n\n\t\t\t'map',\n\t\t\t'matcap',\n\t\t\t'gradientMap',\n\n\t\t\t'lightMap',\n\t\t\t'lightMapIntensity',\n\n\t\t\t'aoMap',\n\t\t\t'aoMapIntensity',\n\n\t\t\t'emissive',\n\t\t\t'emissiveMap',\n\n\t\t\t'bumpMap',\n\t\t\t'bumpScale',\n\n\t\t\t'normalMap',\n\t\t\t'normalScale',\n\n\t\t\t'displacemantBias',\n\t\t\t'displacemantMap',\n\t\t\t'displacemantScale',\n\n\t\t\t'specularMap',\n\n\t\t\t'alphaMap',\n\n\t\t\t'reflectivity',\n\t\t\t'refractionRatio',\n\t\t];\n\t\tfor ( const propertyName of exposePropertyNames ) {\n\n\t\t\tObject.defineProperty( this, propertyName, {\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms[ propertyName ].value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms[ propertyName ].value = value;\n\n\t\t\t\t},\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// Special path for shininess to handle zero shininess properly\n\t\tthis._shininess = 30;\n\t\tObject.defineProperty( this, 'shininess', {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._shininess;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._shininess = value;\n\t\t\t\tthis.uniforms.shininess.value = Math.max( this._shininess, 1e-4 ); // To prevent pow( 0.0, 0.0 )\n\n\t\t\t},\n\n\t\t} );\n\n\t\tObject.defineProperty(\n\t\t\tthis,\n\t\t\t'color',\n\t\t\tObject.getOwnPropertyDescriptor( this, 'diffuse' )\n\t\t);\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.matcapCombine = source.matcapCombine;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\t\tthis.normalMapType = source.normalMapType;\n\n\t\tthis.combine = source.combine;\n\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MMDLoader };\n", "import {\n\tColor,\n\tDefaultLoadingManager,\n\tFileLoader,\n\tFrontSide,\n\tLoader,\n\tLoaderUtils,\n\tMeshPhongMaterial,\n\tRepeatWrapping,\n\tTextureLoader,\n\tVector2,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * Loads a Wavefront .mtl file specifying materials\n */\n\nclass MTLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Loads and parses a MTL asset from a URL.\n\t *\n\t * @param {String} url - URL to the MTL file.\n\t * @param {Function} [onLoad] - Callback invoked with the loaded object.\n\t * @param {Function} [onProgress] - Callback for download progress.\n\t * @param {Function} [onError] - Callback for download errors.\n\t *\n\t * @see setPath setResourcePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setResourcePath() explicitly prior to load.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterialOptions( value ) {\n\n\t\tthis.materialOptions = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parses a MTL file.\n\t *\n\t * @param {String} text - Content of MTL file\n\t * @return {MaterialCreator}\n\t *\n\t * @see setPath setResourcePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setResourcePath() explicitly prior to parse.\n\t */\n\tparse( text, path ) {\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet info = {};\n\t\tconst delimiter_pattern = /\\s+/;\n\t\tconst materialsInfo = {};\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tlet line = lines[ i ];\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.length === 0 || line.charAt( 0 ) === '#' ) {\n\n\t\t\t\t// Blank line or comment ignore\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst pos = line.indexOf( ' ' );\n\n\t\t\tlet key = ( pos >= 0 ) ? line.substring( 0, pos ) : line;\n\t\t\tkey = key.toLowerCase();\n\n\t\t\tlet value = ( pos >= 0 ) ? line.substring( pos + 1 ) : '';\n\t\t\tvalue = value.trim();\n\n\t\t\tif ( key === 'newmtl' ) {\n\n\t\t\t\t// New material\n\n\t\t\t\tinfo = { name: value };\n\t\t\t\tmaterialsInfo[ value ] = info;\n\n\t\t\t} else {\n\n\t\t\t\tif ( key === 'ka' || key === 'kd' || key === 'ks' || key === 'ke' ) {\n\n\t\t\t\t\tconst ss = value.split( delimiter_pattern, 3 );\n\t\t\t\t\tinfo[ key ] = [ parseFloat( ss[ 0 ] ), parseFloat( ss[ 1 ] ), parseFloat( ss[ 2 ] ) ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinfo[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst materialCreator = new MaterialCreator( this.resourcePath || path, this.materialOptions );\n\t\tmaterialCreator.setCrossOrigin( this.crossOrigin );\n\t\tmaterialCreator.setManager( this.manager );\n\t\tmaterialCreator.setMaterials( materialsInfo );\n\t\treturn materialCreator;\n\n\t}\n\n}\n\n/**\n * Create a new MTLLoader.MaterialCreator\n * @param baseUrl - Url relative to which textures are loaded\n * @param options - Set of options on how to construct the materials\n * side: Which side to apply the material\n * FrontSide (default), THREE.BackSide, THREE.DoubleSide\n * wrap: What type of wrapping to apply for textures\n * RepeatWrapping (default), THREE.ClampToEdgeWrapping, THREE.MirroredRepeatWrapping\n * normalizeRGB: RGBs need to be normalized to 0-1 from 0-255\n * Default: false, assumed to be already normalized\n * ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's\n * Default: false\n * @constructor\n */\n\nclass MaterialCreator {\n\n\tconstructor( baseUrl = '', options = {} ) {\n\n\t\tthis.baseUrl = baseUrl;\n\t\tthis.options = options;\n\t\tthis.materialsInfo = {};\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t\tthis.crossOrigin = 'anonymous';\n\n\t\tthis.side = ( this.options.side !== undefined ) ? this.options.side : FrontSide;\n\t\tthis.wrap = ( this.options.wrap !== undefined ) ? this.options.wrap : RepeatWrapping;\n\n\t}\n\n\tsetCrossOrigin( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t}\n\n\tsetManager( value ) {\n\n\t\tthis.manager = value;\n\n\t}\n\n\tsetMaterials( materialsInfo ) {\n\n\t\tthis.materialsInfo = this.convert( materialsInfo );\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t}\n\n\tconvert( materialsInfo ) {\n\n\t\tif ( ! this.options ) return materialsInfo;\n\n\t\tconst converted = {};\n\n\t\tfor ( const mn in materialsInfo ) {\n\n\t\t\t// Convert materials info into normalized form based on options\n\n\t\t\tconst mat = materialsInfo[ mn ];\n\n\t\t\tconst covmat = {};\n\n\t\t\tconverted[ mn ] = covmat;\n\n\t\t\tfor ( const prop in mat ) {\n\n\t\t\t\tlet save = true;\n\t\t\t\tlet value = mat[ prop ];\n\t\t\t\tconst lprop = prop.toLowerCase();\n\n\t\t\t\tswitch ( lprop ) {\n\n\t\t\t\t\tcase 'kd':\n\t\t\t\t\tcase 'ka':\n\t\t\t\t\tcase 'ks':\n\n\t\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\t\tif ( this.options && this.options.normalizeRGB ) {\n\n\t\t\t\t\t\t\tvalue = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( this.options && this.options.ignoreZeroRGBs ) {\n\n\t\t\t\t\t\t\tif ( value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0 ) {\n\n\t\t\t\t\t\t\t\t// ignore\n\n\t\t\t\t\t\t\t\tsave = false;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( save ) {\n\n\t\t\t\t\tcovmat[ lprop ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn converted;\n\n\t}\n\n\tpreload() {\n\n\t\tfor ( const mn in this.materialsInfo ) {\n\n\t\t\tthis.create( mn );\n\n\t\t}\n\n\t}\n\n\tgetIndex( materialName ) {\n\n\t\treturn this.nameLookup[ materialName ];\n\n\t}\n\n\tgetAsArray() {\n\n\t\tlet index = 0;\n\n\t\tfor ( const mn in this.materialsInfo ) {\n\n\t\t\tthis.materialsArray[ index ] = this.create( mn );\n\t\t\tthis.nameLookup[ mn ] = index;\n\t\t\tindex ++;\n\n\t\t}\n\n\t\treturn this.materialsArray;\n\n\t}\n\n\tcreate( materialName ) {\n\n\t\tif ( this.materials[ materialName ] === undefined ) {\n\n\t\t\tthis.createMaterial_( materialName );\n\n\t\t}\n\n\t\treturn this.materials[ materialName ];\n\n\t}\n\n\tcreateMaterial_( materialName ) {\n\n\t\t// Create material\n\n\t\tconst scope = this;\n\t\tconst mat = this.materialsInfo[ materialName ];\n\t\tconst params = {\n\n\t\t\tname: materialName,\n\t\t\tside: this.side\n\n\t\t};\n\n\t\tfunction resolveURL( baseUrl, url ) {\n\n\t\t\tif ( typeof url !== 'string' || url === '' )\n\t\t\t\treturn '';\n\n\t\t\t// Absolute URL\n\t\t\tif ( /^https?:\\/\\//i.test( url ) ) return url;\n\n\t\t\treturn baseUrl + url;\n\n\t\t}\n\n\t\tfunction setMapForType( mapType, value ) {\n\n\t\t\tif ( params[ mapType ] ) return; // Keep the first encountered texture\n\n\t\t\tconst texParams = scope.getTextureParams( value, params );\n\t\t\tconst map = scope.loadTexture( resolveURL( scope.baseUrl, texParams.url ) );\n\n\t\t\tmap.repeat.copy( texParams.scale );\n\t\t\tmap.offset.copy( texParams.offset );\n\n\t\t\tmap.wrapS = scope.wrap;\n\t\t\tmap.wrapT = scope.wrap;\n\n\t\t\tif ( mapType === 'map' || mapType === 'emissiveMap' ) {\n\n\t\t\t\tmap.colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\tparams[ mapType ] = map;\n\n\t\t}\n\n\t\tfor ( const prop in mat ) {\n\n\t\t\tconst value = mat[ prop ];\n\t\t\tlet n;\n\n\t\t\tif ( value === '' ) continue;\n\n\t\t\tswitch ( prop.toLowerCase() ) {\n\n\t\t\t\t// Ns is material specular exponent\n\n\t\t\t\tcase 'kd':\n\n\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\tparams.color = new Color().fromArray( value ).convertSRGBToLinear();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ks':\n\n\t\t\t\t\t// Specular color (color when light is reflected from shiny surface) using RGB values\n\t\t\t\t\tparams.specular = new Color().fromArray( value ).convertSRGBToLinear();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ke':\n\n\t\t\t\t\t// Emissive using RGB values\n\t\t\t\t\tparams.emissive = new Color().fromArray( value ).convertSRGBToLinear();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_kd':\n\n\t\t\t\t\t// Diffuse texture map\n\n\t\t\t\t\tsetMapForType( 'map', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ks':\n\n\t\t\t\t\t// Specular map\n\n\t\t\t\t\tsetMapForType( 'specularMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ke':\n\n\t\t\t\t\t// Emissive map\n\n\t\t\t\t\tsetMapForType( 'emissiveMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'norm':\n\n\t\t\t\t\tsetMapForType( 'normalMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_bump':\n\t\t\t\tcase 'bump':\n\n\t\t\t\t\t// Bump texture map\n\n\t\t\t\t\tsetMapForType( 'bumpMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_d':\n\n\t\t\t\t\t// Alpha map\n\n\t\t\t\t\tsetMapForType( 'alphaMap', value );\n\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ns':\n\n\t\t\t\t\t// The specular exponent (defines the focus of the specular highlight)\n\t\t\t\t\t// A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.\n\n\t\t\t\t\tparams.shininess = parseFloat( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'd':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( n < 1 ) {\n\n\t\t\t\t\t\tparams.opacity = n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'tr':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( this.options && this.options.invertTrProperty ) n = 1 - n;\n\n\t\t\t\t\tif ( n > 0 ) {\n\n\t\t\t\t\t\tparams.opacity = 1 - n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials[ materialName ] = new MeshPhongMaterial( params );\n\t\treturn this.materials[ materialName ];\n\n\t}\n\n\tgetTextureParams( value, matParams ) {\n\n\t\tconst texParams = {\n\n\t\t\tscale: new Vector2( 1, 1 ),\n\t\t\toffset: new Vector2( 0, 0 )\n\n\t\t };\n\n\t\tconst items = value.split( /\\s+/ );\n\t\tlet pos;\n\n\t\tpos = items.indexOf( '-bm' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\tmatParams.bumpScale = parseFloat( items[ pos + 1 ] );\n\t\t\titems.splice( pos, 2 );\n\n\t\t}\n\n\t\tpos = items.indexOf( '-s' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.scale.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\tpos = items.indexOf( '-o' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.offset.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\ttexParams.url = items.join( ' ' ).trim();\n\t\treturn texParams;\n\n\t}\n\n\tloadTexture( url, mapping, onLoad, onProgress, onError ) {\n\n\t\tconst manager = ( this.manager !== undefined ) ? this.manager : DefaultLoadingManager;\n\t\tlet loader = manager.getHandler( url );\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = new TextureLoader( manager );\n\n\t\t}\n\n\t\tif ( loader.setCrossOrigin ) loader.setCrossOrigin( this.crossOrigin );\n\n\t\tconst texture = loader.load( url, onLoad, onProgress, onError );\n\n\t\tif ( mapping !== undefined ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t}\n\n}\n\nexport { MTLLoader };\n", "import {\n\tClampToEdgeWrapping,\n\tDoubleSide,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tPlaneGeometry,\n\tTexture,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * This class has been made to hold a slice of a volume data\n * @class\n * @param {Volume} volume The associated volume\n * @param {number} [index=0] The index of the slice\n * @param {string} [axis='z'] For now only 'x', 'y' or 'z' but later it will change to a normal vector\n * @see Volume\n */\nclass VolumeSlice {\n\n\tconstructor( volume, index, axis ) {\n\n\t\tconst slice = this;\n\t\t/**\n\t\t * @member {Volume} volume The associated volume\n\t\t */\n\t\tthis.volume = volume;\n\t\t/**\n\t\t * @member {Number} index The index of the slice, if changed, will automatically call updateGeometry at the next repaint\n\t\t */\n\t\tindex = index || 0;\n\t\tObject.defineProperty( this, 'index', {\n\t\t\tget: function () {\n\n\t\t\t\treturn index;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tindex = value;\n\t\t\t\tslice.geometryNeedsUpdate = true;\n\t\t\t\treturn index;\n\n\t\t\t}\n\t\t} );\n\t\t/**\n\t\t * @member {String} axis The normal axis\n\t\t */\n\t\tthis.axis = axis || 'z';\n\n\t\t/**\n\t\t * @member {HTMLCanvasElement} canvas The final canvas used for the texture\n\t\t */\n\t\t/**\n\t\t * @member {CanvasRenderingContext2D} ctx Context of the canvas\n\t\t */\n\t\tthis.canvas = document.createElement( 'canvas' );\n\t\t/**\n\t\t * @member {HTMLCanvasElement} canvasBuffer The intermediary canvas used to paint the data\n\t\t */\n\t\t/**\n\t\t * @member {CanvasRenderingContext2D} ctxBuffer Context of the canvas buffer\n\t\t */\n\t\tthis.canvasBuffer = document.createElement( 'canvas' );\n\t\tthis.updateGeometry();\n\n\n\t\tconst canvasMap = new Texture( this.canvas );\n\t\tcanvasMap.minFilter = LinearFilter;\n\t\tcanvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping;\n\t\tcanvasMap.colorSpace = SRGBColorSpace;\n\t\tconst material = new MeshBasicMaterial( { map: canvasMap, side: DoubleSide, transparent: true } );\n\t\t/**\n\t\t * @member {Mesh} mesh The mesh ready to get used in the scene\n\t\t */\n\t\tthis.mesh = new Mesh( this.geometry, material );\n\t\tthis.mesh.matrixAutoUpdate = false;\n\t\t/**\n\t\t * @member {Boolean} geometryNeedsUpdate If set to true, updateGeometry will be triggered at the next repaint\n\t\t */\n\t\tthis.geometryNeedsUpdate = true;\n\t\tthis.repaint();\n\n\t\t/**\n\t\t * @member {Number} iLength Width of slice in the original coordinate system, corresponds to the width of the buffer canvas\n\t\t */\n\n\t\t/**\n\t\t * @member {Number} jLength Height of slice in the original coordinate system, corresponds to the height of the buffer canvas\n\t\t */\n\n\t\t/**\n\t\t * @member {Function} sliceAccess Function that allow the slice to access right data\n\t\t * @see Volume.extractPerpendicularPlane\n\t\t * @param {Number} i The first coordinate\n\t\t * @param {Number} j The second coordinate\n\t\t * @returns {Number} the index corresponding to the voxel in volume.data of the given position in the slice\n\t\t */\n\n\n\t}\n\n\t/**\n\t * @member {Function} repaint Refresh the texture and the geometry if geometryNeedsUpdate is set to true\n\t * @memberof VolumeSlice\n\t */\n\trepaint() {\n\n\t\tif ( this.geometryNeedsUpdate ) {\n\n\t\t\tthis.updateGeometry();\n\n\t\t}\n\n\t\tconst iLength = this.iLength,\n\t\t\tjLength = this.jLength,\n\t\t\tsliceAccess = this.sliceAccess,\n\t\t\tvolume = this.volume,\n\t\t\tcanvas = this.canvasBuffer,\n\t\t\tctx = this.ctxBuffer;\n\n\n\t\t// get the imageData and pixel array from the canvas\n\t\tconst imgData = ctx.getImageData( 0, 0, iLength, jLength );\n\t\tconst data = imgData.data;\n\t\tconst volumeData = volume.data;\n\t\tconst upperThreshold = volume.upperThreshold;\n\t\tconst lowerThreshold = volume.lowerThreshold;\n\t\tconst windowLow = volume.windowLow;\n\t\tconst windowHigh = volume.windowHigh;\n\n\t\t// manipulate some pixel elements\n\t\tlet pixelCount = 0;\n\n\t\tif ( volume.dataType === 'label' ) {\n\n\t\t\t//this part is currently useless but will be used when colortables will be handled\n\t\t\tfor ( let j = 0; j < jLength; j ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < iLength; i ++ ) {\n\n\t\t\t\t\tlet label = volumeData[ sliceAccess( i, j ) ];\n\t\t\t\t\tlabel = label >= this.colorMap.length ? ( label % this.colorMap.length ) + 1 : label;\n\t\t\t\t\tconst color = this.colorMap[ label ];\n\t\t\t\t\tdata[ 4 * pixelCount ] = ( color >> 24 ) & 0xff;\n\t\t\t\t\tdata[ 4 * pixelCount + 1 ] = ( color >> 16 ) & 0xff;\n\t\t\t\t\tdata[ 4 * pixelCount + 2 ] = ( color >> 8 ) & 0xff;\n\t\t\t\t\tdata[ 4 * pixelCount + 3 ] = color & 0xff;\n\t\t\t\t\tpixelCount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let j = 0; j < jLength; j ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < iLength; i ++ ) {\n\n\t\t\t\t\tlet value = volumeData[ sliceAccess( i, j ) ];\n\t\t\t\t\tlet alpha = 0xff;\n\t\t\t\t\t//apply threshold\n\t\t\t\t\talpha = upperThreshold >= value ? ( lowerThreshold <= value ? alpha : 0 ) : 0;\n\t\t\t\t\t//apply window level\n\t\t\t\t\tvalue = Math.floor( 255 * ( value - windowLow ) / ( windowHigh - windowLow ) );\n\t\t\t\t\tvalue = value > 255 ? 255 : ( value < 0 ? 0 : value | 0 );\n\n\t\t\t\t\tdata[ 4 * pixelCount ] = value;\n\t\t\t\t\tdata[ 4 * pixelCount + 1 ] = value;\n\t\t\t\t\tdata[ 4 * pixelCount + 2 ] = value;\n\t\t\t\t\tdata[ 4 * pixelCount + 3 ] = alpha;\n\t\t\t\t\tpixelCount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tctx.putImageData( imgData, 0, 0 );\n\t\tthis.ctx.drawImage( canvas, 0, 0, iLength, jLength, 0, 0, this.canvas.width, this.canvas.height );\n\n\n\t\tthis.mesh.material.map.needsUpdate = true;\n\n\t}\n\n\t/**\n\t * @member {Function} Refresh the geometry according to axis and index\n\t * @see Volume.extractPerpendicularPlane\n\t * @memberof VolumeSlice\n\t */\n\tupdateGeometry() {\n\n\t\tconst extracted = this.volume.extractPerpendicularPlane( this.axis, this.index );\n\t\tthis.sliceAccess = extracted.sliceAccess;\n\t\tthis.jLength = extracted.jLength;\n\t\tthis.iLength = extracted.iLength;\n\t\tthis.matrix = extracted.matrix;\n\n\t\tthis.canvas.width = extracted.planeWidth;\n\t\tthis.canvas.height = extracted.planeHeight;\n\t\tthis.canvasBuffer.width = this.iLength;\n\t\tthis.canvasBuffer.height = this.jLength;\n\t\tthis.ctx = this.canvas.getContext( '2d' );\n\t\tthis.ctxBuffer = this.canvasBuffer.getContext( '2d' );\n\n\t\tif ( this.geometry ) this.geometry.dispose(); // dispose existing geometry\n\n\t\tthis.geometry = new PlaneGeometry( extracted.planeWidth, extracted.planeHeight );\n\n\t\tif ( this.mesh ) {\n\n\t\t\tthis.mesh.geometry = this.geometry;\n\t\t\t//reset mesh matrix\n\t\t\tthis.mesh.matrix.identity();\n\t\t\tthis.mesh.applyMatrix4( this.matrix );\n\n\t\t}\n\n\t\tthis.geometryNeedsUpdate = false;\n\n\t}\n\n}\n\nexport { VolumeSlice };\n", "import {\n\tMatrix3,\n\tMatrix4,\n\tVector3\n} from 'three';\nimport { VolumeSlice } from '../misc/VolumeSlice.js';\n\n/**\n * This class had been written to handle the output of the NRRD loader.\n * It contains a volume of data and informations about it.\n * For now it only handles 3 dimensional data.\n * See the webgl_loader_nrrd.html example and the loaderNRRD.js file to see how to use this class.\n * @class\n * @param {number} xLength Width of the volume\n * @param {number} yLength Length of the volume\n * @param {number} zLength Depth of the volume\n * @param {string} type The type of data (uint8, uint16, ...)\n * @param {ArrayBuffer} arrayBuffer The buffer with volume data\n */\nclass Volume {\n\n\tconstructor( xLength, yLength, zLength, type, arrayBuffer ) {\n\n\t\tif ( xLength !== undefined ) {\n\n\t\t\t/**\n\t\t\t * @member {number} xLength Width of the volume in the IJK coordinate system\n\t\t\t */\n\t\t\tthis.xLength = Number( xLength ) || 1;\n\t\t\t/**\n\t\t\t * @member {number} yLength Height of the volume in the IJK coordinate system\n\t\t\t */\n\t\t\tthis.yLength = Number( yLength ) || 1;\n\t\t\t/**\n\t\t\t * @member {number} zLength Depth of the volume in the IJK coordinate system\n\t\t\t */\n\t\t\tthis.zLength = Number( zLength ) || 1;\n\t\t\t/**\n\t\t\t * @member {Array} The order of the Axis dictated by the NRRD header\n\t\t\t */\n\t\t\tthis.axisOrder = [ 'x', 'y', 'z' ];\n\t\t\t/**\n\t\t\t * @member {TypedArray} data Data of the volume\n\t\t\t */\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'Uint8' :\n\t\t\t\tcase 'uint8' :\n\t\t\t\tcase 'uchar' :\n\t\t\t\tcase 'unsigned char' :\n\t\t\t\tcase 'uint8_t' :\n\t\t\t\t\tthis.data = new Uint8Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Int8' :\n\t\t\t\tcase 'int8' :\n\t\t\t\tcase 'signed char' :\n\t\t\t\tcase 'int8_t' :\n\t\t\t\t\tthis.data = new Int8Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Int16' :\n\t\t\t\tcase 'int16' :\n\t\t\t\tcase 'short' :\n\t\t\t\tcase 'short int' :\n\t\t\t\tcase 'signed short' :\n\t\t\t\tcase 'signed short int' :\n\t\t\t\tcase 'int16_t' :\n\t\t\t\t\tthis.data = new Int16Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Uint16' :\n\t\t\t\tcase 'uint16' :\n\t\t\t\tcase 'ushort' :\n\t\t\t\tcase 'unsigned short' :\n\t\t\t\tcase 'unsigned short int' :\n\t\t\t\tcase 'uint16_t' :\n\t\t\t\t\tthis.data = new Uint16Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Int32' :\n\t\t\t\tcase 'int32' :\n\t\t\t\tcase 'int' :\n\t\t\t\tcase 'signed int' :\n\t\t\t\tcase 'int32_t' :\n\t\t\t\t\tthis.data = new Int32Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Uint32' :\n\t\t\t\tcase 'uint32' :\n\t\t\t\tcase 'uint' :\n\t\t\t\tcase 'unsigned int' :\n\t\t\t\tcase 'uint32_t' :\n\t\t\t\t\tthis.data = new Uint32Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'longlong' :\n\t\t\t\tcase 'long long' :\n\t\t\t\tcase 'long long int' :\n\t\t\t\tcase 'signed long long' :\n\t\t\t\tcase 'signed long long int' :\n\t\t\t\tcase 'int64' :\n\t\t\t\tcase 'int64_t' :\n\t\t\t\tcase 'ulonglong' :\n\t\t\t\tcase 'unsigned long long' :\n\t\t\t\tcase 'unsigned long long int' :\n\t\t\t\tcase 'uint64' :\n\t\t\t\tcase 'uint64_t' :\n\t\t\t\t\tthrow new Error( 'Error in Volume constructor : this type is not supported in JavaScript' );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Float32' :\n\t\t\t\tcase 'float32' :\n\t\t\t\tcase 'float' :\n\t\t\t\t\tthis.data = new Float32Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Float64' :\n\t\t\t\tcase 'float64' :\n\t\t\t\tcase 'double' :\n\t\t\t\t\tthis.data = new Float64Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault :\n\t\t\t\t\tthis.data = new Uint8Array( arrayBuffer );\n\n\t\t\t}\n\n\t\t\tif ( this.data.length !== this.xLength * this.yLength * this.zLength ) {\n\n\t\t\t\tthrow new Error( 'Error in Volume constructor, lengths are not matching arrayBuffer size' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * @member {Array} spacing Spacing to apply to the volume from IJK to RAS coordinate system\n\t\t */\n\t\tthis.spacing = [ 1, 1, 1 ];\n\t\t/**\n\t\t * @member {Array} offset Offset of the volume in the RAS coordinate system\n\t\t */\n\t\tthis.offset = [ 0, 0, 0 ];\n\t\t/**\n\t\t * @member {Martrix3} matrix The IJK to RAS matrix\n\t\t */\n\t\tthis.matrix = new Matrix3();\n\t\tthis.matrix.identity();\n\t\t/**\n\t\t * @member {Martrix3} inverseMatrix The RAS to IJK matrix\n\t\t */\n\t\t/**\n\t\t * @member {number} lowerThreshold The voxels with values under this threshold won't appear in the slices.\n\t\t * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume\n\t\t */\n\t\tlet lowerThreshold = - Infinity;\n\t\tObject.defineProperty( this, 'lowerThreshold', {\n\t\t\tget: function () {\n\n\t\t\t\treturn lowerThreshold;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tlowerThreshold = value;\n\t\t\t\tthis.sliceList.forEach( function ( slice ) {\n\n\t\t\t\t\tslice.geometryNeedsUpdate = true;\n\n\t\t\t\t} );\n\n\t\t\t}\n\t\t} );\n\t\t/**\n\t\t * @member {number} upperThreshold The voxels with values over this threshold won't appear in the slices.\n\t\t * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume\n\t\t */\n\t\tlet upperThreshold = Infinity;\n\t\tObject.defineProperty( this, 'upperThreshold', {\n\t\t\tget: function () {\n\n\t\t\t\treturn upperThreshold;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tupperThreshold = value;\n\t\t\t\tthis.sliceList.forEach( function ( slice ) {\n\n\t\t\t\t\tslice.geometryNeedsUpdate = true;\n\n\t\t\t\t} );\n\n\t\t\t}\n\t\t} );\n\n\n\t\t/**\n\t\t * @member {Array} sliceList The list of all the slices associated to this volume\n\t\t */\n\t\tthis.sliceList = [];\n\n\n\t\t/**\n\t\t * @member {boolean} segmentation in segmentation mode, it can load 16-bits nrrds correctly\n\t\t */\n\t\tthis.segmentation = false;\n\n\n\t\t/**\n\t\t * @member {Array} RASDimensions This array holds the dimensions of the volume in the RAS space\n\t\t */\n\n\n\n\t}\n\n\t/**\n\t * @member {Function} getData Shortcut for data[access(i,j,k)]\n\t * @memberof Volume\n\t * @param {number} i First coordinate\n\t * @param {number} j Second coordinate\n\t * @param {number} k Third coordinate\n\t * @returns {number} value in the data array\n\t */\n\tgetData( i, j, k ) {\n\n\t\treturn this.data[ k * this.xLength * this.yLength + j * this.xLength + i ];\n\n\t}\n\n\t/**\n\t * @member {Function} access compute the index in the data array corresponding to the given coordinates in IJK system\n\t * @memberof Volume\n\t * @param {number} i First coordinate\n\t * @param {number} j Second coordinate\n\t * @param {number} k Third coordinate\n\t * @returns {number} index\n\t */\n\taccess( i, j, k ) {\n\n\t\treturn k * this.xLength * this.yLength + j * this.xLength + i;\n\n\t}\n\n\t/**\n\t * @member {Function} reverseAccess Retrieve the IJK coordinates of the voxel corresponding of the given index in the data\n\t * @memberof Volume\n\t * @param {number} index index of the voxel\n\t * @returns {Array} [x,y,z]\n\t */\n\treverseAccess( index ) {\n\n\t\tconst z = Math.floor( index / ( this.yLength * this.xLength ) );\n\t\tconst y = Math.floor( ( index - z * this.yLength * this.xLength ) / this.xLength );\n\t\tconst x = index - z * this.yLength * this.xLength - y * this.xLength;\n\t\treturn [ x, y, z ];\n\n\t}\n\n\t/**\n\t * @member {Function} map Apply a function to all the voxels, be careful, the value will be replaced\n\t * @memberof Volume\n\t * @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters :\n\t * value of the voxel\n\t * index of the voxel\n\t * the data (TypedArray)\n\t * @param {Object} context You can specify a context in which call the function, default if this Volume\n\t * @returns {Volume} this\n\t */\n\tmap( functionToMap, context ) {\n\n\t\tconst length = this.data.length;\n\t\tcontext = context || this;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tthis.data[ i ] = functionToMap.call( context, this.data[ i ], i, this.data );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @member {Function} extractPerpendicularPlane Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess, the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system.\n\t * @memberof Volume\n\t * @param {string} axis the normal axis to the slice 'x' 'y' or 'z'\n\t * @param {number} index the index of the slice\n\t * @returns {Object} an object containing all the usefull information on the geometry of the slice\n\t */\n\textractPerpendicularPlane( axis, RASIndex ) {\n\n\t\tlet firstSpacing,\n\t\t\tsecondSpacing,\n\t\t\tpositionOffset,\n\t\t\tIJKIndex;\n\n\t\tconst axisInIJK = new Vector3(),\n\t\t\tfirstDirection = new Vector3(),\n\t\t\tsecondDirection = new Vector3(),\n\t\t\tplaneMatrix = ( new Matrix4() ).identity(),\n\t\t\tvolume = this;\n\n\t\tconst dimensions = new Vector3( this.xLength, this.yLength, this.zLength );\n\n\n\t\tswitch ( axis ) {\n\n\t\t\tcase 'x' :\n\t\t\t\taxisInIJK.set( 1, 0, 0 );\n\t\t\t\tfirstDirection.set( 0, 0, - 1 );\n\t\t\t\tsecondDirection.set( 0, - 1, 0 );\n\t\t\t\tfirstSpacing = this.spacing[ this.axisOrder.indexOf( 'z' ) ];\n\t\t\t\tsecondSpacing = this.spacing[ this.axisOrder.indexOf( 'y' ) ];\n\t\t\t\tIJKIndex = new Vector3( RASIndex, 0, 0 );\n\n\t\t\t\tplaneMatrix.multiply( ( new Matrix4() ).makeRotationY( Math.PI / 2 ) );\n\t\t\t\tpositionOffset = ( volume.RASDimensions[ 0 ] - 1 ) / 2;\n\t\t\t\tplaneMatrix.setPosition( new Vector3( RASIndex - positionOffset, 0, 0 ) );\n\t\t\t\tbreak;\n\t\t\tcase 'y' :\n\t\t\t\taxisInIJK.set( 0, 1, 0 );\n\t\t\t\tfirstDirection.set( 1, 0, 0 );\n\t\t\t\tsecondDirection.set( 0, 0, 1 );\n\t\t\t\tfirstSpacing = this.spacing[ this.axisOrder.indexOf( 'x' ) ];\n\t\t\t\tsecondSpacing = this.spacing[ this.axisOrder.indexOf( 'z' ) ];\n\t\t\t\tIJKIndex = new Vector3( 0, RASIndex, 0 );\n\n\t\t\t\tplaneMatrix.multiply( ( new Matrix4() ).makeRotationX( - Math.PI / 2 ) );\n\t\t\t\tpositionOffset = ( volume.RASDimensions[ 1 ] - 1 ) / 2;\n\t\t\t\tplaneMatrix.setPosition( new Vector3( 0, RASIndex - positionOffset, 0 ) );\n\t\t\t\tbreak;\n\t\t\tcase 'z' :\n\t\t\tdefault :\n\t\t\t\taxisInIJK.set( 0, 0, 1 );\n\t\t\t\tfirstDirection.set( 1, 0, 0 );\n\t\t\t\tsecondDirection.set( 0, - 1, 0 );\n\t\t\t\tfirstSpacing = this.spacing[ this.axisOrder.indexOf( 'x' ) ];\n\t\t\t\tsecondSpacing = this.spacing[ this.axisOrder.indexOf( 'y' ) ];\n\t\t\t\tIJKIndex = new Vector3( 0, 0, RASIndex );\n\n\t\t\t\tpositionOffset = ( volume.RASDimensions[ 2 ] - 1 ) / 2;\n\t\t\t\tplaneMatrix.setPosition( new Vector3( 0, 0, RASIndex - positionOffset ) );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( ! this.segmentation ) {\n\n\t\t\tfirstDirection.applyMatrix4( volume.inverseMatrix ).normalize();\n\t\t\tsecondDirection.applyMatrix4( volume.inverseMatrix ).normalize();\n\t\t\taxisInIJK.applyMatrix4( volume.inverseMatrix ).normalize();\n\n\t\t}\n\n\t\tfirstDirection.arglet = 'i';\n\t\tsecondDirection.arglet = 'j';\n\t\tconst iLength = Math.floor( Math.abs( firstDirection.dot( dimensions ) ) );\n\t\tconst jLength = Math.floor( Math.abs( secondDirection.dot( dimensions ) ) );\n\t\tconst planeWidth = Math.abs( iLength * firstSpacing );\n\t\tconst planeHeight = Math.abs( jLength * secondSpacing );\n\n\t\tIJKIndex = Math.abs( Math.round( IJKIndex.applyMatrix4( volume.inverseMatrix ).dot( axisInIJK ) ) );\n\t\tconst base = [ new Vector3( 1, 0, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ) ];\n\t\tconst iDirection = [ firstDirection, secondDirection, axisInIJK ].find( function ( x ) {\n\n\t\t\treturn Math.abs( x.dot( base[ 0 ] ) ) > 0.9;\n\n\t\t} );\n\t\tconst jDirection = [ firstDirection, secondDirection, axisInIJK ].find( function ( x ) {\n\n\t\t\treturn Math.abs( x.dot( base[ 1 ] ) ) > 0.9;\n\n\t\t} );\n\t\tconst kDirection = [ firstDirection, secondDirection, axisInIJK ].find( function ( x ) {\n\n\t\t\treturn Math.abs( x.dot( base[ 2 ] ) ) > 0.9;\n\n\t\t} );\n\n\t\tfunction sliceAccess( i, j ) {\n\n\t\t\tconst si = ( iDirection === axisInIJK ) ? IJKIndex : ( iDirection.arglet === 'i' ? i : j );\n\t\t\tconst sj = ( jDirection === axisInIJK ) ? IJKIndex : ( jDirection.arglet === 'i' ? i : j );\n\t\t\tconst sk = ( kDirection === axisInIJK ) ? IJKIndex : ( kDirection.arglet === 'i' ? i : j );\n\n\t\t\t// invert indices if necessary\n\n\t\t\tconst accessI = ( iDirection.dot( base[ 0 ] ) > 0 ) ? si : ( volume.xLength - 1 ) - si;\n\t\t\tconst accessJ = ( jDirection.dot( base[ 1 ] ) > 0 ) ? sj : ( volume.yLength - 1 ) - sj;\n\t\t\tconst accessK = ( kDirection.dot( base[ 2 ] ) > 0 ) ? sk : ( volume.zLength - 1 ) - sk;\n\n\t\t\treturn volume.access( accessI, accessJ, accessK );\n\n\t\t}\n\n\t\treturn {\n\t\t\tiLength: iLength,\n\t\t\tjLength: jLength,\n\t\t\tsliceAccess: sliceAccess,\n\t\t\tmatrix: planeMatrix,\n\t\t\tplaneWidth: planeWidth,\n\t\t\tplaneHeight: planeHeight\n\t\t};\n\n\t}\n\n\t/**\n\t * @member {Function} extractSlice Returns a slice corresponding to the given axis and index\n\t * The coordinate are given in the Right Anterior Superior coordinate format\n\t * @memberof Volume\n\t * @param {string} axis the normal axis to the slice 'x' 'y' or 'z'\n\t * @param {number} index the index of the slice\n\t * @returns {VolumeSlice} the extracted slice\n\t */\n\textractSlice( axis, index ) {\n\n\t\tconst slice = new VolumeSlice( this, index, axis );\n\t\tthis.sliceList.push( slice );\n\t\treturn slice;\n\n\t}\n\n\t/**\n\t * @member {Function} repaintAllSlices Call repaint on all the slices extracted from this volume\n\t * @see VolumeSlice.repaint\n\t * @memberof Volume\n\t * @returns {Volume} this\n\t */\n\trepaintAllSlices() {\n\n\t\tthis.sliceList.forEach( function ( slice ) {\n\n\t\t\tslice.repaint();\n\n\t\t} );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @member {Function} computeMinMax Compute the minimum and the maximum of the data in the volume\n\t * @memberof Volume\n\t * @returns {Array} [min,max]\n\t */\n\tcomputeMinMax() {\n\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\n\t\t// buffer the length\n\t\tconst datasize = this.data.length;\n\n\t\tlet i = 0;\n\n\t\tfor ( i = 0; i < datasize; i ++ ) {\n\n\t\t\tif ( ! isNaN( this.data[ i ] ) ) {\n\n\t\t\t\tconst value = this.data[ i ];\n\t\t\t\tmin = Math.min( min, value );\n\t\t\t\tmax = Math.max( max, value );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t\treturn [ min, max ];\n\n\t}\n\n}\n\nexport { Volume };\n", "import {\n\tFileLoader,\n\tLoader,\n\tMatrix4,\n\tVector3\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\nimport { Volume } from '../misc/Volume.js';\n\nclass NRRDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t *\n\t * @param {boolean} segmentation is a option for user to choose\n \t */\n\tsetSegmentation( segmentation ) {\n\n\t this.segmentation = segmentation;\n\n\t}\n\n\tparse( data ) {\n\n\t\t// this parser is largely inspired from the XTK NRRD parser : https://github.com/xtk/X\n\n\t\tlet _data = data;\n\n\t\tlet _dataPointer = 0;\n\n\t\tconst _nativeLittleEndian = new Int8Array( new Int16Array( [ 1 ] ).buffer )[ 0 ] > 0;\n\n\t\tconst _littleEndian = true;\n\n\t\tconst headerObject = {};\n\n\t\tfunction scan( type, chunks ) {\n\n\t\t\tlet _chunkSize = 1;\n\t\t\tlet _array_type = Uint8Array;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\t// 1 byte data types\n\t\t\t\tcase 'uchar':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'schar':\n\t\t\t\t\t_array_type = Int8Array;\n\t\t\t\t\tbreak;\n\t\t\t\t// 2 byte data types\n\t\t\t\tcase 'ushort':\n\t\t\t\t\t_array_type = Uint16Array;\n\t\t\t\t\t_chunkSize = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'sshort':\n\t\t\t\t\t_array_type = Int16Array;\n\t\t\t\t\t_chunkSize = 2;\n\t\t\t\t\tbreak;\n\t\t\t\t// 4 byte data types\n\t\t\t\tcase 'uint':\n\t\t\t\t\t_array_type = Uint32Array;\n\t\t\t\t\t_chunkSize = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'sint':\n\t\t\t\t\t_array_type = Int32Array;\n\t\t\t\t\t_chunkSize = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'float':\n\t\t\t\t\t_array_type = Float32Array;\n\t\t\t\t\t_chunkSize = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'complex':\n\t\t\t\t\t_array_type = Float64Array;\n\t\t\t\t\t_chunkSize = 8;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'double':\n\t\t\t\t\t_array_type = Float64Array;\n\t\t\t\t\t_chunkSize = 8;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// increase the data pointer in-place\n\t\t\tlet _bytes = new _array_type( _data.slice( _dataPointer,\n\t\t\t\t_dataPointer += chunks * _chunkSize ) );\n\n\t\t\t// if required, flip the endianness of the bytes\n\t\t\tif ( _nativeLittleEndian != _littleEndian ) {\n\n\t\t\t\t// we need to flip here since the format doesn't match the native endianness\n\t\t\t\t_bytes = flipEndianness( _bytes, _chunkSize );\n\n\t\t\t}\n\n\t\t\t// return the byte array\n\t\t\treturn _bytes;\n\n\t\t}\n\n\t\t//Flips typed array endianness in-place. Based on https://github.com/kig/DataStream.js/blob/master/DataStream.js.\n\n\t\tfunction flipEndianness( array, chunkSize ) {\n\n\t\t\tconst u8 = new Uint8Array( array.buffer, array.byteOffset, array.byteLength );\n\t\t\tfor ( let i = 0; i < array.byteLength; i += chunkSize ) {\n\n\t\t\t\tfor ( let j = i + chunkSize - 1, k = i; j > k; j --, k ++ ) {\n\n\t\t\t\t\tconst tmp = u8[ k ];\n\t\t\t\t\tu8[ k ] = u8[ j ];\n\t\t\t\t\tu8[ j ] = tmp;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\t//parse the header\n\t\tfunction parseHeader( header ) {\n\n\t\t\tlet data, field, fn, i, l, m, _i, _len;\n\t\t\tconst lines = header.split( /\\r?\\n/ );\n\t\t\tfor ( _i = 0, _len = lines.length; _i < _len; _i ++ ) {\n\n\t\t\t\tl = lines[ _i ];\n\t\t\t\tif ( l.match( /NRRD\\d+/ ) ) {\n\n\t\t\t\t\theaderObject.isNrrd = true;\n\n\t\t\t\t} else if ( ! l.match( /^#/ ) && ( m = l.match( /(.*):(.*)/ ) ) ) {\n\n\t\t\t\t\tfield = m[ 1 ].trim();\n\t\t\t\t\tdata = m[ 2 ].trim();\n\t\t\t\t\tfn = _fieldFunctions[ field ];\n\t\t\t\t\tif ( fn ) {\n\n\t\t\t\t\t\tfn.call( headerObject, data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\theaderObject[ field ] = data;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! headerObject.isNrrd ) {\n\n\t\t\t\tthrow new Error( 'Not an NRRD file' );\n\n\t\t\t}\n\n\t\t\tif ( headerObject.encoding === 'bz2' || headerObject.encoding === 'bzip2' ) {\n\n\t\t\t\tthrow new Error( 'Bzip is not supported' );\n\n\t\t\t}\n\n\t\t\tif ( ! headerObject.vectors ) {\n\n\t\t\t\t//if no space direction is set, let's use the identity\n\t\t\t\theaderObject.vectors = [ ];\n\t\t\t\theaderObject.vectors.push( [ 1, 0, 0 ] );\n\t\t\t\theaderObject.vectors.push( [ 0, 1, 0 ] );\n\t\t\t\theaderObject.vectors.push( [ 0, 0, 1 ] );\n\n\t\t\t\t//apply spacing if defined\n\t\t\t\tif ( headerObject.spacings ) {\n\n\t\t\t\t\tfor ( i = 0; i <= 2; i ++ ) {\n\n\t\t\t\t\t\tif ( ! isNaN( headerObject.spacings[ i ] ) ) {\n\n\t\t\t\t\t\t\tfor ( let j = 0; j <= 2; j ++ ) {\n\n\t\t\t\t\t\t\t\theaderObject.vectors[ i ][ j ] *= headerObject.spacings[ i ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//parse the data when registred as one of this type : 'text', 'ascii', 'txt'\n\t\tfunction parseDataAsText( data, start, end ) {\n\n\t\t\tlet number = '';\n\t\t\tstart = start || 0;\n\t\t\tend = end || data.length;\n\t\t\tlet value;\n\t\t\t//length of the result is the product of the sizes\n\t\t\tconst lengthOfTheResult = headerObject.sizes.reduce( function ( previous, current ) {\n\n\t\t\t\treturn previous * current;\n\n\t\t\t}, 1 );\n\n\t\t\tlet base = 10;\n\t\t\tif ( headerObject.encoding === 'hex' ) {\n\n\t\t\t\tbase = 16;\n\n\t\t\t}\n\n\t\t\tconst result = new headerObject.__array( lengthOfTheResult );\n\t\t\tlet resultIndex = 0;\n\t\t\tlet parsingFunction = parseInt;\n\t\t\tif ( headerObject.__array === Float32Array || headerObject.__array === Float64Array ) {\n\n\t\t\t\tparsingFunction = parseFloat;\n\n\t\t\t}\n\n\t\t\tfor ( let i = start; i < end; i ++ ) {\n\n\t\t\t\tvalue = data[ i ];\n\t\t\t\t//if value is not a space\n\t\t\t\tif ( ( value < 9 || value > 13 ) && value !== 32 ) {\n\n\t\t\t\t\tnumber += String.fromCharCode( value );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( number !== '' ) {\n\n\t\t\t\t\t\tresult[ resultIndex ] = parsingFunction( number, base );\n\t\t\t\t\t\tresultIndex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnumber = '';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( number !== '' ) {\n\n\t\t\t\tresult[ resultIndex ] = parsingFunction( number, base );\n\t\t\t\tresultIndex ++;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tconst _bytes = scan( 'uchar', data.byteLength );\n\t\tconst _length = _bytes.length;\n\t\tlet _header = null;\n\t\tlet _data_start = 0;\n\t\tlet i;\n\t\tfor ( i = 1; i < _length; i ++ ) {\n\n\t\t\tif ( _bytes[ i - 1 ] == 10 && _bytes[ i ] == 10 ) {\n\n\t\t\t\t// we found two line breaks in a row\n\t\t\t\t// now we know what the header is\n\t\t\t\t_header = this.parseChars( _bytes, 0, i - 2 );\n\t\t\t\t// this is were the data starts\n\t\t\t\t_data_start = i + 1;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse the header\n\t\tparseHeader( _header );\n\n\t\t_data = _bytes.subarray( _data_start ); // the data without header\n\t\tif ( headerObject.encoding.substring( 0, 2 ) === 'gz' ) {\n\n\t\t\t// we need to decompress the datastream\n\t\t\t// here we start the unzipping and get a typed Uint8Array back\n\t\t\t_data = fflate.gunzipSync( new Uint8Array( _data ) );\n\n\t\t} else if ( headerObject.encoding === 'ascii' || headerObject.encoding === 'text' || headerObject.encoding === 'txt' || headerObject.encoding === 'hex' ) {\n\n\t\t\t_data = parseDataAsText( _data );\n\n\t\t} else if ( headerObject.encoding === 'raw' ) {\n\n\t\t\t//we need to copy the array to create a new array buffer, else we retrieve the original arraybuffer with the header\n\t\t\tconst _copy = new Uint8Array( _data.length );\n\n\t\t\tfor ( let i = 0; i < _data.length; i ++ ) {\n\n\t\t\t\t_copy[ i ] = _data[ i ];\n\n\t\t\t}\n\n\t\t\t_data = _copy;\n\n\t\t}\n\n\t\t// .. let's use the underlying array buffer\n\t\t_data = _data.buffer;\n\n\t\tconst volume = new Volume();\n\t\tvolume.header = headerObject;\n\t\tvolume.segmentation = this.segmentation;\n\t\t//\n\t\t// parse the (unzipped) data to a datastream of the correct type\n\t\t//\n\t\tvolume.data = new headerObject.__array( _data );\n\t\t// get the min and max intensities\n\t\tconst min_max = volume.computeMinMax();\n\t\tconst min = min_max[ 0 ];\n\t\tconst max = min_max[ 1 ];\n\t\t// attach the scalar range to the volume\n\t\tvolume.windowLow = min;\n\t\tvolume.windowHigh = max;\n\n\t\t// get the image dimensions\n\t\tvolume.dimensions = [ headerObject.sizes[ 0 ], headerObject.sizes[ 1 ], headerObject.sizes[ 2 ] ];\n\t\tvolume.xLength = volume.dimensions[ 0 ];\n\t\tvolume.yLength = volume.dimensions[ 1 ];\n\t\tvolume.zLength = volume.dimensions[ 2 ];\n\n\t\t// Identify axis order in the space-directions matrix from the header if possible.\n\t\tif ( headerObject.vectors ) {\n\n\t\t\tconst xIndex = headerObject.vectors.findIndex( vector => vector[ 0 ] !== 0 );\n\t\t\tconst yIndex = headerObject.vectors.findIndex( vector => vector[ 1 ] !== 0 );\n\t\t\tconst zIndex = headerObject.vectors.findIndex( vector => vector[ 2 ] !== 0 );\n\n\t\t\tconst axisOrder = [];\n\n\t\t\tif ( xIndex !== yIndex && xIndex !== zIndex && yIndex !== zIndex ) {\n\n\t\t\t\taxisOrder[ xIndex ] = 'x';\n\t\t\t\taxisOrder[ yIndex ] = 'y';\n\t\t\t\taxisOrder[ zIndex ] = 'z';\n\n\t\t\t} else {\n\n\t\t\t\taxisOrder[ 0 ] = 'x';\n\t\t\t\taxisOrder[ 1 ] = 'y';\n\t\t\t\taxisOrder[ 2 ] = 'z';\n\n\t\t\t}\n\n\t\t\tvolume.axisOrder = axisOrder;\n\n\t\t} else {\n\n\t\t\tvolume.axisOrder = [ 'x', 'y', 'z' ];\n\n\t\t}\n\n\t\t// spacing\n\t\tconst spacingX = new Vector3().fromArray( headerObject.vectors[ 0 ] ).length();\n\t\tconst spacingY = new Vector3().fromArray( headerObject.vectors[ 1 ] ).length();\n\t\tconst spacingZ = new Vector3().fromArray( headerObject.vectors[ 2 ] ).length();\n\t\tvolume.spacing = [ spacingX, spacingY, spacingZ ];\n\n\n\t\t// Create IJKtoRAS matrix\n\t\tvolume.matrix = new Matrix4();\n\n\t\tconst transitionMatrix = new Matrix4();\n\n\t\tif ( headerObject.space === 'left-posterior-superior' ) {\n\n\t\t\ttransitionMatrix.set(\n\t\t\t\t- 1, 0, 0, 0,\n\t\t\t\t0, - 1, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t} else if ( headerObject.space === 'left-anterior-superior' ) {\n\n\t\t\ttransitionMatrix.set(\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, 1, 0, 0,\n\t\t\t\t0, 0, - 1, 0,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t}\n\n\n\t\tif ( ! headerObject.vectors ) {\n\n\t\t\tvolume.matrix.set(\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, 1, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1 );\n\n\t\t} else {\n\n\t\t\tconst v = headerObject.vectors;\n\n\t\t\tconst ijk_to_transition = new Matrix4().set(\n\t\t\t\tv[ 0 ][ 0 ], v[ 1 ][ 0 ], v[ 2 ][ 0 ], 0,\n\t\t\t\tv[ 0 ][ 1 ], v[ 1 ][ 1 ], v[ 2 ][ 1 ], 0,\n\t\t\t\tv[ 0 ][ 2 ], v[ 1 ][ 2 ], v[ 2 ][ 2 ], 0,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t\tconst transition_to_ras = new Matrix4().multiplyMatrices( ijk_to_transition, transitionMatrix );\n\n\t\t\tvolume.matrix = transition_to_ras;\n\n\t\t}\n\n\t\tvolume.inverseMatrix = new Matrix4();\n\t\tvolume.inverseMatrix.copy( volume.matrix ).invert();\n\n\t\tvolume.RASDimensions = [\n\t\t\tMath.floor( volume.xLength * spacingX ),\n\t\t\tMath.floor( volume.yLength * spacingY ),\n\t\t\tMath.floor( volume.zLength * spacingZ )\n\t\t];\n\n\t\t// .. and set the default threshold\n\t\t// only if the threshold was not already set\n\t\tif ( volume.lowerThreshold === - Infinity ) {\n\n\t\t\tvolume.lowerThreshold = min;\n\n\t\t}\n\n\t\tif ( volume.upperThreshold === Infinity ) {\n\n\t\t\tvolume.upperThreshold = max;\n\n\t\t}\n\n\t\treturn volume;\n\n\t}\n\n\tparseChars( array, start, end ) {\n\n\t\t// without borders, use the whole array\n\t\tif ( start === undefined ) {\n\n\t\t\tstart = 0;\n\n\t\t}\n\n\t\tif ( end === undefined ) {\n\n\t\t\tend = array.length;\n\n\t\t}\n\n\t\tlet output = '';\n\t\t// create and append the chars\n\t\tlet i = 0;\n\t\tfor ( i = start; i < end; ++ i ) {\n\n\t\t\toutput += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nconst _fieldFunctions = {\n\n\ttype: function ( data ) {\n\n\t\tswitch ( data ) {\n\n\t\t\tcase 'uchar':\n\t\t\tcase 'unsigned char':\n\t\t\tcase 'uint8':\n\t\t\tcase 'uint8_t':\n\t\t\t\tthis.__array = Uint8Array;\n\t\t\t\tbreak;\n\t\t\tcase 'signed char':\n\t\t\tcase 'int8':\n\t\t\tcase 'int8_t':\n\t\t\t\tthis.__array = Int8Array;\n\t\t\t\tbreak;\n\t\t\tcase 'short':\n\t\t\tcase 'short int':\n\t\t\tcase 'signed short':\n\t\t\tcase 'signed short int':\n\t\t\tcase 'int16':\n\t\t\tcase 'int16_t':\n\t\t\t\tthis.__array = Int16Array;\n\t\t\t\tbreak;\n\t\t\tcase 'ushort':\n\t\t\tcase 'unsigned short':\n\t\t\tcase 'unsigned short int':\n\t\t\tcase 'uint16':\n\t\t\tcase 'uint16_t':\n\t\t\t\tthis.__array = Uint16Array;\n\t\t\t\tbreak;\n\t\t\tcase 'int':\n\t\t\tcase 'signed int':\n\t\t\tcase 'int32':\n\t\t\tcase 'int32_t':\n\t\t\t\tthis.__array = Int32Array;\n\t\t\t\tbreak;\n\t\t\tcase 'uint':\n\t\t\tcase 'unsigned int':\n\t\t\tcase 'uint32':\n\t\t\tcase 'uint32_t':\n\t\t\t\tthis.__array = Uint32Array;\n\t\t\t\tbreak;\n\t\t\tcase 'float':\n\t\t\t\tthis.__array = Float32Array;\n\t\t\t\tbreak;\n\t\t\tcase 'double':\n\t\t\t\tthis.__array = Float64Array;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'Unsupported NRRD data type: ' + data );\n\n\t\t}\n\n\t\treturn this.type = data;\n\n\t},\n\n\tendian: function ( data ) {\n\n\t\treturn this.endian = data;\n\n\t},\n\n\tencoding: function ( data ) {\n\n\t\treturn this.encoding = data;\n\n\t},\n\n\tdimension: function ( data ) {\n\n\t\treturn this.dim = parseInt( data, 10 );\n\n\t},\n\n\tsizes: function ( data ) {\n\n\t\tlet i;\n\t\treturn this.sizes = ( function () {\n\n\t\t\tconst _ref = data.split( /\\s+/ );\n\t\t\tconst _results = [];\n\n\t\t\tfor ( let _i = 0, _len = _ref.length; _i < _len; _i ++ ) {\n\n\t\t\t\ti = _ref[ _i ];\n\t\t\t\t_results.push( parseInt( i, 10 ) );\n\n\t\t\t}\n\n\t\t\treturn _results;\n\n\t\t} )();\n\n\t},\n\n\tspace: function ( data ) {\n\n\t\treturn this.space = data;\n\n\t},\n\n\t'space origin': function ( data ) {\n\n\t\treturn this.space_origin = data.split( '(' )[ 1 ].split( ')' )[ 0 ].split( ',' );\n\n\t},\n\n\t'space directions': function ( data ) {\n\n\t\tlet f, v;\n\t\tconst parts = data.match( /\\(.*?\\)/g );\n\t\treturn this.vectors = ( function () {\n\n\t\t\tconst _results = [];\n\n\t\t\tfor ( let _i = 0, _len = parts.length; _i < _len; _i ++ ) {\n\n\t\t\t\tv = parts[ _i ];\n\t\t\t\t_results.push( ( function () {\n\n\t\t\t\t\tconst _ref = v.slice( 1, - 1 ).split( /,/ );\n\t\t\t\t\tconst _results2 = [];\n\n\t\t\t\t\tfor ( let _j = 0, _len2 = _ref.length; _j < _len2; _j ++ ) {\n\n\t\t\t\t\t\tf = _ref[ _j ];\n\t\t\t\t\t\t_results2.push( parseFloat( f ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn _results2;\n\n\t\t\t\t} )() );\n\n\t\t\t}\n\n\t\t\treturn _results;\n\n\t\t} )();\n\n\t},\n\n\tspacings: function ( data ) {\n\n\t\tlet f;\n\t\tconst parts = data.split( /\\s+/ );\n\t\treturn this.spacings = ( function () {\n\n\t\t\tconst _results = [];\n\n\t\t\tfor ( let _i = 0, _len = parts.length; _i < _len; _i ++ ) {\n\n\t\t\t\tf = parts[ _i ];\n\t\t\t\t_results.push( parseFloat( f ) );\n\n\t\t\t}\n\n\t\t\treturn _results;\n\n\t\t} )();\n\n\t}\n\n};\n\nexport { NRRDLoader };\n", "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3,\n\tColor\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\nconst _face_vertex_data_separator_pattern = /\\s+/;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nconst _color = new Color();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n//\n\nclass OBJLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet result = [];\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ].trimStart();\n\n\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\tconst lineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue; // skip comments\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( _face_vertex_data_separator_pattern );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\n\t\t\t\t\t\t\t).convertSRGBToLinear();\n\n\t\t\t\t\t\t\tstate.colors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( _face_vertex_data_separator_pattern );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].slice( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].slice( 1 ).trim() ).slice( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tInt32BufferAttribute,\n\tLoader,\n\tPoints,\n\tPointsMaterial\n} from 'three';\n\nclass PCDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.littleEndian = true;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\t// from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n\t\tfunction decompressLZF( inData, outLength ) {\n\n\t\t\tconst inLength = inData.length;\n\t\t\tconst outData = new Uint8Array( outLength );\n\t\t\tlet inPtr = 0;\n\t\t\tlet outPtr = 0;\n\t\t\tlet ctrl;\n\t\t\tlet len;\n\t\t\tlet ref;\n\t\t\tdo {\n\n\t\t\t\tctrl = inData[ inPtr ++ ];\n\t\t\t\tif ( ctrl < ( 1 << 5 ) ) {\n\n\t\t\t\t\tctrl ++;\n\t\t\t\t\tif ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = inData[ inPtr ++ ];\n\n\t\t\t\t\t} while ( -- ctrl );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlen = ctrl >> 5;\n\t\t\t\t\tref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;\n\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( len === 7 ) {\n\n\t\t\t\t\t\tlen += inData[ inPtr ++ ];\n\t\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tref -= inData[ inPtr ++ ];\n\t\t\t\t\tif ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( ref < 0 ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = outData[ ref ++ ];\n\n\t\t\t\t\t} while ( -- len + 2 );\n\n\t\t\t\t}\n\n\t\t\t} while ( inPtr < inLength );\n\n\t\t\treturn outData;\n\n\t\t}\n\n\t\tfunction parseHeader( data ) {\n\n\t\t\tconst PCDheader = {};\n\t\t\tconst result1 = data.search( /[\\r\\n]DATA\\s(\\S*)\\s/i );\n\t\t\tconst result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec( data.slice( result1 - 1 ) );\n\n\t\t\tPCDheader.data = result2[ 1 ];\n\t\t\tPCDheader.headerLen = result2[ 0 ].length + result1;\n\t\t\tPCDheader.str = data.slice( 0, PCDheader.headerLen );\n\n\t\t\t// remove comments\n\n\t\t\tPCDheader.str = PCDheader.str.replace( /#.*/gi, '' );\n\n\t\t\t// parse\n\n\t\t\tPCDheader.version = /VERSION (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.fields = /FIELDS (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.size = /SIZE (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.type = /TYPE (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.count = /COUNT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.width = /WIDTH (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.height = /HEIGHT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.viewpoint = /VIEWPOINT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.points = /POINTS (.*)/i.exec( PCDheader.str );\n\n\t\t\t// evaluate\n\n\t\t\tif ( PCDheader.version !== null )\n\t\t\t\tPCDheader.version = parseFloat( PCDheader.version[ 1 ] );\n\n\t\t\tPCDheader.fields = ( PCDheader.fields !== null ) ? PCDheader.fields[ 1 ].split( ' ' ) : [];\n\n\t\t\tif ( PCDheader.type !== null )\n\t\t\t\tPCDheader.type = PCDheader.type[ 1 ].split( ' ' );\n\n\t\t\tif ( PCDheader.width !== null )\n\t\t\t\tPCDheader.width = parseInt( PCDheader.width[ 1 ] );\n\n\t\t\tif ( PCDheader.height !== null )\n\t\t\t\tPCDheader.height = parseInt( PCDheader.height[ 1 ] );\n\n\t\t\tif ( PCDheader.viewpoint !== null )\n\t\t\t\tPCDheader.viewpoint = PCDheader.viewpoint[ 1 ];\n\n\t\t\tif ( PCDheader.points !== null )\n\t\t\t\tPCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );\n\n\t\t\tif ( PCDheader.points === null )\n\t\t\t\tPCDheader.points = PCDheader.width * PCDheader.height;\n\n\t\t\tif ( PCDheader.size !== null ) {\n\n\t\t\t\tPCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( PCDheader.count !== null ) {\n\n\t\t\t\tPCDheader.count = PCDheader.count[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tPCDheader.count = [];\n\n\t\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tPCDheader.count.push( 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tPCDheader.offset = {};\n\n\t\t\tlet sizeSum = 0;\n\n\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = i;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = sizeSum;\n\t\t\t\t\tsizeSum += PCDheader.size[ i ] * PCDheader.count[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// for binary only\n\n\t\t\tPCDheader.rowSize = sizeSum;\n\n\t\t\treturn PCDheader;\n\n\t\t}\n\n\t\tconst textData = new TextDecoder().decode( data );\n\n\t\t// parse header (always ascii format)\n\n\t\tconst PCDheader = parseHeader( textData );\n\n\t\t// parse data\n\n\t\tconst position = [];\n\t\tconst normal = [];\n\t\tconst color = [];\n\t\tconst intensity = [];\n\t\tconst label = [];\n\n\t\tconst c = new Color();\n\n\t\t// ascii\n\n\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\tconst offset = PCDheader.offset;\n\t\t\tconst pcdData = textData.slice( PCDheader.headerLen );\n\t\t\tconst lines = pcdData.split( '\\n' );\n\n\t\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\t\tif ( lines[ i ] === '' ) continue;\n\n\t\t\t\tconst line = lines[ i ].split( ' ' );\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( parseFloat( line[ offset.x ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.y ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgb_field_index = PCDheader.fields.findIndex( ( field ) => field === 'rgb' );\n\t\t\t\t\tconst rgb_type = PCDheader.type[ rgb_field_index ];\n\n\t\t\t\t\tconst float = parseFloat( line[ offset.rgb ] );\n\t\t\t\t\tlet rgb = float;\n\n\t\t\t\t\tif ( rgb_type === 'F' ) {\n\n\t\t\t\t\t\t// treat float values as int\n\t\t\t\t\t\t// https://github.com/daavoo/pyntcloud/pull/204/commits/7b4205e64d5ed09abe708b2e91b615690c24d518\n\t\t\t\t\t\tconst farr = new Float32Array( 1 );\n\t\t\t\t\t\tfarr[ 0 ] = float;\n\t\t\t\t\t\trgb = new Int32Array( farr.buffer )[ 0 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst r = ( ( rgb >> 16 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst g = ( ( rgb >> 8 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst b = ( ( rgb >> 0 ) & 0x0000ff ) / 255;\n\n\t\t\t\t\tc.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_x ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_y ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tintensity.push( parseFloat( line[ offset.intensity ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( parseInt( line[ offset.label ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary-compressed\n\n\t\t// normally data in PCD files are organized as array of structures: XYZRGBXYZRGB\n\t\t// binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB\n\t\t// that requires a totally different parsing approach compared to non-compressed data\n\n\t\tif ( PCDheader.data === 'binary_compressed' ) {\n\n\t\t\tconst sizes = new Uint32Array( data.slice( PCDheader.headerLen, PCDheader.headerLen + 8 ) );\n\t\t\tconst compressedSize = sizes[ 0 ];\n\t\t\tconst decompressedSize = sizes[ 1 ];\n\t\t\tconst decompressed = decompressLZF( new Uint8Array( data, PCDheader.headerLen + 8, compressedSize ), decompressedSize );\n\t\t\tconst dataview = new DataView( decompressed.buffer );\n\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0; i < PCDheader.points; i ++ ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'z' );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgbIndex = PCDheader.fields.indexOf( 'rgb' );\n\n\t\t\t\t\tconst r = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 0 ) / 255.0;\n\n\t\t\t\t\tc.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'normal_x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'normal_y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'normal_z' );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tconst intensityIndex = PCDheader.fields.indexOf( 'intensity' );\n\t\t\t\t\tintensity.push( dataview.getFloat32( ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tconst labelIndex = PCDheader.fields.indexOf( 'label' );\n\t\t\t\t\tlabel.push( dataview.getInt32( ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary\n\n\t\tif ( PCDheader.data === 'binary' ) {\n\n\t\t\tconst dataview = new DataView( data, PCDheader.headerLen );\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0, row = 0; i < PCDheader.points; i ++, row += PCDheader.rowSize ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.x, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.y, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.z, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst r = dataview.getUint8( row + offset.rgb + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( row + offset.rgb + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( row + offset.rgb + 0 ) / 255.0;\n\n\t\t\t\t\tc.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_x, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_y, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_z, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tintensity.push( dataview.getFloat32( row + offset.intensity, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( dataview.getInt32( row + offset.label, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( position.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( normal.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( color.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\t\tif ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new Float32BufferAttribute( intensity, 1 ) );\n\t\tif ( label.length > 0 ) geometry.setAttribute( 'label', new Int32BufferAttribute( label, 1 ) );\n\n\t\tgeometry.computeBoundingSphere();\n\n\t\t// build material\n\n\t\tconst material = new PointsMaterial( { size: 0.005 } );\n\n\t\tif ( color.length > 0 ) {\n\n\t\t\tmaterial.vertexColors = true;\n\n\t\t}\n\n\t\t// build point cloud\n\n\t\treturn new Points( geometry, material );\n\n\t}\n\n}\n\nexport { PCDLoader };\n", "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tColor\n} from 'three';\n\nclass PDBLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t// Based on CanvasMol PDB parser\n\n\tparse( text ) {\n\n\t\tfunction trim( text ) {\n\n\t\t\treturn text.replace( /^\\s\\s*/, '' ).replace( /\\s\\s*$/, '' );\n\n\t\t}\n\n\t\tfunction capitalize( text ) {\n\n\t\t\treturn text.charAt( 0 ).toUpperCase() + text.slice( 1 ).toLowerCase();\n\n\t\t}\n\n\t\tfunction hash( s, e ) {\n\n\t\t\treturn 's' + Math.min( s, e ) + 'e' + Math.max( s, e );\n\n\t\t}\n\n\t\tfunction parseBond( start, length, satom, i ) {\n\n\t\t\tconst eatom = parseInt( lines[ i ].slice( start, start + length ) );\n\n\t\t\tif ( eatom ) {\n\n\t\t\t\tconst h = hash( satom, eatom );\n\n\t\t\t\tif ( _bhash[ h ] === undefined ) {\n\n\t\t\t\t\t_bonds.push( [ satom - 1, eatom - 1, 1 ] );\n\t\t\t\t\t_bhash[ h ] = _bonds.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// doesn't really work as almost all PDBs\n\t\t\t\t\t// have just normal bonds appearing multiple\n\t\t\t\t\t// times instead of being double/triple bonds\n\t\t\t\t\t// bonds[bhash[h]][2] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildGeometry() {\n\n\t\t\tconst build = {\n\t\t\t\tgeometryAtoms: new BufferGeometry(),\n\t\t\t\tgeometryBonds: new BufferGeometry(),\n\t\t\t\tjson: {\n\t\t\t\t\tatoms: atoms\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst geometryAtoms = build.geometryAtoms;\n\t\t\tconst geometryBonds = build.geometryBonds;\n\n\t\t\tconst verticesAtoms = [];\n\t\t\tconst colorsAtoms = [];\n\t\t\tconst verticesBonds = [];\n\n\t\t\t// atoms\n\n\t\t\tconst c = new Color();\n\n\t\t\tfor ( let i = 0, l = atoms.length; i < l; i ++ ) {\n\n\t\t\t\tconst atom = atoms[ i ];\n\n\t\t\t\tconst x = atom[ 0 ];\n\t\t\t\tconst y = atom[ 1 ];\n\t\t\t\tconst z = atom[ 2 ];\n\n\t\t\t\tverticesAtoms.push( x, y, z );\n\n\t\t\t\tconst r = atom[ 3 ][ 0 ] / 255;\n\t\t\t\tconst g = atom[ 3 ][ 1 ] / 255;\n\t\t\t\tconst b = atom[ 3 ][ 2 ] / 255;\n\n\t\t\t\tc.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\tcolorsAtoms.push( c.r, c.g, c.b );\n\n\t\t\t}\n\n\t\t\t// bonds\n\n\t\t\tfor ( let i = 0, l = _bonds.length; i < l; i ++ ) {\n\n\t\t\t\tconst bond = _bonds[ i ];\n\n\t\t\t\tconst start = bond[ 0 ];\n\t\t\t\tconst end = bond[ 1 ];\n\n\t\t\t\tconst startAtom = _atomMap[ start ];\n\t\t\t\tconst endAtom = _atomMap[ end ];\n\n\t\t\t\tlet x = startAtom[ 0 ];\n\t\t\t\tlet y = startAtom[ 1 ];\n\t\t\t\tlet z = startAtom[ 2 ];\n\n\t\t\t\tverticesBonds.push( x, y, z );\n\n\t\t\t\tx = endAtom[ 0 ];\n\t\t\t\ty = endAtom[ 1 ];\n\t\t\t\tz = endAtom[ 2 ];\n\n\t\t\t\tverticesBonds.push( x, y, z );\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tgeometryAtoms.setAttribute( 'position', new Float32BufferAttribute( verticesAtoms, 3 ) );\n\t\t\tgeometryAtoms.setAttribute( 'color', new Float32BufferAttribute( colorsAtoms, 3 ) );\n\n\t\t\tgeometryBonds.setAttribute( 'position', new Float32BufferAttribute( verticesBonds, 3 ) );\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tconst CPK = { h: [ 255, 255, 255 ], he: [ 217, 255, 255 ], li: [ 204, 128, 255 ], be: [ 194, 255, 0 ], b: [ 255, 181, 181 ], c: [ 144, 144, 144 ], n: [ 48, 80, 248 ], o: [ 255, 13, 13 ], f: [ 144, 224, 80 ], ne: [ 179, 227, 245 ], na: [ 171, 92, 242 ], mg: [ 138, 255, 0 ], al: [ 191, 166, 166 ], si: [ 240, 200, 160 ], p: [ 255, 128, 0 ], s: [ 255, 255, 48 ], cl: [ 31, 240, 31 ], ar: [ 128, 209, 227 ], k: [ 143, 64, 212 ], ca: [ 61, 255, 0 ], sc: [ 230, 230, 230 ], ti: [ 191, 194, 199 ], v: [ 166, 166, 171 ], cr: [ 138, 153, 199 ], mn: [ 156, 122, 199 ], fe: [ 224, 102, 51 ], co: [ 240, 144, 160 ], ni: [ 80, 208, 80 ], cu: [ 200, 128, 51 ], zn: [ 125, 128, 176 ], ga: [ 194, 143, 143 ], ge: [ 102, 143, 143 ], as: [ 189, 128, 227 ], se: [ 255, 161, 0 ], br: [ 166, 41, 41 ], kr: [ 92, 184, 209 ], rb: [ 112, 46, 176 ], sr: [ 0, 255, 0 ], y: [ 148, 255, 255 ], zr: [ 148, 224, 224 ], nb: [ 115, 194, 201 ], mo: [ 84, 181, 181 ], tc: [ 59, 158, 158 ], ru: [ 36, 143, 143 ], rh: [ 10, 125, 140 ], pd: [ 0, 105, 133 ], ag: [ 192, 192, 192 ], cd: [ 255, 217, 143 ], in: [ 166, 117, 115 ], sn: [ 102, 128, 128 ], sb: [ 158, 99, 181 ], te: [ 212, 122, 0 ], i: [ 148, 0, 148 ], xe: [ 66, 158, 176 ], cs: [ 87, 23, 143 ], ba: [ 0, 201, 0 ], la: [ 112, 212, 255 ], ce: [ 255, 255, 199 ], pr: [ 217, 255, 199 ], nd: [ 199, 255, 199 ], pm: [ 163, 255, 199 ], sm: [ 143, 255, 199 ], eu: [ 97, 255, 199 ], gd: [ 69, 255, 199 ], tb: [ 48, 255, 199 ], dy: [ 31, 255, 199 ], ho: [ 0, 255, 156 ], er: [ 0, 230, 117 ], tm: [ 0, 212, 82 ], yb: [ 0, 191, 56 ], lu: [ 0, 171, 36 ], hf: [ 77, 194, 255 ], ta: [ 77, 166, 255 ], w: [ 33, 148, 214 ], re: [ 38, 125, 171 ], os: [ 38, 102, 150 ], ir: [ 23, 84, 135 ], pt: [ 208, 208, 224 ], au: [ 255, 209, 35 ], hg: [ 184, 184, 208 ], tl: [ 166, 84, 77 ], pb: [ 87, 89, 97 ], bi: [ 158, 79, 181 ], po: [ 171, 92, 0 ], at: [ 117, 79, 69 ], rn: [ 66, 130, 150 ], fr: [ 66, 0, 102 ], ra: [ 0, 125, 0 ], ac: [ 112, 171, 250 ], th: [ 0, 186, 255 ], pa: [ 0, 161, 255 ], u: [ 0, 143, 255 ], np: [ 0, 128, 255 ], pu: [ 0, 107, 255 ], am: [ 84, 92, 242 ], cm: [ 120, 92, 227 ], bk: [ 138, 79, 227 ], cf: [ 161, 54, 212 ], es: [ 179, 31, 212 ], fm: [ 179, 31, 186 ], md: [ 179, 13, 166 ], no: [ 189, 13, 135 ], lr: [ 199, 0, 102 ], rf: [ 204, 0, 89 ], db: [ 209, 0, 79 ], sg: [ 217, 0, 69 ], bh: [ 224, 0, 56 ], hs: [ 230, 0, 46 ], mt: [ 235, 0, 38 ], ds: [ 235, 0, 38 ], rg: [ 235, 0, 38 ], cn: [ 235, 0, 38 ], uut: [ 235, 0, 38 ], uuq: [ 235, 0, 38 ], uup: [ 235, 0, 38 ], uuh: [ 235, 0, 38 ], uus: [ 235, 0, 38 ], uuo: [ 235, 0, 38 ] };\n\n\t\tconst atoms = [];\n\n\t\tconst _bonds = [];\n\t\tconst _bhash = {};\n\t\tconst _atomMap = {};\n\n\t\t// parse\n\n\t\tconst lines = text.split( '\\n' );\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tif ( lines[ i ].slice( 0, 4 ) === 'ATOM' || lines[ i ].slice( 0, 6 ) === 'HETATM' ) {\n\n\t\t\t\tconst x = parseFloat( lines[ i ].slice( 30, 37 ) );\n\t\t\t\tconst y = parseFloat( lines[ i ].slice( 38, 45 ) );\n\t\t\t\tconst z = parseFloat( lines[ i ].slice( 46, 53 ) );\n\t\t\t\tconst index = parseInt( lines[ i ].slice( 6, 11 ) ) - 1;\n\n\t\t\t\tlet e = trim( lines[ i ].slice( 76, 78 ) ).toLowerCase();\n\n\t\t\t\tif ( e === '' ) {\n\n\t\t\t\t\te = trim( lines[ i ].slice( 12, 14 ) ).toLowerCase();\n\n\t\t\t\t}\n\n\t\t\t\tconst atomData = [ x, y, z, CPK[ e ], capitalize( e ) ];\n\n\t\t\t\tatoms.push( atomData );\n\t\t\t\t_atomMap[ index ] = atomData;\n\n\t\t\t} else if ( lines[ i ].slice( 0, 6 ) === 'CONECT' ) {\n\n\t\t\t\tconst satom = parseInt( lines[ i ].slice( 6, 11 ) );\n\n\t\t\t\tparseBond( 11, 5, satom, i );\n\t\t\t\tparseBond( 16, 5, satom, i );\n\t\t\t\tparseBond( 21, 5, satom, i );\n\t\t\t\tparseBond( 26, 5, satom, i );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build and return geometry\n\n\t\treturn buildGeometry();\n\n\t}\n\n}\n\nexport { PDBLoader };\n", "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tColor\n} from 'three';\n\n/**\n * Description: A THREE loader for PLY ASCII files (known as the Polygon\n * File Format or the Stanford Triangle Format).\n *\n * Limitations: ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n *\tconst loader = new PLYLoader();\n *\tloader.load('./models/ply/ascii/dolphins.ply', function (geometry) {\n *\n *\t\tscene.add( new THREE.Mesh( geometry ) );\n *\n *\t} );\n *\n * If the PLY file uses non standard property names, they can be mapped while\n * loading. For example, the following maps the properties\n * “diffuse_(red|green|blue)” in the file to standard color names.\n *\n * loader.setPropertyNameMapping( {\n *\tdiffuse_red: 'red',\n *\tdiffuse_green: 'green',\n *\tdiffuse_blue: 'blue'\n * } );\n *\n * Custom properties outside of the defaults for position, uv, normal\n * and color attributes can be added using the setCustomPropertyNameMapping method.\n * For example, the following maps the element properties “custom_property_a”\n * and “custom_property_b” to an attribute “customAttribute” with an item size of 2.\n * Attribute item sizes are set from the number of element properties in the property array.\n *\n * loader.setCustomPropertyNameMapping( {\n *\tcustomAttribute: ['custom_property_a', 'custom_property_b'],\n * } );\n *\n */\n\nconst _color = new Color();\n\nclass PLYLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.propertyNameMapping = {};\n\t\tthis.customPropertyMapping = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetPropertyNameMapping( mapping ) {\n\n\t\tthis.propertyNameMapping = mapping;\n\n\t}\n\n\tsetCustomPropertyNameMapping( mapping ) {\n\n\t\tthis.customPropertyMapping = mapping;\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction parseHeader( data, headerLength = 0 ) {\n\n\t\t\tconst patternHeader = /^ply([\\s\\S]*)end_header(\\r\\n|\\r|\\n)/;\n\t\t\tlet headerText = '';\n\t\t\tconst result = patternHeader.exec( data );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\theaderText = result[ 1 ];\n\n\t\t\t}\n\n\t\t\tconst header = {\n\t\t\t\tcomments: [],\n\t\t\t\telements: [],\n\t\t\t\theaderLength: headerLength,\n\t\t\t\tobjInfo: ''\n\t\t\t};\n\n\t\t\tconst lines = headerText.split( /\\r\\n|\\r|\\n/ );\n\t\t\tlet currentElement;\n\n\t\t\tfunction make_ply_element_property( propertValues, propertyNameMapping ) {\n\n\t\t\t\tconst property = { type: propertValues[ 0 ] };\n\n\t\t\t\tif ( property.type === 'list' ) {\n\n\t\t\t\t\tproperty.name = propertValues[ 3 ];\n\t\t\t\t\tproperty.countType = propertValues[ 1 ];\n\t\t\t\t\tproperty.itemType = propertValues[ 2 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tproperty.name = propertValues[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( property.name in propertyNameMapping ) {\n\n\t\t\t\t\tproperty.name = propertyNameMapping[ property.name ];\n\n\t\t\t\t}\n\n\t\t\t\treturn property;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\t\tlet line = lines[ i ];\n\t\t\t\tline = line.trim();\n\n\t\t\t\tif ( line === '' ) continue;\n\n\t\t\t\tconst lineValues = line.split( /\\s+/ );\n\t\t\t\tconst lineType = lineValues.shift();\n\t\t\t\tline = lineValues.join( ' ' );\n\n\t\t\t\tswitch ( lineType ) {\n\n\t\t\t\t\tcase 'format':\n\n\t\t\t\t\t\theader.format = lineValues[ 0 ];\n\t\t\t\t\t\theader.version = lineValues[ 1 ];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'comment':\n\n\t\t\t\t\t\theader.comments.push( line );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'element':\n\n\t\t\t\t\t\tif ( currentElement !== undefined ) {\n\n\t\t\t\t\t\t\theader.elements.push( currentElement );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentElement = {};\n\t\t\t\t\t\tcurrentElement.name = lineValues[ 0 ];\n\t\t\t\t\t\tcurrentElement.count = parseInt( lineValues[ 1 ] );\n\t\t\t\t\t\tcurrentElement.properties = [];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'property':\n\n\t\t\t\t\t\tcurrentElement.properties.push( make_ply_element_property( lineValues, scope.propertyNameMapping ) );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'obj_info':\n\n\t\t\t\t\t\theader.objInfo = line;\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.log( 'unhandled', lineType, lineValues );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( currentElement !== undefined ) {\n\n\t\t\t\theader.elements.push( currentElement );\n\n\t\t\t}\n\n\t\t\treturn header;\n\n\t\t}\n\n\t\tfunction parseASCIINumber( n, type ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'char': case 'uchar': case 'short': case 'ushort': case 'int': case 'uint':\n\t\t\t\tcase 'int8': case 'uint8': case 'int16': case 'uint16': case 'int32': case 'uint32':\n\n\t\t\t\t\treturn parseInt( n );\n\n\t\t\t\tcase 'float': case 'double': case 'float32': case 'float64':\n\n\t\t\t\t\treturn parseFloat( n );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseASCIIElement( properties, tokens ) {\n\n\t\t\tconst element = {};\n\n\t\t\tfor ( let i = 0; i < properties.length; i ++ ) {\n\n\t\t\t\tif ( tokens.empty() ) return null;\n\n\t\t\t\tif ( properties[ i ].type === 'list' ) {\n\n\t\t\t\t\tconst list = [];\n\t\t\t\t\tconst n = parseASCIINumber( tokens.next(), properties[ i ].countType );\n\n\t\t\t\t\tfor ( let j = 0; j < n; j ++ ) {\n\n\t\t\t\t\t\tif ( tokens.empty() ) return null;\n\n\t\t\t\t\t\tlist.push( parseASCIINumber( tokens.next(), properties[ i ].itemType ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\telement[ properties[ i ].name ] = list;\n\n\t\t\t\t} else {\n\n\t\t\t\t\telement[ properties[ i ].name ] = parseASCIINumber( tokens.next(), properties[ i ].type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn element;\n\n\t\t}\n\n\t\tfunction createBuffer() {\n\n\t\t\tconst buffer = {\n\t\t\t indices: [],\n\t\t\t vertices: [],\n\t\t\t normals: [],\n\t\t\t uvs: [],\n\t\t\t faceVertexUvs: [],\n\t\t\t colors: [],\n\t\t\t faceVertexColors: []\n\t\t\t};\n\n\t\t\tfor ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {\n\n\t\t\t buffer[ customProperty ] = [];\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction mapElementAttributes( properties ) {\n\n\t\t\tconst elementNames = properties.map( property => {\n\n\t\t\t\treturn property.name;\n\n\t\t\t} );\n\n\t\t\tfunction findAttrName( names ) {\n\n\t\t\t\tfor ( let i = 0, l = names.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst name = names[ i ];\n\n\t\t\t\t\tif ( elementNames.includes( name ) ) return name;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tattrX: findAttrName( [ 'x', 'px', 'posx' ] ) || 'x',\n\t\t\t\tattrY: findAttrName( [ 'y', 'py', 'posy' ] ) || 'y',\n\t\t\t\tattrZ: findAttrName( [ 'z', 'pz', 'posz' ] ) || 'z',\n\t\t\t\tattrNX: findAttrName( [ 'nx', 'normalx' ] ),\n\t\t\t\tattrNY: findAttrName( [ 'ny', 'normaly' ] ),\n\t\t\t\tattrNZ: findAttrName( [ 'nz', 'normalz' ] ),\n\t\t\t\tattrS: findAttrName( [ 's', 'u', 'texture_u', 'tx' ] ),\n\t\t\t\tattrT: findAttrName( [ 't', 'v', 'texture_v', 'ty' ] ),\n\t\t\t\tattrR: findAttrName( [ 'red', 'diffuse_red', 'r', 'diffuse_r' ] ),\n\t\t\t\tattrG: findAttrName( [ 'green', 'diffuse_green', 'g', 'diffuse_g' ] ),\n\t\t\t\tattrB: findAttrName( [ 'blue', 'diffuse_blue', 'b', 'diffuse_b' ] ),\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseASCII( data, header ) {\n\n\t\t\t// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n\n\t\t\tconst buffer = createBuffer();\n\n\t\t\tconst patternBody = /end_header\\s+(\\S[\\s\\S]*\\S|\\S)\\s*$/;\n\t\t\tlet body, matches;\n\n\t\t\tif ( ( matches = patternBody.exec( data ) ) !== null ) {\n\n\t\t\t\tbody = matches[ 1 ].split( /\\s+/ );\n\n\t\t\t} else {\n\n\t\t\t\tbody = [ ];\n\n\t\t\t}\n\n\t\t\tconst tokens = new ArrayStream( body );\n\n\t\t\tloop: for ( let i = 0; i < header.elements.length; i ++ ) {\n\n\t\t\t\tconst elementDesc = header.elements[ i ];\n\t\t\t\tconst attributeMap = mapElementAttributes( elementDesc.properties );\n\n\t\t\t\tfor ( let j = 0; j < elementDesc.count; j ++ ) {\n\n\t\t\t\t\tconst element = parseASCIIElement( elementDesc.properties, tokens );\n\n\t\t\t\t\tif ( ! element ) break loop;\n\n\t\t\t\t\thandleElement( buffer, elementDesc.name, element, attributeMap );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn postProcess( buffer );\n\n\t\t}\n\n\t\tfunction postProcess( buffer ) {\n\n\t\t\tlet geometry = new BufferGeometry();\n\n\t\t\t// mandatory buffer data\n\n\t\t\tif ( buffer.indices.length > 0 ) {\n\n\t\t\t\tgeometry.setIndex( buffer.indices );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( buffer.vertices, 3 ) );\n\n\t\t\t// optional buffer data\n\n\t\t\tif ( buffer.normals.length > 0 ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( buffer.normals, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( buffer.uvs.length > 0 ) {\n\n\t\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( buffer.uvs, 2 ) );\n\n\t\t\t}\n\n\t\t\tif ( buffer.colors.length > 0 ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( buffer.colors, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( buffer.faceVertexUvs.length > 0 || buffer.faceVertexColors.length > 0 ) {\n\n\t\t\t\tgeometry = geometry.toNonIndexed();\n\n\t\t\t\tif ( buffer.faceVertexUvs.length > 0 ) geometry.setAttribute( 'uv', new Float32BufferAttribute( buffer.faceVertexUvs, 2 ) );\n\t\t\t\tif ( buffer.faceVertexColors.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( buffer.faceVertexColors, 3 ) );\n\n\t\t\t}\n\n\t\t\t// custom buffer data\n\n\t\t\tfor ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {\n\n\t\t\t\tif ( buffer[ customProperty ].length > 0 ) {\n\n\t\t\t\t \tgeometry.setAttribute(\n\t\t\t\t\t\tcustomProperty,\n\t\t\t\t\t\tnew Float32BufferAttribute(\n\t\t\t\t\t \t\tbuffer[ customProperty ],\n\t\t\t\t\t \t\tscope.customPropertyMapping[ customProperty ].length\n\t\t\t\t\t\t)\n\t\t\t\t \t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction handleElement( buffer, elementName, element, cacheEntry ) {\n\n\t\t\tif ( elementName === 'vertex' ) {\n\n\t\t\t\tbuffer.vertices.push( element[ cacheEntry.attrX ], element[ cacheEntry.attrY ], element[ cacheEntry.attrZ ] );\n\n\t\t\t\tif ( cacheEntry.attrNX !== null && cacheEntry.attrNY !== null && cacheEntry.attrNZ !== null ) {\n\n\t\t\t\t\tbuffer.normals.push( element[ cacheEntry.attrNX ], element[ cacheEntry.attrNY ], element[ cacheEntry.attrNZ ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( cacheEntry.attrS !== null && cacheEntry.attrT !== null ) {\n\n\t\t\t\t\tbuffer.uvs.push( element[ cacheEntry.attrS ], element[ cacheEntry.attrT ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null ) {\n\n\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\telement[ cacheEntry.attrR ] / 255.0,\n\t\t\t\t\t\telement[ cacheEntry.attrG ] / 255.0,\n\t\t\t\t\t\telement[ cacheEntry.attrB ] / 255.0\n\t\t\t\t\t).convertSRGBToLinear();\n\n\t\t\t\t\tbuffer.colors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {\n\n\t\t\t\t\tfor ( const elementProperty of scope.customPropertyMapping[ customProperty ] ) {\n\n\t\t\t\t\t buffer[ customProperty ].push( element[ elementProperty ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( elementName === 'face' ) {\n\n\t\t\t\tconst vertex_indices = element.vertex_indices || element.vertex_index; // issue #9338\n\t\t\t\tconst texcoord = element.texcoord;\n\n\t\t\t\tif ( vertex_indices.length === 3 ) {\n\n\t\t\t\t\tbuffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 2 ] );\n\n\t\t\t\t\tif ( texcoord && texcoord.length === 6 ) {\n\n\t\t\t\t\t\tbuffer.faceVertexUvs.push( texcoord[ 0 ], texcoord[ 1 ] );\n\t\t\t\t\t\tbuffer.faceVertexUvs.push( texcoord[ 2 ], texcoord[ 3 ] );\n\t\t\t\t\t\tbuffer.faceVertexUvs.push( texcoord[ 4 ], texcoord[ 5 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( vertex_indices.length === 4 ) {\n\n\t\t\t\t\tbuffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 3 ] );\n\t\t\t\t\tbuffer.indices.push( vertex_indices[ 1 ], vertex_indices[ 2 ], vertex_indices[ 3 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// face colors\n\n\t\t\t\tif ( cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null ) {\n\n\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\telement[ cacheEntry.attrR ] / 255.0,\n\t\t\t\t\t\telement[ cacheEntry.attrG ] / 255.0,\n\t\t\t\t\t\telement[ cacheEntry.attrB ] / 255.0\n\t\t\t\t\t).convertSRGBToLinear();\n\t\t\t\t\tbuffer.faceVertexColors.push( _color.r, _color.g, _color.b );\n\t\t\t\t\tbuffer.faceVertexColors.push( _color.r, _color.g, _color.b );\n\t\t\t\t\tbuffer.faceVertexColors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction binaryReadElement( at, properties ) {\n\n\t\t\tconst element = {};\n\t\t\tlet read = 0;\n\n\t\t\tfor ( let i = 0; i < properties.length; i ++ ) {\n\n\t\t\t\tconst property = properties[ i ];\n\t\t\t\tconst valueReader = property.valueReader;\n\n\t\t\t\tif ( property.type === 'list' ) {\n\n\t\t\t\t\tconst list = [];\n\n\t\t\t\t\tconst n = property.countReader.read( at + read );\n\t\t\t\t\tread += property.countReader.size;\n\n\t\t\t\t\tfor ( let j = 0; j < n; j ++ ) {\n\n\t\t\t\t\t\tlist.push( valueReader.read( at + read ) );\n\t\t\t\t\t\tread += valueReader.size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\telement[ property.name ] = list;\n\n\t\t\t\t} else {\n\n\t\t\t\t\telement[ property.name ] = valueReader.read( at + read );\n\t\t\t\t\tread += valueReader.size;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn [ element, read ];\n\n\t\t}\n\n\t\tfunction setPropertyBinaryReaders( properties, body, little_endian ) {\n\n\t\t\tfunction getBinaryReader( dataview, type, little_endian ) {\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t// corespondences for non-specific length types here match rply:\n\t\t\t\t\tcase 'int8':\tcase 'char':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getInt8( at );\n\n\t\t\t\t\t}, size: 1 };\n\t\t\t\t\tcase 'uint8':\tcase 'uchar':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getUint8( at );\n\n\t\t\t\t\t}, size: 1 };\n\t\t\t\t\tcase 'int16':\tcase 'short':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getInt16( at, little_endian );\n\n\t\t\t\t\t}, size: 2 };\n\t\t\t\t\tcase 'uint16':\tcase 'ushort':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getUint16( at, little_endian );\n\n\t\t\t\t\t}, size: 2 };\n\t\t\t\t\tcase 'int32':\tcase 'int':\t\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getInt32( at, little_endian );\n\n\t\t\t\t\t}, size: 4 };\n\t\t\t\t\tcase 'uint32':\tcase 'uint':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getUint32( at, little_endian );\n\n\t\t\t\t\t}, size: 4 };\n\t\t\t\t\tcase 'float32': case 'float':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getFloat32( at, little_endian );\n\n\t\t\t\t\t}, size: 4 };\n\t\t\t\t\tcase 'float64': case 'double':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getFloat64( at, little_endian );\n\n\t\t\t\t\t}, size: 8 };\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = properties.length; i < l; i ++ ) {\n\n\t\t\t\tconst property = properties[ i ];\n\n\t\t\t\tif ( property.type === 'list' ) {\n\n\t\t\t\t\tproperty.countReader = getBinaryReader( body, property.countType, little_endian );\n\t\t\t\t\tproperty.valueReader = getBinaryReader( body, property.itemType, little_endian );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tproperty.valueReader = getBinaryReader( body, property.type, little_endian );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseBinary( data, header ) {\n\n\t\t\tconst buffer = createBuffer();\n\n\t\t\tconst little_endian = ( header.format === 'binary_little_endian' );\n\t\t\tconst body = new DataView( data, header.headerLength );\n\t\t\tlet result, loc = 0;\n\n\t\t\tfor ( let currentElement = 0; currentElement < header.elements.length; currentElement ++ ) {\n\n\t\t\t\tconst elementDesc = header.elements[ currentElement ];\n\t\t\t\tconst properties = elementDesc.properties;\n\t\t\t\tconst attributeMap = mapElementAttributes( properties );\n\n\t\t\t\tsetPropertyBinaryReaders( properties, body, little_endian );\n\n\t\t\t\tfor ( let currentElementCount = 0; currentElementCount < elementDesc.count; currentElementCount ++ ) {\n\n\t\t\t\t\tresult = binaryReadElement( loc, properties );\n\t\t\t\t\tloc += result[ 1 ];\n\t\t\t\t\tconst element = result[ 0 ];\n\n\t\t\t\t\thandleElement( buffer, elementDesc.name, element, attributeMap );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn postProcess( buffer );\n\n\t\t}\n\n\t\tfunction extractHeaderText( bytes ) {\n\n\t\t\tlet i = 0;\n\t\t\tlet cont = true;\n\n\t\t\tlet line = '';\n\t\t\tconst lines = [];\n\n\t\t\tconst startLine = new TextDecoder().decode( bytes.subarray( 0, 5 ) );\n\t\t\tconst hasCRNL = /^ply\\r\\n/.test( startLine );\n\n\t\t\tdo {\n\n\t\t\t\tconst c = String.fromCharCode( bytes[ i ++ ] );\n\n\t\t\t\tif ( c !== '\\n' && c !== '\\r' ) {\n\n\t\t\t\t\tline += c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( line === 'end_header' ) cont = false;\n\t\t\t\t\tif ( line !== '' ) {\n\n\t\t\t\t\t\tlines.push( line );\n\t\t\t\t\t\tline = '';\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} while ( cont && i < bytes.length );\n\n\t\t\t// ascii section using \\r\\n as line endings\n\t\t\tif ( hasCRNL === true ) i ++;\n\n\t\t\treturn { headerText: lines.join( '\\r' ) + '\\r', headerLength: i };\n\n\t\t}\n\n\t\t//\n\n\t\tlet geometry;\n\t\tconst scope = this;\n\n\t\tif ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst bytes = new Uint8Array( data );\n\t\t\tconst { headerText, headerLength } = extractHeaderText( bytes );\n\t\t\tconst header = parseHeader( headerText, headerLength );\n\n\t\t\tif ( header.format === 'ascii' ) {\n\n\t\t\t\tconst text = new TextDecoder().decode( bytes );\n\n\t\t\t\tgeometry = parseASCII( text, header );\n\n\t\t\t} else {\n\n\t\t\t\tgeometry = parseBinary( data, header );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tgeometry = parseASCII( data, parseHeader( data ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ArrayStream {\n\n\tconstructor( arr ) {\n\n\t\tthis.arr = arr;\n\t\tthis.i = 0;\n\n\t}\n\n\tempty() {\n\n\t\treturn this.i >= this.arr.length;\n\n\t}\n\n\tnext() {\n\n\t\treturn this.arr[ this.i ++ ];\n\n\t}\n\n}\n\nexport { PLYLoader };\n", "import {\n\tCompressedTextureLoader,\n\tRGBA_PVRTC_2BPPV1_Format,\n\tRGBA_PVRTC_4BPPV1_Format,\n\tRGB_PVRTC_2BPPV1_Format,\n\tRGB_PVRTC_4BPPV1_Format\n} from 'three';\n\n/*\n *\t PVR v2 (legacy) parser\n * TODO : Add Support for PVR v3 format\n * TODO : implement loadMipmaps option\n */\n\nclass PVRLoader extends CompressedTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tparse( buffer, loadMipmaps ) {\n\n\t\tconst headerLengthInt = 13;\n\t\tconst header = new Uint32Array( buffer, 0, headerLengthInt );\n\n\t\tconst pvrDatas = {\n\t\t\tbuffer: buffer,\n\t\t\theader: header,\n\t\t\tloadMipmaps: loadMipmaps\n\t\t};\n\n\t\tif ( header[ 0 ] === 0x03525650 ) {\n\n\t\t\t// PVR v3\n\n\t\t\treturn _parseV3( pvrDatas );\n\n\t\t} else if ( header[ 11 ] === 0x21525650 ) {\n\n\t\t\t// PVR v2\n\n\t\t\treturn _parseV2( pvrDatas );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.PVRLoader: Unknown PVR format.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction _parseV3( pvrDatas ) {\n\n\tconst header = pvrDatas.header;\n\tlet bpp, format;\n\n\n\tconst metaLen = header[ 12 ],\n\t\tpixelFormat = header[ 2 ],\n\t\theight = header[ 6 ],\n\t\twidth = header[ 7 ],\n\t\t// numSurfs = header[ 9 ],\n\t\tnumFaces = header[ 10 ],\n\t\tnumMipmaps = header[ 11 ];\n\n\tswitch ( pixelFormat ) {\n\n\t\tcase 0 : // PVRTC 2bpp RGB\n\t\t\tbpp = 2;\n\t\t\tformat = RGB_PVRTC_2BPPV1_Format;\n\t\t\tbreak;\n\n\t\tcase 1 : // PVRTC 2bpp RGBA\n\t\t\tbpp = 2;\n\t\t\tformat = RGBA_PVRTC_2BPPV1_Format;\n\t\t\tbreak;\n\n\t\tcase 2 : // PVRTC 4bpp RGB\n\t\t\tbpp = 4;\n\t\t\tformat = RGB_PVRTC_4BPPV1_Format;\n\t\t\tbreak;\n\n\t\tcase 3 : // PVRTC 4bpp RGBA\n\t\t\tbpp = 4;\n\t\t\tformat = RGBA_PVRTC_4BPPV1_Format;\n\t\t\tbreak;\n\n\t\tdefault :\n\t\t\tconsole.error( 'THREE.PVRLoader: Unsupported PVR format:', pixelFormat );\n\n\t}\n\n\tpvrDatas.dataPtr = 52 + metaLen;\n\tpvrDatas.bpp = bpp;\n\tpvrDatas.format = format;\n\tpvrDatas.width = width;\n\tpvrDatas.height = height;\n\tpvrDatas.numSurfaces = numFaces;\n\tpvrDatas.numMipmaps = numMipmaps;\n\tpvrDatas.isCubemap \t= ( numFaces === 6 );\n\n\treturn _extract( pvrDatas );\n\n}\n\nfunction _parseV2( pvrDatas ) {\n\n\tconst header = pvrDatas.header;\n\n\tconst headerLength = header[ 0 ],\n\t\theight = header[ 1 ],\n\t\twidth = header[ 2 ],\n\t\tnumMipmaps = header[ 3 ],\n\t\tflags = header[ 4 ],\n\t\t// dataLength = header[ 5 ],\n\t\t// bpp = header[ 6 ],\n\t\t// bitmaskRed = header[ 7 ],\n\t\t// bitmaskGreen = header[ 8 ],\n\t\t// bitmaskBlue = header[ 9 ],\n\t\tbitmaskAlpha = header[ 10 ],\n\t\t// pvrTag = header[ 11 ],\n\t\tnumSurfs = header[ 12 ];\n\n\n\tconst TYPE_MASK = 0xff;\n\tconst PVRTC_2 = 24,\n\t\tPVRTC_4 = 25;\n\n\tconst formatFlags = flags & TYPE_MASK;\n\n\tlet bpp, format;\n\tconst _hasAlpha = bitmaskAlpha > 0;\n\n\tif ( formatFlags === PVRTC_4 ) {\n\n\t\tformat = _hasAlpha ? RGBA_PVRTC_4BPPV1_Format : RGB_PVRTC_4BPPV1_Format;\n\t\tbpp = 4;\n\n\t} else if ( formatFlags === PVRTC_2 ) {\n\n\t\tformat = _hasAlpha ? RGBA_PVRTC_2BPPV1_Format : RGB_PVRTC_2BPPV1_Format;\n\t\tbpp = 2;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.PVRLoader: Unknown PVR format:', formatFlags );\n\n\t}\n\n\tpvrDatas.dataPtr = headerLength;\n\tpvrDatas.bpp = bpp;\n\tpvrDatas.format = format;\n\tpvrDatas.width = width;\n\tpvrDatas.height = height;\n\tpvrDatas.numSurfaces = numSurfs;\n\tpvrDatas.numMipmaps = numMipmaps + 1;\n\n\t// guess cubemap type seems tricky in v2\n\t// it juste a pvr containing 6 surface (no explicit cubemap type)\n\tpvrDatas.isCubemap \t= ( numSurfs === 6 );\n\n\treturn _extract( pvrDatas );\n\n}\n\n\nfunction _extract( pvrDatas ) {\n\n\tconst pvr = {\n\t\tmipmaps: [],\n\t\twidth: pvrDatas.width,\n\t\theight: pvrDatas.height,\n\t\tformat: pvrDatas.format,\n\t\tmipmapCount: pvrDatas.numMipmaps,\n\t\tisCubemap: pvrDatas.isCubemap\n\t};\n\n\tconst buffer = pvrDatas.buffer;\n\n\tlet dataOffset = pvrDatas.dataPtr,\n\t\tdataSize = 0,\n\t\tblockSize = 0,\n\t\tblockWidth = 0,\n\t\tblockHeight = 0,\n\t\twidthBlocks = 0,\n\t\theightBlocks = 0;\n\n\tconst bpp = pvrDatas.bpp,\n\t\tnumSurfs = pvrDatas.numSurfaces;\n\n\tif ( bpp === 2 ) {\n\n\t\tblockWidth = 8;\n\t\tblockHeight = 4;\n\n\t} else {\n\n\t\tblockWidth = 4;\n\t\tblockHeight = 4;\n\n\t}\n\n\tblockSize = ( blockWidth * blockHeight ) * bpp / 8;\n\n\tpvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs;\n\n\tlet mipLevel = 0;\n\n\twhile ( mipLevel < pvrDatas.numMipmaps ) {\n\n\t\tconst sWidth = pvrDatas.width >> mipLevel,\n\t\t\tsHeight = pvrDatas.height >> mipLevel;\n\n\t\twidthBlocks = sWidth / blockWidth;\n\t\theightBlocks = sHeight / blockHeight;\n\n\t\t// Clamp to minimum number of blocks\n\t\tif ( widthBlocks < 2 ) widthBlocks = 2;\n\t\tif ( heightBlocks < 2 ) heightBlocks = 2;\n\n\t\tdataSize = widthBlocks * heightBlocks * blockSize;\n\n\t\tfor ( let surfIndex = 0; surfIndex < numSurfs; surfIndex ++ ) {\n\n\t\t\tconst byteArray = new Uint8Array( buffer, dataOffset, dataSize );\n\n\t\t\tconst mipmap = {\n\t\t\t\tdata: byteArray,\n\t\t\t\twidth: sWidth,\n\t\t\t\theight: sHeight\n\t\t\t};\n\n\t\t\tpvr.mipmaps[ surfIndex * pvrDatas.numMipmaps + mipLevel ] = mipmap;\n\n\t\t\tdataOffset += dataSize;\n\n\t\t}\n\n\t\tmipLevel ++;\n\n\t}\n\n\treturn pvr;\n\n}\n\nexport { PVRLoader };\n", "import {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tDataUtils,\n\tFileLoader,\n\tHalfFloatType,\n\tLinearFilter,\n\tLinearMipMapLinearFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tRGBAFormat,\n\tUVMapping,\n} from 'three';\n\n// UltraHDR Image Format - https://developer.android.com/media/platform/hdr-image-format\n// HDR/EXR to UltraHDR Converter - https://gainmap-creator.monogrid.com/\n\n/**\n *\n * Short format brief:\n *\n * [JPEG headers]\n * [XMP metadata describing the MPF container and *both* SDR and gainmap images]\n * [Optional metadata] [EXIF] [ICC Profile]\n * [SDR image]\n * [XMP metadata describing only the gainmap image]\n * [Gainmap image]\n *\n * Each section is separated by a 0xFFXX byte followed by a descriptor byte (0xFFE0, 0xFFE1, 0xFFE2.)\n * Binary image storages are prefixed with a unique 0xFFD8 16-bit descriptor.\n */\n\n/**\n * Current feature set:\n * - JPEG headers (required)\n * - XMP metadata (required)\n * - XMP validation (not implemented)\n * - EXIF profile (not implemented)\n * - ICC profile (not implemented)\n * - Binary storage for SDR & HDR images (required)\n * - Gainmap metadata (required)\n * - Non-JPEG image formats (not implemented)\n * - Primary image as an HDR image (not implemented)\n */\n\n/* Calculating this SRGB powers is extremely slow for 4K images and can be sufficiently precalculated for a 3-4x speed boost */\nconst SRGB_TO_LINEAR = Array( 1024 )\n\t.fill( 0 )\n\t.map( ( _, value ) =>\n\t\tMath.pow( ( value / 255 ) * 0.9478672986 + 0.0521327014, 2.4 )\n\t);\n\nclass UltraHDRLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\n\t\treturn this;\n\n\t}\n\n\tparse( buffer, onLoad ) {\n\n\t\tconst xmpMetadata = {\n\t\t\tversion: null,\n\t\t\tbaseRenditionIsHDR: null,\n\t\t\tgainMapMin: null,\n\t\t\tgainMapMax: null,\n\t\t\tgamma: null,\n\t\t\toffsetSDR: null,\n\t\t\toffsetHDR: null,\n\t\t\thdrCapacityMin: null,\n\t\t\thdrCapacityMax: null,\n\t\t};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tconst data = new DataView( buffer );\n\n\t\tlet byteOffset = 0;\n\t\tconst sections = [];\n\n\t\twhile ( byteOffset < data.byteLength ) {\n\n\t\t\tconst byte = data.getUint8( byteOffset );\n\n\t\t\tif ( byte === 0xff ) {\n\n\t\t\t\tconst leadingByte = data.getUint8( byteOffset + 1 );\n\n\t\t\t\tif (\n\t\t\t\t\t[\n\t\t\t\t\t\t/* Valid section headers */\n\t\t\t\t\t\t0xd8, // SOI\n\t\t\t\t\t\t0xe0, // APP0\n\t\t\t\t\t\t0xe1, // APP1\n\t\t\t\t\t\t0xe2, // APP2\n\t\t\t\t\t].includes( leadingByte )\n\t\t\t\t) {\n\n\t\t\t\t\tsections.push( {\n\t\t\t\t\t\tsectionType: leadingByte,\n\t\t\t\t\t\tsection: [ byte, leadingByte ],\n\t\t\t\t\t\tsectionOffset: byteOffset + 2,\n\t\t\t\t\t} );\n\n\t\t\t\t\tbyteOffset += 2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsections[ sections.length - 1 ].section.push( byte, leadingByte );\n\n\t\t\t\t\tbyteOffset += 2;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsections[ sections.length - 1 ].section.push( byte );\n\n\t\t\t\tbyteOffset ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet primaryImage, gainmapImage;\n\n\t\tfor ( let i = 0; i < sections.length; i ++ ) {\n\n\t\t\tconst { sectionType, section, sectionOffset } = sections[ i ];\n\n\t\t\tif ( sectionType === 0xe0 ) {\n\t\t\t\t/* JPEG Header - no useful information */\n\t\t\t} else if ( sectionType === 0xe1 ) {\n\n\t\t\t\t/* XMP Metadata */\n\n\t\t\t\tthis._parseXMPMetadata(\n\t\t\t\t\ttextDecoder.decode( new Uint8Array( section ) ),\n\t\t\t\t\txmpMetadata\n\t\t\t\t);\n\n\t\t\t} else if ( sectionType === 0xe2 ) {\n\n\t\t\t\t/* Data Sections - MPF / EXIF / ICC Profile */\n\n\t\t\t\tconst sectionData = new DataView(\n\t\t\t\t\tnew Uint8Array( section.slice( 2 ) ).buffer\n\t\t\t\t);\n\t\t\t\tconst sectionHeader = sectionData.getUint32( 2, false );\n\n\t\t\t\tif ( sectionHeader === 0x4d504600 ) {\n\n\t\t\t\t\t/* MPF Section */\n\n\t\t\t\t\t/* Section contains a list of static bytes and ends with offsets indicating location of SDR and gainmap images */\n\t\t\t\t\t/* First bytes after header indicate little / big endian ordering (0x49492A00 - LE / 0x4D4D002A - BE) */\n\t\t\t\t\t/*\n\t\t\t\t\t... 60 bytes indicating tags, versions, etc. ...\n\n\t\t\t\t\tbytes | bits | description\n\n\t\t\t\t\t4 32 primary image size\n\t\t\t\t\t4 32 primary image offset\n\t\t\t\t\t2 16 0x0000\n\t\t\t\t\t2 16 0x0000\n\n\t\t\t\t\t4 32 0x00000000\n\t\t\t\t\t4 32 gainmap image size\n\t\t\t\t\t4 32 gainmap image offset\n\t\t\t\t\t2 16 0x0000\n\t\t\t\t\t2 16 0x0000\n\t\t\t\t\t*/\n\n\t\t\t\t\tconst mpfLittleEndian = sectionData.getUint32( 6 ) === 0x49492a00;\n\t\t\t\t\tconst mpfBytesOffset = 60;\n\n\t\t\t\t\t/* SDR size includes the metadata length, SDR offset is always 0 */\n\n\t\t\t\t\tconst primaryImageSize = sectionData.getUint32(\n\t\t\t\t\t\tmpfBytesOffset,\n\t\t\t\t\t\tmpfLittleEndian\n\t\t\t\t\t);\n\t\t\t\t\tconst primaryImageOffset = sectionData.getUint32(\n\t\t\t\t\t\tmpfBytesOffset + 4,\n\t\t\t\t\t\tmpfLittleEndian\n\t\t\t\t\t);\n\n\t\t\t\t\t/* Gainmap size is an absolute value starting from its offset, gainmap offset needs 6 bytes padding to take into account 0x00 bytes at the end of XMP */\n\t\t\t\t\tconst gainmapImageSize = sectionData.getUint32(\n\t\t\t\t\t\tmpfBytesOffset + 16,\n\t\t\t\t\t\tmpfLittleEndian\n\t\t\t\t\t);\n\t\t\t\t\tconst gainmapImageOffset =\n\t\t\t\t\t\tsectionData.getUint32( mpfBytesOffset + 20, mpfLittleEndian ) +\n\t\t\t\t\t\tsectionOffset +\n\t\t\t\t\t\t6;\n\n\t\t\t\t\tprimaryImage = new Uint8Array(\n\t\t\t\t\t\tdata.buffer,\n\t\t\t\t\t\tprimaryImageOffset,\n\t\t\t\t\t\tprimaryImageSize\n\t\t\t\t\t);\n\n\t\t\t\t\tgainmapImage = new Uint8Array(\n\t\t\t\t\t\tdata.buffer,\n\t\t\t\t\t\tgainmapImageOffset,\n\t\t\t\t\t\tgainmapImageSize\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/* Minimal sufficient validation - https://developer.android.com/media/platform/hdr-image-format#signal_of_the_format */\n\t\tif ( ! xmpMetadata.version ) {\n\n\t\t\tthrow new Error( 'THREE.UltraHDRLoader: Not a valid UltraHDR image' );\n\n\t\t}\n\n\t\tif ( primaryImage && gainmapImage ) {\n\n\t\t\tthis._applyGainmapToSDR(\n\t\t\t\txmpMetadata,\n\t\t\t\tprimaryImage,\n\t\t\t\tgainmapImage,\n\t\t\t\t( hdrBuffer, width, height ) => {\n\n\t\t\t\t\tonLoad( {\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tdata: hdrBuffer,\n\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\ttype: this.type,\n\t\t\t\t\t} );\n\n\t\t\t\t},\n\t\t\t\t( error ) => {\n\n\t\t\t\t\tthrow new Error( error );\n\n\t\t\t\t}\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.UltraHDRLoader: Could not parse UltraHDR images' );\n\n\t\t}\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new DataTexture(\n\t\t\tthis.type === HalfFloatType ? new Uint16Array() : new Float32Array(),\n\t\t\t0,\n\t\t\t0,\n\t\t\tRGBAFormat,\n\t\t\tthis.type,\n\t\t\tUVMapping,\n\t\t\tClampToEdgeWrapping,\n\t\t\tClampToEdgeWrapping,\n\t\t\tLinearFilter,\n\t\t\tLinearMipMapLinearFilter,\n\t\t\t1,\n\t\t\tLinearSRGBColorSpace\n\t\t);\n\t\ttexture.generateMipmaps = true;\n\t\ttexture.flipY = true;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\ttry {\n\n\t\t\t\tthis.parse(\n\t\t\t\t\tbuffer,\n\t\t\t\t\t( texData ) => {\n\n\t\t\t\t\t\ttexture.image = {\n\t\t\t\t\t\t\tdata: texData.data,\n\t\t\t\t\t\t\twidth: texData.width,\n\t\t\t\t\t\t\theight: texData.height,\n\t\t\t\t\t\t};\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\tconsole.error( error );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n\t_parseXMPMetadata( xmpDataString, xmpMetadata ) {\n\n\t\tconst domParser = new DOMParser();\n\n\t\tconst xmpXml = domParser.parseFromString(\n\t\t\txmpDataString.substring(\n\t\t\t\txmpDataString.indexOf( '<' ),\n\t\t\t\txmpDataString.lastIndexOf( '>' ) + 1\n\t\t\t),\n\t\t\t'text/xml'\n\t\t);\n\n\t\t/* Determine if given XMP metadata is the primary GContainer descriptor or a gainmap descriptor */\n\t\tconst [ hasHDRContainerDescriptor ] = xmpXml.getElementsByTagName(\n\t\t\t'Container:Directory'\n\t\t);\n\n\t\tif ( hasHDRContainerDescriptor ) {\n\t\t\t/* There's not much useful information in the container descriptor besides memory-validation */\n\t\t} else {\n\n\t\t\t/* Gainmap descriptor - defaults from https://developer.android.com/media/platform/hdr-image-format#HDR_gain_map_metadata */\n\n\t\t\tconst [ gainmapNode ] = xmpXml.getElementsByTagName( 'rdf:Description' );\n\n\t\t\txmpMetadata.version = gainmapNode.getAttribute( 'hdrgm:Version' );\n\t\t\txmpMetadata.baseRenditionIsHDR =\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:BaseRenditionIsHDR' ) === 'True';\n\t\t\txmpMetadata.gainMapMin = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:GainMapMin' ) || 0.0\n\t\t\t);\n\t\t\txmpMetadata.gainMapMax = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:GainMapMax' ) || 1.0\n\t\t\t);\n\t\t\txmpMetadata.gamma = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:Gamma' ) || 1.0\n\t\t\t);\n\t\t\txmpMetadata.offsetSDR = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:OffsetSDR' ) / ( 1 / 64 )\n\t\t\t);\n\t\t\txmpMetadata.offsetHDR = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:OffsetHDR' ) / ( 1 / 64 )\n\t\t\t);\n\t\t\txmpMetadata.hdrCapacityMin = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:HDRCapacityMin' ) || 0.0\n\t\t\t);\n\t\t\txmpMetadata.hdrCapacityMax = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:HDRCapacityMax' ) || 1.0\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t_srgbToLinear( value ) {\n\n\t\tif ( value / 255 < 0.04045 ) {\n\n\t\t\treturn ( value / 255 ) * 0.0773993808;\n\n\t\t}\n\n\t\tif ( value < 1024 ) {\n\n\t\t\treturn SRGB_TO_LINEAR[ ~ ~ value ];\n\n\t\t}\n\n\t\treturn Math.pow( ( value / 255 ) * 0.9478672986 + 0.0521327014, 2.4 );\n\n\t}\n\n\t_applyGainmapToSDR(\n\t\txmpMetadata,\n\t\tsdrBuffer,\n\t\tgainmapBuffer,\n\t\tonSuccess,\n\t\tonError\n\t) {\n\n\t\tconst getImageDataFromBuffer = ( buffer ) =>\n\t\t\tnew Promise( ( resolve, reject ) => {\n\n\t\t\t\tconst imageLoader = document.createElement( 'img' );\n\n\t\t\t\timageLoader.onload = () => {\n\n\t\t\t\t\tconst image = {\n\t\t\t\t\t\twidth: imageLoader.naturalWidth,\n\t\t\t\t\t\theight: imageLoader.naturalHeight,\n\t\t\t\t\t\tsource: imageLoader,\n\t\t\t\t\t};\n\n\t\t\t\t\tURL.revokeObjectURL( imageLoader.src );\n\n\t\t\t\t\tresolve( image );\n\n\t\t\t\t};\n\n\t\t\t\timageLoader.onerror = () => {\n\n\t\t\t\t\tURL.revokeObjectURL( imageLoader.src );\n\n\t\t\t\t\treject();\n\n\t\t\t\t};\n\n\t\t\t\timageLoader.src = URL.createObjectURL(\n\t\t\t\t\tnew Blob( [ buffer ], { type: 'image/jpeg' } )\n\t\t\t\t);\n\n\t\t\t} );\n\n\t\tPromise.all( [\n\t\t\tgetImageDataFromBuffer( sdrBuffer ),\n\t\t\tgetImageDataFromBuffer( gainmapBuffer ),\n\t\t] )\n\t\t\t.then( ( [ sdrImage, gainmapImage ] ) => {\n\n\t\t\t\tconst sdrImageAspect = sdrImage.width / sdrImage.height;\n\t\t\t\tconst gainmapImageAspect = gainmapImage.width / gainmapImage.height;\n\n\t\t\t\tif ( sdrImageAspect !== gainmapImageAspect ) {\n\n\t\t\t\t\tonError(\n\t\t\t\t\t\t'THREE.UltraHDRLoader Error: Aspect ratio mismatch between SDR and Gainmap images'\n\t\t\t\t\t);\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\t\tconst ctx = canvas.getContext( '2d', {\n\t\t\t\t\twillReadFrequently: true,\n\t\t\t\t\tcolorSpace: 'srgb',\n\t\t\t\t} );\n\n\t\t\t\tcanvas.width = sdrImage.width;\n\t\t\t\tcanvas.height = sdrImage.height;\n\n\t\t\t\t/* Use out-of-the-box interpolation of Canvas API to scale gainmap to fit the SDR resolution */\n\t\t\t\tctx.drawImage(\n\t\t\t\t\tgainmapImage.source,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tgainmapImage.width,\n\t\t\t\t\tgainmapImage.height,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tsdrImage.width,\n\t\t\t\t\tsdrImage.height\n\t\t\t\t);\n\t\t\t\tconst gainmapImageData = ctx.getImageData(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tsdrImage.width,\n\t\t\t\t\tsdrImage.height,\n\t\t\t\t\t{ colorSpace: 'srgb' }\n\t\t\t\t);\n\n\t\t\t\tctx.drawImage( sdrImage.source, 0, 0 );\n\t\t\t\tconst sdrImageData = ctx.getImageData(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tsdrImage.width,\n\t\t\t\t\tsdrImage.height,\n\t\t\t\t\t{ colorSpace: 'srgb' }\n\t\t\t\t);\n\n\t\t\t\t/* HDR Recovery formula - https://developer.android.com/media/platform/hdr-image-format#use_the_gain_map_to_create_adapted_HDR_rendition */\n\t\t\t\tlet hdrBuffer;\n\n\t\t\t\tif ( this.type === HalfFloatType ) {\n\n\t\t\t\t\thdrBuffer = new Uint16Array( sdrImageData.data.length ).fill( 23544 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\thdrBuffer = new Float32Array( sdrImageData.data.length ).fill( 255 );\n\n\t\t\t\t}\n\n\t\t\t\tconst maxDisplayBoost = Math.sqrt(\n\t\t\t\t\tMath.pow(\n\t\t\t\t\t\t/* 1.8 instead of 2 near-perfectly rectifies approximations introduced by precalculated SRGB_TO_LINEAR values */\n\t\t\t\t\t\t1.8,\n\t\t\t\t\t\txmpMetadata.hdrCapacityMax\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tconst unclampedWeightFactor =\n\t\t\t\t\t( Math.log2( maxDisplayBoost ) - xmpMetadata.hdrCapacityMin ) /\n\t\t\t\t\t( xmpMetadata.hdrCapacityMax - xmpMetadata.hdrCapacityMin );\n\t\t\t\tconst weightFactor = Math.min(\n\t\t\t\t\tMath.max( unclampedWeightFactor, 0.0 ),\n\t\t\t\t\t1.0\n\t\t\t\t);\n\t\t\t\tconst useGammaOne = xmpMetadata.gamma === 1.0;\n\n\t\t\t\tfor (\n\t\t\t\t\tlet pixelIndex = 0;\n\t\t\t\t\tpixelIndex < sdrImageData.data.length;\n\t\t\t\t\tpixelIndex += 4\n\t\t\t\t) {\n\n\t\t\t\t\tconst x = ( pixelIndex / 4 ) % sdrImage.width;\n\t\t\t\t\tconst y = Math.floor( pixelIndex / 4 / sdrImage.width );\n\n\t\t\t\t\tfor ( let channelIndex = 0; channelIndex < 3; channelIndex ++ ) {\n\n\t\t\t\t\t\tconst sdrValue = sdrImageData.data[ pixelIndex + channelIndex ];\n\n\t\t\t\t\t\tconst gainmapIndex = ( y * sdrImage.width + x ) * 4 + channelIndex;\n\t\t\t\t\t\tconst gainmapValue = gainmapImageData.data[ gainmapIndex ] / 255.0;\n\n\t\t\t\t\t\t/* Gamma is 1.0 by default */\n\t\t\t\t\t\tconst logRecovery = useGammaOne\n\t\t\t\t\t\t\t? gainmapValue\n\t\t\t\t\t\t\t: Math.pow( gainmapValue, 1.0 / xmpMetadata.gamma );\n\n\t\t\t\t\t\tconst logBoost =\n\t\t\t\t\t\t\txmpMetadata.gainMapMin * ( 1.0 - logRecovery ) +\n\t\t\t\t\t\t\txmpMetadata.gainMapMax * logRecovery;\n\n\t\t\t\t\t\tconst hdrValue =\n\t\t\t\t\t\t\t( sdrValue + xmpMetadata.offsetSDR ) *\n\t\t\t\t\t\t\t\t( logBoost * weightFactor === 0.0\n\t\t\t\t\t\t\t\t\t? 1.0\n\t\t\t\t\t\t\t\t\t: Math.pow( 2, logBoost * weightFactor ) ) -\n\t\t\t\t\t\t\txmpMetadata.offsetHDR;\n\n\t\t\t\t\t\tconst linearHDRValue = Math.min(\n\t\t\t\t\t\t\tMath.max( this._srgbToLinear( hdrValue ), 0 ),\n\t\t\t\t\t\t\t65504\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\thdrBuffer[ pixelIndex + channelIndex ] =\n\t\t\t\t\t\t\tthis.type === HalfFloatType\n\t\t\t\t\t\t\t\t? DataUtils.toHalfFloat( linearHDRValue )\n\t\t\t\t\t\t\t\t: linearHDRValue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tonSuccess( hdrBuffer, sdrImage.width, sdrImage.height );\n\n\t\t\t} )\n\t\t\t.catch( () => {\n\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'THREE.UltraHDRLoader Error: Could not parse UltraHDR images'\n\t\t\t\t);\n\n\t\t\t} );\n\n\t}\n\n}\n\nexport { UltraHDRLoader };\n", "import {\n\tDataTextureLoader,\n\tRGBAFormat,\n\tLinearFilter,\n\tCubeTexture,\n\tHalfFloatType,\n\tDataUtils\n} from 'three';\n\nclass RGBMLoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\t\tthis.maxRange = 7; // more information about this property at https://iwasbeingirony.blogspot.com/2010/06/difference-between-rgbm-and-rgbd.html\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tsetMaxRange( value ) {\n\n\t\tthis.maxRange = value;\n\t\treturn this;\n\n\t}\n\n\tloadCubemap( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\ttexture.images[ i ] = undefined;\n\n\t\t}\n\n\t\tlet loaded = 0;\n\n\t\tconst scope = this;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tscope.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\ttexture.type = this.type;\n\t\ttexture.format = RGBAFormat;\n\t\ttexture.minFilter = LinearFilter;\n\t\ttexture.generateMipmaps = false;\n\n\t\treturn texture;\n\n\t}\n\n\tloadCubemapAsync( urls, onProgress ) {\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tthis.loadCubemap( urls, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst img = UPNG.decode( buffer );\n\t\tconst rgba = UPNG.toRGBA8( img )[ 0 ];\n\n\t\tconst data = new Uint8Array( rgba );\n\t\tconst size = img.width * img.height * 4;\n\n\t\tconst output = ( this.type === HalfFloatType ) ? new Uint16Array( size ) : new Float32Array( size );\n\n\t\t// decode RGBM\n\n\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\tconst r = data[ i + 0 ] / 255;\n\t\t\tconst g = data[ i + 1 ] / 255;\n\t\t\tconst b = data[ i + 2 ] / 255;\n\t\t\tconst a = data[ i + 3 ] / 255;\n\n\t\t\tif ( this.type === HalfFloatType ) {\n\n\t\t\t\toutput[ i + 0 ] = DataUtils.toHalfFloat( Math.min( r * a * this.maxRange, 65504 ) );\n\t\t\t\toutput[ i + 1 ] = DataUtils.toHalfFloat( Math.min( g * a * this.maxRange, 65504 ) );\n\t\t\t\toutput[ i + 2 ] = DataUtils.toHalfFloat( Math.min( b * a * this.maxRange, 65504 ) );\n\t\t\t\toutput[ i + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\t\t\t} else {\n\n\t\t\t\toutput[ i + 0 ] = r * a * this.maxRange;\n\t\t\t\toutput[ i + 1 ] = g * a * this.maxRange;\n\t\t\t\toutput[ i + 2 ] = b * a * this.maxRange;\n\t\t\t\toutput[ i + 3 ] = 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\twidth: img.width,\n\t\t\theight: img.height,\n\t\t\tdata: output,\n\t\t\tformat: RGBAFormat,\n\t\t\ttype: this.type,\n\t\t\tflipY: true\n\t\t};\n\n\t}\n\n}\n\n// from https://github.com/photopea/UPNG.js (MIT License)\n\nvar UPNG = {};\n\nUPNG.toRGBA8 = function ( out ) {\n\n\tvar w = out.width, h = out.height;\n\tif ( out.tabs.acTL == null ) return [ UPNG.toRGBA8.decodeImage( out.data, w, h, out ).buffer ];\n\n\tvar frms = [];\n\tif ( out.frames[ 0 ].data == null ) out.frames[ 0 ].data = out.data;\n\n\tvar len = w * h * 4, img = new Uint8Array( len ), empty = new Uint8Array( len ), prev = new Uint8Array( len );\n\tfor ( var i = 0; i < out.frames.length; i ++ ) {\n\n\t\tvar frm = out.frames[ i ];\n\t\tvar fx = frm.rect.x, fy = frm.rect.y, fw = frm.rect.width, fh = frm.rect.height;\n\t\tvar fdata = UPNG.toRGBA8.decodeImage( frm.data, fw, fh, out );\n\n\t\tif ( i != 0 ) for ( var j = 0; j < len; j ++ ) prev[ j ] = img[ j ];\n\n\t\tif ( frm.blend == 0 ) UPNG._copyTile( fdata, fw, fh, img, w, h, fx, fy, 0 );\n\t\telse if ( frm.blend == 1 ) UPNG._copyTile( fdata, fw, fh, img, w, h, fx, fy, 1 );\n\n\t\tfrms.push( img.buffer.slice( 0 ) );\n\n\t\tif ( frm.dispose == 1 ) UPNG._copyTile( empty, fw, fh, img, w, h, fx, fy, 0 );\n\t\telse if ( frm.dispose == 2 ) for ( var j = 0; j < len; j ++ ) img[ j ] = prev[ j ];\n\n\t}\n\n\treturn frms;\n\n};\n\nUPNG.toRGBA8.decodeImage = function ( data, w, h, out ) {\n\n\tvar area = w * h, bpp = UPNG.decode._getBPP( out );\n\tvar bpl = Math.ceil( w * bpp / 8 );\t// bytes per line\n\n\tvar bf = new Uint8Array( area * 4 ), bf32 = new Uint32Array( bf.buffer );\n\tvar ctype = out.ctype, depth = out.depth;\n\tvar rs = UPNG._bin.readUshort;\n\n\tif ( ctype == 6 ) { // RGB + alpha\n\n\t\tvar qarea = area << 2;\n\t\tif ( depth == 8 ) for ( var i = 0; i < qarea; i += 4 ) {\n\n\t\t\tbf[ i ] = data[ i ]; bf[ i + 1 ] = data[ i + 1 ]; bf[ i + 2 ] = data[ i + 2 ]; bf[ i + 3 ] = data[ i + 3 ];\n\n\t\t}\n\n\t\tif ( depth == 16 ) for ( var i = 0; i < qarea; i ++ ) {\n\n\t\t\tbf[ i ] = data[ i << 1 ];\n\n\t\t}\n\n\t} else if ( ctype == 2 ) {\t// RGB\n\n\t\tvar ts = out.tabs[ 'tRNS' ];\n\t\tif ( ts == null ) {\n\n\t\t\tif ( depth == 8 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\t\tvar ti = i * 3; bf32[ i ] = ( 255 << 24 ) | ( data[ ti + 2 ] << 16 ) | ( data[ ti + 1 ] << 8 ) | data[ ti ];\n\n\t\t\t}\n\n\t\t\tif ( depth == 16 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\t\tvar ti = i * 6; bf32[ i ] = ( 255 << 24 ) | ( data[ ti + 4 ] << 16 ) | ( data[ ti + 2 ] << 8 ) | data[ ti ];\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar tr = ts[ 0 ], tg = ts[ 1 ], tb = ts[ 2 ];\n\t\t\tif ( depth == 8 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\t\tvar qi = i << 2, ti = i * 3; bf32[ i ] = ( 255 << 24 ) | ( data[ ti + 2 ] << 16 ) | ( data[ ti + 1 ] << 8 ) | data[ ti ];\n\t\t\t\tif ( data[ ti ] == tr && data[ ti + 1 ] == tg && data[ ti + 2 ] == tb ) bf[ qi + 3 ] = 0;\n\n\t\t\t}\n\n\t\t\tif ( depth == 16 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\t\tvar qi = i << 2, ti = i * 6; bf32[ i ] = ( 255 << 24 ) | ( data[ ti + 4 ] << 16 ) | ( data[ ti + 2 ] << 8 ) | data[ ti ];\n\t\t\t\tif ( rs( data, ti ) == tr && rs( data, ti + 2 ) == tg && rs( data, ti + 4 ) == tb ) bf[ qi + 3 ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t} else if ( ctype == 3 ) {\t// palette\n\n\t\tvar p = out.tabs[ 'PLTE' ], ap = out.tabs[ 'tRNS' ], tl = ap ? ap.length : 0;\n\t\t//console.log(p, ap);\n\t\tif ( depth == 1 ) for ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar s0 = y * bpl, t0 = y * w;\n\t\t\tfor ( var i = 0; i < w; i ++ ) {\n\n\t\t\t\tvar qi = ( t0 + i ) << 2, j = ( ( data[ s0 + ( i >> 3 ) ] >> ( 7 - ( ( i & 7 ) << 0 ) ) ) & 1 ), cj = 3 * j; bf[ qi ] = p[ cj ]; bf[ qi + 1 ] = p[ cj + 1 ]; bf[ qi + 2 ] = p[ cj + 2 ]; bf[ qi + 3 ] = ( j < tl ) ? ap[ j ] : 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( depth == 2 ) for ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar s0 = y * bpl, t0 = y * w;\n\t\t\tfor ( var i = 0; i < w; i ++ ) {\n\n\t\t\t\tvar qi = ( t0 + i ) << 2, j = ( ( data[ s0 + ( i >> 2 ) ] >> ( 6 - ( ( i & 3 ) << 1 ) ) ) & 3 ), cj = 3 * j; bf[ qi ] = p[ cj ]; bf[ qi + 1 ] = p[ cj + 1 ]; bf[ qi + 2 ] = p[ cj + 2 ]; bf[ qi + 3 ] = ( j < tl ) ? ap[ j ] : 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( depth == 4 ) for ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar s0 = y * bpl, t0 = y * w;\n\t\t\tfor ( var i = 0; i < w; i ++ ) {\n\n\t\t\t\tvar qi = ( t0 + i ) << 2, j = ( ( data[ s0 + ( i >> 1 ) ] >> ( 4 - ( ( i & 1 ) << 2 ) ) ) & 15 ), cj = 3 * j; bf[ qi ] = p[ cj ]; bf[ qi + 1 ] = p[ cj + 1 ]; bf[ qi + 2 ] = p[ cj + 2 ]; bf[ qi + 3 ] = ( j < tl ) ? ap[ j ] : 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( depth == 8 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\tvar qi = i << 2, j = data[ i ], cj = 3 * j; bf[ qi ] = p[ cj ]; bf[ qi + 1 ] = p[ cj + 1 ]; bf[ qi + 2 ] = p[ cj + 2 ]; bf[ qi + 3 ] = ( j < tl ) ? ap[ j ] : 255;\n\n\t\t}\n\n\t} else if ( ctype == 4 ) {\t// gray + alpha\n\n\t\tif ( depth == 8 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\tvar qi = i << 2, di = i << 1, gr = data[ di ]; bf[ qi ] = gr; bf[ qi + 1 ] = gr; bf[ qi + 2 ] = gr; bf[ qi + 3 ] = data[ di + 1 ];\n\n\t\t}\n\n\t\tif ( depth == 16 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\tvar qi = i << 2, di = i << 2, gr = data[ di ]; bf[ qi ] = gr; bf[ qi + 1 ] = gr; bf[ qi + 2 ] = gr; bf[ qi + 3 ] = data[ di + 2 ];\n\n\t\t}\n\n\t} else if ( ctype == 0 ) {\t// gray\n\n\t\tvar tr = out.tabs[ 'tRNS' ] ? out.tabs[ 'tRNS' ] : - 1;\n\t\tfor ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar off = y * bpl, to = y * w;\n\t\t\tif ( depth == 1 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = 255 * ( ( data[ off + ( x >>> 3 ) ] >>> ( 7 - ( x & 7 ) ) ) & 1 ), al = ( gr == tr * 255 ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\t\t\telse if ( depth == 2 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = 85 * ( ( data[ off + ( x >>> 2 ) ] >>> ( 6 - ( ( x & 3 ) << 1 ) ) ) & 3 ), al = ( gr == tr * 85 ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\t\t\telse if ( depth == 4 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = 17 * ( ( data[ off + ( x >>> 1 ) ] >>> ( 4 - ( ( x & 1 ) << 2 ) ) ) & 15 ), al = ( gr == tr * 17 ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\t\t\telse if ( depth == 8 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = data[ off + x ], al = ( gr == tr ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\t\t\telse if ( depth == 16 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = data[ off + ( x << 1 ) ], al = ( rs( data, off + ( x << 1 ) ) == tr ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//console.log(Date.now()-time);\n\treturn bf;\n\n};\n\n\n\nUPNG.decode = function ( buff ) {\n\n\tvar data = new Uint8Array( buff ), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint;\n\tvar out = { tabs: {}, frames: [] };\n\tvar dd = new Uint8Array( data.length ), doff = 0;\t // put all IDAT data into it\n\tvar fd, foff = 0;\t// frames\n\tvar text, keyw, bfr;\n\n\tvar mgck = [ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a ];\n\tfor ( var i = 0; i < 8; i ++ ) if ( data[ i ] != mgck[ i ] ) throw new Error( 'The input is not a PNG file!' );\n\n\twhile ( offset < data.length ) {\n\n\t\tvar len = bin.readUint( data, offset ); offset += 4;\n\t\tvar type = bin.readASCII( data, offset, 4 ); offset += 4;\n\t\t//console.log(type,len);\n\n\t\tif ( type == 'IHDR' ) {\n\n\t\t\tUPNG.decode._IHDR( data, offset, out );\n\n\t\t} else if ( type == 'CgBI' ) {\n\n\t\t\tout.tabs[ type ] = data.slice( offset, offset + 4 );\n\n\t\t} else if ( type == 'IDAT' ) {\n\n\t\t\tfor ( var i = 0; i < len; i ++ ) dd[ doff + i ] = data[ offset + i ];\n\t\t\tdoff += len;\n\n\t\t} else if ( type == 'acTL' ) {\n\n\t\t\tout.tabs[ type ] = { num_frames: rUi( data, offset ), num_plays: rUi( data, offset + 4 ) };\n\t\t\tfd = new Uint8Array( data.length );\n\n\t\t} else if ( type == 'fcTL' ) {\n\n\t\t\tif ( foff != 0 ) {\n\n\t\t\t\tvar fr = out.frames[ out.frames.length - 1 ];\n\t\t\t\tfr.data = UPNG.decode._decompress( out, fd.slice( 0, foff ), fr.rect.width, fr.rect.height ); foff = 0;\n\n\t\t\t}\n\n\t\t\tvar rct = { x: rUi( data, offset + 12 ), y: rUi( data, offset + 16 ), width: rUi( data, offset + 4 ), height: rUi( data, offset + 8 ) };\n\t\t\tvar del = rUs( data, offset + 22 ); del = rUs( data, offset + 20 ) / ( del == 0 ? 100 : del );\n\t\t\tvar frm = { rect: rct, delay: Math.round( del * 1000 ), dispose: data[ offset + 24 ], blend: data[ offset + 25 ] };\n\t\t\t//console.log(frm);\n\t\t\tout.frames.push( frm );\n\n\t\t} else if ( type == 'fdAT' ) {\n\n\t\t\tfor ( var i = 0; i < len - 4; i ++ ) fd[ foff + i ] = data[ offset + i + 4 ];\n\t\t\tfoff += len - 4;\n\n\t\t} else if ( type == 'pHYs' ) {\n\n\t\t\tout.tabs[ type ] = [ bin.readUint( data, offset ), bin.readUint( data, offset + 4 ), data[ offset + 8 ] ];\n\n\t\t} else if ( type == 'cHRM' ) {\n\n\t\t\tout.tabs[ type ] = [];\n\t\t\tfor ( var i = 0; i < 8; i ++ ) out.tabs[ type ].push( bin.readUint( data, offset + i * 4 ) );\n\n\t\t} else if ( type == 'tEXt' || type == 'zTXt' ) {\n\n\t\t\tif ( out.tabs[ type ] == null ) out.tabs[ type ] = {};\n\t\t\tvar nz = bin.nextZero( data, offset );\n\t\t\tkeyw = bin.readASCII( data, offset, nz - offset );\n\t\t\tvar tl = offset + len - nz - 1;\n\t\t\tif ( type == 'tEXt' ) text = bin.readASCII( data, nz + 1, tl );\n\t\t\telse {\n\n\t\t\t\tbfr = UPNG.decode._inflate( data.slice( nz + 2, nz + 2 + tl ) );\n\t\t\t\ttext = bin.readUTF8( bfr, 0, bfr.length );\n\n\t\t\t}\n\n\t\t\tout.tabs[ type ][ keyw ] = text;\n\n\t\t} else if ( type == 'iTXt' ) {\n\n\t\t\tif ( out.tabs[ type ] == null ) out.tabs[ type ] = {};\n\t\t\tvar nz = 0, off = offset;\n\t\t\tnz = bin.nextZero( data, off );\n\t\t\tkeyw = bin.readASCII( data, off, nz - off ); off = nz + 1;\n\t\t\tvar cflag = data[ off ]; off += 2;\n\t\t\tnz = bin.nextZero( data, off );\n\t\t\tbin.readASCII( data, off, nz - off ); off = nz + 1;\n\t\t\tnz = bin.nextZero( data, off );\n\t\t\tbin.readUTF8( data, off, nz - off ); off = nz + 1;\n\t\t\tvar tl = len - ( off - offset );\n\t\t\tif ( cflag == 0 ) text = bin.readUTF8( data, off, tl );\n\t\t\telse {\n\n\t\t\t\tbfr = UPNG.decode._inflate( data.slice( off, off + tl ) );\n\t\t\t\ttext = bin.readUTF8( bfr, 0, bfr.length );\n\n\t\t\t}\n\n\t\t\tout.tabs[ type ][ keyw ] = text;\n\n\t\t} else if ( type == 'PLTE' ) {\n\n\t\t\tout.tabs[ type ] = bin.readBytes( data, offset, len );\n\n\t\t} else if ( type == 'hIST' ) {\n\n\t\t\tvar pl = out.tabs[ 'PLTE' ].length / 3;\n\t\t\tout.tabs[ type ] = []; for ( var i = 0; i < pl; i ++ ) out.tabs[ type ].push( rUs( data, offset + i * 2 ) );\n\n\t\t} else if ( type == 'tRNS' ) {\n\n\t\t\tif ( out.ctype == 3 ) out.tabs[ type ] = bin.readBytes( data, offset, len );\n\t\t\telse if ( out.ctype == 0 ) out.tabs[ type ] = rUs( data, offset );\n\t\t\telse if ( out.ctype == 2 ) out.tabs[ type ] = [ rUs( data, offset ), rUs( data, offset + 2 ), rUs( data, offset + 4 ) ];\n\t\t\t//else console.log(\"tRNS for unsupported color type\",out.ctype, len);\n\n\t\t} else if ( type == 'gAMA' ) out.tabs[ type ] = bin.readUint( data, offset ) / 100000;\n\t\telse if ( type == 'sRGB' ) out.tabs[ type ] = data[ offset ];\n\t\telse if ( type == 'bKGD' ) {\n\n\t\t\tif ( out.ctype == 0 || out.ctype == 4 ) out.tabs[ type ] = [ rUs( data, offset ) ];\n\t\t\telse if ( out.ctype == 2 || out.ctype == 6 ) out.tabs[ type ] = [ rUs( data, offset ), rUs( data, offset + 2 ), rUs( data, offset + 4 ) ];\n\t\t\telse if ( out.ctype == 3 ) out.tabs[ type ] = data[ offset ];\n\n\t\t} else if ( type == 'IEND' ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t\t//else { console.log(\"unknown chunk type\", type, len); out.tabs[type]=data.slice(offset,offset+len); }\n\t\toffset += len;\n\t\tbin.readUint( data, offset ); offset += 4;\n\n\t}\n\n\tif ( foff != 0 ) {\n\n\t\tvar fr = out.frames[ out.frames.length - 1 ];\n\t\tfr.data = UPNG.decode._decompress( out, fd.slice( 0, foff ), fr.rect.width, fr.rect.height );\n\n\t}\n\n\tout.data = UPNG.decode._decompress( out, dd, out.width, out.height );\n\n\tdelete out.compress; delete out.interlace; delete out.filter;\n\treturn out;\n\n};\n\nUPNG.decode._decompress = function ( out, dd, w, h ) {\n\n\tvar bpp = UPNG.decode._getBPP( out ), bpl = Math.ceil( w * bpp / 8 ), buff = new Uint8Array( ( bpl + 1 + out.interlace ) * h );\n\tif ( out.tabs[ 'CgBI' ] ) dd = UPNG.inflateRaw( dd, buff );\n\telse dd = UPNG.decode._inflate( dd, buff );\n\n\tif ( out.interlace == 0 ) dd = UPNG.decode._filterZero( dd, out, 0, w, h );\n\telse if ( out.interlace == 1 ) dd = UPNG.decode._readInterlace( dd, out );\n\n\treturn dd;\n\n};\n\nUPNG.decode._inflate = function ( data, buff ) {\n\n\tvar out = UPNG[ 'inflateRaw' ]( new Uint8Array( data.buffer, 2, data.length - 6 ), buff ); return out;\n\n};\n\nUPNG.inflateRaw = function () {\n\n\tvar H = {}; H.H = {}; H.H.N = function ( N, W ) {\n\n\t\tvar R = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q = 0, X = 0, u = 0, w = 0, d = 0, v, C;\n\t\tif ( N[ 0 ] == 3 && N[ 1 ] == 0 ) return W ? W : new R( 0 ); var V = H.H, n = V.b, A = V.e, l = V.R, M = V.n, I = V.A, e = V.Z, b = V.m, Z = W == null;\n\t\tif ( Z )W = new R( N.length >>> 2 << 5 ); while ( i == 0 ) {\n\n\t\t\ti = n( N, d, 1 ); m = n( N, d + 1, 2 ); d += 3; if ( m == 0 ) {\n\n\t\t\t\tif ( ( d & 7 ) != 0 )d += 8 - ( d & 7 );\n\t\t\t\tvar D = ( d >>> 3 ) + 4, q = N[ D - 4 ] | N[ D - 3 ] << 8; if ( Z )W = H.H.W( W, w + q ); W.set( new R( N.buffer, N.byteOffset + D, q ), w ); d = D + q << 3;\n\t\t\t\tw += q; continue\n\t\t\t\t;\n\n\t\t\t}\n\n\t\t\tif ( Z )W = H.H.W( W, w + ( 1 << 17 ) ); if ( m == 1 ) {\n\n\t\t\t\tv = b.J; C = b.h; X = ( 1 << 9 ) - 1; u = ( 1 << 5 ) - 1;\n\n\t\t\t}\n\n\t\t\tif ( m == 2 ) {\n\n\t\t\t\tJ = A( N, d, 5 ) + 257;\n\t\t\t\th = A( N, d + 5, 5 ) + 1; Q = A( N, d + 10, 4 ) + 4; d += 14; var j = 1; for ( var c = 0; c < 38; c += 2 ) {\n\n\t\t\t\t\tb.Q[ c ] = 0; b.Q[ c + 1 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var c = 0;\n\t\t\t\t\tc < Q; c ++ ) {\n\n\t\t\t\t\tvar K = A( N, d + c * 3, 3 ); b.Q[ ( b.X[ c ] << 1 ) + 1 ] = K; if ( K > j )j = K\n\t\t\t\t\t;\n\n\t\t\t\t}\n\n\t\t\t\td += 3 * Q; M( b.Q, j ); I( b.Q, j, b.u ); v = b.w; C = b.d;\n\t\t\t\td = l( b.u, ( 1 << j ) - 1, J + h, N, d, b.v ); var r = V.V( b.v, 0, J, b.C ); X = ( 1 << r ) - 1; var S = V.V( b.v, J, h, b.D ); u = ( 1 << S ) - 1; M( b.C, r );\n\t\t\t\tI( b.C, r, v ); M( b.D, S ); I( b.D, S, C )\n\t\t\t\t;\n\n\t\t\t}\n\n\t\t\twhile ( ! 0 ) {\n\n\t\t\t\tvar T = v[ e( N, d ) & X ]; d += T & 15; var p = T >>> 4; if ( p >>> 8 == 0 ) {\n\n\t\t\t\t\tW[ w ++ ] = p;\n\n\t\t\t\t} else if ( p == 256 ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar z = w + p - 254;\n\t\t\t\t\tif ( p > 264 ) {\n\n\t\t\t\t\t\tvar _ = b.q[ p - 257 ]; z = w + ( _ >>> 3 ) + A( N, d, _ & 7 ); d += _ & 7;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar $ = C[ e( N, d ) & u ]; d += $ & 15; var s = $ >>> 4, Y = b.c[ s ], a = ( Y >>> 4 ) + n( N, d, Y & 15 );\n\t\t\t\t\td += Y & 15; while ( w < z ) {\n\n\t\t\t\t\t\tW[ w ] = W[ w ++ - a ]; W[ w ] = W[ w ++ - a ]; W[ w ] = W[ w ++ - a ]; W[ w ] = W[ w ++ - a ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tw = z\n\t\t\t\t\t;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn W.length == w ? W : W.slice( 0, w )\n\t\t;\n\n\t};\n\n\tH.H.W = function ( N, W ) {\n\n\t\tvar R = N.length; if ( W <= R ) return N; var V = new Uint8Array( R << 1 ); V.set( N, 0 ); return V;\n\n\t};\n\n\tH.H.R = function ( N, W, R, V, n, A ) {\n\n\t\tvar l = H.H.e, M = H.H.Z, I = 0; while ( I < R ) {\n\n\t\t\tvar e = N[ M( V, n ) & W ]; n += e & 15; var b = e >>> 4;\n\t\t\tif ( b <= 15 ) {\n\n\t\t\t\tA[ I ] = b; I ++;\n\n\t\t\t} else {\n\n\t\t\t\tvar Z = 0, m = 0; if ( b == 16 ) {\n\n\t\t\t\t\tm = 3 + l( V, n, 2 ); n += 2; Z = A[ I - 1 ];\n\n\t\t\t\t} else if ( b == 17 ) {\n\n\t\t\t\t\tm = 3 + l( V, n, 3 );\n\t\t\t\t\tn += 3\n\t\t\t\t\t;\n\n\t\t\t\t} else if ( b == 18 ) {\n\n\t\t\t\t\tm = 11 + l( V, n, 7 ); n += 7;\n\n\t\t\t\t}\n\n\t\t\t\tvar J = I + m; while ( I < J ) {\n\n\t\t\t\t\tA[ I ] = Z; I ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn n\n\t\t;\n\n\t};\n\n\tH.H.V = function ( N, W, R, V ) {\n\n\t\tvar n = 0, A = 0, l = V.length >>> 1;\n\t\twhile ( A < R ) {\n\n\t\t\tvar M = N[ A + W ]; V[ A << 1 ] = 0; V[ ( A << 1 ) + 1 ] = M; if ( M > n )n = M; A ++;\n\n\t\t}\n\n\t\twhile ( A < l ) {\n\n\t\t\tV[ A << 1 ] = 0; V[ ( A << 1 ) + 1 ] = 0; A ++;\n\n\t\t}\n\n\t\treturn n\n\t\t;\n\n\t};\n\n\tH.H.n = function ( N, W ) {\n\n\t\tvar R = H.H.m, V = N.length, n, A, l, M, I, e = R.j; for ( var M = 0; M <= W; M ++ )e[ M ] = 0; for ( M = 1; M < V; M += 2 )e[ N[ M ] ] ++;\n\t\tvar b = R.K; n = 0; e[ 0 ] = 0; for ( A = 1; A <= W; A ++ ) {\n\n\t\t\tn = n + e[ A - 1 ] << 1; b[ A ] = n;\n\n\t\t}\n\n\t\tfor ( l = 0; l < V; l += 2 ) {\n\n\t\t\tI = N[ l + 1 ]; if ( I != 0 ) {\n\n\t\t\t\tN[ l ] = b[ I ];\n\t\t\t\tb[ I ] ++\n\t\t\t\t;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tH.H.A = function ( N, W, R ) {\n\n\t\tvar V = N.length, n = H.H.m, A = n.r; for ( var l = 0; l < V; l += 2 ) if ( N[ l + 1 ] != 0 ) {\n\n\t\t\tvar M = l >> 1, I = N[ l + 1 ], e = M << 4 | I, b = W - I, Z = N[ l ] << b, m = Z + ( 1 << b );\n\t\t\twhile ( Z != m ) {\n\n\t\t\t\tvar J = A[ Z ] >>> 15 - W; R[ J ] = e; Z ++;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tH.H.l = function ( N, W ) {\n\n\t\tvar R = H.H.m.r, V = 15 - W; for ( var n = 0; n < N.length;\n\t\t\tn += 2 ) {\n\n\t\t\tvar A = N[ n ] << W - N[ n + 1 ]; N[ n ] = R[ A ] >>> V;\n\n\t\t}\n\n\t};\n\n\tH.H.M = function ( N, W, R ) {\n\n\t\tR = R << ( W & 7 ); var V = W >>> 3; N[ V ] |= R; N[ V + 1 ] |= R >>> 8;\n\n\t};\n\n\tH.H.I = function ( N, W, R ) {\n\n\t\tR = R << ( W & 7 ); var V = W >>> 3; N[ V ] |= R; N[ V + 1 ] |= R >>> 8; N[ V + 2 ] |= R >>> 16;\n\n\t};\n\n\tH.H.e = function ( N, W, R ) {\n\n\t\treturn ( N[ W >>> 3 ] | N[ ( W >>> 3 ) + 1 ] << 8 ) >>> ( W & 7 ) & ( 1 << R ) - 1;\n\n\t};\n\n\tH.H.b = function ( N, W, R ) {\n\n\t\treturn ( N[ W >>> 3 ] | N[ ( W >>> 3 ) + 1 ] << 8 | N[ ( W >>> 3 ) + 2 ] << 16 ) >>> ( W & 7 ) & ( 1 << R ) - 1;\n\n\t};\n\n\tH.H.Z = function ( N, W ) {\n\n\t\treturn ( N[ W >>> 3 ] | N[ ( W >>> 3 ) + 1 ] << 8 | N[ ( W >>> 3 ) + 2 ] << 16 ) >>> ( W & 7 );\n\n\t};\n\n\tH.H.i = function ( N, W ) {\n\n\t\treturn ( N[ W >>> 3 ] | N[ ( W >>> 3 ) + 1 ] << 8 | N[ ( W >>> 3 ) + 2 ] << 16 | N[ ( W >>> 3 ) + 3 ] << 24 ) >>> ( W & 7 );\n\n\t};\n\n\tH.H.m = function () {\n\n\t\tvar N = Uint16Array, W = Uint32Array;\n\t\treturn { K: new N( 16 ), j: new N( 16 ), X: [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ], S: [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999 ], T: [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0 ], q: new N( 32 ), p: [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535 ], z: [ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0 ], c: new W( 32 ), J: new N( 512 ), _: [], h: new N( 32 ), $: [], w: new N( 32768 ), C: [], v: [], d: new N( 32768 ), D: [], u: new N( 512 ), Q: [], r: new N( 1 << 15 ), s: new W( 286 ), Y: new W( 30 ), a: new W( 19 ), t: new W( 15e3 ), k: new N( 1 << 16 ), g: new N( 1 << 15 ) }\n\t\t;\n\n\t}();\n\t( function () {\n\n\t\tvar N = H.H.m, W = 1 << 15; for ( var R = 0; R < W; R ++ ) {\n\n\t\t\tvar V = R; V = ( V & 2863311530 ) >>> 1 | ( V & 1431655765 ) << 1;\n\t\t\tV = ( V & 3435973836 ) >>> 2 | ( V & 858993459 ) << 2; V = ( V & 4042322160 ) >>> 4 | ( V & 252645135 ) << 4; V = ( V & 4278255360 ) >>> 8 | ( V & 16711935 ) << 8;\n\t\t\tN.r[ R ] = ( V >>> 16 | V << 16 ) >>> 17\n\t\t\t;\n\n\t\t}\n\n\t\tfunction n( A, l, M ) {\n\n\t\t\twhile ( l -- != 0 )A.push( 0, M )\n\t\t\t;\n\n\t\t}\n\n\t\tfor ( var R = 0; R < 32; R ++ ) {\n\n\t\t\tN.q[ R ] = N.S[ R ] << 3 | N.T[ R ];\n\t\t\tN.c[ R ] = N.p[ R ] << 4 | N.z[ R ]\n\t\t\t;\n\n\t\t}\n\n\t\tn( N._, 144, 8 ); n( N._, 255 - 143, 9 ); n( N._, 279 - 255, 7 ); n( N._, 287 - 279, 8 ); H.H.n( N._, 9 );\n\t\tH.H.A( N._, 9, N.J ); H.H.l( N._, 9 ); n( N.$, 32, 5 ); H.H.n( N.$, 5 ); H.H.A( N.$, 5, N.h ); H.H.l( N.$, 5 ); n( N.Q, 19, 0 ); n( N.C, 286, 0 );\n\t\tn( N.D, 30, 0 ); n( N.v, 320, 0 )\n\t\t;\n\n\t}() );\n\n\treturn H.H.N\n\t;\n\n}();\n\n\nUPNG.decode._readInterlace = function ( data, out ) {\n\n\tvar w = out.width, h = out.height;\n\tvar bpp = UPNG.decode._getBPP( out ), cbpp = bpp >> 3, bpl = Math.ceil( w * bpp / 8 );\n\tvar img = new Uint8Array( h * bpl );\n\tvar di = 0;\n\n\tvar starting_row = [ 0, 0, 4, 0, 2, 0, 1 ];\n\tvar starting_col = [ 0, 4, 0, 2, 0, 1, 0 ];\n\tvar row_increment = [ 8, 8, 8, 4, 4, 2, 2 ];\n\tvar col_increment = [ 8, 8, 4, 4, 2, 2, 1 ];\n\n\tvar pass = 0;\n\twhile ( pass < 7 ) {\n\n\t\tvar ri = row_increment[ pass ], ci = col_increment[ pass ];\n\t\tvar sw = 0, sh = 0;\n\t\tvar cr = starting_row[ pass ]; while ( cr < h ) {\n\n\t\t\tcr += ri; sh ++;\n\n\t\t}\n\n\t\tvar cc = starting_col[ pass ]; while ( cc < w ) {\n\n\t\t\tcc += ci; sw ++;\n\n\t\t}\n\n\t\tvar bpll = Math.ceil( sw * bpp / 8 );\n\t\tUPNG.decode._filterZero( data, out, di, sw, sh );\n\n\t\tvar y = 0, row = starting_row[ pass ];\n\t\tvar val;\n\n\t\twhile ( row < h ) {\n\n\t\t\tvar col = starting_col[ pass ];\n\t\t\tvar cdi = ( di + y * bpll ) << 3;\n\n\t\t\twhile ( col < w ) {\n\n\t\t\t\tif ( bpp == 1 ) {\n\n\t\t\t\t\tval = data[ cdi >> 3 ]; val = ( val >> ( 7 - ( cdi & 7 ) ) ) & 1;\n\t\t\t\t\timg[ row * bpl + ( col >> 3 ) ] |= ( val << ( 7 - ( ( col & 7 ) << 0 ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bpp == 2 ) {\n\n\t\t\t\t\tval = data[ cdi >> 3 ]; val = ( val >> ( 6 - ( cdi & 7 ) ) ) & 3;\n\t\t\t\t\timg[ row * bpl + ( col >> 2 ) ] |= ( val << ( 6 - ( ( col & 3 ) << 1 ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bpp == 4 ) {\n\n\t\t\t\t\tval = data[ cdi >> 3 ]; val = ( val >> ( 4 - ( cdi & 7 ) ) ) & 15;\n\t\t\t\t\timg[ row * bpl + ( col >> 1 ) ] |= ( val << ( 4 - ( ( col & 1 ) << 2 ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bpp >= 8 ) {\n\n\t\t\t\t\tvar ii = row * bpl + col * cbpp;\n\t\t\t\t\tfor ( var j = 0; j < cbpp; j ++ ) img[ ii + j ] = data[ ( cdi >> 3 ) + j ];\n\n\t\t\t\t}\n\n\t\t\t\tcdi += bpp; col += ci;\n\n\t\t\t}\n\n\t\t\ty ++; row += ri;\n\n\t\t}\n\n\t\tif ( sw * sh != 0 ) di += sh * ( 1 + bpll );\n\t\tpass = pass + 1;\n\n\t}\n\n\treturn img;\n\n};\n\nUPNG.decode._getBPP = function ( out ) {\n\n\tvar noc = [ 1, null, 3, 1, 2, null, 4 ][ out.ctype ];\n\treturn noc * out.depth;\n\n};\n\nUPNG.decode._filterZero = function ( data, out, off, w, h ) {\n\n\tvar bpp = UPNG.decode._getBPP( out ), bpl = Math.ceil( w * bpp / 8 ), paeth = UPNG.decode._paeth;\n\tbpp = Math.ceil( bpp / 8 );\n\n\tvar i, di, type = data[ off ], x = 0;\n\n\tif ( type > 1 ) data[ off ] = [ 0, 0, 1 ][ type - 2 ];\n\tif ( type == 3 ) for ( x = bpp; x < bpl; x ++ ) data[ x + 1 ] = ( data[ x + 1 ] + ( data[ x + 1 - bpp ] >>> 1 ) ) & 255;\n\n\tfor ( var y = 0; y < h; y ++ ) {\n\n\t\ti = off + y * bpl; di = i + y + 1;\n\t\ttype = data[ di - 1 ]; x = 0;\n\n\t\tif ( type == 0 ) for ( ; x < bpl; x ++ ) data[ i + x ] = data[ di + x ];\n\t\telse if ( type == 1 ) {\n\n\t\t\tfor ( ; x < bpp; x ++ ) data[ i + x ] = data[ di + x ];\n\t\t\t\t\t\t for ( ; x < bpl; x ++ ) data[ i + x ] = ( data[ di + x ] + data[ i + x - bpp ] );\n\n\t\t} else if ( type == 2 ) {\n\n\t\t\tfor ( ; x < bpl; x ++ ) data[ i + x ] = ( data[ di + x ] + data[ i + x - bpl ] );\n\n\t\t} else if ( type == 3 ) {\n\n\t\t\tfor ( ; x < bpp; x ++ ) data[ i + x ] = ( data[ di + x ] + ( data[ i + x - bpl ] >>> 1 ) );\n\t\t\t for ( ; x < bpl; x ++ ) data[ i + x ] = ( data[ di + x ] + ( ( data[ i + x - bpl ] + data[ i + x - bpp ] ) >>> 1 ) );\n\n\t\t} else {\n\n\t\t\tfor ( ; x < bpp; x ++ ) data[ i + x ] = ( data[ di + x ] + paeth( 0, data[ i + x - bpl ], 0 ) );\n\t\t\t\t\t\t for ( ; x < bpl; x ++ ) data[ i + x ] = ( data[ di + x ] + paeth( data[ i + x - bpp ], data[ i + x - bpl ], data[ i + x - bpp - bpl ] ) );\n\n\t\t}\n\n\t}\n\n\treturn data;\n\n};\n\nUPNG.decode._paeth = function ( a, b, c ) {\n\n\tvar p = a + b - c, pa = ( p - a ), pb = ( p - b ), pc = ( p - c );\n\tif ( pa * pa <= pb * pb && pa * pa <= pc * pc ) return a;\n\telse if ( pb * pb <= pc * pc ) return b;\n\treturn c;\n\n};\n\nUPNG.decode._IHDR = function ( data, offset, out ) {\n\n\tvar bin = UPNG._bin;\n\tout.width = bin.readUint( data, offset ); offset += 4;\n\tout.height = bin.readUint( data, offset ); offset += 4;\n\tout.depth = data[ offset ]; offset ++;\n\tout.ctype = data[ offset ]; offset ++;\n\tout.compress = data[ offset ]; offset ++;\n\tout.filter = data[ offset ]; offset ++;\n\tout.interlace = data[ offset ]; offset ++;\n\n};\n\nUPNG._bin = {\n\tnextZero: function ( data, p ) {\n\n\t\twhile ( data[ p ] != 0 ) p ++; return p;\n\n\t},\n\treadUshort: function ( buff, p ) {\n\n\t\treturn ( buff[ p ] << 8 ) | buff[ p + 1 ];\n\n\t},\n\twriteUshort: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >> 8 ) & 255; buff[ p + 1 ] = n & 255;\n\n\t},\n\treadUint: function ( buff, p ) {\n\n\t\treturn ( buff[ p ] * ( 256 * 256 * 256 ) ) + ( ( buff[ p + 1 ] << 16 ) | ( buff[ p + 2 ] << 8 ) | buff[ p + 3 ] );\n\n\t},\n\twriteUint: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >> 24 ) & 255; buff[ p + 1 ] = ( n >> 16 ) & 255; buff[ p + 2 ] = ( n >> 8 ) & 255; buff[ p + 3 ] = n & 255;\n\n\t},\n\treadASCII: function ( buff, p, l ) {\n\n\t\tvar s = ''; for ( var i = 0; i < l; i ++ ) s += String.fromCharCode( buff[ p + i ] ); return s;\n\n\t},\n\twriteASCII: function ( data, p, s ) {\n\n\t\tfor ( var i = 0; i < s.length; i ++ ) data[ p + i ] = s.charCodeAt( i );\n\n\t},\n\treadBytes: function ( buff, p, l ) {\n\n\t\tvar arr = []; for ( var i = 0; i < l; i ++ ) arr.push( buff[ p + i ] ); return arr;\n\n\t},\n\tpad: function ( n ) {\n\n\t\treturn n.length < 2 ? '0' + n : n;\n\n\t},\n\treadUTF8: function ( buff, p, l ) {\n\n\t\tvar s = '', ns;\n\t\tfor ( var i = 0; i < l; i ++ ) s += '%' + UPNG._bin.pad( buff[ p + i ].toString( 16 ) );\n\t\ttry {\n\n\t\t\tns = decodeURIComponent( s );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn UPNG._bin.readASCII( buff, p, l );\n\n\t\t}\n\n\t\treturn ns;\n\n\t}\n};\nUPNG._copyTile = function ( sb, sw, sh, tb, tw, th, xoff, yoff, mode ) {\n\n\tvar w = Math.min( sw, tw ), h = Math.min( sh, th );\n\tvar si = 0, ti = 0;\n\tfor ( var y = 0; y < h; y ++ )\n\t\tfor ( var x = 0; x < w; x ++ ) {\n\n\t\t\tif ( xoff >= 0 && yoff >= 0 ) {\n\n\t\t\t\tsi = ( y * sw + x ) << 2; ti = ( ( yoff + y ) * tw + xoff + x ) << 2;\n\n\t\t\t} else {\n\n\t\t\t\tsi = ( ( - yoff + y ) * sw - xoff + x ) << 2; ti = ( y * tw + x ) << 2;\n\n\t\t\t}\n\n\t\t\tif ( mode == 0 ) {\n\n\t\t\t\ttb[ ti ] = sb[ si ]; tb[ ti + 1 ] = sb[ si + 1 ]; tb[ ti + 2 ] = sb[ si + 2 ]; tb[ ti + 3 ] = sb[ si + 3 ];\n\n\t\t\t} else if ( mode == 1 ) {\n\n\t\t\t\tvar fa = sb[ si + 3 ] * ( 1 / 255 ), fr = sb[ si ] * fa, fg = sb[ si + 1 ] * fa, fb = sb[ si + 2 ] * fa;\n\t\t\t\tvar ba = tb[ ti + 3 ] * ( 1 / 255 ), br = tb[ ti ] * ba, bg = tb[ ti + 1 ] * ba, bb = tb[ ti + 2 ] * ba;\n\n\t\t\t\tvar ifa = 1 - fa, oa = fa + ba * ifa, ioa = ( oa == 0 ? 0 : 1 / oa );\n\t\t\t\ttb[ ti + 3 ] = 255 * oa;\n\t\t\t\ttb[ ti + 0 ] = ( fr + br * ifa ) * ioa;\n\t\t\t\ttb[ ti + 1 ] = ( fg + bg * ifa ) * ioa;\n\t\t\t\ttb[ ti + 2 ] = ( fb + bb * ifa ) * ioa;\n\n\t\t\t} else if ( mode == 2 ) {\t// copy only differences, otherwise zero\n\n\t\t\t\tvar fa = sb[ si + 3 ], fr = sb[ si ], fg = sb[ si + 1 ], fb = sb[ si + 2 ];\n\t\t\t\tvar ba = tb[ ti + 3 ], br = tb[ ti ], bg = tb[ ti + 1 ], bb = tb[ ti + 2 ];\n\t\t\t\tif ( fa == ba && fr == br && fg == bg && fb == bb ) {\n\n\t\t\t\t\ttb[ ti ] = 0; tb[ ti + 1 ] = 0; tb[ ti + 2 ] = 0; tb[ ti + 3 ] = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttb[ ti ] = fr; tb[ ti + 1 ] = fg; tb[ ti + 2 ] = fb; tb[ ti + 3 ] = fa;\n\n\t\t\t\t}\n\n\t\t\t} else if ( mode == 3 ) {\t// check if can be blended\n\n\t\t\t\tvar fa = sb[ si + 3 ], fr = sb[ si ], fg = sb[ si + 1 ], fb = sb[ si + 2 ];\n\t\t\t\tvar ba = tb[ ti + 3 ], br = tb[ ti ], bg = tb[ ti + 1 ], bb = tb[ ti + 2 ];\n\t\t\t\tif ( fa == ba && fr == br && fg == bg && fb == bb ) continue;\n\t\t\t\t//if(fa!=255 && ba!=0) return false;\n\t\t\t\tif ( fa < 220 && ba > 20 ) return false;\n\n\t\t\t}\n\n\t\t}\n\n\treturn true;\n\n};\n\nexport { RGBMLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tVector3\n} from 'three';\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\n\nclass STLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction isBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n\t\t\tconst n_faces = reader.getUint32( 80, true );\n\t\t\tconst expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// An ASCII STL data must begin with 'solid ' as the first six bytes.\n\t\t\t// However, ASCII STLs lacking the SPACE after the 'd' are known to be\n\t\t\t// plentiful. So, check the first 5 bytes for 'solid'.\n\n\t\t\t// Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n\t\t\t// https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n\t\t\t// Search for \"solid\" to start anywhere after those prefixes.\n\n\t\t\t// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n\t\t\tconst solid = [ 115, 111, 108, 105, 100 ];\n\n\t\t\tfor ( let off = 0; off < 5; off ++ ) {\n\n\t\t\t\t// If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n\t\t\t\tif ( matchDataViewAt( solid, reader, off ) ) return false;\n\n\t\t\t}\n\n\t\t\t// Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction matchDataViewAt( query, reader, offset ) {\n\n\t\t\t// Check if each byte in query matches the corresponding byte from the current offset\n\n\t\t\tfor ( let i = 0, il = query.length; i < il; i ++ ) {\n\n\t\t\t\tif ( query[ i ] !== reader.getUint8( offset + i ) ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst faces = reader.getUint32( 80, true );\n\n\t\t\tlet r, g, b, hasColors = false, colors;\n\t\t\tlet defaultR, defaultG, defaultB, alpha;\n\n\t\t\t// process STL header\n\t\t\t// check for default color in header (\"COLOR=rgba\" sequence).\n\n\t\t\tfor ( let index = 0; index < 80 - 10; index ++ ) {\n\n\t\t\t\tif ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n\t\t\t\t\thasColors = true;\n\t\t\t\t\tcolors = new Float32Array( faces * 3 * 3 );\n\n\t\t\t\t\tdefaultR = reader.getUint8( index + 6 ) / 255;\n\t\t\t\t\tdefaultG = reader.getUint8( index + 7 ) / 255;\n\t\t\t\t\tdefaultB = reader.getUint8( index + 8 ) / 255;\n\t\t\t\t\talpha = reader.getUint8( index + 9 ) / 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst dataOffset = 84;\n\t\t\tconst faceLength = 12 * 4 + 2;\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst vertices = new Float32Array( faces * 3 * 3 );\n\t\t\tconst normals = new Float32Array( faces * 3 * 3 );\n\n\t\t\tconst color = new Color();\n\n\t\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\t\tconst start = dataOffset + face * faceLength;\n\t\t\t\tconst normalX = reader.getFloat32( start, true );\n\t\t\t\tconst normalY = reader.getFloat32( start + 4, true );\n\t\t\t\tconst normalZ = reader.getFloat32( start + 8, true );\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tconst packedColor = reader.getUint16( start + 48, true );\n\n\t\t\t\t\tif ( ( packedColor & 0x8000 ) === 0 ) {\n\n\t\t\t\t\t\t// facet has its own unique color\n\n\t\t\t\t\t\tr = ( packedColor & 0x1F ) / 31;\n\t\t\t\t\t\tg = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n\t\t\t\t\t\tb = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tr = defaultR;\n\t\t\t\t\t\tg = defaultG;\n\t\t\t\t\t\tb = defaultB;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 1; i <= 3; i ++ ) {\n\n\t\t\t\t\tconst vertexstart = start + i * 12;\n\t\t\t\t\tconst componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );\n\n\t\t\t\t\tvertices[ componentIdx ] = reader.getFloat32( vertexstart, true );\n\t\t\t\t\tvertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );\n\t\t\t\t\tvertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );\n\n\t\t\t\t\tnormals[ componentIdx ] = normalX;\n\t\t\t\t\tnormals[ componentIdx + 1 ] = normalY;\n\t\t\t\t\tnormals[ componentIdx + 2 ] = normalZ;\n\n\t\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\t\tcolors[ componentIdx ] = color.r;\n\t\t\t\t\t\tcolors[ componentIdx + 1 ] = color.g;\n\t\t\t\t\t\tcolors[ componentIdx + 2 ] = color.b;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\t\t\t\tgeometry.hasColors = true;\n\t\t\t\tgeometry.alpha = alpha;\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst patternSolid = /solid([\\s\\S]*?)endsolid/g;\n\t\t\tconst patternFace = /facet([\\s\\S]*?)endfacet/g;\n\t\t\tconst patternName = /solid\\s(.+)/;\n\t\t\tlet faceCounter = 0;\n\n\t\t\tconst patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n\t\t\tconst patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n\t\t\tconst patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst groupNames = [];\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tlet result;\n\n\t\t\tlet groupCount = 0;\n\t\t\tlet startVertex = 0;\n\t\t\tlet endVertex = 0;\n\n\t\t\twhile ( ( result = patternSolid.exec( data ) ) !== null ) {\n\n\t\t\t\tstartVertex = endVertex;\n\n\t\t\t\tconst solid = result[ 0 ];\n\n\t\t\t\tconst name = ( result = patternName.exec( solid ) ) !== null ? result[ 1 ] : '';\n\t\t\t\tgroupNames.push( name );\n\n\t\t\t\twhile ( ( result = patternFace.exec( solid ) ) !== null ) {\n\n\t\t\t\t\tlet vertexCountPerFace = 0;\n\t\t\t\t\tlet normalCountPerFace = 0;\n\n\t\t\t\t\tconst text = result[ 0 ];\n\n\t\t\t\t\twhile ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tnormal.x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tnormal.y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tnormal.z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tnormalCountPerFace ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tvertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\t\t\tvertexCountPerFace ++;\n\t\t\t\t\t\tendVertex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// every face have to own ONE valid normal\n\n\t\t\t\t\tif ( normalCountPerFace !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// each face have to own THREE valid vertices\n\n\t\t\t\t\tif ( vertexCountPerFace !== 3 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCounter ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst start = startVertex;\n\t\t\t\tconst count = endVertex - startVertex;\n\n\t\t\t\tgeometry.userData.groupNames = groupNames;\n\n\t\t\t\tgeometry.addGroup( start, count, groupCount );\n\t\t\t\tgroupCount ++;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction ensureString( buffer ) {\n\n\t\t\tif ( typeof buffer !== 'string' ) {\n\n\t\t\t\treturn new TextDecoder().decode( buffer );\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction ensureBinary( buffer ) {\n\n\t\t\tif ( typeof buffer === 'string' ) {\n\n\t\t\t\tconst array_buffer = new Uint8Array( buffer.length );\n\t\t\t\tfor ( let i = 0; i < buffer.length; i ++ ) {\n\n\t\t\t\t\tarray_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n\t\t\t\t}\n\n\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t} else {\n\n\t\t\t\treturn buffer;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// start\n\n\t\tconst binData = ensureBinary( data );\n\n\t\treturn isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n\t}\n\n}\n\nexport { STLLoader };\n", "import {\n\tBox2,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tMatrix3,\n\tPath,\n\tShape,\n\tShapePath,\n\tShapeUtils,\n\tSRGBColorSpace,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst COLOR_SPACE_SVG = SRGBColorSpace;\n\nclass SVGLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t// Default dots per inch\n\t\tthis.defaultDPI = 90;\n\n\t\t// Accepted units: 'mm', 'cm', 'in', 'pt', 'pc', 'px'\n\t\tthis.defaultUnit = 'px';\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst scope = this;\n\n\t\tfunction parseNode( node, style ) {\n\n\t\t\tif ( node.nodeType !== 1 ) return;\n\n\t\t\tconst transform = getNodeTransform( node );\n\n\t\t\tlet isDefsNode = false;\n\n\t\t\tlet path = null;\n\n\t\t\tswitch ( node.nodeName ) {\n\n\t\t\t\tcase 'svg':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'style':\n\t\t\t\t\tparseCSSStylesheet( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'g':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'path':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tif ( node.hasAttribute( 'd' ) ) path = parsePathNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rect':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseRectNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'polygon':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parsePolygonNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'polyline':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parsePolylineNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'circle':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseCircleNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ellipse':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseEllipseNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'line':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseLineNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'defs':\n\t\t\t\t\tisDefsNode = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'use':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\n\t\t\t\t\tconst href = node.getAttributeNS( 'http://www.w3.org/1999/xlink', 'href' ) || '';\n\t\t\t\t\tconst usedNodeId = href.substring( 1 );\n\t\t\t\t\tconst usedNode = node.viewportElement.getElementById( usedNodeId );\n\t\t\t\t\tif ( usedNode ) {\n\n\t\t\t\t\t\tparseNode( usedNode, style );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'SVGLoader: \\'use node\\' references non-existent node id: ' + usedNodeId );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log( node );\n\n\t\t\t}\n\n\t\t\tif ( path ) {\n\n\t\t\t\tif ( style.fill !== undefined && style.fill !== 'none' ) {\n\n\t\t\t\t\tpath.color.setStyle( style.fill, COLOR_SPACE_SVG );\n\n\t\t\t\t}\n\n\t\t\t\ttransformPath( path, currentTransform );\n\n\t\t\t\tpaths.push( path );\n\n\t\t\t\tpath.userData = { node: node, style: style };\n\n\t\t\t}\n\n\t\t\tconst childNodes = node.childNodes;\n\n\t\t\tfor ( let i = 0; i < childNodes.length; i ++ ) {\n\n\t\t\t\tconst node = childNodes[ i ];\n\n\t\t\t\tif ( isDefsNode && node.nodeName !== 'style' && node.nodeName !== 'defs' ) {\n\n\t\t\t\t\t// Ignore everything in defs except CSS style definitions\n\t\t\t\t\t// and nested defs, because it is OK by the standard to have\n\t\t\t\t\t// \n\n`,c=`\n\n`,f=`\n\n\n\n\n`,p=`\n
\n`,l=`\n\n`,m=`\n\n`;return s+c+f+p+l+m}cr.createSyntaxDiagramsCode=Iu});var Fa=R(E=>{\"use strict\";Object.defineProperty(E,\"__esModule\",{value:!0});E.Parser=E.createSyntaxDiagramsCode=E.clearCache=E.GAstVisitor=E.serializeProduction=E.serializeGrammar=E.Terminal=E.Rule=E.RepetitionWithSeparator=E.RepetitionMandatoryWithSeparator=E.RepetitionMandatory=E.Repetition=E.Option=E.NonTerminal=E.Alternative=E.Alternation=E.defaultLexerErrorProvider=E.NoViableAltException=E.NotAllInputParsedException=E.MismatchedTokenException=E.isRecognitionException=E.EarlyExitException=E.defaultParserErrorProvider=E.tokenName=E.tokenMatcher=E.tokenLabel=E.EOF=E.createTokenInstance=E.createToken=E.LexerDefinitionErrorType=E.Lexer=E.EMPTY_ALT=E.ParserDefinitionErrorType=E.EmbeddedActionsParser=E.CstParser=E.VERSION=void 0;var ku=Er();Object.defineProperty(E,\"VERSION\",{enumerable:!0,get:function(){return ku.VERSION}});var lr=ce();Object.defineProperty(E,\"CstParser\",{enumerable:!0,get:function(){return lr.CstParser}});Object.defineProperty(E,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return lr.EmbeddedActionsParser}});Object.defineProperty(E,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return lr.ParserDefinitionErrorType}});Object.defineProperty(E,\"EMPTY_ALT\",{enumerable:!0,get:function(){return lr.EMPTY_ALT}});var Ma=ft();Object.defineProperty(E,\"Lexer\",{enumerable:!0,get:function(){return Ma.Lexer}});Object.defineProperty(E,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return Ma.LexerDefinitionErrorType}});var nt=Ue();Object.defineProperty(E,\"createToken\",{enumerable:!0,get:function(){return nt.createToken}});Object.defineProperty(E,\"createTokenInstance\",{enumerable:!0,get:function(){return nt.createTokenInstance}});Object.defineProperty(E,\"EOF\",{enumerable:!0,get:function(){return nt.EOF}});Object.defineProperty(E,\"tokenLabel\",{enumerable:!0,get:function(){return nt.tokenLabel}});Object.defineProperty(E,\"tokenMatcher\",{enumerable:!0,get:function(){return nt.tokenMatcher}});Object.defineProperty(E,\"tokenName\",{enumerable:!0,get:function(){return nt.tokenName}});var Pu=mt();Object.defineProperty(E,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Pu.defaultParserErrorProvider}});var Nt=et();Object.defineProperty(E,\"EarlyExitException\",{enumerable:!0,get:function(){return Nt.EarlyExitException}});Object.defineProperty(E,\"isRecognitionException\",{enumerable:!0,get:function(){return Nt.isRecognitionException}});Object.defineProperty(E,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Nt.MismatchedTokenException}});Object.defineProperty(E,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Nt.NotAllInputParsedException}});Object.defineProperty(E,\"NoViableAltException\",{enumerable:!0,get:function(){return Nt.NoViableAltException}});var Su=kr();Object.defineProperty(E,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return Su.defaultLexerErrorProvider}});var Se=ne();Object.defineProperty(E,\"Alternation\",{enumerable:!0,get:function(){return Se.Alternation}});Object.defineProperty(E,\"Alternative\",{enumerable:!0,get:function(){return Se.Alternative}});Object.defineProperty(E,\"NonTerminal\",{enumerable:!0,get:function(){return Se.NonTerminal}});Object.defineProperty(E,\"Option\",{enumerable:!0,get:function(){return Se.Option}});Object.defineProperty(E,\"Repetition\",{enumerable:!0,get:function(){return Se.Repetition}});Object.defineProperty(E,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Se.RepetitionMandatory}});Object.defineProperty(E,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Se.RepetitionMandatoryWithSeparator}});Object.defineProperty(E,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Se.RepetitionWithSeparator}});Object.defineProperty(E,\"Rule\",{enumerable:!0,get:function(){return Se.Rule}});Object.defineProperty(E,\"Terminal\",{enumerable:!0,get:function(){return Se.Terminal}});var ba=ne();Object.defineProperty(E,\"serializeGrammar\",{enumerable:!0,get:function(){return ba.serializeGrammar}});Object.defineProperty(E,\"serializeProduction\",{enumerable:!0,get:function(){return ba.serializeProduction}});var xu=$e();Object.defineProperty(E,\"GAstVisitor\",{enumerable:!0,get:function(){return xu.GAstVisitor}});function Cu(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}E.clearCache=Cu;var Lu=La();Object.defineProperty(E,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return Lu.createSyntaxDiagramsCode}});var Mu=function(){function t(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return t}();E.Parser=Mu});export default Fa();\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tConeGeometry,\n\tCylinderGeometry,\n\tDataTexture,\n\tDoubleSide,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tLoaderUtils,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhongMaterial,\n\tObject3D,\n\tPoints,\n\tPointsMaterial,\n\tQuaternion,\n\tRepeatWrapping,\n\tScene,\n\tShapeUtils,\n\tSphereGeometry,\n\tSRGBColorSpace,\n\tTextureLoader,\n\tVector2,\n\tVector3\n} from 'three';\nimport chevrotain from '../libs/chevrotain.module.min.js';\n\n\nclass VRMLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data, path ) {\n\n\t\tconst nodeMap = {};\n\n\t\tfunction generateVRMLTree( data ) {\n\n\t\t\t// create lexer, parser and visitor\n\n\t\t\tconst tokenData = createTokens();\n\n\t\t\tconst lexer = new VRMLLexer( tokenData.tokens );\n\t\t\tconst parser = new VRMLParser( tokenData.tokenVocabulary );\n\t\t\tconst visitor = createVisitor( parser.getBaseCstVisitorConstructor() );\n\n\t\t\t// lexing\n\n\t\t\tconst lexingResult = lexer.lex( data );\n\t\t\tparser.input = lexingResult.tokens;\n\n\t\t\t// parsing\n\n\t\t\tconst cstOutput = parser.vrml();\n\n\t\t\tif ( parser.errors.length > 0 ) {\n\n\t\t\t\tconsole.error( parser.errors );\n\n\t\t\t\tthrow Error( 'THREE.VRMLLoader: Parsing errors detected.' );\n\n\t\t\t}\n\n\t\t\t// actions\n\n\t\t\tconst ast = visitor.visit( cstOutput );\n\n\t\t\treturn ast;\n\n\t\t}\n\n\t\tfunction createTokens() {\n\n\t\t\tconst createToken = chevrotain.createToken;\n\n\t\t\t// from http://gun.teipir.gr/VRML-amgem/spec/part1/concepts.html#SyntaxBasics\n\n\t\t\tconst RouteIdentifier = createToken( { name: 'RouteIdentifier', pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*[\\.][^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*/ } );\n\t\t\tconst Identifier = createToken( { name: 'Identifier', pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]([^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d])*/, longer_alt: RouteIdentifier } );\n\n\t\t\t// from http://gun.teipir.gr/VRML-amgem/spec/part1/nodesRef.html\n\n\t\t\tconst nodeTypes = [\n\t\t\t\t'Anchor', 'Billboard', 'Collision', 'Group', 'Transform', // grouping nodes\n\t\t\t\t'Inline', 'LOD', 'Switch', // special groups\n\t\t\t\t'AudioClip', 'DirectionalLight', 'PointLight', 'Script', 'Shape', 'Sound', 'SpotLight', 'WorldInfo', // common nodes\n\t\t\t\t'CylinderSensor', 'PlaneSensor', 'ProximitySensor', 'SphereSensor', 'TimeSensor', 'TouchSensor', 'VisibilitySensor', // sensors\n\t\t\t\t'Box', 'Cone', 'Cylinder', 'ElevationGrid', 'Extrusion', 'IndexedFaceSet', 'IndexedLineSet', 'PointSet', 'Sphere', // geometries\n\t\t\t\t'Color', 'Coordinate', 'Normal', 'TextureCoordinate', // geometric properties\n\t\t\t\t'Appearance', 'FontStyle', 'ImageTexture', 'Material', 'MovieTexture', 'PixelTexture', 'TextureTransform', // appearance\n\t\t\t\t'ColorInterpolator', 'CoordinateInterpolator', 'NormalInterpolator', 'OrientationInterpolator', 'PositionInterpolator', 'ScalarInterpolator', // interpolators\n\t\t\t\t'Background', 'Fog', 'NavigationInfo', 'Viewpoint', // bindable nodes\n\t\t\t\t'Text' // Text must be placed at the end of the regex so there are no matches for TextureTransform and TextureCoordinate\n\t\t\t];\n\n\t\t\t//\n\n\t\t\tconst Version = createToken( {\n\t\t\t\tname: 'Version',\n\t\t\t\tpattern: /#VRML.*/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst NodeName = createToken( {\n\t\t\t\tname: 'NodeName',\n\t\t\t\tpattern: new RegExp( nodeTypes.join( '|' ) ),\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst DEF = createToken( {\n\t\t\t\tname: 'DEF',\n\t\t\t\tpattern: /DEF/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst USE = createToken( {\n\t\t\t\tname: 'USE',\n\t\t\t\tpattern: /USE/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst ROUTE = createToken( {\n\t\t\t\tname: 'ROUTE',\n\t\t\t\tpattern: /ROUTE/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst TO = createToken( {\n\t\t\t\tname: 'TO',\n\t\t\t\tpattern: /TO/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\t//\n\n\t\t\tconst StringLiteral = createToken( { name: 'StringLiteral', pattern: /\"(?:[^\\\\\"\\n\\r]|\\\\[bfnrtv\"\\\\/]|\\\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*\"/ } );\n\t\t\tconst HexLiteral = createToken( { name: 'HexLiteral', pattern: /0[xX][0-9a-fA-F]+/ } );\n\t\t\tconst NumberLiteral = createToken( { name: 'NumberLiteral', pattern: /[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?/ } );\n\t\t\tconst TrueLiteral = createToken( { name: 'TrueLiteral', pattern: /TRUE/ } );\n\t\t\tconst FalseLiteral = createToken( { name: 'FalseLiteral', pattern: /FALSE/ } );\n\t\t\tconst NullLiteral = createToken( { name: 'NullLiteral', pattern: /NULL/ } );\n\t\t\tconst LSquare = createToken( { name: 'LSquare', pattern: /\\[/ } );\n\t\t\tconst RSquare = createToken( { name: 'RSquare', pattern: /]/ } );\n\t\t\tconst LCurly = createToken( { name: 'LCurly', pattern: /{/ } );\n\t\t\tconst RCurly = createToken( { name: 'RCurly', pattern: /}/ } );\n\t\t\tconst Comment = createToken( {\n\t\t\t\tname: 'Comment',\n\t\t\t\tpattern: /#.*/,\n\t\t\t\tgroup: chevrotain.Lexer.SKIPPED\n\t\t\t} );\n\n\t\t\t// commas, blanks, tabs, newlines and carriage returns are whitespace characters wherever they appear outside of string fields\n\n\t\t\tconst WhiteSpace = createToken( {\n\t\t\t\tname: 'WhiteSpace',\n\t\t\t\tpattern: /[ ,\\s]/,\n\t\t\t\tgroup: chevrotain.Lexer.SKIPPED\n\t\t\t} );\n\n\t\t\tconst tokens = [\n\t\t\t\tWhiteSpace,\n\t\t\t\t// keywords appear before the Identifier\n\t\t\t\tNodeName,\n\t\t\t\tDEF,\n\t\t\t\tUSE,\n\t\t\t\tROUTE,\n\t\t\t\tTO,\n\t\t\t\tTrueLiteral,\n\t\t\t\tFalseLiteral,\n\t\t\t\tNullLiteral,\n\t\t\t\t// the Identifier must appear after the keywords because all keywords are valid identifiers\n\t\t\t\tVersion,\n\t\t\t\tIdentifier,\n\t\t\t\tRouteIdentifier,\n\t\t\t\tStringLiteral,\n\t\t\t\tHexLiteral,\n\t\t\t\tNumberLiteral,\n\t\t\t\tLSquare,\n\t\t\t\tRSquare,\n\t\t\t\tLCurly,\n\t\t\t\tRCurly,\n\t\t\t\tComment\n\t\t\t];\n\n\t\t\tconst tokenVocabulary = {};\n\n\t\t\tfor ( let i = 0, l = tokens.length; i < l; i ++ ) {\n\n\t\t\t\tconst token = tokens[ i ];\n\n\t\t\t\ttokenVocabulary[ token.name ] = token;\n\n\t\t\t}\n\n\t\t\treturn { tokens: tokens, tokenVocabulary: tokenVocabulary };\n\n\t\t}\n\n\n\t\tfunction createVisitor( BaseVRMLVisitor ) {\n\n\t\t\t// the visitor is created dynmaically based on the given base class\n\n\t\t\tclass VRMLToASTVisitor extends BaseVRMLVisitor {\n\n\t\t\t\tconstructor() {\n\n\t\t\t\t\tsuper();\n\n\t\t\t\t\tthis.validateVisitor();\n\n\t\t\t\t}\n\n\t\t\t\tvrml( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tversion: this.visit( ctx.version ),\n\t\t\t\t\t\tnodes: [],\n\t\t\t\t\t\troutes: []\n\t\t\t\t\t};\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.node.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst node = ctx.node[ i ];\n\n\t\t\t\t\t\tdata.nodes.push( this.visit( node ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.route ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = ctx.route.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst route = ctx.route[ i ];\n\n\t\t\t\t\t\t\tdata.routes.push( this.visit( route ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t\tversion( ctx ) {\n\n\t\t\t\t\treturn ctx.Version[ 0 ].image;\n\n\t\t\t\t}\n\n\t\t\t\tnode( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tname: ctx.NodeName[ 0 ].image,\n\t\t\t\t\t\tfields: []\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( ctx.field ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = ctx.field.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst field = ctx.field[ i ];\n\n\t\t\t\t\t\t\tdata.fields.push( this.visit( field ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// DEF\n\n\t\t\t\t\tif ( ctx.def ) {\n\n\t\t\t\t\t\tdata.DEF = this.visit( ctx.def[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t\tfield( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tname: ctx.Identifier[ 0 ].image,\n\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\tvalues: null\n\t\t\t\t\t};\n\n\t\t\t\t\tlet result;\n\n\t\t\t\t\t// SFValue\n\n\t\t\t\t\tif ( ctx.singleFieldValue ) {\n\n\t\t\t\t\t\tresult = this.visit( ctx.singleFieldValue[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// MFValue\n\n\t\t\t\t\tif ( ctx.multiFieldValue ) {\n\n\t\t\t\t\t\tresult = this.visit( ctx.multiFieldValue[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdata.type = result.type;\n\t\t\t\t\tdata.values = result.values;\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t\tdef( ctx ) {\n\n\t\t\t\t\treturn ( ctx.Identifier || ctx.NodeName )[ 0 ].image;\n\n\t\t\t\t}\n\n\t\t\t\tuse( ctx ) {\n\n\t\t\t\t\treturn { USE: ( ctx.Identifier || ctx.NodeName )[ 0 ].image };\n\n\t\t\t\t}\n\n\t\t\t\tsingleFieldValue( ctx ) {\n\n\t\t\t\t\treturn processField( this, ctx );\n\n\t\t\t\t}\n\n\t\t\t\tmultiFieldValue( ctx ) {\n\n\t\t\t\t\treturn processField( this, ctx );\n\n\t\t\t\t}\n\n\t\t\t\troute( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tFROM: ctx.RouteIdentifier[ 0 ].image,\n\t\t\t\t\t\tTO: ctx.RouteIdentifier[ 1 ].image\n\t\t\t\t\t};\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction processField( scope, ctx ) {\n\n\t\t\t\tconst field = {\n\t\t\t\t\ttype: null,\n\t\t\t\t\tvalues: []\n\t\t\t\t};\n\n\t\t\t\tif ( ctx.node ) {\n\n\t\t\t\t\tfield.type = 'node';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.node.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst node = ctx.node[ i ];\n\n\t\t\t\t\t\tfield.values.push( scope.visit( node ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.use ) {\n\n\t\t\t\t\tfield.type = 'use';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.use.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst use = ctx.use[ i ];\n\n\t\t\t\t\t\tfield.values.push( scope.visit( use ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.StringLiteral ) {\n\n\t\t\t\t\tfield.type = 'string';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.StringLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst stringLiteral = ctx.StringLiteral[ i ];\n\n\t\t\t\t\t\tfield.values.push( stringLiteral.image.replace( /'|\"/g, '' ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.NumberLiteral ) {\n\n\t\t\t\t\tfield.type = 'number';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.NumberLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst numberLiteral = ctx.NumberLiteral[ i ];\n\n\t\t\t\t\t\tfield.values.push( parseFloat( numberLiteral.image ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.HexLiteral ) {\n\n\t\t\t\t\tfield.type = 'hex';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.HexLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst hexLiteral = ctx.HexLiteral[ i ];\n\n\t\t\t\t\t\tfield.values.push( hexLiteral.image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.TrueLiteral ) {\n\n\t\t\t\t\tfield.type = 'boolean';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.TrueLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst trueLiteral = ctx.TrueLiteral[ i ];\n\n\t\t\t\t\t\tif ( trueLiteral.image === 'TRUE' ) field.values.push( true );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.FalseLiteral ) {\n\n\t\t\t\t\tfield.type = 'boolean';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.FalseLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst falseLiteral = ctx.FalseLiteral[ i ];\n\n\t\t\t\t\t\tif ( falseLiteral.image === 'FALSE' ) field.values.push( false );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.NullLiteral ) {\n\n\t\t\t\t\tfield.type = 'null';\n\n\t\t\t\t\tctx.NullLiteral.forEach( function () {\n\n\t\t\t\t\t\tfield.values.push( null );\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\treturn field;\n\n\t\t\t}\n\n\t\t\treturn new VRMLToASTVisitor();\n\n\t\t}\n\n\t\tfunction parseTree( tree ) {\n\n\t\t\t// console.log( JSON.stringify( tree, null, 2 ) );\n\n\t\t\tconst nodes = tree.nodes;\n\t\t\tconst scene = new Scene();\n\n\t\t\t// first iteration: build nodemap based on DEF statements\n\n\t\t\tfor ( let i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\n\t\t\t\tbuildNodeMap( node );\n\n\t\t\t}\n\n\t\t\t// second iteration: build nodes\n\n\t\t\tfor ( let i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst object = getNode( node );\n\n\t\t\t\tif ( object instanceof Object3D ) scene.add( object );\n\n\t\t\t\tif ( node.name === 'WorldInfo' ) scene.userData.worldInfo = object;\n\n\t\t\t}\n\n\t\t\treturn scene;\n\n\t\t}\n\n\t\tfunction buildNodeMap( node ) {\n\n\t\t\tif ( node.DEF ) {\n\n\t\t\t\tnodeMap[ node.DEF ] = node;\n\n\t\t\t}\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\n\t\t\t\tif ( field.type === 'node' ) {\n\n\t\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\t\tfor ( let j = 0, jl = fieldValues.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tbuildNodeMap( fieldValues[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tfunction getNode( node ) {\n\n\t\t\t// handle case where a node refers to a different one\n\n\t\t\tif ( node.USE ) {\n\n\t\t\t\treturn resolveUSE( node.USE );\n\n\t\t\t}\n\n\t\t\tif ( node.build !== undefined ) return node.build;\n\n\t\t\tnode.build = buildNode( node );\n\n\t\t\treturn node.build;\n\n\t\t}\n\n\t\t// node builder\n\n\t\tfunction buildNode( node ) {\n\n\t\t\tconst nodeName = node.name;\n\t\t\tlet build;\n\n\t\t\tswitch ( nodeName ) {\n\n\t\t\t\tcase 'Anchor':\n\t\t\t\tcase 'Group':\n\t\t\t\tcase 'Transform':\n\t\t\t\tcase 'Collision':\n\t\t\t\t\tbuild = buildGroupingNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Background':\n\t\t\t\t\tbuild = buildBackgroundNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Shape':\n\t\t\t\t\tbuild = buildShapeNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Appearance':\n\t\t\t\t\tbuild = buildAppearanceNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Material':\n\t\t\t\t\tbuild = buildMaterialNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ImageTexture':\n\t\t\t\t\tbuild = buildImageTextureNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PixelTexture':\n\t\t\t\t\tbuild = buildPixelTextureNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'TextureTransform':\n\t\t\t\t\tbuild = buildTextureTransformNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'IndexedFaceSet':\n\t\t\t\t\tbuild = buildIndexedFaceSetNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'IndexedLineSet':\n\t\t\t\t\tbuild = buildIndexedLineSetNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointSet':\n\t\t\t\t\tbuild = buildPointSetNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Box':\n\t\t\t\t\tbuild = buildBoxNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Cone':\n\t\t\t\t\tbuild = buildConeNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Cylinder':\n\t\t\t\t\tbuild = buildCylinderNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Sphere':\n\t\t\t\t\tbuild = buildSphereNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ElevationGrid':\n\t\t\t\t\tbuild = buildElevationGridNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Extrusion':\n\t\t\t\t\tbuild = buildExtrusionNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Color':\n\t\t\t\tcase 'Coordinate':\n\t\t\t\tcase 'Normal':\n\t\t\t\tcase 'TextureCoordinate':\n\t\t\t\t\tbuild = buildGeometricNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WorldInfo':\n\t\t\t\t\tbuild = buildWorldInfoNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Billboard':\n\n\t\t\t\tcase 'Inline':\n\t\t\t\tcase 'LOD':\n\t\t\t\tcase 'Switch':\n\n\t\t\t\tcase 'AudioClip':\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\tcase 'PointLight':\n\t\t\t\tcase 'Script':\n\t\t\t\tcase 'Sound':\n\t\t\t\tcase 'SpotLight':\n\n\t\t\t\tcase 'CylinderSensor':\n\t\t\t\tcase 'PlaneSensor':\n\t\t\t\tcase 'ProximitySensor':\n\t\t\t\tcase 'SphereSensor':\n\t\t\t\tcase 'TimeSensor':\n\t\t\t\tcase 'TouchSensor':\n\t\t\t\tcase 'VisibilitySensor':\n\n\t\t\t\tcase 'Text':\n\n\t\t\t\tcase 'FontStyle':\n\t\t\t\tcase 'MovieTexture':\n\n\t\t\t\tcase 'ColorInterpolator':\n\t\t\t\tcase 'CoordinateInterpolator':\n\t\t\t\tcase 'NormalInterpolator':\n\t\t\t\tcase 'OrientationInterpolator':\n\t\t\t\tcase 'PositionInterpolator':\n\t\t\t\tcase 'ScalarInterpolator':\n\n\t\t\t\tcase 'Fog':\n\t\t\t\tcase 'NavigationInfo':\n\t\t\t\tcase 'Viewpoint':\n\t\t\t\t\t// node not supported yet\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown node:', nodeName );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( build !== undefined && node.DEF !== undefined && build.hasOwnProperty( 'name' ) === true ) {\n\n\t\t\t\tbuild.name = node.DEF;\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGroupingNode( node ) {\n\n\t\t\tconst object = new Group();\n\n\t\t\t//\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'bboxCenter':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bboxSize':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'center':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'children':\n\t\t\t\t\t\tparseFieldChildren( fieldValues, object );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'description':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'collide':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'parameter':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotation':\n\t\t\t\t\t\tconst axis = new Vector3( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] ).normalize();\n\t\t\t\t\t\tconst angle = fieldValues[ 3 ];\n\t\t\t\t\t\tobject.quaternion.setFromAxisAngle( axis, angle );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tobject.scale.set( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scaleOrientation':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translation':\n\t\t\t\t\t\tobject.position.set( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'proxy':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'url':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tfunction buildBackgroundNode( node ) {\n\n\t\t\tconst group = new Group();\n\n\t\t\tlet groundAngle, groundColor;\n\t\t\tlet skyAngle, skyColor;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'groundAngle':\n\t\t\t\t\t\tgroundAngle = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'groundColor':\n\t\t\t\t\t\tgroundColor = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'backUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bottomUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'frontUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'leftUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rightUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'topUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skyAngle':\n\t\t\t\t\t\tskyAngle = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skyColor':\n\t\t\t\t\t\tskyColor = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst radius = 10000;\n\n\t\t\t// sky\n\n\t\t\tif ( skyColor ) {\n\n\t\t\t\tconst skyGeometry = new SphereGeometry( radius, 32, 16 );\n\t\t\t\tconst skyMaterial = new MeshBasicMaterial( { fog: false, side: BackSide, depthWrite: false, depthTest: false } );\n\n\t\t\t\tif ( skyColor.length > 3 ) {\n\n\t\t\t\t\tpaintFaces( skyGeometry, radius, skyAngle, toColorArray( skyColor ), true );\n\t\t\t\t\tskyMaterial.vertexColors = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tskyMaterial.color.setRGB( skyColor[ 0 ], skyColor[ 1 ], skyColor[ 2 ] );\n\t\t\t\t\tskyMaterial.color.convertSRGBToLinear();\n\n\t\t\t\t}\n\n\t\t\t\tconst sky = new Mesh( skyGeometry, skyMaterial );\n\t\t\t\tgroup.add( sky );\n\n\t\t\t}\n\n\t\t\t// ground\n\n\t\t\tif ( groundColor ) {\n\n\t\t\t\tif ( groundColor.length > 0 ) {\n\n\t\t\t\t\tconst groundGeometry = new SphereGeometry( radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI );\n\t\t\t\t\tconst groundMaterial = new MeshBasicMaterial( { fog: false, side: BackSide, vertexColors: true, depthWrite: false, depthTest: false } );\n\n\t\t\t\t\tpaintFaces( groundGeometry, radius, groundAngle, toColorArray( groundColor ), false );\n\n\t\t\t\t\tconst ground = new Mesh( groundGeometry, groundMaterial );\n\t\t\t\t\tgroup.add( ground );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// render background group first\n\n\t\t\tgroup.renderOrder = - Infinity;\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction buildShapeNode( node ) {\n\n\t\t\tconst fields = node.fields;\n\n\t\t\t// if the appearance field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)\n\n\t\t\tlet material = new MeshBasicMaterial( {\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tcolor: 0x000000\n\t\t\t} );\n\t\t\tlet geometry;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'appearance':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\tmaterial = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'geometry':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\tgeometry = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build 3D object\n\n\t\t\tlet object;\n\n\t\t\tif ( geometry && geometry.attributes.position ) {\n\n\t\t\t\tconst type = geometry._type;\n\n\t\t\t\tif ( type === 'points' ) { // points\n\n\t\t\t\t\tconst pointsMaterial = new PointsMaterial( {\n\t\t\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\t\t\tcolor: 0xffffff,\n\t\t\t\t\t\topacity: material.opacity,\n\t\t\t\t\t\ttransparent: material.transparent\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\tpointsMaterial.vertexColors = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the color field is NULL and there is a material defined for the appearance affecting this PointSet, then use the emissiveColor of the material to draw the points\n\n\t\t\t\t\t\tif ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\t\t\tpointsMaterial.color.copy( material.emissive );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = new Points( geometry, pointsMaterial );\n\n\t\t\t\t} else if ( type === 'line' ) { // lines\n\n\t\t\t\t\tconst lineMaterial = new LineBasicMaterial( {\n\t\t\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\t\t\tcolor: 0xffffff,\n\t\t\t\t\t\topacity: material.opacity,\n\t\t\t\t\t\ttransparent: material.transparent\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\tlineMaterial.vertexColors = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the color field is NULL and there is a material defined for the appearance affecting this IndexedLineSet, then use the emissiveColor of the material to draw the lines\n\n\t\t\t\t\t\tif ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\t\t\tlineMaterial.color.copy( material.emissive );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = new LineSegments( geometry, lineMaterial );\n\n\t\t\t\t} else { // consider meshes\n\n\t\t\t\t\t// check \"solid\" hint (it's placed in the geometry but affects the material)\n\n\t\t\t\t\tif ( geometry._solid !== undefined ) {\n\n\t\t\t\t\t\tmaterial.side = ( geometry._solid ) ? FrontSide : DoubleSide;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// check for vertex colors\n\n\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tobject = new Object3D();\n\n\t\t\t\t// if the geometry field is NULL or no vertices are defined the object is not drawn\n\n\t\t\t\tobject.visible = false;\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tfunction buildAppearanceNode( node ) {\n\n\t\t\tlet material = new MeshPhongMaterial();\n\t\t\tlet transformData;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'material':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\tconst materialData = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t\tif ( materialData.diffuseColor ) material.color.copy( materialData.diffuseColor );\n\t\t\t\t\t\t\tif ( materialData.emissiveColor ) material.emissive.copy( materialData.emissiveColor );\n\t\t\t\t\t\t\tif ( materialData.shininess ) material.shininess = materialData.shininess;\n\t\t\t\t\t\t\tif ( materialData.specularColor ) material.specular.copy( materialData.specularColor );\n\t\t\t\t\t\t\tif ( materialData.transparency ) material.opacity = 1 - materialData.transparency;\n\t\t\t\t\t\t\tif ( materialData.transparency > 0 ) material.transparent = true;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the material field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)\n\n\t\t\t\t\t\t\tmaterial = new MeshBasicMaterial( {\n\t\t\t\t\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\t\t\t\t\tcolor: 0x000000\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tconst textureNode = fieldValues[ 0 ];\n\t\t\t\t\t\tif ( textureNode !== null ) {\n\n\t\t\t\t\t\t\tif ( textureNode.name === 'ImageTexture' || textureNode.name === 'PixelTexture' ) {\n\n\t\t\t\t\t\t\t\tmaterial.map = getNode( textureNode );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// MovieTexture not supported yet\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'textureTransform':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\ttransformData = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// only apply texture transform data if a texture was defined\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\t// respect VRML lighting model\n\n\t\t\t\tif ( material.map.__type ) {\n\n\t\t\t\t\tswitch ( material.map.__type ) {\n\n\t\t\t\t\t\tcase TEXTURE_TYPE.INTENSITY_ALPHA:\n\t\t\t\t\t\t\tmaterial.opacity = 1; // ignore transparency\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TEXTURE_TYPE.RGB:\n\t\t\t\t\t\t\tmaterial.color.set( 0xffffff ); // ignore material color\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TEXTURE_TYPE.RGBA:\n\t\t\t\t\t\t\tmaterial.color.set( 0xffffff ); // ignore material color\n\t\t\t\t\t\t\tmaterial.opacity = 1; // ignore transparency\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete material.map.__type;\n\n\t\t\t\t}\n\n\t\t\t\t// apply texture transform\n\n\t\t\t\tif ( transformData ) {\n\n\t\t\t\t\tmaterial.map.center.copy( transformData.center );\n\t\t\t\t\tmaterial.map.rotation = transformData.rotation;\n\t\t\t\t\tmaterial.map.repeat.copy( transformData.scale );\n\t\t\t\t\tmaterial.map.offset.copy( transformData.translation );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction buildMaterialNode( node ) {\n\n\t\t\tconst materialData = {};\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'ambientIntensity':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'diffuseColor':\n\t\t\t\t\t\tmaterialData.diffuseColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tmaterialData.diffuseColor.convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'emissiveColor':\n\t\t\t\t\t\tmaterialData.emissiveColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tmaterialData.emissiveColor.convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\t\tmaterialData.shininess = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'specularColor':\n\t\t\t\t\t\tmaterialData.specularColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tmaterialData.specularColor.convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tmaterialData.transparency = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materialData;\n\n\t\t}\n\n\t\tfunction parseHexColor( hex, textureType, color ) {\n\n\t\t\tlet value;\n\n\t\t\tswitch ( textureType ) {\n\n\t\t\t\tcase TEXTURE_TYPE.INTENSITY:\n\t\t\t\t\t// Intensity texture: A one-component image specifies one-byte hexadecimal or integer values representing the intensity of the image\n\t\t\t\t\tvalue = parseInt( hex );\n\t\t\t\t\tcolor.r = value;\n\t\t\t\t\tcolor.g = value;\n\t\t\t\t\tcolor.b = value;\n\t\t\t\t\tcolor.a = 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TEXTURE_TYPE.INTENSITY_ALPHA:\n\t\t\t\t\t// Intensity+Alpha texture: A two-component image specifies the intensity in the first (high) byte and the alpha opacity in the second (low) byte.\n\t\t\t\t\tvalue = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\tcolor.r = value;\n\t\t\t\t\tcolor.g = value;\n\t\t\t\t\tcolor.b = value;\n\t\t\t\t\tcolor.a = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TEXTURE_TYPE.RGB:\n\t\t\t\t\t// RGB texture: Pixels in a three-component image specify the red component in the first (high) byte, followed by the green and blue components\n\t\t\t\t\tcolor.r = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\tcolor.g = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\tcolor.b = parseInt( '0x' + hex.substring( 6, 8 ) );\n\t\t\t\t\tcolor.a = 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TEXTURE_TYPE.RGBA:\n\t\t\t\t\t// RGBA texture: Four-component images specify the alpha opacity byte after red/green/blue\n\t\t\t\t\tcolor.r = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\tcolor.g = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\tcolor.b = parseInt( '0x' + hex.substring( 6, 8 ) );\n\t\t\t\t\tcolor.a = parseInt( '0x' + hex.substring( 8, 10 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getTextureType( num_components ) {\n\n\t\t\tlet type;\n\n\t\t\tswitch ( num_components ) {\n\n\t\t\t\tcase 1:\n\t\t\t\t\ttype = TEXTURE_TYPE.INTENSITY;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\ttype = TEXTURE_TYPE.INTENSITY_ALPHA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3:\n\t\t\t\t\ttype = TEXTURE_TYPE.RGB;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 4:\n\t\t\t\t\ttype = TEXTURE_TYPE.RGBA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t}\n\n\t\t\treturn type;\n\n\t\t}\n\n\t\tfunction buildPixelTextureNode( node ) {\n\n\t\t\tlet texture;\n\t\t\tlet wrapS = RepeatWrapping;\n\t\t\tlet wrapT = RepeatWrapping;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'image':\n\t\t\t\t\t\tconst width = fieldValues[ 0 ];\n\t\t\t\t\t\tconst height = fieldValues[ 1 ];\n\t\t\t\t\t\tconst num_components = fieldValues[ 2 ];\n\n\t\t\t\t\t\tconst textureType = getTextureType( num_components );\n\n\t\t\t\t\t\tconst data = new Uint8Array( 4 * width * height );\n\n\t\t\t\t\t\tconst color = { r: 0, g: 0, b: 0, a: 0 };\n\n\t\t\t\t\t\tfor ( let j = 3, k = 0, jl = fieldValues.length; j < jl; j ++, k ++ ) {\n\n\t\t\t\t\t\t\tparseHexColor( fieldValues[ j ], textureType, color );\n\n\t\t\t\t\t\t\tconst stride = k * 4;\n\n\t\t\t\t\t\t\tdata[ stride + 0 ] = color.r;\n\t\t\t\t\t\t\tdata[ stride + 1 ] = color.g;\n\t\t\t\t\t\t\tdata[ stride + 2 ] = color.b;\n\t\t\t\t\t\t\tdata[ stride + 3 ] = color.a;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttexture = new DataTexture( data, width, height );\n\t\t\t\t\t\ttexture.colorSpace = SRGBColorSpace;\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\t\ttexture.__type = textureType; // needed for material modifications\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatS':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatT':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture ) {\n\n\t\t\t\ttexture.wrapS = wrapS;\n\t\t\t\ttexture.wrapT = wrapT;\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tfunction buildImageTextureNode( node ) {\n\n\t\t\tlet texture;\n\t\t\tlet wrapS = RepeatWrapping;\n\t\t\tlet wrapT = RepeatWrapping;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'url':\n\t\t\t\t\t\tconst url = fieldValues[ 0 ];\n\t\t\t\t\t\tif ( url ) texture = textureLoader.load( url );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatS':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatT':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture ) {\n\n\t\t\t\ttexture.wrapS = wrapS;\n\t\t\t\ttexture.wrapT = wrapT;\n\t\t\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tfunction buildTextureTransformNode( node ) {\n\n\t\t\tconst transformData = {\n\t\t\t\tcenter: new Vector2(),\n\t\t\t\trotation: new Vector2(),\n\t\t\t\tscale: new Vector2(),\n\t\t\t\ttranslation: new Vector2()\n\t\t\t};\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'center':\n\t\t\t\t\t\ttransformData.center.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotation':\n\t\t\t\t\t\ttransformData.rotation = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\ttransformData.scale.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translation':\n\t\t\t\t\t\ttransformData.translation.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn transformData;\n\n\t\t}\n\n\t\tfunction buildGeometricNode( node ) {\n\n\t\t\treturn node.fields[ 0 ].values;\n\n\t\t}\n\n\t\tfunction buildWorldInfoNode( node ) {\n\n\t\t\tconst worldInfo = {};\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'title':\n\t\t\t\t\t\tworldInfo.title = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'info':\n\t\t\t\t\t\tworldInfo.info = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn worldInfo;\n\n\t\t}\n\n\t\tfunction buildIndexedFaceSetNode( node ) {\n\n\t\t\tlet color, coord, normal, texCoord;\n\t\t\tlet ccw = true, solid = true, creaseAngle = 0;\n\t\t\tlet colorIndex, coordIndex, normalIndex, texCoordIndex;\n\t\t\tlet colorPerVertex = true, normalPerVertex = true;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\tconst coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normal':\n\t\t\t\t\t\tconst normalNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( normalNode !== null ) {\n\n\t\t\t\t\t\t\tnormal = getNode( normalNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texCoord':\n\t\t\t\t\t\tconst texCoordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( texCoordNode !== null ) {\n\n\t\t\t\t\t\t\ttexCoord = getNode( texCoordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorIndex':\n\t\t\t\t\t\tcolorIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'convex':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coordIndex':\n\t\t\t\t\t\tcoordIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normalIndex':\n\t\t\t\t\t\tnormalIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normalPerVertex':\n\t\t\t\t\t\tnormalPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texCoordIndex':\n\t\t\t\t\t\ttexCoordIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( coordIndex === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Missing coordIndex.' );\n\n\t\t\t\treturn new BufferGeometry(); // handle VRML files with incomplete geometry definition\n\n\t\t\t}\n\n\t\t\tconst triangulatedCoordIndex = triangulateFaceIndex( coordIndex, ccw );\n\n\t\t\tlet colorAttribute;\n\t\t\tlet normalAttribute;\n\t\t\tlet uvAttribute;\n\n\t\t\tif ( color ) {\n\n\t\t\t\tif ( colorPerVertex === true ) {\n\n\t\t\t\t\tif ( colorIndex && colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then it is used to choose colors for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\t\tconst triangulatedColorIndex = triangulateFaceIndex( colorIndex, ccw );\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedColorIndex, color, 3 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node\n\n\t\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( color, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( colorIndex && colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then they are used to choose one color for each face of the IndexedFaceSet\n\n\t\t\t\t\t\tconst flattenFaceColors = flattenData( color, colorIndex );\n\t\t\t\t\t\tconst triangulatedFaceColors = triangulateFaceData( flattenFaceColors, coordIndex );\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceColors );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the color are applied to each face of the IndexedFaceSet in order\n\n\t\t\t\t\t\tconst triangulatedFaceColors = triangulateFaceData( color, coordIndex );\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceColors );\n\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t}\n\n\t\t\tif ( normal ) {\n\n\t\t\t\tif ( normalPerVertex === true ) {\n\n\t\t\t\t\t// consider vertex normals\n\n\t\t\t\t\tif ( normalIndex && normalIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the normalIndex field is not empty, then it is used to choose normals for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\t\tconst triangulatedNormalIndex = triangulateFaceIndex( normalIndex, ccw );\n\t\t\t\t\t\tnormalAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedNormalIndex, normal, 3 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the normalIndex field is empty, then the coordIndex field is used to choose normals from the Normal node\n\n\t\t\t\t\t\tnormalAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( normal, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// consider face normals\n\n\t\t\t\t\tif ( normalIndex && normalIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the normalIndex field is not empty, then they are used to choose one normal for each face of the IndexedFaceSet\n\n\t\t\t\t\t\tconst flattenFaceNormals = flattenData( normal, normalIndex );\n\t\t\t\t\t\tconst triangulatedFaceNormals = triangulateFaceData( flattenFaceNormals, coordIndex );\n\t\t\t\t\t\tnormalAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceNormals );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the normalIndex field is empty, then the normals are applied to each face of the IndexedFaceSet in order\n\n\t\t\t\t\t\tconst triangulatedFaceNormals = triangulateFaceData( normal, coordIndex );\n\t\t\t\t\t\tnormalAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceNormals );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// if the normal field is NULL, then the loader should automatically generate normals, using creaseAngle to determine if and how normals are smoothed across shared vertices\n\n\t\t\t\tnormalAttribute = computeNormalAttribute( triangulatedCoordIndex, coord, creaseAngle );\n\n\t\t\t}\n\n\t\t\tif ( texCoord ) {\n\n\t\t\t\t// texture coordinates are always defined on vertex level\n\n\t\t\t\tif ( texCoordIndex && texCoordIndex.length > 0 ) {\n\n\t\t\t\t\t// if the texCoordIndex field is not empty, then it is used to choose texture coordinates for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\tconst triangulatedTexCoordIndex = triangulateFaceIndex( texCoordIndex, ccw );\n\t\t\t\t\tuvAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedTexCoordIndex, texCoord, 2 );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// if the texCoordIndex field is empty, then the coordIndex array is used to choose texture coordinates from the TextureCoordinate node\n\n\t\t\t\t\tuvAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( texCoord, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst positionAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( coord, 3 ) );\n\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\n\t\t\t// optional attributes\n\n\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\t\t\tif ( uvAttribute ) geometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\tgeometry._solid = solid;\n\t\t\tgeometry._type = 'mesh';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildIndexedLineSetNode( node ) {\n\n\t\t\tlet color, coord;\n\t\t\tlet colorIndex, coordIndex;\n\t\t\tlet colorPerVertex = true;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\tconst coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorIndex':\n\t\t\t\t\t\tcolorIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coordIndex':\n\t\t\t\t\t\tcoordIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build lines\n\n\t\t\tlet colorAttribute;\n\n\t\t\tconst expandedLineIndex = expandLineIndex( coordIndex ); // create an index for three.js's linesegment primitive\n\n\t\t\tif ( color ) {\n\n\t\t\t\tif ( colorPerVertex === true ) {\n\n\t\t\t\t\tif ( colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then one color is used for each polyline of the IndexedLineSet.\n\n\t\t\t\t\t\tconst expandedColorIndex = expandLineIndex( colorIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromIndexedData( expandedLineIndex, expandedColorIndex, color, 3 ); // compute data on vertex level\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the colors are applied to each polyline of the IndexedLineSet in order.\n\n\t\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( expandedLineIndex, new Float32BufferAttribute( color, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then colors are applied to each vertex of the IndexedLineSet\n\n\t\t\t\t\t\tconst flattenLineColors = flattenData( color, colorIndex ); // compute colors for each VRML primitve\n\t\t\t\t\t\tconst expandedLineColors = expandLineData( flattenLineColors, coordIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node\n\n\t\t\t\t\t\tconst expandedLineColors = expandLineData( color, coordIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positionAttribute = toNonIndexedAttribute( expandedLineIndex, new Float32BufferAttribute( coord, 3 ) );\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\n\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\n\t\t\tgeometry._type = 'line';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildPointSetNode( node ) {\n\n\t\t\tlet color, coord;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\tconst coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( coord, 3 ) );\n\n\t\t\tif ( color ) {\n\n\t\t\t\tconst colorAttribute = new Float32BufferAttribute( color, 3 );\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry._type = 'points';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildBoxNode( node ) {\n\n\t\t\tconst size = new Vector3( 2, 2, 2 );\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'size':\n\t\t\t\t\t\tsize.x = fieldValues[ 0 ];\n\t\t\t\t\t\tsize.y = fieldValues[ 1 ];\n\t\t\t\t\t\tsize.z = fieldValues[ 2 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BoxGeometry( size.x, size.y, size.z );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildConeNode( node ) {\n\n\t\t\tlet radius = 1, height = 2, openEnded = false;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\topenEnded = ! fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bottomRadius':\n\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'height':\n\t\t\t\t\t\theight = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'side':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new ConeGeometry( radius, height, 16, 1, openEnded );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildCylinderNode( node ) {\n\n\t\t\tlet radius = 1, height = 2;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'radius':\n\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'height':\n\t\t\t\t\t\theight = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'side':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'top':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new CylinderGeometry( radius, radius, height, 16, 1 );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildSphereNode( node ) {\n\n\t\t\tlet radius = 1;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'radius':\n\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new SphereGeometry( radius, 16, 16 );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildElevationGridNode( node ) {\n\n\t\t\tlet color;\n\t\t\tlet normal;\n\t\t\tlet texCoord;\n\t\t\tlet height;\n\n\t\t\tlet colorPerVertex = true;\n\t\t\tlet normalPerVertex = true;\n\t\t\tlet solid = true;\n\t\t\tlet ccw = true;\n\t\t\tlet creaseAngle = 0;\n\t\t\tlet xDimension = 2;\n\t\t\tlet zDimension = 2;\n\t\t\tlet xSpacing = 1;\n\t\t\tlet zSpacing = 1;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normal':\n\t\t\t\t\t\tconst normalNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( normalNode !== null ) {\n\n\t\t\t\t\t\t\tnormal = getNode( normalNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texCoord':\n\t\t\t\t\t\tconst texCoordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( texCoordNode !== null ) {\n\n\t\t\t\t\t\t\ttexCoord = getNode( texCoordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'height':\n\t\t\t\t\t\theight = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normalPerVertex':\n\t\t\t\t\t\tnormalPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'xDimension':\n\t\t\t\t\t\txDimension = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'xSpacing':\n\t\t\t\t\t\txSpacing = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'zDimension':\n\t\t\t\t\t\tzDimension = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'zSpacing':\n\t\t\t\t\t\tzSpacing = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// vertex data\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst colors = [];\n\t\t\tconst uvs = [];\n\n\t\t\tfor ( let i = 0; i < zDimension; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < xDimension; j ++ ) {\n\n\t\t\t\t\t// compute a row major index\n\n\t\t\t\t\tconst index = ( i * xDimension ) + j;\n\n\t\t\t\t\t// vertices\n\n\t\t\t\t\tconst x = xSpacing * i;\n\t\t\t\t\tconst y = height[ index ];\n\t\t\t\t\tconst z = zSpacing * j;\n\n\t\t\t\t\tvertices.push( x, y, z );\n\n\t\t\t\t\t// colors\n\n\t\t\t\t\tif ( color && colorPerVertex === true ) {\n\n\t\t\t\t\t\tconst r = color[ index * 3 + 0 ];\n\t\t\t\t\t\tconst g = color[ index * 3 + 1 ];\n\t\t\t\t\t\tconst b = color[ index * 3 + 2 ];\n\n\t\t\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// normals\n\n\t\t\t\t\tif ( normal && normalPerVertex === true ) {\n\n\t\t\t\t\t\tconst xn = normal[ index * 3 + 0 ];\n\t\t\t\t\t\tconst yn = normal[ index * 3 + 1 ];\n\t\t\t\t\t\tconst zn = normal[ index * 3 + 2 ];\n\n\t\t\t\t\t\tnormals.push( xn, yn, zn );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tif ( texCoord ) {\n\n\t\t\t\t\t\tconst s = texCoord[ index * 2 + 0 ];\n\t\t\t\t\t\tconst t = texCoord[ index * 2 + 1 ];\n\n\t\t\t\t\t\tuvs.push( s, t );\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuvs.push( i / ( xDimension - 1 ), j / ( zDimension - 1 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t// from https://tecfa.unige.ch/guides/vrml/vrml97/spec/part1/nodesRef.html#ElevationGrid\n\n\t\t\t\t\tconst a = i + j * xDimension;\n\t\t\t\t\tconst b = i + ( j + 1 ) * xDimension;\n\t\t\t\t\tconst c = ( i + 1 ) + ( j + 1 ) * xDimension;\n\t\t\t\t\tconst d = ( i + 1 ) + j * xDimension;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tindices.push( a, c, b );\n\t\t\t\t\t\tindices.push( c, a, d );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tindices.push( a, b, c );\n\t\t\t\t\t\tindices.push( c, d, a );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst positionAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tconst uvAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( uvs, 2 ) );\n\t\t\tlet colorAttribute;\n\t\t\tlet normalAttribute;\n\n\t\t\t// color attribute\n\n\t\t\tif ( color ) {\n\n\t\t\t\tif ( colorPerVertex === false ) {\n\n\t\t\t\t\tfor ( let i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t\t\tconst index = i + j * ( xDimension - 1 );\n\n\t\t\t\t\t\t\tconst r = color[ index * 3 + 0 ];\n\t\t\t\t\t\t\tconst g = color[ index * 3 + 1 ];\n\t\t\t\t\t\t\tconst b = color[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\t// one color per quad\n\n\t\t\t\t\t\t\tcolors.push( r, g, b ); colors.push( r, g, b ); colors.push( r, g, b );\n\t\t\t\t\t\t\tcolors.push( r, g, b ); colors.push( r, g, b ); colors.push( r, g, b );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcolorAttribute = new Float32BufferAttribute( colors, 3 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t}\n\n\t\t\t// normal attribute\n\n\t\t\tif ( normal ) {\n\n\t\t\t\tif ( normalPerVertex === false ) {\n\n\t\t\t\t\tfor ( let i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t\t\tconst index = i + j * ( xDimension - 1 );\n\n\t\t\t\t\t\t\tconst xn = normal[ index * 3 + 0 ];\n\t\t\t\t\t\t\tconst yn = normal[ index * 3 + 1 ];\n\t\t\t\t\t\t\tconst zn = normal[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\t// one normal per quad\n\n\t\t\t\t\t\t\tnormals.push( xn, yn, zn ); normals.push( xn, yn, zn ); normals.push( xn, yn, zn );\n\t\t\t\t\t\t\tnormals.push( xn, yn, zn ); normals.push( xn, yn, zn ); normals.push( xn, yn, zn );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnormalAttribute = new Float32BufferAttribute( normals, 3 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnormalAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tnormalAttribute = computeNormalAttribute( indices, vertices, creaseAngle );\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\t\t\tgeometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\tgeometry._solid = solid;\n\t\t\tgeometry._type = 'mesh';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildExtrusionNode( node ) {\n\n\t\t\tlet crossSection = [ 1, 1, 1, - 1, - 1, - 1, - 1, 1, 1, 1 ];\n\t\t\tlet spine = [ 0, 0, 0, 0, 1, 0 ];\n\t\t\tlet scale;\n\t\t\tlet orientation;\n\n\t\t\tlet beginCap = true;\n\t\t\tlet ccw = true;\n\t\t\tlet creaseAngle = 0;\n\t\t\tlet endCap = true;\n\t\t\tlet solid = true;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'beginCap':\n\t\t\t\t\t\tbeginCap = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'convex':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'crossSection':\n\t\t\t\t\t\tcrossSection = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'endCap':\n\t\t\t\t\t\tendCap = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'orientation':\n\t\t\t\t\t\torientation = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tscale = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'spine':\n\t\t\t\t\t\tspine = fieldValues; // only extrusion along the Y-axis are supported so far\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst crossSectionClosed = ( crossSection[ 0 ] === crossSection[ crossSection.length - 2 ] && crossSection[ 1 ] === crossSection[ crossSection.length - 1 ] );\n\n\t\t\t// vertices\n\n\t\t\tconst vertices = [];\n\t\t\tconst spineVector = new Vector3();\n\t\t\tconst scaling = new Vector3();\n\n\t\t\tconst axis = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst quaternion = new Quaternion();\n\n\t\t\tfor ( let i = 0, j = 0, o = 0, il = spine.length; i < il; i += 3, j += 2, o += 4 ) {\n\n\t\t\t\tspineVector.fromArray( spine, i );\n\n\t\t\t\tscaling.x = scale ? scale[ j + 0 ] : 1;\n\t\t\t\tscaling.y = 1;\n\t\t\t\tscaling.z = scale ? scale[ j + 1 ] : 1;\n\n\t\t\t\taxis.x = orientation ? orientation[ o + 0 ] : 0;\n\t\t\t\taxis.y = orientation ? orientation[ o + 1 ] : 0;\n\t\t\t\taxis.z = orientation ? orientation[ o + 2 ] : 1;\n\t\t\t\tconst angle = orientation ? orientation[ o + 3 ] : 0;\n\n\t\t\t\tfor ( let k = 0, kl = crossSection.length; k < kl; k += 2 ) {\n\n\t\t\t\t\tvertex.x = crossSection[ k + 0 ];\n\t\t\t\t\tvertex.y = 0;\n\t\t\t\t\tvertex.z = crossSection[ k + 1 ];\n\n\t\t\t\t\t// scale\n\n\t\t\t\t\tvertex.multiply( scaling );\n\n\t\t\t\t\t// rotate\n\n\t\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\t\t\t\t\tvertex.applyQuaternion( quaternion );\n\n\t\t\t\t\t// translate\n\n\t\t\t\t\tvertex.add( spineVector );\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tconst indices = [];\n\n\t\t\tconst spineCount = spine.length / 3;\n\t\t\tconst crossSectionCount = crossSection.length / 2;\n\n\t\t\tfor ( let i = 0; i < spineCount - 1; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < crossSectionCount - 1; j ++ ) {\n\n\t\t\t\t\tconst a = j + i * crossSectionCount;\n\t\t\t\t\tlet b = ( j + 1 ) + i * crossSectionCount;\n\t\t\t\t\tconst c = j + ( i + 1 ) * crossSectionCount;\n\t\t\t\t\tlet d = ( j + 1 ) + ( i + 1 ) * crossSectionCount;\n\n\t\t\t\t\tif ( ( j === crossSectionCount - 2 ) && ( crossSectionClosed === true ) ) {\n\n\t\t\t\t\t\tb = i * crossSectionCount;\n\t\t\t\t\t\td = ( i + 1 ) * crossSectionCount;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tindices.push( a, b, c );\n\t\t\t\t\t\tindices.push( c, b, d );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tindices.push( a, c, b );\n\t\t\t\t\t\tindices.push( c, d, b );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// triangulate cap\n\n\t\t\tif ( beginCap === true || endCap === true ) {\n\n\t\t\t\tconst contour = [];\n\n\t\t\t\tfor ( let i = 0, l = crossSection.length; i < l; i += 2 ) {\n\n\t\t\t\t\tcontour.push( new Vector2( crossSection[ i ], crossSection[ i + 1 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tconst faces = ShapeUtils.triangulateShape( contour, [] );\n\t\t\t\tconst capIndices = [];\n\n\t\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\t\tcapIndices.push( face[ 0 ], face[ 1 ], face[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// begin cap\n\n\t\t\t\tif ( beginCap === true ) {\n\n\t\t\t\t\tfor ( let i = 0, l = capIndices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tindices.push( capIndices[ i + 0 ], capIndices[ i + 1 ], capIndices[ i + 2 ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tindices.push( capIndices[ i + 0 ], capIndices[ i + 2 ], capIndices[ i + 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// end cap\n\n\t\t\t\tif ( endCap === true ) {\n\n\t\t\t\t\tconst indexOffset = crossSectionCount * ( spineCount - 1 ); // references to the first vertex of the last cross section\n\n\t\t\t\t\tfor ( let i = 0, l = capIndices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tindices.push( indexOffset + capIndices[ i + 0 ], indexOffset + capIndices[ i + 2 ], indexOffset + capIndices[ i + 1 ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tindices.push( indexOffset + capIndices[ i + 0 ], indexOffset + capIndices[ i + 1 ], indexOffset + capIndices[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst positionAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tconst normalAttribute = computeNormalAttribute( indices, vertices, creaseAngle );\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\t\t\t// no uvs yet\n\n\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\tgeometry._solid = solid;\n\t\t\tgeometry._type = 'mesh';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction resolveUSE( identifier ) {\n\n\t\t\tconst node = nodeMap[ identifier ];\n\t\t\tconst build = getNode( node );\n\n\t\t\t// because the same 3D objects can have different transformations, it's necessary to clone them.\n\t\t\t// materials can be influenced by the geometry (e.g. vertex normals). cloning is necessary to avoid\n\t\t\t// any side effects\n\n\t\t\treturn ( build.isObject3D || build.isMaterial ) ? build.clone() : build;\n\n\t\t}\n\n\t\tfunction parseFieldChildren( children, owner ) {\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = getNode( children[ i ] );\n\n\t\t\t\tif ( object instanceof Object3D ) owner.add( object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction triangulateFaceIndex( index, ccw ) {\n\n\t\t\tconst indices = [];\n\n\t\t\t// since face defintions can have more than three vertices, it's necessary to\n\t\t\t// perform a simple triangulation\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst i1 = index[ start ];\n\t\t\t\tconst i2 = index[ i + ( ccw ? 1 : 2 ) ];\n\t\t\t\tconst i3 = index[ i + ( ccw ? 2 : 1 ) ];\n\n\t\t\t\tindices.push( i1, i2, i3 );\n\n\t\t\t\t// an index of -1 indicates that the current face has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 3 ] === - 1 || i + 3 >= l ) {\n\n\t\t\t\t\ti += 3;\n\t\t\t\t\tstart = i + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn indices;\n\n\t\t}\n\n\t\tfunction triangulateFaceData( data, index ) {\n\n\t\t\tconst triangulatedData = [];\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst stride = start * 3;\n\n\t\t\t\tconst x = data[ stride ];\n\t\t\t\tconst y = data[ stride + 1 ];\n\t\t\t\tconst z = data[ stride + 2 ];\n\n\t\t\t\ttriangulatedData.push( x, y, z );\n\n\t\t\t\t// an index of -1 indicates that the current face has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 3 ] === - 1 || i + 3 >= l ) {\n\n\t\t\t\t\ti += 3;\n\t\t\t\t\tstart ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn triangulatedData;\n\n\t\t}\n\n\t\tfunction flattenData( data, index ) {\n\n\t\t\tconst flattenData = [];\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst i1 = index[ i ];\n\n\t\t\t\tconst stride = i1 * 3;\n\n\t\t\t\tconst x = data[ stride ];\n\t\t\t\tconst y = data[ stride + 1 ];\n\t\t\t\tconst z = data[ stride + 2 ];\n\n\t\t\t\tflattenData.push( x, y, z );\n\n\t\t\t}\n\n\t\t\treturn flattenData;\n\n\t\t}\n\n\t\tfunction expandLineIndex( index ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst i1 = index[ i ];\n\t\t\t\tconst i2 = index[ i + 1 ];\n\n\t\t\t\tindices.push( i1, i2 );\n\n\t\t\t\t// an index of -1 indicates that the current line has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 2 ] === - 1 || i + 2 >= l ) {\n\n\t\t\t\t\ti += 2;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn indices;\n\n\t\t}\n\n\t\tfunction expandLineData( data, index ) {\n\n\t\t\tconst triangulatedData = [];\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst stride = start * 3;\n\n\t\t\t\tconst x = data[ stride ];\n\t\t\t\tconst y = data[ stride + 1 ];\n\t\t\t\tconst z = data[ stride + 2 ];\n\n\t\t\t\ttriangulatedData.push( x, y, z );\n\n\t\t\t\t// an index of -1 indicates that the current line has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 2 ] === - 1 || i + 2 >= l ) {\n\n\t\t\t\t\ti += 2;\n\t\t\t\t\tstart ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn triangulatedData;\n\n\t\t}\n\n\t\tconst vA = new Vector3();\n\t\tconst vB = new Vector3();\n\t\tconst vC = new Vector3();\n\n\t\tconst uvA = new Vector2();\n\t\tconst uvB = new Vector2();\n\t\tconst uvC = new Vector2();\n\n\t\tfunction computeAttributeFromIndexedData( coordIndex, index, data, itemSize ) {\n\n\t\t\tconst array = [];\n\n\t\t\t// we use the coordIndex.length as delimiter since normalIndex must contain at least as many indices\n\n\t\t\tfor ( let i = 0, l = coordIndex.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = index[ i ];\n\t\t\t\tconst b = index[ i + 1 ];\n\t\t\t\tconst c = index[ i + 2 ];\n\n\t\t\t\tif ( itemSize === 2 ) {\n\n\t\t\t\t\tuvA.fromArray( data, a * itemSize );\n\t\t\t\t\tuvB.fromArray( data, b * itemSize );\n\t\t\t\t\tuvC.fromArray( data, c * itemSize );\n\n\t\t\t\t\tarray.push( uvA.x, uvA.y );\n\t\t\t\t\tarray.push( uvB.x, uvB.y );\n\t\t\t\t\tarray.push( uvC.x, uvC.y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvA.fromArray( data, a * itemSize );\n\t\t\t\t\tvB.fromArray( data, b * itemSize );\n\t\t\t\t\tvC.fromArray( data, c * itemSize );\n\n\t\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\t\tarray.push( vB.x, vB.y, vB.z );\n\t\t\t\t\tarray.push( vC.x, vC.y, vC.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array, itemSize );\n\n\t\t}\n\n\t\tfunction computeAttributeFromFaceData( index, faceData ) {\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, j = 0, l = index.length; i < l; i += 3, j ++ ) {\n\n\t\t\t\tvA.fromArray( faceData, j * 3 );\n\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array, 3 );\n\n\t\t}\n\n\t\tfunction computeAttributeFromLineData( index, lineData ) {\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, j = 0, l = index.length; i < l; i += 2, j ++ ) {\n\n\t\t\t\tvA.fromArray( lineData, j * 3 );\n\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array, 3 );\n\n\t\t}\n\n\t\tfunction toNonIndexedAttribute( indices, attribute ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array2, itemSize );\n\n\t\t}\n\n\t\tconst ab = new Vector3();\n\t\tconst cb = new Vector3();\n\n\t\tfunction computeNormalAttribute( index, coord, creaseAngle ) {\n\n\t\t\tconst faces = [];\n\t\t\tconst vertexNormals = {};\n\n\t\t\t// prepare face and raw vertex normals\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = index[ i ];\n\t\t\t\tconst b = index[ i + 1 ];\n\t\t\t\tconst c = index[ i + 2 ];\n\n\t\t\t\tconst face = new Face( a, b, c );\n\n\t\t\t\tvA.fromArray( coord, a * 3 );\n\t\t\t\tvB.fromArray( coord, b * 3 );\n\t\t\t\tvC.fromArray( coord, c * 3 );\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tcb.normalize();\n\n\t\t\t\tface.normal.copy( cb );\n\n\t\t\t\tif ( vertexNormals[ a ] === undefined ) vertexNormals[ a ] = [];\n\t\t\t\tif ( vertexNormals[ b ] === undefined ) vertexNormals[ b ] = [];\n\t\t\t\tif ( vertexNormals[ c ] === undefined ) vertexNormals[ c ] = [];\n\n\t\t\t\tvertexNormals[ a ].push( face.normal );\n\t\t\t\tvertexNormals[ b ].push( face.normal );\n\t\t\t\tvertexNormals[ c ].push( face.normal );\n\n\t\t\t\tfaces.push( face );\n\n\t\t\t}\n\n\t\t\t// compute vertex normals and build final geometry\n\n\t\t\tconst normals = [];\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst nA = weightedNormal( vertexNormals[ face.a ], face.normal, creaseAngle );\n\t\t\t\tconst nB = weightedNormal( vertexNormals[ face.b ], face.normal, creaseAngle );\n\t\t\t\tconst nC = weightedNormal( vertexNormals[ face.c ], face.normal, creaseAngle );\n\n\t\t\t\tvA.fromArray( coord, face.a * 3 );\n\t\t\t\tvB.fromArray( coord, face.b * 3 );\n\t\t\t\tvC.fromArray( coord, face.c * 3 );\n\n\t\t\t\tnormals.push( nA.x, nA.y, nA.z );\n\t\t\t\tnormals.push( nB.x, nB.y, nB.z );\n\t\t\t\tnormals.push( nC.x, nC.y, nC.z );\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( normals, 3 );\n\n\t\t}\n\n\t\tfunction weightedNormal( normals, vector, creaseAngle ) {\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tif ( creaseAngle === 0 ) {\n\n\t\t\t\tnormal.copy( vector );\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = normals.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( normals[ i ].angleTo( vector ) < creaseAngle ) {\n\n\t\t\t\t\t\tnormal.add( normals[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn normal.normalize();\n\n\t\t}\n\n\t\tfunction toColorArray( colors ) {\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\tarray.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction convertColorsToLinearSRGB( attribute ) {\n\n\t\t\tconst color = new Color();\n\n\t\t\tfor ( let i = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tcolor.fromBufferAttribute( attribute, i );\n\t\t\t\tcolor.convertSRGBToLinear();\n\n\t\t\t\tattribute.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * Vertically paints the faces interpolating between the\n\t\t * specified colors at the specified angels. This is used for the Background\n\t\t * node, but could be applied to other nodes with multiple faces as well.\n\t\t *\n\t\t * When used with the Background node, default is directionIsDown is true if\n\t\t * interpolating the skyColor down from the Zenith. When interpolationg up from\n\t\t * the Nadir i.e. interpolating the groundColor, the directionIsDown is false.\n\t\t *\n\t\t * The first angle is never specified, it is the Zenith (0 rad). Angles are specified\n\t\t * in radians. The geometry is thought a sphere, but could be anything. The color interpolation\n\t\t * is linear along the Y axis in any case.\n\t\t *\n\t\t * You must specify one more color than you have angles at the beginning of the colors array.\n\t\t * This is the color of the Zenith (the top of the shape).\n\t\t *\n\t\t * @param {BufferGeometry} geometry\n\t\t * @param {number} radius\n\t\t * @param {array} angles\n\t\t * @param {array} colors\n\t\t * @param {boolean} topDown - Whether to work top down or bottom up.\n\t\t */\n\t\tfunction paintFaces( geometry, radius, angles, colors, topDown ) {\n\n\t\t\t// compute threshold values\n\n\t\t\tconst thresholds = [];\n\t\t\tconst startAngle = ( topDown === true ) ? 0 : Math.PI;\n\n\t\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\t\tlet angle = ( i === 0 ) ? 0 : angles[ i - 1 ];\n\t\t\t\tangle = ( topDown === true ) ? angle : ( startAngle - angle );\n\n\t\t\t\tconst point = new Vector3();\n\t\t\t\tpoint.setFromSphericalCoords( radius, angle, 0 );\n\n\t\t\t\tthresholds.push( point );\n\n\t\t\t}\n\n\t\t\t// generate vertex colors\n\n\t\t\tconst indices = geometry.index;\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst colorAttribute = new BufferAttribute( new Float32Array( geometry.attributes.position.count * 3 ), 3 );\n\n\t\t\tconst position = new Vector3();\n\t\t\tconst color = new Color();\n\n\t\t\tfor ( let i = 0; i < indices.count; i ++ ) {\n\n\t\t\t\tconst index = indices.getX( i );\n\t\t\t\tposition.fromBufferAttribute( positionAttribute, index );\n\n\t\t\t\tlet thresholdIndexA, thresholdIndexB;\n\t\t\t\tlet t = 1;\n\n\t\t\t\tfor ( let j = 1; j < thresholds.length; j ++ ) {\n\n\t\t\t\t\tthresholdIndexA = j - 1;\n\t\t\t\t\tthresholdIndexB = j;\n\n\t\t\t\t\tconst thresholdA = thresholds[ thresholdIndexA ];\n\t\t\t\t\tconst thresholdB = thresholds[ thresholdIndexB ];\n\n\t\t\t\t\tif ( topDown === true ) {\n\n\t\t\t\t\t\t// interpolation for sky color\n\n\t\t\t\t\t\tif ( position.y <= thresholdA.y && position.y > thresholdB.y ) {\n\n\t\t\t\t\t\t\tt = Math.abs( thresholdA.y - position.y ) / Math.abs( thresholdA.y - thresholdB.y );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// interpolation for ground color\n\n\t\t\t\t\t\tif ( position.y >= thresholdA.y && position.y < thresholdB.y ) {\n\n\t\t\t\t\t\t\tt = Math.abs( thresholdA.y - position.y ) / Math.abs( thresholdA.y - thresholdB.y );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst colorA = colors[ thresholdIndexA ];\n\t\t\t\tconst colorB = colors[ thresholdIndexB ];\n\n\t\t\t\tcolor.copy( colorA ).lerp( colorB, t ).convertSRGBToLinear();\n\n\t\t\t\tcolorAttribute.setXYZ( index, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst textureLoader = new TextureLoader( this.manager );\n\t\ttextureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\t// check version (only 2.0 is supported)\n\n\t\tif ( data.indexOf( '#VRML V2.0' ) === - 1 ) {\n\n\t\t\tthrow Error( 'THREE.VRMLLexer: Version of VRML asset not supported.' );\n\n\t\t}\n\n\t\t// create JSON representing the tree structure of the VRML asset\n\n\t\tconst tree = generateVRMLTree( data );\n\n\t\t// parse the tree structure to a three.js scene\n\n\t\tconst scene = parseTree( tree );\n\n\t\treturn scene;\n\n\t}\n\n}\n\nclass VRMLLexer {\n\n\tconstructor( tokens ) {\n\n\t\tthis.lexer = new chevrotain.Lexer( tokens );\n\n\t}\n\n\tlex( inputText ) {\n\n\t\tconst lexingResult = this.lexer.tokenize( inputText );\n\n\t\tif ( lexingResult.errors.length > 0 ) {\n\n\t\t\tconsole.error( lexingResult.errors );\n\n\t\t\tthrow Error( 'THREE.VRMLLexer: Lexing errors detected.' );\n\n\t\t}\n\n\t\treturn lexingResult;\n\n\t}\n\n}\n\nconst CstParser = chevrotain.CstParser;\n\nclass VRMLParser extends CstParser {\n\n\tconstructor( tokenVocabulary ) {\n\n\t\tsuper( tokenVocabulary );\n\n\t\tconst $ = this;\n\n\t\tconst Version = tokenVocabulary[ 'Version' ];\n\t\tconst LCurly = tokenVocabulary[ 'LCurly' ];\n\t\tconst RCurly = tokenVocabulary[ 'RCurly' ];\n\t\tconst LSquare = tokenVocabulary[ 'LSquare' ];\n\t\tconst RSquare = tokenVocabulary[ 'RSquare' ];\n\t\tconst Identifier = tokenVocabulary[ 'Identifier' ];\n\t\tconst RouteIdentifier = tokenVocabulary[ 'RouteIdentifier' ];\n\t\tconst StringLiteral = tokenVocabulary[ 'StringLiteral' ];\n\t\tconst HexLiteral = tokenVocabulary[ 'HexLiteral' ];\n\t\tconst NumberLiteral = tokenVocabulary[ 'NumberLiteral' ];\n\t\tconst TrueLiteral = tokenVocabulary[ 'TrueLiteral' ];\n\t\tconst FalseLiteral = tokenVocabulary[ 'FalseLiteral' ];\n\t\tconst NullLiteral = tokenVocabulary[ 'NullLiteral' ];\n\t\tconst DEF = tokenVocabulary[ 'DEF' ];\n\t\tconst USE = tokenVocabulary[ 'USE' ];\n\t\tconst ROUTE = tokenVocabulary[ 'ROUTE' ];\n\t\tconst TO = tokenVocabulary[ 'TO' ];\n\t\tconst NodeName = tokenVocabulary[ 'NodeName' ];\n\n\t\t$.RULE( 'vrml', function () {\n\n\t\t\t$.SUBRULE( $.version );\n\t\t\t$.AT_LEAST_ONE( function () {\n\n\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t} );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.SUBRULE( $.route );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t$.RULE( 'version', function () {\n\n\t\t\t$.CONSUME( Version );\n\n\t\t} );\n\n\t\t$.RULE( 'node', function () {\n\n\t\t\t$.OPTION( function () {\n\n\t\t\t\t$.SUBRULE( $.def );\n\n\t\t\t} );\n\n\t\t\t$.CONSUME( NodeName );\n\t\t\t$.CONSUME( LCurly );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.SUBRULE( $.field );\n\n\t\t\t} );\n\t\t\t$.CONSUME( RCurly );\n\n\t\t} );\n\n\t\t$.RULE( 'field', function () {\n\n\t\t\t$.CONSUME( Identifier );\n\n\t\t\t$.OR2( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.SUBRULE( $.singleFieldValue );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.SUBRULE( $.multiFieldValue );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'def', function () {\n\n\t\t\t$.CONSUME( DEF );\n\t\t\t$.OR( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( Identifier );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( NodeName );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'use', function () {\n\n\t\t\t$.CONSUME( USE );\n\t\t\t$.OR( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( Identifier );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( NodeName );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'singleFieldValue', function () {\n\n\t\t\t$.AT_LEAST_ONE( function () {\n\n\t\t\t\t$.OR( [\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.use );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( StringLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( HexLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NumberLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( TrueLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( FalseLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NullLiteral );\n\n\t\t\t\t\t} }\n\t\t\t\t] );\n\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t$.RULE( 'multiFieldValue', function () {\n\n\t\t\t$.CONSUME( LSquare );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.OR( [\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.use );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( StringLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( HexLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NumberLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NullLiteral );\n\n\t\t\t\t\t} }\n\t\t\t\t] );\n\n\t\t\t} );\n\t\t\t$.CONSUME( RSquare );\n\n\t\t} );\n\n\t\t$.RULE( 'route', function () {\n\n\t\t\t$.CONSUME( ROUTE );\n\t\t\t$.CONSUME( RouteIdentifier );\n\t\t\t$.CONSUME( TO );\n\t\t\t$.CONSUME2( RouteIdentifier );\n\n\t\t} );\n\n\t\tthis.performSelfAnalysis();\n\n\t}\n\n}\n\nclass Face {\n\n\tconstructor( a, b, c ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\t\tthis.normal = new Vector3();\n\n\t}\n\n}\n\nconst TEXTURE_TYPE = {\n\tINTENSITY: 1,\n\tINTENSITY_ALPHA: 2,\n\tRGB: 3,\n\tRGBA: 4\n};\n\nexport { VRMLLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\nclass VTKLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\t// connectivity of the triangles\n\t\t\tconst indices = [];\n\n\t\t\t// triangles vertices\n\t\t\tconst positions = [];\n\n\t\t\t// red, green, blue colors in the range 0 to 1\n\t\t\tconst colors = [];\n\n\t\t\t// normal vector, one per vertex\n\t\t\tconst normals = [];\n\n\t\t\tlet result;\n\n\t\t\t// pattern for detecting the end of a number sequence\n\t\t\tconst patWord = /^[^\\d.\\s-]+/;\n\n\t\t\t// pattern for reading vertices, 3 floats or integers\n\t\t\tconst pat3Floats = /(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)/g;\n\n\t\t\t// pattern for connectivity, an integer followed by any number of ints\n\t\t\t// the first integer is the number of polygon nodes\n\t\t\tconst patConnectivity = /^(\\d+)\\s+([\\s\\d]*)/;\n\n\t\t\t// indicates start of vertex data section\n\t\t\tconst patPOINTS = /^POINTS /;\n\n\t\t\t// indicates start of polygon connectivity section\n\t\t\tconst patPOLYGONS = /^POLYGONS /;\n\n\t\t\t// indicates start of triangle strips section\n\t\t\tconst patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /;\n\n\t\t\t// POINT_DATA number_of_values\n\t\t\tconst patPOINT_DATA = /^POINT_DATA[ ]+(\\d+)/;\n\n\t\t\t// CELL_DATA number_of_polys\n\t\t\tconst patCELL_DATA = /^CELL_DATA[ ]+(\\d+)/;\n\n\t\t\t// Start of color section\n\t\t\tconst patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\\w+)[ ]+3/;\n\n\t\t\t// NORMALS Normals float\n\t\t\tconst patNORMALS = /^NORMALS[ ]+(\\w+)[ ]+(\\w+)/;\n\n\t\t\tlet inPointsSection = false;\n\t\t\tlet inPolygonsSection = false;\n\t\t\tlet inTriangleStripSection = false;\n\t\t\tlet inPointDataSection = false;\n\t\t\tlet inCellDataSection = false;\n\t\t\tlet inColorSection = false;\n\t\t\tlet inNormalsSection = false;\n\n\t\t\tconst color = new Color();\n\n\t\t\tconst lines = data.split( '\\n' );\n\n\t\t\tfor ( const i in lines ) {\n\n\t\t\t\tconst line = lines[ i ].trim();\n\n\t\t\t\tif ( line.indexOf( 'DATASET' ) === 0 ) {\n\n\t\t\t\t\tconst dataset = line.split( ' ' )[ 1 ];\n\n\t\t\t\t\tif ( dataset !== 'POLYDATA' ) throw new Error( 'Unsupported DATASET type: ' + dataset );\n\n\t\t\t\t} else if ( inPointsSection ) {\n\n\t\t\t\t\t// get the vertices\n\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\tconst x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tconst y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tconst z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tpositions.push( x, y, z );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inPolygonsSection ) {\n\n\t\t\t\t\tif ( ( result = patConnectivity.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t// numVertices i0 i1 i2 ...\n\t\t\t\t\t\tconst numVertices = parseInt( result[ 1 ] );\n\t\t\t\t\t\tconst inds = result[ 2 ].split( /\\s+/ );\n\n\t\t\t\t\t\tif ( numVertices >= 3 ) {\n\n\t\t\t\t\t\t\tconst i0 = parseInt( inds[ 0 ] );\n\t\t\t\t\t\t\tlet k = 1;\n\t\t\t\t\t\t\t// split the polygon in numVertices - 2 triangles\n\t\t\t\t\t\t\tfor ( let j = 0; j < numVertices - 2; ++ j ) {\n\n\t\t\t\t\t\t\t\tconst i1 = parseInt( inds[ k ] );\n\t\t\t\t\t\t\t\tconst i2 = parseInt( inds[ k + 1 ] );\n\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\t\t\t\t\t\t\t\tk ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inTriangleStripSection ) {\n\n\t\t\t\t\tif ( ( result = patConnectivity.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t// numVertices i0 i1 i2 ...\n\t\t\t\t\t\tconst numVertices = parseInt( result[ 1 ] );\n\t\t\t\t\t\tconst inds = result[ 2 ].split( /\\s+/ );\n\n\t\t\t\t\t\tif ( numVertices >= 3 ) {\n\n\t\t\t\t\t\t\t// split the polygon in numVertices - 2 triangles\n\t\t\t\t\t\t\tfor ( let j = 0; j < numVertices - 2; j ++ ) {\n\n\t\t\t\t\t\t\t\tif ( j % 2 === 1 ) {\n\n\t\t\t\t\t\t\t\t\tconst i0 = parseInt( inds[ j ] );\n\t\t\t\t\t\t\t\t\tconst i1 = parseInt( inds[ j + 2 ] );\n\t\t\t\t\t\t\t\t\tconst i2 = parseInt( inds[ j + 1 ] );\n\t\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconst i0 = parseInt( inds[ j ] );\n\t\t\t\t\t\t\t\t\tconst i1 = parseInt( inds[ j + 1 ] );\n\t\t\t\t\t\t\t\t\tconst i2 = parseInt( inds[ j + 2 ] );\n\t\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inPointDataSection || inCellDataSection ) {\n\n\t\t\t\t\tif ( inColorSection ) {\n\n\t\t\t\t\t\t// Get the colors\n\n\t\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\t\tconst r = parseFloat( result[ 1 ] );\n\t\t\t\t\t\t\tconst g = parseFloat( result[ 2 ] );\n\t\t\t\t\t\t\tconst b = parseFloat( result[ 3 ] );\n\n\t\t\t\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( inNormalsSection ) {\n\n\t\t\t\t\t\t// Get the normal vectors\n\n\t\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\t\tconst nx = parseFloat( result[ 1 ] );\n\t\t\t\t\t\t\tconst ny = parseFloat( result[ 2 ] );\n\t\t\t\t\t\t\tconst nz = parseFloat( result[ 3 ] );\n\t\t\t\t\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( patPOLYGONS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patPOINTS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinPointsSection = true;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patTRIANGLE_STRIPS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinTriangleStripSection = true;\n\n\t\t\t\t} else if ( patPOINT_DATA.exec( line ) !== null ) {\n\n\t\t\t\t\tinPointDataSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patCELL_DATA.exec( line ) !== null ) {\n\n\t\t\t\t\tinCellDataSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patCOLOR_SCALARS.exec( line ) !== null ) {\n\n\t\t\t\t\tinColorSection = true;\n\t\t\t\t\tinNormalsSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patNORMALS.exec( line ) !== null ) {\n\n\t\t\t\t\tinNormalsSection = true;\n\t\t\t\t\tinColorSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( indices );\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\t\tif ( normals.length === positions.length ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( colors.length !== indices.length ) {\n\n\t\t\t\t// stagger\n\n\t\t\t\tif ( colors.length === positions.length ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// cell\n\n\t\t\t\tgeometry = geometry.toNonIndexed();\n\t\t\t\tconst numTriangles = geometry.attributes.position.count / 3;\n\n\t\t\t\tif ( colors.length === ( numTriangles * 3 ) ) {\n\n\t\t\t\t\tconst newColors = [];\n\n\t\t\t\t\tfor ( let i = 0; i < numTriangles; i ++ ) {\n\n\t\t\t\t\t\tconst r = colors[ 3 * i + 0 ];\n\t\t\t\t\t\tconst g = colors[ 3 * i + 1 ];\n\t\t\t\t\t\tconst b = colors[ 3 * i + 2 ];\n\n\t\t\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\t\tnewColors.push( color.r, color.g, color.b );\n\t\t\t\t\t\tnewColors.push( color.r, color.g, color.b );\n\t\t\t\t\t\tnewColors.push( color.r, color.g, color.b );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( newColors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst buffer = new Uint8Array( data );\n\t\t\tconst dataView = new DataView( data );\n\n\t\t\t// Points and normals, by default, are empty\n\t\t\tlet points = [];\n\t\t\tlet normals = [];\n\t\t\tlet indices = [];\n\n\t\t\tlet index = 0;\n\n\t\t\tfunction findString( buffer, start ) {\n\n\t\t\t\tlet index = start;\n\t\t\t\tlet c = buffer[ index ];\n\t\t\t\tconst s = [];\n\t\t\t\twhile ( c !== 10 ) {\n\n\t\t\t\t\ts.push( String.fromCharCode( c ) );\n\t\t\t\t\tindex ++;\n\t\t\t\t\tc = buffer[ index ];\n\n\t\t\t\t}\n\n\t\t\t\treturn { start: start,\n\t\t\t\t\tend: index,\n\t\t\t\t\tnext: index + 1,\n\t\t\t\t\tparsedString: s.join( '' ) };\n\n\t\t\t}\n\n\t\t\tlet state, line;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\t// Get a string\n\t\t\t\tstate = findString( buffer, index );\n\t\t\t\tline = state.parsedString;\n\n\t\t\t\tif ( line.indexOf( 'DATASET' ) === 0 ) {\n\n\t\t\t\t\tconst dataset = line.split( ' ' )[ 1 ];\n\n\t\t\t\t\tif ( dataset !== 'POLYDATA' ) throw new Error( 'Unsupported DATASET type: ' + dataset );\n\n\t\t\t\t} else if ( line.indexOf( 'POINTS' ) === 0 ) {\n\n\t\t\t\t\t// Add the points\n\t\t\t\t\tconst numberOfPoints = parseInt( line.split( ' ' )[ 1 ], 10 );\n\n\t\t\t\t\t// Each point is 3 4-byte floats\n\t\t\t\t\tconst count = numberOfPoints * 4 * 3;\n\n\t\t\t\t\tpoints = new Float32Array( numberOfPoints * 3 );\n\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfPoints; i ++ ) {\n\n\t\t\t\t\t\tpoints[ 3 * i ] = dataView.getFloat32( pointIndex, false );\n\t\t\t\t\t\tpoints[ 3 * i + 1 ] = dataView.getFloat32( pointIndex + 4, false );\n\t\t\t\t\t\tpoints[ 3 * i + 2 ] = dataView.getFloat32( pointIndex + 8, false );\n\t\t\t\t\t\tpointIndex = pointIndex + 12;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'TRIANGLE_STRIPS' ) === 0 ) {\n\n\t\t\t\t\tconst numberOfStrips = parseInt( line.split( ' ' )[ 1 ], 10 );\n\t\t\t\t\tconst size = parseInt( line.split( ' ' )[ 2 ], 10 );\n\t\t\t\t\t// 4 byte integers\n\t\t\t\t\tconst count = size * 4;\n\n\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\t\t\t\t\tlet indicesIndex = 0;\n\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfStrips; i ++ ) {\n\n\t\t\t\t\t\t// For each strip, read the first value, then record that many more points\n\t\t\t\t\t\tconst indexCount = dataView.getInt32( pointIndex, false );\n\t\t\t\t\t\tconst strip = [];\n\t\t\t\t\t\tpointIndex += 4;\n\t\t\t\t\t\tfor ( let s = 0; s < indexCount; s ++ ) {\n\n\t\t\t\t\t\t\tstrip.push( dataView.getInt32( pointIndex, false ) );\n\t\t\t\t\t\t\tpointIndex += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// retrieves the n-2 triangles from the triangle strip\n\t\t\t\t\t\tfor ( let j = 0; j < indexCount - 2; j ++ ) {\n\n\t\t\t\t\t\t\tif ( j % 2 ) {\n\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'POLYGONS' ) === 0 ) {\n\n\t\t\t\t\tconst numberOfStrips = parseInt( line.split( ' ' )[ 1 ], 10 );\n\t\t\t\t\tconst size = parseInt( line.split( ' ' )[ 2 ], 10 );\n\t\t\t\t\t// 4 byte integers\n\t\t\t\t\tconst count = size * 4;\n\n\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\t\t\t\t\tlet indicesIndex = 0;\n\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfStrips; i ++ ) {\n\n\t\t\t\t\t\t// For each strip, read the first value, then record that many more points\n\t\t\t\t\t\tconst indexCount = dataView.getInt32( pointIndex, false );\n\t\t\t\t\t\tconst strip = [];\n\t\t\t\t\t\tpointIndex += 4;\n\t\t\t\t\t\tfor ( let s = 0; s < indexCount; s ++ ) {\n\n\t\t\t\t\t\t\tstrip.push( dataView.getInt32( pointIndex, false ) );\n\t\t\t\t\t\t\tpointIndex += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// divide the polygon in n-2 triangle\n\t\t\t\t\t\tfor ( let j = 1; j < indexCount - 1; j ++ ) {\n\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ 0 ];\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'POINT_DATA' ) === 0 ) {\n\n\t\t\t\t\tconst numberOfPoints = parseInt( line.split( ' ' )[ 1 ], 10 );\n\n\t\t\t\t\t// Grab the next line\n\t\t\t\t\tstate = findString( buffer, state.next );\n\n\t\t\t\t\t// Now grab the binary data\n\t\t\t\t\tconst count = numberOfPoints * 4 * 3;\n\n\t\t\t\t\tnormals = new Float32Array( numberOfPoints * 3 );\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfPoints; i ++ ) {\n\n\t\t\t\t\t\tnormals[ 3 * i ] = dataView.getFloat32( pointIndex, false );\n\t\t\t\t\t\tnormals[ 3 * i + 1 ] = dataView.getFloat32( pointIndex + 4, false );\n\t\t\t\t\t\tnormals[ 3 * i + 2 ] = dataView.getFloat32( pointIndex + 8, false );\n\t\t\t\t\t\tpointIndex += 12;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Increment past our data\n\t\t\t\t\tstate.next = state.next + count;\n\n\t\t\t\t}\n\n\t\t\t\t// Increment index\n\t\t\t\tindex = state.next;\n\n\t\t\t\tif ( index >= buffer.byteLength ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( points, 3 ) );\n\n\t\t\tif ( normals.length === points.length ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction Float32Concat( first, second ) {\n\n\t\t\tconst firstLength = first.length, result = new Float32Array( firstLength + second.length );\n\n\t\t\tresult.set( first );\n\t\t\tresult.set( second, firstLength );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction Int32Concat( first, second ) {\n\n\t\t\tconst firstLength = first.length, result = new Int32Array( firstLength + second.length );\n\n\t\t\tresult.set( first );\n\t\t\tresult.set( second, firstLength );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction parseXML( stringFile ) {\n\n\t\t\t// Changes XML to JSON, based on https://davidwalsh.name/convert-xml-json\n\n\t\t\tfunction xmlToJson( xml ) {\n\n\t\t\t\t// Create the return object\n\t\t\t\tlet obj = {};\n\n\t\t\t\tif ( xml.nodeType === 1 ) { // element\n\n\t\t\t\t\t// do attributes\n\n\t\t\t\t\tif ( xml.attributes ) {\n\n\t\t\t\t\t\tif ( xml.attributes.length > 0 ) {\n\n\t\t\t\t\t\t\tobj[ 'attributes' ] = {};\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < xml.attributes.length; j ++ ) {\n\n\t\t\t\t\t\t\t\tconst attribute = xml.attributes.item( j );\n\t\t\t\t\t\t\t\tobj[ 'attributes' ][ attribute.nodeName ] = attribute.nodeValue.trim();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( xml.nodeType === 3 ) { // text\n\n\t\t\t\t\tobj = xml.nodeValue.trim();\n\n\t\t\t\t}\n\n\t\t\t\t// do children\n\t\t\t\tif ( xml.hasChildNodes() ) {\n\n\t\t\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\t\t\tconst item = xml.childNodes.item( i );\n\t\t\t\t\t\tconst nodeName = item.nodeName;\n\n\t\t\t\t\t\tif ( typeof obj[ nodeName ] === 'undefined' ) {\n\n\t\t\t\t\t\t\tconst tmp = xmlToJson( item );\n\n\t\t\t\t\t\t\tif ( tmp !== '' ) {\n\n\t\t\t\t\t\t\t\tif ( Array.isArray( tmp[ '#text' ] ) ) {\n\n\t\t\t\t\t\t\t\t\ttmp[ '#text' ] = tmp[ '#text' ][ 0 ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tobj[ nodeName ] = tmp;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( typeof obj[ nodeName ].push === 'undefined' ) {\n\n\t\t\t\t\t\t\t\tconst old = obj[ nodeName ];\n\t\t\t\t\t\t\t\tobj[ nodeName ] = [ old ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst tmp = xmlToJson( item );\n\n\t\t\t\t\t\t\tif ( tmp !== '' ) {\n\n\t\t\t\t\t\t\t\tif ( Array.isArray( tmp[ '#text' ] ) ) {\n\n\t\t\t\t\t\t\t\t\ttmp[ '#text' ] = tmp[ '#text' ][ 0 ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tobj[ nodeName ].push( tmp );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\n\t\t\t}\n\n\t\t\t// Taken from Base64-js\n\t\t\tfunction Base64toByteArray( b64 ) {\n\n\t\t\t\tconst Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\n\t\t\t\tconst revLookup = [];\n\t\t\t\tconst code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n\t\t\t\tfor ( let i = 0, l = code.length; i < l; ++ i ) {\n\n\t\t\t\t\trevLookup[ code.charCodeAt( i ) ] = i;\n\n\t\t\t\t}\n\n\t\t\t\trevLookup[ '-'.charCodeAt( 0 ) ] = 62;\n\t\t\t\trevLookup[ '_'.charCodeAt( 0 ) ] = 63;\n\n\t\t\t\tconst len = b64.length;\n\n\t\t\t\tif ( len % 4 > 0 ) {\n\n\t\t\t\t\tthrow new Error( 'Invalid string. Length must be a multiple of 4' );\n\n\t\t\t\t}\n\n\t\t\t\tconst placeHolders = b64[ len - 2 ] === '=' ? 2 : b64[ len - 1 ] === '=' ? 1 : 0;\n\t\t\t\tconst arr = new Arr( len * 3 / 4 - placeHolders );\n\t\t\t\tconst l = placeHolders > 0 ? len - 4 : len;\n\n\t\t\t\tlet L = 0;\n\t\t\t\tlet i, j;\n\n\t\t\t\tfor ( i = 0, j = 0; i < l; i += 4, j += 3 ) {\n\n\t\t\t\t\tconst tmp = ( revLookup[ b64.charCodeAt( i ) ] << 18 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] << 12 ) | ( revLookup[ b64.charCodeAt( i + 2 ) ] << 6 ) | revLookup[ b64.charCodeAt( i + 3 ) ];\n\t\t\t\t\tarr[ L ++ ] = ( tmp & 0xFF0000 ) >> 16;\n\t\t\t\t\tarr[ L ++ ] = ( tmp & 0xFF00 ) >> 8;\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t}\n\n\t\t\t\tif ( placeHolders === 2 ) {\n\n\t\t\t\t\tconst tmp = ( revLookup[ b64.charCodeAt( i ) ] << 2 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] >> 4 );\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t} else if ( placeHolders === 1 ) {\n\n\t\t\t\t\tconst tmp = ( revLookup[ b64.charCodeAt( i ) ] << 10 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] << 4 ) | ( revLookup[ b64.charCodeAt( i + 2 ) ] >> 2 );\n\t\t\t\t\tarr[ L ++ ] = ( tmp >> 8 ) & 0xFF;\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t}\n\n\t\t\t\treturn arr;\n\n\t\t\t}\n\n\t\t\tfunction parseDataArray( ele, compressed ) {\n\n\t\t\t\tlet numBytes = 0;\n\n\t\t\t\tif ( json.attributes.header_type === 'UInt64' ) {\n\n\t\t\t\t\tnumBytes = 8;\n\n\t\t\t\t}\telse if ( json.attributes.header_type === 'UInt32' ) {\n\n\t\t\t\t\tnumBytes = 4;\n\n\t\t\t\t}\n\n\t\t\t\tlet txt, content;\n\n\t\t\t\t// Check the format\n\t\t\t\tif ( ele.attributes.format === 'binary' && compressed ) {\n\n\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\ttxt = new Float32Array( );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' || ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\ttxt = new Int32Array( );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// VTP data with the header has the following structure:\n\t\t\t\t\t// [#blocks][#u-size][#p-size][#c-size-1][#c-size-2]...[#c-size-#blocks][DATA]\n\t\t\t\t\t//\n\t\t\t\t\t// Each token is an integer value whose type is specified by \"header_type\" at the top of the file (UInt32 if no type specified). The token meanings are:\n\t\t\t\t\t// [#blocks] = Number of blocks\n\t\t\t\t\t// [#u-size] = Block size before compression\n\t\t\t\t\t// [#p-size] = Size of last partial block (zero if it not needed)\n\t\t\t\t\t// [#c-size-i] = Size in bytes of block i after compression\n\t\t\t\t\t//\n\t\t\t\t\t// The [DATA] portion stores contiguously every block appended together. The offset from the beginning of the data section to the beginning of a block is\n\t\t\t\t\t// computed by summing the compressed block sizes from preceding blocks according to the header.\n\n\t\t\t\t\tconst textNode = ele[ '#text' ];\n\t\t\t\t\tconst rawData = Array.isArray( textNode ) ? textNode[ 0 ] : textNode;\n\n\t\t\t\t\tconst byteData = Base64toByteArray( rawData );\n\n\t\t\t\t\t// Each data point consists of 8 bits regardless of the header type\n\t\t\t\t\tconst dataPointSize = 8;\n\n\t\t\t\t\tlet blocks = byteData[ 0 ];\n\t\t\t\t\tfor ( let i = 1; i < numBytes - 1; i ++ ) {\n\n\t\t\t\t\t\tblocks = blocks | ( byteData[ i ] << ( i * dataPointSize ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet headerSize = ( blocks + 3 ) * numBytes;\n\t\t\t\t\tconst padding = ( ( headerSize % 3 ) > 0 ) ? 3 - ( headerSize % 3 ) : 0;\n\t\t\t\t\theaderSize = headerSize + padding;\n\n\t\t\t\t\tconst dataOffsets = [];\n\t\t\t\t\tlet currentOffset = headerSize;\n\t\t\t\t\tdataOffsets.push( currentOffset );\n\n\t\t\t\t\t// Get the blocks sizes after the compression.\n\t\t\t\t\t// There are three blocks before c-size-i, so we skip 3*numBytes\n\t\t\t\t\tconst cSizeStart = 3 * numBytes;\n\n\t\t\t\t\tfor ( let i = 0; i < blocks; i ++ ) {\n\n\t\t\t\t\t\tlet currentBlockSize = byteData[ i * numBytes + cSizeStart ];\n\n\t\t\t\t\t\tfor ( let j = 1; j < numBytes - 1; j ++ ) {\n\n\t\t\t\t\t\t\tcurrentBlockSize = currentBlockSize | ( byteData[ i * numBytes + cSizeStart + j ] << ( j * dataPointSize ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentOffset = currentOffset + currentBlockSize;\n\t\t\t\t\t\tdataOffsets.push( currentOffset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0; i < dataOffsets.length - 1; i ++ ) {\n\n\t\t\t\t\t\tconst data = fflate.unzlibSync( byteData.slice( dataOffsets[ i ], dataOffsets[ i + 1 ] ) );\n\t\t\t\t\t\tcontent = data.buffer;\n\n\t\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\t\tcontent = new Float32Array( content );\n\t\t\t\t\t\t\ttxt = Float32Concat( txt, content );\n\n\t\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' || ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\t\tcontent = new Int32Array( content );\n\t\t\t\t\t\t\ttxt = Int32Concat( txt, content );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete ele[ '#text' ];\n\n\t\t\t\t\tif ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\tif ( ele.attributes.format === 'binary' ) {\n\n\t\t\t\t\t\t\ttxt = txt.filter( function ( el, idx ) {\n\n\t\t\t\t\t\t\t\tif ( idx % 2 !== 1 ) return true;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ele.attributes.format === 'binary' && ! compressed ) {\n\n\t\t\t\t\t\tcontent = Base64toByteArray( ele[ '#text' ] );\n\n\t\t\t\t\t\t// VTP data for the uncompressed case has the following structure:\n\t\t\t\t\t\t// [#bytes][DATA]\n\t\t\t\t\t\t// where \"[#bytes]\" is an integer value specifying the number of bytes in the block of data following it.\n\t\t\t\t\t\tcontent = content.slice( numBytes ).buffer;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ele[ '#text' ] ) {\n\n\t\t\t\t\t\t\tcontent = ele[ '#text' ].split( /\\s+/ ).filter( function ( el ) {\n\n\t\t\t\t\t\t\t\tif ( el !== '' ) return el;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tcontent = new Int32Array( 0 ).buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete ele[ '#text' ];\n\n\t\t\t\t\t// Get the content and optimize it\n\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\ttxt = new Float32Array( content );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' ) {\n\n\t\t\t\t\t\ttxt = new Int32Array( content );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\ttxt = new Int32Array( content );\n\n\t\t\t\t\t\tif ( ele.attributes.format === 'binary' ) {\n\n\t\t\t\t\t\t\ttxt = txt.filter( function ( el, idx ) {\n\n\t\t\t\t\t\t\t\tif ( idx % 2 !== 1 ) return true;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} // endif ( ele.attributes.format === 'binary' && compressed )\n\n\t\t\t\treturn txt;\n\n\t\t\t}\n\n\t\t\t// Main part\n\t\t\t// Get Dom\n\t\t\tconst dom = new DOMParser().parseFromString( stringFile, 'application/xml' );\n\n\t\t\t// Get the doc\n\t\t\tconst doc = dom.documentElement;\n\t\t\t// Convert to json\n\t\t\tconst json = xmlToJson( doc );\n\t\t\tlet points = [];\n\t\t\tlet normals = [];\n\t\t\tlet indices = [];\n\n\t\t\tif ( json.AppendedData ) {\n\n\t\t\t\tconst appendedData = json.AppendedData[ '#text' ].slice( 1 );\n\t\t\t\tconst piece = json.PolyData.Piece;\n\n\t\t\t\tconst sections = [ 'PointData', 'CellData', 'Points', 'Verts', 'Lines', 'Strips', 'Polys' ];\n\t\t\t\tlet sectionIndex = 0;\n\n\t\t\t\tconst offsets = sections.map( s => {\n\n\t\t\t\t\tconst sect = piece[ s ];\n\n\t\t\t\t\tif ( sect && sect.DataArray ) {\n\n\t\t\t\t\t\tconst arr = Array.isArray( sect.DataArray ) ? sect.DataArray : [ sect.DataArray ];\n\n\t\t\t\t\t\treturn arr.map( a => a.attributes.offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\n\t\t\t\t} ).flat();\n\n\t\t\t\tfor ( const sect of sections ) {\n\n\t\t\t\t\tconst section = piece[ sect ];\n\n\t\t\t\t\tif ( section && section.DataArray ) {\n\n\t\t\t\t\t\tif ( Array.isArray( section.DataArray ) ) {\n\n\t\t\t\t\t\t\tfor ( const sectionEle of section.DataArray ) {\n\n\t\t\t\t\t\t\t\tsectionEle[ '#text' ] = appendedData.slice( offsets[ sectionIndex ], offsets[ sectionIndex + 1 ] );\n\t\t\t\t\t\t\t\tsectionEle.attributes.format = 'binary';\n\t\t\t\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tsection.DataArray[ '#text' ] = appendedData.slice( offsets[ sectionIndex ], offsets[ sectionIndex + 1 ] );\n\t\t\t\t\t\t\tsection.DataArray.attributes.format = 'binary';\n\t\t\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.PolyData ) {\n\n\t\t\t\tconst piece = json.PolyData.Piece;\n\t\t\t\tconst compressed = json.attributes.hasOwnProperty( 'compressor' );\n\n\t\t\t\t// Can be optimized\n\t\t\t\t// Loop through the sections\n\t\t\t\tconst sections = [ 'PointData', 'Points', 'Strips', 'Polys' ];// +['CellData', 'Verts', 'Lines'];\n\t\t\t\tlet sectionIndex = 0;\n\t\t\t\tconst numberOfSections = sections.length;\n\n\t\t\t\twhile ( sectionIndex < numberOfSections ) {\n\n\t\t\t\t\tconst section = piece[ sections[ sectionIndex ] ];\n\n\t\t\t\t\t// If it has a DataArray in it\n\n\t\t\t\t\tif ( section && section.DataArray ) {\n\n\t\t\t\t\t\t// Depending on the number of DataArrays\n\n\t\t\t\t\t\tlet arr;\n\n\t\t\t\t\t\tif ( Array.isArray( section.DataArray ) ) {\n\n\t\t\t\t\t\t\tarr = section.DataArray;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tarr = [ section.DataArray ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet dataArrayIndex = 0;\n\t\t\t\t\t\tconst numberOfDataArrays = arr.length;\n\n\t\t\t\t\t\twhile ( dataArrayIndex < numberOfDataArrays ) {\n\n\t\t\t\t\t\t\t// Parse the DataArray\n\t\t\t\t\t\t\tif ( ( '#text' in arr[ dataArrayIndex ] ) && ( arr[ dataArrayIndex ][ '#text' ].length > 0 ) ) {\n\n\t\t\t\t\t\t\t\tarr[ dataArrayIndex ].text = parseDataArray( arr[ dataArrayIndex ], compressed );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdataArrayIndex ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch ( sections[ sectionIndex ] ) {\n\n\t\t\t\t\t\t\t// if iti is point data\n\t\t\t\t\t\t\tcase 'PointData':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfPoints = parseInt( piece.attributes.NumberOfPoints );\n\t\t\t\t\t\t\t\t\tconst normalsName = section.attributes.Normals;\n\n\t\t\t\t\t\t\t\t\tif ( numberOfPoints > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, len = arr.length; i < len; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( normalsName === arr[ i ].attributes.Name ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst components = arr[ i ].attributes.NumberOfComponents;\n\t\t\t\t\t\t\t\t\t\t\t\tnormals = new Float32Array( numberOfPoints * components );\n\t\t\t\t\t\t\t\t\t\t\t\tnormals.set( arr[ i ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is points\n\t\t\t\t\t\t\tcase 'Points':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfPoints = parseInt( piece.attributes.NumberOfPoints );\n\n\t\t\t\t\t\t\t\t\tif ( numberOfPoints > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tconst components = section.DataArray.attributes.NumberOfComponents;\n\t\t\t\t\t\t\t\t\t\tpoints = new Float32Array( numberOfPoints * components );\n\t\t\t\t\t\t\t\t\t\tpoints.set( section.DataArray.text, 0 );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is strips\n\t\t\t\t\t\t\tcase 'Strips':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfStrips = parseInt( piece.attributes.NumberOfStrips );\n\n\t\t\t\t\t\t\t\t\tif ( numberOfStrips > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tconst connectivity = new Int32Array( section.DataArray[ 0 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconst offset = new Int32Array( section.DataArray[ 1 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconnectivity.set( section.DataArray[ 0 ].text, 0 );\n\t\t\t\t\t\t\t\t\t\toffset.set( section.DataArray[ 1 ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\tconst size = numberOfStrips + connectivity.length;\n\t\t\t\t\t\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\n\t\t\t\t\t\t\t\t\t\tlet indicesIndex = 0;\n\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, len = numberOfStrips; i < len; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst strip = [];\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( let s = 0, len1 = offset[ i ], len0 = 0; s < len1 - len0; s ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tstrip.push( connectivity[ s ] );\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( i > 0 ) len0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( let j = 0, len1 = offset[ i ], len0 = 0; j < len1 - len0 - 2; j ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( j % 2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( i > 0 ) len0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is polys\n\t\t\t\t\t\t\tcase 'Polys':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfPolys = parseInt( piece.attributes.NumberOfPolys );\n\n\t\t\t\t\t\t\t\t\tif ( numberOfPolys > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tconst connectivity = new Int32Array( section.DataArray[ 0 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconst offset = new Int32Array( section.DataArray[ 1 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconnectivity.set( section.DataArray[ 0 ].text, 0 );\n\t\t\t\t\t\t\t\t\t\toffset.set( section.DataArray[ 1 ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\tconst size = numberOfPolys + connectivity.length;\n\t\t\t\t\t\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfPolys );\n\t\t\t\t\t\t\t\t\t\tlet indicesIndex = 0, connectivityIndex = 0;\n\t\t\t\t\t\t\t\t\t\tlet i = 0, len0 = 0;\n\t\t\t\t\t\t\t\t\t\tconst len = numberOfPolys;\n\n\t\t\t\t\t\t\t\t\t\twhile ( i < len ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst poly = [];\n\t\t\t\t\t\t\t\t\t\t\tlet s = 0;\n\t\t\t\t\t\t\t\t\t\t\tconst len1 = offset[ i ];\n\n\t\t\t\t\t\t\t\t\t\t\twhile ( s < len1 - len0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tpoly.push( connectivity[ connectivityIndex ++ ] );\n\t\t\t\t\t\t\t\t\t\t\t\ts ++;\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tlet j = 1;\n\n\t\t\t\t\t\t\t\t\t\t\twhile ( j < len1 - len0 - 1 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ 0 ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ j + 1 ];\n\t\t\t\t\t\t\t\t\t\t\t\tj ++;\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\ti ++;\n\t\t\t\t\t\t\t\t\t\t\tlen0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst geometry = new BufferGeometry();\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( points, 3 ) );\n\n\t\t\t\tif ( normals.length === points.length ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn geometry;\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Unsupported DATASET type' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst textDecoder = new TextDecoder();\n\n\t\t// get the 5 first lines of the files to check if there is the key word binary\n\t\tconst meta = textDecoder.decode( new Uint8Array( data, 0, 250 ) ).split( '\\n' );\n\n\t\tif ( meta[ 0 ].indexOf( 'xml' ) !== - 1 ) {\n\n\t\t\treturn parseXML( textDecoder.decode( data ) );\n\n\t\t} else if ( meta[ 2 ].includes( 'ASCII' ) ) {\n\n\t\t\treturn parseASCII( textDecoder.decode( data ) );\n\n\t\t} else {\n\n\t\t\treturn parseBinary( data );\n\n\t\t}\n\n\t}\n\n}\n\nexport { VTKLoader };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader\n} from 'three';\n\nclass XYZLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst lines = text.split( '\\n' );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\t\tconst color = new Color();\n\n\t\tfor ( let line of lines ) {\n\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.charAt( 0 ) === '#' ) continue; // skip comments\n\n\t\t\tconst lineValues = line.split( /\\s+/ );\n\n\t\t\tif ( lineValues.length === 3 ) {\n\n\t\t\t\t// XYZ\n\n\t\t\t\tvertices.push( parseFloat( lineValues[ 0 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 1 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( lineValues.length === 6 ) {\n\n\t\t\t\t// XYZRGB\n\n\t\t\t\tvertices.push( parseFloat( lineValues[ 0 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 1 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 2 ] ) );\n\n\t\t\t\tconst r = parseFloat( lineValues[ 3 ] ) / 255;\n\t\t\t\tconst g = parseFloat( lineValues[ 4 ] ) / 255;\n\t\t\t\tconst b = parseFloat( lineValues[ 5 ] ) / 255;\n\n\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\tif ( colors.length > 0 ) {\n\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nexport { XYZLoader };\n", "/**\n * MeshGouraudMaterial\n *\n * Lambert illumination model with Gouraud (per-vertex) shading\n *\n */\n\nimport { UniformsUtils, UniformsLib, ShaderMaterial, Color, MultiplyOperation } from 'three';\n\nconst GouraudShader = {\n\n\tname: 'GouraudShader',\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.specularmap,\n\t\tUniformsLib.envmap,\n\t\tUniformsLib.aomap,\n\t\tUniformsLib.lightmap,\n\t\tUniformsLib.emissivemap,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.lights,\n\t\t{\n\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t}\n\t] ),\n\n\tvertexShader: /* glsl */`\n\n\t\t#define GOURAUD\n\n\t\tvarying vec3 vLightFront;\n\t\tvarying vec3 vIndirectFront;\n\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvarying vec3 vLightBack;\n\t\t\tvarying vec3 vIndirectBack;\n\t\t#endif\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\n\t\t\t// inlining legacy \n\n\t\t\tvec3 diffuse = vec3( 1.0 );\n\n\t\t\tvec3 geometryPosition = mvPosition.xyz;\n\t\t\tvec3 geometryNormal = normalize( transformedNormal );\n\t\t\tvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\n\n\t\t\tvec3 backGeometryNormal = - geometryNormal;\n\n\t\t\tvLightFront = vec3( 0.0 );\n\t\t\tvIndirectFront = vec3( 0.0 );\n\t\t\t#ifdef DOUBLE_SIDED\n\t\t\t\tvLightBack = vec3( 0.0 );\n\t\t\t\tvIndirectBack = vec3( 0.0 );\n\t\t\t#endif\n\n\t\t\tIncidentLight directLight;\n\t\t\tfloat dotNL;\n\t\t\tvec3 directLightColor_Diffuse;\n\n\t\t\tvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\n\n\t\t\t#if defined( USE_LIGHT_PROBES )\n\n\t\t\t\tvIndirectFront += getLightProbeIrradiance( lightProbe, geometryNormal );\n\n\t\t\t#endif\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\n\t\t\t\t#if defined( USE_LIGHT_PROBES )\n\n\t\t\t\t\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometryNormal );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\t#if NUM_POINT_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\t\t\t\tgetPointLightInfo( pointLights[ i ], geometryPosition, directLight );\n\n\t\t\t\t\tdotNL = dot( geometryNormal, directLight.direction );\n\t\t\t\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\t\t\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#if NUM_SPOT_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\t\t\t\tgetSpotLightInfo( spotLights[ i ], geometryPosition, directLight );\n\n\t\t\t\t\tdotNL = dot( geometryNormal, directLight.direction );\n\t\t\t\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\t\t\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#endif\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#if NUM_DIR_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\t\t\tgetDirectionalLightInfo( directionalLights[ i ], directLight );\n\n\t\t\t\t\tdotNL = dot( geometryNormal, directLight.direction );\n\t\t\t\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\t\t\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#if NUM_HEMI_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\t\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometryNormal );\n\n\t\t\t\t\t#endif\n\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define GOURAUD\n\n\t\tuniform vec3 diffuse;\n\t\tuniform vec3 emissive;\n\t\tuniform float opacity;\n\n\t\tvarying vec3 vLightFront;\n\t\tvarying vec3 vIndirectFront;\n\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvarying vec3 vLightBack;\n\t\t\tvarying vec3 vIndirectBack;\n\t\t#endif\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t\t\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t\t\tvec3 totalEmissiveRadiance = emissive;\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t// accumulation\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\n\t\t\t#else\n\n\t\t\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_LIGHTMAP\n\n\t\t\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\t\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\t\t\treflectedLight.indirectDiffuse += lightMapIrradiance;\n\n\t\t\t#endif\n\n\t\t\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\n\t\t\t#else\n\n\t\t\t\treflectedLight.directDiffuse = vLightFront;\n\n\t\t\t#endif\n\n\t\t\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\n\t\t\t// modulation\n\n\t\t\t#include \n\n\t\t\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\n//\n\nclass MeshGouraudMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshGouraudMaterial = true;\n\n\t\tthis.type = 'MeshGouraudMaterial';\n\n\t\t//this.color = new THREE.Color( 0xffffff ); // diffuse\n\n\t\t//this.map = null;\n\n\t\t//this.lightMap = null;\n\t\t//this.lightMapIntensity = 1.0;\n\n\t\t//this.aoMap = null;\n\t\t//this.aoMapIntensity = 1.0;\n\n\t\t//this.emissive = new THREE.Color( 0x000000 );\n\t\t//this.emissiveIntensity = 1.0;\n\t\t//this.emissiveMap = null;\n\n\t\t//this.specularMap = null;\n\n\t\t//this.alphaMap = null;\n\n\t\t//this.envMap = null;\n\t\tthis.combine = MultiplyOperation; // combine has no uniform\n\t\t//this.reflectivity = 1;\n\t\t//this.refractionRatio = 0.98;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = true; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tconst shader = GouraudShader;\n\n\t\tthis.defines = Object.assign( {}, shader.defines );\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\t\tthis.vertexShader = shader.vertexShader;\n\t\tthis.fragmentShader = shader.fragmentShader;\n\n\t\tconst exposePropertyNames = [\n\t\t\t'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity',\n\t\t\t'emissive', 'emissiveIntensity', 'emissiveMap', 'specularMap', 'alphaMap',\n\t\t\t'envMap', 'reflectivity', 'refractionRatio', 'opacity', 'diffuse'\n\t\t];\n\n\t\tfor ( const propertyName of exposePropertyNames ) {\n\n\t\t\tObject.defineProperty( this, propertyName, {\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms[ propertyName ].value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms[ propertyName ].value = value;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\tObject.defineProperty( this, 'color', Object.getOwnPropertyDescriptor( this, 'diffuse' ) );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshGouraudMaterial };\n", "import {\n\tVector3\n} from 'three';\n\nclass Capsule {\n\n\tconstructor( start = new Vector3( 0, 0, 0 ), end = new Vector3( 0, 1, 0 ), radius = 1 ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.radius = radius;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Capsule( this.start.clone(), this.end.clone(), this.radius );\n\n\t}\n\n\tset( start, end, radius ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\t\tthis.radius = radius;\n\n\t}\n\n\tcopy( capsule ) {\n\n\t\tthis.start.copy( capsule.start );\n\t\tthis.end.copy( capsule.end );\n\t\tthis.radius = capsule.radius;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.copy( this.end ).add( this.start ).multiplyScalar( 0.5 );\n\n\t}\n\n\ttranslate( v ) {\n\n\t\tthis.start.add( v );\n\t\tthis.end.add( v );\n\n\t}\n\n\tcheckAABBAxis( p1x, p1y, p2x, p2y, minx, maxx, miny, maxy, radius ) {\n\n\t\treturn (\n\t\t\t( minx - p1x < radius || minx - p2x < radius ) &&\n\t\t\t( p1x - maxx < radius || p2x - maxx < radius ) &&\n\t\t\t( miny - p1y < radius || miny - p2y < radius ) &&\n\t\t\t( p1y - maxy < radius || p2y - maxy < radius )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn (\n\t\t\tthis.checkAABBAxis(\n\t\t\t\tthis.start.x, this.start.y, this.end.x, this.end.y,\n\t\t\t\tbox.min.x, box.max.x, box.min.y, box.max.y,\n\t\t\t\tthis.radius ) &&\n\t\t\tthis.checkAABBAxis(\n\t\t\t\tthis.start.x, this.start.z, this.end.x, this.end.z,\n\t\t\t\tbox.min.x, box.max.x, box.min.z, box.max.z,\n\t\t\t\tthis.radius ) &&\n\t\t\tthis.checkAABBAxis(\n\t\t\t\tthis.start.y, this.start.z, this.end.y, this.end.z,\n\t\t\t\tbox.min.y, box.max.y, box.min.z, box.max.z,\n\t\t\t\tthis.radius )\n\t\t);\n\n\t}\n\n}\n\nexport { Capsule };\n", "import { MathUtils } from 'three';\n\nconst _hsl = {};\n\nclass ColorConverter {\n\n\tstatic setHSV( color, h, s, v ) {\n\n\t\t// https://gist.github.com/xpansive/1337890#file-index-js\n\n\t\th = MathUtils.euclideanModulo( h, 1 );\n\t\ts = MathUtils.clamp( s, 0, 1 );\n\t\tv = MathUtils.clamp( v, 0, 1 );\n\n\t\treturn color.setHSL( h, ( s * v ) / ( ( h = ( 2 - s ) * v ) < 1 ? h : ( 2 - h ) ), h * 0.5 );\n\n\t}\n\n\tstatic getHSV( color, target ) {\n\n\t\tcolor.getHSL( _hsl );\n\n\t\t// based on https://gist.github.com/xpansive/1337890#file-index-js\n\t\t_hsl.s *= ( _hsl.l < 0.5 ) ? _hsl.l : ( 1 - _hsl.l );\n\n\t\ttarget.h = _hsl.h;\n\t\ttarget.s = 2 * _hsl.s / ( _hsl.l + _hsl.s );\n\t\ttarget.v = _hsl.l + _hsl.s;\n\n\t\treturn target;\n\n\t}\n\n}\n\nexport { ColorConverter };\n", "// https://cs.nyu.edu/~perlin/noise/\n\nconst _p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,\n\t 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,\n\t 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,\n\t 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208,\n\t 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5,\n\t 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119,\n\t 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,\n\t 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,\n\t 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205,\n\t 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 ];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_p[ 256 + i ] = _p[ i ];\n\n}\n\nfunction fade( t ) {\n\n\treturn t * t * t * ( t * ( t * 6 - 15 ) + 10 );\n\n}\n\nfunction lerp( t, a, b ) {\n\n\treturn a + t * ( b - a );\n\n}\n\nfunction grad( hash, x, y, z ) {\n\n\tconst h = hash & 15;\n\tconst u = h < 8 ? x : y, v = h < 4 ? y : h == 12 || h == 14 ? x : z;\n\treturn ( ( h & 1 ) == 0 ? u : - u ) + ( ( h & 2 ) == 0 ? v : - v );\n\n}\n\nclass ImprovedNoise {\n\n\tnoise( x, y, z ) {\n\n\t\tconst floorX = Math.floor( x ), floorY = Math.floor( y ), floorZ = Math.floor( z );\n\n\t\tconst X = floorX & 255, Y = floorY & 255, Z = floorZ & 255;\n\n\t\tx -= floorX;\n\t\ty -= floorY;\n\t\tz -= floorZ;\n\n\t\tconst xMinus1 = x - 1, yMinus1 = y - 1, zMinus1 = z - 1;\n\n\t\tconst u = fade( x ), v = fade( y ), w = fade( z );\n\n\t\tconst A = _p[ X ] + Y, AA = _p[ A ] + Z, AB = _p[ A + 1 ] + Z, B = _p[ X + 1 ] + Y, BA = _p[ B ] + Z, BB = _p[ B + 1 ] + Z;\n\n\t\treturn lerp( w, lerp( v, lerp( u, grad( _p[ AA ], x, y, z ),\n\t\t\tgrad( _p[ BA ], xMinus1, y, z ) ),\n\t\tlerp( u, grad( _p[ AB ], x, yMinus1, z ),\n\t\t\tgrad( _p[ BB ], xMinus1, yMinus1, z ) ) ),\n\t\tlerp( v, lerp( u, grad( _p[ AA + 1 ], x, y, zMinus1 ),\n\t\t\tgrad( _p[ BA + 1 ], xMinus1, y, zMinus1 ) ),\n\t\tlerp( u, grad( _p[ AB + 1 ], x, yMinus1, zMinus1 ),\n\t\t\tgrad( _p[ BB + 1 ], xMinus1, yMinus1, zMinus1 ) ) ) );\n\n\t}\n\n}\n\nexport { ImprovedNoise };\n", "import {\n\tColor,\n\tLinearSRGBColorSpace,\n\tMathUtils\n} from 'three';\n\nclass Lut {\n\n \tconstructor( colormap, count = 32 ) {\n\n\t\tthis.isLut = true;\n\n\t\tthis.lut = [];\n\t\tthis.map = [];\n\t\tthis.n = 0;\n\t\tthis.minV = 0;\n\t\tthis.maxV = 1;\n\n\t\tthis.setColorMap( colormap, count );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value.isLut === true ) {\n\n\t\t\tthis.copy( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetMin( min ) {\n\n\t\tthis.minV = min;\n\n\t\treturn this;\n\n\t}\n\n\tsetMax( max ) {\n\n\t\tthis.maxV = max;\n\n\t\treturn this;\n\n\t}\n\n\tsetColorMap( colormap, count = 32 ) {\n\n\t\tthis.map = ColorMapKeywords[ colormap ] || ColorMapKeywords.rainbow;\n\t\tthis.n = count;\n\n\t\tconst step = 1.0 / this.n;\n\t\tconst minColor = new Color();\n\t\tconst maxColor = new Color();\n\n\t\tthis.lut.length = 0;\n\n\t\t// sample at 0\n\n\t\tthis.lut.push( new Color( this.map[ 0 ][ 1 ] ) );\n\n\t\t// sample at 1/n, ..., (n-1)/n\n\n\t\tfor ( let i = 1; i < count; i ++ ) {\n\n\t\t\tconst alpha = i * step;\n\n\t\t\tfor ( let j = 0; j < this.map.length - 1; j ++ ) {\n\n\t\t\t\tif ( alpha > this.map[ j ][ 0 ] && alpha <= this.map[ j + 1 ][ 0 ] ) {\n\n\t\t\t\t\tconst min = this.map[ j ][ 0 ];\n\t\t\t\t\tconst max = this.map[ j + 1 ][ 0 ];\n\n\t\t\t\t\tminColor.setHex( this.map[ j ][ 1 ], LinearSRGBColorSpace );\n\t\t\t\t\tmaxColor.setHex( this.map[ j + 1 ][ 1 ], LinearSRGBColorSpace );\n\n\t\t\t\t\tconst color = new Color().lerpColors( minColor, maxColor, ( alpha - min ) / ( max - min ) );\n\n\t\t\t\t\tthis.lut.push( color );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// sample at 1\n\n\t\tthis.lut.push( new Color( this.map[ this.map.length - 1 ][ 1 ] ) );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( lut ) {\n\n\t\tthis.lut = lut.lut;\n\t\tthis.map = lut.map;\n\t\tthis.n = lut.n;\n\t\tthis.minV = lut.minV;\n\t\tthis.maxV = lut.maxV;\n\n\t\treturn this;\n\n\t}\n\n\tgetColor( alpha ) {\n\n\t\talpha = MathUtils.clamp( alpha, this.minV, this.maxV );\n\n\t\talpha = ( alpha - this.minV ) / ( this.maxV - this.minV );\n\n\t\tconst colorPosition = Math.round( alpha * this.n );\n\n\t\treturn this.lut[ colorPosition ];\n\n\t}\n\n\taddColorMap( name, arrayOfColors ) {\n\n\t\tColorMapKeywords[ name ] = arrayOfColors;\n\n\t\treturn this;\n\n\t}\n\n\tcreateCanvas() {\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = 1;\n\t\tcanvas.height = this.n;\n\n\t\tthis.updateCanvas( canvas );\n\n\t\treturn canvas;\n\n\t}\n\n\tupdateCanvas( canvas ) {\n\n\t\tconst ctx = canvas.getContext( '2d', { alpha: false } );\n\n\t\tconst imageData = ctx.getImageData( 0, 0, 1, this.n );\n\n\t\tconst data = imageData.data;\n\n\t\tlet k = 0;\n\n\t\tconst step = 1.0 / this.n;\n\n\t\tconst minColor = new Color();\n\t\tconst maxColor = new Color();\n\t\tconst finalColor = new Color();\n\n\t\tfor ( let i = 1; i >= 0; i -= step ) {\n\n\t\t\tfor ( let j = this.map.length - 1; j >= 0; j -- ) {\n\n\t\t\t\tif ( i < this.map[ j ][ 0 ] && i >= this.map[ j - 1 ][ 0 ] ) {\n\n\t\t\t\t\tconst min = this.map[ j - 1 ][ 0 ];\n\t\t\t\t\tconst max = this.map[ j ][ 0 ];\n\n\t\t\t\t\tminColor.setHex( this.map[ j - 1 ][ 1 ], LinearSRGBColorSpace );\n\t\t\t\t\tmaxColor.setHex( this.map[ j ][ 1 ], LinearSRGBColorSpace );\n\n\t\t\t\t\tfinalColor.lerpColors( minColor, maxColor, ( i - min ) / ( max - min ) );\n\n\t\t\t\t\tdata[ k * 4 ] = Math.round( finalColor.r * 255 );\n\t\t\t\t\tdata[ k * 4 + 1 ] = Math.round( finalColor.g * 255 );\n\t\t\t\t\tdata[ k * 4 + 2 ] = Math.round( finalColor.b * 255 );\n\t\t\t\t\tdata[ k * 4 + 3 ] = 255;\n\n\t\t\t\t\tk += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tctx.putImageData( imageData, 0, 0 );\n\n\t\treturn canvas;\n\n\t}\n\n}\n\nconst ColorMapKeywords = {\n\n\t'rainbow': [[ 0.0, 0x0000FF ], [ 0.2, 0x00FFFF ], [ 0.5, 0x00FF00 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFF0000 ]],\n\t'cooltowarm': [[ 0.0, 0x3C4EC2 ], [ 0.2, 0x9BBCFF ], [ 0.5, 0xDCDCDC ], [ 0.8, 0xF6A385 ], [ 1.0, 0xB40426 ]],\n\t'blackbody': [[ 0.0, 0x000000 ], [ 0.2, 0x780000 ], [ 0.5, 0xE63200 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFFFFFF ]],\n\t'grayscale': [[ 0.0, 0x000000 ], [ 0.2, 0x404040 ], [ 0.5, 0x7F7F80 ], [ 0.8, 0xBFBFBF ], [ 1.0, 0xFFFFFF ]]\n\n};\n\nexport { Lut, ColorMapKeywords };\n", "import {\n\tTriangle,\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Utility class for sampling weighted random points on the surface of a mesh.\n *\n * Building the sampler is a one-time O(n) operation. Once built, any number of\n * random samples may be selected in O(logn) time. Memory usage is O(n).\n *\n * References:\n * - http://www.joesfer.com/?p=84\n * - https://stackoverflow.com/a/4322940/1314762\n */\n\nconst _face = new Triangle();\nconst _color = new Vector3();\nconst _uva = new Vector2(), _uvb = new Vector2(), _uvc = new Vector2();\n\nclass MeshSurfaceSampler {\n\n\tconstructor( mesh ) {\n\n\t\tthis.geometry = mesh.geometry;\n\t\tthis.randomFunction = Math.random;\n\n\t\tthis.indexAttribute = this.geometry.index;\n\t\tthis.positionAttribute = this.geometry.getAttribute( 'position' );\n\t\tthis.normalAttribute = this.geometry.getAttribute( 'normal' );\n\t\tthis.colorAttribute = this.geometry.getAttribute( 'color' );\n\t\tthis.uvAttribute = this.geometry.getAttribute( 'uv' );\n\t\tthis.weightAttribute = null;\n\n\t\tthis.distribution = null;\n\n\t}\n\n\tsetWeightAttribute( name ) {\n\n\t\tthis.weightAttribute = name ? this.geometry.getAttribute( name ) : null;\n\n\t\treturn this;\n\n\t}\n\n\tbuild() {\n\n\t\tconst indexAttribute = this.indexAttribute;\n\t\tconst positionAttribute = this.positionAttribute;\n\t\tconst weightAttribute = this.weightAttribute;\n\n\t\tconst totalFaces = indexAttribute ? ( indexAttribute.count / 3 ) : ( positionAttribute.count / 3 );\n\t\tconst faceWeights = new Float32Array( totalFaces );\n\n\t\t// Accumulate weights for each mesh face.\n\n\t\tfor ( let i = 0; i < totalFaces; i ++ ) {\n\n\t\t\tlet faceWeight = 1;\n\n\t\t\tlet i0 = 3 * i;\n\t\t\tlet i1 = 3 * i + 1;\n\t\t\tlet i2 = 3 * i + 2;\n\n\t\t\tif ( indexAttribute ) {\n\n\t\t\t\ti0 = indexAttribute.getX( i0 );\n\t\t\t\ti1 = indexAttribute.getX( i1 );\n\t\t\t\ti2 = indexAttribute.getX( i2 );\n\n\t\t\t}\n\n\t\t\tif ( weightAttribute ) {\n\n\t\t\t\tfaceWeight = weightAttribute.getX( i0 )\n\t\t\t\t\t+ weightAttribute.getX( i1 )\n\t\t\t\t\t+ weightAttribute.getX( i2 );\n\n\t\t\t}\n\n\t\t\t_face.a.fromBufferAttribute( positionAttribute, i0 );\n\t\t\t_face.b.fromBufferAttribute( positionAttribute, i1 );\n\t\t\t_face.c.fromBufferAttribute( positionAttribute, i2 );\n\t\t\tfaceWeight *= _face.getArea();\n\n\t\t\tfaceWeights[ i ] = faceWeight;\n\n\t\t}\n\n\t\t// Store cumulative total face weights in an array, where weight index\n\t\t// corresponds to face index.\n\n\t\tconst distribution = new Float32Array( totalFaces );\n\t\tlet cumulativeTotal = 0;\n\n\t\tfor ( let i = 0; i < totalFaces; i ++ ) {\n\n\t\t\tcumulativeTotal += faceWeights[ i ];\n\t\t\tdistribution[ i ] = cumulativeTotal;\n\n\t\t}\n\n\t\tthis.distribution = distribution;\n\t\treturn this;\n\n\t}\n\n\tsetRandomGenerator( randomFunction ) {\n\n\t\tthis.randomFunction = randomFunction;\n\t\treturn this;\n\n\t}\n\n\tsample( targetPosition, targetNormal, targetColor, targetUV ) {\n\n\t\tconst faceIndex = this.sampleFaceIndex();\n\t\treturn this.sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV );\n\n\t}\n\n\tsampleFaceIndex() {\n\n\t\tconst cumulativeTotal = this.distribution[ this.distribution.length - 1 ];\n\t\treturn this.binarySearch( this.randomFunction() * cumulativeTotal );\n\n\t}\n\n\tbinarySearch( x ) {\n\n\t\tconst dist = this.distribution;\n\t\tlet start = 0;\n\t\tlet end = dist.length - 1;\n\n\t\tlet index = - 1;\n\n\t\twhile ( start <= end ) {\n\n\t\t\tconst mid = Math.ceil( ( start + end ) / 2 );\n\n\t\t\tif ( mid === 0 || dist[ mid - 1 ] <= x && dist[ mid ] > x ) {\n\n\t\t\t\tindex = mid;\n\n\t\t\t\tbreak;\n\n\t\t\t} else if ( x < dist[ mid ] ) {\n\n\t\t\t\tend = mid - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstart = mid + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn index;\n\n\t}\n\n\tsampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV ) {\n\n\t\tlet u = this.randomFunction();\n\t\tlet v = this.randomFunction();\n\n\t\tif ( u + v > 1 ) {\n\n\t\t\tu = 1 - u;\n\t\t\tv = 1 - v;\n\n\t\t}\n\n\t\t// get the vertex attribute indices\n\t\tconst indexAttribute = this.indexAttribute;\n\t\tlet i0 = faceIndex * 3;\n\t\tlet i1 = faceIndex * 3 + 1;\n\t\tlet i2 = faceIndex * 3 + 2;\n\t\tif ( indexAttribute ) {\n\n\t\t\ti0 = indexAttribute.getX( i0 );\n\t\t\ti1 = indexAttribute.getX( i1 );\n\t\t\ti2 = indexAttribute.getX( i2 );\n\n\t\t}\n\n\t\t_face.a.fromBufferAttribute( this.positionAttribute, i0 );\n\t\t_face.b.fromBufferAttribute( this.positionAttribute, i1 );\n\t\t_face.c.fromBufferAttribute( this.positionAttribute, i2 );\n\n\t\ttargetPosition\n\t\t\t.set( 0, 0, 0 )\n\t\t\t.addScaledVector( _face.a, u )\n\t\t\t.addScaledVector( _face.b, v )\n\t\t\t.addScaledVector( _face.c, 1 - ( u + v ) );\n\n\t\tif ( targetNormal !== undefined ) {\n\n\t\t\tif ( this.normalAttribute !== undefined ) {\n\n\t\t\t\t_face.a.fromBufferAttribute( this.normalAttribute, i0 );\n\t\t\t\t_face.b.fromBufferAttribute( this.normalAttribute, i1 );\n\t\t\t\t_face.c.fromBufferAttribute( this.normalAttribute, i2 );\n\t\t\t\ttargetNormal.set( 0, 0, 0 ).addScaledVector( _face.a, u ).addScaledVector( _face.b, v ).addScaledVector( _face.c, 1 - ( u + v ) ).normalize();\n\n\t\t\t} else {\n\n\t\t\t\t_face.getNormal( targetNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( targetColor !== undefined && this.colorAttribute !== undefined ) {\n\n\t\t\t_face.a.fromBufferAttribute( this.colorAttribute, i0 );\n\t\t\t_face.b.fromBufferAttribute( this.colorAttribute, i1 );\n\t\t\t_face.c.fromBufferAttribute( this.colorAttribute, i2 );\n\n\t\t\t_color\n\t\t\t\t.set( 0, 0, 0 )\n\t\t\t\t.addScaledVector( _face.a, u )\n\t\t\t\t.addScaledVector( _face.b, v )\n\t\t\t\t.addScaledVector( _face.c, 1 - ( u + v ) );\n\n\t\t\ttargetColor.r = _color.x;\n\t\t\ttargetColor.g = _color.y;\n\t\t\ttargetColor.b = _color.z;\n\n\t\t}\n\n\t\tif ( targetUV !== undefined && this.uvAttribute !== undefined ) {\n\n\t\t\t_uva.fromBufferAttribute( this.uvAttribute, i0 );\n\t\t\t_uvb.fromBufferAttribute( this.uvAttribute, i1 );\n\t\t\t_uvc.fromBufferAttribute( this.uvAttribute, i2 );\n\t\t\ttargetUV.set( 0, 0 ).addScaledVector( _uva, u ).addScaledVector( _uvb, v ).addScaledVector( _uvc, 1 - ( u + v ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshSurfaceSampler };\n", "import {\n\tBox3,\n\tMathUtils,\n\tMatrix4,\n\tMatrix3,\n\tRay,\n\tVector3\n} from 'three';\n\n// module scope helper variables\n\nconst a = {\n\tc: null, // center\n\tu: [ new Vector3(), new Vector3(), new Vector3() ], // basis vectors\n\te: [] // half width\n};\n\nconst b = {\n\tc: null, // center\n\tu: [ new Vector3(), new Vector3(), new Vector3() ], // basis vectors\n\te: [] // half width\n};\n\nconst R = [[], [], []];\nconst AbsR = [[], [], []];\nconst t = [];\n\nconst xAxis = new Vector3();\nconst yAxis = new Vector3();\nconst zAxis = new Vector3();\nconst v1 = new Vector3();\nconst size = new Vector3();\nconst closestPoint = new Vector3();\nconst rotationMatrix = new Matrix3();\nconst aabb = new Box3();\nconst matrix = new Matrix4();\nconst inverse = new Matrix4();\nconst localRay = new Ray();\n\n// OBB\n\nclass OBB {\n\n\tconstructor( center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3() ) {\n\n\t\tthis.center = center;\n\t\tthis.halfSize = halfSize;\n\t\tthis.rotation = rotation;\n\n\t}\n\n\tset( center, halfSize, rotation ) {\n\n\t\tthis.center = center;\n\t\tthis.halfSize = halfSize;\n\t\tthis.rotation = rotation;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( obb ) {\n\n\t\tthis.center.copy( obb.center );\n\t\tthis.halfSize.copy( obb.halfSize );\n\t\tthis.rotation.copy( obb.rotation );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tgetSize( result ) {\n\n\t\treturn result.copy( this.halfSize ).multiplyScalar( 2 );\n\n\t}\n\n\t/**\n\t* Reference: Closest Point on OBB to Point in Real-Time Collision Detection\n\t* by Christer Ericson (chapter 5.1.4)\n\t*/\n\tclampPoint( point, result ) {\n\n\t\tconst halfSize = this.halfSize;\n\n\t\tv1.subVectors( point, this.center );\n\t\tthis.rotation.extractBasis( xAxis, yAxis, zAxis );\n\n\t\t// start at the center position of the OBB\n\n\t\tresult.copy( this.center );\n\n\t\t// project the target onto the OBB axes and walk towards that point\n\n\t\tconst x = MathUtils.clamp( v1.dot( xAxis ), - halfSize.x, halfSize.x );\n\t\tresult.add( xAxis.multiplyScalar( x ) );\n\n\t\tconst y = MathUtils.clamp( v1.dot( yAxis ), - halfSize.y, halfSize.y );\n\t\tresult.add( yAxis.multiplyScalar( y ) );\n\n\t\tconst z = MathUtils.clamp( v1.dot( zAxis ), - halfSize.z, halfSize.z );\n\t\tresult.add( zAxis.multiplyScalar( z ) );\n\n\t\treturn result;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tv1.subVectors( point, this.center );\n\t\tthis.rotation.extractBasis( xAxis, yAxis, zAxis );\n\n\t\t// project v1 onto each axis and check if these points lie inside the OBB\n\n\t\treturn Math.abs( v1.dot( xAxis ) ) <= this.halfSize.x &&\n\t\t\t\tMath.abs( v1.dot( yAxis ) ) <= this.halfSize.y &&\n\t\t\t\tMath.abs( v1.dot( zAxis ) ) <= this.halfSize.z;\n\n\t}\n\n\tintersectsBox3( box3 ) {\n\n\t\treturn this.intersectsOBB( obb.fromBox3( box3 ) );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// find the point on the OBB closest to the sphere center\n\n\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t// if that point is inside the sphere, the OBB and sphere intersect\n\n\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\t/**\n\t* Reference: OBB-OBB Intersection in Real-Time Collision Detection\n\t* by Christer Ericson (chapter 4.4.1)\n\t*\n\t*/\n\tintersectsOBB( obb, epsilon = Number.EPSILON ) {\n\n\t\t// prepare data structures (the code uses the same nomenclature like the reference)\n\n\t\ta.c = this.center;\n\t\ta.e[ 0 ] = this.halfSize.x;\n\t\ta.e[ 1 ] = this.halfSize.y;\n\t\ta.e[ 2 ] = this.halfSize.z;\n\t\tthis.rotation.extractBasis( a.u[ 0 ], a.u[ 1 ], a.u[ 2 ] );\n\n\t\tb.c = obb.center;\n\t\tb.e[ 0 ] = obb.halfSize.x;\n\t\tb.e[ 1 ] = obb.halfSize.y;\n\t\tb.e[ 2 ] = obb.halfSize.z;\n\t\tobb.rotation.extractBasis( b.u[ 0 ], b.u[ 1 ], b.u[ 2 ] );\n\n\t\t// compute rotation matrix expressing b in a's coordinate frame\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tR[ i ][ j ] = a.u[ i ].dot( b.u[ j ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute translation vector\n\n\t\tv1.subVectors( b.c, a.c );\n\n\t\t// bring translation into a's coordinate frame\n\n\t\tt[ 0 ] = v1.dot( a.u[ 0 ] );\n\t\tt[ 1 ] = v1.dot( a.u[ 1 ] );\n\t\tt[ 2 ] = v1.dot( a.u[ 2 ] );\n\n\t\t// compute common subexpressions. Add in an epsilon term to\n\t\t// counteract arithmetic errors when two edges are parallel and\n\t\t// their cross product is (near) null\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tAbsR[ i ][ j ] = Math.abs( R[ i ][ j ] ) + epsilon;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet ra, rb;\n\n\t\t// test axes L = A0, L = A1, L = A2\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tra = a.e[ i ];\n\t\t\trb = b.e[ 0 ] * AbsR[ i ][ 0 ] + b.e[ 1 ] * AbsR[ i ][ 1 ] + b.e[ 2 ] * AbsR[ i ][ 2 ];\n\t\t\tif ( Math.abs( t[ i ] ) > ra + rb ) return false;\n\n\n\t\t}\n\n\t\t// test axes L = B0, L = B1, L = B2\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tra = a.e[ 0 ] * AbsR[ 0 ][ i ] + a.e[ 1 ] * AbsR[ 1 ][ i ] + a.e[ 2 ] * AbsR[ 2 ][ i ];\n\t\t\trb = b.e[ i ];\n\t\t\tif ( Math.abs( t[ 0 ] * R[ 0 ][ i ] + t[ 1 ] * R[ 1 ][ i ] + t[ 2 ] * R[ 2 ][ i ] ) > ra + rb ) return false;\n\n\t\t}\n\n\t\t// test axis L = A0 x B0\n\n\t\tra = a.e[ 1 ] * AbsR[ 2 ][ 0 ] + a.e[ 2 ] * AbsR[ 1 ][ 0 ];\n\t\trb = b.e[ 1 ] * AbsR[ 0 ][ 2 ] + b.e[ 2 ] * AbsR[ 0 ][ 1 ];\n\t\tif ( Math.abs( t[ 2 ] * R[ 1 ][ 0 ] - t[ 1 ] * R[ 2 ][ 0 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A0 x B1\n\n\t\tra = a.e[ 1 ] * AbsR[ 2 ][ 1 ] + a.e[ 2 ] * AbsR[ 1 ][ 1 ];\n\t\trb = b.e[ 0 ] * AbsR[ 0 ][ 2 ] + b.e[ 2 ] * AbsR[ 0 ][ 0 ];\n\t\tif ( Math.abs( t[ 2 ] * R[ 1 ][ 1 ] - t[ 1 ] * R[ 2 ][ 1 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A0 x B2\n\n\t\tra = a.e[ 1 ] * AbsR[ 2 ][ 2 ] + a.e[ 2 ] * AbsR[ 1 ][ 2 ];\n\t\trb = b.e[ 0 ] * AbsR[ 0 ][ 1 ] + b.e[ 1 ] * AbsR[ 0 ][ 0 ];\n\t\tif ( Math.abs( t[ 2 ] * R[ 1 ][ 2 ] - t[ 1 ] * R[ 2 ][ 2 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A1 x B0\n\n\t\tra = a.e[ 0 ] * AbsR[ 2 ][ 0 ] + a.e[ 2 ] * AbsR[ 0 ][ 0 ];\n\t\trb = b.e[ 1 ] * AbsR[ 1 ][ 2 ] + b.e[ 2 ] * AbsR[ 1 ][ 1 ];\n\t\tif ( Math.abs( t[ 0 ] * R[ 2 ][ 0 ] - t[ 2 ] * R[ 0 ][ 0 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A1 x B1\n\n\t\tra = a.e[ 0 ] * AbsR[ 2 ][ 1 ] + a.e[ 2 ] * AbsR[ 0 ][ 1 ];\n\t\trb = b.e[ 0 ] * AbsR[ 1 ][ 2 ] + b.e[ 2 ] * AbsR[ 1 ][ 0 ];\n\t\tif ( Math.abs( t[ 0 ] * R[ 2 ][ 1 ] - t[ 2 ] * R[ 0 ][ 1 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A1 x B2\n\n\t\tra = a.e[ 0 ] * AbsR[ 2 ][ 2 ] + a.e[ 2 ] * AbsR[ 0 ][ 2 ];\n\t\trb = b.e[ 0 ] * AbsR[ 1 ][ 1 ] + b.e[ 1 ] * AbsR[ 1 ][ 0 ];\n\t\tif ( Math.abs( t[ 0 ] * R[ 2 ][ 2 ] - t[ 2 ] * R[ 0 ][ 2 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A2 x B0\n\n\t\tra = a.e[ 0 ] * AbsR[ 1 ][ 0 ] + a.e[ 1 ] * AbsR[ 0 ][ 0 ];\n\t\trb = b.e[ 1 ] * AbsR[ 2 ][ 2 ] + b.e[ 2 ] * AbsR[ 2 ][ 1 ];\n\t\tif ( Math.abs( t[ 1 ] * R[ 0 ][ 0 ] - t[ 0 ] * R[ 1 ][ 0 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A2 x B1\n\n\t\tra = a.e[ 0 ] * AbsR[ 1 ][ 1 ] + a.e[ 1 ] * AbsR[ 0 ][ 1 ];\n\t\trb = b.e[ 0 ] * AbsR[ 2 ][ 2 ] + b.e[ 2 ] * AbsR[ 2 ][ 0 ];\n\t\tif ( Math.abs( t[ 1 ] * R[ 0 ][ 1 ] - t[ 0 ] * R[ 1 ][ 1 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A2 x B2\n\n\t\tra = a.e[ 0 ] * AbsR[ 1 ][ 2 ] + a.e[ 1 ] * AbsR[ 0 ][ 2 ];\n\t\trb = b.e[ 0 ] * AbsR[ 2 ][ 1 ] + b.e[ 1 ] * AbsR[ 2 ][ 0 ];\n\t\tif ( Math.abs( t[ 1 ] * R[ 0 ][ 2 ] - t[ 0 ] * R[ 1 ][ 2 ] ) > ra + rb ) return false;\n\n\t\t// since no separating axis is found, the OBBs must be intersecting\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t* Reference: Testing Box Against Plane in Real-Time Collision Detection\n\t* by Christer Ericson (chapter 5.2.3)\n\t*/\n\tintersectsPlane( plane ) {\n\n\t\tthis.rotation.extractBasis( xAxis, yAxis, zAxis );\n\n\t\t// compute the projection interval radius of this OBB onto L(t) = this->center + t * p.normal;\n\n\t\tconst r = this.halfSize.x * Math.abs( plane.normal.dot( xAxis ) ) +\n\t\t\t\tthis.halfSize.y * Math.abs( plane.normal.dot( yAxis ) ) +\n\t\t\t\tthis.halfSize.z * Math.abs( plane.normal.dot( zAxis ) );\n\n\t\t// compute distance of the OBB's center from the plane\n\n\t\tconst d = plane.normal.dot( this.center ) - plane.constant;\n\n\t\t// Intersection occurs when distance d falls within [-r,+r] interval\n\n\t\treturn Math.abs( d ) <= r;\n\n\t}\n\n\t/**\n\t* Performs a ray/OBB intersection test and stores the intersection point\n\t* to the given 3D vector. If no intersection is detected, *null* is returned.\n\t*/\n\tintersectRay( ray, result ) {\n\n\t\t// the idea is to perform the intersection test in the local space\n\t\t// of the OBB.\n\n\t\tthis.getSize( size );\n\t\taabb.setFromCenterAndSize( v1.set( 0, 0, 0 ), size );\n\n\t\t// create a 4x4 transformation matrix\n\n\t\tmatrix.setFromMatrix3( this.rotation );\n\t\tmatrix.setPosition( this.center );\n\n\t\t// transform ray to the local space of the OBB\n\n\t\tinverse.copy( matrix ).invert();\n\t\tlocalRay.copy( ray ).applyMatrix4( inverse );\n\n\t\t// perform ray <-> AABB intersection test\n\n\t\tif ( localRay.intersectBox( aabb, result ) ) {\n\n\t\t\t// transform the intersection point back to world space\n\n\t\t\treturn result.applyMatrix4( matrix );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t* Performs a ray/OBB intersection test. Returns either true or false if\n\t* there is a intersection or not.\n\t*/\n\tintersectsRay( ray ) {\n\n\t\treturn this.intersectRay( ray, v1 ) !== null;\n\n\t}\n\n\tfromBox3( box3 ) {\n\n\t\tbox3.getCenter( this.center );\n\n\t\tbox3.getSize( this.halfSize ).multiplyScalar( 0.5 );\n\n\t\tthis.rotation.identity();\n\n\t\treturn this;\n\n\t}\n\n\tequals( obb ) {\n\n\t\treturn obb.center.equals( this.center ) &&\n\t\t\tobb.halfSize.equals( this.halfSize ) &&\n\t\t\tobb.rotation.equals( this.rotation );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst e = matrix.elements;\n\n\t\tlet sx = v1.set( e[ 0 ], e[ 1 ], e[ 2 ] ).length();\n\t\tconst sy = v1.set( e[ 4 ], e[ 5 ], e[ 6 ] ).length();\n\t\tconst sz = v1.set( e[ 8 ], e[ 9 ], e[ 10 ] ).length();\n\n\t\tconst det = matrix.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\trotationMatrix.setFromMatrix4( matrix );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\trotationMatrix.elements[ 0 ] *= invSX;\n\t\trotationMatrix.elements[ 1 ] *= invSX;\n\t\trotationMatrix.elements[ 2 ] *= invSX;\n\n\t\trotationMatrix.elements[ 3 ] *= invSY;\n\t\trotationMatrix.elements[ 4 ] *= invSY;\n\t\trotationMatrix.elements[ 5 ] *= invSY;\n\n\t\trotationMatrix.elements[ 6 ] *= invSZ;\n\t\trotationMatrix.elements[ 7 ] *= invSZ;\n\t\trotationMatrix.elements[ 8 ] *= invSZ;\n\n\t\tthis.rotation.multiply( rotationMatrix );\n\n\t\tthis.halfSize.x *= sx;\n\t\tthis.halfSize.y *= sy;\n\t\tthis.halfSize.z *= sz;\n\n\t\tv1.setFromMatrixPosition( matrix );\n\t\tthis.center.add( v1 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst obb = new OBB();\n\nexport { OBB };\n", "import {\n\tBox3,\n\tLine3,\n\tPlane,\n\tSphere,\n\tTriangle,\n\tVector3,\n\tLayers\n} from 'three';\nimport { Capsule } from '../math/Capsule.js';\n\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\nconst _point1 = new Vector3();\nconst _point2 = new Vector3();\nconst _plane = new Plane();\nconst _line1 = new Line3();\nconst _line2 = new Line3();\nconst _sphere = new Sphere();\nconst _capsule = new Capsule();\n\nconst _temp1 = new Vector3();\nconst _temp2 = new Vector3();\nconst _temp3 = new Vector3();\nconst EPS = 1e-10;\n\nfunction lineToLineClosestPoints( line1, line2, target1 = null, target2 = null ) {\n\n\tconst r = _temp1.copy( line1.end ).sub( line1.start );\n\tconst s = _temp2.copy( line2.end ).sub( line2.start );\n\tconst w = _temp3.copy( line2.start ).sub( line1.start );\n\n\tconst a = r.dot( s ),\n\t\tb = r.dot( r ),\n\t\tc = s.dot( s ),\n\t\td = s.dot( w ),\n\t\te = r.dot( w );\n\n\tlet t1, t2;\n\tconst divisor = b * c - a * a;\n\n\tif ( Math.abs( divisor ) < EPS ) {\n\n\t\tconst d1 = - d / c;\n\t\tconst d2 = ( a - d ) / c;\n\n\t\tif ( Math.abs( d1 - 0.5 ) < Math.abs( d2 - 0.5 ) ) {\n\n\t\t\tt1 = 0;\n\t\t\tt2 = d1;\n\n\t\t} else {\n\n\t\t\tt1 = 1;\n\t\t\tt2 = d2;\n\n\t\t}\n\n\t} else {\n\n\t\tt1 = ( d * a + e * c ) / divisor;\n\t\tt2 = ( t1 * a - d ) / c;\n\n\t}\n\n\tt2 = Math.max( 0, Math.min( 1, t2 ) );\n\tt1 = Math.max( 0, Math.min( 1, t1 ) );\n\n\tif ( target1 ) {\n\n\t\ttarget1.copy( r ).multiplyScalar( t1 ).add( line1.start );\n\n\t}\n\n\tif ( target2 ) {\n\n\t\ttarget2.copy( s ).multiplyScalar( t2 ).add( line2.start );\n\n\t}\n\n}\n\nclass Octree {\n\n\tconstructor( box ) {\n\n\t\tthis.box = box;\n\t\tthis.bounds = new Box3();\n\n\t\tthis.subTrees = [];\n\t\tthis.triangles = [];\n\t\tthis.layers = new Layers();\n\n\t}\n\n\taddTriangle( triangle ) {\n\n\t\tthis.bounds.min.x = Math.min( this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x );\n\t\tthis.bounds.min.y = Math.min( this.bounds.min.y, triangle.a.y, triangle.b.y, triangle.c.y );\n\t\tthis.bounds.min.z = Math.min( this.bounds.min.z, triangle.a.z, triangle.b.z, triangle.c.z );\n\t\tthis.bounds.max.x = Math.max( this.bounds.max.x, triangle.a.x, triangle.b.x, triangle.c.x );\n\t\tthis.bounds.max.y = Math.max( this.bounds.max.y, triangle.a.y, triangle.b.y, triangle.c.y );\n\t\tthis.bounds.max.z = Math.max( this.bounds.max.z, triangle.a.z, triangle.b.z, triangle.c.z );\n\n\t\tthis.triangles.push( triangle );\n\n\t\treturn this;\n\n\t}\n\n\tcalcBox() {\n\n\t\tthis.box = this.bounds.clone();\n\n\t\t// offset small amount to account for regular grid\n\t\tthis.box.min.x -= 0.01;\n\t\tthis.box.min.y -= 0.01;\n\t\tthis.box.min.z -= 0.01;\n\n\t\treturn this;\n\n\t}\n\n\tsplit( level ) {\n\n\t\tif ( ! this.box ) return;\n\n\t\tconst subTrees = [];\n\t\tconst halfsize = _v2.copy( this.box.max ).sub( this.box.min ).multiplyScalar( 0.5 );\n\n\t\tfor ( let x = 0; x < 2; x ++ ) {\n\n\t\t\tfor ( let y = 0; y < 2; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z < 2; z ++ ) {\n\n\t\t\t\t\tconst box = new Box3();\n\t\t\t\t\tconst v = _v1.set( x, y, z );\n\n\t\t\t\t\tbox.min.copy( this.box.min ).add( v.multiply( halfsize ) );\n\t\t\t\t\tbox.max.copy( box.min ).add( halfsize );\n\n\t\t\t\t\tsubTrees.push( new Octree( box ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet triangle;\n\n\t\twhile ( triangle = this.triangles.pop() ) {\n\n\t\t\tfor ( let i = 0; i < subTrees.length; i ++ ) {\n\n\t\t\t\tif ( subTrees[ i ].box.intersectsTriangle( triangle ) ) {\n\n\t\t\t\t\tsubTrees[ i ].triangles.push( triangle );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < subTrees.length; i ++ ) {\n\n\t\t\tconst len = subTrees[ i ].triangles.length;\n\n\t\t\tif ( len > 8 && level < 16 ) {\n\n\t\t\t\tsubTrees[ i ].split( level + 1 );\n\n\t\t\t}\n\n\t\t\tif ( len !== 0 ) {\n\n\t\t\t\tthis.subTrees.push( subTrees[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tbuild() {\n\n\t\tthis.calcBox();\n\t\tthis.split( 0 );\n\n\t\treturn this;\n\n\t}\n\n\tgetRayTriangles( ray, triangles ) {\n\n\t\tfor ( let i = 0; i < this.subTrees.length; i ++ ) {\n\n\t\t\tconst subTree = this.subTrees[ i ];\n\t\t\tif ( ! ray.intersectsBox( subTree.box ) ) continue;\n\n\t\t\tif ( subTree.triangles.length > 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < subTree.triangles.length; j ++ ) {\n\n\t\t\t\t\tif ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsubTree.getRayTriangles( ray, triangles );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn triangles;\n\n\t}\n\n\ttriangleCapsuleIntersect( capsule, triangle ) {\n\n\t\ttriangle.getPlane( _plane );\n\n\t\tconst d1 = _plane.distanceToPoint( capsule.start ) - capsule.radius;\n\t\tconst d2 = _plane.distanceToPoint( capsule.end ) - capsule.radius;\n\n\t\tif ( ( d1 > 0 && d2 > 0 ) || ( d1 < - capsule.radius && d2 < - capsule.radius ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst delta = Math.abs( d1 / ( Math.abs( d1 ) + Math.abs( d2 ) ) );\n\t\tconst intersectPoint = _v1.copy( capsule.start ).lerp( capsule.end, delta );\n\n\t\tif ( triangle.containsPoint( intersectPoint ) ) {\n\n\t\t\treturn { normal: _plane.normal.clone(), point: intersectPoint.clone(), depth: Math.abs( Math.min( d1, d2 ) ) };\n\n\t\t}\n\n\t\tconst r2 = capsule.radius * capsule.radius;\n\n\t\tconst line1 = _line1.set( capsule.start, capsule.end );\n\n\t\tconst lines = [\n\t\t\t[ triangle.a, triangle.b ],\n\t\t\t[ triangle.b, triangle.c ],\n\t\t\t[ triangle.c, triangle.a ]\n\t\t];\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tconst line2 = _line2.set( lines[ i ][ 0 ], lines[ i ][ 1 ] );\n\n\t\t\tlineToLineClosestPoints( line1, line2, _point1, _point2 );\n\n\t\t\tif ( _point1.distanceToSquared( _point2 ) < r2 ) {\n\n\t\t\t\treturn {\n\t\t\t\t\tnormal: _point1.clone().sub( _point2 ).normalize(),\n\t\t\t\t\tpoint: _point2.clone(),\n\t\t\t\t\tdepth: capsule.radius - _point1.distanceTo( _point2 )\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\ttriangleSphereIntersect( sphere, triangle ) {\n\n\t\ttriangle.getPlane( _plane );\n\n\t\tif ( ! sphere.intersectsPlane( _plane ) ) return false;\n\n\t\tconst depth = Math.abs( _plane.distanceToSphere( sphere ) );\n\t\tconst r2 = sphere.radius * sphere.radius - depth * depth;\n\n\t\tconst plainPoint = _plane.projectPoint( sphere.center, _v1 );\n\n\t\tif ( triangle.containsPoint( sphere.center ) ) {\n\n\t\t\treturn { normal: _plane.normal.clone(), point: plainPoint.clone(), depth: Math.abs( _plane.distanceToSphere( sphere ) ) };\n\n\t\t}\n\n\t\tconst lines = [\n\t\t\t[ triangle.a, triangle.b ],\n\t\t\t[ triangle.b, triangle.c ],\n\t\t\t[ triangle.c, triangle.a ]\n\t\t];\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\t_line1.set( lines[ i ][ 0 ], lines[ i ][ 1 ] );\n\t\t\t_line1.closestPointToPoint( plainPoint, true, _v2 );\n\n\t\t\tconst d = _v2.distanceToSquared( sphere.center );\n\n\t\t\tif ( d < r2 ) {\n\n\t\t\t\treturn { normal: sphere.center.clone().sub( _v2 ).normalize(), point: _v2.clone(), depth: sphere.radius - Math.sqrt( d ) };\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tgetSphereTriangles( sphere, triangles ) {\n\n\t\tfor ( let i = 0; i < this.subTrees.length; i ++ ) {\n\n\t\t\tconst subTree = this.subTrees[ i ];\n\n\t\t\tif ( ! sphere.intersectsBox( subTree.box ) ) continue;\n\n\t\t\tif ( subTree.triangles.length > 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < subTree.triangles.length; j ++ ) {\n\n\t\t\t\t\tif ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsubTree.getSphereTriangles( sphere, triangles );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetCapsuleTriangles( capsule, triangles ) {\n\n\t\tfor ( let i = 0; i < this.subTrees.length; i ++ ) {\n\n\t\t\tconst subTree = this.subTrees[ i ];\n\n\t\t\tif ( ! capsule.intersectsBox( subTree.box ) ) continue;\n\n\t\t\tif ( subTree.triangles.length > 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < subTree.triangles.length; j ++ ) {\n\n\t\t\t\t\tif ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsubTree.getCapsuleTriangles( capsule, triangles );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsphereIntersect( sphere ) {\n\n\t\t_sphere.copy( sphere );\n\n\t\tconst triangles = [];\n\t\tlet result, hit = false;\n\n\t\tthis.getSphereTriangles( sphere, triangles );\n\n\t\tfor ( let i = 0; i < triangles.length; i ++ ) {\n\n\t\t\tif ( result = this.triangleSphereIntersect( _sphere, triangles[ i ] ) ) {\n\n\t\t\t\thit = true;\n\n\t\t\t\t_sphere.center.add( result.normal.multiplyScalar( result.depth ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hit ) {\n\n\t\t\tconst collisionVector = _sphere.center.clone().sub( sphere.center );\n\t\t\tconst depth = collisionVector.length();\n\n\t\t\treturn { normal: collisionVector.normalize(), depth: depth };\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tcapsuleIntersect( capsule ) {\n\n\t\t_capsule.copy( capsule );\n\n\t\tconst triangles = [];\n\t\tlet result, hit = false;\n\n\t\tthis.getCapsuleTriangles( _capsule, triangles );\n\n\t\tfor ( let i = 0; i < triangles.length; i ++ ) {\n\n\t\t\tif ( result = this.triangleCapsuleIntersect( _capsule, triangles[ i ] ) ) {\n\n\t\t\t\thit = true;\n\n\t\t\t\t_capsule.translate( result.normal.multiplyScalar( result.depth ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hit ) {\n\n\t\t\tconst collisionVector = _capsule.getCenter( new Vector3() ).sub( capsule.getCenter( _v1 ) );\n\t\t\tconst depth = collisionVector.length();\n\n\t\t\treturn { normal: collisionVector.normalize(), depth: depth };\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\trayIntersect( ray ) {\n\n\t\tif ( ray.direction.length() === 0 ) return;\n\n\t\tconst triangles = [];\n\t\tlet triangle, position, distance = 1e100;\n\n\t\tthis.getRayTriangles( ray, triangles );\n\n\t\tfor ( let i = 0; i < triangles.length; i ++ ) {\n\n\t\t\tconst result = ray.intersectTriangle( triangles[ i ].a, triangles[ i ].b, triangles[ i ].c, true, _v1 );\n\n\t\t\tif ( result ) {\n\n\t\t\t\tconst newdistance = result.sub( ray.origin ).length();\n\n\t\t\t\tif ( distance > newdistance ) {\n\n\t\t\t\t\tposition = result.clone().add( ray.origin );\n\t\t\t\t\tdistance = newdistance;\n\t\t\t\t\ttriangle = triangles[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn distance < 1e100 ? { distance: distance, triangle: triangle, position: position } : false;\n\n\t}\n\n\tfromGraphNode( group ) {\n\n\t\tgroup.updateWorldMatrix( true, true );\n\n\t\tgroup.traverse( ( obj ) => {\n\n\t\t\tif ( obj.isMesh === true ) {\n\n\t\t\t\tif ( this.layers.test( obj.layers ) ) {\n\n\t\t\t\t\tlet geometry, isTemp = false;\n\n\t\t\t\t\tif ( obj.geometry.index !== null ) {\n\n\t\t\t\t\t\tisTemp = true;\n\t\t\t\t\t\tgeometry = obj.geometry.toNonIndexed();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgeometry = obj.geometry;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\t\t\t\tconst v1 = new Vector3().fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tconst v2 = new Vector3().fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\t\tconst v3 = new Vector3().fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\t\tv1.applyMatrix4( obj.matrixWorld );\n\t\t\t\t\t\tv2.applyMatrix4( obj.matrixWorld );\n\t\t\t\t\t\tv3.applyMatrix4( obj.matrixWorld );\n\n\t\t\t\t\t\tthis.addTriangle( new Triangle( v1, v2, v3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isTemp ) {\n\n\t\t\t\t\t\tgeometry.dispose();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.build();\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tthis.box = null;\n\t\tthis.bounds.makeEmpty();\n\n\t\tthis.subTrees.length = 0;\n\t\tthis.triangles.length = 0;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { Octree };\n", "// Ported from Stefan Gustavson's java implementation\n// http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\n// Read Stefan's excellent paper for details on how this code works.\n//\n// Sean McCullough banksean@gmail.com\n//\n// Added 4D noise\n\n/**\n * You can pass in a random number generator object if you like.\n * It is assumed to have a random() method.\n */\nclass SimplexNoise {\n\n\tconstructor( r = Math ) {\n\n\t\tthis.grad3 = [[ 1, 1, 0 ], [ - 1, 1, 0 ], [ 1, - 1, 0 ], [ - 1, - 1, 0 ],\n\t\t\t[ 1, 0, 1 ], [ - 1, 0, 1 ], [ 1, 0, - 1 ], [ - 1, 0, - 1 ],\n\t\t\t[ 0, 1, 1 ], [ 0, - 1, 1 ], [ 0, 1, - 1 ], [ 0, - 1, - 1 ]];\n\n\t\tthis.grad4 = [[ 0, 1, 1, 1 ], [ 0, 1, 1, - 1 ], [ 0, 1, - 1, 1 ], [ 0, 1, - 1, - 1 ],\n\t\t\t[ 0, - 1, 1, 1 ], [ 0, - 1, 1, - 1 ], [ 0, - 1, - 1, 1 ], [ 0, - 1, - 1, - 1 ],\n\t\t\t[ 1, 0, 1, 1 ], [ 1, 0, 1, - 1 ], [ 1, 0, - 1, 1 ], [ 1, 0, - 1, - 1 ],\n\t\t\t[ - 1, 0, 1, 1 ], [ - 1, 0, 1, - 1 ], [ - 1, 0, - 1, 1 ], [ - 1, 0, - 1, - 1 ],\n\t\t\t[ 1, 1, 0, 1 ], [ 1, 1, 0, - 1 ], [ 1, - 1, 0, 1 ], [ 1, - 1, 0, - 1 ],\n\t\t\t[ - 1, 1, 0, 1 ], [ - 1, 1, 0, - 1 ], [ - 1, - 1, 0, 1 ], [ - 1, - 1, 0, - 1 ],\n\t\t\t[ 1, 1, 1, 0 ], [ 1, 1, - 1, 0 ], [ 1, - 1, 1, 0 ], [ 1, - 1, - 1, 0 ],\n\t\t\t[ - 1, 1, 1, 0 ], [ - 1, 1, - 1, 0 ], [ - 1, - 1, 1, 0 ], [ - 1, - 1, - 1, 0 ]];\n\n\t\tthis.p = [];\n\n\t\tfor ( let i = 0; i < 256; i ++ ) {\n\n\t\t\tthis.p[ i ] = Math.floor( r.random() * 256 );\n\n\t\t}\n\n\t\t// To remove the need for index wrapping, double the permutation table length\n\t\tthis.perm = [];\n\n\t\tfor ( let i = 0; i < 512; i ++ ) {\n\n\t\t\tthis.perm[ i ] = this.p[ i & 255 ];\n\n\t\t}\n\n\t\t// A lookup table to traverse the simplex around a given point in 4D.\n\t\t// Details can be found where this table is used, in the 4D noise method.\n\t\tthis.simplex = [\n\t\t\t[ 0, 1, 2, 3 ], [ 0, 1, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 2, 3, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 2, 3, 0 ],\n\t\t\t[ 0, 2, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 3, 1, 2 ], [ 0, 3, 2, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 3, 2, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 1, 2, 0, 3 ], [ 0, 0, 0, 0 ], [ 1, 3, 0, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 3, 0, 1 ], [ 2, 3, 1, 0 ],\n\t\t\t[ 1, 0, 2, 3 ], [ 1, 0, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 0, 3, 1 ], [ 0, 0, 0, 0 ], [ 2, 1, 3, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 2, 0, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 0, 1, 2 ], [ 3, 0, 2, 1 ], [ 0, 0, 0, 0 ], [ 3, 1, 2, 0 ],\n\t\t\t[ 2, 1, 0, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 1, 0, 2 ], [ 0, 0, 0, 0 ], [ 3, 2, 0, 1 ], [ 3, 2, 1, 0 ]];\n\n\t}\n\n\tdot( g, x, y ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y;\n\n\t}\n\n\tdot3( g, x, y, z ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z;\n\n\t}\n\n\tdot4( g, x, y, z, w ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z + g[ 3 ] * w;\n\n\t}\n\n\tnoise( xin, yin ) {\n\n\t\tlet n0; // Noise contributions from the three corners\n\t\tlet n1;\n\t\tlet n2;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F2 = 0.5 * ( Math.sqrt( 3.0 ) - 1.0 );\n\t\tconst s = ( xin + yin ) * F2; // Hairy factor for 2D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst G2 = ( 3.0 - Math.sqrt( 3.0 ) ) / 6.0;\n\t\tconst t = ( i + j ) * G2;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y) space\n\t\tconst Y0 = j - t;\n\t\tconst x0 = xin - X0; // The x,y distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\n\t\t// For the 2D case, the simplex shape is an equilateral triangle.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second (middle) corner of simplex in (i,j) coords\n\n\t\tlet j1;\n\t\tif ( x0 > y0 ) {\n\n\t\t\ti1 = 1; j1 = 0;\n\n\t\t\t// lower triangle, XY order: (0,0)->(1,0)->(1,1)\n\n\t\t}\telse {\n\n\t\t\ti1 = 0; j1 = 1;\n\n\t\t} // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n\n\t\t// A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n\t\t// a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n\t\t// c = (3-sqrt(3))/6\n\t\tconst x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n\t\tconst y1 = y0 - j1 + G2;\n\t\tconst x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords\n\t\tconst y2 = y0 - 1.0 + 2.0 * G2;\n\t\t// Work out the hashed gradient indices of the three simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst gi0 = this.perm[ ii + this.perm[ jj ] ] % 12;\n\t\tconst gi1 = this.perm[ ii + i1 + this.perm[ jj + j1 ] ] % 12;\n\t\tconst gi2 = this.perm[ ii + 1 + this.perm[ jj + 1 ] ] % 12;\n\t\t// Calculate the contribution from the three corners\n\t\tlet t0 = 0.5 - x0 * x0 - y0 * y0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this.dot( this.grad3[ gi0 ], x0, y0 ); // (x,y) of grad3 used for 2D gradient\n\n\t\t}\n\n\t\tlet t1 = 0.5 - x1 * x1 - y1 * y1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this.dot( this.grad3[ gi1 ], x1, y1 );\n\n\t\t}\n\n\t\tlet t2 = 0.5 - x2 * x2 - y2 * y2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this.dot( this.grad3[ gi2 ], x2, y2 );\n\n\t\t}\n\n\t\t// Add contributions from each corner to get the final noise value.\n\t\t// The result is scaled to return values in the interval [-1,1].\n\t\treturn 70.0 * ( n0 + n1 + n2 );\n\n\t}\n\n\t// 3D simplex noise\n\tnoise3d( xin, yin, zin ) {\n\n\t\tlet n0; // Noise contributions from the four corners\n\t\tlet n1;\n\t\tlet n2;\n\t\tlet n3;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F3 = 1.0 / 3.0;\n\t\tconst s = ( xin + yin + zin ) * F3; // Very nice and simple skew factor for 3D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst k = Math.floor( zin + s );\n\t\tconst G3 = 1.0 / 6.0; // Very nice and simple unskew factor, too\n\t\tconst t = ( i + j + k ) * G3;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y,z) space\n\t\tconst Y0 = j - t;\n\t\tconst Z0 = k - t;\n\t\tconst x0 = xin - X0; // The x,y,z distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\t\tconst z0 = zin - Z0;\n\n\t\t// For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second corner of simplex in (i,j,k) coords\n\n\t\tlet j1;\n\t\tlet k1;\n\t\tlet i2; // Offsets for third corner of simplex in (i,j,k) coords\n\t\tlet j2;\n\t\tlet k2;\n\t\tif ( x0 >= y0 ) {\n\n\t\t\tif ( y0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n\n\t\t\t\t// X Y Z order\n\n\t\t\t} else if ( x0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t\t// X Z Y order\n\n\t\t\t} else {\n\n\t\t\t\ti1 = 0; j1 = 0; k1 = 1; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t} // Z X Y order\n\n\t\t} else { // x0 y0 ) ? 32 : 0;\n\t\tconst c2 = ( x0 > z0 ) ? 16 : 0;\n\t\tconst c3 = ( y0 > z0 ) ? 8 : 0;\n\t\tconst c4 = ( x0 > w0 ) ? 4 : 0;\n\t\tconst c5 = ( y0 > w0 ) ? 2 : 0;\n\t\tconst c6 = ( z0 > w0 ) ? 1 : 0;\n\t\tconst c = c1 + c2 + c3 + c4 + c5 + c6;\n\n\t\t// simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.\n\t\t// Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0;\n\t\tconst j1 = simplex[ c ][ 1 ] >= 3 ? 1 : 0;\n\t\tconst k1 = simplex[ c ][ 2 ] >= 3 ? 1 : 0;\n\t\tconst l1 = simplex[ c ][ 3 ] >= 3 ? 1 : 0;\n\t\t// The number 2 in the \"simplex\" array is at the second largest coordinate.\n\t\tconst i2 = simplex[ c ][ 0 ] >= 2 ? 1 : 0;\n\t\tconst j2 = simplex[ c ][ 1 ] >= 2 ? 1 : 0;\n\t\tconst k2 = simplex[ c ][ 2 ] >= 2 ? 1 : 0;\n\t\tconst l2 = simplex[ c ][ 3 ] >= 2 ? 1 : 0;\n\t\t// The number 1 in the \"simplex\" array is at the second smallest coordinate.\n\t\tconst i3 = simplex[ c ][ 0 ] >= 1 ? 1 : 0;\n\t\tconst j3 = simplex[ c ][ 1 ] >= 1 ? 1 : 0;\n\t\tconst k3 = simplex[ c ][ 2 ] >= 1 ? 1 : 0;\n\t\tconst l3 = simplex[ c ][ 3 ] >= 1 ? 1 : 0;\n\t\t// The fifth corner has all coordinate offsets = 1, so no need to look that up.\n\t\tconst x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords\n\t\tconst y1 = y0 - j1 + G4;\n\t\tconst z1 = z0 - k1 + G4;\n\t\tconst w1 = w0 - l1 + G4;\n\t\tconst x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords\n\t\tconst y2 = y0 - j2 + 2.0 * G4;\n\t\tconst z2 = z0 - k2 + 2.0 * G4;\n\t\tconst w2 = w0 - l2 + 2.0 * G4;\n\t\tconst x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords\n\t\tconst y3 = y0 - j3 + 3.0 * G4;\n\t\tconst z3 = z0 - k3 + 3.0 * G4;\n\t\tconst w3 = w0 - l3 + 3.0 * G4;\n\t\tconst x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords\n\t\tconst y4 = y0 - 1.0 + 4.0 * G4;\n\t\tconst z4 = z0 - 1.0 + 4.0 * G4;\n\t\tconst w4 = w0 - 1.0 + 4.0 * G4;\n\t\t// Work out the hashed gradient indices of the five simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst kk = k & 255;\n\t\tconst ll = l & 255;\n\t\tconst gi0 = perm[ ii + perm[ jj + perm[ kk + perm[ ll ] ] ] ] % 32;\n\t\tconst gi1 = perm[ ii + i1 + perm[ jj + j1 + perm[ kk + k1 + perm[ ll + l1 ] ] ] ] % 32;\n\t\tconst gi2 = perm[ ii + i2 + perm[ jj + j2 + perm[ kk + k2 + perm[ ll + l2 ] ] ] ] % 32;\n\t\tconst gi3 = perm[ ii + i3 + perm[ jj + j3 + perm[ kk + k3 + perm[ ll + l3 ] ] ] ] % 32;\n\t\tconst gi4 = perm[ ii + 1 + perm[ jj + 1 + perm[ kk + 1 + perm[ ll + 1 ] ] ] ] % 32;\n\t\t// Calculate the contribution from the five corners\n\t\tlet t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this.dot4( grad4[ gi0 ], x0, y0, z0, w0 );\n\n\t\t}\n\n\t\tlet t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this.dot4( grad4[ gi1 ], x1, y1, z1, w1 );\n\n\t\t}\n\n\t\tlet t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this.dot4( grad4[ gi2 ], x2, y2, z2, w2 );\n\n\t\t}\n\n\t\tlet t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n\t\tif ( t3 < 0 ) n3 = 0.0;\n\t\telse {\n\n\t\t\tt3 *= t3;\n\t\t\tn3 = t3 * t3 * this.dot4( grad4[ gi3 ], x3, y3, z3, w3 );\n\n\t\t}\n\n\t\tlet t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n\t\tif ( t4 < 0 ) n4 = 0.0;\n\t\telse {\n\n\t\t\tt4 *= t4;\n\t\t\tn4 = t4 * t4 * this.dot4( grad4[ gi4 ], x4, y4, z4, w4 );\n\n\t\t}\n\n\t\t// Sum up and scale the result to cover the range [-1,1]\n\t\treturn 27.0 * ( n0 + n1 + n2 + n3 + n4 );\n\n\t}\n\n}\n\nexport { SimplexNoise };\n", "import {\n\tLine3,\n\tMesh,\n\tPlane,\n\tVector3\n} from 'three';\nimport { ConvexGeometry } from '../geometries/ConvexGeometry.js';\n\n/**\n * @fileoverview This class can be used to subdivide a convex Geometry object into pieces.\n *\n * Usage:\n *\n * Use the function prepareBreakableObject to prepare a Mesh object to be broken.\n *\n * Then, call the various functions to subdivide the object (subdivideByImpact, cutByPlane)\n *\n * Sub-objects that are product of subdivision don't need prepareBreakableObject to be called on them.\n *\n * Requisites for the object:\n *\n * - Mesh object must have a buffer geometry and a material\n *\n * - Vertex normals must be planar (not smoothed)\n *\n * - The geometry must be convex (this is not checked in the library). You can create convex\n * geometries with ConvexGeometry. The BoxGeometry, SphereGeometry and other convex primitives\n * can also be used.\n *\n * Note: This lib adds member variables to object's userData member (see prepareBreakableObject function)\n * Use with caution and read the code when using with other libs.\n *\n * @param {double} minSizeForBreak Min size a debris can have to break.\n * @param {double} smallDelta Max distance to consider that a point belongs to a plane.\n *\n*/\n\nconst _v1 = new Vector3();\n\nclass ConvexObjectBreaker {\n\n\tconstructor( minSizeForBreak = 1.4, smallDelta = 0.0001 ) {\n\n\t\tthis.minSizeForBreak = minSizeForBreak;\n\t\tthis.smallDelta = smallDelta;\n\n\t\tthis.tempLine1 = new Line3();\n\t\tthis.tempPlane1 = new Plane();\n\t\tthis.tempPlane2 = new Plane();\n\t\tthis.tempPlane_Cut = new Plane();\n\t\tthis.tempCM1 = new Vector3();\n\t\tthis.tempCM2 = new Vector3();\n\t\tthis.tempVector3 = new Vector3();\n\t\tthis.tempVector3_2 = new Vector3();\n\t\tthis.tempVector3_3 = new Vector3();\n\t\tthis.tempVector3_P0 = new Vector3();\n\t\tthis.tempVector3_P1 = new Vector3();\n\t\tthis.tempVector3_P2 = new Vector3();\n\t\tthis.tempVector3_N0 = new Vector3();\n\t\tthis.tempVector3_N1 = new Vector3();\n\t\tthis.tempVector3_AB = new Vector3();\n\t\tthis.tempVector3_CB = new Vector3();\n\t\tthis.tempResultObjects = { object1: null, object2: null };\n\n\t\tthis.segments = [];\n\t\tconst n = 30 * 30;\n\t\tfor ( let i = 0; i < n; i ++ ) this.segments[ i ] = false;\n\n\t}\n\n\tprepareBreakableObject( object, mass, velocity, angularVelocity, breakable ) {\n\n\t\t// object is a Object3d (normally a Mesh), must have a buffer geometry, and it must be convex.\n\t\t// Its material property is propagated to its children (sub-pieces)\n\t\t// mass must be > 0\n\n\t\tconst userData = object.userData;\n\t\tuserData.mass = mass;\n\t\tuserData.velocity = velocity.clone();\n\t\tuserData.angularVelocity = angularVelocity.clone();\n\t\tuserData.breakable = breakable;\n\n\t}\n\n\t/*\n\t * @param {int} maxRadialIterations Iterations for radial cuts.\n\t * @param {int} maxRandomIterations Max random iterations for not-radial cuts\n\t *\n\t * Returns the array of pieces\n\t */\n\tsubdivideByImpact( object, pointOfImpact, normal, maxRadialIterations, maxRandomIterations ) {\n\n\t\tconst debris = [];\n\n\t\tconst tempPlane1 = this.tempPlane1;\n\t\tconst tempPlane2 = this.tempPlane2;\n\n\t\tthis.tempVector3.addVectors( pointOfImpact, normal );\n\t\ttempPlane1.setFromCoplanarPoints( pointOfImpact, object.position, this.tempVector3 );\n\n\t\tconst maxTotalIterations = maxRandomIterations + maxRadialIterations;\n\n\t\tconst scope = this;\n\n\t\tfunction subdivideRadial( subObject, startAngle, endAngle, numIterations ) {\n\n\t\t\tif ( Math.random() < numIterations * 0.05 || numIterations > maxTotalIterations ) {\n\n\t\t\t\tdebris.push( subObject );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet angle = Math.PI;\n\n\t\t\tif ( numIterations === 0 ) {\n\n\t\t\t\ttempPlane2.normal.copy( tempPlane1.normal );\n\t\t\t\ttempPlane2.constant = tempPlane1.constant;\n\n\t\t\t} else {\n\n\t\t\t\tif ( numIterations <= maxRadialIterations ) {\n\n\t\t\t\t\tangle = ( endAngle - startAngle ) * ( 0.2 + 0.6 * Math.random() ) + startAngle;\n\n\t\t\t\t\t// Rotate tempPlane2 at impact point around normal axis and the angle\n\t\t\t\t\tscope.tempVector3_2.copy( object.position ).sub( pointOfImpact ).applyAxisAngle( normal, angle ).add( pointOfImpact );\n\t\t\t\t\ttempPlane2.setFromCoplanarPoints( pointOfImpact, scope.tempVector3, scope.tempVector3_2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tangle = ( ( 0.5 * ( numIterations & 1 ) ) + 0.2 * ( 2 - Math.random() ) ) * Math.PI;\n\n\t\t\t\t\t// Rotate tempPlane2 at object position around normal axis and the angle\n\t\t\t\t\tscope.tempVector3_2.copy( pointOfImpact ).sub( subObject.position ).applyAxisAngle( normal, angle ).add( subObject.position );\n\t\t\t\t\tscope.tempVector3_3.copy( normal ).add( subObject.position );\n\t\t\t\t\ttempPlane2.setFromCoplanarPoints( subObject.position, scope.tempVector3_3, scope.tempVector3_2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Perform the cut\n\t\t\tscope.cutByPlane( subObject, tempPlane2, scope.tempResultObjects );\n\n\t\t\tconst obj1 = scope.tempResultObjects.object1;\n\t\t\tconst obj2 = scope.tempResultObjects.object2;\n\n\t\t\tif ( obj1 ) {\n\n\t\t\t\tsubdivideRadial( obj1, startAngle, angle, numIterations + 1 );\n\n\t\t\t}\n\n\t\t\tif ( obj2 ) {\n\n\t\t\t\tsubdivideRadial( obj2, angle, endAngle, numIterations + 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tsubdivideRadial( object, 0, 2 * Math.PI, 0 );\n\n\t\treturn debris;\n\n\t}\n\n\tcutByPlane( object, plane, output ) {\n\n\t\t// Returns breakable objects in output.object1 and output.object2 members, the resulting 2 pieces of the cut.\n\t\t// object2 can be null if the plane doesn't cut the object.\n\t\t// object1 can be null only in case of internal error\n\t\t// Returned value is number of pieces, 0 for error.\n\n\t\tconst geometry = object.geometry;\n\t\tconst coords = geometry.attributes.position.array;\n\t\tconst normals = geometry.attributes.normal.array;\n\n\t\tconst numPoints = coords.length / 3;\n\t\tlet numFaces = numPoints / 3;\n\n\t\tlet indices = geometry.getIndex();\n\n\t\tif ( indices ) {\n\n\t\t\tindices = indices.array;\n\t\t\tnumFaces = indices.length / 3;\n\n\t\t}\n\n\t\tfunction getVertexIndex( faceIdx, vert ) {\n\n\t\t\t// vert = 0, 1 or 2.\n\n\t\t\tconst idx = faceIdx * 3 + vert;\n\n\t\t\treturn indices ? indices[ idx ] : idx;\n\n\t\t}\n\n\t\tconst points1 = [];\n\t\tconst points2 = [];\n\n\t\tconst delta = this.smallDelta;\n\n\t\t// Reset segments mark\n\t\tconst numPointPairs = numPoints * numPoints;\n\t\tfor ( let i = 0; i < numPointPairs; i ++ ) this.segments[ i ] = false;\n\n\t\tconst p0 = this.tempVector3_P0;\n\t\tconst p1 = this.tempVector3_P1;\n\t\tconst n0 = this.tempVector3_N0;\n\t\tconst n1 = this.tempVector3_N1;\n\n\t\t// Iterate through the faces to mark edges shared by coplanar faces\n\t\tfor ( let i = 0; i < numFaces - 1; i ++ ) {\n\n\t\t\tconst a1 = getVertexIndex( i, 0 );\n\t\t\tconst b1 = getVertexIndex( i, 1 );\n\t\t\tconst c1 = getVertexIndex( i, 2 );\n\n\t\t\t// Assuming all 3 vertices have the same normal\n\t\t\tn0.set( normals[ a1 ], normals[ a1 ] + 1, normals[ a1 ] + 2 );\n\n\t\t\tfor ( let j = i + 1; j < numFaces; j ++ ) {\n\n\t\t\t\tconst a2 = getVertexIndex( j, 0 );\n\t\t\t\tconst b2 = getVertexIndex( j, 1 );\n\t\t\t\tconst c2 = getVertexIndex( j, 2 );\n\n\t\t\t\t// Assuming all 3 vertices have the same normal\n\t\t\t\tn1.set( normals[ a2 ], normals[ a2 ] + 1, normals[ a2 ] + 2 );\n\n\t\t\t\tconst coplanar = 1 - n0.dot( n1 ) < delta;\n\n\t\t\t\tif ( coplanar ) {\n\n\t\t\t\t\tif ( a1 === a2 || a1 === b2 || a1 === c2 ) {\n\n\t\t\t\t\t\tif ( b1 === a2 || b1 === b2 || b1 === c2 ) {\n\n\t\t\t\t\t\t\tthis.segments[ a1 * numPoints + b1 ] = true;\n\t\t\t\t\t\t\tthis.segments[ b1 * numPoints + a1 ] = true;\n\n\t\t\t\t\t\t}\telse {\n\n\t\t\t\t\t\t\tthis.segments[ c1 * numPoints + a1 ] = true;\n\t\t\t\t\t\t\tthis.segments[ a1 * numPoints + c1 ] = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\telse if ( b1 === a2 || b1 === b2 || b1 === c2 ) {\n\n\t\t\t\t\t\tthis.segments[ c1 * numPoints + b1 ] = true;\n\t\t\t\t\t\tthis.segments[ b1 * numPoints + c1 ] = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Transform the plane to object local space\n\t\tconst localPlane = this.tempPlane_Cut;\n\t\tobject.updateMatrix();\n\t\tConvexObjectBreaker.transformPlaneToLocalSpace( plane, object.matrix, localPlane );\n\n\t\t// Iterate through the faces adding points to both pieces\n\t\tfor ( let i = 0; i < numFaces; i ++ ) {\n\n\t\t\tconst va = getVertexIndex( i, 0 );\n\t\t\tconst vb = getVertexIndex( i, 1 );\n\t\t\tconst vc = getVertexIndex( i, 2 );\n\n\t\t\tfor ( let segment = 0; segment < 3; segment ++ ) {\n\n\t\t\t\tconst i0 = segment === 0 ? va : ( segment === 1 ? vb : vc );\n\t\t\t\tconst i1 = segment === 0 ? vb : ( segment === 1 ? vc : va );\n\n\t\t\t\tconst segmentState = this.segments[ i0 * numPoints + i1 ];\n\n\t\t\t\tif ( segmentState ) continue; // The segment already has been processed in another face\n\n\t\t\t\t// Mark segment as processed (also inverted segment)\n\t\t\t\tthis.segments[ i0 * numPoints + i1 ] = true;\n\t\t\t\tthis.segments[ i1 * numPoints + i0 ] = true;\n\n\t\t\t\tp0.set( coords[ 3 * i0 ], coords[ 3 * i0 + 1 ], coords[ 3 * i0 + 2 ] );\n\t\t\t\tp1.set( coords[ 3 * i1 ], coords[ 3 * i1 + 1 ], coords[ 3 * i1 + 2 ] );\n\n\t\t\t\t// mark: 1 for negative side, 2 for positive side, 3 for coplanar point\n\t\t\t\tlet mark0 = 0;\n\n\t\t\t\tlet d = localPlane.distanceToPoint( p0 );\n\n\t\t\t\tif ( d > delta ) {\n\n\t\t\t\t\tmark0 = 2;\n\t\t\t\t\tpoints2.push( p0.clone() );\n\n\t\t\t\t} else if ( d < - delta ) {\n\n\t\t\t\t\tmark0 = 1;\n\t\t\t\t\tpoints1.push( p0.clone() );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmark0 = 3;\n\t\t\t\t\tpoints1.push( p0.clone() );\n\t\t\t\t\tpoints2.push( p0.clone() );\n\n\t\t\t\t}\n\n\t\t\t\t// mark: 1 for negative side, 2 for positive side, 3 for coplanar point\n\t\t\t\tlet mark1 = 0;\n\n\t\t\t\td = localPlane.distanceToPoint( p1 );\n\n\t\t\t\tif ( d > delta ) {\n\n\t\t\t\t\tmark1 = 2;\n\t\t\t\t\tpoints2.push( p1.clone() );\n\n\t\t\t\t} else if ( d < - delta ) {\n\n\t\t\t\t\tmark1 = 1;\n\t\t\t\t\tpoints1.push( p1.clone() );\n\n\t\t\t\t}\telse {\n\n\t\t\t\t\tmark1 = 3;\n\t\t\t\t\tpoints1.push( p1.clone() );\n\t\t\t\t\tpoints2.push( p1.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ( mark0 === 1 && mark1 === 2 ) || ( mark0 === 2 && mark1 === 1 ) ) {\n\n\t\t\t\t\t// Intersection of segment with the plane\n\n\t\t\t\t\tthis.tempLine1.start.copy( p0 );\n\t\t\t\t\tthis.tempLine1.end.copy( p1 );\n\n\t\t\t\t\tlet intersection = new Vector3();\n\t\t\t\t\tintersection = localPlane.intersectLine( this.tempLine1, intersection );\n\n\t\t\t\t\tif ( intersection === null ) {\n\n\t\t\t\t\t\t// Shouldn't happen\n\t\t\t\t\t\tconsole.error( 'Internal error: segment does not intersect plane.' );\n\t\t\t\t\t\toutput.segmentedObject1 = null;\n\t\t\t\t\t\toutput.segmentedObject2 = null;\n\t\t\t\t\t\treturn 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpoints1.push( intersection );\n\t\t\t\t\tpoints2.push( intersection.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Calculate debris mass (very fast and imprecise):\n\t\tconst newMass = object.userData.mass * 0.5;\n\n\t\t// Calculate debris Center of Mass (again fast and imprecise)\n\t\tthis.tempCM1.set( 0, 0, 0 );\n\t\tlet radius1 = 0;\n\t\tconst numPoints1 = points1.length;\n\n\t\tif ( numPoints1 > 0 ) {\n\n\t\t\tfor ( let i = 0; i < numPoints1; i ++ ) this.tempCM1.add( points1[ i ] );\n\n\t\t\tthis.tempCM1.divideScalar( numPoints1 );\n\t\t\tfor ( let i = 0; i < numPoints1; i ++ ) {\n\n\t\t\t\tconst p = points1[ i ];\n\t\t\t\tp.sub( this.tempCM1 );\n\t\t\t\tradius1 = Math.max( radius1, p.x, p.y, p.z );\n\n\t\t\t}\n\n\t\t\tthis.tempCM1.add( object.position );\n\n\t\t}\n\n\t\tthis.tempCM2.set( 0, 0, 0 );\n\t\tlet radius2 = 0;\n\t\tconst numPoints2 = points2.length;\n\t\tif ( numPoints2 > 0 ) {\n\n\t\t\tfor ( let i = 0; i < numPoints2; i ++ ) this.tempCM2.add( points2[ i ] );\n\n\t\t\tthis.tempCM2.divideScalar( numPoints2 );\n\t\t\tfor ( let i = 0; i < numPoints2; i ++ ) {\n\n\t\t\t\tconst p = points2[ i ];\n\t\t\t\tp.sub( this.tempCM2 );\n\t\t\t\tradius2 = Math.max( radius2, p.x, p.y, p.z );\n\n\t\t\t}\n\n\t\t\tthis.tempCM2.add( object.position );\n\n\t\t}\n\n\t\tlet object1 = null;\n\t\tlet object2 = null;\n\n\t\tlet numObjects = 0;\n\n\t\tif ( numPoints1 > 4 ) {\n\n\t\t\tobject1 = new Mesh( new ConvexGeometry( points1 ), object.material );\n\t\t\tobject1.position.copy( this.tempCM1 );\n\t\t\tobject1.quaternion.copy( object.quaternion );\n\n\t\t\tthis.prepareBreakableObject( object1, newMass, object.userData.velocity, object.userData.angularVelocity, 2 * radius1 > this.minSizeForBreak );\n\n\t\t\tnumObjects ++;\n\n\t\t}\n\n\t\tif ( numPoints2 > 4 ) {\n\n\t\t\tobject2 = new Mesh( new ConvexGeometry( points2 ), object.material );\n\t\t\tobject2.position.copy( this.tempCM2 );\n\t\t\tobject2.quaternion.copy( object.quaternion );\n\n\t\t\tthis.prepareBreakableObject( object2, newMass, object.userData.velocity, object.userData.angularVelocity, 2 * radius2 > this.minSizeForBreak );\n\n\t\t\tnumObjects ++;\n\n\t\t}\n\n\t\toutput.object1 = object1;\n\t\toutput.object2 = object2;\n\n\t\treturn numObjects;\n\n\t}\n\n\tstatic transformFreeVector( v, m ) {\n\n\t\t// input:\n\t\t// vector interpreted as a free vector\n\t\t// THREE.Matrix4 orthogonal matrix (matrix without scale)\n\n\t\tconst x = v.x, y = v.y, z = v.z;\n\t\tconst e = m.elements;\n\n\t\tv.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tv.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tv.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn v;\n\n\t}\n\n\tstatic transformFreeVectorInverse( v, m ) {\n\n\t\t// input:\n\t\t// vector interpreted as a free vector\n\t\t// THREE.Matrix4 orthogonal matrix (matrix without scale)\n\n\t\tconst x = v.x, y = v.y, z = v.z;\n\t\tconst e = m.elements;\n\n\t\tv.x = e[ 0 ] * x + e[ 1 ] * y + e[ 2 ] * z;\n\t\tv.y = e[ 4 ] * x + e[ 5 ] * y + e[ 6 ] * z;\n\t\tv.z = e[ 8 ] * x + e[ 9 ] * y + e[ 10 ] * z;\n\n\t\treturn v;\n\n\t}\n\n\tstatic transformTiedVectorInverse( v, m ) {\n\n\t\t// input:\n\t\t// vector interpreted as a tied (ordinary) vector\n\t\t// THREE.Matrix4 orthogonal matrix (matrix without scale)\n\n\t\tconst x = v.x, y = v.y, z = v.z;\n\t\tconst e = m.elements;\n\n\t\tv.x = e[ 0 ] * x + e[ 1 ] * y + e[ 2 ] * z - e[ 12 ];\n\t\tv.y = e[ 4 ] * x + e[ 5 ] * y + e[ 6 ] * z - e[ 13 ];\n\t\tv.z = e[ 8 ] * x + e[ 9 ] * y + e[ 10 ] * z - e[ 14 ];\n\n\t\treturn v;\n\n\t}\n\n\tstatic transformPlaneToLocalSpace( plane, m, resultPlane ) {\n\n\t\tresultPlane.normal.copy( plane.normal );\n\t\tresultPlane.constant = plane.constant;\n\n\t\tconst referencePoint = ConvexObjectBreaker.transformTiedVectorInverse( plane.coplanarPoint( _v1 ), m );\n\n\t\tConvexObjectBreaker.transformFreeVectorInverse( resultPlane.normal, m );\n\n\t\t// recalculate constant (like in setFromNormalAndCoplanarPoint)\n\t\tresultPlane.constant = - referencePoint.dot( resultPlane.normal );\n\n\t}\n\n}\n\nexport { ConvexObjectBreaker };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tOrthographicCamera,\n\tMesh\n} from 'three';\n\nclass Pass {\n\n\tconstructor() {\n\n\t\tthis.isPass = true;\n\n\t\t// if set to true, the pass is processed by the composer\n\t\tthis.enabled = true;\n\n\t\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\t\tthis.needsSwap = true;\n\n\t\t// if set to true, the pass clears its buffer before rendering\n\t\tthis.clear = false;\n\n\t\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\t\tthis.renderToScreen = false;\n\n\t}\n\n\tsetSize( /* width, height */ ) {}\n\n\trender( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n\tdispose() {}\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nclass FullscreenTriangleGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\n\t}\n\n}\n\nconst _geometry = new FullscreenTriangleGeometry();\n\nclass FullScreenQuad {\n\n\tconstructor( material ) {\n\n\t\tthis._mesh = new Mesh( _geometry, material );\n\n\t}\n\n\tdispose() {\n\n\t\tthis._mesh.geometry.dispose();\n\n\t}\n\n\trender( renderer ) {\n\n\t\trenderer.render( this._mesh, _camera );\n\n\t}\n\n\tget material() {\n\n\t\treturn this._mesh.material;\n\n\t}\n\n\tset material( value ) {\n\n\t\tthis._mesh.material = value;\n\n\t}\n\n}\n\nexport { Pass, FullScreenQuad };\n", "import {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tFloatType,\n\tNearestFilter,\n\tRGBAFormat,\n\tShaderMaterial,\n\tWebGLRenderTarget\n} from 'three';\n\nimport { FullScreenQuad } from '../postprocessing/Pass.js';\n\n/**\n * GPUComputationRenderer, based on SimulationRenderer by zz85\n *\n * The GPUComputationRenderer uses the concept of variables. These variables are RGBA float textures that hold 4 floats\n * for each compute element (texel)\n *\n * Each variable has a fragment shader that defines the computation made to obtain the variable in question.\n * You can use as many variables you need, and make dependencies so you can use textures of other variables in the shader\n * (the sampler uniforms are added automatically) Most of the variables will need themselves as dependency.\n *\n * The renderer has actually two render targets per variable, to make ping-pong. Textures from the current frame are used\n * as inputs to render the textures of the next frame.\n *\n * The render targets of the variables can be used as input textures for your visualization shaders.\n *\n * Variable names should be valid identifiers and should not collide with THREE GLSL used identifiers.\n * a common approach could be to use 'texture' prefixing the variable name; i.e texturePosition, textureVelocity...\n *\n * The size of the computation (sizeX * sizeY) is defined as 'resolution' automatically in the shader. For example:\n * #DEFINE resolution vec2( 1024.0, 1024.0 )\n *\n * -------------\n *\n * Basic use:\n *\n * // Initialization...\n *\n * // Create computation renderer\n * const gpuCompute = new GPUComputationRenderer( 1024, 1024, renderer );\n *\n * // Create initial state float textures\n * const pos0 = gpuCompute.createTexture();\n * const vel0 = gpuCompute.createTexture();\n * // and fill in here the texture data...\n *\n * // Add texture variables\n * const velVar = gpuCompute.addVariable( \"textureVelocity\", fragmentShaderVel, vel0 );\n * const posVar = gpuCompute.addVariable( \"texturePosition\", fragmentShaderPos, pos0 );\n *\n * // Add variable dependencies\n * gpuCompute.setVariableDependencies( velVar, [ velVar, posVar ] );\n * gpuCompute.setVariableDependencies( posVar, [ velVar, posVar ] );\n *\n * // Add custom uniforms\n * velVar.material.uniforms.time = { value: 0.0 };\n *\n * // Check for completeness\n * const error = gpuCompute.init();\n * if ( error !== null ) {\n *\t\tconsole.error( error );\n * }\n *\n *\n * // In each frame...\n *\n * // Compute!\n * gpuCompute.compute();\n *\n * // Update texture uniforms in your visualization materials with the gpu renderer output\n * myMaterial.uniforms.myTexture.value = gpuCompute.getCurrentRenderTarget( posVar ).texture;\n *\n * // Do your rendering\n * renderer.render( myScene, myCamera );\n *\n * -------------\n *\n * Also, you can use utility functions to create ShaderMaterial and perform computations (rendering between textures)\n * Note that the shaders can have multiple input textures.\n *\n * const myFilter1 = gpuCompute.createShaderMaterial( myFilterFragmentShader1, { theTexture: { value: null } } );\n * const myFilter2 = gpuCompute.createShaderMaterial( myFilterFragmentShader2, { theTexture: { value: null } } );\n *\n * const inputTexture = gpuCompute.createTexture();\n *\n * // Fill in here inputTexture...\n *\n * myFilter1.uniforms.theTexture.value = inputTexture;\n *\n * const myRenderTarget = gpuCompute.createRenderTarget();\n * myFilter2.uniforms.theTexture.value = myRenderTarget.texture;\n *\n * const outputRenderTarget = gpuCompute.createRenderTarget();\n *\n * // Now use the output texture where you want:\n * myMaterial.uniforms.map.value = outputRenderTarget.texture;\n *\n * // And compute each frame, before rendering to screen:\n * gpuCompute.doRenderTarget( myFilter1, myRenderTarget );\n * gpuCompute.doRenderTarget( myFilter2, outputRenderTarget );\n *\n *\n *\n * @param {int} sizeX Computation problem size is always 2d: sizeX * sizeY elements.\n * @param {int} sizeY Computation problem size is always 2d: sizeX * sizeY elements.\n * @param {WebGLRenderer} renderer The renderer\n */\n\nclass GPUComputationRenderer {\n\n\tconstructor( sizeX, sizeY, renderer ) {\n\n\t\tthis.variables = [];\n\n\t\tthis.currentTextureIndex = 0;\n\n\t\tlet dataType = FloatType;\n\n\t\tconst passThruUniforms = {\n\t\t\tpassThruTexture: { value: null }\n\t\t};\n\n\t\tconst passThruShader = createShaderMaterial( getPassThroughFragmentShader(), passThruUniforms );\n\n\t\tconst quad = new FullScreenQuad( passThruShader );\n\n\t\tthis.setDataType = function ( type ) {\n\n\t\t\tdataType = type;\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addVariable = function ( variableName, computeFragmentShader, initialValueTexture ) {\n\n\t\t\tconst material = this.createShaderMaterial( computeFragmentShader );\n\n\t\t\tconst variable = {\n\t\t\t\tname: variableName,\n\t\t\t\tinitialValueTexture: initialValueTexture,\n\t\t\t\tmaterial: material,\n\t\t\t\tdependencies: null,\n\t\t\t\trenderTargets: [],\n\t\t\t\twrapS: null,\n\t\t\t\twrapT: null,\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter\n\t\t\t};\n\n\t\t\tthis.variables.push( variable );\n\n\t\t\treturn variable;\n\n\t\t};\n\n\t\tthis.setVariableDependencies = function ( variable, dependencies ) {\n\n\t\t\tvariable.dependencies = dependencies;\n\n\t\t};\n\n\t\tthis.init = function () {\n\n\t\t\tif ( renderer.capabilities.maxVertexTextures === 0 ) {\n\n\t\t\t\treturn 'No support for vertex shader textures.';\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < this.variables.length; i ++ ) {\n\n\t\t\t\tconst variable = this.variables[ i ];\n\n\t\t\t\t// Creates rendertargets and initialize them with input texture\n\t\t\t\tvariable.renderTargets[ 0 ] = this.createRenderTarget( sizeX, sizeY, variable.wrapS, variable.wrapT, variable.minFilter, variable.magFilter );\n\t\t\t\tvariable.renderTargets[ 1 ] = this.createRenderTarget( sizeX, sizeY, variable.wrapS, variable.wrapT, variable.minFilter, variable.magFilter );\n\t\t\t\tthis.renderTexture( variable.initialValueTexture, variable.renderTargets[ 0 ] );\n\t\t\t\tthis.renderTexture( variable.initialValueTexture, variable.renderTargets[ 1 ] );\n\n\t\t\t\t// Adds dependencies uniforms to the ShaderMaterial\n\t\t\t\tconst material = variable.material;\n\t\t\t\tconst uniforms = material.uniforms;\n\n\t\t\t\tif ( variable.dependencies !== null ) {\n\n\t\t\t\t\tfor ( let d = 0; d < variable.dependencies.length; d ++ ) {\n\n\t\t\t\t\t\tconst depVar = variable.dependencies[ d ];\n\n\t\t\t\t\t\tif ( depVar.name !== variable.name ) {\n\n\t\t\t\t\t\t\t// Checks if variable exists\n\t\t\t\t\t\t\tlet found = false;\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < this.variables.length; j ++ ) {\n\n\t\t\t\t\t\t\t\tif ( depVar.name === this.variables[ j ].name ) {\n\n\t\t\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( ! found ) {\n\n\t\t\t\t\t\t\t\treturn 'Variable dependency not found. Variable=' + variable.name + ', dependency=' + depVar.name;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuniforms[ depVar.name ] = { value: null };\n\n\t\t\t\t\t\tmaterial.fragmentShader = '\\nuniform sampler2D ' + depVar.name + ';\\n' + material.fragmentShader;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.currentTextureIndex = 0;\n\n\t\t\treturn null;\n\n\t\t};\n\n\t\tthis.compute = function () {\n\n\t\t\tconst currentTextureIndex = this.currentTextureIndex;\n\t\t\tconst nextTextureIndex = this.currentTextureIndex === 0 ? 1 : 0;\n\n\t\t\tfor ( let i = 0, il = this.variables.length; i < il; i ++ ) {\n\n\t\t\t\tconst variable = this.variables[ i ];\n\n\t\t\t\t// Sets texture dependencies uniforms\n\t\t\t\tif ( variable.dependencies !== null ) {\n\n\t\t\t\t\tconst uniforms = variable.material.uniforms;\n\n\t\t\t\t\tfor ( let d = 0, dl = variable.dependencies.length; d < dl; d ++ ) {\n\n\t\t\t\t\t\tconst depVar = variable.dependencies[ d ];\n\n\t\t\t\t\t\tuniforms[ depVar.name ].value = depVar.renderTargets[ currentTextureIndex ].texture;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Performs the computation for this variable\n\t\t\t\tthis.doRenderTarget( variable.material, variable.renderTargets[ nextTextureIndex ] );\n\n\t\t\t}\n\n\t\t\tthis.currentTextureIndex = nextTextureIndex;\n\n\t\t};\n\n\t\tthis.getCurrentRenderTarget = function ( variable ) {\n\n\t\t\treturn variable.renderTargets[ this.currentTextureIndex ];\n\n\t\t};\n\n\t\tthis.getAlternateRenderTarget = function ( variable ) {\n\n\t\t\treturn variable.renderTargets[ this.currentTextureIndex === 0 ? 1 : 0 ];\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tquad.dispose();\n\n\t\t\tconst variables = this.variables;\n\n\t\t\tfor ( let i = 0; i < variables.length; i ++ ) {\n\n\t\t\t\tconst variable = variables[ i ];\n\n\t\t\t\tif ( variable.initialValueTexture ) variable.initialValueTexture.dispose();\n\n\t\t\t\tconst renderTargets = variable.renderTargets;\n\n\t\t\t\tfor ( let j = 0; j < renderTargets.length; j ++ ) {\n\n\t\t\t\t\tconst renderTarget = renderTargets[ j ];\n\t\t\t\t\trenderTarget.dispose();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction addResolutionDefine( materialShader ) {\n\n\t\t\tmaterialShader.defines.resolution = 'vec2( ' + sizeX.toFixed( 1 ) + ', ' + sizeY.toFixed( 1 ) + ' )';\n\n\t\t}\n\n\t\tthis.addResolutionDefine = addResolutionDefine;\n\n\n\t\t// The following functions can be used to compute things manually\n\n\t\tfunction createShaderMaterial( computeFragmentShader, uniforms ) {\n\n\t\t\tuniforms = uniforms || {};\n\n\t\t\tconst material = new ShaderMaterial( {\n\t\t\t\tname: 'GPUComputationShader',\n\t\t\t\tuniforms: uniforms,\n\t\t\t\tvertexShader: getPassThroughVertexShader(),\n\t\t\t\tfragmentShader: computeFragmentShader\n\t\t\t} );\n\n\t\t\taddResolutionDefine( material );\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tthis.createShaderMaterial = createShaderMaterial;\n\n\t\tthis.createRenderTarget = function ( sizeXTexture, sizeYTexture, wrapS, wrapT, minFilter, magFilter ) {\n\n\t\t\tsizeXTexture = sizeXTexture || sizeX;\n\t\t\tsizeYTexture = sizeYTexture || sizeY;\n\n\t\t\twrapS = wrapS || ClampToEdgeWrapping;\n\t\t\twrapT = wrapT || ClampToEdgeWrapping;\n\n\t\t\tminFilter = minFilter || NearestFilter;\n\t\t\tmagFilter = magFilter || NearestFilter;\n\n\t\t\tconst renderTarget = new WebGLRenderTarget( sizeXTexture, sizeYTexture, {\n\t\t\t\twrapS: wrapS,\n\t\t\t\twrapT: wrapT,\n\t\t\t\tminFilter: minFilter,\n\t\t\t\tmagFilter: magFilter,\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\ttype: dataType,\n\t\t\t\tdepthBuffer: false\n\t\t\t} );\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t\tthis.createTexture = function () {\n\n\t\t\tconst data = new Float32Array( sizeX * sizeY * 4 );\n\t\t\tconst texture = new DataTexture( data, sizeX, sizeY, RGBAFormat, FloatType );\n\t\t\ttexture.needsUpdate = true;\n\t\t\treturn texture;\n\n\t\t};\n\n\t\tthis.renderTexture = function ( input, output ) {\n\n\t\t\t// Takes a texture, and render out in rendertarget\n\t\t\t// input = Texture\n\t\t\t// output = RenderTarget\n\n\t\t\tpassThruUniforms.passThruTexture.value = input;\n\n\t\t\tthis.doRenderTarget( passThruShader, output );\n\n\t\t\tpassThruUniforms.passThruTexture.value = null;\n\n\t\t};\n\n\t\tthis.doRenderTarget = function ( material, output ) {\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\t\t\tquad.material = material;\n\t\t\trenderer.setRenderTarget( output );\n\t\t\tquad.render( renderer );\n\t\t\tquad.material = passThruShader;\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t};\n\n\t\t// Shaders\n\n\t\tfunction getPassThroughVertexShader() {\n\n\t\t\treturn\t'void main()\t{\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'\tgl_Position = vec4( position, 1.0 );\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'}\\n';\n\n\t\t}\n\n\t\tfunction getPassThroughFragmentShader() {\n\n\t\t\treturn\t'uniform sampler2D passThruTexture;\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'void main() {\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'\tvec2 uv = gl_FragCoord.xy / resolution.xy;\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'\tgl_FragColor = texture2D( passThruTexture, uv );\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'}\\n';\n\n\t\t}\n\n\t}\n\n}\n\nexport { GPUComputationRenderer };\n", "import {\n\tObject3D,\n\tQuaternion,\n\tVector3\n} from 'three';\n\nconst _translationObject = new Vector3();\nconst _quaternionObject = new Quaternion();\nconst _scaleObject = new Vector3();\n\nconst _translationWorld = new Vector3();\nconst _quaternionWorld = new Quaternion();\nconst _scaleWorld = new Vector3();\n\nclass Gyroscope extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.matrixAutoUpdate && this.updateMatrix();\n\n\t\t// update matrixWorld\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent !== null ) {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\tthis.matrixWorld.decompose( _translationWorld, _quaternionWorld, _scaleWorld );\n\t\t\t\tthis.matrix.decompose( _translationObject, _quaternionObject, _scaleObject );\n\n\t\t\t\tthis.matrixWorld.compose( _translationWorld, _quaternionObject, _scaleWorld );\n\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t}\n\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tthis.children[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n}\n\nexport { Gyroscope };\n", "import {\n\tAnimationMixer,\n\tBox3,\n\tMesh,\n\tMeshLambertMaterial,\n\tObject3D,\n\tTextureLoader,\n\tUVMapping,\n\tSRGBColorSpace\n} from 'three';\nimport { MD2Loader } from '../loaders/MD2Loader.js';\n\nclass MD2Character {\n\n\tconstructor() {\n\n\t\tthis.scale = 1;\n\t\tthis.animationFPS = 6;\n\n\t\tthis.root = new Object3D();\n\n\t\tthis.meshBody = null;\n\t\tthis.meshWeapon = null;\n\n\t\tthis.skinsBody = [];\n\t\tthis.skinsWeapon = [];\n\n\t\tthis.weapons = [];\n\n\t\tthis.activeAnimation = null;\n\n\t\tthis.mixer = null;\n\n\t\tthis.onLoadComplete = function () {};\n\n\t\tthis.loadCounter = 0;\n\n\t}\n\n\tloadParts( config ) {\n\n\t\tconst scope = this;\n\n\t\tfunction createPart( geometry, skinMap ) {\n\n\t\t\tconst materialWireframe = new MeshLambertMaterial( { color: 0xffaa00, wireframe: true } );\n\t\t\tconst materialTexture = new MeshLambertMaterial( { color: 0xffffff, wireframe: false, map: skinMap } );\n\n\t\t\t//\n\n\t\t\tconst mesh = new Mesh( geometry, materialTexture );\n\t\t\tmesh.rotation.y = - Math.PI / 2;\n\n\t\t\tmesh.castShadow = true;\n\t\t\tmesh.receiveShadow = true;\n\n\t\t\t//\n\n\t\t\tmesh.materialTexture = materialTexture;\n\t\t\tmesh.materialWireframe = materialWireframe;\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction loadTextures( baseUrl, textureUrls ) {\n\n\t\t\tconst textureLoader = new TextureLoader();\n\t\t\tconst textures = [];\n\n\t\t\tfor ( let i = 0; i < textureUrls.length; i ++ ) {\n\n\t\t\t\ttextures[ i ] = textureLoader.load( baseUrl + textureUrls[ i ], checkLoadingComplete );\n\t\t\t\ttextures[ i ].mapping = UVMapping;\n\t\t\t\ttextures[ i ].name = textureUrls[ i ];\n\t\t\t\ttextures[ i ].colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\treturn textures;\n\n\t\t}\n\n\t\tfunction checkLoadingComplete() {\n\n\t\t\tscope.loadCounter -= 1;\n\n\t\t\tif ( scope.loadCounter === 0 ) scope.onLoadComplete();\n\n\t\t}\n\n\t\tthis.loadCounter = config.weapons.length * 2 + config.skins.length + 1;\n\n\t\tconst weaponsTextures = [];\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) weaponsTextures[ i ] = config.weapons[ i ][ 1 ];\n\t\t// SKINS\n\n\t\tthis.skinsBody = loadTextures( config.baseUrl + 'skins/', config.skins );\n\t\tthis.skinsWeapon = loadTextures( config.baseUrl + 'skins/', weaponsTextures );\n\n\t\t// BODY\n\n\t\tconst loader = new MD2Loader();\n\n\t\tloader.load( config.baseUrl + config.body, function ( geo ) {\n\n\t\t\tconst boundingBox = new Box3();\n\t\t\tboundingBox.setFromBufferAttribute( geo.attributes.position );\n\n\t\t\tscope.root.position.y = - scope.scale * boundingBox.min.y;\n\n\t\t\tconst mesh = createPart( geo, scope.skinsBody[ 0 ] );\n\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\n\t\t\tscope.root.add( mesh );\n\n\t\t\tscope.meshBody = mesh;\n\n\t\t\tscope.meshBody.clipOffset = 0;\n\t\t\tscope.activeAnimationClipName = mesh.geometry.animations[ 0 ].name;\n\n\t\t\tscope.mixer = new AnimationMixer( mesh );\n\n\t\t\tcheckLoadingComplete();\n\n\t\t} );\n\n\t\t// WEAPONS\n\n\t\tconst generateCallback = function ( index, name ) {\n\n\t\t\treturn function ( geo ) {\n\n\t\t\t\tconst mesh = createPart( geo, scope.skinsWeapon[ index ] );\n\t\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\t\t\t\tmesh.visible = false;\n\n\t\t\t\tmesh.name = name;\n\n\t\t\t\tscope.root.add( mesh );\n\n\t\t\t\tscope.weapons[ index ] = mesh;\n\t\t\t\tscope.meshWeapon = mesh;\n\n\t\t\t\tcheckLoadingComplete();\n\n\t\t\t};\n\n\t\t};\n\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) {\n\n\t\t\tloader.load( config.baseUrl + config.weapons[ i ][ 0 ], generateCallback( i, config.weapons[ i ][ 0 ] ) );\n\n\t\t}\n\n\t}\n\n\tsetPlaybackRate( rate ) {\n\n\t\tif ( rate !== 0 ) {\n\n\t\t\tthis.mixer.timeScale = 1 / rate;\n\n\t\t} else {\n\n\t\t\tthis.mixer.timeScale = 0;\n\n\t\t}\n\n\t}\n\n\tsetWireframe( wireframeEnabled ) {\n\n\t\tif ( wireframeEnabled ) {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialWireframe;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialWireframe;\n\n\t\t} else {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialTexture;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialTexture;\n\n\t\t}\n\n\t}\n\n\tsetSkin( index ) {\n\n\t\tif ( this.meshBody && this.meshBody.material.wireframe === false ) {\n\n\t\t\tthis.meshBody.material.map = this.skinsBody[ index ];\n\n\t\t}\n\n\t}\n\n\tsetWeapon( index ) {\n\n\t\tfor ( let i = 0; i < this.weapons.length; i ++ ) this.weapons[ i ].visible = false;\n\n\t\tconst activeWeapon = this.weapons[ index ];\n\n\t\tif ( activeWeapon ) {\n\n\t\t\tactiveWeapon.visible = true;\n\t\t\tthis.meshWeapon = activeWeapon;\n\n\t\t\tthis.syncWeaponAnimation();\n\n\t\t}\n\n\t}\n\n\tsetAnimation( clipName ) {\n\n\t\tif ( this.meshBody ) {\n\n\t\t\tif ( this.meshBody.activeAction ) {\n\n\t\t\t\tthis.meshBody.activeAction.stop();\n\t\t\t\tthis.meshBody.activeAction = null;\n\n\t\t\t}\n\n\t\t\tconst action = this.mixer.clipAction( clipName, this.meshBody );\n\n\t\t\tif ( action ) {\n\n\t\t\t\tthis.meshBody.activeAction = action.play();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.activeClipName = clipName;\n\n\t\tthis.syncWeaponAnimation();\n\n\t}\n\n\tsyncWeaponAnimation() {\n\n\t\tconst clipName = this.activeClipName;\n\n\t\tif ( this.meshWeapon ) {\n\n\t\t\tif ( this.meshWeapon.activeAction ) {\n\n\t\t\t\tthis.meshWeapon.activeAction.stop();\n\t\t\t\tthis.meshWeapon.activeAction = null;\n\n\t\t\t}\n\n\t\t\tconst action = this.mixer.clipAction( clipName, this.meshWeapon );\n\n\t\t\tif ( action ) {\n\n\t\t\t\tthis.meshWeapon.activeAction = action.syncWith( this.meshBody.activeAction ).play();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tif ( this.mixer ) this.mixer.update( delta );\n\n\t}\n\n}\n\nexport { MD2Character };\n", "import {\n\tMathUtils,\n\tMesh\n} from 'three';\n\nclass MorphBlendMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.animationsMap = {};\n\t\tthis.animationsList = [];\n\n\t\t// prepare default animation\n\t\t// (all frames played together in 1 second)\n\n\t\tconst numFrames = Object.keys( this.morphTargetDictionary ).length;\n\n\t\tconst name = '__default';\n\n\t\tconst startFrame = 0;\n\t\tconst endFrame = numFrames - 1;\n\n\t\tconst fps = numFrames / 1;\n\n\t\tthis.createAnimation( name, startFrame, endFrame, fps );\n\t\tthis.setAnimationWeight( name, 1 );\n\n\t}\n\n\tcreateAnimation( name, start, end, fps ) {\n\n\t\tconst animation = {\n\n\t\t\tstart: start,\n\t\t\tend: end,\n\n\t\t\tlength: end - start + 1,\n\n\t\t\tfps: fps,\n\t\t\tduration: ( end - start ) / fps,\n\n\t\t\tlastFrame: 0,\n\t\t\tcurrentFrame: 0,\n\n\t\t\tactive: false,\n\n\t\t\ttime: 0,\n\t\t\tdirection: 1,\n\t\t\tweight: 1,\n\n\t\t\tdirectionBackwards: false,\n\t\t\tmirroredLoop: false\n\n\t\t};\n\n\t\tthis.animationsMap[ name ] = animation;\n\t\tthis.animationsList.push( animation );\n\n\t}\n\n\tautoCreateAnimations( fps ) {\n\n\t\tconst pattern = /([a-z]+)_?(\\d+)/i;\n\n\t\tlet firstAnimation;\n\n\t\tconst frameRanges = {};\n\n\t\tlet i = 0;\n\n\t\tfor ( const key in this.morphTargetDictionary ) {\n\n\t\t\tconst chunks = key.match( pattern );\n\n\t\t\tif ( chunks && chunks.length > 1 ) {\n\n\t\t\t\tconst name = chunks[ 1 ];\n\n\t\t\t\tif ( ! frameRanges[ name ] ) frameRanges[ name ] = { start: Infinity, end: - Infinity };\n\n\t\t\t\tconst range = frameRanges[ name ];\n\n\t\t\t\tif ( i < range.start ) range.start = i;\n\t\t\t\tif ( i > range.end ) range.end = i;\n\n\t\t\t\tif ( ! firstAnimation ) firstAnimation = name;\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\tfor ( const name in frameRanges ) {\n\n\t\t\tconst range = frameRanges[ name ];\n\t\t\tthis.createAnimation( name, range.start, range.end, fps );\n\n\t\t}\n\n\t\tthis.firstAnimation = firstAnimation;\n\n\t}\n\n\tsetAnimationDirectionForward( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.direction = 1;\n\t\t\tanimation.directionBackwards = false;\n\n\t\t}\n\n\t}\n\n\tsetAnimationDirectionBackward( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.direction = - 1;\n\t\t\tanimation.directionBackwards = true;\n\n\t\t}\n\n\t}\n\n\tsetAnimationFPS( name, fps ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.fps = fps;\n\t\t\tanimation.duration = ( animation.end - animation.start ) / animation.fps;\n\n\t\t}\n\n\t}\n\n\tsetAnimationDuration( name, duration ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.duration = duration;\n\t\t\tanimation.fps = ( animation.end - animation.start ) / animation.duration;\n\n\t\t}\n\n\t}\n\n\tsetAnimationWeight( name, weight ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.weight = weight;\n\n\t\t}\n\n\t}\n\n\tsetAnimationTime( name, time ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.time = time;\n\n\t\t}\n\n\t}\n\n\tgetAnimationTime( name ) {\n\n\t\tlet time = 0;\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\ttime = animation.time;\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\tgetAnimationDuration( name ) {\n\n\t\tlet duration = - 1;\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tduration = animation.duration;\n\n\t\t}\n\n\t\treturn duration;\n\n\t}\n\n\tplayAnimation( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.time = 0;\n\t\t\tanimation.active = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.MorphBlendMesh: animation[' + name + '] undefined in .playAnimation()' );\n\n\t\t}\n\n\t}\n\n\tstopAnimation( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.active = false;\n\n\t\t}\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tfor ( let i = 0, il = this.animationsList.length; i < il; i ++ ) {\n\n\t\t\tconst animation = this.animationsList[ i ];\n\n\t\t\tif ( ! animation.active ) continue;\n\n\t\t\tconst frameTime = animation.duration / animation.length;\n\n\t\t\tanimation.time += animation.direction * delta;\n\n\t\t\tif ( animation.mirroredLoop ) {\n\n\t\t\t\tif ( animation.time > animation.duration || animation.time < 0 ) {\n\n\t\t\t\t\tanimation.direction *= - 1;\n\n\t\t\t\t\tif ( animation.time > animation.duration ) {\n\n\t\t\t\t\t\tanimation.time = animation.duration;\n\t\t\t\t\t\tanimation.directionBackwards = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( animation.time < 0 ) {\n\n\t\t\t\t\t\tanimation.time = 0;\n\t\t\t\t\t\tanimation.directionBackwards = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tanimation.time = animation.time % animation.duration;\n\n\t\t\t\tif ( animation.time < 0 ) animation.time += animation.duration;\n\n\t\t\t}\n\n\t\t\tconst keyframe = animation.start + MathUtils.clamp( Math.floor( animation.time / frameTime ), 0, animation.length - 1 );\n\t\t\tconst weight = animation.weight;\n\n\t\t\tif ( keyframe !== animation.currentFrame ) {\n\n\t\t\t\tthis.morphTargetInfluences[ animation.lastFrame ] = 0;\n\t\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = 1 * weight;\n\n\t\t\t\tthis.morphTargetInfluences[ keyframe ] = 0;\n\n\t\t\t\tanimation.lastFrame = animation.currentFrame;\n\t\t\t\tanimation.currentFrame = keyframe;\n\n\t\t\t}\n\n\t\t\tlet mix = ( animation.time % frameTime ) / frameTime;\n\n\t\t\tif ( animation.directionBackwards ) mix = 1 - mix;\n\n\t\t\tif ( animation.currentFrame !== animation.lastFrame ) {\n\n\t\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = mix * weight;\n\t\t\t\tthis.morphTargetInfluences[ animation.lastFrame ] = ( 1 - mix ) * weight;\n\n\t\t\t} else {\n\n\t\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = weight;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { MorphBlendMesh };\n", "import {\n\tBox3,\n\tMathUtils,\n\tMeshLambertMaterial,\n\tObject3D,\n\tTextureLoader,\n\tUVMapping,\n\tSRGBColorSpace\n} from 'three';\nimport { MD2Loader } from '../loaders/MD2Loader.js';\nimport { MorphBlendMesh } from '../misc/MorphBlendMesh.js';\n\nclass MD2CharacterComplex {\n\n\tconstructor() {\n\n\t\tthis.scale = 1;\n\n\t\t// animation parameters\n\n\t\tthis.animationFPS = 6;\n\t\tthis.transitionFrames = 15;\n\n\t\t// movement model parameters\n\n\t\tthis.maxSpeed = 275;\n\t\tthis.maxReverseSpeed = - 275;\n\n\t\tthis.frontAcceleration = 600;\n\t\tthis.backAcceleration = 600;\n\n\t\tthis.frontDecceleration = 600;\n\n\t\tthis.angularSpeed = 2.5;\n\n\t\t// rig\n\n\t\tthis.root = new Object3D();\n\n\t\tthis.meshBody = null;\n\t\tthis.meshWeapon = null;\n\n\t\tthis.controls = null;\n\n\t\t// skins\n\n\t\tthis.skinsBody = [];\n\t\tthis.skinsWeapon = [];\n\n\t\tthis.weapons = [];\n\n\t\tthis.currentSkin = undefined;\n\n\t\t//\n\n\t\tthis.onLoadComplete = function () {};\n\n\t\t// internals\n\n\t\tthis.meshes = [];\n\t\tthis.animations = {};\n\n\t\tthis.loadCounter = 0;\n\n\t\t// internal movement control variables\n\n\t\tthis.speed = 0;\n\t\tthis.bodyOrientation = 0;\n\n\t\tthis.walkSpeed = this.maxSpeed;\n\t\tthis.crouchSpeed = this.maxSpeed * 0.5;\n\n\t\t// internal animation parameters\n\n\t\tthis.activeAnimation = null;\n\t\tthis.oldAnimation = null;\n\n\t\t// API\n\n\t}\n\n\tenableShadows( enable ) {\n\n\t\tfor ( let i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis.meshes[ i ].castShadow = enable;\n\t\t\tthis.meshes[ i ].receiveShadow = enable;\n\n\t\t}\n\n\t}\n\n\tsetVisible( enable ) {\n\n\t\tfor ( let i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis.meshes[ i ].visible = enable;\n\t\t\tthis.meshes[ i ].visible = enable;\n\n\t\t}\n\n\t}\n\n\tshareParts( original ) {\n\n\t\tthis.animations = original.animations;\n\t\tthis.walkSpeed = original.walkSpeed;\n\t\tthis.crouchSpeed = original.crouchSpeed;\n\n\t\tthis.skinsBody = original.skinsBody;\n\t\tthis.skinsWeapon = original.skinsWeapon;\n\n\t\t// BODY\n\n\t\tconst mesh = this._createPart( original.meshBody.geometry, this.skinsBody[ 0 ] );\n\t\tmesh.scale.set( this.scale, this.scale, this.scale );\n\n\t\tthis.root.position.y = original.root.position.y;\n\t\tthis.root.add( mesh );\n\n\t\tthis.meshBody = mesh;\n\n\t\tthis.meshes.push( mesh );\n\n\t\t// WEAPONS\n\n\t\tfor ( let i = 0; i < original.weapons.length; i ++ ) {\n\n\t\t\tconst meshWeapon = this._createPart( original.weapons[ i ].geometry, this.skinsWeapon[ i ] );\n\t\t\tmeshWeapon.scale.set( this.scale, this.scale, this.scale );\n\t\t\tmeshWeapon.visible = false;\n\n\t\t\tmeshWeapon.name = original.weapons[ i ].name;\n\n\t\t\tthis.root.add( meshWeapon );\n\n\t\t\tthis.weapons[ i ] = meshWeapon;\n\t\t\tthis.meshWeapon = meshWeapon;\n\n\t\t\tthis.meshes.push( meshWeapon );\n\n\t\t}\n\n\t}\n\n\tloadParts( config ) {\n\n\t\tconst scope = this;\n\n\t\tfunction loadTextures( baseUrl, textureUrls ) {\n\n\t\t\tconst textureLoader = new TextureLoader();\n\t\t\tconst textures = [];\n\n\t\t\tfor ( let i = 0; i < textureUrls.length; i ++ ) {\n\n\t\t\t\ttextures[ i ] = textureLoader.load( baseUrl + textureUrls[ i ], checkLoadingComplete );\n\t\t\t\ttextures[ i ].mapping = UVMapping;\n\t\t\t\ttextures[ i ].name = textureUrls[ i ];\n\t\t\t\ttextures[ i ].colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\treturn textures;\n\n\t\t}\n\n\t\tfunction checkLoadingComplete() {\n\n\t\t\tscope.loadCounter -= 1;\n\t\t\tif ( scope.loadCounter === 0 ) \tscope.onLoadComplete();\n\n\t\t}\n\n\t\tthis.animations = config.animations;\n\t\tthis.walkSpeed = config.walkSpeed;\n\t\tthis.crouchSpeed = config.crouchSpeed;\n\n\t\tthis.loadCounter = config.weapons.length * 2 + config.skins.length + 1;\n\n\t\tconst weaponsTextures = [];\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) weaponsTextures[ i ] = config.weapons[ i ][ 1 ];\n\n\t\t// SKINS\n\n\t\tthis.skinsBody = loadTextures( config.baseUrl + 'skins/', config.skins );\n\t\tthis.skinsWeapon = loadTextures( config.baseUrl + 'skins/', weaponsTextures );\n\n\t\t// BODY\n\n\t\tconst loader = new MD2Loader();\n\n\t\tloader.load( config.baseUrl + config.body, function ( geo ) {\n\n\t\t\tconst boundingBox = new Box3();\n\t\t\tboundingBox.setFromBufferAttribute( geo.attributes.position );\n\n\t\t\tscope.root.position.y = - scope.scale * boundingBox.min.y;\n\n\t\t\tconst mesh = scope._createPart( geo, scope.skinsBody[ 0 ] );\n\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\n\t\t\tscope.root.add( mesh );\n\n\t\t\tscope.meshBody = mesh;\n\t\t\tscope.meshes.push( mesh );\n\n\t\t\tcheckLoadingComplete();\n\n\t\t} );\n\n\t\t// WEAPONS\n\n\t\tconst generateCallback = function ( index, name ) {\n\n\t\t\treturn function ( geo ) {\n\n\t\t\t\tconst mesh = scope._createPart( geo, scope.skinsWeapon[ index ] );\n\t\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\t\t\t\tmesh.visible = false;\n\n\t\t\t\tmesh.name = name;\n\n\t\t\t\tscope.root.add( mesh );\n\n\t\t\t\tscope.weapons[ index ] = mesh;\n\t\t\t\tscope.meshWeapon = mesh;\n\t\t\t\tscope.meshes.push( mesh );\n\n\t\t\t\tcheckLoadingComplete();\n\n\t\t\t};\n\n\t\t};\n\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) {\n\n\t\t\tloader.load( config.baseUrl + config.weapons[ i ][ 0 ], generateCallback( i, config.weapons[ i ][ 0 ] ) );\n\n\t\t}\n\n\t}\n\n\tsetPlaybackRate( rate ) {\n\n\t\tif ( this.meshBody ) this.meshBody.duration = this.meshBody.baseDuration / rate;\n\t\tif ( this.meshWeapon ) this.meshWeapon.duration = this.meshWeapon.baseDuration / rate;\n\n\t}\n\n\tsetWireframe( wireframeEnabled ) {\n\n\t\tif ( wireframeEnabled ) {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialWireframe;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialWireframe;\n\n\t\t} else {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialTexture;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialTexture;\n\n\t\t}\n\n\t}\n\n\tsetSkin( index ) {\n\n\t\tif ( this.meshBody && this.meshBody.material.wireframe === false ) {\n\n\t\t\tthis.meshBody.material.map = this.skinsBody[ index ];\n\t\t\tthis.currentSkin = index;\n\n\t\t}\n\n\t}\n\n\tsetWeapon( index ) {\n\n\t\tfor ( let i = 0; i < this.weapons.length; i ++ ) this.weapons[ i ].visible = false;\n\n\t\tconst activeWeapon = this.weapons[ index ];\n\n\t\tif ( activeWeapon ) {\n\n\t\t\tactiveWeapon.visible = true;\n\t\t\tthis.meshWeapon = activeWeapon;\n\n\t\t\tif ( this.activeAnimation ) {\n\n\t\t\t\tactiveWeapon.playAnimation( this.activeAnimation );\n\t\t\t\tthis.meshWeapon.setAnimationTime( this.activeAnimation, this.meshBody.getAnimationTime( this.activeAnimation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetAnimation( animationName ) {\n\n\t\tif ( animationName === this.activeAnimation || ! animationName ) return;\n\n\t\tif ( this.meshBody ) {\n\n\t\t\tthis.meshBody.setAnimationWeight( animationName, 0 );\n\t\t\tthis.meshBody.playAnimation( animationName );\n\n\t\t\tthis.oldAnimation = this.activeAnimation;\n\t\t\tthis.activeAnimation = animationName;\n\n\t\t\tthis.blendCounter = this.transitionFrames;\n\n\t\t}\n\n\t\tif ( this.meshWeapon ) {\n\n\t\t\tthis.meshWeapon.setAnimationWeight( animationName, 0 );\n\t\t\tthis.meshWeapon.playAnimation( animationName );\n\n\t\t}\n\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tif ( this.controls ) this.updateMovementModel( delta );\n\n\t\tif ( this.animations ) {\n\n\t\t\tthis.updateBehaviors();\n\t\t\tthis.updateAnimations( delta );\n\n\t\t}\n\n\t}\n\n\tupdateAnimations( delta ) {\n\n\t\tlet mix = 1;\n\n\t\tif ( this.blendCounter > 0 ) {\n\n\t\t\tmix = ( this.transitionFrames - this.blendCounter ) / this.transitionFrames;\n\t\t\tthis.blendCounter -= 1;\n\n\t\t}\n\n\t\tif ( this.meshBody ) {\n\n\t\t\tthis.meshBody.update( delta );\n\n\t\t\tthis.meshBody.setAnimationWeight( this.activeAnimation, mix );\n\t\t\tthis.meshBody.setAnimationWeight( this.oldAnimation, 1 - mix );\n\n\t\t}\n\n\t\tif ( this.meshWeapon ) {\n\n\t\t\tthis.meshWeapon.update( delta );\n\n\t\t\tthis.meshWeapon.setAnimationWeight( this.activeAnimation, mix );\n\t\t\tthis.meshWeapon.setAnimationWeight( this.oldAnimation, 1 - mix );\n\n\t\t}\n\n\t}\n\n\tupdateBehaviors() {\n\n\t\tconst controls = this.controls;\n\t\tconst animations = this.animations;\n\n\t\tlet moveAnimation, idleAnimation;\n\n\t\t// crouch vs stand\n\n\t\tif ( controls.crouch ) {\n\n\t\t\tmoveAnimation = animations[ 'crouchMove' ];\n\t\t\tidleAnimation = animations[ 'crouchIdle' ];\n\n\t\t} else {\n\n\t\t\tmoveAnimation = animations[ 'move' ];\n\t\t\tidleAnimation = animations[ 'idle' ];\n\n\t\t}\n\n\t\t// actions\n\n\t\tif ( controls.jump ) {\n\n\t\t\tmoveAnimation = animations[ 'jump' ];\n\t\t\tidleAnimation = animations[ 'jump' ];\n\n\t\t}\n\n\t\tif ( controls.attack ) {\n\n\t\t\tif ( controls.crouch ) {\n\n\t\t\t\tmoveAnimation = animations[ 'crouchAttack' ];\n\t\t\t\tidleAnimation = animations[ 'crouchAttack' ];\n\n\t\t\t} else {\n\n\t\t\t\tmoveAnimation = animations[ 'attack' ];\n\t\t\t\tidleAnimation = animations[ 'attack' ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// set animations\n\n\t\tif ( controls.moveForward || controls.moveBackward || controls.moveLeft || controls.moveRight ) {\n\n\t\t\tif ( this.activeAnimation !== moveAnimation ) {\n\n\t\t\t\tthis.setAnimation( moveAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tif ( Math.abs( this.speed ) < 0.2 * this.maxSpeed && ! ( controls.moveLeft || controls.moveRight || controls.moveForward || controls.moveBackward ) ) {\n\n\t\t\tif ( this.activeAnimation !== idleAnimation ) {\n\n\t\t\t\tthis.setAnimation( idleAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// set animation direction\n\n\t\tif ( controls.moveForward ) {\n\n\t\t\tif ( this.meshBody ) {\n\n\t\t\t\tthis.meshBody.setAnimationDirectionForward( this.activeAnimation );\n\t\t\t\tthis.meshBody.setAnimationDirectionForward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t\tif ( this.meshWeapon ) {\n\n\t\t\t\tthis.meshWeapon.setAnimationDirectionForward( this.activeAnimation );\n\t\t\t\tthis.meshWeapon.setAnimationDirectionForward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( controls.moveBackward ) {\n\n\t\t\tif ( this.meshBody ) {\n\n\t\t\t\tthis.meshBody.setAnimationDirectionBackward( this.activeAnimation );\n\t\t\t\tthis.meshBody.setAnimationDirectionBackward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t\tif ( this.meshWeapon ) {\n\n\t\t\t\tthis.meshWeapon.setAnimationDirectionBackward( this.activeAnimation );\n\t\t\t\tthis.meshWeapon.setAnimationDirectionBackward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMovementModel( delta ) {\n\n\t\tfunction exponentialEaseOut( k ) {\n\n\t\t\treturn k === 1 ? 1 : - Math.pow( 2, - 10 * k ) + 1;\n\n\t\t}\n\n\t\tconst controls = this.controls;\n\n\t\t// speed based on controls\n\n\t\tif ( controls.crouch ) \tthis.maxSpeed = this.crouchSpeed;\n\t\telse this.maxSpeed = this.walkSpeed;\n\n\t\tthis.maxReverseSpeed = - this.maxSpeed;\n\n\t\tif ( controls.moveForward ) this.speed = MathUtils.clamp( this.speed + delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\t\tif ( controls.moveBackward ) this.speed = MathUtils.clamp( this.speed - delta * this.backAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\n\t\t// orientation based on controls\n\t\t// (don't just stand while turning)\n\n\t\tconst dir = 1;\n\n\t\tif ( controls.moveLeft ) {\n\n\t\t\tthis.bodyOrientation += delta * this.angularSpeed;\n\t\t\tthis.speed = MathUtils.clamp( this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\n\t\t}\n\n\t\tif ( controls.moveRight ) {\n\n\t\t\tthis.bodyOrientation -= delta * this.angularSpeed;\n\t\t\tthis.speed = MathUtils.clamp( this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\n\t\t}\n\n\t\t// speed decay\n\n\t\tif ( ! ( controls.moveForward || controls.moveBackward ) ) {\n\n\t\t\tif ( this.speed > 0 ) {\n\n\t\t\t\tconst k = exponentialEaseOut( this.speed / this.maxSpeed );\n\t\t\t\tthis.speed = MathUtils.clamp( this.speed - k * delta * this.frontDecceleration, 0, this.maxSpeed );\n\n\t\t\t} else {\n\n\t\t\t\tconst k = exponentialEaseOut( this.speed / this.maxReverseSpeed );\n\t\t\t\tthis.speed = MathUtils.clamp( this.speed + k * delta * this.backAcceleration, this.maxReverseSpeed, 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// displacement\n\n\t\tconst forwardDelta = this.speed * delta;\n\n\t\tthis.root.position.x += Math.sin( this.bodyOrientation ) * forwardDelta;\n\t\tthis.root.position.z += Math.cos( this.bodyOrientation ) * forwardDelta;\n\n\t\t// steering\n\n\t\tthis.root.rotation.y = this.bodyOrientation;\n\n\t}\n\n\t// internal\n\n\t_createPart( geometry, skinMap ) {\n\n\t\tconst materialWireframe = new MeshLambertMaterial( { color: 0xffaa00, wireframe: true } );\n\t\tconst materialTexture = new MeshLambertMaterial( { color: 0xffffff, wireframe: false, map: skinMap } );\n\n\t\t//\n\n\t\tconst mesh = new MorphBlendMesh( geometry, materialTexture );\n\t\tmesh.rotation.y = - Math.PI / 2;\n\n\t\t//\n\n\t\tmesh.materialTexture = materialTexture;\n\t\tmesh.materialWireframe = materialWireframe;\n\n\t\t//\n\n\t\tmesh.autoCreateAnimations( this.animationFPS );\n\n\t\treturn mesh;\n\n\t}\n\n}\n\nexport { MD2CharacterComplex };\n", "import {\n\tAnimationClip,\n\tAnimationMixer,\n\tMesh\n} from 'three';\n\nclass MorphAnimMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'MorphAnimMesh';\n\n\t\tthis.mixer = new AnimationMixer( this );\n\t\tthis.activeAction = null;\n\n\t}\n\n\tsetDirectionForward() {\n\n\t\tthis.mixer.timeScale = 1.0;\n\n\t}\n\n\tsetDirectionBackward() {\n\n\t\tthis.mixer.timeScale = - 1.0;\n\n\t}\n\n\tplayAnimation( label, fps ) {\n\n\t\tif ( this.activeAction ) {\n\n\t\t\tthis.activeAction.stop();\n\t\t\tthis.activeAction = null;\n\n\t\t}\n\n\t\tconst clip = AnimationClip.findByName( this, label );\n\n\t\tif ( clip ) {\n\n\t\t\tconst action = this.mixer.clipAction( clip );\n\t\t\taction.timeScale = ( clip.tracks.length * fps ) / clip.duration;\n\t\t\tthis.activeAction = action.play();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.MorphAnimMesh: animations[' + label + '] undefined in .playAnimation()' );\n\n\t\t}\n\n\t}\n\n\tupdateAnimation( delta ) {\n\n\t\tthis.mixer.update( delta );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.mixer = new AnimationMixer( this );\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MorphAnimMesh };\n", "/**\n * potpack - by [@mourner](https://github.com/mourner)\n * \n * A tiny JavaScript function for packing 2D rectangles into a near-square container, \n * which is useful for generating CSS sprites and WebGL textures. Similar to \n * [shelf-pack](https://github.com/mapbox/shelf-pack), but static (you can't add items \n * once a layout is generated), and aims for maximal space utilization.\n *\n * A variation of algorithms used in [rectpack2D](https://github.com/TeamHypersomnia/rectpack2D)\n * and [bin-pack](https://github.com/bryanburgers/bin-pack), which are in turn based \n * on [this article by Blackpawn](http://blackpawn.com/texts/lightmaps/default.html).\n * \n * @license\n * ISC License\n * \n * Copyright (c) 2018, Mapbox\n * \n * Permission to use, copy, modify, and/or distribute this software for any purpose\n * with or without fee is hereby granted, provided that the above copyright notice\n * and this permission notice appear in all copies.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n * THIS SOFTWARE.\n */\n\nfunction potpack(boxes) {\n\n\t// calculate total box area and maximum box width\n\tlet area = 0;\n\tlet maxWidth = 0;\n\t\n\tfor (const box of boxes) {\n\t\tarea += box.w * box.h;\n\t\tmaxWidth = Math.max(maxWidth, box.w);\n\t}\n\t\n\t// sort the boxes for insertion by height, descending\n\tboxes.sort((a, b) => b.h - a.h);\n\t\n\t// aim for a squarish resulting container,\n\t// slightly adjusted for sub-100% space utilization\n\tconst startWidth = Math.max(Math.ceil(Math.sqrt(area / 0.95)), maxWidth);\n\t\n\t// start with a single empty space, unbounded at the bottom\n\tconst spaces = [{x: 0, y: 0, w: startWidth, h: Infinity}];\n\t\n\tlet width = 0;\n\tlet height = 0;\n\t\n\tfor (const box of boxes) {\n\t\t// look through spaces backwards so that we check smaller spaces first\n\t\tfor (let i = spaces.length - 1; i >= 0; i--) {\n\t\t\tconst space = spaces[i];\n\t\t\t\n\t\t\t// look for empty spaces that can accommodate the current box\n\t\t\tif (box.w > space.w || box.h > space.h) continue;\n\t\t\t\n\t\t\t// found the space; add the box to its top-left corner\n\t\t\t// |-------|-------|\n\t\t\t// | box | |\n\t\t\t// |_______| |\n\t\t\t// | space |\n\t\t\t// |_______________|\n\t\t\tbox.x = space.x;\n\t\t\tbox.y = space.y;\n\t\t\t\n\t\t\theight = Math.max(height, box.y + box.h);\n\t\t\twidth = Math.max(width, box.x + box.w);\n\t\t\t\n\t\t\tif (box.w === space.w && box.h === space.h) {\n\t\t\t\t// space matches the box exactly; remove it\n\t\t\t\tconst last = spaces.pop();\n\t\t\t\tif (i < spaces.length) spaces[i] = last;\n\t\t\t\n\t\t\t} else if (box.h === space.h) {\n\t\t\t\t// space matches the box height; update it accordingly\n\t\t\t\t// |-------|---------------|\n\t\t\t\t// | box | updated space |\n\t\t\t\t// |_______|_______________|\n\t\t\t\tspace.x += box.w;\n\t\t\t\tspace.w -= box.w;\n\t\t\t\n\t\t\t} else if (box.w === space.w) {\n\t\t\t\t// space matches the box width; update it accordingly\n\t\t\t\t// |---------------|\n\t\t\t\t// | box |\n\t\t\t\t// |_______________|\n\t\t\t\t// | updated space |\n\t\t\t\t// |_______________|\n\t\t\t\tspace.y += box.h;\n\t\t\t\tspace.h -= box.h;\n\t\t\t\n\t\t\t} else {\n\t\t\t\t// otherwise the box splits the space into two spaces\n\t\t\t\t// |-------|-----------|\n\t\t\t\t// | box | new space |\n\t\t\t\t// |_______|___________|\n\t\t\t\t// | updated space |\n\t\t\t\t// |___________________|\n\t\t\t\tspaces.push({\n\t\t\t\t\tx: space.x + box.w,\n\t\t\t\t\ty: space.y,\n\t\t\t\t\tw: space.w - box.w,\n\t\t\t\t\th: box.h\n\t\t\t\t});\n\t\t\t\tspace.y += box.h;\n\t\t\t\tspace.h -= box.h;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\t\n\treturn {\n\t\tw: width, // container width\n\t\th: height, // container height\n\t\tfill: (area / (width * height)) || 0 // space utilization\n\t};\n}\n\nexport { potpack };", "import * as THREE from 'three';\nimport { potpack } from '../libs/potpack.module.js';\n\n/**\n * Progressive Light Map Accumulator, by [zalo](https://github.com/zalo/)\n *\n * To use, simply construct a `ProgressiveLightMap` object,\n * `plmap.addObjectsToLightMap(object)` an array of semi-static\n * objects and lights to the class once, and then call\n * `plmap.update(camera)` every frame to begin accumulating\n * lighting samples.\n *\n * This should begin accumulating lightmaps which apply to\n * your objects, so you can start jittering lighting to achieve\n * the texture-space effect you're looking for.\n *\n * @param {WebGLRenderer} renderer A WebGL Rendering Context\n * @param {number} res The side-long dimension of you total lightmap\n */\nclass ProgressiveLightMap {\n\n\tconstructor( renderer, res = 1024 ) {\n\n\t\tthis.renderer = renderer;\n\t\tthis.res = res;\n\t\tthis.lightMapContainers = [];\n\t\tthis.compiled = false;\n\t\tthis.scene = new THREE.Scene();\n\t\tthis.scene.background = null;\n\t\tthis.tinyTarget = new THREE.WebGLRenderTarget( 1, 1 );\n\t\tthis.buffer1Active = false;\n\t\tthis.firstUpdate = true;\n\t\tthis.warned = false;\n\n\t\t// Create the Progressive LightMap Texture\n\t\tconst format = /(Android|iPad|iPhone|iPod)/g.test( navigator.userAgent ) ? THREE.HalfFloatType : THREE.FloatType;\n\t\tthis.progressiveLightMap1 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } );\n\t\tthis.progressiveLightMap2 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } );\n\t\tthis.progressiveLightMap2.texture.channel = 1;\n\n\t\t// Inject some spicy new logic into a standard phong material\n\t\tthis.uvMat = new THREE.MeshPhongMaterial();\n\t\tthis.uvMat.uniforms = {};\n\t\tthis.uvMat.onBeforeCompile = ( shader ) => {\n\n\t\t\t// Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions\n\t\t\tshader.vertexShader =\n\t\t\t\t'attribute vec2 uv1;\\n' +\n\t\t\t\t'#define USE_LIGHTMAP\\n' +\n\t\t\t\t'#define LIGHTMAP_UV uv1\\n' +\n\t\t\t\tshader.vertexShader.slice( 0, - 1 ) +\n\t\t\t\t'\tgl_Position = vec4((LIGHTMAP_UV - 0.5) * 2.0, 1.0, 1.0); }';\n\n\t\t\t// Fragment Shader: Set Pixels to average in the Previous frame's Shadows\n\t\t\tconst bodyStart = shader.fragmentShader.indexOf( 'void main() {' );\n\t\t\tshader.fragmentShader =\n\t\t\t\t'#define USE_LIGHTMAP\\n' +\n\t\t\t\tshader.fragmentShader.slice( 0, bodyStart ) +\n\t\t\t\t'\tuniform sampler2D previousShadowMap;\\n\tuniform float averagingWindow;\\n' +\n\t\t\t\tshader.fragmentShader.slice( bodyStart - 1, - 1 ) +\n\t\t\t\t`\\nvec3 texelOld = texture2D(previousShadowMap, vLightMapUv).rgb;\n\t\t\t\tgl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);\n\t\t\t}`;\n\n\t\t\t// Set the Previous Frame's Texture Buffer and Averaging Window\n\t\t\tshader.uniforms.previousShadowMap = { value: this.progressiveLightMap1.texture };\n\t\t\tshader.uniforms.averagingWindow = { value: 100 };\n\n\t\t\tthis.uvMat.uniforms = shader.uniforms;\n\n\t\t\t// Set the new Shader to this\n\t\t\tthis.uvMat.userData.shader = shader;\n\n\t\t\tthis.compiled = true;\n\n\t\t};\n\n\t}\n\n\t/**\n\t * Sets these objects' materials' lightmaps and modifies their uv1's.\n\t * @param {Object3D} objects An array of objects and lights to set up your lightmap.\n\t */\n\taddObjectsToLightMap( objects ) {\n\n\t\t// Prepare list of UV bounding boxes for packing later...\n\t\tthis.uv_boxes = []; const padding = 3 / this.res;\n\n\t\tfor ( let ob = 0; ob < objects.length; ob ++ ) {\n\n\t\t\tconst object = objects[ ob ];\n\n\t\t\t// If this object is a light, simply add it to the internal scene\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tthis.scene.attach( object ); continue;\n\n\t\t\t}\n\n\t\t\tif ( ! object.geometry.hasAttribute( 'uv' ) ) {\n\n\t\t\t\tconsole.warn( 'All lightmap objects need UVs!' ); continue;\n\n\t\t\t}\n\n\t\t\tif ( this.blurringPlane == null ) {\n\n\t\t\t\tthis._initializeBlurPlane( this.res, this.progressiveLightMap1 );\n\n\t\t\t}\n\n\t\t\t// Apply the lightmap to the object\n\t\t\tobject.material.lightMap = this.progressiveLightMap2.texture;\n\t\t\tobject.material.dithering = true;\n\t\t\tobject.castShadow = true;\n\t\t\tobject.receiveShadow = true;\n\t\t\tobject.renderOrder = 1000 + ob;\n\n\t\t\t// Prepare UV boxes for potpack\n\t\t\t// TODO: Size these by object surface area\n\t\t\tthis.uv_boxes.push( { w: 1 + ( padding * 2 ),\n\t\t\t\t\t\t\t\t h: 1 + ( padding * 2 ), index: ob } );\n\n\t\t\tthis.lightMapContainers.push( { basicMat: object.material, object: object } );\n\n\t\t\tthis.compiled = false;\n\n\t\t}\n\n\t\t// Pack the objects' lightmap UVs into the same global space\n\t\tconst dimensions = potpack( this.uv_boxes );\n\t\tthis.uv_boxes.forEach( ( box ) => {\n\n\t\t\tconst uv1 = objects[ box.index ].geometry.getAttribute( 'uv' ).clone();\n\t\t\tfor ( let i = 0; i < uv1.array.length; i += uv1.itemSize ) {\n\n\t\t\t\tuv1.array[ i ] = ( uv1.array[ i ] + box.x + padding ) / dimensions.w;\n\t\t\t\tuv1.array[ i + 1 ] = ( uv1.array[ i + 1 ] + box.y + padding ) / dimensions.h;\n\n\t\t\t}\n\n\t\t\tobjects[ box.index ].geometry.setAttribute( 'uv1', uv1 );\n\t\t\tobjects[ box.index ].geometry.getAttribute( 'uv1' ).needsUpdate = true;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * This function renders each mesh one at a time into their respective surface maps\n\t * @param {Camera} camera Standard Rendering Camera\n\t * @param {number} blendWindow When >1, samples will accumulate over time.\n\t * @param {boolean} blurEdges Whether to fix UV Edges via blurring\n\t */\n\tupdate( camera, blendWindow = 100, blurEdges = true ) {\n\n\t\tif ( this.blurringPlane == null ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Store the original Render Target\n\t\tconst oldTarget = this.renderer.getRenderTarget();\n\n\t\t// The blurring plane applies blur to the seams of the lightmap\n\t\tthis.blurringPlane.visible = blurEdges;\n\n\t\t// Steal the Object3D from the real world to our special dimension\n\t\tfor ( let l = 0; l < this.lightMapContainers.length; l ++ ) {\n\n\t\t\tthis.lightMapContainers[ l ].object.oldScene =\n\t\t\t\tthis.lightMapContainers[ l ].object.parent;\n\t\t\tthis.scene.attach( this.lightMapContainers[ l ].object );\n\n\t\t}\n\n\t\t// Render once normally to initialize everything\n\t\tif ( this.firstUpdate ) {\n\n\t\t\tthis.renderer.setRenderTarget( this.tinyTarget ); // Tiny for Speed\n\t\t\tthis.renderer.render( this.scene, camera );\n\t\t\tthis.firstUpdate = false;\n\n\t\t}\n\n\t\t// Set each object's material to the UV Unwrapped Surface Mapping Version\n\t\tfor ( let l = 0; l < this.lightMapContainers.length; l ++ ) {\n\n\t\t\tthis.uvMat.uniforms.averagingWindow = { value: blendWindow };\n\t\t\tthis.lightMapContainers[ l ].object.material = this.uvMat;\n\t\t\tthis.lightMapContainers[ l ].object.oldFrustumCulled =\n\t\t\t\tthis.lightMapContainers[ l ].object.frustumCulled;\n\t\t\tthis.lightMapContainers[ l ].object.frustumCulled = false;\n\n\t\t}\n\n\t\t// Ping-pong two surface buffers for reading/writing\n\t\tconst activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;\n\t\tconst inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1;\n\n\t\t// Render the object's surface maps\n\t\tthis.renderer.setRenderTarget( activeMap );\n\t\tthis.uvMat.uniforms.previousShadowMap = { value: inactiveMap.texture };\n\t\tthis.blurringPlane.material.uniforms.previousShadowMap = { value: inactiveMap.texture };\n\t\tthis.buffer1Active = ! this.buffer1Active;\n\t\tthis.renderer.render( this.scene, camera );\n\n\t\t// Restore the object's Real-time Material and add it back to the original world\n\t\tfor ( let l = 0; l < this.lightMapContainers.length; l ++ ) {\n\n\t\t\tthis.lightMapContainers[ l ].object.frustumCulled =\n\t\t\t\tthis.lightMapContainers[ l ].object.oldFrustumCulled;\n\t\t\tthis.lightMapContainers[ l ].object.material = this.lightMapContainers[ l ].basicMat;\n\t\t\tthis.lightMapContainers[ l ].object.oldScene.attach( this.lightMapContainers[ l ].object );\n\n\t\t}\n\n\t\t// Restore the original Render Target\n\t\tthis.renderer.setRenderTarget( oldTarget );\n\n\t}\n\n\t/** DEBUG\n\t * Draw the lightmap in the main scene. Call this after adding the objects to it.\n\t * @param {boolean} visible Whether the debug plane should be visible\n\t * @param {Vector3} position Where the debug plane should be drawn\n\t*/\n\tshowDebugLightmap( visible, position = undefined ) {\n\n\t\tif ( this.lightMapContainers.length == 0 ) {\n\n\t\t\tif ( ! this.warned ) {\n\n\t\t\t\tconsole.warn( 'Call this after adding the objects!' ); this.warned = true;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.labelMesh == null ) {\n\n\t\t\tthis.labelMaterial = new THREE.MeshBasicMaterial(\n\t\t\t\t{ map: this.progressiveLightMap1.texture, side: THREE.DoubleSide } );\n\t\t\tthis.labelPlane = new THREE.PlaneGeometry( 100, 100 );\n\t\t\tthis.labelMesh = new THREE.Mesh( this.labelPlane, this.labelMaterial );\n\t\t\tthis.labelMesh.position.y = 250;\n\t\t\tthis.lightMapContainers[ 0 ].object.parent.add( this.labelMesh );\n\n\t\t}\n\n\t\tif ( position != undefined ) {\n\n\t\t\tthis.labelMesh.position.copy( position );\n\n\t\t}\n\n\t\tthis.labelMesh.visible = visible;\n\n\t}\n\n\t/**\n\t * INTERNAL Creates the Blurring Plane\n\t * @param {number} res The square resolution of this object's lightMap.\n\t * @param {WebGLRenderTexture} lightMap The lightmap to initialize the plane with.\n\t */\n\t_initializeBlurPlane( res, lightMap = null ) {\n\n\t\tconst blurMaterial = new THREE.MeshBasicMaterial();\n\t\tblurMaterial.uniforms = { previousShadowMap: { value: null },\n\t\t\t\t\t\t\t\t pixelOffset: { value: 1.0 / res },\n\t\t\t\t\t\t\t\t polygonOffset: true, polygonOffsetFactor: - 1, polygonOffsetUnits: 3.0 };\n\t\tblurMaterial.onBeforeCompile = ( shader ) => {\n\n\t\t\t// Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions\n\t\t\tshader.vertexShader =\n\t\t\t\t'#define USE_UV\\n' +\n\t\t\t\tshader.vertexShader.slice( 0, - 1 ) +\n\t\t\t\t'\tgl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }';\n\n\t\t\t// Fragment Shader: Set Pixels to 9-tap box blur the current frame's Shadows\n\t\t\tconst bodyStart\t= shader.fragmentShader.indexOf( 'void main() {' );\n\t\t\tshader.fragmentShader =\n\t\t\t\t'#define USE_UV\\n' +\n\t\t\t\tshader.fragmentShader.slice( 0, bodyStart ) +\n\t\t\t\t'\tuniform sampler2D previousShadowMap;\\n\tuniform float pixelOffset;\\n' +\n\t\t\t\tshader.fragmentShader.slice( bodyStart - 1, - 1 ) +\n\t\t\t\t\t`\tgl_FragColor.rgb = (\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, 0.0 )).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( 0.0 , pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( 0.0 , -pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, 0.0 )).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, -pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, -pixelOffset)).rgb)/8.0;\n\t\t\t\t}`;\n\n\t\t\t// Set the LightMap Accumulation Buffer\n\t\t\tshader.uniforms.previousShadowMap = { value: lightMap.texture };\n\t\t\tshader.uniforms.pixelOffset = { value: 0.5 / res };\n\t\t\tblurMaterial.uniforms = shader.uniforms;\n\n\t\t\t// Set the new Shader to this\n\t\t\tblurMaterial.userData.shader = shader;\n\n\t\t\tthis.compiled = true;\n\n\t\t};\n\n\t\tthis.blurringPlane = new THREE.Mesh( new THREE.PlaneGeometry( 1, 1 ), blurMaterial );\n\t\tthis.blurringPlane.name = 'Blurring Plane';\n\t\tthis.blurringPlane.frustumCulled = false;\n\t\tthis.blurringPlane.renderOrder = 0;\n\t\tthis.blurringPlane.material.depthWrite = false;\n\t\tthis.scene.add( this.blurringPlane );\n\n\t}\n\n}\n\nexport { ProgressiveLightMap };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tQuaternion,\n\tRaycaster,\n\tSRGBColorSpace,\n\tVector3\n} from 'three';\n\nclass RollerCoasterGeometry extends BufferGeometry {\n\n\tconstructor( curve, divisions ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = [ 1, 1, 1 ];\n\t\tconst color2 = [ 1, 1, 0 ];\n\n\t\tconst up = new Vector3( 0, 1, 0 );\n\t\tconst forward = new Vector3();\n\t\tconst right = new Vector3();\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst prevQuaternion = new Quaternion();\n\t\tprevQuaternion.setFromAxisAngle( up, Math.PI / 2 );\n\n\t\tconst point = new Vector3();\n\t\tconst prevPoint = new Vector3();\n\t\tprevPoint.copy( curve.getPointAt( 0 ) );\n\n\t\t// shapes\n\n\t\tconst step = [\n\t\t\tnew Vector3( - 0.225, 0, 0 ),\n\t\t\tnew Vector3( 0, - 0.050, 0 ),\n\t\t\tnew Vector3( 0, - 0.175, 0 ),\n\n\t\t\tnew Vector3( 0, - 0.050, 0 ),\n\t\t\tnew Vector3( 0.225, 0, 0 ),\n\t\t\tnew Vector3( 0, - 0.175, 0 )\n\t\t];\n\n\t\tconst PI2 = Math.PI * 2;\n\n\t\tlet sides = 5;\n\t\tconst tube1 = [];\n\n\t\tfor ( let i = 0; i < sides; i ++ ) {\n\n\t\t\tconst angle = ( i / sides ) * PI2;\n\t\t\ttube1.push( new Vector3( Math.sin( angle ) * 0.06, Math.cos( angle ) * 0.06, 0 ) );\n\n\t\t}\n\n\t\tsides = 6;\n\t\tconst tube2 = [];\n\n\t\tfor ( let i = 0; i < sides; i ++ ) {\n\n\t\t\tconst angle = ( i / sides ) * PI2;\n\t\t\ttube2.push( new Vector3( Math.sin( angle ) * 0.025, Math.cos( angle ) * 0.025, 0 ) );\n\n\t\t}\n\n\t\tconst vector = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tfunction drawShape( shape, color ) {\n\n\t\t\tnormal.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\tfor ( let j = 0; j < shape.length; j ++ ) {\n\n\t\t\t\tvector.copy( shape[ j ] );\n\t\t\t\tvector.applyQuaternion( quaternion );\n\t\t\t\tvector.add( point );\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t}\n\n\t\t\tnormal.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t\tfor ( let j = shape.length - 1; j >= 0; j -- ) {\n\n\t\t\t\tvector.copy( shape[ j ] );\n\t\t\t\tvector.applyQuaternion( quaternion );\n\t\t\t\tvector.add( point );\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\tconst normal1 = new Vector3();\n\t\tconst normal2 = new Vector3();\n\t\tconst normal3 = new Vector3();\n\t\tconst normal4 = new Vector3();\n\n\t\tfunction extrudeShape( shape, offset, color ) {\n\n\t\t\tfor ( let j = 0, jl = shape.length; j < jl; j ++ ) {\n\n\t\t\t\tconst point1 = shape[ j ];\n\t\t\t\tconst point2 = shape[ ( j + 1 ) % jl ];\n\n\t\t\t\tvector1.copy( point1 ).add( offset );\n\t\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\t\tvector1.add( point );\n\n\t\t\t\tvector2.copy( point2 ).add( offset );\n\t\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\t\tvector2.add( point );\n\n\t\t\t\tvector3.copy( point2 ).add( offset );\n\t\t\t\tvector3.applyQuaternion( prevQuaternion );\n\t\t\t\tvector3.add( prevPoint );\n\n\t\t\t\tvector4.copy( point1 ).add( offset );\n\t\t\t\tvector4.applyQuaternion( prevQuaternion );\n\t\t\t\tvector4.add( prevPoint );\n\n\t\t\t\tvertices.push( vector1.x, vector1.y, vector1.z );\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector3.x, vector3.y, vector3.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\t//\n\n\t\t\t\tnormal1.copy( point1 );\n\t\t\t\tnormal1.applyQuaternion( quaternion );\n\t\t\t\tnormal1.normalize();\n\n\t\t\t\tnormal2.copy( point2 );\n\t\t\t\tnormal2.applyQuaternion( quaternion );\n\t\t\t\tnormal2.normalize();\n\n\t\t\t\tnormal3.copy( point2 );\n\t\t\t\tnormal3.applyQuaternion( prevQuaternion );\n\t\t\t\tnormal3.normalize();\n\n\t\t\t\tnormal4.copy( point1 );\n\t\t\t\tnormal4.applyQuaternion( prevQuaternion );\n\t\t\t\tnormal4.normalize();\n\n\t\t\t\tnormals.push( normal1.x, normal1.y, normal1.z );\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal3.x, normal3.y, normal3.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst offset = new Vector3();\n\n\t\tfor ( let i = 1; i <= divisions; i ++ ) {\n\n\t\t\tpoint.copy( curve.getPointAt( i / divisions ) );\n\n\t\t\tup.set( 0, 1, 0 );\n\n\t\t\tforward.subVectors( point, prevPoint ).normalize();\n\t\t\tright.crossVectors( up, forward ).normalize();\n\t\t\tup.crossVectors( forward, right );\n\n\t\t\tconst angle = Math.atan2( forward.x, forward.z );\n\n\t\t\tquaternion.setFromAxisAngle( up, angle );\n\n\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\tdrawShape( step, color2 );\n\n\t\t\t}\n\n\t\t\textrudeShape( tube1, offset.set( 0, - 0.125, 0 ), color2 );\n\t\t\textrudeShape( tube2, offset.set( 0.2, 0, 0 ), color1 );\n\t\t\textrudeShape( tube2, offset.set( - 0.2, 0, 0 ), color1 );\n\n\t\t\tprevPoint.copy( point );\n\t\t\tprevQuaternion.copy( quaternion );\n\n\t\t}\n\n\t\t// console.log( vertices.length );\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'normal', new BufferAttribute( new Float32Array( normals ), 3 ) );\n\t\tthis.setAttribute( 'color', new BufferAttribute( new Float32Array( colors ), 3 ) );\n\n\t}\n\n}\n\nclass RollerCoasterLiftersGeometry extends BufferGeometry {\n\n\tconstructor( curve, divisions ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\n\t\tconst quaternion = new Quaternion();\n\n\t\tconst up = new Vector3( 0, 1, 0 );\n\n\t\tconst point = new Vector3();\n\t\tconst tangent = new Vector3();\n\n\t\t// shapes\n\n\t\tconst tube1 = [\n\t\t\tnew Vector3( 0, 0.05, - 0.05 ),\n\t\t\tnew Vector3( 0, 0.05, 0.05 ),\n\t\t\tnew Vector3( 0, - 0.05, 0 )\n\t\t];\n\n\t\tconst tube2 = [\n\t\t\tnew Vector3( - 0.05, 0, 0.05 ),\n\t\t\tnew Vector3( - 0.05, 0, - 0.05 ),\n\t\t\tnew Vector3( 0.05, 0, 0 )\n\t\t];\n\n\t\tconst tube3 = [\n\t\t\tnew Vector3( 0.05, 0, - 0.05 ),\n\t\t\tnew Vector3( 0.05, 0, 0.05 ),\n\t\t\tnew Vector3( - 0.05, 0, 0 )\n\t\t];\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\tconst normal1 = new Vector3();\n\t\tconst normal2 = new Vector3();\n\t\tconst normal3 = new Vector3();\n\t\tconst normal4 = new Vector3();\n\n\t\tfunction extrudeShape( shape, fromPoint, toPoint ) {\n\n\t\t\tfor ( let j = 0, jl = shape.length; j < jl; j ++ ) {\n\n\t\t\t\tconst point1 = shape[ j ];\n\t\t\t\tconst point2 = shape[ ( j + 1 ) % jl ];\n\n\t\t\t\tvector1.copy( point1 );\n\t\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\t\tvector1.add( fromPoint );\n\n\t\t\t\tvector2.copy( point2 );\n\t\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\t\tvector2.add( fromPoint );\n\n\t\t\t\tvector3.copy( point2 );\n\t\t\t\tvector3.applyQuaternion( quaternion );\n\t\t\t\tvector3.add( toPoint );\n\n\t\t\t\tvector4.copy( point1 );\n\t\t\t\tvector4.applyQuaternion( quaternion );\n\t\t\t\tvector4.add( toPoint );\n\n\t\t\t\tvertices.push( vector1.x, vector1.y, vector1.z );\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector3.x, vector3.y, vector3.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\t//\n\n\t\t\t\tnormal1.copy( point1 );\n\t\t\t\tnormal1.applyQuaternion( quaternion );\n\t\t\t\tnormal1.normalize();\n\n\t\t\t\tnormal2.copy( point2 );\n\t\t\t\tnormal2.applyQuaternion( quaternion );\n\t\t\t\tnormal2.normalize();\n\n\t\t\t\tnormal3.copy( point2 );\n\t\t\t\tnormal3.applyQuaternion( quaternion );\n\t\t\t\tnormal3.normalize();\n\n\t\t\t\tnormal4.copy( point1 );\n\t\t\t\tnormal4.applyQuaternion( quaternion );\n\t\t\t\tnormal4.normalize();\n\n\t\t\t\tnormals.push( normal1.x, normal1.y, normal1.z );\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal3.x, normal3.y, normal3.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst fromPoint = new Vector3();\n\t\tconst toPoint = new Vector3();\n\n\t\tfor ( let i = 1; i <= divisions; i ++ ) {\n\n\t\t\tpoint.copy( curve.getPointAt( i / divisions ) );\n\t\t\ttangent.copy( curve.getTangentAt( i / divisions ) );\n\n\t\t\tconst angle = Math.atan2( tangent.x, tangent.z );\n\n\t\t\tquaternion.setFromAxisAngle( up, angle );\n\n\t\t\t//\n\n\t\t\tif ( point.y > 10 ) {\n\n\t\t\t\tfromPoint.set( - 0.75, - 0.35, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( 0.75, - 0.35, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube1, fromPoint, toPoint );\n\n\t\t\t\tfromPoint.set( - 0.7, - 0.3, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( - 0.7, - point.y, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube2, fromPoint, toPoint );\n\n\t\t\t\tfromPoint.set( 0.7, - 0.3, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( 0.7, - point.y, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube3, fromPoint, toPoint );\n\n\t\t\t} else {\n\n\t\t\t\tfromPoint.set( 0, - 0.2, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( 0, - point.y, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube3, fromPoint, toPoint );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'normal', new BufferAttribute( new Float32Array( normals ), 3 ) );\n\n\t}\n\n}\n\nclass RollerCoasterShadowGeometry extends BufferGeometry {\n\n\tconstructor( curve, divisions ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\n\t\tconst up = new Vector3( 0, 1, 0 );\n\t\tconst forward = new Vector3();\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst prevQuaternion = new Quaternion();\n\t\tprevQuaternion.setFromAxisAngle( up, Math.PI / 2 );\n\n\t\tconst point = new Vector3();\n\n\t\tconst prevPoint = new Vector3();\n\t\tprevPoint.copy( curve.getPointAt( 0 ) );\n\t\tprevPoint.y = 0;\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\tfor ( let i = 1; i <= divisions; i ++ ) {\n\n\t\t\tpoint.copy( curve.getPointAt( i / divisions ) );\n\t\t\tpoint.y = 0;\n\n\t\t\tforward.subVectors( point, prevPoint );\n\n\t\t\tconst angle = Math.atan2( forward.x, forward.z );\n\n\t\t\tquaternion.setFromAxisAngle( up, angle );\n\n\t\t\tvector1.set( - 0.3, 0, 0 );\n\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\tvector1.add( point );\n\n\t\t\tvector2.set( 0.3, 0, 0 );\n\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\tvector2.add( point );\n\n\t\t\tvector3.set( 0.3, 0, 0 );\n\t\t\tvector3.applyQuaternion( prevQuaternion );\n\t\t\tvector3.add( prevPoint );\n\n\t\t\tvector4.set( - 0.3, 0, 0 );\n\t\t\tvector4.applyQuaternion( prevQuaternion );\n\t\t\tvector4.add( prevPoint );\n\n\t\t\tvertices.push( vector1.x, vector1.y, vector1.z );\n\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\tvertices.push( vector3.x, vector3.y, vector3.z );\n\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\tprevPoint.copy( point );\n\t\t\tprevQuaternion.copy( quaternion );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\n\t}\n\n}\n\nclass SkyGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < 100; i ++ ) {\n\n\t\t\tconst x = Math.random() * 800 - 400;\n\t\t\tconst y = Math.random() * 50 + 50;\n\t\t\tconst z = Math.random() * 800 - 400;\n\n\t\t\tconst size = Math.random() * 40 + 20;\n\n\t\t\tvertices.push( x - size, y, z - size );\n\t\t\tvertices.push( x + size, y, z - size );\n\t\t\tvertices.push( x - size, y, z + size );\n\n\t\t\tvertices.push( x + size, y, z - size );\n\t\t\tvertices.push( x + size, y, z + size );\n\t\t\tvertices.push( x - size, y, z + size );\n\n\t\t}\n\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\n\t}\n\n}\n\nclass TreesGeometry extends BufferGeometry {\n\n\tconstructor( landscape ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst raycaster = new Raycaster();\n\t\traycaster.ray.direction.set( 0, - 1, 0 );\n\n\t\tconst _color = new Color();\n\n\t\tfor ( let i = 0; i < 2000; i ++ ) {\n\n\t\t\tconst x = Math.random() * 500 - 250;\n\t\t\tconst z = Math.random() * 500 - 250;\n\n\t\t\traycaster.ray.origin.set( x, 50, z );\n\n\t\t\tconst intersections = raycaster.intersectObject( landscape );\n\n\t\t\tif ( intersections.length === 0 ) continue;\n\n\t\t\tconst y = intersections[ 0 ].point.y;\n\n\t\t\tconst height = Math.random() * 5 + 0.5;\n\n\t\t\tlet angle = Math.random() * Math.PI * 2;\n\n\t\t\tvertices.push( x + Math.sin( angle ), y, z + Math.cos( angle ) );\n\t\t\tvertices.push( x, y + height, z );\n\t\t\tvertices.push( x + Math.sin( angle + Math.PI ), y, z + Math.cos( angle + Math.PI ) );\n\n\t\t\tangle += Math.PI / 2;\n\n\t\t\tvertices.push( x + Math.sin( angle ), y, z + Math.cos( angle ) );\n\t\t\tvertices.push( x, y + height, z );\n\t\t\tvertices.push( x + Math.sin( angle + Math.PI ), y, z + Math.cos( angle + Math.PI ) );\n\n\t\t\tconst random = Math.random() * 0.1;\n\n\t\t\tfor ( let j = 0; j < 6; j ++ ) {\n\n\t\t\t\t_color.setRGB( 0.2 + random, 0.4 + random, 0, SRGBColorSpace );\n\n\t\t\t\tcolors.push( _color.r, _color.g, _color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'color', new BufferAttribute( new Float32Array( colors ), 3 ) );\n\n\t}\n\n}\n\nexport { RollerCoasterGeometry, RollerCoasterLiftersGeometry, RollerCoasterShadowGeometry, SkyGeometry, TreesGeometry };\n", "class Timer {\n\n\tconstructor() {\n\n\t\tthis._previousTime = 0;\n\t\tthis._currentTime = 0;\n\t\tthis._startTime = now();\n\n\t\tthis._delta = 0;\n\t\tthis._elapsed = 0;\n\n\t\tthis._timescale = 1;\n\n\t\t// use Page Visibility API to avoid large time delta values\n\n\t\tthis._usePageVisibilityAPI = ( typeof document !== 'undefined' && document.hidden !== undefined );\n\n\t\tif ( this._usePageVisibilityAPI === true ) {\n\n\t\t\tthis._pageVisibilityHandler = handleVisibilityChange.bind( this );\n\n\t\t\tdocument.addEventListener( 'visibilitychange', this._pageVisibilityHandler, false );\n\n\t\t}\n\n\t}\n\n\tgetDelta() {\n\n\t\treturn this._delta / 1000;\n\n\t}\n\n\tgetElapsed() {\n\n\t\treturn this._elapsed / 1000;\n\n\t}\n\n\tgetTimescale() {\n\n\t\treturn this._timescale;\n\n\t}\n\n\tsetTimescale( timescale ) {\n\n\t\tthis._timescale = timescale;\n\n\t\treturn this;\n\n\t}\n\n\treset() {\n\n\t\tthis._currentTime = now() - this._startTime;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this._usePageVisibilityAPI === true ) {\n\n\t\t\tdocument.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( timestamp ) {\n\n\n\t\tif ( this._usePageVisibilityAPI === true && document.hidden === true ) {\n\n\t\t\tthis._delta = 0;\n\n\t\t} else {\n\n\t\t\tthis._previousTime = this._currentTime;\n\t\t\tthis._currentTime = ( timestamp !== undefined ? timestamp : now() ) - this._startTime;\n\n\t\t\tthis._delta = ( this._currentTime - this._previousTime ) * this._timescale;\n\t\t\tthis._elapsed += this._delta; // _elapsed is the accumulation of all previous deltas\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass FixedTimer extends Timer {\n\n\tconstructor( fps = 60 ) {\n\n\t\tsuper();\n\t\tthis._delta = ( 1 / fps ) * 1000;\n\n\t}\n\n\tupdate() {\n\n\t\tthis._elapsed += ( this._delta * this._timescale ); // _elapsed is the accumulation of all previous deltas\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now();\n\n}\n\nfunction handleVisibilityChange() {\n\n\tif ( document.hidden === false ) this.reset();\n\n}\n\nexport { Timer, FixedTimer };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tDynamicDrawUsage,\n\tMatrix4,\n\tMesh,\n\tMeshStandardMaterial,\n\tVector3\n} from 'three';\n\nfunction TubePainter() {\n\n\tconst BUFFER_SIZE = 1000000 * 3;\n\n\tconst positions = new BufferAttribute( new Float32Array( BUFFER_SIZE ), 3 );\n\tpositions.usage = DynamicDrawUsage;\n\n\tconst normals = new BufferAttribute( new Float32Array( BUFFER_SIZE ), 3 );\n\tnormals.usage = DynamicDrawUsage;\n\n\tconst colors = new BufferAttribute( new Float32Array( BUFFER_SIZE ), 3 );\n\tcolors.usage = DynamicDrawUsage;\n\n\tconst geometry = new BufferGeometry();\n\tgeometry.setAttribute( 'position', positions );\n\tgeometry.setAttribute( 'normal', normals );\n\tgeometry.setAttribute( 'color', colors );\n\tgeometry.drawRange.count = 0;\n\n\tconst material = new MeshStandardMaterial( {\n\t\tvertexColors: true\n\t} );\n\n\tconst mesh = new Mesh( geometry, material );\n\tmesh.frustumCulled = false;\n\n\t//\n\n\tfunction getPoints( size ) {\n\n\t\tconst PI2 = Math.PI * 2;\n\n\t\tconst sides = 10;\n\t\tconst array = [];\n\t\tconst radius = 0.01 * size;\n\n\t\tfor ( let i = 0; i < sides; i ++ ) {\n\n\t\t\tconst angle = ( i / sides ) * PI2;\n\t\t\tarray.push( new Vector3( Math.sin( angle ) * radius, Math.cos( angle ) * radius, 0 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t//\n\n\tconst vector1 = new Vector3();\n\tconst vector2 = new Vector3();\n\tconst vector3 = new Vector3();\n\tconst vector4 = new Vector3();\n\n\tconst color = new Color( 0xffffff );\n\tlet size = 1;\n\n\tfunction stroke( position1, position2, matrix1, matrix2 ) {\n\n\t\tif ( position1.distanceToSquared( position2 ) === 0 ) return;\n\n\t\tlet count = geometry.drawRange.count;\n\n\t\tconst points = getPoints( size );\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tconst vertex1 = points[ i ];\n\t\t\tconst vertex2 = points[ ( i + 1 ) % il ];\n\n\t\t\t// positions\n\n\t\t\tvector1.copy( vertex1 ).applyMatrix4( matrix2 ).add( position2 );\n\t\t\tvector2.copy( vertex2 ).applyMatrix4( matrix2 ).add( position2 );\n\t\t\tvector3.copy( vertex2 ).applyMatrix4( matrix1 ).add( position1 );\n\t\t\tvector4.copy( vertex1 ).applyMatrix4( matrix1 ).add( position1 );\n\n\t\t\tvector1.toArray( positions.array, ( count + 0 ) * 3 );\n\t\t\tvector2.toArray( positions.array, ( count + 1 ) * 3 );\n\t\t\tvector4.toArray( positions.array, ( count + 2 ) * 3 );\n\n\t\t\tvector2.toArray( positions.array, ( count + 3 ) * 3 );\n\t\t\tvector3.toArray( positions.array, ( count + 4 ) * 3 );\n\t\t\tvector4.toArray( positions.array, ( count + 5 ) * 3 );\n\n\t\t\t// normals\n\n\t\t\tvector1.copy( vertex1 ).applyMatrix4( matrix2 ).normalize();\n\t\t\tvector2.copy( vertex2 ).applyMatrix4( matrix2 ).normalize();\n\t\t\tvector3.copy( vertex2 ).applyMatrix4( matrix1 ).normalize();\n\t\t\tvector4.copy( vertex1 ).applyMatrix4( matrix1 ).normalize();\n\n\t\t\tvector1.toArray( normals.array, ( count + 0 ) * 3 );\n\t\t\tvector2.toArray( normals.array, ( count + 1 ) * 3 );\n\t\t\tvector4.toArray( normals.array, ( count + 2 ) * 3 );\n\n\t\t\tvector2.toArray( normals.array, ( count + 3 ) * 3 );\n\t\t\tvector3.toArray( normals.array, ( count + 4 ) * 3 );\n\t\t\tvector4.toArray( normals.array, ( count + 5 ) * 3 );\n\n\t\t\t// colors\n\n\t\t\tcolor.toArray( colors.array, ( count + 0 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 1 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 2 ) * 3 );\n\n\t\t\tcolor.toArray( colors.array, ( count + 3 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 4 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 5 ) * 3 );\n\n\t\t\tcount += 6;\n\n\t\t}\n\n\t\tgeometry.drawRange.count = count;\n\n\t}\n\n\t//\n\n\tconst up = new Vector3( 0, 1, 0 );\n\n\tconst point1 = new Vector3();\n\tconst point2 = new Vector3();\n\n\tconst matrix1 = new Matrix4();\n\tconst matrix2 = new Matrix4();\n\n\tfunction moveTo( position ) {\n\n\t\tpoint1.copy( position );\n\t\tmatrix1.lookAt( point2, point1, up );\n\n\t\tpoint2.copy( position );\n\t\tmatrix2.copy( matrix1 );\n\n\t}\n\n\tfunction lineTo( position ) {\n\n\t\tpoint1.copy( position );\n\t\tmatrix1.lookAt( point2, point1, up );\n\n\t\tstroke( point1, point2, matrix1, matrix2 );\n\n\t\tpoint2.copy( point1 );\n\t\tmatrix2.copy( matrix1 );\n\n\t}\n\n\tfunction setSize( value ) {\n\n\t\tsize = value;\n\n\t}\n\n\t//\n\n\tlet count = 0;\n\n\tfunction update() {\n\n\t\tconst start = count;\n\t\tconst end = geometry.drawRange.count;\n\n\t\tif ( start === end ) return;\n\n\t\tpositions.addUpdateRange( start * 3, ( end - start ) * 3 );\n\t\tpositions.needsUpdate = true;\n\n\t\tnormals.addUpdateRange( start * 3, ( end - start ) * 3 );\n\t\tnormals.needsUpdate = true;\n\n\t\tcolors.addUpdateRange( start * 3, ( end - start ) * 3 );\n\t\tcolors.needsUpdate = true;\n\n\t\tcount = geometry.drawRange.count;\n\n\t}\n\n\treturn {\n\t\tmesh: mesh,\n\t\tmoveTo: moveTo,\n\t\tlineTo: lineTo,\n\t\tsetSize: setSize,\n\t\tupdate: update\n\t};\n\n}\n\nexport { TubePainter };\n", "// Original src: https://github.com/zz85/threejs-path-flow\nconst CHANNELS = 4;\nconst TEXTURE_WIDTH = 1024;\nconst TEXTURE_HEIGHT = 4;\n\nimport {\n\tDataTexture,\n\tDataUtils,\n\tRGBAFormat,\n\tHalfFloatType,\n\tRepeatWrapping,\n\tMesh,\n\tInstancedMesh,\n\tLinearFilter,\n\tDynamicDrawUsage,\n\tMatrix4\n} from 'three';\n\n/**\n * Make a new DataTexture to store the descriptions of the curves.\n *\n * @param { number } numberOfCurves the number of curves needed to be described by this texture.\n */\nexport function initSplineTexture( numberOfCurves = 1 ) {\n\n\tconst dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );\n\tconst dataTexture = new DataTexture(\n\t\tdataArray,\n\t\tTEXTURE_WIDTH,\n\t\tTEXTURE_HEIGHT * numberOfCurves,\n\t\tRGBAFormat,\n\t\tHalfFloatType\n\t);\n\n\tdataTexture.wrapS = RepeatWrapping;\n\tdataTexture.wrapY = RepeatWrapping;\n\tdataTexture.magFilter = LinearFilter;\n\tdataTexture.minFilter = LinearFilter;\n\tdataTexture.needsUpdate = true;\n\n\treturn dataTexture;\n\n}\n\n/**\n * Write the curve description to the data texture\n *\n * @param { DataTexture } texture The DataTexture to write to\n * @param { Curve } splineCurve The curve to describe\n * @param { number } offset Which curve slot to write to\n */\nexport function updateSplineTexture( texture, splineCurve, offset = 0 ) {\n\n\tconst numberOfPoints = Math.floor( TEXTURE_WIDTH * ( TEXTURE_HEIGHT / 4 ) );\n\tsplineCurve.arcLengthDivisions = numberOfPoints / 2;\n\tsplineCurve.updateArcLengths();\n\tconst points = splineCurve.getSpacedPoints( numberOfPoints );\n\tconst frenetFrames = splineCurve.computeFrenetFrames( numberOfPoints, true );\n\n\tfor ( let i = 0; i < numberOfPoints; i ++ ) {\n\n\t\tconst rowOffset = Math.floor( i / TEXTURE_WIDTH );\n\t\tconst rowIndex = i % TEXTURE_WIDTH;\n\n\t\tlet pt = points[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\t\tpt = frenetFrames.tangents[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\t\tpt = frenetFrames.normals[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\t\tpt = frenetFrames.binormals[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\n\t}\n\n\ttexture.needsUpdate = true;\n\n}\n\n\nfunction setTextureValue( texture, index, x, y, z, o ) {\n\n\tconst image = texture.image;\n\tconst { data } = image;\n\tconst i = CHANNELS * TEXTURE_WIDTH * o; // Row Offset\n\tdata[ index * CHANNELS + i + 0 ] = DataUtils.toHalfFloat( x );\n\tdata[ index * CHANNELS + i + 1 ] = DataUtils.toHalfFloat( y );\n\tdata[ index * CHANNELS + i + 2 ] = DataUtils.toHalfFloat( z );\n\tdata[ index * CHANNELS + i + 3 ] = DataUtils.toHalfFloat( 1 );\n\n}\n\n/**\n * Create a new set of uniforms for describing the curve modifier\n *\n * @param { DataTexture } Texture which holds the curve description\n */\nexport function getUniforms( splineTexture ) {\n\n\tconst uniforms = {\n\t\tspineTexture: { value: splineTexture },\n\t\tpathOffset: { type: 'f', value: 0 }, // time of path curve\n\t\tpathSegment: { type: 'f', value: 1 }, // fractional length of path\n\t\tspineOffset: { type: 'f', value: 161 },\n\t\tspineLength: { type: 'f', value: 400 },\n\t\tflow: { type: 'i', value: 1 },\n\t};\n\treturn uniforms;\n\n}\n\nexport function modifyShader( material, uniforms, numberOfCurves = 1 ) {\n\n\tif ( material.__ok ) return;\n\tmaterial.__ok = true;\n\n\tmaterial.onBeforeCompile = ( shader ) => {\n\n\t\tif ( shader.__modified ) return;\n\t\tshader.__modified = true;\n\n\t\tObject.assign( shader.uniforms, uniforms );\n\n\t\tconst vertexShader = `\n\t\tuniform sampler2D spineTexture;\n\t\tuniform float pathOffset;\n\t\tuniform float pathSegment;\n\t\tuniform float spineOffset;\n\t\tuniform float spineLength;\n\t\tuniform int flow;\n\n\t\tfloat textureLayers = ${TEXTURE_HEIGHT * numberOfCurves}.;\n\t\tfloat textureStacks = ${TEXTURE_HEIGHT / 4}.;\n\n\t\t${shader.vertexShader}\n\t\t`\n\t\t// chunk import moved in front of modified shader below\n\t\t\t.replace( '#include ', '' )\n\n\t\t\t// vec3 transformedNormal declaration overriden below\n\t\t\t.replace( '#include ', '' )\n\n\t\t\t// vec3 transformed declaration overriden below\n\t\t\t.replace( '#include ', '' )\n\n\t\t\t// shader override\n\t\t\t.replace(\n\t\t\t\t/void\\s*main\\s*\\(\\)\\s*\\{/,\n\t\t\t\t`\nvoid main() {\n#include \n\nvec4 worldPos = modelMatrix * vec4(position, 1.);\n\nbool bend = flow > 0;\nfloat xWeight = bend ? 0. : 1.;\n\n#ifdef USE_INSTANCING\nfloat pathOffsetFromInstanceMatrix = instanceMatrix[3][2];\nfloat spineLengthFromInstanceMatrix = instanceMatrix[3][0];\nfloat spinePortion = bend ? (worldPos.x + spineOffset) / spineLengthFromInstanceMatrix : 0.;\nfloat mt = (spinePortion * pathSegment + pathOffset + pathOffsetFromInstanceMatrix)*textureStacks;\n#else\nfloat spinePortion = bend ? (worldPos.x + spineOffset) / spineLength : 0.;\nfloat mt = (spinePortion * pathSegment + pathOffset)*textureStacks;\n#endif\n\nmt = mod(mt, textureStacks);\nfloat rowOffset = floor(mt);\n\n#ifdef USE_INSTANCING\nrowOffset += instanceMatrix[3][1] * ${TEXTURE_HEIGHT}.;\n#endif\n\nvec3 spinePos = texture2D(spineTexture, vec2(mt, (0. + rowOffset + 0.5) / textureLayers)).xyz;\nvec3 a = texture2D(spineTexture, vec2(mt, (1. + rowOffset + 0.5) / textureLayers)).xyz;\nvec3 b = texture2D(spineTexture, vec2(mt, (2. + rowOffset + 0.5) / textureLayers)).xyz;\nvec3 c = texture2D(spineTexture, vec2(mt, (3. + rowOffset + 0.5) / textureLayers)).xyz;\nmat3 basis = mat3(a, b, c);\n\nvec3 transformed = basis\n\t* vec3(worldPos.x * xWeight, worldPos.y * 1., worldPos.z * 1.)\n\t+ spinePos;\n\nvec3 transformedNormal = normalMatrix * (basis * objectNormal);\n\t\t\t` ).replace(\n\t\t\t\t'#include ',\n\t\t\t\t`vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\t\t\t\tgl_Position = projectionMatrix * mvPosition;`\n\t\t\t);\n\n\t\tshader.vertexShader = vertexShader;\n\n\t};\n\n}\n\n/**\n * A helper class for making meshes bend aroudn curves\n */\nexport class Flow {\n\n\t/**\n\t * @param {Mesh} mesh The mesh to clone and modify to bend around the curve\n\t * @param {number} numberOfCurves The amount of space that should preallocated for additional curves\n\t */\n\tconstructor( mesh, numberOfCurves = 1 ) {\n\n\t\tconst obj3D = mesh.clone();\n\t\tconst splineTexure = initSplineTexture( numberOfCurves );\n\t\tconst uniforms = getUniforms( splineTexure );\n\t\tobj3D.traverse( function ( child ) {\n\n\t\t\tif (\n\t\t\t\tchild instanceof Mesh ||\n\t\t\t\tchild instanceof InstancedMesh\n\t\t\t) {\n\n\t\t\t\tif ( Array.isArray( child.material ) ) {\n\n\t\t\t\t\tconst materials = [];\n\n\t\t\t\t\tfor ( const material of child.material ) {\n\n\t\t\t\t\t\tconst newMaterial = material.clone();\n\t\t\t\t\t\tmodifyShader( newMaterial, uniforms, numberOfCurves );\n\t\t\t\t\t\tmaterials.push( newMaterial );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tchild.material = materials;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.material = child.material.clone();\n\t\t\t\t\tmodifyShader( child.material, uniforms, numberOfCurves );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.curveArray = new Array( numberOfCurves );\n\t\tthis.curveLengthArray = new Array( numberOfCurves );\n\n\t\tthis.object3D = obj3D;\n\t\tthis.splineTexure = splineTexure;\n\t\tthis.uniforms = uniforms;\n\n\t}\n\n\tupdateCurve( index, curve ) {\n\n\t\tif ( index >= this.curveArray.length ) throw Error( 'Index out of range for Flow' );\n\t\tconst curveLength = curve.getLength();\n\t\tthis.uniforms.spineLength.value = curveLength;\n\t\tthis.curveLengthArray[ index ] = curveLength;\n\t\tthis.curveArray[ index ] = curve;\n\t\tupdateSplineTexture( this.splineTexure, curve, index );\n\n\t}\n\n\tmoveAlongCurve( amount ) {\n\n\t\tthis.uniforms.pathOffset.value += amount;\n\n\t}\n\n}\nconst matrix = new Matrix4();\n\n/**\n * A helper class for creating instanced versions of flow, where the instances are placed on the curve.\n */\nexport class InstancedFlow extends Flow {\n\n\t/**\n\t *\n\t * @param {number} count The number of instanced elements\n\t * @param {number} curveCount The number of curves to preallocate for\n\t * @param {Geometry} geometry The geometry to use for the instanced mesh\n\t * @param {Material} material The material to use for the instanced mesh\n\t */\n\tconstructor( count, curveCount, geometry, material ) {\n\n\t\tconst mesh = new InstancedMesh(\n\t\t\tgeometry,\n\t\t\tmaterial,\n\t\t\tcount\n\t\t);\n\t\tmesh.instanceMatrix.setUsage( DynamicDrawUsage );\n\t\tmesh.frustumCulled = false;\n\t\tsuper( mesh, curveCount );\n\n\t\tthis.offsets = new Array( count ).fill( 0 );\n\t\tthis.whichCurve = new Array( count ).fill( 0 );\n\n\t}\n\n\t/**\n\t * The extra information about which curve and curve position is stored in the translation components of the matrix for the instanced objects\n\t * This writes that information to the matrix and marks it as needing update.\n\t *\n\t * @param {number} index of the instanced element to update\n\t */\n\twriteChanges( index ) {\n\n\t\tmatrix.makeTranslation(\n\t\t\tthis.curveLengthArray[ this.whichCurve[ index ] ],\n\t\t\tthis.whichCurve[ index ],\n\t\t\tthis.offsets[ index ]\n\t\t);\n\t\tthis.object3D.setMatrixAt( index, matrix );\n\t\tthis.object3D.instanceMatrix.needsUpdate = true;\n\n\t}\n\n\t/**\n\t * Move an individual element along the curve by a specific amount\n\t *\n\t * @param {number} index Which element to update\n\t * @param {number} offset Move by how much\n\t */\n\tmoveIndividualAlongCurve( index, offset ) {\n\n\t\tthis.offsets[ index ] += offset;\n\t\tthis.writeChanges( index );\n\n\t}\n\n\t/**\n\t * Select which curve to use for an element\n\t *\n\t * @param {number} index the index of the instanced element to update\n\t * @param {number} curveNo the index of the curve it should use\n\t */\n\tsetCurve( index, curveNo ) {\n\n\t\tif ( isNaN( curveNo ) ) throw Error( 'curve index being set is Not a Number (NaN)' );\n\t\tthis.whichCurve[ index ] = curveNo;\n\t\tthis.writeChanges( index );\n\n\t}\n\n}\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tVector3\n} from 'three';\nimport * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js';\n\nconst _A = new Vector3();\nconst _B = new Vector3();\nconst _C = new Vector3();\n\nclass EdgeSplitModifier {\n\n\tmodify( geometry, cutOffAngle, tryKeepNormals = true ) {\n\n\t\tfunction computeNormals() {\n\n\t\t\tnormals = new Float32Array( indexes.length * 3 );\n\n\t\t\tfor ( let i = 0; i < indexes.length; i += 3 ) {\n\n\t\t\t\tlet index = indexes[ i ];\n\n\t\t\t\t_A.set(\n\t\t\t\t\tpositions[ 3 * index ],\n\t\t\t\t\tpositions[ 3 * index + 1 ],\n\t\t\t\t\tpositions[ 3 * index + 2 ] );\n\n\t\t\t\tindex = indexes[ i + 1 ];\n\t\t\t\t_B.set(\n\t\t\t\t\tpositions[ 3 * index ],\n\t\t\t\t\tpositions[ 3 * index + 1 ],\n\t\t\t\t\tpositions[ 3 * index + 2 ] );\n\n\t\t\t\tindex = indexes[ i + 2 ];\n\t\t\t\t_C.set(\n\t\t\t\t\tpositions[ 3 * index ],\n\t\t\t\t\tpositions[ 3 * index + 1 ],\n\t\t\t\t\tpositions[ 3 * index + 2 ] );\n\n\t\t\t\t_C.sub( _B );\n\t\t\t\t_A.sub( _B );\n\n\t\t\t\tconst normal = _C.cross( _A ).normalize();\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tnormals[ 3 * ( i + j ) ] = normal.x;\n\t\t\t\t\tnormals[ 3 * ( i + j ) + 1 ] = normal.y;\n\t\t\t\t\tnormals[ 3 * ( i + j ) + 2 ] = normal.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tfunction mapPositionsToIndexes() {\n\n\t\t\tpointToIndexMap = Array( positions.length / 3 );\n\n\t\t\tfor ( let i = 0; i < indexes.length; i ++ ) {\n\n\t\t\t\tconst index = indexes[ i ];\n\n\t\t\t\tif ( pointToIndexMap[ index ] == null ) {\n\n\t\t\t\t\tpointToIndexMap[ index ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tpointToIndexMap[ index ].push( i );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tfunction edgeSplitToGroups( indexes, cutOff, firstIndex ) {\n\n\t\t\t_A.set( normals[ 3 * firstIndex ], normals[ 3 * firstIndex + 1 ], normals[ 3 * firstIndex + 2 ] ).normalize();\n\n\t\t\tconst result = {\n\t\t\t\tsplitGroup: [],\n\t\t\t\tcurrentGroup: [ firstIndex ]\n\t\t\t};\n\n\t\t\tfor ( const j of indexes ) {\n\n\t\t\t\tif ( j !== firstIndex ) {\n\n\t\t\t\t\t_B.set( normals[ 3 * j ], normals[ 3 * j + 1 ], normals[ 3 * j + 2 ] ).normalize();\n\n\t\t\t\t\tif ( _B.dot( _A ) < cutOff ) {\n\n\t\t\t\t\t\tresult.splitGroup.push( j );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tresult.currentGroup.push( j );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\n\t\tfunction edgeSplit( indexes, cutOff, original = null ) {\n\n\t\t\tif ( indexes.length === 0 ) return;\n\n\t\t\tconst groupResults = [];\n\n\t\t\tfor ( const index of indexes ) {\n\n\t\t\t\tgroupResults.push( edgeSplitToGroups( indexes, cutOff, index ) );\n\n\t\t\t}\n\n\t\t\tlet result = groupResults[ 0 ];\n\n\t\t\tfor ( const groupResult of groupResults ) {\n\n\t\t\t\tif ( groupResult.currentGroup.length > result.currentGroup.length ) {\n\n\t\t\t\t\tresult = groupResult;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tif ( original != null ) {\n\n\t\t\t\tsplitIndexes.push( {\n\t\t\t\t\toriginal: original,\n\t\t\t\t\tindexes: result.currentGroup\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( result.splitGroup.length ) {\n\n\t\t\t\tedgeSplit( result.splitGroup, cutOff, original || result.currentGroup[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet hadNormals = false;\n\t\tlet oldNormals = null;\n\n\t\tif ( geometry.attributes.normal ) {\n\n\t\t\thadNormals = true;\n\n\t\t\tgeometry = geometry.clone();\n\n\t\t\tif ( tryKeepNormals === true && geometry.index !== null ) {\n\n\t\t\t\toldNormals = geometry.attributes.normal.array;\n\n\t\t\t}\n\n\t\t\tgeometry.deleteAttribute( 'normal' );\n\n\t\t}\n\n\t\tif ( geometry.index == null ) {\n\n\t\t\tgeometry = BufferGeometryUtils.mergeVertices( geometry );\n\n\t\t}\n\n\t\tconst indexes = geometry.index.array;\n\t\tconst positions = geometry.getAttribute( 'position' ).array;\n\n\t\tlet normals;\n\t\tlet pointToIndexMap;\n\n\t\tcomputeNormals();\n\t\tmapPositionsToIndexes();\n\n\t\tconst splitIndexes = [];\n\n\t\tfor ( const vertexIndexes of pointToIndexMap ) {\n\n\t\t\tedgeSplit( vertexIndexes, Math.cos( cutOffAngle ) - 0.001 );\n\n\t\t}\n\n\t\tconst newAttributes = {};\n\t\tfor ( const name of Object.keys( geometry.attributes ) ) {\n\n\t\t\tconst oldAttribute = geometry.attributes[ name ];\n\t\t\tconst newArray = new oldAttribute.array.constructor( ( indexes.length + splitIndexes.length ) * oldAttribute.itemSize );\n\t\t\tnewArray.set( oldAttribute.array );\n\t\t\tnewAttributes[ name ] = new BufferAttribute( newArray, oldAttribute.itemSize, oldAttribute.normalized );\n\n\t\t}\n\n\t\tconst newIndexes = new Uint32Array( indexes.length );\n\t\tnewIndexes.set( indexes );\n\n\t\tfor ( let i = 0; i < splitIndexes.length; i ++ ) {\n\n\t\t\tconst split = splitIndexes[ i ];\n\t\t\tconst index = indexes[ split.original ];\n\n\t\t\tfor ( const attribute of Object.values( newAttributes ) ) {\n\n\t\t\t\tfor ( let j = 0; j < attribute.itemSize; j ++ ) {\n\n\t\t\t\t\tattribute.array[ ( indexes.length + i ) * attribute.itemSize + j ] =\n\t\t\t\t\t\tattribute.array[ index * attribute.itemSize + j ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( const j of split.indexes ) {\n\n\t\t\t\tnewIndexes[ j ] = indexes.length + i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( newIndexes, 1 ) );\n\n\t\tfor ( const name of Object.keys( newAttributes ) ) {\n\n\t\t\tgeometry.setAttribute( name, newAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( hadNormals ) {\n\n\t\t\tgeometry.computeVertexNormals();\n\n\t\t\tif ( oldNormals !== null ) {\n\n\t\t\t\tconst changedNormals = new Array( oldNormals.length / 3 ).fill( false );\n\n\t\t\t\tfor ( const splitData of splitIndexes )\n\t\t\t\t\tchangedNormals[ splitData.original ] = true;\n\n\t\t\t\tfor ( let i = 0; i < changedNormals.length; i ++ ) {\n\n\t\t\t\t\tif ( changedNormals[ i ] === false ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ )\n\t\t\t\t\t\t\tgeometry.attributes.normal.array[ 3 * i + j ] = oldNormals[ 3 * i + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n}\n\n\n\nexport { EdgeSplitModifier };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFloat32BufferAttribute,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\nimport * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js';\n\n/**\n *\tSimplification Geometry Modifier\n * - based on code and technique\n *\t - by Stan Melax in 1998\n *\t - Progressive Mesh type Polygon Reduction Algorithm\n * - http://www.melax.com/polychop/\n */\n\nconst _cb = new Vector3(), _ab = new Vector3();\n\nclass SimplifyModifier {\n\n\tmodify( geometry, count ) {\n\n\t\tgeometry = geometry.clone();\n\n\t\t// currently morphAttributes are not supported\n\t\tdelete geometry.morphAttributes.position;\n\t\tdelete geometry.morphAttributes.normal;\n\t\tconst attributes = geometry.attributes;\n\n\t\t// this modifier can only process indexed and non-indexed geomtries with at least a position attribute\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tif ( name !== 'position' && name !== 'uv' && name !== 'normal' && name !== 'tangent' && name !== 'color' ) geometry.deleteAttribute( name );\n\n\t\t}\n\n\t\tgeometry = BufferGeometryUtils.mergeVertices( geometry );\n\n\t\t//\n\t\t// put data of original geometry in different data structures\n\t\t//\n\n\t\tconst vertices = [];\n\t\tconst faces = [];\n\n\t\t// add vertices\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst uvAttribute = geometry.getAttribute( 'uv' );\n\t\tconst normalAttribute = geometry.getAttribute( 'normal' );\n\t\tconst tangentAttribute = geometry.getAttribute( 'tangent' );\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\tlet t = null;\n\t\tlet v2 = null;\n\t\tlet nor = null;\n\t\tlet col = null;\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tconst v = new Vector3().fromBufferAttribute( positionAttribute, i );\n\t\t\tif ( uvAttribute ) {\n\n\t\t\t\tv2 = new Vector2().fromBufferAttribute( uvAttribute, i );\n\n\t\t\t}\n\n\t\t\tif ( normalAttribute ) {\n\n\t\t\t\tnor = new Vector3().fromBufferAttribute( normalAttribute, i );\n\n\t\t\t}\n\n\t\t\tif ( tangentAttribute ) {\n\n\t\t\t\tt = new Vector4().fromBufferAttribute( tangentAttribute, i );\n\n\t\t\t}\n\n\t\t\tif ( colorAttribute ) {\n\n\t\t\t\tcol = new Color().fromBufferAttribute( colorAttribute, i );\n\n\t\t\t}\n\n\t\t\tconst vertex = new Vertex( v, v2, nor, t, col );\n\t\t\tvertices.push( vertex );\n\n\t\t}\n\n\t\t// add faces\n\n\t\tlet index = geometry.getIndex();\n\n\t\tif ( index !== null ) {\n\n\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\tconst triangle = new Triangle( vertices[ a ], vertices[ b ], vertices[ c ], a, b, c );\n\t\t\t\tfaces.push( triangle );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\t\tconst a = i;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tconst triangle = new Triangle( vertices[ a ], vertices[ b ], vertices[ c ], a, b, c );\n\t\t\t\tfaces.push( triangle );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute all edge collapse costs\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tcomputeEdgeCostAtVertex( vertices[ i ] );\n\n\t\t}\n\n\t\tlet nextVertex;\n\n\t\tlet z = count;\n\n\t\twhile ( z -- ) {\n\n\t\t\tnextVertex = minimumCostEdge( vertices );\n\n\t\t\tif ( ! nextVertex ) {\n\n\t\t\t\tconsole.log( 'THREE.SimplifyModifier: No next vertex' );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcollapse( vertices, faces, nextVertex, nextVertex.collapseNeighbor );\n\n\t\t}\n\n\t\t//\n\n\t\tconst simplifiedGeometry = new BufferGeometry();\n\t\tconst position = [];\n\t\tconst uv = [];\n\t\tconst normal = [];\n\t\tconst tangent = [];\n\t\tconst color = [];\n\n\t\tindex = [];\n\n\t\t//\n\n\t\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\t\tconst vertex = vertices[ i ];\n\t\t\tposition.push( vertex.position.x, vertex.position.y, vertex.position.z );\n\t\t\tif ( vertex.uv ) {\n\n\t\t\t\tuv.push( vertex.uv.x, vertex.uv.y );\n\n\t\t\t}\n\n\t\t\tif ( vertex.normal ) {\n\n\t\t\t\tnormal.push( vertex.normal.x, vertex.normal.y, vertex.normal.z );\n\n\t\t\t}\n\n\t\t\tif ( vertex.tangent ) {\n\n\t\t\t\ttangent.push( vertex.tangent.x, vertex.tangent.y, vertex.tangent.z, vertex.tangent.w );\n\n\t\t\t}\n\n\t\t\tif ( vertex.color ) {\n\n\t\t\t\tcolor.push( vertex.color.r, vertex.color.g, vertex.color.b );\n\n\t\t\t}\n\n\n\t\t\t// cache final index to GREATLY speed up faces reconstruction\n\t\t\tvertex.id = i;\n\n\t\t}\n\n\t\t//\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\t\t\tindex.push( face.v1.id, face.v2.id, face.v3.id );\n\n\t\t}\n\n\t\tsimplifiedGeometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( uv.length > 0 ) simplifiedGeometry.setAttribute( 'uv', new Float32BufferAttribute( uv, 2 ) );\n\t\tif ( normal.length > 0 ) simplifiedGeometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( tangent.length > 0 ) simplifiedGeometry.setAttribute( 'tangent', new Float32BufferAttribute( tangent, 4 ) );\n\t\tif ( color.length > 0 ) simplifiedGeometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\n\t\tsimplifiedGeometry.setIndex( index );\n\n\t\treturn simplifiedGeometry;\n\n\t}\n\n}\n\nfunction pushIfUnique( array, object ) {\n\n\tif ( array.indexOf( object ) === - 1 ) array.push( object );\n\n}\n\nfunction removeFromArray( array, object ) {\n\n\tconst k = array.indexOf( object );\n\tif ( k > - 1 ) array.splice( k, 1 );\n\n}\n\nfunction computeEdgeCollapseCost( u, v ) {\n\n\t// if we collapse edge uv by moving u to v then how\n\t// much different will the model change, i.e. the \"error\".\n\n\tconst edgelength = v.position.distanceTo( u.position );\n\tlet curvature = 0;\n\n\tconst sideFaces = [];\n\n\t// find the \"sides\" triangles that are on the edge uv\n\tfor ( let i = 0, il = u.faces.length; i < il; i ++ ) {\n\n\t\tconst face = u.faces[ i ];\n\n\t\tif ( face.hasVertex( v ) ) {\n\n\t\t\tsideFaces.push( face );\n\n\t\t}\n\n\t}\n\n\t// use the triangle facing most away from the sides\n\t// to determine our curvature term\n\tfor ( let i = 0, il = u.faces.length; i < il; i ++ ) {\n\n\t\tlet minCurvature = 1;\n\t\tconst face = u.faces[ i ];\n\n\t\tfor ( let j = 0; j < sideFaces.length; j ++ ) {\n\n\t\t\tconst sideFace = sideFaces[ j ];\n\t\t\t// use dot product of face normals.\n\t\t\tconst dotProd = face.normal.dot( sideFace.normal );\n\t\t\tminCurvature = Math.min( minCurvature, ( 1.001 - dotProd ) / 2 );\n\n\t\t}\n\n\t\tcurvature = Math.max( curvature, minCurvature );\n\n\t}\n\n\t// crude approach in attempt to preserve borders\n\t// though it seems not to be totally correct\n\tconst borders = 0;\n\n\tif ( sideFaces.length < 2 ) {\n\n\t\t// we add some arbitrary cost for borders,\n\t\t// borders += 10;\n\t\tcurvature = 1;\n\n\t}\n\n\tconst amt = edgelength * curvature + borders;\n\n\treturn amt;\n\n}\n\nfunction computeEdgeCostAtVertex( v ) {\n\n\t// compute the edge collapse cost for all edges that start\n\t// from vertex v. Since we are only interested in reducing\n\t// the object by selecting the min cost edge at each step, we\n\t// only cache the cost of the least cost edge at this vertex\n\t// (in member variable collapse) as well as the value of the\n\t// cost (in member variable collapseCost).\n\n\tif ( v.neighbors.length === 0 ) {\n\n\t\t// collapse if no neighbors.\n\t\tv.collapseNeighbor = null;\n\t\tv.collapseCost = - 0.01;\n\n\t\treturn;\n\n\t}\n\n\tv.collapseCost = 100000;\n\tv.collapseNeighbor = null;\n\n\t// search all neighboring edges for \"least cost\" edge\n\tfor ( let i = 0; i < v.neighbors.length; i ++ ) {\n\n\t\tconst collapseCost = computeEdgeCollapseCost( v, v.neighbors[ i ] );\n\n\t\tif ( ! v.collapseNeighbor ) {\n\n\t\t\tv.collapseNeighbor = v.neighbors[ i ];\n\t\t\tv.collapseCost = collapseCost;\n\t\t\tv.minCost = collapseCost;\n\t\t\tv.totalCost = 0;\n\t\t\tv.costCount = 0;\n\n\t\t}\n\n\t\tv.costCount ++;\n\t\tv.totalCost += collapseCost;\n\n\t\tif ( collapseCost < v.minCost ) {\n\n\t\t\tv.collapseNeighbor = v.neighbors[ i ];\n\t\t\tv.minCost = collapseCost;\n\n\t\t}\n\n\t}\n\n\t// we average the cost of collapsing at this vertex\n\tv.collapseCost = v.totalCost / v.costCount;\n\t// v.collapseCost = v.minCost;\n\n}\n\nfunction removeVertex( v, vertices ) {\n\n\tconsole.assert( v.faces.length === 0 );\n\n\twhile ( v.neighbors.length ) {\n\n\t\tconst n = v.neighbors.pop();\n\t\tremoveFromArray( n.neighbors, v );\n\n\t}\n\n\tremoveFromArray( vertices, v );\n\n}\n\nfunction removeFace( f, faces ) {\n\n\tremoveFromArray( faces, f );\n\n\tif ( f.v1 ) removeFromArray( f.v1.faces, f );\n\tif ( f.v2 ) removeFromArray( f.v2.faces, f );\n\tif ( f.v3 ) removeFromArray( f.v3.faces, f );\n\n\t// TODO optimize this!\n\tconst vs = [ f.v1, f.v2, f.v3 ];\n\n\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\tconst v1 = vs[ i ];\n\t\tconst v2 = vs[ ( i + 1 ) % 3 ];\n\n\t\tif ( ! v1 || ! v2 ) continue;\n\n\t\tv1.removeIfNonNeighbor( v2 );\n\t\tv2.removeIfNonNeighbor( v1 );\n\n\t}\n\n}\n\nfunction collapse( vertices, faces, u, v ) {\n\n\t// Collapse the edge uv by moving vertex u onto v\n\n\tif ( ! v ) {\n\n\t\t// u is a vertex all by itself so just delete it..\n\t\tremoveVertex( u, vertices );\n\t\treturn;\n\n\t}\n\n\tif ( v.uv ) {\n\n\t\tu.uv.copy( v.uv );\n\n\t}\n\n\tif ( v.normal ) {\n\n\t\tv.normal.add( u.normal ).normalize();\n\n\t}\n\n\tif ( v.tangent ) {\n\n\t\tv.tangent.add( u.tangent ).normalize();\n\n\t}\n\n\tconst tmpVertices = [];\n\n\tfor ( let i = 0; i < u.neighbors.length; i ++ ) {\n\n\t\ttmpVertices.push( u.neighbors[ i ] );\n\n\t}\n\n\n\t// delete triangles on edge uv:\n\tfor ( let i = u.faces.length - 1; i >= 0; i -- ) {\n\n\t\tif ( u.faces[ i ] && u.faces[ i ].hasVertex( v ) ) {\n\n\t\t\tremoveFace( u.faces[ i ], faces );\n\n\t\t}\n\n\t}\n\n\t// update remaining triangles to have v instead of u\n\tfor ( let i = u.faces.length - 1; i >= 0; i -- ) {\n\n\t\tu.faces[ i ].replaceVertex( u, v );\n\n\t}\n\n\n\tremoveVertex( u, vertices );\n\n\t// recompute the edge collapse costs in neighborhood\n\tfor ( let i = 0; i < tmpVertices.length; i ++ ) {\n\n\t\tcomputeEdgeCostAtVertex( tmpVertices[ i ] );\n\n\t}\n\n}\n\n\n\nfunction minimumCostEdge( vertices ) {\n\n\t// O(n * n) approach. TODO optimize this\n\n\tlet least = vertices[ 0 ];\n\n\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\tif ( vertices[ i ].collapseCost < least.collapseCost ) {\n\n\t\t\tleast = vertices[ i ];\n\n\t\t}\n\n\t}\n\n\treturn least;\n\n}\n\n// we use a triangle class to represent structure of face slightly differently\n\nclass Triangle {\n\n\tconstructor( v1, v2, v3, a, b, c ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t\tthis.normal = new Vector3();\n\n\t\tthis.computeNormal();\n\n\t\tv1.faces.push( this );\n\t\tv1.addUniqueNeighbor( v2 );\n\t\tv1.addUniqueNeighbor( v3 );\n\n\t\tv2.faces.push( this );\n\t\tv2.addUniqueNeighbor( v1 );\n\t\tv2.addUniqueNeighbor( v3 );\n\n\n\t\tv3.faces.push( this );\n\t\tv3.addUniqueNeighbor( v1 );\n\t\tv3.addUniqueNeighbor( v2 );\n\n\t}\n\n\tcomputeNormal() {\n\n\t\tconst vA = this.v1.position;\n\t\tconst vB = this.v2.position;\n\t\tconst vC = this.v3.position;\n\n\t\t_cb.subVectors( vC, vB );\n\t\t_ab.subVectors( vA, vB );\n\t\t_cb.cross( _ab ).normalize();\n\n\t\tthis.normal.copy( _cb );\n\n\t}\n\n\thasVertex( v ) {\n\n\t\treturn v === this.v1 || v === this.v2 || v === this.v3;\n\n\t}\n\n\treplaceVertex( oldv, newv ) {\n\n\t\tif ( oldv === this.v1 ) this.v1 = newv;\n\t\telse if ( oldv === this.v2 ) this.v2 = newv;\n\t\telse if ( oldv === this.v3 ) this.v3 = newv;\n\n\t\tremoveFromArray( oldv.faces, this );\n\t\tnewv.faces.push( this );\n\n\n\t\toldv.removeIfNonNeighbor( this.v1 );\n\t\tthis.v1.removeIfNonNeighbor( oldv );\n\n\t\toldv.removeIfNonNeighbor( this.v2 );\n\t\tthis.v2.removeIfNonNeighbor( oldv );\n\n\t\toldv.removeIfNonNeighbor( this.v3 );\n\t\tthis.v3.removeIfNonNeighbor( oldv );\n\n\t\tthis.v1.addUniqueNeighbor( this.v2 );\n\t\tthis.v1.addUniqueNeighbor( this.v3 );\n\n\t\tthis.v2.addUniqueNeighbor( this.v1 );\n\t\tthis.v2.addUniqueNeighbor( this.v3 );\n\n\t\tthis.v3.addUniqueNeighbor( this.v1 );\n\t\tthis.v3.addUniqueNeighbor( this.v2 );\n\n\t\tthis.computeNormal();\n\n\t}\n\n}\n\nclass Vertex {\n\n\tconstructor( v, uv, normal, tangent, color ) {\n\n\t\tthis.position = v;\n\t\tthis.uv = uv;\n\t\tthis.normal = normal;\n\t\tthis.tangent = tangent;\n\t\tthis.color = color;\n\n\t\tthis.id = - 1; // external use position in vertices list (for e.g. face generation)\n\n\t\tthis.faces = []; // faces vertex is connected\n\t\tthis.neighbors = []; // neighbouring vertices aka \"adjacentVertices\"\n\n\t\t// these will be computed in computeEdgeCostAtVertex()\n\t\tthis.collapseCost = 0; // cost of collapsing this vertex, the less the better. aka objdist\n\t\tthis.collapseNeighbor = null; // best candinate for collapsing\n\n\t}\n\n\taddUniqueNeighbor( vertex ) {\n\n\t\tpushIfUnique( this.neighbors, vertex );\n\n\t}\n\n\tremoveIfNonNeighbor( n ) {\n\n\t\tconst neighbors = this.neighbors;\n\t\tconst faces = this.faces;\n\n\t\tconst offset = neighbors.indexOf( n );\n\n\t\tif ( offset === - 1 ) return;\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tif ( faces[ i ].hasVertex( n ) ) return;\n\n\t\t}\n\n\t\tneighbors.splice( offset, 1 );\n\n\t}\n\n}\n\nexport { SimplifyModifier };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFloat32BufferAttribute,\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Break faces with edges longer than maxEdgeLength\n */\n\nclass TessellateModifier {\n\n\tconstructor( maxEdgeLength = 0.1, maxIterations = 6 ) {\n\n\t\tthis.maxEdgeLength = maxEdgeLength;\n\t\tthis.maxIterations = maxIterations;\n\n\t}\n\n\tmodify( geometry ) {\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tgeometry = geometry.toNonIndexed();\n\n\t\t}\n\n\t\t//\n\n\t\tconst maxIterations = this.maxIterations;\n\t\tconst maxEdgeLengthSquared = this.maxEdgeLength * this.maxEdgeLength;\n\n\t\tconst va = new Vector3();\n\t\tconst vb = new Vector3();\n\t\tconst vc = new Vector3();\n\t\tconst vm = new Vector3();\n\t\tconst vs = [ va, vb, vc, vm ];\n\n\t\tconst na = new Vector3();\n\t\tconst nb = new Vector3();\n\t\tconst nc = new Vector3();\n\t\tconst nm = new Vector3();\n\t\tconst ns = [ na, nb, nc, nm ];\n\n\t\tconst ca = new Color();\n\t\tconst cb = new Color();\n\t\tconst cc = new Color();\n\t\tconst cm = new Color();\n\t\tconst cs = [ ca, cb, cc, cm ];\n\n\t\tconst ua = new Vector2();\n\t\tconst ub = new Vector2();\n\t\tconst uc = new Vector2();\n\t\tconst um = new Vector2();\n\t\tconst us = [ ua, ub, uc, um ];\n\n\t\tconst u2a = new Vector2();\n\t\tconst u2b = new Vector2();\n\t\tconst u2c = new Vector2();\n\t\tconst u2m = new Vector2();\n\t\tconst u2s = [ u2a, u2b, u2c, u2m ];\n\n\t\tconst attributes = geometry.attributes;\n\t\tconst hasNormals = attributes.normal !== undefined;\n\t\tconst hasColors = attributes.color !== undefined;\n\t\tconst hasUVs = attributes.uv !== undefined;\n\t\tconst hasUV1s = attributes.uv1 !== undefined;\n\n\t\tlet positions = attributes.position.array;\n\t\tlet normals = hasNormals ? attributes.normal.array : null;\n\t\tlet colors = hasColors ? attributes.color.array : null;\n\t\tlet uvs = hasUVs ? attributes.uv.array : null;\n\t\tlet uv1s = hasUV1s ? attributes.uv1.array : null;\n\n\t\tlet positions2 = positions;\n\t\tlet normals2 = normals;\n\t\tlet colors2 = colors;\n\t\tlet uvs2 = uvs;\n\t\tlet uv1s2 = uv1s;\n\n\t\tlet iteration = 0;\n\t\tlet tessellating = true;\n\n\t\tfunction addTriangle( a, b, c ) {\n\n\t\t\tconst v1 = vs[ a ];\n\t\t\tconst v2 = vs[ b ];\n\t\t\tconst v3 = vs[ c ];\n\n\t\t\tpositions2.push( v1.x, v1.y, v1.z );\n\t\t\tpositions2.push( v2.x, v2.y, v2.z );\n\t\t\tpositions2.push( v3.x, v3.y, v3.z );\n\n\t\t\tif ( hasNormals ) {\n\n\t\t\t\tconst n1 = ns[ a ];\n\t\t\t\tconst n2 = ns[ b ];\n\t\t\t\tconst n3 = ns[ c ];\n\n\t\t\t\tnormals2.push( n1.x, n1.y, n1.z );\n\t\t\t\tnormals2.push( n2.x, n2.y, n2.z );\n\t\t\t\tnormals2.push( n3.x, n3.y, n3.z );\n\n\t\t\t}\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tconst c1 = cs[ a ];\n\t\t\t\tconst c2 = cs[ b ];\n\t\t\t\tconst c3 = cs[ c ];\n\n\t\t\t\tcolors2.push( c1.r, c1.g, c1.b );\n\t\t\t\tcolors2.push( c2.r, c2.g, c2.b );\n\t\t\t\tcolors2.push( c3.r, c3.g, c3.b );\n\n\t\t\t}\n\n\t\t\tif ( hasUVs ) {\n\n\t\t\t\tconst u1 = us[ a ];\n\t\t\t\tconst u2 = us[ b ];\n\t\t\t\tconst u3 = us[ c ];\n\n\t\t\t\tuvs2.push( u1.x, u1.y );\n\t\t\t\tuvs2.push( u2.x, u2.y );\n\t\t\t\tuvs2.push( u3.x, u3.y );\n\n\t\t\t}\n\n\t\t\tif ( hasUV1s ) {\n\n\t\t\t\tconst u21 = u2s[ a ];\n\t\t\t\tconst u22 = u2s[ b ];\n\t\t\t\tconst u23 = u2s[ c ];\n\n\t\t\t\tuv1s2.push( u21.x, u21.y );\n\t\t\t\tuv1s2.push( u22.x, u22.y );\n\t\t\t\tuv1s2.push( u23.x, u23.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\twhile ( tessellating && iteration < maxIterations ) {\n\n\t\t\titeration ++;\n\t\t\ttessellating = false;\n\n\t\t\tpositions = positions2;\n\t\t\tpositions2 = [];\n\n\t\t\tif ( hasNormals ) {\n\n\t\t\t\tnormals = normals2;\n\t\t\t\tnormals2 = [];\n\n\t\t\t}\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tcolors = colors2;\n\t\t\t\tcolors2 = [];\n\n\t\t\t}\n\n\t\t\tif ( hasUVs ) {\n\n\t\t\t\tuvs = uvs2;\n\t\t\t\tuvs2 = [];\n\n\t\t\t}\n\n\t\t\tif ( hasUV1s ) {\n\n\t\t\t\tuv1s = uv1s2;\n\t\t\t\tuv1s2 = [];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, i2 = 0, il = positions.length; i < il; i += 9, i2 += 6 ) {\n\n\t\t\t\tva.fromArray( positions, i + 0 );\n\t\t\t\tvb.fromArray( positions, i + 3 );\n\t\t\t\tvc.fromArray( positions, i + 6 );\n\n\t\t\t\tif ( hasNormals ) {\n\n\t\t\t\t\tna.fromArray( normals, i + 0 );\n\t\t\t\t\tnb.fromArray( normals, i + 3 );\n\t\t\t\t\tnc.fromArray( normals, i + 6 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tca.fromArray( colors, i + 0 );\n\t\t\t\t\tcb.fromArray( colors, i + 3 );\n\t\t\t\t\tcc.fromArray( colors, i + 6 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasUVs ) {\n\n\t\t\t\t\tua.fromArray( uvs, i2 + 0 );\n\t\t\t\t\tub.fromArray( uvs, i2 + 2 );\n\t\t\t\t\tuc.fromArray( uvs, i2 + 4 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasUV1s ) {\n\n\t\t\t\t\tu2a.fromArray( uv1s, i2 + 0 );\n\t\t\t\t\tu2b.fromArray( uv1s, i2 + 2 );\n\t\t\t\t\tu2c.fromArray( uv1s, i2 + 4 );\n\n\t\t\t\t}\n\n\t\t\t\tconst dab = va.distanceToSquared( vb );\n\t\t\t\tconst dbc = vb.distanceToSquared( vc );\n\t\t\t\tconst dac = va.distanceToSquared( vc );\n\n\t\t\t\tif ( dab > maxEdgeLengthSquared || dbc > maxEdgeLengthSquared || dac > maxEdgeLengthSquared ) {\n\n\t\t\t\t\ttessellating = true;\n\n\t\t\t\t\tif ( dab >= dbc && dab >= dac ) {\n\n\t\t\t\t\t\tvm.lerpVectors( va, vb, 0.5 );\n\t\t\t\t\t\tif ( hasNormals ) nm.lerpVectors( na, nb, 0.5 );\n\t\t\t\t\t\tif ( hasColors ) cm.lerpColors( ca, cb, 0.5 );\n\t\t\t\t\t\tif ( hasUVs ) um.lerpVectors( ua, ub, 0.5 );\n\t\t\t\t\t\tif ( hasUV1s ) u2m.lerpVectors( u2a, u2b, 0.5 );\n\n\t\t\t\t\t\taddTriangle( 0, 3, 2 );\n\t\t\t\t\t\taddTriangle( 3, 1, 2 );\n\n\t\t\t\t\t} else if ( dbc >= dab && dbc >= dac ) {\n\n\t\t\t\t\t\tvm.lerpVectors( vb, vc, 0.5 );\n\t\t\t\t\t\tif ( hasNormals ) nm.lerpVectors( nb, nc, 0.5 );\n\t\t\t\t\t\tif ( hasColors ) cm.lerpColors( cb, cc, 0.5 );\n\t\t\t\t\t\tif ( hasUVs ) um.lerpVectors( ub, uc, 0.5 );\n\t\t\t\t\t\tif ( hasUV1s ) u2m.lerpVectors( u2b, u2c, 0.5 );\n\n\t\t\t\t\t\taddTriangle( 0, 1, 3 );\n\t\t\t\t\t\taddTriangle( 3, 2, 0 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvm.lerpVectors( va, vc, 0.5 );\n\t\t\t\t\t\tif ( hasNormals ) nm.lerpVectors( na, nc, 0.5 );\n\t\t\t\t\t\tif ( hasColors ) cm.lerpColors( ca, cc, 0.5 );\n\t\t\t\t\t\tif ( hasUVs ) um.lerpVectors( ua, uc, 0.5 );\n\t\t\t\t\t\tif ( hasUV1s ) u2m.lerpVectors( u2a, u2c, 0.5 );\n\n\t\t\t\t\t\taddTriangle( 0, 1, 3 );\n\t\t\t\t\t\taddTriangle( 3, 1, 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\taddTriangle( 0, 1, 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\n\t\tif ( hasNormals ) {\n\n\t\t\tgeometry2.setAttribute( 'normal', new Float32BufferAttribute( normals2, 3 ) );\n\n\t\t}\n\n\t\tif ( hasColors ) {\n\n\t\t\tgeometry2.setAttribute( 'color', new Float32BufferAttribute( colors2, 3 ) );\n\n\t\t}\n\n\t\tif ( hasUVs ) {\n\n\t\t\tgeometry2.setAttribute( 'uv', new Float32BufferAttribute( uvs2, 2 ) );\n\n\t\t}\n\n\t\tif ( hasUV1s ) {\n\n\t\t\tgeometry2.setAttribute( 'uv1', new Float32BufferAttribute( uv1s2, 2 ) );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n}\n\nexport { TessellateModifier };\n", "import { Mesh, MeshBasicMaterial, SphereGeometry, Vector3 } from 'three';\n\n/**\n * A ground-projected skybox. The height is how far the camera that took the photo was above the ground - \n * a larger value will magnify the downward part of the image. By default the object is centered at the camera, \n * so it is often helpful to set skybox.position.y = height to put the ground at the origin. Set the radius \n * large enough to ensure your user's camera stays inside.\n */\n\nclass GroundedSkybox extends Mesh {\n\n\tconstructor( map, height, radius, resolution = 128 ) {\n\n\t\tif ( height <= 0 || radius <= 0 || resolution <= 0 ) {\n\n\t\t\tthrow new Error( 'GroundedSkybox height, radius, and resolution must be positive.' );\n\n\t\t}\n\n\t\tconst geometry = new SphereGeometry( radius, 2 * resolution, resolution );\n\t\tgeometry.scale( 1, 1, -1 );\n\n\t\tconst pos = geometry.getAttribute( 'position' );\n\t\tconst tmp = new Vector3();\n\n\t\tfor ( let i = 0; i < pos.count; ++ i ) {\n\n\t\t\ttmp.fromBufferAttribute( pos, i );\n\t\t\tif ( tmp.y < 0 ) {\n\n\t\t\t\t// Smooth out the transition from flat floor to sphere:\n\t\t\t\tconst y1 = - height * 3 / 2;\n\t\t\t\tconst f =\n\t\t\t\t\t\ttmp.y < y1 ? - height / tmp.y : ( 1 - tmp.y * tmp.y / ( 3 * y1 * y1 ) );\n\t\t\t\ttmp.multiplyScalar( f );\n\t\t\t\ttmp.toArray( pos.array, 3 * i );\n\n\t\t\t}\n\n\t\t}\n\n\t\tpos.needsUpdate = true;\n\n\t\tsuper( geometry, new MeshBasicMaterial( { map, depthWrite: false } ) );\n\n\t}\n\n}\n\nexport { GroundedSkybox };\n", "import {\n\tAdditiveBlending,\n\tBox2,\n\tBufferGeometry,\n\tColor,\n\tFramebufferTexture,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tMesh,\n\tMeshBasicMaterial,\n\tRawShaderMaterial,\n\tUnsignedByteType,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\n\nclass Lensflare extends Mesh {\n\n\tconstructor() {\n\n\t\tsuper( Lensflare.Geometry, new MeshBasicMaterial( { opacity: 0, transparent: true } ) );\n\n\t\tthis.isLensflare = true;\n\n\t\tthis.type = 'Lensflare';\n\t\tthis.frustumCulled = false;\n\t\tthis.renderOrder = Infinity;\n\n\t\t//\n\n\t\tconst positionScreen = new Vector3();\n\t\tconst positionView = new Vector3();\n\n\t\t// textures\n\n\t\tconst tempMap = new FramebufferTexture( 16, 16 );\n\t\tconst occlusionMap = new FramebufferTexture( 16, 16 );\n\n\t\tlet currentType = UnsignedByteType;\n\n\t\t// material\n\n\t\tconst geometry = Lensflare.Geometry;\n\n\t\tconst material1a = new RawShaderMaterial( {\n\t\t\tuniforms: {\n\t\t\t\t'scale': { value: null },\n\t\t\t\t'screenPosition': { value: null }\n\t\t\t},\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 );\n\n\t\t\t\t}`,\n\t\t\tdepthTest: true,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: false\n\t\t} );\n\n\t\tconst material1b = new RawShaderMaterial( {\n\t\t\tuniforms: {\n\t\t\t\t'map': { value: tempMap },\n\t\t\t\t'scale': { value: null },\n\t\t\t\t'screenPosition': { value: null }\n\t\t\t},\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\t\t\t\tattribute vec2 uv;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUV = uv;\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform sampler2D map;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = texture2D( map, vUV );\n\n\t\t\t\t}`,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: false\n\t\t} );\n\n\t\t// the following object is used for occlusionMap generation\n\n\t\tconst mesh1 = new Mesh( geometry, material1a );\n\n\t\t//\n\n\t\tconst elements = [];\n\n\t\tconst shader = LensflareElement.Shader;\n\n\t\tconst material2 = new RawShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: {\n\t\t\t\t'map': { value: null },\n\t\t\t\t'occlusionMap': { value: occlusionMap },\n\t\t\t\t'color': { value: new Color( 0xffffff ) },\n\t\t\t\t'scale': { value: new Vector2() },\n\t\t\t\t'screenPosition': { value: new Vector3() }\n\t\t\t},\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\ttransparent: true,\n\t\t\tdepthWrite: false\n\t\t} );\n\n\t\tconst mesh2 = new Mesh( geometry, material2 );\n\n\t\tthis.addElement = function ( element ) {\n\n\t\t\telements.push( element );\n\n\t\t};\n\n\t\t//\n\n\t\tconst scale = new Vector2();\n\t\tconst screenPositionPixels = new Vector2();\n\t\tconst validArea = new Box2();\n\t\tconst viewport = new Vector4();\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\trenderer.getCurrentViewport( viewport );\n\n\t\t\tconst renderTarget = renderer.getRenderTarget();\n\t\t\tconst type = ( renderTarget !== null ) ? renderTarget.texture.type : UnsignedByteType;\n\n\t\t\tif ( currentType !== type ) {\n\n\t\t\t\ttempMap.dispose();\n\t\t\t\tocclusionMap.dispose();\n\n\t\t\t\ttempMap.type = occlusionMap.type = type;\n\n\t\t\t\tcurrentType = type;\n\n\t\t\t}\n\n\t\t\tconst invAspect = viewport.w / viewport.z;\n\t\t\tconst halfViewportWidth = viewport.z / 2.0;\n\t\t\tconst halfViewportHeight = viewport.w / 2.0;\n\n\t\t\tlet size = 16 / viewport.w;\n\t\t\tscale.set( size * invAspect, size );\n\n\t\t\tvalidArea.min.set( viewport.x, viewport.y );\n\t\t\tvalidArea.max.set( viewport.x + ( viewport.z - 16 ), viewport.y + ( viewport.w - 16 ) );\n\n\t\t\t// calculate position in screen space\n\n\t\t\tpositionView.setFromMatrixPosition( this.matrixWorld );\n\t\t\tpositionView.applyMatrix4( camera.matrixWorldInverse );\n\n\t\t\tif ( positionView.z > 0 ) return; // lensflare is behind the camera\n\n\t\t\tpositionScreen.copy( positionView ).applyMatrix4( camera.projectionMatrix );\n\n\t\t\t// horizontal and vertical coordinate of the lower left corner of the pixels to copy\n\n\t\t\tscreenPositionPixels.x = viewport.x + ( positionScreen.x * halfViewportWidth ) + halfViewportWidth - 8;\n\t\t\tscreenPositionPixels.y = viewport.y + ( positionScreen.y * halfViewportHeight ) + halfViewportHeight - 8;\n\n\t\t\t// screen cull\n\n\t\t\tif ( validArea.containsPoint( screenPositionPixels ) ) {\n\n\t\t\t\t// save current RGB to temp texture\n\n\t\t\t\trenderer.copyFramebufferToTexture( tempMap, screenPositionPixels );\n\n\t\t\t\t// render pink quad\n\n\t\t\t\tlet uniforms = material1a.uniforms;\n\t\t\t\tuniforms[ 'scale' ].value = scale;\n\t\t\t\tuniforms[ 'screenPosition' ].value = positionScreen;\n\n\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material1a, mesh1, null );\n\n\t\t\t\t// copy result to occlusionMap\n\n\t\t\t\trenderer.copyFramebufferToTexture( occlusionMap, screenPositionPixels );\n\n\t\t\t\t// restore graphics\n\n\t\t\t\tuniforms = material1b.uniforms;\n\t\t\t\tuniforms[ 'scale' ].value = scale;\n\t\t\t\tuniforms[ 'screenPosition' ].value = positionScreen;\n\n\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material1b, mesh1, null );\n\n\t\t\t\t// render elements\n\n\t\t\t\tconst vecX = - positionScreen.x * 2;\n\t\t\t\tconst vecY = - positionScreen.y * 2;\n\n\t\t\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst element = elements[ i ];\n\n\t\t\t\t\tconst uniforms = material2.uniforms;\n\n\t\t\t\t\tuniforms[ 'color' ].value.copy( element.color );\n\t\t\t\t\tuniforms[ 'map' ].value = element.texture;\n\t\t\t\t\tuniforms[ 'screenPosition' ].value.x = positionScreen.x + vecX * element.distance;\n\t\t\t\t\tuniforms[ 'screenPosition' ].value.y = positionScreen.y + vecY * element.distance;\n\n\t\t\t\t\tsize = element.size / viewport.w;\n\t\t\t\t\tconst invAspect = viewport.w / viewport.z;\n\n\t\t\t\t\tuniforms[ 'scale' ].value.set( size * invAspect, size );\n\n\t\t\t\t\tmaterial2.uniformsNeedUpdate = true;\n\n\t\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material2, mesh2, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tmaterial1a.dispose();\n\t\t\tmaterial1b.dispose();\n\t\t\tmaterial2.dispose();\n\n\t\t\ttempMap.dispose();\n\t\t\tocclusionMap.dispose();\n\n\t\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\t\telements[ i ].texture.dispose();\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}\n\n//\n\nclass LensflareElement {\n\n\tconstructor( texture, size = 1, distance = 0, color = new Color( 0xffffff ) ) {\n\n\t\tthis.texture = texture;\n\t\tthis.size = size;\n\t\tthis.distance = distance;\n\t\tthis.color = color;\n\n\t}\n\n}\n\nLensflareElement.Shader = {\n\n\tname: 'LensflareElementShader',\n\n\tuniforms: {\n\n\t\t'map': { value: null },\n\t\t'occlusionMap': { value: null },\n\t\t'color': { value: null },\n\t\t'scale': { value: null },\n\t\t'screenPosition': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tprecision highp float;\n\n\t\tuniform vec3 screenPosition;\n\t\tuniform vec2 scale;\n\n\t\tuniform sampler2D occlusionMap;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvUV = uv;\n\n\t\t\tvec2 pos = position.xy;\n\n\t\t\tvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\n\n\t\t\tvVisibility = visibility.r / 9.0;\n\t\t\tvVisibility *= 1.0 - visibility.g / 9.0;\n\t\t\tvVisibility *= visibility.b / 9.0;\n\n\t\t\tgl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tprecision highp float;\n\n\t\tuniform sampler2D map;\n\t\tuniform vec3 color;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texture = texture2D( map, vUV );\n\t\t\ttexture.a *= vVisibility;\n\t\t\tgl_FragColor = texture;\n\t\t\tgl_FragColor.rgb *= color;\n\n\t\t}`\n\n};\n\nLensflare.Geometry = ( function () {\n\n\tconst geometry = new BufferGeometry();\n\n\tconst float32Array = new Float32Array( [\n\t\t- 1, - 1, 0, 0, 0,\n\t\t1, - 1, 0, 1, 0,\n\t\t1, 1, 0, 1, 1,\n\t\t- 1, 1, 0, 0, 1\n\t] );\n\n\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\tgeometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\tgeometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\tgeometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\treturn geometry;\n\n} )();\n\nexport { Lensflare, LensflareElement };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tDynamicDrawUsage,\n\tMesh,\n\tSphere,\n\tVector3\n} from 'three';\n\n/**\n * Port of http://webglsamples.org/blob/blob.html\n */\n\nclass MarchingCubes extends Mesh {\n\n\tconstructor( resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 10000 ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isMarchingCubes = true;\n\n\t\tconst scope = this;\n\n\t\t// temp buffers used in polygonize\n\n\t\tconst vlist = new Float32Array( 12 * 3 );\n\t\tconst nlist = new Float32Array( 12 * 3 );\n\t\tconst clist = new Float32Array( 12 * 3 );\n\n\t\tthis.enableUvs = enableUvs;\n\t\tthis.enableColors = enableColors;\n\n\t\t// functions have to be object properties\n\t\t// prototype functions kill performance\n\t\t// (tested and it was 4x slower !!!)\n\n\t\tthis.init = function ( resolution ) {\n\n\t\t\tthis.resolution = resolution;\n\n\t\t\t// parameters\n\n\t\t\tthis.isolation = 80.0;\n\n\t\t\t// size of field, 32 is pushing it in Javascript :)\n\n\t\t\tthis.size = resolution;\n\t\t\tthis.size2 = this.size * this.size;\n\t\t\tthis.size3 = this.size2 * this.size;\n\t\t\tthis.halfsize = this.size / 2.0;\n\n\t\t\t// deltas\n\n\t\t\tthis.delta = 2.0 / this.size;\n\t\t\tthis.yd = this.size;\n\t\t\tthis.zd = this.size2;\n\n\t\t\tthis.field = new Float32Array( this.size3 );\n\t\t\tthis.normal_cache = new Float32Array( this.size3 * 3 );\n\t\t\tthis.palette = new Float32Array( this.size3 * 3 );\n\n\t\t\t//\n\n\t\t\tthis.count = 0;\n\n\t\t\tconst maxVertexCount = maxPolyCount * 3;\n\n\t\t\tthis.positionArray = new Float32Array( maxVertexCount * 3 );\n\t\t\tconst positionAttribute = new BufferAttribute( this.positionArray, 3 );\n\t\t\tpositionAttribute.setUsage( DynamicDrawUsage );\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\n\t\t\tthis.normalArray = new Float32Array( maxVertexCount * 3 );\n\t\t\tconst normalAttribute = new BufferAttribute( this.normalArray, 3 );\n\t\t\tnormalAttribute.setUsage( DynamicDrawUsage );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\n\t\t\tif ( this.enableUvs ) {\n\n\t\t\t\tthis.uvArray = new Float32Array( maxVertexCount * 2 );\n\t\t\t\tconst uvAttribute = new BufferAttribute( this.uvArray, 2 );\n\t\t\t\tuvAttribute.setUsage( DynamicDrawUsage );\n\t\t\t\tgeometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\t}\n\n\t\t\tif ( this.enableColors ) {\n\n\t\t\t\tthis.colorArray = new Float32Array( maxVertexCount * 3 );\n\t\t\t\tconst colorAttribute = new BufferAttribute( this.colorArray, 3 );\n\t\t\t\tcolorAttribute.setUsage( DynamicDrawUsage );\n\t\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( new Vector3(), 1 );\n\n\t\t};\n\n\t\t///////////////////////\n\t\t// Polygonization\n\t\t///////////////////////\n\n\t\tfunction lerp( a, b, t ) {\n\n\t\t\treturn a + ( b - a ) * t;\n\n\t\t}\n\n\t\tfunction VIntX( q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2 ) {\n\n\t\t\tconst mu = ( isol - valp1 ) / ( valp2 - valp1 ),\n\t\t\t\tnc = scope.normal_cache;\n\n\t\t\tvlist[ offset + 0 ] = x + mu * scope.delta;\n\t\t\tvlist[ offset + 1 ] = y;\n\t\t\tvlist[ offset + 2 ] = z;\n\n\t\t\tnlist[ offset + 0 ] = lerp( nc[ q + 0 ], nc[ q + 3 ], mu );\n\t\t\tnlist[ offset + 1 ] = lerp( nc[ q + 1 ], nc[ q + 4 ], mu );\n\t\t\tnlist[ offset + 2 ] = lerp( nc[ q + 2 ], nc[ q + 5 ], mu );\n\n\t\t\tclist[ offset + 0 ] = lerp( scope.palette[ c_offset1 * 3 + 0 ], scope.palette[ c_offset2 * 3 + 0 ], mu );\n\t\t\tclist[ offset + 1 ] = lerp( scope.palette[ c_offset1 * 3 + 1 ], scope.palette[ c_offset2 * 3 + 1 ], mu );\n\t\t\tclist[ offset + 2 ] = lerp( scope.palette[ c_offset1 * 3 + 2 ], scope.palette[ c_offset2 * 3 + 2 ], mu );\n\n\t\t}\n\n\t\tfunction VIntY( q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2 ) {\n\n\t\t\tconst mu = ( isol - valp1 ) / ( valp2 - valp1 ),\n\t\t\t\tnc = scope.normal_cache;\n\n\t\t\tvlist[ offset + 0 ] = x;\n\t\t\tvlist[ offset + 1 ] = y + mu * scope.delta;\n\t\t\tvlist[ offset + 2 ] = z;\n\n\t\t\tconst q2 = q + scope.yd * 3;\n\n\t\t\tnlist[ offset + 0 ] = lerp( nc[ q + 0 ], nc[ q2 + 0 ], mu );\n\t\t\tnlist[ offset + 1 ] = lerp( nc[ q + 1 ], nc[ q2 + 1 ], mu );\n\t\t\tnlist[ offset + 2 ] = lerp( nc[ q + 2 ], nc[ q2 + 2 ], mu );\n\n\t\t\tclist[ offset + 0 ] = lerp( scope.palette[ c_offset1 * 3 + 0 ], scope.palette[ c_offset2 * 3 + 0 ], mu );\n\t\t\tclist[ offset + 1 ] = lerp( scope.palette[ c_offset1 * 3 + 1 ], scope.palette[ c_offset2 * 3 + 1 ], mu );\n\t\t\tclist[ offset + 2 ] = lerp( scope.palette[ c_offset1 * 3 + 2 ], scope.palette[ c_offset2 * 3 + 2 ], mu );\n\n\t\t}\n\n\t\tfunction VIntZ( q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2 ) {\n\n\t\t\tconst mu = ( isol - valp1 ) / ( valp2 - valp1 ),\n\t\t\t\tnc = scope.normal_cache;\n\n\t\t\tvlist[ offset + 0 ] = x;\n\t\t\tvlist[ offset + 1 ] = y;\n\t\t\tvlist[ offset + 2 ] = z + mu * scope.delta;\n\n\t\t\tconst q2 = q + scope.zd * 3;\n\n\t\t\tnlist[ offset + 0 ] = lerp( nc[ q + 0 ], nc[ q2 + 0 ], mu );\n\t\t\tnlist[ offset + 1 ] = lerp( nc[ q + 1 ], nc[ q2 + 1 ], mu );\n\t\t\tnlist[ offset + 2 ] = lerp( nc[ q + 2 ], nc[ q2 + 2 ], mu );\n\n\t\t\tclist[ offset + 0 ] = lerp( scope.palette[ c_offset1 * 3 + 0 ], scope.palette[ c_offset2 * 3 + 0 ], mu );\n\t\t\tclist[ offset + 1 ] = lerp( scope.palette[ c_offset1 * 3 + 1 ], scope.palette[ c_offset2 * 3 + 1 ], mu );\n\t\t\tclist[ offset + 2 ] = lerp( scope.palette[ c_offset1 * 3 + 2 ], scope.palette[ c_offset2 * 3 + 2 ], mu );\n\n\t\t}\n\n\t\tfunction compNorm( q ) {\n\n\t\t\tconst q3 = q * 3;\n\n\t\t\tif ( scope.normal_cache[ q3 ] === 0.0 ) {\n\n\t\t\t\tscope.normal_cache[ q3 + 0 ] = scope.field[ q - 1 ] - scope.field[ q + 1 ];\n\t\t\t\tscope.normal_cache[ q3 + 1 ] =\n\t\t\t\t\tscope.field[ q - scope.yd ] - scope.field[ q + scope.yd ];\n\t\t\t\tscope.normal_cache[ q3 + 2 ] =\n\t\t\t\t\tscope.field[ q - scope.zd ] - scope.field[ q + scope.zd ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Returns total number of triangles. Fills triangles.\n\t\t// (this is where most of time is spent - it's inner work of O(n3) loop )\n\n\t\tfunction polygonize( fx, fy, fz, q, isol ) {\n\n\t\t\t// cache indices\n\t\t\tconst q1 = q + 1,\n\t\t\t\tqy = q + scope.yd,\n\t\t\t\tqz = q + scope.zd,\n\t\t\t\tq1y = q1 + scope.yd,\n\t\t\t\tq1z = q1 + scope.zd,\n\t\t\t\tqyz = q + scope.yd + scope.zd,\n\t\t\t\tq1yz = q1 + scope.yd + scope.zd;\n\n\t\t\tlet cubeindex = 0;\n\t\t\tconst field0 = scope.field[ q ],\n\t\t\t\tfield1 = scope.field[ q1 ],\n\t\t\t\tfield2 = scope.field[ qy ],\n\t\t\t\tfield3 = scope.field[ q1y ],\n\t\t\t\tfield4 = scope.field[ qz ],\n\t\t\t\tfield5 = scope.field[ q1z ],\n\t\t\t\tfield6 = scope.field[ qyz ],\n\t\t\t\tfield7 = scope.field[ q1yz ];\n\n\t\t\tif ( field0 < isol ) cubeindex |= 1;\n\t\t\tif ( field1 < isol ) cubeindex |= 2;\n\t\t\tif ( field2 < isol ) cubeindex |= 8;\n\t\t\tif ( field3 < isol ) cubeindex |= 4;\n\t\t\tif ( field4 < isol ) cubeindex |= 16;\n\t\t\tif ( field5 < isol ) cubeindex |= 32;\n\t\t\tif ( field6 < isol ) cubeindex |= 128;\n\t\t\tif ( field7 < isol ) cubeindex |= 64;\n\n\t\t\t// if cube is entirely in/out of the surface - bail, nothing to draw\n\n\t\t\tconst bits = edgeTable[ cubeindex ];\n\t\t\tif ( bits === 0 ) return 0;\n\n\t\t\tconst d = scope.delta,\n\t\t\t\tfx2 = fx + d,\n\t\t\t\tfy2 = fy + d,\n\t\t\t\tfz2 = fz + d;\n\n\t\t\t// top of the cube\n\n\t\t\tif ( bits & 1 ) {\n\n\t\t\t\tcompNorm( q );\n\t\t\t\tcompNorm( q1 );\n\t\t\t\tVIntX( q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1 );\n\n\t\t\t}\n\n\t\t\tif ( bits & 2 ) {\n\n\t\t\t\tcompNorm( q1 );\n\t\t\t\tcompNorm( q1y );\n\t\t\t\tVIntY( q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y );\n\n\t\t\t}\n\n\t\t\tif ( bits & 4 ) {\n\n\t\t\t\tcompNorm( qy );\n\t\t\t\tcompNorm( q1y );\n\t\t\t\tVIntX( qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y );\n\n\t\t\t}\n\n\t\t\tif ( bits & 8 ) {\n\n\t\t\t\tcompNorm( q );\n\t\t\t\tcompNorm( qy );\n\t\t\t\tVIntY( q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy );\n\n\t\t\t}\n\n\t\t\t// bottom of the cube\n\n\t\t\tif ( bits & 16 ) {\n\n\t\t\t\tcompNorm( qz );\n\t\t\t\tcompNorm( q1z );\n\t\t\t\tVIntX( qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z );\n\n\t\t\t}\n\n\t\t\tif ( bits & 32 ) {\n\n\t\t\t\tcompNorm( q1z );\n\t\t\t\tcompNorm( q1yz );\n\t\t\t\tVIntY(\n\t\t\t\t\tq1z * 3,\n\t\t\t\t\t15,\n\t\t\t\t\tisol,\n\t\t\t\t\tfx2,\n\t\t\t\t\tfy,\n\t\t\t\t\tfz2,\n\t\t\t\t\tfield5,\n\t\t\t\t\tfield7,\n\t\t\t\t\tq1z,\n\t\t\t\t\tq1yz\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( bits & 64 ) {\n\n\t\t\t\tcompNorm( qyz );\n\t\t\t\tcompNorm( q1yz );\n\t\t\t\tVIntX(\n\t\t\t\t\tqyz * 3,\n\t\t\t\t\t18,\n\t\t\t\t\tisol,\n\t\t\t\t\tfx,\n\t\t\t\t\tfy2,\n\t\t\t\t\tfz2,\n\t\t\t\t\tfield6,\n\t\t\t\t\tfield7,\n\t\t\t\t\tqyz,\n\t\t\t\t\tq1yz\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( bits & 128 ) {\n\n\t\t\t\tcompNorm( qz );\n\t\t\t\tcompNorm( qyz );\n\t\t\t\tVIntY( qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz );\n\n\t\t\t}\n\n\t\t\t// vertical lines of the cube\n\t\t\tif ( bits & 256 ) {\n\n\t\t\t\tcompNorm( q );\n\t\t\t\tcompNorm( qz );\n\t\t\t\tVIntZ( q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz );\n\n\t\t\t}\n\n\t\t\tif ( bits & 512 ) {\n\n\t\t\t\tcompNorm( q1 );\n\t\t\t\tcompNorm( q1z );\n\t\t\t\tVIntZ( q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z );\n\n\t\t\t}\n\n\t\t\tif ( bits & 1024 ) {\n\n\t\t\t\tcompNorm( q1y );\n\t\t\t\tcompNorm( q1yz );\n\t\t\t\tVIntZ(\n\t\t\t\t\tq1y * 3,\n\t\t\t\t\t30,\n\t\t\t\t\tisol,\n\t\t\t\t\tfx2,\n\t\t\t\t\tfy2,\n\t\t\t\t\tfz,\n\t\t\t\t\tfield3,\n\t\t\t\t\tfield7,\n\t\t\t\t\tq1y,\n\t\t\t\t\tq1yz\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( bits & 2048 ) {\n\n\t\t\t\tcompNorm( qy );\n\t\t\t\tcompNorm( qyz );\n\t\t\t\tVIntZ( qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz );\n\n\t\t\t}\n\n\t\t\tcubeindex <<= 4; // re-purpose cubeindex into an offset into triTable\n\n\t\t\tlet o1,\n\t\t\t\to2,\n\t\t\t\to3,\n\t\t\t\tnumtris = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// here is where triangles are created\n\n\t\t\twhile ( triTable[ cubeindex + i ] != - 1 ) {\n\n\t\t\t\to1 = cubeindex + i;\n\t\t\t\to2 = o1 + 1;\n\t\t\t\to3 = o1 + 2;\n\n\t\t\t\tposnormtriv(\n\t\t\t\t\tvlist,\n\t\t\t\t\tnlist,\n\t\t\t\t\tclist,\n\t\t\t\t\t3 * triTable[ o1 ],\n\t\t\t\t\t3 * triTable[ o2 ],\n\t\t\t\t\t3 * triTable[ o3 ]\n\t\t\t\t);\n\n\t\t\t\ti += 3;\n\t\t\t\tnumtris ++;\n\n\t\t\t}\n\n\t\t\treturn numtris;\n\n\t\t}\n\n\t\tfunction posnormtriv( pos, norm, colors, o1, o2, o3 ) {\n\n\t\t\tconst c = scope.count * 3;\n\n\t\t\t// positions\n\n\t\t\tscope.positionArray[ c + 0 ] = pos[ o1 ];\n\t\t\tscope.positionArray[ c + 1 ] = pos[ o1 + 1 ];\n\t\t\tscope.positionArray[ c + 2 ] = pos[ o1 + 2 ];\n\n\t\t\tscope.positionArray[ c + 3 ] = pos[ o2 ];\n\t\t\tscope.positionArray[ c + 4 ] = pos[ o2 + 1 ];\n\t\t\tscope.positionArray[ c + 5 ] = pos[ o2 + 2 ];\n\n\t\t\tscope.positionArray[ c + 6 ] = pos[ o3 ];\n\t\t\tscope.positionArray[ c + 7 ] = pos[ o3 + 1 ];\n\t\t\tscope.positionArray[ c + 8 ] = pos[ o3 + 2 ];\n\n\t\t\t// normals\n\n\t\t\tif ( scope.material.flatShading === true ) {\n\n\t\t\t\tconst nx = ( norm[ o1 + 0 ] + norm[ o2 + 0 ] + norm[ o3 + 0 ] ) / 3;\n\t\t\t\tconst ny = ( norm[ o1 + 1 ] + norm[ o2 + 1 ] + norm[ o3 + 1 ] ) / 3;\n\t\t\t\tconst nz = ( norm[ o1 + 2 ] + norm[ o2 + 2 ] + norm[ o3 + 2 ] ) / 3;\n\n\t\t\t\tscope.normalArray[ c + 0 ] = nx;\n\t\t\t\tscope.normalArray[ c + 1 ] = ny;\n\t\t\t\tscope.normalArray[ c + 2 ] = nz;\n\n\t\t\t\tscope.normalArray[ c + 3 ] = nx;\n\t\t\t\tscope.normalArray[ c + 4 ] = ny;\n\t\t\t\tscope.normalArray[ c + 5 ] = nz;\n\n\t\t\t\tscope.normalArray[ c + 6 ] = nx;\n\t\t\t\tscope.normalArray[ c + 7 ] = ny;\n\t\t\t\tscope.normalArray[ c + 8 ] = nz;\n\n\t\t\t} else {\n\n\t\t\t\tscope.normalArray[ c + 0 ] = norm[ o1 + 0 ];\n\t\t\t\tscope.normalArray[ c + 1 ] = norm[ o1 + 1 ];\n\t\t\t\tscope.normalArray[ c + 2 ] = norm[ o1 + 2 ];\n\n\t\t\t\tscope.normalArray[ c + 3 ] = norm[ o2 + 0 ];\n\t\t\t\tscope.normalArray[ c + 4 ] = norm[ o2 + 1 ];\n\t\t\t\tscope.normalArray[ c + 5 ] = norm[ o2 + 2 ];\n\n\t\t\t\tscope.normalArray[ c + 6 ] = norm[ o3 + 0 ];\n\t\t\t\tscope.normalArray[ c + 7 ] = norm[ o3 + 1 ];\n\t\t\t\tscope.normalArray[ c + 8 ] = norm[ o3 + 2 ];\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( scope.enableUvs ) {\n\n\t\t\t\tconst d = scope.count * 2;\n\n\t\t\t\tscope.uvArray[ d + 0 ] = pos[ o1 + 0 ];\n\t\t\t\tscope.uvArray[ d + 1 ] = pos[ o1 + 2 ];\n\n\t\t\t\tscope.uvArray[ d + 2 ] = pos[ o2 + 0 ];\n\t\t\t\tscope.uvArray[ d + 3 ] = pos[ o2 + 2 ];\n\n\t\t\t\tscope.uvArray[ d + 4 ] = pos[ o3 + 0 ];\n\t\t\t\tscope.uvArray[ d + 5 ] = pos[ o3 + 2 ];\n\n\t\t\t}\n\n\t\t\t// colors\n\n\t\t\tif ( scope.enableColors ) {\n\n\t\t\t\tscope.colorArray[ c + 0 ] = colors[ o1 + 0 ];\n\t\t\t\tscope.colorArray[ c + 1 ] = colors[ o1 + 1 ];\n\t\t\t\tscope.colorArray[ c + 2 ] = colors[ o1 + 2 ];\n\n\t\t\t\tscope.colorArray[ c + 3 ] = colors[ o2 + 0 ];\n\t\t\t\tscope.colorArray[ c + 4 ] = colors[ o2 + 1 ];\n\t\t\t\tscope.colorArray[ c + 5 ] = colors[ o2 + 2 ];\n\n\t\t\t\tscope.colorArray[ c + 6 ] = colors[ o3 + 0 ];\n\t\t\t\tscope.colorArray[ c + 7 ] = colors[ o3 + 1 ];\n\t\t\t\tscope.colorArray[ c + 8 ] = colors[ o3 + 2 ];\n\n\t\t\t}\n\n\t\t\tscope.count += 3;\n\n\t\t}\n\n\t\t/////////////////////////////////////\n\t\t// Metaballs\n\t\t/////////////////////////////////////\n\n\t\t// Adds a reciprocal ball (nice and blobby) that, to be fast, fades to zero after\n\t\t// a fixed distance, determined by strength and subtract.\n\n\t\tthis.addBall = function ( ballx, bally, ballz, strength, subtract, colors ) {\n\n\t\t\tconst sign = Math.sign( strength );\n\t\t\tstrength = Math.abs( strength );\n\t\t\tconst userDefineColor = ! ( colors === undefined || colors === null );\n\t\t\tlet ballColor = new Color( ballx, bally, ballz );\n\n\t\t\tif ( userDefineColor ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tballColor =\n\t\t\t\t\t\tcolors instanceof Color\n\t\t\t\t\t\t\t? colors\n\t\t\t\t\t\t\t: Array.isArray( colors )\n\t\t\t\t\t\t\t\t? new Color(\n\t\t\t\t\t\t\t\t\tMath.min( Math.abs( colors[ 0 ] ), 1 ),\n\t\t\t\t\t\t\t\t\tMath.min( Math.abs( colors[ 1 ] ), 1 ),\n\t\t\t\t\t\t\t\t\tMath.min( Math.abs( colors[ 2 ] ), 1 )\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: new Color( colors );\n\n\t\t\t\t} catch ( err ) {\n\n\t\t\t\t\tballColor = new Color( ballx, bally, ballz );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Let's solve the equation to find the radius:\n\t\t\t// 1.0 / (0.000001 + radius^2) * strength - subtract = 0\n\t\t\t// strength / (radius^2) = subtract\n\t\t\t// strength = subtract * radius^2\n\t\t\t// radius^2 = strength / subtract\n\t\t\t// radius = sqrt(strength / subtract)\n\n\t\t\tconst radius = this.size * Math.sqrt( strength / subtract ),\n\t\t\t\tzs = ballz * this.size,\n\t\t\t\tys = bally * this.size,\n\t\t\t\txs = ballx * this.size;\n\n\t\t\tlet min_z = Math.floor( zs - radius );\n\t\t\tif ( min_z < 1 ) min_z = 1;\n\t\t\tlet max_z = Math.floor( zs + radius );\n\t\t\tif ( max_z > this.size - 1 ) max_z = this.size - 1;\n\t\t\tlet min_y = Math.floor( ys - radius );\n\t\t\tif ( min_y < 1 ) min_y = 1;\n\t\t\tlet max_y = Math.floor( ys + radius );\n\t\t\tif ( max_y > this.size - 1 ) max_y = this.size - 1;\n\t\t\tlet min_x = Math.floor( xs - radius );\n\t\t\tif ( min_x < 1 ) min_x = 1;\n\t\t\tlet max_x = Math.floor( xs + radius );\n\t\t\tif ( max_x > this.size - 1 ) max_x = this.size - 1;\n\n\t\t\t// Don't polygonize in the outer layer because normals aren't\n\t\t\t// well-defined there.\n\n\t\t\tlet x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val;\n\n\t\t\tfor ( z = min_z; z < max_z; z ++ ) {\n\n\t\t\t\tz_offset = this.size2 * z;\n\t\t\t\tfz = z / this.size - ballz;\n\t\t\t\tfz2 = fz * fz;\n\n\t\t\t\tfor ( y = min_y; y < max_y; y ++ ) {\n\n\t\t\t\t\ty_offset = z_offset + this.size * y;\n\t\t\t\t\tfy = y / this.size - bally;\n\t\t\t\t\tfy2 = fy * fy;\n\n\t\t\t\t\tfor ( x = min_x; x < max_x; x ++ ) {\n\n\t\t\t\t\t\tfx = x / this.size - ballx;\n\t\t\t\t\t\tval = strength / ( 0.000001 + fx * fx + fy2 + fz2 ) - subtract;\n\t\t\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\t\t\tthis.field[ y_offset + x ] += val * sign;\n\n\t\t\t\t\t\t\t// optimization\n\t\t\t\t\t\t\t// http://www.geisswerks.com/ryan/BLOBS/blobs.html\n\t\t\t\t\t\t\tconst ratio =\n\t\t\t\t\t\t\t\tMath.sqrt( ( x - xs ) * ( x - xs ) + ( y - ys ) * ( y - ys ) + ( z - zs ) * ( z - zs ) ) / radius;\n\t\t\t\t\t\t\tconst contrib =\n\t\t\t\t\t\t\t\t1 - ratio * ratio * ratio * ( ratio * ( ratio * 6 - 15 ) + 10 );\n\t\t\t\t\t\t\tthis.palette[ ( y_offset + x ) * 3 + 0 ] += ballColor.r * contrib;\n\t\t\t\t\t\t\tthis.palette[ ( y_offset + x ) * 3 + 1 ] += ballColor.g * contrib;\n\t\t\t\t\t\t\tthis.palette[ ( y_offset + x ) * 3 + 2 ] += ballColor.b * contrib;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.addPlaneX = function ( strength, subtract ) {\n\n\t\t\t// cache attribute lookups\n\t\t\tconst size = this.size,\n\t\t\t\tyd = this.yd,\n\t\t\t\tzd = this.zd,\n\t\t\t\tfield = this.field;\n\n\t\t\tlet x,\n\t\t\t\ty,\n\t\t\t\tz,\n\t\t\t\txx,\n\t\t\t\tval,\n\t\t\t\txdiv,\n\t\t\t\tcxy,\n\t\t\t\tdist = size * Math.sqrt( strength / subtract );\n\n\t\t\tif ( dist > size ) dist = size;\n\n\t\t\tfor ( x = 0; x < dist; x ++ ) {\n\n\t\t\t\txdiv = x / size;\n\t\t\t\txx = xdiv * xdiv;\n\t\t\t\tval = strength / ( 0.0001 + xx ) - subtract;\n\n\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\tfor ( y = 0; y < size; y ++ ) {\n\n\t\t\t\t\t\tcxy = x + y * yd;\n\n\t\t\t\t\t\tfor ( z = 0; z < size; z ++ ) {\n\n\t\t\t\t\t\t\tfield[ zd * z + cxy ] += val;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.addPlaneY = function ( strength, subtract ) {\n\n\t\t\t// cache attribute lookups\n\t\t\tconst size = this.size,\n\t\t\t\tyd = this.yd,\n\t\t\t\tzd = this.zd,\n\t\t\t\tfield = this.field;\n\n\t\t\tlet x,\n\t\t\t\ty,\n\t\t\t\tz,\n\t\t\t\tyy,\n\t\t\t\tval,\n\t\t\t\tydiv,\n\t\t\t\tcy,\n\t\t\t\tcxy,\n\t\t\t\tdist = size * Math.sqrt( strength / subtract );\n\n\t\t\tif ( dist > size ) dist = size;\n\n\t\t\tfor ( y = 0; y < dist; y ++ ) {\n\n\t\t\t\tydiv = y / size;\n\t\t\t\tyy = ydiv * ydiv;\n\t\t\t\tval = strength / ( 0.0001 + yy ) - subtract;\n\n\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\tcy = y * yd;\n\n\t\t\t\t\tfor ( x = 0; x < size; x ++ ) {\n\n\t\t\t\t\t\tcxy = cy + x;\n\n\t\t\t\t\t\tfor ( z = 0; z < size; z ++ ) field[ zd * z + cxy ] += val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.addPlaneZ = function ( strength, subtract ) {\n\n\t\t\t// cache attribute lookups\n\n\t\t\tconst size = this.size,\n\t\t\t\tyd = this.yd,\n\t\t\t\tzd = this.zd,\n\t\t\t\tfield = this.field;\n\n\t\t\tlet x,\n\t\t\t\ty,\n\t\t\t\tz,\n\t\t\t\tzz,\n\t\t\t\tval,\n\t\t\t\tzdiv,\n\t\t\t\tcz,\n\t\t\t\tcyz,\n\t\t\t\tdist = size * Math.sqrt( strength / subtract );\n\n\t\t\tif ( dist > size ) dist = size;\n\n\t\t\tfor ( z = 0; z < dist; z ++ ) {\n\n\t\t\t\tzdiv = z / size;\n\t\t\t\tzz = zdiv * zdiv;\n\t\t\t\tval = strength / ( 0.0001 + zz ) - subtract;\n\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\tcz = zd * z;\n\n\t\t\t\t\tfor ( y = 0; y < size; y ++ ) {\n\n\t\t\t\t\t\tcyz = cz + y * yd;\n\n\t\t\t\t\t\tfor ( x = 0; x < size; x ++ ) field[ cyz + x ] += val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/////////////////////////////////////\n\t\t// Updates\n\t\t/////////////////////////////////////\n\n\t\tthis.setCell = function ( x, y, z, value ) {\n\n\t\t\tconst index = this.size2 * z + this.size * y + x;\n\t\t\tthis.field[ index ] = value;\n\n\t\t};\n\n\t\tthis.getCell = function ( x, y, z ) {\n\n\t\t\tconst index = this.size2 * z + this.size * y + x;\n\t\t\treturn this.field[ index ];\n\n\t\t};\n\n\t\tthis.blur = function ( intensity = 1 ) {\n\n\t\t\tconst field = this.field;\n\t\t\tconst fieldCopy = field.slice();\n\t\t\tconst size = this.size;\n\t\t\tconst size2 = this.size2;\n\t\t\tfor ( let x = 0; x < size; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < size; y ++ ) {\n\n\t\t\t\t\tfor ( let z = 0; z < size; z ++ ) {\n\n\t\t\t\t\t\tconst index = size2 * z + size * y + x;\n\t\t\t\t\t\tlet val = fieldCopy[ index ];\n\t\t\t\t\t\tlet count = 1;\n\n\t\t\t\t\t\tfor ( let x2 = - 1; x2 <= 1; x2 += 2 ) {\n\n\t\t\t\t\t\t\tconst x3 = x2 + x;\n\t\t\t\t\t\t\tif ( x3 < 0 || x3 >= size ) continue;\n\n\t\t\t\t\t\t\tfor ( let y2 = - 1; y2 <= 1; y2 += 2 ) {\n\n\t\t\t\t\t\t\t\tconst y3 = y2 + y;\n\t\t\t\t\t\t\t\tif ( y3 < 0 || y3 >= size ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let z2 = - 1; z2 <= 1; z2 += 2 ) {\n\n\t\t\t\t\t\t\t\t\tconst z3 = z2 + z;\n\t\t\t\t\t\t\t\t\tif ( z3 < 0 || z3 >= size ) continue;\n\n\t\t\t\t\t\t\t\t\tconst index2 = size2 * z3 + size * y3 + x3;\n\t\t\t\t\t\t\t\t\tconst val2 = fieldCopy[ index2 ];\n\n\t\t\t\t\t\t\t\t\tcount ++;\n\t\t\t\t\t\t\t\t\tval += intensity * ( val2 - val ) / count;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfield[ index ] = val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\t// wipe the normal cache\n\n\t\t\tfor ( let i = 0; i < this.size3; i ++ ) {\n\n\t\t\t\tthis.normal_cache[ i * 3 ] = 0.0;\n\t\t\t\tthis.field[ i ] = 0.0;\n\t\t\t\tthis.palette[ i * 3 ] = this.palette[ i * 3 + 1 ] = this.palette[\n\t\t\t\t\ti * 3 + 2\n\t\t\t\t] = 0.0;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\tthis.count = 0;\n\n\t\t\t// Triangulate. Yeah, this is slow.\n\n\t\t\tconst smin2 = this.size - 2;\n\n\t\t\tfor ( let z = 1; z < smin2; z ++ ) {\n\n\t\t\t\tconst z_offset = this.size2 * z;\n\t\t\t\tconst fz = ( z - this.halfsize ) / this.halfsize; //+ 1\n\n\t\t\t\tfor ( let y = 1; y < smin2; y ++ ) {\n\n\t\t\t\t\tconst y_offset = z_offset + this.size * y;\n\t\t\t\t\tconst fy = ( y - this.halfsize ) / this.halfsize; //+ 1\n\n\t\t\t\t\tfor ( let x = 1; x < smin2; x ++ ) {\n\n\t\t\t\t\t\tconst fx = ( x - this.halfsize ) / this.halfsize; //+ 1\n\t\t\t\t\t\tconst q = y_offset + x;\n\n\t\t\t\t\t\t polygonize( fx, fy, fz, q, this.isolation );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// set the draw range to only the processed triangles\n\n\t\t\tthis.geometry.setDrawRange( 0, this.count );\n\n\t\t\t// update geometry data\n\n\t\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\t\t\tgeometry.getAttribute( 'normal' ).needsUpdate = true;\n\n\t\t\tif ( this.enableUvs ) geometry.getAttribute( 'uv' ).needsUpdate = true;\n\t\t\tif ( this.enableColors ) geometry.getAttribute( 'color' ).needsUpdate = true;\n\n\t\t\t// safety check\n\n\t\t\tif ( this.count / 3 > maxPolyCount ) console.warn( 'THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count.' );\n\n\t\t};\n\n\t\tthis.init( resolution );\n\n\t}\n\n}\n\n/////////////////////////////////////\n// Marching cubes lookup tables\n/////////////////////////////////////\n\n// These tables are straight from Paul Bourke's page:\n// http://paulbourke.net/geometry/polygonise/\n// who in turn got them from Cory Gene Bloyd.\n\nconst edgeTable = new Int32Array( [\n\t0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\n\t0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\n\t0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\n\t0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\n\t0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\n\t0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\n\t0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\n\t0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\n\t0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\n\t0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\n\t0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\n\t0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\n\t0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\n\t0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\n\t0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\n\t0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\n\t0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\n\t0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\n\t0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\n\t0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\n\t0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\n\t0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\n\t0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\n\t0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\n\t0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\n\t0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\n\t0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\n\t0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\n\t0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\n\t0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\n\t0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\n\t0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0 ] );\n\nconst triTable = new Int32Array( [\n\t- 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 8, 3, 9, 8, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 2, 10, 0, 2, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 8, 3, 2, 10, 8, 10, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 11, 2, 8, 11, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 11, 2, 1, 9, 11, 9, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 10, 1, 11, 10, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 10, 1, 0, 8, 10, 8, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 9, 0, 3, 11, 9, 11, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 3, 0, 7, 3, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 1, 9, 4, 7, 1, 7, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 4, 7, 3, 0, 4, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 2, 10, 9, 0, 2, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1,\n\t8, 4, 7, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 4, 7, 11, 2, 4, 2, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 8, 4, 7, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, - 1, - 1, - 1, - 1,\n\t3, 10, 1, 3, 11, 10, 7, 8, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, - 1, - 1, - 1, - 1,\n\t4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1,\n\t4, 7, 11, 4, 11, 9, 9, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 5, 4, 1, 5, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 5, 4, 8, 3, 5, 3, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 1, 2, 10, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 2, 10, 5, 4, 2, 4, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 11, 2, 0, 8, 11, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 5, 4, 0, 1, 5, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, - 1, - 1, - 1, - 1,\n\t10, 3, 11, 10, 1, 3, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, - 1, - 1, - 1, - 1,\n\t5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1,\n\t5, 4, 8, 5, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 7, 8, 5, 7, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 3, 0, 9, 5, 3, 5, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 7, 8, 0, 1, 7, 1, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 7, 8, 9, 5, 7, 10, 1, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, - 1, - 1, - 1, - 1,\n\t8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, - 1, - 1, - 1, - 1,\n\t2, 10, 5, 2, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 9, 5, 7, 8, 9, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, - 1, - 1, - 1, - 1,\n\t11, 2, 1, 11, 1, 7, 7, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, - 1, - 1, - 1, - 1,\n\t5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, - 1,\n\t11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, - 1,\n\t11, 10, 5, 7, 11, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 8, 3, 1, 9, 8, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 5, 2, 6, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 5, 1, 2, 6, 3, 0, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 6, 5, 9, 0, 6, 0, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 0, 8, 11, 2, 0, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, - 1, - 1, - 1, - 1,\n\t6, 3, 11, 6, 5, 3, 5, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1,\n\t3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, - 1, - 1, - 1, - 1,\n\t6, 5, 9, 6, 9, 11, 11, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 3, 0, 4, 7, 3, 6, 5, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 5, 10, 6, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1,\n\t6, 1, 2, 6, 5, 1, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, - 1, - 1, - 1, - 1,\n\t8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, - 1, - 1, - 1, - 1,\n\t7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, - 1,\n\t3, 11, 2, 7, 8, 4, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1,\n\t9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, - 1,\n\t8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1,\n\t5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, - 1,\n\t0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, - 1,\n\t6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, - 1, - 1, - 1, - 1,\n\t10, 4, 9, 6, 4, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 10, 6, 4, 9, 10, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 0, 1, 10, 6, 0, 6, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1,\n\t1, 4, 9, 1, 2, 4, 2, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, - 1, - 1, - 1, - 1,\n\t0, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 3, 2, 8, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 4, 9, 10, 6, 4, 11, 2, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, - 1, - 1, - 1, - 1,\n\t3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1,\n\t6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, - 1,\n\t9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, - 1, - 1, - 1, - 1,\n\t8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, - 1,\n\t3, 11, 6, 3, 6, 0, 0, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 4, 8, 11, 6, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 10, 6, 7, 8, 10, 8, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, - 1, - 1, - 1, - 1,\n\t10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, - 1, - 1, - 1, - 1,\n\t10, 6, 7, 10, 7, 1, 1, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1,\n\t2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, - 1,\n\t7, 8, 0, 7, 0, 6, 6, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 3, 2, 6, 7, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1,\n\t2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, - 1,\n\t1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, - 1,\n\t11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, - 1, - 1, - 1, - 1,\n\t8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, - 1,\n\t0, 9, 1, 11, 6, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, - 1, - 1, - 1, - 1,\n\t7, 11, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 1, 9, 8, 3, 1, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 1, 2, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 3, 0, 8, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 9, 0, 2, 10, 9, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, - 1, - 1, - 1, - 1,\n\t7, 2, 3, 6, 2, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 0, 8, 7, 6, 0, 6, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 7, 6, 2, 3, 7, 0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, - 1, - 1, - 1, - 1,\n\t10, 7, 6, 10, 1, 7, 1, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, - 1, - 1, - 1, - 1,\n\t0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, - 1, - 1, - 1, - 1,\n\t7, 6, 10, 7, 10, 8, 8, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 8, 4, 11, 8, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 6, 11, 3, 0, 6, 0, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 6, 11, 8, 4, 6, 9, 0, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, - 1, - 1, - 1, - 1,\n\t6, 8, 4, 6, 11, 8, 2, 10, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, - 1, - 1, - 1, - 1,\n\t4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, - 1, - 1, - 1, - 1,\n\t10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, - 1,\n\t8, 2, 3, 8, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, - 1, - 1, - 1, - 1,\n\t1, 9, 4, 1, 4, 2, 2, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, - 1, - 1, - 1, - 1,\n\t10, 1, 0, 10, 0, 6, 6, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, - 1,\n\t10, 9, 4, 6, 10, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 5, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 4, 9, 5, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 0, 1, 5, 4, 0, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 10, 1, 2, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, - 1, - 1, - 1, - 1,\n\t7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, - 1, - 1, - 1, - 1,\n\t3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, - 1,\n\t7, 2, 3, 7, 6, 2, 5, 4, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, - 1, - 1, - 1, - 1,\n\t3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, - 1, - 1, - 1, - 1,\n\t6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, - 1,\n\t9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, - 1, - 1, - 1, - 1,\n\t1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, - 1,\n\t4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, - 1,\n\t7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, - 1, - 1, - 1, - 1,\n\t6, 9, 5, 6, 11, 9, 11, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, - 1, - 1, - 1, - 1,\n\t0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, - 1, - 1, - 1, - 1,\n\t6, 11, 3, 6, 3, 5, 5, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, - 1, - 1, - 1, - 1,\n\t0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, - 1,\n\t11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, - 1,\n\t6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, - 1, - 1, - 1, - 1,\n\t5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, - 1, - 1, - 1, - 1,\n\t9, 5, 6, 9, 6, 0, 0, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, - 1,\n\t1, 5, 6, 2, 1, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, - 1,\n\t10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, - 1, - 1, - 1, - 1,\n\t0, 3, 8, 5, 6, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 5, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 5, 10, 7, 5, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 5, 10, 11, 7, 5, 8, 3, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 11, 7, 5, 10, 11, 1, 9, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, - 1, - 1, - 1, - 1,\n\t11, 1, 2, 11, 7, 1, 7, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, - 1, - 1, - 1, - 1,\n\t9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, - 1, - 1, - 1, - 1,\n\t7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, - 1,\n\t2, 5, 10, 2, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, - 1, - 1, - 1, - 1,\n\t9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, - 1,\n\t1, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 7, 0, 7, 1, 1, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 3, 9, 3, 5, 5, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 8, 7, 5, 9, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 8, 4, 5, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, - 1, - 1, - 1, - 1,\n\t10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, - 1,\n\t2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, - 1, - 1, - 1, - 1,\n\t0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, - 1,\n\t0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, - 1,\n\t9, 4, 5, 2, 11, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, - 1, - 1, - 1, - 1,\n\t5, 10, 2, 5, 2, 4, 4, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, - 1,\n\t5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, - 1, - 1, - 1, - 1,\n\t8, 4, 5, 8, 5, 3, 3, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 4, 5, 1, 0, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, - 1, - 1, - 1, - 1,\n\t9, 4, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 11, 7, 4, 9, 11, 9, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, - 1, - 1, - 1, - 1,\n\t1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, - 1, - 1, - 1, - 1,\n\t3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, - 1,\n\t4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, - 1, - 1, - 1, - 1,\n\t9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, - 1,\n\t11, 7, 4, 11, 4, 2, 2, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, - 1, - 1, - 1, - 1,\n\t2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, - 1, - 1, - 1, - 1,\n\t9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, - 1,\n\t3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, - 1,\n\t1, 10, 2, 8, 7, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 1, 4, 1, 7, 7, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, - 1, - 1, - 1, - 1,\n\t4, 0, 3, 7, 4, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 8, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 9, 3, 9, 11, 11, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 10, 0, 10, 8, 8, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 1, 10, 11, 3, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 11, 1, 11, 9, 9, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, - 1, - 1, - 1, - 1,\n\t0, 2, 11, 8, 0, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 2, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 8, 2, 8, 10, 10, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 10, 2, 0, 9, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, - 1, - 1, - 1, - 1,\n\t1, 10, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 3, 8, 9, 1, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 9, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 3, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t- 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 ] );\n\nexport { MarchingCubes, edgeTable, triTable };\n", "import {\n\tColor,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tPlane,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget,\n\tHalfFloatType\n} from 'three';\n\nclass Reflector extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isReflector = true;\n\n\t\tthis.type = 'Reflector';\n\t\tthis.camera = new PerspectiveCamera();\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0x7F7F7F );\n\t\tconst textureWidth = options.textureWidth || 512;\n\t\tconst textureHeight = options.textureHeight || 512;\n\t\tconst clipBias = options.clipBias || 0;\n\t\tconst shader = options.shader || Reflector.ReflectorShader;\n\t\tconst multisample = ( options.multisample !== undefined ) ? options.multisample : 4;\n\n\t\t//\n\n\t\tconst reflectorPlane = new Plane();\n\t\tconst normal = new Vector3();\n\t\tconst reflectorWorldPosition = new Vector3();\n\t\tconst cameraWorldPosition = new Vector3();\n\t\tconst rotationMatrix = new Matrix4();\n\t\tconst lookAtPosition = new Vector3( 0, 0, - 1 );\n\t\tconst clipPlane = new Vector4();\n\n\t\tconst view = new Vector3();\n\t\tconst target = new Vector3();\n\t\tconst q = new Vector4();\n\n\t\tconst textureMatrix = new Matrix4();\n\t\tconst virtualCamera = this.camera;\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tvertexShader: shader.vertexShader\n\t\t} );\n\n\t\tmaterial.uniforms[ 'tDiffuse' ].value = renderTarget.texture;\n\t\tmaterial.uniforms[ 'color' ].value = color;\n\t\tmaterial.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\n\t\tthis.material = material;\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\treflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\tnormal.set( 0, 0, 1 );\n\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\tview.subVectors( reflectorWorldPosition, cameraWorldPosition );\n\n\t\t\t// Avoid rendering when reflector is facing away\n\n\t\t\tif ( view.dot( normal ) > 0 ) return;\n\n\t\t\tview.reflect( normal ).negate();\n\t\t\tview.add( reflectorWorldPosition );\n\n\t\t\trotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t\tlookAtPosition.set( 0, 0, - 1 );\n\t\t\tlookAtPosition.applyMatrix4( rotationMatrix );\n\t\t\tlookAtPosition.add( cameraWorldPosition );\n\n\t\t\ttarget.subVectors( reflectorWorldPosition, lookAtPosition );\n\t\t\ttarget.reflect( normal ).negate();\n\t\t\ttarget.add( reflectorWorldPosition );\n\n\t\t\tvirtualCamera.position.copy( view );\n\t\t\tvirtualCamera.up.set( 0, 1, 0 );\n\t\t\tvirtualCamera.up.applyMatrix4( rotationMatrix );\n\t\t\tvirtualCamera.up.reflect( normal );\n\t\t\tvirtualCamera.lookAt( target );\n\n\t\t\tvirtualCamera.far = camera.far; // Used in WebGLBackground\n\n\t\t\tvirtualCamera.updateMatrixWorld();\n\t\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t// Update the texture matrix\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\t\t\ttextureMatrix.multiply( virtualCamera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( virtualCamera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t\t// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n\t\t\t// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n\t\t\treflectorPlane.setFromNormalAndCoplanarPoint( normal, reflectorWorldPosition );\n\t\t\treflectorPlane.applyMatrix4( virtualCamera.matrixWorldInverse );\n\n\t\t\tclipPlane.set( reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant );\n\n\t\t\tconst projectionMatrix = virtualCamera.projectionMatrix;\n\n\t\t\tq.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t\tq.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t\tq.z = - 1.0;\n\t\t\tq.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t\t// Calculate the scaled plane vector\n\t\t\tclipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );\n\n\t\t\t// Replacing the third row of the projection matrix\n\t\t\tprojectionMatrix.elements[ 2 ] = clipPlane.x;\n\t\t\tprojectionMatrix.elements[ 6 ] = clipPlane.y;\n\t\t\tprojectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;\n\t\t\tprojectionMatrix.elements[ 14 ] = clipPlane.w;\n\n\t\t\t// Render\n\t\t\tscope.visible = false;\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// Restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t\tscope.visible = true;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\trenderTarget.dispose();\n\t\t\tscope.material.dispose();\n\n\t\t};\n\n\t}\n\n}\n\nReflector.ReflectorShader = {\n\n\tname: 'ReflectorShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tDiffuse': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tuniform mat4 textureMatrix;\n\t\tvarying vec4 vUv;\n\n\t\t#include \n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec4 vUv;\n\n\t\t#include \n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n};\n\nexport { Reflector };\n", "import {\n\tColor,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget,\n\tDepthTexture,\n\tUnsignedShortType,\n\tNearestFilter,\n\tPlane,\n\tHalfFloatType\n} from 'three';\n\nclass ReflectorForSSRPass extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isReflectorForSSRPass = true;\n\n\t\tthis.type = 'ReflectorForSSRPass';\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0x7F7F7F );\n\t\tconst textureWidth = options.textureWidth || 512;\n\t\tconst textureHeight = options.textureHeight || 512;\n\t\tconst clipBias = options.clipBias || 0;\n\t\tconst shader = options.shader || ReflectorForSSRPass.ReflectorShader;\n\t\tconst useDepthTexture = options.useDepthTexture === true;\n\t\tconst yAxis = new Vector3( 0, 1, 0 );\n\t\tconst vecTemp0 = new Vector3();\n\t\tconst vecTemp1 = new Vector3();\n\n\t\t//\n\n\t\tscope.needsUpdate = false;\n\t\tscope.maxDistance = ReflectorForSSRPass.ReflectorShader.uniforms.maxDistance.value;\n\t\tscope.opacity = ReflectorForSSRPass.ReflectorShader.uniforms.opacity.value;\n\t\tscope.color = color;\n\t\tscope.resolution = options.resolution || new Vector2( window.innerWidth, window.innerHeight );\n\n\n\t\tscope._distanceAttenuation = ReflectorForSSRPass.ReflectorShader.defines.DISTANCE_ATTENUATION;\n\t\tObject.defineProperty( scope, 'distanceAttenuation', {\n\t\t\tget() {\n\n\t\t\t\treturn scope._distanceAttenuation;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( scope._distanceAttenuation === val ) return;\n\t\t\t\tscope._distanceAttenuation = val;\n\t\t\t\tscope.material.defines.DISTANCE_ATTENUATION = val;\n\t\t\t\tscope.material.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\tscope._fresnel = ReflectorForSSRPass.ReflectorShader.defines.FRESNEL;\n\t\tObject.defineProperty( scope, 'fresnel', {\n\t\t\tget() {\n\n\t\t\t\treturn scope._fresnel;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( scope._fresnel === val ) return;\n\t\t\t\tscope._fresnel = val;\n\t\t\t\tscope.material.defines.FRESNEL = val;\n\t\t\t\tscope.material.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\tconst normal = new Vector3();\n\t\tconst reflectorWorldPosition = new Vector3();\n\t\tconst cameraWorldPosition = new Vector3();\n\t\tconst rotationMatrix = new Matrix4();\n\t\tconst lookAtPosition = new Vector3( 0, 0, - 1 );\n\n\t\tconst view = new Vector3();\n\t\tconst target = new Vector3();\n\n\t\tconst textureMatrix = new Matrix4();\n\t\tconst virtualCamera = new PerspectiveCamera();\n\n\t\tlet depthTexture;\n\n\t\tif ( useDepthTexture ) {\n\n\t\t\tdepthTexture = new DepthTexture();\n\t\t\tdepthTexture.type = UnsignedShortType;\n\t\t\tdepthTexture.minFilter = NearestFilter;\n\t\t\tdepthTexture.magFilter = NearestFilter;\n\n\t\t}\n\n\t\tconst parameters = {\n\t\t\tdepthTexture: useDepthTexture ? depthTexture : null,\n\t\t\ttype: HalfFloatType\n\t\t};\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, parameters );\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\ttransparent: useDepthTexture,\n\t\t\tdefines: Object.assign( {}, ReflectorForSSRPass.ReflectorShader.defines, {\n\t\t\t\tuseDepthTexture\n\t\t\t} ),\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tvertexShader: shader.vertexShader\n\t\t} );\n\n\t\tmaterial.uniforms[ 'tDiffuse' ].value = renderTarget.texture;\n\t\tmaterial.uniforms[ 'color' ].value = scope.color;\n\t\tmaterial.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\t\tif ( useDepthTexture ) {\n\n\t\t\tmaterial.uniforms[ 'tDepth' ].value = renderTarget.depthTexture;\n\n\t\t}\n\n\t\tthis.material = material;\n\n\t\tconst globalPlane = new Plane( new Vector3( 0, 1, 0 ), clipBias );\n\t\tconst globalPlanes = [ globalPlane ];\n\n\t\tthis.doRender = function ( renderer, scene, camera ) {\n\n\t\t\tmaterial.uniforms[ 'maxDistance' ].value = scope.maxDistance;\n\t\t\tmaterial.uniforms[ 'color' ].value = scope.color;\n\t\t\tmaterial.uniforms[ 'opacity' ].value = scope.opacity;\n\n\t\t\tvecTemp0.copy( camera.position ).normalize();\n\t\t\tvecTemp1.copy( vecTemp0 ).reflect( yAxis );\n\t\t\tmaterial.uniforms[ 'fresnelCoe' ].value = ( vecTemp0.dot( vecTemp1 ) + 1. ) / 2.; // TODO: Also need to use glsl viewPosition and viewNormal per pixel.\n\n\t\t\treflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\tnormal.set( 0, 0, 1 );\n\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\tview.subVectors( reflectorWorldPosition, cameraWorldPosition );\n\n\t\t\t// Avoid rendering when reflector is facing away\n\n\t\t\tif ( view.dot( normal ) > 0 ) return;\n\n\t\t\tview.reflect( normal ).negate();\n\t\t\tview.add( reflectorWorldPosition );\n\n\t\t\trotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t\tlookAtPosition.set( 0, 0, - 1 );\n\t\t\tlookAtPosition.applyMatrix4( rotationMatrix );\n\t\t\tlookAtPosition.add( cameraWorldPosition );\n\n\t\t\ttarget.subVectors( reflectorWorldPosition, lookAtPosition );\n\t\t\ttarget.reflect( normal ).negate();\n\t\t\ttarget.add( reflectorWorldPosition );\n\n\t\t\tvirtualCamera.position.copy( view );\n\t\t\tvirtualCamera.up.set( 0, 1, 0 );\n\t\t\tvirtualCamera.up.applyMatrix4( rotationMatrix );\n\t\t\tvirtualCamera.up.reflect( normal );\n\t\t\tvirtualCamera.lookAt( target );\n\n\t\t\tvirtualCamera.far = camera.far; // Used in WebGLBackground\n\n\t\t\tvirtualCamera.updateMatrixWorld();\n\t\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\tmaterial.uniforms[ 'virtualCameraNear' ].value = camera.near;\n\t\t\tmaterial.uniforms[ 'virtualCameraFar' ].value = camera.far;\n\t\t\tmaterial.uniforms[ 'virtualCameraMatrixWorld' ].value = virtualCamera.matrixWorld;\n\t\t\tmaterial.uniforms[ 'virtualCameraProjectionMatrix' ].value = camera.projectionMatrix;\n\t\t\tmaterial.uniforms[ 'virtualCameraProjectionMatrixInverse' ].value = camera.projectionMatrixInverse;\n\t\t\tmaterial.uniforms[ 'resolution' ].value = scope.resolution;\n\n\t\t\t// Update the texture matrix\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\t\t\ttextureMatrix.multiply( virtualCamera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( virtualCamera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t\t// scope.visible = false;\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\t\t\tconst currentClippingPlanes = renderer.clippingPlanes;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\t\t\trenderer.clippingPlanes = globalPlanes;\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\t\t\trenderer.clippingPlanes = currentClippingPlanes;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// Restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t\t// scope.visible = true;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t}\n\n}\n\nReflectorForSSRPass.ReflectorShader = {\n\n\tname: 'ReflectorShader',\n\n\tdefines: {\n\t\tDISTANCE_ATTENUATION: true,\n\t\tFRESNEL: true,\n\t},\n\n\tuniforms: {\n\n\t\tcolor: { value: null },\n\t\ttDiffuse: { value: null },\n\t\ttDepth: { value: null },\n\t\ttextureMatrix: { value: new Matrix4() },\n\t\tmaxDistance: { value: 180 },\n\t\topacity: { value: 0.5 },\n\t\tfresnelCoe: { value: null },\n\t\tvirtualCameraNear: { value: null },\n\t\tvirtualCameraFar: { value: null },\n\t\tvirtualCameraProjectionMatrix: { value: new Matrix4() },\n\t\tvirtualCameraMatrixWorld: { value: new Matrix4() },\n\t\tvirtualCameraProjectionMatrixInverse: { value: new Matrix4() },\n\t\tresolution: { value: new Vector2() },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tuniform mat4 textureMatrix;\n\t\tvarying vec4 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDepth;\n\t\tuniform float maxDistance;\n\t\tuniform float opacity;\n\t\tuniform float fresnelCoe;\n\t\tuniform float virtualCameraNear;\n\t\tuniform float virtualCameraFar;\n\t\tuniform mat4 virtualCameraProjectionMatrix;\n\t\tuniform mat4 virtualCameraProjectionMatrixInverse;\n\t\tuniform mat4 virtualCameraMatrixWorld;\n\t\tuniform vec2 resolution;\n\t\tvarying vec4 vUv;\n\t\t#include \n\t\tfloat blendOverlay( float base, float blend ) {\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\t\t}\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\t\t}\n\t\tfloat getDepth( const in vec2 uv ) {\n\t\t\treturn texture2D( tDepth, uv ).x;\n\t\t}\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\treturn perspectiveDepthToViewZ( depth, virtualCameraNear, virtualCameraFar );\n\t\t}\n\t\tvec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {\n\t\t\tvec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc\n\t\t\tclipPosition *= clipW; //clip\n\t\t\treturn ( virtualCameraProjectionMatrixInverse * clipPosition ).xyz;//view\n\t\t}\n\t\tvoid main() {\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\t#ifdef useDepthTexture\n\t\t\t\tvec2 uv=(gl_FragCoord.xy-.5)/resolution.xy;\n\t\t\t\tuv.x=1.-uv.x;\n\t\t\t\tfloat depth = texture2DProj( tDepth, vUv ).r;\n\t\t\t\tfloat viewZ = getViewZ( depth );\n\t\t\t\tfloat clipW = virtualCameraProjectionMatrix[2][3] * viewZ+virtualCameraProjectionMatrix[3][3];\n\t\t\t\tvec3 viewPosition=getViewPosition( uv, depth, clipW );\n\t\t\t\tvec3 worldPosition=(virtualCameraMatrixWorld*vec4(viewPosition,1)).xyz;\n\t\t\t\tif(worldPosition.y>maxDistance) discard;\n\t\t\t\tfloat op=opacity;\n\t\t\t\t#ifdef DISTANCE_ATTENUATION\n\t\t\t\t\tfloat ratio=1.-(worldPosition.y/maxDistance);\n\t\t\t\t\tfloat attenuation=ratio*ratio;\n\t\t\t\t\top=opacity*attenuation;\n\t\t\t\t#endif\n\t\t\t\t#ifdef FRESNEL\n\t\t\t\t\top*=fresnelCoe;\n\t\t\t\t#endif\n\t\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), op );\n\t\t\t#else\n\t\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\t\t\t#endif\n\t\t}\n\t`,\n};\n\nexport { ReflectorForSSRPass };\n", "import {\n\tColor,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tPlane,\n\tQuaternion,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget,\n\tHalfFloatType\n} from 'three';\n\nclass Refractor extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isRefractor = true;\n\n\t\tthis.type = 'Refractor';\n\t\tthis.camera = new PerspectiveCamera();\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0x7F7F7F );\n\t\tconst textureWidth = options.textureWidth || 512;\n\t\tconst textureHeight = options.textureHeight || 512;\n\t\tconst clipBias = options.clipBias || 0;\n\t\tconst shader = options.shader || Refractor.RefractorShader;\n\t\tconst multisample = ( options.multisample !== undefined ) ? options.multisample : 4;\n\n\t\t//\n\n\t\tconst virtualCamera = this.camera;\n\t\tvirtualCamera.matrixAutoUpdate = false;\n\t\tvirtualCamera.userData.refractor = true;\n\n\t\t//\n\n\t\tconst refractorPlane = new Plane();\n\t\tconst textureMatrix = new Matrix4();\n\n\t\t// render target\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );\n\n\t\t// material\n\n\t\tthis.material = new ShaderMaterial( {\n\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\ttransparent: true // ensures, refractors are drawn from farthest to closest\n\t\t} );\n\n\t\tthis.material.uniforms[ 'color' ].value = color;\n\t\tthis.material.uniforms[ 'tDiffuse' ].value = renderTarget.texture;\n\t\tthis.material.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\n\t\t// functions\n\n\t\tconst visible = ( function () {\n\n\t\t\tconst refractorWorldPosition = new Vector3();\n\t\t\tconst cameraWorldPosition = new Vector3();\n\t\t\tconst rotationMatrix = new Matrix4();\n\n\t\t\tconst view = new Vector3();\n\t\t\tconst normal = new Vector3();\n\n\t\t\treturn function visible( camera ) {\n\n\t\t\t\trefractorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\t\tview.subVectors( refractorWorldPosition, cameraWorldPosition );\n\n\t\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\t\tnormal.set( 0, 0, 1 );\n\t\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\t\treturn view.dot( normal ) < 0;\n\n\t\t\t};\n\n\t\t} )();\n\n\t\tconst updateRefractorPlane = ( function () {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst position = new Vector3();\n\t\t\tconst quaternion = new Quaternion();\n\t\t\tconst scale = new Vector3();\n\n\t\t\treturn function updateRefractorPlane() {\n\n\t\t\t\tscope.matrixWorld.decompose( position, quaternion, scale );\n\t\t\t\tnormal.set( 0, 0, 1 ).applyQuaternion( quaternion ).normalize();\n\n\t\t\t\t// flip the normal because we want to cull everything above the plane\n\n\t\t\t\tnormal.negate();\n\n\t\t\t\trefractorPlane.setFromNormalAndCoplanarPoint( normal, position );\n\n\t\t\t};\n\n\t\t} )();\n\n\t\tconst updateVirtualCamera = ( function () {\n\n\t\t\tconst clipPlane = new Plane();\n\t\t\tconst clipVector = new Vector4();\n\t\t\tconst q = new Vector4();\n\n\t\t\treturn function updateVirtualCamera( camera ) {\n\n\t\t\t\tvirtualCamera.matrixWorld.copy( camera.matrixWorld );\n\t\t\t\tvirtualCamera.matrixWorldInverse.copy( virtualCamera.matrixWorld ).invert();\n\t\t\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\t\t\t\tvirtualCamera.far = camera.far; // used in WebGLBackground\n\n\t\t\t\t// The following code creates an oblique view frustum for clipping.\n\t\t\t\t// see: Lengyel, Eric. “Oblique View Frustum Depth Projection and Clipping”.\n\t\t\t\t// Journal of Game Development, Vol. 1, No. 2 (2005), Charles River Media, pp. 5–16\n\n\t\t\t\tclipPlane.copy( refractorPlane );\n\t\t\t\tclipPlane.applyMatrix4( virtualCamera.matrixWorldInverse );\n\n\t\t\t\tclipVector.set( clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant );\n\n\t\t\t\t// calculate the clip-space corner point opposite the clipping plane and\n\t\t\t\t// transform it into camera space by multiplying it by the inverse of the projection matrix\n\n\t\t\t\tconst projectionMatrix = virtualCamera.projectionMatrix;\n\n\t\t\t\tq.x = ( Math.sign( clipVector.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t\t\tq.y = ( Math.sign( clipVector.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t\t\tq.z = - 1.0;\n\t\t\t\tq.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t\t\t// calculate the scaled plane vector\n\n\t\t\t\tclipVector.multiplyScalar( 2.0 / clipVector.dot( q ) );\n\n\t\t\t\t// replacing the third row of the projection matrix\n\n\t\t\t\tprojectionMatrix.elements[ 2 ] = clipVector.x;\n\t\t\t\tprojectionMatrix.elements[ 6 ] = clipVector.y;\n\t\t\t\tprojectionMatrix.elements[ 10 ] = clipVector.z + 1.0 - clipBias;\n\t\t\t\tprojectionMatrix.elements[ 14 ] = clipVector.w;\n\n\t\t\t};\n\n\t\t} )();\n\n\t\t// This will update the texture matrix that is used for projective texture mapping in the shader.\n\t\t// see: http://developer.download.nvidia.com/assets/gamedev/docs/projective_texture_mapping.pdf\n\n\t\tfunction updateTextureMatrix( camera ) {\n\n\t\t\t// this matrix does range mapping to [ 0, 1 ]\n\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\t// we use \"Object Linear Texgen\", so we need to multiply the texture matrix T\n\t\t\t// (matrix above) with the projection and view matrix of the virtual camera\n\t\t\t// and the model matrix of the refractor\n\n\t\t\ttextureMatrix.multiply( camera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( camera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t}\n\n\t\t//\n\n\t\tfunction render( renderer, scene, camera ) {\n\n\t\t\tscope.visible = false;\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\trenderer.xr.enabled = false; // avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // avoid re-computing shadows\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t\tscope.visible = true;\n\n\t\t}\n\n\t\t//\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t// ensure refractors are rendered only once per frame\n\n\t\t\tif ( camera.userData.refractor === true ) return;\n\n\t\t\t// avoid rendering when the refractor is viewed from behind\n\n\t\t\tif ( ! visible( camera ) === true ) return;\n\n\t\t\t// update\n\n\t\t\tupdateRefractorPlane();\n\n\t\t\tupdateTextureMatrix( camera );\n\n\t\t\tupdateVirtualCamera( camera );\n\n\t\t\trender( renderer, scene, camera );\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\trenderTarget.dispose();\n\t\t\tscope.material.dispose();\n\n\t\t};\n\n\t}\n\n}\n\nRefractor.RefractorShader = {\n\n\tname: 'RefractorShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tDiffuse': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec4 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec4 vUv;\n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { Refractor };\n", "import {\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tEqualStencilFunc,\n\tIncrementStencilOp\n} from 'three';\n\n/**\n * A shadow Mesh that follows a shadow-casting Mesh in the scene, but is confined to a single plane.\n */\n\nconst _shadowMatrix = new Matrix4();\n\nclass ShadowMesh extends Mesh {\n\n\tconstructor( mesh ) {\n\n\t\tconst shadowMaterial = new MeshBasicMaterial( {\n\n\t\t\tcolor: 0x000000,\n\t\t\ttransparent: true,\n\t\t\topacity: 0.6,\n\t\t\tdepthWrite: false,\n\t\t\tstencilWrite: true,\n\t\t\tstencilFunc: EqualStencilFunc,\n\t\t\tstencilRef: 0,\n\t\t\tstencilZPass: IncrementStencilOp\n\n\t\t} );\n\n\t\tsuper( mesh.geometry, shadowMaterial );\n\n\t\tthis.isShadowMesh = true;\n\n\t\tthis.meshMatrix = mesh.matrixWorld;\n\n\t\tthis.frustumCulled = false;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdate( plane, lightPosition4D ) {\n\n\t\t// based on https://www.opengl.org/archives/resources/features/StencilTalk/tsld021.htm\n\n\t\tconst dot = plane.normal.x * lightPosition4D.x +\n\t\t\t plane.normal.y * lightPosition4D.y +\n\t\t\t plane.normal.z * lightPosition4D.z +\n\t\t\t - plane.constant * lightPosition4D.w;\n\n\t\tconst sme = _shadowMatrix.elements;\n\n\t\tsme[ 0 ] = dot - lightPosition4D.x * plane.normal.x;\n\t\tsme[ 4 ] = - lightPosition4D.x * plane.normal.y;\n\t\tsme[ 8 ] = - lightPosition4D.x * plane.normal.z;\n\t\tsme[ 12 ] = - lightPosition4D.x * - plane.constant;\n\n\t\tsme[ 1 ] = - lightPosition4D.y * plane.normal.x;\n\t\tsme[ 5 ] = dot - lightPosition4D.y * plane.normal.y;\n\t\tsme[ 9 ] = - lightPosition4D.y * plane.normal.z;\n\t\tsme[ 13 ] = - lightPosition4D.y * - plane.constant;\n\n\t\tsme[ 2 ] = - lightPosition4D.z * plane.normal.x;\n\t\tsme[ 6 ] = - lightPosition4D.z * plane.normal.y;\n\t\tsme[ 10 ] = dot - lightPosition4D.z * plane.normal.z;\n\t\tsme[ 14 ] = - lightPosition4D.z * - plane.constant;\n\n\t\tsme[ 3 ] = - lightPosition4D.w * plane.normal.x;\n\t\tsme[ 7 ] = - lightPosition4D.w * plane.normal.y;\n\t\tsme[ 11 ] = - lightPosition4D.w * plane.normal.z;\n\t\tsme[ 15 ] = dot - lightPosition4D.w * - plane.constant;\n\n\t\tthis.matrix.multiplyMatrices( _shadowMatrix, this.meshMatrix );\n\n\t}\n\n}\n\nexport { ShadowMesh };\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tMesh,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3\n} from 'three';\n\n/**\n * Based on \"A Practical Analytic Model for Daylight\"\n * aka The Preetham Model, the de facto standard analytic skydome model\n * https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight\n *\n * First implemented by Simon Wallner\n * http://simonwallner.at/project/atmospheric-scattering/\n *\n * Improved by Martin Upitis\n * http://blenderartists.org/forum/showthread.php?245954-preethams-sky-impementation-HDR\n *\n * Three.js integration by zz85 http://twitter.com/blurspline\n*/\n\nclass Sky extends Mesh {\n\n\tconstructor() {\n\n\t\tconst shader = Sky.SkyShader;\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false\n\t\t} );\n\n\t\tsuper( new BoxGeometry( 1, 1, 1 ), material );\n\n\t\tthis.isSky = true;\n\n\t}\n\n}\n\nSky.SkyShader = {\n\n\tname: 'SkyShader',\n\n\tuniforms: {\n\t\t'turbidity': { value: 2 },\n\t\t'rayleigh': { value: 1 },\n\t\t'mieCoefficient': { value: 0.005 },\n\t\t'mieDirectionalG': { value: 0.8 },\n\t\t'sunPosition': { value: new Vector3() },\n\t\t'up': { value: new Vector3( 0, 1, 0 ) }\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tuniform vec3 sunPosition;\n\t\tuniform float rayleigh;\n\t\tuniform float turbidity;\n\t\tuniform float mieCoefficient;\n\t\tuniform vec3 up;\n\n\t\tvarying vec3 vWorldPosition;\n\t\tvarying vec3 vSunDirection;\n\t\tvarying float vSunfade;\n\t\tvarying vec3 vBetaR;\n\t\tvarying vec3 vBetaM;\n\t\tvarying float vSunE;\n\n\t\t// constants for atmospheric scattering\n\t\tconst float e = 2.71828182845904523536028747135266249775724709369995957;\n\t\tconst float pi = 3.141592653589793238462643383279502884197169;\n\n\t\t// wavelength of used primaries, according to preetham\n\t\tconst vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\n\t\t// this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\n\t\t// (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\n\t\tconst vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\n\n\t\t// mie stuff\n\t\t// K coefficient for the primaries\n\t\tconst float v = 4.0;\n\t\tconst vec3 K = vec3( 0.686, 0.678, 0.666 );\n\t\t// MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\n\t\tconst vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\n\n\t\t// earth shadow hack\n\t\t// cutoffAngle = pi / 1.95;\n\t\tconst float cutoffAngle = 1.6110731556870734;\n\t\tconst float steepness = 1.5;\n\t\tconst float EE = 1000.0;\n\n\t\tfloat sunIntensity( float zenithAngleCos ) {\n\t\t\tzenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\n\t\t\treturn EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\n\t\t}\n\n\t\tvec3 totalMie( float T ) {\n\t\t\tfloat c = ( 0.2 * T ) * 10E-18;\n\t\t\treturn 0.434 * c * MieConst;\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvWorldPosition = worldPosition.xyz;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tgl_Position.z = gl_Position.w; // set z to camera.far\n\n\t\t\tvSunDirection = normalize( sunPosition );\n\n\t\t\tvSunE = sunIntensity( dot( vSunDirection, up ) );\n\n\t\t\tvSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\n\n\t\t\tfloat rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\n\n\t\t\t// extinction (absorbtion + out scattering)\n\t\t\t// rayleigh coefficients\n\t\t\tvBetaR = totalRayleigh * rayleighCoefficient;\n\n\t\t\t// mie coefficients\n\t\t\tvBetaM = totalMie( turbidity ) * mieCoefficient;\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tvarying vec3 vWorldPosition;\n\t\tvarying vec3 vSunDirection;\n\t\tvarying float vSunfade;\n\t\tvarying vec3 vBetaR;\n\t\tvarying vec3 vBetaM;\n\t\tvarying float vSunE;\n\n\t\tuniform float mieDirectionalG;\n\t\tuniform vec3 up;\n\n\t\t// constants for atmospheric scattering\n\t\tconst float pi = 3.141592653589793238462643383279502884197169;\n\n\t\tconst float n = 1.0003; // refractive index of air\n\t\tconst float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\n\n\t\t// optical length at zenith for molecules\n\t\tconst float rayleighZenithLength = 8.4E3;\n\t\tconst float mieZenithLength = 1.25E3;\n\t\t// 66 arc seconds -> degrees, and the cosine of that\n\t\tconst float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\n\n\t\t// 3.0 / ( 16.0 * pi )\n\t\tconst float THREE_OVER_SIXTEENPI = 0.05968310365946075;\n\t\t// 1.0 / ( 4.0 * pi )\n\t\tconst float ONE_OVER_FOURPI = 0.07957747154594767;\n\n\t\tfloat rayleighPhase( float cosTheta ) {\n\t\t\treturn THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\n\t\t}\n\n\t\tfloat hgPhase( float cosTheta, float g ) {\n\t\t\tfloat g2 = pow( g, 2.0 );\n\t\t\tfloat inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\n\t\t\treturn ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec3 direction = normalize( vWorldPosition - cameraPosition );\n\n\t\t\t// optical length\n\t\t\t// cutoff angle at 90 to avoid singularity in next formula.\n\t\t\tfloat zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\n\t\t\tfloat inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\n\t\t\tfloat sR = rayleighZenithLength * inverse;\n\t\t\tfloat sM = mieZenithLength * inverse;\n\n\t\t\t// combined extinction factor\n\t\t\tvec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );\n\n\t\t\t// in scattering\n\t\t\tfloat cosTheta = dot( direction, vSunDirection );\n\n\t\t\tfloat rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\n\t\t\tvec3 betaRTheta = vBetaR * rPhase;\n\n\t\t\tfloat mPhase = hgPhase( cosTheta, mieDirectionalG );\n\t\t\tvec3 betaMTheta = vBetaM * mPhase;\n\n\t\t\tvec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\n\t\t\tLin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\n\n\t\t\t// nightsky\n\t\t\tfloat theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]\n\t\t\tfloat phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]\n\t\t\tvec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\n\t\t\tvec3 L0 = vec3( 0.1 ) * Fex;\n\n\t\t\t// composition + solar disc\n\t\t\tfloat sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\n\t\t\tL0 += ( vSunE * 19000.0 * Fex ) * sundisk;\n\n\t\t\tvec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\n\n\t\t\tvec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\n\n\t\t\tgl_FragColor = vec4( retColor, 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { Sky };\n", "import {\n\tColor,\n\tFrontSide,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tPlane,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget\n} from 'three';\n\n/**\n * Work based on :\n * https://github.com/Slayvin: Flat mirror for three.js\n * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror\n * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL\n */\n\nclass Water extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isWater = true;\n\n\t\tconst scope = this;\n\n\t\tconst textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512;\n\t\tconst textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512;\n\n\t\tconst clipBias = options.clipBias !== undefined ? options.clipBias : 0.0;\n\t\tconst alpha = options.alpha !== undefined ? options.alpha : 1.0;\n\t\tconst time = options.time !== undefined ? options.time : 0.0;\n\t\tconst normalSampler = options.waterNormals !== undefined ? options.waterNormals : null;\n\t\tconst sunDirection = options.sunDirection !== undefined ? options.sunDirection : new Vector3( 0.70707, 0.70707, 0.0 );\n\t\tconst sunColor = new Color( options.sunColor !== undefined ? options.sunColor : 0xffffff );\n\t\tconst waterColor = new Color( options.waterColor !== undefined ? options.waterColor : 0x7F7F7F );\n\t\tconst eye = options.eye !== undefined ? options.eye : new Vector3( 0, 0, 0 );\n\t\tconst distortionScale = options.distortionScale !== undefined ? options.distortionScale : 20.0;\n\t\tconst side = options.side !== undefined ? options.side : FrontSide;\n\t\tconst fog = options.fog !== undefined ? options.fog : false;\n\n\t\t//\n\n\t\tconst mirrorPlane = new Plane();\n\t\tconst normal = new Vector3();\n\t\tconst mirrorWorldPosition = new Vector3();\n\t\tconst cameraWorldPosition = new Vector3();\n\t\tconst rotationMatrix = new Matrix4();\n\t\tconst lookAtPosition = new Vector3( 0, 0, - 1 );\n\t\tconst clipPlane = new Vector4();\n\n\t\tconst view = new Vector3();\n\t\tconst target = new Vector3();\n\t\tconst q = new Vector4();\n\n\t\tconst textureMatrix = new Matrix4();\n\n\t\tconst mirrorCamera = new PerspectiveCamera();\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight );\n\n\t\tconst mirrorShader = {\n\n\t\t\tname: 'MirrorShader',\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib[ 'fog' ],\n\t\t\t\tUniformsLib[ 'lights' ],\n\t\t\t\t{\n\t\t\t\t\t'normalSampler': { value: null },\n\t\t\t\t\t'mirrorSampler': { value: null },\n\t\t\t\t\t'alpha': { value: 1.0 },\n\t\t\t\t\t'time': { value: 0.0 },\n\t\t\t\t\t'size': { value: 1.0 },\n\t\t\t\t\t'distortionScale': { value: 20.0 },\n\t\t\t\t\t'textureMatrix': { value: new Matrix4() },\n\t\t\t\t\t'sunColor': { value: new Color( 0x7F7F7F ) },\n\t\t\t\t\t'sunDirection': { value: new Vector3( 0.70707, 0.70707, 0 ) },\n\t\t\t\t\t'eye': { value: new Vector3() },\n\t\t\t\t\t'waterColor': { value: new Color( 0x555555 ) }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: /* glsl */`\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tuniform float time;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\t\t\t\t\tmirrorCoord = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tworldPosition = mirrorCoord.xyzw;\n\t\t\t\t\tmirrorCoord = textureMatrix * mirrorCoord;\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t}`,\n\n\t\t\tfragmentShader: /* glsl */`\n\t\t\t\tuniform sampler2D mirrorSampler;\n\t\t\t\tuniform float alpha;\n\t\t\t\tuniform float time;\n\t\t\t\tuniform float size;\n\t\t\t\tuniform float distortionScale;\n\t\t\t\tuniform sampler2D normalSampler;\n\t\t\t\tuniform vec3 sunColor;\n\t\t\t\tuniform vec3 sunDirection;\n\t\t\t\tuniform vec3 eye;\n\t\t\t\tuniform vec3 waterColor;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\tvec4 getNoise( vec2 uv ) {\n\t\t\t\t\tvec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);\n\t\t\t\t\tvec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );\n\t\t\t\t\tvec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );\n\t\t\t\t\tvec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );\n\t\t\t\t\tvec4 noise = texture2D( normalSampler, uv0 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv1 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv2 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv3 );\n\t\t\t\t\treturn noise * 0.5 - 1.0;\n\t\t\t\t}\n\n\t\t\t\tvoid sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {\n\t\t\t\t\tvec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );\n\t\t\t\t\tfloat direction = max( 0.0, dot( eyeDirection, reflection ) );\n\t\t\t\t\tspecularColor += pow( direction, shiny ) * sunColor * spec;\n\t\t\t\t\tdiffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;\n\t\t\t\t}\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include \n\t\t\t\t\tvec4 noise = getNoise( worldPosition.xz * size );\n\t\t\t\t\tvec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );\n\n\t\t\t\t\tvec3 diffuseLight = vec3(0.0);\n\t\t\t\t\tvec3 specularLight = vec3(0.0);\n\n\t\t\t\t\tvec3 worldToEye = eye-worldPosition.xyz;\n\t\t\t\t\tvec3 eyeDirection = normalize( worldToEye );\n\t\t\t\t\tsunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );\n\n\t\t\t\t\tfloat distance = length(worldToEye);\n\n\t\t\t\t\tvec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;\n\t\t\t\t\tvec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );\n\n\t\t\t\t\tfloat theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );\n\t\t\t\t\tfloat rf0 = 0.3;\n\t\t\t\t\tfloat reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );\n\t\t\t\t\tvec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;\n\t\t\t\t\tvec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);\n\t\t\t\t\tvec3 outgoingLight = albedo;\n\t\t\t\t\tgl_FragColor = vec4( outgoingLight, alpha );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \t\n\t\t\t\t}`\n\n\t\t};\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: mirrorShader.name,\n\t\t\tuniforms: UniformsUtils.clone( mirrorShader.uniforms ),\n\t\t\tvertexShader: mirrorShader.vertexShader,\n\t\t\tfragmentShader: mirrorShader.fragmentShader,\n\t\t\tlights: true,\n\t\t\tside: side,\n\t\t\tfog: fog\n\t\t} );\n\n\t\tmaterial.uniforms[ 'mirrorSampler' ].value = renderTarget.texture;\n\t\tmaterial.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\t\tmaterial.uniforms[ 'alpha' ].value = alpha;\n\t\tmaterial.uniforms[ 'time' ].value = time;\n\t\tmaterial.uniforms[ 'normalSampler' ].value = normalSampler;\n\t\tmaterial.uniforms[ 'sunColor' ].value = sunColor;\n\t\tmaterial.uniforms[ 'waterColor' ].value = waterColor;\n\t\tmaterial.uniforms[ 'sunDirection' ].value = sunDirection;\n\t\tmaterial.uniforms[ 'distortionScale' ].value = distortionScale;\n\n\t\tmaterial.uniforms[ 'eye' ].value = eye;\n\n\t\tscope.material = material;\n\n\t\tscope.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\tmirrorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\tnormal.set( 0, 0, 1 );\n\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\tview.subVectors( mirrorWorldPosition, cameraWorldPosition );\n\n\t\t\t// Avoid rendering when mirror is facing away\n\n\t\t\tif ( view.dot( normal ) > 0 ) return;\n\n\t\t\tview.reflect( normal ).negate();\n\t\t\tview.add( mirrorWorldPosition );\n\n\t\t\trotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t\tlookAtPosition.set( 0, 0, - 1 );\n\t\t\tlookAtPosition.applyMatrix4( rotationMatrix );\n\t\t\tlookAtPosition.add( cameraWorldPosition );\n\n\t\t\ttarget.subVectors( mirrorWorldPosition, lookAtPosition );\n\t\t\ttarget.reflect( normal ).negate();\n\t\t\ttarget.add( mirrorWorldPosition );\n\n\t\t\tmirrorCamera.position.copy( view );\n\t\t\tmirrorCamera.up.set( 0, 1, 0 );\n\t\t\tmirrorCamera.up.applyMatrix4( rotationMatrix );\n\t\t\tmirrorCamera.up.reflect( normal );\n\t\t\tmirrorCamera.lookAt( target );\n\n\t\t\tmirrorCamera.far = camera.far; // Used in WebGLBackground\n\n\t\t\tmirrorCamera.updateMatrixWorld();\n\t\t\tmirrorCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t// Update the texture matrix\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\t\t\ttextureMatrix.multiply( mirrorCamera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( mirrorCamera.matrixWorldInverse );\n\n\t\t\t// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n\t\t\t// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n\t\t\tmirrorPlane.setFromNormalAndCoplanarPoint( normal, mirrorWorldPosition );\n\t\t\tmirrorPlane.applyMatrix4( mirrorCamera.matrixWorldInverse );\n\n\t\t\tclipPlane.set( mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant );\n\n\t\t\tconst projectionMatrix = mirrorCamera.projectionMatrix;\n\n\t\t\tq.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t\tq.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t\tq.z = - 1.0;\n\t\t\tq.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t\t// Calculate the scaled plane vector\n\t\t\tclipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );\n\n\t\t\t// Replacing the third row of the projection matrix\n\t\t\tprojectionMatrix.elements[ 2 ] = clipPlane.x;\n\t\t\tprojectionMatrix.elements[ 6 ] = clipPlane.y;\n\t\t\tprojectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;\n\t\t\tprojectionMatrix.elements[ 14 ] = clipPlane.w;\n\n\t\t\teye.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\t// Render\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\tscope.visible = false;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification and recursion\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, mirrorCamera );\n\n\t\t\tscope.visible = true;\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// Restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}\n\nexport { Water };\n", "import {\n\tClock,\n\tColor,\n\tMatrix4,\n\tMesh,\n\tRepeatWrapping,\n\tShaderMaterial,\n\tTextureLoader,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2,\n\tVector4\n} from 'three';\nimport { Reflector } from '../objects/Reflector.js';\nimport { Refractor } from '../objects/Refractor.js';\n\n/**\n * References:\n *\thttps://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf\n *\thttp://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html\n *\n */\n\nclass Water extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isWater = true;\n\n\t\tthis.type = 'Water';\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0xFFFFFF );\n\t\tconst textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512;\n\t\tconst textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512;\n\t\tconst clipBias = options.clipBias !== undefined ? options.clipBias : 0;\n\t\tconst flowDirection = options.flowDirection !== undefined ? options.flowDirection : new Vector2( 1, 0 );\n\t\tconst flowSpeed = options.flowSpeed !== undefined ? options.flowSpeed : 0.03;\n\t\tconst reflectivity = options.reflectivity !== undefined ? options.reflectivity : 0.02;\n\t\tconst scale = options.scale !== undefined ? options.scale : 1;\n\t\tconst shader = options.shader !== undefined ? options.shader : Water.WaterShader;\n\n\t\tconst textureLoader = new TextureLoader();\n\n\t\tconst flowMap = options.flowMap || undefined;\n\t\tconst normalMap0 = options.normalMap0 || textureLoader.load( 'textures/water/Water_1_M_Normal.jpg' );\n\t\tconst normalMap1 = options.normalMap1 || textureLoader.load( 'textures/water/Water_2_M_Normal.jpg' );\n\n\t\tconst cycle = 0.15; // a cycle of a flow map phase\n\t\tconst halfCycle = cycle * 0.5;\n\t\tconst textureMatrix = new Matrix4();\n\t\tconst clock = new Clock();\n\n\t\t// internal components\n\n\t\tif ( Reflector === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Water: Required component Reflector not found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( Refractor === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Water: Required component Refractor not found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst reflector = new Reflector( geometry, {\n\t\t\ttextureWidth: textureWidth,\n\t\t\ttextureHeight: textureHeight,\n\t\t\tclipBias: clipBias\n\t\t} );\n\n\t\tconst refractor = new Refractor( geometry, {\n\t\t\ttextureWidth: textureWidth,\n\t\t\ttextureHeight: textureHeight,\n\t\t\tclipBias: clipBias\n\t\t} );\n\n\t\treflector.matrixAutoUpdate = false;\n\t\trefractor.matrixAutoUpdate = false;\n\n\t\t// material\n\n\t\tthis.material = new ShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib[ 'fog' ],\n\t\t\t\tshader.uniforms\n\t\t\t] ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tfog: true\n\t\t} );\n\n\t\tif ( flowMap !== undefined ) {\n\n\t\t\tthis.material.defines.USE_FLOWMAP = '';\n\t\t\tthis.material.uniforms[ 'tFlowMap' ] = {\n\t\t\t\ttype: 't',\n\t\t\t\tvalue: flowMap\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tthis.material.uniforms[ 'flowDirection' ] = {\n\t\t\t\ttype: 'v2',\n\t\t\t\tvalue: flowDirection\n\t\t\t};\n\n\t\t}\n\n\t\t// maps\n\n\t\tnormalMap0.wrapS = normalMap0.wrapT = RepeatWrapping;\n\t\tnormalMap1.wrapS = normalMap1.wrapT = RepeatWrapping;\n\n\t\tthis.material.uniforms[ 'tReflectionMap' ].value = reflector.getRenderTarget().texture;\n\t\tthis.material.uniforms[ 'tRefractionMap' ].value = refractor.getRenderTarget().texture;\n\t\tthis.material.uniforms[ 'tNormalMap0' ].value = normalMap0;\n\t\tthis.material.uniforms[ 'tNormalMap1' ].value = normalMap1;\n\n\t\t// water\n\n\t\tthis.material.uniforms[ 'color' ].value = color;\n\t\tthis.material.uniforms[ 'reflectivity' ].value = reflectivity;\n\t\tthis.material.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\n\t\t// inital values\n\n\t\tthis.material.uniforms[ 'config' ].value.x = 0; // flowMapOffset0\n\t\tthis.material.uniforms[ 'config' ].value.y = halfCycle; // flowMapOffset1\n\t\tthis.material.uniforms[ 'config' ].value.z = halfCycle; // halfCycle\n\t\tthis.material.uniforms[ 'config' ].value.w = scale; // scale\n\n\t\t// functions\n\n\t\tfunction updateTextureMatrix( camera ) {\n\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\ttextureMatrix.multiply( camera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( camera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t}\n\n\t\tfunction updateFlow() {\n\n\t\t\tconst delta = clock.getDelta();\n\t\t\tconst config = scope.material.uniforms[ 'config' ];\n\n\t\t\tconfig.value.x += flowSpeed * delta; // flowMapOffset0\n\t\t\tconfig.value.y = config.value.x + halfCycle; // flowMapOffset1\n\n\t\t\t// Important: The distance between offsets should be always the value of \"halfCycle\".\n\t\t\t// Moreover, both offsets should be in the range of [ 0, cycle ].\n\t\t\t// This approach ensures a smooth water flow and avoids \"reset\" effects.\n\n\t\t\tif ( config.value.x >= cycle ) {\n\n\t\t\t\tconfig.value.x = 0;\n\t\t\t\tconfig.value.y = halfCycle;\n\n\t\t\t} else if ( config.value.y >= cycle ) {\n\n\t\t\t\tconfig.value.y = config.value.y - cycle;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\tupdateTextureMatrix( camera );\n\t\t\tupdateFlow();\n\n\t\t\tscope.visible = false;\n\n\t\t\treflector.matrixWorld.copy( scope.matrixWorld );\n\t\t\trefractor.matrixWorld.copy( scope.matrixWorld );\n\n\t\t\treflector.onBeforeRender( renderer, scene, camera );\n\t\t\trefractor.onBeforeRender( renderer, scene, camera );\n\n\t\t\tscope.visible = true;\n\n\t\t};\n\n\t}\n\n}\n\nWater.WaterShader = {\n\n\tname: 'WaterShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\ttype: 'c',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'reflectivity': {\n\t\t\ttype: 'f',\n\t\t\tvalue: 0\n\t\t},\n\n\t\t'tReflectionMap': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tRefractionMap': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tNormalMap0': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tNormalMap1': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\ttype: 'm4',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'config': {\n\t\t\ttype: 'v4',\n\t\t\tvalue: new Vector4()\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec4 vCoord;\n\t\tvarying vec2 vUv;\n\t\tvarying vec3 vToEye;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tvCoord = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvToEye = cameraPosition - worldPosition.xyz;\n\n\t\t\tvec4 mvPosition = viewMatrix * worldPosition; // used in fog_vertex\n\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tuniform sampler2D tReflectionMap;\n\t\tuniform sampler2D tRefractionMap;\n\t\tuniform sampler2D tNormalMap0;\n\t\tuniform sampler2D tNormalMap1;\n\n\t\t#ifdef USE_FLOWMAP\n\t\t\tuniform sampler2D tFlowMap;\n\t\t#else\n\t\t\tuniform vec2 flowDirection;\n\t\t#endif\n\n\t\tuniform vec3 color;\n\t\tuniform float reflectivity;\n\t\tuniform vec4 config;\n\n\t\tvarying vec4 vCoord;\n\t\tvarying vec2 vUv;\n\t\tvarying vec3 vToEye;\n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\tfloat flowMapOffset0 = config.x;\n\t\t\tfloat flowMapOffset1 = config.y;\n\t\t\tfloat halfCycle = config.z;\n\t\t\tfloat scale = config.w;\n\n\t\t\tvec3 toEye = normalize( vToEye );\n\n\t\t\t// determine flow direction\n\t\t\tvec2 flow;\n\t\t\t#ifdef USE_FLOWMAP\n\t\t\t\tflow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;\n\t\t\t#else\n\t\t\t\tflow = flowDirection;\n\t\t\t#endif\n\t\t\tflow.x *= - 1.0;\n\n\t\t\t// sample normal maps (distort uvs with flowdata)\n\t\t\tvec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );\n\t\t\tvec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );\n\n\t\t\t// linear interpolate to get the final normal color\n\t\t\tfloat flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;\n\t\t\tvec4 normalColor = mix( normalColor0, normalColor1, flowLerp );\n\n\t\t\t// calculate normal vector\n\t\t\tvec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );\n\n\t\t\t// calculate the fresnel term to blend reflection and refraction maps\n\t\t\tfloat theta = max( dot( toEye, normal ), 0.0 );\n\t\t\tfloat reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );\n\n\t\t\t// calculate final uv coords\n\t\t\tvec3 coord = vCoord.xyz / vCoord.w;\n\t\t\tvec2 uv = coord.xy + coord.z * normal.xz * 0.05;\n\n\t\t\tvec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) );\n\t\t\tvec4 refractColor = texture2D( tRefractionMap, uv );\n\n\t\t\t// multiply water color with the mix of both textures\n\t\t\tgl_FragColor = vec4( color, 1.0 ) * mix( refractColor, reflectColor, reflectance );\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { Water };\n", "async function AmmoPhysics() {\n\n\tif ( 'Ammo' in window === false ) {\n\n\t\tconsole.error( 'AmmoPhysics: Couldn\\'t find Ammo.js' );\n\t\treturn;\n\n\t}\n\n\tconst AmmoLib = await Ammo(); // eslint-disable-line no-undef\n\n\tconst frameRate = 60;\n\n\tconst collisionConfiguration = new AmmoLib.btDefaultCollisionConfiguration();\n\tconst dispatcher = new AmmoLib.btCollisionDispatcher( collisionConfiguration );\n\tconst broadphase = new AmmoLib.btDbvtBroadphase();\n\tconst solver = new AmmoLib.btSequentialImpulseConstraintSolver();\n\tconst world = new AmmoLib.btDiscreteDynamicsWorld( dispatcher, broadphase, solver, collisionConfiguration );\n\tworld.setGravity( new AmmoLib.btVector3( 0, - 9.8, 0 ) );\n\n\tconst worldTransform = new AmmoLib.btTransform();\n\n\t//\n\n\tfunction getShape( geometry ) {\n\n\t\tconst parameters = geometry.parameters;\n\n\t\t// TODO change type to is*\n\n\t\tif ( geometry.type === 'BoxGeometry' ) {\n\n\t\t\tconst sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;\n\t\t\tconst sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;\n\t\t\tconst sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;\n\n\t\t\tconst shape = new AmmoLib.btBoxShape( new AmmoLib.btVector3( sx, sy, sz ) );\n\t\t\tshape.setMargin( 0.05 );\n\n\t\t\treturn shape;\n\n\t\t} else if ( geometry.type === 'SphereGeometry' || geometry.type === 'IcosahedronGeometry' ) {\n\n\t\t\tconst radius = parameters.radius !== undefined ? parameters.radius : 1;\n\n\t\t\tconst shape = new AmmoLib.btSphereShape( radius );\n\t\t\tshape.setMargin( 0.05 );\n\n\t\t\treturn shape;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tconst meshes = [];\n\tconst meshMap = new WeakMap();\n\n\tfunction addScene( scene ) {\n\n\t\tscene.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tconst physics = child.userData.physics;\n\n\t\t\t\tif ( physics ) {\n\n\t\t\t\t\taddMesh( child, physics.mass );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tfunction addMesh( mesh, mass = 0 ) {\n\n\t\tconst shape = getShape( mesh.geometry );\n\n\t\tif ( shape !== null ) {\n\n\t\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\t\thandleInstancedMesh( mesh, mass, shape );\n\n\t\t\t} else if ( mesh.isMesh ) {\n\n\t\t\t\thandleMesh( mesh, mass, shape );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction handleMesh( mesh, mass, shape ) {\n\n\t\tconst position = mesh.position;\n\t\tconst quaternion = mesh.quaternion;\n\n\t\tconst transform = new AmmoLib.btTransform();\n\t\ttransform.setIdentity();\n\t\ttransform.setOrigin( new AmmoLib.btVector3( position.x, position.y, position.z ) );\n\t\ttransform.setRotation( new AmmoLib.btQuaternion( quaternion.x, quaternion.y, quaternion.z, quaternion.w ) );\n\n\t\tconst motionState = new AmmoLib.btDefaultMotionState( transform );\n\n\t\tconst localInertia = new AmmoLib.btVector3( 0, 0, 0 );\n\t\tshape.calculateLocalInertia( mass, localInertia );\n\n\t\tconst rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );\n\n\t\tconst body = new AmmoLib.btRigidBody( rbInfo );\n\t\t// body.setFriction( 4 );\n\t\tworld.addRigidBody( body );\n\n\t\tif ( mass > 0 ) {\n\n\t\t\tmeshes.push( mesh );\n\t\t\tmeshMap.set( mesh, body );\n\n\t\t}\n\n\n\t}\n\n\tfunction handleInstancedMesh( mesh, mass, shape ) {\n\n\t\tconst array = mesh.instanceMatrix.array;\n\n\t\tconst bodies = [];\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tconst index = i * 16;\n\n\t\t\tconst transform = new AmmoLib.btTransform();\n\t\t\ttransform.setFromOpenGLMatrix( array.slice( index, index + 16 ) );\n\n\t\t\tconst motionState = new AmmoLib.btDefaultMotionState( transform );\n\n\t\t\tconst localInertia = new AmmoLib.btVector3( 0, 0, 0 );\n\t\t\tshape.calculateLocalInertia( mass, localInertia );\n\n\t\t\tconst rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );\n\n\t\t\tconst body = new AmmoLib.btRigidBody( rbInfo );\n\t\t\tworld.addRigidBody( body );\n\n\t\t\tbodies.push( body );\n\n\t\t}\n\n\t\tif ( mass > 0 ) {\n\n\t\t\tmeshes.push( mesh );\n\n\t\t\tmeshMap.set( mesh, bodies );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction setMeshPosition( mesh, position, index = 0 ) {\n\n\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\tconst bodies = meshMap.get( mesh );\n\t\t\tconst body = bodies[ index ];\n\n\t\t\tbody.setAngularVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\t\t\tbody.setLinearVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\n\t\t\tworldTransform.setIdentity();\n\t\t\tworldTransform.setOrigin( new AmmoLib.btVector3( position.x, position.y, position.z ) );\n\t\t\tbody.setWorldTransform( worldTransform );\n\n\t\t} else if ( mesh.isMesh ) {\n\n\t\t\tconst body = meshMap.get( mesh );\n\n\t\t\tbody.setAngularVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\t\t\tbody.setLinearVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\n\t\t\tworldTransform.setIdentity();\n\t\t\tworldTransform.setOrigin( new AmmoLib.btVector3( position.x, position.y, position.z ) );\n\t\t\tbody.setWorldTransform( worldTransform );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tlet lastTime = 0;\n\n\tfunction step() {\n\n\t\tconst time = performance.now();\n\n\t\tif ( lastTime > 0 ) {\n\n\t\t\tconst delta = ( time - lastTime ) / 1000;\n\n\t\t\tworld.stepSimulation( delta, 10 );\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\t\tconst mesh = meshes[ i ];\n\n\t\t\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\t\t\tconst array = mesh.instanceMatrix.array;\n\t\t\t\t\tconst bodies = meshMap.get( mesh );\n\n\t\t\t\t\tfor ( let j = 0; j < bodies.length; j ++ ) {\n\n\t\t\t\t\t\tconst body = bodies[ j ];\n\n\t\t\t\t\t\tconst motionState = body.getMotionState();\n\t\t\t\t\t\tmotionState.getWorldTransform( worldTransform );\n\n\t\t\t\t\t\tconst position = worldTransform.getOrigin();\n\t\t\t\t\t\tconst quaternion = worldTransform.getRotation();\n\n\t\t\t\t\t\tcompose( position, quaternion, array, j * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.instanceMatrix.needsUpdate = true;\n\t\t\t\t\tmesh.computeBoundingSphere();\n\n\t\t\t\t} else if ( mesh.isMesh ) {\n\n\t\t\t\t\tconst body = meshMap.get( mesh );\n\n\t\t\t\t\tconst motionState = body.getMotionState();\n\t\t\t\t\tmotionState.getWorldTransform( worldTransform );\n\n\t\t\t\t\tconst position = worldTransform.getOrigin();\n\t\t\t\t\tconst quaternion = worldTransform.getRotation();\n\t\t\t\t\tmesh.position.set( position.x(), position.y(), position.z() );\n\t\t\t\t\tmesh.quaternion.set( quaternion.x(), quaternion.y(), quaternion.z(), quaternion.w() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlastTime = time;\n\n\t}\n\n\t// animate\n\n\tsetInterval( step, 1000 / frameRate );\n\n\treturn {\n\t\taddScene: addScene,\n\t\taddMesh: addMesh,\n\t\tsetMeshPosition: setMeshPosition\n\t\t// addCompoundMesh\n\t};\n\n}\n\nfunction compose( position, quaternion, array, index ) {\n\n\tconst x = quaternion.x(), y = quaternion.y(), z = quaternion.z(), w = quaternion.w();\n\tconst x2 = x + x, y2 = y + y, z2 = z + z;\n\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\tarray[ index + 0 ] = ( 1 - ( yy + zz ) );\n\tarray[ index + 1 ] = ( xy + wz );\n\tarray[ index + 2 ] = ( xz - wy );\n\tarray[ index + 3 ] = 0;\n\n\tarray[ index + 4 ] = ( xy - wz );\n\tarray[ index + 5 ] = ( 1 - ( xx + zz ) );\n\tarray[ index + 6 ] = ( yz + wx );\n\tarray[ index + 7 ] = 0;\n\n\tarray[ index + 8 ] = ( xz + wy );\n\tarray[ index + 9 ] = ( yz - wx );\n\tarray[ index + 10 ] = ( 1 - ( xx + yy ) );\n\tarray[ index + 11 ] = 0;\n\n\tarray[ index + 12 ] = position.x();\n\tarray[ index + 13 ] = position.y();\n\tarray[ index + 14 ] = position.z();\n\tarray[ index + 15 ] = 1;\n\n}\n\nexport { AmmoPhysics };\n", "import { Clock, Vector3, Quaternion, Matrix4 } from 'three';\n\nconst RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.12.0';\n\nconst frameRate = 60;\n\nconst _scale = new Vector3( 1, 1, 1 );\nconst ZERO = new Vector3();\n\nlet RAPIER = null;\n\nfunction getShape( geometry ) {\n\n\tconst parameters = geometry.parameters;\n\n\t// TODO change type to is*\n\n\tif ( geometry.type === 'BoxGeometry' ) {\n\n\t\tconst sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;\n\t\tconst sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;\n\t\tconst sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;\n\n\t\treturn RAPIER.ColliderDesc.cuboid( sx, sy, sz );\n\n\t} else if ( geometry.type === 'SphereGeometry' || geometry.type === 'IcosahedronGeometry' ) {\n\n\t\tconst radius = parameters.radius !== undefined ? parameters.radius : 1;\n\t\treturn RAPIER.ColliderDesc.ball( radius );\n\n\t}\n\n\treturn null;\n\n}\n\nasync function RapierPhysics() {\n\n\tif ( RAPIER === null ) {\n\n\t\tRAPIER = await import( RAPIER_PATH );\n\t\tawait RAPIER.init();\n\n\t}\n\n\t// Docs: https://rapier.rs/docs/api/javascript/JavaScript3D/\n\n\tconst gravity = new Vector3( 0.0, - 9.81, 0.0 );\n\tconst world = new RAPIER.World( gravity );\n\n\tconst meshes = [];\n\tconst meshMap = new WeakMap();\n\n\tconst _vector = new Vector3();\n\tconst _quaternion = new Quaternion();\n\tconst _matrix = new Matrix4();\n\n\tfunction addScene( scene ) {\n\n\t\tscene.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tconst physics = child.userData.physics;\n\n\t\t\t\tif ( physics ) {\n\n\t\t\t\t\taddMesh( child, physics.mass, physics.restitution );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tfunction addMesh( mesh, mass = 0, restitution = 0 ) {\n\n\t\tconst shape = getShape( mesh.geometry );\n\n\t\tif ( shape === null ) return;\n\n\t\tshape.setMass( mass );\n\t\tshape.setRestitution( restitution );\n\n\t\tconst body = mesh.isInstancedMesh\n\t\t\t\t\t\t\t? createInstancedBody( mesh, mass, shape )\n\t\t\t\t\t\t\t: createBody( mesh.position, mesh.quaternion, mass, shape );\n\n\t\tif ( mass > 0 ) {\n\n\t\t\tmeshes.push( mesh );\n\t\t\tmeshMap.set( mesh, body );\n\n\t\t}\n\n\t}\n\n\tfunction createInstancedBody( mesh, mass, shape ) {\n\n\t\tconst array = mesh.instanceMatrix.array;\n\n\t\tconst bodies = [];\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tconst position = _vector.fromArray( array, i * 16 + 12 );\n\t\t\tbodies.push( createBody( position, null, mass, shape ) );\n\n\t\t}\n\n\t\treturn bodies;\n\n\t}\n\n\tfunction createBody( position, quaternion, mass, shape ) {\n\n\t\tconst desc = mass > 0 ? RAPIER.RigidBodyDesc.dynamic() : RAPIER.RigidBodyDesc.fixed();\n\t\tdesc.setTranslation( ...position );\n\t\tif ( quaternion !== null ) desc.setRotation( quaternion );\n\n\t\tconst body = world.createRigidBody( desc );\n\t\tworld.createCollider( shape, body );\n\n\t\treturn body;\n\n\t}\n\n\tfunction setMeshPosition( mesh, position, index = 0 ) {\n\n\t\tlet body = meshMap.get( mesh );\n\n\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\tbody = body[ index ];\n\n\t\t}\n\n\t\tbody.setAngvel( ZERO );\n\t\tbody.setLinvel( ZERO );\n\t\tbody.setTranslation( position );\n\n\t}\n\n\tfunction setMeshVelocity( mesh, velocity, index = 0 ) {\n\n\t\tlet body = meshMap.get( mesh );\n\n\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\tbody = body[ index ];\n\n\t\t}\n\n\t\tbody.setLinvel( velocity );\n\n\t}\n\n\t//\n\n\tconst clock = new Clock();\n\n\tfunction step() {\n\n\t\tworld.timestep = clock.getDelta();\n\t\tworld.step();\n\n\t\t//\n\n\t\tfor ( let i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\tconst mesh = meshes[ i ];\n\n\t\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\t\tconst array = mesh.instanceMatrix.array;\n\t\t\t\tconst bodies = meshMap.get( mesh );\n\n\t\t\t\tfor ( let j = 0; j < bodies.length; j ++ ) {\n\n\t\t\t\t\tconst body = bodies[ j ];\n\n\t\t\t\t\tconst position = body.translation();\n\t\t\t\t\t_quaternion.copy( body.rotation() );\n\n\t\t\t\t\t_matrix.compose( position, _quaternion, _scale ).toArray( array, j * 16 );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.instanceMatrix.needsUpdate = true;\n\t\t\t\tmesh.computeBoundingSphere();\n\n\t\t\t} else {\n\n\t\t\t\tconst body = meshMap.get( mesh );\n\n\t\t\t\tmesh.position.copy( body.translation() );\n\t\t\t\tmesh.quaternion.copy( body.rotation() );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// animate\n\n\tsetInterval( step, 1000 / frameRate );\n\n\treturn {\n\t\taddScene: addScene,\n\t\taddMesh: addMesh,\n\t\tsetMeshPosition: setMeshPosition,\n\t\tsetMeshVelocity: setMeshVelocity\n\t};\n\n}\n\nexport { RapierPhysics };\n", "/**\n * Afterimage shader\n * I created this effect inspired by a demo on codepen:\n * https://codepen.io/brunoimbrizi/pen/MoRJaN?page=1&\n */\n\nconst AfterimageShader = {\n\n\tname: 'AfterimageShader',\n\n\tuniforms: {\n\n\t\t'damp': { value: 0.96 },\n\t\t'tOld': { value: null },\n\t\t'tNew': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float damp;\n\n\t\tuniform sampler2D tOld;\n\t\tuniform sampler2D tNew;\n\n\t\tvarying vec2 vUv;\n\n\t\tvec4 when_gt( vec4 x, float y ) {\n\n\t\t\treturn max( sign( x - y ), 0.0 );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 texelOld = texture2D( tOld, vUv );\n\t\t\tvec4 texelNew = texture2D( tNew, vUv );\n\n\t\t\ttexelOld *= damp * when_gt( texelOld, 0.1 );\n\n\t\t\tgl_FragColor = max(texelNew, texelOld);\n\n\t\t}`\n\n};\n\nexport { AfterimageShader };\n", "import {\n\tHalfFloatType,\n\tMeshBasicMaterial,\n\tNearestFilter,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { AfterimageShader } from '../shaders/AfterimageShader.js';\n\nclass AfterimagePass extends Pass {\n\n\tconstructor( damp = 0.96 ) {\n\n\t\tsuper();\n\n\t\tthis.shader = AfterimageShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( this.shader.uniforms );\n\n\t\tthis.uniforms[ 'damp' ].value = damp;\n\n\t\tthis.textureComp = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\n\t\tthis.textureOld = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\n\t\tthis.compFsMaterial = new ShaderMaterial( {\n\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: this.shader.vertexShader,\n\t\t\tfragmentShader: this.shader.fragmentShader\n\n\t\t} );\n\n\t\tthis.compFsQuad = new FullScreenQuad( this.compFsMaterial );\n\n\t\tthis.copyFsMaterial = new MeshBasicMaterial();\n\t\tthis.copyFsQuad = new FullScreenQuad( this.copyFsMaterial );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\tthis.uniforms[ 'tOld' ].value = this.textureOld.texture;\n\t\tthis.uniforms[ 'tNew' ].value = readBuffer.texture;\n\n\t\trenderer.setRenderTarget( this.textureComp );\n\t\tthis.compFsQuad.render( renderer );\n\n\t\tthis.copyFsQuad.material.map = this.textureComp.texture;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.copyFsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\n\t\t\tif ( this.clear ) renderer.clear();\n\n\t\t\tthis.copyFsQuad.render( renderer );\n\n\t\t}\n\n\t\t// Swap buffers.\n\t\tconst temp = this.textureOld;\n\t\tthis.textureOld = this.textureComp;\n\t\tthis.textureComp = temp;\n\t\t// Now textureOld contains the latest image, ready for the next frame.\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.textureComp.setSize( width, height );\n\t\tthis.textureOld.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.textureComp.dispose();\n\t\tthis.textureOld.dispose();\n\n\t\tthis.compFsMaterial.dispose();\n\t\tthis.copyFsMaterial.dispose();\n\n\t\tthis.compFsQuad.dispose();\n\t\tthis.copyFsQuad.dispose();\n\n\t}\n\n}\n\nexport { AfterimagePass };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Convolution shader\n * ported from o3d sample to WebGL / GLSL\n */\n\nconst ConvolutionShader = {\n\n\tname: 'ConvolutionShader',\n\n\tdefines: {\n\n\t\t'KERNEL_SIZE_FLOAT': '25.0',\n\t\t'KERNEL_SIZE_INT': '25'\n\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'uImageIncrement': { value: new Vector2( 0.001953125, 0.0 ) },\n\t\t'cKernel': { value: [] }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 uImageIncrement;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv - ( ( KERNEL_SIZE_FLOAT - 1.0 ) / 2.0 ) * uImageIncrement;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float cKernel[ KERNEL_SIZE_INT ];\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 uImageIncrement;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 imageCoord = vUv;\n\t\t\tvec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );\n\n\t\t\tfor( int i = 0; i < KERNEL_SIZE_INT; i ++ ) {\n\n\t\t\t\tsum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];\n\t\t\t\timageCoord += uImageIncrement;\n\n\t\t\t}\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`,\n\n\tbuildKernel: function ( sigma ) {\n\n\t\t// We lop off the sqrt(2 * pi) * sigma term, since we're going to normalize anyway.\n\n\t\tconst kMaxKernelSize = 25;\n\t\tlet kernelSize = 2 * Math.ceil( sigma * 3.0 ) + 1;\n\n\t\tif ( kernelSize > kMaxKernelSize ) kernelSize = kMaxKernelSize;\n\n\t\tconst halfWidth = ( kernelSize - 1 ) * 0.5;\n\n\t\tconst values = new Array( kernelSize );\n\t\tlet sum = 0.0;\n\t\tfor ( let i = 0; i < kernelSize; ++ i ) {\n\n\t\t\tvalues[ i ] = gauss( i - halfWidth, sigma );\n\t\t\tsum += values[ i ];\n\n\t\t}\n\n\t\t// normalize the kernel\n\n\t\tfor ( let i = 0; i < kernelSize; ++ i ) values[ i ] /= sum;\n\n\t\treturn values;\n\n\t}\n\n};\n\nfunction gauss( x, sigma ) {\n\n\treturn Math.exp( - ( x * x ) / ( 2.0 * sigma * sigma ) );\n\n}\n\nexport { ConvolutionShader };\n", "import {\n\tAdditiveBlending,\n\tHalfFloatType,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { ConvolutionShader } from '../shaders/ConvolutionShader.js';\n\nclass BloomPass extends Pass {\n\n\tconstructor( strength = 1, kernelSize = 25, sigma = 4 ) {\n\n\t\tsuper();\n\n\t\t// render targets\n\n\t\tthis.renderTargetX = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later\n\t\tthis.renderTargetX.texture.name = 'BloomPass.x';\n\t\tthis.renderTargetY = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later\n\t\tthis.renderTargetY.texture.name = 'BloomPass.y';\n\n\t\t// combine material\n\n\t\tthis.combineUniforms = UniformsUtils.clone( CombineShader.uniforms );\n\n\t\tthis.combineUniforms[ 'strength' ].value = strength;\n\n\t\tthis.materialCombine = new ShaderMaterial( {\n\n\t\t\tname: CombineShader.name,\n\t\t\tuniforms: this.combineUniforms,\n\t\t\tvertexShader: CombineShader.vertexShader,\n\t\t\tfragmentShader: CombineShader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\ttransparent: true\n\n\t\t} );\n\n\t\t// convolution material\n\n\t\tconst convolutionShader = ConvolutionShader;\n\n\t\tthis.convolutionUniforms = UniformsUtils.clone( convolutionShader.uniforms );\n\n\t\tthis.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;\n\t\tthis.convolutionUniforms[ 'cKernel' ].value = ConvolutionShader.buildKernel( sigma );\n\n\t\tthis.materialConvolution = new ShaderMaterial( {\n\n\t\t\tname: convolutionShader.name,\n\t\t\tuniforms: this.convolutionUniforms,\n\t\t\tvertexShader: convolutionShader.vertexShader,\n\t\t\tfragmentShader: convolutionShader.fragmentShader,\n\t\t\tdefines: {\n\t\t\t\t'KERNEL_SIZE_FLOAT': kernelSize.toFixed( 1 ),\n\t\t\t\t'KERNEL_SIZE_INT': kernelSize.toFixed( 0 )\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t// Render quad with blured scene into texture (convolution pass 1)\n\n\t\tthis.fsQuad.material = this.materialConvolution;\n\n\t\tthis.convolutionUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;\n\n\t\trenderer.setRenderTarget( this.renderTargetX );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\n\t\t// Render quad with blured scene into texture (convolution pass 2)\n\n\t\tthis.convolutionUniforms[ 'tDiffuse' ].value = this.renderTargetX.texture;\n\t\tthis.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurY;\n\n\t\trenderer.setRenderTarget( this.renderTargetY );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// Render original scene with superimposed blur to texture\n\n\t\tthis.fsQuad.material = this.materialCombine;\n\n\t\tthis.combineUniforms[ 'tDiffuse' ].value = this.renderTargetY.texture;\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.renderTargetX.setSize( width, height );\n\t\tthis.renderTargetY.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTargetX.dispose();\n\t\tthis.renderTargetY.dispose();\n\n\t\tthis.materialCombine.dispose();\n\t\tthis.materialConvolution.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nconst CombineShader = {\n\n\tname: 'CombineShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'strength': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float strength;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = strength * texel;\n\n\t\t}`\n\n};\n\nBloomPass.blurX = new Vector2( 0.001953125, 0.0 );\nBloomPass.blurY = new Vector2( 0.0, 0.001953125 );\n\nexport { BloomPass };\n", "/**\n * Depth-of-field shader with bokeh\n * ported from GLSL shader by Martins Upitis\n * http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html\n */\n\nconst BokehShader = {\n\n\tname: 'BokehShader',\n\n\tdefines: {\n\t\t'DEPTH_PACKING': 1,\n\t\t'PERSPECTIVE_CAMERA': 1,\n\t},\n\n\tuniforms: {\n\n\t\t'tColor': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'focus': { value: 1.0 },\n\t\t'aspect': { value: 1.0 },\n\t\t'aperture': { value: 0.025 },\n\t\t'maxblur': { value: 0.01 },\n\t\t'nearClip': { value: 1.0 },\n\t\t'farClip': { value: 1000.0 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tColor;\n\t\tuniform sampler2D tDepth;\n\n\t\tuniform float maxblur; // max blur amount\n\t\tuniform float aperture; // aperture - bigger values for shallower depth of field\n\n\t\tuniform float nearClip;\n\t\tuniform float farClip;\n\n\t\tuniform float focus;\n\t\tuniform float aspect;\n\n\t\t#include \n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\t\t\t#if DEPTH_PACKING == 1\n\t\t\treturn unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );\n\t\t\t#else\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\treturn perspectiveDepthToViewZ( depth, nearClip, farClip );\n\t\t\t#else\n\t\t\treturn orthographicDepthToViewZ( depth, nearClip, farClip );\n\t\t\t#endif\n\t\t}\n\n\n\t\tvoid main() {\n\n\t\t\tvec2 aspectcorrect = vec2( 1.0, aspect );\n\n\t\t\tfloat viewZ = getViewZ( getDepth( vUv ) );\n\n\t\t\tfloat factor = ( focus + viewZ ); // viewZ is <= 0, so this is a difference equation\n\n\t\t\tvec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );\n\n\t\t\tvec2 dofblur9 = dofblur * 0.9;\n\t\t\tvec2 dofblur7 = dofblur * 0.7;\n\t\t\tvec2 dofblur4 = dofblur * 0.4;\n\n\t\t\tvec4 col = vec4( 0.0 );\n\n\t\t\tcol += texture2D( tColor, vUv.xy );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );\n\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );\n\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );\n\n\t\t\tgl_FragColor = col / 41.0;\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\nexport { BokehShader };\n", "import {\n\tColor,\n\tHalfFloatType,\n\tMeshDepthMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRGBADepthPacking,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { BokehShader } from '../shaders/BokehShader.js';\n\n/**\n * Depth-of-field post-process with bokeh shader\n */\n\nclass BokehPass extends Pass {\n\n\tconstructor( scene, camera, params ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tconst focus = ( params.focus !== undefined ) ? params.focus : 1.0;\n\t\tconst aperture = ( params.aperture !== undefined ) ? params.aperture : 0.025;\n\t\tconst maxblur = ( params.maxblur !== undefined ) ? params.maxblur : 1.0;\n\n\t\t// render targets\n\n\t\tthis.renderTargetDepth = new WebGLRenderTarget( 1, 1, { // will be resized later\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\n\t\tthis.renderTargetDepth.texture.name = 'BokehPass.depth';\n\n\t\t// depth material\n\n\t\tthis.materialDepth = new MeshDepthMaterial();\n\t\tthis.materialDepth.depthPacking = RGBADepthPacking;\n\t\tthis.materialDepth.blending = NoBlending;\n\n\t\t// bokeh material\n\n\t\tconst bokehShader = BokehShader;\n\t\tconst bokehUniforms = UniformsUtils.clone( bokehShader.uniforms );\n\n\t\tbokehUniforms[ 'tDepth' ].value = this.renderTargetDepth.texture;\n\n\t\tbokehUniforms[ 'focus' ].value = focus;\n\t\tbokehUniforms[ 'aspect' ].value = camera.aspect;\n\t\tbokehUniforms[ 'aperture' ].value = aperture;\n\t\tbokehUniforms[ 'maxblur' ].value = maxblur;\n\t\tbokehUniforms[ 'nearClip' ].value = camera.near;\n\t\tbokehUniforms[ 'farClip' ].value = camera.far;\n\n\t\tthis.materialBokeh = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, bokehShader.defines ),\n\t\t\tuniforms: bokehUniforms,\n\t\t\tvertexShader: bokehShader.vertexShader,\n\t\t\tfragmentShader: bokehShader.fragmentShader\n\t\t} );\n\n\t\tthis.uniforms = bokehUniforms;\n\n\t\tthis.fsQuad = new FullScreenQuad( this.materialBokeh );\n\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\t// Render depth into texture\n\n\t\tthis.scene.overrideMaterial = this.materialDepth;\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tconst oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.setClearColor( 0xffffff );\n\t\trenderer.setClearAlpha( 1.0 );\n\t\trenderer.setRenderTarget( this.renderTargetDepth );\n\t\trenderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// Render bokeh composite\n\n\t\tthis.uniforms[ 'tColor' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'nearClip' ].value = this.camera.near;\n\t\tthis.uniforms[ 'farClip' ].value = this.camera.far;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = null;\n\t\trenderer.setClearColor( this._oldClearColor );\n\t\trenderer.setClearAlpha( oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.materialBokeh.uniforms[ 'aspect' ].value = width / height;\n\n\t\tthis.renderTargetDepth.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTargetDepth.dispose();\n\n\t\tthis.materialDepth.dispose();\n\t\tthis.materialBokeh.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { BokehPass };\n", "import {\n\tColor\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass ClearPass extends Pass {\n\n\tconstructor( clearColor, clearAlpha ) {\n\n\t\tsuper();\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;\n\t\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tlet oldClearAlpha;\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\trenderer.clear();\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t\t}\n\n\t}\n\n}\n\nexport { ClearPass };\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tMesh,\n\tPerspectiveCamera,\n\tScene,\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass CubeTexturePass extends Pass {\n\n\tconstructor( camera, tCube, opacity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.camera = camera;\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.cubeShader = ShaderLib[ 'cube' ];\n\t\tthis.cubeMesh = new Mesh(\n\t\t\tnew BoxGeometry( 10, 10, 10 ),\n\t\t\tnew ShaderMaterial( {\n\t\t\t\tuniforms: UniformsUtils.clone( this.cubeShader.uniforms ),\n\t\t\t\tvertexShader: this.cubeShader.vertexShader,\n\t\t\t\tfragmentShader: this.cubeShader.fragmentShader,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\tside: BackSide\n\t\t\t} )\n\t\t);\n\n\t\tObject.defineProperty( this.cubeMesh.material, 'envMap', {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.tCube.value;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.tCube = tCube;\n\t\tthis.opacity = opacity;\n\n\t\tthis.cubeScene = new Scene();\n\t\tthis.cubeCamera = new PerspectiveCamera();\n\t\tthis.cubeScene.add( this.cubeMesh );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.cubeCamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\t\tthis.cubeCamera.quaternion.setFromRotationMatrix( this.camera.matrixWorld );\n\n\t\tthis.cubeMesh.material.uniforms.tCube.value = this.tCube;\n\t\tthis.cubeMesh.material.uniforms.tFlip.value = ( this.tCube.isCubeTexture && this.tCube.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\tthis.cubeMesh.material.uniforms.opacity.value = this.opacity;\n\t\tthis.cubeMesh.material.transparent = ( this.opacity < 1.0 );\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.cubeScene, this.cubeCamera );\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cubeMesh.geometry.dispose();\n\t\tthis.cubeMesh.material.dispose();\n\n\t}\n\n}\n\nexport { CubeTexturePass };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Dot screen shader\n * based on glfx.js sepia shader\n * https://github.com/evanw/glfx.js\n */\n\nconst DotScreenShader = {\n\n\tname: 'DotScreenShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tSize': { value: new Vector2( 256, 256 ) },\n\t\t'center': { value: new Vector2( 0.5, 0.5 ) },\n\t\t'angle': { value: 1.57 },\n\t\t'scale': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec2 center;\n\t\tuniform float angle;\n\t\tuniform float scale;\n\t\tuniform vec2 tSize;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tfloat pattern() {\n\n\t\t\tfloat s = sin( angle ), c = cos( angle );\n\n\t\t\tvec2 tex = vUv * tSize - center;\n\t\t\tvec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * scale;\n\n\t\t\treturn ( sin( point.x ) * sin( point.y ) ) * 4.0;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 color = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat average = ( color.r + color.g + color.b ) / 3.0;\n\n\t\t\tgl_FragColor = vec4( vec3( average * 10.0 - 5.0 + pattern() ), color.a );\n\n\t\t}`\n\n};\n\nexport { DotScreenShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { DotScreenShader } from '../shaders/DotScreenShader.js';\n\nclass DotScreenPass extends Pass {\n\n\tconstructor( center, angle, scale ) {\n\n\t\tsuper();\n\n\t\tconst shader = DotScreenShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tif ( center !== undefined ) this.uniforms[ 'center' ].value.copy( center );\n\t\tif ( angle !== undefined ) this.uniforms[ 'angle' ].value = angle;\n\t\tif ( scale !== undefined ) this.uniforms[ 'scale' ].value = scale;\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tname: shader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'tSize' ].value.set( readBuffer.width, readBuffer.height );\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { DotScreenPass };\n", "/**\n * Full-screen textured quad shader\n */\n\nconst CopyShader = {\n\n\tname: 'CopyShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\n\t\t}`\n\n};\n\nexport { CopyShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\n\nclass ShaderPass extends Pass {\n\n\tconstructor( shader, textureID ) {\n\n\t\tsuper();\n\n\t\tthis.textureID = ( textureID !== undefined ) ? textureID : 'tDiffuse';\n\n\t\tif ( shader instanceof ShaderMaterial ) {\n\n\t\t\tthis.uniforms = shader.uniforms;\n\n\t\t\tthis.material = shader;\n\n\t\t} else if ( shader ) {\n\n\t\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t\tthis.material = new ShaderMaterial( {\n\n\t\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\t\tdefines: Object.assign( {}, shader.defines ),\n\t\t\t\tuniforms: this.uniforms,\n\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t\t} );\n\n\t\t}\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { ShaderPass };\n", "import { Pass } from './Pass.js';\n\nclass MaskPass extends Pass {\n\n\tconstructor( scene, camera ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.inverse = false;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst context = renderer.getContext();\n\t\tconst state = renderer.state;\n\n\t\t// don't update color or depth\n\n\t\tstate.buffers.color.setMask( false );\n\t\tstate.buffers.depth.setMask( false );\n\n\t\t// lock buffers\n\n\t\tstate.buffers.color.setLocked( true );\n\t\tstate.buffers.depth.setLocked( true );\n\n\t\t// set up stencil\n\n\t\tlet writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tstate.buffers.stencil.setTest( true );\n\t\tstate.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tstate.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tstate.buffers.stencil.setClear( clearValue );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( writeBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// unlock color and depth buffer and make them writable for subsequent rendering/clearing\n\n\t\tstate.buffers.color.setLocked( false );\n\t\tstate.buffers.depth.setLocked( false );\n\n\t\tstate.buffers.color.setMask( true );\n\t\tstate.buffers.depth.setMask( true );\n\n\t\t// only render where stencil is set to 1\n\n\t\tstate.buffers.stencil.setLocked( false );\n\t\tstate.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n\t\tstate.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t}\n\n}\n\nclass ClearMaskPass extends Pass {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.needsSwap = false;\n\n\t}\n\n\trender( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\trenderer.state.buffers.stencil.setLocked( false );\n\t\trenderer.state.buffers.stencil.setTest( false );\n\n\t}\n\n}\n\nexport { MaskPass, ClearMaskPass };\n", "import {\n\tClock,\n\tHalfFloatType,\n\tNoBlending,\n\tVector2,\n\tWebGLRenderTarget\n} from 'three';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { ShaderPass } from './ShaderPass.js';\nimport { MaskPass } from './MaskPass.js';\nimport { ClearMaskPass } from './MaskPass.js';\n\nclass EffectComposer {\n\n\tconstructor( renderer, renderTarget ) {\n\n\t\tthis.renderer = renderer;\n\n\t\tthis._pixelRatio = renderer.getPixelRatio();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = renderer.getSize( new Vector2() );\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, { type: HalfFloatType } );\n\t\t\trenderTarget.texture.name = 'EffectComposer.rt1';\n\n\t\t} else {\n\n\t\t\tthis._width = renderTarget.width;\n\t\t\tthis._height = renderTarget.height;\n\n\t\t}\n\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\t\tthis.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t\tthis.renderToScreen = true;\n\n\t\tthis.passes = [];\n\n\t\tthis.copyPass = new ShaderPass( CopyShader );\n\t\tthis.copyPass.material.blending = NoBlending;\n\n\t\tthis.clock = new Clock();\n\n\t}\n\n\tswapBuffers() {\n\n\t\tconst tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t}\n\n\taddPass( pass ) {\n\n\t\tthis.passes.push( pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\tinsertPass( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\tremovePass( pass ) {\n\n\t\tconst index = this.passes.indexOf( pass );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tthis.passes.splice( index, 1 );\n\n\t\t}\n\n\t}\n\n\tisLastEnabledPass( passIndex ) {\n\n\t\tfor ( let i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n\t\t\tif ( this.passes[ i ].enabled ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\trender( deltaTime ) {\n\n\t\t// deltaTime value is in seconds\n\n\t\tif ( deltaTime === undefined ) {\n\n\t\t\tdeltaTime = this.clock.getDelta();\n\n\t\t}\n\n\t\tconst currentRenderTarget = this.renderer.getRenderTarget();\n\n\t\tlet maskActive = false;\n\n\t\tfor ( let i = 0, il = this.passes.length; i < il; i ++ ) {\n\n\t\t\tconst pass = this.passes[ i ];\n\n\t\t\tif ( pass.enabled === false ) continue;\n\n\t\t\tpass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tconst context = this.renderer.getContext();\n\t\t\t\t\tconst stencil = this.renderer.state.buffers.stencil;\n\n\t\t\t\t\t//context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n\t\t\t\t\t//context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( MaskPass !== undefined ) {\n\n\t\t\t\tif ( pass instanceof MaskPass ) {\n\n\t\t\t\t\tmaskActive = true;\n\n\t\t\t\t} else if ( pass instanceof ClearMaskPass ) {\n\n\t\t\t\t\tmaskActive = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\treset( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = this.renderer.getSize( new Vector2() );\n\t\t\tthis._pixelRatio = this.renderer.getPixelRatio();\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\t\t\trenderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t\t}\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tconst effectiveWidth = this._width * this._pixelRatio;\n\t\tconst effectiveHeight = this._height * this._pixelRatio;\n\n\t\tthis.renderTarget1.setSize( effectiveWidth, effectiveHeight );\n\t\tthis.renderTarget2.setSize( effectiveWidth, effectiveHeight );\n\n\t\tfor ( let i = 0; i < this.passes.length; i ++ ) {\n\n\t\t\tthis.passes[ i ].setSize( effectiveWidth, effectiveHeight );\n\n\t\t}\n\n\t}\n\n\tsetPixelRatio( pixelRatio ) {\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this._width, this._height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\n\t\tthis.copyPass.dispose();\n\n\t}\n\n}\n\nexport { EffectComposer };\n", "const FilmShader = {\n\n\tname: 'FilmShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'time': { value: 0.0 },\n\t\t'intensity': { value: 0.5 },\n\t\t'grayscale': { value: false }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform float intensity;\n\t\tuniform bool grayscale;\n\t\tuniform float time;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat noise = rand( fract( vUv + time ) );\n\n\t\t\tvec3 color = base.rgb + base.rgb * clamp( 0.1 + noise, 0.0, 1.0 );\n\n\t\t\tcolor = mix( base.rgb, color, intensity );\n\n\t\t\tif ( grayscale ) {\n\n\t\t\t\tcolor = vec3( luminance( color ) ); // assuming linear-srgb\n\n\t\t\t}\n\n\t\t\tgl_FragColor = vec4( color, base.a );\n\n\t\t}`,\n\n};\n\nexport { FilmShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { FilmShader } from '../shaders/FilmShader.js';\n\nclass FilmPass extends Pass {\n\n\tconstructor( intensity = 0.5, grayscale = false ) {\n\n\t\tsuper();\n\n\t\tconst shader = FilmShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tname: shader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t} );\n\n\t\tthis.uniforms.intensity.value = intensity; // (0 = no effect, 1 = full effect)\n\t\tthis.uniforms.grayscale.value = grayscale;\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime /*, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'time' ].value += deltaTime;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { FilmPass };\n", "/**\n * RGB Shift Shader\n * Shifts red and blue channels from center in opposite directions\n * Ported from http://kriss.cx/tom/2009/05/rgb-shift/\n * by Tom Butterworth / http://kriss.cx/tom/\n *\n * amount: shift distance (1 is width of input)\n * angle: shift angle in radians\n */\n\nconst DigitalGlitch = {\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }, //diffuse texture\n\t\t'tDisp': { value: null }, //displacement texture for digital glitch squares\n\t\t'byp': { value: 0 }, //apply the glitch ?\n\t\t'amount': { value: 0.08 },\n\t\t'angle': { value: 0.02 },\n\t\t'seed': { value: 0.02 },\n\t\t'seed_x': { value: 0.02 }, //-1,1\n\t\t'seed_y': { value: 0.02 }, //-1,1\n\t\t'distortion_x': { value: 0.5 },\n\t\t'distortion_y': { value: 0.6 },\n\t\t'col_s': { value: 0.05 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform int byp; //should we apply the glitch ?\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDisp;\n\n\t\tuniform float amount;\n\t\tuniform float angle;\n\t\tuniform float seed;\n\t\tuniform float seed_x;\n\t\tuniform float seed_y;\n\t\tuniform float distortion_x;\n\t\tuniform float distortion_y;\n\t\tuniform float col_s;\n\n\t\tvarying vec2 vUv;\n\n\n\t\tfloat rand(vec2 co){\n\t\t\treturn fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);\n\t\t}\n\n\t\tvoid main() {\n\t\t\tif(byp<1) {\n\t\t\t\tvec2 p = vUv;\n\t\t\t\tfloat xs = floor(gl_FragCoord.x / 0.5);\n\t\t\t\tfloat ys = floor(gl_FragCoord.y / 0.5);\n\t\t\t\t//based on staffantans glitch shader for unity https://github.com/staffantan/unityglitch\n\t\t\t\tfloat disp = texture2D(tDisp, p*seed*seed).r;\n\t\t\t\tif(p.ydistortion_x-col_s*seed) {\n\t\t\t\t\tif(seed_x>0.){\n\t\t\t\t\t\tp.y = 1. - (p.y + distortion_y);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp.y = distortion_y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(p.xdistortion_y-col_s*seed) {\n\t\t\t\t\tif(seed_y>0.){\n\t\t\t\t\t\tp.x=distortion_x;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp.x = 1. - (p.x + distortion_x);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tp.x+=disp*seed_x*(seed/5.);\n\t\t\t\tp.y+=disp*seed_y*(seed/5.);\n\t\t\t\t//base from RGB shift shader\n\t\t\t\tvec2 offset = amount * vec2( cos(angle), sin(angle));\n\t\t\t\tvec4 cr = texture2D(tDiffuse, p + offset);\n\t\t\t\tvec4 cga = texture2D(tDiffuse, p);\n\t\t\t\tvec4 cb = texture2D(tDiffuse, p - offset);\n\t\t\t\tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\n\t\t\t\t//add noise\n\t\t\t\tvec4 snow = 200.*amount*vec4(rand(vec2(xs * seed,ys * seed*50.))*0.2);\n\t\t\t\tgl_FragColor = gl_FragColor+ snow;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tgl_FragColor=texture2D (tDiffuse, vUv);\n\t\t\t}\n\t\t}`\n\n};\n\nexport { DigitalGlitch };\n", "import {\n\tDataTexture,\n\tFloatType,\n\tMathUtils,\n\tRedFormat,\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { DigitalGlitch } from '../shaders/DigitalGlitch.js';\n\nclass GlitchPass extends Pass {\n\n\tconstructor( dt_size = 64 ) {\n\n\t\tsuper();\n\n\t\tconst shader = DigitalGlitch;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.heightMap = this.generateHeightmap( dt_size );\n\n\t\tthis.uniforms[ 'tDisp' ].value = this.heightMap;\n\n\t\tthis.material = new ShaderMaterial( {\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t\tthis.goWild = false;\n\t\tthis.curF = 0;\n\t\tthis.generateTrigger();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'seed' ].value = Math.random();//default seeding\n\t\tthis.uniforms[ 'byp' ].value = 0;\n\n\t\tif ( this.curF % this.randX == 0 || this.goWild == true ) {\n\n\t\t\tthis.uniforms[ 'amount' ].value = Math.random() / 30;\n\t\t\tthis.uniforms[ 'angle' ].value = MathUtils.randFloat( - Math.PI, Math.PI );\n\t\t\tthis.uniforms[ 'seed_x' ].value = MathUtils.randFloat( - 1, 1 );\n\t\t\tthis.uniforms[ 'seed_y' ].value = MathUtils.randFloat( - 1, 1 );\n\t\t\tthis.uniforms[ 'distortion_x' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.uniforms[ 'distortion_y' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.curF = 0;\n\t\t\tthis.generateTrigger();\n\n\t\t} else if ( this.curF % this.randX < this.randX / 5 ) {\n\n\t\t\tthis.uniforms[ 'amount' ].value = Math.random() / 90;\n\t\t\tthis.uniforms[ 'angle' ].value = MathUtils.randFloat( - Math.PI, Math.PI );\n\t\t\tthis.uniforms[ 'distortion_x' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.uniforms[ 'distortion_y' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.uniforms[ 'seed_x' ].value = MathUtils.randFloat( - 0.3, 0.3 );\n\t\t\tthis.uniforms[ 'seed_y' ].value = MathUtils.randFloat( - 0.3, 0.3 );\n\n\t\t} else if ( this.goWild == false ) {\n\n\t\t\tthis.uniforms[ 'byp' ].value = 1;\n\n\t\t}\n\n\t\tthis.curF ++;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tgenerateTrigger() {\n\n\t\tthis.randX = MathUtils.randInt( 120, 240 );\n\n\t}\n\n\tgenerateHeightmap( dt_size ) {\n\n\t\tconst data_arr = new Float32Array( dt_size * dt_size );\n\t\tconst length = dt_size * dt_size;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst val = MathUtils.randFloat( 0, 1 );\n\t\t\tdata_arr[ i ] = val;\n\n\t\t}\n\n\t\tconst texture = new DataTexture( data_arr, dt_size, dt_size, RedFormat, FloatType );\n\t\ttexture.needsUpdate = true;\n\t\treturn texture;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.heightMap.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { GlitchPass };\n", "import {\n\tDataTexture,\n\tMatrix4,\n\tRepeatWrapping,\n\tVector2,\n\tVector3,\n} from 'three';\n\n/**\n * References:\n * - implemented algorithm - GTAO\n * - https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf\n * - https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf\n *\n * - other AO algorithms that are not implemented here:\n * - Screen Space Ambient Occlusion (SSAO), see also SSAOShader.js\n *\t - http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html\n *\t - https://learnopengl.com/Advanced-Lighting/SSAO\n *\t - https://creativecoding.soe.ucsc.edu/courses/cmpm164/_schedule/AmbientOcclusion.pdf\n *\t - https://drive.google.com/file/d/1SyagcEVplIm2KkRD3WQYSO9O0Iyi1hfy/edit\n * - Scalable Ambient Occlusion (SAO), see also SAOShader.js\n *\t - https://casual-effects.com/research/McGuire2012SAO/index.html\n *\t - https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf\n * - N8HO\n *\t - https://github.com/N8python/n8ao\n * - Horizon Based Ambient Occlusion (HBAO)\n *\t - http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.577.2286&rep=rep1&type=pdf\n *\t - https://www.derschmale.com/2013/12/20/an-alternative-implementation-for-hbao-2/\n *\n * - further reading\n * \t - https://ceur-ws.org/Vol-3027/paper5.pdf\n * - https://www.comp.nus.edu.sg/~lowkl/publications/mssao_visual_computer_2012.pdf\n * - https://web.ics.purdue.edu/~tmcgraw/papers/mcgraw-ao-2008.pdf\n * - https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf\n * - https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.390.2463&rep=rep1&type=pdf\n * - https://www.intel.com/content/www/us/en/developer/articles/technical/adaptive-screen-space-ambient-occlusion.html\n */\n\nconst GTAOShader = {\n\n\tname: 'GTAOShader',\n\n\tdefines: {\n\t\tPERSPECTIVE_CAMERA: 1,\n\t\tSAMPLES: 16,\n\t\tNORMAL_VECTOR_TYPE: 1,\n\t\tDEPTH_SWIZZLING: 'x',\n\t\tSCREEN_SPACE_RADIUS: 0,\n\t\tSCREEN_SPACE_RADIUS_SCALE: 100.0,\n\t\tSCENE_CLIP_BOX: 0,\n\t},\n\n\tuniforms: {\n\t\ttNormal: { value: null },\n\t\ttDepth: { value: null },\n\t\ttNoise: { value: null },\n\t\tresolution: { value: new Vector2() },\n\t\tcameraNear: { value: null },\n\t\tcameraFar: { value: null },\n\t\tcameraProjectionMatrix: { value: new Matrix4() },\n\t\tcameraProjectionMatrixInverse: { value: new Matrix4() },\n\t\tcameraWorldMatrix: { value: new Matrix4() },\n\t\tradius: { value: 0.25 },\n\t\tdistanceExponent: { value: 1. },\n\t\tthickness: { value: 1. },\n\t\tdistanceFallOff: { value: 1. },\n\t\tscale: { value: 1. },\n\t\tsceneBoxMin: { value: new Vector3( - 1, - 1, - 1 ) },\n\t\tsceneBoxMax: { value: new Vector3( 1, 1, 1 ) },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\t\tuniform highp sampler2D tNormal;\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\t\t\n\t\tuniform mat4 cameraWorldMatrix;\n\t\tuniform float radius;\n\t\tuniform float distanceExponent;\n\t\tuniform float thickness;\n\t\tuniform float distanceFallOff;\n\t\tuniform float scale;\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tuniform vec3 sceneBoxMin;\n\t\t\tuniform vec3 sceneBoxMax;\n\t\t#endif\n\t\t\n\t\t#include \n\t\t#include \n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(vec3(ao), 1.)\n\t\t#endif\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\n\t\tfloat getDepth(const vec2 uv) { \n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).DEPTH_SWIZZLING;\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) { \n\t\t\treturn texelFetch(tDepth, uv.xy, 0).DEPTH_SWIZZLING;\n\t\t}\n\n\t\tfloat getViewZ(const in float depth) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\treturn perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\tivec2 p = ivec2(uv * size);\n\t\t\tfloat c0 = fetchDepth(p);\n\t\t\tfloat l2 = fetchDepth(p - ivec2(2, 0));\n\t\t\tfloat l1 = fetchDepth(p - ivec2(1, 0));\n\t\t\tfloat r1 = fetchDepth(p + ivec2(1, 0));\n\t\t\tfloat r2 = fetchDepth(p + ivec2(2, 0));\n\t\t\tfloat b2 = fetchDepth(p - ivec2(0, 2));\n\t\t\tfloat b1 = fetchDepth(p - ivec2(0, 1));\n\t\t\tfloat t1 = fetchDepth(p + ivec2(0, 1));\n\t\t\tfloat t2 = fetchDepth(p + ivec2(0, 2));\n\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#else\n\t\t\t\treturn computeNormalFromDepth(uv);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 getSceneUvAndDepth(vec3 sampleViewPos) {\n\t\t\tvec4 sampleClipPos = cameraProjectionMatrix * vec4(sampleViewPos, 1.);\n\t\t\tvec2 sampleUv = sampleClipPos.xy / sampleClipPos.w * 0.5 + 0.5;\n\t\t\tfloat sampleSceneDepth = getDepth(sampleUv);\n\t\t\treturn vec3(sampleUv, sampleSceneDepth);\n\t\t}\n\t\t\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\n\t\t\tif (depth >= 1.0) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\n\n\t\t\tfloat radiusToUse = radius;\n\t\t\tfloat distanceFalloffToUse = thickness;\n\t\t\t#if SCREEN_SPACE_RADIUS == 1\n\t\t\t\tfloat radiusScale = getViewPosition(vec2(0.5 + float(SCREEN_SPACE_RADIUS_SCALE) / resolution.x, 0.0), depth).x;\n\t\t\t\tradiusToUse *= radiusScale;\n\t\t\t\tdistanceFalloffToUse *= radiusScale;\n\t\t\t#endif\n\n\t\t\t#if SCENE_CLIP_BOX == 1\n\t\t\t\tvec3 worldPos = (cameraWorldMatrix * vec4(viewPos, 1.0)).xyz;\n\t\t\t\tfloat boxDistance = length(max(vec3(0.0), max(sceneBoxMin - worldPos, worldPos - sceneBoxMax)));\n\t\t\t\tif (boxDistance > radiusToUse) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n\t\t\tvec3 randomVec = noiseTexel.xyz * 2.0 - 1.0;\n\t\t\tvec3 tangent = normalize(vec3(randomVec.xy, 0.));\n\t\t\tvec3 bitangent = vec3(-tangent.y, tangent.x, 0.);\n\t\t\tmat3 kernelMatrix = mat3(tangent, bitangent, vec3(0., 0., 1.));\n\n\t\t\tconst int DIRECTIONS = SAMPLES < 30 ? 3 : 5;\n\t\t\tconst int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;\n\t\t\tfloat ao = 0.0;\n\t\t\tfor (int i = 0; i < DIRECTIONS; ++i) {\n\t\t\t\t\n\t\t\t\tfloat angle = float(i) / float(DIRECTIONS) * PI;\n\t\t\t\tvec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w); \n\t\t\t\tsampleDir.xyz = normalize(kernelMatrix * sampleDir.xyz);\n\n\t\t\t\tvec3 viewDir = normalize(-viewPos.xyz);\n\t\t\t\tvec3 sliceBitangent = normalize(cross(sampleDir.xyz, viewDir));\n\t\t\t\tvec3 sliceTangent = cross(sliceBitangent, viewDir);\n\t\t\t\tvec3 normalInSlice = normalize(viewNormal - sliceBitangent * dot(viewNormal, sliceBitangent));\n\t\t\t\t\n\t\t\t\tvec3 tangentToNormalInSlice = cross(normalInSlice, sliceBitangent);\n\t\t\t\tvec2 cosHorizons = vec2(dot(viewDir, tangentToNormalInSlice), dot(viewDir, -tangentToNormalInSlice));\n\t\t\t\t\n\t\t\t\tfor (int j = 0; j < STEPS; ++j) {\n\t\t\t\t\tvec3 sampleViewOffset = sampleDir.xyz * radiusToUse * sampleDir.w * pow(float(j + 1) / float(STEPS), distanceExponent);\t\n\n\t\t\t\t\tvec3 sampleSceneUvDepth = getSceneUvAndDepth(viewPos + sampleViewOffset);\n\t\t\t\t\tvec3 sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\tvec3 viewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\tcosHorizons.x += max(0., (sampleCosHorizon - cosHorizons.x) * mix(1., 2. / float(j + 2), distanceFallOff));\n\t\t\t\t\t}\t\t\n\n\t\t\t\t\tsampleSceneUvDepth = getSceneUvAndDepth(viewPos - sampleViewOffset);\n\t\t\t\t\tsampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\tviewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\tcosHorizons.y += max(0., (sampleCosHorizon - cosHorizons.y) * mix(1., 2. / float(j + 2), distanceFallOff));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvec2 sinHorizons = sqrt(1. - cosHorizons * cosHorizons);\n\t\t\t\tfloat nx = dot(normalInSlice, sliceTangent);\n\t\t\t\tfloat ny = dot(normalInSlice, viewDir);\n\t\t\t\tfloat nxb = 1. / 2. * (acos(cosHorizons.y) - acos(cosHorizons.x) + sinHorizons.x * cosHorizons.x - sinHorizons.y * cosHorizons.y);\n\t\t\t\tfloat nyb = 1. / 2. * (2. - cosHorizons.x * cosHorizons.x - cosHorizons.y * cosHorizons.y);\n\t\t\t\tfloat occlusion = nx * nxb + ny * nyb;\n\t\t\t\tao += occlusion;\n\t\t\t}\n\n\t\t\tao = clamp(ao / float(DIRECTIONS), 0., 1.);\t\t\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tao = mix(ao, 1., smoothstep(0., radiusToUse, boxDistance));\n\t\t#endif\n\t\t\tao = pow(ao, scale);\n\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}`\n\n};\n\nconst GTAODepthShader = {\n\n\tname: 'GTAODepthShader',\n\n\tdefines: {\n\t\tPERSPECTIVE_CAMERA: 1\n\t},\n\n\tuniforms: {\n\t\ttDepth: { value: null },\n\t\tcameraNear: { value: null },\n\t\tcameraFar: { value: null },\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform sampler2D tDepth;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tgl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );\n\n\t\t}`\n\n};\n\nconst GTAOBlendShader = {\n\n\tname: 'GTAOBlendShader',\n\n\tuniforms: {\n\t\ttDiffuse: { value: null },\n\t\tintensity: { value: 1.0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform float intensity;\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4(mix(vec3(1.), texel.rgb, intensity), texel.a);\n\t\t}`\n\n};\n\n\nfunction generateMagicSquareNoise( size = 5 ) {\n\n\tconst noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );\n\tconst magicSquare = generateMagicSquare( noiseSize );\n\tconst noiseSquareSize = magicSquare.length;\n\tconst data = new Uint8Array( noiseSquareSize * 4 );\n\n\tfor ( let inx = 0; inx < noiseSquareSize; ++ inx ) {\n\n\t\tconst iAng = magicSquare[ inx ];\n\t\tconst angle = ( 2 * Math.PI * iAng ) / noiseSquareSize;\n\t\tconst randomVec = new Vector3(\n\t\t\tMath.cos( angle ),\n\t\t\tMath.sin( angle ),\n\t\t\t0\n\t\t).normalize();\n\t\tdata[ inx * 4 ] = ( randomVec.x * 0.5 + 0.5 ) * 255;\n\t\tdata[ inx * 4 + 1 ] = ( randomVec.y * 0.5 + 0.5 ) * 255;\n\t\tdata[ inx * 4 + 2 ] = 127;\n\t\tdata[ inx * 4 + 3 ] = 255;\n\n\t}\n\n\tconst noiseTexture = new DataTexture( data, noiseSize, noiseSize );\n\tnoiseTexture.wrapS = RepeatWrapping;\n\tnoiseTexture.wrapT = RepeatWrapping;\n\tnoiseTexture.needsUpdate = true;\n\n\treturn noiseTexture;\n\n}\n\nfunction generateMagicSquare( size ) {\n\n\tconst noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );\n\tconst noiseSquareSize = noiseSize * noiseSize;\n\tconst magicSquare = Array( noiseSquareSize ).fill( 0 );\n\tlet i = Math.floor( noiseSize / 2 );\n\tlet j = noiseSize - 1;\n\n\tfor ( let num = 1; num <= noiseSquareSize; ) {\n\n\t\tif ( i === - 1 && j === noiseSize ) {\n\n\t\t\tj = noiseSize - 2;\n\t\t\ti = 0;\n\n\t\t} else {\n\n\t\t\tif ( j === noiseSize ) {\n\n\t\t\t\tj = 0;\n\n\t\t\t}\n\n\t\t\tif ( i < 0 ) {\n\n\t\t\t\ti = noiseSize - 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( magicSquare[ i * noiseSize + j ] !== 0 ) {\n\n\t\t\tj -= 2;\n\t\t\ti ++;\n\t\t\tcontinue;\n\n\t\t} else {\n\n\t\t\tmagicSquare[ i * noiseSize + j ] = num ++;\n\n\t\t}\n\n\t\tj ++;\n\t\ti --;\n\n\t}\n\n\treturn magicSquare;\n\n}\n\n\nexport { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader };\n", "import {\n\tMatrix4,\n\tVector2,\n\tVector3,\n} from 'three';\n\n/**\n * References:\n * https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf\n * https://arxiv.org/pdf/2206.01856.pdf\n */\n\nconst PoissonDenoiseShader = {\n\n\tname: 'PoissonDenoiseShader',\n\n\tdefines: {\n\t\t'SAMPLES': 16,\n\t\t'SAMPLE_VECTORS': generatePdSamplePointInitializer( 16, 2, 1 ),\n\t\t'NORMAL_VECTOR_TYPE': 1,\n\t\t'DEPTH_VALUE_SOURCE': 0,\n\t},\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'tNoise': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrixInverse': { value: new Matrix4() },\n\t\t'lumaPhi': { value: 5. },\n\t\t'depthPhi': { value: 5. },\n\t\t'normalPhi': { value: 5. },\n\t\t'radius': { value: 4. },\n\t\t'index': { value: 0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\n\t\tuniform float lumaPhi;\n\t\tuniform float depthPhi;\n\t\tuniform float normalPhi;\n\t\tuniform float radius;\n\t\tuniform int index;\n\t\t\n\t\t#include \n\t\t#include \n\n\t\t#ifndef SAMPLE_LUMINANCE\n\t\t#define SAMPLE_LUMINANCE dot(vec3(0.2125, 0.7154, 0.0721), a)\n\t\t#endif\n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(denoised, 1.)\n\t\t#endif\n\n\t\tfloat getLuminance(const in vec3 a) {\n\t\t\treturn SAMPLE_LUMINANCE;\n\t\t}\n\n\t\tconst vec3 poissonDisk[SAMPLES] = SAMPLE_VECTORS;\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\t\t\n\t\tfloat getDepth(const vec2 uv) {\n\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).a;\n\t\t#else\n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).r;\n\t\t#endif\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) {\n\t\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).a;\n\t\t\t#else\n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).r;\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\tivec2 p = ivec2(uv * size);\n\t\t\tfloat c0 = fetchDepth(p);\n\t\t\tfloat l2 = fetchDepth(p - ivec2(2, 0));\n\t\t\tfloat l1 = fetchDepth(p - ivec2(1, 0));\n\t\t\tfloat r1 = fetchDepth(p + ivec2(1, 0));\n\t\t\tfloat r2 = fetchDepth(p + ivec2(2, 0));\n\t\t\tfloat b2 = fetchDepth(p - ivec2(0, 2));\n\t\t\tfloat b1 = fetchDepth(p - ivec2(0, 1));\n\t\t\tfloat t1 = fetchDepth(p + ivec2(0, 1));\n\t\t\tfloat t2 = fetchDepth(p + ivec2(0, 2));\n\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t#else\n\t\t\treturn computeNormalFromDepth(uv);\n\t\t#endif\n\t\t}\n\n\t\tvoid denoiseSample(in vec3 center, in vec3 viewNormal, in vec3 viewPos, in vec2 sampleUv, inout vec3 denoised, inout float totalWeight) {\n\t\t\tvec4 sampleTexel = textureLod(tDiffuse, sampleUv, 0.0);\n\t\t\tfloat sampleDepth = getDepth(sampleUv);\n\t\t\tvec3 sampleNormal = getViewNormal(sampleUv);\n\t\t\tvec3 neighborColor = sampleTexel.rgb;\n\t\t\tvec3 viewPosSample = getViewPosition(sampleUv, sampleDepth);\n\t\t\t\n\t\t\tfloat normalDiff = dot(viewNormal, sampleNormal);\n\t\t\tfloat normalSimilarity = pow(max(normalDiff, 0.), normalPhi);\n\t\t\tfloat lumaDiff = abs(getLuminance(neighborColor) - getLuminance(center));\n\t\t\tfloat lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);\n\t\t\tfloat depthDiff = abs(dot(viewPos - viewPosSample, viewNormal));\n\t\t\tfloat depthSimilarity = max(1. - depthDiff / depthPhi, 0.);\n\t\t\tfloat w = lumaSimilarity * depthSimilarity * normalSimilarity;\n\t\t\n\t\t\tdenoised += w * neighborColor;\n\t\t\ttotalWeight += w;\n\t\t}\n\t\t\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\t\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\t\n\t\t\tif (depth == 1. || dot(viewNormal, viewNormal) == 0.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec4 texel = textureLod(tDiffuse, vUv, 0.0);\n\t\t\tvec3 center = texel.rgb;\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n \t\tvec2 noiseVec = vec2(sin(noiseTexel[index % 4] * 2. * PI), cos(noiseTexel[index % 4] * 2. * PI));\n \t\tmat2 rotationMatrix = mat2(noiseVec.x, -noiseVec.y, noiseVec.x, noiseVec.y);\n\t\t\n\t\t\tfloat totalWeight = 1.0;\n\t\t\tvec3 denoised = texel.rgb;\n\t\t\tfor (int i = 0; i < SAMPLES; i++) {\n\t\t\t\tvec3 sampleDir = poissonDisk[i];\n\t\t\t\tvec2 offset = rotationMatrix * (sampleDir.xy * (1. + sampleDir.z * (radius - 1.)) / resolution);\n\t\t\t\tvec2 sampleUv = vUv + offset;\n\t\t\t\tdenoiseSample(center, viewNormal, viewPos, sampleUv, denoised, totalWeight);\n\t\t\t}\n\t\t\n\t\t\tif (totalWeight > 0.) { \n\t\t\t\tdenoised /= totalWeight;\n\t\t\t}\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}`\n\n};\n\nfunction generatePdSamplePointInitializer( samples, rings, radiusExponent ) {\n\n\tconst poissonDisk = generateDenoiseSamples(\n\t\tsamples,\n\t\trings,\n\t\tradiusExponent,\n\t);\n\n\tlet glslCode = 'vec3[SAMPLES](';\n\n\tfor ( let i = 0; i < samples; i ++ ) {\n\n\t\tconst sample = poissonDisk[ i ];\n\t\tglslCode += `vec3(${sample.x}, ${sample.y}, ${sample.z})${( i < samples - 1 ) ? ',' : ')'}`;\n\n\t}\n\n\treturn glslCode;\n\n}\n\nfunction generateDenoiseSamples( numSamples, numRings, radiusExponent ) {\n\n\tconst samples = [];\n\n\tfor ( let i = 0; i < numSamples; i ++ ) {\n\n\t\tconst angle = 2 * Math.PI * numRings * i / numSamples;\n\t\tconst radius = Math.pow( i / ( numSamples - 1 ), radiusExponent );\n\t\tsamples.push( new Vector3( Math.cos( angle ), Math.sin( angle ), radius ) );\n\n\t}\n\n\treturn samples;\n\n}\n\nexport { generatePdSamplePointInitializer, PoissonDenoiseShader };\n", "import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDataTexture,\n\tDepthTexture,\n\tDepthStencilFormat,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tHalfFloatType,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRepeatWrapping,\n\tRGBAFormat,\n\tShaderMaterial,\n\tUniformsUtils,\n\tUnsignedByteType,\n\tUnsignedInt248Type,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader } from '../shaders/GTAOShader.js';\nimport { generatePdSamplePointInitializer, PoissonDenoiseShader } from '../shaders/PoissonDenoiseShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { SimplexNoise } from '../math/SimplexNoise.js';\n\nclass GTAOPass extends Pass {\n\n\tconstructor( scene, camera, width, height, parameters, aoParameters, pdParameters ) {\n\n\t\tsuper();\n\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\t\tthis.clear = true;\n\t\tthis.camera = camera;\n\t\tthis.scene = scene;\n\t\tthis.output = 0;\n\t\tthis._renderGBuffer = true;\n\t\tthis._visibilityCache = new Map();\n\t\tthis.blendIntensity = 1.;\n\n\t\tthis.pdRings = 2.;\n\t\tthis.pdRadiusExponent = 2.;\n\t\tthis.pdSamples = 16;\n\n\t\tthis.gtaoNoiseTexture = generateMagicSquareNoise();\n\t\tthis.pdNoiseTexture = this.generateNoise();\n\n\t\tthis.gtaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );\n\t\tthis.pdRenderTarget = this.gtaoRenderTarget.clone();\n\n\t\tthis.gtaoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, GTAOShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( GTAOShader.uniforms ),\n\t\t\tvertexShader: GTAOShader.vertexShader,\n\t\t\tfragmentShader: GTAOShader.fragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.gtaoMaterial.defines.PERSPECTIVE_CAMERA = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.gtaoMaterial.uniforms.tNoise.value = this.gtaoNoiseTexture;\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\tthis.pdMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, PoissonDenoiseShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( PoissonDenoiseShader.uniforms ),\n\t\t\tvertexShader: PoissonDenoiseShader.vertexShader,\n\t\t\tfragmentShader: PoissonDenoiseShader.fragmentShader,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.pdMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\tthis.pdMaterial.uniforms.tNoise.value = this.pdNoiseTexture;\n\t\tthis.pdMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.pdMaterial.uniforms.lumaPhi.value = 10;\n\t\tthis.pdMaterial.uniforms.depthPhi.value = 2;\n\t\tthis.pdMaterial.uniforms.normalPhi.value = 3;\n\t\tthis.pdMaterial.uniforms.radius.value = 8;\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, GTAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( GTAODepthShader.uniforms ),\n\t\t\tvertexShader: GTAODepthShader.vertexShader,\n\t\t\tfragmentShader: GTAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.blendMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( GTAOBlendShader.uniforms ),\n\t\t\tvertexShader: GTAOBlendShader.vertexShader,\n\t\t\tfragmentShader: GTAOBlendShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblending: CustomBlending,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.originalClearColor = new Color();\n\n\t\tthis.setGBuffer( parameters ? parameters.depthTexture : undefined, parameters ? parameters.normalTexture : undefined );\n\n\t\tif ( aoParameters !== undefined ) {\n\n\t\t\tthis.updateGtaoMaterial( aoParameters );\n\n\t\t}\n\n\t\tif ( pdParameters !== undefined ) {\n\n\t\t\tthis.updatePdMaterial( pdParameters );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.gtaoNoiseTexture.dispose();\n\t\tthis.pdNoiseTexture.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.gtaoRenderTarget.dispose();\n\t\tthis.pdRenderTarget.dispose();\n\t\tthis.normalMaterial.dispose();\n\t\tthis.pdMaterial.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tget gtaoMap() {\n\n\t\treturn this.pdRenderTarget.texture;\n\n\t}\n\n\tsetGBuffer( depthTexture, normalTexture ) {\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tthis.depthTexture = depthTexture;\n\t\t\tthis.normalTexture = normalTexture;\n\t\t\tthis._renderGBuffer = false;\n\n\t\t} else {\n\n\t\t\tthis.depthTexture = new DepthTexture();\n\t\t\tthis.depthTexture.format = DepthStencilFormat;\n\t\t\tthis.depthTexture.type = UnsignedInt248Type;\n\t\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\ttype: HalfFloatType,\n\t\t\t\tdepthTexture: this.depthTexture\n\t\t\t} );\n\t\t\tthis.normalTexture = this.normalRenderTarget.texture;\n\t\t\tthis._renderGBuffer = true;\n\n\t\t}\n\n\t\tconst normalVectorType = ( this.normalTexture ) ? 1 : 0;\n\t\tconst depthValueSource = ( this.depthTexture === this.normalTexture ) ? 'w' : 'x';\n\n\t\tthis.gtaoMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;\n\t\tthis.gtaoMaterial.defines.DEPTH_SWIZZLING = depthValueSource;\n\t\tthis.gtaoMaterial.uniforms.tNormal.value = this.normalTexture;\n\t\tthis.gtaoMaterial.uniforms.tDepth.value = this.depthTexture;\n\n\t\tthis.pdMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;\n\t\tthis.pdMaterial.defines.DEPTH_SWIZZLING = depthValueSource;\n\t\tthis.pdMaterial.uniforms.tNormal.value = this.normalTexture;\n\t\tthis.pdMaterial.uniforms.tDepth.value = this.depthTexture;\n\n\t\tthis.depthRenderMaterial.uniforms.tDepth.value = this.normalRenderTarget.depthTexture;\n\n\t}\n\n\tsetSceneClipBox( box ) {\n\n\t\tif ( box ) {\n\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX !== 1;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 1;\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMin.value.copy( box.min );\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMax.value.copy( box.max );\n\n\t\t} else {\n\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX === 0;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 0;\n\n\t\t}\n\n\t}\n\n\tupdateGtaoMaterial( parameters ) {\n\n\t\tif ( parameters.radius !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.radius.value = parameters.radius;\n\n\t\t}\n\n\t\tif ( parameters.distanceExponent !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.distanceExponent.value = parameters.distanceExponent;\n\n\t\t}\n\n\t\tif ( parameters.thickness !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.thickness.value = parameters.thickness;\n\n\t\t}\n\n\t\tif ( parameters.distanceFallOff !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.distanceFallOff.value = parameters.distanceFallOff;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( parameters.scale !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.scale.value = parameters.scale;\n\n\t\t}\n\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.gtaoMaterial.defines.SAMPLES ) {\n\n\t\t\tthis.gtaoMaterial.defines.SAMPLES = parameters.samples;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( parameters.screenSpaceRadius !== undefined && ( parameters.screenSpaceRadius ? 1 : 0 ) !== this.gtaoMaterial.defines.SCREEN_SPACE_RADIUS ) {\n\n\t\t\tthis.gtaoMaterial.defines.SCREEN_SPACE_RADIUS = parameters.screenSpaceRadius ? 1 : 0;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tupdatePdMaterial( parameters ) {\n\n\t\tlet updateShader = false;\n\n\t\tif ( parameters.lumaPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.lumaPhi.value = parameters.lumaPhi;\n\n\t\t}\n\n\t\tif ( parameters.depthPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.depthPhi.value = parameters.depthPhi;\n\n\t\t}\n\n\t\tif ( parameters.normalPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.normalPhi.value = parameters.normalPhi;\n\n\t\t}\n\n\t\tif ( parameters.radius !== undefined && parameters.radius !== this.radius ) {\n\n\t\t\tthis.pdMaterial.uniforms.radius.value = parameters.radius;\n\n\t\t}\n\n\t\tif ( parameters.radiusExponent !== undefined && parameters.radiusExponent !== this.pdRadiusExponent ) {\n\n\t\t\tthis.pdRadiusExponent = parameters.radiusExponent;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( parameters.rings !== undefined && parameters.rings !== this.pdRings ) {\n\n\t\t\tthis.pdRings = parameters.rings;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.pdSamples ) {\n\n\t\t\tthis.pdSamples = parameters.samples;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( updateShader ) {\n\n\t\t\tthis.pdMaterial.defines.SAMPLES = this.pdSamples;\n\t\t\tthis.pdMaterial.defines.SAMPLE_VECTORS = generatePdSamplePointInitializer( this.pdSamples, this.pdRings, this.pdRadiusExponent );\n\t\t\tthis.pdMaterial.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\t// render normals and depth (honor only meshes, points and lines do not contribute to AO)\n\n\t\tif ( this._renderGBuffer ) {\n\n\t\t\tthis.overrideVisibility();\n\t\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\t\t\tthis.restoreVisibility();\n\n\t\t}\n\n\t\t// render AO\n\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.gtaoMaterial.uniforms.cameraWorldMatrix.value.copy( this.camera.matrixWorld );\n\t\tthis.renderPass( renderer, this.gtaoMaterial, this.gtaoRenderTarget, 0xffffff, 1.0 );\n\n\t\t// render poisson denoise\n\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.renderPass( renderer, this.pdMaterial, this.pdRenderTarget, 0xffffff, 1.0 );\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase GTAOPass.OUTPUT.Off:\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Diffuse:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.AO:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Denoise:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Depth:\n\n\t\t\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\t\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Default:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tthis.blendMaterial.uniforms.intensity.value = this.blendIntensity;\n\t\t\t\tthis.blendMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis.renderPass( renderer, this.blendMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.GTAOPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.gtaoRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.pdRenderTarget.setSize( width, height );\n\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.pdMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\n\t}\n\n\toverrideVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tcache.set( object, object.visible );\n\n\t\t\tif ( object.isPoints || object.isLine ) object.visible = false;\n\n\t\t} );\n\n\t}\n\n\trestoreVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst visible = cache.get( object );\n\t\t\tobject.visible = visible;\n\n\t\t} );\n\n\t\tcache.clear();\n\n\t}\n\n\tgenerateNoise( size = 64 ) {\n\n\t\tconst simplex = new SimplexNoise();\n\n\t\tconst arraySize = size * size * 4;\n\t\tconst data = new Uint8Array( arraySize );\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < size; j ++ ) {\n\n\t\t\t\tconst x = i;\n\t\t\t\tconst y = j;\n\n\t\t\t\tdata[ ( i * size + j ) * 4 ] = ( simplex.noise( x, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 1 ] = ( simplex.noise( x + size, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 2 ] = ( simplex.noise( x, y + size ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 3 ] = ( simplex.noise( x + size, y + size ) * 0.5 + 0.5 ) * 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst noiseTexture = new DataTexture( data, size, size, RGBAFormat, UnsignedByteType );\n\t\tnoiseTexture.wrapS = RepeatWrapping;\n\t\tnoiseTexture.wrapT = RepeatWrapping;\n\t\tnoiseTexture.needsUpdate = true;\n\n\t\treturn noiseTexture;\n\n\t}\n\n}\n\nGTAOPass.OUTPUT = {\n\t'Off': - 1,\n\t'Default': 0,\n\t'Diffuse': 1,\n\t'Depth': 2,\n\t'Normal': 3,\n\t'AO': 4,\n\t'Denoise': 5,\n};\n\nexport { GTAOPass };\n", "/**\n * RGB Halftone shader for three.js.\n *\tNOTE:\n * \t\tShape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square)\n *\t\tBlending Mode (1 = Linear, 2 = Multiply, 3 = Add, 4 = Lighter, 5 = Darker)\n */\n\nconst HalftoneShader = {\n\n\tname: 'HalftoneShader',\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'shape': { value: 1 },\n\t\t'radius': { value: 4 },\n\t\t'rotateR': { value: Math.PI / 12 * 1 },\n\t\t'rotateG': { value: Math.PI / 12 * 2 },\n\t\t'rotateB': { value: Math.PI / 12 * 3 },\n\t\t'scatter': { value: 0 },\n\t\t'width': { value: 1 },\n\t\t'height': { value: 1 },\n\t\t'blending': { value: 1 },\n\t\t'blendingMode': { value: 1 },\n\t\t'greyscale': { value: false },\n\t\t'disable': { value: false }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUV;\n\n\t\tvoid main() {\n\n\t\t\tvUV = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define SQRT2_MINUS_ONE 0.41421356\n\t\t#define SQRT2_HALF_MINUS_ONE 0.20710678\n\t\t#define PI2 6.28318531\n\t\t#define SHAPE_DOT 1\n\t\t#define SHAPE_ELLIPSE 2\n\t\t#define SHAPE_LINE 3\n\t\t#define SHAPE_SQUARE 4\n\t\t#define BLENDING_LINEAR 1\n\t\t#define BLENDING_MULTIPLY 2\n\t\t#define BLENDING_ADD 3\n\t\t#define BLENDING_LIGHTER 4\n\t\t#define BLENDING_DARKER 5\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float radius;\n\t\tuniform float rotateR;\n\t\tuniform float rotateG;\n\t\tuniform float rotateB;\n\t\tuniform float scatter;\n\t\tuniform float width;\n\t\tuniform float height;\n\t\tuniform int shape;\n\t\tuniform bool disable;\n\t\tuniform float blending;\n\t\tuniform int blendingMode;\n\t\tvarying vec2 vUV;\n\t\tuniform bool greyscale;\n\t\tconst int samples = 8;\n\n\t\tfloat blend( float a, float b, float t ) {\n\n\t\t// linear blend\n\t\t\treturn a * ( 1.0 - t ) + b * t;\n\n\t\t}\n\n\t\tfloat hypot( float x, float y ) {\n\n\t\t// vector magnitude\n\t\t\treturn sqrt( x * x + y * y );\n\n\t\t}\n\n\t\tfloat rand( vec2 seed ){\n\n\t\t// get pseudo-random number\n\t\t\treturn fract( sin( dot( seed.xy, vec2( 12.9898, 78.233 ) ) ) * 43758.5453 );\n\n\t\t}\n\n\t\tfloat distanceToDotRadius( float channel, vec2 coord, vec2 normal, vec2 p, float angle, float rad_max ) {\n\n\t\t// apply shape-specific transforms\n\t\t\tfloat dist = hypot( coord.x - p.x, coord.y - p.y );\n\t\t\tfloat rad = channel;\n\n\t\t\tif ( shape == SHAPE_DOT ) {\n\n\t\t\t\trad = pow( abs( rad ), 1.125 ) * rad_max;\n\n\t\t\t} else if ( shape == SHAPE_ELLIPSE ) {\n\n\t\t\t\trad = pow( abs( rad ), 1.125 ) * rad_max;\n\n\t\t\t\tif ( dist != 0.0 ) {\n\t\t\t\t\tfloat dot_p = abs( ( p.x - coord.x ) / dist * normal.x + ( p.y - coord.y ) / dist * normal.y );\n\t\t\t\t\tdist = ( dist * ( 1.0 - SQRT2_HALF_MINUS_ONE ) ) + dot_p * dist * SQRT2_MINUS_ONE;\n\t\t\t\t}\n\n\t\t\t} else if ( shape == SHAPE_LINE ) {\n\n\t\t\t\trad = pow( abs( rad ), 1.5) * rad_max;\n\t\t\t\tfloat dot_p = ( p.x - coord.x ) * normal.x + ( p.y - coord.y ) * normal.y;\n\t\t\t\tdist = hypot( normal.x * dot_p, normal.y * dot_p );\n\n\t\t\t} else if ( shape == SHAPE_SQUARE ) {\n\n\t\t\t\tfloat theta = atan( p.y - coord.y, p.x - coord.x ) - angle;\n\t\t\t\tfloat sin_t = abs( sin( theta ) );\n\t\t\t\tfloat cos_t = abs( cos( theta ) );\n\t\t\t\trad = pow( abs( rad ), 1.4 );\n\t\t\t\trad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );\n\n\t\t\t}\n\n\t\t\treturn rad - dist;\n\n\t\t}\n\n\t\tstruct Cell {\n\n\t\t// grid sample positions\n\t\t\tvec2 normal;\n\t\t\tvec2 p1;\n\t\t\tvec2 p2;\n\t\t\tvec2 p3;\n\t\t\tvec2 p4;\n\t\t\tfloat samp2;\n\t\t\tfloat samp1;\n\t\t\tfloat samp3;\n\t\t\tfloat samp4;\n\n\t\t};\n\n\t\tvec4 getSample( vec2 point ) {\n\n\t\t// multi-sampled point\n\t\t\tvec4 tex = texture2D( tDiffuse, vec2( point.x / width, point.y / height ) );\n\t\t\tfloat base = rand( vec2( floor( point.x ), floor( point.y ) ) ) * PI2;\n\t\t\tfloat step = PI2 / float( samples );\n\t\t\tfloat dist = radius * 0.66;\n\n\t\t\tfor ( int i = 0; i < samples; ++i ) {\n\n\t\t\t\tfloat r = base + step * float( i );\n\t\t\t\tvec2 coord = point + vec2( cos( r ) * dist, sin( r ) * dist );\n\t\t\t\ttex += texture2D( tDiffuse, vec2( coord.x / width, coord.y / height ) );\n\n\t\t\t}\n\n\t\t\ttex /= float( samples ) + 1.0;\n\t\t\treturn tex;\n\n\t\t}\n\n\t\tfloat getDotColour( Cell c, vec2 p, int channel, float angle, float aa ) {\n\n\t\t// get colour for given point\n\t\t\tfloat dist_c_1, dist_c_2, dist_c_3, dist_c_4, res;\n\n\t\t\tif ( channel == 0 ) {\n\n\t\t\t\tc.samp1 = getSample( c.p1 ).r;\n\t\t\t\tc.samp2 = getSample( c.p2 ).r;\n\t\t\t\tc.samp3 = getSample( c.p3 ).r;\n\t\t\t\tc.samp4 = getSample( c.p4 ).r;\n\n\t\t\t} else if (channel == 1) {\n\n\t\t\t\tc.samp1 = getSample( c.p1 ).g;\n\t\t\t\tc.samp2 = getSample( c.p2 ).g;\n\t\t\t\tc.samp3 = getSample( c.p3 ).g;\n\t\t\t\tc.samp4 = getSample( c.p4 ).g;\n\n\t\t\t} else {\n\n\t\t\t\tc.samp1 = getSample( c.p1 ).b;\n\t\t\t\tc.samp3 = getSample( c.p3 ).b;\n\t\t\t\tc.samp2 = getSample( c.p2 ).b;\n\t\t\t\tc.samp4 = getSample( c.p4 ).b;\n\n\t\t\t}\n\n\t\t\tdist_c_1 = distanceToDotRadius( c.samp1, c.p1, c.normal, p, angle, radius );\n\t\t\tdist_c_2 = distanceToDotRadius( c.samp2, c.p2, c.normal, p, angle, radius );\n\t\t\tdist_c_3 = distanceToDotRadius( c.samp3, c.p3, c.normal, p, angle, radius );\n\t\t\tdist_c_4 = distanceToDotRadius( c.samp4, c.p4, c.normal, p, angle, radius );\n\t\t\tres = ( dist_c_1 > 0.0 ) ? clamp( dist_c_1 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres += ( dist_c_2 > 0.0 ) ? clamp( dist_c_2 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres += ( dist_c_3 > 0.0 ) ? clamp( dist_c_3 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres += ( dist_c_4 > 0.0 ) ? clamp( dist_c_4 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres = clamp( res, 0.0, 1.0 );\n\n\t\t\treturn res;\n\n\t\t}\n\n\t\tCell getReferenceCell( vec2 p, vec2 origin, float grid_angle, float step ) {\n\n\t\t// get containing cell\n\t\t\tCell c;\n\n\t\t// calc grid\n\t\t\tvec2 n = vec2( cos( grid_angle ), sin( grid_angle ) );\n\t\t\tfloat threshold = step * 0.5;\n\t\t\tfloat dot_normal = n.x * ( p.x - origin.x ) + n.y * ( p.y - origin.y );\n\t\t\tfloat dot_line = -n.y * ( p.x - origin.x ) + n.x * ( p.y - origin.y );\n\t\t\tvec2 offset = vec2( n.x * dot_normal, n.y * dot_normal );\n\t\t\tfloat offset_normal = mod( hypot( offset.x, offset.y ), step );\n\t\t\tfloat normal_dir = ( dot_normal < 0.0 ) ? 1.0 : -1.0;\n\t\t\tfloat normal_scale = ( ( offset_normal < threshold ) ? -offset_normal : step - offset_normal ) * normal_dir;\n\t\t\tfloat offset_line = mod( hypot( ( p.x - offset.x ) - origin.x, ( p.y - offset.y ) - origin.y ), step );\n\t\t\tfloat line_dir = ( dot_line < 0.0 ) ? 1.0 : -1.0;\n\t\t\tfloat line_scale = ( ( offset_line < threshold ) ? -offset_line : step - offset_line ) * line_dir;\n\n\t\t// get closest corner\n\t\t\tc.normal = n;\n\t\t\tc.p1.x = p.x - n.x * normal_scale + n.y * line_scale;\n\t\t\tc.p1.y = p.y - n.y * normal_scale - n.x * line_scale;\n\n\t\t// scatter\n\t\t\tif ( scatter != 0.0 ) {\n\n\t\t\t\tfloat off_mag = scatter * threshold * 0.5;\n\t\t\t\tfloat off_angle = rand( vec2( floor( c.p1.x ), floor( c.p1.y ) ) ) * PI2;\n\t\t\t\tc.p1.x += cos( off_angle ) * off_mag;\n\t\t\t\tc.p1.y += sin( off_angle ) * off_mag;\n\n\t\t\t}\n\n\t\t// find corners\n\t\t\tfloat normal_step = normal_dir * ( ( offset_normal < threshold ) ? step : -step );\n\t\t\tfloat line_step = line_dir * ( ( offset_line < threshold ) ? step : -step );\n\t\t\tc.p2.x = c.p1.x - n.x * normal_step;\n\t\t\tc.p2.y = c.p1.y - n.y * normal_step;\n\t\t\tc.p3.x = c.p1.x + n.y * line_step;\n\t\t\tc.p3.y = c.p1.y - n.x * line_step;\n\t\t\tc.p4.x = c.p1.x - n.x * normal_step + n.y * line_step;\n\t\t\tc.p4.y = c.p1.y - n.y * normal_step - n.x * line_step;\n\n\t\t\treturn c;\n\n\t\t}\n\n\t\tfloat blendColour( float a, float b, float t ) {\n\n\t\t// blend colours\n\t\t\tif ( blendingMode == BLENDING_LINEAR ) {\n\t\t\t\treturn blend( a, b, 1.0 - t );\n\t\t\t} else if ( blendingMode == BLENDING_ADD ) {\n\t\t\t\treturn blend( a, min( 1.0, a + b ), t );\n\t\t\t} else if ( blendingMode == BLENDING_MULTIPLY ) {\n\t\t\t\treturn blend( a, max( 0.0, a * b ), t );\n\t\t\t} else if ( blendingMode == BLENDING_LIGHTER ) {\n\t\t\t\treturn blend( a, max( a, b ), t );\n\t\t\t} else if ( blendingMode == BLENDING_DARKER ) {\n\t\t\t\treturn blend( a, min( a, b ), t );\n\t\t\t} else {\n\t\t\t\treturn blend( a, b, 1.0 - t );\n\t\t\t}\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tif ( ! disable ) {\n\n\t\t// setup\n\t\t\t\tvec2 p = vec2( vUV.x * width, vUV.y * height );\n\t\t\t\tvec2 origin = vec2( 0, 0 );\n\t\t\t\tfloat aa = ( radius < 2.5 ) ? radius * 0.5 : 1.25;\n\n\t\t// get channel samples\n\t\t\t\tCell cell_r = getReferenceCell( p, origin, rotateR, radius );\n\t\t\t\tCell cell_g = getReferenceCell( p, origin, rotateG, radius );\n\t\t\t\tCell cell_b = getReferenceCell( p, origin, rotateB, radius );\n\t\t\t\tfloat r = getDotColour( cell_r, p, 0, rotateR, aa );\n\t\t\t\tfloat g = getDotColour( cell_g, p, 1, rotateG, aa );\n\t\t\t\tfloat b = getDotColour( cell_b, p, 2, rotateB, aa );\n\n\t\t// blend with original\n\t\t\t\tvec4 colour = texture2D( tDiffuse, vUV );\n\t\t\t\tr = blendColour( r, colour.r, blending );\n\t\t\t\tg = blendColour( g, colour.g, blending );\n\t\t\t\tb = blendColour( b, colour.b, blending );\n\n\t\t\t\tif ( greyscale ) {\n\t\t\t\t\tr = g = b = (r + b + g) / 3.0;\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = vec4( r, g, b, 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tgl_FragColor = texture2D( tDiffuse, vUV );\n\n\t\t\t}\n\n\t\t}`\n\n};\n\nexport { HalftoneShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { HalftoneShader } from '../shaders/HalftoneShader.js';\n\n/**\n * RGB Halftone pass for three.js effects composer. Requires HalftoneShader.\n */\n\nclass HalftonePass extends Pass {\n\n\tconstructor( width, height, params ) {\n\n\t\tsuper();\n\n\t \tthis.uniforms = UniformsUtils.clone( HalftoneShader.uniforms );\n\t \tthis.material = new ShaderMaterial( {\n\t \t\tuniforms: this.uniforms,\n\t \t\tfragmentShader: HalftoneShader.fragmentShader,\n\t \t\tvertexShader: HalftoneShader.vertexShader\n\t \t} );\n\n\t\t// set params\n\t\tthis.uniforms.width.value = width;\n\t\tthis.uniforms.height.value = height;\n\n\t\tfor ( const key in params ) {\n\n\t\t\tif ( params.hasOwnProperty( key ) && this.uniforms.hasOwnProperty( key ) ) {\n\n\t\t\t\tthis.uniforms[ key ].value = params[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n \t\tthis.material.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\n \t\tif ( this.renderToScreen ) {\n\n \t\t\trenderer.setRenderTarget( null );\n \t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n \t\t\trenderer.setRenderTarget( writeBuffer );\n \t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n \t}\n\n \tsetSize( width, height ) {\n\n \t\tthis.uniforms.width.value = width;\n \t\tthis.uniforms.height.value = height;\n\n \t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { HalftonePass };\n", "import { ShaderPass } from './ShaderPass.js';\n\nconst LUTShader = {\n\n\tname: 'LUTShader',\n\n\tuniforms: {\n\n\t\tlut: { value: null },\n\t\tlutSize: { value: 0 },\n\n\t\ttDiffuse: { value: null },\n\t\tintensity: { value: 1.0 },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float lutSize;\n\t\tuniform sampler3D lut;\n\n\t\tvarying vec2 vUv;\n\t\tuniform float intensity;\n\t\tuniform sampler2D tDiffuse;\n\t\tvoid main() {\n\n\t\t\tvec4 val = texture2D( tDiffuse, vUv );\n\t\t\tvec4 lutVal;\n\n\t\t\t// pull the sample in by half a pixel so the sample begins\n\t\t\t// at the center of the edge pixels.\n\t\t\tfloat pixelWidth = 1.0 / lutSize;\n\t\t\tfloat halfPixelWidth = 0.5 / lutSize;\n\t\t\tvec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth );\n\n\n\t\t\tlutVal = vec4( texture( lut, uvw ).rgb, val.a );\n\n\t\t\tgl_FragColor = vec4( mix( val, lutVal, intensity ) );\n\n\t\t}\n\n\t`,\n\n};\n\nclass LUTPass extends ShaderPass {\n\n\tset lut( v ) {\n\n\t\tconst material = this.material;\n\n\t\tif ( v !== this.lut ) {\n\n\t\t\tmaterial.uniforms.lut.value = null;\n\n\t\t\tif ( v ) {\n\n\t\t\t\tmaterial.uniforms.lutSize.value = v.image.width;\n\t\t\t\tmaterial.uniforms.lut.value = v;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tget lut() {\n\n\t\treturn this.material.uniforms.lut.value;\n\n\t}\n\n\tset intensity( v ) {\n\n\t\tthis.material.uniforms.intensity.value = v;\n\n\t}\n\n\tget intensity() {\n\n\t\treturn this.material.uniforms.intensity.value;\n\n\t}\n\n\tconstructor( options = {} ) {\n\n\t\tsuper( LUTShader );\n\t\tthis.lut = options.lut || null;\n\t\tthis.intensity = 'intensity' in options ? options.intensity : 1;\n\n\t}\n\n}\n\nexport { LUTPass };\n", "import {\n\tAdditiveBlending,\n\tColor,\n\tDoubleSide,\n\tHalfFloatType,\n\tMatrix4,\n\tMeshDepthMaterial,\n\tNoBlending,\n\tRGBADepthPacking,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass OutlinePass extends Pass {\n\n\tconstructor( resolution, scene, camera, selectedObjects ) {\n\n\t\tsuper();\n\n\t\tthis.renderScene = scene;\n\t\tthis.renderCamera = camera;\n\t\tthis.selectedObjects = selectedObjects !== undefined ? selectedObjects : [];\n\t\tthis.visibleEdgeColor = new Color( 1, 1, 1 );\n\t\tthis.hiddenEdgeColor = new Color( 0.1, 0.04, 0.02 );\n\t\tthis.edgeGlow = 0.0;\n\t\tthis.usePatternTexture = false;\n\t\tthis.edgeThickness = 1.0;\n\t\tthis.edgeStrength = 3.0;\n\t\tthis.downSampleRatio = 2;\n\t\tthis.pulsePeriod = 0;\n\n\t\tthis._visibilityCache = new Map();\n\n\n\t\tthis.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );\n\n\t\tconst resx = Math.round( this.resolution.x / this.downSampleRatio );\n\t\tconst resy = Math.round( this.resolution.y / this.downSampleRatio );\n\n\t\tthis.renderTargetMaskBuffer = new WebGLRenderTarget( this.resolution.x, this.resolution.y );\n\t\tthis.renderTargetMaskBuffer.texture.name = 'OutlinePass.mask';\n\t\tthis.renderTargetMaskBuffer.texture.generateMipmaps = false;\n\n\t\tthis.depthMaterial = new MeshDepthMaterial();\n\t\tthis.depthMaterial.side = DoubleSide;\n\t\tthis.depthMaterial.depthPacking = RGBADepthPacking;\n\t\tthis.depthMaterial.blending = NoBlending;\n\n\t\tthis.prepareMaskMaterial = this.getPrepareMaskMaterial();\n\t\tthis.prepareMaskMaterial.side = DoubleSide;\n\t\tthis.prepareMaskMaterial.fragmentShader = replaceDepthToViewZ( this.prepareMaskMaterial.fragmentShader, this.renderCamera );\n\n\t\tthis.renderTargetDepthBuffer = new WebGLRenderTarget( this.resolution.x, this.resolution.y, { type: HalfFloatType } );\n\t\tthis.renderTargetDepthBuffer.texture.name = 'OutlinePass.depth';\n\t\tthis.renderTargetDepthBuffer.texture.generateMipmaps = false;\n\n\t\tthis.renderTargetMaskDownSampleBuffer = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetMaskDownSampleBuffer.texture.name = 'OutlinePass.depthDownSample';\n\t\tthis.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = false;\n\n\t\tthis.renderTargetBlurBuffer1 = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetBlurBuffer1.texture.name = 'OutlinePass.blur1';\n\t\tthis.renderTargetBlurBuffer1.texture.generateMipmaps = false;\n\t\tthis.renderTargetBlurBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ), { type: HalfFloatType } );\n\t\tthis.renderTargetBlurBuffer2.texture.name = 'OutlinePass.blur2';\n\t\tthis.renderTargetBlurBuffer2.texture.generateMipmaps = false;\n\n\t\tthis.edgeDetectionMaterial = this.getEdgeDetectionMaterial();\n\t\tthis.renderTargetEdgeBuffer1 = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetEdgeBuffer1.texture.name = 'OutlinePass.edge1';\n\t\tthis.renderTargetEdgeBuffer1.texture.generateMipmaps = false;\n\t\tthis.renderTargetEdgeBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ), { type: HalfFloatType } );\n\t\tthis.renderTargetEdgeBuffer2.texture.name = 'OutlinePass.edge2';\n\t\tthis.renderTargetEdgeBuffer2.texture.generateMipmaps = false;\n\n\t\tconst MAX_EDGE_THICKNESS = 4;\n\t\tconst MAX_EDGE_GLOW = 4;\n\n\t\tthis.separableBlurMaterial1 = this.getSeperableBlurMaterial( MAX_EDGE_THICKNESS );\n\t\tthis.separableBlurMaterial1.uniforms[ 'texSize' ].value.set( resx, resy );\n\t\tthis.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = 1;\n\t\tthis.separableBlurMaterial2 = this.getSeperableBlurMaterial( MAX_EDGE_GLOW );\n\t\tthis.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( Math.round( resx / 2 ), Math.round( resy / 2 ) );\n\t\tthis.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW;\n\n\t\t// Overlay material\n\t\tthis.overlayMaterial = this.getOverlayMaterial();\n\n\t\t// copy material\n\n\t\tconst copyShader = CopyShader;\n\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.materialCopy = new ShaderMaterial( {\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\t\t} );\n\n\t\tthis.enabled = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis._oldClearColor = new Color();\n\t\tthis.oldClearAlpha = 1;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.tempPulseColor1 = new Color();\n\t\tthis.tempPulseColor2 = new Color();\n\t\tthis.textureMatrix = new Matrix4();\n\n\t\tfunction replaceDepthToViewZ( string, camera ) {\n\n\t\t\tconst type = camera.isPerspectiveCamera ? 'perspective' : 'orthographic';\n\n\t\t\treturn string.replace( /DEPTH_TO_VIEW_Z/g, type + 'DepthToViewZ' );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTargetMaskBuffer.dispose();\n\t\tthis.renderTargetDepthBuffer.dispose();\n\t\tthis.renderTargetMaskDownSampleBuffer.dispose();\n\t\tthis.renderTargetBlurBuffer1.dispose();\n\t\tthis.renderTargetBlurBuffer2.dispose();\n\t\tthis.renderTargetEdgeBuffer1.dispose();\n\t\tthis.renderTargetEdgeBuffer2.dispose();\n\n\t\tthis.depthMaterial.dispose();\n\t\tthis.prepareMaskMaterial.dispose();\n\t\tthis.edgeDetectionMaterial.dispose();\n\t\tthis.separableBlurMaterial1.dispose();\n\t\tthis.separableBlurMaterial2.dispose();\n\t\tthis.overlayMaterial.dispose();\n\t\tthis.materialCopy.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.renderTargetMaskBuffer.setSize( width, height );\n\t\tthis.renderTargetDepthBuffer.setSize( width, height );\n\n\t\tlet resx = Math.round( width / this.downSampleRatio );\n\t\tlet resy = Math.round( height / this.downSampleRatio );\n\t\tthis.renderTargetMaskDownSampleBuffer.setSize( resx, resy );\n\t\tthis.renderTargetBlurBuffer1.setSize( resx, resy );\n\t\tthis.renderTargetEdgeBuffer1.setSize( resx, resy );\n\t\tthis.separableBlurMaterial1.uniforms[ 'texSize' ].value.set( resx, resy );\n\n\t\tresx = Math.round( resx / 2 );\n\t\tresy = Math.round( resy / 2 );\n\n\t\tthis.renderTargetBlurBuffer2.setSize( resx, resy );\n\t\tthis.renderTargetEdgeBuffer2.setSize( resx, resy );\n\n\t\tthis.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( resx, resy );\n\n\t}\n\n\tchangeVisibilityOfSelectedObjects( bVisible ) {\n\n\t\tconst cache = this._visibilityCache;\n\n\t\tfunction gatherSelectedMeshesCallBack( object ) {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( bVisible === true ) {\n\n\t\t\t\t\tobject.visible = cache.get( object );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcache.set( object, object.visible );\n\t\t\t\t\tobject.visible = bVisible;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.selectedObjects.length; i ++ ) {\n\n\t\t\tconst selectedObject = this.selectedObjects[ i ];\n\t\t\tselectedObject.traverse( gatherSelectedMeshesCallBack );\n\n\t\t}\n\n\t}\n\n\tchangeVisibilityOfNonSelectedObjects( bVisible ) {\n\n\t\tconst cache = this._visibilityCache;\n\t\tconst selectedMeshes = [];\n\n\t\tfunction gatherSelectedMeshesCallBack( object ) {\n\n\t\t\tif ( object.isMesh ) selectedMeshes.push( object );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.selectedObjects.length; i ++ ) {\n\n\t\t\tconst selectedObject = this.selectedObjects[ i ];\n\t\t\tselectedObject.traverse( gatherSelectedMeshesCallBack );\n\n\t\t}\n\n\t\tfunction VisibilityChangeCallBack( object ) {\n\n\t\t\tif ( object.isMesh || object.isSprite ) {\n\n\t\t\t\t// only meshes and sprites are supported by OutlinePass\n\n\t\t\t\tlet bFound = false;\n\n\t\t\t\tfor ( let i = 0; i < selectedMeshes.length; i ++ ) {\n\n\t\t\t\t\tconst selectedObjectId = selectedMeshes[ i ].id;\n\n\t\t\t\t\tif ( selectedObjectId === object.id ) {\n\n\t\t\t\t\t\tbFound = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( bFound === false ) {\n\n\t\t\t\t\tconst visibility = object.visible;\n\n\t\t\t\t\tif ( bVisible === false || cache.get( object ) === true ) {\n\n\t\t\t\t\t\tobject.visible = bVisible;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcache.set( object, visibility );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints || object.isLine ) {\n\n\t\t\t\t// the visibilty of points and lines is always set to false in order to\n\t\t\t\t// not affect the outline computation\n\n\t\t\t\tif ( bVisible === true ) {\n\n\t\t\t\t\tobject.visible = cache.get( object ); // restore\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcache.set( object, object.visible );\n\t\t\t\t\tobject.visible = bVisible;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderScene.traverse( VisibilityChangeCallBack );\n\n\t}\n\n\tupdateTextureMatrix() {\n\n\t\tthis.textureMatrix.set( 0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0 );\n\t\tthis.textureMatrix.multiply( this.renderCamera.projectionMatrix );\n\t\tthis.textureMatrix.multiply( this.renderCamera.matrixWorldInverse );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tif ( this.selectedObjects.length > 0 ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\t\t\tconst oldAutoClear = renderer.autoClear;\n\n\t\t\trenderer.autoClear = false;\n\n\t\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t\trenderer.setClearColor( 0xffffff, 1 );\n\n\t\t\t// Make selected objects invisible\n\t\t\tthis.changeVisibilityOfSelectedObjects( false );\n\n\t\t\tconst currentBackground = this.renderScene.background;\n\t\t\tthis.renderScene.background = null;\n\n\t\t\t// 1. Draw Non Selected objects in the depth buffer\n\t\t\tthis.renderScene.overrideMaterial = this.depthMaterial;\n\t\t\trenderer.setRenderTarget( this.renderTargetDepthBuffer );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.renderScene, this.renderCamera );\n\n\t\t\t// Make selected objects visible\n\t\t\tthis.changeVisibilityOfSelectedObjects( true );\n\t\t\tthis._visibilityCache.clear();\n\n\t\t\t// Update Texture Matrix for Depth compare\n\t\t\tthis.updateTextureMatrix();\n\n\t\t\t// Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects\n\t\t\tthis.changeVisibilityOfNonSelectedObjects( false );\n\t\t\tthis.renderScene.overrideMaterial = this.prepareMaskMaterial;\n\t\t\tthis.prepareMaskMaterial.uniforms[ 'cameraNearFar' ].value.set( this.renderCamera.near, this.renderCamera.far );\n\t\t\tthis.prepareMaskMaterial.uniforms[ 'depthTexture' ].value = this.renderTargetDepthBuffer.texture;\n\t\t\tthis.prepareMaskMaterial.uniforms[ 'textureMatrix' ].value = this.textureMatrix;\n\t\t\trenderer.setRenderTarget( this.renderTargetMaskBuffer );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.renderScene, this.renderCamera );\n\t\t\tthis.renderScene.overrideMaterial = null;\n\t\t\tthis.changeVisibilityOfNonSelectedObjects( true );\n\t\t\tthis._visibilityCache.clear();\n\n\t\t\tthis.renderScene.background = currentBackground;\n\n\t\t\t// 2. Downsample to Half resolution\n\t\t\tthis.fsQuad.material = this.materialCopy;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.renderTargetMaskBuffer.texture;\n\t\t\trenderer.setRenderTarget( this.renderTargetMaskDownSampleBuffer );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\tthis.tempPulseColor1.copy( this.visibleEdgeColor );\n\t\t\tthis.tempPulseColor2.copy( this.hiddenEdgeColor );\n\n\t\t\tif ( this.pulsePeriod > 0 ) {\n\n\t\t\t\tconst scalar = ( 1 + 0.25 ) / 2 + Math.cos( performance.now() * 0.01 / this.pulsePeriod ) * ( 1.0 - 0.25 ) / 2;\n\t\t\t\tthis.tempPulseColor1.multiplyScalar( scalar );\n\t\t\t\tthis.tempPulseColor2.multiplyScalar( scalar );\n\n\t\t\t}\n\n\t\t\t// 3. Apply Edge Detection Pass\n\t\t\tthis.fsQuad.material = this.edgeDetectionMaterial;\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskDownSampleBuffer.texture;\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'texSize' ].value.set( this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height );\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'visibleEdgeColor' ].value = this.tempPulseColor1;\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'hiddenEdgeColor' ].value = this.tempPulseColor2;\n\t\t\trenderer.setRenderTarget( this.renderTargetEdgeBuffer1 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t// 4. Apply Blur on Half res\n\t\t\tthis.fsQuad.material = this.separableBlurMaterial1;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = this.edgeThickness;\n\t\t\trenderer.setRenderTarget( this.renderTargetBlurBuffer1 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetBlurBuffer1.texture;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetEdgeBuffer1 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t// Apply Blur on quarter res\n\t\t\tthis.fsQuad.material = this.separableBlurMaterial2;\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;\n\t\t\trenderer.setRenderTarget( this.renderTargetBlurBuffer2 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetBlurBuffer2.texture;\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetEdgeBuffer2 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t// Blend it additively over the input texture\n\t\t\tthis.fsQuad.material = this.overlayMaterial;\n\t\t\tthis.overlayMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskBuffer.texture;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeTexture1' ].value = this.renderTargetEdgeBuffer1.texture;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeTexture2' ].value = this.renderTargetEdgeBuffer2.texture;\n\t\t\tthis.overlayMaterial.uniforms[ 'patternTexture' ].value = this.patternTexture;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeStrength' ].value = this.edgeStrength;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeGlow' ].value = this.edgeGlow;\n\t\t\tthis.overlayMaterial.uniforms[ 'usePatternTexture' ].value = this.usePatternTexture;\n\n\n\t\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\t\trenderer.setRenderTarget( readBuffer );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\trenderer.setClearColor( this._oldClearColor, this.oldClearAlpha );\n\t\t\trenderer.autoClear = oldAutoClear;\n\n\t\t}\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis.fsQuad.material = this.materialCopy;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tgetPrepareMaskMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\t\t\t\t'depthTexture': { value: null },\n\t\t\t\t'cameraNearFar': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'textureMatrix': { value: null }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`#include \n\t\t\t\t#include \n\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t\tvPosition = mvPosition;\n\n\t\t\t\t\tvec4 worldPosition = vec4( transformed, 1.0 );\n\n\t\t\t\t\t#ifdef USE_INSTANCING\n\n\t\t\t\t\t\tworldPosition = instanceMatrix * worldPosition;\n\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\tworldPosition = modelMatrix * worldPosition;\n\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include \n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n\t\t\t\t\tfloat viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y );\n\t\t\t\t\tfloat depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0;\n\t\t\t\t\tgl_FragColor = vec4(0.0, depthTest, 1.0, 1.0);\n\n\t\t\t\t}`\n\n\t\t} );\n\n\t}\n\n\tgetEdgeDetectionMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\t\t\t\t'maskTexture': { value: null },\n\t\t\t\t'texSize': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'visibleEdgeColor': { value: new Vector3( 1.0, 1.0, 1.0 ) },\n\t\t\t\t'hiddenEdgeColor': { value: new Vector3( 1.0, 1.0, 1.0 ) },\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec3 visibleEdgeColor;\n\t\t\t\tuniform vec3 hiddenEdgeColor;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tvec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);\n\t\t\t\t\tvec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);\n\t\t\t\t\tvec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);\n\t\t\t\t\tvec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);\n\t\t\t\t\tvec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);\n\t\t\t\t\tfloat diff1 = (c1.r - c2.r)*0.5;\n\t\t\t\t\tfloat diff2 = (c3.r - c4.r)*0.5;\n\t\t\t\t\tfloat d = length( vec2(diff1, diff2) );\n\t\t\t\t\tfloat a1 = min(c1.g, c2.g);\n\t\t\t\t\tfloat a2 = min(c3.g, c4.g);\n\t\t\t\t\tfloat visibilityFactor = min(a1, a2);\n\t\t\t\t\tvec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor;\n\t\t\t\t\tgl_FragColor = vec4(edgeColor, 1.0) * vec4(d);\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\tgetSeperableBlurMaterial( maxRadius ) {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'MAX_RADIUS': maxRadius,\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'colorTexture': { value: null },\n\t\t\t\t'texSize': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'direction': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'kernelRadius': { value: 1.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float kernelRadius;\n\n\t\t\t\tfloat gaussianPdf(in float x, in float sigma) {\n\t\t\t\t\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tfloat sigma = kernelRadius/2.0;\n\t\t\t\t\tfloat weightSum = gaussianPdf(0.0, sigma);\n\t\t\t\t\tvec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum;\n\t\t\t\t\tvec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);\n\t\t\t\t\tvec2 uvOffset = delta;\n\t\t\t\t\tfor( int i = 1; i <= MAX_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = kernelRadius * float(i) / float(MAX_RADIUS);\n\t\t\t\t\t\tfloat w = gaussianPdf(x, sigma);\n\t\t\t\t\t\tvec4 sample1 = texture2D( colorTexture, vUv + uvOffset);\n\t\t\t\t\t\tvec4 sample2 = texture2D( colorTexture, vUv - uvOffset);\n\t\t\t\t\t\tdiffuseSum += ((sample1 + sample2) * w);\n\t\t\t\t\t\tweightSum += (2.0 * w);\n\t\t\t\t\t\tuvOffset += delta;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = diffuseSum/weightSum;\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\tgetOverlayMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\t\t\t\t'maskTexture': { value: null },\n\t\t\t\t'edgeTexture1': { value: null },\n\t\t\t\t'edgeTexture2': { value: null },\n\t\t\t\t'patternTexture': { value: null },\n\t\t\t\t'edgeStrength': { value: 1.0 },\n\t\t\t\t'edgeGlow': { value: 1.0 },\n\t\t\t\t'usePatternTexture': { value: 0.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform sampler2D edgeTexture1;\n\t\t\t\tuniform sampler2D edgeTexture2;\n\t\t\t\tuniform sampler2D patternTexture;\n\t\t\t\tuniform float edgeStrength;\n\t\t\t\tuniform float edgeGlow;\n\t\t\t\tuniform bool usePatternTexture;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 edgeValue1 = texture2D(edgeTexture1, vUv);\n\t\t\t\t\tvec4 edgeValue2 = texture2D(edgeTexture2, vUv);\n\t\t\t\t\tvec4 maskColor = texture2D(maskTexture, vUv);\n\t\t\t\t\tvec4 patternColor = texture2D(patternTexture, 6.0 * vUv);\n\t\t\t\t\tfloat visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5;\n\t\t\t\t\tvec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;\n\t\t\t\t\tvec4 finalColor = edgeStrength * maskColor.r * edgeValue;\n\t\t\t\t\tif(usePatternTexture)\n\t\t\t\t\t\tfinalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);\n\t\t\t\t\tgl_FragColor = finalColor;\n\t\t\t\t}`,\n\t\t\tblending: AdditiveBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t}\n\n}\n\nOutlinePass.BlurDirectionX = new Vector2( 1.0, 0.0 );\nOutlinePass.BlurDirectionY = new Vector2( 0.0, 1.0 );\n\nexport { OutlinePass };\n", "const OutputShader = {\n\n\tname: 'OutputShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'toneMappingExposure': { value: 1 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tprecision highp float;\n\n\t\tuniform mat4 modelViewMatrix;\n\t\tuniform mat4 projectionMatrix;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\n\t\tprecision highp float;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\t#include \n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t// tone mapping\n\n\t\t\t#ifdef LINEAR_TONE_MAPPING\n\n\t\t\t\tgl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( REINHARD_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( CINEON_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = OptimizedCineonToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( ACES_FILMIC_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( AGX_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( NEUTRAL_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );\n\n\t\t\t#endif\n\n\t\t\t// color space\n\n\t\t\t#ifdef SRGB_TRANSFER\n\n\t\t\t\tgl_FragColor = sRGBTransferOETF( gl_FragColor );\n\n\t\t\t#endif\n\n\t\t}`\n\n};\n\nexport { OutputShader };\n", "import {\n\tColorManagement,\n\tRawShaderMaterial,\n\tUniformsUtils,\n\tLinearToneMapping,\n\tReinhardToneMapping,\n\tCineonToneMapping,\n\tAgXToneMapping,\n\tACESFilmicToneMapping,\n\tNeutralToneMapping,\n\tSRGBTransfer\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { OutputShader } from '../shaders/OutputShader.js';\n\nclass OutputPass extends Pass {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t//\n\n\t\tconst shader = OutputShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new RawShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t\t// internal cache\n\n\t\tthis._outputColorSpace = null;\n\t\tthis._toneMapping = null;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'toneMappingExposure' ].value = renderer.toneMappingExposure;\n\n\t\t// rebuild defines if required\n\n\t\tif ( this._outputColorSpace !== renderer.outputColorSpace || this._toneMapping !== renderer.toneMapping ) {\n\n\t\t\tthis._outputColorSpace = renderer.outputColorSpace;\n\t\t\tthis._toneMapping = renderer.toneMapping;\n\n\t\t\tthis.material.defines = {};\n\n\t\t\tif ( ColorManagement.getTransfer( this._outputColorSpace ) === SRGBTransfer ) this.material.defines.SRGB_TRANSFER = '';\n\n\t\t\tif ( this._toneMapping === LinearToneMapping ) this.material.defines.LINEAR_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === ReinhardToneMapping ) this.material.defines.REINHARD_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === CineonToneMapping ) this.material.defines.CINEON_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === AgXToneMapping ) this.material.defines.AGX_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === NeutralToneMapping ) this.material.defines.NEUTRAL_TONE_MAPPING = '';\n\n\t\t\tthis.material.needsUpdate = true;\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.renderToScreen === true ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { OutputPass };\n", "import {\n\tColor\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass RenderPass extends Pass {\n\n\tconstructor( scene, camera, overrideMaterial = null, clearColor = null, clearAlpha = null ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.overrideMaterial = overrideMaterial;\n\n\t\tthis.clearColor = clearColor;\n\t\tthis.clearAlpha = clearAlpha;\n\n\t\tthis.clear = true;\n\t\tthis.clearDepth = false;\n\t\tthis.needsSwap = false;\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tlet oldClearAlpha, oldOverrideMaterial;\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\toldOverrideMaterial = this.scene.overrideMaterial;\n\n\t\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\t}\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\trenderer.setClearColor( this.clearColor, renderer.getClearAlpha() );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\t\t\trenderer.setClearAlpha( this.clearAlpha );\n\n\t\t}\n\n\t\tif ( this.clearDepth == true ) {\n\n\t\t\trenderer.clearDepth();\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n\t\tif ( this.clear === true ) {\n\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// restore\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.setClearColor( this._oldClearColor );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\trenderer.setClearAlpha( oldClearAlpha );\n\n\t\t}\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\tthis.scene.overrideMaterial = oldOverrideMaterial;\n\n\t\t}\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n}\n\nexport { RenderPass };\n", "import {\n\tWebGLRenderTarget,\n\tMeshNormalMaterial,\n\tShaderMaterial,\n\tVector2,\n\tVector4,\n\tDepthTexture,\n\tNearestFilter,\n\tHalfFloatType\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\n\nclass RenderPixelatedPass extends Pass {\n\n\tconstructor( pixelSize, scene, camera, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.pixelSize = pixelSize;\n\t\tthis.resolution = new Vector2();\n\t\tthis.renderResolution = new Vector2();\n\n\t\tthis.pixelatedMaterial = this.createPixelatedMaterial();\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\n\t\tthis.fsQuad = new FullScreenQuad( this.pixelatedMaterial );\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.normalEdgeStrength = options.normalEdgeStrength || 0.3;\n\t\tthis.depthEdgeStrength = options.depthEdgeStrength || 0.4;\n\n\t\tthis.beautyRenderTarget = new WebGLRenderTarget();\n\t\tthis.beautyRenderTarget.texture.minFilter = NearestFilter;\n\t\tthis.beautyRenderTarget.texture.magFilter = NearestFilter;\n\t\tthis.beautyRenderTarget.texture.type = HalfFloatType;\n\t\tthis.beautyRenderTarget.depthTexture = new DepthTexture();\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget();\n\t\tthis.normalRenderTarget.texture.minFilter = NearestFilter;\n\t\tthis.normalRenderTarget.texture.magFilter = NearestFilter;\n\t\tthis.normalRenderTarget.texture.type = HalfFloatType;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.beautyRenderTarget.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\n\t\tthis.pixelatedMaterial.dispose();\n\t\tthis.normalMaterial.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.resolution.set( width, height );\n\t\tthis.renderResolution.set( ( width / this.pixelSize ) | 0, ( height / this.pixelSize ) | 0 );\n\t\tconst { x, y } = this.renderResolution;\n\t\tthis.beautyRenderTarget.setSize( x, y );\n\t\tthis.normalRenderTarget.setSize( x, y );\n\t\tthis.fsQuad.material.uniforms.resolution.value.set( x, y, 1 / x, 1 / y );\n\n\t}\n\n\tsetPixelSize( pixelSize ) {\n\n\t\tthis.pixelSize = pixelSize;\n\t\tthis.setSize( this.resolution.x, this.resolution.y );\n\n\t}\n\n\trender( renderer, writeBuffer ) {\n\n\t\tconst uniforms = this.fsQuad.material.uniforms;\n\t\tuniforms.normalEdgeStrength.value = this.normalEdgeStrength;\n\t\tuniforms.depthEdgeStrength.value = this.depthEdgeStrength;\n\n\t\trenderer.setRenderTarget( this.beautyRenderTarget );\n\t\trenderer.render( this.scene, this.camera );\n\n\t\tconst overrideMaterial_old = this.scene.overrideMaterial;\n\t\trenderer.setRenderTarget( this.normalRenderTarget );\n\t\tthis.scene.overrideMaterial = this.normalMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = overrideMaterial_old;\n\n\t\tuniforms.tDiffuse.value = this.beautyRenderTarget.texture;\n\t\tuniforms.tDepth.value = this.beautyRenderTarget.depthTexture;\n\t\tuniforms.tNormal.value = this.normalRenderTarget.texture;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\n\t\t\tif ( this.clear ) renderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n\tcreatePixelatedMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\t\t\tuniforms: {\n\t\t\t\ttDiffuse: { value: null },\n\t\t\t\ttDepth: { value: null },\n\t\t\t\ttNormal: { value: null },\n\t\t\t\tresolution: {\n\t\t\t\t\tvalue: new Vector4(\n\t\t\t\t\t\tthis.renderResolution.x,\n\t\t\t\t\t\tthis.renderResolution.y,\n\t\t\t\t\t\t1 / this.renderResolution.x,\n\t\t\t\t\t\t1 / this.renderResolution.y,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tnormalEdgeStrength: { value: 0 },\n\t\t\t\tdepthEdgeStrength: { value: 0 }\n\t\t\t},\n\t\t\tvertexShader: /* glsl */`\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfragmentShader: /* glsl */`\n\t\t\t\tuniform sampler2D tDiffuse;\n\t\t\t\tuniform sampler2D tDepth;\n\t\t\t\tuniform sampler2D tNormal;\n\t\t\t\tuniform vec4 resolution;\n\t\t\t\tuniform float normalEdgeStrength;\n\t\t\t\tuniform float depthEdgeStrength;\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\tfloat getDepth(int x, int y) {\n\n\t\t\t\t\treturn texture2D( tDepth, vUv + vec2(x, y) * resolution.zw ).r;\n\n\t\t\t\t}\n\n\t\t\t\tvec3 getNormal(int x, int y) {\n\n\t\t\t\t\treturn texture2D( tNormal, vUv + vec2(x, y) * resolution.zw ).rgb * 2.0 - 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tfloat depthEdgeIndicator(float depth, vec3 normal) {\n\n\t\t\t\t\tfloat diff = 0.0;\n\t\t\t\t\tdiff += clamp(getDepth(1, 0) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(-1, 0) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(0, 1) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(0, -1) - depth, 0.0, 1.0);\n\t\t\t\t\treturn floor(smoothstep(0.01, 0.02, diff) * 2.) / 2.;\n\n\t\t\t\t}\n\n\t\t\t\tfloat neighborNormalEdgeIndicator(int x, int y, float depth, vec3 normal) {\n\n\t\t\t\t\tfloat depthDiff = getDepth(x, y) - depth;\n\t\t\t\t\tvec3 neighborNormal = getNormal(x, y);\n\n\t\t\t\t\t// Edge pixels should yield to faces who's normals are closer to the bias normal.\n\t\t\t\t\tvec3 normalEdgeBias = vec3(1., 1., 1.); // This should probably be a parameter.\n\t\t\t\t\tfloat normalDiff = dot(normal - neighborNormal, normalEdgeBias);\n\t\t\t\t\tfloat normalIndicator = clamp(smoothstep(-.01, .01, normalDiff), 0.0, 1.0);\n\n\t\t\t\t\t// Only the shallower pixel should detect the normal edge.\n\t\t\t\t\tfloat depthIndicator = clamp(sign(depthDiff * .25 + .0025), 0.0, 1.0);\n\n\t\t\t\t\treturn (1.0 - dot(normal, neighborNormal)) * depthIndicator * normalIndicator;\n\n\t\t\t\t}\n\n\t\t\t\tfloat normalEdgeIndicator(float depth, vec3 normal) {\n\n\t\t\t\t\tfloat indicator = 0.0;\n\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(0, -1, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(0, 1, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(-1, 0, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(1, 0, depth, normal);\n\n\t\t\t\t\treturn step(0.1, indicator);\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\t\t\tfloat depth = 0.0;\n\t\t\t\t\tvec3 normal = vec3(0.0);\n\n\t\t\t\t\tif (depthEdgeStrength > 0.0 || normalEdgeStrength > 0.0) {\n\n\t\t\t\t\t\tdepth = getDepth(0, 0);\n\t\t\t\t\t\tnormal = getNormal(0, 0);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat dei = 0.0;\n\t\t\t\t\tif (depthEdgeStrength > 0.0)\n\t\t\t\t\t\tdei = depthEdgeIndicator(depth, normal);\n\n\t\t\t\t\tfloat nei = 0.0;\n\t\t\t\t\tif (normalEdgeStrength > 0.0)\n\t\t\t\t\t\tnei = normalEdgeIndicator(depth, normal);\n\n\t\t\t\t\tfloat Strength = dei > 0.0 ? (1.0 - depthEdgeStrength * dei) : (1.0 + normalEdgeStrength * nei);\n\n\t\t\t\t\tgl_FragColor = texel * Strength;\n\n\t\t\t\t}\n\t\t\t`\n\t\t} );\n\n\t}\n\n}\n\nexport { RenderPixelatedPass };\n", "import {\n\tMatrix4,\n\tVector2\n} from 'three';\n\n/**\n * TODO\n */\n\nconst SAOShader = {\n\n\tname: 'SAOShader',\n\n\tdefines: {\n\t\t'NUM_SAMPLES': 7,\n\t\t'NUM_RINGS': 4,\n\t\t'DIFFUSE_TEXTURE': 0,\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\n\t\t'tDepth': { value: null },\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'size': { value: new Vector2( 512, 512 ) },\n\n\t\t'cameraNear': { value: 1 },\n\t\t'cameraFar': { value: 100 },\n\t\t'cameraProjectionMatrix': { value: new Matrix4() },\n\t\t'cameraInverseProjectionMatrix': { value: new Matrix4() },\n\n\t\t'scale': { value: 1.0 },\n\t\t'intensity': { value: 0.1 },\n\t\t'bias': { value: 0.5 },\n\n\t\t'minResolution': { value: 0.0 },\n\t\t'kernelRadius': { value: 100.0 },\n\t\t'randomSeed': { value: 0.0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\t#if DIFFUSE_TEXTURE == 1\n\t\tuniform sampler2D tDiffuse;\n\t\t#endif\n\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform highp sampler2D tNormal;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\n\t\tuniform float scale;\n\t\tuniform float intensity;\n\t\tuniform float bias;\n\t\tuniform float kernelRadius;\n\t\tuniform float minResolution;\n\t\tuniform vec2 size;\n\t\tuniform float randomSeed;\n\n\t\t// RGBA depth\n\n\t\t#include \n\n\t\tvec4 getDefaultColor( const in vec2 screenPosition ) {\n\t\t\t#if DIFFUSE_TEXTURE == 1\n\t\t\treturn texture2D( tDiffuse, vUv );\n\t\t\t#else\n\t\t\treturn vec4( 1.0 );\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];\n\t\t\tvec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );\n\t\t\tclipPosition *= clipW; // unprojection.\n\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;\n\t\t}\n\n\t\tvec3 getViewNormal( const in vec3 viewPosition, const in vec2 screenPosition ) {\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );\n\t\t}\n\n\t\tfloat scaleDividedByCameraFar;\n\t\tfloat minResolutionMultipliedByCameraFar;\n\n\t\tfloat getOcclusion( const in vec3 centerViewPosition, const in vec3 centerViewNormal, const in vec3 sampleViewPosition ) {\n\t\t\tvec3 viewDelta = sampleViewPosition - centerViewPosition;\n\t\t\tfloat viewDistance = length( viewDelta );\n\t\t\tfloat scaledScreenDistance = scaleDividedByCameraFar * viewDistance;\n\n\t\t\treturn max(0.0, (dot(centerViewNormal, viewDelta) - minResolutionMultipliedByCameraFar) / scaledScreenDistance - bias) / (1.0 + pow2( scaledScreenDistance ) );\n\t\t}\n\n\t\t// moving costly divides into consts\n\t\tconst float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );\n\t\tconst float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );\n\n\t\tfloat getAmbientOcclusion( const in vec3 centerViewPosition ) {\n\t\t\t// precompute some variables require in getOcclusion.\n\t\t\tscaleDividedByCameraFar = scale / cameraFar;\n\t\t\tminResolutionMultipliedByCameraFar = minResolution * cameraFar;\n\t\t\tvec3 centerViewNormal = getViewNormal( centerViewPosition, vUv );\n\n\t\t\t// jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/\n\t\t\tfloat angle = rand( vUv + randomSeed ) * PI2;\n\t\t\tvec2 radius = vec2( kernelRadius * INV_NUM_SAMPLES ) / size;\n\t\t\tvec2 radiusStep = radius;\n\n\t\t\tfloat occlusionSum = 0.0;\n\t\t\tfloat weightSum = 0.0;\n\n\t\t\tfor( int i = 0; i < NUM_SAMPLES; i ++ ) {\n\t\t\t\tvec2 sampleUv = vUv + vec2( cos( angle ), sin( angle ) ) * radius;\n\t\t\t\tradius += radiusStep;\n\t\t\t\tangle += ANGLE_STEP;\n\n\t\t\t\tfloat sampleDepth = getDepth( sampleUv );\n\t\t\t\tif( sampleDepth >= ( 1.0 - EPSILON ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfloat sampleViewZ = getViewZ( sampleDepth );\n\t\t\t\tvec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ );\n\t\t\t\tocclusionSum += getOcclusion( centerViewPosition, centerViewNormal, sampleViewPosition );\n\t\t\t\tweightSum += 1.0;\n\t\t\t}\n\n\t\t\tif( weightSum == 0.0 ) discard;\n\n\t\t\treturn occlusionSum * ( intensity / weightSum );\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat centerDepth = getDepth( vUv );\n\t\t\tif( centerDepth >= ( 1.0 - EPSILON ) ) {\n\t\t\t\tdiscard;\n\t\t\t}\n\n\t\t\tfloat centerViewZ = getViewZ( centerDepth );\n\t\t\tvec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ );\n\n\t\t\tfloat ambientOcclusion = getAmbientOcclusion( viewPosition );\n\n\t\t\tgl_FragColor = getDefaultColor( vUv );\n\t\t\tgl_FragColor.xyz *= 1.0 - ambientOcclusion;\n\t\t}`\n\n};\n\nexport { SAOShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * TODO\n */\n\nconst DepthLimitedBlurShader = {\n\n\tname: 'DepthLimitedBlurShader',\n\n\tdefines: {\n\t\t'KERNEL_RADIUS': 4,\n\t\t'DEPTH_PACKING': 1,\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'size': { value: new Vector2( 512, 512 ) },\n\t\t'sampleUvOffsets': { value: [ new Vector2( 0, 0 ) ] },\n\t\t'sampleWeights': { value: [ 1.0 ] },\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: 10 },\n\t\t'cameraFar': { value: 1000 },\n\t\t'depthCutoff': { value: 10 },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform vec2 size;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec2 vInvSize;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tvInvSize = 1.0 / size;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\t\t#include \n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDepth;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform float depthCutoff;\n\n\t\tuniform vec2 sampleUvOffsets[ KERNEL_RADIUS + 1 ];\n\t\tuniform float sampleWeights[ KERNEL_RADIUS + 1 ];\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec2 vInvSize;\n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\t\t\t#if DEPTH_PACKING == 1\n\t\t\treturn unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );\n\t\t\t#else\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth( vUv );\n\t\t\tif( depth >= ( 1.0 - EPSILON ) ) {\n\t\t\t\tdiscard;\n\t\t\t}\n\n\t\t\tfloat centerViewZ = -getViewZ( depth );\n\t\t\tbool rBreak = false, lBreak = false;\n\n\t\t\tfloat weightSum = sampleWeights[0];\n\t\t\tvec4 diffuseSum = texture2D( tDiffuse, vUv ) * weightSum;\n\n\t\t\tfor( int i = 1; i <= KERNEL_RADIUS; i ++ ) {\n\n\t\t\t\tfloat sampleWeight = sampleWeights[i];\n\t\t\t\tvec2 sampleUvOffset = sampleUvOffsets[i] * vInvSize;\n\n\t\t\t\tvec2 sampleUv = vUv + sampleUvOffset;\n\t\t\t\tfloat viewZ = -getViewZ( getDepth( sampleUv ) );\n\n\t\t\t\tif( abs( viewZ - centerViewZ ) > depthCutoff ) rBreak = true;\n\n\t\t\t\tif( ! rBreak ) {\n\t\t\t\t\tdiffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;\n\t\t\t\t\tweightSum += sampleWeight;\n\t\t\t\t}\n\n\t\t\t\tsampleUv = vUv - sampleUvOffset;\n\t\t\t\tviewZ = -getViewZ( getDepth( sampleUv ) );\n\n\t\t\t\tif( abs( viewZ - centerViewZ ) > depthCutoff ) lBreak = true;\n\n\t\t\t\tif( ! lBreak ) {\n\t\t\t\t\tdiffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;\n\t\t\t\t\tweightSum += sampleWeight;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgl_FragColor = diffuseSum / weightSum;\n\t\t}`\n\n};\n\nconst BlurShaderUtils = {\n\n\tcreateSampleWeights: function ( kernelRadius, stdDev ) {\n\n\t\tconst weights = [];\n\n\t\tfor ( let i = 0; i <= kernelRadius; i ++ ) {\n\n\t\t\tweights.push( gaussian( i, stdDev ) );\n\n\t\t}\n\n\t\treturn weights;\n\n\t},\n\n\tcreateSampleOffsets: function ( kernelRadius, uvIncrement ) {\n\n\t\tconst offsets = [];\n\n\t\tfor ( let i = 0; i <= kernelRadius; i ++ ) {\n\n\t\t\toffsets.push( uvIncrement.clone().multiplyScalar( i ) );\n\n\t\t}\n\n\t\treturn offsets;\n\n\t},\n\n\tconfigure: function ( material, kernelRadius, stdDev, uvIncrement ) {\n\n\t\tmaterial.defines[ 'KERNEL_RADIUS' ] = kernelRadius;\n\t\tmaterial.uniforms[ 'sampleUvOffsets' ].value = BlurShaderUtils.createSampleOffsets( kernelRadius, uvIncrement );\n\t\tmaterial.uniforms[ 'sampleWeights' ].value = BlurShaderUtils.createSampleWeights( kernelRadius, stdDev );\n\t\tmaterial.needsUpdate = true;\n\n\t}\n\n};\n\nfunction gaussian( x, stdDev ) {\n\n\treturn Math.exp( - ( x * x ) / ( 2.0 * ( stdDev * stdDev ) ) ) / ( Math.sqrt( 2.0 * Math.PI ) * stdDev );\n\n}\n\nexport { DepthLimitedBlurShader, BlurShaderUtils };\n", "import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDepthTexture,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tHalfFloatType,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tDepthStencilFormat,\n\tUnsignedInt248Type,\n\tVector2,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SAOShader } from '../shaders/SAOShader.js';\nimport { DepthLimitedBlurShader } from '../shaders/DepthLimitedBlurShader.js';\nimport { BlurShaderUtils } from '../shaders/DepthLimitedBlurShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\n/**\n * SAO implementation inspired from bhouston previous SAO work\n */\n\nclass SAOPass extends Pass {\n\n\tconstructor( scene, camera, resolution = new Vector2( 256, 256 ) ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.originalClearColor = new Color();\n\t\tthis._oldClearColor = new Color();\n\t\tthis.oldClearAlpha = 1;\n\n\t\tthis.params = {\n\t\t\toutput: 0,\n\t\t\tsaoBias: 0.5,\n\t\t\tsaoIntensity: 0.18,\n\t\t\tsaoScale: 1,\n\t\t\tsaoKernelRadius: 100,\n\t\t\tsaoMinResolution: 0,\n\t\t\tsaoBlur: true,\n\t\t\tsaoBlurRadius: 8,\n\t\t\tsaoBlurStdDev: 4,\n\t\t\tsaoBlurDepthCutoff: 0.01\n\t\t};\n\n\t\tthis.resolution = new Vector2( resolution.x, resolution.y );\n\n\t\tthis.saoRenderTarget = new WebGLRenderTarget( this.resolution.x, this.resolution.y, { type: HalfFloatType } );\n\t\tthis.blurIntermediateRenderTarget = this.saoRenderTarget.clone();\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.format = DepthStencilFormat;\n\t\tdepthTexture.type = UnsignedInt248Type;\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.resolution.x, this.resolution.y, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t\tdepthTexture: depthTexture\n\t\t} );\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\tthis.saoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SAOShader.defines ),\n\t\t\tfragmentShader: SAOShader.fragmentShader,\n\t\t\tvertexShader: SAOShader.vertexShader,\n\t\t\tuniforms: UniformsUtils.clone( SAOShader.uniforms )\n\t\t} );\n\t\tthis.saoMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.saoMaterial.uniforms[ 'tDepth' ].value = depthTexture;\n\t\tthis.saoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\tthis.saoMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );\n\t\tthis.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;\n\t\tthis.saoMaterial.blending = NoBlending;\n\n\t\tthis.vBlurMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( DepthLimitedBlurShader.uniforms ),\n\t\t\tdefines: Object.assign( {}, DepthLimitedBlurShader.defines ),\n\t\t\tvertexShader: DepthLimitedBlurShader.vertexShader,\n\t\t\tfragmentShader: DepthLimitedBlurShader.fragmentShader\n\t\t} );\n\t\tthis.vBlurMaterial.defines[ 'DEPTH_PACKING' ] = 0;\n\t\tthis.vBlurMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.vBlurMaterial.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;\n\t\tthis.vBlurMaterial.uniforms[ 'tDepth' ].value = depthTexture;\n\t\tthis.vBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );\n\t\tthis.vBlurMaterial.blending = NoBlending;\n\n\t\tthis.hBlurMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( DepthLimitedBlurShader.uniforms ),\n\t\t\tdefines: Object.assign( {}, DepthLimitedBlurShader.defines ),\n\t\t\tvertexShader: DepthLimitedBlurShader.vertexShader,\n\t\t\tfragmentShader: DepthLimitedBlurShader.fragmentShader\n\t\t} );\n\t\tthis.hBlurMaterial.defines[ 'DEPTH_PACKING' ] = 0;\n\t\tthis.hBlurMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.hBlurMaterial.uniforms[ 'tDiffuse' ].value = this.blurIntermediateRenderTarget.texture;\n\t\tthis.hBlurMaterial.uniforms[ 'tDepth' ].value = depthTexture;\n\t\tthis.hBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );\n\t\tthis.hBlurMaterial.blending = NoBlending;\n\n\t\tthis.materialCopy = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.materialCopy.transparent = true;\n\t\tthis.materialCopy.depthTest = false;\n\t\tthis.materialCopy.depthWrite = false;\n\t\tthis.materialCopy.blending = CustomBlending;\n\t\tthis.materialCopy.blendSrc = DstColorFactor;\n\t\tthis.materialCopy.blendDst = ZeroFactor;\n\t\tthis.materialCopy.blendEquation = AddEquation;\n\t\tthis.materialCopy.blendSrcAlpha = DstAlphaFactor;\n\t\tthis.materialCopy.blendDstAlpha = ZeroFactor;\n\t\tthis.materialCopy.blendEquationAlpha = AddEquation;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\t// Rendering readBuffer first when rendering to screen\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis.materialCopy.blending = NoBlending;\n\t\t\tthis.materialCopy.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\t\tthis.materialCopy.needsUpdate = true;\n\t\t\tthis.renderPass( renderer, this.materialCopy, null );\n\n\t\t}\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.saoMaterial.uniforms[ 'bias' ].value = this.params.saoBias;\n\t\tthis.saoMaterial.uniforms[ 'intensity' ].value = this.params.saoIntensity;\n\t\tthis.saoMaterial.uniforms[ 'scale' ].value = this.params.saoScale;\n\t\tthis.saoMaterial.uniforms[ 'kernelRadius' ].value = this.params.saoKernelRadius;\n\t\tthis.saoMaterial.uniforms[ 'minResolution' ].value = this.params.saoMinResolution;\n\t\tthis.saoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.saoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\t// this.saoMaterial.uniforms['randomSeed'].value = Math.random();\n\n\t\tconst depthCutoff = this.params.saoBlurDepthCutoff * ( this.camera.far - this.camera.near );\n\t\tthis.vBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;\n\t\tthis.hBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;\n\n\t\tthis.vBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.vBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\tthis.hBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.hBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\n\t\tthis.params.saoBlurRadius = Math.floor( this.params.saoBlurRadius );\n\t\tif ( ( this.prevStdDev !== this.params.saoBlurStdDev ) || ( this.prevNumSamples !== this.params.saoBlurRadius ) ) {\n\n\t\t\tBlurShaderUtils.configure( this.vBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new Vector2( 0, 1 ) );\n\t\t\tBlurShaderUtils.configure( this.hBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new Vector2( 1, 0 ) );\n\t\t\tthis.prevStdDev = this.params.saoBlurStdDev;\n\t\t\tthis.prevNumSamples = this.params.saoBlurRadius;\n\n\t\t}\n\n\t\t// render normal and depth\n\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\n\t\t// Rendering SAO texture\n\t\tthis.renderPass( renderer, this.saoMaterial, this.saoRenderTarget, 0xffffff, 1.0 );\n\n\t\t// Blurring SAO texture\n\t\tif ( this.params.saoBlur ) {\n\n\t\t\tthis.renderPass( renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 0xffffff, 1.0 );\n\t\t\tthis.renderPass( renderer, this.hBlurMaterial, this.saoRenderTarget, 0xffffff, 1.0 );\n\n\t\t}\n\n\t\tconst outputMaterial = this.materialCopy;\n\n\t\t// Setting up SAO rendering\n\t\tif ( this.params.output === SAOPass.OUTPUT.Normal ) {\n\n\t\t\tthis.materialCopy.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\tthis.materialCopy.needsUpdate = true;\n\n\t\t} else {\n\n\t\t\tthis.materialCopy.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;\n\t\t\tthis.materialCopy.needsUpdate = true;\n\n\t\t}\n\n\t\t// Blending depends on output\n\t\tif ( this.params.output === SAOPass.OUTPUT.Default ) {\n\n\t\t\toutputMaterial.blending = CustomBlending;\n\n\t\t} else {\n\n\t\t\toutputMaterial.blending = NoBlending;\n\n\t\t}\n\n\t\t// Rendering SAOPass result on top of previous pass\n\t\tthis.renderPass( renderer, outputMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\trenderer.setClearColor( this._oldClearColor, this.oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.saoRenderTarget.setSize( width, height );\n\t\tthis.blurIntermediateRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\n\t\tthis.saoMaterial.uniforms[ 'size' ].value.set( width, height );\n\t\tthis.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;\n\t\tthis.saoMaterial.needsUpdate = true;\n\n\t\tthis.vBlurMaterial.uniforms[ 'size' ].value.set( width, height );\n\t\tthis.vBlurMaterial.needsUpdate = true;\n\n\t\tthis.hBlurMaterial.uniforms[ 'size' ].value.set( width, height );\n\t\tthis.hBlurMaterial.needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.saoRenderTarget.dispose();\n\t\tthis.blurIntermediateRenderTarget.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\n\t\tthis.normalMaterial.dispose();\n\t\tthis.saoMaterial.dispose();\n\t\tthis.vBlurMaterial.dispose();\n\t\tthis.hBlurMaterial.dispose();\n\t\tthis.materialCopy.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nSAOPass.OUTPUT = {\n\t'Default': 0,\n\t'SAO': 1,\n\t'Normal': 2\n};\n\nexport { SAOPass };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * WebGL port of Subpixel Morphological Antialiasing (SMAA) v2.8\n * Preset: SMAA 1x Medium (with color edge detection)\n * https://github.com/iryoku/smaa/releases/tag/v2.8\n */\n\nconst SMAAEdgesShader = {\n\n\tname: 'SMAAEdgesShader',\n\n\tdefines: {\n\n\t\t'SMAA_THRESHOLD': '0.1'\n\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 3 ];\n\n\t\tvoid SMAAEdgeDetectionVS( vec2 texcoord ) {\n\t\t\tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component\n\t\t\tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component\n\t\t\tvOffset[ 2 ] = texcoord.xyxy + resolution.xyxy * vec4( -2.0, 0.0, 0.0, 2.0 ); // WebGL port note: Changed sign in W component\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tSMAAEdgeDetectionVS( vUv );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 3 ];\n\n\t\tvec4 SMAAColorEdgeDetectionPS( vec2 texcoord, vec4 offset[3], sampler2D colorTex ) {\n\t\t\tvec2 threshold = vec2( SMAA_THRESHOLD, SMAA_THRESHOLD );\n\n\t\t\t// Calculate color deltas:\n\t\t\tvec4 delta;\n\t\t\tvec3 C = texture2D( colorTex, texcoord ).rgb;\n\n\t\t\tvec3 Cleft = texture2D( colorTex, offset[0].xy ).rgb;\n\t\t\tvec3 t = abs( C - Cleft );\n\t\t\tdelta.x = max( max( t.r, t.g ), t.b );\n\n\t\t\tvec3 Ctop = texture2D( colorTex, offset[0].zw ).rgb;\n\t\t\tt = abs( C - Ctop );\n\t\t\tdelta.y = max( max( t.r, t.g ), t.b );\n\n\t\t\t// We do the usual threshold:\n\t\t\tvec2 edges = step( threshold, delta.xy );\n\n\t\t\t// Then discard if there is no edge:\n\t\t\tif ( dot( edges, vec2( 1.0, 1.0 ) ) == 0.0 )\n\t\t\t\tdiscard;\n\n\t\t\t// Calculate right and bottom deltas:\n\t\t\tvec3 Cright = texture2D( colorTex, offset[1].xy ).rgb;\n\t\t\tt = abs( C - Cright );\n\t\t\tdelta.z = max( max( t.r, t.g ), t.b );\n\n\t\t\tvec3 Cbottom = texture2D( colorTex, offset[1].zw ).rgb;\n\t\t\tt = abs( C - Cbottom );\n\t\t\tdelta.w = max( max( t.r, t.g ), t.b );\n\n\t\t\t// Calculate the maximum delta in the direct neighborhood:\n\t\t\tfloat maxDelta = max( max( max( delta.x, delta.y ), delta.z ), delta.w );\n\n\t\t\t// Calculate left-left and top-top deltas:\n\t\t\tvec3 Cleftleft = texture2D( colorTex, offset[2].xy ).rgb;\n\t\t\tt = abs( C - Cleftleft );\n\t\t\tdelta.z = max( max( t.r, t.g ), t.b );\n\n\t\t\tvec3 Ctoptop = texture2D( colorTex, offset[2].zw ).rgb;\n\t\t\tt = abs( C - Ctoptop );\n\t\t\tdelta.w = max( max( t.r, t.g ), t.b );\n\n\t\t\t// Calculate the final maximum delta:\n\t\t\tmaxDelta = max( max( maxDelta, delta.z ), delta.w );\n\n\t\t\t// Local contrast adaptation in action:\n\t\t\tedges.xy *= step( 0.5 * maxDelta, delta.xy );\n\n\t\t\treturn vec4( edges, 0.0, 0.0 );\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = SMAAColorEdgeDetectionPS( vUv, vOffset, tDiffuse );\n\n\t\t}`\n\n};\n\nconst SMAAWeightsShader = {\n\n\tname: 'SMAAWeightsShader',\n\n\tdefines: {\n\n\t\t'SMAA_MAX_SEARCH_STEPS': '8',\n\t\t'SMAA_AREATEX_MAX_DISTANCE': '16',\n\t\t'SMAA_AREATEX_PIXEL_SIZE': '( 1.0 / vec2( 160.0, 560.0 ) )',\n\t\t'SMAA_AREATEX_SUBTEX_SIZE': '( 1.0 / 7.0 )'\n\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tArea': { value: null },\n\t\t'tSearch': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 3 ];\n\t\tvarying vec2 vPixcoord;\n\n\t\tvoid SMAABlendingWeightCalculationVS( vec2 texcoord ) {\n\t\t\tvPixcoord = texcoord / resolution;\n\n\t\t\t// We will use these offsets for the searches later on (see @PSEUDO_GATHER4):\n\t\t\tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.25, 0.125, 1.25, 0.125 ); // WebGL port note: Changed sign in Y and W components\n\t\t\tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.125, 0.25, -0.125, -1.25 ); // WebGL port note: Changed sign in Y and W components\n\n\t\t\t// And these for the searches, they indicate the ends of the loops:\n\t\t\tvOffset[ 2 ] = vec4( vOffset[ 0 ].xz, vOffset[ 1 ].yw ) + vec4( -2.0, 2.0, -2.0, 2.0 ) * resolution.xxyy * float( SMAA_MAX_SEARCH_STEPS );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tSMAABlendingWeightCalculationVS( vUv );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define SMAASampleLevelZeroOffset( tex, coord, offset ) texture2D( tex, coord + float( offset ) * resolution, 0.0 )\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tArea;\n\t\tuniform sampler2D tSearch;\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[3];\n\t\tvarying vec2 vPixcoord;\n\n\t\t#if __VERSION__ == 100\n\t\tvec2 round( vec2 x ) {\n\t\t\treturn sign( x ) * floor( abs( x ) + 0.5 );\n\t\t}\n\t\t#endif\n\n\t\tfloat SMAASearchLength( sampler2D searchTex, vec2 e, float bias, float scale ) {\n\t\t\t// Not required if searchTex accesses are set to point:\n\t\t\t// float2 SEARCH_TEX_PIXEL_SIZE = 1.0 / float2(66.0, 33.0);\n\t\t\t// e = float2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE +\n\t\t\t// e * float2(scale, 1.0) * float2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;\n\t\t\te.r = bias + e.r * scale;\n\t\t\treturn 255.0 * texture2D( searchTex, e, 0.0 ).r;\n\t\t}\n\n\t\tfloat SMAASearchXLeft( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\t/**\n\t\t\t\t* @PSEUDO_GATHER4\n\t\t\t\t* This texcoord has been offset by (-0.25, -0.125) in the vertex shader to\n\t\t\t\t* sample between edge, thus fetching four edges in a row.\n\t\t\t\t* Sampling with different offsets in each direction allows to disambiguate\n\t\t\t\t* which edges are active from the four fetched ones.\n\t\t\t\t*/\n\t\t\tvec2 e = vec2( 0.0, 1.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord -= vec2( 2.0, 0.0 ) * resolution;\n\t\t\t\tif ( ! ( texcoord.x > end && e.g > 0.8281 && e.r == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\t// We correct the previous (-0.25, -0.125) offset we applied:\n\t\t\ttexcoord.x += 0.25 * resolution.x;\n\n\t\t\t// The searches are bias by 1, so adjust the coords accordingly:\n\t\t\ttexcoord.x += resolution.x;\n\n\t\t\t// Disambiguate the length added by the last step:\n\t\t\ttexcoord.x += 2.0 * resolution.x; // Undo last step\n\t\t\ttexcoord.x -= resolution.x * SMAASearchLength(searchTex, e, 0.0, 0.5);\n\n\t\t\treturn texcoord.x;\n\t\t}\n\n\t\tfloat SMAASearchXRight( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\tvec2 e = vec2( 0.0, 1.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord += vec2( 2.0, 0.0 ) * resolution;\n\t\t\t\tif ( ! ( texcoord.x < end && e.g > 0.8281 && e.r == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\ttexcoord.x -= 0.25 * resolution.x;\n\t\t\ttexcoord.x -= resolution.x;\n\t\t\ttexcoord.x -= 2.0 * resolution.x;\n\t\t\ttexcoord.x += resolution.x * SMAASearchLength( searchTex, e, 0.5, 0.5 );\n\n\t\t\treturn texcoord.x;\n\t\t}\n\n\t\tfloat SMAASearchYUp( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\tvec2 e = vec2( 1.0, 0.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord += vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign\n\t\t\t\tif ( ! ( texcoord.y > end && e.r > 0.8281 && e.g == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\ttexcoord.y -= 0.25 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y -= resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y -= 2.0 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y += resolution.y * SMAASearchLength( searchTex, e.gr, 0.0, 0.5 ); // WebGL port note: Changed sign\n\n\t\t\treturn texcoord.y;\n\t\t}\n\n\t\tfloat SMAASearchYDown( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\tvec2 e = vec2( 1.0, 0.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord -= vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign\n\t\t\t\tif ( ! ( texcoord.y < end && e.r > 0.8281 && e.g == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\ttexcoord.y += 0.25 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y += resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y += 2.0 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y -= resolution.y * SMAASearchLength( searchTex, e.gr, 0.5, 0.5 ); // WebGL port note: Changed sign\n\n\t\t\treturn texcoord.y;\n\t\t}\n\n\t\tvec2 SMAAArea( sampler2D areaTex, vec2 dist, float e1, float e2, float offset ) {\n\t\t\t// Rounding prevents precision errors of bilinear filtering:\n\t\t\tvec2 texcoord = float( SMAA_AREATEX_MAX_DISTANCE ) * round( 4.0 * vec2( e1, e2 ) ) + dist;\n\n\t\t\t// We do a scale and bias for mapping to texel space:\n\t\t\ttexcoord = SMAA_AREATEX_PIXEL_SIZE * texcoord + ( 0.5 * SMAA_AREATEX_PIXEL_SIZE );\n\n\t\t\t// Move to proper place, according to the subpixel offset:\n\t\t\ttexcoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;\n\n\t\t\treturn texture2D( areaTex, texcoord, 0.0 ).rg;\n\t\t}\n\n\t\tvec4 SMAABlendingWeightCalculationPS( vec2 texcoord, vec2 pixcoord, vec4 offset[ 3 ], sampler2D edgesTex, sampler2D areaTex, sampler2D searchTex, ivec4 subsampleIndices ) {\n\t\t\tvec4 weights = vec4( 0.0, 0.0, 0.0, 0.0 );\n\n\t\t\tvec2 e = texture2D( edgesTex, texcoord ).rg;\n\n\t\t\tif ( e.g > 0.0 ) { // Edge at north\n\t\t\t\tvec2 d;\n\n\t\t\t\t// Find the distance to the left:\n\t\t\t\tvec2 coords;\n\t\t\t\tcoords.x = SMAASearchXLeft( edgesTex, searchTex, offset[ 0 ].xy, offset[ 2 ].x );\n\t\t\t\tcoords.y = offset[ 1 ].y; // offset[1].y = texcoord.y - 0.25 * resolution.y (@CROSSING_OFFSET)\n\t\t\t\td.x = coords.x;\n\n\t\t\t\t// Now fetch the left crossing edges, two at a time using bilinear\n\t\t\t\t// filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to\n\t\t\t\t// discern what value each edge has:\n\t\t\t\tfloat e1 = texture2D( edgesTex, coords, 0.0 ).r;\n\n\t\t\t\t// Find the distance to the right:\n\t\t\t\tcoords.x = SMAASearchXRight( edgesTex, searchTex, offset[ 0 ].zw, offset[ 2 ].y );\n\t\t\t\td.y = coords.x;\n\n\t\t\t\t// We want the distances to be in pixel units (doing this here allow to\n\t\t\t\t// better interleave arithmetic and memory accesses):\n\t\t\t\td = d / resolution.x - pixcoord.x;\n\n\t\t\t\t// SMAAArea below needs a sqrt, as the areas texture is compressed\n\t\t\t\t// quadratically:\n\t\t\t\tvec2 sqrt_d = sqrt( abs( d ) );\n\n\t\t\t\t// Fetch the right crossing edges:\n\t\t\t\tcoords.y -= 1.0 * resolution.y; // WebGL port note: Added\n\t\t\t\tfloat e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 1, 0 ) ).r;\n\n\t\t\t\t// Ok, we know how this pattern looks like, now it is time for getting\n\t\t\t\t// the actual area:\n\t\t\t\tweights.rg = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.y ) );\n\t\t\t}\n\n\t\t\tif ( e.r > 0.0 ) { // Edge at west\n\t\t\t\tvec2 d;\n\n\t\t\t\t// Find the distance to the top:\n\t\t\t\tvec2 coords;\n\n\t\t\t\tcoords.y = SMAASearchYUp( edgesTex, searchTex, offset[ 1 ].xy, offset[ 2 ].z );\n\t\t\t\tcoords.x = offset[ 0 ].x; // offset[1].x = texcoord.x - 0.25 * resolution.x;\n\t\t\t\td.x = coords.y;\n\n\t\t\t\t// Fetch the top crossing edges:\n\t\t\t\tfloat e1 = texture2D( edgesTex, coords, 0.0 ).g;\n\n\t\t\t\t// Find the distance to the bottom:\n\t\t\t\tcoords.y = SMAASearchYDown( edgesTex, searchTex, offset[ 1 ].zw, offset[ 2 ].w );\n\t\t\t\td.y = coords.y;\n\n\t\t\t\t// We want the distances to be in pixel units:\n\t\t\t\td = d / resolution.y - pixcoord.y;\n\n\t\t\t\t// SMAAArea below needs a sqrt, as the areas texture is compressed\n\t\t\t\t// quadratically:\n\t\t\t\tvec2 sqrt_d = sqrt( abs( d ) );\n\n\t\t\t\t// Fetch the bottom crossing edges:\n\t\t\t\tcoords.y -= 1.0 * resolution.y; // WebGL port note: Added\n\t\t\t\tfloat e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 0, 1 ) ).g;\n\n\t\t\t\t// Get the area for this direction:\n\t\t\t\tweights.ba = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.x ) );\n\t\t\t}\n\n\t\t\treturn weights;\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = SMAABlendingWeightCalculationPS( vUv, vPixcoord, vOffset, tDiffuse, tArea, tSearch, ivec4( 0.0 ) );\n\n\t\t}`\n\n};\n\nconst SMAABlendShader = {\n\n\tname: 'SMAABlendShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tColor': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 2 ];\n\n\t\tvoid SMAANeighborhoodBlendingVS( vec2 texcoord ) {\n\t\t\tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component\n\t\t\tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tSMAANeighborhoodBlendingVS( vUv );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tColor;\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 2 ];\n\n\t\tvec4 SMAANeighborhoodBlendingPS( vec2 texcoord, vec4 offset[ 2 ], sampler2D colorTex, sampler2D blendTex ) {\n\t\t\t// Fetch the blending weights for current pixel:\n\t\t\tvec4 a;\n\t\t\ta.xz = texture2D( blendTex, texcoord ).xz;\n\t\t\ta.y = texture2D( blendTex, offset[ 1 ].zw ).g;\n\t\t\ta.w = texture2D( blendTex, offset[ 1 ].xy ).a;\n\n\t\t\t// Is there any blending weight with a value greater than 0.0?\n\t\t\tif ( dot(a, vec4( 1.0, 1.0, 1.0, 1.0 )) < 1e-5 ) {\n\t\t\t\treturn texture2D( colorTex, texcoord, 0.0 );\n\t\t\t} else {\n\t\t\t\t// Up to 4 lines can be crossing a pixel (one through each edge). We\n\t\t\t\t// favor blending by choosing the line with the maximum weight for each\n\t\t\t\t// direction:\n\t\t\t\tvec2 offset;\n\t\t\t\toffset.x = a.a > a.b ? a.a : -a.b; // left vs. right\n\t\t\t\toffset.y = a.g > a.r ? -a.g : a.r; // top vs. bottom // WebGL port note: Changed signs\n\n\t\t\t\t// Then we go in the direction that has the maximum weight:\n\t\t\t\tif ( abs( offset.x ) > abs( offset.y )) { // horizontal vs. vertical\n\t\t\t\t\toffset.y = 0.0;\n\t\t\t\t} else {\n\t\t\t\t\toffset.x = 0.0;\n\t\t\t\t}\n\n\t\t\t\t// Fetch the opposite color and lerp by hand:\n\t\t\t\tvec4 C = texture2D( colorTex, texcoord, 0.0 );\n\t\t\t\ttexcoord += sign( offset ) * resolution;\n\t\t\t\tvec4 Cop = texture2D( colorTex, texcoord, 0.0 );\n\t\t\t\tfloat s = abs( offset.x ) > abs( offset.y ) ? abs( offset.x ) : abs( offset.y );\n\n\t\t\t\t// WebGL port note: Added gamma correction\n\t\t\t\tC.xyz = pow(C.xyz, vec3(2.2));\n\t\t\t\tCop.xyz = pow(Cop.xyz, vec3(2.2));\n\t\t\t\tvec4 mixed = mix(C, Cop, s);\n\t\t\t\tmixed.xyz = pow(mixed.xyz, vec3(1.0 / 2.2));\n\n\t\t\t\treturn mixed;\n\t\t\t}\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = SMAANeighborhoodBlendingPS( vUv, vOffset, tColor, tDiffuse );\n\n\t\t}`\n\n};\n\nexport { SMAAEdgesShader, SMAAWeightsShader, SMAABlendShader };\n", "import {\n\tHalfFloatType,\n\tLinearFilter,\n\tNearestFilter,\n\tShaderMaterial,\n\tTexture,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SMAAEdgesShader } from '../shaders/SMAAShader.js';\nimport { SMAAWeightsShader } from '../shaders/SMAAShader.js';\nimport { SMAABlendShader } from '../shaders/SMAAShader.js';\n\nclass SMAAPass extends Pass {\n\n\tconstructor( width, height ) {\n\n\t\tsuper();\n\n\t\t// render targets\n\n\t\tthis.edgesRT = new WebGLRenderTarget( width, height, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\t\tthis.edgesRT.texture.name = 'SMAAPass.edges';\n\n\t\tthis.weightsRT = new WebGLRenderTarget( width, height, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\t\tthis.weightsRT.texture.name = 'SMAAPass.weights';\n\n\t\t// textures\n\t\tconst scope = this;\n\n\t\tconst areaTextureImage = new Image();\n\t\tareaTextureImage.src = this.getAreaTexture();\n\t\tareaTextureImage.onload = function () {\n\n\t\t\t// assigning data to HTMLImageElement.src is asynchronous (see #15162)\n\t\t\tscope.areaTexture.needsUpdate = true;\n\n\t\t};\n\n\t\tthis.areaTexture = new Texture();\n\t\tthis.areaTexture.name = 'SMAAPass.area';\n\t\tthis.areaTexture.image = areaTextureImage;\n\t\tthis.areaTexture.minFilter = LinearFilter;\n\t\tthis.areaTexture.generateMipmaps = false;\n\t\tthis.areaTexture.flipY = false;\n\n\t\tconst searchTextureImage = new Image();\n\t\tsearchTextureImage.src = this.getSearchTexture();\n\t\tsearchTextureImage.onload = function () {\n\n\t\t\t// assigning data to HTMLImageElement.src is asynchronous (see #15162)\n\t\t\tscope.searchTexture.needsUpdate = true;\n\n\t\t};\n\n\t\tthis.searchTexture = new Texture();\n\t\tthis.searchTexture.name = 'SMAAPass.search';\n\t\tthis.searchTexture.image = searchTextureImage;\n\t\tthis.searchTexture.magFilter = NearestFilter;\n\t\tthis.searchTexture.minFilter = NearestFilter;\n\t\tthis.searchTexture.generateMipmaps = false;\n\t\tthis.searchTexture.flipY = false;\n\n\t\t// materials - pass 1\n\n\t\tthis.uniformsEdges = UniformsUtils.clone( SMAAEdgesShader.uniforms );\n\n\t\tthis.uniformsEdges[ 'resolution' ].value.set( 1 / width, 1 / height );\n\n\t\tthis.materialEdges = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SMAAEdgesShader.defines ),\n\t\t\tuniforms: this.uniformsEdges,\n\t\t\tvertexShader: SMAAEdgesShader.vertexShader,\n\t\t\tfragmentShader: SMAAEdgesShader.fragmentShader\n\t\t} );\n\n\t\t// materials - pass 2\n\n\t\tthis.uniformsWeights = UniformsUtils.clone( SMAAWeightsShader.uniforms );\n\n\t\tthis.uniformsWeights[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.uniformsWeights[ 'tDiffuse' ].value = this.edgesRT.texture;\n\t\tthis.uniformsWeights[ 'tArea' ].value = this.areaTexture;\n\t\tthis.uniformsWeights[ 'tSearch' ].value = this.searchTexture;\n\n\t\tthis.materialWeights = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SMAAWeightsShader.defines ),\n\t\t\tuniforms: this.uniformsWeights,\n\t\t\tvertexShader: SMAAWeightsShader.vertexShader,\n\t\t\tfragmentShader: SMAAWeightsShader.fragmentShader\n\t\t} );\n\n\t\t// materials - pass 3\n\n\t\tthis.uniformsBlend = UniformsUtils.clone( SMAABlendShader.uniforms );\n\n\t\tthis.uniformsBlend[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.uniformsBlend[ 'tDiffuse' ].value = this.weightsRT.texture;\n\n\t\tthis.materialBlend = new ShaderMaterial( {\n\t\t\tuniforms: this.uniformsBlend,\n\t\t\tvertexShader: SMAABlendShader.vertexShader,\n\t\t\tfragmentShader: SMAABlendShader.fragmentShader\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\t// pass 1\n\n\t\tthis.uniformsEdges[ 'tDiffuse' ].value = readBuffer.texture;\n\n\t\tthis.fsQuad.material = this.materialEdges;\n\n\t\trenderer.setRenderTarget( this.edgesRT );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// pass 2\n\n\t\tthis.fsQuad.material = this.materialWeights;\n\n\t\trenderer.setRenderTarget( this.weightsRT );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// pass 3\n\n\t\tthis.uniformsBlend[ 'tColor' ].value = readBuffer.texture;\n\n\t\tthis.fsQuad.material = this.materialBlend;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.edgesRT.setSize( width, height );\n\t\tthis.weightsRT.setSize( width, height );\n\n\t\tthis.materialEdges.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.materialWeights.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.materialBlend.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );\n\n\t}\n\n\tgetAreaTexture() {\n\n\t\treturn 'data:image/png;base64,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';\n\n\t}\n\n\tgetSearchTexture() {\n\n\t\treturn 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.edgesRT.dispose();\n\t\tthis.weightsRT.dispose();\n\n\t\tthis.areaTexture.dispose();\n\t\tthis.searchTexture.dispose();\n\n\t\tthis.materialEdges.dispose();\n\t\tthis.materialWeights.dispose();\n\t\tthis.materialBlend.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { SMAAPass };\n", "import {\n\tAdditiveBlending,\n\tColor,\n\tHalfFloatType,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\n/**\n*\n* Supersample Anti-Aliasing Render Pass\n*\n* This manual approach to SSAA re-renders the scene ones for each sample with camera jitter and accumulates the results.\n*\n* References: https://en.wikipedia.org/wiki/Supersampling\n*\n*/\n\nclass SSAARenderPass extends Pass {\n\n\tconstructor( scene, camera, clearColor, clearAlpha ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.sampleLevel = 4; // specified as n, where the number of samples is 2^n, so sampleLevel = 4, is 2^4 samples, 16.\n\t\tthis.unbiased = true;\n\n\t\t// as we need to clear the buffer in this pass, clearColor must be set to something, defaults to black.\n\t\tthis.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;\n\t\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\t\tthis._oldClearColor = new Color();\n\n\t\tconst copyShader = CopyShader;\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.copyMaterial = new ShaderMaterial(\t{\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tpremultipliedAlpha: true,\n\t\t\tblending: AdditiveBlending\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.copyMaterial );\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.sampleRenderTarget ) {\n\n\t\t\tthis.sampleRenderTarget.dispose();\n\t\t\tthis.sampleRenderTarget = null;\n\n\t\t}\n\n\t\tthis.copyMaterial.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tif ( this.sampleRenderTarget )\tthis.sampleRenderTarget.setSize( width, height );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer ) {\n\n\t\tif ( ! this.sampleRenderTarget ) {\n\n\t\t\tthis.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );\n\t\t\tthis.sampleRenderTarget.texture.name = 'SSAARenderPass.sample';\n\n\t\t}\n\n\t\tconst jitterOffsets = _JitterVectors[ Math.max( 0, Math.min( this.sampleLevel, 5 ) ) ];\n\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tconst oldClearAlpha = renderer.getClearAlpha();\n\n\t\tconst baseSampleWeight = 1.0 / jitterOffsets.length;\n\t\tconst roundingRange = 1 / 32;\n\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.sampleRenderTarget.texture;\n\n\t\tconst viewOffset = {\n\n\t\t\tfullWidth: readBuffer.width,\n\t\t\tfullHeight: readBuffer.height,\n\t\t\toffsetX: 0,\n\t\t\toffsetY: 0,\n\t\t\twidth: readBuffer.width,\n\t\t\theight: readBuffer.height\n\n\t\t};\n\n\t\tconst originalViewOffset = Object.assign( {}, this.camera.view );\n\n\t\tif ( originalViewOffset.enabled ) Object.assign( viewOffset, originalViewOffset );\n\n\t\t// render the scene multiple times, each slightly jitter offset from the last and accumulate the results.\n\t\tfor ( let i = 0; i < jitterOffsets.length; i ++ ) {\n\n\t\t\tconst jitterOffset = jitterOffsets[ i ];\n\n\t\t\tif ( this.camera.setViewOffset ) {\n\n\t\t\t\tthis.camera.setViewOffset(\n\n\t\t\t\t\tviewOffset.fullWidth, viewOffset.fullHeight,\n\n\t\t\t\t\tviewOffset.offsetX + jitterOffset[ 0 ] * 0.0625, viewOffset.offsetY + jitterOffset[ 1 ] * 0.0625, // 0.0625 = 1 / 16\n\n\t\t\t\t\tviewOffset.width, viewOffset.height\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tlet sampleWeight = baseSampleWeight;\n\n\t\t\tif ( this.unbiased ) {\n\n\t\t\t\t// the theory is that equal weights for each sample lead to an accumulation of rounding errors.\n\t\t\t\t// The following equation varies the sampleWeight per sample so that it is uniformly distributed\n\t\t\t\t// across a range of values whose rounding errors cancel each other out.\n\n\t\t\t\tconst uniformCenteredDistribution = ( - 0.5 + ( i + 0.5 ) / jitterOffsets.length );\n\t\t\t\tsampleWeight += roundingRange * uniformCenteredDistribution;\n\n\t\t\t}\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = sampleWeight;\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\t\t\trenderer.setRenderTarget( this.sampleRenderTarget );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.scene, this.camera );\n\n\t\t\trenderer.setRenderTarget( this.renderToScreen ? null : writeBuffer );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\trenderer.setClearColor( 0x000000, 0.0 );\n\t\t\t\trenderer.clear();\n\n\t\t\t}\n\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tif ( this.camera.setViewOffset && originalViewOffset.enabled ) {\n\n\t\t\tthis.camera.setViewOffset(\n\n\t\t\t\toriginalViewOffset.fullWidth, originalViewOffset.fullHeight,\n\n\t\t\t\toriginalViewOffset.offsetX, originalViewOffset.offsetY,\n\n\t\t\t\toriginalViewOffset.width, originalViewOffset.height\n\n\t\t\t);\n\n\t\t} else if ( this.camera.clearViewOffset ) {\n\n\t\t\tthis.camera.clearViewOffset();\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t}\n\n}\n\n\n// These jitter vectors are specified in integers because it is easier.\n// I am assuming a [-8,8) integer grid, but it needs to be mapped onto [-0.5,0.5)\n// before being used, thus these integers need to be scaled by 1/16.\n//\n// Sample patterns reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ff476218%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396\nconst _JitterVectors = [\n\t[\n\t\t[ 0, 0 ]\n\t],\n\t[\n\t\t[ 4, 4 ], [ - 4, - 4 ]\n\t],\n\t[\n\t\t[ - 2, - 6 ], [ 6, - 2 ], [ - 6, 2 ], [ 2, 6 ]\n\t],\n\t[\n\t\t[ 1, - 3 ], [ - 1, 3 ], [ 5, 1 ], [ - 3, - 5 ],\n\t\t[ - 5, 5 ], [ - 7, - 1 ], [ 3, 7 ], [ 7, - 7 ]\n\t],\n\t[\n\t\t[ 1, 1 ], [ - 1, - 3 ], [ - 3, 2 ], [ 4, - 1 ],\n\t\t[ - 5, - 2 ], [ 2, 5 ], [ 5, 3 ], [ 3, - 5 ],\n\t\t[ - 2, 6 ], [ 0, - 7 ], [ - 4, - 6 ], [ - 6, 4 ],\n\t\t[ - 8, 0 ], [ 7, - 4 ], [ 6, 7 ], [ - 7, - 8 ]\n\t],\n\t[\n\t\t[ - 4, - 7 ], [ - 7, - 5 ], [ - 3, - 5 ], [ - 5, - 4 ],\n\t\t[ - 1, - 4 ], [ - 2, - 2 ], [ - 6, - 1 ], [ - 4, 0 ],\n\t\t[ - 7, 1 ], [ - 1, 2 ], [ - 6, 3 ], [ - 3, 3 ],\n\t\t[ - 7, 6 ], [ - 3, 6 ], [ - 5, 7 ], [ - 1, 7 ],\n\t\t[ 5, - 7 ], [ 1, - 6 ], [ 6, - 5 ], [ 4, - 4 ],\n\t\t[ 2, - 3 ], [ 7, - 2 ], [ 1, - 1 ], [ 4, - 1 ],\n\t\t[ 2, 1 ], [ 6, 2 ], [ 0, 4 ], [ 4, 4 ],\n\t\t[ 2, 5 ], [ 7, 5 ], [ 5, 6 ], [ 3, 7 ]\n\t]\n];\n\nexport { SSAARenderPass };\n", "import {\n\tMatrix4,\n\tVector2\n} from 'three';\n\n/**\n * References:\n * http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html\n * https://learnopengl.com/Advanced-Lighting/SSAO\n * https://github.com/McNopper/OpenGL/blob/master/Example28/shader/ssao.frag.glsl\n */\n\nconst SSAOShader = {\n\n\tname: 'SSAOShader',\n\n\tdefines: {\n\t\t'PERSPECTIVE_CAMERA': 1,\n\t\t'KERNEL_SIZE': 32\n\t},\n\n\tuniforms: {\n\n\t\t'tNormal': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'tNoise': { value: null },\n\t\t'kernel': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrix': { value: new Matrix4() },\n\t\t'cameraInverseProjectionMatrix': { value: new Matrix4() },\n\t\t'kernelRadius': { value: 8 },\n\t\t'minDistance': { value: 0.005 },\n\t\t'maxDistance': { value: 0.05 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform highp sampler2D tNormal;\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\n\t\tuniform vec3 kernel[ KERNEL_SIZE ];\n\n\t\tuniform vec2 resolution;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\n\t\tuniform float kernelRadius;\n\t\tuniform float minDistance; // avoid artifacts caused by neighbour fragments with minimal depth difference\n\t\tuniform float maxDistance; // avoid the influence of fragments which are too far away\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\n\t\t}\n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tvec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {\n\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];\n\n\t\t\tvec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );\n\n\t\t\tclipPosition *= clipW; // unprojection.\n\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;\n\n\t\t}\n\n\t\tvec3 getViewNormal( const in vec2 screenPosition ) {\n\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat depth = getDepth( vUv );\n\n\t\t\tif ( depth == 1.0 ) {\n\n\t\t\t\tgl_FragColor = vec4( 1.0 ); // don't influence background\n\t\t\t\t\n\t\t\t} else {\n\n\t\t\t\tfloat viewZ = getViewZ( depth );\n\n\t\t\t\tvec3 viewPosition = getViewPosition( vUv, depth, viewZ );\n\t\t\t\tvec3 viewNormal = getViewNormal( vUv );\n\n\t\t\t\tvec2 noiseScale = vec2( resolution.x / 4.0, resolution.y / 4.0 );\n\t\t\t\tvec3 random = vec3( texture2D( tNoise, vUv * noiseScale ).r );\n\n\t\t\t\t// compute matrix used to reorient a kernel vector\n\n\t\t\t\tvec3 tangent = normalize( random - viewNormal * dot( random, viewNormal ) );\n\t\t\t\tvec3 bitangent = cross( viewNormal, tangent );\n\t\t\t\tmat3 kernelMatrix = mat3( tangent, bitangent, viewNormal );\n\n\t\t\t\tfloat occlusion = 0.0;\n\n\t\t\t\tfor ( int i = 0; i < KERNEL_SIZE; i ++ ) {\n\n\t\t\t\t\tvec3 sampleVector = kernelMatrix * kernel[ i ]; // reorient sample vector in view space\n\t\t\t\t\tvec3 samplePoint = viewPosition + ( sampleVector * kernelRadius ); // calculate sample point\n\n\t\t\t\t\tvec4 samplePointNDC = cameraProjectionMatrix * vec4( samplePoint, 1.0 ); // project point and calculate NDC\n\t\t\t\t\tsamplePointNDC /= samplePointNDC.w;\n\n\t\t\t\t\tvec2 samplePointUv = samplePointNDC.xy * 0.5 + 0.5; // compute uv coordinates\n\n\t\t\t\t\tfloat realDepth = getLinearDepth( samplePointUv ); // get linear depth from depth texture\n\t\t\t\t\tfloat sampleDepth = viewZToOrthographicDepth( samplePoint.z, cameraNear, cameraFar ); // compute linear depth of the sample view Z value\n\t\t\t\t\tfloat delta = sampleDepth - realDepth;\n\n\t\t\t\t\tif ( delta > minDistance && delta < maxDistance ) { // if fragment is before sample point, increase occlusion\n\n\t\t\t\t\t\tocclusion += 1.0;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tocclusion = clamp( occlusion / float( KERNEL_SIZE ), 0.0, 1.0 );\n\n\t\t\t\tgl_FragColor = vec4( vec3( 1.0 - occlusion ), 1.0 );\n\n\t\t\t}\n\n\t\t}`\n\n};\n\nconst SSAODepthShader = {\n\n\tname: 'SSAODepthShader',\n\n\tdefines: {\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\n\t},\n\n\tvertexShader:\n\n\t\t`varying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader:\n\n\t\t`uniform sampler2D tDepth;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tgl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );\n\n\t\t}`\n\n};\n\nconst SSAOBlurShader = {\n\n\tname: 'SSAOBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2() }\n\n\t},\n\n\tvertexShader:\n\n\t\t`varying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader:\n\n\t\t`uniform sampler2D tDiffuse;\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 texelSize = ( 1.0 / resolution );\n\t\t\tfloat result = 0.0;\n\n\t\t\tfor ( int i = - 2; i <= 2; i ++ ) {\n\n\t\t\t\tfor ( int j = - 2; j <= 2; j ++ ) {\n\n\t\t\t\t\tvec2 offset = ( vec2( float( i ), float( j ) ) ) * texelSize;\n\t\t\t\t\tresult += texture2D( tDiffuse, vUv + offset ).r;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgl_FragColor = vec4( vec3( result / ( 5.0 * 5.0 ) ), 1.0 );\n\n\t\t}`\n\n};\n\nexport { SSAOShader, SSAODepthShader, SSAOBlurShader };\n", "import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDataTexture,\n\tDepthTexture,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tFloatType,\n\tHalfFloatType,\n\tMathUtils,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRedFormat,\n\tDepthStencilFormat,\n\tUnsignedInt248Type,\n\tRepeatWrapping,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SimplexNoise } from '../math/SimplexNoise.js';\nimport { SSAOShader } from '../shaders/SSAOShader.js';\nimport { SSAOBlurShader } from '../shaders/SSAOShader.js';\nimport { SSAODepthShader } from '../shaders/SSAOShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass SSAOPass extends Pass {\n\n\tconstructor( scene, camera, width, height, kernelSize = 32 ) {\n\n\t\tsuper();\n\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.camera = camera;\n\t\tthis.scene = scene;\n\n\t\tthis.kernelRadius = 8;\n\t\tthis.kernel = [];\n\t\tthis.noiseTexture = null;\n\t\tthis.output = 0;\n\n\t\tthis.minDistance = 0.005;\n\t\tthis.maxDistance = 0.1;\n\n\t\tthis._visibilityCache = new Map();\n\n\t\t//\n\n\t\tthis.generateSampleKernel( kernelSize );\n\t\tthis.generateRandomKernelRotations();\n\n\t\t// depth texture\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.format = DepthStencilFormat;\n\t\tdepthTexture.type = UnsignedInt248Type;\n\n\t\t// normal render target with depth buffer\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t\tdepthTexture: depthTexture\n\t\t} );\n\n\t\t// ssao render target\n\n\t\tthis.ssaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );\n\n\t\tthis.blurRenderTarget = this.ssaoRenderTarget.clone();\n\n\t\t// ssao material\n\n\t\tthis.ssaoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAOShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAOShader.uniforms ),\n\t\t\tvertexShader: SSAOShader.vertexShader,\n\t\t\tfragmentShader: SSAOShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\n\t\tthis.ssaoMaterial.defines[ 'KERNEL_SIZE' ] = kernelSize;\n\n\t\tthis.ssaoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\tthis.ssaoMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;\n\t\tthis.ssaoMaterial.uniforms[ 'tNoise' ].value = this.noiseTexture;\n\t\tthis.ssaoMaterial.uniforms[ 'kernel' ].value = this.kernel;\n\t\tthis.ssaoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.ssaoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\tthis.ssaoMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\t// normal material\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\t// blur material\n\n\t\tthis.blurMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAOBlurShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAOBlurShader.uniforms ),\n\t\t\tvertexShader: SSAOBlurShader.vertexShader,\n\t\t\tfragmentShader: SSAOBlurShader.fragmentShader\n\t\t} );\n\t\tthis.blurMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\n\t\t// material for rendering the depth\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAODepthShader.uniforms ),\n\t\t\tvertexShader: SSAODepthShader.vertexShader,\n\t\t\tfragmentShader: SSAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\n\t\t// material for rendering the content of a render target\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.originalClearColor = new Color();\n\n\t}\n\n\tdispose() {\n\n\t\t// dispose render targets\n\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.ssaoRenderTarget.dispose();\n\t\tthis.blurRenderTarget.dispose();\n\n\t\t// dispose materials\n\n\t\tthis.normalMaterial.dispose();\n\t\tthis.blurMaterial.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\n\t\t// dipsose full screen quad\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\t// render normals and depth (honor only meshes, points and lines do not contribute to SSAO)\n\n\t\tthis.overrideVisibility();\n\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\t\tthis.restoreVisibility();\n\n\t\t// render SSAO\n\n\t\tthis.ssaoMaterial.uniforms[ 'kernelRadius' ].value = this.kernelRadius;\n\t\tthis.ssaoMaterial.uniforms[ 'minDistance' ].value = this.minDistance;\n\t\tthis.ssaoMaterial.uniforms[ 'maxDistance' ].value = this.maxDistance;\n\t\tthis.renderPass( renderer, this.ssaoMaterial, this.ssaoRenderTarget );\n\n\t\t// render blur\n\n\t\tthis.renderPass( renderer, this.blurMaterial, this.blurRenderTarget );\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase SSAOPass.OUTPUT.SSAO:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Blur:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Depth:\n\n\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Default:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = CustomBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.SSAOPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\t// restore original state\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.ssaoRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.blurRenderTarget.setSize( width, height );\n\n\t\tthis.ssaoMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\n\t}\n\n\tgenerateSampleKernel( kernelSize ) {\n\n\t\tconst kernel = this.kernel;\n\n\t\tfor ( let i = 0; i < kernelSize; i ++ ) {\n\n\t\t\tconst sample = new Vector3();\n\t\t\tsample.x = ( Math.random() * 2 ) - 1;\n\t\t\tsample.y = ( Math.random() * 2 ) - 1;\n\t\t\tsample.z = Math.random();\n\n\t\t\tsample.normalize();\n\n\t\t\tlet scale = i / kernelSize;\n\t\t\tscale = MathUtils.lerp( 0.1, 1, scale * scale );\n\t\t\tsample.multiplyScalar( scale );\n\n\t\t\tkernel.push( sample );\n\n\t\t}\n\n\t}\n\n\tgenerateRandomKernelRotations() {\n\n\t\tconst width = 4, height = 4;\n\n\t\tconst simplex = new SimplexNoise();\n\n\t\tconst size = width * height;\n\t\tconst data = new Float32Array( size );\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\tconst x = ( Math.random() * 2 ) - 1;\n\t\t\tconst y = ( Math.random() * 2 ) - 1;\n\t\t\tconst z = 0;\n\n\t\t\tdata[ i ] = simplex.noise3d( x, y, z );\n\n\t\t}\n\n\t\tthis.noiseTexture = new DataTexture( data, width, height, RedFormat, FloatType );\n\t\tthis.noiseTexture.wrapS = RepeatWrapping;\n\t\tthis.noiseTexture.wrapT = RepeatWrapping;\n\t\tthis.noiseTexture.needsUpdate = true;\n\n\t}\n\n\toverrideVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tcache.set( object, object.visible );\n\n\t\t\tif ( object.isPoints || object.isLine ) object.visible = false;\n\n\t\t} );\n\n\t}\n\n\trestoreVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst visible = cache.get( object );\n\t\t\tobject.visible = visible;\n\n\t\t} );\n\n\t\tcache.clear();\n\n\t}\n\n}\n\nSSAOPass.OUTPUT = {\n\t'Default': 0,\n\t'SSAO': 1,\n\t'Blur': 2,\n\t'Depth': 3,\n\t'Normal': 4\n};\n\nexport { SSAOPass };\n", "import {\n\tMatrix4,\n\tVector2\n} from 'three';\n/**\n * References:\n * https://lettier.github.io/3d-game-shaders-for-beginners/screen-space-reflection.html\n */\n\nconst SSRShader = {\n\n\tname: 'SSRShader',\n\n\tdefines: {\n\t\tMAX_STEP: 0,\n\t\tPERSPECTIVE_CAMERA: true,\n\t\tDISTANCE_ATTENUATION: true,\n\t\tFRESNEL: true,\n\t\tINFINITE_THICK: false,\n\t\tSELECTIVE: false,\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'tMetalness': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrix': { value: new Matrix4() },\n\t\t'cameraInverseProjectionMatrix': { value: new Matrix4() },\n\t\t'opacity': { value: .5 },\n\t\t'maxDistance': { value: 180 },\n\t\t'cameraRange': { value: 0 },\n\t\t'thickness': { value: .018 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\t\t// precision highp float;\n\t\tprecision highp sampler2D;\n\t\tvarying vec2 vUv;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tMetalness;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float cameraRange;\n\t\tuniform vec2 resolution;\n\t\tuniform float opacity;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform float maxDistance;\n\t\tuniform float thickness;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\t\t#include \n\t\tfloat pointToLineDistance(vec3 x0, vec3 x1, vec3 x2) {\n\t\t\t//x0: point, x1: linePointA, x2: linePointB\n\t\t\t//https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html\n\t\t\treturn length(cross(x0-x1,x0-x2))/length(x2-x1);\n\t\t}\n\t\tfloat pointPlaneDistance(vec3 point,vec3 planePoint,vec3 planeNormal){\n\t\t\t// https://mathworld.wolfram.com/Point-PlaneDistance.html\n\t\t\t//// https://en.wikipedia.org/wiki/Plane_(geometry)\n\t\t\t//// http://paulbourke.net/geometry/pointlineplane/\n\t\t\tfloat a=planeNormal.x,b=planeNormal.y,c=planeNormal.z;\n\t\t\tfloat x0=point.x,y0=point.y,z0=point.z;\n\t\t\tfloat x=planePoint.x,y=planePoint.y,z=planePoint.z;\n\t\t\tfloat d=-(a*x+b*y+c*z);\n\t\t\tfloat distance=(a*x0+b*y0+c*z0+d)/sqrt(a*a+b*b+c*c);\n\t\t\treturn distance;\n\t\t}\n\t\tfloat getDepth( const in vec2 uv ) {\n\t\t\treturn texture2D( tDepth, uv ).x;\n\t\t}\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\t\tvec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {\n\t\t\tvec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc\n\t\t\tclipPosition *= clipW; //clip\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;//view\n\t\t}\n\t\tvec3 getViewNormal( const in vec2 uv ) {\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, uv ).xyz );\n\t\t}\n\t\tvec2 viewPositionToXY(vec3 viewPosition){\n\t\t\tvec2 xy;\n\t\t\tvec4 clip=cameraProjectionMatrix*vec4(viewPosition,1);\n\t\t\txy=clip.xy;//clip\n\t\t\tfloat clipW=clip.w;\n\t\t\txy/=clipW;//NDC\n\t\t\txy=(xy+1.)/2.;//uv\n\t\t\txy*=resolution;//screen\n\t\t\treturn xy;\n\t\t}\n\t\tvoid main(){\n\t\t\t#ifdef SELECTIVE\n\t\t\t\tfloat metalness=texture2D(tMetalness,vUv).r;\n\t\t\t\tif(metalness==0.) return;\n\t\t\t#endif\n\n\t\t\tfloat depth = getDepth( vUv );\n\t\t\tfloat viewZ = getViewZ( depth );\n\t\t\tif(-viewZ>=cameraFar) return;\n\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ+cameraProjectionMatrix[3][3];\n\t\t\tvec3 viewPosition=getViewPosition( vUv, depth, clipW );\n\n\t\t\tvec2 d0=gl_FragCoord.xy;\n\t\t\tvec2 d1;\n\n\t\t\tvec3 viewNormal=getViewNormal( vUv );\n\n\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\tvec3 viewIncidentDir=normalize(viewPosition);\n\t\t\t\tvec3 viewReflectDir=reflect(viewIncidentDir,viewNormal);\n\t\t\t#else\n\t\t\t\tvec3 viewIncidentDir=vec3(0,0,-1);\n\t\t\t\tvec3 viewReflectDir=reflect(viewIncidentDir,viewNormal);\n\t\t\t#endif\n\n\t\t\tfloat maxReflectRayLen=maxDistance/dot(-viewIncidentDir,viewNormal);\n\t\t\t// dot(a,b)==length(a)*length(b)*cos(theta) // https://www.mathsisfun.com/algebra/vectors-dot-product.html\n\t\t\t// if(a.isNormalized&&b.isNormalized) dot(a,b)==cos(theta)\n\t\t\t// maxDistance/maxReflectRayLen=cos(theta)\n\t\t\t// maxDistance/maxReflectRayLen==dot(a,b)\n\t\t\t// maxReflectRayLen==maxDistance/dot(a,b)\n\n\t\t\tvec3 d1viewPosition=viewPosition+viewReflectDir*maxReflectRayLen;\n\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\tif(d1viewPosition.z>-cameraNear){\n\t\t\t\t\t//https://tutorial.math.lamar.edu/Classes/CalcIII/EqnsOfLines.aspx\n\t\t\t\t\tfloat t=(-cameraNear-viewPosition.z)/viewReflectDir.z;\n\t\t\t\t\td1viewPosition=viewPosition+viewReflectDir*t;\n\t\t\t\t}\n\t\t\t#endif\n\t\t\td1=viewPositionToXY(d1viewPosition);\n\n\t\t\tfloat totalLen=length(d1-d0);\n\t\t\tfloat xLen=d1.x-d0.x;\n\t\t\tfloat yLen=d1.y-d0.y;\n\t\t\tfloat totalStep=max(abs(xLen),abs(yLen));\n\t\t\tfloat xSpan=xLen/totalStep;\n\t\t\tfloat ySpan=yLen/totalStep;\n\t\t\tfor(float i=0.;i=totalStep) break;\n\t\t\t\tvec2 xy=vec2(d0.x+i*xSpan,d0.y+i*ySpan);\n\t\t\t\tif(xy.x<0.||xy.x>resolution.x||xy.y<0.||xy.y>resolution.y) break;\n\t\t\t\tfloat s=length(xy-d0)/totalLen;\n\t\t\t\tvec2 uv=xy/resolution;\n\n\t\t\t\tfloat d = getDepth(uv);\n\t\t\t\tfloat vZ = getViewZ( d );\n\t\t\t\tif(-vZ>=cameraFar) continue;\n\t\t\t\tfloat cW = cameraProjectionMatrix[2][3] * vZ+cameraProjectionMatrix[3][3];\n\t\t\t\tvec3 vP=getViewPosition( uv, d, cW );\n\n\t\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\t\t// https://comp.nus.edu.sg/~lowkl/publications/lowk_persp_interp_techrep.pdf\n\t\t\t\t\tfloat recipVPZ=1./viewPosition.z;\n\t\t\t\t\tfloat viewReflectRayZ=1./(recipVPZ+s*(1./d1viewPosition.z-recipVPZ));\n\t\t\t\t#else\n\t\t\t\t\tfloat viewReflectRayZ=viewPosition.z+s*(d1viewPosition.z-viewPosition.z);\n\t\t\t\t#endif\n\n\t\t\t\t// if(viewReflectRayZ>vZ) continue; // will cause \"npm run make-screenshot webgl_postprocessing_ssr\" high probability hang.\n\t\t\t\t// https://github.com/mrdoob/three.js/pull/21539#issuecomment-821061164\n\t\t\t\tif(viewReflectRayZ<=vZ){\n\n\t\t\t\t\tbool hit;\n\t\t\t\t\t#ifdef INFINITE_THICK\n\t\t\t\t\t\thit=true;\n\t\t\t\t\t#else\n\t\t\t\t\t\tfloat away=pointToLineDistance(vP,viewPosition,d1viewPosition);\n\n\t\t\t\t\t\tfloat minThickness;\n\t\t\t\t\t\tvec2 xyNeighbor=xy;\n\t\t\t\t\t\txyNeighbor.x+=1.;\n\t\t\t\t\t\tvec2 uvNeighbor=xyNeighbor/resolution;\n\t\t\t\t\t\tvec3 vPNeighbor=getViewPosition(uvNeighbor,d,cW);\n\t\t\t\t\t\tminThickness=vPNeighbor.x-vP.x;\n\t\t\t\t\t\tminThickness*=3.;\n\t\t\t\t\t\tfloat tk=max(minThickness,thickness);\n\n\t\t\t\t\t\thit=away<=tk;\n\t\t\t\t\t#endif\n\n\t\t\t\t\tif(hit){\n\t\t\t\t\t\tvec3 vN=getViewNormal( uv );\n\t\t\t\t\t\tif(dot(viewReflectDir,vN)>=0.) continue;\n\t\t\t\t\t\tfloat distance=pointPlaneDistance(vP,viewPosition,viewNormal);\n\t\t\t\t\t\tif(distance>maxDistance) break;\n\t\t\t\t\t\tfloat op=opacity;\n\t\t\t\t\t\t#ifdef DISTANCE_ATTENUATION\n\t\t\t\t\t\t\tfloat ratio=1.-(distance/maxDistance);\n\t\t\t\t\t\t\tfloat attenuation=ratio*ratio;\n\t\t\t\t\t\t\top=opacity*attenuation;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#ifdef FRESNEL\n\t\t\t\t\t\t\tfloat fresnelCoe=(dot(viewIncidentDir,viewReflectDir)+1.)/2.;\n\t\t\t\t\t\t\top*=fresnelCoe;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tvec4 reflectColor=texture2D(tDiffuse,uv);\n\t\t\t\t\t\tgl_FragColor.xyz=reflectColor.xyz;\n\t\t\t\t\t\tgl_FragColor.a=op;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t`\n\n};\n\nconst SSRDepthShader = {\n\n\tname: 'SSRDepthShader',\n\n\tdefines: {\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDepth;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getLinearDepth( const in vec2 uv ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, uv ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, uv ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tfloat d = 1.0 - depth;\n\t\t\t// d=(d-.999)*1000.;\n\t\t\tgl_FragColor = vec4( vec3( d ), 1.0 );\n\n\t\t}\n\n\t`\n\n};\n\nconst SSRBlurShader = {\n\n\tname: 'SSRBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'opacity': { value: .5 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 resolution;\n\t\tvarying vec2 vUv;\n\t\tvoid main() {\n\t\t\t//reverse engineering from PhotoShop blur filter, then change coefficient\n\n\t\t\tvec2 texelSize = ( 1.0 / resolution );\n\n\t\t\tvec4 c=texture2D(tDiffuse,vUv);\n\n\t\t\tvec2 offset;\n\n\t\t\toffset=(vec2(-1,0))*texelSize;\n\t\t\tvec4 cl=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(1,0))*texelSize;\n\t\t\tvec4 cr=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(0,-1))*texelSize;\n\t\t\tvec4 cb=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(0,1))*texelSize;\n\t\t\tvec4 ct=texture2D(tDiffuse,vUv+offset);\n\n\t\t\t// float coeCenter=.5;\n\t\t\t// float coeSide=.125;\n\t\t\tfloat coeCenter=.2;\n\t\t\tfloat coeSide=.2;\n\t\t\tfloat a=c.a*coeCenter+cl.a*coeSide+cr.a*coeSide+cb.a*coeSide+ct.a*coeSide;\n\t\t\tvec3 rgb=(c.rgb*c.a*coeCenter+cl.rgb*cl.a*coeSide+cr.rgb*cr.a*coeSide+cb.rgb*cb.a*coeSide+ct.rgb*ct.a*coeSide)/a;\n\t\t\tgl_FragColor=vec4(rgb,a);\n\n\t\t}\n\t`\n\n\n};\n\nexport { SSRShader, SSRDepthShader, SSRBlurShader };\n", "import {\n\tAddEquation,\n\tColor,\n\tNormalBlending,\n\tDepthTexture,\n\tSrcAlphaFactor,\n\tOneMinusSrcAlphaFactor,\n\tMeshNormalMaterial,\n\tMeshBasicMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tUnsignedShortType,\n\tWebGLRenderTarget,\n\tHalfFloatType,\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SSRShader } from '../shaders/SSRShader.js';\nimport { SSRBlurShader } from '../shaders/SSRShader.js';\nimport { SSRDepthShader } from '../shaders/SSRShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass SSRPass extends Pass {\n\n\tconstructor( { renderer, scene, camera, width, height, selects, bouncing = false, groundReflector } ) {\n\n\t\tsuper();\n\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\n\t\tthis.clear = true;\n\n\t\tthis.renderer = renderer;\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\t\tthis.groundReflector = groundReflector;\n\n\t\tthis.opacity = SSRShader.uniforms.opacity.value;\n\t\tthis.output = 0;\n\n\t\tthis.maxDistance = SSRShader.uniforms.maxDistance.value;\n\t\tthis.thickness = SSRShader.uniforms.thickness.value;\n\n\t\tthis.tempColor = new Color();\n\n\t\tthis._selects = selects;\n\t\tthis.selective = Array.isArray( this._selects );\n\t\tObject.defineProperty( this, 'selects', {\n\t\t\tget() {\n\n\t\t\t\treturn this._selects;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._selects === val ) return;\n\t\t\t\tthis._selects = val;\n\t\t\t\tif ( Array.isArray( val ) ) {\n\n\t\t\t\t\tthis.selective = true;\n\t\t\t\t\tthis.ssrMaterial.defines.SELECTIVE = true;\n\t\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.selective = false;\n\t\t\t\t\tthis.ssrMaterial.defines.SELECTIVE = false;\n\t\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\n\t\tthis._bouncing = bouncing;\n\t\tObject.defineProperty( this, 'bouncing', {\n\t\t\tget() {\n\n\t\t\t\treturn this._bouncing;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._bouncing === val ) return;\n\t\t\t\tthis._bouncing = val;\n\t\t\t\tif ( val ) {\n\n\t\t\t\t\tthis.ssrMaterial.uniforms[ 'tDiffuse' ].value = this.prevRenderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.ssrMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.blur = true;\n\n\t\tthis._distanceAttenuation = SSRShader.defines.DISTANCE_ATTENUATION;\n\t\tObject.defineProperty( this, 'distanceAttenuation', {\n\t\t\tget() {\n\n\t\t\t\treturn this._distanceAttenuation;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._distanceAttenuation === val ) return;\n\t\t\t\tthis._distanceAttenuation = val;\n\t\t\t\tthis.ssrMaterial.defines.DISTANCE_ATTENUATION = val;\n\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\n\t\tthis._fresnel = SSRShader.defines.FRESNEL;\n\t\tObject.defineProperty( this, 'fresnel', {\n\t\t\tget() {\n\n\t\t\t\treturn this._fresnel;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._fresnel === val ) return;\n\t\t\t\tthis._fresnel = val;\n\t\t\t\tthis.ssrMaterial.defines.FRESNEL = val;\n\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\tthis._infiniteThick = SSRShader.defines.INFINITE_THICK;\n\t\tObject.defineProperty( this, 'infiniteThick', {\n\t\t\tget() {\n\n\t\t\t\treturn this._infiniteThick;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._infiniteThick === val ) return;\n\t\t\t\tthis._infiniteThick = val;\n\t\t\t\tthis.ssrMaterial.defines.INFINITE_THICK = val;\n\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\t// beauty render target with depth buffer\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.type = UnsignedShortType;\n\t\tdepthTexture.minFilter = NearestFilter;\n\t\tdepthTexture.magFilter = NearestFilter;\n\n\t\tthis.beautyRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t\tdepthTexture: depthTexture,\n\t\t\tdepthBuffer: true\n\t\t} );\n\n\t\t//for bouncing\n\t\tthis.prevRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t} );\n\n\t\t// normal render target\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t} );\n\n\t\t// metalness render target\n\n\t\tthis.metalnessRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t} );\n\n\n\n\t\t// ssr render target\n\n\t\tthis.ssrRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t} );\n\n\t\tthis.blurRenderTarget = this.ssrRenderTarget.clone();\n\t\tthis.blurRenderTarget2 = this.ssrRenderTarget.clone();\n\t\t// this.blurRenderTarget3 = this.ssrRenderTarget.clone();\n\n\t\t// ssr material\n\n\t\tthis.ssrMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRShader.defines, {\n\t\t\t\tMAX_STEP: Math.sqrt( this.width * this.width + this.height * this.height )\n\t\t\t} ),\n\t\t\tuniforms: UniformsUtils.clone( SSRShader.uniforms ),\n\t\t\tvertexShader: SSRShader.vertexShader,\n\t\t\tfragmentShader: SSRShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\n\t\tthis.ssrMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\tthis.ssrMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\tthis.ssrMaterial.defines.SELECTIVE = this.selective;\n\t\tthis.ssrMaterial.needsUpdate = true;\n\t\tthis.ssrMaterial.uniforms[ 'tMetalness' ].value = this.metalnessRenderTarget.texture;\n\t\tthis.ssrMaterial.uniforms[ 'tDepth' ].value = this.beautyRenderTarget.depthTexture;\n\t\tthis.ssrMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.ssrMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\tthis.ssrMaterial.uniforms[ 'thickness' ].value = this.thickness;\n\t\tthis.ssrMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\t\tthis.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\t// normal material\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\t// metalnessOn material\n\n\t\tthis.metalnessOnMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: 'white'\n\t\t} );\n\n\t\t// metalnessOff material\n\n\t\tthis.metalnessOffMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: 'black'\n\t\t} );\n\n\t\t// blur material\n\n\t\tthis.blurMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRBlurShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSRBlurShader.uniforms ),\n\t\t\tvertexShader: SSRBlurShader.vertexShader,\n\t\t\tfragmentShader: SSRBlurShader.fragmentShader\n\t\t} );\n\t\tthis.blurMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\n\t\t// blur material 2\n\n\t\tthis.blurMaterial2 = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRBlurShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSRBlurShader.uniforms ),\n\t\t\tvertexShader: SSRBlurShader.vertexShader,\n\t\t\tfragmentShader: SSRBlurShader.fragmentShader\n\t\t} );\n\t\tthis.blurMaterial2.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\tthis.blurMaterial2.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\n\t\t// // blur material 3\n\n\t\t// this.blurMaterial3 = new ShaderMaterial({\n\t\t// defines: Object.assign({}, SSRBlurShader.defines),\n\t\t// uniforms: UniformsUtils.clone(SSRBlurShader.uniforms),\n\t\t// vertexShader: SSRBlurShader.vertexShader,\n\t\t// fragmentShader: SSRBlurShader.fragmentShader\n\t\t// });\n\t\t// this.blurMaterial3.uniforms['tDiffuse'].value = this.blurRenderTarget2.texture;\n\t\t// this.blurMaterial3.uniforms['resolution'].value.set(this.width, this.height);\n\n\t\t// material for rendering the depth\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRDepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSRDepthShader.uniforms ),\n\t\t\tvertexShader: SSRDepthShader.vertexShader,\n\t\t\tfragmentShader: SSRDepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms[ 'tDepth' ].value = this.beautyRenderTarget.depthTexture;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\n\t\t// material for rendering the content of a render target\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: SrcAlphaFactor,\n\t\t\tblendDst: OneMinusSrcAlphaFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: SrcAlphaFactor,\n\t\t\tblendDstAlpha: OneMinusSrcAlphaFactor,\n\t\t\tblendEquationAlpha: AddEquation,\n\t\t\t// premultipliedAlpha:true,\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.originalClearColor = new Color();\n\n\t}\n\n\tdispose() {\n\n\t\t// dispose render targets\n\n\t\tthis.beautyRenderTarget.dispose();\n\t\tthis.prevRenderTarget.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.metalnessRenderTarget.dispose();\n\t\tthis.ssrRenderTarget.dispose();\n\t\tthis.blurRenderTarget.dispose();\n\t\tthis.blurRenderTarget2.dispose();\n\t\t// this.blurRenderTarget3.dispose();\n\n\t\t// dispose materials\n\n\t\tthis.normalMaterial.dispose();\n\t\tthis.metalnessOnMaterial.dispose();\n\t\tthis.metalnessOffMaterial.dispose();\n\t\tthis.blurMaterial.dispose();\n\t\tthis.blurMaterial2.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\n\t\t// dipsose full screen quad\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\trender( renderer, writeBuffer /*, readBuffer, deltaTime, maskActive */ ) {\n\n\t\t// render beauty and depth\n\n\t\trenderer.setRenderTarget( this.beautyRenderTarget );\n\t\trenderer.clear();\n\t\tif ( this.groundReflector ) {\n\n\t\t\tthis.groundReflector.visible = false;\n\t\t\tthis.groundReflector.doRender( this.renderer, this.scene, this.camera );\n\t\t\tthis.groundReflector.visible = true;\n\n\t\t}\n\n\t\trenderer.render( this.scene, this.camera );\n\t\tif ( this.groundReflector ) this.groundReflector.visible = false;\n\n\t\t// render normals\n\n\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0, 0 );\n\n\t\t// render metalnesses\n\n\t\tif ( this.selective ) {\n\n\t\t\tthis.renderMetalness( renderer, this.metalnessOnMaterial, this.metalnessRenderTarget, 0, 0 );\n\n\t\t}\n\n\t\t// render SSR\n\n\t\tthis.ssrMaterial.uniforms[ 'opacity' ].value = this.opacity;\n\t\tthis.ssrMaterial.uniforms[ 'maxDistance' ].value = this.maxDistance;\n\t\tthis.ssrMaterial.uniforms[ 'thickness' ].value = this.thickness;\n\t\tthis.renderPass( renderer, this.ssrMaterial, this.ssrRenderTarget );\n\n\n\t\t// render blur\n\n\t\tif ( this.blur ) {\n\n\t\t\tthis.renderPass( renderer, this.blurMaterial, this.blurRenderTarget );\n\t\t\tthis.renderPass( renderer, this.blurMaterial2, this.blurRenderTarget2 );\n\t\t\t// this.renderPass(renderer, this.blurMaterial3, this.blurRenderTarget3);\n\n\t\t}\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase SSRPass.OUTPUT.Default:\n\n\t\t\t\tif ( this.bouncing ) {\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t\tif ( this.blur )\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NormalBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.prevRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\t\tif ( this.blur )\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NormalBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase SSRPass.OUTPUT.SSR:\n\n\t\t\t\tif ( this.blur )\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\telse\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tif ( this.bouncing ) {\n\n\t\t\t\t\tif ( this.blur )\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NormalBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Beauty:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Depth:\n\n\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Metalness:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.metalnessRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.SSRPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\tthis.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );\n\t\tconst originalClearAlpha = renderer.getClearAlpha( this.tempColor );\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\tthis.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );\n\t\tconst originalClearAlpha = renderer.getClearAlpha( this.tempColor );\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\t// restore original state\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderMetalness( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\tthis.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );\n\t\tconst originalClearAlpha = renderer.getClearAlpha( this.tempColor );\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.traverseVisible( child => {\n\n\t\t\tchild._SSRPassBackupMaterial = child.material;\n\t\t\tif ( this._selects.includes( child ) ) {\n\n\t\t\t\tchild.material = this.metalnessOnMaterial;\n\n\t\t\t} else {\n\n\t\t\t\tchild.material = this.metalnessOffMaterial;\n\n\t\t\t}\n\n\t\t} );\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.traverseVisible( child => {\n\n\t\t\tchild.material = child._SSRPassBackupMaterial;\n\n\t\t} );\n\n\t\t// restore original state\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.ssrMaterial.defines.MAX_STEP = Math.sqrt( width * width + height * height );\n\t\tthis.ssrMaterial.needsUpdate = true;\n\t\tthis.beautyRenderTarget.setSize( width, height );\n\t\tthis.prevRenderTarget.setSize( width, height );\n\t\tthis.ssrRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.metalnessRenderTarget.setSize( width, height );\n\t\tthis.blurRenderTarget.setSize( width, height );\n\t\tthis.blurRenderTarget2.setSize( width, height );\n\t\t// this.blurRenderTarget3.setSize(width, height);\n\n\t\tthis.ssrMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\tthis.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\tthis.blurMaterial2.uniforms[ 'resolution' ].value.set( width, height );\n\n\t}\n\n}\n\nSSRPass.OUTPUT = {\n\t'Default': 0,\n\t'SSR': 1,\n\t'Beauty': 3,\n\t'Depth': 4,\n\t'Normal': 5,\n\t'Metalness': 7,\n};\n\nexport { SSRPass };\n", "import {\n\tHalfFloatType,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass SavePass extends Pass {\n\n\tconstructor( renderTarget ) {\n\n\t\tsuper();\n\n\t\tconst shader = CopyShader;\n\n\t\tthis.textureID = 'tDiffuse';\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tif ( this.renderTarget === undefined ) {\n\n\t\t\tthis.renderTarget = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later\n\t\t\tthis.renderTarget.texture.name = 'SavePass.rt';\n\n\t\t}\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderTarget );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.renderTarget.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTarget.dispose();\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { SavePass };\n", "import {\n\tHalfFloatType,\n\tWebGLRenderTarget\n} from 'three';\nimport { SSAARenderPass } from './SSAARenderPass.js';\n\n/**\n *\n * Temporal Anti-Aliasing Render Pass\n *\n * When there is no motion in the scene, the TAA render pass accumulates jittered camera samples across frames to create a high quality anti-aliased result.\n *\n * References:\n *\n * TODO: Add support for motion vector pas so that accumulation of samples across frames can occur on dynamics scenes.\n *\n */\n\nclass TAARenderPass extends SSAARenderPass {\n\n\tconstructor( scene, camera, clearColor, clearAlpha ) {\n\n\t\tsuper( scene, camera, clearColor, clearAlpha );\n\n\t\tthis.sampleLevel = 0;\n\t\tthis.accumulate = false;\n\t\tthis.accumulateIndex = - 1;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime ) {\n\n\t\tif ( this.accumulate === false ) {\n\n\t\t\tsuper.render( renderer, writeBuffer, readBuffer, deltaTime );\n\n\t\t\tthis.accumulateIndex = - 1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst jitterOffsets = _JitterVectors[ 5 ];\n\n\t\tif ( this.sampleRenderTarget === undefined ) {\n\n\t\t\tthis.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );\n\t\t\tthis.sampleRenderTarget.texture.name = 'TAARenderPass.sample';\n\n\t\t}\n\n\t\tif ( this.holdRenderTarget === undefined ) {\n\n\t\t\tthis.holdRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );\n\t\t\tthis.holdRenderTarget.texture.name = 'TAARenderPass.hold';\n\n\t\t}\n\n\t\tif ( this.accumulateIndex === - 1 ) {\n\n\t\t\tsuper.render( renderer, this.holdRenderTarget, readBuffer, deltaTime );\n\n\t\t\tthis.accumulateIndex = 0;\n\n\t\t}\n\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tconst oldClearAlpha = renderer.getClearAlpha();\n\n\t\tconst sampleWeight = 1.0 / ( jitterOffsets.length );\n\n\t\tif ( this.accumulateIndex >= 0 && this.accumulateIndex < jitterOffsets.length ) {\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = sampleWeight;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = writeBuffer.texture;\n\n\t\t\t// render the scene multiple times, each slightly jitter offset from the last and accumulate the results.\n\t\t\tconst numSamplesPerFrame = Math.pow( 2, this.sampleLevel );\n\t\t\tfor ( let i = 0; i < numSamplesPerFrame; i ++ ) {\n\n\t\t\t\tconst j = this.accumulateIndex;\n\t\t\t\tconst jitterOffset = jitterOffsets[ j ];\n\n\t\t\t\tif ( this.camera.setViewOffset ) {\n\n\t\t\t\t\tthis.camera.setViewOffset( readBuffer.width, readBuffer.height,\n\t\t\t\t\t\tjitterOffset[ 0 ] * 0.0625, jitterOffset[ 1 ] * 0.0625, // 0.0625 = 1 / 16\n\t\t\t\t\t\treadBuffer.width, readBuffer.height );\n\n\t\t\t\t}\n\n\t\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\t\t\t\trenderer.clear();\n\t\t\t\trenderer.render( this.scene, this.camera );\n\n\t\t\t\trenderer.setRenderTarget( this.sampleRenderTarget );\n\t\t\t\tif ( this.accumulateIndex === 0 ) {\n\n\t\t\t\t\trenderer.setClearColor( 0x000000, 0.0 );\n\t\t\t\t\trenderer.clear();\n\n\t\t\t\t}\n\n\t\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t\tthis.accumulateIndex ++;\n\n\t\t\t\tif ( this.accumulateIndex >= jitterOffsets.length ) break;\n\n\t\t\t}\n\n\t\t\tif ( this.camera.clearViewOffset ) this.camera.clearViewOffset();\n\n\t\t}\n\n\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\t\tconst accumulationWeight = this.accumulateIndex * sampleWeight;\n\n\t\tif ( accumulationWeight > 0 ) {\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = 1.0;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.sampleRenderTarget.texture;\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tif ( accumulationWeight < 1.0 ) {\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = 1.0 - accumulationWeight;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.holdRenderTarget.texture;\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t}\n\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tif ( this.holdRenderTarget ) this.holdRenderTarget.dispose();\n\n\t}\n\n}\n\nconst _JitterVectors = [\n\t[\n\t\t[ 0, 0 ]\n\t],\n\t[\n\t\t[ 4, 4 ], [ - 4, - 4 ]\n\t],\n\t[\n\t\t[ - 2, - 6 ], [ 6, - 2 ], [ - 6, 2 ], [ 2, 6 ]\n\t],\n\t[\n\t\t[ 1, - 3 ], [ - 1, 3 ], [ 5, 1 ], [ - 3, - 5 ],\n\t\t[ - 5, 5 ], [ - 7, - 1 ], [ 3, 7 ], [ 7, - 7 ]\n\t],\n\t[\n\t\t[ 1, 1 ], [ - 1, - 3 ], [ - 3, 2 ], [ 4, - 1 ],\n\t\t[ - 5, - 2 ], [ 2, 5 ], [ 5, 3 ], [ 3, - 5 ],\n\t\t[ - 2, 6 ], [ 0, - 7 ], [ - 4, - 6 ], [ - 6, 4 ],\n\t\t[ - 8, 0 ], [ 7, - 4 ], [ 6, 7 ], [ - 7, - 8 ]\n\t],\n\t[\n\t\t[ - 4, - 7 ], [ - 7, - 5 ], [ - 3, - 5 ], [ - 5, - 4 ],\n\t\t[ - 1, - 4 ], [ - 2, - 2 ], [ - 6, - 1 ], [ - 4, 0 ],\n\t\t[ - 7, 1 ], [ - 1, 2 ], [ - 6, 3 ], [ - 3, 3 ],\n\t\t[ - 7, 6 ], [ - 3, 6 ], [ - 5, 7 ], [ - 1, 7 ],\n\t\t[ 5, - 7 ], [ 1, - 6 ], [ 6, - 5 ], [ 4, - 4 ],\n\t\t[ 2, - 3 ], [ 7, - 2 ], [ 1, - 1 ], [ 4, - 1 ],\n\t\t[ 2, 1 ], [ 6, 2 ], [ 0, 4 ], [ 4, 4 ],\n\t\t[ 2, 5 ], [ 7, 5 ], [ 5, 6 ], [ 3, 7 ]\n\t]\n];\n\nexport { TAARenderPass };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass TexturePass extends Pass {\n\n\tconstructor( map, opacity ) {\n\n\t\tsuper();\n\n\t\tconst shader = CopyShader;\n\n\t\tthis.map = map;\n\t\tthis.opacity = ( opacity !== undefined ) ? opacity : 1.0;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tpremultipliedAlpha: true\n\n\t\t} );\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tthis.uniforms[ 'opacity' ].value = this.opacity;\n\t\tthis.uniforms[ 'tDiffuse' ].value = this.map;\n\t\tthis.material.transparent = ( this.opacity < 1.0 );\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { TexturePass };\n", "import {\n\tColor\n} from 'three';\n\n/**\n * Luminosity\n * http://en.wikipedia.org/wiki/Luminosity\n */\n\nconst LuminosityHighPassShader = {\n\n\tname: 'LuminosityHighPassShader',\n\n\tshaderID: 'luminosityHighPass',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'luminosityThreshold': { value: 1.0 },\n\t\t'smoothWidth': { value: 1.0 },\n\t\t'defaultColor': { value: new Color( 0x000000 ) },\n\t\t'defaultOpacity': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec3 defaultColor;\n\t\tuniform float defaultOpacity;\n\t\tuniform float luminosityThreshold;\n\t\tuniform float smoothWidth;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat v = luminance( texel.xyz );\n\n\t\t\tvec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );\n\n\t\t\tfloat alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );\n\n\t\t\tgl_FragColor = mix( outputColor, texel, alpha );\n\n\t\t}`\n\n};\n\nexport { LuminosityHighPassShader };\n", "import {\n\tAdditiveBlending,\n\tColor,\n\tHalfFloatType,\n\tMeshBasicMaterial,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js';\n\n/**\n * UnrealBloomPass is inspired by the bloom pass of Unreal Engine. It creates a\n * mip map chain of bloom textures and blurs them with different radii. Because\n * of the weighted combination of mips, and because larger blurs are done on\n * higher mips, this effect provides good quality and performance.\n *\n * Reference:\n * - https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/\n */\nclass UnrealBloomPass extends Pass {\n\n\tconstructor( resolution, strength, radius, threshold ) {\n\n\t\tsuper();\n\n\t\tthis.strength = ( strength !== undefined ) ? strength : 1;\n\t\tthis.radius = radius;\n\t\tthis.threshold = threshold;\n\t\tthis.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );\n\n\t\t// create color only once here, reuse it later inside the render function\n\t\tthis.clearColor = new Color( 0, 0, 0 );\n\n\t\t// render targets\n\t\tthis.renderTargetsHorizontal = [];\n\t\tthis.renderTargetsVertical = [];\n\t\tthis.nMips = 5;\n\t\tlet resx = Math.round( this.resolution.x / 2 );\n\t\tlet resy = Math.round( this.resolution.y / 2 );\n\n\t\tthis.renderTargetBright = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetBright.texture.name = 'UnrealBloomPass.bright';\n\t\tthis.renderTargetBright.texture.generateMipmaps = false;\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tconst renderTargetHorizontal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\n\t\t\trenderTargetHorizontal.texture.name = 'UnrealBloomPass.h' + i;\n\t\t\trenderTargetHorizontal.texture.generateMipmaps = false;\n\n\t\t\tthis.renderTargetsHorizontal.push( renderTargetHorizontal );\n\n\t\t\tconst renderTargetVertical = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\n\t\t\trenderTargetVertical.texture.name = 'UnrealBloomPass.v' + i;\n\t\t\trenderTargetVertical.texture.generateMipmaps = false;\n\n\t\t\tthis.renderTargetsVertical.push( renderTargetVertical );\n\n\t\t\tresx = Math.round( resx / 2 );\n\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t\t// luminosity high pass material\n\n\t\tconst highPassShader = LuminosityHighPassShader;\n\t\tthis.highPassUniforms = UniformsUtils.clone( highPassShader.uniforms );\n\n\t\tthis.highPassUniforms[ 'luminosityThreshold' ].value = threshold;\n\t\tthis.highPassUniforms[ 'smoothWidth' ].value = 0.01;\n\n\t\tthis.materialHighPassFilter = new ShaderMaterial( {\n\t\t\tuniforms: this.highPassUniforms,\n\t\t\tvertexShader: highPassShader.vertexShader,\n\t\t\tfragmentShader: highPassShader.fragmentShader\n\t\t} );\n\n\t\t// gaussian blur materials\n\n\t\tthis.separableBlurMaterials = [];\n\t\tconst kernelSizeArray = [ 3, 5, 7, 9, 11 ];\n\t\tresx = Math.round( this.resolution.x / 2 );\n\t\tresy = Math.round( this.resolution.y / 2 );\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.separableBlurMaterials.push( this.getSeperableBlurMaterial( kernelSizeArray[ i ] ) );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );\n\n\t\t\tresx = Math.round( resx / 2 );\n\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t\t// composite material\n\n\t\tthis.compositeMaterial = this.getCompositeMaterial( this.nMips );\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture1' ].value = this.renderTargetsVertical[ 0 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture2' ].value = this.renderTargetsVertical[ 1 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture3' ].value = this.renderTargetsVertical[ 2 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture4' ].value = this.renderTargetsVertical[ 3 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture5' ].value = this.renderTargetsVertical[ 4 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'bloomStrength' ].value = strength;\n\t\tthis.compositeMaterial.uniforms[ 'bloomRadius' ].value = 0.1;\n\n\t\tconst bloomFactors = [ 1.0, 0.8, 0.6, 0.4, 0.2 ];\n\t\tthis.compositeMaterial.uniforms[ 'bloomFactors' ].value = bloomFactors;\n\t\tthis.bloomTintColors = [ new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ) ];\n\t\tthis.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;\n\n\t\t// blend material\n\n\t\tconst copyShader = CopyShader;\n\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.blendMaterial = new ShaderMaterial( {\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis.enabled = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis._oldClearColor = new Color();\n\t\tthis.oldClearAlpha = 1;\n\n\t\tthis.basic = new MeshBasicMaterial();\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.renderTargetsHorizontal.length; i ++ ) {\n\n\t\t\tthis.renderTargetsHorizontal[ i ].dispose();\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.renderTargetsVertical.length; i ++ ) {\n\n\t\t\tthis.renderTargetsVertical[ i ].dispose();\n\n\t\t}\n\n\t\tthis.renderTargetBright.dispose();\n\n\t\t//\n\n\t\tfor ( let i = 0; i < this.separableBlurMaterials.length; i ++ ) {\n\n\t\t\tthis.separableBlurMaterials[ i ].dispose();\n\n\t\t}\n\n\t\tthis.compositeMaterial.dispose();\n\t\tthis.blendMaterial.dispose();\n\t\tthis.basic.dispose();\n\n\t\t//\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tlet resx = Math.round( width / 2 );\n\t\tlet resy = Math.round( height / 2 );\n\n\t\tthis.renderTargetBright.setSize( resx, resy );\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.renderTargetsHorizontal[ i ].setSize( resx, resy );\n\t\t\tthis.renderTargetsVertical[ i ].setSize( resx, resy );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );\n\n\t\t\tresx = Math.round( resx / 2 );\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.setClearColor( this.clearColor, 0 );\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t// Render input to screen\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis.fsQuad.material = this.basic;\n\t\t\tthis.basic.map = readBuffer.texture;\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\t// 1. Extract Bright Areas\n\n\t\tthis.highPassUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.highPassUniforms[ 'luminosityThreshold' ].value = this.threshold;\n\t\tthis.fsQuad.material = this.materialHighPassFilter;\n\n\t\trenderer.setRenderTarget( this.renderTargetBright );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// 2. Blur All the mips progressively\n\n\t\tlet inputRenderTarget = this.renderTargetBright;\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.fsQuad.material = this.separableBlurMaterials[ i ];\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = inputRenderTarget.texture;\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionX;\n\t\t\trenderer.setRenderTarget( this.renderTargetsHorizontal[ i ] );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = this.renderTargetsHorizontal[ i ].texture;\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetsVertical[ i ] );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\tinputRenderTarget = this.renderTargetsVertical[ i ];\n\n\t\t}\n\n\t\t// Composite All the mips\n\n\t\tthis.fsQuad.material = this.compositeMaterial;\n\t\tthis.compositeMaterial.uniforms[ 'bloomStrength' ].value = this.strength;\n\t\tthis.compositeMaterial.uniforms[ 'bloomRadius' ].value = this.radius;\n\t\tthis.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;\n\n\t\trenderer.setRenderTarget( this.renderTargetsHorizontal[ 0 ] );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// Blend it additively over the input texture\n\n\t\tthis.fsQuad.material = this.blendMaterial;\n\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.renderTargetsHorizontal[ 0 ].texture;\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( readBuffer );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\t// Restore renderer settings\n\n\t\trenderer.setClearColor( this._oldClearColor, this.oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tgetSeperableBlurMaterial( kernelRadius ) {\n\n\t\tconst coefficients = [];\n\n\t\tfor ( let i = 0; i < kernelRadius; i ++ ) {\n\n\t\t\tcoefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );\n\n\t\t}\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'KERNEL_RADIUS': kernelRadius\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'colorTexture': { value: null },\n\t\t\t\t'invSize': { value: new Vector2( 0.5, 0.5 ) }, // inverse texture size\n\t\t\t\t'direction': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'gaussianCoefficients': { value: coefficients } // precomputed Gaussian coefficients\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 invSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float gaussianCoefficients[KERNEL_RADIUS];\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat weightSum = gaussianCoefficients[0];\n\t\t\t\t\tvec3 diffuseSum = texture2D( colorTexture, vUv ).rgb * weightSum;\n\t\t\t\t\tfor( int i = 1; i < KERNEL_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = float(i);\n\t\t\t\t\t\tfloat w = gaussianCoefficients[i];\n\t\t\t\t\t\tvec2 uvOffset = direction * invSize * x;\n\t\t\t\t\t\tvec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;\n\t\t\t\t\t\tvec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;\n\t\t\t\t\t\tdiffuseSum += (sample1 + sample2) * w;\n\t\t\t\t\t\tweightSum += 2.0 * w;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = vec4(diffuseSum/weightSum, 1.0);\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\tgetCompositeMaterial( nMips ) {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'NUM_MIPS': nMips\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'blurTexture1': { value: null },\n\t\t\t\t'blurTexture2': { value: null },\n\t\t\t\t'blurTexture3': { value: null },\n\t\t\t\t'blurTexture4': { value: null },\n\t\t\t\t'blurTexture5': { value: null },\n\t\t\t\t'bloomStrength': { value: 1.0 },\n\t\t\t\t'bloomFactors': { value: null },\n\t\t\t\t'bloomTintColors': { value: null },\n\t\t\t\t'bloomRadius': { value: 0.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tuniform sampler2D blurTexture1;\n\t\t\t\tuniform sampler2D blurTexture2;\n\t\t\t\tuniform sampler2D blurTexture3;\n\t\t\t\tuniform sampler2D blurTexture4;\n\t\t\t\tuniform sampler2D blurTexture5;\n\t\t\t\tuniform float bloomStrength;\n\t\t\t\tuniform float bloomRadius;\n\t\t\t\tuniform float bloomFactors[NUM_MIPS];\n\t\t\t\tuniform vec3 bloomTintColors[NUM_MIPS];\n\n\t\t\t\tfloat lerpBloomFactor(const in float factor) {\n\t\t\t\t\tfloat mirrorFactor = 1.2 - factor;\n\t\t\t\t\treturn mix(factor, mirrorFactor, bloomRadius);\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tgl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n}\n\nUnrealBloomPass.BlurDirectionX = new Vector2( 1.0, 0.0 );\nUnrealBloomPass.BlurDirectionY = new Vector2( 0.0, 1.0 );\n\nexport { UnrealBloomPass };\n", "import {\n\tMatrix4,\n\tObject3D,\n\tVector2,\n\tVector3\n} from 'three';\n\nclass CSS2DObject extends Object3D {\n\n\tconstructor( element = document.createElement( 'div' ) ) {\n\n\t\tsuper();\n\n\t\tthis.isCSS2DObject = true;\n\n\t\tthis.element = element;\n\n\t\tthis.element.style.position = 'absolute';\n\t\tthis.element.style.userSelect = 'none';\n\n\t\tthis.element.setAttribute( 'draggable', false );\n\n\t\tthis.center = new Vector2( 0.5, 0.5 ); // ( 0, 0 ) is the lower left; ( 1, 1 ) is the top right\n\n\t\tthis.addEventListener( 'removed', function () {\n\n\t\t\tthis.traverse( function ( object ) {\n\n\t\t\t\tif ( object.element instanceof Element && object.element.parentNode !== null ) {\n\n\t\t\t\t\tobject.element.parentNode.removeChild( object.element );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.element = source.element.cloneNode( true );\n\n\t\tthis.center = source.center;\n\n\t\treturn this;\n\n\t}\n\n}\n\n//\n\nconst _vector = new Vector3();\nconst _viewMatrix = new Matrix4();\nconst _viewProjectionMatrix = new Matrix4();\nconst _a = new Vector3();\nconst _b = new Vector3();\n\nclass CSS2DRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst _this = this;\n\n\t\tlet _width, _height;\n\t\tlet _widthHalf, _heightHalf;\n\n\t\tconst cache = {\n\t\t\tobjects: new WeakMap()\n\t\t};\n\n\t\tconst domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );\n\n\t\tdomElement.style.overflow = 'hidden';\n\n\t\tthis.domElement = domElement;\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\trenderObject( scene, scene, camera );\n\t\t\tzOrder( scene );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_widthHalf = _width / 2;\n\t\t\t_heightHalf = _height / 2;\n\n\t\t\tdomElement.style.width = width + 'px';\n\t\t\tdomElement.style.height = height + 'px';\n\n\t\t};\n\n\t\tfunction hideObject( object ) {\n\n\t\t\tif ( object.isCSS2DObject ) object.element.style.display = 'none';\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\thideObject( object.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera ) {\n\n\t\t\tif ( object.visible === false ) {\n\n\t\t\t\thideObject( object );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\t\t\t\n\t\t\tif ( object.isCSS2DObject ) {\n\n\t\t\t\t_vector.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t_vector.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tconst visible = ( _vector.z >= - 1 && _vector.z <= 1 ) && ( object.layers.test( camera.layers ) === true );\n\n\t\t\t\tconst element = object.element;\n\t\t\t\telement.style.display = visible === true ? '' : 'none';\n\n\t\t\t\tif ( visible === true ) {\n\n\t\t\t\t\tobject.onBeforeRender( _this, scene, camera );\n\n\t\t\t\t\telement.style.transform = 'translate(' + ( - 100 * object.center.x ) + '%,' + ( - 100 * object.center.y ) + '%)' + 'translate(' + ( _vector.x * _widthHalf + _widthHalf ) + 'px,' + ( - _vector.y * _heightHalf + _heightHalf ) + 'px)';\n\n\t\t\t\t\tif ( element.parentNode !== domElement ) {\n\n\t\t\t\t\t\tdomElement.appendChild( element );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.onAfterRender( _this, scene, camera );\n\n\t\t\t\t}\n\n\t\t\t\tconst objectData = {\n\t\t\t\t\tdistanceToCameraSquared: getDistanceToSquared( camera, object )\n\t\t\t\t};\n\n\t\t\t\tcache.objects.set( object, objectData );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( object.children[ i ], scene, camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getDistanceToSquared( object1, object2 ) {\n\n\t\t\t_a.setFromMatrixPosition( object1.matrixWorld );\n\t\t\t_b.setFromMatrixPosition( object2.matrixWorld );\n\n\t\t\treturn _a.distanceToSquared( _b );\n\n\t\t}\n\n\t\tfunction filterAndFlatten( scene ) {\n\n\t\t\tconst result = [];\n\n\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isCSS2DObject ) result.push( object );\n\n\t\t\t} );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction zOrder( scene ) {\n\n\t\t\tconst sorted = filterAndFlatten( scene ).sort( function ( a, b ) {\n\n\t\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\t\treturn b.renderOrder - a.renderOrder;\n\n\t\t\t\t}\n\n\t\t\t\tconst distanceA = cache.objects.get( a ).distanceToCameraSquared;\n\t\t\t\tconst distanceB = cache.objects.get( b ).distanceToCameraSquared;\n\n\t\t\t\treturn distanceA - distanceB;\n\n\t\t\t} );\n\n\t\t\tconst zMax = sorted.length;\n\n\t\t\tfor ( let i = 0, l = sorted.length; i < l; i ++ ) {\n\n\t\t\t\tsorted[ i ].element.style.zIndex = zMax - i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSS2DObject, CSS2DRenderer };\n", "import {\n\tMatrix4,\n\tObject3D,\n\tQuaternion,\n\tVector3\n} from 'three';\n\n/**\n * Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs\n */\n\nconst _position = new Vector3();\nconst _quaternion = new Quaternion();\nconst _scale = new Vector3();\n\nclass CSS3DObject extends Object3D {\n\n\tconstructor( element = document.createElement( 'div' ) ) {\n\n\t\tsuper();\n\n\t\tthis.isCSS3DObject = true;\n\n\t\tthis.element = element;\n\t\tthis.element.style.position = 'absolute';\n\t\tthis.element.style.pointerEvents = 'auto';\n\t\tthis.element.style.userSelect = 'none';\n\n\t\tthis.element.setAttribute( 'draggable', false );\n\n\t\tthis.addEventListener( 'removed', function () {\n\n\t\t\tthis.traverse( function ( object ) {\n\n\t\t\t\tif ( object.element instanceof Element && object.element.parentNode !== null ) {\n\n\t\t\t\t\tobject.element.parentNode.removeChild( object.element );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.element = source.element.cloneNode( true );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CSS3DSprite extends CSS3DObject {\n\n\tconstructor( element ) {\n\n\t\tsuper( element );\n\n\t\tthis.isCSS3DSprite = true;\n\n\t\tthis.rotation2D = 0;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.rotation2D = source.rotation2D;\n\n\t\treturn this;\n\n\t}\n\n}\n\n//\n\nconst _matrix = new Matrix4();\nconst _matrix2 = new Matrix4();\n\nclass CSS3DRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst _this = this;\n\n\t\tlet _width, _height;\n\t\tlet _widthHalf, _heightHalf;\n\n\t\tconst cache = {\n\t\t\tcamera: { style: '' },\n\t\t\tobjects: new WeakMap()\n\t\t};\n\n\t\tconst domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );\n\n\t\tdomElement.style.overflow = 'hidden';\n\n\t\tthis.domElement = domElement;\n\n\t\tconst viewElement = document.createElement( 'div' );\n\t\tviewElement.style.transformOrigin = '0 0';\n\t\tviewElement.style.pointerEvents = 'none';\n\t\tdomElement.appendChild( viewElement );\n\n\t\tconst cameraElement = document.createElement( 'div' );\n\n\t\tcameraElement.style.transformStyle = 'preserve-3d';\n\n\t\tviewElement.appendChild( cameraElement );\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tconst fov = camera.projectionMatrix.elements[ 5 ] * _heightHalf;\n\n\t\t\tif ( camera.view && camera.view.enabled ) {\n\n\t\t\t\t// view offset\n\t\t\t\tviewElement.style.transform = `translate( ${ - camera.view.offsetX * ( _width / camera.view.width ) }px, ${ - camera.view.offsetY * ( _height / camera.view.height ) }px )`;\n\n\t\t\t\t// view fullWidth and fullHeight, view width and height\n\t\t\t\tviewElement.style.transform += `scale( ${ camera.view.fullWidth / camera.view.width }, ${ camera.view.fullHeight / camera.view.height } )`;\n\n\t\t\t} else {\n\n\t\t\t\tviewElement.style.transform = '';\n\n\t\t\t}\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tlet tx, ty;\n\n\t\t\tif ( camera.isOrthographicCamera ) {\n\n\t\t\t\ttx = - ( camera.right + camera.left ) / 2;\n\t\t\t\tty = ( camera.top + camera.bottom ) / 2;\n\n\t\t\t}\n\n\t\t\tconst scaleByViewOffset = camera.view && camera.view.enabled ? camera.view.height / camera.view.fullHeight : 1;\n\t\t\tconst cameraCSSMatrix = camera.isOrthographicCamera ?\n\t\t\t\t`scale( ${ scaleByViewOffset } )` + 'scale(' + fov + ')' + 'translate(' + epsilon( tx ) + 'px,' + epsilon( ty ) + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse ) :\n\t\t\t\t`scale( ${ scaleByViewOffset } )` + 'translateZ(' + fov + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse );\n\t\t\tconst perspective = camera.isPerspectiveCamera ? 'perspective(' + fov + 'px) ' : '';\n\n\t\t\tconst style = perspective + cameraCSSMatrix +\n\t\t\t\t'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';\n\n\t\t\tif ( cache.camera.style !== style ) {\n\n\t\t\t\tcameraElement.style.transform = style;\n\n\t\t\t\tcache.camera.style = style;\n\n\t\t\t}\n\n\t\t\trenderObject( scene, scene, camera, cameraCSSMatrix );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\t\t\t_widthHalf = _width / 2;\n\t\t\t_heightHalf = _height / 2;\n\n\t\t\tdomElement.style.width = width + 'px';\n\t\t\tdomElement.style.height = height + 'px';\n\n\t\t\tviewElement.style.width = width + 'px';\n\t\t\tviewElement.style.height = height + 'px';\n\n\t\t\tcameraElement.style.width = width + 'px';\n\t\t\tcameraElement.style.height = height + 'px';\n\n\t\t};\n\n\t\tfunction epsilon( value ) {\n\n\t\t\treturn Math.abs( value ) < 1e-10 ? 0 : value;\n\n\t\t}\n\n\t\tfunction getCameraCSSMatrix( matrix ) {\n\n\t\t\tconst elements = matrix.elements;\n\n\t\t\treturn 'matrix3d(' +\n\t\t\t\tepsilon( elements[ 0 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 1 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 2 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 3 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 4 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 5 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 6 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 7 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 8 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 9 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 10 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 11 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 12 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 13 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 14 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 15 ] ) +\n\t\t\t')';\n\n\t\t}\n\n\t\tfunction getObjectCSSMatrix( matrix ) {\n\n\t\t\tconst elements = matrix.elements;\n\t\t\tconst matrix3d = 'matrix3d(' +\n\t\t\t\tepsilon( elements[ 0 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 1 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 2 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 3 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 4 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 5 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 6 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 7 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 8 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 9 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 10 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 11 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 12 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 13 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 14 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 15 ] ) +\n\t\t\t')';\n\n\t\t\treturn 'translate(-50%,-50%)' + matrix3d;\n\n\t\t}\n\n\t\tfunction hideObject( object ) {\n\n\t\t\tif ( object.isCSS3DObject ) object.element.style.display = 'none';\n\t \n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t hideObject( object.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, cameraCSSMatrix ) {\n\n\t\t\tif ( object.visible === false ) {\n\n\t\t\t\thideObject( object );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( object.isCSS3DObject ) {\n\n\t\t\t\tconst visible = ( object.layers.test( camera.layers ) === true );\n\n\t\t\t\tconst element = object.element;\n\t\t\t\telement.style.display = visible === true ? '' : 'none';\n\n\t\t\t\tif ( visible === true ) {\n\n\t\t\t\t\tobject.onBeforeRender( _this, scene, camera );\n\n\t\t\t\t\tlet style;\n\n\t\t\t\t\tif ( object.isCSS3DSprite ) {\n\n\t\t\t\t\t\t// http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/\n\n\t\t\t\t\t\t_matrix.copy( camera.matrixWorldInverse );\n\t\t\t\t\t\t_matrix.transpose();\n\n\t\t\t\t\t\tif ( object.rotation2D !== 0 ) _matrix.multiply( _matrix2.makeRotationZ( object.rotation2D ) );\n\n\t\t\t\t\t\tobject.matrixWorld.decompose( _position, _quaternion, _scale );\n\t\t\t\t\t\t_matrix.setPosition( _position );\n\t\t\t\t\t\t_matrix.scale( _scale );\n\n\t\t\t\t\t\t_matrix.elements[ 3 ] = 0;\n\t\t\t\t\t\t_matrix.elements[ 7 ] = 0;\n\t\t\t\t\t\t_matrix.elements[ 11 ] = 0;\n\t\t\t\t\t\t_matrix.elements[ 15 ] = 1;\n\n\t\t\t\t\t\tstyle = getObjectCSSMatrix( _matrix );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstyle = getObjectCSSMatrix( object.matrixWorld );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cachedObject = cache.objects.get( object );\n\n\t\t\t\t\tif ( cachedObject === undefined || cachedObject.style !== style ) {\n\n\t\t\t\t\t\telement.style.transform = style;\n\n\t\t\t\t\t\tconst objectData = { style: style };\n\t\t\t\t\t\tcache.objects.set( object, objectData );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( element.parentNode !== cameraElement ) {\n\n\t\t\t\t\t\tcameraElement.appendChild( element );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.onAfterRender( _this, scene, camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( object.children[ i ], scene, camera, cameraCSSMatrix );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSS3DObject, CSS3DSprite, CSS3DRenderer };\n", "import {\n\tBox3,\n\tColor,\n\tDoubleSide,\n\tFrustum,\n\tMatrix3,\n\tMatrix4,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\n\nclass RenderableObject {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.object = null;\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableFace {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.v1 = new RenderableVertex();\n\t\tthis.v2 = new RenderableVertex();\n\t\tthis.v3 = new RenderableVertex();\n\n\t\tthis.normalModel = new Vector3();\n\n\t\tthis.vertexNormalsModel = [ new Vector3(), new Vector3(), new Vector3() ];\n\t\tthis.vertexNormalsLength = 0;\n\n\t\tthis.color = new Color();\n\t\tthis.material = null;\n\t\tthis.uvs = [ new Vector2(), new Vector2(), new Vector2() ];\n\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableVertex {\n\n\tconstructor() {\n\n\t\tthis.position = new Vector3();\n\t\tthis.positionWorld = new Vector3();\n\t\tthis.positionScreen = new Vector4();\n\n\t\tthis.visible = true;\n\n\t}\n\n\tcopy( vertex ) {\n\n\t\tthis.positionWorld.copy( vertex.positionWorld );\n\t\tthis.positionScreen.copy( vertex.positionScreen );\n\n\t}\n\n}\n\n//\n\nclass RenderableLine {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.v1 = new RenderableVertex();\n\t\tthis.v2 = new RenderableVertex();\n\n\t\tthis.vertexColors = [ new Color(), new Color() ];\n\t\tthis.material = null;\n\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableSprite {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.object = null;\n\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\t\tthis.z = 0;\n\n\t\tthis.rotation = 0;\n\t\tthis.scale = new Vector2();\n\n\t\tthis.material = null;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass Projector {\n\n\tconstructor() {\n\n\t\tlet _object, _objectCount, _objectPoolLength = 0,\n\t\t\t_vertex, _vertexCount, _vertexPoolLength = 0,\n\t\t\t_face, _faceCount, _facePoolLength = 0,\n\t\t\t_line, _lineCount, _linePoolLength = 0,\n\t\t\t_sprite, _spriteCount, _spritePoolLength = 0,\n\t\t\t_modelMatrix;\n\n\t\tconst\n\n\t\t\t_renderData = { objects: [], lights: [], elements: [] },\n\n\t\t\t_vector3 = new Vector3(),\n\t\t\t_vector4 = new Vector4(),\n\n\t\t\t_clipBox = new Box3( new Vector3( - 1, - 1, - 1 ), new Vector3( 1, 1, 1 ) ),\n\t\t\t_boundingBox = new Box3(),\n\t\t\t_points3 = new Array( 3 ),\n\n\t\t\t_viewMatrix = new Matrix4(),\n\t\t\t_viewProjectionMatrix = new Matrix4(),\n\n\t\t\t_modelViewProjectionMatrix = new Matrix4(),\n\n\t\t\t_frustum = new Frustum(),\n\n\t\t\t_objectPool = [], _vertexPool = [], _facePool = [], _linePool = [], _spritePool = [];\n\n\t\t//\n\n\t\tfunction RenderList() {\n\n\t\t\tconst normals = [];\n\t\t\tconst colors = [];\n\t\t\tconst uvs = [];\n\n\t\t\tlet object = null;\n\n\t\t\tconst normalMatrix = new Matrix3();\n\n\t\t\tfunction setObject( value ) {\n\n\t\t\t\tobject = value;\n\n\t\t\t\tnormalMatrix.getNormalMatrix( object.matrixWorld );\n\n\t\t\t\tnormals.length = 0;\n\t\t\t\tcolors.length = 0;\n\t\t\t\tuvs.length = 0;\n\n\t\t\t}\n\n\t\t\tfunction projectVertex( vertex ) {\n\n\t\t\t\tconst position = vertex.position;\n\t\t\t\tconst positionWorld = vertex.positionWorld;\n\t\t\t\tconst positionScreen = vertex.positionScreen;\n\n\t\t\t\tpositionWorld.copy( position ).applyMatrix4( _modelMatrix );\n\t\t\t\tpositionScreen.copy( positionWorld ).applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tconst invW = 1 / positionScreen.w;\n\n\t\t\t\tpositionScreen.x *= invW;\n\t\t\t\tpositionScreen.y *= invW;\n\t\t\t\tpositionScreen.z *= invW;\n\n\t\t\t\tvertex.visible = positionScreen.x >= - 1 && positionScreen.x <= 1 &&\n\t\t\t\t\t\t positionScreen.y >= - 1 && positionScreen.y <= 1 &&\n\t\t\t\t\t\t positionScreen.z >= - 1 && positionScreen.z <= 1;\n\n\t\t\t}\n\n\t\t\tfunction pushVertex( x, y, z ) {\n\n\t\t\t\t_vertex = getNextVertexInPool();\n\t\t\t\t_vertex.position.set( x, y, z );\n\n\t\t\t\tprojectVertex( _vertex );\n\n\t\t\t}\n\n\t\t\tfunction pushNormal( x, y, z ) {\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t\tfunction pushColor( r, g, b ) {\n\n\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t}\n\n\t\t\tfunction pushUv( x, y ) {\n\n\t\t\t\tuvs.push( x, y );\n\n\t\t\t}\n\n\t\t\tfunction checkTriangleVisibility( v1, v2, v3 ) {\n\n\t\t\t\tif ( v1.visible === true || v2.visible === true || v3.visible === true ) return true;\n\n\t\t\t\t_points3[ 0 ] = v1.positionScreen;\n\t\t\t\t_points3[ 1 ] = v2.positionScreen;\n\t\t\t\t_points3[ 2 ] = v3.positionScreen;\n\n\t\t\t\treturn _clipBox.intersectsBox( _boundingBox.setFromPoints( _points3 ) );\n\n\t\t\t}\n\n\t\t\tfunction checkBackfaceCulling( v1, v2, v3 ) {\n\n\t\t\t\treturn ( ( v3.positionScreen.x - v1.positionScreen.x ) *\n\t\t\t\t\t ( v2.positionScreen.y - v1.positionScreen.y ) -\n\t\t\t\t\t ( v3.positionScreen.y - v1.positionScreen.y ) *\n\t\t\t\t\t ( v2.positionScreen.x - v1.positionScreen.x ) ) < 0;\n\n\t\t\t}\n\n\t\t\tfunction pushLine( a, b ) {\n\n\t\t\t\tconst v1 = _vertexPool[ a ];\n\t\t\t\tconst v2 = _vertexPool[ b ];\n\n\t\t\t\t// Clip\n\n\t\t\t\tv1.positionScreen.copy( v1.position ).applyMatrix4( _modelViewProjectionMatrix );\n\t\t\t\tv2.positionScreen.copy( v2.position ).applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\tif ( clipLine( v1.positionScreen, v2.positionScreen ) === true ) {\n\n\t\t\t\t\t// Perform the perspective divide\n\t\t\t\t\tv1.positionScreen.multiplyScalar( 1 / v1.positionScreen.w );\n\t\t\t\t\tv2.positionScreen.multiplyScalar( 1 / v2.positionScreen.w );\n\n\t\t\t\t\t_line = getNextLineInPool();\n\t\t\t\t\t_line.id = object.id;\n\t\t\t\t\t_line.v1.copy( v1 );\n\t\t\t\t\t_line.v2.copy( v2 );\n\t\t\t\t\t_line.z = Math.max( v1.positionScreen.z, v2.positionScreen.z );\n\t\t\t\t\t_line.renderOrder = object.renderOrder;\n\n\t\t\t\t\t_line.material = object.material;\n\n\t\t\t\t\tif ( object.material.vertexColors ) {\n\n\t\t\t\t\t\t_line.vertexColors[ 0 ].fromArray( colors, a * 3 );\n\t\t\t\t\t\t_line.vertexColors[ 1 ].fromArray( colors, b * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_renderData.elements.push( _line );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction pushTriangle( a, b, c, material ) {\n\n\t\t\t\tconst v1 = _vertexPool[ a ];\n\t\t\t\tconst v2 = _vertexPool[ b ];\n\t\t\t\tconst v3 = _vertexPool[ c ];\n\n\t\t\t\tif ( checkTriangleVisibility( v1, v2, v3 ) === false ) return;\n\n\t\t\t\tif ( material.side === DoubleSide || checkBackfaceCulling( v1, v2, v3 ) === true ) {\n\n\t\t\t\t\t_face = getNextFaceInPool();\n\n\t\t\t\t\t_face.id = object.id;\n\t\t\t\t\t_face.v1.copy( v1 );\n\t\t\t\t\t_face.v2.copy( v2 );\n\t\t\t\t\t_face.v3.copy( v3 );\n\t\t\t\t\t_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) / 3;\n\t\t\t\t\t_face.renderOrder = object.renderOrder;\n\n\t\t\t\t\t// face normal\n\t\t\t\t\t_vector3.subVectors( v3.position, v2.position );\n\t\t\t\t\t_vector4.subVectors( v1.position, v2.position );\n\t\t\t\t\t_vector3.cross( _vector4 );\n\t\t\t\t\t_face.normalModel.copy( _vector3 );\n\t\t\t\t\t_face.normalModel.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\tconst normal = _face.vertexNormalsModel[ i ];\n\t\t\t\t\t\tnormal.fromArray( normals, arguments[ i ] * 3 );\n\t\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\t\tconst uv = _face.uvs[ i ];\n\t\t\t\t\t\tuv.fromArray( uvs, arguments[ i ] * 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_face.vertexNormalsLength = 3;\n\n\t\t\t\t\t_face.material = material;\n\n\t\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t\t_face.color.fromArray( colors, a * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_renderData.elements.push( _face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsetObject: setObject,\n\t\t\t\tprojectVertex: projectVertex,\n\t\t\t\tcheckTriangleVisibility: checkTriangleVisibility,\n\t\t\t\tcheckBackfaceCulling: checkBackfaceCulling,\n\t\t\t\tpushVertex: pushVertex,\n\t\t\t\tpushNormal: pushNormal,\n\t\t\t\tpushColor: pushColor,\n\t\t\t\tpushUv: pushUv,\n\t\t\t\tpushLine: pushLine,\n\t\t\t\tpushTriangle: pushTriangle\n\t\t\t};\n\n\t\t}\n\n\t\tconst renderList = new RenderList();\n\n\t\tfunction projectObject( object ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\t_renderData.lights.push( object );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.material.visible === false ) return;\n\t\t\t\tif ( object.frustumCulled === true && _frustum.intersectsObject( object ) === false ) return;\n\n\t\t\t\taddObject( object );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( object.material.visible === false ) return;\n\t\t\t\tif ( object.frustumCulled === true && _frustum.intersectsSprite( object ) === false ) return;\n\n\t\t\t\taddObject( object );\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addObject( object ) {\n\n\t\t\t_object = getNextObjectInPool();\n\t\t\t_object.id = object.id;\n\t\t\t_object.object = object;\n\n\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\n\t\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\n\t\t\t_object.z = _vector3.z;\n\t\t\t_object.renderOrder = object.renderOrder;\n\n\t\t\t_renderData.objects.push( _object );\n\n\t\t}\n\n\t\tthis.projectScene = function ( scene, camera, sortObjects, sortElements ) {\n\n\t\t\t_faceCount = 0;\n\t\t\t_lineCount = 0;\n\t\t\t_spriteCount = 0;\n\n\t\t\t_renderData.elements.length = 0;\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\t_frustum.setFromProjectionMatrix( _viewProjectionMatrix );\n\n\t\t\t//\n\n\t\t\t_objectCount = 0;\n\n\t\t\t_renderData.objects.length = 0;\n\t\t\t_renderData.lights.length = 0;\n\n\t\t\tprojectObject( scene );\n\n\t\t\tif ( sortObjects === true ) {\n\n\t\t\t\t_renderData.objects.sort( painterSort );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst objects = _renderData.objects;\n\n\t\t\tfor ( let o = 0, ol = objects.length; o < ol; o ++ ) {\n\n\t\t\t\tconst object = objects[ o ].object;\n\t\t\t\tconst geometry = object.geometry;\n\n\t\t\t\trenderList.setObject( object );\n\n\t\t\t\t_modelMatrix = object.matrixWorld;\n\n\t\t\t\t_vertexCount = 0;\n\n\t\t\t\tif ( object.isMesh ) {\n\n\t\t\t\t\tlet material = object.material;\n\n\t\t\t\t\tconst isMultiMaterial = Array.isArray( material );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tif ( attributes.position === undefined ) continue;\n\n\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tlet x = positions[ i ];\n\t\t\t\t\t\tlet y = positions[ i + 1 ];\n\t\t\t\t\t\tlet z = positions[ i + 2 ];\n\n\t\t\t\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\n\t\t\t\t\t\tif ( morphTargets !== undefined ) {\n\n\t\t\t\t\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\t\t\t\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\t\t\t\t\t\tfor ( let t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\t\tconst influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\t\tconst target = morphTargets[ t ];\n\n\t\t\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t\t\tx += target.getX( i / 3 ) * influence;\n\t\t\t\t\t\t\t\t\ty += target.getY( i / 3 ) * influence;\n\t\t\t\t\t\t\t\t\tz += target.getZ( i / 3 ) * influence;\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tx += ( target.getX( i / 3 ) - positions[ i ] ) * influence;\n\t\t\t\t\t\t\t\t\ty += ( target.getY( i / 3 ) - positions[ i + 1 ] ) * influence;\n\t\t\t\t\t\t\t\t\tz += ( target.getZ( i / 3 ) - positions[ i + 2 ] ) * influence;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trenderList.pushVertex( x, y, z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.normal !== undefined ) {\n\n\t\t\t\t\t\tconst normals = attributes.normal.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = normals.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushNormal( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.color !== undefined ) {\n\n\t\t\t\t\t\tconst colors = attributes.color.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.uv !== undefined ) {\n\n\t\t\t\t\t\tconst uvs = attributes.uv.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = uvs.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\trenderList.pushUv( uvs[ i ], uvs[ i + 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\tconst indices = geometry.index.array;\n\n\t\t\t\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( let g = 0; g < groups.length; g ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ g ];\n\n\t\t\t\t\t\t\t\tmaterial = isMultiMaterial === true\n\t\t\t\t\t\t\t\t\t ? object.material[ group.materialIndex ]\n\t\t\t\t\t\t\t\t\t : object.material;\n\n\t\t\t\t\t\t\t\tif ( material === undefined ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let i = group.start, l = group.start + group.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ], material );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ], material );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( let g = 0; g < groups.length; g ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ g ];\n\n\t\t\t\t\t\t\t\tmaterial = isMultiMaterial === true\n\t\t\t\t\t\t\t\t\t ? object.material[ group.materialIndex ]\n\t\t\t\t\t\t\t\t\t : object.material;\n\n\t\t\t\t\t\t\t\tif ( material === undefined ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let i = group.start, l = group.start + group.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2, material );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = positions.length / 3; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2, material );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( attributes.color !== undefined ) {\n\n\t\t\t\t\t\t\tconst colors = attributes.color.array;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\t\tconst indices = geometry.index.array;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( indices[ i ], indices[ i + 1 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconst step = object.isLineSegments ? 2 : 1;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = ( positions.length / 3 ) - 1; i < l; i += step ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( i, i + 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t_vector4.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ], 1 );\n\t\t\t\t\t\t\t_vector4.applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\t\t\t_vector4.set( _modelMatrix.elements[ 12 ], _modelMatrix.elements[ 13 ], _modelMatrix.elements[ 14 ], 1 );\n\t\t\t\t\t_vector4.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( sortElements === true ) {\n\n\t\t\t\t_renderData.elements.sort( painterSort );\n\n\t\t\t}\n\n\t\t\treturn _renderData;\n\n\t\t};\n\n\t\tfunction pushPoint( _vector4, object, camera ) {\n\n\t\t\tconst invW = 1 / _vector4.w;\n\n\t\t\t_vector4.z *= invW;\n\n\t\t\tif ( _vector4.z >= - 1 && _vector4.z <= 1 ) {\n\n\t\t\t\t_sprite = getNextSpriteInPool();\n\t\t\t\t_sprite.id = object.id;\n\t\t\t\t_sprite.x = _vector4.x * invW;\n\t\t\t\t_sprite.y = _vector4.y * invW;\n\t\t\t\t_sprite.z = _vector4.z;\n\t\t\t\t_sprite.renderOrder = object.renderOrder;\n\t\t\t\t_sprite.object = object;\n\n\t\t\t\t_sprite.rotation = object.rotation;\n\n\t\t\t\t_sprite.scale.x = object.scale.x * Math.abs( _sprite.x - ( _vector4.x + camera.projectionMatrix.elements[ 0 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 12 ] ) );\n\t\t\t\t_sprite.scale.y = object.scale.y * Math.abs( _sprite.y - ( _vector4.y + camera.projectionMatrix.elements[ 5 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 13 ] ) );\n\n\t\t\t\t_sprite.material = object.material;\n\n\t\t\t\t_renderData.elements.push( _sprite );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Pools\n\n\t\tfunction getNextObjectInPool() {\n\n\t\t\tif ( _objectCount === _objectPoolLength ) {\n\n\t\t\t\tconst object = new RenderableObject();\n\t\t\t\t_objectPool.push( object );\n\t\t\t\t_objectPoolLength ++;\n\t\t\t\t_objectCount ++;\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t\treturn _objectPool[ _objectCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextVertexInPool() {\n\n\t\t\tif ( _vertexCount === _vertexPoolLength ) {\n\n\t\t\t\tconst vertex = new RenderableVertex();\n\t\t\t\t_vertexPool.push( vertex );\n\t\t\t\t_vertexPoolLength ++;\n\t\t\t\t_vertexCount ++;\n\t\t\t\treturn vertex;\n\n\t\t\t}\n\n\t\t\treturn _vertexPool[ _vertexCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextFaceInPool() {\n\n\t\t\tif ( _faceCount === _facePoolLength ) {\n\n\t\t\t\tconst face = new RenderableFace();\n\t\t\t\t_facePool.push( face );\n\t\t\t\t_facePoolLength ++;\n\t\t\t\t_faceCount ++;\n\t\t\t\treturn face;\n\n\t\t\t}\n\n\t\t\treturn _facePool[ _faceCount ++ ];\n\n\n\t\t}\n\n\t\tfunction getNextLineInPool() {\n\n\t\t\tif ( _lineCount === _linePoolLength ) {\n\n\t\t\t\tconst line = new RenderableLine();\n\t\t\t\t_linePool.push( line );\n\t\t\t\t_linePoolLength ++;\n\t\t\t\t_lineCount ++;\n\t\t\t\treturn line;\n\n\t\t\t}\n\n\t\t\treturn _linePool[ _lineCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextSpriteInPool() {\n\n\t\t\tif ( _spriteCount === _spritePoolLength ) {\n\n\t\t\t\tconst sprite = new RenderableSprite();\n\t\t\t\t_spritePool.push( sprite );\n\t\t\t\t_spritePoolLength ++;\n\t\t\t\t_spriteCount ++;\n\t\t\t\treturn sprite;\n\n\t\t\t}\n\n\t\t\treturn _spritePool[ _spriteCount ++ ];\n\n\t\t}\n\n\t\t//\n\n\t\tfunction painterSort( a, b ) {\n\n\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t\t} else if ( a.z !== b.z ) {\n\n\t\t\t\treturn b.z - a.z;\n\n\t\t\t} else if ( a.id !== b.id ) {\n\n\t\t\t\treturn a.id - b.id;\n\n\t\t\t} else {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction clipLine( s1, s2 ) {\n\n\t\t\tlet alpha1 = 0, alpha2 = 1;\n\n\t\t\t// Calculate the boundary coordinate of each vertex for the near and far clip planes,\n\t\t\t// Z = -1 and Z = +1, respectively.\n\n\t\t\tconst bc1near = s1.z + s1.w,\n\t\t\t\tbc2near = s2.z + s2.w,\n\t\t\t\tbc1far = - s1.z + s1.w,\n\t\t\t\tbc2far = - s2.z + s2.w;\n\n\t\t\tif ( bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0 ) {\n\n\t\t\t\t// Both vertices lie entirely within all clip planes.\n\t\t\t\treturn true;\n\n\t\t\t} else if ( ( bc1near < 0 && bc2near < 0 ) || ( bc1far < 0 && bc2far < 0 ) ) {\n\n\t\t\t\t// Both vertices lie entirely outside one of the clip planes.\n\t\t\t\treturn false;\n\n\t\t\t} else {\n\n\t\t\t\t// The line segment spans at least one clip plane.\n\n\t\t\t\tif ( bc1near < 0 ) {\n\n\t\t\t\t\t// v1 lies outside the near plane, v2 inside\n\t\t\t\t\talpha1 = Math.max( alpha1, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t\t} else if ( bc2near < 0 ) {\n\n\t\t\t\t\t// v2 lies outside the near plane, v1 inside\n\t\t\t\t\talpha2 = Math.min( alpha2, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bc1far < 0 ) {\n\n\t\t\t\t\t// v1 lies outside the far plane, v2 inside\n\t\t\t\t\talpha1 = Math.max( alpha1, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t\t} else if ( bc2far < 0 ) {\n\n\t\t\t\t\t// v2 lies outside the far plane, v2 inside\n\t\t\t\t\talpha2 = Math.min( alpha2, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( alpha2 < alpha1 ) {\n\n\t\t\t\t\t// The line segment spans two boundaries, but is outside both of them.\n\t\t\t\t\t// (This can't happen when we're only clipping against just near/far but good\n\t\t\t\t\t// to leave the check here for future usage if other clip planes are added.)\n\t\t\t\t\treturn false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Update the s1 and s2 vertices to match the clipped line segment.\n\t\t\t\t\ts1.lerp( s2, alpha1 );\n\t\t\t\t\ts2.lerp( s1, 1 - alpha2 );\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { RenderableObject, RenderableFace, RenderableVertex, RenderableLine, RenderableSprite, Projector };\n", "import {\n\tBox2,\n\tCamera,\n\tColor,\n\tMatrix3,\n\tMatrix4,\n\tObject3D,\n\tSRGBColorSpace,\n\tVector3\n} from 'three';\nimport { Projector } from '../renderers/Projector.js';\nimport { RenderableFace } from '../renderers/Projector.js';\nimport { RenderableLine } from '../renderers/Projector.js';\nimport { RenderableSprite } from '../renderers/Projector.js';\n\nclass SVGObject extends Object3D {\n\n\tconstructor( node ) {\n\n\t\tsuper();\n\n\t\tthis.isSVGObject = true;\n\n\t\tthis.node = node;\n\n\t}\n\n}\n\nclass SVGRenderer {\n\n\tconstructor() {\n\n\t\tlet _renderData, _elements, _lights,\n\t\t\t_svgWidth, _svgHeight, _svgWidthHalf, _svgHeightHalf,\n\n\t\t\t_v1, _v2, _v3,\n\n\t\t\t_svgNode,\n\t\t\t_pathCount = 0,\n\n\t\t\t_precision = null,\n\t\t\t_quality = 1,\n\n\t\t\t_currentPath, _currentStyle;\n\n\t\tconst _this = this,\n\t\t\t_clipBox = new Box2(),\n\t\t\t_elemBox = new Box2(),\n\n\t\t\t_color = new Color(),\n\t\t\t_diffuseColor = new Color(),\n\t\t\t_ambientLight = new Color(),\n\t\t\t_directionalLights = new Color(),\n\t\t\t_pointLights = new Color(),\n\t\t\t_clearColor = new Color(),\n\n\t\t\t_vector3 = new Vector3(), // Needed for PointLight\n\t\t\t_centroid = new Vector3(),\n\t\t\t_normal = new Vector3(),\n\t\t\t_normalViewMatrix = new Matrix3(),\n\n\t\t\t_viewMatrix = new Matrix4(),\n\t\t\t_viewProjectionMatrix = new Matrix4(),\n\n\t\t\t_svgPathPool = [],\n\n\t\t\t_projector = new Projector(),\n\t\t\t_svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n\n\t\tthis.domElement = _svg;\n\n\t\tthis.autoClear = true;\n\t\tthis.sortObjects = true;\n\t\tthis.sortElements = true;\n\n\t\tthis.overdraw = 0.5;\n\n\t\tthis.outputColorSpace = SRGBColorSpace;\n\n\t\tthis.info = {\n\n\t\t\trender: {\n\n\t\t\t\tvertices: 0,\n\t\t\t\tfaces: 0\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setQuality = function ( quality ) {\n\n\t\t\tswitch ( quality ) {\n\n\t\t\t\tcase 'high': _quality = 1; break;\n\t\t\t\tcase 'low': _quality = 0; break;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setClearColor = function ( color ) {\n\n\t\t\t_clearColor.set( color );\n\n\t\t};\n\n\t\tthis.setPixelRatio = function () {};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_svgWidth = width; _svgHeight = height;\n\t\t\t_svgWidthHalf = _svgWidth / 2; _svgHeightHalf = _svgHeight / 2;\n\n\t\t\t_svg.setAttribute( 'viewBox', ( - _svgWidthHalf ) + ' ' + ( - _svgHeightHalf ) + ' ' + _svgWidth + ' ' + _svgHeight );\n\t\t\t_svg.setAttribute( 'width', _svgWidth );\n\t\t\t_svg.setAttribute( 'height', _svgHeight );\n\n\t\t\t_clipBox.min.set( - _svgWidthHalf, - _svgHeightHalf );\n\t\t\t_clipBox.max.set( _svgWidthHalf, _svgHeightHalf );\n\n\t\t};\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _svgWidth,\n\t\t\t\theight: _svgHeight\n\t\t\t};\n\n\t\t};\n\n\t\tthis.setPrecision = function ( precision ) {\n\n\t\t\t_precision = precision;\n\n\t\t};\n\n\t\tfunction removeChildNodes() {\n\n\t\t\t_pathCount = 0;\n\n\t\t\twhile ( _svg.childNodes.length > 0 ) {\n\n\t\t\t\t_svg.removeChild( _svg.childNodes[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction convert( c ) {\n\n\t\t\treturn _precision !== null ? c.toFixed( _precision ) : c;\n\n\t\t}\n\n\t\tthis.clear = function () {\n\n\t\t\tremoveChildNodes();\n\t\t\t_svg.style.backgroundColor = _clearColor.getStyle( _this.outputColorSpace );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera instanceof Camera === false ) {\n\n\t\t\t\tconsole.error( 'THREE.SVGRenderer.render: camera is not an instance of Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst background = scene.background;\n\n\t\t\tif ( background && background.isColor ) {\n\n\t\t\t\tremoveChildNodes();\n\t\t\t\t_svg.style.backgroundColor = background.getStyle( _this.outputColorSpace );\n\n\t\t\t} else if ( this.autoClear === true ) {\n\n\t\t\t\tthis.clear();\n\n\t\t\t}\n\n\t\t\t_this.info.render.vertices = 0;\n\t\t\t_this.info.render.faces = 0;\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\t_renderData = _projector.projectScene( scene, camera, this.sortObjects, this.sortElements );\n\t\t\t_elements = _renderData.elements;\n\t\t\t_lights = _renderData.lights;\n\n\t\t\t_normalViewMatrix.getNormalMatrix( camera.matrixWorldInverse );\n\n\t\t\tcalculateLights( _lights );\n\n\t\t\t // reset accumulated path\n\n\t\t\t_currentPath = '';\n\t\t\t_currentStyle = '';\n\n\t\t\tfor ( let e = 0, el = _elements.length; e < el; e ++ ) {\n\n\t\t\t\tconst element = _elements[ e ];\n\t\t\t\tconst material = element.material;\n\n\t\t\t\tif ( material === undefined || material.opacity === 0 ) continue;\n\n\t\t\t\t_elemBox.makeEmpty();\n\n\t\t\t\tif ( element instanceof RenderableSprite ) {\n\n\t\t\t\t\t_v1 = element;\n\t\t\t\t\t_v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;\n\n\t\t\t\t\trenderSprite( _v1, element, material );\n\n\t\t\t\t} else if ( element instanceof RenderableLine ) {\n\n\t\t\t\t\t_v1 = element.v1; _v2 = element.v2;\n\n\t\t\t\t\t_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;\n\n\t\t\t\t\t_elemBox.setFromPoints( [ _v1.positionScreen, _v2.positionScreen ] );\n\n\t\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\t\trenderLine( _v1, _v2, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( element instanceof RenderableFace ) {\n\n\t\t\t\t\t_v1 = element.v1; _v2 = element.v2; _v3 = element.v3;\n\n\t\t\t\t\tif ( _v1.positionScreen.z < - 1 || _v1.positionScreen.z > 1 ) continue;\n\t\t\t\t\tif ( _v2.positionScreen.z < - 1 || _v2.positionScreen.z > 1 ) continue;\n\t\t\t\t\tif ( _v3.positionScreen.z < - 1 || _v3.positionScreen.z > 1 ) continue;\n\n\t\t\t\t\t_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v3.positionScreen.x *= _svgWidthHalf; _v3.positionScreen.y *= - _svgHeightHalf;\n\n\t\t\t\t\tif ( this.overdraw > 0 ) {\n\n\t\t\t\t\t\texpand( _v1.positionScreen, _v2.positionScreen, this.overdraw );\n\t\t\t\t\t\texpand( _v2.positionScreen, _v3.positionScreen, this.overdraw );\n\t\t\t\t\t\texpand( _v3.positionScreen, _v1.positionScreen, this.overdraw );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_elemBox.setFromPoints( [\n\t\t\t\t\t\t_v1.positionScreen,\n\t\t\t\t\t\t_v2.positionScreen,\n\t\t\t\t\t\t_v3.positionScreen\n\t\t\t\t\t] );\n\n\t\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\t\trenderFace3( _v1, _v2, _v3, element, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tflushPath(); // just to flush last svg:path\n\n\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t if ( object.isSVGObject ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\t\tif ( _vector3.z < - 1 || _vector3.z > 1 ) return;\n\n\t\t\t\t\tconst x = _vector3.x * _svgWidthHalf;\n\t\t\t\t\tconst y = - _vector3.y * _svgHeightHalf;\n\n\t\t\t\t\tconst node = object.node;\n\t\t\t\t\tnode.setAttribute( 'transform', 'translate(' + x + ',' + y + ')' );\n\n\t\t\t\t\t_svg.appendChild( node );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\tfunction calculateLights( lights ) {\n\n\t\t\t_ambientLight.setRGB( 0, 0, 0 );\n\t\t\t_directionalLights.setRGB( 0, 0, 0 );\n\t\t\t_pointLights.setRGB( 0, 0, 0 );\n\n\t\t\tfor ( let l = 0, ll = lights.length; l < ll; l ++ ) {\n\n\t\t\t\tconst light = lights[ l ];\n\t\t\t\tconst lightColor = light.color;\n\n\t\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\t\t_ambientLight.r += lightColor.r;\n\t\t\t\t\t_ambientLight.g += lightColor.g;\n\t\t\t\t\t_ambientLight.b += lightColor.b;\n\n\t\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\t\t_directionalLights.r += lightColor.r;\n\t\t\t\t\t_directionalLights.g += lightColor.g;\n\t\t\t\t\t_directionalLights.b += lightColor.b;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\t_pointLights.r += lightColor.r;\n\t\t\t\t\t_pointLights.g += lightColor.g;\n\t\t\t\t\t_pointLights.b += lightColor.b;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction calculateLight( lights, position, normal, color ) {\n\n\t\t\tfor ( let l = 0, ll = lights.length; l < ll; l ++ ) {\n\n\t\t\t\tconst light = lights[ l ];\n\t\t\t\tconst lightColor = light.color;\n\n\t\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\t\tconst lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld ).normalize();\n\n\t\t\t\t\tlet amount = normal.dot( lightPosition );\n\n\t\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\t\tamount *= light.intensity;\n\n\t\t\t\t\tcolor.r += lightColor.r * amount;\n\t\t\t\t\tcolor.g += lightColor.g * amount;\n\t\t\t\t\tcolor.b += lightColor.b * amount;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\tconst lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\t\tlet amount = normal.dot( _vector3.subVectors( lightPosition, position ).normalize() );\n\n\t\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\t\tamount *= light.distance == 0 ? 1 : 1 - Math.min( position.distanceTo( lightPosition ) / light.distance, 1 );\n\n\t\t\t\t\tif ( amount == 0 ) continue;\n\n\t\t\t\t\tamount *= light.intensity;\n\n\t\t\t\t\tcolor.r += lightColor.r * amount;\n\t\t\t\t\tcolor.g += lightColor.g * amount;\n\t\t\t\t\tcolor.b += lightColor.b * amount;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderSprite( v1, element, material ) {\n\n\t\t\tlet scaleX = element.scale.x * _svgWidthHalf;\n\t\t\tlet scaleY = element.scale.y * _svgHeightHalf;\n\n\t\t\tif ( material.isPointsMaterial ) {\n\n\t\t\t\tscaleX *= material.size;\n\t\t\t\tscaleY *= material.size;\n\n\t\t\t}\n\n\t\t\tconst path = 'M' + convert( v1.x - scaleX * 0.5 ) + ',' + convert( v1.y - scaleY * 0.5 ) + 'h' + convert( scaleX ) + 'v' + convert( scaleY ) + 'h' + convert( - scaleX ) + 'z';\n\t\t\tlet style = '';\n\n\t\t\tif ( material.isSpriteMaterial || material.isPointsMaterial ) {\n\n\t\t\t\tstyle = 'fill:' + material.color.getStyle( _this.outputColorSpace ) + ';fill-opacity:' + material.opacity;\n\n\t\t\t}\n\n\t\t\taddPath( style, path );\n\n\t\t}\n\n\t\tfunction renderLine( v1, v2, material ) {\n\n\t\t\tconst path = 'M' + convert( v1.positionScreen.x ) + ',' + convert( v1.positionScreen.y ) + 'L' + convert( v2.positionScreen.x ) + ',' + convert( v2.positionScreen.y );\n\n\t\t\tif ( material.isLineBasicMaterial ) {\n\n\t\t\t\tlet style = 'fill:none;stroke:' + material.color.getStyle( _this.outputColorSpace ) + ';stroke-opacity:' + material.opacity + ';stroke-width:' + material.linewidth + ';stroke-linecap:' + material.linecap;\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\tstyle = style + ';stroke-dasharray:' + material.dashSize + ',' + material.gapSize;\n\n\t\t\t\t}\n\n\t\t\t\taddPath( style, path );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderFace3( v1, v2, v3, element, material ) {\n\n\t\t\t_this.info.render.vertices += 3;\n\t\t\t_this.info.render.faces ++;\n\n\t\t\tconst path = 'M' + convert( v1.positionScreen.x ) + ',' + convert( v1.positionScreen.y ) + 'L' + convert( v2.positionScreen.x ) + ',' + convert( v2.positionScreen.y ) + 'L' + convert( v3.positionScreen.x ) + ',' + convert( v3.positionScreen.y ) + 'z';\n\t\t\tlet style = '';\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\t_color.copy( material.color );\n\n\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t_color.multiply( element.color );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial ) {\n\n\t\t\t\t_diffuseColor.copy( material.color );\n\n\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t_diffuseColor.multiply( element.color );\n\n\t\t\t\t}\n\n\t\t\t\t_color.copy( _ambientLight );\n\n\t\t\t\t_centroid.copy( v1.positionWorld ).add( v2.positionWorld ).add( v3.positionWorld ).divideScalar( 3 );\n\n\t\t\t\tcalculateLight( _lights, _centroid, element.normalModel, _color );\n\n\t\t\t\t_color.multiply( _diffuseColor ).add( material.emissive );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\t_normal.copy( element.normalModel ).applyMatrix3( _normalViewMatrix ).normalize();\n\n\t\t\t\t_color.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );\n\n\t\t\t}\n\n\t\t\tif ( material.wireframe ) {\n\n\t\t\t\tstyle = 'fill:none;stroke:' + _color.getStyle( _this.outputColorSpace ) + ';stroke-opacity:' + material.opacity + ';stroke-width:' + material.wireframeLinewidth + ';stroke-linecap:' + material.wireframeLinecap + ';stroke-linejoin:' + material.wireframeLinejoin;\n\n\t\t\t} else {\n\n\t\t\t\tstyle = 'fill:' + _color.getStyle( _this.outputColorSpace ) + ';fill-opacity:' + material.opacity;\n\n\t\t\t}\n\n\t\t\taddPath( style, path );\n\n\t\t}\n\n\t\t// Hide anti-alias gaps\n\n\t\tfunction expand( v1, v2, pixels ) {\n\n\t\t\tlet x = v2.x - v1.x, y = v2.y - v1.y;\n\t\t\tconst det = x * x + y * y;\n\n\t\t\tif ( det === 0 ) return;\n\n\t\t\tconst idet = pixels / Math.sqrt( det );\n\n\t\t\tx *= idet; y *= idet;\n\n\t\t\tv2.x += x; v2.y += y;\n\t\t\tv1.x -= x; v1.y -= y;\n\n\t\t}\n\n\t\tfunction addPath( style, path ) {\n\n\t\t\tif ( _currentStyle === style ) {\n\n\t\t\t\t_currentPath += path;\n\n\t\t\t} else {\n\n\t\t\t\tflushPath();\n\n\t\t\t\t_currentStyle = style;\n\t\t\t\t_currentPath = path;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction flushPath() {\n\n\t\t\tif ( _currentPath ) {\n\n\t\t\t\t_svgNode = getPathNode( _pathCount ++ );\n\t\t\t\t_svgNode.setAttribute( 'd', _currentPath );\n\t\t\t\t_svgNode.setAttribute( 'style', _currentStyle );\n\t\t\t\t_svg.appendChild( _svgNode );\n\n\t\t\t}\n\n\t\t\t_currentPath = '';\n\t\t\t_currentStyle = '';\n\n\t\t}\n\n\t\tfunction getPathNode( id ) {\n\n\t\t\tif ( _svgPathPool[ id ] == null ) {\n\n\t\t\t\t_svgPathPool[ id ] = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n\n\t\t\t\tif ( _quality == 0 ) {\n\n\t\t\t\t\t_svgPathPool[ id ].setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed\n\n\t\t\t\t}\n\n\t\t\t\treturn _svgPathPool[ id ];\n\n\t\t\t}\n\n\t\t\treturn _svgPathPool[ id ];\n\n\t\t}\n\n\t}\n\n}\n\nexport { SVGObject, SVGRenderer };\n", "/**\n * ACES Filmic Tone Mapping Shader by Stephen Hill\n * source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\n *\n * this implementation of ACES is modified to accommodate a brighter viewing environment.\n * the scale factor of 1/0.6 is subjective. see discussion in #19621.\n */\n\nconst ACESFilmicToneMappingShader = {\n\n\tname: 'ACESFilmicToneMappingShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'exposure': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define saturate(a) clamp( a, 0.0, 1.0 )\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tuniform float exposure;\n\n\t\tvarying vec2 vUv;\n\n\t\tvec3 RRTAndODTFit( vec3 v ) {\n\n\t\t\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\t\t\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\t\t\treturn a / b;\n\n\t\t}\n\n\t\tvec3 ACESFilmicToneMapping( vec3 color ) {\n\n\t\t// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\n\t\t\tconst mat3 ACESInputMat = mat3(\n\t\t\t\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\n\t\t\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\t\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t\t\t);\n\n\t\t// ODT_SAT => XYZ => D60_2_D65 => sRGB\n\t\t\tconst mat3 ACESOutputMat = mat3(\n\t\t\t\tvec3( 1.60475, -0.10208, -0.00327 ), // transposed from source\n\t\t\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\t\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t\t\t);\n\n\t\t\tcolor = ACESInputMat * color;\n\n\t\t// Apply RRT and ODT\n\t\t\tcolor = RRTAndODTFit( color );\n\n\t\t\tcolor = ACESOutputMat * color;\n\n\t\t// Clamp to [0, 1]\n\t\t\treturn saturate( color );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 tex = texture2D( tDiffuse, vUv );\n\n\t\t\ttex.rgb *= exposure / 0.6; // pre-exposed, outside of the tone mapping function\n\n\t\t\tgl_FragColor = vec4( ACESFilmicToneMapping( tex.rgb ), tex.a );\n\n\t\t}`\n\n};\n\nexport { ACESFilmicToneMappingShader };\n", "/**\n * Simple test shader\n */\n\nconst BasicShader = {\n\n\tname: 'BasicShader',\n\n\tuniforms: {},\n\n\tvertexShader: /* glsl */`\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 );\n\n\t\t}`\n\n};\n\nexport { BasicShader };\n", "/**\n * Bleach bypass shader [http://en.wikipedia.org/wiki/Bleach_bypass]\n * - based on Nvidia example\n * http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html#post_bleach_bypass\n */\n\nconst BleachBypassShader = {\n\n\tname: 'BleachBypassShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2D( tDiffuse, vUv );\n\n\t\t\tvec3 lumCoeff = vec3( 0.25, 0.65, 0.1 );\n\t\t\tfloat lum = dot( lumCoeff, base.rgb );\n\t\t\tvec3 blend = vec3( lum );\n\n\t\t\tfloat L = min( 1.0, max( 0.0, 10.0 * ( lum - 0.45 ) ) );\n\n\t\t\tvec3 result1 = 2.0 * base.rgb * blend;\n\t\t\tvec3 result2 = 1.0 - 2.0 * ( 1.0 - blend ) * ( 1.0 - base.rgb );\n\n\t\t\tvec3 newColor = mix( result1, result2, L );\n\n\t\t\tfloat A2 = opacity * base.a;\n\t\t\tvec3 mixRGB = A2 * newColor.rgb;\n\t\t\tmixRGB += ( ( 1.0 - A2 ) * base.rgb );\n\n\t\t\tgl_FragColor = vec4( mixRGB, base.a );\n\n\t\t}`\n\n};\n\nexport { BleachBypassShader };\n", "/**\n * Blend two textures\n */\n\nconst BlendShader = {\n\n\tname: 'BlendShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse1': { value: null },\n\t\t'tDiffuse2': { value: null },\n\t\t'mixRatio': { value: 0.5 },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\t\tuniform float mixRatio;\n\n\t\tuniform sampler2D tDiffuse1;\n\t\tuniform sampler2D tDiffuse2;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel1 = texture2D( tDiffuse1, vUv );\n\t\t\tvec4 texel2 = texture2D( tDiffuse2, vUv );\n\t\t\tgl_FragColor = opacity * mix( texel1, texel2, mixRatio );\n\n\t\t}`\n\n};\n\nexport { BlendShader };\n", "/**\n * Brightness and contrast adjustment\n * https://github.com/evanw/glfx.js\n * brightness: -1 to 1 (-1 is solid black, 0 is no change, and 1 is solid white)\n * contrast: -1 to 1 (-1 is solid gray, 0 is no change, and 1 is maximum contrast)\n */\n\nconst BrightnessContrastShader = {\n\n\tname: 'BrightnessContrastShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'brightness': { value: 0 },\n\t\t'contrast': { value: 0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float brightness;\n\t\tuniform float contrast;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\tgl_FragColor.rgb += brightness;\n\n\t\t\tif (contrast > 0.0) {\n\t\t\t\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) / (1.0 - contrast) + 0.5;\n\t\t\t} else {\n\t\t\t\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5;\n\t\t\t}\n\n\t\t}`\n\n};\n\nexport { BrightnessContrastShader };\n", "import {\n\tVector3\n} from 'three';\n\n/**\n * Color correction\n */\n\nconst ColorCorrectionShader = {\n\n\tname: 'ColorCorrectionShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'powRGB': { value: new Vector3( 2, 2, 2 ) },\n\t\t'mulRGB': { value: new Vector3( 1, 1, 1 ) },\n\t\t'addRGB': { value: new Vector3( 0, 0, 0 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec3 powRGB;\n\t\tuniform vec3 mulRGB;\n\t\tuniform vec3 addRGB;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor.rgb = mulRGB * pow( ( gl_FragColor.rgb + addRGB ), powRGB );\n\n\t\t}`\n\n};\n\nexport { ColorCorrectionShader };\n", "import {\n\tColor\n} from 'three';\n\n/**\n * Colorify shader\n */\n\nconst ColorifyShader = {\n\n\tname: 'ColorifyShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'color': { value: new Color( 0xffffff ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat v = luminance( texel.xyz );\n\n\t\t\tgl_FragColor = vec4( v * color, texel.w );\n\n\t\t}`\n\n};\n\nexport { ColorifyShader };\n", "/**\n * Depth-of-field shader using mipmaps\n * - from Matt Handley @applmak\n * - requires power-of-2 sized render target with enabled mipmaps\n */\n\nconst DOFMipMapShader = {\n\n\tname: 'DOFMipMapShader',\n\n\tuniforms: {\n\n\t\t'tColor': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'focus': { value: 1.0 },\n\t\t'maxblur': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float focus;\n\t\tuniform float maxblur;\n\n\t\tuniform sampler2D tColor;\n\t\tuniform sampler2D tDepth;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 depth = texture2D( tDepth, vUv );\n\n\t\t\tfloat factor = depth.x - focus;\n\n\t\t\tvec4 col = texture2D( tColor, vUv, 2.0 * maxblur * abs( focus - depth.x ) );\n\n\t\t\tgl_FragColor = col;\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\nexport { DOFMipMapShader };\n", "/**\n * Exposure shader\n */\n\nconst ExposureShader = {\n\n\tname: 'ExposureShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'exposure': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float exposure;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor.rgb *= exposure;\n\n\t\t}`\n\n};\n\nexport { ExposureShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * NVIDIA FXAA by Timothy Lottes\n * https://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf\n * - WebGL port by @supereggbert\n * http://www.glge.org/demos/fxaa/\n * Further improved by Daniel Sturk\n */\n\nconst FXAAShader = {\n\n\tname: 'FXAAShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tprecision highp float;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\n\t\t// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)\n\n\t\t//----------------------------------------------------------------------------------\n\t\t// File: es3-kepler\\FXAA\\assets\\shaders/FXAA_DefaultES.frag\n\t\t// SDK Version: v3.00\n\t\t// Email: gameworks@nvidia.com\n\t\t// Site: http://developer.nvidia.com/\n\t\t//\n\t\t// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\n\t\t//\n\t\t// Redistribution and use in source and binary forms, with or without\n\t\t// modification, are permitted provided that the following conditions\n\t\t// are met:\n\t\t// * Redistributions of source code must retain the above copyright\n\t\t// notice, this list of conditions and the following disclaimer.\n\t\t// * Redistributions in binary form must reproduce the above copyright\n\t\t// notice, this list of conditions and the following disclaimer in the\n\t\t// documentation and/or other materials provided with the distribution.\n\t\t// * Neither the name of NVIDIA CORPORATION nor the names of its\n\t\t// contributors may be used to endorse or promote products derived\n\t\t// from this software without specific prior written permission.\n\t\t//\n\t\t// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY\n\t\t// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t\t// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\t\t// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n\t\t// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\t\t// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\t\t// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\t\t// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\t\t// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t\t// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t\t// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t\t//\n\t\t//----------------------------------------------------------------------------------\n\n\t\t#ifndef FXAA_DISCARD\n\t\t\t//\n\t\t\t// Only valid for PC OpenGL currently.\n\t\t\t// Probably will not work when FXAA_GREEN_AS_LUMA = 1.\n\t\t\t//\n\t\t\t// 1 = Use discard on pixels which don't need AA.\n\t\t\t// For APIs which enable concurrent TEX+ROP from same surface.\n\t\t\t// 0 = Return unchanged color on pixels which don't need AA.\n\t\t\t//\n\t\t\t#define FXAA_DISCARD 0\n\t\t#endif\n\n\t\t/*--------------------------------------------------------------------------*/\n\t\t#define FxaaTexTop(t, p) texture2D(t, p, -100.0)\n\t\t#define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), -100.0)\n\t\t/*--------------------------------------------------------------------------*/\n\n\t\t#define NUM_SAMPLES 5\n\n\t\t// assumes colors have premultipliedAlpha, so that the calculated color contrast is scaled by alpha\n\t\tfloat contrast( vec4 a, vec4 b ) {\n\t\t\tvec4 diff = abs( a - b );\n\t\t\treturn max( max( max( diff.r, diff.g ), diff.b ), diff.a );\n\t\t}\n\n\t\t/*============================================================================\n\n\t\t\t\t\t\t\t\t\tFXAA3 QUALITY - PC\n\n\t\t============================================================================*/\n\n\t\t/*--------------------------------------------------------------------------*/\n\t\tvec4 FxaaPixelShader(\n\t\t\tvec2 posM,\n\t\t\tsampler2D tex,\n\t\t\tvec2 fxaaQualityRcpFrame,\n\t\t\tfloat fxaaQualityEdgeThreshold,\n\t\t\tfloat fxaaQualityinvEdgeThreshold\n\t\t) {\n\t\t\tvec4 rgbaM = FxaaTexTop(tex, posM);\n\t\t\tvec4 rgbaS = FxaaTexOff(tex, posM, vec2( 0.0, 1.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaE = FxaaTexOff(tex, posM, vec2( 1.0, 0.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaN = FxaaTexOff(tex, posM, vec2( 0.0,-1.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaW = FxaaTexOff(tex, posM, vec2(-1.0, 0.0), fxaaQualityRcpFrame.xy);\n\t\t\t// . S .\n\t\t\t// W M E\n\t\t\t// . N .\n\n\t\t\tbool earlyExit = max( max( max(\n\t\t\t\t\tcontrast( rgbaM, rgbaN ),\n\t\t\t\t\tcontrast( rgbaM, rgbaS ) ),\n\t\t\t\t\tcontrast( rgbaM, rgbaE ) ),\n\t\t\t\t\tcontrast( rgbaM, rgbaW ) )\n\t\t\t\t\t< fxaaQualityEdgeThreshold;\n\t\t\t// . 0 .\n\t\t\t// 0 0 0\n\t\t\t// . 0 .\n\n\t\t\t#if (FXAA_DISCARD == 1)\n\t\t\t\tif(earlyExit) FxaaDiscard;\n\t\t\t#else\n\t\t\t\tif(earlyExit) return rgbaM;\n\t\t\t#endif\n\n\t\t\tfloat contrastN = contrast( rgbaM, rgbaN );\n\t\t\tfloat contrastS = contrast( rgbaM, rgbaS );\n\t\t\tfloat contrastE = contrast( rgbaM, rgbaE );\n\t\t\tfloat contrastW = contrast( rgbaM, rgbaW );\n\n\t\t\tfloat relativeVContrast = ( contrastN + contrastS ) - ( contrastE + contrastW );\n\t\t\trelativeVContrast *= fxaaQualityinvEdgeThreshold;\n\n\t\t\tbool horzSpan = relativeVContrast > 0.;\n\t\t\t// . 1 .\n\t\t\t// 0 0 0\n\t\t\t// . 1 .\n\n\t\t\t// 45 deg edge detection and corners of objects, aka V/H contrast is too similar\n\t\t\tif( abs( relativeVContrast ) < .3 ) {\n\t\t\t\t// locate the edge\n\t\t\t\tvec2 dirToEdge;\n\t\t\t\tdirToEdge.x = contrastE > contrastW ? 1. : -1.;\n\t\t\t\tdirToEdge.y = contrastS > contrastN ? 1. : -1.;\n\t\t\t\t// . 2 . . 1 .\n\t\t\t\t// 1 0 2 ~= 0 0 1\n\t\t\t\t// . 1 . . 0 .\n\n\t\t\t\t// tap 2 pixels and see which ones are \"outside\" the edge, to\n\t\t\t\t// determine if the edge is vertical or horizontal\n\n\t\t\t\tvec4 rgbaAlongH = FxaaTexOff(tex, posM, vec2( dirToEdge.x, -dirToEdge.y ), fxaaQualityRcpFrame.xy);\n\t\t\t\tfloat matchAlongH = contrast( rgbaM, rgbaAlongH );\n\t\t\t\t// . 1 .\n\t\t\t\t// 0 0 1\n\t\t\t\t// . 0 H\n\n\t\t\t\tvec4 rgbaAlongV = FxaaTexOff(tex, posM, vec2( -dirToEdge.x, dirToEdge.y ), fxaaQualityRcpFrame.xy);\n\t\t\t\tfloat matchAlongV = contrast( rgbaM, rgbaAlongV );\n\t\t\t\t// V 1 .\n\t\t\t\t// 0 0 1\n\t\t\t\t// . 0 .\n\n\t\t\t\trelativeVContrast = matchAlongV - matchAlongH;\n\t\t\t\trelativeVContrast *= fxaaQualityinvEdgeThreshold;\n\n\t\t\t\tif( abs( relativeVContrast ) < .3 ) { // 45 deg edge\n\t\t\t\t\t// 1 1 .\n\t\t\t\t\t// 0 0 1\n\t\t\t\t\t// . 0 1\n\n\t\t\t\t\t// do a simple blur\n\t\t\t\t\treturn mix(\n\t\t\t\t\t\trgbaM,\n\t\t\t\t\t\t(rgbaN + rgbaS + rgbaE + rgbaW) * .25,\n\t\t\t\t\t\t.4\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\thorzSpan = relativeVContrast > 0.;\n\t\t\t}\n\n\t\t\tif(!horzSpan) rgbaN = rgbaW;\n\t\t\tif(!horzSpan) rgbaS = rgbaE;\n\t\t\t// . 0 . 1\n\t\t\t// 1 0 1 -> 0\n\t\t\t// . 0 . 1\n\n\t\t\tbool pairN = contrast( rgbaM, rgbaN ) > contrast( rgbaM, rgbaS );\n\t\t\tif(!pairN) rgbaN = rgbaS;\n\n\t\t\tvec2 offNP;\n\t\t\toffNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n\t\t\toffNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n\n\t\t\tbool doneN = false;\n\t\t\tbool doneP = false;\n\n\t\t\tfloat nDist = 0.;\n\t\t\tfloat pDist = 0.;\n\n\t\t\tvec2 posN = posM;\n\t\t\tvec2 posP = posM;\n\n\t\t\tint iterationsUsedN = 0;\n\t\t\tint iterationsUsedP = 0;\n\t\t\tfor( int i = 0; i < NUM_SAMPLES; i++ ) {\n\n\t\t\t\tfloat increment = float(i + 1);\n\n\t\t\t\tif(!doneN) {\n\t\t\t\t\tnDist += increment;\n\t\t\t\t\tposN = posM + offNP * nDist;\n\t\t\t\t\tvec4 rgbaEndN = FxaaTexTop(tex, posN.xy);\n\t\t\t\t\tdoneN = contrast( rgbaEndN, rgbaM ) > contrast( rgbaEndN, rgbaN );\n\t\t\t\t\titerationsUsedN = i;\n\t\t\t\t}\n\n\t\t\t\tif(!doneP) {\n\t\t\t\t\tpDist += increment;\n\t\t\t\t\tposP = posM - offNP * pDist;\n\t\t\t\t\tvec4 rgbaEndP = FxaaTexTop(tex, posP.xy);\n\t\t\t\t\tdoneP = contrast( rgbaEndP, rgbaM ) > contrast( rgbaEndP, rgbaN );\n\t\t\t\t\titerationsUsedP = i;\n\t\t\t\t}\n\n\t\t\t\tif(doneN || doneP) break;\n\t\t\t}\n\n\n\t\t\tif ( !doneP && !doneN ) return rgbaM; // failed to find end of edge\n\n\t\t\tfloat dist = min(\n\t\t\t\tdoneN ? float( iterationsUsedN ) / float( NUM_SAMPLES - 1 ) : 1.,\n\t\t\t\tdoneP ? float( iterationsUsedP ) / float( NUM_SAMPLES - 1 ) : 1.\n\t\t\t);\n\n\t\t\t// hacky way of reduces blurriness of mostly diagonal edges\n\t\t\t// but reduces AA quality\n\t\t\tdist = pow(dist, .5);\n\n\t\t\tdist = 1. - dist;\n\n\t\t\treturn mix(\n\t\t\t\trgbaM,\n\t\t\t\trgbaN,\n\t\t\t\tdist * .5\n\t\t\t);\n\t\t}\n\n\t\tvoid main() {\n\t\t\tconst float edgeDetectionQuality = .2;\n\t\t\tconst float invEdgeDetectionQuality = 1. / edgeDetectionQuality;\n\n\t\t\tgl_FragColor = FxaaPixelShader(\n\t\t\t\tvUv,\n\t\t\t\ttDiffuse,\n\t\t\t\tresolution,\n\t\t\t\tedgeDetectionQuality, // [0,1] contrast needed, otherwise early discard\n\t\t\t\tinvEdgeDetectionQuality\n\t\t\t);\n\n\t\t}\n\t`\n\n};\n\nexport { FXAAShader };\n", "/**\n * Focus shader\n * based on PaintEffect postprocess from ro.me\n * http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js\n */\n\nconst FocusShader = {\n\n\tname: 'FocusShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'screenWidth': { value: 1024 },\n\t\t'screenHeight': { value: 1024 },\n\t\t'sampleDistance': { value: 0.94 },\n\t\t'waveFactor': { value: 0.00125 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float screenWidth;\n\t\tuniform float screenHeight;\n\t\tuniform float sampleDistance;\n\t\tuniform float waveFactor;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 color, org, tmp, add;\n\t\t\tfloat sample_dist, f;\n\t\t\tvec2 vin;\n\t\t\tvec2 uv = vUv;\n\n\t\t\tadd = color = org = texture2D( tDiffuse, uv );\n\n\t\t\tvin = ( uv - vec2( 0.5 ) ) * vec2( 1.4 );\n\t\t\tsample_dist = dot( vin, vin ) * 2.0;\n\n\t\t\tf = ( waveFactor * 100.0 + sample_dist ) * sampleDistance * 4.0;\n\n\t\t\tvec2 sampleSize = vec2( 1.0 / screenWidth, 1.0 / screenHeight ) * vec2( f );\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.111964, 0.993712 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.846724, 0.532032 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.943883, -0.330279 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.330279, -0.943883 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.532032, -0.846724 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.993712, -0.111964 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.707107, 0.707107 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tcolor = color * vec4( 2.0 ) - ( add / vec4( 8.0 ) );\n\t\t\tcolor = color + ( add / vec4( 8.0 ) - color ) * ( vec4( 1.0 ) - vec4( sample_dist * 0.5 ) );\n\n\t\t\tgl_FragColor = vec4( color.rgb * color.rgb * vec3( 0.95 ) + color.rgb, 1.0 );\n\n\t\t}`\n\n};\n\nexport { FocusShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Edge Detection Shader using Frei-Chen filter\n * Based on http://rastergrid.com/blog/2011/01/frei-chen-edge-detector\n *\n * aspect: vec2 of (1/width, 1/height)\n */\n\nconst FreiChenShader = {\n\n\tname: 'FreiChenShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'aspect': { value: new Vector2( 512, 512 ) }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tuniform vec2 aspect;\n\n\t\tvec2 texel = vec2( 1.0 / aspect.x, 1.0 / aspect.y );\n\n\n\t\tmat3 G[9];\n\n\t\t// hard coded matrix values!!!! as suggested in https://github.com/neilmendoza/ofxPostProcessing/blob/master/src/EdgePass.cpp#L45\n\n\t\tconst mat3 g0 = mat3( 0.3535533845424652, 0, -0.3535533845424652, 0.5, 0, -0.5, 0.3535533845424652, 0, -0.3535533845424652 );\n\t\tconst mat3 g1 = mat3( 0.3535533845424652, 0.5, 0.3535533845424652, 0, 0, 0, -0.3535533845424652, -0.5, -0.3535533845424652 );\n\t\tconst mat3 g2 = mat3( 0, 0.3535533845424652, -0.5, -0.3535533845424652, 0, 0.3535533845424652, 0.5, -0.3535533845424652, 0 );\n\t\tconst mat3 g3 = mat3( 0.5, -0.3535533845424652, 0, -0.3535533845424652, 0, 0.3535533845424652, 0, 0.3535533845424652, -0.5 );\n\t\tconst mat3 g4 = mat3( 0, -0.5, 0, 0.5, 0, 0.5, 0, -0.5, 0 );\n\t\tconst mat3 g5 = mat3( -0.5, 0, 0.5, 0, 0, 0, 0.5, 0, -0.5 );\n\t\tconst mat3 g6 = mat3( 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.6666666865348816, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204 );\n\t\tconst mat3 g7 = mat3( -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, 0.6666666865348816, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408 );\n\t\tconst mat3 g8 = mat3( 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408 );\n\n\t\tvoid main(void)\n\t\t{\n\n\t\t\tG[0] = g0,\n\t\t\tG[1] = g1,\n\t\t\tG[2] = g2,\n\t\t\tG[3] = g3,\n\t\t\tG[4] = g4,\n\t\t\tG[5] = g5,\n\t\t\tG[6] = g6,\n\t\t\tG[7] = g7,\n\t\t\tG[8] = g8;\n\n\t\t\tmat3 I;\n\t\t\tfloat cnv[9];\n\t\t\tvec3 sample;\n\n\t\t/* fetch the 3x3 neighbourhood and use the RGB vector's length as intensity value */\n\t\t\tfor (float i=0.0; i<3.0; i++) {\n\t\t\t\tfor (float j=0.0; j<3.0; j++) {\n\t\t\t\t\tsample = texture2D(tDiffuse, vUv + texel * vec2(i-1.0,j-1.0) ).rgb;\n\t\t\t\t\tI[int(i)][int(j)] = length(sample);\n\t\t\t\t}\n\t\t\t}\n\n\t\t/* calculate the convolution values for all the masks */\n\t\t\tfor (int i=0; i<9; i++) {\n\t\t\t\tfloat dp3 = dot(G[i][0], I[0]) + dot(G[i][1], I[1]) + dot(G[i][2], I[2]);\n\t\t\t\tcnv[i] = dp3 * dp3;\n\t\t\t}\n\n\t\t\tfloat M = (cnv[0] + cnv[1]) + (cnv[2] + cnv[3]);\n\t\t\tfloat S = (cnv[4] + cnv[5]) + (cnv[6] + cnv[7]) + (cnv[8] + M);\n\n\t\t\tgl_FragColor = vec4(vec3(sqrt(M/S)), 1.0);\n\t\t}`\n\n};\n\nexport { FreiChenShader };\n", "/**\n * Gamma Correction Shader\n * http://en.wikipedia.org/wiki/gamma_correction\n */\n\nconst GammaCorrectionShader = {\n\n\tname: 'GammaCorrectionShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 tex = texture2D( tDiffuse, vUv );\n\n\t\t\tgl_FragColor = sRGBTransferOETF( tex );\n\n\t\t}`\n\n};\n\nexport { GammaCorrectionShader };\n", "import {\n\tColor,\n\tVector3\n} from 'three';\n\n/**\n * God-rays (crepuscular rays)\n *\n * Similar implementation to the one used by Crytek for CryEngine 2 [Sousa2008].\n * Blurs a mask generated from the depth map along radial lines emanating from the light\n * source. The blur repeatedly applies a blur filter of increasing support but constant\n * sample count to produce a blur filter with large support.\n *\n * My implementation performs 3 passes, similar to the implementation from Sousa. I found\n * just 6 samples per pass produced acceptible results. The blur is applied three times,\n * with decreasing filter support. The result is equivalent to a single pass with\n * 6*6*6 = 216 samples.\n *\n * References:\n *\n * Sousa2008 - Crysis Next Gen Effects, GDC2008, http://www.crytek.com/sites/default/files/GDC08_SousaT_CrysisEffects.ppt\n */\n\nconst GodRaysDepthMaskShader = {\n\n\tname: 'GodRaysDepthMaskShader',\n\n\tuniforms: {\n\n\t\ttInput: {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t vUv = uv;\n\t\t gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t }`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tInput;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = vec4( 1.0 ) - texture2D( tInput, vUv );\n\n\t\t}`\n\n};\n\n\n/**\n * The god-ray generation shader.\n *\n * First pass:\n *\n * The depth map is blurred along radial lines towards the \"sun\". The\n * output is written to a temporary render target (I used a 1/4 sized\n * target).\n *\n * Pass two & three:\n *\n * The results of the previous pass are re-blurred, each time with a\n * decreased distance between samples.\n */\n\nconst GodRaysGenerateShader = {\n\n\tname: 'GodRaysGenerateShader',\n\n\tuniforms: {\n\n\t\ttInput: {\n\t\t\tvalue: null\n\t\t},\n\t\tfStepSize: {\n\t\t\tvalue: 1.0\n\t\t},\n\t\tvSunPositionScreenSpace: {\n\t\t\tvalue: new Vector3()\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t vUv = uv;\n\t\t gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t }`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define TAPS_PER_PASS 6.0\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tInput;\n\n\t\tuniform vec3 vSunPositionScreenSpace;\n\t\tuniform float fStepSize; // filter step size\n\n\t\tvoid main() {\n\n\t\t// delta from current pixel to \"sun\" position\n\n\t\t\tvec2 delta = vSunPositionScreenSpace.xy - vUv;\n\t\t\tfloat dist = length( delta );\n\n\t\t// Step vector (uv space)\n\n\t\t\tvec2 stepv = fStepSize * delta / dist;\n\n\t\t// Number of iterations between pixel and sun\n\n\t\t\tfloat iters = dist/fStepSize;\n\n\t\t\tvec2 uv = vUv.xy;\n\t\t\tfloat col = 0.0;\n\n\t\t// This breaks ANGLE in Chrome 22\n\t\t//\t- see http://code.google.com/p/chromium/issues/detail?id=153105\n\n\t\t/*\n\t\t// Unrolling didnt do much on my hardware (ATI Mobility Radeon 3450),\n\t\t// so i've just left the loop\n\n\t\t\"for ( float i = 0.0; i < TAPS_PER_PASS; i += 1.0 ) {\",\n\n\t\t// Accumulate samples, making sure we dont walk past the light source.\n\n\t\t// The check for uv.y < 1 would not be necessary with \"border\" UV wrap\n\t\t// mode, with a black border color. I don't think this is currently\n\t\t// exposed by three.js. As a result there might be artifacts when the\n\t\t// sun is to the left, right or bottom of screen as these cases are\n\t\t// not specifically handled.\n\n\t\t\"\tcol += ( i <= iters && uv.y < 1.0 ? texture2D( tInput, uv ).r : 0.0 );\",\n\t\t\"\tuv += stepv;\",\n\n\t\t\"}\",\n\t\t*/\n\n\t\t// Unrolling loop manually makes it work in ANGLE\n\n\t\t\tfloat f = min( 1.0, max( vSunPositionScreenSpace.z / 1000.0, 0.0 ) ); // used to fade out godrays\n\n\t\t\tif ( 0.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 1.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 2.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 3.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 4.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 5.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t// Should technically be dividing by 'iters but 'TAPS_PER_PASS' smooths out\n\t\t// objectionable artifacts, in particular near the sun position. The side\n\t\t// effect is that the result is darker than it should be around the sun, as\n\t\t// TAPS_PER_PASS is greater than the number of samples actually accumulated.\n\t\t// When the result is inverted (in the shader 'godrays_combine this produces\n\t\t// a slight bright spot at the position of the sun, even when it is occluded.\n\n\t\t\tgl_FragColor = vec4( col/TAPS_PER_PASS );\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\n/**\n * Additively applies god rays from texture tGodRays to a background (tColors).\n * fGodRayIntensity attenuates the god rays.\n */\n\nconst GodRaysCombineShader = {\n\n\tname: 'GodRaysCombineShader',\n\n\tuniforms: {\n\n\t\ttColors: {\n\t\t\tvalue: null\n\t\t},\n\n\t\ttGodRays: {\n\t\t\tvalue: null\n\t\t},\n\n\t\tfGodRayIntensity: {\n\t\t\tvalue: 0.69\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tColors;\n\t\tuniform sampler2D tGodRays;\n\n\t\tuniform float fGodRayIntensity;\n\n\t\tvoid main() {\n\n\t\t// Since THREE.MeshDepthMaterial renders foreground objects white and background\n\t\t// objects black, the god-rays will be white streaks. Therefore value is inverted\n\t\t// before being combined with tColors\n\n\t\t\tgl_FragColor = texture2D( tColors, vUv ) + fGodRayIntensity * vec4( 1.0 - texture2D( tGodRays, vUv ).r );\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\n\n/**\n * A dodgy sun/sky shader. Makes a bright spot at the sun location. Would be\n * cheaper/faster/simpler to implement this as a simple sun sprite.\n */\n\nconst GodRaysFakeSunShader = {\n\n\tname: 'GodRaysFakeSunShader',\n\n\tuniforms: {\n\n\t\tvSunPositionScreenSpace: {\n\t\t\tvalue: new Vector3()\n\t\t},\n\n\t\tfAspect: {\n\t\t\tvalue: 1.0\n\t\t},\n\n\t\tsunColor: {\n\t\t\tvalue: new Color( 0xffee00 )\n\t\t},\n\n\t\tbgColor: {\n\t\t\tvalue: new Color( 0x000000 )\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform vec3 vSunPositionScreenSpace;\n\t\tuniform float fAspect;\n\n\t\tuniform vec3 sunColor;\n\t\tuniform vec3 bgColor;\n\n\t\tvoid main() {\n\n\t\t\tvec2 diff = vUv - vSunPositionScreenSpace.xy;\n\n\t\t// Correct for aspect ratio\n\n\t\t\tdiff.x *= fAspect;\n\n\t\t\tfloat prop = clamp( length( diff ) / 0.5, 0.0, 1.0 );\n\t\t\tprop = 0.35 * pow( 1.0 - prop, 3.0 );\n\n\t\t\tgl_FragColor.xyz = ( vSunPositionScreenSpace.z > 0.0 ) ? mix( sunColor, bgColor, 1.0 - prop ) : bgColor;\n\t\t\tgl_FragColor.w = 1.0;\n\n\t\t}`\n\n};\n\nexport { GodRaysDepthMaskShader, GodRaysGenerateShader, GodRaysCombineShader, GodRaysFakeSunShader };\n", "/**\n * Two pass Gaussian blur filter (horizontal and vertical blur shaders)\n * - see http://www.cake23.de/traveling-wavefronts-lit-up.html\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n */\n\nconst HorizontalBlurShader = {\n\n\tname: 'HorizontalBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'h': { value: 1.0 / 512.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float h;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { HorizontalBlurShader };\n", "/**\n * Simple fake tilt-shift effect, modulating two pass Gaussian blur (see above) by vertical position\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n * - \"r\" parameter control where \"focused\" horizontal line lies\n */\n\nconst HorizontalTiltShiftShader = {\n\n\tname: 'HorizontalTiltShiftShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'h': { value: 1.0 / 512.0 },\n\t\t'r': { value: 0.35 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float h;\n\t\tuniform float r;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tfloat hh = h * abs( r - vUv.y );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * hh, vUv.y ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * hh, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * hh, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * hh, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * hh, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * hh, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * hh, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * hh, vUv.y ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { HorizontalTiltShiftShader };\n", "/**\n * Hue and saturation adjustment\n * https://github.com/evanw/glfx.js\n * hue: -1 to 1 (-1 is 180 degrees in the negative direction, 0 is no change, etc.\n * saturation: -1 to 1 (-1 is solid gray, 0 is no change, and 1 is maximum contrast)\n */\n\nconst HueSaturationShader = {\n\n\tname: 'HueSaturationShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'hue': { value: 0 },\n\t\t'saturation': { value: 0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float hue;\n\t\tuniform float saturation;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t// hue\n\t\t\tfloat angle = hue * 3.14159265;\n\t\t\tfloat s = sin(angle), c = cos(angle);\n\t\t\tvec3 weights = (vec3(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + 1.0) / 3.0;\n\t\t\tfloat len = length(gl_FragColor.rgb);\n\t\t\tgl_FragColor.rgb = vec3(\n\t\t\t\tdot(gl_FragColor.rgb, weights.xyz),\n\t\t\t\tdot(gl_FragColor.rgb, weights.zxy),\n\t\t\t\tdot(gl_FragColor.rgb, weights.yzx)\n\t\t\t);\n\n\t\t\t// saturation\n\t\t\tfloat average = (gl_FragColor.r + gl_FragColor.g + gl_FragColor.b) / 3.0;\n\t\t\tif (saturation > 0.0) {\n\t\t\t\tgl_FragColor.rgb += (average - gl_FragColor.rgb) * (1.0 - 1.0 / (1.001 - saturation));\n\t\t\t} else {\n\t\t\t\tgl_FragColor.rgb += (average - gl_FragColor.rgb) * (-saturation);\n\t\t\t}\n\n\t\t}`\n\n};\n\nexport { HueSaturationShader };\n", "/**\n * Kaleidoscope Shader\n * Radial reflection around center point\n * Ported from: http://pixelshaders.com/editor/\n * by Toby Schachman / http://tobyschachman.com/\n *\n * sides: number of reflections\n * angle: initial angle in radians\n */\n\nconst KaleidoShader = {\n\n\tname: 'KaleidoShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'sides': { value: 6.0 },\n\t\t'angle': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float sides;\n\t\tuniform float angle;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 p = vUv - 0.5;\n\t\t\tfloat r = length(p);\n\t\t\tfloat a = atan(p.y, p.x) + angle;\n\t\t\tfloat tau = 2. * 3.1416 ;\n\t\t\ta = mod(a, tau/sides);\n\t\t\ta = abs(a - tau/sides/2.) ;\n\t\t\tp = r * vec2(cos(a), sin(a));\n\t\t\tvec4 color = texture2D(tDiffuse, p + 0.5);\n\t\t\tgl_FragColor = color;\n\n\t\t}`\n\n};\n\nexport { KaleidoShader };\n", "/**\n * Luminosity\n * http://en.wikipedia.org/wiki/Luminosity\n */\n\nconst LuminosityShader = {\n\n\tname: 'LuminosityShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat l = luminance( texel.rgb );\n\n\t\t\tgl_FragColor = vec4( l, l, l, texel.w );\n\n\t\t}`\n\n};\n\nexport { LuminosityShader };\n", "/**\n * Mirror Shader\n * Copies half the input to the other half\n *\n * side: side of input to mirror (0 = left, 1 = right, 2 = top, 3 = bottom)\n */\n\nconst MirrorShader = {\n\n\tname: 'MirrorShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'side': { value: 1 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform int side;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 p = vUv;\n\t\t\tif (side == 0){\n\t\t\t\tif (p.x > 0.5) p.x = 1.0 - p.x;\n\t\t\t}else if (side == 1){\n\t\t\t\tif (p.x < 0.5) p.x = 1.0 - p.x;\n\t\t\t}else if (side == 2){\n\t\t\t\tif (p.y < 0.5) p.y = 1.0 - p.y;\n\t\t\t}else if (side == 3){\n\t\t\t\tif (p.y > 0.5) p.y = 1.0 - p.y;\n\t\t\t}\n\t\t\tvec4 color = texture2D(tDiffuse, p);\n\t\t\tgl_FragColor = color;\n\n\t\t}`\n\n};\n\nexport { MirrorShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Normal map shader\n * - compute normals from heightmap\n */\n\nconst NormalMapShader = {\n\n\tname: 'NormalMapShader',\n\n\tuniforms: {\n\n\t\t'heightMap': { value: null },\n\t\t'resolution': { value: new Vector2( 512, 512 ) },\n\t\t'scale': { value: new Vector2( 1, 1 ) },\n\t\t'height': { value: 0.05 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float height;\n\t\tuniform vec2 resolution;\n\t\tuniform sampler2D heightMap;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tfloat val = texture2D( heightMap, vUv ).x;\n\n\t\t\tfloat valU = texture2D( heightMap, vUv + vec2( 1.0 / resolution.x, 0.0 ) ).x;\n\t\t\tfloat valV = texture2D( heightMap, vUv + vec2( 0.0, 1.0 / resolution.y ) ).x;\n\n\t\t\tgl_FragColor = vec4( ( 0.5 * normalize( vec3( val - valU, val - valV, height ) ) + 0.5 ), 1.0 );\n\n\t\t}`\n\n};\n\nexport { NormalMapShader };\n", "/**\n * RGB Shift Shader\n * Shifts red and blue channels from center in opposite directions\n * Ported from https://web.archive.org/web/20090820185047/http://kriss.cx/tom/2009/05/rgb-shift/\n * by Tom Butterworth / https://web.archive.org/web/20090810054752/http://kriss.cx/tom/\n *\n * amount: shift distance (1 is width of input)\n * angle: shift angle in radians\n */\n\nconst RGBShiftShader = {\n\n\tname: 'RGBShiftShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'amount': { value: 0.005 },\n\t\t'angle': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float amount;\n\t\tuniform float angle;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 offset = amount * vec2( cos(angle), sin(angle));\n\t\t\tvec4 cr = texture2D(tDiffuse, vUv + offset);\n\t\t\tvec4 cga = texture2D(tDiffuse, vUv);\n\t\t\tvec4 cb = texture2D(tDiffuse, vUv - offset);\n\t\t\tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\n\n\t\t}`\n\n};\n\nexport { RGBShiftShader };\n", "/**\n * Sepia tone shader\n * based on glfx.js sepia shader\n * https://github.com/evanw/glfx.js\n */\n\nconst SepiaShader = {\n\n\tname: 'SepiaShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'amount': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float amount;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 color = texture2D( tDiffuse, vUv );\n\t\t\tvec3 c = color.rgb;\n\n\t\t\tcolor.r = dot( c, vec3( 1.0 - 0.607 * amount, 0.769 * amount, 0.189 * amount ) );\n\t\t\tcolor.g = dot( c, vec3( 0.349 * amount, 1.0 - 0.314 * amount, 0.168 * amount ) );\n\t\t\tcolor.b = dot( c, vec3( 0.272 * amount, 0.534 * amount, 1.0 - 0.869 * amount ) );\n\n\t\t\tgl_FragColor = vec4( min( vec3( 1.0 ), color.rgb ), color.a );\n\n\t\t}`\n\n};\n\nexport { SepiaShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Sobel Edge Detection (see https://youtu.be/uihBwtPIBxM)\n *\n * As mentioned in the video the Sobel operator expects a grayscale image as input.\n *\n */\n\nconst SobelOperatorShader = {\n\n\tname: 'SobelOperatorShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2() }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 resolution;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 texel = vec2( 1.0 / resolution.x, 1.0 / resolution.y );\n\n\t\t// kernel definition (in glsl matrices are filled in column-major order)\n\n\t\t\tconst mat3 Gx = mat3( -1, -2, -1, 0, 0, 0, 1, 2, 1 ); // x direction kernel\n\t\t\tconst mat3 Gy = mat3( -1, 0, 1, -2, 0, 2, -1, 0, 1 ); // y direction kernel\n\n\t\t// fetch the 3x3 neighbourhood of a fragment\n\n\t\t// first column\n\n\t\t\tfloat tx0y0 = texture2D( tDiffuse, vUv + texel * vec2( -1, -1 ) ).r;\n\t\t\tfloat tx0y1 = texture2D( tDiffuse, vUv + texel * vec2( -1, 0 ) ).r;\n\t\t\tfloat tx0y2 = texture2D( tDiffuse, vUv + texel * vec2( -1, 1 ) ).r;\n\n\t\t// second column\n\n\t\t\tfloat tx1y0 = texture2D( tDiffuse, vUv + texel * vec2( 0, -1 ) ).r;\n\t\t\tfloat tx1y1 = texture2D( tDiffuse, vUv + texel * vec2( 0, 0 ) ).r;\n\t\t\tfloat tx1y2 = texture2D( tDiffuse, vUv + texel * vec2( 0, 1 ) ).r;\n\n\t\t// third column\n\n\t\t\tfloat tx2y0 = texture2D( tDiffuse, vUv + texel * vec2( 1, -1 ) ).r;\n\t\t\tfloat tx2y1 = texture2D( tDiffuse, vUv + texel * vec2( 1, 0 ) ).r;\n\t\t\tfloat tx2y2 = texture2D( tDiffuse, vUv + texel * vec2( 1, 1 ) ).r;\n\n\t\t// gradient value in x direction\n\n\t\t\tfloat valueGx = Gx[0][0] * tx0y0 + Gx[1][0] * tx1y0 + Gx[2][0] * tx2y0 +\n\t\t\t\tGx[0][1] * tx0y1 + Gx[1][1] * tx1y1 + Gx[2][1] * tx2y1 +\n\t\t\t\tGx[0][2] * tx0y2 + Gx[1][2] * tx1y2 + Gx[2][2] * tx2y2;\n\n\t\t// gradient value in y direction\n\n\t\t\tfloat valueGy = Gy[0][0] * tx0y0 + Gy[1][0] * tx1y0 + Gy[2][0] * tx2y0 +\n\t\t\t\tGy[0][1] * tx0y1 + Gy[1][1] * tx1y1 + Gy[2][1] * tx2y1 +\n\t\t\t\tGy[0][2] * tx0y2 + Gy[1][2] * tx1y2 + Gy[2][2] * tx2y2;\n\n\t\t// magnitute of the total gradient\n\n\t\t\tfloat G = sqrt( ( valueGx * valueGx ) + ( valueGy * valueGy ) );\n\n\t\t\tgl_FragColor = vec4( vec3( G ), 1 );\n\n\t\t}`\n\n};\n\nexport { SobelOperatorShader };\n", "import {\n\tColor,\n\tShaderChunk,\n\tShaderLib,\n\tUniformsUtils\n} from 'three';\n\n/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\n\nfunction replaceAll( string, find, replace ) {\n\n\treturn string.split( find ).join( replace );\n\n}\n\nconst meshphong_frag_head = ShaderChunk[ 'meshphong_frag' ].slice( 0, ShaderChunk[ 'meshphong_frag' ].indexOf( 'void main() {' ) );\nconst meshphong_frag_body = ShaderChunk[ 'meshphong_frag' ].slice( ShaderChunk[ 'meshphong_frag' ].indexOf( 'void main() {' ) );\n\nconst SubsurfaceScatteringShader = {\n\n\tname: 'SubsurfaceScatteringShader',\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib[ 'phong' ].uniforms,\n\t\t{\n\t\t\t'thicknessMap': { value: null },\n\t\t\t'thicknessColor': { value: new Color( 0xffffff ) },\n\t\t\t'thicknessDistortion': { value: 0.1 },\n\t\t\t'thicknessAmbient': { value: 0.0 },\n\t\t\t'thicknessAttenuation': { value: 0.1 },\n\t\t\t'thicknessPower': { value: 2.0 },\n\t\t\t'thicknessScale': { value: 10.0 }\n\t\t}\n\n\t] ),\n\n\tvertexShader: [\n\t\t'#define USE_UV',\n\t\tShaderChunk[ 'meshphong_vert' ],\n\t].join( '\\n' ),\n\n\tfragmentShader: [\n\t\t'#define USE_UV',\n\t\t'#define SUBSURFACE',\n\n\t\tmeshphong_frag_head,\n\n\t\t'uniform sampler2D thicknessMap;',\n\t\t'uniform float thicknessPower;',\n\t\t'uniform float thicknessScale;',\n\t\t'uniform float thicknessDistortion;',\n\t\t'uniform float thicknessAmbient;',\n\t\t'uniform float thicknessAttenuation;',\n\t\t'uniform vec3 thicknessColor;',\n\n\t\t'void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, inout ReflectedLight reflectedLight) {',\n\t\t'\tvec3 thickness = thicknessColor * texture2D(thicknessMap, uv).r;',\n\t\t'\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * thicknessDistortion));',\n\t\t'\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -scatteringHalf)), thicknessPower) * thicknessScale;',\n\t\t'\tvec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;',\n\t\t'\treflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;',\n\t\t'}',\n\n\t\tmeshphong_frag_body.replace( '#include ',\n\n\t\t\treplaceAll(\n\t\t\t\tShaderChunk[ 'lights_fragment_begin' ],\n\t\t\t\t'RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );',\n\t\t\t\t[\n\t\t\t\t\t'RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );',\n\n\t\t\t\t\t'#if defined( SUBSURFACE ) && defined( USE_UV )',\n\t\t\t\t\t' RE_Direct_Scattering(directLight, vUv, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, reflectedLight);',\n\t\t\t\t\t'#endif',\n\t\t\t\t].join( '\\n' )\n\t\t\t),\n\n\t\t),\n\n\t].join( '\\n' ),\n\n};\n\nexport { SubsurfaceScatteringShader };\n", "/**\n * Technicolor Shader\n * Simulates the look of the two-strip technicolor process popular in early 20th century films.\n * More historical info here: http://www.widescreenmuseum.com/oldcolor/technicolor1.htm\n * Demo here: http://charliehoey.com/technicolor_shader/shader_test.html\n */\n\nconst TechnicolorShader = {\n\n\tname: 'TechnicolorShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 tex = texture2D( tDiffuse, vec2( vUv.x, vUv.y ) );\n\t\t\tvec4 newTex = vec4(tex.r, (tex.g + tex.b) * .5, (tex.g + tex.b) * .5, 1.0);\n\n\t\t\tgl_FragColor = newTex;\n\n\t\t}`\n\n};\n\nexport { TechnicolorShader };\n", "import {\n\tColor,\n\tVector3\n} from 'three';\n\n/**\n * Currently contains:\n *\n *\ttoon1\n *\ttoon2\n *\thatching\n *\tdotted\n */\n\nconst ToonShader1 = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos': { value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xffffff ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\t\tvarying vec3 vRefract;\n\n\t\tvoid main() {\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvec3 worldNormal = normalize ( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );\n\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t\tvec3 I = worldPosition.xyz - cameraPosition;\n\t\t\tvRefract = refract( normalize( I ), worldNormal, 1.02 );\n\n\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvarying vec3 vRefract;\n\n\t\tvoid main() {\n\n\t\t\tfloat directionalLightWeighting = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);\n\t\t\tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n\t\t\tfloat intensity = smoothstep( - 0.5, 1.0, pow( length(lightWeighting), 20.0 ) );\n\t\t\tintensity += length(lightWeighting) * 0.2;\n\n\t\t\tfloat cameraWeighting = dot( normalize( vNormal ), vRefract );\n\t\t\tintensity += pow( 1.0 - length( cameraWeighting ), 6.0 );\n\t\t\tintensity = intensity * 0.2 + 0.3;\n\n\t\t\tif ( intensity < 0.50 ) {\n\n\t\t\t\tgl_FragColor = vec4( 2.0 * intensity * uBaseColor, 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tgl_FragColor = vec4( 1.0 - 2.0 * ( 1.0 - intensity ) * ( 1.0 - uBaseColor ), 1.0 );\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nconst ToonShader2 = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos': { value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xeeeeee ) },\n\t\t'uLineColor1': { value: new Color( 0x808080 ) },\n\t\t'uLineColor2': { value: new Color( 0x000000 ) },\n\t\t'uLineColor3': { value: new Color( 0x000000 ) },\n\t\t'uLineColor4': { value: new Color( 0x000000 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\t\tuniform vec3 uLineColor1;\n\t\tuniform vec3 uLineColor2;\n\t\tuniform vec3 uLineColor3;\n\t\tuniform vec3 uLineColor4;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tfloat camera = max( dot( normalize( vNormal ), vec3( 0.0, 0.0, 1.0 ) ), 0.4);\n\t\t\tfloat light = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);\n\n\t\t\tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n\t\t\tif ( length(uAmbientLightColor + uDirLightColor * light) < 1.00 ) {\n\n\t\t\t\tgl_FragColor *= vec4( uLineColor1, 1.0 );\n\n\t\t\t}\n\n\t\t\tif ( length(uAmbientLightColor + uDirLightColor * camera) < 0.50 ) {\n\n\t\t\t\tgl_FragColor *= vec4( uLineColor2, 1.0 );\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nconst ToonShaderHatching = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos':\t{ value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xffffff ) },\n\t\t'uLineColor1': { value: new Color( 0x000000 ) },\n\t\t'uLineColor2': { value: new Color( 0x000000 ) },\n\t\t'uLineColor3': { value: new Color( 0x000000 ) },\n\t\t'uLineColor4': { value: new Color( 0x000000 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\t\tuniform vec3 uLineColor1;\n\t\tuniform vec3 uLineColor2;\n\t\tuniform vec3 uLineColor3;\n\t\tuniform vec3 uLineColor4;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tfloat directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);\n\t\t\tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n\t\t\tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n\t\t\tif ( length(lightWeighting) < 1.00 ) {\n\n\t\t\t\tif ( mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.75 ) {\n\n\t\t\t\tif (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor2, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.50 ) {\n\n\t\t\t\tif (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor3, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.3465 ) {\n\n\t\t\t\tif (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor4, 1.0 );\n\n\t\t\t}\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nconst ToonShaderDotted = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos':\t{ value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xffffff ) },\n\t\t'uLineColor1': { value: new Color( 0x000000 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\t\tuniform vec3 uLineColor1;\n\t\tuniform vec3 uLineColor2;\n\t\tuniform vec3 uLineColor3;\n\t\tuniform vec3 uLineColor4;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tfloat directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);\n\t\t\tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n\t\t\tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n\t\t\tif ( length(lightWeighting) < 1.00 ) {\n\n\t\t\t\tif ( ( mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y, 4.0) ) > 6.00 ) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.50 ) {\n\n\t\t\t\tif ( ( mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0) ) > 6.00 ) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { ToonShader1, ToonShader2, ToonShaderHatching, ToonShaderDotted };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Triangle blur shader\n * based on glfx.js triangle blur shader\n * https://github.com/evanw/glfx.js\n *\n * A basic blur filter, which convolves the image with a\n * pyramid filter. The pyramid filter is separable and is applied as two\n * perpendicular triangle filters.\n */\n\nconst TriangleBlurShader = {\n\n\tname: 'TriangleBlurShader',\n\n\tuniforms: {\n\n\t\t'texture': { value: null },\n\t\t'delta': { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\t#define ITERATIONS 10.0\n\n\t\tuniform sampler2D texture;\n\t\tuniform vec2 delta;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 color = vec4( 0.0 );\n\n\t\t\tfloat total = 0.0;\n\n\t\t// randomize the lookup values to hide the fixed number of samples\n\n\t\t\tfloat offset = rand( vUv );\n\n\t\t\tfor ( float t = -ITERATIONS; t <= ITERATIONS; t ++ ) {\n\n\t\t\t\tfloat percent = ( t + offset - 0.5 ) / ITERATIONS;\n\t\t\t\tfloat weight = 1.0 - abs( percent );\n\n\t\t\t\tcolor += texture2D( texture, vUv + delta * percent ) * weight;\n\t\t\t\ttotal += weight;\n\n\t\t\t}\n\n\t\t\tgl_FragColor = color / total;\n\n\t\t}`\n\n};\n\nexport { TriangleBlurShader };\n", "/**\n * Unpack RGBA depth shader\n * - show RGBA encoded depth as monochrome color\n */\n\nconst UnpackDepthRGBAShader = {\n\n\tname: 'UnpackDepthRGBAShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\tfloat depth = 1.0 - unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );\n\t\t\tgl_FragColor = vec4( vec3( depth ), opacity );\n\n\t\t}`\n\n};\n\nexport { UnpackDepthRGBAShader };\n", "import {\n\tUniformsLib,\n\tUniformsUtils,\n\tMatrix4\n} from 'three';\n\n/**\n * Mesh Velocity Shader @bhouston\n */\n\nconst VelocityShader = {\n\n\tname: 'VelocityShader',\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.displacementmap,\n\t\t{\n\t\t\tmodelMatrixPrev: { value: new Matrix4() },\n\t\t\tcurrentProjectionViewMatrix: { value: new Matrix4() },\n\t\t\tpreviousProjectionViewMatrix: { value: new Matrix4() }\n\t\t}\n\t] ),\n\n\tvertexShader: /* glsl */`\n#define NORMAL\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nuniform mat4 previousProjectionViewMatrix;\nuniform mat4 currentProjectionViewMatrix;\n\nuniform mat4 modelMatrixPrev;\n\nvarying vec4 clipPositionCurrent;\nvarying vec4 clipPositionPrevious;\n\nvoid main() {\n\n\n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#ifdef USE_SKINNING\n\n\tvec4 mvPosition = modelViewMatrix * skinned;\n\tclipPositionCurrent = currentProjectionViewMatrix * modelMatrix * skinned;\n\tclipPositionPrevious = previousProjectionViewMatrix * modelMatrixPrev * skinned;\n\n#else\n\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\tclipPositionCurrent = currentProjectionViewMatrix * modelMatrix * vec4( transformed, 1.0 );\n\tclipPositionPrevious = previousProjectionViewMatrix * modelMatrixPrev * vec4( transformed, 1.0 );\n\n#endif\n\n\tgl_Position = projectionMatrix * mvPosition;\n\n\t#include \n\t#include \n}\n`,\n\tfragmentShader: /* glsl */`\n#define NORMAL\n\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvarying vec4 clipPositionCurrent;\nvarying vec4 clipPositionPrevious;\n\nvoid main() {\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\tdiffuseColor.a = opacity;\n\n\t#include \n\t#include \n\t#include \n\n\tvec2 ndcPositionCurrent = clipPositionCurrent.xy/clipPositionCurrent.w;\n\tvec2 ndcPositionPrevious = clipPositionPrevious.xy/clipPositionPrevious.w;\n\tvec2 vel = ( ndcPositionCurrent - ndcPositionPrevious ) * 0.5;\n\tvel = vel * 0.5 + 0.5;\n\tvec2 v1 = packDepthToRG(vel.x);\n\tvec2 v2 = packDepthToRG(vel.y);\n\tgl_FragColor = vec4(v1.x, v1.y, v2.x, v2.y);\n\n\t#include \n\n}\n\n`\n};\n\nexport { VelocityShader };\n", "/**\n * Two pass Gaussian blur filter (horizontal and vertical blur shaders)\n * - see http://www.cake23.de/traveling-wavefronts-lit-up.html\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n */\n\nconst VerticalBlurShader = {\n\n\tname: 'VerticalBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'v': { value: 1.0 / 512.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float v;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { VerticalBlurShader };\n", "/**\n * Simple fake tilt-shift effect, modulating two pass Gaussian blur (see above) by vertical position\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n * - \"r\" parameter control where \"focused\" horizontal line lies\n */\n\nconst VerticalTiltShiftShader = {\n\n\tname: 'VerticalTiltShiftShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'v': { value: 1.0 / 512.0 },\n\t\t'r': { value: 0.35 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float v;\n\t\tuniform float r;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tfloat vv = v * abs( r - vUv.y );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * vv ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * vv ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * vv ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * vv ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * vv ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * vv ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * vv ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * vv ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { VerticalTiltShiftShader };\n", "/**\n * Vignette shader\n * based on PaintEffect postprocess from ro.me\n * http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js\n */\n\nconst VignetteShader = {\n\n\tname: 'VignetteShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'offset': { value: 1.0 },\n\t\t'darkness': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float offset;\n\t\tuniform float darkness;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\t// Eskil's vignette\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tvec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset );\n\t\t\tgl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a );\n\n\t\t}`\n\n};\n\nexport { VignetteShader };\n", "import {\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Shaders to render 3D volumes using raycasting.\n * The applied techniques are based on similar implementations in the Visvis and Vispy projects.\n * This is not the only approach, therefore it's marked 1.\n */\n\nconst VolumeRenderShader1 = {\n\n\tuniforms: {\n\t\t'u_size': { value: new Vector3( 1, 1, 1 ) },\n\t\t'u_renderstyle': { value: 0 },\n\t\t'u_renderthreshold': { value: 0.5 },\n\t\t'u_clim': { value: new Vector2( 1, 1 ) },\n\t\t'u_data': { value: null },\n\t\t'u_cmdata': { value: null }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec4 v_nearpos;\n\t\tvarying vec4 v_farpos;\n\t\tvarying vec3 v_position;\n\n\t\tvoid main() {\n\t\t\t\t// Prepare transforms to map to \"camera view\". See also:\n\t\t\t\t// https://threejs.org/docs/#api/renderers/webgl/WebGLProgram\n\t\t\t\tmat4 viewtransformf = modelViewMatrix;\n\t\t\t\tmat4 viewtransformi = inverse(modelViewMatrix);\n\n\t\t\t\t// Project local vertex coordinate to camera position. Then do a step\n\t\t\t\t// backward (in cam coords) to the near clipping plane, and project back. Do\n\t\t\t\t// the same for the far clipping plane. This gives us all the information we\n\t\t\t\t// need to calculate the ray and truncate it to the viewing cone.\n\t\t\t\tvec4 position4 = vec4(position, 1.0);\n\t\t\t\tvec4 pos_in_cam = viewtransformf * position4;\n\n\t\t\t\t// Intersection of ray and near clipping plane (z = -1 in clip coords)\n\t\t\t\tpos_in_cam.z = -pos_in_cam.w;\n\t\t\t\tv_nearpos = viewtransformi * pos_in_cam;\n\n\t\t\t\t// Intersection of ray and far clipping plane (z = +1 in clip coords)\n\t\t\t\tpos_in_cam.z = pos_in_cam.w;\n\t\t\t\tv_farpos = viewtransformi * pos_in_cam;\n\n\t\t\t\t// Set varyings and output pos\n\t\t\t\tv_position = position;\n\t\t\t\tgl_Position = projectionMatrix * viewMatrix * modelMatrix * position4;\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\t\t\t\tprecision mediump sampler3D;\n\n\t\t\t\tuniform vec3 u_size;\n\t\t\t\tuniform int u_renderstyle;\n\t\t\t\tuniform float u_renderthreshold;\n\t\t\t\tuniform vec2 u_clim;\n\n\t\t\t\tuniform sampler3D u_data;\n\t\t\t\tuniform sampler2D u_cmdata;\n\n\t\t\t\tvarying vec3 v_position;\n\t\t\t\tvarying vec4 v_nearpos;\n\t\t\t\tvarying vec4 v_farpos;\n\n\t\t\t\t// The maximum distance through our rendering volume is sqrt(3).\n\t\t\t\tconst int MAX_STEPS = 887;\t// 887 for 512^3, 1774 for 1024^3\n\t\t\t\tconst int REFINEMENT_STEPS = 4;\n\t\t\t\tconst float relative_step_size = 1.0;\n\t\t\t\tconst vec4 ambient_color = vec4(0.2, 0.4, 0.2, 1.0);\n\t\t\t\tconst vec4 diffuse_color = vec4(0.8, 0.2, 0.2, 1.0);\n\t\t\t\tconst vec4 specular_color = vec4(1.0, 1.0, 1.0, 1.0);\n\t\t\t\tconst float shininess = 40.0;\n\n\t\t\t\tvoid cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);\n\t\t\t\tvoid cast_iso(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);\n\n\t\t\t\tfloat sample1(vec3 texcoords);\n\t\t\t\tvec4 apply_colormap(float val);\n\t\t\t\tvec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray);\n\n\n\t\t\t\tvoid main() {\n\t\t\t\t\t\t// Normalize clipping plane info\n\t\t\t\t\t\tvec3 farpos = v_farpos.xyz / v_farpos.w;\n\t\t\t\t\t\tvec3 nearpos = v_nearpos.xyz / v_nearpos.w;\n\n\t\t\t\t\t\t// Calculate unit vector pointing in the view direction through this fragment.\n\t\t\t\t\t\tvec3 view_ray = normalize(nearpos.xyz - farpos.xyz);\n\n\t\t\t\t\t\t// Compute the (negative) distance to the front surface or near clipping plane.\n\t\t\t\t\t\t// v_position is the back face of the cuboid, so the initial distance calculated in the dot\n\t\t\t\t\t\t// product below is the distance from near clip plane to the back of the cuboid\n\t\t\t\t\t\tfloat distance = dot(nearpos - v_position, view_ray);\n\t\t\t\t\t\tdistance = max(distance, min((-0.5 - v_position.x) / view_ray.x,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(u_size.x - 0.5 - v_position.x) / view_ray.x));\n\t\t\t\t\t\tdistance = max(distance, min((-0.5 - v_position.y) / view_ray.y,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(u_size.y - 0.5 - v_position.y) / view_ray.y));\n\t\t\t\t\t\tdistance = max(distance, min((-0.5 - v_position.z) / view_ray.z,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(u_size.z - 0.5 - v_position.z) / view_ray.z));\n\n\t\t\t\t\t\t// Now we have the starting position on the front surface\n\t\t\t\t\t\tvec3 front = v_position + view_ray * distance;\n\n\t\t\t\t\t\t// Decide how many steps to take\n\t\t\t\t\t\tint nsteps = int(-distance / relative_step_size + 0.5);\n\t\t\t\t\t\tif ( nsteps < 1 )\n\t\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t// Get starting location and step vector in texture coordinates\n\t\t\t\t\t\tvec3 step = ((v_position - front) / u_size) / float(nsteps);\n\t\t\t\t\t\tvec3 start_loc = front / u_size;\n\n\t\t\t\t\t\t// For testing: show the number of steps. This helps to establish\n\t\t\t\t\t\t// whether the rays are correctly oriented\n\t\t\t\t\t\t//'gl_FragColor = vec4(0.0, float(nsteps) / 1.0 / u_size.x, 1.0, 1.0);\n\t\t\t\t\t\t//'return;\n\n\t\t\t\t\t\tif (u_renderstyle == 0)\n\t\t\t\t\t\t\t\tcast_mip(start_loc, step, nsteps, view_ray);\n\t\t\t\t\t\telse if (u_renderstyle == 1)\n\t\t\t\t\t\t\t\tcast_iso(start_loc, step, nsteps, view_ray);\n\n\t\t\t\t\t\tif (gl_FragColor.a < 0.05)\n\t\t\t\t\t\t\t\tdiscard;\n\t\t\t\t}\n\n\n\t\t\t\tfloat sample1(vec3 texcoords) {\n\t\t\t\t\t\t/* Sample float value from a 3D texture. Assumes intensity data. */\n\t\t\t\t\t\treturn texture(u_data, texcoords.xyz).r;\n\t\t\t\t}\n\n\n\t\t\t\tvec4 apply_colormap(float val) {\n\t\t\t\t\t\tval = (val - u_clim[0]) / (u_clim[1] - u_clim[0]);\n\t\t\t\t\t\treturn texture2D(u_cmdata, vec2(val, 0.5));\n\t\t\t\t}\n\n\n\t\t\t\tvoid cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray) {\n\n\t\t\t\t\t\tfloat max_val = -1e6;\n\t\t\t\t\t\tint max_i = 100;\n\t\t\t\t\t\tvec3 loc = start_loc;\n\n\t\t\t\t\t\t// Enter the raycasting loop. In WebGL 1 the loop index cannot be compared with\n\t\t\t\t\t\t// non-constant expression. So we use a hard-coded max, and an additional condition\n\t\t\t\t\t\t// inside the loop.\n\t\t\t\t\t\tfor (int iter=0; iter= nsteps)\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t// Sample from the 3D texture\n\t\t\t\t\t\t\t\tfloat val = sample1(loc);\n\t\t\t\t\t\t\t\t// Apply MIP operation\n\t\t\t\t\t\t\t\tif (val > max_val) {\n\t\t\t\t\t\t\t\t\t\tmax_val = val;\n\t\t\t\t\t\t\t\t\t\tmax_i = iter;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Advance location deeper into the volume\n\t\t\t\t\t\t\t\tloc += step;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Refine location, gives crispier images\n\t\t\t\t\t\tvec3 iloc = start_loc + step * (float(max_i) - 0.5);\n\t\t\t\t\t\tvec3 istep = step / float(REFINEMENT_STEPS);\n\t\t\t\t\t\tfor (int i=0; i= nsteps)\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t// Sample from the 3D texture\n\t\t\t\t\t\t\t\tfloat val = sample1(loc);\n\n\t\t\t\t\t\t\t\tif (val > low_threshold) {\n\t\t\t\t\t\t\t\t\t\t// Take the last interval in smaller steps\n\t\t\t\t\t\t\t\t\t\tvec3 iloc = loc - 0.5 * step;\n\t\t\t\t\t\t\t\t\t\tvec3 istep = step / float(REFINEMENT_STEPS);\n\t\t\t\t\t\t\t\t\t\tfor (int i=0; i u_renderthreshold) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgl_FragColor = add_lighting(val, iloc, dstep, view_ray);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tiloc += istep;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Advance location deeper into the volume\n\t\t\t\t\t\t\t\tloc += step;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tvec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray)\n\t\t\t\t{\n\t\t\t\t\t// Calculate color by incorporating lighting\n\n\t\t\t\t\t\t// View direction\n\t\t\t\t\t\tvec3 V = normalize(view_ray);\n\n\t\t\t\t\t\t// calculate normal vector from gradient\n\t\t\t\t\t\tvec3 N;\n\t\t\t\t\t\tfloat val1, val2;\n\t\t\t\t\t\tval1 = sample1(loc + vec3(-step[0], 0.0, 0.0));\n\t\t\t\t\t\tval2 = sample1(loc + vec3(+step[0], 0.0, 0.0));\n\t\t\t\t\t\tN[0] = val1 - val2;\n\t\t\t\t\t\tval = max(max(val1, val2), val);\n\t\t\t\t\t\tval1 = sample1(loc + vec3(0.0, -step[1], 0.0));\n\t\t\t\t\t\tval2 = sample1(loc + vec3(0.0, +step[1], 0.0));\n\t\t\t\t\t\tN[1] = val1 - val2;\n\t\t\t\t\t\tval = max(max(val1, val2), val);\n\t\t\t\t\t\tval1 = sample1(loc + vec3(0.0, 0.0, -step[2]));\n\t\t\t\t\t\tval2 = sample1(loc + vec3(0.0, 0.0, +step[2]));\n\t\t\t\t\t\tN[2] = val1 - val2;\n\t\t\t\t\t\tval = max(max(val1, val2), val);\n\n\t\t\t\t\t\tfloat gm = length(N); // gradient magnitude\n\t\t\t\t\t\tN = normalize(N);\n\n\t\t\t\t\t\t// Flip normal so it points towards viewer\n\t\t\t\t\t\tfloat Nselect = float(dot(N, V) > 0.0);\n\t\t\t\t\t\tN = (2.0 * Nselect - 1.0) * N;\t// ==\tNselect * N - (1.0-Nselect)*N;\n\n\t\t\t\t\t\t// Init colors\n\t\t\t\t\t\tvec4 ambient_color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t\tvec4 diffuse_color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t\tvec4 specular_color = vec4(0.0, 0.0, 0.0, 0.0);\n\n\t\t\t\t\t\t// note: could allow multiple lights\n\t\t\t\t\t\tfor (int i=0; i<1; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t // Get light direction (make sure to prevent zero devision)\n\t\t\t\t\t\t\t\tvec3 L = normalize(view_ray);\t//lightDirs[i];\n\t\t\t\t\t\t\t\tfloat lightEnabled = float( length(L) > 0.0 );\n\t\t\t\t\t\t\t\tL = normalize(L + (1.0 - lightEnabled));\n\n\t\t\t\t\t\t\t\t// Calculate lighting properties\n\t\t\t\t\t\t\t\tfloat lambertTerm = clamp(dot(N, L), 0.0, 1.0);\n\t\t\t\t\t\t\t\tvec3 H = normalize(L+V); // Halfway vector\n\t\t\t\t\t\t\t\tfloat specularTerm = pow(max(dot(H, N), 0.0), shininess);\n\n\t\t\t\t\t\t\t\t// Calculate mask\n\t\t\t\t\t\t\t\tfloat mask1 = lightEnabled;\n\n\t\t\t\t\t\t\t\t// Calculate colors\n\t\t\t\t\t\t\t\tambient_color +=\tmask1 * ambient_color;\t// * gl_LightSource[i].ambient;\n\t\t\t\t\t\t\t\tdiffuse_color +=\tmask1 * lambertTerm;\n\t\t\t\t\t\t\t\tspecular_color += mask1 * specularTerm * specular_color;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Calculate final color by componing different components\n\t\t\t\t\t\tvec4 final_color;\n\t\t\t\t\t\tvec4 color = apply_colormap(val);\n\t\t\t\t\t\tfinal_color = color * (ambient_color + diffuse_color) + specular_color;\n\t\t\t\t\t\tfinal_color.a = color.a;\n\t\t\t\t\t\treturn final_color;\n\t\t\t\t}`\n\n};\n\nexport { VolumeRenderShader1 };\n", "const WaterRefractionShader = {\n\n\tname: 'WaterRefractionShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'time': {\n\t\t\tvalue: 0\n\t\t},\n\n\t\t'tDiffuse': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tDudv': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vUvRefraction;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tvUvRefraction = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 color;\n\t\tuniform float time;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDudv;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vUvRefraction;\n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ),blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t float waveStrength = 0.5;\n\t\t float waveSpeed = 0.03;\n\n\t\t\t// simple distortion (ripple) via dudv map (see https://www.youtube.com/watch?v=6B7IF6GOu7s)\n\n\t\t\tvec2 distortedUv = texture2D( tDudv, vec2( vUv.x + time * waveSpeed, vUv.y ) ).rg * waveStrength;\n\t\t\tdistortedUv = vUv.xy + vec2( distortedUv.x, distortedUv.y + time * waveSpeed );\n\t\t\tvec2 distortion = ( texture2D( tDudv, distortedUv ).rg * 2.0 - 1.0 ) * waveStrength;\n\n\t\t\t// new uv coords\n\n\t\t\tvec4 uv = vec4( vUvRefraction );\n\t\t\tuv.xy += distortion;\n\n\t\t\tvec4 base = texture2DProj( tDiffuse, uv );\n\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { WaterRefractionShader };\n", "class FlakesTexture {\n\n\tconstructor( width = 512, height = 512 ) {\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tconst context = canvas.getContext( '2d' );\n\t\tcontext.fillStyle = 'rgb(127,127,255)';\n\t\tcontext.fillRect( 0, 0, width, height );\n\n\t\tfor ( let i = 0; i < 4000; i ++ ) {\n\n\t\t\tconst x = Math.random() * width;\n\t\t\tconst y = Math.random() * height;\n\t\t\tconst r = Math.random() * 3 + 3;\n\n\t\t\tlet nx = Math.random() * 2 - 1;\n\t\t\tlet ny = Math.random() * 2 - 1;\n\t\t\tlet nz = 1.5;\n\n\t\t\tconst l = Math.sqrt( nx * nx + ny * ny + nz * nz );\n\n\t\t\tnx /= l; ny /= l; nz /= l;\n\n\t\t\tcontext.fillStyle = 'rgb(' + ( nx * 127 + 127 ) + ',' + ( ny * 127 + 127 ) + ',' + ( nz * 255 ) + ')';\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc( x, y, r, 0, Math.PI * 2 );\n\t\t\tcontext.fill();\n\n\t\t}\n\n\t\treturn canvas;\n\n\t}\n\n}\n\nexport { FlakesTexture };\n", "import {\n\tMathUtils,\n\tQuaternion,\n\tVector3\n} from 'three';\n\nconst _va = /*@__PURE__*/ new Vector3(), // from pe to pa\n\t_vb = /*@__PURE__*/ new Vector3(), // from pe to pb\n\t_vc = /*@__PURE__*/ new Vector3(), // from pe to pc\n\t_vr = /*@__PURE__*/ new Vector3(), // right axis of screen\n\t_vu = /*@__PURE__*/ new Vector3(), // up axis of screen\n\t_vn = /*@__PURE__*/ new Vector3(), // normal vector of screen\n\t_vec = /*@__PURE__*/ new Vector3(), // temporary vector\n\t_quat = /*@__PURE__*/ new Quaternion(); // temporary quaternion\n\n\n/** Set a PerspectiveCamera's projectionMatrix and quaternion\n * to exactly frame the corners of an arbitrary rectangle.\n * NOTE: This function ignores the standard parameters;\n * do not call updateProjectionMatrix() after this!\n * @param {Vector3} bottomLeftCorner\n * @param {Vector3} bottomRightCorner\n * @param {Vector3} topLeftCorner\n * @param {boolean} estimateViewFrustum */\nfunction frameCorners( camera, bottomLeftCorner, bottomRightCorner, topLeftCorner, estimateViewFrustum = false ) {\n\n\tconst pa = bottomLeftCorner, pb = bottomRightCorner, pc = topLeftCorner;\n\tconst pe = camera.position; // eye position\n\tconst n = camera.near; // distance of near clipping plane\n\tconst f = camera.far; //distance of far clipping plane\n\n\t_vr.copy( pb ).sub( pa ).normalize();\n\t_vu.copy( pc ).sub( pa ).normalize();\n\t_vn.crossVectors( _vr, _vu ).normalize();\n\n\t_va.copy( pa ).sub( pe ); // from pe to pa\n\t_vb.copy( pb ).sub( pe ); // from pe to pb\n\t_vc.copy( pc ).sub( pe ); // from pe to pc\n\n\tconst d = - _va.dot( _vn );\t// distance from eye to screen\n\tconst l = _vr.dot( _va ) * n / d; // distance to left screen edge\n\tconst r = _vr.dot( _vb ) * n / d; // distance to right screen edge\n\tconst b = _vu.dot( _va ) * n / d; // distance to bottom screen edge\n\tconst t = _vu.dot( _vc ) * n / d; // distance to top screen edge\n\n\t// Set the camera rotation to match the focal plane to the corners' plane\n\t_quat.setFromUnitVectors( _vec.set( 0, 1, 0 ), _vu );\n\tcamera.quaternion.setFromUnitVectors( _vec.set( 0, 0, 1 ).applyQuaternion( _quat ), _vn ).multiply( _quat );\n\n\t// Set the off-axis projection matrix to match the corners\n\tcamera.projectionMatrix.set( 2.0 * n / ( r - l ), 0.0,\n\t\t( r + l ) / ( r - l ), 0.0, 0.0,\n\t\t2.0 * n / ( t - b ),\n\t\t( t + b ) / ( t - b ), 0.0, 0.0, 0.0,\n\t\t( f + n ) / ( n - f ),\n\t\t2.0 * f * n / ( n - f ), 0.0, 0.0, - 1.0, 0.0 );\n\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t// FoV estimation to fix frustum culling\n\tif ( estimateViewFrustum ) {\n\n\t\t// Set fieldOfView to a conservative estimate\n\t\t// to make frustum tall/wide enough to encompass it\n\t\tcamera.fov =\n\t\t\tMathUtils.RAD2DEG / Math.min( 1.0, camera.aspect ) *\n\t\t\tMath.atan( ( _vec.copy( pb ).sub( pa ).length() +\n\t\t\t\t\t\t\t( _vec.copy( pc ).sub( pa ).length() ) ) / _va.length() );\n\n\t}\n\n}\n\nexport { frameCorners };\n", "var Stats = function () {\n\n\tvar mode = 0;\n\n\tvar container = document.createElement( 'div' );\n\tcontainer.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';\n\tcontainer.addEventListener( 'click', function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tshowPanel( ++ mode % container.children.length );\n\n\t}, false );\n\n\t//\n\n\tfunction addPanel( panel ) {\n\n\t\tcontainer.appendChild( panel.dom );\n\t\treturn panel;\n\n\t}\n\n\tfunction showPanel( id ) {\n\n\t\tfor ( var i = 0; i < container.children.length; i ++ ) {\n\n\t\t\tcontainer.children[ i ].style.display = i === id ? 'block' : 'none';\n\n\t\t}\n\n\t\tmode = id;\n\n\t}\n\n\t//\n\n\tvar beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;\n\n\tvar fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );\n\tvar msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );\n\n\tif ( self.performance && self.performance.memory ) {\n\n\t\tvar memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );\n\n\t}\n\n\tshowPanel( 0 );\n\n\treturn {\n\n\t\tREVISION: 16,\n\n\t\tdom: container,\n\n\t\taddPanel: addPanel,\n\t\tshowPanel: showPanel,\n\n\t\tbegin: function () {\n\n\t\t\tbeginTime = ( performance || Date ).now();\n\n\t\t},\n\n\t\tend: function () {\n\n\t\t\tframes ++;\n\n\t\t\tvar time = ( performance || Date ).now();\n\n\t\t\tmsPanel.update( time - beginTime, 200 );\n\n\t\t\tif ( time >= prevTime + 1000 ) {\n\n\t\t\t\tfpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 100 );\n\n\t\t\t\tprevTime = time;\n\t\t\t\tframes = 0;\n\n\t\t\t\tif ( memPanel ) {\n\n\t\t\t\t\tvar memory = performance.memory;\n\t\t\t\t\tmemPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tbeginTime = this.end();\n\n\t\t},\n\n\t\t// Backwards Compatibility\n\n\t\tdomElement: container,\n\t\tsetMode: showPanel\n\n\t};\n\n};\n\nStats.Panel = function ( name, fg, bg ) {\n\n\tvar min = Infinity, max = 0, round = Math.round;\n\tvar PR = round( window.devicePixelRatio || 1 );\n\n\tvar WIDTH = 80 * PR, HEIGHT = 48 * PR,\n\t\tTEXT_X = 3 * PR, TEXT_Y = 2 * PR,\n\t\tGRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,\n\t\tGRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;\n\n\tvar canvas = document.createElement( 'canvas' );\n\tcanvas.width = WIDTH;\n\tcanvas.height = HEIGHT;\n\tcanvas.style.cssText = 'width:80px;height:48px';\n\n\tvar context = canvas.getContext( '2d' );\n\tcontext.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';\n\tcontext.textBaseline = 'top';\n\n\tcontext.fillStyle = bg;\n\tcontext.fillRect( 0, 0, WIDTH, HEIGHT );\n\n\tcontext.fillStyle = fg;\n\tcontext.fillText( name, TEXT_X, TEXT_Y );\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\tcontext.fillStyle = bg;\n\tcontext.globalAlpha = 0.9;\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\treturn {\n\n\t\tdom: canvas,\n\n\t\tupdate: function ( value, maxValue ) {\n\n\t\t\tmin = Math.min( min, value );\n\t\t\tmax = Math.max( max, value );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 1;\n\t\t\tcontext.fillRect( 0, 0, WIDTH, GRAPH_Y );\n\t\t\tcontext.fillStyle = fg;\n\t\t\tcontext.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );\n\n\t\t\tcontext.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 0.9;\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );\n\n\t\t}\n\n\t};\n\n};\n\nexport default Stats;\n", "import Stats from '../libs/stats.module.js';\n\n// https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query_webgl2/\nexport class GPUStatsPanel extends Stats.Panel {\n\n\tconstructor( context, name = 'GPU MS' ) {\n\n\t\tsuper( name, '#f90', '#210' );\n\n\t\tconst extension = context.getExtension( 'EXT_disjoint_timer_query_webgl2' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.warn( 'GPUStatsPanel: disjoint_time_query extension not available.' );\n\n\t\t}\n\n\t\tthis.context = context;\n\t\tthis.extension = extension;\n\t\tthis.maxTime = 30;\n\t\tthis.activeQueries = 0;\n\n\t\tthis.startQuery = function () {\n\n\t\t\tconst gl = this.context;\n\t\t\tconst ext = this.extension;\n\n\t\t\tif ( ext === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// create the query object\n\t\t\tconst query = gl.createQuery();\n\t\t\tgl.beginQuery( ext.TIME_ELAPSED_EXT, query );\n\n\t\t\tthis.activeQueries ++;\n\n\t\t\tconst checkQuery = () => {\n\n\t\t\t\t// check if the query is available and valid\n\n\t\t\t\tconst available = gl.getQueryParameter( query, gl.QUERY_RESULT_AVAILABLE );\n\t\t\t\tconst disjoint = gl.getParameter( ext.GPU_DISJOINT_EXT );\n\t\t\t\tconst ns = gl.getQueryParameter( query, gl.QUERY_RESULT );\n\n\t\t\t\tconst ms = ns * 1e-6;\n\n\t\t\t\tif ( available ) {\n\n\t\t\t\t\t// update the display if it is valid\n\t\t\t\t\tif ( ! disjoint ) {\n\n\t\t\t\t\t\tthis.update( ms, this.maxTime );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.deleteQuery( query );\n\n\t\t\t\t\tthis.activeQueries --;\n\n\n\t\t\t\t} else if ( gl.isContextLost() === false ) {\n\n\t\t\t\t\t// otherwise try again the next frame\n\t\t\t\t\trequestAnimationFrame( checkQuery );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\trequestAnimationFrame( checkQuery );\n\n\t\t};\n\n\t\tthis.endQuery = function () {\n\n\t\t\t// finish the query measurement\n\t\t\tconst ext = this.extension;\n\t\t\tconst gl = this.context;\n\n\t\t\tif ( ext === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tgl.endQuery( ext.TIME_ELAPSED_EXT );\n\n\t\t};\n\n\t}\n\n}\n", "/**\n * Octahedron and Quantization encodings based on work by:\n *\n * @link https://github.com/tsherif/mesh-quantization-example\n *\n */\n\nimport {\n\tBufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tVector3\n} from 'three';\nimport { PackedPhongMaterial } from './PackedPhongMaterial.js';\n\n\n\n/**\n * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data.\n *\n * @param {THREE.Mesh} mesh\n * @param {String} encodeMethod\t\t\"DEFAULT\" || \"OCT1Byte\" || \"OCT2Byte\" || \"ANGLES\"\n *\n */\nfunction compressNormals( mesh, encodeMethod ) {\n\n\tif ( ! mesh.geometry ) {\n\n\t\tconsole.error( 'Mesh must contain geometry. ' );\n\n\t}\n\n\tconst normal = mesh.geometry.attributes.normal;\n\n\tif ( ! normal ) {\n\n\t\tconsole.error( 'Geometry must contain normal attribute. ' );\n\n\t}\n\n\tif ( normal.isPacked ) return;\n\n\tif ( normal.itemSize != 3 ) {\n\n\t\tconsole.error( 'normal.itemSize is not 3, which cannot be encoded. ' );\n\n\t}\n\n\tconst array = normal.array;\n\tconst count = normal.count;\n\n\tlet result;\n\tif ( encodeMethod == 'DEFAULT' ) {\n\n\t\t// TODO: Add 1 byte to the result, making the encoded length to be 4 bytes.\n\t\tresult = new Uint8Array( count * 3 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = defaultEncode( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 1 );\n\n\t\t\tresult[ idx + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx + 1 ] = encoded[ 1 ];\n\t\t\tresult[ idx + 2 ] = encoded[ 2 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 3, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 1;\n\n\t} else if ( encodeMethod == 'OCT1Byte' ) {\n\n\t\t/**\n\t\t* It is not recommended to use 1-byte octahedron normals encoding unless you want to extremely reduce the memory usage\n\t\t* As it makes vertex data not aligned to a 4 byte boundary which may harm some WebGL implementations and sometimes the normal distortion is visible\n\t\t* Please refer to @zeux 's comments in https://github.com/mrdoob/three.js/pull/18208\n\t\t*/\n\n\t\tresult = new Int8Array( count * 2 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = octEncodeBest( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 1 );\n\n\t\t\tresult[ idx / 3 * 2 + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx / 3 * 2 + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 1;\n\n\t} else if ( encodeMethod == 'OCT2Byte' ) {\n\n\t\tresult = new Int16Array( count * 2 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = octEncodeBest( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 2 );\n\n\t\t\tresult[ idx / 3 * 2 + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx / 3 * 2 + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 2;\n\n\t} else if ( encodeMethod == 'ANGLES' ) {\n\n\t\tresult = new Uint16Array( count * 2 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = anglesEncode( array[ idx ], array[ idx + 1 ], array[ idx + 2 ] );\n\n\t\t\tresult[ idx / 3 * 2 + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx / 3 * 2 + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 2;\n\n\t} else {\n\n\t\tconsole.error( 'Unrecognized encoding method, should be `DEFAULT` or `ANGLES` or `OCT`. ' );\n\n\t}\n\n\tmesh.geometry.attributes.normal.needsUpdate = true;\n\tmesh.geometry.attributes.normal.isPacked = true;\n\tmesh.geometry.attributes.normal.packingMethod = encodeMethod;\n\n\t// modify material\n\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t}\n\n\tif ( encodeMethod == 'ANGLES' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 0;\n\n\t}\n\n\tif ( encodeMethod == 'OCT1Byte' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 1;\n\n\t}\n\n\tif ( encodeMethod == 'OCT2Byte' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 1;\n\n\t}\n\n\tif ( encodeMethod == 'DEFAULT' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 2;\n\n\t}\n\n}\n\n\n/**\n\t * Make the input mesh.geometry's position attribute encoded and compressed.\n\t * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data.\n\t *\n\t * @param {THREE.Mesh} mesh\n\t *\n\t */\nfunction compressPositions( mesh ) {\n\n\tif ( ! mesh.geometry ) {\n\n\t\tconsole.error( 'Mesh must contain geometry. ' );\n\n\t}\n\n\tconst position = mesh.geometry.attributes.position;\n\n\tif ( ! position ) {\n\n\t\tconsole.error( 'Geometry must contain position attribute. ' );\n\n\t}\n\n\tif ( position.isPacked ) return;\n\n\tif ( position.itemSize != 3 ) {\n\n\t\tconsole.error( 'position.itemSize is not 3, which cannot be packed. ' );\n\n\t}\n\n\tconst array = position.array;\n\tconst encodingBytes = 2;\n\n\tconst result = quantizedEncode( array, encodingBytes );\n\n\tconst quantized = result.quantized;\n\tconst decodeMat = result.decodeMat;\n\n\t// IMPORTANT: calculate original geometry bounding info first, before updating packed positions\n\tif ( mesh.geometry.boundingBox == null ) mesh.geometry.computeBoundingBox();\n\tif ( mesh.geometry.boundingSphere == null ) mesh.geometry.computeBoundingSphere();\n\n\tmesh.geometry.setAttribute( 'position', new BufferAttribute( quantized, 3 ) );\n\tmesh.geometry.attributes.position.isPacked = true;\n\tmesh.geometry.attributes.position.needsUpdate = true;\n\tmesh.geometry.attributes.position.bytes = quantized.length * encodingBytes;\n\n\t// modify material\n\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t}\n\n\tmesh.material.defines.USE_PACKED_POSITION = 0;\n\n\tmesh.material.uniforms.quantizeMatPos.value = decodeMat;\n\tmesh.material.uniforms.quantizeMatPos.needsUpdate = true;\n\n}\n\n/**\n * Make the input mesh.geometry's uv attribute encoded and compressed.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data.\n *\n * @param {THREE.Mesh} mesh\n *\n */\nfunction compressUvs( mesh ) {\n\n\tif ( ! mesh.geometry ) {\n\n\t\tconsole.error( 'Mesh must contain geometry property. ' );\n\n\t}\n\n\tconst uvs = mesh.geometry.attributes.uv;\n\n\tif ( ! uvs ) {\n\n\t\tconsole.error( 'Geometry must contain uv attribute. ' );\n\n\t}\n\n\tif ( uvs.isPacked ) return;\n\n\tconst range = { min: Infinity, max: - Infinity };\n\n\tconst array = uvs.array;\n\n\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\trange.min = Math.min( range.min, array[ i ] );\n\t\trange.max = Math.max( range.max, array[ i ] );\n\n\t}\n\n\tlet result;\n\n\tif ( range.min >= - 1.0 && range.max <= 1.0 ) {\n\n\t\t// use default encoding method\n\t\tresult = new Uint16Array( array.length );\n\n\t\tfor ( let i = 0; i < array.length; i += 2 ) {\n\n\t\t\tconst encoded = defaultEncode( array[ i ], array[ i + 1 ], 0, 2 );\n\n\t\t\tresult[ i ] = encoded[ 0 ];\n\t\t\tresult[ i + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'uv', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.uv.isPacked = true;\n\t\tmesh.geometry.attributes.uv.needsUpdate = true;\n\t\tmesh.geometry.attributes.uv.bytes = result.length * 2;\n\n\t\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t\t}\n\n\t\tmesh.material.defines.USE_PACKED_UV = 0;\n\n\t} else {\n\n\t\t// use quantized encoding method\n\t\tresult = quantizedEncodeUV( array, 2 );\n\n\t\tmesh.geometry.setAttribute( 'uv', new BufferAttribute( result.quantized, 2 ) );\n\t\tmesh.geometry.attributes.uv.isPacked = true;\n\t\tmesh.geometry.attributes.uv.needsUpdate = true;\n\t\tmesh.geometry.attributes.uv.bytes = result.quantized.length * 2;\n\n\t\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t\t}\n\n\t\tmesh.material.defines.USE_PACKED_UV = 1;\n\n\t\tmesh.material.uniforms.quantizeMatUV.value = result.decodeMat;\n\t\tmesh.material.uniforms.quantizeMatUV.needsUpdate = true;\n\n\t}\n\n}\n\n\n// Encoding functions\n\nfunction defaultEncode( x, y, z, bytes ) {\n\n\tif ( bytes == 1 ) {\n\n\t\tconst tmpx = Math.round( ( x + 1 ) * 0.5 * 255 );\n\t\tconst tmpy = Math.round( ( y + 1 ) * 0.5 * 255 );\n\t\tconst tmpz = Math.round( ( z + 1 ) * 0.5 * 255 );\n\t\treturn new Uint8Array( [ tmpx, tmpy, tmpz ] );\n\n\t} else if ( bytes == 2 ) {\n\n\t\tconst tmpx = Math.round( ( x + 1 ) * 0.5 * 65535 );\n\t\tconst tmpy = Math.round( ( y + 1 ) * 0.5 * 65535 );\n\t\tconst tmpz = Math.round( ( z + 1 ) * 0.5 * 65535 );\n\t\treturn new Uint16Array( [ tmpx, tmpy, tmpz ] );\n\n\t} else {\n\n\t\tconsole.error( 'number of bytes must be 1 or 2' );\n\n\t}\n\n}\n\n// for `Angles` encoding\nfunction anglesEncode( x, y, z ) {\n\n\tconst normal0 = parseInt( 0.5 * ( 1.0 + Math.atan2( y, x ) / Math.PI ) * 65535 );\n\tconst normal1 = parseInt( 0.5 * ( 1.0 + z ) * 65535 );\n\treturn new Uint16Array( [ normal0, normal1 ] );\n\n}\n\n// for `Octahedron` encoding\nfunction octEncodeBest( x, y, z, bytes ) {\n\n\tlet oct, dec, best, currentCos, bestCos;\n\n\t// Test various combinations of ceil and floor\n\t// to minimize rounding errors\n\tbest = oct = octEncodeVec3( x, y, z, 'floor', 'floor' );\n\tdec = octDecodeVec2( oct );\n\tbestCos = dot( x, y, z, dec );\n\n\toct = octEncodeVec3( x, y, z, 'ceil', 'floor' );\n\tdec = octDecodeVec2( oct );\n\tcurrentCos = dot( x, y, z, dec );\n\n\tif ( currentCos > bestCos ) {\n\n\t\tbest = oct;\n\t\tbestCos = currentCos;\n\n\t}\n\n\toct = octEncodeVec3( x, y, z, 'floor', 'ceil' );\n\tdec = octDecodeVec2( oct );\n\tcurrentCos = dot( x, y, z, dec );\n\n\tif ( currentCos > bestCos ) {\n\n\t\tbest = oct;\n\t\tbestCos = currentCos;\n\n\t}\n\n\toct = octEncodeVec3( x, y, z, 'ceil', 'ceil' );\n\tdec = octDecodeVec2( oct );\n\tcurrentCos = dot( x, y, z, dec );\n\n\tif ( currentCos > bestCos ) {\n\n\t\tbest = oct;\n\n\t}\n\n\treturn best;\n\n\tfunction octEncodeVec3( x0, y0, z0, xfunc, yfunc ) {\n\n\t\tlet x = x0 / ( Math.abs( x0 ) + Math.abs( y0 ) + Math.abs( z0 ) );\n\t\tlet y = y0 / ( Math.abs( x0 ) + Math.abs( y0 ) + Math.abs( z0 ) );\n\n\t\tif ( z < 0 ) {\n\n\t\t\tconst tempx = ( 1 - Math.abs( y ) ) * ( x >= 0 ? 1 : - 1 );\n\t\t\tconst tempy = ( 1 - Math.abs( x ) ) * ( y >= 0 ? 1 : - 1 );\n\n\t\t\tx = tempx;\n\t\t\ty = tempy;\n\n\t\t\tlet diff = 1 - Math.abs( x ) - Math.abs( y );\n\t\t\tif ( diff > 0 ) {\n\n\t\t\t\tdiff += 0.001;\n\t\t\t\tx += x > 0 ? diff / 2 : - diff / 2;\n\t\t\t\ty += y > 0 ? diff / 2 : - diff / 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( bytes == 1 ) {\n\n\t\t\treturn new Int8Array( [\n\t\t\t\tMath[ xfunc ]( x * 127.5 + ( x < 0 ? 1 : 0 ) ),\n\t\t\t\tMath[ yfunc ]( y * 127.5 + ( y < 0 ? 1 : 0 ) )\n\t\t\t] );\n\n\t\t}\n\n\t\tif ( bytes == 2 ) {\n\n\t\t\treturn new Int16Array( [\n\t\t\t\tMath[ xfunc ]( x * 32767.5 + ( x < 0 ? 1 : 0 ) ),\n\t\t\t\tMath[ yfunc ]( y * 32767.5 + ( y < 0 ? 1 : 0 ) )\n\t\t\t] );\n\n\t\t}\n\n\n\t}\n\n\tfunction octDecodeVec2( oct ) {\n\n\t\tlet x = oct[ 0 ];\n\t\tlet y = oct[ 1 ];\n\n\t\tif ( bytes == 1 ) {\n\n\t\t\tx /= x < 0 ? 127 : 128;\n\t\t\ty /= y < 0 ? 127 : 128;\n\n\t\t} else if ( bytes == 2 ) {\n\n\t\t\tx /= x < 0 ? 32767 : 32768;\n\t\t\ty /= y < 0 ? 32767 : 32768;\n\n\t\t}\n\n\n\t\tconst z = 1 - Math.abs( x ) - Math.abs( y );\n\n\t\tif ( z < 0 ) {\n\n\t\t\tconst tmpx = x;\n\t\t\tx = ( 1 - Math.abs( y ) ) * ( x >= 0 ? 1 : - 1 );\n\t\t\ty = ( 1 - Math.abs( tmpx ) ) * ( y >= 0 ? 1 : - 1 );\n\n\t\t}\n\n\t\tconst length = Math.sqrt( x * x + y * y + z * z );\n\n\t\treturn [\n\t\t\tx / length,\n\t\t\ty / length,\n\t\t\tz / length\n\t\t];\n\n\t}\n\n\tfunction dot( x, y, z, vec3 ) {\n\n\t\treturn x * vec3[ 0 ] + y * vec3[ 1 ] + z * vec3[ 2 ];\n\n\t}\n\n}\n\nfunction quantizedEncode( array, bytes ) {\n\n\tlet quantized, segments;\n\n\tif ( bytes == 1 ) {\n\n\t\tquantized = new Uint8Array( array.length );\n\t\tsegments = 255;\n\n\t} else if ( bytes == 2 ) {\n\n\t\tquantized = new Uint16Array( array.length );\n\t\tsegments = 65535;\n\n\t} else {\n\n\t\tconsole.error( 'number of bytes error! ' );\n\n\t}\n\n\tconst decodeMat = new Matrix4();\n\n\tconst min = new Float32Array( 3 );\n\tconst max = new Float32Array( 3 );\n\n\tmin[ 0 ] = min[ 1 ] = min[ 2 ] = Number.MAX_VALUE;\n\tmax[ 0 ] = max[ 1 ] = max[ 2 ] = - Number.MAX_VALUE;\n\n\tfor ( let i = 0; i < array.length; i += 3 ) {\n\n\t\tmin[ 0 ] = Math.min( min[ 0 ], array[ i + 0 ] );\n\t\tmin[ 1 ] = Math.min( min[ 1 ], array[ i + 1 ] );\n\t\tmin[ 2 ] = Math.min( min[ 2 ], array[ i + 2 ] );\n\t\tmax[ 0 ] = Math.max( max[ 0 ], array[ i + 0 ] );\n\t\tmax[ 1 ] = Math.max( max[ 1 ], array[ i + 1 ] );\n\t\tmax[ 2 ] = Math.max( max[ 2 ], array[ i + 2 ] );\n\n\t}\n\n\tdecodeMat.scale( new Vector3(\n\t\t( max[ 0 ] - min[ 0 ] ) / segments,\n\t\t( max[ 1 ] - min[ 1 ] ) / segments,\n\t\t( max[ 2 ] - min[ 2 ] ) / segments\n\t) );\n\n\tdecodeMat.elements[ 12 ] = min[ 0 ];\n\tdecodeMat.elements[ 13 ] = min[ 1 ];\n\tdecodeMat.elements[ 14 ] = min[ 2 ];\n\n\tdecodeMat.transpose();\n\n\n\tconst multiplier = new Float32Array( [\n\t\tmax[ 0 ] !== min[ 0 ] ? segments / ( max[ 0 ] - min[ 0 ] ) : 0,\n\t\tmax[ 1 ] !== min[ 1 ] ? segments / ( max[ 1 ] - min[ 1 ] ) : 0,\n\t\tmax[ 2 ] !== min[ 2 ] ? segments / ( max[ 2 ] - min[ 2 ] ) : 0\n\t] );\n\n\tfor ( let i = 0; i < array.length; i += 3 ) {\n\n\t\tquantized[ i + 0 ] = Math.floor( ( array[ i + 0 ] - min[ 0 ] ) * multiplier[ 0 ] );\n\t\tquantized[ i + 1 ] = Math.floor( ( array[ i + 1 ] - min[ 1 ] ) * multiplier[ 1 ] );\n\t\tquantized[ i + 2 ] = Math.floor( ( array[ i + 2 ] - min[ 2 ] ) * multiplier[ 2 ] );\n\n\t}\n\n\treturn {\n\t\tquantized: quantized,\n\t\tdecodeMat: decodeMat\n\t};\n\n}\n\nfunction quantizedEncodeUV( array, bytes ) {\n\n\tlet quantized, segments;\n\n\tif ( bytes == 1 ) {\n\n\t\tquantized = new Uint8Array( array.length );\n\t\tsegments = 255;\n\n\t} else if ( bytes == 2 ) {\n\n\t\tquantized = new Uint16Array( array.length );\n\t\tsegments = 65535;\n\n\t} else {\n\n\t\tconsole.error( 'number of bytes error! ' );\n\n\t}\n\n\tconst decodeMat = new Matrix3();\n\n\tconst min = new Float32Array( 2 );\n\tconst max = new Float32Array( 2 );\n\n\tmin[ 0 ] = min[ 1 ] = Number.MAX_VALUE;\n\tmax[ 0 ] = max[ 1 ] = - Number.MAX_VALUE;\n\n\tfor ( let i = 0; i < array.length; i += 2 ) {\n\n\t\tmin[ 0 ] = Math.min( min[ 0 ], array[ i + 0 ] );\n\t\tmin[ 1 ] = Math.min( min[ 1 ], array[ i + 1 ] );\n\t\tmax[ 0 ] = Math.max( max[ 0 ], array[ i + 0 ] );\n\t\tmax[ 1 ] = Math.max( max[ 1 ], array[ i + 1 ] );\n\n\t}\n\n\tdecodeMat.scale(\n\t\t( max[ 0 ] - min[ 0 ] ) / segments,\n\t\t( max[ 1 ] - min[ 1 ] ) / segments\n\t);\n\n\tdecodeMat.elements[ 6 ] = min[ 0 ];\n\tdecodeMat.elements[ 7 ] = min[ 1 ];\n\n\tdecodeMat.transpose();\n\n\tconst multiplier = new Float32Array( [\n\t\tmax[ 0 ] !== min[ 0 ] ? segments / ( max[ 0 ] - min[ 0 ] ) : 0,\n\t\tmax[ 1 ] !== min[ 1 ] ? segments / ( max[ 1 ] - min[ 1 ] ) : 0\n\t] );\n\n\tfor ( let i = 0; i < array.length; i += 2 ) {\n\n\t\tquantized[ i + 0 ] = Math.floor( ( array[ i + 0 ] - min[ 0 ] ) * multiplier[ 0 ] );\n\t\tquantized[ i + 1 ] = Math.floor( ( array[ i + 1 ] - min[ 1 ] ) * multiplier[ 1 ] );\n\n\t}\n\n\treturn {\n\t\tquantized: quantized,\n\t\tdecodeMat: decodeMat\n\t};\n\n}\n\n\n\nexport {\n\tcompressNormals,\n\tcompressPositions,\n\tcompressUvs,\n};\n", "\n/**\n * `PackedPhongMaterial` inherited from THREE.MeshPhongMaterial\n *\n * @param {Object} parameters\n */\nimport {\n\tMeshPhongMaterial,\n\tShaderChunk,\n\tShaderLib,\n\tUniformsUtils,\n} from 'three';\n\nclass PackedPhongMaterial extends MeshPhongMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = {};\n\t\tthis.type = 'PackedPhongMaterial';\n\t\tthis.uniforms = UniformsUtils.merge( [\n\n\t\t\tShaderLib.phong.uniforms,\n\n\t\t\t{\n\t\t\t\tquantizeMatPos: { value: null },\n\t\t\t\tquantizeMatUV: { value: null }\n\t\t\t}\n\n\t\t] );\n\n\t\tthis.vertexShader = [\n\t\t\t'#define PHONG',\n\n\t\t\t'varying vec3 vViewPosition;',\n\n\t\t\tShaderChunk.common,\n\t\t\tShaderChunk.uv_pars_vertex,\n\t\t\tShaderChunk.displacementmap_pars_vertex,\n\t\t\tShaderChunk.envmap_pars_vertex,\n\t\t\tShaderChunk.color_pars_vertex,\n\t\t\tShaderChunk.fog_pars_vertex,\n\t\t\tShaderChunk.normal_pars_vertex,\n\t\t\tShaderChunk.morphtarget_pars_vertex,\n\t\t\tShaderChunk.skinning_pars_vertex,\n\t\t\tShaderChunk.shadowmap_pars_vertex,\n\t\t\tShaderChunk.logdepthbuf_pars_vertex,\n\t\t\tShaderChunk.clipping_planes_pars_vertex,\n\n\t\t\t`#ifdef USE_PACKED_NORMAL\n\t\t\t\t\t#if USE_PACKED_NORMAL == 0\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat x = packedNormal.x * 2.0 - 1.0;\n\t\t\t\t\t\t\tfloat y = packedNormal.y * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec2 scth = vec2(sin(x * PI), cos(x * PI));\n\t\t\t\t\t\t\tvec2 scphi = vec2(sqrt(1.0 - y * y), y);\n\t\t\t\t\t\t\treturn normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) );\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 1\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y));\n\t\t\t\t\t\t\tif (v.z < 0.0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tv.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 2\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = (packedNormal * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t`#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\tuniform mat4 quantizeMatPos;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t`#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tuniform mat3 quantizeMatUV;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t`#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 0\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = (packedUV * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t'void main() {',\n\n\t\t\tShaderChunk.uv_vertex,\n\n\t\t\t`#ifdef USE_MAP\n\t\t\t\t\t#ifdef USE_PACKED_UV\n\t\t\t\t\t\tvMapUv = decodeUV(vMapUv);\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\tShaderChunk.color_vertex,\n\t\t\tShaderChunk.morphcolor_vertex,\n\n\t\t\tShaderChunk.beginnormal_vertex,\n\n\t\t\t`#ifdef USE_PACKED_NORMAL\n\t\t\t\t\tobjectNormal = decodeNormal(objectNormal);\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef USE_TANGENT\n\t\t\t\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t\t\t\t#endif\n\t\t\t\t`,\n\n\t\t\tShaderChunk.morphnormal_vertex,\n\t\t\tShaderChunk.skinbase_vertex,\n\t\t\tShaderChunk.skinnormal_vertex,\n\t\t\tShaderChunk.defaultnormal_vertex,\n\t\t\tShaderChunk.normal_vertex,\n\n\t\t\tShaderChunk.begin_vertex,\n\n\t\t\t`#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\ttransformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\tShaderChunk.morphtarget_vertex,\n\t\t\tShaderChunk.skinning_vertex,\n\t\t\tShaderChunk.displacementmap_vertex,\n\t\t\tShaderChunk.project_vertex,\n\t\t\tShaderChunk.logdepthbuf_vertex,\n\t\t\tShaderChunk.clipping_planes_vertex,\n\n\t\t\t'vViewPosition = - mvPosition.xyz;',\n\n\t\t\tShaderChunk.worldpos_vertex,\n\t\t\tShaderChunk.envmap_vertex,\n\t\t\tShaderChunk.shadowmap_vertex,\n\t\t\tShaderChunk.fog_vertex,\n\n\t\t\t'}',\n\t\t].join( '\\n' );\n\n\t\t// Use the original MeshPhongMaterial's fragmentShader.\n\t\tthis.fragmentShader = ShaderLib.phong.fragmentShader;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nexport { PackedPhongMaterial };\n", "import { Vector3 } from 'three';\n\n\n/**\n * Generates 2D-Coordinates in a very fast way.\n *\n * Based on work by:\n * @link http://www.openprocessing.org/sketch/15493\n *\n * @param center Center of Hilbert curve.\n * @param size Total width of Hilbert curve.\n * @param iterations Number of subdivisions.\n * @param v0 Corner index -X, -Z.\n * @param v1 Corner index -X, +Z.\n * @param v2 Corner index +X, +Z.\n * @param v3 Corner index +X, -Z.\n */\nfunction hilbert2D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3 ) {\n\n\tconst half = size / 2;\n\n\tconst vec_s = [\n\t\tnew Vector3( center.x - half, center.y, center.z - half ),\n\t\tnew Vector3( center.x - half, center.y, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y, center.z - half )\n\t];\n\n\tconst vec = [\n\t\tvec_s[ v0 ],\n\t\tvec_s[ v1 ],\n\t\tvec_s[ v2 ],\n\t\tvec_s[ v3 ]\n\t];\n\n\t// Recurse iterations\n\tif ( 0 <= -- iterations ) {\n\n\t\treturn [\n\t\t\t...hilbert2D( vec[ 0 ], half, iterations, v0, v3, v2, v1 ),\n\t\t\t...hilbert2D( vec[ 1 ], half, iterations, v0, v1, v2, v3 ),\n\t\t\t...hilbert2D( vec[ 2 ], half, iterations, v0, v1, v2, v3 ),\n\t\t\t...hilbert2D( vec[ 3 ], half, iterations, v2, v1, v0, v3 )\n\t\t];\n\n\t}\n\n\t// Return complete Hilbert Curve.\n\treturn vec;\n\n}\n\n/**\n * Generates 3D-Coordinates in a very fast way.\n *\n * Based on work by:\n * @link https://openprocessing.org/user/5654\n *\n * @param center Center of Hilbert curve.\n * @param size Total width of Hilbert curve.\n * @param iterations Number of subdivisions.\n * @param v0 Corner index -X, +Y, -Z.\n * @param v1 Corner index -X, +Y, +Z.\n * @param v2 Corner index -X, -Y, +Z.\n * @param v3 Corner index -X, -Y, -Z.\n * @param v4 Corner index +X, -Y, -Z.\n * @param v5 Corner index +X, -Y, +Z.\n * @param v6 Corner index +X, +Y, +Z.\n * @param v7 Corner index +X, +Y, -Z.\n */\nfunction hilbert3D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3, v4 = 4, v5 = 5, v6 = 6, v7 = 7 ) {\n\n\t// Default Vars\n\tconst half = size / 2;\n\n\tconst vec_s = [\n\t\tnew Vector3( center.x - half, center.y + half, center.z - half ),\n\t\tnew Vector3( center.x - half, center.y + half, center.z + half ),\n\t\tnew Vector3( center.x - half, center.y - half, center.z + half ),\n\t\tnew Vector3( center.x - half, center.y - half, center.z - half ),\n\t\tnew Vector3( center.x + half, center.y - half, center.z - half ),\n\t\tnew Vector3( center.x + half, center.y - half, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y + half, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y + half, center.z - half )\n\t];\n\n\tconst vec = [\n\t\tvec_s[ v0 ],\n\t\tvec_s[ v1 ],\n\t\tvec_s[ v2 ],\n\t\tvec_s[ v3 ],\n\t\tvec_s[ v4 ],\n\t\tvec_s[ v5 ],\n\t\tvec_s[ v6 ],\n\t\tvec_s[ v7 ]\n\t];\n\n\t// Recurse iterations\n\tif ( -- iterations >= 0 ) {\n\n\t\treturn [\n\t\t\t...hilbert3D( vec[ 0 ], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1 ),\n\t\t\t...hilbert3D( vec[ 1 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ),\n\t\t\t...hilbert3D( vec[ 2 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ),\n\t\t\t...hilbert3D( vec[ 3 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ),\n\t\t\t...hilbert3D( vec[ 4 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ),\n\t\t\t...hilbert3D( vec[ 5 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ),\n\t\t\t...hilbert3D( vec[ 6 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ),\n\t\t\t...hilbert3D( vec[ 7 ], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7 )\n\t\t];\n\n\t}\n\n\t// Return complete Hilbert Curve.\n\treturn vec;\n\n}\n\n/**\n * Generates a Gosper curve (lying in the XY plane)\n *\n * https://gist.github.com/nitaku/6521802\n *\n * @param size The size of a single gosper island.\n */\nfunction gosper( size = 1 ) {\n\n\tfunction fractalize( config ) {\n\n\t\tlet output;\n\t\tlet input = config.axiom;\n\n\t\tfor ( let i = 0, il = config.steps; 0 <= il ? i < il : i > il; 0 <= il ? i ++ : i -- ) {\n\n\t\t\toutput = '';\n\n\t\t\tfor ( let j = 0, jl = input.length; j < jl; j ++ ) {\n\n\t\t\t\tconst char = input[ j ];\n\n\t\t\t\tif ( char in config.rules ) {\n\n\t\t\t\t\toutput += config.rules[ char ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\toutput += char;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tinput = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tfunction toPoints( config ) {\n\n\t\tlet currX = 0, currY = 0;\n\t\tlet angle = 0;\n\t\tconst path = [ 0, 0, 0 ];\n\t\tconst fractal = config.fractal;\n\n\t\tfor ( let i = 0, l = fractal.length; i < l; i ++ ) {\n\n\t\t\tconst char = fractal[ i ];\n\n\t\t\tif ( char === '+' ) {\n\n\t\t\t\tangle += config.angle;\n\n\t\t\t} else if ( char === '-' ) {\n\n\t\t\t\tangle -= config.angle;\n\n\t\t\t} else if ( char === 'F' ) {\n\n\t\t\t\tcurrX += config.size * Math.cos( angle );\n\t\t\t\tcurrY += - config.size * Math.sin( angle );\n\t\t\t\tpath.push( currX, currY, 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn path;\n\n\t}\n\n\t//\n\n\tconst gosper = fractalize( {\n\t\taxiom: 'A',\n\t\tsteps: 4,\n\t\trules: {\n\t\t\tA: 'A+BF++BF-FA--FAFA-BF+',\n\t\t\tB: '-FA+BFBF++BF+FA--FA-B'\n\t\t}\n\t} );\n\n\tconst points = toPoints( {\n\t\tfractal: gosper,\n\t\tsize: size,\n\t\tangle: Math.PI / 3 // 60 degrees\n\t} );\n\n\treturn points;\n\n}\n\n\n\nexport {\n\thilbert2D,\n\thilbert3D,\n\tgosper,\n};\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tGroup,\n\tLineSegments,\n\tMatrix3,\n\tMesh\n} from 'three';\n\nimport { mergeGeometries } from './BufferGeometryUtils.js';\n\nclass LDrawUtils {\n\n\tstatic mergeObject( object ) {\n\n\t\t// Merges geometries in object by materials and returns new object. Use on not indexed geometries.\n\t\t// The object buffers reference the old object ones.\n\t\t// Special treatment is done to the conditional lines generated by LDrawLoader.\n\n\t\tfunction extractGroup( geometry, group, elementSize, isConditionalLine ) {\n\n\t\t\t// Extracts a group from a geometry as a new geometry (with attribute buffers referencing original buffers)\n\n\t\t\tconst newGeometry = new BufferGeometry();\n\n\t\t\tconst originalPositions = geometry.getAttribute( 'position' ).array;\n\t\t\tconst originalNormals = elementSize === 3 ? geometry.getAttribute( 'normal' ).array : null;\n\n\t\t\tconst numVertsGroup = Math.min( group.count, Math.floor( originalPositions.length / 3 ) - group.start );\n\t\t\tconst vertStart = group.start * 3;\n\t\t\tconst vertEnd = ( group.start + numVertsGroup ) * 3;\n\n\t\t\tconst positions = originalPositions.subarray( vertStart, vertEnd );\n\t\t\tconst normals = originalNormals !== null ? originalNormals.subarray( vertStart, vertEnd ) : null;\n\n\t\t\tnewGeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\t\t\tif ( normals !== null ) newGeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( isConditionalLine ) {\n\n\t\t\t\tconst controlArray0 = geometry.getAttribute( 'control0' ).array.subarray( vertStart, vertEnd );\n\t\t\t\tconst controlArray1 = geometry.getAttribute( 'control1' ).array.subarray( vertStart, vertEnd );\n\t\t\t\tconst directionArray = geometry.getAttribute( 'direction' ).array.subarray( vertStart, vertEnd );\n\n\t\t\t\tnewGeometry.setAttribute( 'control0', new BufferAttribute( controlArray0, 3, false ) );\n\t\t\t\tnewGeometry.setAttribute( 'control1', new BufferAttribute( controlArray1, 3, false ) );\n\t\t\t\tnewGeometry.setAttribute( 'direction', new BufferAttribute( directionArray, 3, false ) );\n\n\t\t\t}\n\n\t\t\treturn newGeometry;\n\n\t\t}\n\n\t\tfunction addGeometry( mat, geometry, geometries ) {\n\n\t\t\tconst geoms = geometries[ mat.uuid ];\n\t\t\tif ( ! geoms ) {\n\n\t\t\t\tgeometries[ mat.uuid ] = {\n\t\t\t\t\tmat: mat,\n\t\t\t\t\tarr: [ geometry ]\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tgeoms.arr.push( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction permuteAttribute( attribute, elemSize ) {\n\n\t\t\t// Permutes first two vertices of each attribute element\n\n\t\t\tif ( ! attribute ) return;\n\n\t\t\tconst verts = attribute.array;\n\t\t\tconst numVerts = Math.floor( verts.length / 3 );\n\t\t\tlet offset = 0;\n\t\t\tfor ( let i = 0; i < numVerts; i ++ ) {\n\n\t\t\t\tconst x = verts[ offset ];\n\t\t\t\tconst y = verts[ offset + 1 ];\n\t\t\t\tconst z = verts[ offset + 2 ];\n\n\t\t\t\tverts[ offset ] = verts[ offset + 3 ];\n\t\t\t\tverts[ offset + 1 ] = verts[ offset + 4 ];\n\t\t\t\tverts[ offset + 2 ] = verts[ offset + 5 ];\n\n\t\t\t\tverts[ offset + 3 ] = x;\n\t\t\t\tverts[ offset + 4 ] = y;\n\t\t\t\tverts[ offset + 5 ] = z;\n\n\t\t\t\toffset += elemSize * 3;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Traverse the object hierarchy collecting geometries and transforming them to world space\n\n\t\tconst meshGeometries = {};\n\t\tconst linesGeometries = {};\n\t\tconst condLinesGeometries = {};\n\n\t\tobject.updateMatrixWorld( true );\n\t\tconst normalMatrix = new Matrix3();\n\n\t\tobject.traverse( c => {\n\n\t\t\tif ( c.isMesh | c.isLineSegments ) {\n\n\t\t\t\tconst elemSize = c.isMesh ? 3 : 2;\n\n\t\t\t\tconst geometry = c.geometry.clone();\n\t\t\t\tconst matrixIsInverted = c.matrixWorld.determinant() < 0;\n\t\t\t\tif ( matrixIsInverted ) {\n\n\t\t\t\t\tpermuteAttribute( geometry.attributes.position, elemSize );\n\t\t\t\t\tpermuteAttribute( geometry.attributes.normal, elemSize );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.applyMatrix4( c.matrixWorld );\n\n\t\t\t\tif ( c.isConditionalLine ) {\n\n\t\t\t\t\tgeometry.attributes.control0.applyMatrix4( c.matrixWorld );\n\t\t\t\t\tgeometry.attributes.control1.applyMatrix4( c.matrixWorld );\n\t\t\t\t\tnormalMatrix.getNormalMatrix( c.matrixWorld );\n\t\t\t\t\tgeometry.attributes.direction.applyNormalMatrix( normalMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tconst geometries = c.isMesh ? meshGeometries : ( c.isConditionalLine ? condLinesGeometries : linesGeometries );\n\n\t\t\t\tif ( Array.isArray( c.material ) ) {\n\n\t\t\t\t\tfor ( const groupIndex in geometry.groups ) {\n\n\t\t\t\t\t\tconst group = geometry.groups[ groupIndex ];\n\t\t\t\t\t\tconst mat = c.material[ group.materialIndex ];\n\t\t\t\t\t\tconst newGeometry = extractGroup( geometry, group, elemSize, c.isConditionalLine );\n\t\t\t\t\t\taddGeometry( mat, newGeometry, geometries );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\taddGeometry( c.material, geometry, geometries );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Create object with merged geometries\n\n\t\tconst mergedObject = new Group();\n\n\t\tconst meshMaterialsIds = Object.keys( meshGeometries );\n\t\tfor ( const meshMaterialsId of meshMaterialsIds ) {\n\n\t\t\tconst meshGeometry = meshGeometries[ meshMaterialsId ];\n\t\t\tconst mergedGeometry = mergeGeometries( meshGeometry.arr );\n\t\t\tmergedObject.add( new Mesh( mergedGeometry, meshGeometry.mat ) );\n\n\t\t}\n\n\t\tconst linesMaterialsIds = Object.keys( linesGeometries );\n\t\tfor ( const linesMaterialsId of linesMaterialsIds ) {\n\n\t\t\tconst lineGeometry = linesGeometries[ linesMaterialsId ];\n\t\t\tconst mergedGeometry = mergeGeometries( lineGeometry.arr );\n\t\t\tmergedObject.add( new LineSegments( mergedGeometry, lineGeometry.mat ) );\n\n\t\t}\n\n\t\tconst condLinesMaterialsIds = Object.keys( condLinesGeometries );\n\t\tfor ( const condLinesMaterialsId of condLinesMaterialsIds ) {\n\n\t\t\tconst condLineGeometry = condLinesGeometries[ condLinesMaterialsId ];\n\t\t\tconst mergedGeometry = mergeGeometries( condLineGeometry.arr );\n\t\t\tconst condLines = new LineSegments( mergedGeometry, condLineGeometry.mat );\n\t\t\tcondLines.isConditionalLine = true;\n\t\t\tmergedObject.add( condLines );\n\n\t\t}\n\n\t\tmergedObject.userData.constructionStep = 0;\n\t\tmergedObject.userData.numConstructionSteps = 1;\n\n\t\treturn mergedObject;\n\n\t}\n\n}\n\nexport { LDrawUtils };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tGroup,\n\tMatrix4,\n\tMesh,\n\tVector3\n} from 'three';\n\nimport { mergeGroups, deepCloneAttribute } from './BufferGeometryUtils.js';\n\nconst _color = /*@__PURE__*/new Color();\nconst _matrix = /*@__PURE__*/new Matrix4();\n\nfunction createMeshesFromInstancedMesh( instancedMesh ) {\n\n\tconst group = new Group();\n\n\tconst count = instancedMesh.count;\n\tconst geometry = instancedMesh.geometry;\n\tconst material = instancedMesh.material;\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tinstancedMesh.getMatrixAt( i, mesh.matrix );\n\t\tmesh.matrix.decompose( mesh.position, mesh.quaternion, mesh.scale );\n\n\t\tgroup.add( mesh );\n\n\t}\n\n\tgroup.copy( instancedMesh );\n\tgroup.updateMatrixWorld(); // ensure correct world matrices of meshes\n\n\treturn group;\n\n}\n\nfunction createMeshesFromMultiMaterialMesh( mesh ) {\n\n\tif ( Array.isArray( mesh.material ) === false ) {\n\n\t\tconsole.warn( 'THREE.SceneUtils.createMeshesFromMultiMaterialMesh(): The given mesh has no multiple materials.' );\n\t\treturn mesh;\n\n\t}\n\n\tconst object = new Group();\n\tobject.copy( mesh );\n\n\t// merge groups (which automatically sorts them)\n\n\tconst geometry = mergeGroups( mesh.geometry );\n\n\tconst index = geometry.index;\n\tconst groups = geometry.groups;\n\tconst attributeNames = Object.keys( geometry.attributes );\n\n\t// create a mesh for each group by extracting the buffer data into a new geometry\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst start = group.start;\n\t\tconst end = start + group.count;\n\n\t\tconst newGeometry = new BufferGeometry();\n\t\tconst newMaterial = mesh.material[ group.materialIndex ];\n\n\t\t// process all buffer attributes\n\n\t\tfor ( let j = 0; j < attributeNames.length; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.attributes[ name ];\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tconst newLength = group.count * itemSize;\n\t\t\tconst type = attribute.array.constructor;\n\n\t\t\tconst newArray = new type( newLength );\n\t\t\tconst newAttribute = new BufferAttribute( newArray, itemSize );\n\n\t\t\tfor ( let k = start, n = 0; k < end; k ++, n ++ ) {\n\n\t\t\t\tconst ind = index.getX( k );\n\n\t\t\t\tif ( itemSize >= 1 ) newAttribute.setX( n, attribute.getX( ind ) );\n\t\t\t\tif ( itemSize >= 2 ) newAttribute.setY( n, attribute.getY( ind ) );\n\t\t\t\tif ( itemSize >= 3 ) newAttribute.setZ( n, attribute.getZ( ind ) );\n\t\t\t\tif ( itemSize >= 4 ) newAttribute.setW( n, attribute.getW( ind ) );\n\n\t\t\t}\n\n\n\t\t\tnewGeometry.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\tconst newMesh = new Mesh( newGeometry, newMaterial );\n\t\tobject.add( newMesh );\n\n\t}\n\n\treturn object;\n\n}\n\nfunction createMultiMaterialObject( geometry, materials ) {\n\n\tconst group = new Group();\n\n\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\tgroup.add( new Mesh( geometry, materials[ i ] ) );\n\n\t}\n\n\treturn group;\n\n}\n\nfunction reduceVertices( object, func, initialValue ) {\n\n\tlet value = initialValue;\n\tconst vertex = new Vector3();\n\n\tobject.updateWorldMatrix( true, true );\n\n\tobject.traverseVisible( ( child ) => {\n\n\t\tconst { geometry } = child;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tconst { position } = geometry.attributes;\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = position.count; i < l; i ++ ) {\n\n\t\t\t\t\tif ( child.isMesh ) {\n\n\t\t\t\t\t\tchild.getVertexPosition( i, vertex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! child.isSkinnedMesh ) {\n\n\t\t\t\t\t\tvertex.applyMatrix4( child.matrixWorld );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = func( value, vertex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\treturn value;\n\n}\n\n/**\n * @param {InstancedMesh}\n * @param {function(int, int):int}\n */\nfunction sortInstancedMesh( mesh, compareFn ) {\n\n\t// store copy of instanced attributes for lookups\n\n\tconst instanceMatrixRef = deepCloneAttribute( mesh.instanceMatrix );\n\tconst instanceColorRef = mesh.instanceColor ? deepCloneAttribute( mesh.instanceColor ) : null;\n\n\tconst attributeRefs = new Map();\n\n\tfor ( const name in mesh.geometry.attributes ) {\n\n\t\tconst attribute = mesh.geometry.attributes[ name ];\n\n\t\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\t\tattributeRefs.set( attribute, deepCloneAttribute( attribute ) );\n\n\t\t}\n\n\t}\n\n\n\t// compute sort order\n\n\tconst tokens = [];\n\n\tfor ( let i = 0; i < mesh.count; i ++ ) tokens.push( i );\n\n\ttokens.sort( compareFn );\n\n\n\t// apply sort order\n\n\tfor ( let i = 0; i < tokens.length; i ++ ) {\n\n\t\tconst refIndex = tokens[ i ];\n\n\t\t_matrix.fromArray( instanceMatrixRef.array, refIndex * mesh.instanceMatrix.itemSize );\n\t\t_matrix.toArray( mesh.instanceMatrix.array, i * mesh.instanceMatrix.itemSize );\n\n\t\tif ( mesh.instanceColor ) {\n\n\t\t\t_color.fromArray( instanceColorRef.array, refIndex * mesh.instanceColor.itemSize );\n\t\t\t_color.toArray( mesh.instanceColor.array, i * mesh.instanceColor.itemSize );\n\n\t\t}\n\n\t\tfor ( const name in mesh.geometry.attributes ) {\n\n\t\t\tconst attribute = mesh.geometry.attributes[ name ];\n\n\t\t\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\t\t\tconst attributeRef = attributeRefs.get( attribute );\n\n\t\t\t\tattribute.setX( i, attributeRef.getX( refIndex ) );\n\t\t\t\tif ( attribute.itemSize > 1 ) attribute.setY( i, attributeRef.getY( refIndex ) );\n\t\t\t\tif ( attribute.itemSize > 2 ) attribute.setZ( i, attributeRef.getZ( refIndex ) );\n\t\t\t\tif ( attribute.itemSize > 3 ) attribute.setW( i, attributeRef.getW( refIndex ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D} object Object to traverse.\n * @yields {Object3D} Objects that passed the filter condition.\n */\nfunction* traverseGenerator( object ) {\n\n\tyield object;\n\n\tconst children = object.children;\n\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\tyield* traverseGenerator( children[ i ] );\n\n\t}\n\n}\n\n/**\n * @param {Object3D} object Object to traverse.\n * @yields {Object3D} Objects that passed the filter condition.\n */\nfunction* traverseVisibleGenerator( object ) {\n\n\tif ( object.visible === false ) return;\n\n\tyield object;\n\n\tconst children = object.children;\n\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\tyield* traverseVisibleGenerator( children[ i ] );\n\n\t}\n\n}\n\n/**\n * @param {Object3D} object Object to traverse.\n * @yields {Object3D} Objects that passed the filter condition.\n */\nfunction* traverseAncestorsGenerator( object ) {\n\n\tconst parent = object.parent;\n\n\tif ( parent !== null ) {\n\n\t\tyield parent;\n\n\t\tyield* traverseAncestorsGenerator( parent );\n\n\t}\n\n}\n\nexport {\n\tcreateMeshesFromInstancedMesh,\n\tcreateMeshesFromMultiMaterialMesh,\n\tcreateMultiMaterialObject,\n\treduceVertices,\n\tsortInstancedMesh,\n\ttraverseGenerator,\n\ttraverseVisibleGenerator,\n\ttraverseAncestorsGenerator\n};\n", "import {\n\tDoubleSide,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tOrthographicCamera,\n\tPlaneGeometry,\n\tScene,\n\tShaderMaterial,\n\tTexture,\n\tUniformsUtils\n} from 'three';\nimport { UnpackDepthRGBAShader } from '../shaders/UnpackDepthRGBAShader.js';\n\n/**\n * This is a helper for visualising a given light's shadow map.\n * It works for shadow casting lights: DirectionalLight and SpotLight.\n * It renders out the shadow map and displays it on a HUD.\n *\n * Example usage:\n *\t1) Import ShadowMapViewer into your app.\n *\n *\t2) Create a shadow casting light and name it optionally:\n *\t\tlet light = new DirectionalLight( 0xffffff, 1 );\n *\t\tlight.castShadow = true;\n *\t\tlight.name = 'Sun';\n *\n *\t3) Create a shadow map viewer for that light and set its size and position optionally:\n *\t\tlet shadowMapViewer = new ShadowMapViewer( light );\n *\t\tshadowMapViewer.size.set( 128, 128 );\t//width, height default: 256, 256\n *\t\tshadowMapViewer.position.set( 10, 10 );\t//x, y in pixel\t default: 0, 0 (top left corner)\n *\n *\t4) Render the shadow map viewer in your render loop:\n *\t\tshadowMapViewer.render( renderer );\n *\n *\t5) Optionally: Update the shadow map viewer on window resize:\n *\t\tshadowMapViewer.updateForWindowResize();\n *\n *\t6) If you set the position or size members directly, you need to call shadowMapViewer.update();\n */\n\nclass ShadowMapViewer {\n\n\tconstructor( light ) {\n\n\t\t//- Internals\n\t\tconst scope = this;\n\t\tconst doRenderLabel = ( light.name !== undefined && light.name !== '' );\n\t\tlet userAutoClearSetting;\n\n\t\t//Holds the initial position and dimension of the HUD\n\t\tconst frame = {\n\t\t\tx: 10,\n\t\t\ty: 10,\n\t\t\twidth: 256,\n\t\t\theight: 256\n\t\t};\n\n\t\tconst camera = new OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 10 );\n\t\tcamera.position.set( 0, 0, 2 );\n\t\tconst scene = new Scene();\n\n\t\t//HUD for shadow map\n\t\tconst shader = UnpackDepthRGBAShader;\n\n\t\tconst uniforms = UniformsUtils.clone( shader.uniforms );\n\t\tconst material = new ShaderMaterial( {\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\t\t} );\n\t\tconst plane = new PlaneGeometry( frame.width, frame.height );\n\t\tconst mesh = new Mesh( plane, material );\n\n\t\tscene.add( mesh );\n\n\n\t\t//Label for light's name\n\t\tlet labelCanvas, labelMesh;\n\n\t\tif ( doRenderLabel ) {\n\n\t\t\tlabelCanvas = document.createElement( 'canvas' );\n\n\t\t\tconst context = labelCanvas.getContext( '2d' );\n\t\t\tcontext.font = 'Bold 20px Arial';\n\n\t\t\tconst labelWidth = context.measureText( light.name ).width;\n\t\t\tlabelCanvas.width = labelWidth;\n\t\t\tlabelCanvas.height = 25;\t//25 to account for g, p, etc.\n\n\t\t\tcontext.font = 'Bold 20px Arial';\n\t\t\tcontext.fillStyle = 'rgba( 255, 0, 0, 1 )';\n\t\t\tcontext.fillText( light.name, 0, 20 );\n\n\t\t\tconst labelTexture = new Texture( labelCanvas );\n\t\t\tlabelTexture.magFilter = LinearFilter;\n\t\t\tlabelTexture.minFilter = LinearFilter;\n\t\t\tlabelTexture.needsUpdate = true;\n\n\t\t\tconst labelMaterial = new MeshBasicMaterial( { map: labelTexture, side: DoubleSide } );\n\t\t\tlabelMaterial.transparent = true;\n\n\t\t\tconst labelPlane = new PlaneGeometry( labelCanvas.width, labelCanvas.height );\n\t\t\tlabelMesh = new Mesh( labelPlane, labelMaterial );\n\n\t\t\tscene.add( labelMesh );\n\n\t\t}\n\n\n\t\tfunction resetPosition() {\n\n\t\t\tscope.position.set( scope.position.x, scope.position.y );\n\n\t\t}\n\n\t\t//- API\n\t\t// Set to false to disable displaying this shadow map\n\t\tthis.enabled = true;\n\n\t\t// Set the size of the displayed shadow map on the HUD\n\t\tthis.size = {\n\t\t\twidth: frame.width,\n\t\t\theight: frame.height,\n\t\t\tset: function ( width, height ) {\n\n\t\t\t\tthis.width = width;\n\t\t\t\tthis.height = height;\n\n\t\t\t\tmesh.scale.set( this.width / frame.width, this.height / frame.height, 1 );\n\n\t\t\t\t//Reset the position as it is off when we scale stuff\n\t\t\t\tresetPosition();\n\n\t\t\t}\n\t\t};\n\n\t\t// Set the position of the displayed shadow map on the HUD\n\t\tthis.position = {\n\t\t\tx: frame.x,\n\t\t\ty: frame.y,\n\t\t\tset: function ( x, y ) {\n\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\n\t\t\t\tconst width = scope.size.width;\n\t\t\t\tconst height = scope.size.height;\n\n\t\t\t\tmesh.position.set( - window.innerWidth / 2 + width / 2 + this.x, window.innerHeight / 2 - height / 2 - this.y, 0 );\n\n\t\t\t\tif ( doRenderLabel ) labelMesh.position.set( mesh.position.x, mesh.position.y - scope.size.height / 2 + labelCanvas.height / 2, 0 );\n\n\t\t\t}\n\t\t};\n\n\t\tthis.render = function ( renderer ) {\n\n\t\t\tif ( this.enabled ) {\n\n\t\t\t\t//Because a light's .shadowMap is only initialised after the first render pass\n\t\t\t\t//we have to make sure the correct map is sent into the shader, otherwise we\n\t\t\t\t//always end up with the scene's first added shadow casting light's shadowMap\n\t\t\t\t//in the shader\n\t\t\t\t//See: https://github.com/mrdoob/three.js/issues/5932\n\t\t\t\tuniforms.tDiffuse.value = light.shadow.map.texture;\n\n\t\t\t\tuserAutoClearSetting = renderer.autoClear;\n\t\t\t\trenderer.autoClear = false; // To allow render overlay\n\t\t\t\trenderer.clearDepth();\n\t\t\t\trenderer.render( scene, camera );\n\t\t\t\trenderer.autoClear = userAutoClearSetting;\t//Restore user's setting\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.updateForWindowResize = function () {\n\n\t\t\tif ( this.enabled ) {\n\n\t\t\t\t camera.left = window.innerWidth / - 2;\n\t\t\t\t camera.right = window.innerWidth / 2;\n\t\t\t\t camera.top = window.innerHeight / 2;\n\t\t\t\t camera.bottom = window.innerHeight / - 2;\n\t\t\t\t camera.updateProjectionMatrix();\n\n\t\t\t\t this.update();\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\tthis.position.set( this.position.x, this.position.y );\n\t\t\tthis.size.set( this.size.width, this.size.height );\n\n\t\t};\n\n\t\t//Force an update to set position/size\n\t\tthis.update();\n\n\t}\n\n}\n\n\nexport { ShadowMapViewer };\n", "import {\n\tAnimationClip,\n\tAnimationMixer,\n\tMatrix4,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tSkeletonHelper,\n\tVector3,\n\tVectorKeyframeTrack\n} from 'three';\n\n\nfunction retarget( target, source, options = {} ) {\n\n\tconst pos = new Vector3(),\n\t\tquat = new Quaternion(),\n\t\tscale = new Vector3(),\n\t\tbindBoneMatrix = new Matrix4(),\n\t\trelativeMatrix = new Matrix4(),\n\t\tglobalMatrix = new Matrix4();\n\n\toptions.preserveMatrix = options.preserveMatrix !== undefined ? options.preserveMatrix : true;\n\toptions.preservePosition = options.preservePosition !== undefined ? options.preservePosition : true;\n\toptions.preserveHipPosition = options.preserveHipPosition !== undefined ? options.preserveHipPosition : false;\n\toptions.useTargetMatrix = options.useTargetMatrix !== undefined ? options.useTargetMatrix : false;\n\toptions.hip = options.hip !== undefined ? options.hip : 'hip';\n\toptions.names = options.names || {};\n\n\tconst sourceBones = source.isObject3D ? source.skeleton.bones : getBones( source ),\n\t\tbones = target.isObject3D ? target.skeleton.bones : getBones( target );\n\n\tlet bindBones,\n\t\tbone, name, boneTo,\n\t\tbonesPosition;\n\n\t// reset bones\n\n\tif ( target.isObject3D ) {\n\n\t\ttarget.skeleton.pose();\n\n\t} else {\n\n\t\toptions.useTargetMatrix = true;\n\t\toptions.preserveMatrix = false;\n\n\t}\n\n\tif ( options.preservePosition ) {\n\n\t\tbonesPosition = [];\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tbonesPosition.push( bones[ i ].position.clone() );\n\n\t\t}\n\n\t}\n\n\tif ( options.preserveMatrix ) {\n\n\t\t// reset matrix\n\n\t\ttarget.updateMatrixWorld();\n\n\t\ttarget.matrixWorld.identity();\n\n\t\t// reset children matrix\n\n\t\tfor ( let i = 0; i < target.children.length; ++ i ) {\n\n\t\t\ttarget.children[ i ].updateMatrixWorld( true );\n\n\t\t}\n\n\t}\n\n\tif ( options.offsets ) {\n\n\t\tbindBones = [];\n\n\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\tbone = bones[ i ];\n\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\tif ( options.offsets[ name ] ) {\n\n\t\t\t\tbone.matrix.multiply( options.offsets[ name ] );\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t\tbone.updateMatrixWorld();\n\n\t\t\t}\n\n\t\t\tbindBones.push( bone.matrixWorld.clone() );\n\n\t\t}\n\n\t}\n\n\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\tbone = bones[ i ];\n\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\tboneTo = getBoneByName( name, sourceBones );\n\n\t\tglobalMatrix.copy( bone.matrixWorld );\n\n\t\tif ( boneTo ) {\n\n\t\t\tboneTo.updateMatrixWorld();\n\n\t\t\tif ( options.useTargetMatrix ) {\n\n\t\t\t\trelativeMatrix.copy( boneTo.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\trelativeMatrix.copy( target.matrixWorld ).invert();\n\t\t\t\trelativeMatrix.multiply( boneTo.matrixWorld );\n\n\t\t\t}\n\n\t\t\t// ignore scale to extract rotation\n\n\t\t\tscale.setFromMatrixScale( relativeMatrix );\n\t\t\trelativeMatrix.scale( scale.set( 1 / scale.x, 1 / scale.y, 1 / scale.z ) );\n\n\t\t\t// apply to global matrix\n\n\t\t\tglobalMatrix.makeRotationFromQuaternion( quat.setFromRotationMatrix( relativeMatrix ) );\n\n\t\t\tif ( target.isObject3D ) {\n\n\t\t\t\tconst boneIndex = bones.indexOf( bone ),\n\t\t\t\t\twBindMatrix = bindBones ? bindBones[ boneIndex ] : bindBoneMatrix.copy( target.skeleton.boneInverses[ boneIndex ] ).invert();\n\n\t\t\t\tglobalMatrix.multiply( wBindMatrix );\n\n\t\t\t}\n\n\t\t\tglobalMatrix.copyPosition( relativeMatrix );\n\n\t\t}\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\tbone.matrix.multiply( globalMatrix );\n\n\t\t} else {\n\n\t\t\tbone.matrix.copy( globalMatrix );\n\n\t\t}\n\n\t\tif ( options.preserveHipPosition && name === options.hip ) {\n\n\t\t\tbone.matrix.setPosition( pos.set( 0, bone.position.y, 0 ) );\n\n\t\t}\n\n\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\tbone.updateMatrixWorld();\n\n\t}\n\n\tif ( options.preservePosition ) {\n\n\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\tbone = bones[ i ];\n\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\tif ( name !== options.hip ) {\n\n\t\t\t\tbone.position.copy( bonesPosition[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tif ( options.preserveMatrix ) {\n\n\t\t// restore matrix\n\n\t\ttarget.updateMatrixWorld( true );\n\n\t}\n\n}\n\nfunction retargetClip( target, source, clip, options = {} ) {\n\n\toptions.useFirstFramePosition = options.useFirstFramePosition !== undefined ? options.useFirstFramePosition : false;\n\t// Calculate the fps from the source clip based on the track with the most frames, unless fps is already provided.\n\toptions.fps = options.fps !== undefined ? options.fps : ( Math.max( ...clip.tracks.map( track => track.times.length ) ) / clip.duration );\n\toptions.names = options.names || [];\n\n\tif ( ! source.isObject3D ) {\n\n\t\tsource = getHelperFromSkeleton( source );\n\n\t}\n\n\tconst numFrames = Math.round( clip.duration * ( options.fps / 1000 ) * 1000 ),\n\t\tdelta = clip.duration / ( numFrames - 1 ),\n\t\tconvertedTracks = [],\n\t\tmixer = new AnimationMixer( source ),\n\t\tbones = getBones( target.skeleton ),\n\t\tboneDatas = [];\n\tlet positionOffset,\n\t\tbone, boneTo, boneData,\n\t\tname;\n\n\tmixer.clipAction( clip ).play();\n\tmixer.update( 0 );\n\n\tsource.updateMatrixWorld();\n\n\tfor ( let i = 0; i < numFrames; ++ i ) {\n\n\t\tconst time = i * delta;\n\n\t\tretarget( target, source, options );\n\n\t\tfor ( let j = 0; j < bones.length; ++ j ) {\n\n\t\t\tname = options.names[ bones[ j ].name ] || bones[ j ].name;\n\n\t\t\tboneTo = getBoneByName( name, source.skeleton );\n\n\t\t\tif ( boneTo ) {\n\n\t\t\t\tbone = bones[ j ];\n\t\t\t\tboneData = boneDatas[ j ] = boneDatas[ j ] || { bone: bone };\n\n\t\t\t\tif ( options.hip === name ) {\n\n\t\t\t\t\tif ( ! boneData.pos ) {\n\n\t\t\t\t\t\tboneData.pos = {\n\t\t\t\t\t\t\ttimes: new Float32Array( numFrames ),\n\t\t\t\t\t\t\tvalues: new Float32Array( numFrames * 3 )\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( options.useFirstFramePosition ) {\n\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\tpositionOffset = bone.position.clone();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbone.position.sub( positionOffset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.pos.times[ i ] = time;\n\n\t\t\t\t\tbone.position.toArray( boneData.pos.values, i * 3 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! boneData.quat ) {\n\n\t\t\t\t\tboneData.quat = {\n\t\t\t\t\t\ttimes: new Float32Array( numFrames ),\n\t\t\t\t\t\tvalues: new Float32Array( numFrames * 4 )\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tboneData.quat.times[ i ] = time;\n\n\t\t\t\tbone.quaternion.toArray( boneData.quat.values, i * 4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( i === numFrames - 2 ) {\n\n\t\t\t// last mixer update before final loop iteration\n\t\t\t// make sure we do not go over or equal to clip duration\n\t\t\tmixer.update( delta - 0.0000001 );\n\n\t\t} else {\n\n\t\t\tmixer.update( delta );\n\n\t\t}\n\n\t\tsource.updateMatrixWorld();\n\n\t}\n\n\tfor ( let i = 0; i < boneDatas.length; ++ i ) {\n\n\t\tboneData = boneDatas[ i ];\n\n\t\tif ( boneData ) {\n\n\t\t\tif ( boneData.pos ) {\n\n\t\t\t\tconvertedTracks.push( new VectorKeyframeTrack(\n\t\t\t\t\t'.bones[' + boneData.bone.name + '].position',\n\t\t\t\t\tboneData.pos.times,\n\t\t\t\t\tboneData.pos.values\n\t\t\t\t) );\n\n\t\t\t}\n\n\t\t\tconvertedTracks.push( new QuaternionKeyframeTrack(\n\t\t\t\t'.bones[' + boneData.bone.name + '].quaternion',\n\t\t\t\tboneData.quat.times,\n\t\t\t\tboneData.quat.values\n\t\t\t) );\n\n\t\t}\n\n\t}\n\n\tmixer.uncacheAction( clip );\n\n\treturn new AnimationClip( clip.name, - 1, convertedTracks );\n\n}\n\nfunction clone( source ) {\n\n\tconst sourceLookup = new Map();\n\tconst cloneLookup = new Map();\n\n\tconst clone = source.clone();\n\n\tparallelTraverse( source, clone, function ( sourceNode, clonedNode ) {\n\n\t\tsourceLookup.set( clonedNode, sourceNode );\n\t\tcloneLookup.set( sourceNode, clonedNode );\n\n\t} );\n\n\tclone.traverse( function ( node ) {\n\n\t\tif ( ! node.isSkinnedMesh ) return;\n\n\t\tconst clonedMesh = node;\n\t\tconst sourceMesh = sourceLookup.get( node );\n\t\tconst sourceBones = sourceMesh.skeleton.bones;\n\n\t\tclonedMesh.skeleton = sourceMesh.skeleton.clone();\n\t\tclonedMesh.bindMatrix.copy( sourceMesh.bindMatrix );\n\n\t\tclonedMesh.skeleton.bones = sourceBones.map( function ( bone ) {\n\n\t\t\treturn cloneLookup.get( bone );\n\n\t\t} );\n\n\t\tclonedMesh.bind( clonedMesh.skeleton, clonedMesh.bindMatrix );\n\n\t} );\n\n\treturn clone;\n\n}\n\n// internal helper\n\nfunction getBoneByName( name, skeleton ) {\n\n\tfor ( let i = 0, bones = getBones( skeleton ); i < bones.length; i ++ ) {\n\n\t\tif ( name === bones[ i ].name )\n\n\t\t\treturn bones[ i ];\n\n\t}\n\n}\n\nfunction getBones( skeleton ) {\n\n\treturn Array.isArray( skeleton ) ? skeleton : skeleton.bones;\n\n}\n\n\nfunction getHelperFromSkeleton( skeleton ) {\n\n\tconst source = new SkeletonHelper( skeleton.bones[ 0 ] );\n\tsource.skeleton = skeleton;\n\n\treturn source;\n\n}\n\nfunction parallelTraverse( a, b, callback ) {\n\n\tcallback( a, b );\n\n\tfor ( let i = 0; i < a.children.length; i ++ ) {\n\n\t\tparallelTraverse( a.children[ i ], b.children[ i ], callback );\n\n\t}\n\n}\n\nexport {\n\tretarget,\n\tretargetClip,\n\tclone,\n};\n", "// Hybrid radix sort from\n// - https://gist.github.com/sciecode/93ed864dd77c5c8803c6a86698d68dab\n// - https://github.com/mrdoob/three.js/pull/27202#issuecomment-1817640271\n//\n// expects unsigned 32b integer values\n\nconst POWER = 3;\nconst BIT_MAX = 32;\nconst BIN_BITS = 1 << POWER;\nconst BIN_SIZE = 1 << BIN_BITS;\nconst BIN_MAX = BIN_SIZE - 1;\nconst ITERATIONS = BIT_MAX / BIN_BITS;\n\nconst bins = new Array( ITERATIONS );\nconst bins_buffer = new ArrayBuffer( ( ITERATIONS + 1 ) * BIN_SIZE * 4 );\n\nlet c = 0;\nfor ( let i = 0; i < ( ITERATIONS + 1 ); i ++ ) {\n\n\tbins[ i ] = new Uint32Array( bins_buffer, c, BIN_SIZE );\n\tc += BIN_SIZE * 4;\n\n}\n\nconst defaultGet = ( el ) => el;\n\nexport const radixSort = ( arr, opt ) => {\n\n\tconst len = arr.length;\n\n\tconst options = opt || {};\n\tconst aux = options.aux || new arr.constructor( len );\n\tconst get = options.get || defaultGet;\n\n\tconst data = [ arr, aux ];\n\n\tlet compare, accumulate, recurse;\n\n\tif ( options.reversed ) {\n\n\t\tcompare = ( a, b ) => a < b;\n\t\taccumulate = ( bin ) => {\n\n\t\t\tfor ( let j = BIN_SIZE - 2; j >= 0; j -- )\n\t\t\t\tbin[ j ] += bin[ j + 1 ];\n\n\t\t};\n\n\t\trecurse = ( cache, depth, start ) => {\n\n\t\t\tlet prev = 0;\n\t\t\tfor ( let j = BIN_MAX; j >= 0; j -- ) {\n\n\t\t\t\tconst cur = cache[ j ], diff = cur - prev;\n\t\t\t\tif ( diff != 0 ) {\n\n\t\t\t\t\tif ( diff > 32 )\n\t\t\t\t\t\tradixSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\telse\n\t\t\t\t\t\tinsertionSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\tprev = cur;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t} else {\n\n\t\tcompare = ( a, b ) => a > b;\n\t\taccumulate = ( bin ) => {\n\n\t\t\tfor ( let j = 1; j < BIN_SIZE; j ++ )\n\t\t\t\tbin[ j ] += bin[ j - 1 ];\n\n\t\t};\n\n\t\trecurse = ( cache, depth, start ) => {\n\n\t\t\tlet prev = 0;\n\t\t\tfor ( let j = 0; j < BIN_SIZE; j ++ ) {\n\n\t\t\t\tconst cur = cache[ j ], diff = cur - prev;\n\t\t\t\tif ( diff != 0 ) {\n\n\t\t\t\t\tif ( diff > 32 )\n\t\t\t\t\t\tradixSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\telse\n\t\t\t\t\t\tinsertionSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\tprev = cur;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tconst insertionSortBlock = ( depth, start, len ) => {\n\n\t\tconst a = data[ depth & 1 ];\n\t\tconst b = data[ ( depth + 1 ) & 1 ];\n\n\t\tfor ( let j = start + 1; j < start + len; j ++ ) {\n\n\t\t\tconst p = a[ j ], t = get( p ) >>> 0;\n\t\t\tlet i = j;\n\t\t\twhile ( i > start ) {\n\n\t\t\t\tif ( compare( get( a[ i - 1 ] ) >>> 0, t ) )\n\t\t\t\t\ta[ i ] = a[ -- i ];\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\ta[ i ] = p;\n\n\t\t}\n\n\t\tif ( ( depth & 1 ) == 1 ) {\n\n\t\t\tfor ( let i = start; i < start + len; i ++ )\n\t\t\t\tb[ i ] = a[ i ];\n\n\t\t}\n\n\t};\n\n\tconst radixSortBlock = ( depth, start, len ) => {\n\n\t\tconst a = data[ depth & 1 ];\n\t\tconst b = data[ ( depth + 1 ) & 1 ];\n\n\t\tconst shift = ( 3 - depth ) << POWER;\n\t\tconst end = start + len;\n\n\t\tconst cache = bins[ depth ];\n\t\tconst bin = bins[ depth + 1 ];\n\n\t\tbin.fill( 0 );\n\n\t\tfor ( let j = start; j < end; j ++ )\n\t\t\tbin[ ( get( a[ j ] ) >>> shift ) & BIN_MAX ] ++;\n\n\t\taccumulate( bin );\n\n\t\tcache.set( bin );\n\n\t\tfor ( let j = end - 1; j >= start; j -- )\n\t\t\tb[ start + -- bin[ ( get( a[ j ] ) >>> shift ) & BIN_MAX ] ] = a[ j ];\n\n\t\tif ( depth == ITERATIONS - 1 ) return;\n\n\t\trecurse( cache, depth, start );\n\n\t};\n\n\tradixSortBlock( 0, 0, len );\n\n};\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * tool for \"unwrapping\" and debugging three.js geometries UV mapping\n *\n * Sample usage:\n *\tdocument.body.appendChild( UVsDebug( new THREE.SphereGeometry( 10, 10, 10, 10 ) );\n *\n */\n\nfunction UVsDebug( geometry, size = 1024 ) {\n\n\t// handles wrapping of uv.x > 1 only\n\n\tconst abc = 'abc';\n\tconst a = new Vector2();\n\tconst b = new Vector2();\n\n\tconst uvs = [\n\t\tnew Vector2(),\n\t\tnew Vector2(),\n\t\tnew Vector2()\n\t];\n\n\tconst face = [];\n\n\tconst canvas = document.createElement( 'canvas' );\n\tconst width = size; // power of 2 required for wrapping\n\tconst height = size;\n\tcanvas.width = width;\n\tcanvas.height = height;\n\n\tconst ctx = canvas.getContext( '2d' );\n\tctx.lineWidth = 1;\n\tctx.strokeStyle = 'rgb( 63, 63, 63 )';\n\tctx.textAlign = 'center';\n\n\t// paint background white\n\n\tctx.fillStyle = 'rgb( 255, 255, 255 )';\n\tctx.fillRect( 0, 0, width, height );\n\n\tconst index = geometry.index;\n\tconst uvAttribute = geometry.attributes.uv;\n\n\tif ( index ) {\n\n\t\t// indexed geometry\n\n\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\tface[ 0 ] = index.getX( i );\n\t\t\tface[ 1 ] = index.getX( i + 1 );\n\t\t\tface[ 2 ] = index.getX( i + 2 );\n\n\t\t\tuvs[ 0 ].fromBufferAttribute( uvAttribute, face[ 0 ] );\n\t\t\tuvs[ 1 ].fromBufferAttribute( uvAttribute, face[ 1 ] );\n\t\t\tuvs[ 2 ].fromBufferAttribute( uvAttribute, face[ 2 ] );\n\n\t\t\tprocessFace( face, uvs, i / 3 );\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed geometry\n\n\t\tfor ( let i = 0, il = uvAttribute.count; i < il; i += 3 ) {\n\n\t\t\tface[ 0 ] = i;\n\t\t\tface[ 1 ] = i + 1;\n\t\t\tface[ 2 ] = i + 2;\n\n\t\t\tuvs[ 0 ].fromBufferAttribute( uvAttribute, face[ 0 ] );\n\t\t\tuvs[ 1 ].fromBufferAttribute( uvAttribute, face[ 1 ] );\n\t\t\tuvs[ 2 ].fromBufferAttribute( uvAttribute, face[ 2 ] );\n\n\t\t\tprocessFace( face, uvs, i / 3 );\n\n\t\t}\n\n\t}\n\n\treturn canvas;\n\n\tfunction processFace( face, uvs, index ) {\n\n\t\t// draw contour of face\n\n\t\tctx.beginPath();\n\n\t\ta.set( 0, 0 );\n\n\t\tfor ( let j = 0, jl = uvs.length; j < jl; j ++ ) {\n\n\t\t\tconst uv = uvs[ j ];\n\n\t\t\ta.x += uv.x;\n\t\t\ta.y += uv.y;\n\n\t\t\tif ( j === 0 ) {\n\n\t\t\t\tctx.moveTo( uv.x * ( width - 2 ) + 0.5, ( 1 - uv.y ) * ( height - 2 ) + 0.5 );\n\n\t\t\t} else {\n\n\t\t\t\tctx.lineTo( uv.x * ( width - 2 ) + 0.5, ( 1 - uv.y ) * ( height - 2 ) + 0.5 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tctx.closePath();\n\t\tctx.stroke();\n\n\t\t// calculate center of face\n\n\t\ta.divideScalar( uvs.length );\n\n\t\t// label the face number\n\n\t\tctx.font = '18px Arial';\n\t\tctx.fillStyle = 'rgb( 63, 63, 63 )';\n\t\tctx.fillText( index, a.x * width, ( 1 - a.y ) * height );\n\n\t\tif ( a.x > 0.95 ) {\n\n\t\t\t// wrap x // 0.95 is arbitrary\n\n\t\t\tctx.fillText( index, ( a.x % 1 ) * width, ( 1 - a.y ) * height );\n\n\t\t}\n\n\t\t//\n\n\t\tctx.font = '12px Arial';\n\t\tctx.fillStyle = 'rgb( 191, 191, 191 )';\n\n\t\t// label uv edge orders\n\n\t\tfor ( let j = 0, jl = uvs.length; j < jl; j ++ ) {\n\n\t\t\tconst uv = uvs[ j ];\n\t\t\tb.addVectors( a, uv ).divideScalar( 2 );\n\n\t\t\tconst vnum = face[ j ];\n\t\t\tctx.fillText( abc[ j ] + vnum, b.x * width, ( 1 - b.y ) * height );\n\n\t\t\tif ( b.x > 0.95 ) {\n\n\t\t\t\t// wrap x\n\n\t\t\t\tctx.fillText( abc[ j ] + vnum, ( b.x % 1 ) * width, ( 1 - b.y ) * height );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { UVsDebug };\n", "class ARButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showStartAR( /*device*/ ) {\n\n\t\t\tif ( sessionInit.domOverlay === undefined ) {\n\n\t\t\t\tconst overlay = document.createElement( 'div' );\n\t\t\t\toverlay.style.display = 'none';\n\t\t\t\tdocument.body.appendChild( overlay );\n\n\t\t\t\tconst svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n\t\t\t\tsvg.setAttribute( 'width', 38 );\n\t\t\t\tsvg.setAttribute( 'height', 38 );\n\t\t\t\tsvg.style.position = 'absolute';\n\t\t\t\tsvg.style.right = '20px';\n\t\t\t\tsvg.style.top = '20px';\n\t\t\t\tsvg.addEventListener( 'click', function () {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t} );\n\t\t\t\toverlay.appendChild( svg );\n\n\t\t\t\tconst path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n\t\t\t\tpath.setAttribute( 'd', 'M 12,12 L 28,28 M 28,12 12,28' );\n\t\t\t\tpath.setAttribute( 'stroke', '#fff' );\n\t\t\t\tpath.setAttribute( 'stroke-width', 2 );\n\t\t\t\tsvg.appendChild( path );\n\n\t\t\t\tif ( sessionInit.optionalFeatures === undefined ) {\n\n\t\t\t\t\tsessionInit.optionalFeatures = [];\n\n\t\t\t\t}\n\n\t\t\t\tsessionInit.optionalFeatures.push( 'dom-overlay' );\n\t\t\t\tsessionInit.domOverlay = { root: overlay };\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\trenderer.xr.setReferenceSpaceType( 'local' );\n\n\t\t\t\tawait renderer.xr.setSession( session );\n\n\t\t\t\tbutton.textContent = 'STOP AR';\n\t\t\t\tsessionInit.domOverlay.root.style.display = '';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'START AR';\n\t\t\t\tsessionInit.domOverlay.root.style.display = 'none';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START AR';\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( 'immersive-ar', sessionInit ).then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\t\t\tnavigator.xr.offerSession( 'immersive-ar', sessionInit )\n\t\t\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\tnavigator.xr.offerSession( 'immersive-ar', sessionInit )\n\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showARNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'AR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction showARNotAllowed( exception ) {\n\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n\t\t\tbutton.textContent = 'AR NOT ALLOWED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'ARButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-ar' ).then( function ( supported ) {\n\n\t\t\t\tsupported ? showStartAR() : showARNotSupported();\n\n\t\t\t} ).catch( showARNotAllowed );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n}\n\nexport { ARButton };\n", "import { GLTFLoader } from '../loaders/GLTFLoader.js';\n\nconst DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/';\n\nclass XRHandMeshModel {\n\n\tconstructor( handModel, controller, path, handedness, loader = null, onLoad = null ) {\n\n\t\tthis.controller = controller;\n\t\tthis.handModel = handModel;\n\n\t\tthis.bones = [];\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = new GLTFLoader();\n\t\t\tloader.setPath( path || DEFAULT_HAND_PROFILE_PATH );\n\n\t\t}\n\n\t\tloader.load( `${handedness}.glb`, gltf => {\n\n\t\t\tconst object = gltf.scene.children[ 0 ];\n\t\t\tthis.handModel.add( object );\n\n\t\t\tconst mesh = object.getObjectByProperty( 'type', 'SkinnedMesh' );\n\t\t\tmesh.frustumCulled = false;\n\t\t\tmesh.castShadow = true;\n\t\t\tmesh.receiveShadow = true;\n\n\t\t\tconst joints = [\n\t\t\t\t'wrist',\n\t\t\t\t'thumb-metacarpal',\n\t\t\t\t'thumb-phalanx-proximal',\n\t\t\t\t'thumb-phalanx-distal',\n\t\t\t\t'thumb-tip',\n\t\t\t\t'index-finger-metacarpal',\n\t\t\t\t'index-finger-phalanx-proximal',\n\t\t\t\t'index-finger-phalanx-intermediate',\n\t\t\t\t'index-finger-phalanx-distal',\n\t\t\t\t'index-finger-tip',\n\t\t\t\t'middle-finger-metacarpal',\n\t\t\t\t'middle-finger-phalanx-proximal',\n\t\t\t\t'middle-finger-phalanx-intermediate',\n\t\t\t\t'middle-finger-phalanx-distal',\n\t\t\t\t'middle-finger-tip',\n\t\t\t\t'ring-finger-metacarpal',\n\t\t\t\t'ring-finger-phalanx-proximal',\n\t\t\t\t'ring-finger-phalanx-intermediate',\n\t\t\t\t'ring-finger-phalanx-distal',\n\t\t\t\t'ring-finger-tip',\n\t\t\t\t'pinky-finger-metacarpal',\n\t\t\t\t'pinky-finger-phalanx-proximal',\n\t\t\t\t'pinky-finger-phalanx-intermediate',\n\t\t\t\t'pinky-finger-phalanx-distal',\n\t\t\t\t'pinky-finger-tip',\n\t\t\t];\n\n\t\t\tjoints.forEach( jointName => {\n\n\t\t\t\tconst bone = object.getObjectByName( jointName );\n\n\t\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\t\tbone.jointName = jointName;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( `Couldn't find ${jointName} in ${handedness} hand mesh` );\n\n\t\t\t\t}\n\n\t\t\t\tthis.bones.push( bone );\n\n\t\t\t} );\n\n\t\t\tif ( onLoad ) onLoad( object );\n\n\t\t} );\n\n\t}\n\n\tupdateMesh() {\n\n\t\t// XR Joints\n\t\tconst XRJoints = this.controller.joints;\n\n\t\tfor ( let i = 0; i < this.bones.length; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tconst XRJoint = XRJoints[ bone.jointName ];\n\n\t\t\t\tif ( XRJoint.visible ) {\n\n\t\t\t\t\tconst position = XRJoint.position;\n\n\t\t\t\t\tbone.position.copy( position );\n\t\t\t\t\tbone.quaternion.copy( XRJoint.quaternion );\n\t\t\t\t\t// bone.scale.setScalar( XRJoint.jointRadius || defaultRadius );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { XRHandMeshModel };\n", "import { Object3D, Sphere, Box3 } from 'three';\nimport { XRHandMeshModel } from './XRHandMeshModel.js';\n\nconst TOUCH_RADIUS = 0.01;\nconst POINTING_JOINT = 'index-finger-tip';\n\nclass OculusHandModel extends Object3D {\n\n\tconstructor( controller, loader = null, onLoad = null ) {\n\n\t\tsuper();\n\n\t\tthis.controller = controller;\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\t\tthis.loader = loader;\n\t\tthis.onLoad = onLoad;\n\n\t\tthis.mesh = null;\n\n\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\tconst xrInputSource = event.data;\n\n\t\t\tif ( xrInputSource.hand && ! this.motionController ) {\n\n\t\t\t\tthis.xrInputSource = xrInputSource;\n\n\t\t\t\tthis.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness, this.loader, this.onLoad );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\tthis.clear();\n\t\t\tthis.motionController = null;\n\n\t\t} );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.motionController ) {\n\n\t\t\tthis.motionController.updateMesh();\n\n\t\t}\n\n\t}\n\n\tgetPointerPosition() {\n\n\t\tconst indexFingerTip = this.controller.joints[ POINTING_JOINT ];\n\t\tif ( indexFingerTip ) {\n\n\t\t\treturn indexFingerTip.position;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\tintersectBoxObject( boxObject ) {\n\n\t\tconst pointerPosition = this.getPointerPosition();\n\t\tif ( pointerPosition ) {\n\n\t\t\tconst indexSphere = new Sphere( pointerPosition, TOUCH_RADIUS );\n\t\t\tconst box = new Box3().setFromObject( boxObject );\n\t\t\treturn indexSphere.intersectsBox( box );\n\n\t\t} else {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tcheckButton( button ) {\n\n\t\tif ( this.intersectBoxObject( button ) ) {\n\n\t\t\tbutton.onPress();\n\n\t\t} else {\n\n\t\t\tbutton.onClear();\n\n\t\t}\n\n\t\tif ( button.isPressed() ) {\n\n\t\t\tbutton.whilePressed();\n\n\t\t}\n\n\t}\n\n}\n\nexport { OculusHandModel };\n", "import * as THREE from 'three';\n\nconst PINCH_MAX = 0.05;\nconst PINCH_THRESHOLD = 0.02;\nconst PINCH_MIN = 0.01;\nconst POINTER_ADVANCE_MAX = 0.02;\nconst POINTER_OPACITY_MAX = 1;\nconst POINTER_OPACITY_MIN = 0.4;\nconst POINTER_FRONT_RADIUS = 0.002;\nconst POINTER_REAR_RADIUS = 0.01;\nconst POINTER_REAR_RADIUS_MIN = 0.003;\nconst POINTER_LENGTH = 0.035;\nconst POINTER_SEGMENTS = 16;\nconst POINTER_RINGS = 12;\nconst POINTER_HEMISPHERE_ANGLE = 110;\nconst YAXIS = /* @__PURE__ */ new THREE.Vector3( 0, 1, 0 );\nconst ZAXIS = /* @__PURE__ */ new THREE.Vector3( 0, 0, 1 );\n\nconst CURSOR_RADIUS = 0.02;\nconst CURSOR_MAX_DISTANCE = 1.5;\n\nclass OculusHandPointerModel extends THREE.Object3D {\n\n\tconstructor( hand, controller ) {\n\n\t\tsuper();\n\n\t\tthis.hand = hand;\n\t\tthis.controller = controller;\n\n\t\t// Unused\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\t\tthis.mesh = null;\n\n\t\tthis.pointerGeometry = null;\n\t\tthis.pointerMesh = null;\n\t\tthis.pointerObject = null;\n\n\t\tthis.pinched = false;\n\t\tthis.attached = false;\n\n\t\tthis.cursorObject = null;\n\n\t\tthis.raycaster = null;\n\n\t\tthis._onConnected = this._onConnected.bind( this );\n\t\tthis._onDisconnected = this._onDisconnected.bind( this );\n\t\tthis.hand.addEventListener( 'connected', this._onConnected );\n\t\tthis.hand.addEventListener( 'disconnected', this._onDisconnected );\n\n\t}\n\n\t_onConnected( event ) {\n\n\t\tconst xrInputSource = event.data;\n\t\tif ( xrInputSource.hand ) {\n\n\t\t\tthis.visible = true;\n\t\t\tthis.xrInputSource = xrInputSource;\n\n\t\t\tthis.createPointer();\n\n\t\t}\n\n\t}\n\n\t_onDisconnected() {\n\n\t\tthis.visible = false;\n\t\tthis.xrInputSource = null;\n\n\t\tif ( this.pointerGeometry ) this.pointerGeometry.dispose();\n\t\tif ( this.pointerMesh && this.pointerMesh.material ) this.pointerMesh.material.dispose();\n\n\t\tthis.clear();\n\n\t}\n\n\t_drawVerticesRing( vertices, baseVector, ringIndex ) {\n\n\t\tconst segmentVector = baseVector.clone();\n\t\tfor ( let i = 0; i < POINTER_SEGMENTS; i ++ ) {\n\n\t\t\tsegmentVector.applyAxisAngle( ZAXIS, ( Math.PI * 2 ) / POINTER_SEGMENTS );\n\t\t\tconst vid = ringIndex * POINTER_SEGMENTS + i;\n\t\t\tvertices[ 3 * vid ] = segmentVector.x;\n\t\t\tvertices[ 3 * vid + 1 ] = segmentVector.y;\n\t\t\tvertices[ 3 * vid + 2 ] = segmentVector.z;\n\n\t\t}\n\n\t}\n\n\t_updatePointerVertices( rearRadius ) {\n\n\t\tconst vertices = this.pointerGeometry.attributes.position.array;\n\t\t// first ring for front face\n\t\tconst frontFaceBase = new THREE.Vector3(\n\t\t\tPOINTER_FRONT_RADIUS,\n\t\t\t0,\n\t\t\t- 1 * ( POINTER_LENGTH - rearRadius )\n\t\t);\n\t\tthis._drawVerticesRing( vertices, frontFaceBase, 0 );\n\n\t\t// rings for rear hemisphere\n\t\tconst rearBase = new THREE.Vector3(\n\t\t\tMath.sin( ( Math.PI * POINTER_HEMISPHERE_ANGLE ) / 180 ) * rearRadius,\n\t\t\tMath.cos( ( Math.PI * POINTER_HEMISPHERE_ANGLE ) / 180 ) * rearRadius,\n\t\t\t0\n\t\t);\n\t\tfor ( let i = 0; i < POINTER_RINGS; i ++ ) {\n\n\t\t\tthis._drawVerticesRing( vertices, rearBase, i + 1 );\n\t\t\trearBase.applyAxisAngle(\n\t\t\t\tYAXIS,\n\t\t\t\t( Math.PI * POINTER_HEMISPHERE_ANGLE ) / 180 / ( POINTER_RINGS * - 2 )\n\t\t\t);\n\n\t\t}\n\n\t\t// front and rear face center vertices\n\t\tconst frontCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS );\n\t\tconst rearCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS ) + 1;\n\t\tconst frontCenter = new THREE.Vector3(\n\t\t\t0,\n\t\t\t0,\n\t\t\t- 1 * ( POINTER_LENGTH - rearRadius )\n\t\t);\n\t\tvertices[ frontCenterIndex * 3 ] = frontCenter.x;\n\t\tvertices[ frontCenterIndex * 3 + 1 ] = frontCenter.y;\n\t\tvertices[ frontCenterIndex * 3 + 2 ] = frontCenter.z;\n\t\tconst rearCenter = new THREE.Vector3( 0, 0, rearRadius );\n\t\tvertices[ rearCenterIndex * 3 ] = rearCenter.x;\n\t\tvertices[ rearCenterIndex * 3 + 1 ] = rearCenter.y;\n\t\tvertices[ rearCenterIndex * 3 + 2 ] = rearCenter.z;\n\n\t\tthis.pointerGeometry.setAttribute(\n\t\t\t'position',\n\t\t\tnew THREE.Float32BufferAttribute( vertices, 3 )\n\t\t);\n\t\t// verticesNeedUpdate = true;\n\n\t}\n\n\tcreatePointer() {\n\n\t\tlet i, j;\n\t\tconst vertices = new Array(\n\t\t\t( ( POINTER_RINGS + 1 ) * POINTER_SEGMENTS + 2 ) * 3\n\t\t).fill( 0 );\n\t\t// const vertices = [];\n\t\tconst indices = [];\n\t\tthis.pointerGeometry = new THREE.BufferGeometry();\n\n\t\tthis.pointerGeometry.setAttribute(\n\t\t\t'position',\n\t\t\tnew THREE.Float32BufferAttribute( vertices, 3 )\n\t\t);\n\n\t\tthis._updatePointerVertices( POINTER_REAR_RADIUS );\n\n\t\t// construct faces to connect rings\n\t\tfor ( i = 0; i < POINTER_RINGS; i ++ ) {\n\n\t\t\tfor ( j = 0; j < POINTER_SEGMENTS - 1; j ++ ) {\n\n\t\t\t\tindices.push(\n\t\t\t\t\ti * POINTER_SEGMENTS + j,\n\t\t\t\t\ti * POINTER_SEGMENTS + j + 1,\n\t\t\t\t\t( i + 1 ) * POINTER_SEGMENTS + j\n\t\t\t\t);\n\t\t\t\tindices.push(\n\t\t\t\t\ti * POINTER_SEGMENTS + j + 1,\n\t\t\t\t\t( i + 1 ) * POINTER_SEGMENTS + j + 1,\n\t\t\t\t\t( i + 1 ) * POINTER_SEGMENTS + j\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tindices.push(\n\t\t\t\t( i + 1 ) * POINTER_SEGMENTS - 1,\n\t\t\t\ti * POINTER_SEGMENTS,\n\t\t\t\t( i + 2 ) * POINTER_SEGMENTS - 1\n\t\t\t);\n\t\t\tindices.push(\n\t\t\t\ti * POINTER_SEGMENTS,\n\t\t\t\t( i + 1 ) * POINTER_SEGMENTS,\n\t\t\t\t( i + 2 ) * POINTER_SEGMENTS - 1\n\t\t\t);\n\n\t\t}\n\n\t\t// construct front and rear face\n\t\tconst frontCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS );\n\t\tconst rearCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS ) + 1;\n\n\t\tfor ( i = 0; i < POINTER_SEGMENTS - 1; i ++ ) {\n\n\t\t\tindices.push( frontCenterIndex, i + 1, i );\n\t\t\tindices.push(\n\t\t\t\trearCenterIndex,\n\t\t\t\ti + POINTER_SEGMENTS * POINTER_RINGS,\n\t\t\t\ti + POINTER_SEGMENTS * POINTER_RINGS + 1\n\t\t\t);\n\n\t\t}\n\n\t\tindices.push( frontCenterIndex, 0, POINTER_SEGMENTS - 1 );\n\t\tindices.push(\n\t\t\trearCenterIndex,\n\t\t\tPOINTER_SEGMENTS * ( POINTER_RINGS + 1 ) - 1,\n\t\t\tPOINTER_SEGMENTS * POINTER_RINGS\n\t\t);\n\n\t\tconst material = new THREE.MeshBasicMaterial();\n\t\tmaterial.transparent = true;\n\t\tmaterial.opacity = POINTER_OPACITY_MIN;\n\n\t\tthis.pointerGeometry.setIndex( indices );\n\n\t\tthis.pointerMesh = new THREE.Mesh( this.pointerGeometry, material );\n\n\t\tthis.pointerMesh.position.set( 0, 0, - 1 * POINTER_REAR_RADIUS );\n\t\tthis.pointerObject = new THREE.Object3D();\n\t\tthis.pointerObject.add( this.pointerMesh );\n\n\t\tthis.raycaster = new THREE.Raycaster();\n\n\t\t// create cursor\n\t\tconst cursorGeometry = new THREE.SphereGeometry( CURSOR_RADIUS, 10, 10 );\n\t\tconst cursorMaterial = new THREE.MeshBasicMaterial();\n\t\tcursorMaterial.transparent = true;\n\t\tcursorMaterial.opacity = POINTER_OPACITY_MIN;\n\n\t\tthis.cursorObject = new THREE.Mesh( cursorGeometry, cursorMaterial );\n\t\tthis.pointerObject.add( this.cursorObject );\n\n\t\tthis.add( this.pointerObject );\n\n\t}\n\n\t_updateRaycaster() {\n\n\t\tif ( this.raycaster ) {\n\n\t\t\tconst pointerMatrix = this.pointerObject.matrixWorld;\n\t\t\tconst tempMatrix = new THREE.Matrix4();\n\t\t\ttempMatrix.identity().extractRotation( pointerMatrix );\n\t\t\tthis.raycaster.ray.origin.setFromMatrixPosition( pointerMatrix );\n\t\t\tthis.raycaster.ray.direction.set( 0, 0, - 1 ).applyMatrix4( tempMatrix );\n\n\t\t}\n\n\t}\n\n\t_updatePointer() {\n\n\t\tthis.pointerObject.visible = this.controller.visible;\n\t\tconst indexTip = this.hand.joints[ 'index-finger-tip' ];\n\t\tconst thumbTip = this.hand.joints[ 'thumb-tip' ];\n\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\t\tconst position = indexTip.position\n\t\t\t.clone()\n\t\t\t.add( thumbTip.position )\n\t\t\t.multiplyScalar( 0.5 );\n\t\tthis.pointerObject.position.copy( position );\n\t\tthis.pointerObject.quaternion.copy( this.controller.quaternion );\n\n\t\tthis.pinched = distance <= PINCH_THRESHOLD;\n\n\t\tconst pinchScale = ( distance - PINCH_MIN ) / ( PINCH_MAX - PINCH_MIN );\n\t\tconst focusScale = ( distance - PINCH_MIN ) / ( PINCH_THRESHOLD - PINCH_MIN );\n\t\tif ( pinchScale > 1 ) {\n\n\t\t\tthis._updatePointerVertices( POINTER_REAR_RADIUS );\n\t\t\tthis.pointerMesh.position.set( 0, 0, - 1 * POINTER_REAR_RADIUS );\n\t\t\tthis.pointerMesh.material.opacity = POINTER_OPACITY_MIN;\n\n\t\t} else if ( pinchScale > 0 ) {\n\n\t\t\tconst rearRadius =\n ( POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN ) * pinchScale +\n POINTER_REAR_RADIUS_MIN;\n\t\t\tthis._updatePointerVertices( rearRadius );\n\t\t\tif ( focusScale < 1 ) {\n\n\t\t\t\tthis.pointerMesh.position.set(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t- 1 * rearRadius - ( 1 - focusScale ) * POINTER_ADVANCE_MAX\n\t\t\t\t);\n\t\t\t\tthis.pointerMesh.material.opacity =\n POINTER_OPACITY_MIN +\n ( 1 - focusScale ) * ( POINTER_OPACITY_MAX - POINTER_OPACITY_MIN );\n\n\t\t\t} else {\n\n\t\t\t\tthis.pointerMesh.position.set( 0, 0, - 1 * rearRadius );\n\t\t\t\tthis.pointerMesh.material.opacity = POINTER_OPACITY_MIN;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis._updatePointerVertices( POINTER_REAR_RADIUS_MIN );\n\t\t\tthis.pointerMesh.position.set(\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t- 1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX\n\t\t\t);\n\t\t\tthis.pointerMesh.material.opacity = POINTER_OPACITY_MAX;\n\n\t\t}\n\n\t\tthis.cursorObject.material.opacity = this.pointerMesh.material.opacity;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\t\tif ( this.pointerGeometry ) {\n\n\t\t\tthis._updatePointer();\n\t\t\tthis._updateRaycaster();\n\n\t\t}\n\n\t}\n\n\tisPinched() {\n\n\t\treturn this.pinched;\n\n\t}\n\n\tsetAttached( attached ) {\n\n\t\tthis.attached = attached;\n\n\t}\n\n\tisAttached() {\n\n\t\treturn this.attached;\n\n\t}\n\n\tintersectObject( object, recursive = true ) {\n\n\t\tif ( this.raycaster ) {\n\n\t\t\treturn this.raycaster.intersectObject( object, recursive );\n\n\t\t}\n\n\t}\n\n\tintersectObjects( objects, recursive = true ) {\n\n\t\tif ( this.raycaster ) {\n\n\t\t\treturn this.raycaster.intersectObjects( objects, recursive );\n\n\t\t}\n\n\t}\n\n\tcheckIntersections( objects, recursive = false ) {\n\n\t\tif ( this.raycaster && ! this.attached ) {\n\n\t\t\tconst intersections = this.raycaster.intersectObjects( objects, recursive );\n\t\t\tconst direction = new THREE.Vector3( 0, 0, - 1 );\n\t\t\tif ( intersections.length > 0 ) {\n\n\t\t\t\tconst intersection = intersections[ 0 ];\n\t\t\t\tconst distance = intersection.distance;\n\t\t\t\tthis.cursorObject.position.copy( direction.multiplyScalar( distance ) );\n\n\t\t\t} else {\n\n\t\t\t\tthis.cursorObject.position.copy( direction.multiplyScalar( CURSOR_MAX_DISTANCE ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetCursor( distance ) {\n\n\t\tconst direction = new THREE.Vector3( 0, 0, - 1 );\n\t\tif ( this.raycaster && ! this.attached ) {\n\n\t\t\tthis.cursorObject.position.copy( direction.multiplyScalar( distance ) );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis._onDisconnected();\n\t\tthis.hand.removeEventListener( 'connected', this._onConnected );\n\t\tthis.hand.removeEventListener( 'disconnected', this._onDisconnected );\n\n\t}\n\n}\n\nexport { OculusHandPointerModel };\n", "import * as THREE from 'three';\n\nfunction createText( message, height ) {\n\n\tconst canvas = document.createElement( 'canvas' );\n\tconst context = canvas.getContext( '2d' );\n\tlet metrics = null;\n\tconst textHeight = 100;\n\tcontext.font = 'normal ' + textHeight + 'px Arial';\n\tmetrics = context.measureText( message );\n\tconst textWidth = metrics.width;\n\tcanvas.width = textWidth;\n\tcanvas.height = textHeight;\n\tcontext.font = 'normal ' + textHeight + 'px Arial';\n\tcontext.textAlign = 'center';\n\tcontext.textBaseline = 'middle';\n\tcontext.fillStyle = '#ffffff';\n\tcontext.fillText( message, textWidth / 2, textHeight / 2 );\n\n\tconst texture = new THREE.Texture( canvas );\n\ttexture.needsUpdate = true;\n\n\tconst material = new THREE.MeshBasicMaterial( {\n\t\tcolor: 0xffffff,\n\t\tside: THREE.DoubleSide,\n\t\tmap: texture,\n\t\ttransparent: true,\n\t} );\n\tconst geometry = new THREE.PlaneGeometry(\n\t\t( height * textWidth ) / textHeight,\n\t\theight\n\t);\n\tconst plane = new THREE.Mesh( geometry, material );\n\treturn plane;\n\n}\n\nexport { createText };\n", "class VRButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showEnterVR( /*device*/ ) {\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\tawait renderer.xr.setSession( session );\n\t\t\t\tbutton.textContent = 'EXIT VR';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'ENTER VR';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'ENTER VR';\n\n\t\t\t// WebXR's requestReferenceSpace only works if the corresponding feature\n\t\t\t// was requested at session creation time. For simplicity, just ask for\n\t\t\t// the interesting ones as optional features, but be aware that the\n\t\t\t// requestReferenceSpace call will fail if it turns out to be unavailable.\n\t\t\t// ('local' is always available for immersive sessions and doesn't need to\n\t\t\t// be requested separately.)\n\n\t\t\tconst sessionOptions = {\n\t\t\t\t...sessionInit,\n\t\t\t\toptionalFeatures: [\n\t\t\t\t\t'local-floor',\n\t\t\t\t\t'bounded-floor',\n\t\t\t\t\t'layers',\n\t\t\t\t\t...( sessionInit.optionalFeatures || [] )\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( 'immersive-vr', sessionOptions ).then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\t\t\tnavigator.xr.offerSession( 'immersive-vr', sessionOptions )\n\t\t\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\tnavigator.xr.offerSession( 'immersive-vr', sessionOptions )\n\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showWebXRNotFound() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'VR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction showVRNotAllowed( exception ) {\n\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n\t\t\tbutton.textContent = 'VR NOT ALLOWED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'VRButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-vr' ).then( function ( supported ) {\n\n\t\t\t\tsupported ? showEnterVR() : showWebXRNotFound();\n\n\t\t\t\tif ( supported && VRButton.xrSessionIsGranted ) {\n\n\t\t\t\t\tbutton.click();\n\n\t\t\t\t}\n\n\t\t\t} ).catch( showVRNotAllowed );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n\tstatic registerSessionGrantedListener() {\n\n\t\tif ( typeof navigator !== 'undefined' && 'xr' in navigator ) {\n\n\t\t\t// WebXRViewer (based on Firefox) has a bug where addEventListener\n\t\t\t// throws a silent exception and aborts execution entirely.\n\t\t\tif ( /WebXRViewer\\//i.test( navigator.userAgent ) ) return;\n\n\t\t\tnavigator.xr.addEventListener( 'sessiongranted', () => {\n\n\t\t\t\tVRButton.xrSessionIsGranted = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nVRButton.xrSessionIsGranted = false;\nVRButton.registerSessionGrantedListener();\n\nexport { VRButton };\n", "class XRButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showStartXR( mode ) {\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\tawait renderer.xr.setSession( session );\n\n\t\t\t\tbutton.textContent = 'STOP XR';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'START XR';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START XR';\n\n\t\t\tconst sessionOptions = {\n\t\t\t\t...sessionInit,\n\t\t\t\toptionalFeatures: [\n\t\t\t\t\t'local-floor',\n\t\t\t\t\t'bounded-floor',\n\t\t\t\t\t'layers',\n\t\t\t\t\t...( sessionInit.optionalFeatures || [] )\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( mode, sessionOptions )\n\t\t\t\t\t\t.then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\t\t\tnavigator.xr.offerSession( mode, sessionOptions )\n\t\t\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\tnavigator.xr.offerSession( mode, sessionOptions )\n\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showXRNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'XR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction showXRNotAllowed( exception ) {\n\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n\t\t\tbutton.textContent = 'XR NOT ALLOWED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'XRButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-ar' )\n\t\t\t\t.then( function ( supported ) {\n\n\t\t\t\t\tif ( supported ) {\n\n\t\t\t\t\t\tshowStartXR( 'immersive-ar' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnavigator.xr.isSessionSupported( 'immersive-vr' )\n\t\t\t\t\t\t\t.then( function ( supported ) {\n\n\t\t\t\t\t\t\t\tif ( supported ) {\n\n\t\t\t\t\t\t\t\t\tshowStartXR( 'immersive-vr' );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tshowXRNotSupported();\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} ).catch( showXRNotAllowed );\n\n\t\t\t\t\t}\n\n\t\t\t\t} ).catch( showXRNotAllowed );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n}\n\nexport { XRButton };\n", "/**\n * @webxr-input-profiles/motion-controllers 1.0.0 https://github.com/immersive-web/webxr-input-profiles\n */\n\nconst Constants = {\n Handedness: Object.freeze({\n NONE: 'none',\n LEFT: 'left',\n RIGHT: 'right'\n }),\n\n ComponentState: Object.freeze({\n DEFAULT: 'default',\n TOUCHED: 'touched',\n PRESSED: 'pressed'\n }),\n\n ComponentProperty: Object.freeze({\n BUTTON: 'button',\n X_AXIS: 'xAxis',\n Y_AXIS: 'yAxis',\n STATE: 'state'\n }),\n\n ComponentType: Object.freeze({\n TRIGGER: 'trigger',\n SQUEEZE: 'squeeze',\n TOUCHPAD: 'touchpad',\n THUMBSTICK: 'thumbstick',\n BUTTON: 'button'\n }),\n\n ButtonTouchThreshold: 0.05,\n\n AxisTouchThreshold: 0.1,\n\n VisualResponseProperty: Object.freeze({\n TRANSFORM: 'transform',\n VISIBILITY: 'visibility'\n })\n};\n\n/**\n * @description Static helper function to fetch a JSON file and turn it into a JS object\n * @param {string} path - Path to JSON file to be fetched\n */\nasync function fetchJsonFile(path) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(response.statusText);\n } else {\n return response.json();\n }\n}\n\nasync function fetchProfilesList(basePath) {\n if (!basePath) {\n throw new Error('No basePath supplied');\n }\n\n const profileListFileName = 'profilesList.json';\n const profilesList = await fetchJsonFile(`${basePath}/${profileListFileName}`);\n return profilesList;\n}\n\nasync function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) {\n if (!xrInputSource) {\n throw new Error('No xrInputSource supplied');\n }\n\n if (!basePath) {\n throw new Error('No basePath supplied');\n }\n\n // Get the list of profiles\n const supportedProfilesList = await fetchProfilesList(basePath);\n\n // Find the relative path to the first requested profile that is recognized\n let match;\n xrInputSource.profiles.some((profileId) => {\n const supportedProfile = supportedProfilesList[profileId];\n if (supportedProfile) {\n match = {\n profileId,\n profilePath: `${basePath}/${supportedProfile.path}`,\n deprecated: !!supportedProfile.deprecated\n };\n }\n return !!match;\n });\n\n if (!match) {\n if (!defaultProfile) {\n throw new Error('No matching profile name found');\n }\n\n const supportedProfile = supportedProfilesList[defaultProfile];\n if (!supportedProfile) {\n throw new Error(`No matching profile name found and default profile \"${defaultProfile}\" missing.`);\n }\n\n match = {\n profileId: defaultProfile,\n profilePath: `${basePath}/${supportedProfile.path}`,\n deprecated: !!supportedProfile.deprecated\n };\n }\n\n const profile = await fetchJsonFile(match.profilePath);\n\n let assetPath;\n if (getAssetPath) {\n let layout;\n if (xrInputSource.handedness === 'any') {\n layout = profile.layouts[Object.keys(profile.layouts)[0]];\n } else {\n layout = profile.layouts[xrInputSource.handedness];\n }\n if (!layout) {\n throw new Error(\n `No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}`\n );\n }\n\n if (layout.assetPath) {\n assetPath = match.profilePath.replace('profile.json', layout.assetPath);\n }\n }\n\n return { profile, assetPath };\n}\n\n/** @constant {Object} */\nconst defaultComponentValues = {\n xAxis: 0,\n yAxis: 0,\n button: 0,\n state: Constants.ComponentState.DEFAULT\n};\n\n/**\n * @description Converts an X, Y coordinate from the range -1 to 1 (as reported by the Gamepad\n * API) to the range 0 to 1 (for interpolation). Also caps the X, Y values to be bounded within\n * a circle. This ensures that thumbsticks are not animated outside the bounds of their physical\n * range of motion and touchpads do not report touch locations off their physical bounds.\n * @param {number} x The original x coordinate in the range -1 to 1\n * @param {number} y The original y coordinate in the range -1 to 1\n */\nfunction normalizeAxes(x = 0, y = 0) {\n let xAxis = x;\n let yAxis = y;\n\n // Determine if the point is outside the bounds of the circle\n // and, if so, place it on the edge of the circle\n const hypotenuse = Math.sqrt((x * x) + (y * y));\n if (hypotenuse > 1) {\n const theta = Math.atan2(y, x);\n xAxis = Math.cos(theta);\n yAxis = Math.sin(theta);\n }\n\n // Scale and move the circle so values are in the interpolation range. The circle's origin moves\n // from (0, 0) to (0.5, 0.5). The circle's radius scales from 1 to be 0.5.\n const result = {\n normalizedXAxis: (xAxis * 0.5) + 0.5,\n normalizedYAxis: (yAxis * 0.5) + 0.5\n };\n return result;\n}\n\n/**\n * Contains the description of how the 3D model should visually respond to a specific user input.\n * This is accomplished by initializing the object with the name of a node in the 3D model and\n * property that need to be modified in response to user input, the name of the nodes representing\n * the allowable range of motion, and the name of the input which triggers the change. In response\n * to the named input changing, this object computes the appropriate weighting to use for\n * interpolating between the range of motion nodes.\n */\nclass VisualResponse {\n constructor(visualResponseDescription) {\n this.componentProperty = visualResponseDescription.componentProperty;\n this.states = visualResponseDescription.states;\n this.valueNodeName = visualResponseDescription.valueNodeName;\n this.valueNodeProperty = visualResponseDescription.valueNodeProperty;\n\n if (this.valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM) {\n this.minNodeName = visualResponseDescription.minNodeName;\n this.maxNodeName = visualResponseDescription.maxNodeName;\n }\n\n // Initializes the response's current value based on default data\n this.value = 0;\n this.updateFromComponent(defaultComponentValues);\n }\n\n /**\n * Computes the visual response's interpolation weight based on component state\n * @param {Object} componentValues - The component from which to update\n * @param {number} xAxis - The reported X axis value of the component\n * @param {number} yAxis - The reported Y axis value of the component\n * @param {number} button - The reported value of the component's button\n * @param {string} state - The component's active state\n */\n updateFromComponent({\n xAxis, yAxis, button, state\n }) {\n const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis);\n switch (this.componentProperty) {\n case Constants.ComponentProperty.X_AXIS:\n this.value = (this.states.includes(state)) ? normalizedXAxis : 0.5;\n break;\n case Constants.ComponentProperty.Y_AXIS:\n this.value = (this.states.includes(state)) ? normalizedYAxis : 0.5;\n break;\n case Constants.ComponentProperty.BUTTON:\n this.value = (this.states.includes(state)) ? button : 0;\n break;\n case Constants.ComponentProperty.STATE:\n if (this.valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY) {\n this.value = (this.states.includes(state));\n } else {\n this.value = this.states.includes(state) ? 1.0 : 0.0;\n }\n break;\n default:\n throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);\n }\n }\n}\n\nclass Component {\n /**\n * @param {Object} componentId - Id of the component\n * @param {Object} componentDescription - Description of the component to be created\n */\n constructor(componentId, componentDescription) {\n if (!componentId\n || !componentDescription\n || !componentDescription.visualResponses\n || !componentDescription.gamepadIndices\n || Object.keys(componentDescription.gamepadIndices).length === 0) {\n throw new Error('Invalid arguments supplied');\n }\n\n this.id = componentId;\n this.type = componentDescription.type;\n this.rootNodeName = componentDescription.rootNodeName;\n this.touchPointNodeName = componentDescription.touchPointNodeName;\n\n // Build all the visual responses for this component\n this.visualResponses = {};\n Object.keys(componentDescription.visualResponses).forEach((responseName) => {\n const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]);\n this.visualResponses[responseName] = visualResponse;\n });\n\n // Set default values\n this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices);\n\n this.values = {\n state: Constants.ComponentState.DEFAULT,\n button: (this.gamepadIndices.button !== undefined) ? 0 : undefined,\n xAxis: (this.gamepadIndices.xAxis !== undefined) ? 0 : undefined,\n yAxis: (this.gamepadIndices.yAxis !== undefined) ? 0 : undefined\n };\n }\n\n get data() {\n const data = { id: this.id, ...this.values };\n return data;\n }\n\n /**\n * @description Poll for updated data based on current gamepad state\n * @param {Object} gamepad - The gamepad object from which the component data should be polled\n */\n updateFromGamepad(gamepad) {\n // Set the state to default before processing other data sources\n this.values.state = Constants.ComponentState.DEFAULT;\n\n // Get and normalize button\n if (this.gamepadIndices.button !== undefined\n && gamepad.buttons.length > this.gamepadIndices.button) {\n const gamepadButton = gamepad.buttons[this.gamepadIndices.button];\n this.values.button = gamepadButton.value;\n this.values.button = (this.values.button < 0) ? 0 : this.values.button;\n this.values.button = (this.values.button > 1) ? 1 : this.values.button;\n\n // Set the state based on the button\n if (gamepadButton.pressed || this.values.button === 1) {\n this.values.state = Constants.ComponentState.PRESSED;\n } else if (gamepadButton.touched || this.values.button > Constants.ButtonTouchThreshold) {\n this.values.state = Constants.ComponentState.TOUCHED;\n }\n }\n\n // Get and normalize x axis value\n if (this.gamepadIndices.xAxis !== undefined\n && gamepad.axes.length > this.gamepadIndices.xAxis) {\n this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis];\n this.values.xAxis = (this.values.xAxis < -1) ? -1 : this.values.xAxis;\n this.values.xAxis = (this.values.xAxis > 1) ? 1 : this.values.xAxis;\n\n // If the state is still default, check if the xAxis makes it touched\n if (this.values.state === Constants.ComponentState.DEFAULT\n && Math.abs(this.values.xAxis) > Constants.AxisTouchThreshold) {\n this.values.state = Constants.ComponentState.TOUCHED;\n }\n }\n\n // Get and normalize Y axis value\n if (this.gamepadIndices.yAxis !== undefined\n && gamepad.axes.length > this.gamepadIndices.yAxis) {\n this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis];\n this.values.yAxis = (this.values.yAxis < -1) ? -1 : this.values.yAxis;\n this.values.yAxis = (this.values.yAxis > 1) ? 1 : this.values.yAxis;\n\n // If the state is still default, check if the yAxis makes it touched\n if (this.values.state === Constants.ComponentState.DEFAULT\n && Math.abs(this.values.yAxis) > Constants.AxisTouchThreshold) {\n this.values.state = Constants.ComponentState.TOUCHED;\n }\n }\n\n // Update the visual response weights based on the current component data\n Object.values(this.visualResponses).forEach((visualResponse) => {\n visualResponse.updateFromComponent(this.values);\n });\n }\n}\n\n/**\n * @description Builds a motion controller with components and visual responses based on the\n * supplied profile description. Data is polled from the xrInputSource's gamepad.\n * @author Nell Waliczek / https://github.com/NellWaliczek\n*/\nclass MotionController {\n /**\n * @param {Object} xrInputSource - The XRInputSource to build the MotionController around\n * @param {Object} profile - The best matched profile description for the supplied xrInputSource\n * @param {Object} assetUrl\n */\n constructor(xrInputSource, profile, assetUrl) {\n if (!xrInputSource) {\n throw new Error('No xrInputSource supplied');\n }\n\n if (!profile) {\n throw new Error('No profile supplied');\n }\n\n this.xrInputSource = xrInputSource;\n this.assetUrl = assetUrl;\n this.id = profile.profileId;\n\n // Build child components as described in the profile description\n this.layoutDescription = profile.layouts[xrInputSource.handedness];\n this.components = {};\n Object.keys(this.layoutDescription.components).forEach((componentId) => {\n const componentDescription = this.layoutDescription.components[componentId];\n this.components[componentId] = new Component(componentId, componentDescription);\n });\n\n // Initialize components based on current gamepad state\n this.updateFromGamepad();\n }\n\n get gripSpace() {\n return this.xrInputSource.gripSpace;\n }\n\n get targetRaySpace() {\n return this.xrInputSource.targetRaySpace;\n }\n\n /**\n * @description Returns a subset of component data for simplified debugging\n */\n get data() {\n const data = [];\n Object.values(this.components).forEach((component) => {\n data.push(component.data);\n });\n return data;\n }\n\n /**\n * @description Poll for updated data based on current gamepad state\n */\n updateFromGamepad() {\n Object.values(this.components).forEach((component) => {\n component.updateFromGamepad(this.xrInputSource.gamepad);\n });\n }\n}\n\nexport { Constants, MotionController, fetchProfile, fetchProfilesList };\n", "import {\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tSphereGeometry,\n} from 'three';\n\nimport { GLTFLoader } from '../loaders/GLTFLoader.js';\n\nimport {\n\tConstants as MotionControllerConstants,\n\tfetchProfile,\n\tMotionController\n} from '../libs/motion-controllers.module.js';\n\nconst DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles';\nconst DEFAULT_PROFILE = 'generic-trigger';\n\nclass XRControllerModel extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\n\t}\n\n\tsetEnvironmentMap( envMap ) {\n\n\t\tif ( this.envMap == envMap ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.envMap = envMap;\n\t\tthis.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = this.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Polls data from the XRInputSource and updates the model's components to match\n\t * the real world data\n\t */\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( ! this.motionController ) return;\n\n\t\t// Cause the MotionController to poll the Gamepad for data\n\t\tthis.motionController.updateFromGamepad();\n\n\t\t// Update the 3D model to reflect the button, thumbstick, and touchpad state\n\t\tObject.values( this.motionController.components ).forEach( ( component ) => {\n\n\t\t\t// Update node data based on the visual responses' current states\n\t\t\tObject.values( component.visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\t\tconst { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse;\n\n\t\t\t\t// Skip if the visual response node is not found. No error is needed,\n\t\t\t\t// because it will have been reported at load time.\n\t\t\t\tif ( ! valueNode ) return;\n\n\t\t\t\t// Calculate the new properties based on the weight supplied\n\t\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY ) {\n\n\t\t\t\t\tvalueNode.visible = value;\n\n\t\t\t\t} else if ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\t\tvalueNode.quaternion.slerpQuaternions(\n\t\t\t\t\t\tminNode.quaternion,\n\t\t\t\t\t\tmaxNode.quaternion,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t\tvalueNode.position.lerpVectors(\n\t\t\t\t\t\tminNode.position,\n\t\t\t\t\t\tmaxNode.position,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Walks the model's tree to find the nodes needed to animate the components and\n * saves them to the motionContoller components for use in the frame loop. When\n * touchpads are found, attaches a touch dot to them.\n */\nfunction findNodes( motionController, scene ) {\n\n\t// Loop through the components and find the nodes needed for each components' visual responses\n\tObject.values( motionController.components ).forEach( ( component ) => {\n\n\t\tconst { type, touchPointNodeName, visualResponses } = component;\n\n\t\tif ( type === MotionControllerConstants.ComponentType.TOUCHPAD ) {\n\n\t\t\tcomponent.touchPointNode = scene.getObjectByName( touchPointNodeName );\n\t\t\tif ( component.touchPointNode ) {\n\n\t\t\t\t// Attach a touch dot to the touchpad.\n\t\t\t\tconst sphereGeometry = new SphereGeometry( 0.001 );\n\t\t\t\tconst material = new MeshBasicMaterial( { color: 0x0000FF } );\n\t\t\t\tconst sphere = new Mesh( sphereGeometry, material );\n\t\t\t\tcomponent.touchPointNode.add( sphere );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( `Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Loop through all the visual responses to be applied to this component\n\t\tObject.values( visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\tconst { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse;\n\n\t\t\t// If animating a transform, find the two nodes to be interpolated between.\n\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\tvisualResponse.minNode = scene.getObjectByName( minNodeName );\n\t\t\t\tvisualResponse.maxNode = scene.getObjectByName( maxNodeName );\n\n\t\t\t\t// If the extents cannot be found, skip this animation\n\t\t\t\tif ( ! visualResponse.minNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${minNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! visualResponse.maxNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${maxNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// If the target node cannot be found, skip this animation\n\t\t\tvisualResponse.valueNode = scene.getObjectByName( valueNodeName );\n\t\t\tif ( ! visualResponse.valueNode ) {\n\n\t\t\t\tconsole.warn( `Could not find ${valueNodeName} in the model` );\n\n\t\t\t}\n\n\t\t} );\n\n\t} );\n\n}\n\nfunction addAssetSceneToControllerModel( controllerModel, scene ) {\n\n\t// Find the nodes needed for animation and cache them on the motionController.\n\tfindNodes( controllerModel.motionController, scene );\n\n\t// Apply any environment map that the mesh already has set.\n\tif ( controllerModel.envMap ) {\n\n\t\tscene.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = controllerModel.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t// Add the glTF scene to the controllerModel.\n\tcontrollerModel.add( scene );\n\n}\n\nclass XRControllerModelFactory {\n\n\tconstructor( gltfLoader = null, onLoad = null ) {\n\n\t\tthis.gltfLoader = gltfLoader;\n\t\tthis.path = DEFAULT_PROFILES_PATH;\n\t\tthis._assetCache = {};\n\t\tthis.onLoad = onLoad;\n\n\t\t// If a GLTFLoader wasn't supplied to the constructor create a new one.\n\t\tif ( ! this.gltfLoader ) {\n\n\t\t\tthis.gltfLoader = new GLTFLoader();\n\n\t\t}\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\n\t\treturn this;\n\n\t}\n\n\tcreateControllerModel( controller ) {\n\n\t\tconst controllerModel = new XRControllerModel();\n\t\tlet scene = null;\n\n\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\tconst xrInputSource = event.data;\n\n\t\t\tif ( xrInputSource.targetRayMode !== 'tracked-pointer' || ! xrInputSource.gamepad ) return;\n\n\t\t\tfetchProfile( xrInputSource, this.path, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => {\n\n\t\t\t\tcontrollerModel.motionController = new MotionController(\n\t\t\t\t\txrInputSource,\n\t\t\t\t\tprofile,\n\t\t\t\t\tassetPath\n\t\t\t\t);\n\n\t\t\t\tconst cachedAsset = this._assetCache[ controllerModel.motionController.assetUrl ];\n\t\t\t\tif ( cachedAsset ) {\n\n\t\t\t\t\tscene = cachedAsset.scene.clone();\n\n\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\tif ( this.onLoad ) this.onLoad( scene );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! this.gltfLoader ) {\n\n\t\t\t\t\t\tthrow new Error( 'GLTFLoader not set.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.gltfLoader.setPath( '' );\n\t\t\t\t\tthis.gltfLoader.load( controllerModel.motionController.assetUrl, ( asset ) => {\n\n\t\t\t\t\t\tthis._assetCache[ controllerModel.motionController.assetUrl ] = asset;\n\n\t\t\t\t\t\tscene = asset.scene.clone();\n\n\t\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\t\tif ( this.onLoad ) this.onLoad( scene );\n\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t() => {\n\n\t\t\t\t\t\tthrow new Error( `Asset ${controllerModel.motionController.assetUrl} missing or malformed.` );\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} ).catch( ( err ) => {\n\n\t\t\t\tconsole.warn( err );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\tcontrollerModel.motionController = null;\n\t\t\tcontrollerModel.remove( scene );\n\t\t\tscene = null;\n\n\t\t} );\n\n\t\treturn controllerModel;\n\n\t}\n\n}\n\nexport { XRControllerModelFactory };\n", "import {\n\tDirectionalLight,\n\tGroup,\n\tLightProbe,\n\tWebGLCubeRenderTarget\n} from 'three';\n\nclass SessionLightProbe {\n\n\tconstructor( xrLight, renderer, lightProbe, environmentEstimation, estimationStartCallback ) {\n\n\t\tthis.xrLight = xrLight;\n\t\tthis.renderer = renderer;\n\t\tthis.lightProbe = lightProbe;\n\t\tthis.xrWebGLBinding = null;\n\t\tthis.estimationStartCallback = estimationStartCallback;\n\t\tthis.frameCallback = this.onXRFrame.bind( this );\n\n\t\tconst session = renderer.xr.getSession();\n\n\t\t// If the XRWebGLBinding class is available then we can also query an\n\t\t// estimated reflection cube map.\n\t\tif ( environmentEstimation && 'XRWebGLBinding' in window ) {\n\n\t\t\t// This is the simplest way I know of to initialize a WebGL cubemap in Three.\n\t\t\tconst cubeRenderTarget = new WebGLCubeRenderTarget( 16 );\n\t\t\txrLight.environment = cubeRenderTarget.texture;\n\n\t\t\tconst gl = renderer.getContext();\n\n\t\t\t// Ensure that we have any extensions needed to use the preferred cube map format.\n\t\t\tswitch ( session.preferredReflectionFormat ) {\n\n\t\t\t\tcase 'srgba8':\n\t\t\t\t\tgl.getExtension( 'EXT_sRGB' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rgba16f':\n\t\t\t\t\tgl.getExtension( 'OES_texture_half_float' );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.xrWebGLBinding = new XRWebGLBinding( session, gl );\n\n\t\t\tthis.lightProbe.addEventListener( 'reflectionchange', () => {\n\n\t\t\t\tthis.updateReflection();\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// Start monitoring the XR animation frame loop to look for lighting\n\t\t// estimation changes.\n\t\tsession.requestAnimationFrame( this.frameCallback );\n\n\t}\n\n\tupdateReflection() {\n\n\t\tconst textureProperties = this.renderer.properties.get( this.xrLight.environment );\n\n\t\tif ( textureProperties ) {\n\n\t\t\tconst cubeMap = this.xrWebGLBinding.getReflectionCubeMap( this.lightProbe );\n\n\t\t\tif ( cubeMap ) {\n\n\t\t\t\ttextureProperties.__webglTexture = cubeMap;\n\n\t\t\t\tthis.xrLight.environment.needsPMREMUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tonXRFrame( time, xrFrame ) {\n\n\t\t// If either this obejct or the XREstimatedLight has been destroyed, stop\n\t\t// running the frame loop.\n\t\tif ( ! this.xrLight ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst session = xrFrame.session;\n\t\tsession.requestAnimationFrame( this.frameCallback );\n\n\t\tconst lightEstimate = xrFrame.getLightEstimate( this.lightProbe );\n\t\tif ( lightEstimate ) {\n\n\t\t\t// We can copy the estimate's spherical harmonics array directly into the light probe.\n\t\t\tthis.xrLight.lightProbe.sh.fromArray( lightEstimate.sphericalHarmonicsCoefficients );\n\t\t\tthis.xrLight.lightProbe.intensity = 1.0;\n\n\t\t\t// For the directional light we have to normalize the color and set the scalar as the\n\t\t\t// intensity, since WebXR can return color values that exceed 1.0.\n\t\t\tconst intensityScalar = Math.max( 1.0,\n\t\t\t\tMath.max( lightEstimate.primaryLightIntensity.x,\n\t\t\t\t\tMath.max( lightEstimate.primaryLightIntensity.y,\n\t\t\t\t\t\tlightEstimate.primaryLightIntensity.z ) ) );\n\n\t\t\tthis.xrLight.directionalLight.color.setRGB(\n\t\t\t\tlightEstimate.primaryLightIntensity.x / intensityScalar,\n\t\t\t\tlightEstimate.primaryLightIntensity.y / intensityScalar,\n\t\t\t\tlightEstimate.primaryLightIntensity.z / intensityScalar );\n\t\t\tthis.xrLight.directionalLight.intensity = intensityScalar;\n\t\t\tthis.xrLight.directionalLight.position.copy( lightEstimate.primaryLightDirection );\n\n\t\t\tif ( this.estimationStartCallback ) {\n\n\t\t\t\tthis.estimationStartCallback();\n\t\t\t\tthis.estimationStartCallback = null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.xrLight = null;\n\t\tthis.renderer = null;\n\t\tthis.lightProbe = null;\n\t\tthis.xrWebGLBinding = null;\n\n\t}\n\n}\n\nexport class XREstimatedLight extends Group {\n\n\tconstructor( renderer, environmentEstimation = true ) {\n\n\t\tsuper();\n\n\t\tthis.lightProbe = new LightProbe();\n\t\tthis.lightProbe.intensity = 0;\n\t\tthis.add( this.lightProbe );\n\n\t\tthis.directionalLight = new DirectionalLight();\n\t\tthis.directionalLight.intensity = 0;\n\t\tthis.add( this.directionalLight );\n\n\t\t// Will be set to a cube map in the SessionLightProbe if environment estimation is\n\t\t// available and requested.\n\t\tthis.environment = null;\n\n\t\tlet sessionLightProbe = null;\n\t\tlet estimationStarted = false;\n\t\trenderer.xr.addEventListener( 'sessionstart', () => {\n\n\t\t\tconst session = renderer.xr.getSession();\n\n\t\t\tif ( 'requestLightProbe' in session ) {\n\n\t\t\t\tsession.requestLightProbe( {\n\n\t\t\t\t\treflectionFormat: session.preferredReflectionFormat\n\n\t\t\t\t} ).then( ( probe ) => {\n\n\t\t\t\t\tsessionLightProbe = new SessionLightProbe( this, renderer, probe, environmentEstimation, () => {\n\n\t\t\t\t\t\testimationStarted = true;\n\n\t\t\t\t\t\t// Fired to indicate that the estimated lighting values are now being updated.\n\t\t\t\t\t\tthis.dispatchEvent( { type: 'estimationstart' } );\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} );\n\n\t\trenderer.xr.addEventListener( 'sessionend', () => {\n\n\t\t\tif ( sessionLightProbe ) {\n\n\t\t\t\tsessionLightProbe.dispose();\n\t\t\t\tsessionLightProbe = null;\n\n\t\t\t}\n\n\t\t\tif ( estimationStarted ) {\n\n\t\t\t\t// Fired to indicate that the estimated lighting values are no longer being updated.\n\t\t\t\tthis.dispatchEvent( { type: 'estimationend' } );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Done inline to provide access to sessionLightProbe.\n\t\tthis.dispose = () => {\n\n\t\t\tif ( sessionLightProbe ) {\n\n\t\t\t\tsessionLightProbe.dispose();\n\t\t\t\tsessionLightProbe = null;\n\n\t\t\t}\n\n\t\t\tthis.remove( this.lightProbe );\n\t\t\tthis.lightProbe = null;\n\n\t\t\tthis.remove( this.directionalLight );\n\t\t\tthis.directionalLight = null;\n\n\t\t\tthis.environment = null;\n\n\t\t};\n\n\t}\n\n}\n", "import {\n\tDynamicDrawUsage,\n\tSphereGeometry,\n\tBoxGeometry,\n\tMeshStandardMaterial,\n\tInstancedMesh,\n\tMatrix4,\n\tVector3\n} from 'three';\n\nconst _matrix = new Matrix4();\nconst _vector = new Vector3();\n\nclass XRHandPrimitiveModel {\n\n\tconstructor( handModel, controller, path, handedness, options ) {\n\n\t\tthis.controller = controller;\n\t\tthis.handModel = handModel;\n\t\tthis.envMap = null;\n\n\t\tlet geometry;\n\n\t\tif ( ! options || ! options.primitive || options.primitive === 'sphere' ) {\n\n\t\t\tgeometry = new SphereGeometry( 1, 10, 10 );\n\n\t\t} else if ( options.primitive === 'box' ) {\n\n\t\t\tgeometry = new BoxGeometry( 1, 1, 1 );\n\n\t\t}\n\n\t\tconst material = new MeshStandardMaterial();\n\n\t\tthis.handMesh = new InstancedMesh( geometry, material, 30 );\n\t\tthis.handMesh.frustumCulled = false;\n\t\tthis.handMesh.instanceMatrix.setUsage( DynamicDrawUsage ); // will be updated every frame\n\t\tthis.handMesh.castShadow = true;\n\t\tthis.handMesh.receiveShadow = true;\n\t\tthis.handModel.add( this.handMesh );\n\n\t\tthis.joints = [\n\t\t\t'wrist',\n\t\t\t'thumb-metacarpal',\n\t\t\t'thumb-phalanx-proximal',\n\t\t\t'thumb-phalanx-distal',\n\t\t\t'thumb-tip',\n\t\t\t'index-finger-metacarpal',\n\t\t\t'index-finger-phalanx-proximal',\n\t\t\t'index-finger-phalanx-intermediate',\n\t\t\t'index-finger-phalanx-distal',\n\t\t\t'index-finger-tip',\n\t\t\t'middle-finger-metacarpal',\n\t\t\t'middle-finger-phalanx-proximal',\n\t\t\t'middle-finger-phalanx-intermediate',\n\t\t\t'middle-finger-phalanx-distal',\n\t\t\t'middle-finger-tip',\n\t\t\t'ring-finger-metacarpal',\n\t\t\t'ring-finger-phalanx-proximal',\n\t\t\t'ring-finger-phalanx-intermediate',\n\t\t\t'ring-finger-phalanx-distal',\n\t\t\t'ring-finger-tip',\n\t\t\t'pinky-finger-metacarpal',\n\t\t\t'pinky-finger-phalanx-proximal',\n\t\t\t'pinky-finger-phalanx-intermediate',\n\t\t\t'pinky-finger-phalanx-distal',\n\t\t\t'pinky-finger-tip'\n\t\t];\n\n\t}\n\n\tupdateMesh() {\n\n\t\tconst defaultRadius = 0.008;\n\t\tconst joints = this.controller.joints;\n\n\t\tlet count = 0;\n\n\t\tfor ( let i = 0; i < this.joints.length; i ++ ) {\n\n\t\t\tconst joint = joints[ this.joints[ i ] ];\n\n\t\t\tif ( joint.visible ) {\n\n\t\t\t\t_vector.setScalar( joint.jointRadius || defaultRadius );\n\t\t\t\t_matrix.compose( joint.position, joint.quaternion, _vector );\n\t\t\t\tthis.handMesh.setMatrixAt( i, _matrix );\n\n\t\t\t\tcount ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.handMesh.count = count;\n\t\tthis.handMesh.instanceMatrix.needsUpdate = true;\n\n\t}\n\n}\n\nexport { XRHandPrimitiveModel };\n", "import {\n\tObject3D\n} from 'three';\n\nimport {\n\tXRHandPrimitiveModel\n} from './XRHandPrimitiveModel.js';\n\nimport {\n\tXRHandMeshModel\n} from './XRHandMeshModel.js';\n\nclass XRHandModel extends Object3D {\n\n\tconstructor( controller ) {\n\n\t\tsuper();\n\n\t\tthis.controller = controller;\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\n\t\tthis.mesh = null;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.motionController ) {\n\n\t\t\tthis.motionController.updateMesh();\n\n\t\t}\n\n\t}\n\n}\n\nclass XRHandModelFactory {\n\n\tconstructor( gltfLoader = null, onLoad = null ) {\n\n\t\tthis.gltfLoader = gltfLoader;\n\t\tthis.path = null;\n\t\tthis.onLoad = onLoad;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\n\t\treturn this;\n\n\t}\n\n\tcreateHandModel( controller, profile ) {\n\n\t\tconst handModel = new XRHandModel( controller );\n\n\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\tconst xrInputSource = event.data;\n\n\t\t\tif ( xrInputSource.hand && ! handModel.motionController ) {\n\n\t\t\t\thandModel.xrInputSource = xrInputSource;\n\n\t\t\t\t// @todo Detect profile if not provided\n\t\t\t\tif ( profile === undefined || profile === 'spheres' ) {\n\n\t\t\t\t\thandModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'sphere' } );\n\n\t\t\t\t} else if ( profile === 'boxes' ) {\n\n\t\t\t\t\thandModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'box' } );\n\n\t\t\t\t} else if ( profile === 'mesh' ) {\n\n\t\t\t\t\thandModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness, this.gltfLoader, this.onLoad );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcontroller.visible = true;\n\n\t\t} );\n\n\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\tcontroller.visible = false;\n\t\t\t// handModel.motionController = null;\n\t\t\t// handModel.remove( scene );\n\t\t\t// scene = null;\n\n\t\t} );\n\n\t\treturn handModel;\n\n\t}\n\n}\n\nexport { XRHandModelFactory };\n", "import {\n\tBoxGeometry,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D\n} from 'three';\n\nclass XRPlanes extends Object3D {\n\n\tconstructor( renderer ) {\n\n\t\tsuper();\n\n\t\tconst matrix = new Matrix4();\n\n\t\tconst currentPlanes = new Map();\n\n\t\tconst xr = renderer.xr;\n\n\t\txr.addEventListener( 'planesdetected', event => {\n\n\t\t\tconst frame = event.data;\n\t\t\tconst planes = frame.detectedPlanes;\n\n\t\t\tconst referenceSpace = xr.getReferenceSpace();\n\n\t\t\tlet planeschanged = false;\n\n\t\t\tfor ( const [ plane, mesh ] of currentPlanes ) {\n\n\t\t\t\tif ( planes.has( plane ) === false ) {\n\n\t\t\t\t\tmesh.geometry.dispose();\n\t\t\t\t\tmesh.material.dispose();\n\t\t\t\t\tthis.remove( mesh );\n\n\t\t\t\t\tcurrentPlanes.delete( plane );\n\n\t\t\t\t\tplaneschanged = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( const plane of planes ) {\n\n\t\t\t\tif ( currentPlanes.has( plane ) === false ) {\n\n\t\t\t\t\tconst pose = frame.getPose( plane.planeSpace, referenceSpace );\n\t\t\t\t\tmatrix.fromArray( pose.transform.matrix );\n\n\t\t\t\t\tconst polygon = plane.polygon;\n\n\t\t\t\t\tlet minX = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tlet maxX = Number.MIN_SAFE_INTEGER;\n\t\t\t\t\tlet minZ = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tlet maxZ = Number.MIN_SAFE_INTEGER;\n\n\t\t\t\t\tfor ( const point of polygon ) {\n\n\t\t\t\t\t\tminX = Math.min( minX, point.x );\n\t\t\t\t\t\tmaxX = Math.max( maxX, point.x );\n\t\t\t\t\t\tminZ = Math.min( minZ, point.z );\n\t\t\t\t\t\tmaxZ = Math.max( maxZ, point.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst width = maxX - minX;\n\t\t\t\t\tconst height = maxZ - minZ;\n\n\t\t\t\t\tconst geometry = new BoxGeometry( width, 0.01, height );\n\t\t\t\t\tconst material = new MeshBasicMaterial( { color: 0xffffff * Math.random() } );\n\n\t\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\t\tmesh.position.setFromMatrixPosition( matrix );\n\t\t\t\t\tmesh.quaternion.setFromRotationMatrix( matrix );\n\t\t\t\t\tthis.add( mesh );\n\n\t\t\t\t\tcurrentPlanes.set( plane, mesh );\n\n\t\t\t\t\tplaneschanged = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( planeschanged ) {\n\n\t\t\t\tthis.dispatchEvent( { type: 'planeschanged' } );\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nexport { XRPlanes };\n"], "mappings": "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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,KAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,KAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,O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AA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAChE;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MACtE;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAErE;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAC1E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAE3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAE3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,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e,UAAU,WAAY,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,QAAQ,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,WAAW,UAAU,UAAU,YAAa,WAAW,UAAU,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAY,WAAW,SAAS,UAAU,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAc,WAAY,SAAS,SAAS,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,aAAe,UAAU,WAAa,UAAU,YAAe,UAAU,UAAW,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,UAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,QAAQ,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,QAAQ,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,WAAY,WAAW,SAAS,SAAS,YAAa,WAAW,QAAQ,SAAS,YAAa,WAAW,SAAS,SAAS,YAAc,WAAY,SAAS,SAAS,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,WAAc,UAAU,UAAY,QAAQ,YAAe,UAAU,WAAY,UAAU,YAAe,SAAS,WAAY,UAAU,YAAc,SAAS,WAAY,UAAU,YAAc,SAAS,UAAU,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,UAAU,UAAU,YAAc,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,UAAW,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,UAAW,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAY,WAAW,SAAS,SAAS,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAa,SAAU,SAAS,UAAU,WAAa,aAAe,SAAS,UAAU,aAAe,UAAU,YAAa,SAAS,WAAc,UAAU,WAAa,UAAU,YAAe,UAAU,UAAW,UAAU,WAAa,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,SAAS,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,SAAS,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,SAAS,UAAU,UAAU,YAAa,SAAS,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,UAAW,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,QAAQ,UAAU,WAAY,WAAW,SAAS,SAAS,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,YAAc,UAAU,SAAS,SAAS,WAAa,aAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,WAAc,UAAU,WAAY,UAAU,WAAa,UAAU,WAAY,UAAU,YAAc,UAAU,UAAW,UAAU,YAAc,UAAU,WAAW,SAAS,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,SAAS,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAc,WAAW,SAAS,SAAS,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,SAAS,YAAe,UAAU,WAAa,UAAU,WAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,SAAS,YAAc,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,YAAa,WAAW,QAAQ,UAAU,YAAa,WAAW,SAAS,UAAU,YAAc,WAAW,SAAS,SAAS,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,SAAS,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,SAAS,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,QAAQ,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,SAAS,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,QAAQ,UAAU,YAAa,WAAW,QAAQ,UAAU,SAAU,WAAW,SAAS,SAAS,WAAY,WAAW,SAAS,UAAU,WAAY,WAAW,SAAS,UAAU,YAAc,WAAW,QAAQ,UAAU,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,WAAY,SAAS,YAAc,UAAU,WAAY,UAAU,WAAa,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,QAAQ,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,SAAS,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,UAAY,YAAe,QAAQ,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,SAAS,YAAc,UAAU,SAAU,UAAU,YAAc,UAAU,WAAW,SAAS,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,SAAS,UAAU,UAAU,WAAY,SAAS,SAAS,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,SAAS,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,QAAQ,YAAa,WAAW,SAAS,SAAS,WAAa,WAAc,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,WAAc,UAAU,WAAa,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,SAAS,WAAa,UAAU,SAAS,UAAU,YAAc,UAAU,WAAW,UAAU,WAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,SAAS,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,QAAQ,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,UAAW,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,QAAQ,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,QAAQ,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,QAAQ,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,WAAc,SAAS,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,UAAU,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,QAAQ,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,OAAO,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,QAAQ,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,QAAQ,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,OAAO,SAAS,YAAa,WAAW,QAAQ,SAAS,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,UAAY,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,SAAS,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,UAAW,UAAU,YAAc,UAAU,WAAY,SAAS,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,QAAQ,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,QAAQ,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,QAAQ,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,SAAS,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,SAAS,UAAU,UAAW,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,SAAS,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,OAAO,UAAU,YAAa,UAAU,SAAS,UAAU,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAa,YAAe,SAAS,SAAS,YAAc,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,SAAS,YAAe,SAAS,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,UAAU,YAAc,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,SAAS,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,SAAS,QAAQ,UAAU,YAAa,UAAU,SAAS,SAAS,YAAa,WAAW,SAAS,SAAS,YAAa,WAAW,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,GAAG,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,SAAS,UAAW,SAAS,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,SAAS,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,OAAO,YAAa,UAAU,SAAS,SAAS,YAAa,WAAW,SAAS,UAAU,WAAa,YAAe,SAAS,UAAU,YAAc,UAAU,YAAa,UAAU,YAAe,UAAU,UAAY,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,SAAS,YAAc,QAAQ,WAAY,UAAU,YAAc,QAAQ,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,QAAQ,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,QAAQ,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,SAAS,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,WAAa,YAAe,QAAQ,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,UAAW,UAAU,YAAc,UAAU,UAAW,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,SAAS,UAAU,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,QAAQ,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,QAAQ,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,SAAS,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,SAAS,SAAS,UAAU,YAAa,UAAU,SAAS,SAAS,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAA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e,UAAU,WAAa,SAAS,YAAc,UAAU,WAAY,SAAS,YAAc,SAAS,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAa,UAAU,WAAY,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,SAAS,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,QAAQ,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,QAAQ,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,SAAS,YAAa,WAAW,SAAS,SAAS,YAAa,WAAW,QAAQ,UAAU,YAA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YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,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YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,SAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,YAAa,GAAG,UAAY,SAAS,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAa,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,SAAS,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,QAAQ,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,QAAQ,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,QAAQ,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,SAAS,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,QAAU,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,QAAQ,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,SAAW,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,QAAQ,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,UAAW,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,WAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,SAAW,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,SAAS,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,SAAW,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,QAAQ,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,QAAQ,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,UAAW,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,QAAQ,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,SAAW,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,UAAU,UAAU,SAAW,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,QAAQ,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,UAAY,GAAG,WAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,UAAW,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,SAAS,OAAO,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,SAAS,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,SAAS,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,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WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,QAAQ,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,QAAQ,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAa,UAAU,UAAW,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,QAAQ,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,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WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,QAAQ,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,UAAW,QAAQ,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,SAAU,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,SAAS,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,SAAU,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,SAAU,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,UAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,QAAS,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,UAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,UAAY,UAAU,UAAU,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,OAAO,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,QAAQ,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,SAAS,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,SAAS,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,MAAM,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,OAAO,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,UAAW,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,QAAQ,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,SAAS,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,QAAQ,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,QAAQ,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,SAAS,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,QAAQ,SAAS,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,QAAQ,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,QAAQ,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,CAAE;AAIr9qI,UAAM,cAAc,IAAI,aAAc,SAAU;AAChD,UAAM,cAAc,IAAI,aAAc,SAAU;AAEhD,UAAM,cAAc,IAAI,YAAa,aAAa,IAAI,IAAI,YAAY,WAAW,WAAW,qBAAqB,qBAAqB,cAAc,eAAe,CAAE;AACrK,UAAM,cAAc,IAAI,YAAa,aAAa,IAAI,IAAI,YAAY,WAAW,WAAW,qBAAqB,qBAAqB,cAAc,eAAe,CAAE;AAErK,gBAAY,cAAc;AAC1B,gBAAY,cAAc;AAE1B,UAAM,aAAa,IAAI,YAAa,UAAU,MAAO;AAErD,cAAU,QAAS,SAAWC,IAAGC,QAAQ;AAExC,iBAAYA,MAAM,IAAI,UAAU,YAAaD,EAAE;AAAA,IAEhD,CAAE;AAEF,UAAM,aAAa,IAAI,YAAa,UAAU,MAAO;AAErD,cAAU,QAAS,SAAWA,IAAGC,QAAQ;AAExC,iBAAYA,MAAM,IAAI,UAAU,YAAaD,EAAE;AAAA,IAEhD,CAAE;AAEF,UAAM,aAAa,IAAI,YAAa,YAAY,IAAI,IAAI,YAAY,eAAe,WAAW,qBAAqB,qBAAqB,cAAc,eAAe,CAAE;AACvK,UAAM,aAAa,IAAI,YAAa,YAAY,IAAI,IAAI,YAAY,eAAe,WAAW,qBAAqB,qBAAqB,cAAc,eAAe,CAAE;AAEvK,eAAW,cAAc;AACzB,eAAW,cAAc;AAEzB,SAAK,aAAa;AAClB,SAAK,aAAa;AAElB,SAAK,cAAc;AACnB,SAAK,cAAc;AAEnB,WAAO;AAAA,EAER;AAED;AAEA,yBAAyB,aAAa;AACtC,yBAAyB,aAAa;AAEtC,yBAAyB,cAAc;AACvC,yBAAyB,cAAc;;;ACrFvC,IAAM,2BAAN,MAA+B;AAAA,EAE9B,OAAO,OAAO;AAEb,6BAAyB,KAAK;AAE9B,UAAM,EAAE,aAAa,aAAa,YAAY,WAAW,IAAI;AAI7D,gBAAY,cAAc;AAC1B,gBAAY,cAAc;AAE1B,gBAAY,aAAa;AACzB,gBAAY,aAAa;AAAA,EAE1B;AAED;;;ACVA,IAAM,OAAO,IAAI,KAAK;AACtB,IAAME,WAAU,IAAI,QAAQ;AAE5B,IAAM,uBAAN,cAAmC,wBAAwB;AAAA,EAE1D,cAAc;AAEb,UAAM;AAEN,SAAK,yBAAyB;AAE9B,SAAK,OAAO;AAEZ,UAAM,YAAY,CAAE,IAAK,GAAG,GAAG,GAAG,GAAG,GAAG,IAAK,GAAG,GAAG,GAAG,GAAG,GAAG,IAAK,GAAG,GAAG,GAAG,GAAG,GAAG,IAAK,IAAK,GAAG,GAAG,IAAK,CAAE;AACvG,UAAM,MAAM,CAAE,IAAK,GAAG,GAAG,GAAG,IAAK,GAAG,GAAG,GAAG,IAAK,IAAK,GAAG,IAAK,IAAK,IAAK,GAAG,EAAI;AAC7E,UAAMC,SAAQ,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAErE,SAAK,SAAUA,MAAM;AACrB,SAAK,aAAc,YAAY,IAAI,uBAAwB,WAAW,CAAE,CAAE;AAC1E,SAAK,aAAc,MAAM,IAAI,uBAAwB,KAAK,CAAE,CAAE;AAAA,EAE/D;AAAA,EAEA,aAAcC,SAAS;AAEtB,UAAM,QAAQ,KAAK,WAAW;AAC9B,UAAM,MAAM,KAAK,WAAW;AAE5B,QAAK,UAAU,QAAY;AAE1B,YAAM,aAAcA,OAAO;AAE3B,UAAI,aAAcA,OAAO;AAEzB,YAAM,cAAc;AAAA,IAErB;AAEA,QAAK,KAAK,gBAAgB,MAAO;AAEhC,WAAK,mBAAmB;AAAA,IAEzB;AAEA,QAAK,KAAK,mBAAmB,MAAO;AAEnC,WAAK,sBAAsB;AAAA,IAE5B;AAEA,WAAO;AAAA,EAER;AAAA,EAEA,aAAc,OAAQ;AAErB,QAAI;AAEJ,QAAK,iBAAiB,cAAe;AAEpC,qBAAe;AAAA,IAEhB,WAAY,MAAM,QAAS,KAAM,GAAI;AAEpC,qBAAe,IAAI,aAAc,KAAM;AAAA,IAExC;AAEA,UAAM,iBAAiB,IAAI,2BAA4B,cAAc,GAAG,CAAE;AAE1E,SAAK,aAAc,iBAAiB,IAAI,2BAA4B,gBAAgB,GAAG,CAAE,CAAE;AAC3F,SAAK,aAAc,eAAe,IAAI,2BAA4B,gBAAgB,GAAG,CAAE,CAAE;AAIzF,SAAK,mBAAmB;AACxB,SAAK,sBAAsB;AAE3B,WAAO;AAAA,EAER;AAAA,EAEA,UAAW,OAAQ;AAElB,QAAI;AAEJ,QAAK,iBAAiB,cAAe;AAEpC,eAAS;AAAA,IAEV,WAAY,MAAM,QAAS,KAAM,GAAI;AAEpC,eAAS,IAAI,aAAc,KAAM;AAAA,IAElC;AAEA,UAAM,sBAAsB,IAAI,2BAA4B,QAAQ,GAAG,CAAE;AAEzE,SAAK,aAAc,sBAAsB,IAAI,2BAA4B,qBAAqB,GAAG,CAAE,CAAE;AACrG,SAAK,aAAc,oBAAoB,IAAI,2BAA4B,qBAAqB,GAAG,CAAE,CAAE;AAEnG,WAAO;AAAA,EAER;AAAA,EAEA,sBAAuB,UAAW;AAEjC,SAAK,aAAc,SAAS,WAAW,SAAS,KAAM;AAEtD,WAAO;AAAA,EAER;AAAA,EAEA,kBAAmB,UAAW;AAE7B,SAAK,aAAc,SAAS,WAAW,SAAS,KAAM;AAEtD,WAAO;AAAA,EAER;AAAA,EAEA,SAAU,MAAO;AAEhB,SAAK,sBAAuB,IAAI,kBAAmB,KAAK,QAAS,CAAE;AAInE,WAAO;AAAA,EAER;AAAA,EAEA,iBAAkB,cAAe;AAEhC,UAAM,WAAW,aAAa;AAE9B,SAAK,aAAc,SAAS,WAAW,SAAS,KAAM;AAItD,WAAO;AAAA,EAER;AAAA,EAEA,qBAAqB;AAEpB,QAAK,KAAK,gBAAgB,MAAO;AAEhC,WAAK,cAAc,IAAI,KAAK;AAAA,IAE7B;AAEA,UAAM,QAAQ,KAAK,WAAW;AAC9B,UAAM,MAAM,KAAK,WAAW;AAE5B,QAAK,UAAU,UAAa,QAAQ,QAAY;AAE/C,WAAK,YAAY,uBAAwB,KAAM;AAE/C,WAAK,uBAAwB,GAAI;AAEjC,WAAK,YAAY,MAAO,IAAK;AAAA,IAE9B;AAAA,EAED;AAAA,EAEA,wBAAwB;AAEvB,QAAK,KAAK,mBAAmB,MAAO;AAEnC,WAAK,iBAAiB,IAAI,OAAO;AAAA,IAElC;AAEA,QAAK,KAAK,gBAAgB,MAAO;AAEhC,WAAK,mBAAmB;AAAA,IAEzB;AAEA,UAAM,QAAQ,KAAK,WAAW;AAC9B,UAAM,MAAM,KAAK,WAAW;AAE5B,QAAK,UAAU,UAAa,QAAQ,QAAY;AAE/C,YAAM,SAAS,KAAK,eAAe;AAEnC,WAAK,YAAY,UAAW,MAAO;AAEnC,UAAI,cAAc;AAElB,eAAU,IAAI,GAAG,KAAK,MAAM,OAAO,IAAI,IAAI,KAAO;AAEjD,QAAAF,SAAQ,oBAAqB,OAAO,CAAE;AACtC,sBAAc,KAAK,IAAK,aAAa,OAAO,kBAAmBA,QAAQ,CAAE;AAEzE,QAAAA,SAAQ,oBAAqB,KAAK,CAAE;AACpC,sBAAc,KAAK,IAAK,aAAa,OAAO,kBAAmBA,QAAQ,CAAE;AAAA,MAE1E;AAEA,WAAK,eAAe,SAAS,KAAK,KAAM,WAAY;AAEpD,UAAK,MAAO,KAAK,eAAe,MAAO,GAAI;AAE1C,gBAAQ,MAAO,yIAAyI,IAAK;AAAA,MAE9J;AAAA,IAED;AAAA,EAED;AAAA,EAEA,SAAS;AAAA,EAIT;AAAA,EAEA,YAAaE,SAAS;AAErB,YAAQ,KAAM,+EAAgF;AAE9F,WAAO,KAAK,aAAcA,OAAO;AAAA,EAElC;AAED;;;ACtOA,YAAY,OAAO;AAAA,EAElB,YAAY,EAAE,OAAO,EAAE;AAAA,EACvB,WAAW,EAAE,OAAO,EAAE;AAAA,EACtB,YAAY,EAAE,OAAO,IAAI,QAAS,GAAG,CAAE,EAAE;AAAA,EACzC,YAAY,EAAE,OAAO,EAAE;AAAA,EACvB,WAAW,EAAE,OAAO,EAAE;AAAA,EACtB,UAAU,EAAE,OAAO,EAAE;AAAA,EACrB,SAAS,EAAE,OAAO,EAAE;AAAA;AAErB;AAEA,UAAW,MAAO,IAAI;AAAA,EAErB,UAAU,cAAc,MAAO;AAAA,IAC9B,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,EACb,CAAE;AAAA,EAEF;AAAA;AAAA,IACU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqNV;AAAA;AAAA,IACU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AAErC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AAErC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AAErC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IA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AG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GA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E,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,IAAI,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,CAAE,GAAG,GAAG,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,CAAE,GAAG,GAAG,CAAE,KAAK,GAAG,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,IAAI,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,EAAG,GAAG,IAAI,CAAE,GAAG,KAAK,EAAG,GAAG,IAAI,CAAE,GAAG,KAAK,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,GAAG,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,EAAG,GAAG,IAAI,CAAE,IAAI,IAAI,EAAG,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,CAAE,GAAG,IAAI,CAAE,KAAK,IAAI,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,GAAG,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,GAAG,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,GAAG,GAAI,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,EAAE;AAE9/E,UAAM,QAAQ,CAAC;AAEf,UAAM,SAAS,CAAC;AAChB,UAAM,SAAS,CAAC;AAChB,UAAM,WAAW,CAAC;AAIlB,UAAM,QAAQL,MAAK,MAAO,IAAK;AAE/B,aAAU,IAAI,GAAGG,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,UAAK,MAAO,CAAE,EAAE,MAAO,GAAG,CAAE,MAAM,UAAU,MAAO,CAAE,EAAE,MAAO,GAAG,CAAE,MAAM,UAAW;AAEnF,cAAMC,KAAI,WAAY,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE;AACjD,cAAMC,KAAI,WAAY,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE;AACjD,cAAM,IAAI,WAAY,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE;AACjD,cAAMG,SAAQ,SAAU,MAAO,CAAE,EAAE,MAAO,GAAG,EAAG,CAAE,IAAI;AAEtD,YAAI,IAAI,KAAM,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE,EAAE,YAAY;AAEvD,YAAK,MAAM,IAAK;AAEf,cAAI,KAAM,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE,EAAE,YAAY;AAAA,QAEpD;AAEA,cAAM,WAAW,CAAEJ,IAAGC,IAAG,GAAG,IAAK,CAAE,GAAG,WAAY,CAAE,CAAE;AAEtD,cAAM,KAAM,QAAS;AACrB,iBAAUG,MAAM,IAAI;AAAA,MAErB,WAAY,MAAO,CAAE,EAAE,MAAO,GAAG,CAAE,MAAM,UAAW;AAEnD,cAAM,QAAQ,SAAU,MAAO,CAAE,EAAE,MAAO,GAAG,EAAG,CAAE;AAElD,kBAAW,IAAI,GAAG,OAAO,CAAE;AAC3B,kBAAW,IAAI,GAAG,OAAO,CAAE;AAC3B,kBAAW,IAAI,GAAG,OAAO,CAAE;AAC3B,kBAAW,IAAI,GAAG,OAAO,CAAE;AAAA,MAE5B;AAAA,IAED;AAIA,WAAO,cAAc;AAAA,EAEtB;AAED;;;ACzLA,IAAMC,UAAS,IAAI,MAAM;AAEzB,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAEf,SAAK,sBAAsB,CAAC;AAC5B,SAAK,wBAAwB,CAAC;AAAA,EAE/B;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,mBAAoB,KAAK,eAAgB;AAChD,WAAO,KAAM,KAAK,SAAWC,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,uBAAwB,SAAU;AAEjC,SAAK,sBAAsB;AAAA,EAE5B;AAAA,EAEA,6BAA8B,SAAU;AAEvC,SAAK,wBAAwB;AAAA,EAE9B;AAAA,EAEA,MAAOC,OAAO;AAEb,aAAS,YAAaA,OAAM,eAAe,GAAI;AAE9C,YAAM,gBAAgB;AACtB,UAAI,aAAa;AACjB,YAAM,SAAS,cAAc,KAAMA,KAAK;AAExC,UAAK,WAAW,MAAO;AAEtB,qBAAa,OAAQ,CAAE;AAAA,MAExB;AAEA,YAAM,SAAS;AAAA,QACd,UAAU,CAAC;AAAA,QACX,UAAU,CAAC;AAAA,QACX;AAAA,QACA,SAAS;AAAA,MACV;AAEA,YAAM,QAAQ,WAAW,MAAO,YAAa;AAC7C,UAAI;AAEJ,eAAS,0BAA2B,eAAe,qBAAsB;AAExE,cAAMC,YAAW,EAAE,MAAM,cAAe,CAAE,EAAE;AAE5C,YAAKA,UAAS,SAAS,QAAS;AAE/B,UAAAA,UAAS,OAAO,cAAe,CAAE;AACjC,UAAAA,UAAS,YAAY,cAAe,CAAE;AACtC,UAAAA,UAAS,WAAW,cAAe,CAAE;AAAA,QAEtC,OAAO;AAEN,UAAAA,UAAS,OAAO,cAAe,CAAE;AAAA,QAElC;AAEA,YAAKA,UAAS,QAAQ,qBAAsB;AAE3C,UAAAA,UAAS,OAAO,oBAAqBA,UAAS,IAAK;AAAA,QAEpD;AAEA,eAAOA;AAAA,MAER;AAEA,eAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAO;AAEzC,YAAIC,QAAO,MAAO,CAAE;AACpB,QAAAA,QAAOA,MAAK,KAAK;AAEjB,YAAKA,UAAS,GAAK;AAEnB,cAAM,aAAaA,MAAK,MAAO,KAAM;AACrC,cAAM,WAAW,WAAW,MAAM;AAClC,QAAAA,QAAO,WAAW,KAAM,GAAI;AAE5B,gBAAS,UAAW;AAAA,UAEnB,KAAK;AAEJ,mBAAO,SAAS,WAAY,CAAE;AAC9B,mBAAO,UAAU,WAAY,CAAE;AAE/B;AAAA,UAED,KAAK;AAEJ,mBAAO,SAAS,KAAMA,KAAK;AAE3B;AAAA,UAED,KAAK;AAEJ,gBAAK,mBAAmB,QAAY;AAEnC,qBAAO,SAAS,KAAM,cAAe;AAAA,YAEtC;AAEA,6BAAiB,CAAC;AAClB,2BAAe,OAAO,WAAY,CAAE;AACpC,2BAAe,QAAQ,SAAU,WAAY,CAAE,CAAE;AACjD,2BAAe,aAAa,CAAC;AAE7B;AAAA,UAED,KAAK;AAEJ,2BAAe,WAAW,KAAM,0BAA2B,YAAY,MAAM,mBAAoB,CAAE;AAEnG;AAAA,UAED,KAAK;AAEJ,mBAAO,UAAUA;AAEjB;AAAA,UAGD;AAEC,oBAAQ,IAAK,aAAa,UAAU,UAAW;AAAA,QAEjD;AAAA,MAED;AAEA,UAAK,mBAAmB,QAAY;AAEnC,eAAO,SAAS,KAAM,cAAe;AAAA,MAEtC;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,iBAAkBC,IAAG,MAAO;AAEpC,cAAS,MAAO;AAAA,QAEf,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAS,KAAK;AAAA,QAAS,KAAK;AAAA,QAAU,KAAK;AAAA,QAAO,KAAK;AAAA,QACzE,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAS,KAAK;AAAA,QAAS,KAAK;AAAA,QAAU,KAAK;AAAA,QAAS,KAAK;AAE1E,iBAAO,SAAUA,EAAE;AAAA,QAEpB,KAAK;AAAA,QAAS,KAAK;AAAA,QAAU,KAAK;AAAA,QAAW,KAAK;AAEjD,iBAAO,WAAYA,EAAE;AAAA,MAEvB;AAAA,IAED;AAEA,aAAS,kBAAmB,YAAY,QAAS;AAEhD,YAAM,UAAU,CAAC;AAEjB,eAAU,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAO;AAE9C,YAAK,OAAO,MAAM,EAAI,QAAO;AAE7B,YAAK,WAAY,CAAE,EAAE,SAAS,QAAS;AAEtC,gBAAM,OAAO,CAAC;AACd,gBAAMA,KAAI,iBAAkB,OAAO,KAAK,GAAG,WAAY,CAAE,EAAE,SAAU;AAErE,mBAAU,IAAI,GAAG,IAAIA,IAAG,KAAO;AAE9B,gBAAK,OAAO,MAAM,EAAI,QAAO;AAE7B,iBAAK,KAAM,iBAAkB,OAAO,KAAK,GAAG,WAAY,CAAE,EAAE,QAAS,CAAE;AAAA,UAExE;AAEA,kBAAS,WAAY,CAAE,EAAE,IAAK,IAAI;AAAA,QAEnC,OAAO;AAEN,kBAAS,WAAY,CAAE,EAAE,IAAK,IAAI,iBAAkB,OAAO,KAAK,GAAG,WAAY,CAAE,EAAE,IAAK;AAAA,QAEzF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,eAAe;AAEvB,YAAM,SAAS;AAAA,QACb,SAAS,CAAC;AAAA,QACV,UAAU,CAAC;AAAA,QACX,SAAS,CAAC;AAAA,QACV,KAAK,CAAC;AAAA,QACN,eAAe,CAAC;AAAA,QAChB,QAAQ,CAAC;AAAA,QACT,kBAAkB,CAAC;AAAA,MACrB;AAEA,iBAAY,kBAAkB,OAAO,KAAM,MAAM,qBAAsB,GAAI;AAEzE,eAAQ,cAAe,IAAI,CAAC;AAAA,MAE9B;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,qBAAsB,YAAa;AAE3C,YAAM,eAAe,WAAW,IAAK,CAAAF,cAAY;AAEhD,eAAOA,UAAS;AAAA,MAEjB,CAAE;AAEF,eAAS,aAAc,OAAQ;AAE9B,iBAAU,IAAI,GAAGG,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,gBAAMC,QAAO,MAAO,CAAE;AAEtB,cAAK,aAAa,SAAUA,KAAK,EAAI,QAAOA;AAAA,QAE7C;AAEA,eAAO;AAAA,MAER;AAEA,aAAO;AAAA,QACN,OAAO,aAAc,CAAE,KAAK,MAAM,MAAO,CAAE,KAAK;AAAA,QAChD,OAAO,aAAc,CAAE,KAAK,MAAM,MAAO,CAAE,KAAK;AAAA,QAChD,OAAO,aAAc,CAAE,KAAK,MAAM,MAAO,CAAE,KAAK;AAAA,QAChD,QAAQ,aAAc,CAAE,MAAM,SAAU,CAAE;AAAA,QAC1C,QAAQ,aAAc,CAAE,MAAM,SAAU,CAAE;AAAA,QAC1C,QAAQ,aAAc,CAAE,MAAM,SAAU,CAAE;AAAA,QAC1C,OAAO,aAAc,CAAE,KAAK,KAAK,aAAa,IAAK,CAAE;AAAA,QACrD,OAAO,aAAc,CAAE,KAAK,KAAK,aAAa,IAAK,CAAE;AAAA,QACrD,OAAO,aAAc,CAAE,OAAO,eAAe,KAAK,WAAY,CAAE;AAAA,QAChE,OAAO,aAAc,CAAE,SAAS,iBAAiB,KAAK,WAAY,CAAE;AAAA,QACpE,OAAO,aAAc,CAAE,QAAQ,gBAAgB,KAAK,WAAY,CAAE;AAAA,MACnE;AAAA,IAED;AAEA,aAAS,WAAYL,OAAM,QAAS;AAInC,YAAM,SAAS,aAAa;AAE5B,YAAM,cAAc;AACpB,UAAI,MAAM;AAEV,WAAO,UAAU,YAAY,KAAMA,KAAK,OAAQ,MAAO;AAEtD,eAAO,QAAS,CAAE,EAAE,MAAO,KAAM;AAAA,MAElC,OAAO;AAEN,eAAO,CAAE;AAAA,MAEV;AAEA,YAAM,SAAS,IAAI,YAAa,IAAK;AAErC,WAAM,UAAU,IAAI,GAAG,IAAI,OAAO,SAAS,QAAQ,KAAO;AAEzD,cAAM,cAAc,OAAO,SAAU,CAAE;AACvC,cAAM,eAAe,qBAAsB,YAAY,UAAW;AAElE,iBAAU,IAAI,GAAG,IAAI,YAAY,OAAO,KAAO;AAE9C,gBAAM,UAAU,kBAAmB,YAAY,YAAY,MAAO;AAElE,cAAK,CAAE,QAAU,OAAM;AAEvB,wBAAe,QAAQ,YAAY,MAAM,SAAS,YAAa;AAAA,QAEhE;AAAA,MAED;AAEA,aAAO,YAAa,MAAO;AAAA,IAE5B;AAEA,aAAS,YAAa,QAAS;AAE9B,UAAIM,YAAW,IAAI,eAAe;AAIlC,UAAK,OAAO,QAAQ,SAAS,GAAI;AAEhC,QAAAA,UAAS,SAAU,OAAO,OAAQ;AAAA,MAEnC;AAEA,MAAAA,UAAS,aAAc,YAAY,IAAI,uBAAwB,OAAO,UAAU,CAAE,CAAE;AAIpF,UAAK,OAAO,QAAQ,SAAS,GAAI;AAEhC,QAAAA,UAAS,aAAc,UAAU,IAAI,uBAAwB,OAAO,SAAS,CAAE,CAAE;AAAA,MAElF;AAEA,UAAK,OAAO,IAAI,SAAS,GAAI;AAE5B,QAAAA,UAAS,aAAc,MAAM,IAAI,uBAAwB,OAAO,KAAK,CAAE,CAAE;AAAA,MAE1E;AAEA,UAAK,OAAO,OAAO,SAAS,GAAI;AAE/B,QAAAA,UAAS,aAAc,SAAS,IAAI,uBAAwB,OAAO,QAAQ,CAAE,CAAE;AAAA,MAEhF;AAEA,UAAK,OAAO,cAAc,SAAS,KAAK,OAAO,iBAAiB,SAAS,GAAI;AAE5E,QAAAA,YAAWA,UAAS,aAAa;AAEjC,YAAK,OAAO,cAAc,SAAS,EAAI,CAAAA,UAAS,aAAc,MAAM,IAAI,uBAAwB,OAAO,eAAe,CAAE,CAAE;AAC1H,YAAK,OAAO,iBAAiB,SAAS,EAAI,CAAAA,UAAS,aAAc,SAAS,IAAI,uBAAwB,OAAO,kBAAkB,CAAE,CAAE;AAAA,MAEpI;AAIA,iBAAY,kBAAkB,OAAO,KAAM,MAAM,qBAAsB,GAAI;AAE1E,YAAK,OAAQ,cAAe,EAAE,SAAS,GAAI;AAExC,UAAAA,UAAS;AAAA,YACV;AAAA,YACA,IAAI;AAAA,cACD,OAAQ,cAAe;AAAA,cACvB,MAAM,sBAAuB,cAAe,EAAE;AAAA,YACjD;AAAA,UACC;AAAA,QAEH;AAAA,MAED;AAEA,MAAAA,UAAS,sBAAsB;AAE/B,aAAOA;AAAA,IAER;AAEA,aAAS,cAAe,QAAQ,aAAa,SAAS,YAAa;AAElE,UAAK,gBAAgB,UAAW;AAE/B,eAAO,SAAS,KAAM,QAAS,WAAW,KAAM,GAAG,QAAS,WAAW,KAAM,GAAG,QAAS,WAAW,KAAM,CAAE;AAE5G,YAAK,WAAW,WAAW,QAAQ,WAAW,WAAW,QAAQ,WAAW,WAAW,MAAO;AAE7F,iBAAO,QAAQ,KAAM,QAAS,WAAW,MAAO,GAAG,QAAS,WAAW,MAAO,GAAG,QAAS,WAAW,MAAO,CAAE;AAAA,QAE/G;AAEA,YAAK,WAAW,UAAU,QAAQ,WAAW,UAAU,MAAO;AAE7D,iBAAO,IAAI,KAAM,QAAS,WAAW,KAAM,GAAG,QAAS,WAAW,KAAM,CAAE;AAAA,QAE3E;AAEA,YAAK,WAAW,UAAU,QAAQ,WAAW,UAAU,QAAQ,WAAW,UAAU,MAAO;AAE1F,UAAAR,QAAO;AAAA,YACN,QAAS,WAAW,KAAM,IAAI;AAAA,YAC9B,QAAS,WAAW,KAAM,IAAI;AAAA,YAC9B,QAAS,WAAW,KAAM,IAAI;AAAA,UAC/B,EAAE,oBAAoB;AAEtB,iBAAO,OAAO,KAAMA,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAAA,QAElD;AAEA,mBAAY,kBAAkB,OAAO,KAAM,MAAM,qBAAsB,GAAI;AAE1E,qBAAY,mBAAmB,MAAM,sBAAuB,cAAe,GAAI;AAE7E,mBAAQ,cAAe,EAAE,KAAM,QAAS,eAAgB,CAAE;AAAA,UAE5D;AAAA,QAED;AAAA,MAED,WAAY,gBAAgB,QAAS;AAEpC,cAAM,iBAAiB,QAAQ,kBAAkB,QAAQ;AACzD,cAAM,WAAW,QAAQ;AAEzB,YAAK,eAAe,WAAW,GAAI;AAElC,iBAAO,QAAQ,KAAM,eAAgB,CAAE,GAAG,eAAgB,CAAE,GAAG,eAAgB,CAAE,CAAE;AAEnF,cAAK,YAAY,SAAS,WAAW,GAAI;AAExC,mBAAO,cAAc,KAAM,SAAU,CAAE,GAAG,SAAU,CAAE,CAAE;AACxD,mBAAO,cAAc,KAAM,SAAU,CAAE,GAAG,SAAU,CAAE,CAAE;AACxD,mBAAO,cAAc,KAAM,SAAU,CAAE,GAAG,SAAU,CAAE,CAAE;AAAA,UAEzD;AAAA,QAED,WAAY,eAAe,WAAW,GAAI;AAEzC,iBAAO,QAAQ,KAAM,eAAgB,CAAE,GAAG,eAAgB,CAAE,GAAG,eAAgB,CAAE,CAAE;AACnF,iBAAO,QAAQ,KAAM,eAAgB,CAAE,GAAG,eAAgB,CAAE,GAAG,eAAgB,CAAE,CAAE;AAAA,QAEpF;AAIA,YAAK,WAAW,UAAU,QAAQ,WAAW,UAAU,QAAQ,WAAW,UAAU,MAAO;AAE1F,UAAAA,QAAO;AAAA,YACN,QAAS,WAAW,KAAM,IAAI;AAAA,YAC9B,QAAS,WAAW,KAAM,IAAI;AAAA,YAC9B,QAAS,WAAW,KAAM,IAAI;AAAA,UAC/B,EAAE,oBAAoB;AACtB,iBAAO,iBAAiB,KAAMA,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAC3D,iBAAO,iBAAiB,KAAMA,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAC3D,iBAAO,iBAAiB,KAAMA,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAAA,QAE5D;AAAA,MAED;AAAA,IAED;AAEA,aAAS,kBAAmB,IAAI,YAAa;AAE5C,YAAM,UAAU,CAAC;AACjB,UAAI,OAAO;AAEX,eAAU,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAO;AAE9C,cAAMG,YAAW,WAAY,CAAE;AAC/B,cAAM,cAAcA,UAAS;AAE7B,YAAKA,UAAS,SAAS,QAAS;AAE/B,gBAAM,OAAO,CAAC;AAEd,gBAAME,KAAIF,UAAS,YAAY,KAAM,KAAK,IAAK;AAC/C,kBAAQA,UAAS,YAAY;AAE7B,mBAAU,IAAI,GAAG,IAAIE,IAAG,KAAO;AAE9B,iBAAK,KAAM,YAAY,KAAM,KAAK,IAAK,CAAE;AACzC,oBAAQ,YAAY;AAAA,UAErB;AAEA,kBAASF,UAAS,IAAK,IAAI;AAAA,QAE5B,OAAO;AAEN,kBAASA,UAAS,IAAK,IAAI,YAAY,KAAM,KAAK,IAAK;AACvD,kBAAQ,YAAY;AAAA,QAErB;AAAA,MAED;AAEA,aAAO,CAAE,SAAS,IAAK;AAAA,IAExB;AAEA,aAAS,yBAA0B,YAAY,MAAM,eAAgB;AAEpE,eAAS,gBAAiB,UAAU,MAAMM,gBAAgB;AAEzD,gBAAS,MAAO;AAAA,UAGf,KAAK;AAAA,UAAQ,KAAK;AAAQ,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAElD,qBAAO,SAAS,QAAS,EAAG;AAAA,YAE7B,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAS,KAAK;AAAS,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEpD,qBAAO,SAAS,SAAU,EAAG;AAAA,YAE9B,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAS,KAAK;AAAS,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEpD,qBAAO,SAAS,SAAU,IAAIA,cAAc;AAAA,YAE7C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAU,KAAK;AAAU,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEtD,qBAAO,SAAS,UAAW,IAAIA,cAAc;AAAA,YAE9C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAS,KAAK;AAAQ,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEnD,qBAAO,SAAS,SAAU,IAAIA,cAAc;AAAA,YAE7C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAU,KAAK;AAAQ,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEpD,qBAAO,SAAS,UAAW,IAAIA,cAAc;AAAA,YAE9C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAW,KAAK;AAAS,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEtD,qBAAO,SAAS,WAAY,IAAIA,cAAc;AAAA,YAE/C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAW,KAAK;AAAU,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEvD,qBAAO,SAAS,WAAY,IAAIA,cAAc;AAAA,YAE/C,GAAG,MAAM,EAAE;AAAA,QAEZ;AAAA,MAED;AAEA,eAAU,IAAI,GAAGH,KAAI,WAAW,QAAQ,IAAIA,IAAG,KAAO;AAErD,cAAMH,YAAW,WAAY,CAAE;AAE/B,YAAKA,UAAS,SAAS,QAAS;AAE/B,UAAAA,UAAS,cAAc,gBAAiB,MAAMA,UAAS,WAAW,aAAc;AAChF,UAAAA,UAAS,cAAc,gBAAiB,MAAMA,UAAS,UAAU,aAAc;AAAA,QAEhF,OAAO;AAEN,UAAAA,UAAS,cAAc,gBAAiB,MAAMA,UAAS,MAAM,aAAc;AAAA,QAE5E;AAAA,MAED;AAAA,IAED;AAEA,aAAS,YAAaD,OAAM,QAAS;AAEpC,YAAM,SAAS,aAAa;AAE5B,YAAM,gBAAkB,OAAO,WAAW;AAC1C,YAAM,OAAO,IAAI,SAAUA,OAAM,OAAO,YAAa;AACrD,UAAI,QAAQ,MAAM;AAElB,eAAU,iBAAiB,GAAG,iBAAiB,OAAO,SAAS,QAAQ,kBAAoB;AAE1F,cAAM,cAAc,OAAO,SAAU,cAAe;AACpD,cAAM,aAAa,YAAY;AAC/B,cAAM,eAAe,qBAAsB,UAAW;AAEtD,iCAA0B,YAAY,MAAM,aAAc;AAE1D,iBAAU,sBAAsB,GAAG,sBAAsB,YAAY,OAAO,uBAAyB;AAEpG,mBAAS,kBAAmB,KAAK,UAAW;AAC5C,iBAAO,OAAQ,CAAE;AACjB,gBAAM,UAAU,OAAQ,CAAE;AAE1B,wBAAe,QAAQ,YAAY,MAAM,SAAS,YAAa;AAAA,QAEhE;AAAA,MAED;AAEA,aAAO,YAAa,MAAO;AAAA,IAE5B;AAEA,aAAS,kBAAmB,OAAQ;AAEnC,UAAI,IAAI;AACR,UAAI,OAAO;AAEX,UAAIE,QAAO;AACX,YAAM,QAAQ,CAAC;AAEf,YAAM,YAAY,IAAI,YAAY,EAAE,OAAQ,MAAM,SAAU,GAAG,CAAE,CAAE;AACnE,YAAM,UAAU,WAAW,KAAM,SAAU;AAE3C,SAAG;AAEF,cAAMM,KAAI,OAAO,aAAc,MAAO,GAAK,CAAE;AAE7C,YAAKA,OAAM,QAAQA,OAAM,MAAO;AAE/B,UAAAN,SAAQM;AAAA,QAET,OAAO;AAEN,cAAKN,UAAS,aAAe,QAAO;AACpC,cAAKA,UAAS,IAAK;AAElB,kBAAM,KAAMA,KAAK;AACjB,YAAAA,QAAO;AAAA,UAER;AAAA,QAED;AAAA,MAED,SAAU,QAAQ,IAAI,MAAM;AAG5B,UAAK,YAAY,KAAO;AAExB,aAAO,EAAE,YAAY,MAAM,KAAM,IAAK,IAAI,MAAM,cAAc,EAAE;AAAA,IAEjE;AAIA,QAAI;AACJ,UAAM,QAAQ;AAEd,QAAKF,iBAAgB,aAAc;AAElC,YAAM,QAAQ,IAAI,WAAYA,KAAK;AACnC,YAAM,EAAE,YAAY,aAAa,IAAI,kBAAmB,KAAM;AAC9D,YAAM,SAAS,YAAa,YAAY,YAAa;AAErD,UAAK,OAAO,WAAW,SAAU;AAEhC,cAAMD,QAAO,IAAI,YAAY,EAAE,OAAQ,KAAM;AAE7C,mBAAW,WAAYA,OAAM,MAAO;AAAA,MAErC,OAAO;AAEN,mBAAW,YAAaC,OAAM,MAAO;AAAA,MAEtC;AAAA,IAED,OAAO;AAEN,iBAAW,WAAYA,OAAM,YAAaA,KAAK,CAAE;AAAA,IAElD;AAEA,WAAO;AAAA,EAER;AAED;AAEA,IAAM,cAAN,MAAkB;AAAA,EAEjB,YAAa,KAAM;AAElB,SAAK,MAAM;AACX,SAAK,IAAI;AAAA,EAEV;AAAA,EAEA,QAAQ;AAEP,WAAO,KAAK,KAAK,KAAK,IAAI;AAAA,EAE3B;AAAA,EAEA,OAAO;AAEN,WAAO,KAAK,IAAK,KAAK,GAAK;AAAA,EAE5B;AAED;;;AClvBA,IAAM,YAAN,cAAwB,wBAAwB;AAAA,EAE/C,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAAA,EAEhB;AAAA,EAEA,MAAO,QAAQ,aAAc;AAE5B,UAAM,kBAAkB;AACxB,UAAM,SAAS,IAAI,YAAa,QAAQ,GAAG,eAAgB;AAE3D,UAAM,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAEA,QAAK,OAAQ,CAAE,MAAM,UAAa;AAIjC,aAAO,SAAU,QAAS;AAAA,IAE3B,WAAY,OAAQ,EAAG,MAAM,WAAa;AAIzC,aAAO,SAAU,QAAS;AAAA,IAE3B,OAAO;AAEN,cAAQ,MAAO,sCAAuC;AAAA,IAEvD;AAAA,EAED;AAED;AAEA,SAAS,SAAU,UAAW;AAE7B,QAAM,SAAS,SAAS;AACxB,MAAI,KAAK;AAGT,QAAM,UAAU,OAAQ,EAAG,GAC1B,cAAc,OAAQ,CAAE,GACxBS,UAAS,OAAQ,CAAE,GACnBC,SAAQ,OAAQ,CAAE,GAElB,WAAW,OAAQ,EAAG,GACtB,aAAa,OAAQ,EAAG;AAEzB,UAAS,aAAc;AAAA,IAEtB,KAAK;AACJ,YAAM;AACN,eAAS;AACT;AAAA,IAED,KAAK;AACJ,YAAM;AACN,eAAS;AACT;AAAA,IAED,KAAK;AACJ,YAAM;AACN,eAAS;AACT;AAAA,IAED,KAAK;AACJ,YAAM;AACN,eAAS;AACT;AAAA,IAED;AACC,cAAQ,MAAO,4CAA4C,WAAY;AAAA,EAEzE;AAEA,WAAS,UAAU,KAAK;AACxB,WAAS,MAAM;AACf,WAAS,SAAS;AAClB,WAAS,QAAQA;AACjB,WAAS,SAASD;AAClB,WAAS,cAAc;AACvB,WAAS,aAAa;AACtB,WAAS,YAAe,aAAa;AAErC,SAAO,SAAU,QAAS;AAE3B;AAEA,SAAS,SAAU,UAAW;AAE7B,QAAM,SAAS,SAAS;AAExB,QAAM,eAAe,OAAQ,CAAE,GAC9BA,UAAS,OAAQ,CAAE,GACnBC,SAAQ,OAAQ,CAAE,GAClB,aAAa,OAAQ,CAAE,GACvB,QAAQ,OAAQ,CAAE,GAMlB,eAAe,OAAQ,EAAG,GAE1B,WAAW,OAAQ,EAAG;AAGvB,QAAM,YAAY;AAClB,QAAM,UAAU,IACf,UAAU;AAEX,QAAM,cAAc,QAAQ;AAE5B,MAAI,KAAK;AACT,QAAM,YAAY,eAAe;AAEjC,MAAK,gBAAgB,SAAU;AAE9B,aAAS,YAAY,2BAA2B;AAChD,UAAM;AAAA,EAEP,WAAY,gBAAgB,SAAU;AAErC,aAAS,YAAY,2BAA2B;AAChD,UAAM;AAAA,EAEP,OAAO;AAEN,YAAQ,MAAO,wCAAwC,WAAY;AAAA,EAEpE;AAEA,WAAS,UAAU;AACnB,WAAS,MAAM;AACf,WAAS,SAAS;AAClB,WAAS,QAAQA;AACjB,WAAS,SAASD;AAClB,WAAS,cAAc;AACvB,WAAS,aAAa,aAAa;AAInC,WAAS,YAAe,aAAa;AAErC,SAAO,SAAU,QAAS;AAE3B;AAGA,SAAS,SAAU,UAAW;AAE7B,QAAM,MAAM;AAAA,IACX,SAAS,CAAC;AAAA,IACV,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS;AAAA,IACjB,aAAa,SAAS;AAAA,IACtB,WAAW,SAAS;AAAA,EACrB;AAEA,QAAM,SAAS,SAAS;AAExB,MAAI,aAAa,SAAS,SACzB,WAAW,GACX,YAAY,GACZ,aAAa,GACb,cAAc,GACd,cAAc,GACd,eAAe;AAEhB,QAAM,MAAM,SAAS,KACpB,WAAW,SAAS;AAErB,MAAK,QAAQ,GAAI;AAEhB,iBAAa;AACb,kBAAc;AAAA,EAEf,OAAO;AAEN,iBAAa;AACb,kBAAc;AAAA,EAEf;AAEA,cAAc,aAAa,cAAgB,MAAM;AAEjD,MAAI,QAAQ,SAAS,SAAS,aAAa;AAE3C,MAAI,WAAW;AAEf,SAAQ,WAAW,SAAS,YAAa;AAExC,UAAM,SAAS,SAAS,SAAS,UAChC,UAAU,SAAS,UAAU;AAE9B,kBAAc,SAAS;AACvB,mBAAe,UAAU;AAGzB,QAAK,cAAc,EAAI,eAAc;AACrC,QAAK,eAAe,EAAI,gBAAe;AAEvC,eAAW,cAAc,eAAe;AAExC,aAAU,YAAY,GAAG,YAAY,UAAU,aAAe;AAE7D,YAAM,YAAY,IAAI,WAAY,QAAQ,YAAY,QAAS;AAE/D,YAAM,SAAS;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAEA,UAAI,QAAS,YAAY,SAAS,aAAa,QAAS,IAAI;AAE5D,oBAAc;AAAA,IAEf;AAEA;AAAA,EAED;AAEA,SAAO;AAER;;;AC1MA,IAAM,iBAAiB,MAAO,IAAK,EACjC,KAAM,CAAE,EACR;AAAA,EAAK,CAAE,GAAGE,WACV,KAAK,IAAOA,SAAQ,MAAQ,eAAe,cAAc,GAAI;AAC9D;AAED,IAAM,iBAAN,cAA6B,OAAO;AAAA,EAEnC,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAEf,SAAK,OAAO;AAAA,EAEb;AAAA,EAEA,YAAaA,QAAQ;AAEpB,SAAK,OAAOA;AAEZ,WAAO;AAAA,EAER;AAAA,EAEA,MAAO,QAAQ,QAAS;AAEvB,UAAM,cAAc;AAAA,MACnB,SAAS;AAAA,MACT,oBAAoB;AAAA,MACpB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,IACjB;AACA,UAAM,cAAc,IAAI,YAAY;AAEpC,UAAMC,QAAO,IAAI,SAAU,MAAO;AAElC,QAAI,aAAa;AACjB,UAAM,WAAW,CAAC;AAElB,WAAQ,aAAaA,MAAK,YAAa;AAEtC,YAAM,OAAOA,MAAK,SAAU,UAAW;AAEvC,UAAK,SAAS,KAAO;AAEpB,cAAM,cAAcA,MAAK,SAAU,aAAa,CAAE;AAElD,YACC;AAAA;AAAA,UAEC;AAAA;AAAA,UACA;AAAA;AAAA,UACA;AAAA;AAAA,UACA;AAAA;AAAA,QACD,EAAE,SAAU,WAAY,GACvB;AAED,mBAAS,KAAM;AAAA,YACd,aAAa;AAAA,YACb,SAAS,CAAE,MAAM,WAAY;AAAA,YAC7B,eAAe,aAAa;AAAA,UAC7B,CAAE;AAEF,wBAAc;AAAA,QAEf,OAAO;AAEN,mBAAU,SAAS,SAAS,CAAE,EAAE,QAAQ,KAAM,MAAM,WAAY;AAEhE,wBAAc;AAAA,QAEf;AAAA,MAED,OAAO;AAEN,iBAAU,SAAS,SAAS,CAAE,EAAE,QAAQ,KAAM,IAAK;AAEnD;AAAA,MAED;AAAA,IAED;AAEA,QAAI,cAAc;AAElB,aAAU,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAO;AAE5C,YAAM,EAAE,aAAa,SAAS,cAAc,IAAI,SAAU,CAAE;AAE5D,UAAK,gBAAgB,KAAO;AAAA,MAE5B,WAAY,gBAAgB,KAAO;AAIlC,aAAK;AAAA,UACJ,YAAY,OAAQ,IAAI,WAAY,OAAQ,CAAE;AAAA,UAC9C;AAAA,QACD;AAAA,MAED,WAAY,gBAAgB,KAAO;AAIlC,cAAM,cAAc,IAAI;AAAA,UACvB,IAAI,WAAY,QAAQ,MAAO,CAAE,CAAE,EAAE;AAAA,QACtC;AACA,cAAM,gBAAgB,YAAY,UAAW,GAAG,KAAM;AAEtD,YAAK,kBAAkB,YAAa;AAuBnC,gBAAM,kBAAkB,YAAY,UAAW,CAAE,MAAM;AACvD,gBAAM,iBAAiB;AAIvB,gBAAM,mBAAmB,YAAY;AAAA,YACpC;AAAA,YACA;AAAA,UACD;AACA,gBAAM,qBAAqB,YAAY;AAAA,YACtC,iBAAiB;AAAA,YACjB;AAAA,UACD;AAGA,gBAAM,mBAAmB,YAAY;AAAA,YACpC,iBAAiB;AAAA,YACjB;AAAA,UACD;AACA,gBAAM,qBACL,YAAY,UAAW,iBAAiB,IAAI,eAAgB,IAC5D,gBACA;AAED,yBAAe,IAAI;AAAA,YAClBA,MAAK;AAAA,YACL;AAAA,YACA;AAAA,UACD;AAEA,yBAAe,IAAI;AAAA,YAClBA,MAAK;AAAA,YACL;AAAA,YACA;AAAA,UACD;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAGA,QAAK,CAAE,YAAY,SAAU;AAE5B,YAAM,IAAI,MAAO,kDAAmD;AAAA,IAErE;AAEA,QAAK,gBAAgB,cAAe;AAEnC,WAAK;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAE,WAAWC,QAAOC,YAAY;AAE/B,iBAAQ;AAAA,YACP,OAAAD;AAAA,YACA,QAAAC;AAAA,YACA,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM,KAAK;AAAA,UACZ,CAAE;AAAA,QAEH;AAAA,QACA,CAAE,UAAW;AAEZ,gBAAM,IAAI,MAAO,KAAM;AAAA,QAExB;AAAA,MACD;AAAA,IAED,OAAO;AAEN,YAAM,IAAI,MAAO,uDAAwD;AAAA,IAE1E;AAAA,EAED;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,UAAU,IAAI;AAAA,MACnB,KAAK,SAAS,gBAAgB,IAAI,YAAY,IAAI,IAAI,aAAa;AAAA,MACnE;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,YAAQ,kBAAkB;AAC1B,YAAQ,QAAQ;AAEhB,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,mBAAoB,KAAK,eAAgB;AAChD,WAAO,KAAM,KAAK,CAAE,WAAY;AAE/B,UAAI;AAEH,aAAK;AAAA,UACJ;AAAA,UACA,CAAE,YAAa;AAEd,oBAAQ,QAAQ;AAAA,cACf,MAAM,QAAQ;AAAA,cACd,OAAO,QAAQ;AAAA,cACf,QAAQ,QAAQ;AAAA,YACjB;AACA,oBAAQ,cAAc;AAEtB,gBAAK,OAAS,QAAQ,SAAS,OAAQ;AAAA,UAExC;AAAA,QACD;AAAA,MAED,SAAU,OAAQ;AAEjB,YAAK,QAAU,SAAS,KAAM;AAE9B,gBAAQ,MAAO,KAAM;AAAA,MAEtB;AAAA,IAED,GAAG,YAAY,OAAQ;AAEvB,WAAO;AAAA,EAER;AAAA,EAEA,kBAAmB,eAAe,aAAc;AAE/C,UAAM,YAAY,IAAI,UAAU;AAEhC,UAAM,SAAS,UAAU;AAAA,MACxB,cAAc;AAAA,QACb,cAAc,QAAS,GAAI;AAAA,QAC3B,cAAc,YAAa,GAAI,IAAI;AAAA,MACpC;AAAA,MACA;AAAA,IACD;AAGA,UAAM,CAAE,yBAA0B,IAAI,OAAO;AAAA,MAC5C;AAAA,IACD;AAEA,QAAK,2BAA4B;AAAA,IAEjC,OAAO;AAIN,YAAM,CAAE,WAAY,IAAI,OAAO,qBAAsB,iBAAkB;AAEvE,kBAAY,UAAU,YAAY,aAAc,eAAgB;AAChE,kBAAY,qBACX,YAAY,aAAc,0BAA2B,MAAM;AAC5D,kBAAY,aAAa;AAAA,QACxB,YAAY,aAAc,kBAAmB,KAAK;AAAA,MACnD;AACA,kBAAY,aAAa;AAAA,QACxB,YAAY,aAAc,kBAAmB,KAAK;AAAA,MACnD;AACA,kBAAY,QAAQ;AAAA,QACnB,YAAY,aAAc,aAAc,KAAK;AAAA,MAC9C;AACA,kBAAY,YAAY;AAAA,QACvB,YAAY,aAAc,iBAAkB,KAAM,IAAI;AAAA,MACvD;AACA,kBAAY,YAAY;AAAA,QACvB,YAAY,aAAc,iBAAkB,KAAM,IAAI;AAAA,MACvD;AACA,kBAAY,iBAAiB;AAAA,QAC5B,YAAY,aAAc,sBAAuB,KAAK;AAAA,MACvD;AACA,kBAAY,iBAAiB;AAAA,QAC5B,YAAY,aAAc,sBAAuB,KAAK;AAAA,MACvD;AAAA,IAED;AAAA,EAED;AAAA,EAEA,cAAeH,QAAQ;AAEtB,QAAKA,SAAQ,MAAM,SAAU;AAE5B,aAASA,SAAQ,MAAQ;AAAA,IAE1B;AAEA,QAAKA,SAAQ,MAAO;AAEnB,aAAO,eAAgB,CAAE,CAAEA,MAAM;AAAA,IAElC;AAEA,WAAO,KAAK,IAAOA,SAAQ,MAAQ,eAAe,cAAc,GAAI;AAAA,EAErE;AAAA,EAEA,mBACC,aACA,WACA,eACA,WACA,SACC;AAED,UAAM,yBAAyB,CAAE,WAChC,IAAI,QAAS,CAAE,SAASI,YAAY;AAEnC,YAAM,cAAc,SAAS,cAAe,KAAM;AAElD,kBAAY,SAAS,MAAM;AAE1B,cAAM,QAAQ;AAAA,UACb,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,UACpB,QAAQ;AAAA,QACT;AAEA,YAAI,gBAAiB,YAAY,GAAI;AAErC,gBAAS,KAAM;AAAA,MAEhB;AAEA,kBAAY,UAAU,MAAM;AAE3B,YAAI,gBAAiB,YAAY,GAAI;AAErC,QAAAA,QAAO;AAAA,MAER;AAEA,kBAAY,MAAM,IAAI;AAAA,QACrB,IAAI,KAAM,CAAE,MAAO,GAAG,EAAE,MAAM,aAAa,CAAE;AAAA,MAC9C;AAAA,IAED,CAAE;AAEH,YAAQ,IAAK;AAAA,MACZ,uBAAwB,SAAU;AAAA,MAClC,uBAAwB,aAAc;AAAA,IACvC,CAAE,EACA,KAAM,CAAE,CAAE,UAAU,YAAa,MAAO;AAExC,YAAM,iBAAiB,SAAS,QAAQ,SAAS;AACjD,YAAM,qBAAqB,aAAa,QAAQ,aAAa;AAE7D,UAAK,mBAAmB,oBAAqB;AAE5C;AAAA,UACC;AAAA,QACD;AAEA;AAAA,MAED;AAEA,YAAM,SAAS,SAAS,cAAe,QAAS;AAChD,YAAM,MAAM,OAAO,WAAY,MAAM;AAAA,QACpC,oBAAoB;AAAA,QACpB,YAAY;AAAA,MACb,CAAE;AAEF,aAAO,QAAQ,SAAS;AACxB,aAAO,SAAS,SAAS;AAGzB,UAAI;AAAA,QACH,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,MACV;AACA,YAAM,mBAAmB,IAAI;AAAA,QAC5B;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,QACT,EAAE,YAAY,OAAO;AAAA,MACtB;AAEA,UAAI,UAAW,SAAS,QAAQ,GAAG,CAAE;AACrC,YAAM,eAAe,IAAI;AAAA,QACxB;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,QACT,EAAE,YAAY,OAAO;AAAA,MACtB;AAGA,UAAI;AAEJ,UAAK,KAAK,SAAS,eAAgB;AAElC,oBAAY,IAAI,YAAa,aAAa,KAAK,MAAO,EAAE,KAAM,KAAM;AAAA,MAErE,OAAO;AAEN,oBAAY,IAAI,aAAc,aAAa,KAAK,MAAO,EAAE,KAAM,GAAI;AAAA,MAEpE;AAEA,YAAM,kBAAkB,KAAK;AAAA,QAC5B,KAAK;AAAA;AAAA,UAEJ;AAAA,UACA,YAAY;AAAA,QACb;AAAA,MACD;AACA,YAAM,yBACH,KAAK,KAAM,eAAgB,IAAI,YAAY,mBAC3C,YAAY,iBAAiB,YAAY;AAC5C,YAAM,eAAe,KAAK;AAAA,QACzB,KAAK,IAAK,uBAAuB,CAAI;AAAA,QACrC;AAAA,MACD;AACA,YAAM,cAAc,YAAY,UAAU;AAE1C,eACK,aAAa,GACjB,aAAa,aAAa,KAAK,QAC/B,cAAc,GACb;AAED,cAAMC,KAAM,aAAa,IAAM,SAAS;AACxC,cAAMC,KAAI,KAAK,MAAO,aAAa,IAAI,SAAS,KAAM;AAEtD,iBAAU,eAAe,GAAG,eAAe,GAAG,gBAAkB;AAE/D,gBAAM,WAAW,aAAa,KAAM,aAAa,YAAa;AAE9D,gBAAM,gBAAiBA,KAAI,SAAS,QAAQD,MAAM,IAAI;AACtD,gBAAM,eAAe,iBAAiB,KAAM,YAAa,IAAI;AAG7D,gBAAM,cAAc,cACjB,eACA,KAAK,IAAK,cAAc,IAAM,YAAY,KAAM;AAEnD,gBAAM,WACL,YAAY,cAAe,IAAM,eACjC,YAAY,aAAa;AAE1B,gBAAM,YACH,WAAW,YAAY,cACtB,WAAW,iBAAiB,IAC3B,IACA,KAAK,IAAK,GAAG,WAAW,YAAa,KACzC,YAAY;AAEb,gBAAM,iBAAiB,KAAK;AAAA,YAC3B,KAAK,IAAK,KAAK,cAAe,QAAS,GAAG,CAAE;AAAA,YAC5C;AAAA,UACD;AAEA,oBAAW,aAAa,YAAa,IACpC,KAAK,SAAS,gBACX,UAAU,YAAa,cAAe,IACtC;AAAA,QAEL;AAAA,MAED;AAEA,gBAAW,WAAW,SAAS,OAAO,SAAS,MAAO;AAAA,IAEvD,CAAE,EACD,MAAO,MAAM;AAEb,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAAA,IAED,CAAE;AAAA,EAEJ;AAED;;;AC3jBA,IAAM,aAAN,cAAyB,kBAAkB;AAAA,EAE1C,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAEf,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAEjB;AAAA,EAEA,YAAaE,QAAQ;AAEpB,SAAK,OAAOA;AACZ,WAAO;AAAA,EAER;AAAA,EAEA,YAAaA,QAAQ;AAEpB,SAAK,WAAWA;AAChB,WAAO;AAAA,EAER;AAAA,EAEA,YAAa,MAAM,QAAQ,YAAY,SAAU;AAEhD,UAAM,UAAU,IAAI,YAAY;AAEhC,aAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,cAAQ,OAAQ,CAAE,IAAI;AAAA,IAEvB;AAEA,QAAI,SAAS;AAEb,UAAM,QAAQ;AAEd,aAAS,YAAa,GAAI;AAEzB,YAAM,KAAM,KAAM,CAAE,GAAG,SAAW,OAAQ;AAEzC,gBAAQ,OAAQ,CAAE,IAAI;AAEtB;AAEA,YAAK,WAAW,GAAI;AAEnB,kBAAQ,cAAc;AAEtB,cAAK,OAAS,QAAQ,OAAQ;AAAA,QAE/B;AAAA,MAED,GAAG,QAAW,OAAQ;AAAA,IAEvB;AAEA,aAAU,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAG,GAAI;AAExC,kBAAa,CAAE;AAAA,IAEhB;AAEA,YAAQ,OAAO,KAAK;AACpB,YAAQ,SAAS;AACjB,YAAQ,YAAY;AACpB,YAAQ,kBAAkB;AAE1B,WAAO;AAAA,EAER;AAAA,EAEA,iBAAkB,MAAM,YAAa;AAEpC,WAAO,IAAI,QAAS,CAAE,SAASC,YAAY;AAE1C,WAAK,YAAa,MAAM,SAAS,YAAYA,OAAO;AAAA,IAErD,CAAE;AAAA,EAEH;AAAA,EAEA,MAAO,QAAS;AAEf,UAAM,MAAM,KAAK,OAAQ,MAAO;AAChC,UAAM,OAAO,KAAK,QAAS,GAAI,EAAG,CAAE;AAEpC,UAAMC,QAAO,IAAI,WAAY,IAAK;AAClC,UAAMC,QAAO,IAAI,QAAQ,IAAI,SAAS;AAEtC,UAAM,SAAW,KAAK,SAAS,gBAAkB,IAAI,YAAaA,KAAK,IAAI,IAAI,aAAcA,KAAK;AAIlG,aAAU,IAAI,GAAG,IAAID,MAAK,QAAQ,KAAK,GAAI;AAE1C,YAAM,IAAIA,MAAM,IAAI,CAAE,IAAI;AAC1B,YAAME,KAAIF,MAAM,IAAI,CAAE,IAAI;AAC1B,YAAMG,KAAIH,MAAM,IAAI,CAAE,IAAI;AAC1B,YAAMI,KAAIJ,MAAM,IAAI,CAAE,IAAI;AAE1B,UAAK,KAAK,SAAS,eAAgB;AAElC,eAAQ,IAAI,CAAE,IAAI,UAAU,YAAa,KAAK,IAAK,IAAII,KAAI,KAAK,UAAU,KAAM,CAAE;AAClF,eAAQ,IAAI,CAAE,IAAI,UAAU,YAAa,KAAK,IAAKF,KAAIE,KAAI,KAAK,UAAU,KAAM,CAAE;AAClF,eAAQ,IAAI,CAAE,IAAI,UAAU,YAAa,KAAK,IAAKD,KAAIC,KAAI,KAAK,UAAU,KAAM,CAAE;AAClF,eAAQ,IAAI,CAAE,IAAI,UAAU,YAAa,CAAE;AAAA,MAE5C,OAAO;AAEN,eAAQ,IAAI,CAAE,IAAI,IAAIA,KAAI,KAAK;AAC/B,eAAQ,IAAI,CAAE,IAAIF,KAAIE,KAAI,KAAK;AAC/B,eAAQ,IAAI,CAAE,IAAID,KAAIC,KAAI,KAAK;AAC/B,eAAQ,IAAI,CAAE,IAAI;AAAA,MAEnB;AAAA,IAED;AAEA,WAAO;AAAA,MACN,OAAO,IAAI;AAAA,MACX,QAAQ,IAAI;AAAA,MACZ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,KAAK;AAAA,MACX,OAAO;AAAA,IACR;AAAA,EAED;AAED;AAIA,IAAI,OAAO,CAAC;AAEZ,KAAK,UAAU,SAAW,KAAM;AAE/B,MAAI,IAAI,IAAI,OAAO,IAAI,IAAI;AAC3B,MAAK,IAAI,KAAK,QAAQ,KAAO,QAAO,CAAE,KAAK,QAAQ,YAAa,IAAI,MAAM,GAAG,GAAG,GAAI,EAAE,MAAO;AAE7F,MAAI,OAAO,CAAC;AACZ,MAAK,IAAI,OAAQ,CAAE,EAAE,QAAQ,KAAO,KAAI,OAAQ,CAAE,EAAE,OAAO,IAAI;AAE/D,MAAI,MAAM,IAAI,IAAI,GAAG,MAAM,IAAI,WAAY,GAAI,GAAG,QAAQ,IAAI,WAAY,GAAI,GAAG,OAAO,IAAI,WAAY,GAAI;AAC5G,WAAU,IAAI,GAAG,IAAI,IAAI,OAAO,QAAQ,KAAO;AAE9C,QAAI,MAAM,IAAI,OAAQ,CAAE;AACxB,QAAI,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK;AACzE,QAAI,QAAQ,KAAK,QAAQ,YAAa,IAAI,MAAM,IAAI,IAAI,GAAI;AAE5D,QAAK,KAAK,EAAI,UAAU,IAAI,GAAG,IAAI,KAAK,IAAO,MAAM,CAAE,IAAI,IAAK,CAAE;AAElE,QAAK,IAAI,SAAS,EAAI,MAAK,UAAW,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAE;AAAA,aAChE,IAAI,SAAS,EAAI,MAAK,UAAW,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAE;AAE/E,SAAK,KAAM,IAAI,OAAO,MAAO,CAAE,CAAE;AAEjC,QAAK,IAAI,WAAW,EAAI,MAAK,UAAW,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAE;AAAA,aAClE,IAAI,WAAW,EAAI,UAAU,IAAI,GAAG,IAAI,KAAK,IAAO,KAAK,CAAE,IAAI,KAAM,CAAE;AAAA,EAElF;AAEA,SAAO;AAER;AAEA,KAAK,QAAQ,cAAc,SAAWJ,OAAM,GAAG,GAAG,KAAM;AAEvD,MAAI,OAAO,IAAI,GAAG,MAAM,KAAK,OAAO,QAAS,GAAI;AACjD,MAAI,MAAM,KAAK,KAAM,IAAI,MAAM,CAAE;AAEjC,MAAI,KAAK,IAAI,WAAY,OAAO,CAAE,GAAG,OAAO,IAAI,YAAa,GAAG,MAAO;AACvE,MAAI,QAAQ,IAAI,OAAO,QAAQ,IAAI;AACnC,MAAI,KAAK,KAAK,KAAK;AAEnB,MAAK,SAAS,GAAI;AAEjB,QAAI,QAAQ,QAAQ;AACpB,QAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,OAAO,KAAK,GAAI;AAEtD,SAAI,CAAE,IAAIA,MAAM,CAAE;AAAG,SAAI,IAAI,CAAE,IAAIA,MAAM,IAAI,CAAE;AAAG,SAAI,IAAI,CAAE,IAAIA,MAAM,IAAI,CAAE;AAAG,SAAI,IAAI,CAAE,IAAIA,MAAM,IAAI,CAAE;AAAA,IAE1G;AAEA,QAAK,SAAS,GAAK,UAAU,IAAI,GAAG,IAAI,OAAO,KAAO;AAErD,SAAI,CAAE,IAAIA,MAAM,KAAK,CAAE;AAAA,IAExB;AAAA,EAED,WAAY,SAAS,GAAI;AAExB,QAAI,KAAK,IAAI,KAAM,MAAO;AAC1B,QAAK,MAAM,MAAO;AAEjB,UAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEnD,YAAI,KAAK,IAAI;AAAG,aAAM,CAAE,IAAM,OAAO,KAASA,MAAM,KAAK,CAAE,KAAK,KAASA,MAAM,KAAK,CAAE,KAAK,IAAMA,MAAM,EAAG;AAAA,MAE3G;AAEA,UAAK,SAAS,GAAK,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEpD,YAAI,KAAK,IAAI;AAAG,aAAM,CAAE,IAAM,OAAO,KAASA,MAAM,KAAK,CAAE,KAAK,KAASA,MAAM,KAAK,CAAE,KAAK,IAAMA,MAAM,EAAG;AAAA,MAE3G;AAAA,IAED,OAAO;AAEN,UAAI,KAAK,GAAI,CAAE,GAAG,KAAK,GAAI,CAAE,GAAG,KAAK,GAAI,CAAE;AAC3C,UAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEnD,YAAI,KAAK,KAAK,GAAG,KAAK,IAAI;AAAG,aAAM,CAAE,IAAM,OAAO,KAASA,MAAM,KAAK,CAAE,KAAK,KAASA,MAAM,KAAK,CAAE,KAAK,IAAMA,MAAM,EAAG;AACvH,YAAKA,MAAM,EAAG,KAAK,MAAMA,MAAM,KAAK,CAAE,KAAK,MAAMA,MAAM,KAAK,CAAE,KAAK,GAAK,IAAI,KAAK,CAAE,IAAI;AAAA,MAExF;AAEA,UAAK,SAAS,GAAK,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEpD,YAAI,KAAK,KAAK,GAAG,KAAK,IAAI;AAAG,aAAM,CAAE,IAAM,OAAO,KAASA,MAAM,KAAK,CAAE,KAAK,KAASA,MAAM,KAAK,CAAE,KAAK,IAAMA,MAAM,EAAG;AACvH,YAAK,GAAIA,OAAM,EAAG,KAAK,MAAM,GAAIA,OAAM,KAAK,CAAE,KAAK,MAAM,GAAIA,OAAM,KAAK,CAAE,KAAK,GAAK,IAAI,KAAK,CAAE,IAAI;AAAA,MAEpG;AAAA,IAED;AAAA,EAED,WAAY,SAAS,GAAI;AAExB,QAAIK,KAAI,IAAI,KAAM,MAAO,GAAG,KAAK,IAAI,KAAM,MAAO,GAAG,KAAK,KAAK,GAAG,SAAS;AAE3E,QAAK,SAAS,EAAI,UAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEhD,UAAI,KAAKA,KAAI,KAAK,KAAKA,KAAI;AAC3B,eAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,YAAI,KAAO,KAAK,KAAO,GAAG,IAAQN,MAAM,MAAO,KAAK,EAAI,KAAO,MAAQ,IAAI,MAAO,KAAU,GAAK,KAAK,IAAI;AAAG,WAAI,EAAG,IAAIK,GAAG,EAAG;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAM,IAAI,KAAO,GAAI,CAAE,IAAI;AAAA,MAEhO;AAAA,IAED;AAEA,QAAK,SAAS,EAAI,UAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEhD,UAAI,KAAKA,KAAI,KAAK,KAAKA,KAAI;AAC3B,eAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,YAAI,KAAO,KAAK,KAAO,GAAG,IAAQN,MAAM,MAAO,KAAK,EAAI,KAAO,MAAQ,IAAI,MAAO,KAAU,GAAK,KAAK,IAAI;AAAG,WAAI,EAAG,IAAIK,GAAG,EAAG;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAM,IAAI,KAAO,GAAI,CAAE,IAAI;AAAA,MAEhO;AAAA,IAED;AAEA,QAAK,SAAS,EAAI,UAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEhD,UAAI,KAAKA,KAAI,KAAK,KAAKA,KAAI;AAC3B,eAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,YAAI,KAAO,KAAK,KAAO,GAAG,IAAQN,MAAM,MAAO,KAAK,EAAI,KAAO,MAAQ,IAAI,MAAO,KAAU,IAAM,KAAK,IAAI;AAAG,WAAI,EAAG,IAAIK,GAAG,EAAG;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAM,IAAI,KAAO,GAAI,CAAE,IAAI;AAAA,MAEjO;AAAA,IAED;AAEA,QAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEnD,UAAI,KAAK,KAAK,GAAG,IAAIL,MAAM,CAAE,GAAG,KAAK,IAAI;AAAG,SAAI,EAAG,IAAIK,GAAG,EAAG;AAAG,SAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,SAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,SAAI,KAAK,CAAE,IAAM,IAAI,KAAO,GAAI,CAAE,IAAI;AAAA,IAE/J;AAAA,EAED,WAAY,SAAS,GAAI;AAExB,QAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEnD,UAAI,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAKL,MAAM,EAAG;AAAG,SAAI,EAAG,IAAI;AAAI,SAAI,KAAK,CAAE,IAAI;AAAI,SAAI,KAAK,CAAE,IAAI;AAAI,SAAI,KAAK,CAAE,IAAIA,MAAM,KAAK,CAAE;AAAA,IAEjI;AAEA,QAAK,SAAS,GAAK,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEpD,UAAI,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAKA,MAAM,EAAG;AAAG,SAAI,EAAG,IAAI;AAAI,SAAI,KAAK,CAAE,IAAI;AAAI,SAAI,KAAK,CAAE,IAAI;AAAI,SAAI,KAAK,CAAE,IAAIA,MAAM,KAAK,CAAE;AAAA,IAEjI;AAAA,EAED,WAAY,SAAS,GAAI;AAExB,QAAI,KAAK,IAAI,KAAM,MAAO,IAAI,IAAI,KAAM,MAAO,IAAI;AACnD,aAAUM,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAE9B,UAAI,MAAMA,KAAI,KAAK,KAAKA,KAAI;AAC5B,UAAK,SAAS,EAAI,UAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEhD,YAAI,KAAK,OAAUP,MAAM,OAAQO,OAAM,EAAI,MAAQ,KAAMA,KAAI,KAAU,IAAK,KAAO,MAAM,KAAK,MAAQ,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAE7K;AAAA,eACU,SAAS,EAAI,UAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAErD,YAAI,KAAK,MAASP,MAAM,OAAQO,OAAM,EAAI,MAAQ,MAAQA,KAAI,MAAO,KAAU,IAAK,KAAO,MAAM,KAAK,KAAO,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAEpL;AAAA,eACU,SAAS,EAAI,UAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAErD,YAAI,KAAK,MAASP,MAAM,OAAQO,OAAM,EAAI,MAAQ,MAAQA,KAAI,MAAO,KAAU,KAAM,KAAO,MAAM,KAAK,KAAO,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAErL;AAAA,eACU,SAAS,EAAI,UAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAErD,YAAI,KAAKP,MAAM,MAAMO,EAAE,GAAG,KAAO,MAAM,KAAO,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAErH;AAAA,eACU,SAAS,GAAK,UAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEtD,YAAI,KAAKP,MAAM,OAAQO,MAAK,EAAI,GAAG,KAAO,GAAIP,OAAM,OAAQO,MAAK,EAAI,KAAK,KAAO,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAExJ;AAAA,IAED;AAAA,EAED;AAGA,SAAO;AAER;AAIA,KAAK,SAAS,SAAW,MAAO;AAE/B,MAAIP,QAAO,IAAI,WAAY,IAAK,GAAG,SAAS,GAAG,MAAM,KAAK,MAAM,MAAM,IAAI,YAAY,MAAM,IAAI;AAChG,MAAI,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE;AACjC,MAAI,KAAK,IAAI,WAAYA,MAAK,MAAO,GAAG,OAAO;AAC/C,MAAIQ,KAAI,OAAO;AACf,MAAIC,OAAM,MAAM;AAEhB,MAAI,OAAO,CAAE,KAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAK;AAC5D,WAAU,IAAI,GAAG,IAAI,GAAG,IAAO,KAAKT,MAAM,CAAE,KAAK,KAAM,CAAE,EAAI,OAAM,IAAI,MAAO,8BAA+B;AAE7G,SAAQ,SAASA,MAAK,QAAS;AAE9B,QAAI,MAAM,IAAI,SAAUA,OAAM,MAAO;AAAG,cAAU;AAClD,QAAI,OAAO,IAAI,UAAWA,OAAM,QAAQ,CAAE;AAAG,cAAU;AAGvD,QAAK,QAAQ,QAAS;AAErB,WAAK,OAAO,MAAOA,OAAM,QAAQ,GAAI;AAAA,IAEtC,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAIA,MAAK,MAAO,QAAQ,SAAS,CAAE;AAAA,IAEnD,WAAY,QAAQ,QAAS;AAE5B,eAAU,IAAI,GAAG,IAAI,KAAK,IAAO,IAAI,OAAO,CAAE,IAAIA,MAAM,SAAS,CAAE;AACnE,cAAQ;AAAA,IAET,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAI,EAAE,YAAY,IAAKA,OAAM,MAAO,GAAG,WAAW,IAAKA,OAAM,SAAS,CAAE,EAAE;AACzF,MAAAQ,MAAK,IAAI,WAAYR,MAAK,MAAO;AAAA,IAElC,WAAY,QAAQ,QAAS;AAE5B,UAAK,QAAQ,GAAI;AAEhB,YAAI,KAAK,IAAI,OAAQ,IAAI,OAAO,SAAS,CAAE;AAC3C,WAAG,OAAO,KAAK,OAAO,YAAa,KAAKQ,IAAG,MAAO,GAAG,IAAK,GAAG,GAAG,KAAK,OAAO,GAAG,KAAK,MAAO;AAAG,eAAO;AAAA,MAEtG;AAEA,UAAI,MAAM,EAAE,GAAG,IAAKR,OAAM,SAAS,EAAG,GAAG,GAAG,IAAKA,OAAM,SAAS,EAAG,GAAG,OAAO,IAAKA,OAAM,SAAS,CAAE,GAAG,QAAQ,IAAKA,OAAM,SAAS,CAAE,EAAE;AACtI,UAAI,MAAM,IAAKA,OAAM,SAAS,EAAG;AAAG,YAAM,IAAKA,OAAM,SAAS,EAAG,KAAM,OAAO,IAAI,MAAM;AACxF,UAAI,MAAM,EAAE,MAAM,KAAK,OAAO,KAAK,MAAO,MAAM,GAAK,GAAG,SAASA,MAAM,SAAS,EAAG,GAAG,OAAOA,MAAM,SAAS,EAAG,EAAE;AAEjH,UAAI,OAAO,KAAM,GAAI;AAAA,IAEtB,WAAY,QAAQ,QAAS;AAE5B,eAAU,IAAI,GAAG,IAAI,MAAM,GAAG,IAAO,CAAAQ,IAAI,OAAO,CAAE,IAAIR,MAAM,SAAS,IAAI,CAAE;AAC3E,cAAQ,MAAM;AAAA,IAEf,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAI,CAAE,IAAI,SAAUA,OAAM,MAAO,GAAG,IAAI,SAAUA,OAAM,SAAS,CAAE,GAAGA,MAAM,SAAS,CAAE,CAAE;AAAA,IAEzG,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAI,CAAC;AACpB,eAAU,IAAI,GAAG,IAAI,GAAG,IAAO,KAAI,KAAM,IAAK,EAAE,KAAM,IAAI,SAAUA,OAAM,SAAS,IAAI,CAAE,CAAE;AAAA,IAE5F,WAAY,QAAQ,UAAU,QAAQ,QAAS;AAE9C,UAAK,IAAI,KAAM,IAAK,KAAK,KAAO,KAAI,KAAM,IAAK,IAAI,CAAC;AACpD,UAAI,KAAK,IAAI,SAAUA,OAAM,MAAO;AACpC,aAAO,IAAI,UAAWA,OAAM,QAAQ,KAAK,MAAO;AAChD,UAAI,KAAK,SAAS,MAAM,KAAK;AAC7B,UAAK,QAAQ,OAAS,CAAAS,QAAO,IAAI,UAAWT,OAAM,KAAK,GAAG,EAAG;AAAA,WACxD;AAEJ,cAAM,KAAK,OAAO,SAAUA,MAAK,MAAO,KAAK,GAAG,KAAK,IAAI,EAAG,CAAE;AAC9D,QAAAS,QAAO,IAAI,SAAU,KAAK,GAAG,IAAI,MAAO;AAAA,MAEzC;AAEA,UAAI,KAAM,IAAK,EAAG,IAAK,IAAIA;AAAA,IAE5B,WAAY,QAAQ,QAAS;AAE5B,UAAK,IAAI,KAAM,IAAK,KAAK,KAAO,KAAI,KAAM,IAAK,IAAI,CAAC;AACpD,UAAI,KAAK,GAAG,MAAM;AAClB,WAAK,IAAI,SAAUT,OAAM,GAAI;AAC7B,aAAO,IAAI,UAAWA,OAAM,KAAK,KAAK,GAAI;AAAG,YAAM,KAAK;AACxD,UAAI,QAAQA,MAAM,GAAI;AAAG,aAAO;AAChC,WAAK,IAAI,SAAUA,OAAM,GAAI;AAC7B,UAAI,UAAWA,OAAM,KAAK,KAAK,GAAI;AAAG,YAAM,KAAK;AACjD,WAAK,IAAI,SAAUA,OAAM,GAAI;AAC7B,UAAI,SAAUA,OAAM,KAAK,KAAK,GAAI;AAAG,YAAM,KAAK;AAChD,UAAI,KAAK,OAAQ,MAAM;AACvB,UAAK,SAAS,EAAI,CAAAS,QAAO,IAAI,SAAUT,OAAM,KAAK,EAAG;AAAA,WAChD;AAEJ,cAAM,KAAK,OAAO,SAAUA,MAAK,MAAO,KAAK,MAAM,EAAG,CAAE;AACxD,QAAAS,QAAO,IAAI,SAAU,KAAK,GAAG,IAAI,MAAO;AAAA,MAEzC;AAEA,UAAI,KAAM,IAAK,EAAG,IAAK,IAAIA;AAAA,IAE5B,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAI,IAAI,UAAWT,OAAM,QAAQ,GAAI;AAAA,IAErD,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAK,IAAI,KAAM,MAAO,EAAE,SAAS;AACrC,UAAI,KAAM,IAAK,IAAI,CAAC;AAAG,eAAU,IAAI,GAAG,IAAI,IAAI,IAAO,KAAI,KAAM,IAAK,EAAE,KAAM,IAAKA,OAAM,SAAS,IAAI,CAAE,CAAE;AAAA,IAE3G,WAAY,QAAQ,QAAS;AAE5B,UAAK,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,IAAI,UAAWA,OAAM,QAAQ,GAAI;AAAA,eAChE,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,IAAKA,OAAM,MAAO;AAAA,eACtD,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,CAAE,IAAKA,OAAM,MAAO,GAAG,IAAKA,OAAM,SAAS,CAAE,GAAG,IAAKA,OAAM,SAAS,CAAE,CAAE;AAAA,IAGvH,WAAY,QAAQ,OAAS,KAAI,KAAM,IAAK,IAAI,IAAI,SAAUA,OAAM,MAAO,IAAI;AAAA,aACrE,QAAQ,OAAS,KAAI,KAAM,IAAK,IAAIA,MAAM,MAAO;AAAA,aACjD,QAAQ,QAAS;AAE1B,UAAK,IAAI,SAAS,KAAK,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,CAAE,IAAKA,OAAM,MAAO,CAAE;AAAA,eACvE,IAAI,SAAS,KAAK,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,CAAE,IAAKA,OAAM,MAAO,GAAG,IAAKA,OAAM,SAAS,CAAE,GAAG,IAAKA,OAAM,SAAS,CAAE,CAAE;AAAA,eAC9H,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAIA,MAAM,MAAO;AAAA,IAE5D,WAAY,QAAQ,QAAS;AAE5B;AAAA,IAED;AAGA,cAAU;AACV,QAAI,SAAUA,OAAM,MAAO;AAAG,cAAU;AAAA,EAEzC;AAEA,MAAK,QAAQ,GAAI;AAEhB,QAAI,KAAK,IAAI,OAAQ,IAAI,OAAO,SAAS,CAAE;AAC3C,OAAG,OAAO,KAAK,OAAO,YAAa,KAAKQ,IAAG,MAAO,GAAG,IAAK,GAAG,GAAG,KAAK,OAAO,GAAG,KAAK,MAAO;AAAA,EAE5F;AAEA,MAAI,OAAO,KAAK,OAAO,YAAa,KAAK,IAAI,IAAI,OAAO,IAAI,MAAO;AAEnE,SAAO,IAAI;AAAU,SAAO,IAAI;AAAW,SAAO,IAAI;AACtD,SAAO;AAER;AAEA,KAAK,OAAO,cAAc,SAAW,KAAK,IAAI,GAAG,GAAI;AAEpD,MAAI,MAAM,KAAK,OAAO,QAAS,GAAI,GAAG,MAAM,KAAK,KAAM,IAAI,MAAM,CAAE,GAAG,OAAO,IAAI,YAAc,MAAM,IAAI,IAAI,aAAc,CAAE;AAC7H,MAAK,IAAI,KAAM,MAAO,EAAI,MAAK,KAAK,WAAY,IAAI,IAAK;AAAA,MACpD,MAAK,KAAK,OAAO,SAAU,IAAI,IAAK;AAEzC,MAAK,IAAI,aAAa,EAAI,MAAK,KAAK,OAAO,YAAa,IAAI,KAAK,GAAG,GAAG,CAAE;AAAA,WAC/D,IAAI,aAAa,EAAI,MAAK,KAAK,OAAO,eAAgB,IAAI,GAAI;AAExE,SAAO;AAER;AAEA,KAAK,OAAO,WAAW,SAAWR,OAAM,MAAO;AAE9C,MAAI,MAAM,KAAM,YAAa,EAAG,IAAI,WAAYA,MAAK,QAAQ,GAAGA,MAAK,SAAS,CAAE,GAAG,IAAK;AAAG,SAAO;AAEnG;AAEA,KAAK,aAAa,WAAY;AAE7B,MAAI,IAAI,CAAC;AAAG,IAAE,IAAI,CAAC;AAAG,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAE/C,QAAIU,KAAI,YAAY,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAGC,KAAI,GAAGC,KAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAGC;AACtF,QAAK,EAAG,CAAE,KAAK,KAAK,EAAG,CAAE,KAAK,EAAI,QAAO,IAAI,IAAI,IAAIH,GAAG,CAAE;AAAG,QAAI,IAAI,EAAE,GAAGI,KAAI,EAAE,GAAGC,KAAI,EAAE,GAAGC,KAAI,EAAE,GAAG,IAAI,EAAE,GAAGC,KAAI,EAAE,GAAG,IAAI,EAAE,GAAGd,KAAI,EAAE,GAAGe,KAAI,KAAK;AAClJ,QAAKA,GAAG,KAAI,IAAIR,GAAG,EAAE,WAAW,KAAK,CAAE;AAAG,WAAQ,KAAK,GAAI;AAE1D,UAAII,GAAG,GAAG,GAAG,CAAE;AAAG,UAAIA,GAAG,GAAG,IAAI,GAAG,CAAE;AAAG,WAAK;AAAG,UAAK,KAAK,GAAI;AAE7D,aAAO,IAAI,MAAO,EAAG,MAAK,KAAM,IAAI;AACpC,YAAI,KAAM,MAAM,KAAM,GAAGK,KAAI,EAAG,IAAI,CAAE,IAAI,EAAG,IAAI,CAAE,KAAK;AAAG,YAAKD,GAAG,KAAI,EAAE,EAAE,EAAG,GAAG,IAAIC,EAAE;AAAG,UAAE,IAAK,IAAIT,GAAG,EAAE,QAAQ,EAAE,aAAa,GAAGS,EAAE,GAAG,CAAE;AAAG,YAAI,IAAIA,MAAK;AAC3J,aAAKA;AAAG;AAAA,MAGT;AAEA,UAAKD,GAAG,KAAI,EAAE,EAAE,EAAG,GAAG,KAAM,KAAK,GAAK;AAAG,UAAK,KAAK,GAAI;AAEtD,YAAIf,GAAE;AAAG,QAAAU,KAAIV,GAAE;AAAG,QAAAS,MAAM,KAAK,KAAM;AAAG,aAAM,KAAK,KAAM;AAAA,MAExD;AAEA,UAAK,KAAK,GAAI;AAEb,YAAIG,GAAG,GAAG,GAAG,CAAE,IAAI;AACnB,YAAIA,GAAG,GAAG,IAAI,GAAG,CAAE,IAAI;AAAG,QAAAJ,KAAII,GAAG,GAAG,IAAI,IAAI,CAAE,IAAI;AAAG,aAAK;AAAI,YAAI,IAAI;AAAG,iBAAUK,KAAI,GAAGA,KAAI,IAAIA,MAAK,GAAI;AAE1G,UAAAjB,GAAE,EAAGiB,EAAE,IAAI;AAAG,UAAAjB,GAAE,EAAGiB,KAAI,CAAE,IAAI;AAAA,QAE9B;AAEA,iBAAUA,KAAI,GACbA,KAAIT,IAAGS,MAAO;AAEd,cAAI,IAAIL,GAAG,GAAG,IAAIK,KAAI,GAAG,CAAE;AAAG,UAAAjB,GAAE,GAAKA,GAAE,EAAGiB,EAAE,KAAK,KAAM,CAAE,IAAI;AAAG,cAAK,IAAI,EAAG,KAAI;AAAA,QAGjF;AAEA,aAAK,IAAIT;AAAG,UAAGR,GAAE,GAAG,CAAE;AAAG,QAAAc,GAAGd,GAAE,GAAG,GAAGA,GAAE,CAAE;AAAG,YAAIA,GAAE;AAAG,QAAAU,KAAIV,GAAE;AAC1D,YAAIa,GAAGb,GAAE,IAAK,KAAK,KAAM,GAAG,IAAI,GAAG,GAAG,GAAGA,GAAE,CAAE;AAAG,YAAI,IAAI,EAAE,EAAGA,GAAE,GAAG,GAAG,GAAGA,GAAE,CAAE;AAAG,QAAAS,MAAM,KAAK,KAAM;AAAG,YAAI,IAAI,EAAE,EAAGT,GAAE,GAAG,GAAG,GAAGA,GAAE,CAAE;AAAG,aAAM,KAAK,KAAM;AAAG,UAAGA,GAAE,GAAG,CAAE;AAChK,QAAAc,GAAGd,GAAE,GAAG,GAAG,CAAE;AAAG,UAAGA,GAAE,GAAG,CAAE;AAAG,QAAAc,GAAGd,GAAE,GAAG,GAAGU,EAAE;AAAA,MAG3C;AAEA,aAAQ,MAAM;AAEb,YAAI,IAAI,EAAG,EAAG,GAAG,CAAE,IAAID,EAAE;AAAG,aAAK,IAAI;AAAI,YAAIP,KAAI,MAAM;AAAG,YAAKA,OAAM,KAAK,GAAI;AAE7E,YAAG,GAAK,IAAIA;AAAA,QAEb,WAAYA,MAAK,KAAM;AAEtB;AAAA,QAED,OAAO;AAEN,cAAI,IAAI,IAAIA,KAAI;AAChB,cAAKA,KAAI,KAAM;AAEd,gBAAI,IAAIF,GAAE,EAAGE,KAAI,GAAI;AAAG,gBAAI,KAAM,MAAM,KAAMU,GAAG,GAAG,GAAG,IAAI,CAAE;AAAG,iBAAK,IAAI;AAAA,UAE1E;AAEA,cAAIM,KAAIR,GAAG,EAAG,GAAG,CAAE,IAAI,CAAE;AAAG,eAAKQ,KAAI;AAAI,cAAI,IAAIA,OAAM,GAAGC,KAAInB,GAAE,EAAG,CAAE,GAAGC,MAAMkB,OAAM,KAAMR,GAAG,GAAG,GAAGQ,KAAI,EAAG;AAC1G,eAAKA,KAAI;AAAI,iBAAQ,IAAI,GAAI;AAE5B,cAAG,CAAE,IAAI,EAAG,MAAOlB,EAAE;AAAG,cAAG,CAAE,IAAI,EAAG,MAAOA,EAAE;AAAG,cAAG,CAAE,IAAI,EAAG,MAAOA,EAAE;AAAG,cAAG,CAAE,IAAI,EAAG,MAAOA,EAAE;AAAA,UAE9F;AAEA,cAAI;AAAA,QAGL;AAAA,MAED;AAAA,IAED;AAEA,WAAO,EAAE,UAAU,IAAI,IAAI,EAAE,MAAO,GAAG,CAAE;AAAA,EAG1C;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,QAAIM,KAAI,EAAE;AAAQ,QAAK,KAAKA,GAAI,QAAO;AAAG,QAAI,IAAI,IAAI,WAAYA,MAAK,CAAE;AAAG,MAAE,IAAK,GAAG,CAAE;AAAG,WAAO;AAAA,EAEnG;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGA,IAAG,GAAGI,IAAGC,IAAI;AAErC,QAAIC,KAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAGC,KAAI;AAAG,WAAQA,KAAIP,IAAI;AAEhD,UAAI,IAAI,EAAG,EAAG,GAAGI,EAAE,IAAI,CAAE;AAAG,MAAAA,MAAK,IAAI;AAAI,UAAIX,KAAI,MAAM;AACvD,UAAKA,MAAK,IAAK;AAEd,QAAAY,GAAGE,EAAE,IAAId;AAAG,QAAAc;AAAA,MAEb,OAAO;AAEN,YAAIC,KAAI,GAAG,IAAI;AAAG,YAAKf,MAAK,IAAK;AAEhC,cAAI,IAAIa,GAAG,GAAGF,IAAG,CAAE;AAAG,UAAAA,MAAK;AAAG,UAAAI,KAAIH,GAAGE,KAAI,CAAE;AAAA,QAE5C,WAAYd,MAAK,IAAK;AAErB,cAAI,IAAIa,GAAG,GAAGF,IAAG,CAAE;AACnB,UAAAA,MAAK;AAAA,QAGN,WAAYX,MAAK,IAAK;AAErB,cAAI,KAAKa,GAAG,GAAGF,IAAG,CAAE;AAAG,UAAAA,MAAK;AAAA,QAE7B;AAEA,YAAI,IAAIG,KAAI;AAAG,eAAQA,KAAI,GAAI;AAE9B,UAAAF,GAAGE,EAAE,IAAIC;AAAG,UAAAD;AAAA,QAEb;AAAA,MAED;AAAA,IAED;AAEA,WAAOH;AAAA,EAGR;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGJ,IAAG,GAAI;AAE/B,QAAII,KAAI,GAAGC,KAAI,GAAGC,KAAI,EAAE,WAAW;AACnC,WAAQD,KAAIL,IAAI;AAEf,UAAI,IAAI,EAAGK,KAAI,CAAE;AAAG,QAAGA,MAAK,CAAE,IAAI;AAAG,SAAKA,MAAK,KAAM,CAAE,IAAI;AAAG,UAAK,IAAID,GAAG,CAAAA,KAAI;AAAG,MAAAC;AAAA,IAElF;AAEA,WAAQA,KAAIC,IAAI;AAEf,QAAGD,MAAK,CAAE,IAAI;AAAG,SAAKA,MAAK,KAAM,CAAE,IAAI;AAAG,MAAAA;AAAA,IAE3C;AAEA,WAAOD;AAAA,EAGR;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,QAAIJ,KAAI,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQI,IAAGC,IAAGC,IAAG,GAAGC,IAAG,IAAIP,GAAE;AAAG,aAAU,IAAI,GAAG,KAAK,GAAG,IAAM,GAAG,CAAE,IAAI;AAAG,SAAM,IAAI,GAAG,IAAI,GAAG,KAAK,EAAG,GAAG,EAAG,CAAE,CAAE;AACtI,QAAIP,KAAIO,GAAE;AAAG,IAAAI,KAAI;AAAG,MAAG,CAAE,IAAI;AAAG,SAAMC,KAAI,GAAGA,MAAK,GAAGA,MAAO;AAE3D,MAAAD,KAAIA,KAAI,EAAGC,KAAI,CAAE,KAAK;AAAG,MAAAZ,GAAGY,EAAE,IAAID;AAAA,IAEnC;AAEA,SAAME,KAAI,GAAGA,KAAI,GAAGA,MAAK,GAAI;AAE5B,MAAAC,KAAI,EAAGD,KAAI,CAAE;AAAG,UAAKC,MAAK,GAAI;AAE7B,UAAGD,EAAE,IAAIb,GAAGc,EAAE;AACd,QAAAd,GAAGc,EAAE;AAAA,MAGN;AAAA,IAED;AAAA,EAED;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGP,IAAI;AAE5B,QAAI,IAAI,EAAE,QAAQI,KAAI,EAAE,EAAE,GAAGC,KAAID,GAAE;AAAG,aAAUE,KAAI,GAAGA,KAAI,GAAGA,MAAK,EAAI,KAAK,EAAGA,KAAI,CAAE,KAAK,GAAI;AAE7F,UAAI,IAAIA,MAAK,GAAGC,KAAI,EAAGD,KAAI,CAAE,GAAG,IAAI,KAAK,IAAIC,IAAGd,KAAI,IAAIc,IAAGC,KAAI,EAAGF,EAAE,KAAKb,IAAG,IAAIe,MAAM,KAAKf;AAC3F,aAAQe,MAAK,GAAI;AAEhB,YAAI,IAAIH,GAAGG,EAAE,MAAM,KAAK;AAAG,QAAAR,GAAG,CAAE,IAAI;AAAG,QAAAQ;AAAA,MAExC;AAAA,IAED;AAAA,EAED;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,QAAIR,KAAI,EAAE,EAAE,EAAE,GAAG,IAAI,KAAK;AAAG,aAAUI,KAAI,GAAGA,KAAI,EAAE,QACnDA,MAAK,GAAI;AAET,UAAIC,KAAI,EAAGD,EAAE,KAAK,IAAI,EAAGA,KAAI,CAAE;AAAG,QAAGA,EAAE,IAAIJ,GAAGK,EAAE,MAAM;AAAA,IAEvD;AAAA,EAED;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGL,IAAI;AAE5B,IAAAA,KAAIA,OAAO,IAAI;AAAK,QAAI,IAAI,MAAM;AAAG,MAAG,CAAE,KAAKA;AAAG,MAAG,IAAI,CAAE,KAAKA,OAAM;AAAA,EAEvE;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGA,IAAI;AAE5B,IAAAA,KAAIA,OAAO,IAAI;AAAK,QAAI,IAAI,MAAM;AAAG,MAAG,CAAE,KAAKA;AAAG,MAAG,IAAI,CAAE,KAAKA,OAAM;AAAG,MAAG,IAAI,CAAE,KAAKA,OAAM;AAAA,EAE9F;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGA,IAAI;AAE5B,YAAS,EAAG,MAAM,CAAE,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,QAAU,IAAI,MAAQ,KAAKA,MAAM;AAAA,EAElF;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGA,IAAI;AAE5B,YAAS,EAAG,MAAM,CAAE,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,SAAW,IAAI,MAAQ,KAAKA,MAAM;AAAA,EAE/G;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,YAAS,EAAG,MAAM,CAAE,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,SAAW,IAAI;AAAA,EAE5F;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,YAAS,EAAG,MAAM,CAAE,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,KAAK,GAAK,MAAM,KAAM,CAAE,KAAK,SAAW,IAAI;AAAA,EAEzH;AAEA,IAAE,EAAE,IAAI,WAAY;AAEnB,QAAI,IAAI,aAAa,IAAI;AACzB,WAAO,EAAE,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,CAAE,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAG,GAAG,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAI,GAAG,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,KAAM,GAAG,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,CAAE,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,IAAI,EAAG,GAAI,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,KAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,KAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,GAAI,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,KAAK,EAAG,GAAG,GAAG,IAAI,EAAG,GAAI,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,IAAI,EAAG,IAAK,GAAG,GAAG,IAAI,EAAG,KAAK,EAAG,GAAG,GAAG,IAAI,EAAG,KAAK,EAAG,EAAE;AAAA,EAGx5B,EAAE;AACF,GAAE,WAAY;AAEb,QAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK;AAAI,aAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAE1D,UAAI,IAAIA;AAAG,WAAM,IAAI,gBAAiB,KAAM,IAAI,eAAgB;AAChE,WAAM,IAAI,gBAAiB,KAAM,IAAI,cAAe;AAAG,WAAM,IAAI,gBAAiB,KAAM,IAAI,cAAe;AAAG,WAAM,IAAI,gBAAiB,KAAM,IAAI,aAAc;AACjK,QAAE,EAAGA,EAAE,KAAM,MAAM,KAAK,KAAK,QAAS;AAAA,IAGvC;AAEA,aAASI,GAAGC,IAAGC,IAAG,GAAI;AAErB,aAAQA,QAAQ,EAAG,CAAAD,GAAE,KAAM,GAAG,CAAE;AAAA,IAGjC;AAEA,aAAUL,KAAI,GAAGA,KAAI,IAAIA,MAAO;AAE/B,QAAE,EAAGA,EAAE,IAAI,EAAE,EAAGA,EAAE,KAAK,IAAI,EAAE,EAAGA,EAAE;AAClC,QAAE,EAAGA,EAAE,IAAI,EAAE,EAAGA,EAAE,KAAK,IAAI,EAAE,EAAGA,EAAE;AAAA,IAGnC;AAEA,IAAAI,GAAG,EAAE,GAAG,KAAK,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,MAAM,KAAK,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,MAAM,KAAK,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,MAAM,KAAK,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,CAAE;AACxG,MAAE,EAAE,EAAG,EAAE,GAAG,GAAG,EAAE,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,IAAI,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,GAAG,EAAE,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,IAAI,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,KAAK,CAAE;AAChJ,IAAAA,GAAG,EAAE,GAAG,IAAI,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,KAAK,CAAE;AAAA,EAGjC,GAAE;AAEF,SAAO,EAAE,EAAE;AAGZ,EAAE;AAGF,KAAK,OAAO,iBAAiB,SAAWd,OAAM,KAAM;AAEnD,MAAI,IAAI,IAAI,OAAO,IAAI,IAAI;AAC3B,MAAI,MAAM,KAAK,OAAO,QAAS,GAAI,GAAG,OAAO,OAAO,GAAG,MAAM,KAAK,KAAM,IAAI,MAAM,CAAE;AACpF,MAAI,MAAM,IAAI,WAAY,IAAI,GAAI;AAClC,MAAI,KAAK;AAET,MAAI,eAAe,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AACzC,MAAI,eAAe,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AACzC,MAAI,gBAAgB,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC1C,MAAI,gBAAgB,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAE1C,MAAI,OAAO;AACX,SAAQ,OAAO,GAAI;AAElB,QAAI,KAAK,cAAe,IAAK,GAAG,KAAK,cAAe,IAAK;AACzD,QAAI,KAAK,GAAG,KAAK;AACjB,QAAI,KAAK,aAAc,IAAK;AAAG,WAAQ,KAAK,GAAI;AAE/C,YAAM;AAAI;AAAA,IAEX;AAEA,QAAI,KAAK,aAAc,IAAK;AAAG,WAAQ,KAAK,GAAI;AAE/C,YAAM;AAAI;AAAA,IAEX;AAEA,QAAI,OAAO,KAAK,KAAM,KAAK,MAAM,CAAE;AACnC,SAAK,OAAO,YAAaA,OAAM,KAAK,IAAI,IAAI,EAAG;AAE/C,QAAIM,KAAI,GAAG,MAAM,aAAc,IAAK;AACpC,QAAIiB;AAEJ,WAAQ,MAAM,GAAI;AAEjB,UAAI,MAAM,aAAc,IAAK;AAC7B,UAAI,MAAQ,KAAKjB,KAAI,QAAU;AAE/B,aAAQ,MAAM,GAAI;AAEjB,YAAK,OAAO,GAAI;AAEf,UAAAiB,OAAMvB,MAAM,OAAO,CAAE;AAAG,UAAAuB,OAAQA,QAAS,KAAM,MAAM,KAAU;AAC/D,cAAK,MAAM,OAAQ,OAAO,EAAI,KAAOA,QAAS,MAAQ,MAAM,MAAO;AAAA,QAEpE;AAEA,YAAK,OAAO,GAAI;AAEf,UAAAA,OAAMvB,MAAM,OAAO,CAAE;AAAG,UAAAuB,OAAQA,QAAS,KAAM,MAAM,KAAU;AAC/D,cAAK,MAAM,OAAQ,OAAO,EAAI,KAAOA,QAAS,MAAQ,MAAM,MAAO;AAAA,QAEpE;AAEA,YAAK,OAAO,GAAI;AAEf,UAAAA,OAAMvB,MAAM,OAAO,CAAE;AAAG,UAAAuB,OAAQA,QAAS,KAAM,MAAM,KAAU;AAC/D,cAAK,MAAM,OAAQ,OAAO,EAAI,KAAOA,QAAS,MAAQ,MAAM,MAAO;AAAA,QAEpE;AAEA,YAAK,OAAO,GAAI;AAEf,cAAI,KAAK,MAAM,MAAM,MAAM;AAC3B,mBAAU,IAAI,GAAG,IAAI,MAAM,IAAO,KAAK,KAAK,CAAE,IAAIvB,OAAQ,OAAO,KAAM,CAAE;AAAA,QAE1E;AAEA,eAAO;AAAK,eAAO;AAAA,MAEpB;AAEA,MAAAM;AAAM,aAAO;AAAA,IAEd;AAEA,QAAK,KAAK,MAAM,EAAI,OAAM,MAAO,IAAI;AACrC,WAAO,OAAO;AAAA,EAEf;AAEA,SAAO;AAER;AAEA,KAAK,OAAO,UAAU,SAAW,KAAM;AAEtC,MAAI,MAAM,CAAE,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,CAAE,EAAG,IAAI,KAAM;AACnD,SAAO,MAAM,IAAI;AAElB;AAEA,KAAK,OAAO,cAAc,SAAWN,OAAM,KAAK,KAAK,GAAG,GAAI;AAE3D,MAAI,MAAM,KAAK,OAAO,QAAS,GAAI,GAAG,MAAM,KAAK,KAAM,IAAI,MAAM,CAAE,GAAG,QAAQ,KAAK,OAAO;AAC1F,QAAM,KAAK,KAAM,MAAM,CAAE;AAEzB,MAAI,GAAG,IAAI,OAAOA,MAAM,GAAI,GAAGO,KAAI;AAEnC,MAAK,OAAO,EAAI,CAAAP,MAAM,GAAI,IAAI,CAAE,GAAG,GAAG,CAAE,EAAG,OAAO,CAAE;AACpD,MAAK,QAAQ,EAAI,MAAMO,KAAI,KAAKA,KAAI,KAAKA,KAAO,CAAAP,MAAMO,KAAI,CAAE,IAAMP,MAAMO,KAAI,CAAE,KAAMP,MAAMO,KAAI,IAAI,GAAI,MAAM,KAAQ;AAEpH,WAAUD,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAE9B,QAAI,MAAMA,KAAI;AAAK,SAAK,IAAIA,KAAI;AAChC,WAAON,MAAM,KAAK,CAAE;AAAG,IAAAO,KAAI;AAE3B,QAAK,QAAQ,EAAI,QAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAIP,MAAM,KAAKO,EAAE;AAAA,aAC5D,QAAQ,GAAI;AAErB,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAIP,MAAM,KAAKO,EAAE;AAC/C,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,IAAIP,MAAM,IAAIO,KAAI,GAAI;AAAA,IAEpF,WAAY,QAAQ,GAAI;AAEvB,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,IAAIP,MAAM,IAAIO,KAAI,GAAI;AAAA,IAE9E,WAAY,QAAQ,GAAI;AAEvB,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,KAAMP,MAAM,IAAIO,KAAI,GAAI,MAAM;AACtE,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,KAAQP,MAAM,IAAIO,KAAI,GAAI,IAAIP,MAAM,IAAIO,KAAI,GAAI,MAAQ;AAAA,IAE/H,OAAO;AAEN,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,IAAI,MAAO,GAAGP,MAAM,IAAIO,KAAI,GAAI,GAAG,CAAE;AACtF,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,IAAI,MAAOP,MAAM,IAAIO,KAAI,GAAI,GAAGP,MAAM,IAAIO,KAAI,GAAI,GAAGP,MAAM,IAAIO,KAAI,MAAM,GAAI,CAAE;AAAA,IAE7I;AAAA,EAED;AAEA,SAAOP;AAER;AAEA,KAAK,OAAO,SAAS,SAAWI,IAAGD,IAAGiB,IAAI;AAEzC,MAAIf,KAAID,KAAID,KAAIiB,IAAGI,MAAOnB,KAAID,IAAK,KAAOC,KAAIF,IAAK,KAAOE,KAAIe;AAC9D,MAAKI,MAAKA,OAAM,KAAK,MAAMA,MAAKA,OAAM,KAAK,GAAK,QAAOpB;AAAA,WAC7C,KAAK,MAAM,KAAK,GAAK,QAAOD;AACtC,SAAOiB;AAER;AAEA,KAAK,OAAO,QAAQ,SAAWpB,OAAM,QAAQ,KAAM;AAElD,MAAI,MAAM,KAAK;AACf,MAAI,QAAQ,IAAI,SAAUA,OAAM,MAAO;AAAG,YAAU;AACpD,MAAI,SAAS,IAAI,SAAUA,OAAM,MAAO;AAAG,YAAU;AACrD,MAAI,QAAQA,MAAM,MAAO;AAAG;AAC5B,MAAI,QAAQA,MAAM,MAAO;AAAG;AAC5B,MAAI,WAAWA,MAAM,MAAO;AAAG;AAC/B,MAAI,SAASA,MAAM,MAAO;AAAG;AAC7B,MAAI,YAAYA,MAAM,MAAO;AAAG;AAEjC;AAEA,KAAK,OAAO;AAAA,EACX,UAAU,SAAWA,OAAMK,IAAI;AAE9B,WAAQL,MAAMK,EAAE,KAAK,EAAI,CAAAA;AAAM,WAAOA;AAAA,EAEvC;AAAA,EACA,YAAY,SAAW,MAAMA,IAAI;AAEhC,WAAS,KAAMA,EAAE,KAAK,IAAM,KAAMA,KAAI,CAAE;AAAA,EAEzC;AAAA,EACA,aAAa,SAAW,MAAMA,IAAGS,IAAI;AAEpC,SAAMT,EAAE,IAAMS,MAAK,IAAM;AAAK,SAAMT,KAAI,CAAE,IAAIS,KAAI;AAAA,EAEnD;AAAA,EACA,UAAU,SAAW,MAAMT,IAAI;AAE9B,WAAS,KAAMA,EAAE,KAAM,MAAM,MAAM,QAAc,KAAMA,KAAI,CAAE,KAAK,KAAS,KAAMA,KAAI,CAAE,KAAK,IAAM,KAAMA,KAAI,CAAE;AAAA,EAE/G;AAAA,EACA,WAAW,SAAW,MAAMA,IAAGS,IAAI;AAElC,SAAMT,EAAE,IAAMS,MAAK,KAAO;AAAK,SAAMT,KAAI,CAAE,IAAMS,MAAK,KAAO;AAAK,SAAMT,KAAI,CAAE,IAAMS,MAAK,IAAM;AAAK,SAAMT,KAAI,CAAE,IAAIS,KAAI;AAAA,EAEzH;AAAA,EACA,WAAW,SAAW,MAAMT,IAAGW,IAAI;AAElC,QAAI,IAAI;AAAI,aAAU,IAAI,GAAG,IAAIA,IAAG,IAAO,MAAK,OAAO,aAAc,KAAMX,KAAI,CAAE,CAAE;AAAG,WAAO;AAAA,EAE9F;AAAA,EACA,YAAY,SAAWL,OAAMK,IAAG,GAAI;AAEnC,aAAU,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAO,CAAAL,MAAMK,KAAI,CAAE,IAAI,EAAE,WAAY,CAAE;AAAA,EAEvE;AAAA,EACA,WAAW,SAAW,MAAMA,IAAGW,IAAI;AAElC,QAAI,MAAM,CAAC;AAAG,aAAU,IAAI,GAAG,IAAIA,IAAG,IAAO,KAAI,KAAM,KAAMX,KAAI,CAAE,CAAE;AAAG,WAAO;AAAA,EAEhF;AAAA,EACA,KAAK,SAAWS,IAAI;AAEnB,WAAOA,GAAE,SAAS,IAAI,MAAMA,KAAIA;AAAA,EAEjC;AAAA,EACA,UAAU,SAAW,MAAMT,IAAGW,IAAI;AAEjC,QAAI,IAAI,IAAI;AACZ,aAAU,IAAI,GAAG,IAAIA,IAAG,IAAO,MAAK,MAAM,KAAK,KAAK,IAAK,KAAMX,KAAI,CAAE,EAAE,SAAU,EAAG,CAAE;AACtF,QAAI;AAEH,WAAK,mBAAoB,CAAE;AAAA,IAE5B,SAAU,GAAI;AAEb,aAAO,KAAK,KAAK,UAAW,MAAMA,IAAGW,EAAE;AAAA,IAExC;AAEA,WAAO;AAAA,EAER;AACD;AACA,KAAK,YAAY,SAAW,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAO;AAEtE,MAAI,IAAI,KAAK,IAAK,IAAI,EAAG,GAAG,IAAI,KAAK,IAAK,IAAI,EAAG;AACjD,MAAI,KAAK,GAAG,KAAK;AACjB,WAAUV,KAAI,GAAGA,KAAI,GAAGA;AACvB,aAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAE9B,UAAK,QAAQ,KAAK,QAAQ,GAAI;AAE7B,aAAOD,KAAI,KAAKC,MAAO;AAAG,cAAS,OAAOD,MAAM,KAAK,OAAOC,MAAO;AAAA,MAEpE,OAAO;AAEN,cAAS,CAAE,OAAOD,MAAM,KAAK,OAAOC,MAAO;AAAG,aAAOD,KAAI,KAAKC,MAAO;AAAA,MAEtE;AAEA,UAAK,QAAQ,GAAI;AAEhB,WAAI,EAAG,IAAI,GAAI,EAAG;AAAG,WAAI,KAAK,CAAE,IAAI,GAAI,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAI,GAAI,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAI,GAAI,KAAK,CAAE;AAAA,MAE1G,WAAY,QAAQ,GAAI;AAEvB,YAAI,KAAK,GAAI,KAAK,CAAE,KAAM,IAAI,MAAO,KAAK,GAAI,EAAG,IAAI,IAAI,KAAK,GAAI,KAAK,CAAE,IAAI,IAAI,KAAK,GAAI,KAAK,CAAE,IAAI;AACrG,YAAI,KAAK,GAAI,KAAK,CAAE,KAAM,IAAI,MAAO,KAAK,GAAI,EAAG,IAAI,IAAI,KAAK,GAAI,KAAK,CAAE,IAAI,IAAI,KAAK,GAAI,KAAK,CAAE,IAAI;AAErG,YAAI,MAAM,IAAI,IAAIkB,MAAK,KAAK,KAAK,KAAK,MAAQA,OAAM,IAAI,IAAI,IAAIA;AAChE,WAAI,KAAK,CAAE,IAAI,MAAMA;AACrB,WAAI,KAAK,CAAE,KAAM,KAAK,KAAK,OAAQ;AACnC,WAAI,KAAK,CAAE,KAAM,KAAK,KAAK,OAAQ;AACnC,WAAI,KAAK,CAAE,KAAM,KAAK,KAAK,OAAQ;AAAA,MAEpC,WAAY,QAAQ,GAAI;AAEvB,YAAI,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,EAAG,GAAG,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,KAAK,CAAE;AACzE,YAAI,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,EAAG,GAAG,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,KAAK,CAAE;AACzE,YAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAK;AAEnD,aAAI,EAAG,IAAI;AAAG,aAAI,KAAK,CAAE,IAAI;AAAG,aAAI,KAAK,CAAE,IAAI;AAAG,aAAI,KAAK,CAAE,IAAI;AAAA,QAElE,OAAO;AAEN,aAAI,EAAG,IAAI;AAAI,aAAI,KAAK,CAAE,IAAI;AAAI,aAAI,KAAK,CAAE,IAAI;AAAI,aAAI,KAAK,CAAE,IAAI;AAAA,QAErE;AAAA,MAED,WAAY,QAAQ,GAAI;AAEvB,YAAI,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,EAAG,GAAG,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,KAAK,CAAE;AACzE,YAAI,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,EAAG,GAAG,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,KAAK,CAAE;AACzE,YAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,GAAK;AAEpD,YAAK,KAAK,OAAO,KAAK,GAAK,QAAO;AAAA,MAEnC;AAAA,IAED;AAED,SAAO;AAER;;;ACx/BA,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAAA,EAEhB;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,mBAAoB,KAAK,eAAgB;AAEhD,WAAO,KAAM,KAAK,SAAWC,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOC,OAAO;AAEb,aAAS,SAAUA,OAAO;AAEzB,YAAM,SAAS,IAAI,SAAUA,KAAK;AAClC,YAAM,YAAc,KAAK,IAAI,IAAU,KAAK,IAAI,IAAM,IAAQ,KAAK;AACnE,YAAM,UAAU,OAAO,UAAW,IAAI,IAAK;AAC3C,YAAM,SAAS,KAAO,KAAK,IAAQ,UAAU;AAE7C,UAAK,WAAW,OAAO,YAAa;AAEnC,eAAO;AAAA,MAER;AAYA,YAAM,QAAQ,CAAE,KAAK,KAAK,KAAK,KAAK,GAAI;AAExC,eAAU,MAAM,GAAG,MAAM,GAAG,OAAS;AAIpC,YAAK,gBAAiB,OAAO,QAAQ,GAAI,EAAI,QAAO;AAAA,MAErD;AAIA,aAAO;AAAA,IAER;AAEA,aAAS,gBAAiB,OAAO,QAAQ,QAAS;AAIjD,eAAU,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAO;AAElD,YAAK,MAAO,CAAE,MAAM,OAAO,SAAU,SAAS,CAAE,EAAI,QAAO;AAAA,MAE5D;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,YAAaA,OAAO;AAE5B,YAAM,SAAS,IAAI,SAAUA,KAAK;AAClC,YAAM,QAAQ,OAAO,UAAW,IAAI,IAAK;AAEzC,UAAI,GAAGC,IAAGC,IAAG,YAAY,OAAO;AAChC,UAAI,UAAU,UAAU,UAAU;AAKlC,eAAUC,SAAQ,GAAGA,SAAQ,KAAK,IAAIA,UAAW;AAEhD,YAAO,OAAO,UAAWA,QAAO,KAAM,KAAK,cACxC,OAAO,SAAUA,SAAQ,CAAE,KAAK,MAChC,OAAO,SAAUA,SAAQ,CAAE,KAAK,IAAiB;AAEnD,sBAAY;AACZ,mBAAS,IAAI,aAAc,QAAQ,IAAI,CAAE;AAEzC,qBAAW,OAAO,SAAUA,SAAQ,CAAE,IAAI;AAC1C,qBAAW,OAAO,SAAUA,SAAQ,CAAE,IAAI;AAC1C,qBAAW,OAAO,SAAUA,SAAQ,CAAE,IAAI;AAC1C,kBAAQ,OAAO,SAAUA,SAAQ,CAAE,IAAI;AAAA,QAExC;AAAA,MAED;AAEA,YAAM,aAAa;AACnB,YAAM,aAAa,KAAK,IAAI;AAE5B,YAAM,WAAW,IAAI,eAAe;AAEpC,YAAM,WAAW,IAAI,aAAc,QAAQ,IAAI,CAAE;AACjD,YAAM,UAAU,IAAI,aAAc,QAAQ,IAAI,CAAE;AAEhD,YAAM,QAAQ,IAAI,MAAM;AAExB,eAAU,OAAO,GAAG,OAAO,OAAO,QAAU;AAE3C,cAAM,QAAQ,aAAa,OAAO;AAClC,cAAM,UAAU,OAAO,WAAY,OAAO,IAAK;AAC/C,cAAM,UAAU,OAAO,WAAY,QAAQ,GAAG,IAAK;AACnD,cAAM,UAAU,OAAO,WAAY,QAAQ,GAAG,IAAK;AAEnD,YAAK,WAAY;AAEhB,gBAAM,cAAc,OAAO,UAAW,QAAQ,IAAI,IAAK;AAEvD,eAAO,cAAc,WAAa,GAAI;AAIrC,iBAAM,cAAc,MAAS;AAC7B,YAAAF,MAAQ,eAAe,IAAM,MAAS;AACtC,YAAAC,MAAQ,eAAe,KAAO,MAAS;AAAA,UAExC,OAAO;AAEN,gBAAI;AACJ,YAAAD,KAAI;AACJ,YAAAC,KAAI;AAAA,UAEL;AAAA,QAED;AAEA,iBAAU,IAAI,GAAG,KAAK,GAAG,KAAO;AAE/B,gBAAM,cAAc,QAAQ,IAAI;AAChC,gBAAM,eAAiB,OAAO,IAAI,KAAU,IAAI,KAAM;AAEtD,mBAAU,YAAa,IAAI,OAAO,WAAY,aAAa,IAAK;AAChE,mBAAU,eAAe,CAAE,IAAI,OAAO,WAAY,cAAc,GAAG,IAAK;AACxE,mBAAU,eAAe,CAAE,IAAI,OAAO,WAAY,cAAc,GAAG,IAAK;AAExE,kBAAS,YAAa,IAAI;AAC1B,kBAAS,eAAe,CAAE,IAAI;AAC9B,kBAAS,eAAe,CAAE,IAAI;AAE9B,cAAK,WAAY;AAEhB,kBAAM,IAAK,GAAGD,IAAGC,EAAE,EAAE,oBAAoB;AAEzC,mBAAQ,YAAa,IAAI,MAAM;AAC/B,mBAAQ,eAAe,CAAE,IAAI,MAAM;AACnC,mBAAQ,eAAe,CAAE,IAAI,MAAM;AAAA,UAEpC;AAAA,QAED;AAAA,MAED;AAEA,eAAS,aAAc,YAAY,IAAI,gBAAiB,UAAU,CAAE,CAAE;AACtE,eAAS,aAAc,UAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AAEnE,UAAK,WAAY;AAEhB,iBAAS,aAAc,SAAS,IAAI,gBAAiB,QAAQ,CAAE,CAAE;AACjE,iBAAS,YAAY;AACrB,iBAAS,QAAQ;AAAA,MAElB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,WAAYF,OAAO;AAE3B,YAAM,WAAW,IAAI,eAAe;AACpC,YAAM,eAAe;AACrB,YAAM,cAAc;AACpB,YAAM,cAAc;AACpB,UAAI,cAAc;AAElB,YAAM,eAAe,iDAAiD;AACtE,YAAM,gBAAgB,IAAI,OAAQ,WAAW,eAAe,eAAe,cAAc,GAAI;AAC7F,YAAM,gBAAgB,IAAI,OAAQ,WAAW,eAAe,eAAe,cAAc,GAAI;AAE7F,YAAM,WAAW,CAAC;AAClB,YAAM,UAAU,CAAC;AACjB,YAAM,aAAa,CAAC;AAEpB,YAAM,SAAS,IAAI,QAAQ;AAE3B,UAAI;AAEJ,UAAI,aAAa;AACjB,UAAI,cAAc;AAClB,UAAI,YAAY;AAEhB,cAAU,SAAS,aAAa,KAAMA,KAAK,OAAQ,MAAO;AAEzD,sBAAc;AAEd,cAAM,QAAQ,OAAQ,CAAE;AAExB,cAAMI,SAAS,SAAS,YAAY,KAAM,KAAM,OAAQ,OAAO,OAAQ,CAAE,IAAI;AAC7E,mBAAW,KAAMA,KAAK;AAEtB,gBAAU,SAAS,YAAY,KAAM,KAAM,OAAQ,MAAO;AAEzD,cAAI,qBAAqB;AACzB,cAAI,qBAAqB;AAEzB,gBAAML,QAAO,OAAQ,CAAE;AAEvB,kBAAU,SAAS,cAAc,KAAMA,KAAK,OAAQ,MAAO;AAE1D,mBAAO,IAAI,WAAY,OAAQ,CAAE,CAAE;AACnC,mBAAO,IAAI,WAAY,OAAQ,CAAE,CAAE;AACnC,mBAAO,IAAI,WAAY,OAAQ,CAAE,CAAE;AACnC;AAAA,UAED;AAEA,kBAAU,SAAS,cAAc,KAAMA,KAAK,OAAQ,MAAO;AAE1D,qBAAS,KAAM,WAAY,OAAQ,CAAE,CAAE,GAAG,WAAY,OAAQ,CAAE,CAAE,GAAG,WAAY,OAAQ,CAAE,CAAE,CAAE;AAC/F,oBAAQ,KAAM,OAAO,GAAG,OAAO,GAAG,OAAO,CAAE;AAC3C;AACA;AAAA,UAED;AAIA,cAAK,uBAAuB,GAAI;AAE/B,oBAAQ,MAAO,2EAA4E,WAAY;AAAA,UAExG;AAIA,cAAK,uBAAuB,GAAI;AAE/B,oBAAQ,MAAO,6EAA8E,WAAY;AAAA,UAE1G;AAEA;AAAA,QAED;AAEA,cAAM,QAAQ;AACd,cAAM,QAAQ,YAAY;AAE1B,iBAAS,SAAS,aAAa;AAE/B,iBAAS,SAAU,OAAO,OAAO,UAAW;AAC5C;AAAA,MAED;AAEA,eAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAC7E,eAAS,aAAc,UAAU,IAAI,uBAAwB,SAAS,CAAE,CAAE;AAE1E,aAAO;AAAA,IAER;AAEA,aAAS,aAAc,QAAS;AAE/B,UAAK,OAAO,WAAW,UAAW;AAEjC,eAAO,IAAI,YAAY,EAAE,OAAQ,MAAO;AAAA,MAEzC;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,aAAc,QAAS;AAE/B,UAAK,OAAO,WAAW,UAAW;AAEjC,cAAM,eAAe,IAAI,WAAY,OAAO,MAAO;AACnD,iBAAU,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAO;AAE1C,uBAAc,CAAE,IAAI,OAAO,WAAY,CAAE,IAAI;AAAA,QAE9C;AAEA,eAAO,aAAa,UAAU;AAAA,MAE/B,OAAO;AAEN,eAAO;AAAA,MAER;AAAA,IAED;AAIA,UAAM,UAAU,aAAcC,KAAK;AAEnC,WAAO,SAAU,OAAQ,IAAI,YAAa,OAAQ,IAAI,WAAY,aAAcA,KAAK,CAAE;AAAA,EAExF;AAED;;;ACvYA,IAAM,kBAAkB;AAExB,IAAM,YAAN,MAAM,mBAAkB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAGf,SAAK,aAAa;AAGlB,SAAK,cAAc;AAAA,EAEpB;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,MAAM,OAAQ;AAC7C,WAAO,QAAS,MAAM,IAAK;AAC3B,WAAO,iBAAkB,MAAM,aAAc;AAC7C,WAAO,mBAAoB,MAAM,eAAgB;AACjD,WAAO,KAAM,KAAK,SAAWK,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOA,OAAO;AAEb,UAAM,QAAQ;AAEd,aAAS,UAAW,MAAM,OAAQ;AAEjC,UAAK,KAAK,aAAa,EAAI;AAE3B,YAAMC,aAAY,iBAAkB,IAAK;AAEzC,UAAI,aAAa;AAEjB,UAAI,OAAO;AAEX,cAAS,KAAK,UAAW;AAAA,QAExB,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC;AAAA,QAED,KAAK;AACJ,6BAAoB,IAAK;AACzB;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,cAAK,KAAK,aAAc,GAAI,EAAI,QAAO,cAAe,IAAK;AAC3D;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,cAAe,IAAK;AAC3B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,iBAAkB,IAAK;AAC9B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,kBAAmB,IAAK;AAC/B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,gBAAiB,IAAK;AAC7B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,iBAAkB,IAAK;AAC9B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,cAAe,IAAK;AAC3B;AAAA,QAED,KAAK;AACJ,uBAAa;AACb;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAEhC,gBAAM,OAAO,KAAK,eAAgB,gCAAgC,MAAO,KAAK;AAC9E,gBAAM,aAAa,KAAK,UAAW,CAAE;AACrC,gBAAM,WAAW,KAAK,gBAAgB,eAAgB,UAAW;AACjE,cAAK,UAAW;AAEf,sBAAW,UAAU,KAAM;AAAA,UAE5B,OAAO;AAEN,oBAAQ,KAAM,4DAA8D,UAAW;AAAA,UAExF;AAEA;AAAA,QAED;AAAA,MAGD;AAEA,UAAK,MAAO;AAEX,YAAK,MAAM,SAAS,UAAa,MAAM,SAAS,QAAS;AAExD,eAAK,MAAM,SAAU,MAAM,MAAM,eAAgB;AAAA,QAElD;AAEA,sBAAe,MAAM,gBAAiB;AAEtC,cAAM,KAAM,IAAK;AAEjB,aAAK,WAAW,EAAE,MAAY,MAAa;AAAA,MAE5C;AAEA,YAAM,aAAa,KAAK;AAExB,eAAU,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAO;AAE9C,cAAMC,QAAO,WAAY,CAAE;AAE3B,YAAK,cAAcA,MAAK,aAAa,WAAWA,MAAK,aAAa,QAAS;AAK1E;AAAA,QAED;AAEA,kBAAWA,OAAM,KAAM;AAAA,MAExB;AAGA,UAAKD,YAAY;AAEhB,uBAAe,IAAI;AAEnB,YAAK,eAAe,SAAS,GAAI;AAEhC,2BAAiB,KAAM,eAAgB,eAAe,SAAS,CAAE,CAAE;AAAA,QAEpE,OAAO;AAEN,2BAAiB,SAAS;AAAA,QAE3B;AAAA,MAED;AAAA,IAED;AAEA,aAAS,cAAe,MAAO;AAE9B,YAAM,OAAO,IAAIE,WAAU;AAE3B,YAAM,QAAQ,IAAI,QAAQ;AAC1B,YAAM,UAAU,IAAI,QAAQ;AAE5B,YAAM,aAAa,IAAI,QAAQ;AAC/B,UAAI,eAAe;AACnB,UAAI,kBAAkB;AAEtB,YAAM,IAAI,KAAK,aAAc,GAAI;AAEjC,UAAK,MAAM,MAAM,MAAM,OAAS,QAAO;AAIvC,YAAM,WAAW,EAAE,MAAO,sBAAuB;AAEjD,eAAU,IAAI,GAAGC,KAAI,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEnD,cAAM,UAAU,SAAU,CAAE;AAE5B,cAAM,OAAO,QAAQ,OAAQ,CAAE;AAC/B,cAAMC,QAAO,QAAQ,MAAO,CAAE,EAAE,KAAK;AAErC,YAAK,iBAAiB,MAAO;AAE5B,4BAAkB;AAClB,yBAAe;AAAA,QAEhB;AAEA,YAAI;AAEJ,gBAAS,MAAO;AAAA,UAEf,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAC5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAElB,kBAAK,MAAM,GAAI;AAEd,qBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAAA,cAE/B,OAAO;AAEN,qBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAAA,cAE/B;AAEA,kBAAK,MAAM,EAAI,YAAW,KAAM,KAAM;AAAA,YAEvC;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAO;AAEpD,oBAAM,IAAI,QAAS,CAAE;AACrB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAO;AAEpD,oBAAM,IAAI,QAAS,CAAE;AACrB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,cAChB;AACA,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AAEzB,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,cAAe,MAAM,GAAG,QAAQ,CAAE;AAAA,gBAClC,cAAe,MAAM,GAAG,QAAQ,CAAE;AAAA,gBAClC,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,cAChB;AACA,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AAEzB,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,cAChB;AACA,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AAEzB,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,KAAK,cAAe,MAAM,GAAG,QAAQ,CAAE;AAC7C,oBAAM,KAAK,cAAe,MAAM,GAAG,QAAQ,CAAE;AAC7C,mBAAK;AAAA,gBACJ;AAAA,gBACA;AAAA,gBACA,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,cAChB;AACA,sBAAQ,IAAI;AACZ,sBAAQ,IAAI;AACZ,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AAEzB,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,OAAM,CAAE,GAAG,CAAE,GAAG,CAAE;AAEzC,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAGtD,kBAAK,QAAS,IAAI,CAAE,KAAK,MAAM,KAAK,QAAS,IAAI,CAAE,KAAK,MAAM,EAAI;AAElE,oBAAM,QAAQ,MAAM,MAAM;AAC1B,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB;AAAA,gBACC;AAAA,gBAAM,QAAS,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG;AAAA,gBAAO;AAAA,cACpG;AAEA,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAElB,kBAAK,MAAM,GAAI;AAEd,qBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAAA,cAE/B,OAAO;AAEN,qBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAAA,cAE/B;AAEA,kBAAK,MAAM,EAAI,YAAW,KAAM,KAAM;AAAA,YAEvC;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAO;AAEpD,oBAAM,KAAK,QAAS,CAAE;AACtB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAO;AAEpD,oBAAM,KAAK,QAAS,CAAE;AACtB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,cAC1B;AACA,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAE1B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,cAAe,MAAM,GAAG,QAAQ,CAAE;AAAA,gBAClC,cAAe,MAAM,GAAG,QAAQ,CAAE;AAAA,gBAClC,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,cAC1B;AACA,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAE1B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,cAC1B;AACA,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAE1B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,KAAK,cAAe,MAAM,GAAG,QAAQ,CAAE;AAC7C,oBAAM,KAAK,cAAe,MAAM,GAAG,QAAQ,CAAE;AAC7C,mBAAK;AAAA,gBACJ;AAAA,gBACA;AAAA,gBACA,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,cAC1B;AACA,sBAAQ,IAAI;AACZ,sBAAQ,IAAI;AACZ,oBAAM,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACnC,oBAAM,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AAEnC,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,OAAM,CAAE,GAAG,CAAE,GAAG,CAAE;AAEzC,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAGtD,kBAAK,QAAS,IAAI,CAAE,KAAK,KAAK,QAAS,IAAI,CAAE,KAAK,EAAI;AAEtD,oBAAM,QAAQ,MAAM,MAAM;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB;AAAA,gBACC;AAAA,gBAAM,QAAS,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG;AAAA,gBAAO;AAAA,cACpG;AAEA,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AAAA,UACL,KAAK;AACJ,iBAAK,YAAY,YAAY;AAE7B,gBAAK,KAAK,YAAY,OAAO,SAAS,GAAI;AAGzC,oBAAM,KAAM,UAAW;AACvB,mBAAK,YAAY,aAAa,KAAM,KAAM;AAC1C,6BAAe;AAAA,YAEhB;AAEA;AAAA,UAED;AACC,oBAAQ,KAAM,OAAQ;AAAA,QAExB;AAIA,0BAAkB;AAAA,MAEnB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,mBAAoB,MAAO;AAEnC,UAAK,CAAE,KAAK,SAAS,CAAE,KAAK,MAAM,YAAY,CAAE,KAAK,MAAM,SAAS,OAAS;AAE7E,eAAU,IAAI,GAAG,IAAI,KAAK,MAAM,SAAS,QAAQ,KAAO;AAEvD,cAAM,aAAa,KAAK,MAAM,SAAU,CAAE;AAE1C,YAAK,WAAW,SAAS,EAAI;AAE7B,cAAM,eAAe,WAAW,aAC9B,MAAO,KAAM,EACb,OAAQ,OAAQ,EAChB,IAAK,CAAAC,OAAKA,GAAE,KAAK,CAAE;AAErB,iBAAU,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAO;AAGhD,gBAAM,cAAc,OAAO;AAAA,YAC1B,OAAO,QAAS,WAAW,KAAM,EAAE,OAAQ,CAAE,CAAE,EAAE,CAAE,MAAO,MAAM,EAAG;AAAA,UACpE;AAEA,sBAAa,aAAc,CAAE,CAAE,IAAI,OAAO;AAAA,YACzC,YAAa,aAAc,CAAE,CAAE,KAAK,CAAC;AAAA,YACrC;AAAA,UACD;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAWA,aAAS,gBAAiB,MAAM,IAAI,IAAI,iBAAiB,gBAAgB,YAAY,OAAO,KAAM;AAEjG,UAAK,MAAM,KAAK,MAAM,GAAI;AAGzB,aAAK,OAAQ,IAAI,GAAG,IAAI,CAAE;AAC1B;AAAA,MAED;AAEA,wBAAkB,kBAAkB,KAAK,KAAK;AAG9C,WAAK,KAAK,IAAK,EAAG;AAClB,WAAK,KAAK,IAAK,EAAG;AAGlB,YAAM,OAAQ,MAAM,IAAI,IAAI,KAAM;AAClC,YAAM,OAAQ,MAAM,IAAI,IAAI,KAAM;AAClC,YAAM,MAAM,KAAK,IAAK,eAAgB,IAAI,MAAM,KAAK,IAAK,eAAgB,IAAI;AAC9E,YAAM,MAAM,CAAE,KAAK,IAAK,eAAgB,IAAI,MAAM,KAAK,IAAK,eAAgB,IAAI;AAGhF,UAAI,MAAM,KAAK;AACf,UAAI,MAAM,KAAK;AACf,YAAM,OAAO,MAAM;AACnB,YAAM,OAAO,MAAM;AAGnB,YAAM,KAAK,OAAO,MAAM,OAAO;AAE/B,UAAK,KAAK,GAAI;AAGb,cAAM,IAAI,KAAK,KAAM,EAAG;AACxB,aAAK,IAAI;AACT,aAAK,IAAI;AACT,cAAM,KAAK;AACX,cAAM,KAAK;AAAA,MAEZ;AAEA,YAAM,KAAO,MAAM,OAAO,MAAM;AAChC,YAAM,MAAO,MAAM,MAAM,MAAO;AAChC,UAAIC,KAAI,KAAK,KAAM,KAAK,IAAK,GAAG,EAAG,CAAE;AACrC,UAAK,mBAAmB,WAAa,CAAAA,KAAI,CAAEA;AAC3C,YAAM,MAAMA,KAAI,KAAK,MAAM;AAC3B,YAAM,MAAM,CAAEA,KAAI,KAAK,MAAM;AAG7B,YAAM,KAAK,KAAK,IAAK,eAAgB,IAAI,MAAM,KAAK,IAAK,eAAgB,IAAI,OAAQ,MAAM,IAAI,IAAI,KAAM;AACzG,YAAM,KAAK,KAAK,IAAK,eAAgB,IAAI,MAAM,KAAK,IAAK,eAAgB,IAAI,OAAQ,MAAM,IAAI,IAAI,KAAM;AAGzG,YAAM,QAAQ,SAAU,GAAG,IAAK,MAAM,OAAQ,KAAM,MAAM,OAAQ,EAAG;AACrE,YAAM,QAAQ,UAAY,MAAM,OAAQ,KAAM,MAAM,OAAQ,KAAM,CAAE,MAAM,OAAQ,KAAM,CAAE,MAAM,OAAQ,EAAG,KAAM,KAAK,KAAK;AAE3H,WAAK,YAAY,WAAY,IAAI,IAAI,IAAI,IAAI,OAAO,QAAQ,OAAO,eAAe,GAAG,eAAgB;AAAA,IAEtG;AAEA,aAAS,SAAU,IAAI,IAAI,IAAI,IAAK;AAEnC,YAAM,MAAM,KAAK,KAAK,KAAK;AAC3B,YAAM,MAAM,KAAK,KAAM,KAAK,KAAK,KAAK,EAAG,IAAI,KAAK,KAAM,KAAK,KAAK,KAAK,EAAG;AAC1E,UAAI,MAAM,KAAK,KAAM,KAAK,IAAK,IAAK,KAAK,IAAK,GAAG,MAAM,GAAI,CAAE,CAAE;AAC/D,UAAO,KAAK,KAAK,KAAK,KAAO,EAAI,OAAM,CAAE;AACzC,aAAO;AAAA,IAER;AAMA,aAAS,cAAe,MAAO;AAE9B,YAAMC,KAAI,oBAAqB,KAAK,aAAc,GAAI,KAAK,CAAE;AAC7D,YAAMC,KAAI,oBAAqB,KAAK,aAAc,GAAI,KAAK,CAAE;AAC7D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,KAAK,aAAc,IAAK,KAAK,CAAE;AAC5F,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,KAAK,aAAc,IAAK,KAAK,CAAE;AAC5F,YAAM,IAAI,oBAAqB,KAAK,aAAc,OAAQ,CAAE;AAC5D,YAAM,IAAI,oBAAqB,KAAK,aAAc,QAAS,CAAE;AAI7D,YAAM,MAAM,IAAI;AAEhB,YAAM,OAAO,IAAIN,WAAU;AAG3B,WAAK,OAAQK,KAAI,IAAIC,EAAE;AAGvB,WAAK,OAAQD,KAAI,IAAI,IAAIC,EAAE;AAC3B,UAAK,OAAO,KAAK,OAAO,GAAI;AAE3B,aAAK;AAAA,UACJD,KAAI,IAAI,KAAK;AAAA,UACbC;AAAA,UACAD,KAAI;AAAA,UACJC,KAAI,KAAK;AAAA,UACTD,KAAI;AAAA,UACJC,KAAI;AAAA,QACL;AAAA,MAED;AAGA,WAAK,OAAQD,KAAI,GAAGC,KAAI,IAAI,EAAG;AAC/B,UAAK,OAAO,KAAK,OAAO,GAAI;AAE3B,aAAK;AAAA,UACJD,KAAI;AAAA,UACJC,KAAI,IAAI,KAAK;AAAA,UACbD,KAAI,IAAI,KAAK;AAAA,UACbC,KAAI;AAAA,UACJD,KAAI,IAAI;AAAA,UACRC,KAAI;AAAA,QACL;AAAA,MAED;AAGA,WAAK,OAAQD,KAAI,IAAIC,KAAI,CAAE;AAC3B,UAAK,OAAO,KAAK,OAAO,GAAI;AAE3B,aAAK;AAAA,UACJD,KAAI,KAAK;AAAA,UACTC,KAAI;AAAA,UACJD;AAAA,UACAC,KAAI,IAAI,KAAK;AAAA,UACbD;AAAA,UACAC,KAAI,IAAI;AAAA,QACT;AAAA,MAED;AAGA,WAAK,OAAQD,IAAGC,KAAI,EAAG;AACvB,UAAK,OAAO,KAAK,OAAO,GAAI;AAE3B,aAAK,cAAeD,IAAGC,KAAI,KAAK,KAAKD,KAAI,KAAK,KAAKC,IAAGD,KAAI,IAAIC,EAAE;AAAA,MAEjE;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,iBAAkB,MAAO;AAEjC,eAAS,SAAU,OAAOC,IAAGC,IAAI;AAEhC,cAAMH,KAAI,oBAAqBE,EAAE;AACjC,cAAMD,KAAI,oBAAqBE,EAAE;AAEjC,YAAKC,WAAU,GAAI;AAElB,eAAK,OAAQJ,IAAGC,EAAE;AAAA,QAEnB,OAAO;AAEN,eAAK,OAAQD,IAAGC,EAAE;AAAA,QAEnB;AAEA,QAAAG;AAAA,MAED;AAEA,YAAM,QAAQ;AAEd,YAAM,OAAO,IAAIT,WAAU;AAE3B,UAAIS,SAAQ;AAEZ,WAAK,aAAc,QAAS,EAAE,QAAS,OAAO,QAAS;AAEvD,WAAK,YAAY,YAAY;AAE7B,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,eAAS,SAAU,OAAOF,IAAGC,IAAI;AAEhC,cAAMH,KAAI,oBAAqBE,EAAE;AACjC,cAAMD,KAAI,oBAAqBE,EAAE;AAEjC,YAAKC,WAAU,GAAI;AAElB,eAAK,OAAQJ,IAAGC,EAAE;AAAA,QAEnB,OAAO;AAEN,eAAK,OAAQD,IAAGC,EAAE;AAAA,QAEnB;AAEA,QAAAG;AAAA,MAED;AAEA,YAAM,QAAQ;AAEd,YAAM,OAAO,IAAIT,WAAU;AAE3B,UAAIS,SAAQ;AAEZ,WAAK,aAAc,QAAS,EAAE,QAAS,OAAO,QAAS;AAEvD,WAAK,YAAY,YAAY;AAE7B,aAAO;AAAA,IAER;AAEA,aAAS,gBAAiB,MAAO;AAEhC,YAAMJ,KAAI,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC9D,YAAMC,KAAI,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC9D,YAAM,IAAI,oBAAqB,KAAK,aAAc,GAAI,KAAK,CAAE;AAE7D,YAAM,UAAU,IAAI,KAAK;AACzB,cAAQ,OAAQD,IAAGC,IAAG,GAAG,GAAG,KAAK,KAAK,CAAE;AAExC,YAAM,OAAO,IAAIN,WAAU;AAC3B,WAAK,SAAS,KAAM,OAAQ;AAE5B,aAAO;AAAA,IAER;AAEA,aAAS,iBAAkB,MAAO;AAEjC,YAAMK,KAAI,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC9D,YAAMC,KAAI,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC9D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC/D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAE/D,YAAM,UAAU,IAAI,KAAK;AACzB,cAAQ,WAAYD,IAAGC,IAAG,IAAI,IAAI,GAAG,KAAK,KAAK,CAAE;AAEjD,YAAM,OAAO,IAAIN,WAAU;AAC3B,WAAK,SAAS,KAAM,OAAQ;AAE5B,aAAO;AAAA,IAER;AAEA,aAAS,cAAe,MAAO;AAE9B,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC/D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC/D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC/D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAE/D,YAAM,OAAO,IAAIA,WAAU;AAC3B,WAAK,OAAQ,IAAI,EAAG;AACpB,WAAK,OAAQ,IAAI,EAAG;AACpB,WAAK,YAAY,YAAY;AAE7B,aAAO;AAAA,IAER;AAIA,aAAS,WAAY,MAAM,OAAQ;AAElC,cAAQ,OAAO,OAAQ,CAAC,GAAG,KAAM;AAEjC,UAAI,mBAAmB,CAAC;AAExB,UAAK,KAAK,aAAc,OAAQ,GAAI;AAEnC,cAAM,iBAAiB,KAAK,aAAc,OAAQ,EAChD,MAAO,IAAK,EACZ,OAAQ,OAAQ,EAChB,IAAK,OAAK,EAAE,KAAK,CAAE;AAErB,iBAAU,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAO;AAElD,6BAAmB,OAAO,OAAQ,kBAAkB,YAAa,MAAM,eAAgB,CAAE,CAAE,CAAE;AAAA,QAE9F;AAAA,MAED;AAEA,UAAK,KAAK,aAAc,IAAK,GAAI;AAEhC,2BAAmB,OAAO,OAAQ,kBAAkB,YAAa,MAAM,KAAK,aAAc,IAAK,CAAE,CAAE;AAAA,MAEpG;AAEA,eAAS,SAAU,SAAS,QAAQ,gBAAiB;AAEpD,YAAK,mBAAmB,OAAY,kBAAiB,SAAS,KAAM,GAAI;AAEvE,cAAK,EAAE,WAAY,KAAM,EAAI,SAAQ,KAAM,yDAA0D;AAErG,iBAAO;AAAA,QAER;AAEA,YAAK,KAAK,aAAc,OAAQ,EAAI,OAAO,MAAO,IAAI,eAAgB,KAAK,aAAc,OAAQ,CAAE;AACnG,YAAK,iBAAkB,OAAQ,EAAI,OAAO,MAAO,IAAI,eAAgB,iBAAkB,OAAQ,CAAE;AACjG,YAAK,KAAK,SAAS,KAAK,MAAO,OAAQ,MAAM,GAAK,OAAO,MAAO,IAAI,eAAgB,KAAK,MAAO,OAAQ,CAAE;AAAA,MAE3G;AAEA,eAASU,OAAO,GAAI;AAEnB,eAAO,KAAK,IAAK,GAAG,KAAK,IAAK,GAAG,oBAAqB,CAAE,CAAE,CAAE;AAAA,MAE7D;AAEA,eAAS,SAAU,GAAI;AAEtB,eAAO,KAAK,IAAK,GAAG,oBAAqB,CAAE,CAAE;AAAA,MAE9C;AAEA,eAAU,QAAQ,MAAO;AACzB,eAAU,gBAAgB,eAAeA,MAAM;AAC/C,eAAU,aAAa,UAAW;AAClC,eAAU,WAAW,WAAWA,MAAM;AACtC,eAAU,UAAU,QAAS;AAC7B,eAAU,kBAAkB,iBAAiBA,MAAM;AACnD,eAAU,gBAAgB,eAAe,QAAS;AAClD,eAAU,mBAAmB,gBAAiB;AAC9C,eAAU,kBAAkB,eAAgB;AAC5C,eAAU,qBAAqB,oBAAoB,QAAS;AAC5D,eAAU,cAAc,YAAa;AAErC,aAAO;AAAA,IAER;AAIA,aAAS,cAAeH,IAAGC,IAAI;AAE9B,aAAOD,MAAMC,KAAID;AAAA,IAElB;AAIA,aAAS,YAAa,OAAO,OAAO,QAAS;AAE5C,UAAK,OAAO,UAAU,UAAW;AAEhC,cAAM,IAAI,UAAW,oBAAoB,OAAO,KAAM;AAAA,MAEvD;AAGA,YAAM,KAAK;AAAA,QACV,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,KAAK;AAAA,QACL,OAAO;AAAA,MACR;AAGA,YAAM,MAAM;AACZ,YAAM,MAAM;AACZ,YAAM,QAAQ;AACd,YAAM,MAAM;AAEZ,UAAI,QAAQ;AACZ,UAAI,YAAY;AAChB,UAAI,SAAS,IAAI,WAAW;AAC5B,YAAM,SAAS,CAAC;AAEhB,eAAS,iBAAkBI,UAAS,GAAGC,UAAU;AAEhD,cAAM,QAAQ,IAAI,YAAa,2BAA2BD,WAAU,gBAAgB,IAAI,GAAI;AAC5F,cAAM,UAAUC;AAChB,cAAM;AAAA,MAEP;AAEA,eAAS,YAAY;AAEpB,YAAK,WAAW,IAAK;AAEpB,cAAK,aAAa,GAAK,QAAO,KAAM,OAAQ,MAAO,CAAE;AAAA,cAChD,QAAO,KAAM,OAAQ,MAAO,IAAI,KAAK,IAAK,IAAI,OAAQ,QAAS,CAAE,CAAE;AAAA,QAEzE;AAEA,iBAAS;AACT,mBAAW;AAAA,MAEZ;AAEA,UAAI;AACJ,YAAMC,UAAS,MAAM;AAErB,eAAU,IAAI,GAAG,IAAIA,SAAQ,KAAO;AAEnC,kBAAU,MAAO,CAAE;AAGnB,YAAK,MAAM,QAAS,KAAM,KAAK,MAAM,SAAU,OAAO,SAAS,MAAO,KAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAErG,kBAAQ;AACR,mBAAS;AACT,oBAAU;AACV;AAAA,QAED;AAGA,YAAK,UAAU,KAAM;AAGpB,cAAK,GAAG,WAAW,KAAM,OAAQ,GAAI;AAEpC;AAAA,UAED;AAGA,cAAK,GAAG,MAAM,KAAM,OAAQ,KAAK,GAAG,KAAK,KAAM,OAAQ,GAAI;AAE1D,oBAAQ;AACR,qBAAS;AACT;AAAA,UAED;AAEA,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,oBAAQ;AACR,qBAAS;AACT;AAAA,UAED;AAGA,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,gBAAK,WAAY;AAEhB,+BAAkB,SAAS,GAAG,MAAO;AAAA,YAEtC;AAEA,wBAAY;AAAA,UAEb;AAAA,QAED;AAGA,YAAK,UAAU,KAAM;AAEpB,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,sBAAU;AACV;AAAA,UAED;AAEA,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,sBAAU;AACV,oBAAQ;AACR;AAAA,UAED;AAEA,cAAK,GAAG,IAAI,KAAM,OAAQ,GAAI;AAE7B,oBAAQ;AACR;AAAA,UAED;AAGA,cAAK,GAAG,KAAK,KAAM,OAAQ,KACtB,OAAO,WAAW,KAClB,GAAG,KAAK,KAAM,OAAQ,CAAE,CAAE,GAAI;AAElC,6BAAkB,SAAS,GAAG,MAAO;AAAA,UAEtC;AAAA,QAED;AAGA,YAAK,UAAU,OAAQ;AAEtB,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,sBAAU;AACV;AAAA,UAED;AAEA,cAAK,GAAG,IAAI,KAAM,OAAQ,GAAI;AAE7B,oBAAQ;AACR;AAAA,UAED;AAGA,cAAK,GAAG,MAAM,KAAM,OAAQ,KAAK,OAAQ,OAAO,SAAS,CAAE,MAAM,KAAM;AAEtE,6BAAkB,SAAS,GAAG,MAAO;AAAA,UAEtC;AAAA,QAED;AAGA,YAAK,UAAU,KAAM;AAEpB,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,wBAAY;AACZ;AAAA,UAED;AAEA,cAAK,GAAG,KAAK,KAAM,OAAQ,GAAI;AAE9B,gBAAK,aAAa,IAAK;AAEtB,0BAAY;AACZ;AAAA,YAED;AAEA,gBAAK,SAAS,WAAW,KAAK,GAAG,KAAK,KAAM,QAAS,GAAI;AAExD,+BAAkB,SAAS,GAAG,MAAO;AAAA,YAEtC;AAAA,UAED;AAAA,QAED;AAIA,YAAK,GAAG,WAAW,KAAM,OAAQ,GAAI;AAEpC,oBAAU;AACV,kBAAQ;AACR,sBAAY;AAAA,QAEb,WAAY,GAAG,MAAM,KAAM,OAAQ,GAAI;AAEtC,oBAAU;AACV,kBAAQ;AACR,sBAAY;AAAA,QAEb,WAAY,GAAG,KAAK,KAAM,OAAQ,GAAI;AAErC,oBAAU;AACV,kBAAQ;AACR,mBAAS;AAAA,QAEV,WAAY,GAAG,MAAM,KAAM,OAAQ,GAAI;AAEtC,oBAAU;AACV,kBAAQ;AACR,mBAAS;AAAA,QAEV,OAAO;AAEN,2BAAkB,SAAS,GAAG,MAAO;AAAA,QAEtC;AAAA,MAED;AAGA,gBAAU;AAEV,aAAO;AAAA,IAER;AAIA,UAAM,QAAQ,CAAE,MAAM,MAAM,MAAM,MAAM,MAAM,IAAK;AAGnD,UAAM,iBAAiB;AAAA,MAEtB,MAAM;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,MAAM,KAAK;AAAA,QACX,MAAM,IAAI;AAAA,QACV,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,MAAM,KAAK;AAAA,QACX,MAAM,IAAI;AAAA,QACV,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,MAAM,IAAI;AAAA,QACV,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,MAAM,IAAI;AAAA,QACV,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM;AAAA,MACP;AAAA,IAED;AAEA,aAAS,oBAAqB,QAAS;AAEtC,UAAI,UAAU;AAEd,UAAK,OAAO,WAAW,YAAY,kBAAkB,QAAS;AAE7D,iBAAU,IAAI,GAAGC,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,gBAAM,IAAI,MAAO,CAAE;AAEnB,cAAK,OAAO,SAAU,CAAE,GAAI;AAE3B,sBAAU;AACV,qBAAS,OAAO,UAAW,GAAG,OAAO,SAAS,EAAE,MAAO;AACvD;AAAA,UAED;AAAA,QAED;AAAA,MAED;AAEA,UAAIC,SAAQ;AAEZ,UAAK,YAAY,QAAQ,MAAM,gBAAgB,MAAO;AAIrD,QAAAA,SAAQ,eAAgB,IAAK,EAAG,MAAM,WAAY,IAAI,MAAM;AAAA,MAE7D,OAAO;AAEN,QAAAA,SAAQ,eAAgB,OAAQ,EAAG,MAAM,WAAY;AAErD,YAAKA,SAAQ,GAAI;AAIhB,UAAAA,SAAQ,eAAgB,OAAQ,EAAG,IAAK,IAAI,MAAM;AAAA,QAEnD;AAAA,MAED;AAEA,aAAOA,SAAQ,WAAY,MAAO;AAAA,IAEnC;AAIA,aAAS,iBAAkB,MAAO;AAEjC,UAAK,EAAI,KAAK,aAAc,WAAY,KAAO,KAAK,aAAa,UAAW,KAAK,aAAc,GAAI,KAAK,KAAK,aAAc,GAAI,KAAU;AAExI,eAAO;AAAA,MAER;AAEA,YAAMjB,aAAY,mBAAoB,IAAK;AAE3C,UAAK,eAAe,SAAS,GAAI;AAEhC,QAAAA,WAAU,YAAa,eAAgB,eAAe,SAAS,CAAE,CAAE;AAAA,MAEpE;AAEA,uBAAiB,KAAMA,UAAU;AACjC,qBAAe,KAAMA,UAAU;AAE/B,aAAOA;AAAA,IAER;AAEA,aAAS,mBAAoB,MAAO;AAEnC,YAAMA,aAAY,IAAI,QAAQ;AAC9B,YAAMkB,oBAAmB;AAEzB,UAAK,KAAK,aAAa,UAAW,KAAK,aAAc,GAAI,KAAK,KAAK,aAAc,GAAI,IAAM;AAE1F,cAAM,KAAK,oBAAqB,KAAK,aAAc,GAAI,CAAE;AACzD,cAAM,KAAK,oBAAqB,KAAK,aAAc,GAAI,CAAE;AAEzD,QAAAlB,WAAU,UAAW,IAAI,EAAG;AAAA,MAE7B;AAEA,UAAK,KAAK,aAAc,WAAY,GAAI;AAEvC,cAAM,kBAAkB,KAAK,aAAc,WAAY,EAAE,MAAO,GAAI;AAEpE,iBAAU,SAAS,gBAAgB,SAAS,GAAG,UAAU,GAAG,UAAY;AAEvE,gBAAM,gBAAgB,gBAAiB,MAAO,EAAE,KAAK;AAErD,cAAK,kBAAkB,GAAK;AAE5B,gBAAM,aAAa,cAAc,QAAS,GAAI;AAC9C,gBAAM,cAAc,cAAc;AAElC,cAAK,aAAa,KAAK,aAAa,aAAc;AAEjD,kBAAM,gBAAgB,cAAc,MAAO,GAAG,UAAW;AAEzD,kBAAM,QAAQ,YAAa,cAAc,MAAO,aAAa,CAAE,CAAE;AAEjE,YAAAkB,kBAAiB,SAAS;AAE1B,oBAAS,eAAgB;AAAA,cAExB,KAAK;AAEJ,oBAAK,MAAM,UAAU,GAAI;AAExB,wBAAM,KAAK,MAAO,CAAE;AACpB,sBAAI,KAAK;AAET,sBAAK,MAAM,UAAU,GAAI;AAExB,yBAAK,MAAO,CAAE;AAAA,kBAEf;AAEA,kBAAAA,kBAAiB,UAAW,IAAI,EAAG;AAAA,gBAEpC;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,UAAU,GAAI;AAExB,sBAAI,QAAQ;AACZ,sBAAI,KAAK;AACT,sBAAI,KAAK;AAGT,0BAAQ,MAAO,CAAE,IAAI,KAAK,KAAK;AAE/B,sBAAK,MAAM,UAAU,GAAI;AAGxB,yBAAK,MAAO,CAAE;AACd,yBAAK,MAAO,CAAE;AAAA,kBAEf;AAGA,iCAAe,gBAAiB,CAAE,IAAI,CAAE,EAAG;AAC3C,iCAAe,aAAc,KAAM;AACnC,iCAAe,iBAAkB,gBAAgB,cAAe;AAChE,iCAAe,gBAAiB,IAAI,EAAG;AACvC,kBAAAA,kBAAiB,iBAAkB,gBAAgB,cAAe;AAAA,gBAEnE;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,UAAU,GAAI;AAExB,wBAAM,SAAS,MAAO,CAAE;AACxB,sBAAI,SAAS;AAEb,sBAAK,MAAM,UAAU,GAAI;AAExB,6BAAS,MAAO,CAAE;AAAA,kBAEnB;AAEA,kBAAAA,kBAAiB,MAAO,QAAQ,MAAO;AAAA,gBAExC;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,WAAW,GAAI;AAEzB,kBAAAA,kBAAiB;AAAA,oBAChB;AAAA,oBAAG,KAAK,IAAK,MAAO,CAAE,IAAI,KAAK,KAAK,GAAI;AAAA,oBAAG;AAAA,oBAC3C;AAAA,oBAAG;AAAA,oBAAG;AAAA,oBACN;AAAA,oBAAG;AAAA,oBAAG;AAAA,kBACP;AAAA,gBAED;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,WAAW,GAAI;AAEzB,kBAAAA,kBAAiB;AAAA,oBAChB;AAAA,oBAAG;AAAA,oBAAG;AAAA,oBACN,KAAK,IAAK,MAAO,CAAE,IAAI,KAAK,KAAK,GAAI;AAAA,oBAAG;AAAA,oBAAG;AAAA,oBAC3C;AAAA,oBAAG;AAAA,oBAAG;AAAA,kBACP;AAAA,gBAED;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,WAAW,GAAI;AAEzB,kBAAAA,kBAAiB;AAAA,oBAChB,MAAO,CAAE;AAAA,oBAAG,MAAO,CAAE;AAAA,oBAAG,MAAO,CAAE;AAAA,oBACjC,MAAO,CAAE;AAAA,oBAAG,MAAO,CAAE;AAAA,oBAAG,MAAO,CAAE;AAAA,oBACjC;AAAA,oBAAG;AAAA,oBAAG;AAAA,kBACP;AAAA,gBAED;AAEA;AAAA,YAEF;AAAA,UAED;AAEA,UAAAlB,WAAU,YAAakB,iBAAiB;AAAA,QAEzC;AAAA,MAED;AAEA,aAAOlB;AAAA,IAER;AAEA,aAAS,cAAe,MAAM,GAAI;AAEjC,eAAS,WAAY,IAAK;AAEzB,eAAO,IAAK,GAAG,GAAG,GAAG,GAAG,CAAE,EAAE,aAAc,CAAE;AAE5C,WAAG,IAAK,OAAO,GAAG,OAAO,CAAE;AAAA,MAE5B;AAEA,eAAS,qBAAsB,OAAQ;AAKtC,cAAMS,KAAI,MAAM;AAChB,cAAMC,KAAI,MAAM;AAEhB,cAAM,WAAW,KAAK,IAAK,MAAM,SAAU;AAC3C,cAAM,WAAW,KAAK,IAAK,MAAM,SAAU;AAE3C,cAAMS,MAAK,IAAI,QAASV,KAAI,UAAUA,KAAI,UAAU,CAAE;AACtD,cAAM,KAAK,IAAI,QAAS,CAAEC,KAAI,UAAUA,KAAI,UAAU,CAAE;AAExD,cAAM,KAAKS,IAAG,aAAc,CAAE;AAC9B,cAAM,KAAK,GAAG,aAAc,CAAE;AAE9B,cAAM,KAAK,eAAe;AAAA,UACzB,GAAG;AAAA,UAAG,GAAG;AAAA,UAAG;AAAA,UACZ,GAAG;AAAA,UAAG,GAAG;AAAA,UAAG;AAAA,UACZ;AAAA,UAAG;AAAA,UAAG;AAAA,QACP;AAEA,cAAM,QAAQ,eAAe,KAAM,EAAG,EAAE,OAAO;AAC/C,cAAM,SAAS,eAAe,KAAM,KAAM,EAAE,UAAU;AACtD,cAAM,KAAK,OAAO,SAAU,KAAM;AAClC,cAAM,MAAM,GAAG;AAEf,cAAM,KAAK,mBAAoB,IAAK,CAAE,GAAG,IAAK,CAAE,GAAG,IAAK,CAAE,CAAE;AAC5D,cAAM,UAAU,KAAK,KAAM,GAAG,GAAI;AAClC,cAAM,UAAU,KAAK,KAAM,GAAG,GAAI;AAElC,cAAM,UAAU,IAAI;AACpB,cAAM,UAAU,IAAI;AACpB,cAAM,YAAY,KAAK,MAAO,GAAG,IAAI,GAAG,EAAG;AAE3C,cAAM,iBACH,MAAM,YAAY,MAAM,gBAAkB,IAAI,KAAK,MAAO,OAAO;AAKpE,YAAK,CAAE,eAAgB;AAEtB,gBAAM,SAAS,eAAe;AAAA,YAC7B;AAAA,YAAS;AAAA,YAAG;AAAA,YACZ;AAAA,YAAG;AAAA,YAAS;AAAA,YACZ;AAAA,YAAG;AAAA,YAAG;AAAA,UACP;AAEA,gBAAM,MAAM,eAAe;AAAA,YAC1B,GAAG;AAAA,YAAI,GAAG;AAAA,YAAI;AAAA,YACd,CAAE,GAAG;AAAA,YAAI,GAAG;AAAA,YAAI;AAAA,YAChB;AAAA,YAAG;AAAA,YAAG;AAAA,UACP;AAEA,gBAAM,OAAO,OAAO,SAAU,GAAI,EAAE,SAAU,EAAG;AAEjD,gBAAM,iBAAiB,SAAO;AAE7B,kBAAM,EAAE,GAAG,MAAM,GAAG,KAAK,IACxB,IAAI,QAAS,KAAK,IAAK,GAAI,GAAG,KAAK,IAAK,GAAI,GAAG,CAAE,EAAE,aAAc,IAAK;AAEvE,mBAAO,KAAK,MAAO,MAAM,IAAK;AAAA,UAE/B;AAEA,gBAAM,cAAc,eAAgB,MAAM,WAAY;AACtD,gBAAM,YAAY,eAAgB,MAAM,SAAU;AAElD,cAAK,mBAAoB,CAAE,GAAI;AAE9B,kBAAM,aAAa,CAAE,MAAM;AAAA,UAE5B;AAAA,QAED;AAAA,MAED;AAEA,eAAS,oBAAqB,OAAQ;AAKrC,cAAM,KAAK,mBAAoB,CAAE;AACjC,cAAM,KAAK,mBAAoB,CAAE;AAEjC,cAAM,WAAW;AACjB,cAAM,WAAW;AASjB,cAAM,QACL,KAAK,OAAO,UACT,KAAK,MAAO,EAAE,SAAU,CAAE,GAAG,EAAE,SAAU,CAAE,CAAE,IAC7C,KAAK,MAAO,CAAE,EAAE,SAAU,CAAE,GAAG,EAAE,SAAU,CAAE,CAAE;AAEnD,cAAM,aAAa;AAEnB,YAAK,mBAAoB,CAAE,GAAI;AAE9B,gBAAM,eAAe;AACrB,gBAAM,aAAa;AACnB,gBAAM,aAAa,CAAE,MAAM;AAAA,QAE5B;AAAA,MAED;AAEA,YAAM,WAAW,KAAK;AAEtB,eAAU,IAAI,GAAGH,KAAI,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEnD,cAAM,UAAU,SAAU,CAAE;AAC5B,cAAM,SAAS,QAAQ;AAEvB,iBAAU,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAO;AAE1C,gBAAM,QAAQ,OAAQ,CAAE;AAExB,cAAK,MAAM,aAAc;AAExB,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AAAA,UAEtB,WAAY,MAAM,oBAAqB;AAEtC,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AAAA,UAEtB,WAAY,MAAM,wBAAyB;AAE1C,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AAAA,UAEtB,WAAY,MAAM,gBAAiB;AAIlC,mBAAO,IAAK,MAAM,IAAI,MAAM,EAAG;AAC/B,uBAAY,MAAO;AACnB,kBAAM,KAAK,OAAO;AAClB,kBAAM,KAAK,OAAO;AAIlB,gBAAK,kBAAmB,CAAE,GAAI;AAE7B,mCAAsB,KAAM;AAAA,YAE7B,OAAO;AAEN,kCAAqB,KAAM;AAAA,YAE5B;AAAA,UAED;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAEA,aAAS,mBAAoB,GAAI;AAEhC,YAAMI,MAAK,EAAE;AACb,aAAOA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAI;AAAA,IAEhD;AAEA,aAAS,kBAAmB,GAAI;AAE/B,YAAMA,MAAK,EAAE;AACb,YAAM,WAAWA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE;AAGrD,UAAK,aAAa,EAAI,QAAO;AAE7B,YAAM,KAAK,mBAAoB,CAAE;AACjC,YAAM,KAAK,mBAAoB,CAAE;AAEjC,aAAO,KAAK,IAAK,YAAa,KAAK,GAAK,IAAI,OAAO;AAAA,IAEpD;AAEA,aAAS,mBAAoB,GAAI;AAEhC,YAAMA,MAAK,EAAE;AACb,aAAO,KAAK,KAAMA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,CAAE;AAAA,IAEzD;AAEA,aAAS,mBAAoB,GAAI;AAEhC,YAAMA,MAAK,EAAE;AACb,aAAO,KAAK,KAAMA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,CAAE;AAAA,IAEzD;AAYA,aAAS,mBAAoBC,IAAGC,IAAGC,IAAI;AAEtC,UAAI,KAAK,KAAK,IAAI,IAAIC;AACtB,YAAM,KAAKH,KAAIE;AACf,YAAM,KAAKF,KAAIE;AACf,YAAM,KAAK,KAAK,KAAM,KAAK,KAAK,IAAID,KAAIA,EAAE;AAE1C,UAAK,KAAK,GAAI;AAEb,cAAM,OAAQ,KAAK;AACnB,QAAAE,KAAI,IAAI;AACR,cAAMH,KAAIG,KAAID,KAAID,KAAIE,KAAIF;AAAA,MAE3B,WAAY,KAAK,GAAI;AAEpB,cAAM,OAAQ,KAAK;AAAA,MAEpB,OAAO;AAIN,cAAM,MAAM;AACZ,cAAM,OAAQ;AAAA,MAEf;AAIA,UAAK,KAAK,GAAI;AAEb,aAAK,KAAK;AAAA,MAEX,OAAO;AAEN,aAAK,KAAK;AAAA,MAEX;AAEA,UAAK,KAAK,IAAK,EAAG,IAAI,IAAI,KAAK,IAAKA,EAAE,GAAI;AAEzC,QAAAE,KAAI,KAAMF,KAAI;AACd,aAAK,IAAI,KAAK,KAAM,IAAIE,KAAIA,EAAE;AAC9B,aAAKA,KAAI;AAAA,MAEV,WAAY,KAAK,IAAKF,EAAE,MAAM,GAAI;AAEjC,aAAK;AACL,aAAK;AAAA,MAEN,OAAO;AAEN,QAAAE,KAAI,OAAQ,KAAKF;AACjB,aAAK,IAAI,KAAK,KAAM,IAAIE,KAAIA,EAAE;AAC9B,aAAKA,KAAI;AAAA,MAEV;AAEA,UAAK,KAAK,GAAI;AAEb,QAAAA,KAAI;AACJ,aAAK,CAAE;AACP,aAAKA;AAAA,MAEN;AAEA,aAAO,EAAE,KAAK,KAAK,IAAI,GAAG;AAAA,IAE3B;AAIA,UAAM,QAAQ,CAAC;AACf,UAAM,cAAc,CAAC;AAErB,UAAM,iBAAiB,CAAC;AAExB,UAAM,iBAAiB,IAAI,QAAQ;AACnC,UAAM,iBAAiB,IAAI,QAAQ;AACnC,UAAM,iBAAiB,IAAI,QAAQ;AACnC,UAAM,iBAAiB,IAAI,QAAQ;AACnC,UAAM,SAAS,IAAI,QAAQ;AAC3B,UAAM,SAAS,IAAI,QAAQ;AAE3B,UAAM,mBAAmB,IAAI,QAAQ;AAErC,UAAM,MAAM,IAAI,UAAU,EAAE,gBAAiBzB,OAAM,eAAgB;AAEnE,cAAW,IAAI,iBAAiB;AAAA,MAC/B,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,kBAAkB;AAAA,IACnB,CAAE;AAEF,UAAMK,QAAO,EAAE,OAAc,KAAK,IAAI,gBAAgB;AAGtD,WAAOA;AAAA,EAER;AAAA,EAEA,OAAO,aAAc,WAAY;AAKhC,UAAM,YAAY;AAElB,UAAM,2BAA2B;AAAA,MAChC,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,IACT;AAEA,UAAM,iBAAiB;AAAA,MACtB,KAAK,yBAAyB;AAAA,MAC9B,GAAG;AAAA,IACJ;AAEA,aAAS,qBAAsB,IAAI,IAAI,IAAI,IAAK;AAE/C,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,QAAS,KAAK,OAAS,KAAK,OAAS,KAAK,OAAS,KAAK;AAC9D,YAAM,QAAS,KAAK,OAAS,KAAK,OAAS,KAAK,OAAS,KAAK;AAC9D,YAAM,SAAU,KAAK,OAAS,KAAK,OAAS,KAAK,OAAS,KAAK;AAC/D,YAAM,KAAK,OAAO;AAClB,YAAMqB,MAAK,OAAO;AAElB,UAAS,UAAU,KAAS,SAAS,KAAW,MAAM,KAAS,MAAM,KAASA,MAAK,KAASA,MAAK,GAAM;AAItG,eAAO;AAAA,MAER,WAAc,SAAS,KAAS,UAAU,GAAM;AAK/C,iBAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,wBAAe,MAAM,IAAI,KAAK,IAAI,IAAI,EAAG;AAEzC,cAAK,eAAe,OAAO,yBAAyB,QAAS;AAE5D,kBAAM,QAAU,MAAM,IAAI,KAAK;AAC/B,mBAAO,EAAE,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,eAAe,EAAE;AAAA,UAEtD,WAAY,eAAe,OAAO,yBAAyB,SAAU;AAEpE,kBAAMlB,KAAI,EAAM,KAAK,eAAe,KAAM,KAAK,KAAO,YAAa,EAAG;AACtE,kBAAMC,KAAI,EAAM,KAAK,eAAe,KAAM,KAAK,KAAO,YAAa,EAAG;AACtE,mBAAO,EAAE,GAAGD,IAAG,GAAGC,IAAG,GAAG,eAAe,EAAG;AAAA,UAE3C;AAAA,QAED;AAEA,eAAO;AAAA,MAER,OAAO;AAIN,iBAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,wBAAe,MAAM,IAAI,KAAK,IAAI,IAAI,EAAG;AAEzC,cAAK,eAAe,OAAO,yBAAyB,QAAS;AAE5D,kBAAM,QAAU,MAAM,IAAI,KAAK;AAC/B,mBAAO,EAAE,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,eAAe,EAAE;AAAA,UAEtD;AAAA,QAED;AAEA,cAAMD,KAAI,EAAM,KAAK,MAAO,KAAK,KAAO,YAAa,EAAG;AACxD,cAAMC,KAAI,EAAM,KAAK,MAAO,KAAK,KAAO,YAAa,EAAG;AACxD,eAAO,EAAE,GAAGD,IAAG,GAAGC,IAAG,GAAG,GAAG;AAAA,MAE5B;AAAA,IAED;AAEA,aAAS,cAAekB,IAAG,WAAW,SAAU;AAE/C,YAAM,KAAK,QAAQ,IAAI,UAAU;AACjC,YAAM,KAAK,QAAQ,IAAI,UAAU;AACjC,YAAM,KAAKA,GAAE,IAAI,UAAU;AAC3B,YAAM,KAAKA,GAAE,IAAI,UAAU;AAC3B,YAAM,KAAK,KAAK,KAAK,KAAK;AAE1B,UAAOA,GAAE,MAAM,UAAU,KAASA,GAAE,MAAM,UAAU,GAAM;AAEzD,uBAAe,MAAM,yBAAyB;AAC9C,uBAAe,IAAI;AACnB;AAAA,MAED;AAEA,UAAOA,GAAE,MAAM,QAAQ,KAASA,GAAE,MAAM,QAAQ,GAAM;AAErD,uBAAe,MAAM,yBAAyB;AAC9C,uBAAe,IAAI;AACnB;AAAA,MAED;AAEA,UAAK,KAAK,CAAE,OAAO,SAAU;AAE5B,uBAAe,MAAM,yBAAyB;AAC9C;AAAA,MAED;AAEA,UAAK,KAAK,OAAO,SAAU;AAE1B,uBAAe,MAAM,yBAAyB;AAC9C;AAAA,MAGD;AAEA,UAAS,KAAK,KAAO,KAAW,KAAK,KAAO,GAAM;AAEjD,uBAAe,MAAM,yBAAyB;AAC9C;AAAA,MAED;AAEA,UAAO,KAAK,KAAM,KAAK,KAAK,KAAK,EAAG,IAAQ,KAAK,KAAM,KAAK,KAAK,KAAK,EAAG,GAAM;AAE9E,uBAAe,MAAM,yBAAyB;AAC9C;AAAA,MAED;AAEA,UAAIF;AAEJ,UAAK,OAAO,GAAI;AAEf,QAAAA,KAAI,KAAK;AAAA,MAEV,OAAO;AAEN,QAAAA,KAAI,KAAK;AAAA,MAEV;AAEA,qBAAe,MAAM,yBAAyB;AAC9C,qBAAe,IAAIA;AAAA,IAEpB;AAEA,aAAS,iBAAkB,OAAO,OAAQ;AAEzC,YAAM,mBAAmB,CAAC;AAC1B,YAAM,gBAAgB,CAAC;AAEvB,eAAUb,SAAQ,GAAGA,SAAQ,MAAM,QAAQA,UAAW;AAErD,cAAM,iBAAiB,MAAOA,SAAQ,CAAE;AACxC,cAAM,eAAe,MAAOA,MAAM;AAElC,iBAAUgB,UAAS,GAAGA,UAAS,MAAM,QAAQA,WAAY;AAExD,gBAAM,iBAAiB,MAAOA,UAAS,CAAE;AACzC,gBAAM,eAAe,MAAOA,OAAO;AAEnC,gBAAM,eAAe,qBAAsB,gBAAgB,cAAc,gBAAgB,YAAa;AAEtG,cAAK,iBAAiB,QAAQ,iBAAiB,KAAM,OAAK,EAAE,KAAK,aAAa,IAAI,OAAO,WAAW,EAAE,KAAK,aAAa,IAAI,OAAO,OAAQ,MAAM,QAAY;AAE5J,6BAAiB,KAAM,YAAa;AACpC,0BAAc,KAAM,IAAI,QAAS,aAAa,GAAG,aAAa,CAAE,CAAE;AAAA,UAEnE;AAAA,QAED;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,yBAA0B,UAAU,aAAa,OAAQ;AAEjE,YAAM,SAAS,IAAI,QAAQ;AAC3B,kBAAY,UAAW,MAAO;AAE9B,YAAM,mBAAmB,CAAC;AAE1B,YAAM,QAAS,UAAQ;AAKtB,YAAK,KAAK,YAAY,cAAe,MAAO,GAAI;AAE/C,gBAAM,gBAAgB,iBAAkB,UAAU,KAAK,MAAO;AAE9D,wBAAc,QAAS,CAAAD,OAAK;AAE3B,6BAAiB,KAAM,EAAE,YAAY,KAAK,YAAY,MAAM,KAAK,MAAM,OAAOA,GAAE,CAAE;AAAA,UAEnF,CAAE;AAAA,QAEH;AAAA,MAED,CAAE;AAEF,uBAAiB,KAAM,CAAE,IAAI,OAAQ;AAEpC,eAAO,GAAG,MAAM,IAAI,GAAG,MAAM;AAAA,MAE9B,CAAE;AAEF,aAAO;AAAA,IAER;AAEA,aAAS,SAAU,YAAY,UAAUE,eAAcC,eAAc,WAAY;AAEhF,UAAK,cAAc,QAAQ,cAAc,UAAa,cAAc,IAAK;AAExE,oBAAY;AAAA,MAEb;AAEA,YAAM,oBAAoB,IAAI,QAAQ;AACtC,iBAAW,YAAY,UAAW,iBAAkB;AAEpD,YAAM,WAAW,CAAE,IAAI,QAASD,eAAc,kBAAkB,CAAE,GAAG,IAAI,QAASC,eAAc,kBAAkB,CAAE,CAAE;AAEtH,YAAM,wBAAwB,yBAA0B,UAAU,WAAW,aAAa,QAAS;AAEnG,4BAAsB,KAAM,CAAE,IAAI,OAAQ;AAEzC,eAAO,GAAG,MAAM,IAAI,GAAG,MAAM;AAAA,MAE9B,CAAE;AAEF,YAAM,oBAAoB,CAAC;AAC3B,YAAM,qBAAqB,CAAC;AAE5B,4BAAsB,QAAS,CAAAxB,OAAK;AAEnC,YAAKA,GAAE,eAAe,WAAW,YAAa;AAE7C,4BAAkB,KAAMA,EAAE;AAAA,QAE3B,OAAO;AAEN,6BAAmB,KAAMA,EAAE;AAAA,QAE5B;AAAA,MAED,CAAE;AAEF,YAAM,eAAe,kBAAmB,CAAE,EAAE,MAAM;AAGlD,YAAM,QAAQ,CAAC;AACf,UAAI,IAAI;AAER,aAAQ,IAAI,mBAAmB,UAAU,mBAAoB,CAAE,EAAE,MAAM,IAAI,cAAe;AAEzF,YAAK,MAAM,SAAS,KAAK,MAAO,MAAM,SAAS,CAAE,MAAM,mBAAoB,CAAE,EAAE,YAAa;AAE3F,gBAAM,IAAI;AAAA,QAEX,OAAO;AAEN,gBAAM,KAAM,mBAAoB,CAAE,EAAE,UAAW;AAAA,QAEhD;AAEA;AAAA,MAED;AAEA,YAAM,KAAM,WAAW,UAAW;AAElC,UAAK,cAAc,WAAY;AAE9B,cAAM,SAAS,MAAM,SAAS,MAAM,IAAI,OAAO;AAC/C,cAAM,YAAY,MAAO,MAAM,SAAS,CAAE;AAE1C,eAAO,EAAE,YAAY,WAAW,YAAY,QAAgB,KAAK,UAAU;AAAA,MAE5E,WAAY,cAAc,WAAY;AAGrC,YAAI,SAAS;AACb,YAAI,YAAY;AAChB,YAAI,cAAc;AAElB,iBAAUA,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAO;AAEzC,gBAAM,aAAa,MAAOA,EAAE;AAC5B,cAAK,QAAS;AAEb,0BAAc,SAAU,UAAW,EAAE;AACrC,qBAAS;AACT,wBAAY;AAAA,UAEb,WAAY,gBAAgB,SAAU,UAAW,EAAE,MAAO;AAEzD,0BAAc,SAAU,UAAW,EAAE;AACrC,qBAAS;AAAA,UAEV;AAAA,QAED;AAEA,eAAO,EAAE,YAAY,WAAW,YAAY,QAAgB,KAAK,UAAU;AAAA,MAE5E,OAAO;AAEN,gBAAQ,KAAM,iBAAiB,YAAY,iCAAkC;AAAA,MAE9E;AAAA,IAED;AASA,QAAI,eAAe;AACnB,QAAI,eAAe,CAAE;AAErB,QAAI,cAAc,UAAU,SAAS,IAAK,CAAAqB,OAAK;AAE9C,YAAM,SAASA,GAAE,UAAU;AAC3B,UAAI,OAAO,CAAE;AACb,UAAI,OAAO;AACX,UAAI,OAAO,CAAE;AACb,UAAI,OAAO;AAIX,eAAU,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAO;AAE1C,cAAMA,KAAI,OAAQ,CAAE;AAEpB,YAAKA,GAAE,IAAI,MAAO;AAEjB,iBAAOA,GAAE;AAAA,QAEV;AAEA,YAAKA,GAAE,IAAI,MAAO;AAEjB,iBAAOA,GAAE;AAAA,QAEV;AAEA,YAAKA,GAAE,IAAI,MAAO;AAEjB,iBAAOA,GAAE;AAAA,QAEV;AAEA,YAAKA,GAAE,IAAI,MAAO;AAEjB,iBAAOA,GAAE;AAAA,QAEV;AAAA,MAED;AAGA,UAAK,gBAAgB,MAAO;AAE3B,uBAAe,OAAO;AAAA,MAEvB;AAEA,UAAK,gBAAgB,MAAO;AAE3B,uBAAe,OAAO;AAAA,MAEvB;AAEA,aAAO,EAAE,QAAQA,GAAE,QAAQ,QAAgB,MAAM,WAAW,YAAa,MAAO,GAAG,YAAY,IAAK,aAAa,IAAI,KAAM,IAAI,QAAS,MAAM,IAAK,GAAG,IAAI,QAAS,MAAM,IAAK,CAAE,EAAE;AAAA,IAEnL,CAAE;AAEF,kBAAc,YAAY,OAAQ,QAAM,GAAG,OAAO,SAAS,CAAE;AAE7D,aAAU,aAAa,GAAG,aAAa,YAAY,QAAQ,cAAgB;AAE1E,kBAAa,UAAW,EAAE,aAAa;AAAA,IAExC;AAGA,UAAM,UAAU,YAAY,IAAK,CAAAA,OAAK,SAAUA,IAAG,aAAa,cAAc,cAAgB,UAAU,WAAW,UAAU,SAAS,MAAM,WAAW,MAAY,CAAE;AAGrK,UAAM,iBAAiB,CAAC;AACxB,gBAAY,QAAS,CAAAA,OAAK;AAEzB,YAAM,WAAW,QAASA,GAAE,UAAW;AAEvC,UAAK,CAAE,SAAS,QAAS;AAExB,cAAM,QAAQ,IAAI,MAAM;AACxB,cAAM,SAASA,GAAE;AACjB,cAAM,QAAQ,QAAQ,OAAQ,OAAK,EAAE,UAAU,EAAE,QAAQA,GAAE,UAAW;AACtE,cAAM,QAAS,OAAK;AAEnB,gBAAM,OAAO,YAAa,EAAE,UAAW;AACvC,gBAAM,OAAO,IAAI,KAAK;AACtB,eAAK,SAAS,KAAK;AACnB,gBAAM,MAAM,KAAM,IAAK;AAAA,QAExB,CAAE;AACF,uBAAe,KAAM,KAAM;AAAA,MAE5B;AAAA,IAED,CAAE;AAEF,WAAO;AAAA,EAER;AAAA,EAEA,OAAO,eAAgBI,QAAO,OAAO,UAAU,SAAS,YAAa;AASpE,IAAAA,SAAQA,WAAU,SAAYA,SAAQ;AACtC,YAAQ,UAAU,SAAY,QAAQ;AACtC,eAAW,aAAa,SAAY,WAAW;AAC/C,cAAU,YAAY,SAAY,UAAU;AAC5C,iBAAa,eAAe,SAAY,aAAa;AAErD,WAAO;AAAA,MACN,aAAa;AAAA,MACb,aAAaA;AAAA,MACb,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,kBAAkB;AAAA,IACnB;AAAA,EAED;AAAA,EAEA,OAAO,eAAgB,QAAQ,OAAO,cAAc,aAAc;AAUjE,UAAM,WAAW,CAAC;AAClB,UAAM,UAAU,CAAC;AACjB,UAAM,MAAM,CAAC;AAEb,QAAK,WAAU,0BAA2B,QAAQ,OAAO,cAAc,aAAa,UAAU,SAAS,GAAI,MAAM,GAAI;AAEpH,aAAO;AAAA,IAER;AAEA,UAAM,WAAW,IAAI,eAAe;AACpC,aAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAC7E,aAAS,aAAc,UAAU,IAAI,uBAAwB,SAAS,CAAE,CAAE;AAC1E,aAAS,aAAc,MAAM,IAAI,uBAAwB,KAAK,CAAE,CAAE;AAElE,WAAO;AAAA,EAER;AAAA,EAEA,OAAO,0BAA2B,QAAQ,OAAO,cAAc,aAAa,UAAU,SAAS,KAAK,cAAe;AASlH,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,UAAU,IAAI,QAAQ;AAC5B,UAAM,UAAU,IAAI,QAAQ;AAC5B,UAAM,gBAAgB,IAAI,QAAQ;AAClC,UAAM,gBAAgB,IAAI,QAAQ;AAClC,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,aAAa,IAAI,QAAQ;AAE/B,mBAAe,iBAAiB,SAAY,eAAe;AAC3D,kBAAc,gBAAgB,SAAY,cAAc;AACxD,mBAAe,iBAAiB,SAAY,eAAe;AAG3D,aAAS,uBAAwB,MAAO;AAExC,UAAM,YAAY,OAAO;AAEzB,QAAK,YAAY,EAAI,QAAO;AAE5B,UAAM,WAAW,OAAQ,CAAE,EAAE,OAAQ,OAAQ,YAAY,CAAE,CAAE;AAE7D,QAAI;AACJ,QAAI,gBAAgB,OAAQ,CAAE;AAC9B,QAAI;AAEJ,UAAM,eAAe,MAAM,cAAc;AAEzC,UAAM,SAAS,KAAM,YAAY;AACjC,QAAI,KAAK,GAAG;AAEZ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,0BAA0B;AAE9B,QAAI,cAAc;AAClB,QAAI,oBAAoB,eAAe;AACvC,QAAI,sBAAsB,eAAe;AAGzC,cAAW,OAAQ,CAAE,GAAG,OAAQ,CAAE,GAAG,QAAS,EAAE,eAAgB,YAAa;AAC7E,eAAW,KAAM,OAAQ,CAAE,CAAE,EAAE,IAAK,QAAS;AAC7C,eAAW,KAAM,OAAQ,CAAE,CAAE,EAAE,IAAK,QAAS;AAC7C,YAAQ,KAAM,UAAW;AACzB,YAAQ,KAAM,UAAW;AAEzB,aAAU,SAAS,GAAG,SAAS,WAAW,UAAY;AAErD,qBAAe,OAAQ,MAAO;AAG9B,UAAK,WAAW,YAAY,GAAI;AAE/B,YAAK,UAAW;AAGf,sBAAY,OAAQ,CAAE;AAAA,QAEvB,MAAO,aAAY;AAAA,MAEpB,OAAO;AAEN,oBAAY,OAAQ,SAAS,CAAE;AAAA,MAEhC;AAGA,YAAM,UAAU;AAChB,gBAAW,eAAe,cAAc,OAAQ;AAEhD,eAAS,KAAM,OAAQ,EAAE,eAAgB,YAAa;AACtD,oBAAc,KAAM,YAAa,EAAE,IAAK,QAAS;AACjD,oBAAc,KAAM,YAAa,EAAE,IAAK,QAAS;AAEjD,WAAK,KAAK;AAEV,0BAAoB;AAEpB,UAAK,cAAc,QAAY;AAG9B,kBAAW,cAAc,WAAW,QAAS;AAE7C,iBAAS,KAAM,QAAS,EAAE,eAAgB,YAAa;AACvD,mBAAW,KAAM,YAAa,EAAE,IAAK,QAAS;AAC9C,mBAAW,KAAM,YAAa,EAAE,IAAK,QAAS;AAE9C,2BAAmB;AACnB,iBAAS,WAAY,WAAW,aAAc;AAC9C,YAAK,QAAQ,IAAK,QAAS,IAAI,GAAI;AAElC,6BAAmB;AAAA,QAEpB;AAEA,YAAK,WAAW,EAAI,2BAA0B;AAE9C,iBAAS,WAAY,WAAW,YAAa;AAC7C,iBAAS,UAAU;AACnB,cAAM,MAAM,KAAK,IAAK,QAAQ,IAAK,QAAS,CAAE;AAG9C,YAAK,MAAM,OAAO,SAAU;AAG3B,gBAAM,YAAY,eAAe;AACjC,mBAAS,eAAgB,CAAE,SAAU;AACrC,mBAAS,WAAY,cAAc,aAAc;AACjD,mBAAS,KAAM,QAAS,EAAE,UAAW,SAAU,EAAE,IAAK,QAAS;AAC/D,qBAAW,KAAM,QAAS,EAAE,OAAO;AACnC,gBAAM,eAAe,SAAS,OAAO;AACrC,gBAAM,oBAAoB,SAAS,OAAO;AAC1C,mBAAS,aAAc,iBAAkB;AACzC,mBAAS,WAAY,WAAW,YAAa;AAC7C,gBAAM,oBAAoB,SAAS,OAAO;AAC1C,mBAAS,aAAc,iBAAkB;AAEzC,cAAK,SAAS,IAAK,UAAW,IAAI,qBAAqB,SAAS,IAAK,UAAW,IAAI,mBAAoB;AAEvG,gCAAoB;AAAA,UAErB;AAEA,qBAAW,KAAM,QAAS,EAAE,IAAK,YAAa;AAC9C,qBAAW,IAAK,YAAa;AAE7B,oBAAU;AAEV,cAAK,mBAAoB;AAExB,gBAAK,kBAAmB;AAEvB,yBAAW,KAAM,UAAW;AAC5B,4BAAc,KAAM,UAAW;AAAA,YAEhC,OAAO;AAEN,yBAAW,KAAM,UAAW;AAC5B,4BAAc,KAAM,UAAW;AAAA,YAEhC;AAAA,UAED,OAAO;AAIN,iCAAqB;AAAA,UAEtB;AAEA,kBAAS,MAAM,gBAAiB;AAAA,YAE/B,KAAK;AAEJ,uCAA0B,kBAAkB,mBAAmB,EAAG;AAElE;AAAA,YAED,KAAK;AAIJ,sDAAyC,kBAAkB,iBAAkB;AAI7E,kBAAK,kBAAmB;AAEvB,mCAAoB,cAAc,eAAe,YAAY,IAAI,CAAE;AAAA,cAEpE,OAAO;AAEN,mCAAoB,cAAc,YAAY,eAAe,IAAI,CAAE;AAAA,cAEpE;AAEA;AAAA,YAED,KAAK;AAAA,YACL,KAAK;AAAA,YACL;AAEC,oBAAM,gBAAkB,eAAe,MAAM,mBAAqB;AAElE,kBAAK,gBAAgB,GAAI;AAIxB,oBAAK,MAAM,mBAAmB,cAAe;AAE5C,2CAA0B,kBAAkB,mBAAmB,EAAG;AAClE;AAAA,gBAED,OAAO;AAIN,0DAAyC,kBAAkB,iBAAkB;AAI7E,sBAAK,kBAAmB;AAEvB,6BAAS,WAAY,YAAY,aAAc,EAAE,eAAgB,aAAc,EAAE,IAAK,aAAc;AACpG,6BAAS,WAAY,YAAY,UAAW,EAAE,eAAgB,aAAc,EAAE,IAAK,UAAW;AAE9F,8BAAW,eAAe,IAAI,CAAE;AAChC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,cAAc,IAAI,GAAI;AAEjC,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,UAAU,IAAI,CAAE;AAE3B,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B,OAAO;AAEN,6BAAS,WAAY,YAAY,aAAc,EAAE,eAAgB,aAAc,EAAE,IAAK,aAAc;AACpG,6BAAS,WAAY,YAAY,UAAW,EAAE,eAAgB,aAAc,EAAE,IAAK,UAAW;AAE9F,8BAAW,eAAe,IAAI,CAAE;AAChC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,cAAc,IAAI,GAAI;AAEjC,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,UAAU,IAAI,CAAE;AAE3B,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B;AAAA,gBAED;AAAA,cAED,OAAO;AAIN,oBAAK,mBAAoB;AAIxB,sBAAK,kBAAmB;AAEvB,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAE7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B,OAAO;AAEN,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAE7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B;AAGA,sBAAK,kBAAmB;AAEvB,+BAAW,KAAM,UAAW;AAAA,kBAE7B,OAAO;AAEN,+BAAW,KAAM,UAAW;AAAA,kBAE7B;AAAA,gBAGD,OAAO;AAIN,sBAAK,kBAAmB;AAEvB,8BAAW,eAAe,IAAI,CAAE;AAChC,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,cAAc,IAAI,GAAI;AAEjC,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B,OAAO;AAEN,8BAAW,eAAe,IAAI,CAAE;AAChC,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,cAAc,IAAI,GAAI;AAEjC,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B;AAAA,gBAED;AAEA,0BAAU;AAAA,cAEX;AAEA;AAAA,UAEF;AAAA,QAED,OAAO;AAIN,+BAAqB;AAAA,QAEtB;AAAA,MAED,OAAO;AAIN,6BAAqB;AAAA,MAEtB;AAEA,UAAK,CAAE,YAAY,WAAW,YAAY,GAAI;AAG7C,uBAAgB,OAAQ,CAAE,GAAG,SAAS,SAAS,kBAAkB,MAAM,EAAG;AAAA,MAE3E;AAIA,WAAK;AAEL,sBAAgB;AAEhB,iBAAW,KAAM,UAAW;AAC5B,iBAAW,KAAM,UAAW;AAAA,IAE7B;AAEA,QAAK,CAAE,UAAW;AAGjB,qBAAgB,cAAc,eAAe,eAAe,kBAAkB,OAAO,EAAG;AAAA,IAEzF,WAAY,qBAAqB,UAAW;AAI3C,UAAI,YAAY;AAChB,UAAI,YAAY;AAEhB,UAAK,4BAA4B,kBAAmB;AAEnD,oBAAY;AACZ,oBAAY;AAAA,MAEb;AAEA,UAAK,kBAAmB;AAEvB,YAAK,WAAW,yBAA0B;AAEzC,oBAAU,QAAS,UAAU,IAAI,CAAE;AACnC,oBAAU,QAAS,UAAU,IAAI,CAAE;AAEnC,cAAK,SAAU;AAEd,sBAAU,QAAS,UAAU,IAAI,CAAE;AAAA,UAEpC;AAAA,QAED;AAAA,MAED,OAAO;AAEN,YAAK,WAAW,CAAE,yBAA0B;AAE3C,oBAAU,QAAS,UAAU,IAAI,CAAE;AACnC,oBAAU,QAAS,UAAU,IAAI,CAAE;AAEnC,cAAK,SAAU;AAEd,sBAAU,QAAS,UAAU,IAAI,CAAE;AAAA,UAEpC;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAEA,WAAO;AAMP,aAAS,UAAW,IAAI,IAAI,QAAS;AAEpC,aAAO,WAAY,IAAI,EAAG;AAC1B,aAAO,OAAO,IAAK,CAAE,OAAO,GAAG,OAAO,CAAE,EAAE,UAAU;AAAA,IAErD;AAEA,aAAS,UAAWC,WAAU,GAAG,GAAI;AAEpC,UAAK,UAAW;AAEf,iBAAU,iBAAkB,IAAIA,UAAS;AACzC,iBAAU,oBAAoB,CAAE,IAAIA,UAAS;AAC7C,iBAAU,oBAAoB,CAAE,IAAI;AAEpC,YAAK,SAAU;AAEd,kBAAS,iBAAkB,IAAI;AAC/B,kBAAS,oBAAoB,CAAE,IAAI;AACnC,kBAAS,oBAAoB,CAAE,IAAI;AAAA,QAEpC;AAEA,6BAAqB;AAErB,YAAK,KAAM;AAEV,cAAK,mBAAoB,IAAI;AAC7B,cAAK,sBAAsB,CAAE,IAAI;AAEjC,iCAAuB;AAAA,QAExB;AAAA,MAED;AAEA,qBAAe;AAAA,IAEhB;AAEA,aAAS,mBAAoB,QAAQ,IAAI,IAAI,GAAG,GAAI;AAKnD,eAAS,KAAM,EAAG,EAAE,IAAK,MAAO,EAAE,UAAU;AAC5C,eAAS,KAAM,EAAG,EAAE,IAAK,MAAO,EAAE,UAAU;AAE5C,UAAI,QAAQ,KAAK;AACjB,YAAM,MAAM,SAAS,IAAK,QAAS;AACnC,UAAK,KAAK,IAAK,GAAI,IAAI,EAAI,SAAQ,KAAK,IAAK,KAAK,KAAM,GAAI,CAAE;AAE9D,eAAS;AAET,eAAS,KAAM,EAAG;AAElB,eAAU,IAAI,GAAG,KAAK,eAAe,GAAG,IAAI,IAAI,KAAO;AAEtD,iBAAS,KAAM,QAAS,EAAE,aAAc,QAAQ,KAAM;AAEtD,kBAAW,UAAU,GAAG,CAAE;AAC1B,kBAAW,UAAU,GAAG,CAAE;AAC1B,kBAAW,QAAQ,GAAG,GAAI;AAE1B,iBAAS,KAAM,QAAS;AAAA,MAEzB;AAEA,gBAAW,UAAU,GAAG,CAAE;AAC1B,gBAAW,IAAI,GAAG,CAAE;AACpB,gBAAW,QAAQ,GAAG,GAAI;AAAA,IAE3B;AAEA,aAAS,uBAAuB;AAE/B,gBAAW,YAAY,IAAI,CAAE;AAC7B,gBAAW,YAAY,IAAI,CAAE;AAC7B,gBAAW,eAAe,IAAI,CAAE;AAEhC,gBAAW,YAAY,IAAI,CAAE;AAC7B,gBAAW,eAAe,IAAI,CAAE;AAChC,gBAAW,eAAe,IAAI,CAAE;AAAA,IAEjC;AAEA,aAAS,yBAA0BC,mBAAkBC,oBAAmB,GAAI;AAE3E,UAAKA,oBAAoB;AAIxB,YAAKD,mBAAmB;AAIvB,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAChC,oBAAW,YAAY,IAAI,CAAE;AAI7B,oBAAW,eAAe,GAAG,CAAE;AAC/B,oBAAW,YAAY,GAAG,CAAE;AAC5B,oBAAW,YAAY,GAAG,GAAI;AAAA,QAE/B,OAAO;AAIN,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAIhC,oBAAW,eAAe,GAAG,CAAE;AAC/B,oBAAW,YAAY,GAAG,CAAE;AAC5B,oBAAW,YAAY,GAAG,CAAE;AAAA,QAE7B;AAAA,MAED,OAAO;AAIN,YAAKA,mBAAmB;AAEvB,oBAAW,eAAe,GAAG,CAAE;AAC/B,oBAAW,YAAY,GAAG,CAAE;AAC5B,oBAAW,cAAc,GAAG,GAAI;AAAA,QAEjC,OAAO;AAEN,oBAAW,eAAe,GAAG,CAAE;AAC/B,oBAAW,YAAY,GAAG,CAAE;AAC5B,oBAAW,cAAc,GAAG,GAAI;AAAA,QAEjC;AAAA,MAED;AAAA,IAED;AAEA,aAAS,wCAAyCA,mBAAkBC,oBAAoB;AAEvF,UAAKA,oBAAoB;AAExB,YAAKD,mBAAmB;AAEvB,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAChC,oBAAW,YAAY,IAAI,CAAE;AAE7B,oBAAW,eAAe,IAAI,CAAE;AAChC,oBAAW,cAAc,IAAI,GAAI;AACjC,oBAAW,YAAY,IAAI,CAAE;AAE7B,oBAAW,cAAc,IAAI,GAAI;AACjC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAAA,QAE9B,OAAO;AAEN,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,eAAe,IAAI,CAAE;AAChC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,cAAc,IAAI,GAAI;AAEjC,oBAAW,cAAc,IAAI,GAAI;AACjC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAAA,QAE9B;AAAA,MAED;AAAA,IAED;AAEA,aAAS,eAAgB,QAAQ,IAAI,IAAIA,mBAAkB,OAAO,GAAI;AAKrE,cAAS,MAAM,eAAgB;AAAA,QAE9B,KAAK;AAEJ,cAAK,OAAQ;AAEZ,+BAAoB,QAAQ,IAAI,IAAI,GAAG,GAAI;AAAA,UAE5C,OAAO;AAEN,+BAAoB,QAAQ,IAAI,IAAI,GAAG,GAAI;AAAA,UAE5C;AAEA;AAAA,QAED,KAAK;AAEJ,cAAK,OAAQ;AAEZ,qBAAS,WAAY,IAAI,MAAO;AAChC,qBAAS,IAAK,SAAS,GAAG,CAAE,SAAS,CAAE;AAEvC,qBAAS,WAAY,UAAU,QAAS,EAAE,IAAK,MAAO;AACtD,qBAAS,WAAY,UAAU,QAAS,EAAE,IAAK,MAAO;AAGtD,gBAAKA,mBAAmB;AAEvB,uBAAS,QAAS,UAAU,IAAI,CAAE;AAClC,uBAAS,QAAS,UAAU,IAAI,CAAE;AAClC,uBAAS,QAAS,UAAU,IAAI,CAAE;AAAA,YAEnC,OAAO;AAEN,uBAAS,QAAS,UAAU,IAAI,CAAE;AAElC,kBAAK,IAAI,IAAI,CAAE,MAAM,IAAI,SAAS,QAAS,UAAU,IAAI,CAAE,IAAI,SAAS,QAAS,UAAU,IAAI,CAAE;AACjG,uBAAS,QAAS,UAAU,IAAI,CAAE;AAAA,YAEnC;AAAA,UAED,OAAO;AAEN,qBAAS,WAAY,IAAI,MAAO;AAChC,qBAAS,IAAK,SAAS,GAAG,CAAE,SAAS,CAAE;AAEvC,qBAAS,WAAY,UAAU,QAAS,EAAE,IAAK,MAAO;AACtD,qBAAS,WAAY,UAAU,QAAS,EAAE,IAAK,MAAO;AAEtD,kBAAM,KAAK,SAAS;AAGpB,gBAAKA,mBAAmB;AAEvB,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AACvC,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AACvC,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AAAA,YAExC,OAAO;AAEN,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AACvC,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AACvC,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AAAA,YAExC;AAAA,UAED;AAEA;AAAA,QAED,KAAK;AAAA,QACL;AAGC;AAAA,MAEF;AAAA,IAED;AAEA,aAAS,uBAAwBE,SAAS;AAKzC,UAAI,YAAY;AAChB,eAAU,IAAI,GAAGlB,KAAIkB,QAAO,SAAS,GAAG,IAAIlB,IAAG,KAAO;AAErD,YAAKkB,QAAQ,CAAE,EAAE,WAAYA,QAAQ,IAAI,CAAE,CAAE,IAAI,aAAc;AAE9D,sBAAY;AACZ;AAAA,QAED;AAAA,MAED;AAEA,UAAK,CAAE,UAAY,QAAOA;AAE1B,YAAM,YAAY,CAAC;AACnB,gBAAU,KAAMA,QAAQ,CAAE,CAAE;AAE5B,eAAU,IAAI,GAAGlB,KAAIkB,QAAO,SAAS,GAAG,IAAIlB,IAAG,KAAO;AAErD,YAAKkB,QAAQ,CAAE,EAAE,WAAYA,QAAQ,IAAI,CAAE,CAAE,KAAK,aAAc;AAE/D,oBAAU,KAAMA,QAAQ,CAAE,CAAE;AAAA,QAE7B;AAAA,MAED;AAEA,gBAAU,KAAMA,QAAQA,QAAO,SAAS,CAAE,CAAE;AAE5C,aAAO;AAAA,IAER;AAAA,EAED;AAGD;;;ACzkGA,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAEf,SAAK,QAAQ;AAEb,SAAK,QAAQ;AAEb,SAAK,YAAY,CAAC;AAClB,SAAK,SAAS,CAAC;AAAA,EAEhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,OAAS,KAAK,SAAS,KAAO,YAAY,eAAgB,GAAI,IAAI,KAAK;AAE7E,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,mBAAoB,KAAK,eAAgB;AAEhD,WAAO,KAAM,KAAK,SAAWC,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,OAAM,IAAK,CAAE;AAAA,MAEnC,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAO,aAAa,MAAO;AAE1B,SAAK,QAAQ,IAAI,MAAM;AACvB,SAAK,YAAY,CAAC;AAClB,SAAK,SAAS,CAAC;AAEf,SAAK,SAAU,aAAa,IAAK;AAEjC,aAAU,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAO;AAE/C,WAAK,MAAM,IAAK,KAAK,OAAQ,CAAE,CAAE;AAAA,IAElC;AAEA,WAAO,KAAK;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAU,aAAa,MAAO;AAE7B,UAAMA,QAAO,IAAI,SAAU,WAAY;AACvC,UAAM,QAAQ,IAAI,MAAOA,OAAM,GAAG,KAAK,YAAa;AAEpD,QAAK,MAAM,OAAO,aAAa,MAAM,OAAO,UAAU,MAAM,OAAO,UAAW;AAE7E,UAAI,OAAO,MAAM,UAAU;AAE3B,aAAQ,MAAO;AAEd,YAAK,KAAK,OAAO,aAAc;AAE9B,gBAAM,UAAU,KAAK,UAAU;AAC/B,eAAK,aAAc,uBAAuB,OAAQ;AAAA,QAEnD,WAAY,KAAK,OAAO,OAAQ;AAE/B,eAAK,aAAc,MAAM,IAAK;AAAA,QAE/B,OAAO;AAEN,eAAK,aAAc,yBAAyB,KAAK,KAAM;AAAA,QAExD;AAEA,eAAO,MAAM,UAAU;AAAA,MAExB;AAAA,IAED;AAEA,SAAK,aAAc,YAAY,KAAK,OAAO,SAAS,SAAU;AAAA,EAE/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAc,OAAO,MAAO;AAE3B,QAAI,OAAO,MAAM,UAAU;AAE3B,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,cAAe;AAE/B,cAAM,UAAU,CAAE,KAAK,UAAU;AACjC,aAAK,aAAc,mBAAmB,OAAQ;AAAA,MAE/C,WAAY,KAAK,OAAO,cAAe;AAEtC,cAAMC,SAAQ,KAAK,UAAU;AAC7B,aAAK,aAAc,mBAAmBA,MAAM;AAC5C,aAAK,MAAM,MAAM,IAAKA,QAAOA,QAAOA,MAAM;AAAA,MAE3C,WAAY,KAAK,OAAO,cAAe;AAEtC,aAAK,aAAc,cAAe;AAClC,aAAK,gBAAiB,IAAK;AAAA,MAE5B,WAAY,KAAK,OAAO,WAAY;AAEnC,aAAK,aAAc,UAAW;AAC9B,aAAK,kBAAmB,MAAM,IAAK;AAAA,MAEpC,OAAO;AAEN,aAAK,aAAc,0BAA0B,KAAK,KAAM;AAAA,MAEzD;AAEA,aAAO,MAAM,UAAU;AAAA,IAExB;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAiB,OAAQ;AAExB,UAAMC,QAAO,MAAM,WAAW;AAE9B,QAAI,OAAO,MAAM,UAAU;AAC3B,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,cAAe;AAE/B,cAAM,OAAO,KAAK,SAAU,IAAK;AACjC,aAAK,OAAOA;AACZ,aAAK,OAAO,KAAM,IAAK;AAAA,MAExB,OAAO;AAEN,aAAK,aAAc,iCAAiC,KAAK,KAAM;AAAA,MAEhE;AAEA,aAAO,MAAM,UAAW;AAAA,IAEzB;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAmB,OAAO,MAAO;AAEhC,QAAI,OAAO,MAAM,UAAU;AAC3B,UAAM,WAAW,IAAI,kBAAkB;AAEvC,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,UAAW;AAE3B,iBAAS,OAAO,KAAK,WAAW;AAChC,aAAK,aAAc,cAAc,SAAS,IAAK;AAAA,MAEhD,WAAY,KAAK,OAAO,UAAW;AAElC,aAAK,aAAc,cAAe;AAClC,iBAAS,YAAY;AAAA,MAEtB,WAAY,KAAK,OAAO,eAAgB;AAEvC,cAAMC,SAAQ,KAAK,SAAS;AAC5B,iBAAS,qBAAqBA;AAC9B,aAAK,aAAc,6BAA6BA,MAAM;AAAA,MAEvD,WAAY,KAAK,OAAO,cAAe;AAEtC,iBAAS,OAAO;AAChB,aAAK,aAAc,gBAAiB;AAAA,MAErC,WAAY,KAAK,OAAO,cAAe;AAEtC,aAAK,aAAc,sBAAuB;AAC1C,iBAAS,WAAW;AAAA,MAErB,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,kBAAmB;AACtC,iBAAS,QAAQ,KAAK,UAAW,IAAK;AAAA,MAEvC,WAAY,KAAK,OAAO,cAAe;AAEtC,aAAK,aAAc,mBAAoB;AACvC,iBAAS,WAAW,KAAK,UAAW,IAAK;AAAA,MAE1C,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,kBAAmB;AACtC,iBAAS,QAAQ,KAAK,UAAW,IAAK;AAAA,MAEvC,WAAY,KAAK,OAAO,eAAgB;AAEvC,cAAM,YAAY,KAAK,eAAgB,IAAK;AAC5C,iBAAS,YAAY,YAAY;AACjC,aAAK,aAAc,oBAAoB,SAAU;AAAA,MAElD,WAAY,KAAK,OAAO,kBAAmB;AAE1C,cAAM,eAAe,KAAK,eAAgB,IAAK;AAC/C,iBAAS,UAAU,IAAI;AACvB,aAAK,aAAc,sBAAsB,YAAa;AACtD,iBAAS,cAAc,SAAS,UAAU,IAAI,OAAO;AAAA,MAEtD,WAAY,KAAK,OAAO,YAAa;AAEpC,aAAK,aAAc,aAAc;AACjC,iBAAS,MAAM,KAAK,QAAS,MAAM,IAAK;AAAA,MAEzC,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,YAAa;AAChC,iBAAS,UAAU,KAAK,QAAS,MAAM,IAAK;AAAA,MAE7C,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,eAAgB;AACnC,iBAAS,WAAW,KAAK,QAAS,MAAM,IAAK;AAAA,MAE9C,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,gBAAiB;AACpC,iBAAS,cAAc,KAAK,QAAS,MAAM,IAAK;AAAA,MAEjD,OAAO;AAEN,aAAK,aAAc,gCAAgC,KAAK,KAAM;AAAA,MAE/D;AAEA,aAAO,MAAM,UAAU;AAAA,IAExB;AAEA,SAAK,UAAW,SAAS,IAAK,IAAI;AAAA,EAEnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAU,OAAQ;AAEjB,QAAI,OAAO,MAAM,UAAW;AAE5B,UAAM,WAAW,IAAI,eAAe;AAEpC,UAAM,WAAW,IAAI,kBAAkB;AACvC,UAAM,OAAO,IAAI,KAAM,UAAU,QAAS;AAC1C,SAAK,OAAO;AAEZ,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,aAAc;AAE9B,cAAM,SAAS,KAAK,SAAU;AAE9B,aAAK,aAAc,gBAAgB,MAAO;AAI1C,cAAM,WAAW,CAAC;AAElB,iBAAU,IAAI,GAAG,IAAI,QAAQ,KAAQ;AAEpC,mBAAS,KAAM,KAAK,UAAW,CAAE;AACjC,mBAAS,KAAM,KAAK,UAAW,CAAE;AACjC,mBAAS,KAAM,KAAK,UAAW,CAAE;AAAA,QAElC;AAEA,iBAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAAA,MAE9E,WAAY,KAAK,OAAO,YAAa;AAEpC,aAAK,cAAe,MAAM,IAAK;AAAA,MAEhC,WAAY,KAAK,OAAO,WAAY;AAEnC,cAAM,SAAS,KAAK,SAAU;AAE9B,aAAK,aAAc,YAAY,MAAO;AAItC,cAAM,MAAM,CAAC;AAEb,iBAAU,IAAI,GAAG,IAAI,QAAQ,KAAO;AAEnC,cAAI,KAAM,KAAK,UAAW,CAAE;AAC5B,cAAI,KAAM,KAAK,UAAW,CAAE;AAAA,QAE7B;AAEA,iBAAS,aAAc,MAAM,IAAI,uBAAwB,KAAK,CAAE,CAAE;AAAA,MAGnE,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,gCAAiC;AAEpD,cAAMC,UAAS,CAAC;AAChB,iBAAU,IAAI,GAAG,IAAI,IAAI,KAAO;AAE/B,UAAAA,QAAQ,CAAE,IAAI,KAAK,UAAW;AAAA,QAE/B;AAEA,cAAMC,UAAS,IAAI,QAAQ;AAG3B,QAAAA,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AAGjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,EAAG;AAGlC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,EAAG,IAAID,QAAQ,CAAE;AAClC,QAAAC,QAAO,SAAU,EAAG,IAAID,QAAQ,EAAG;AAGnC,QAAAC,QAAO,SAAU,EAAG,IAAI;AACxB,QAAAA,QAAO,SAAU,EAAG,IAAI;AACxB,QAAAA,QAAO,SAAU,EAAG,IAAI;AACxB,QAAAA,QAAO,SAAU,EAAG,IAAI;AAExB,QAAAA,QAAO,UAAU;AAEjB,cAAMC,WAAU,IAAI,QAAQ;AAC5B,QAAAA,SAAQ,KAAMD,OAAO,EAAE,OAAO;AAC9B,iBAAS,aAAcC,QAAQ;AAE/B,QAAAD,QAAO,UAAW,KAAK,UAAU,KAAK,YAAY,KAAK,KAAM;AAAA,MAE9D,OAAO;AAEN,aAAK,aAAc,4BAA4B,KAAK,KAAM;AAAA,MAE3D;AAEA,aAAO,MAAM,UAAW;AAAA,IAEzB;AAEA,aAAS,qBAAqB;AAE9B,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAe,OAAO,MAAO;AAE5B,UAAM,QAAQ,MAAM,SAAU;AAE9B,SAAK,aAAc,eAAe,KAAM;AAExC,UAAME,SAAQ,CAAC;AAEf,aAAU,IAAI,GAAG,IAAI,OAAO,EAAG,GAAI;AAElC,MAAAA,OAAM,KAAM,MAAM,SAAU,GAAG,MAAM,SAAU,GAAG,MAAM,SAAU,CAAE;AAEpE,YAAM,SAAU;AAAA,IAEjB;AAEA,SAAK,SAAS,SAAUA,MAAM;AAI9B,QAAI,gBAAgB;AACpB,QAAI,QAAQ;AAEZ,WAAQ,CAAE,MAAM,YAAa;AAE5B,YAAM,WAAW,MAAM,UAAW;AAElC,UAAK,SAAS,OAAO,eAAgB;AAEpC,aAAK,aAAc,sBAAuB;AAE1C,cAAM,QAAQ,KAAK,kBAAmB,QAAS;AAC/C,cAAM,QAAQ,MAAM,MAAM,SAAS;AAEnC,aAAK,SAAS,SAAU,OAAO,OAAO,aAAc;AAEpD,iBAAS;AACT;AAEA,cAAM,WAAW,KAAK,UAAW,MAAM,IAAK;AAE5C,YAAK,MAAM,QAAS,KAAK,QAAS,MAAM,MAAQ,MAAK,WAAW,CAAC;AAEjE,YAAK,aAAa,QAAY;AAE7B,eAAK,SAAS,KAAM,QAAS;AAAA,QAE9B;AAAA,MAED,OAAO;AAEN,aAAK,aAAc,qCAAqC,SAAS,KAAM;AAAA,MAExE;AAAA,IAED;AAEA,QAAK,KAAK,SAAS,WAAW,EAAI,MAAK,WAAW,KAAK,SAAU,CAAE;AAAA,EAEpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,QAAS,OAAO,MAAO;AAEtB,QAAI,OAAO,MAAM,UAAW;AAC5B,QAAI,UAAU,CAAC;AAEf,UAAM,SAAS,IAAI,cAAe,KAAK,OAAQ;AAC/C,WAAO,QAAS,KAAK,gBAAgB,IAAK,EAAE,eAAgB,KAAK,WAAY;AAE7E,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,aAAc;AAE9B,cAAML,QAAO,KAAK,WAAW;AAC7B,kBAAU,OAAO,KAAMA,KAAK;AAE5B,aAAK,aAAc,iBAAiB,OAAOA,KAAK;AAAA,MAEjD,WAAY,KAAK,OAAO,iBAAkB;AAEzC,gBAAQ,OAAO,IAAI,KAAK,UAAW;AACnC,aAAK,aAAc,oBAAoB,QAAQ,OAAO,CAAE;AAAA,MAEzD,WAAY,KAAK,OAAO,iBAAkB;AAEzC,gBAAQ,OAAO,IAAI,KAAK,UAAW;AACnC,aAAK,aAAc,oBAAoB,QAAQ,OAAO,CAAE;AAAA,MAEzD,WAAY,KAAK,OAAO,gBAAiB;AAExC,gBAAQ,OAAO,IAAI,KAAK,UAAW;AACnC,aAAK,aAAc,oBAAoB,QAAQ,OAAO,CAAE;AAAA,MAEzD,WAAY,KAAK,OAAO,gBAAiB;AAExC,gBAAQ,OAAO,IAAI,KAAK,UAAW;AACnC,aAAK,aAAc,oBAAoB,QAAQ,OAAO,CAAE;AAAA,MAEzD,OAAO;AAEN,aAAK,aAAc,8BAA8B,KAAK,KAAM;AAAA,MAE7D;AAEA,aAAO,MAAM,UAAW;AAAA,IAEzB;AAEA,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAmB,OAAQ;AAE1B,UAAMA,QAAO,MAAM,WAAW;AAC9B,UAAM,WAAW,MAAM,SAAS;AAEhC,SAAK,aAAc,oBAAoBA,KAAK;AAC5C,SAAK,aAAc,qBAAqB,QAAS;AAEjD,UAAMK,SAAQ,CAAC;AACf,aAAU,IAAI,GAAG,IAAI,UAAU,EAAG,GAAI;AAErC,MAAAA,OAAM,KAAM,MAAM,SAAU,CAAE;AAAA,IAE/B;AAEA,WAAO,EAAE,MAAML,OAAM,OAAOK,OAAM;AAAA,EAEnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAW,OAAQ;AAElB,UAAM,WAAW,MAAM,UAAW;AAClC,UAAM,QAAQ,IAAI,MAAM;AAExB,QAAK,SAAS,OAAO,YAAY,SAAS,OAAO,cAAe;AAE/D,YAAM,IAAI,SAAS,SAAU;AAC7B,YAAMC,KAAI,SAAS,SAAU;AAC7B,YAAMC,KAAI,SAAS,SAAU;AAE7B,YAAM,OAAQ,IAAI,KAAKD,KAAI,KAAKC,KAAI,GAAI;AAExC,WAAK,aAAc,kBAAkB,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM,CAAE;AAAA,IAEhF,WAAY,SAAS,OAAO,WAAW,SAAS,OAAO,aAAc;AAEpE,YAAM,IAAI,SAAS,UAAW;AAC9B,YAAMD,KAAI,SAAS,UAAW;AAC9B,YAAMC,KAAI,SAAS,UAAW;AAE9B,YAAM,OAAQ,GAAGD,IAAGC,EAAE;AAEtB,WAAK,aAAc,kBAAkB,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM,CAAE;AAAA,IAEhF,OAAO;AAEN,WAAK,aAAc,gCAAgC,SAAS,KAAM;AAAA,IAEnE;AAEA,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAgB,OAAQ;AAEvB,UAAM,WAAW,MAAM,UAAW;AAElC,YAAS,SAAS,IAAK;AAAA,MAEtB,KAAK;AACJ,eAAS,SAAS,UAAW,IAAI;AACjC;AAAA,MAED,KAAK;AACJ,eAAO,SAAS,UAAW;AAC3B;AAAA,MAED;AACC,aAAK,aAAc,qCAAqC,SAAS,KAAM;AACvE,eAAO;AAAA,IAET;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAc,SAAU;AAEvB,QAAK,KAAK,OAAQ;AAEjB,cAAQ,IAAK,OAAQ;AAAA,IAEtB;AAAA,EAED;AAED;AAIA,IAAM,QAAN,MAAM,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUX,YAAaT,OAAMU,WAAU,cAAe;AAE3C,SAAK,OAAOV;AAEZ,SAAK,SAASU;AAEd,SAAK,WAAWA;AAChB,SAAK,eAAe;AAEpB,QAAK,KAAK,wBAAwB,UAAW;AAE5C,WAAK,eAAe,WAAY;AAAA,MAAC;AAAA,IAElC;AAEA,SAAK,KAAK,KAAK,SAAS;AACxB,SAAK,OAAO,KAAK,UAAU;AAC3B,SAAK,MAAM,KAAK,SAAS,KAAK;AAE9B,QAAK,KAAK,MAAMV,MAAK,YAAa;AAEjC,WAAK,aAAc,iCAAiCU,SAAS;AAAA,IAE9D;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY;AAEX,QAAK,KAAK,YAAa;AAEtB,aAAO;AAAA,IAER;AAEA,QAAI;AAEH,YAAM,OAAO,IAAI,OAAO,KAAK,MAAM,KAAK,UAAU,KAAK,YAAa;AACpE,WAAK,YAAY,KAAK;AACtB,aAAO;AAAA,IAER,SAAU,GAAI;AAEb,WAAK,aAAc,6BAA6B,KAAK,QAAS;AAC9D,aAAO;AAAA,IAER;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,QAAQ;AAEX,WAAO,KAAK,GAAG,SAAU,EAAG;AAAA,EAE7B;AAAA,EAEA,IAAI,aAAa;AAEhB,WAAO,KAAK,YAAY,KAAK;AAAA,EAE9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW;AAEV,UAAM,IAAI,KAAK,KAAK,SAAU,KAAK,UAAU,IAAK;AAClD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY;AAEX,QAAI;AAEH,YAAM,IAAI,KAAK,KAAK,WAAY,KAAK,UAAU,IAAK;AACpD,WAAK,YAAY;AACjB,aAAO;AAAA,IAER,SAAU,GAAI;AAEb,WAAK,aAAc,IAAI,MAAM,KAAK,WAAW,MAAM,KAAK,KAAK,UAAW;AACxE,aAAO;AAAA,IAER;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU;AAET,UAAM,IAAI,KAAK,KAAK,SAAU,KAAK,UAAU,IAAK;AAClD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY;AAEX,UAAM,IAAI,KAAK,KAAK,SAAU,KAAK,UAAU,IAAK;AAClD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY;AAEX,UAAM,IAAI,KAAK,KAAK,UAAW,KAAK,UAAU,IAAK;AACnD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW;AAEV,UAAM,IAAI,KAAK,KAAK,UAAW,KAAK,UAAU,IAAK;AACnD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa;AAEZ,QAAI,IAAI;AACR,QAAIC,KAAI,KAAK,SAAS;AACtB,WAAQA,IAAI;AAEX,WAAK,OAAO,aAAcA,EAAE;AAC5B,MAAAA,KAAI,KAAK,SAAS;AAAA,IAEnB;AAEA,WAAO;AAAA,EAER;AAED;AAGA,IAAM,WAAW;AAGjB,IAAM,YAAY;AAElB,IAAM,SAAS;AACf,IAAM,cAAc;AAEpB,IAAM,UAAU;AAChB,IAAM,WAAW;AACjB,IAAM,eAAe;AACrB,IAAM,cAAc;AACpB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,QAAQ;AACd,IAAM,eAAe;AACrB,IAAM,eAAe;AAwBrB,IAAM,YAAY;AAClB,IAAM,WAAW;AACjB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,gBAAgB;AAEtB,IAAM,mBAAmB;AAOzB,IAAM,eAAe;AAErB,IAAM,eAAe;AACrB,IAAM,WAAW;AAKjB,IAAM,gBAAgB;AACtB,IAAM,aAAa;AAQnB,IAAM,cAAc;AAIpB,IAAM,cAAc;AAIpB,IAAM,cAAc;AAgBpB,IAAM,cAAc;AAGpB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AAOxB,IAAM,eAAe;AA8BrB,IAAM,eAAe;AACrB,IAAM,cAAc;AAEpB,IAAM,aAAa;AACnB,IAAM,gBAAgB;AAGtB,IAAM,YAAY;AAClB,IAAM,cAAc;;;AC5hCpB,IAAIC,QAAO,CAAC;AAAA,CAGX,WAAU;AAAC;AAAa,MAAI,IAAE,SAAS,KAAI;AAAC,aAASC,GAAEC,IAAE;AAAC,WAAK,UAAQ,iBAAeA;AAAA,IAAC;AAAC,IAAAD,GAAE,YAAU,IAAI;AAAM,IAAAA,GAAE,UAAU,OAAK;AAAY,IAAAA,GAAE,cAAYA;AAAE,WAAOA;AAAA,EAAC,EAAE,GAAE,KAAG,SAAS,KAAI;AAAC,QAAIC,KAAE,IAAI,WAAW,CAAC,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,CAAC,GAAEC,KAAE,MAAK,KAAG,KAAI,KAAG,MAAK,KAAG,MAAK,KAAG,MAAK,KAAG,MAAK,IAAE,MAAK,KAAG;AAAK,aAASC,IAAGC,IAAE;AAAC,UAAGA,MAAG,KAAK,CAAAA,KAAE,CAAC;AAAE,UAAGA,GAAE,KAAG,KAAK,CAAAA,GAAE,IAAE;AAAG,WAAK,IAAEA,GAAE;AAAE,WAAK,IAAEA,GAAE;AAAA,IAAC;AAAC,aAAS,GAAGA,IAAE,GAAE;AAAC,UAAI,IAAE,GAAE,IAAE,CAAC,GAAEC,IAAEC,IAAEC,KAAE,IAAGC;AAAE,aAAMD,KAAE,KAAG,CAACH,GAAEG,KAAE,CAAC,GAAE;AAAC,QAAAA;AAAA,MAAG;AAAC,QAAE,KAAK,EAAC,UAAS,CAAC,GAAE,OAAM,EAAC,CAAC;AAAE,UAAIE,KAAE,EAAE,CAAC;AAAE,WAAIJ,KAAE,GAAEA,KAAEE,IAAEF,MACnoB;AAAC,aAAIC,KAAE,GAAEA,KAAEF,GAAEC,EAAC,GAAEC,MAAI;AAAC,UAAAG,KAAE,EAAE,IAAI;AAAE,UAAAA,GAAE,SAASA,GAAE,KAAK,IAAE,EAAE,CAAC;AAAE,iBAAMA,GAAE,QAAM,GAAE;AAAC,YAAAA,KAAE,EAAE,IAAI;AAAA,UAAC;AAAC,UAAAA,GAAE;AAAQ,YAAE,KAAKA,EAAC;AAAE,iBAAM,EAAE,UAAQJ,IAAE;AAAC,cAAE,KAAKG,KAAE,EAAC,UAAS,CAAC,GAAE,OAAM,EAAC,CAAC;AAAE,YAAAC,GAAE,SAASA,GAAE,KAAK,IAAED,GAAE;AAAS,YAAAC,KAAED;AAAA,UAAC;AAAC;AAAA,QAAG;AAAC,YAAGH,KAAE,IAAEE,IAAE;AAAC,YAAE,KAAKC,KAAE,EAAC,UAAS,CAAC,GAAE,OAAM,EAAC,CAAC;AAAE,UAAAC,GAAE,SAASA,GAAE,KAAK,IAAED,GAAE;AAAS,UAAAC,KAAED;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,EAAE,CAAC,EAAE;AAAA,IAAQ;AAAC,aAAS,GAAGJ,IAAE,GAAE,GAAE;AAAC,aAAO,OAAKA,GAAE,IAAE,KAAG,IAAE;AAAA,IAAE;AAAC,aAAS,GAAGA,IAAE,GAAE,GAAE,GAAEC,IAAEC,IAAEC,IAAEE,IAAED,IAAE,GAAE;AAAC,UAAG,KAAG,KAAK,KAAE;AAAG,UAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAGE,KAAE,GAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAEC,KAAE,GAAEC,IAAEC,IAAEC,IAAEC;AAAE,eAASC,KAAG;AAAC,YAAG,IAAE,GAAE;AAAC;AAAI,iBAAO,KAAG,IAAE;AAAA,QAAC;AAAC,YAAEb,GAAE,GAAG;AAAE,YAAG,MAAI,KAAI;AAAC,cAAIc,KAAEd,GAAE,GAAG;AAAE,cAAGc,IAAE;AAAC,gBAAGA,OAAI,OAAK,GAAE;AAAC,mBAAG;AAAE,kBAAIC,KAAEC,GAAEhB,IAAE,CAAC;AAAE,mBAAG;AAAE,kBAAGe,KAAE,KAAGA,OAAI,EAAE,GAAE;AAAC,sBAAM,IAAI,eAAe,qDAAoDA,EAAC;AAAA,cAAC;AAAA,YAAC,WAASD,OAAI,KAAI;AAAC,kBAAG,GAAE;AAAC,oBAAI,IAAER,KAAE;AACzrB,oBAAG,IAAE,KAAG,IAAE,EAAE,IAAE,IAAG;AAAC,wBAAM,IAAI,eAAe,yGAA2G,CAAC;AAAA,gBAAC;AAAA,cAAC;AAAC,oBAAM,IAAI,eAAe,mDAAmD;AAAA,YAAC;AAAC,kBAAM,IAAI,EAAE,mBAAmB;AAAA,UAAC;AAAA,QAAC;AAAC,YAAE;AAAE,eAAO,MAAI;AAAA,MAAC;AAAC,eAAS,EAAEQ,IAAE;AAAC,YAAIC,KAAED;AAAE,eAAM,MAAG;AAAC,UAAAC,KAAEA,GAAEF,GAAE,CAAC;AAAE,kBAAO,OAAOE,IAAE;AAAA,YAAC,KAAI;AAAS,qBAAOA;AAAA,YAAE,KAAI;AAAS;AAAA,UAAQ;AAAC,gBAAM,IAAI,EAAE,0BAA0B;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,EAAED,IAAE;AAAC,YAAIG,KAAE;AAAE,eAAMH,KAAE,GAAE;AAAC,UAAAG,KAAEA,MAAG,IAAEJ,GAAE;AAAE,UAAAC;AAAA,QAAG;AAAC,eAAOG;AAAA,MAAC;AAAC,eAAS,EAAEH,IAAE;AAAC,YAAGA,OAAI,GAAE;AAAC,iBAAOD,GAAE,MAAI,IAAE,IAAE;AAAA,QAAE;AAAC,YAAII,KAAE,EAAEH,EAAC;AAAE,YAAGG,MAAG,KAAGH,KAAE,GAAE;AAAC,iBAAOG;AAAA,QAAC;AAAC,eAAOA,MAAG,MAAIH,MAAG;AAAA,MAAC;AAAC,eAAS,EAAEP,IAAEO,IAAE;AAAC,YAAIC,KAAE,EAAER,GAAE,CAAC,GAAE,IAAEQ,OAAI,IAAE,IAAE,EAAEA,EAAC,GAAEG,KAAE;AAClnB,QAAAX,GAAE,EAAEO,EAAC,IAAEP,GAAE,KAAG;AAAE,eAAMW,KAAE,IAAG;AAAC,cAAI,IAAE,EAAEX,GAAE,CAAC,GAAE,IAAE,IAAE,IAAGY,KAAE,KAAG;AAAE,cAAG,MAAI,GAAE;AAAC,gBAAGA,KAAE,IAAG;AAAC;AAAA,YAAK;AAAC,YAAAD,MAAG;AAAG;AAAA,UAAQ;AAAC,UAAAA,MAAGC;AAAE,cAAI,IAAEtB,GAAEqB,EAAC;AAAE,UAAAX,GAAE,EAAEO,KAAE,CAAC,IAAE,EAAE,CAAC;AAAE,UAAAI;AAAA,QAAG;AAAA,MAAC;AAAC,eAASE,GAAEb,IAAEO,IAAE;AAAC,YAAIC,KAAE,EAAER,GAAE,CAAC,GAAE,IAAEQ,OAAI,IAAE,IAAE,EAAEA,EAAC,KAAGX;AAAE,QAAAG,GAAE,EAAEO,EAAC,IAAEP,GAAE,KAAG;AAAA,MAAC;AAAC,eAASc,GAAEd,IAAEO,IAAE;AAAC,QAAAP,GAAE,EAAEO,EAAC,KAAGD,GAAE,KAAGT;AAAA,MAAC;AAAC,eAAS,EAAEG,IAAEO,IAAE;AAAC,YAAG,IAAE,GAAE;AAAC;AAAI;AAAA,QAAM;AAAC,YAAII,KAAEhB,IAAEa,KAAEZ;AAAE,eAAMe,MAAGH,IAAE;AAAC,cAAI,IAAE,EAAER,GAAE,CAAC,GAAE,IAAE,IAAE,IAAG,IAAE,KAAG;AAAE,cAAG,MAAI,GAAE;AAAC,gBAAG,IAAE,IAAG;AAAC,kBAAE,EAAE,CAAC,KAAG,KAAG,KAAG;AAAE;AAAA,YAAK;AAAC,YAAAW,MAAG;AAAG;AAAA,UAAQ;AAAC,UAAAA,MAAG;AAAE,cAAIC,KAAEtB,GAAEqB,EAAC;AAAE,UAAAX,GAAE,EAAEO,KAAEK,EAAC,IAAE,EAAE,CAAC,KAAG,KAAGf;AAAG,UAAAc;AAAA,QAAG;AAAA,MAAC;AAAC,eAAS,GAAGX,IAAEO,IAAE;AAAC,YAAII,KAAEhB,IAAEa,KAAEZ,IAAE,IAAE,GAAE,GAAE;AAAE,eAAMe,MAAGH,IAAE;AAAC,cAAII,KAAEL,KAAEjB,GAAEqB,EAAC,GAAE,IAAEX,GAAE,EAAEY,EAAC,IAAE,IAAE,KAAG;AAAE,kBAAO,GAAE;AAAA,YAAC,KAAK;AAAE,kBAAE,EAAEZ,GAAE,CAAC;AAAE,kBAAE,IAAE;AAAG,kBAAE,KAAG;AAAE,kBAAG,MAAI,GAAE;AAAC,oBAAG,IAAE,IAAG;AAAC,sBAAE,EAAE,CAAC,KAAG,KAAG;AAAG,sBAAE;AAAA,gBAAC,OAAK;AAAC,sBAAE;AAAG,sBAAE;AAAA,gBAAC;AAAA,cAAC,OAAK;AAAC,oBAAG,MAAI,GAAE;AAAC,wBAAM,IAAI,EAAE,sBAAsB;AAAA,gBAAC;AAAC,qBAAG,EAAE,CAAC;AAAE,oBAAE,IAAE,IAAE;AAAA,cAAC;AAAC;AAAA,YAAS,KAAK;AAAA,YAAE,KAAK;AAAE,kBAAGA,GAAE,EAAEY,EAAC,GAAE;AAAC,gBAAAZ,GAAE,EAAEY,EAAC,KAAG,KAAGN,GAAE,KAAGT;AAAA,cAAE,OAAK;AAAC;AAAI,oBAAG,MAAI,GAAE;AAAC,sBAAE,MAAI,IAAE,IAAE;AAAA,gBAAC;AAAA,cAAC;AAAC;AAAA,YAAM,KAAK;AAAE,kBAAGG,GAAE,EAAEY,EAAC,GAAE;AAAC,gBAAAZ,GAAE,EAAEY,EAAC,KAAG,KAAGN,GAAE,KAAGT;AAAA,cAAE,OAAK;AAAC,gBAAAG,GAAE,EAAEY,EAAC,IAAE,MAAIf;AACjxB,oBAAE;AAAA,cAAC;AAAC;AAAA,YAAM,KAAK;AAAE,kBAAGG,GAAE,EAAEY,EAAC,GAAE;AAAC,gBAAAZ,GAAE,EAAEY,EAAC,KAAG,KAAGN,GAAE,KAAGT;AAAA,cAAE;AAAC;AAAA,UAAK;AAAC,UAAAc;AAAA,QAAG;AAAC,YAAG,MAAI,GAAE;AAAC;AAAI,cAAG,MAAI,GAAE;AAAC,gBAAE;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,EAAEX,IAAEO,IAAEN,IAAEO,IAAE,GAAE;AAAC,YAAI,IAAEP,KAAE,IAAE,GAAE,IAAEA,KAAE;AAAE,QAAAF,KAAE,IAAEC,GAAE,IAAEQ;AAAE,YAAII,KAAE,IAAEZ,GAAE,IAAE,GAAE,IAAE,GAAGA,IAAED,IAAEa,EAAC;AAAE,QAAAL,GAAEP,IAAE,CAAC;AAAA,MAAC;AAAC,eAAS,EAAEA,IAAEO,IAAEN,IAAE;AAAC,QAAAF,KAAEE,KAAED,GAAE,IAAE;AAAE,YAAIQ,KAAEP,KAAED,GAAE,GAAE,IAAE,GAAGA,IAAED,IAAES,EAAC;AAAE,QAAAD,GAAEP,IAAE,CAAC;AAAA,MAAC;AAAC,UAAIe,KAAE,EAAE;AAAO,UAAG,GAAE;AAAC,YAAGpB,OAAI,GAAE;AAAC,cAAEG,OAAI,IAAEe,KAAEC;AAAA,QAAC,OAAK;AAAC,cAAEhB,OAAI,IAAE,IAAE;AAAA,QAAE;AAAA,MAAC,OAAK;AAAC,YAAE;AAAA,MAAC;AAAC,UAAGiB,OAAI,GAAE;AAAC,QAAAZ,KAAE,EAAE,CAAC,EAAE,IAAE,EAAE,CAAC,EAAE;AAAA,MAAC,OAAK;AAAC,QAAAA,KAAE,IAAE,EAAE;AAAA,MAAC;AAAC,aAAMF,MAAGE,IAAE;AAAC,YAAI,IAAET,KAAE,KAAK,IAAIS,KAAEF,IAAEP,EAAC,IAAES;AAAE,YAAG,IAAE,GAAE;AAAC,eAAI,IAAE,GAAE,IAAEY,IAAE,KAAI;AAAC,cAAE,CAAC,EAAE,IAAE;AAAA,UAAC;AAAC,cAAE;AAAE,cAAGA,OAAI,GAAE;AAAC,YAAAf,KAAE,EAAE,CAAC;AAAE,iBAAI,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,gBAAEA,IAAE,GAAEC,EAAC;AAAE,cAAAA;AAAA,YAAG;AAAA,UAAC,OAAK;AAAC,iBAAI,IAAE,GAAE,IAAE,GAC9d,KAAI;AAAC,mBAAI,IAAE,GAAE,IAAEc,IAAE,KAAI;AAAC,gBAAAf,KAAE,EAAE,CAAC;AAAE,gBAAAI,KAAEJ,GAAE;AAAE,gBAAAK,KAAEL,GAAE;AAAE,qBAAI,IAAE,GAAE,IAAEK,IAAE,KAAI;AAAC,uBAAI,IAAE,GAAE,IAAED,IAAE,KAAI;AAAC,sBAAEJ,IAAE,GAAEC,IAAE,GAAE,CAAC;AAAA,kBAAC;AAAA,gBAAC;AAAA,cAAC;AAAC,cAAAA;AAAA,YAAG;AAAA,UAAC;AAAA,QAAC;AAAC,YAAE;AAAE,QAAAC,KAAE,GAAGT,IAAE,CAAC;AAAE,YAAG,CAACS,IAAE;AAAC;AAAA,QAAK;AAAC,YAAGA,GAAE,GAAE;AAAC,cAAI,KAAG,IAAE,IAAE,eAAa;AAAY,cAAEA,GAAE;AAAA,QAAM;AAAC,YAAGA,GAAE,KAAG,SAAOA,GAAE,KAAG,OAAM;AAAC,eAAG;AAAA,QAAC,OAAK;AAAC;AAAA,QAAK;AAAA,MAAC;AAAC,aAAO,IAAE;AAAA,IAAC;AAAC,aAAS,GAAGT,IAAE,GAAE,GAAE;AAAC,UAAI,IAAEA,GAAE,GAAEC,KAAED,GAAE,GAAEE,IAAEC,IAAEE,IAAED,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAES,IAAE,GAAE,GAAE,GAAE,GAAEO,IAAEC;AAAE,UAAG,CAAC,GAAE;AAAC,cAAM,IAAI,EAAE,sCAAsC;AAAA,MAAC;AAAC,eAAQ,IAAE,GAAE,IAAE,IAAG,KAAG,GAAE;AAAC,YAAEpB,GAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,QAAAY,KAAEZ,GAAE,IAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,QAAAmB,KAAEnB,GAAE,IAAE,IAAE,CAAC;AAAE,aAAG,EAAE,CAAC;AAAE,aAAI,IAAEY,KAAE,IAAE,IAAE,IAAE,IAAEO,QAAK,GAAE;AAAC,UAAAC,KAAE,IAAE,IAAE,OAAK;AAAG,YAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE;AAAA,QAAQ;AAAC,aAAG,EAAE,IAAE,CAAC;AAAE,QAAAR,MAAG,EAAE,IAAE,CAAC;AAAE,aAAG,EAAE,IAAE,CAAC;AAAE,aAAG,EAAE,IAAE,CAAC;AAAE,aAAG,EAAE,IAAE,CAAC;AAAE,aAAG,EAAE,IAAE,CAAC;AAAE,QAAAO,MAAG,EAAE,IAAE,CAAC;AAAE,QAAAlB,KAAE,IAAE,IAAE,OAAK;AAAE,QAAAC,KAAE,IAAE,IAAE,OAAK;AAAE,QAAAE,KAAEQ;AAAE,QAAAT,KAAE;AAAE,YAAE,MAAI,IAAEgB,MAAG,OAAK;AAAE,YAAE,MAAI,IAAEA,MAAG,OAAK;AAC7tB,YAAE,KAAG;AAAE,YAAE,KAAG;AAAE,QAAAlB,KAAEA,KAAEC,KAAE,KAAG;AAAE,QAAAA,KAAED,KAAEC;AAAE,QAAAkB,KAAEhB,KAAE,KAAGD,KAAE,KAAG,OAAK;AAAE,QAAAC,KAAEA,KAAE,KAAGD,KAAE,KAAG,OAAK;AAAE,QAAAA,KAAEiB;AAAE,YAAE,IAAE,IAAE,KAAG;AAAE,YAAE,IAAE;AAAE,YAAE,IAAE,IAAE,KAAG;AAAE,YAAE,IAAE;AAAE,QAAAnB,KAAEA,KAAEE,KAAE,KAAG;AAAE,QAAAA,KAAEF,KAAEE;AAAE,QAAAD,KAAEA,KAAEE,KAAE,KAAG;AAAE,QAAAA,KAAEF,KAAEE;AAAE,QAAAgB,KAAE,IAAE,KAAG,IAAE,KAAG,QAAM;AAAG,YAAE,IAAE,KAAG,IAAE,KAAG,QAAM;AAAG,YAAEA;AAAE,QAAAA,KAAE,IAAE,KAAG,IAAEvB,KAAE,QAAM;AAAG,YAAE,IAAEA,KAAE,IAAE,KAAG,QAAM;AAAG,YAAEuB;AAAE,UAAE,CAAC,IAAEnB,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEA,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEC,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEA,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEE,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEA,KAAE;AAAE,UAAE,IAAE,CAAC,IAAED,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEA,KAAE;AAAA,MAAC;AAAC,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAE,EAAE,CAAC;AAAE,YAAE,EAAE,IAAE,CAAC;AAAE,QAAAS,KAAE,EAAE,IAAE,EAAE;AAAE,YAAE,EAAE,IAAE,EAAE;AAAE,YAAE,EAAE,IAAE,EAAE;AAAE,YAAE,EAAE,IAAE,EAAE;AAAE,YAAE,EAAE,IAAE,EAAE;AAAE,QAAAO,KAAE,EAAE,IAAE,EAAE;AAAE,aAAI,IAAEP,KAAE,IAAE,IAAE,IAAE,IAAEO,QAAK,GAAE;AAAC,UAAAC,KAAE,IAAE,IAAE,QAAM;AAAG,cAAGA,KAAE,OAAM;AAAC,YAAAA,KAAE;AAAA,UAAC,WAASA,MAAG,MAAK;AAAC,YAAAA,KAAE;AAAA,UAAG,OAAK;AAAC,YAAAA,KAAEA,KAAE,QAAM;AAAA,UAAC;AAAC,UAAApB,GAAE,IAAE,CAAC,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,CAAC,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE;AAAA,QAAQ;AAAC,QAAAnB,KAAE,IAAE,IAAE,QAAM;AAAG,QAAAC,KAAE,IAAE,IAAE,QAAM;AAAG,QAAAE,KAAEQ;AAAE,QAAAT,KAAE;AAAE,YAAE,MAAI,IAAEgB,MAAG,QAAM;AAAG,YAAE,MAAI,IAAEA,MAAG,QAAM;AAAG,YAAE;AAAE,YAAE;AAAE,QAAAlB,MAAGA,KAAEC,KAAE,KAAG,KAAG;AAAK,QAAAA,KAAED,KAAEC;AAAE,QAAAkB,KAAEhB,KAAE,KAAGD,KAAE,KAAG,QAAM;AAAG,QAAAC,KAAEA,KAAE,KAAGD,KAAE,KAAG,QAAM;AAAG,QAAAA,KAAEiB;AAAE,YAAE,IAAE,IAAE,KAAG;AAAE,YAAE,IAAE;AAAE,YAAE,IAAE,IAAE,KAAG;AAAE,YAAE,IAAE;AAAE,QAAAnB,KAAEA,KAAEE,KAAE,KAAG;AAAE,QAAAA,KAAEF,KAAEE;AAAE,QAAAD,KAAEA,KAAEE,KAAE,KAAG;AAAE,QAAAA,KAAEF,KAAEE;AAAE,QAAAgB,KAAE,IAAE,KAAG,IAAE,KAAG,QAAM;AAAG,YAAE,IAAE,KAAG,IAAE,KAAG,QAAM;AAAG,YAAEA;AAC92B,QAAAA,KAAE,IAAE,KAAG,IAAEvB,KAAE,QAAM;AAAG,YAAE,IAAEA,KAAE,IAAE,KAAG,QAAM;AAAG,YAAEuB;AAAE,YAAEnB,KAAE;AAAE,QAAAkB,KAAElB,KAAE;AAAE,YAAEC,KAAE;AAAE,YAAEA,KAAE;AAAE,QAAAU,KAAER,KAAE;AAAE,YAAEA,KAAE;AAAE,YAAED,KAAE;AAAE,YAAEA,KAAE;AAAE,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAGS,KAAE,IAAG;AAAC,UAAAA,KAAE;AAAA,QAAC,WAASA,MAAG,MAAK;AAAC,UAAAA,KAAE;AAAA,QAAG,OAAK;AAAC,UAAAA,OAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAGO,KAAE,IAAG;AAAC,UAAAA,KAAE;AAAA,QAAC,WAASA,MAAG,MAAK;AAAC,UAAAA,KAAE;AAAA,QAAG,OAAK;AAAC,UAAAA,OAAI;AAAA,QAAC;AAAC,QAAAnB,GAAE,IAAE,CAAC,IAAE;AAC3d,QAAAA,GAAE,IAAE,IAAE,CAAC,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAEY;AAAE,QAAAZ,GAAE,IAAE,IAAE,EAAE,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAEmB;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,GAAGpB,IAAE,GAAE;AAAC,UAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAEC,KAAE,IAAI,WAAW,EAAE;AAAE,eAAQC,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,iBAAQC,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,cAAIE,KAAE,GAAG,GAAEH,IAAEC,EAAC;AAAE,aAAG,GAAEE,IAAEJ,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,EAAE;AAAA,IAAC;AAAC,aAAS,GAAGD,IAAE,GAAE,GAAE;AAAC,UAAG,KAAG,KAAK,KAAE;AAAE,UAAI,IAAEA,GAAE,SAAO,GAAEC,KAAE,IAAE,IAAE,IAAE;AAAE,UAAG,KAAG,GAAE;AAAC,eAAO;AAAA,MAAI;AAAC,UAAIC,KAAEc,GAAEhB,IAAE,CAAC;AAAE,UAAGE,MAAG,SAAOA,MAAG,OAAM;AAAC,eAAM,EAAC,GAAE,MAAK,GAAEA,IAAE,QAAO,EAAC;AAAA,MAAC;AAAC,UAAIC,KAAEa,GAAEhB,IAAEC,EAAC;AAAE,aAAM,EAAEE,MAAG,SAAOA,MAAG,QAAO;AAAC,YAAG,EAAEF,MAAG,GAAE;AAAC,iBAAO;AAAA,QAAI;AAAC,QAAAE,KAAEa,GAAEhB,IAAEC,EAAC;AAAA,MAAC;AAAC,aAAM,EAAC,GAAEC,GAAE,SAAS,EAAE,GAAE,GAAEC,IAAE,QAAOF,GAAC;AAAA,IAAC;AAAC,IAAAF,IAAG,YAAU,EAAC,MAAMC,IAAE,GAAE;AAAC,UAAG,KAAG,KAAK,KAAE,CAAC;AACngB,UAAI,IAAE,EAAE,GAAEE,KAAE,GAAEC,KAAE,MAAKE,KAAE,MAAKD,IAAE,GAAE,IAAE;AAAE,eAAS,IAAG;AAAC,YAAI,IAAEY,GAAEhB,IAAEE,EAAC;AAAE,QAAAA,MAAG;AAAE,YAAIqB,KAAErB,KAAE,IAAE,GAAEsB,KAAE,GAAGxB,IAAEuB,IAAErB,EAAC;AAAE,YAAGsB,MAAGA,GAAE,GAAE;AAAC,UAAAD,KAAEC,GAAE;AAAA,QAAM;AAAC,YAAI,KAAGxB,GAAE,SAASE,IAAEqB,EAAC;AAAE,QAAArB,MAAG,GAAG;AAAO,eAAO;AAAA,MAAE;AAAC,eAASD,GAAEG,IAAE;AAAC,YAAI,IAAE,KAAK,KAAKA,GAAE,IAAE,IAAEA,GAAE,CAAC,GAAEmB,KAAE,KAAK,KAAKnB,GAAE,IAAE,IAAEA,GAAE,CAAC;AAAE,iBAAQS,KAAE,GAAEA,KAAET,GAAE,EAAE,QAAOS,MAAI;AAAC,UAAAF,KAAEP,GAAE,EAAES,EAAC;AAAE,cAAI,KAAG,KAAK,KAAK,KAAK,KAAKT,GAAE,IAAE,CAAC,IAAEO,GAAE,IAAEP,GAAE,CAAC,GAAE,KAAG,KAAK,KAAK,KAAK,KAAKA,GAAE,IAAE,CAAC,IAAEO,GAAE,IAAEP,GAAE,CAAC,GAAE,KAAG,IAAEO,GAAE,GAAE,KAAGY,KAAEZ,GAAE,GAAE,KAAG,KAAG,MAAI,KAAG;AAAG,UAAAA,GAAE,IAAE,IAAI,WAAW,EAAE;AAAE,UAAAA,GAAE,IAAE;AAAG,UAAAA,GAAE,IAAE;AAAA,QAAE;AAAC,QAAAP,GAAE,IAAE;AAAE,QAAAA,GAAE,IAAEmB;AAAA,MAAC;AAAC,UAAI,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAEP,GAAEhB,IAAEE,EAAC;AAAE,MAAAA,MAAG;AAAE,UAAG,MAAI,OAAM;AAAC,cAAM,IAAI,EAAE,eAAe;AAAA,MAAC;AAAC,UAAEc,GAAEhB,IAAEE,EAAC;AAC9f,MAAAA,MAAG;AAAE,iBAAW,QAAM,MAAI,OAAM;AAAC,YAAIW,IAAE,GAAE;AAAE,gBAAO,GAAE;AAAA,UAAC,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAM,gBAAI,IAAE,EAAE;AAAE,gBAAG,MAAI,OAAM;AAAC,kBAAG,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,GAAE;AAAC,gBAAAV,KAAE,EAAC,SAAQ,EAAC,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,EAAC,GAAE,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAE,GAAE,EAAE,EAAE,KAAG,IAAE,EAAE,EAAE,GAAE,GAAE,EAAE,EAAE,GAAE,GAAE,EAAE,EAAE,GAAE,GAAE,EAAE,SAAS,IAAG,KAAG,IAAE,EAAE,EAAE,IAAE,EAAE,EAAE,CAAC,EAAC;AAAA,cAAC;AAAA,YAAC;AAAC,gBAAG,MAAI,OAAM;AAAC,kBAAG,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,OAAK,EAAE,CAAC,MAAI,OAAK,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,KAAI;AAAC,gBAAAE,KAAE,EAAC,SAAQ,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,KAAG,IAAE,EAAE,EAAE,GAAE,GAAE,EAAE,EAAE,EAAC;AAAA,cAAC;AAAA,YAAC;AAAC;AAAA,UACnkB,KAAK;AAAM,gBAAI,IAAEW,GAAEhB,IAAEE,EAAC,GAAEmB;AAAE,YAAAnB,MAAG;AAAE,gBAAIkB,KAAE,IAAElB,KAAE;AAAE,mBAAMA,KAAEkB,IAAE;AAAC,kBAAI,IAAEpB,GAAEE,IAAG,GAAE,IAAE,IAAI,YAAY,EAAE;AAAE,kBAAG,KAAG,MAAI,GAAE;AAAC,qBAAI,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,kBAAAmB,KAAExB,GAAE,CAAC;AAAE,oBAAEwB,EAAC,IAAErB,GAAEE,IAAG;AAAA,gBAAC;AAAA,cAAC,WAAS,KAAG,MAAI,GAAE;AAAC,qBAAI,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,kBAAAmB,KAAExB,GAAE,CAAC;AAAE,oBAAEwB,EAAC,IAAEL,GAAEhB,IAAEE,EAAC;AAAE,kBAAAA,MAAG;AAAA,gBAAC;AAAA,cAAC,OAAK;AAAC,sBAAM,IAAI,EAAE,0BAA0B;AAAA,cAAC;AAAC,gBAAE,IAAE,EAAE,IAAE;AAAA,YAAC;AAAC;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAM,gBAAGE,IAAE;AAAC,oBAAM,IAAI,EAAE,mCAAmC;AAAA,YAAC;AAAC,YAAAF,MAAG;AAAE,YAAAE,KAAE,CAAC;AAAE,YAAAA,GAAE,IAAE,MAAI;AAAM,YAAAA,GAAE,IAAE,MAAI;AAAM,YAAAA,GAAE,YAAUJ,GAAEE,IAAG;AAAE,gBAAI,IAAEc,GAAEhB,IAAEE,EAAC,GAAE,IAAGI,KAAE,GAAE,IAAE;AAAE,YAAAJ,MAAG;AAAE,YAAAE,GAAE,IAAE,KAAG;AAAE,YAAAA,GAAE,IAAEY,GAAEhB,IAAEE,EAAC;AAAE,YAAAA,MAAG;AAAE,YAAAE,GAAE,IAAE,CAAC;AAAE,YAAAA,GAAE,IAAE,CAAC;AAAE,gBAAI,KAAGJ,GAAEE,IAAG;AAAE,iBAAIW,KAAE,GAAEA,KAAE,IAAGA,MAAI;AAAC,mBAAGb,GAAEE,EAAC;AAAE,kBAAI,IAAEF,GAAEE,KAAE,CAAC,KAAG,GAAEoB,KAAEtB,GAAEE,KAAE,CAAC,IAAE;AAAG,kBAAGI,KAAE,GAAE;AAAC,gBAAAA,KAAE;AAAA,cAAC;AAAC,kBAAG,IAAEgB,IAAE;AAAC,oBAAEA;AAAA,cAAC;AAAC,kBAAIf,KAAEP,GAAEE,KAAE,CAAC;AAAE,kBAAEE,GAAE,EAAE,KAAK,EAAC,GAAE,GAAE,GAAEkB,IAAE,GAAEf,IAAE,GAAE,KAAI,CAAC;AAAE,cAAAH,GAAE,EAAE,EAAE,IAAE,IAAE;AAAE,cAAAF,MAAG;AAAA,YAAC;AAAC,YAAAE,GAAE,IAAEE;AAAE,YAAAF,GAAE,IAAE;AAAE,YAAAH,GAAEG,EAAC;AAAE;AAAA,UAAM,KAAK;AAAM,gBAAI,IAAEY,GAAEhB,IAAEE,EAAC;AAAE,YAAAA,MAAG;AACxqB,iBAAIW,KAAE,GAAEA,KAAE,KAAG;AAAC,kBAAI,IAAEb,GAAEE,IAAG,GAAE,IAAE,IAAI,WAAW,EAAE,GAAE,IAAE;AAAE,mBAAI,IAAE,GAAE,IAAE,IAAG,KAAIA,MAAI;AAAC,qBAAG,EAAE,CAAC,IAAEF,GAAEE,EAAC;AAAA,cAAC;AAAC,kBAAI,IAAE,IAAI,WAAW,CAAC;AAAE,mBAAI,IAAE,GAAE,IAAE,GAAE,KAAIA,MAAI;AAAC,kBAAE,CAAC,IAAEF,GAAEE,EAAC;AAAA,cAAC;AAAC,cAAAW,MAAG,KAAG;AAAE,eAAC,KAAG,MAAI,IAAE,IAAE,GAAG,IAAE,EAAE,IAAE,GAAG,GAAE,CAAC;AAAA,YAAC;AAAC;AAAA,UAAM,KAAK;AAAM,YAAAX,MAAG;AAAE,gBAAEc,GAAEhB,IAAEE,EAAC;AAAE,YAAAA,MAAG;AAAE;AAAA,UAAM,KAAK;AAAM,gBAAIM,KAAE,EAAE,MAAI,KAAG,CAAC,GAAEG;AAAE,YAAAT,MAAG;AAAE,gBAAIO,KAAET,GAAEE,IAAG,GAAEQ,KAAE,CAAC;AAAE,iBAAIG,KAAE,GAAEA,KAAEJ,IAAEI,MAAI;AAAC,kBAAID,KAAEZ,GAAEE,IAAG,GAAE,IAAEE,GAAE,EAAEQ,EAAC;AAAE,cAAAD,KAAEP,GAAE,EAAE,CAAC;AAAE,cAAAO,GAAE,QAAMC;AAAE,kBAAI,KAAGZ,GAAEE,IAAG;AAAE,cAAAS,GAAE,IAAE,EAAE,MAAI,CAAC;AAAE,cAAAA,GAAE,IAAE,EAAE,KAAG,EAAE;AAAE,cAAAD,GAAE,KAAKC,EAAC;AAAA,YAAC;AAAC,gBAAIG,KAAEd,GAAEE,IAAG,GAAEa,KAAEf,GAAEE,IAAG,GAAE,IAAEF,GAAEE,IAAG;AAAE,gBAAG;AAAC,kBAAI,IAAE,GAAGF,IAAEE,IAAEE,IAAEM,IAAE,GAAEI,IAAEC,IAAE,KAAG,GAAE,IAAE,IAAGP,EAAC;AAAE,cAAAN,MAAG;AAAA,YAAC,SAAO,IAAG;AAAC,kBAAG,cAAc,gBAAe;AAAC,uBAAO,KAAK,MAAMF,IAAE,EAAC,GAAE,GAAG,EAAC,CAAC;AAAA,cAAC,WAAS,cAAc,gBAAe;AAAC,sBAAM;AAAA,cAAU;AAAC,oBAAM;AAAA,YAAE;AAAC;AAAA,UAAM,KAAK;AAAM,YAAAE,MAAG;AAAE;AAAA,UAAM,KAAK;AAAM,gBAAGF,GAAEE,EAAC,MAAI,KAAI;AAAC,cAAAA;AAAA,YAAG;AAAC;AAAA,UAAM;AAAQ,gBAAI,IAAE,GAAGF,IAAEE,KAAE,GAAEA,KAAE,CAAC;AAAE,gBAAG,KAAG,EAAE,GAAE;AAAC,cAAAA,KAAE,EAAE;AAAO;AAAA,YAAK;AAAC,gBAAGA,MAAGF,GAAE,SAAO,GAAE;AAAC,oBAAM;AAAA,YAAU;AAAC,kBAAM,IAAI,EAAE,uCAAqC,EAAE,SAAS,EAAE,CAAC;AAAA,QAAC;AAAC,YAAEgB,GAAEhB,IAAEE,EAAC;AAAE,QAAAA,MAAG;AAAA,MAAC;AAAC,WAAK,QAAME,GAAE;AAAE,WAAK,SAAOA,GAAE;AAAE,WAAK,IAAED;AAAE,WAAK,IAAEE;AAAE,WAAK,IAAE,CAAC;AAAE,WAAIQ,KAAE,GAAEA,KAAET,GAAE,EAAE,QAAOS,MAAI;AAAC,QAAAF,KAAEP,GAAE,EAAES,EAAC;AAC15B,YAAIM,KAAE,EAAER,GAAE,CAAC;AAAE,YAAGQ,IAAE;AAAC,UAAAR,GAAE,IAAEQ;AAAA,QAAC;AAAC,aAAK,EAAE,KAAK,EAAC,OAAMR,GAAE,OAAM,GAAE,GAAGP,IAAEO,EAAC,GAAE,GAAEA,GAAE,IAAEP,GAAE,GAAE,GAAEO,GAAE,IAAEP,GAAE,GAAE,GAAEO,GAAE,GAAE,GAAEA,GAAE,EAAC,CAAC;AAAA,MAAC;AAAC,WAAK,IAAE,KAAK,EAAE;AAAO,aAAO;AAAA,IAAS,GAAE,EAAEX,IAAE,GAAE,GAAE;AAAC,UAAG,KAAG,KAAK,KAAE;AAAG,UAAI,IAAE,KAAK,QAAMA,IAAEC,KAAE,KAAK,SAAO,GAAEC,IAAEC,IAAEE,IAAED,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAES,KAAE,GAAE,GAAE,IAAE,KAAK,EAAE,QAAO,IAAEb,KAAE,IAAE,GAAE,IAAE,IAAI,kBAAkB,CAAC,GAAEoB,KAAE,IAAI,YAAYpB,EAAC,GAAEqB,KAAE,YAAW;AAAE,WAAI,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAAnB,KAAE,KAAK,EAAE,CAAC;AAAE,QAAAC,KAAED,GAAE,IAAE;AAAE,QAAAG,KAAEH,GAAE,IAAED;AAAE,QAAAY,KAAE;AAAE,YAAEX,GAAE;AAAE,QAAAE,KAAEF,GAAE,IAAE,KAAG;AAAE,YAAGC,OAAI,GAAE;AAAC,eAAI,IAAE,GAAE,IAAEH,IAAE,KAAI;AAAC,gBAAE,IAAE,IAAEG;AAAE,YAAAiB,GAAE,CAAC,KAAG,IAAEC,OAAI,IAAE,IAAE;AAAA,UAAC;AAAC,cAAElB;AAAA,QAAC;AAAC,aAAI,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAE,IAAE,IAAEE;AAAE,cAAED,MAAG,IAAEiB,OAAI,IAAE,MAAI;AAAE,eAAI,IAAE,GAAE,IAAErB,IAAE,KAAI;AAAC,cAAEa,EAAC,IAAE,EAAE,IAAEO,GAAE,CAAC,CAAC;AAAE,YAAAP,MAAG;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,IAAE,KAAK;AAAE,UAAG,CAAC,KAAG,MAAI,KAAG,CAAC,GAAE;AAAC,YAAE,IAAI,WAAW,CAAC,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,GAAG,CAAC;AAAA,MAAC;AAAC,UAAG,GAAE;AAAC,aAAI,IAAE,GAAE,IAAE,KAAG;AAAC,eAAI,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,KAAI,KAAI,KAAG,GAAE;AAAC,cAAE,CAAC,KAAG,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,KAAG,EAAE,IAAE,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC,GAAE,IAAI,IAAG;AAAC,UAAG,KAAK,GAAE;AAAC,eAAM,CAAC,CAAC,KAAK,EAAE;AAAA,MAAC;AAAC,UAAG,KAAK,MAAI,GAAE;AAAC,YAAG,KAAK,MAAI,GAAE;AAAC,iBAAM;AAAA,QAAE,WAAS,KAAK,EAAE,CAAC,EAAE,UAAQ,MAAI,KAAK,EAAE,CAAC,EAAE,UAAQ,MAAI,KAAK,EAAE,CAAC,EAAE,UAAQ,IAAG;AAAC,iBAAM;AAAA,QAAE;AAAC,eAAM;AAAA,MAAE;AAAC,UAAG,KAAK,MAAI,GAAE;AAAC,eAAM;AAAA,MAAE;AAAC,aAAM;AAAA,IAAE,GAAE,GAAE,SAAS,GAAGb,IAAE;AAAC,UAAI,GAAE,GAAE;AACp5B,eAAQC,KAAE,GAAEC,KAAEF,GAAE,QAAOC,KAAEC,IAAED,MAAG,GAAE;AAAC,YAAED,GAAEC,EAAC;AAAE,YAAED,GAAEC,KAAE,CAAC;AAAE,YAAED,GAAEC,KAAE,CAAC;AAAE,QAAAD,GAAEC,EAAC,IAAE,IAAE,UAAQ,QAAM;AAAE,QAAAD,GAAEC,KAAE,CAAC,IAAE,IAAE,UAAQ,QAAK,IAAE,QAAK;AAAE,QAAAD,GAAEC,KAAE,CAAC,IAAE,IAAE,UAAQ,QAAM;AAAA,MAAC;AAAC,aAAOD;AAAA,IAAC,GAAE,GAAE,SAAS,GAAGA,IAAE;AAAC,UAAI,GAAE,GAAE,GAAEC,IAAEC,KAAE;AAAE,eAAQC,KAAE,GAAEE,KAAEL,GAAE,QAAOG,KAAEE,IAAEF,MAAG,GAAE;AAAC,YAAEH,GAAEG,EAAC;AAAE,YAAEH,GAAEG,KAAE,CAAC;AAAE,YAAEH,GAAEG,KAAE,CAAC;AAAE,QAAAF,KAAED,GAAEG,KAAE,CAAC;AAAE,QAAAH,GAAEE,IAAG,IAAE,mBAAiB,KAAG,uBAAqB,IAAE,sBAAoB,IAAE,qBAAmB,IAAE,qBAAmBD,KAAE,qBAAkB,KAAG,uBAAqB,IAAE,sBAAoB,IAAE,sBAAmBA,KAAE,oBAAkB,KAAG,sBAAoB,IAAE,sBAAmBA,KAAE,oBAAiBA,MAAG,uBAAqBA,KAAE;AAC3iB,QAAAD,GAAEE,IAAG,IAAE,mBAAiB,KAAG,sBAAoB,IAAE,sBAAoB,IAAE,sBAAoB,IAAE,sBAAoBD,KAAE,qBAAkB,KAAG,uBAAqB,IAAE,sBAAmB,IAAE,sBAAoBA,KAAE,qBAAkB,KAAG,sBAAmB,IAAE,sBAAmBA,KAAE,oBAAiBA,MAAG,uBAAqBA,KAAE;AAAkB,QAAAD,GAAEE,IAAG,IAAE,mBAAiB,KAAG,uBAAqB,IAAE,sBAAoB,IAAE,qBAAkB,IAAE,sBAAmBD,KAAE,qBAAkB,KAAG,uBAAqB,IAAE,sBAAoB,IAAE,sBAAoBA,KAAE,qBAAkB,KAAG,sBAAmB,IAAE,sBAAmBA,KAAE,qBAAkBA,MAAG,uBAAqBA,KAAE;AAAA,MAAgB;AAAC,aAAOD,GAAE,SAAS,GAAEE,EAAC;AAAA,IAAC,GAAE,GAAE,SAAS,GAAGF,IAAE;AAAC,UAAI,GAAE,GAAE;AAC5rB,eAAQC,KAAE,GAAEC,KAAEF,GAAE,QAAOC,KAAEC,IAAED,MAAG,GAAE;AAAC,YAAED,GAAEC,EAAC;AAAE,YAAED,GAAEC,KAAE,CAAC;AAAE,YAAED,GAAEC,KAAE,CAAC;AAAE,QAAAD,GAAEC,EAAC,IAAE,UAAQ,IAAE,QAAM;AAAE,QAAAD,GAAEC,KAAE,CAAC,IAAE,UAAQ,IAAE,QAAK,IAAE,QAAK;AAAE,QAAAD,GAAEC,KAAE,CAAC,IAAE,UAAQ,IAAE,QAAM;AAAA,MAAC;AAAC,aAAOD;AAAA,IAAC,GAAE,GAAE,SAAS,GAAGA,IAAE;AAAC,UAAI,GAAE,GAAE,GAAEC,IAAEC,KAAE;AAAE,eAAQC,KAAE,GAAEE,KAAEL,GAAE,QAAOG,KAAEE,IAAEF,MAAG,GAAE;AAAC,YAAEH,GAAEG,EAAC;AAAE,YAAEH,GAAEG,KAAE,CAAC;AAAE,YAAEH,GAAEG,KAAE,CAAC;AAAE,QAAAF,KAAED,GAAEG,KAAE,CAAC;AAAE,QAAAH,GAAEE,IAAG,IAAE,MAAI,KAAG,wBAAsB,IAAE,uBAAqB,IAAE,uBAAqB,IAAE,uBAAoBD,KAAE,sBAAoB,KAAG,wBAAsB,IAAE,uBAAqB,IAAE,uBAAqBA,KAAE,uBAAoB,KAAG,wBAAsB,IAAE,uBAAqBA,KAAE,sBAAmBA,MAAG,uBAAqBA,KAAE;AACjjB,QAAAD,GAAEE,IAAG,IAAE,MAAI,KAAG,wBAAsB,IAAE,sBAAoB,IAAE,wBAAsB,IAAE,uBAAqBD,KAAE,sBAAmB,KAAG,yBAAuB,IAAE,uBAAqB,IAAE,wBAAqBA,KAAE,sBAAmB,KAAG,uBAAqB,IAAE,wBAAsBA,KAAE,uBAAoBA,MAAG,uBAAqBA,KAAE;AAAmB,QAAAD,GAAEE,IAAG,IAAE,MAAI,KAAG,wBAAsB,IAAE,wBAAsB,IAAE,uBAAqB,IAAE,wBAAsBD,KAAE,uBAAoB,KAAG,wBAAsB,IAAE,uBAAqB,IAAE,uBAAqBA,KAAE,uBAAoB,KAAG,uBAAqB,IAAE,wBAAqBA,KAAE,sBAAmBA,MAAG,uBAAqBA,KAAE;AAAA,MAAkB;AAAC,aAAOD,GAAE,SAAS,GAAEE,EAAC;AAAA,IAAC,GAAE,SAAQ,SAASF,IAAE;AAAC,UAAI,IAAEA,GAAE,OAAM,IAAEA,GAAE,QAAO,IAAEA,GAAE,UAASC,KAAED,GAAE;AACnvB,UAAG,KAAK,IAAE,GAAE;AAAC,cAAM,IAAI,EAAE,wBAAwB;AAAA,MAAC;AAAC,UAAIE,KAAE,KAAK,EAAE,GAAE,GAAED,EAAC;AAAE,UAAG,KAAK,MAAI,KAAG,GAAE;AAAC,YAAIE,KAAED,GAAE,QAAOG,KAAE,IAAI,kBAAkBF,KAAE,CAAC,GAAEC,KAAE;AAAE,iBAAQ,IAAE,GAAE,IAAED,IAAE,KAAI;AAAC,cAAI,IAAED,GAAE,CAAC;AAAE,UAAAG,GAAED,IAAG,IAAE;AAAE,UAAAC,GAAED,IAAG,IAAE;AAAE,UAAAC,GAAED,IAAG,IAAE;AAAA,QAAC;AAAC,eAAOC;AAAA,MAAC,WAAS,KAAK,MAAI,KAAG,KAAK,GAAE;AAAC,eAAO,KAAK,EAAEH,EAAC;AAAA,MAAC,WAAS,KAAK,MAAI,GAAE;AAAC,YAAG,KAAK,GAAE;AAAC,cAAG,GAAE;AAAC,mBAAO,KAAK,EAAEA,EAAC;AAAA,UAAC;AAAC,iBAAO,KAAK,EAAEA,EAAC;AAAA,QAAC,WAAS,GAAE;AAAC,iBAAO,KAAK,EAAEA,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAOA;AAAA,IAAC,EAAC;AAAE,WAAOH;AAAA,EAAE,EAAE;AAAE,WAAS,GAAGF,IAAEC,IAAE;AAAC,WAAOD,GAAEC,EAAC,KAAG,MAAI;AAAA,EAAE;AAAC,WAASkB,GAAEnB,IAAEC,IAAE;AAAC,WAAOD,GAAEC,EAAC,KAAG,IAAED,GAAEC,KAAE,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,YAAOD,GAAEC,EAAC,KAAG,KAAGD,GAAEC,KAAE,CAAC,KAAG,KAAGD,GAAEC,KAAE,CAAC,KAAG,IAAED,GAAEC,KAAE,CAAC,OAAK;AAAA,EAAC;AAAC,EAAAH,MAAK,cAAY;AAAE,GAAE;AAKxhBA,MAAK,cAAc,SAAS,MAAM,GAAG,GAAG,UACxC;AACC,MAAI,MAAM;AAAA,IAAE,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,GAAI;AAAA;AAAA,IACvF,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA;AAAA,IAAiC,QAAO,CAAC,IAAE,IAAE,CAAC;AAAA;AAAA,IACnE,QAAO,CAAC,CAAC,IAAG,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC,IAAG,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAQ,CAAC,oBAAoB;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,EACrI;AACD,MAAI,SAAU,UAAS,KAAK,SAAU,KAAI,CAAC,IAAI,SAAS,CAAC;AAEzD,MAAI,OAAO,IAAI,WAAWA,MAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5C,MAAI,MAAM,IAAI,WAAW,IAAI;AAC7B,MAAI8B,QAAO,IAAI,WAAW,MAAK,IAAE,IAAE,CAAC;AACpC,WAAQ,IAAE,GAAG,IAAE,KAAK,QAAQ,IAAK,CAAAA,MAAK,CAAC,IAAI,KAAK,CAAC;AACjD,WAAQ,IAAE,GAAG,IAAE,IAAK,QAAQ,IAAK,CAAAA,MAAK,MAAK,CAAC,IAAI,IAAI,CAAC;AACrD,SAAOA,MAAK;AACb;AAEA9B,MAAK,SAAS,SAAS,MACvB;AACC,MAAI,KAAK;AACT,MAAI8B,QAAO,IAAI,WAAW,GAAK,GAAG,SAAS,GAAG,MAAM,KAAK9B,MAAK,SAASA,MAAK;AAC5E,EAAA8B,MAAK,CAAC,IAAEA,MAAK,CAAC,IAAE,KAAG,KAAG;AAAK,MAAI,YAAYA,OAAK,GAAE,EAAE;AAEpD,MAAI,OAAO;AACX,MAAI,UAAUA,OAAM,QAAQ,IAAI;AAAI,YAAQ;AAC5C,WAAQ,IAAE,GAAG,IAAE,KAAK,QAAQ,KAC5B;AACC,QAAI,QAAQ9B,MAAK,UAAU,KAAKA,MAAK,OAAO,OAAO8B,OAAM,MAAM,KAAK,CAAC,CAAC;AACtE,WAAO,MAAM,CAAC;AACd,QAAG,IAAE,KAAK,SAAO,GAAG;AACnB,WAAI,OAAK,MAAI,EAAG,SAAO,KAAG,OAAK;AAC/B,UAAI,UAAUA,OAAM,MAAM,CAAC,GAAG,IAAI;AAAA,IACnC;AAAA,EACD;AACA,SAAOA,MAAK,MAAM,GAAG,IAAI,EAAE;AAC5B;AAEA9B,MAAK,SAAS,SAAS,MAAM,KAC7B;AACC,MAAG,OAAK,KAAM,OAAM,EAAC,SAAQ,MAAM,OAAM,MAAK;AAC9C,MAAI8B,QAAO,IAAI,WAAW,IAAI,GAAG,SAAS;AAE1C,MAAI,KAAK9B,MAAK,OAAO,UAAU8B,OAAM,QAAQ,CAAC;AAAI,YAAQ;AAC1D,MAAI,MAAM,MAAI,OAAO9B,MAAK,SAASA,MAAK;AACxC,MAAI,MAAM,IAAI,WAAW8B,OAAM,MAAM;AAAI,YAAQ;AAEjD,MAAI,OAAO,IAAI,SAASA,OAAM,MAAM;AAAI,YAAQ;AAChD,MAAI,OAAO,CAAC;AACZ,SAAM,MAAM;AACX,QAAI,MAAM,IAAI,WAAWA,OAAK,IAAI,GAAG,MAAM,IAAI,WAAWA,OAAK,OAAK,CAAC;AAAI,QAAG,OAAK;AAAG,UAAG,MAAI,KAAK,KAAG,KAAK;AAAG,YAAI,eAAe;AAAI;AAAA,MAAO;AAAA;AAAC;AAC1I,IAAA9B,MAAK,SAAS,KAAK8B,OAAM,MAAM,MAAM,GAAG,GAAG;AAE3C,WAAO,IAAI,SAASA,OAAM,OAAK,IAAE,MAAI,EAAE;AACvC,QAAG,QAAM,EAAG;AAAA,EACb;AACA,SAAO;AACR;AAEA9B,MAAK,cAAc,SAAS,MAAM,KAAK,MACvC;AACC,MAAG,IAAI,KAAM;AACb,MAAI8B,QAAO,IAAI,WAAW,IAAI;AAC9B,MAAI,KAAK9B,MAAK,OAAO,UAAU8B,OAAM,GAAG,CAAC;AAEzC,MAAG,IAAI,MAAM,KAAG,KAAM;AACtB,MAAI,OAAO,MAAI;AACf,MAAI,QAAS,IAAI,MAAM,EAAE,CAAC;AAC1B,MAAI,SAAS,IAAI,MAAM,EAAE,CAAC;AAE1B,MAAI,OAAO,IAAI,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI;AAC1C,MAAI,KAAO,IAAI,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI;AAC1C,MAAG,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG,EAAG,KAAI,2CAA2C;AACpF,MAAG,QAAM,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,SAAO,EAAI,KAAI,MAAM,IAAE,IAAI,MAAM,EAAE,MAAM,GAAE,CAAC;AAErF,MAAI,MAAM,IAAI,MAAM,IAAE,IAAI,MAAM,EAAE,CAAC,IAAE;AACrC,MAAI,MAAM,IAAI,MAAM,IAAE,IAAI,MAAM,EAAE,CAAC,IAAE;AACrC,MAAI,OAAO,MAAI;AAOf,MAAG,QAAM,KAAK,IAAI,MAAM,KAAG,QAAQ,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG,OAAQ;AACzE,WAAO,KAAK,MAAO,IAAI,MAAM,EAAE,CAAC,IAAE,KAAI,IAAI,QAAM,IAAI,MAAM,EAAE,CAAC,EAAE;AAAA,EAChE;AACA,MAAG,IAAI,QAAQ,KAAK,IAAI,QAAQ,EAAE,CAAC,KAAG,EAAG,QAAO,IAAI,MAAM,EAAE,CAAC,IAAE;AAC/D,MAAI,OAAO,KAAK,KAAK,IAAI,QAAM,OAAK,CAAC,IAAE;AACvC,MAAI,OAAO,IAAI,MAAM;AAAI,MAAG,QAAM,QAAQ,IAAI,MAAM,EAAG,QAAO,IAAI,MAAM;AACxE,MAAI,OAAO,IAAI,MAAM;AAAI,MAAG,QAAM,KAAK,KAAK,UAAQ,EAAG,QAAO,CAAC,IAAI,UAAQ,SAAO,EAAE;AAAI,MAAG,QAAM,QAAQ,IAAI,MAAM,EAAG,QAAO,IAAI,MAAM;AAEvI,MAAI,QAAQ,IAAI,WAAW,IAAI,UAAQ,SAAO,EAAE,GAAG,QAAQ;AAE3D,MAAG,IAAI,MAAM,KAAG,MAChB;AACC,QAAI,KAAK,IAAI,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;AAC3C,QAAI,KAAK,KAAK,OAAO,IAAI,QAAS,KAAK,KAAK,EAAE;AAC9C,QAAI,KAAK,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE;AAC9C,QAAI,QAAQ,IAAI,WAAW,KAAK,KAAK,KAAG,KAAG,OAAK,CAAC,IAAE,CAAC;AACpD,YAAQ,IAAI,QAAQ,IAAG,EAAE;AACzB,aAAQH,KAAE,GAAGA,KAAE,IAAIA;AAClB,eAAQd,KAAE,GAAGA,KAAE,IAAIA,MACnB;AACC,YAAI,IAAIc,KAAE,KAAGd;AAAI,cAAM,KAAK,CAAC;AAC7B,QAAAb,MAAK,OAAO,YAAY,KAAI,MAAM8B,OAAM,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,OAAO,GAAG,IAAG,IAAG,EAAE;AAElF,YAAI,QAAM,EAAG,SAAQ;AAAA,YAChB,CAAA9B,MAAK,UAAU,OAAO,KAAK,KAAK,KAAG,OAAK,CAAC,IAAE,GAAG,IAAI,OAAO,KAAK,KAAK,IAAI,QAAM,OAAK,CAAC,IAAE,GAAG,IAAI,QAAQ,KAAK,KAAKa,KAAE,KAAG,OAAK,CAAC,IAAE,GAAGc,KAAE,EAAE;AAAA,MACxI;AACD,YAAQ,MAAM,SAAO;AAAA,EACtB,OAEA;AACC,QAAG,QAAM,KAAM;AACf,QAAI,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI,IAAI;AAAU,UAAM,KAAK,IAAI,KAAK,IAAI,MAAM;AAErF,aAAQ,IAAE,GAAG,IAAE,KAAK,QAAQ,KAC5B;AACC,MAAA3B,MAAK,OAAO,YAAY,KAAI,MAAM8B,OAAM,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,OAAO,KAAK,KAAK,QAAM,CAAC,IAAE,GAAG,IAAG,IAAI,OAAM,GAAG;AAC7G,eAAS,OAAO;AAAA,IACjB;AACA,YAAQ,KAAK,IAAI,OAAO,MAAM,SAAO,CAAC;AAAA,EACvC;AACA,MAAI,OAAO,IAAI,WAAW,MAAM,QAAQ,GAAG,KAAK,KAAK,QAAM,CAAC,IAAE,CAAC;AAChE;AAEA9B,MAAK,OAAO,cAAc,SAAS,KAAI,MAAM8B,OAAM,KAAK,KAAK,MAAM,KAAK,MAAM,IAAI,GAAG,GACrF;AACC,MAAG,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG,eAAe,IAAI,KAAK,KAAK,IAAI,KAAK,EAAE,CAAC,KAAG,EAAG,QAAO;AAGxF,MAAG,OAAO;AAAA,EAAC,WACH,QAAM,EAA2C,UAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,OAAK,CAAC,IAAIA,MAAK,MAAI,CAAC;AAAA,WAClG,QAAM,EAAG,CAAA9B,MAAK,OAAO,UAAW8B,OAAM,KAAK,KAAK,KAAK,MAAM,GAAG,EAAE;AAAA,WAChE,QAAM,EAAG,CAAA9B,MAAK,OAAO,UAAW8B,OAAM,KAAK,KAAK,KAAK,MAAM,GAAG,IAAI,IAAI,MAAM,KAAI,IAAI,MAAM,EAAE,CAAC,IAAE,MAAI,IAAG,KAAK;AAAA,WAC3G,QAAM,EAAG,CAAA9B,MAAK,OAAO,UAAW8B,OAAM,KAAK,KAAK,KAAK,MAAM,GAAG,EAAE;AAAA,WAChE,QAAM,EAAG,CAAA9B,MAAK,OAAO,WAAW8B,OAAM,KAAK,KAAK,KAAK,MAAK,CAAC;AAAA,WAC3D,QAAM,EAAG,CAAA9B,MAAK,OAAO,eAAe,KAAK8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WAClE,QAAM,KAAK,QAAM,MAAO,CAAA9B,MAAK,OAAO,eAAe,KAAK8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WACjF,QAAM,KAAK,QAAM,OAAO;AAAG,QAAI,MAAM,IAAI,WAAWA,MAAK,QAAO,MAAI,GAAE,MAAI,CAAC;AAAI,QAAI,MAAM9B,MAAK,YAAY,GAAG;AAAI,QAAG,OAAK,IAAI,UAAQ,IAAI,OAAQ,KAAI,IAAI,KAAI,IAAI;AAAA,EAAI,WACrK,QAAM,EAAG,CAAAA,MAAK,OAAO,WAAW8B,OAAK,KAAI,KAAI,KAAI,MAAK,IAAI,QAAQ,CAAC;AAAA,WACnE,QAAM,MAAO,CAAA9B,MAAK,OAAO,WAAW,KAAK8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WAClE,QAAM,MAAO,CAAA9B,MAAK,OAAO,gBAAgB8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WAClE,QAAM,MAAO,CAAA9B,MAAK,OAAO,eAAgB8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WAClE,QAAM,MAAO,CAAA9B,MAAK,OAAO,iBAAiB,KAAI8B,OAAK,KAAK,KAAK,KAAK,IAAI;AAAA,WACtE,QAAM;AACb,IAAA9B,MAAK,OAAO,aAAgB,KAAI,MAAM8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WACxD,QAAM,MAAO,CAAA9B,MAAK,OAAO,gBAAgB,KAAI8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,MACzE,KAAI,uBAAuB,IAAI;AAIpC,MAAI,MAAO,IAAI,MAAM,IAAE,KAAK,IAAI,IAAG,IAAI,MAAM,EAAE,CAAC,CAAC,IAAE;AACnD,MAAI,MAAO,IAAI,MAAM,IAAE,IAAI,MAAM,EAAE,CAAC,IAAE,GAAI,MAAK,MAAI,QAAO,GAAG,MAAM,KAAK,KAAK,MAAI,MAAI,IAAE,CAAC;AAGxF,MAAG,OAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,QAAQ,KAAG;AACzC,aAAQH,KAAE,GAAGA,KAAE,GAAGA,MAAK;AAEtB,UAAI,OAAO,OAAKA,KAAE;AAClB,eAAQd,KAAE,GAAGA,KAAE,KAAKA,MAAG,GAAG;AAAG,YAAIV,KAAE,IAAI,OAAKU,EAAC;AAAI,YAAI,OAAKA,EAAC,IAAE,IAAI,OAAKA,KAAE,CAAC;AAAI,YAAI,OAAKA,KAAE,CAAC,IAAEV;AAAA,MAAI;AAAA,IAChG;AAED,MAAG,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG,GAClC;AACC,aAAQwB,KAAE,GAAGA,KAAE,GAAGA,MAClB;AACC,UAAI,QAAQ,OAAKA,KAAE;AACnB,UAAG,OAAK,GAAI,UAAQ,IAAE,KAAK,IAAE,KAAK,KAAG,GAAG;AACvC,YAAI,MAAO,IAAI,QAAM,IAAE,CAAC,KAAG,IAAG,IAAI,QAAM,CAAC,MAAS,IAAI,QAAM,IAAE,MAAI,CAAC,KAAG,IAAG,IAAI,QAAM,IAAE,GAAG;AACxF,YAAI,QAAM,CAAC,IAAI,KAAG;AAAM,YAAI,QAAM,IAAE,CAAC,IAAK,OAAK,IAAG;AAAA,MACnD;AAAA,eACQ,OAAK,EAAG,UAAQ,IAAI,GAAG,IAAE,KAAK,KAAG,GACzC;AACC,YAAI,QAAM,CAAG,IAAK,IAAI,QAAM,CAAG,IAAI,IAAI,QAAM,IAAE,CAAC,IAAG;AACnD,YAAI,QAAM,IAAE,CAAC,IAAK,IAAI,QAAM,IAAE,CAAC,IAAI,IAAI,QAAM,IAAE,CAAC,IAAG;AACnD,YAAI,QAAM,IAAE,CAAC,IAAK,IAAI,QAAM,IAAE,CAAC,IAAI,IAAI,QAAM,IAAE,CAAC,IAAG;AAAA,MACpD;AAAA,UACK,UAAQ,IAAE,KAAK,IAAE,KAAK,IAAK,KAAI,QAAM,CAAC,IAAK,IAAI,QAAM,CAAC,IAAI,IAAI,QAAM,IAAE,GAAG,IAAG;AAAA,IAClF;AAAA,EACD;AACD;AAEE3B,MAAK,OAAO,mBAAmB,SAAS,KAAK8B,OAAM,KAAK,KAAK,KAAK,MAAM;AAE1D,MAAI,aAAaA,MAAK;AAEtB,MAAI,WAAW,IAAI,IAAI,EAAE,CAAC;AAC1B,MAAI,YAAY,IAAI,IAAI,EAAE,CAAC;AAC3B,MAAI,gBAAgB,IAAI,KAAK,EAAE,CAAC;AAChC,MAAI,aAAc,IAAI,KAAK,EAAE,CAAC;AAE9B,MAAI,OAAO;AACX,MAAI,aAAa;AACjB,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,QAAS,cAAc,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,WAAW,EAAE;AACtE,MAAI,GAAG,GAAG,IAAI,OAAK,CAAC,GAAE,CAAC,GAAG,OAAK,CAAC,GAAE,CAAC,GAAG,OAAO,MAAM,GAAG;AACtD,MAAI,KAAK,KAAK;AACd,MAAI,SAAS,IAAI,WAAW,KAAM;AAClC,MAAI,SAAS,IAAI,YAAY,IAAI,MAAM;AAEvC,WAAS,WAAWC,OAAK;AACrB,QAAI,QAAQ,GAAG;AACX,UAAIC,SAAQ,IAAI,WAAW,YAAY,MAAI,aAAa,MAAQ,QAAO,IAAM;AAC7E,UAAIC,SAAQ,IAAI,WAAW,YAAY,MAAI,YAAY,IAAM;AAC7D,aAAO,IAAID,MAAK;AAChB,aAAO,IAAIC,QAAOD,OAAM,MAAM;AAC9B,oBAAc;AAAA,IAClB;AACA,QAAG,cAAc,GAAG;AAChB,WAAK,IAAI,GAAG,IAAI,IAAI,KAAI;AACpB,cAAM,CAAC,IAAI,OAAO,MAAM;AACxB,gBAAQ;AAAA,MACZ;AAAA,IACJ,OAAO;AACH,aAAQ,OAAOD,QAAQ;AACvB,aAAO,QAAQ,IAAI;AACnB,cAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,KAAK,OAAO,OAAO,KAAK,EAAG,MAAOA;AAAA,IAC5E;AAAA,EACJ;AAEA,WAAS,iBAAiBG,IAAG;AACzB,WAAO,OAAO,OAAO,KAAKA,EAAC;AAAA,EAC/B;AACA,WAAS,cAAc;AACnB,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAM,iBAAiB,CAAC,KAAK;AAChE,UAAM,CAAC,MAAO,iBAAiB,CAAC,IAAI,MAAQ,KAAO,iBAAiB,CAAC,KAAK,IAAM,iBAAiB,CAAC,KAAK,KAAM;AAC7G,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACxC,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,MAAQ,IAAK,iBAAiB,CAAC;AAClE,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAM,iBAAiB,CAAC,KAAK;AAChE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAS,IAAM,iBAAiB,CAAC,KAAK;AACzE,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACxC,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,MAAQ,IAAK,iBAAiB,CAAC;AAClE,UAAM,CAAC,IAAM,iBAAiB,CAAC,KAAK,IAAK,OAAU,iBAAiB,EAAE,KAAK;AAC3E,UAAM,CAAC,KAAM,iBAAiB,EAAE,KAAK,IAAM,iBAAiB,EAAE,KAAK,KAAM;AACzE,UAAM,EAAE,IAAK,iBAAiB,EAAE,KAAK,IAAK;AAC1C,UAAM,EAAE,KAAM,iBAAiB,EAAE,IAAI,MAAQ,IAAK,iBAAiB,EAAE;AACrE,UAAM,EAAE,KAAO,iBAAiB,EAAE,KAAK,IAAK,OAAS,iBAAiB,EAAE,KAAK,KAAK;AAClF,UAAM,EAAE,KAAM,iBAAiB,EAAE,KAAK,IAAM,iBAAiB,EAAE,KAAK,KAAM;AAC1E,YAAQ;AACR,WAAO;AAAA,EACX;AACA,WAAS,oBAAoB;AACzB,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAM,iBAAiB,CAAC,KAAK;AAChE,UAAM,CAAC,MAAO,iBAAiB,CAAC,IAAI,OAAQ,IAAM,iBAAiB,CAAC,KAAM;AAC1E,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACxC,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAS,IAAM,iBAAiB,CAAC,KAAK;AACzE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAS,IAAM,iBAAiB,CAAC,KAAK;AACzE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAS,IAAM,iBAAiB,CAAC,KAAK;AACzE,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACxC,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAQ,IAAM,iBAAiB,CAAC,KAAK;AACxE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAQ,IAAM,iBAAiB,CAAC,KAAK;AACxE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAQ,IAAM,iBAAiB,CAAC,KAAK;AACxE,UAAM,EAAE,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACzC,UAAM,EAAE,KAAM,iBAAiB,CAAC,IAAI,MAAQ,IAAM,iBAAiB,EAAE,KAAK;AAC1E,UAAM,EAAE,KAAM,iBAAiB,EAAE,IAAI,MAAQ,IAAM,iBAAiB,EAAE,KAAK;AAC3E,UAAM,EAAE,KAAM,iBAAiB,EAAE,IAAI,MAAQ,IAAM,iBAAiB,EAAE,KAAK;AAC3E,UAAM,EAAE,IAAI,iBAAiB,EAAE,IAAI;AACnC,UAAM,EAAE,IAAI,iBAAiB,EAAE;AAC/B,UAAM,EAAE,IAAI,iBAAiB,EAAE;AAC/B,UAAM,EAAE,IAAI,iBAAiB,EAAE;AAE/B,YAAQ;AACR,WAAO;AAAA,EACX;AAEA,WAAS,oBAAmB;AACxB,SAAK,CAAC,IAAE;AAAG,SAAK,CAAC,IAAE;AACnB,SAAK,CAAC,IAAE;AAAG,SAAK,CAAC,IAAE;AAAA,EACvB;AACA,MAAI,cAAc,GAAG;AACjB,UAAM;AAAA,EA2CV,WACQ,cAAc,GAAG;AACrB,QAAI,UAAU,iBAAiB,IAC3B,gBAAgB,UAAU,oBAAoB,aAC9C,iBAAiB,UAAU,KAAK,IAChC,aAAa,UAAU,MAAO,KAC9B,oBAAoB,UAAU,OAAQ,MACtC,eAAe,UAAU,QAAS,OAClC,aAAa,UAAU,OAAQ,OAC/B,eAAe,WAAW,gBAC1B,WAAW,eAAe,IAC1B,aAAa,UAAU,KAAK;AAEhC,SAAK,MAAM,GAAG,MAAM,YAAY,IAAI,OAAO,IAAI;AAC3C,UAAI,aAAa,KAAK,IAAI,IAAI,YAAY,GAAG;AAC7C,UAAI,UAAU,WAAS;AACvB,eAAS,IAAI,WAAW,YAAY,MAAI,MAAM,OAAO;AACrD,aAAO;AACP,cAAQ;AACR,WAAK,OAAO,GAAG,MAAM,GAAG,OAAO,YAAY,QAAQ,MAAM,GAAG;AACxD,eAAO,MAAM,QAAQ;AACrB,iBAAS,SAAS,GAAG,SAAS,cAAc,UAAU;AAClD,wBAAc;AACd,4BAAkB;AAClB,eAAG;AAAG,uBAAW;AACjB,eAAK,IAAI,GAAG,IAAI,gBAAgB,KAAI;AAChC,oBAAQ,IAAI;AACZ,gBAAI,IAAI,KAAK,GAAG;AACZ,kBAAI,OAAO,OAAO,aAAa,MAAM,MAAM,IAAI;AAC/C,kBAAI,QAAQ,EAAG,QAAO;AACtB,2BAAa,cAAc;AAC3B,mBAAK,KAAK;AAAA,YACd;AACA,gBAAI,SAAS,OAAO,aAAa,MAAM,MAAM,IAAI;AACjD,gBAAI,KAAK,KAAK,GAAG;AACb,wBAAU;AACV,kBAAI,aAAa,qBAAqB,KAAK,KAAK,IAAI;AAChD,0BAAU,KAAK,KAAK,IAAI;AAC5B,mBAAK,KAAK,IAAI;AAAA,YAClB,OAAO;AACH,mBAAK,KAAK,IAAI;AACd,kBAAI;AACA,qBAAK,KAAK,IAAI;AAAA;AAEd,yBAAS,KAAK,KAAK;AAAA,YAC3B;AACA,mBAAO,MAAM,KAAK,IAAK,SAAS,MAAQ,eAAgB,SAAS,KAAO,eAAiB,SAAS,cAAe,KAAQ;AAAA,UAC7H;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,WACS,cAAc,GAAG;AACtB,QAAI,YAAY,iBAAiB,KAAK,KAAK;AAC3C,SAAK,MAAM,GAAG,MAAM,WAAW,OAAO;AAClC,WAAK,MAAM,GAAG,MAAM,UAAU,OAAK,WAAW;AAC1C,mBAAW,CAAC;AAEZ,YAAI,iBAAiB,IAAI;AACrB,iBAAO,KAAK,MAAM,MAAM,CAAC,IAAI,OAAQ,KAAK,MAAM,CAAC;AACjD,iBAAO,KAAK,IAAI,KAAK,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK;AAC7C,iBAAO,KAAK,MAAM,MAAM,CAAC,IAAI,OAAQ,KAAK,MAAM,CAAC;AACjD,iBAAO,KAAK,IAAI,KAAK,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK;AAC7C,iBAAO,KAAK,MAAM,MAAM,CAAC,IAAI,OAAQ,KAAK,MAAM,CAAC;AACjD,iBAAO,KAAK,IAAI,KAAK,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK;AAC7C,iBAAO,KAAK,MAAM,MAAM,EAAE,IAAI,OAAQ,KAAK,MAAM,CAAC;AAClD,iBAAO,KAAK,IAAI,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK;AAC/C,iBAAO,KAAK,MAAM,MAAM,EAAE,IAAI,OAAQ,KAAK,MAAM,EAAE;AACnD,iBAAO,KAAK,IAAI,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK;AAAA,QACnD,WAAW,iBAAiB,IAAI;AAC5B,iBAAO,KAAK,IAAI,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,OAAS;AACjD,iBAAO,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,IAAK,MAAM,CAAC,MAAO,MAAM,CAAC,IAAI,OAAQ;AACxE,iBAAO,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,KAAM,MAAM,CAAC,MAAO,MAAM,CAAC,IAAI,MAAM;AACvE,iBAAO,KAAK,MAAM,MAAM,CAAC,IAAI,QAAS,MAAM,MAAM,CAAC,KAAK;AACxD,iBAAO,KAAK,IAAI,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,OAAS;AACjD,iBAAO,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,MAAM,EAAE,IAAI,OAAQ;AACvE,iBAAO,KAAK,KAAK,MAAM,EAAE,KAAK,KAAK,KAAK,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,MAAM;AACxE,iBAAO,KAAK,MAAM,MAAM,EAAE,IAAI,QAAS,MAAM,MAAM,EAAE,KAAK;AAC1D,iBAAO,KAAK,IAAI,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,OAAS;AAAA,QACvD;AAAA,MACJ;AAAA,IACJ;AAAA,EAEJ,WAAU,cAAc,GAAG;AACvB,SAAK,MAAM,GAAG,MAAM,WAAW,OAAM;AACjC,WAAI,MAAM,GAAG,MAAM,UAAU,OAAM;AAC/B,YAAI,MAAM;AACV,gBAAQ,IAAI;AACZ,YAAI,KAAG,EAAG,mBAAkB;AAC5B,YAAI,IAAE,KAAK;AACP,eAAK,KAAM,IAAI,WAAW,CAAC;AAC/B,YAAI,KAAK,KAAK,GAAG;AACb,cAAI,WAAW,CAAC;AAChB,cAAG,KAAK,GAAE;AACN,iBAAK,KAAK,KAAK,OAAQ;AACvB,gBAAI,KAAK,KAAK,IAAI,KAAK,MAAM;AACzB,mBAAK,KAAK,KAAK,EAAG,MAAO;AAC7B,iBAAK,KAAK,KAAK,KAAK;AAAA,UACxB;AAAA,QACJ,OAAO;AACH,eAAK,KAAK,IAAI,WAAW,CAAC;AAC1B,cAAG,KAAK,KAAK,KAAK,IAAI;AAClB,iBAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,WAAW,CAAC;AAAA,QACrD;AACA,eAAO,KAAK,IAAI,KAAK,MAAM,CAAC;AAAA,MAChC;AAAA,IACJ;AAAA,EACJ,MACK,OAAM;AACf;AAGZlC,MAAK,OAAO,aAAa,WAAU;AAAC,MAAIa,KAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,KAAI,IAAG,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,KAAI,IAAG,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,GAAE,KAAI,IAAG,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,KAAI,IAAG,GAAE,IAAG,KAAI,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,KAAI,GAAE,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,KAAI,GAAE,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,KAAI,GAAE,IAAG,MAAK,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,U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AA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA;AAAA,MACjC;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAG;AAAA,MAAG;AAAA,IAAG;AAAA,IAC/B;AAAA,MAAE;AAAA,MAAG;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA;AAAA,MACjC;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,IAAG;AAAA,IACrC;AAAA,MAAE;AAAA,MAAG;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA;AAAA,MACjC;AAAA,MAAE;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAG;AAAA,IAAG;AAAA,IAC9C;AAAA,MAAE;AAAA,MAAG;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA;AAAA,MACjC;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAG;AAAA,MAAE;AAAA,MAAG;AAAA,MAAG;AAAA,MAAE;AAAA,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AE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GA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;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACT;AAcA,IAAI,sBAAsB;AAAA,EACtB,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AACT;AAkBA,IAAI,mBAAmB;AAAA,EACnB,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AA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,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,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EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AA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Y;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,IACrF;AAEA,QAAI,IAAI;AAER,QAAI;AACJ,UAAM,SAAS,CAAC;AAEhB,WAAQ,IAAIA,MAAK,YAAa;AAE7B,UAAIC,MAAK;AAET,eAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,QAAAA,OAAM,OAAO,aAAcD,MAAK,SAAU,GAAK,CAAE;AAAA,MAElD;AAEA,YAAM,YAAYA,MAAK,UAAW,GAAG,IAAK;AAAG,WAAK;AAClD,WAAK;AAEL,UAAKC,QAAO,QAAS;AAEpB,cAAMC,KAAIF,MAAK,UAAW,GAAG,IAAK;AAAG,aAAK;AAC1C,cAAMG,KAAIH,MAAK,UAAW,GAAG,IAAK;AAAG,aAAK;AAC1C,cAAM,IAAIA,MAAK,UAAW,GAAG,IAAK;AAAG,aAAK;AAE1C,gBAAQ;AAAA,UACP,SAAS;AAAA,UACT,MAAM,EAAE,GAAGE,IAAG,GAAGC,IAAG,EAAK;AAAA,QAC1B;AAEA,eAAO,KAAM,KAAM;AAEnB,aAAK,YAAc,IAAI;AAAA,MAExB,WAAYF,QAAO,QAAS;AAE3B,cAAM,YAAYD,MAAK,UAAW,GAAG,IAAK;AAAG,aAAK;AAClD,cAAM,OAAO,IAAI,WAAY,QAAQ,GAAG,YAAY,CAAE;AAEtD,aAAK,YAAY;AAAA,MAElB,WAAYC,QAAO,QAAS;AAE3B,cAAM,UAAU,CAAE,CAAE;AAEpB,iBAAU,IAAI,GAAG,IAAI,KAAK,KAAO;AAEhC,kBAAS,IAAI,CAAE,IAAID,MAAK,UAAW,GAAG,IAAK;AAAG,eAAK;AAAA,QAEpD;AAEA,cAAM,UAAU;AAAA,MAEjB,OAAO;AAIN,aAAK;AAAA,MAEN;AAAA,IAED;AAEA,WAAO;AAAA,EAER;AAED;AAEA,IAAM,UAAN,cAAsB,KAAK;AAAA,EAE1B,YAAa,OAAQ;AAEpB,UAAMA,QAAO,MAAM;AACnB,UAAMI,QAAO,MAAM;AACnB,UAAM,UAAU,MAAM;AAItB,UAAM,WAAW,CAAC;AAClB,UAAM,SAAS,CAAC;AAEhB,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAElE,UAAMC,UAAS,IAAI,MAAM;AAEzB,aAASC,KAAK,MAAMJ,IAAGC,IAAG,GAAG,GAAGI,IAAGC,IAAI;AAEtC,MAAAN,MAAKE,MAAK,IAAI;AACd,MAAAD,MAAKC,MAAK,IAAI;AACd,WAAKA,MAAK,IAAI;AAEd,eAAU,IAAI,GAAG,IAAI,IAAI,KAAK,GAAI;AAEjC,QAAAC,QAAO,OAAQ,GAAGE,IAAGC,IAAG,cAAe;AAEvC,iBAAS,KAAM,KAAM,IAAI,CAAE,IAAIN,IAAG,KAAM,IAAI,CAAE,IAAIC,IAAG,KAAM,IAAI,CAAE,IAAI,CAAE;AACvE,eAAO,KAAME,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAAA,MAE3C;AAAA,IAED;AAIA,UAAM,UAAUD,MAAK;AACrB,UAAM,UAAUA,MAAK,IAAIA,MAAK;AAE9B,UAAM,QAAQ,IAAI,WAAYA,MAAK,IAAIA,MAAK,IAAIA,MAAK,CAAE;AAEvD,aAAU,IAAI,GAAG,IAAIJ,MAAK,QAAQ,KAAK,GAAI;AAE1C,YAAME,KAAIF,MAAM,IAAI,CAAE;AACtB,YAAMG,KAAIH,MAAM,IAAI,CAAE;AACtB,YAAM,IAAIA,MAAM,IAAI,CAAE;AAEtB,YAAMS,SAAQP,KAAMC,KAAI,UAAc,IAAI;AAE1C,YAAOM,MAAM,IAAI;AAAA,IAElB;AAIA,QAAI,YAAY;AAEhB,aAAU,IAAI,GAAG,IAAIT,MAAK,QAAQ,KAAK,GAAI;AAE1C,YAAME,KAAIF,MAAM,IAAI,CAAE;AACtB,YAAMG,KAAIH,MAAM,IAAI,CAAE;AACtB,YAAM,IAAIA,MAAM,IAAI,CAAE;AACtB,YAAMU,KAAIV,MAAM,IAAI,CAAE;AAEtB,YAAM,MAAM,QAASU,EAAE;AACvB,YAAM,KAAM,OAAO,IAAI,OAAS;AAChC,YAAMH,MAAM,OAAO,IAAI,OAAS;AAChC,YAAMC,MAAM,OAAO,KAAK,OAAS;AAEjC,UAAK,IAAI,KAAKD,KAAI,KAAKC,KAAI,EAAI,aAAY;AAE3C,YAAMC,SAAQP,KAAMC,KAAI,UAAc,IAAI;AAE1C,UAAK,MAAOM,SAAQ,CAAE,MAAM,KAAKP,OAAME,MAAK,IAAI,EAAI,CAAAE,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AAChF,UAAK,MAAOC,SAAQ,CAAE,MAAM,KAAKP,OAAM,EAAI,CAAAI,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AACvE,UAAK,MAAOC,SAAQ,OAAQ,MAAM,KAAKN,OAAMC,MAAK,IAAI,EAAI,CAAAE,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AACtF,UAAK,MAAOC,SAAQ,OAAQ,MAAM,KAAKN,OAAM,EAAI,CAAAG,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AAC7E,UAAK,MAAOC,SAAQ,OAAQ,MAAM,KAAK,MAAML,MAAK,IAAI,EAAI,CAAAE,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AACtF,UAAK,MAAOC,SAAQ,OAAQ,MAAM,KAAK,MAAM,EAAI,CAAAH,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AAAA,IAE9E;AAEA,UAAM,WAAW,IAAI,eAAe;AACpC,aAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAC7E,aAAS,qBAAqB;AAE9B,UAAM,WAAW,IAAI,qBAAqB;AAE1C,QAAK,WAAY;AAEhB,eAAS,aAAc,SAAS,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AACxE,eAAS,eAAe;AAAA,IAEzB;AAEA,UAAO,UAAU,QAAS;AAAA,EAE3B;AAED;AAEA,IAAM,mBAAN,cAA+B,cAAc;AAAA,EAE5C,YAAa,OAAQ;AAEpB,UAAMR,QAAO,MAAM;AACnB,UAAMI,QAAO,MAAM;AAEnB,UAAM,UAAUA,MAAK;AACrB,UAAM,UAAUA,MAAK,IAAIA,MAAK;AAE9B,UAAM,QAAQ,IAAI,WAAYA,MAAK,IAAIA,MAAK,IAAIA,MAAK,CAAE;AAEvD,aAAU,IAAI,GAAG,IAAIJ,MAAK,QAAQ,KAAK,GAAI;AAE1C,YAAME,KAAIF,MAAM,IAAI,CAAE;AACtB,YAAMG,KAAIH,MAAM,IAAI,CAAE;AACtB,YAAM,IAAIA,MAAM,IAAI,CAAE;AAEtB,YAAMS,SAAQP,KAAMC,KAAI,UAAc,IAAI;AAE1C,YAAOM,MAAM,IAAI;AAAA,IAElB;AAEA,UAAO,OAAOL,MAAK,GAAGA,MAAK,GAAGA,MAAK,CAAE;AAErC,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,kBAAkB;AACvB,SAAK,cAAc;AAAA,EAEpB;AAED;;;AC1TA,IAAIO,KAAE,CAACC,IAAE,MAAI,OAAK,MAAI,IAAE,EAAC,SAAQ,CAAC,EAAC,GAAEA,GAAE,EAAE,SAAQ,CAAC,IAAG,EAAE;AAAS,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,UAAQ;AAAO,KAAG,UAAQ;AAAO,CAAC;AAAE,IAAI,IAAEA,GAAE,CAAC,SAAQ,WAAS;AAAC;AAAa,MAAI,gBAAc,WAAS,QAAQ,iBAAe,SAASC,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAEC,KAAE,EAAE,QAAO,IAAED,GAAE,QAAO,IAAEC,IAAE,KAAI,IAAI,CAAAD,GAAE,CAAC,IAAE,EAAE,CAAC;AAAE,WAAOA;AAAA,EAAC;AAAE,SAAO,eAAe,SAAQ,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,UAAQ,mBAAiB,QAAQ,QAAM,QAAQ,OAAK,QAAQ,uBAAqB,QAAQ,gBAAc,QAAQ,cAAY,QAAQ,YAAU,QAAQ,WAAS,QAAQ,OAAK,QAAQ,QAAM,QAAQ,UAAQ,QAAQ,WAAS,QAAQ,oBAAkB,QAAQ,SAAO,QAAQ,YAAU,QAAQ,SAAO,QAAQ,UAAQ,QAAQ,OAAK,QAAQ,aAAW,QAAQ,QAAM,QAAQ,WAAS,QAAQ,WAAS,QAAQ,UAAQ,QAAQ,UAAQ,QAAQ,OAAK,QAAQ,UAAQ,QAAQ,SAAO,QAAQ,UAAQ,QAAQ,OAAK,QAAQ,WAAS,QAAQ,WAAS,QAAQ,WAAS,QAAQ,MAAI,QAAQ,OAAK,QAAQ,SAAO,QAAQ,SAAO,QAAQ,YAAU,QAAQ,OAAK,QAAQ,aAAW,QAAQ,cAAY,QAAQ,WAAS,QAAQ,UAAQ,QAAQ,OAAK,QAAQ,QAAM,QAAQ,UAAQ,QAAQ,MAAI,QAAQ,YAAU,QAAQ,SAAO,QAAQ,OAAK,QAAQ,UAAQ;AAAO,WAAS,QAAQA,IAAE;AAAC,WAAOA,MAAGA,GAAE,WAAS;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,KAAKA,IAAE;AAAC,WAAOA,MAAG,OAAK,CAAC,IAAE,OAAO,KAAKA,EAAC;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,OAAOA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,OAAO,KAAKA,EAAC,GAAEC,KAAE,GAAEA,KAAE,EAAE,QAAOA,KAAI,GAAE,KAAKD,GAAE,EAAEC,EAAC,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,UAAUD,IAAE,GAAE;AAAC,aAAQ,IAAE,CAAC,GAAEC,KAAE,KAAKD,EAAC,GAAE,IAAE,GAAE,IAAEC,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,QAAE,KAAK,EAAE,KAAK,MAAKD,GAAEE,EAAC,GAAEA,EAAC,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,YAAU;AAAU,WAAS,IAAIF,IAAE,GAAE;AAAC,aAAQ,IAAE,CAAC,GAAEC,KAAE,GAAEA,KAAED,GAAE,QAAOC,KAAI,GAAE,KAAK,EAAE,KAAK,MAAKD,GAAEC,EAAC,GAAEA,EAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,MAAI;AAAI,WAAS,QAAQD,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,YAAM,QAAQC,EAAC,IAAE,IAAE,EAAE,OAAO,QAAQA,EAAC,CAAC,IAAE,EAAE,KAAKA,EAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,MAAMD,IAAE;AAAC,WAAO,QAAQA,EAAC,IAAE,SAAOA,GAAE,CAAC;AAAA,EAAC;AAAC,UAAQ,QAAM;AAAM,WAAS,KAAKA,IAAE;AAAC,QAAI,IAAEA,MAAGA,GAAE;AAAO,WAAO,IAAEA,GAAE,IAAE,CAAC,IAAE;AAAA,EAAM;AAAC,UAAQ,OAAK;AAAK,WAAS,QAAQA,IAAE,GAAE;AAAC,QAAG,MAAM,QAAQA,EAAC,EAAE,UAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,GAAE,KAAK,MAAKA,GAAE,CAAC,GAAE,CAAC;AAAA,aAAU,SAASA,EAAC,EAAE,UAAQC,KAAE,KAAKD,EAAC,GAAE,IAAE,GAAE,IAAEC,GAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,GAAE,CAAC,GAAEC,KAAEF,GAAE,CAAC;AAAE,QAAE,KAAK,MAAKE,IAAE,CAAC;AAAA,IAAC;AAAA,QAAM,OAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,SAASF,IAAE;AAAC,WAAO,OAAOA,MAAG;AAAA,EAAQ;AAAC,UAAQ,WAAS;AAAS,WAAS,YAAYA,IAAE;AAAC,WAAOA,OAAI;AAAA,EAAM;AAAC,UAAQ,cAAY;AAAY,WAAS,WAAWA,IAAE;AAAC,WAAOA,cAAa;AAAA,EAAQ;AAAC,UAAQ,aAAW;AAAW,WAAS,KAAKA,IAAE,GAAE;AAAC,WAAO,MAAI,WAAS,IAAE,IAAGA,GAAE,MAAM,GAAEA,GAAE,MAAM;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,UAAUA,IAAE,GAAE;AAAC,WAAO,MAAI,WAAS,IAAE,IAAGA,GAAE,MAAM,GAAEA,GAAE,SAAO,CAAC;AAAA,EAAC;AAAC,UAAQ,YAAU;AAAU,WAAS,OAAOA,IAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,QAAG,MAAM,QAAQA,EAAC,EAAE,UAAQC,KAAE,GAAEA,KAAED,GAAE,QAAOC,MAAI;AAAC,UAAI,IAAED,GAAEC,EAAC;AAAE,QAAE,KAAK,MAAK,CAAC,KAAG,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,OAAOD,IAAE,GAAE;AAAC,WAAO,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAM,CAAC,EAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,KAAKA,IAAE,GAAE;AAAC,aAAQ,IAAE,OAAO,KAAKA,EAAC,GAAEC,KAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAIC,KAAE,EAAE,CAAC,GAAE,IAAEF,GAAEE,EAAC;AAAE,QAAE,CAAC,MAAID,GAAEC,EAAC,IAAE;AAAA,IAAE;AAAC,WAAOD;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,IAAID,IAAE,GAAE;AAAC,WAAO,SAASA,EAAC,IAAEA,GAAE,eAAe,CAAC,IAAE;AAAA,EAAE;AAAC,UAAQ,MAAI;AAAI,WAAS,SAASA,IAAE,GAAE;AAAC,WAAO,KAAKA,IAAE,SAAS,GAAE;AAAC,aAAO,MAAI;AAAA,IAAC,CAAC,MAAI;AAAA,EAAM;AAAC,UAAQ,WAAS;AAAS,WAAS,SAASA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,GAAE,KAAKA,GAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,WAAS;AAAS,WAAS,SAASA,IAAE;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQ,KAAKA,GAAE,QAAO,UAAU,eAAe,KAAKA,IAAE,CAAC,MAAI,EAAE,CAAC,IAAEA,GAAE,CAAC;AAAG,WAAO;AAAA,EAAC;AAAC,UAAQ,WAAS;AAAS,WAAS,KAAKA,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,UAAG,EAAE,KAAK,MAAKC,EAAC,EAAE,QAAOA;AAAA,IAAC;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,QAAQD,IAAE,GAAE;AAAC,aAAQ,IAAE,CAAC,GAAEC,KAAE,GAAEA,KAAED,GAAE,QAAOC,MAAI;AAAC,UAAI,IAAED,GAAEC,EAAC;AAAE,QAAE,KAAK,MAAK,CAAC,KAAG,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,OAAOD,IAAE,GAAE,GAAE;AAAC,aAAQC,KAAE,MAAM,QAAQD,EAAC,GAAE,IAAEC,KAAED,KAAE,OAAOA,EAAC,GAAEE,KAAED,KAAE,CAAC,IAAE,KAAKD,EAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,KAAE,EAAE,KAAK,MAAK,GAAE,EAAE,CAAC,GAAEC,KAAE,IAAEC,GAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,QAAQF,IAAE;AAAC,WAAO,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAO,KAAG;AAAA,IAAI,CAAC;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,KAAKA,IAAE,GAAE;AAAC,UAAI,WAAS,IAAE,SAASC,IAAE;AAAC,aAAOA;AAAA,IAAC;AAAG,QAAI,IAAE,CAAC;AAAE,WAAO,OAAOD,IAAE,SAASC,IAAE,GAAE;AAAC,UAAIC,KAAE,EAAE,CAAC;AAAE,aAAO,SAAS,GAAEA,EAAC,IAAED,MAAG,EAAE,KAAKC,EAAC,GAAED,GAAE,OAAO,CAAC;AAAA,IAAE,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,QAAQD,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,GAAE,IAAE,CAAC,IAAE,UAAU,CAAC;AAAE,QAAIC,KAAE,CAAC,IAAI,GAAE,IAAEA,GAAE,OAAO,CAAC;AAAE,WAAO,SAAS,KAAK,MAAMD,IAAE,CAAC;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,QAAQA,IAAE;AAAC,WAAO,MAAM,QAAQA,EAAC;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,SAASA,IAAE;AAAC,WAAOA,cAAa;AAAA,EAAM;AAAC,UAAQ,WAAS;AAAS,WAAS,SAASA,IAAE;AAAC,WAAOA,cAAa;AAAA,EAAM;AAAC,UAAQ,WAAS;AAAS,WAAS,MAAMA,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,KAAG,CAAC,EAAEA,GAAE,CAAC,GAAE,CAAC,EAAE,QAAM;AAAG,WAAM;AAAA,EAAE;AAAC,UAAQ,QAAM;AAAM,WAAS,WAAWA,IAAE,GAAE;AAAC,WAAO,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAO,SAAS,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,UAAQ,aAAW;AAAW,WAAS,KAAKA,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,KAAG,EAAEA,GAAE,CAAC,CAAC,EAAE,QAAM;AAAG,WAAM;AAAA,EAAE;AAAC,UAAQ,OAAK;AAAK,WAAS,QAAQA,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,KAAGA,GAAE,CAAC,MAAI,EAAE,QAAO;AAAE,WAAM;AAAA,EAAE;AAAC,UAAQ,UAAQ;AAAQ,WAAS,OAAOA,IAAE,GAAE;AAAC,QAAI,IAAE,SAASA,EAAC;AAAE,WAAO,EAAE,KAAK,SAASC,IAAE,GAAE;AAAC,aAAO,EAAEA,EAAC,IAAE,EAAE,CAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,UAAUD,IAAE,GAAE;AAAC,QAAGA,GAAE,WAAS,EAAE,OAAO,OAAM,MAAM,2DAA2D;AAAE,aAAQ,IAAE,CAAC,GAAEC,KAAE,GAAEA,KAAED,GAAE,QAAOC,KAAI,GAAED,GAAEC,EAAC,CAAC,IAAE,EAAEA,EAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,YAAU;AAAU,WAAS,OAAOD,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,GAAE,IAAE,CAAC,IAAE,UAAU,CAAC;AAAE,aAAQC,KAAE,GAAEA,KAAE,EAAE,QAAOA,KAAI,UAAQ,IAAE,EAAEA,EAAC,GAAEC,KAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,GAAE,CAAC;AAAE,MAAAF,GAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,kBAAkBA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,GAAE,IAAE,CAAC,IAAE,UAAU,CAAC;AAAE,aAAQC,KAAE,GAAEA,KAAE,EAAE,QAAOA,KAAI,UAAQ,IAAE,EAAEA,EAAC,GAAEC,KAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,GAAE,CAAC;AAAE,UAAIF,IAAE,CAAC,MAAIA,GAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAE;AAAC,WAAOA;AAAA,EAAC;AAAC,UAAQ,oBAAkB;AAAkB,WAAS,WAAU;AAAC,aAAQA,KAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,CAAAA,GAAE,CAAC,IAAE,UAAU,CAAC;AAAE,WAAO,kBAAkB,MAAM,QAAO,cAAc,CAAC,CAAC,CAAC,GAAEA,EAAC,CAAC;AAAA,EAAC;AAAC,UAAQ,WAAS;AAAS,WAAS,QAAQA,IAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,WAAO,QAAQA,IAAE,SAASC,IAAE;AAAC,UAAI,IAAE,EAAEA,EAAC,GAAEC,KAAE,EAAE,CAAC;AAAE,MAAAA,KAAEA,GAAE,KAAKD,EAAC,IAAE,EAAE,CAAC,IAAE,CAACA,EAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,MAAMD,IAAE,GAAE;AAAC,aAAQ,IAAE,SAASA,EAAC,GAAEC,KAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC,GAAE,IAAE,EAAEC,EAAC;AAAE,QAAEA,EAAC,IAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,QAAM;AAAM,WAAS,OAAM;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,SAASF,IAAE;AAAC,WAAOA;AAAA,EAAC;AAAC,UAAQ,WAAS;AAAS,WAAS,UAAUA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,QAAE,KAAKC,OAAI,SAAOA,KAAE,MAAM;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,YAAU;AAAU,WAAS,YAAYD,IAAE;AAAC,eAAS,QAAQ,SAAO,QAAQ,MAAM,YAAUA,EAAC;AAAA,EAAC;AAAC,UAAQ,cAAY;AAAY,WAAS,cAAcA,IAAE;AAAC,eAAS,QAAQ,QAAM,QAAQ,KAAK,cAAYA,EAAC;AAAA,EAAC;AAAC,UAAQ,gBAAc;AAAc,WAAS,uBAAsB;AAAC,WAAO,OAAO,OAAK;AAAA,EAAU;AAAC,UAAQ,uBAAqB;AAAqB,WAAS,KAAKA,IAAE;AAAC,WAAOA,GAAEA,GAAE,SAAO,CAAC;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,MAAMA,IAAE;AAAC,QAAI,KAAE,oBAAI,KAAK,GAAE,QAAQ,GAAE,IAAEA,GAAE,GAAEC,MAAE,oBAAI,KAAK,GAAE,QAAQ,GAAE,IAAEA,KAAE;AAAE,WAAM,EAAC,MAAK,GAAE,OAAM,EAAC;AAAA,EAAC;AAAC,UAAQ,QAAM;AAAM,WAAS,iBAAiB,cAAa;AAAC,aAAS,kBAAiB;AAAA,IAAC;AAAC,oBAAgB,YAAU;AAAa,QAAI,eAAa,IAAI;AAAgB,aAAS,aAAY;AAAC,aAAO,OAAO,aAAa;AAAA,IAAG;AAAC,WAAO,WAAW,GAAE,WAAW,GAAE;AAAa,SAAK,YAAY;AAAA,EAAC;AAAC,UAAQ,mBAAiB;AAAgB,CAAC;AAAE,IAAI,KAAGF,GAAE,CAAC,IAAG,OAAK;AAAC,GAAC,SAASC,IAAE,GAAE;AAAC,WAAO,UAAQ,cAAY,OAAO,MAAI,OAAO,CAAC,GAAE,CAAC,IAAE,OAAO,MAAI,YAAU,GAAG,UAAQ,GAAG,UAAQ,EAAE,IAAEA,GAAE,cAAY,EAAE;AAAA,EAAC,GAAG,OAAO,QAAM,cAAY,OAAK,IAAG,WAAU;AAAC,aAASA,KAAG;AAAA,IAAC;AAAC,IAAAA,GAAE,UAAU,YAAU,WAAU;AAAC,aAAM,EAAC,KAAI,KAAK,KAAI,OAAM,KAAK,OAAM,UAAS,KAAK,SAAQ;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,SAAS,GAAE;AAAC,WAAK,MAAI,EAAE,KAAI,KAAK,QAAM,EAAE,OAAM,KAAK,WAAS,EAAE;AAAA,IAAQ,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,WAAK,MAAI,GAAE,KAAK,QAAM,GAAE,KAAK,WAAS,GAAE,KAAK,YAAY,GAAG;AAAE,UAAI,IAAE,KAAK,YAAY;AAAE,WAAK,YAAY,GAAG;AAAE,eAAQG,KAAE,EAAC,MAAK,SAAQ,KAAI,EAAC,OAAM,KAAK,KAAI,KAAI,EAAE,OAAM,GAAE,QAAO,OAAG,YAAW,OAAG,WAAU,OAAG,SAAQ,OAAG,QAAO,MAAE,GAAE,KAAK,aAAa,IAAG,SAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,YAAEA,IAAE,QAAQ;AAAE;AAAA,QAAM,KAAI;AAAI,YAAEA,IAAE,YAAY;AAAE;AAAA,QAAM,KAAI;AAAI,YAAEA,IAAE,WAAW;AAAE;AAAA,QAAM,KAAI;AAAI,YAAEA,IAAE,SAAS;AAAE;AAAA,QAAM,KAAI;AAAI,YAAEA,IAAE,QAAQ;AAAE;AAAA,MAAK;AAAC,UAAG,KAAK,QAAM,KAAK,MAAM,OAAO,OAAM,MAAM,sBAAoB,KAAK,MAAM,UAAU,KAAK,GAAG,CAAC;AAAE,aAAM,EAAC,MAAK,WAAU,OAAMA,IAAE,OAAM,GAAE,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,IAAC,GAAEH,GAAE,UAAU,cAAY,WAAU;AAAC,UAAI,IAAE,CAAC,GAAE,IAAE,KAAK;AAAI,WAAI,EAAE,KAAK,KAAK,YAAY,CAAC,GAAE,KAAK,SAAS,MAAI,MAAK,MAAK,YAAY,GAAG,GAAE,EAAE,KAAK,KAAK,YAAY,CAAC;AAAE,aAAM,EAAC,MAAK,eAAc,OAAM,GAAE,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,WAAU;AAAC,eAAQ,IAAE,CAAC,GAAE,IAAE,KAAK,KAAI,KAAK,OAAO,IAAG,GAAE,KAAK,KAAK,KAAK,CAAC;AAAE,aAAM,EAAC,MAAK,eAAc,OAAM,GAAE,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,OAAK,WAAU;AAAC,aAAO,KAAK,YAAY,IAAE,KAAK,UAAU,IAAE,KAAK,KAAK;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,WAAU;AAAC,UAAI,IAAE,KAAK;AAAI,cAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,iBAAM,EAAC,MAAK,eAAc,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,QAAE,KAAI;AAAI,iBAAM,EAAC,MAAK,aAAY,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,QAAE,KAAI;AAAK,kBAAO,KAAK,QAAQ,GAAE;AAAA,YAAC,KAAI;AAAI,qBAAM,EAAC,MAAK,gBAAe,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,YAAE,KAAI;AAAI,qBAAM,EAAC,MAAK,mBAAkB,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,UAAC;AAAC,gBAAM,MAAM,0BAA0B;AAAA,QAAE,KAAI;AAAI,eAAK,YAAY,GAAG;AAAE,cAAI;AAAE,kBAAO,KAAK,QAAQ,GAAE;AAAA,YAAC,KAAI;AAAI,kBAAE;AAAY;AAAA,YAAM,KAAI;AAAI,kBAAE;AAAoB;AAAA,UAAK;AAAC,YAAE,CAAC;AAAE,cAAIG,KAAE,KAAK,YAAY;AAAE,iBAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,GAAE,OAAMA,IAAE,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,MAAC;AAAC,MAAAC,GAAE;AAAA,IAAC,GAAEJ,GAAE,UAAU,aAAW,SAAS,GAAE;AAAC,UAAI,GAAEG,KAAE,KAAK;AAAI,cAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,cAAE,EAAC,SAAQ,GAAE,QAAO,SAAQ;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAC,SAAQ,GAAE,QAAO,SAAQ;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAC,SAAQ,GAAE,QAAO,EAAC;AAAE;AAAA,QAAM,KAAI;AAAI,cAAI,IAAE,KAAK,qBAAqB;AAAE,kBAAO,KAAK,QAAQ,GAAE;AAAA,YAAC,KAAI;AAAI,kBAAE,EAAC,SAAQ,GAAE,QAAO,EAAC;AAAE;AAAA,YAAM,KAAI;AAAI,kBAAIE;AAAE,mBAAK,QAAQ,KAAGA,KAAE,KAAK,qBAAqB,GAAE,IAAE,EAAC,SAAQ,GAAE,QAAOA,GAAC,KAAG,IAAE,EAAC,SAAQ,GAAE,QAAO,SAAQ,GAAE,KAAK,YAAY,GAAG;AAAE;AAAA,UAAK;AAAC,cAAG,MAAI,QAAI,MAAI,OAAO;AAAO,YAAE,CAAC;AAAE;AAAA,MAAK;AAAC,UAAG,EAAE,MAAI,QAAI,MAAI,QAAQ,QAAO,EAAE,CAAC,GAAE,KAAK,SAAS,CAAC,MAAI,OAAK,KAAK,YAAY,GAAG,GAAE,EAAE,SAAO,SAAI,EAAE,SAAO,MAAG,EAAE,OAAK,cAAa,EAAE,MAAI,KAAK,IAAIF,EAAC,GAAE;AAAA,IAAC,GAAEH,GAAE,UAAU,OAAK,WAAU;AAAC,UAAI,GAAE,IAAE,KAAK;AAAI,cAAO,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAI,cAAE,KAAK,OAAO;AAAE;AAAA,QAAM,KAAI;AAAK,cAAE,KAAK,WAAW;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,KAAK,eAAe;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,KAAK,MAAM;AAAE;AAAA,MAAK;AAAC,aAAO,MAAI,UAAQ,KAAK,mBAAmB,MAAI,IAAE,KAAK,iBAAiB,IAAG,EAAE,CAAC,GAAE,EAAE,MAAI,KAAK,IAAI,CAAC,GAAE,KAAK,aAAa,MAAI,EAAE,aAAW,KAAK,WAAW,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,SAAO,WAAU;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,OAAM,YAAW,MAAG,OAAM,CAAC,EAAE;AAAA,CAC19T,GAAE,EAAE,IAAI,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,CAAC,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,aAAW,WAAU;AAAC,cAAO,KAAK,YAAY,IAAI,GAAE,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,kBAAkB;AAAA,QAAE,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,qBAAqB;AAAA,QAAE,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,kBAAkB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,wBAAwB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,iBAAiB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,sBAAsB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,gCAAgC;AAAA,QAAE;AAAQ,iBAAO,KAAK,mBAAmB;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,WAAU;AAAC,UAAI,IAAE,KAAK,gBAAgB;AAAE,aAAM,EAAC,MAAK,sBAAqB,OAAM,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,uBAAqB,WAAU;AAAC,UAAI,GAAE,IAAE;AAAG,cAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,cAAEM;AAAE;AAAA,QAAM,KAAI;AAAI,cAAEA,IAAE,IAAE;AAAG;AAAA,QAAM,KAAI;AAAI,cAAE;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,GAAE,IAAE;AAAG;AAAA,QAAM,KAAI;AAAI,cAAEC;AAAE;AAAA,QAAM,KAAI;AAAI,cAAEA,IAAE,IAAE;AAAG;AAAA,MAAK;AAAC,aAAO,EAAE,CAAC,GAAE,EAAC,MAAK,OAAM,OAAM,GAAE,YAAW,EAAC;AAAA,IAAC,GAAEP,GAAE,UAAU,oBAAkB,WAAU;AAAC,UAAI;AAAE,cAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,cAAE,EAAE,IAAI;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAE;AAAA,CAC9iC;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAE,IAAI;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAE,GAAG;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAE,IAAI;AAAE;AAAA,MAAK;AAAC,aAAO,EAAE,CAAC,GAAE,EAAC,MAAK,aAAY,OAAM,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,0BAAwB,WAAU;AAAC,WAAK,YAAY,GAAG;AAAE,UAAI,IAAE,KAAK,QAAQ;AAAE,UAAG,WAAW,KAAK,CAAC,MAAI,MAAG,OAAM,MAAM,UAAU;AAAE,UAAI,IAAE,EAAE,YAAY,EAAE,WAAW,CAAC,IAAE;AAAG,aAAM,EAAC,MAAK,aAAY,OAAM,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,WAAU;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,aAAY,OAAM,EAAE,IAAI,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,wBAAsB,WAAU;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,KAAK,eAAe,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,kCAAgC,WAAU;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,KAAK,eAAe,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,qBAAmB,WAAU;AAAC,UAAI,IAAE,KAAK,QAAQ;AAAE,aAAM,EAAC,MAAK,aAAY,OAAM,EAAE,CAAC,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,4BAA0B,WAAU;AAAC,cAAO,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAA;AAAA,QAClzB,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAA,QAAS,KAAI;AAAA,QAAK,KAAI;AAAI,gBAAM,MAAM,KAAK;AAAA,QAAE;AAAQ,cAAI,IAAE,KAAK,QAAQ;AAAE,iBAAM,EAAC,MAAK,aAAY,OAAM,EAAE,CAAC,EAAC;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,iBAAe,WAAU;AAAC,UAAI,IAAE,CAAC,GAAE,IAAE;AAAG,WAAI,KAAK,YAAY,GAAG,GAAE,KAAK,SAAS,CAAC,MAAI,QAAM,KAAK,YAAY,GAAG,GAAE,IAAE,OAAI,KAAK,YAAY,KAAG;AAAC,YAAIG,KAAE,KAAK,UAAU,GAAE,IAAEA,GAAE,SAAO;AAAY,YAAG,KAAG,KAAK,YAAY,GAAE;AAAC,eAAK,YAAY,GAAG;AAAE,cAAIE,KAAE,KAAK,UAAU,GAAEG,KAAEH,GAAE,SAAO;AAAY,cAAGG,IAAE;AAAC,gBAAGH,GAAE,QAAMF,GAAE,MAAM,OAAM,MAAM,uCAAuC;AAAE,cAAE,KAAK,EAAC,MAAKA,GAAE,OAAM,IAAGE,GAAE,MAAK,CAAC;AAAA,UAAC,MAAM,CAAAH,GAAEC,GAAE,OAAM,CAAC,GAAE,EAAE,KAAK,EAAE,GAAG,CAAC,GAAED,GAAEG,GAAE,OAAM,CAAC;AAAA,QAAC,MAAM,CAAAH,GAAEC,GAAE,OAAM,CAAC;AAAA,MAAC;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,OAAM,YAAW,GAAE,OAAM,EAAC;AAAA,IAAC,GAAEH,GAAE,UAAU,YAAU,WAAU;AAAC,cAAO,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA;AAAA,QACnuB,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAS,gBAAM,MAAM,KAAK;AAAA,QAAE,KAAI;AAAK,iBAAO,KAAK,YAAY;AAAA,QAAE;AAAQ,iBAAO,KAAK,0BAA0B;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,WAAU;AAAC,cAAO,KAAK,YAAY,IAAI,GAAE,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAI,iBAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,aAAY,OAAM,EAAE,IAAI,EAAC;AAAA,QAAE,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,qBAAqB;AAAA,QAAE,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,kBAAkB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,wBAAwB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,iBAAiB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,sBAAsB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,gCAAgC;AAAA,QAAE;AAAQ,iBAAO,KAAK,mBAAmB;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,WAAU;AAAC,UAAI,IAAE;AAAG,cAAO,KAAK,YAAY,GAAG,GAAE,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAI,eAAK,YAAY,GAAG,GAAE,KAAK,YAAY,GAAG,GAAE,IAAE;AAAG;AAAA,QAAM;AAAQ,eAAK;AAAW;AAAA,MAAK;AAAC,UAAI,IAAE,KAAK,YAAY;AAAE,WAAK,YAAY,GAAG;AAAE,UAAIG,KAAE,EAAC,MAAK,SAAQ,WAAU,GAAE,OAAM,EAAC;AAAE,aAAO,MAAIA,GAAE,MAAI,KAAK,WAAUA;AAAA,IAAC,GAAEH,GAAE,UAAU,kBAAgB,WAAU;AAAC,UAAI,IAAE,KAAK,QAAQ;AAAE,UAAGC,GAAE,KAAK,CAAC,MAAI,MAAG,OAAM,MAAM,8BAA8B;AAAE,aAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,IAAG,MAAG,KAAK,QAAQ;AAAE,aAAO,SAAS,GAAE,EAAE;AAAA,IAAC,GAAED,GAAE,UAAU,uBAAqB,WAAU;AAAC,UAAI,IAAE,KAAK,QAAQ;AAAE,UAAG,EAAE,KAAK,CAAC,MAAI,MAAG,OAAM,MAAM,sBAAsB;AAAE,aAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,IAAG,MAAG,KAAK,QAAQ;AAAE,aAAO,SAAS,GAAE,EAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,WAAU;AAAC,UAAI,IAAE,KAAK,QAAQ;AAAE,cAAO,GAAE;AAAA,QAAC,KAAI;AAAA;AAAA,QACz5C,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAA,QAAS,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAK,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,gBAAM,MAAM,KAAK;AAAA,QAAE;AAAQ,iBAAM,EAAC,MAAK,aAAY,OAAM,EAAE,CAAC,EAAC;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,WAAU;AAAC,cAAO,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAM;AAAA,QAAG;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,WAAU;AAAC,aAAO,KAAK,SAAS,MAAI,OAAK,KAAK,YAAY,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,WAAU;AAAC,aAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,SAAS,GAAE;AAAC,cAAO,MAAI,WAAS,IAAE,IAAG,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA;AAAA,QAC/iB,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAS,iBAAM;AAAA,QAAG;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,SAAO,WAAU;AAAC,aAAO,KAAK,OAAO,KAAG,KAAK,YAAY;AAAA,IAAC,GAAEA,GAAE,UAAU,SAAO,WAAU;AAAC,UAAG,KAAK,mBAAmB,EAAE,QAAM;AAAG,cAAO,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA,QAAK,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAM;AAAA,QAAG;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,WAAU;AAAC,cAAO,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAM;AAAA,QAAG,KAAI;AAAK,kBAAO,KAAK,SAAS,CAAC,GAAE;AAAA,YAAC,KAAI;AAAA,YAAI,KAAI;AAAI,qBAAM;AAAA,YAAG;AAAQ,qBAAM;AAAA,UAAE;AAAA,QAAC,KAAI;AAAI,iBAAO,KAAK,SAAS,CAAC,MAAI,QAAM,KAAK,SAAS,CAAC,MAAI,OAAK,KAAK,SAAS,CAAC,MAAI;AAAA,QAAK;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,WAAU;AAAC,UAAI,IAAE,KAAK,UAAU;AAAE,UAAG;AAAC,eAAO,KAAK,WAAW,IAAE,MAAI;AAAA,MAAM,SAAO,GAAE;AAAC,eAAM;AAAA,MAAE,UAAC;AAAQ,aAAK,aAAa,CAAC;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,qBAAmB,WAAU;AAAC,cAAO,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAK,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA;AAAA,QACx2B,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAS,iBAAM;AAAA,QAAG;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,iBAAe,SAAS,GAAE;AAAC,eAAQ,IAAE,IAAGG,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAI,IAAE,KAAK,QAAQ;AAAE,YAAG,EAAE,KAAK,CAAC,MAAI,MAAG,OAAM,MAAM,+BAA+B;AAAE,aAAG;AAAA,MAAC;AAAC,UAAIE,KAAE,SAAS,GAAE,EAAE;AAAE,aAAM,EAAC,MAAK,aAAY,OAAMA,GAAC;AAAA,IAAC,GAAEL,GAAE,UAAU,WAAS,SAAS,GAAE;AAAC,aAAO,MAAI,WAAS,IAAE,IAAG,KAAK,MAAM,KAAK,MAAI,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,WAAU;AAAC,UAAI,IAAE,KAAK,SAAS,CAAC;AAAE,aAAO,KAAK,YAAY,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,SAAS,GAAE;AAAC,UAAG,MAAI,UAAQ,KAAK,MAAM,KAAK,GAAG,MAAI,EAAE,OAAM,MAAM,gBAAc,IAAE,mBAAiB,KAAK,MAAM,KAAK,GAAG,IAAE,kBAAgB,KAAK,GAAG;AAAE,UAAG,KAAK,OAAK,KAAK,MAAM,OAAO,OAAM,MAAM,yBAAyB;AAAE,WAAK;AAAA,IAAK,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAM,EAAC,OAAM,GAAE,KAAI,KAAK,IAAG;AAAA,IAAC;AAAE,QAAI,IAAE,eAAc,IAAE,SAAQC,KAAE;AAAQ,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,WAAW,CAAC;AAAA,IAAC;AAAC,aAASC,GAAE,GAAE,GAAE;AAAC,QAAE,WAAS,SAAO,EAAE,QAAQ,SAASC,IAAE;AAAC,UAAE,KAAKA,EAAC;AAAA,MAAC,CAAC,IAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAG,EAAE,CAAC,MAAI,KAAG,OAAK,oBAAkB;AAAE,QAAE,CAAC,IAAE;AAAA,IAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAG,MAAI,OAAO,OAAM,MAAM,yCAAyC;AAAA,IAAC;AAAC,aAASC,KAAG;AAAC,YAAM,MAAM,yCAAyC;AAAA,IAAC;AAAC,QAAI,GAAEE,KAAE,CAAC;AAAE,SAAI,IAAE,EAAE,GAAG,GAAE,KAAG,EAAE,GAAG,GAAE,IAAI,CAAAA,GAAE,KAAK,CAAC;AAAE,QAAIC,KAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAOD,EAAC;AAAE,SAAI,IAAE,EAAE,GAAG,GAAE,KAAG,EAAE,GAAG,GAAE,IAAI,CAAAC,GAAE,KAAK,CAAC;AAAE,SAAI,IAAE,EAAE,GAAG,GAAE,KAAG,EAAE,GAAG,GAAE,IAAI,CAAAA,GAAE,KAAK,CAAC;AAAE,QAAI,IAAE,CAAC,EAAE,GAAG,GAAE,EAAE,IAAI,GAAE,EAAE;AAAA,CACrwC,GAAE,EAAE,IAAI,GAAE,EAAE,GAAG,GAAE,EAAE,IAAI,GAAE,EAAE,GAAG,GAAE,EAAE,GAAM,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,QAAQ,CAAC;AAAE,aAAS,IAAG;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,eAAQ,KAAK,GAAE;AAAC,YAAIJ,KAAE,EAAE,CAAC;AAAE,UAAE,eAAe,CAAC,MAAIA,GAAE,SAAO,SAAO,KAAK,MAAMA,EAAC,IAAE,MAAM,QAAQA,EAAC,KAAGA,GAAE,QAAQ,SAAS,GAAE;AAAC,eAAK,MAAM,CAAC;AAAA,QAAC,GAAE,IAAI;AAAA,MAAE;AAAA,IAAC,GAAE,EAAE,UAAU,QAAM,SAAS,GAAE;AAAC,cAAO,EAAE,MAAK;AAAA,QAAC,KAAI;AAAU,eAAK,aAAa,CAAC;AAAE;AAAA,QAAM,KAAI;AAAQ,eAAK,WAAW,CAAC;AAAE;AAAA,QAAM,KAAI;AAAc,eAAK,iBAAiB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAc,eAAK,iBAAiB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAc,eAAK,iBAAiB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAY,eAAK,eAAe,CAAC;AAAE;AAAA,QAAM,KAAI;AAAe,eAAK,kBAAkB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAkB,eAAK,qBAAqB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAY,eAAK,eAAe,CAAC;AAAE;AAAA,QAAM,KAAI;AAAoB,eAAK,uBAAuB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAY,eAAK,eAAe,CAAC;AAAE;AAAA,QAAM,KAAI;AAAM,eAAK,SAAS,CAAC;AAAE;AAAA,QAAM,KAAI;AAAQ,eAAK,WAAW,CAAC;AAAE;AAAA,QAAM,KAAI;AAAqB,eAAK,wBAAwB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAa,eAAK,gBAAgB,CAAC;AAAE;AAAA,MAAK;AAAC,WAAK,cAAc,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,eAAa,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,aAAW,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,oBAAkB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,uBAAqB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,yBAAuB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,WAAS,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,aAAW,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,0BAAwB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAC,cAAaH,IAAE,mBAAkB,GAAE,SAAQ,QAAO;AAAA,EAAC,CAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,yBAAuB,GAAG,eAAa;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,CAAC,GAAE,KAAG,IAAI,GAAG;AAAa,WAAS,GAAGC,IAAE;AAAC,QAAI,IAAEA,GAAE,SAAS;AAAE,QAAG,GAAG,eAAe,CAAC,EAAE,QAAO,GAAG,CAAC;AAAE,QAAI,IAAE,GAAG,QAAQ,CAAC;AAAE,WAAO,GAAG,CAAC,IAAE,GAAE;AAAA,EAAC;AAAC,KAAG,eAAa;AAAG,WAAS,KAAI;AAAC,SAAG,CAAC;AAAA,EAAC;AAAC,KAAG,yBAAuB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,MAAI,KAAG,MAAI,GAAG,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,mBAAiB,GAAG,4BAA0B,GAAG,gCAA8B,GAAG,8BAA4B;AAAO,MAAI,KAAG,GAAG,GAAEQ,MAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAEC,MAAG;AAAgE,KAAG,8BAA4B;AAAA;AAC1hG,WAAS,GAAGV,IAAE,GAAE;AAAC,UAAI,WAAS,IAAE;AAAI,QAAG;AAAC,UAAI,IAAE,GAAG,aAAaA,EAAC,GAAEC,KAAE,GAAG,EAAE,OAAM,CAAC,GAAE,EAAE,MAAM,UAAU;AAAE,aAAOA;AAAA,IAAC,SAAOC,IAAE;AAAC,UAAGA,GAAE,YAAUQ,IAAG,MAAGD,IAAG,cAAc,KAAG,GAAG,+BAA6B,4BAA0BT,GAAE,SAAS,IAAE;AAAA,KACtO;AAAA;AAAA,2FAEwF;AAAA,WAAM;AAAC,YAAI,IAAE;AAAG,cAAI,IAAE;AAAA;AAAA,kGAEhBS,IAAG,YAAY,GAAG,8BAA4B;AAAA,KAC5I,wBAAsBT,GAAE,SAAS,IAAE;AAAA,MAClC,+CAA6C,GAAG,UAAQ;AAAA,KACzD,2EAAyE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAM,CAAC;AAAA,EAAC;AAAC,KAAG,gCAA8B;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,YAAOA,GAAE,MAAK;AAAA,MAAC,KAAI;AAAc,iBAAQC,KAAE,GAAEA,KAAED,GAAE,MAAM,QAAOC,KAAI,IAAGD,GAAE,MAAMC,EAAC,GAAE,GAAE,CAAC;AAAE;AAAA,MAAM,KAAI;AAAc,iBAAQ,IAAED,GAAE,OAAMC,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,cAAIC,KAAE,EAAED,EAAC;AAAE,kBAAOC,GAAE,MAAK;AAAA,YAAC,KAAI;AAAA,YAAY,KAAI;AAAA,YAAqB,KAAI;AAAA,YAAY,KAAI;AAAA,YAAoB,KAAI;AAAA,YAAc,KAAI;AAAA,YAAe,KAAI;AAAkB;AAAA,UAAQ;AAAC,cAAI,IAAEA;AAAE,kBAAO,EAAE,MAAK;AAAA,YAAC,KAAI;AAAY,iBAAG,EAAE,OAAM,GAAE,CAAC;AAAE;AAAA,YAAM,KAAI;AAAM,kBAAG,EAAE,eAAa,KAAG,OAAM,MAAMQ,GAAE;AAAE,cAAAD,IAAG,QAAQ,EAAE,OAAM,SAAS,GAAE;AAAC,oBAAG,OAAO,KAAG,SAAS,IAAG,GAAE,GAAE,CAAC;AAAA,qBAAM;AAAC,sBAAIH,KAAE;AAAE,sBAAG,MAAI,KAAG,UAAQC,KAAED,GAAE,MAAKC,MAAGD,GAAE,IAAGC,KAAI,IAAGA,IAAE,GAAE,CAAC;AAAA,uBAAM;AAAC,6BAAQA,KAAED,GAAE,MAAKC,MAAGD,GAAE,MAAIC,KAAE,GAAG,oBAAmBA,KAAI,IAAGA,IAAE,GAAE,CAAC;AAAE,wBAAGD,GAAE,MAAI,GAAG,mBAAmB,UAAQ,IAAEA,GAAE,QAAM,GAAG,qBAAmBA,GAAE,OAAK,GAAG,oBAAmB,IAAEA,GAAE,IAAG,IAAE,GAAG,yBAAyB,CAAC,GAAE,IAAE,GAAG,yBAAyB,CAAC,GAAEH,KAAE,GAAEA,MAAG,GAAEA,KAAI,GAAEA,EAAC,IAAEA;AAAA,kBAAC;AAAA,gBAAC;AAAA,cAAC,CAAC;AAAE;AAAA,YAAM,KAAI;AAAQ,iBAAG,EAAE,OAAM,GAAE,CAAC;AAAE;AAAA,YAAM;AAAQ,oBAAM,MAAM,sBAAsB;AAAA,UAAC;AAAC,cAAI,IAAE,EAAE,eAAa,UAAQ,EAAE,WAAW,YAAU;AAAE,cAAG,EAAE,SAAO,WAAS,GAAG,CAAC,MAAI,SAAI,EAAE,SAAO,WAAS,MAAI,MAAG;AAAA,QAAK;AAAC;AAAA,MAAM;AAAQ,cAAM,MAAM,uBAAuB;AAAA,IAAC;AAAC,WAAOM,IAAG,OAAO,CAAC;AAAA,EAAC;AAAC,KAAG,4BAA0B;AAAG,WAAS,GAAGT,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,GAAG,yBAAyBD,EAAC;AAAE,MAAEC,EAAC,IAAEA,IAAE,MAAI,QAAI,GAAGD,IAAE,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE,GAAE;AAAC,QAAI,IAAE,OAAO,aAAaA,EAAC,GAAEC,KAAE,EAAE,YAAY;AAAE,QAAGA,OAAI,GAAE;AAAC,UAAI,IAAE,GAAG,yBAAyBA,GAAE,WAAW,CAAC,CAAC;AAAE,QAAE,CAAC,IAAE;AAAA,IAAC,OAAK;AAAC,UAAIC,KAAE,EAAE,YAAY;AAAE,UAAGA,OAAI,GAAE;AAAC,YAAI,IAAE,GAAG,yBAAyBA,GAAE,WAAW,CAAC,CAAC;AAAE,UAAE,CAAC,IAAE;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGF,IAAE,GAAE;AAAC,WAAOS,IAAG,KAAKT,GAAE,OAAM,SAAS,GAAE;AAAC,UAAG,OAAO,KAAG,SAAS,QAAOS,IAAG,SAAS,GAAE,CAAC;AAAE,UAAIR,KAAE;AAAE,aAAOQ,IAAG,KAAK,GAAE,SAAS,GAAE;AAAC,eAAOR,GAAE,QAAM,KAAG,KAAGA,GAAE;AAAA,MAAE,CAAC,MAAI;AAAA,IAAM,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,WAAOA,GAAE,cAAYA,GAAE,WAAW,YAAU,IAAE,OAAGA,GAAE,QAAMS,IAAG,QAAQT,GAAE,KAAK,IAAES,IAAG,MAAMT,GAAE,OAAM,EAAE,IAAE,GAAGA,GAAE,KAAK,IAAE;AAAA,EAAE;AAAC,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAOC,GAAE,kBAAgB,GAAEA,GAAE,QAAM,OAAGA;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,UAAG,KAAK,UAAQ,MAAG;AAAC,gBAAO,EAAE,MAAK;AAAA,UAAC,KAAI;AAAY,iBAAK,eAAe,CAAC;AAAE;AAAA,UAAO,KAAI;AAAoB,iBAAK,uBAAuB,CAAC;AAAE;AAAA,QAAM;AAAC,QAAAD,GAAE,UAAU,cAAc,KAAK,MAAK,CAAC;AAAA,MAAC;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAE;AAAC,MAAAS,IAAG,SAAS,KAAK,iBAAgB,EAAE,KAAK,MAAI,KAAK,QAAM;AAAA,IAAG,GAAE,EAAE,UAAU,WAAS,SAAS,GAAE;AAAC,QAAE,aAAW,GAAG,GAAE,KAAK,eAAe,MAAI,WAAS,KAAK,QAAM,QAAI,GAAG,GAAE,KAAK,eAAe,MAAI,WAAS,KAAK,QAAM;AAAA,IAAG,GAAE;AAAA,EAAC,EAAE,GAAG,iBAAiB;AAAE,WAAS,GAAGT,IAAE,GAAE;AAAC,QAAG,aAAa,QAAO;AAAC,UAAI,IAAE,GAAG,aAAa,CAAC,GAAEC,KAAE,IAAI,GAAGD,EAAC;AAAE,aAAOC,GAAE,MAAM,CAAC,GAAEA,GAAE;AAAA,IAAK,MAAM,QAAOQ,IAAG,KAAK,GAAE,SAAS,GAAE;AAAC,aAAOA,IAAG,SAAST,IAAE,EAAE,WAAW,CAAC,CAAC;AAAA,IAAC,CAAC,MAAI;AAAA,EAAM;AAAC,KAAG,mBAAiB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,MAAI,KAAG,KAAG,EAAE,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,2BAAyB,EAAE,qBAAmB,EAAE,6BAA2B,EAAE,gCAA8B,EAAE,iBAAe,EAAE,kBAAgB,EAAE,mBAAiB,EAAE,8BAA4B,EAAE,uBAAqB,EAAE,gBAAc,EAAE,kBAAgB,EAAE,0BAAwB,EAAE,0BAAwB,EAAE,uBAAqB,EAAE,wBAAsB,EAAE,uBAAqB,EAAE,yBAAuB,EAAE,wBAAsB,EAAE,uBAAqB,EAAE,sBAAoB,EAAE,sBAAoB,EAAE,mBAAiB,EAAE,oBAAkB,EAAE,eAAa,EAAE,gBAAc,EAAE,iBAAe,EAAE,QAAM,EAAE,eAAa;AAAO,MAAI,KAAG,GAAG,GAAEU,KAAE,GAAG,GAAE,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAEC,MAAG;AAAU,IAAE,eAAa;AAAc,IAAE,QAAM;AAAQ,IAAE,iBAAe,OAAO,IAAI,OAAO,MAAM,EAAE,UAAQ;AAAU,WAAS,KAAI;AAAC,MAAE,iBAAe;AAAA,EAAE;AAAC,IAAE,gBAAc;AAAG,WAAS,KAAI;AAAC,MAAE,iBAAe;AAAA,EAAE;AAAC,IAAE,eAAa;AAAG,WAAS,GAAGZ,IAAE,GAAE;AAAC,QAAE,EAAE,SAAS,GAAE,EAAC,WAAU,EAAE,gBAAe,OAAM,OAAG,UAAS,OAAG,kBAAiB,QAAO,0BAAyB,CAAC,MAAK;AAAA,CACvrI,GAAE,QAAO,SAASK,IAAEG,IAAE;AAAC,aAAOA,GAAE;AAAA,IAAC,EAAC,CAAC;AAAE,QAAI,IAAE,EAAE;AAAO,MAAE,mCAAkC,WAAU;AAAC,SAAG;AAAA,IAAC,CAAC;AAAE,QAAIP;AAAE,MAAE,mBAAkB,WAAU;AAAC,MAAAA,KAAE,EAAE,OAAOD,IAAE,SAASK,IAAE;AAAC,eAAOA,GAAEO,GAAE,MAAID,GAAE,MAAM;AAAA,MAAE,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,OAAGT;AAAE,MAAE,sBAAqB,WAAU;AAAC,UAAE,OAAGA,KAAE,EAAE,IAAID,IAAE,SAASI,IAAE;AAAC,YAAIG,KAAEH,GAAEO,GAAE;AAAE,YAAG,EAAE,SAASJ,EAAC,GAAE;AAAC,cAAIK,KAAEL,GAAE;AAAO,iBAAOK,GAAE,WAAS,KAAGA,OAAI,OAAKA,OAAI,OAAKA,OAAI,OAAK,CAACL,GAAE,aAAWK,KAAEA,GAAE,WAAS,KAAGA,GAAE,CAAC,MAAI,QAAM,CAAC,EAAE,SAAS,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAEA,GAAE,CAAC,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,YAAU,GAAGL,EAAC,IAAE,GAAGA,EAAC;AAAA,QAAC,OAAK;AAAC,cAAG,EAAE,WAAWA,EAAC,EAAE,QAAO,IAAE,MAAG,EAAC,MAAKA,GAAC;AAAE,cAAG,EAAE,IAAIA,IAAE,MAAM,EAAE,QAAO,IAAE,MAAGA;AAAE,cAAG,OAAOA,MAAG,UAAS;AAAC,gBAAGA,GAAE,WAAS,EAAE,QAAOA;AAAE,gBAAI,IAAEA,GAAE,QAAQ,uBAAsB,MAAM,GAAEM,MAAG,IAAI,OAAO,CAAC;AAAE,mBAAO,EAAE,YAAU,GAAGA,GAAE,IAAE,GAAGA,GAAE;AAAA,UAAC,MAAM,OAAM,MAAM,sBAAsB;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,GAAE,GAAEV,IAAE,GAAEE;AAAE,MAAE,gBAAe,WAAU;AAAC,UAAE,EAAE,IAAIL,IAAE,SAASI,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAY,CAAC,GAAE,IAAE,EAAE,IAAIJ,IAAE,SAASI,IAAE;AAAC,YAAIG,KAAEH,GAAE;AAAM,YAAGG,OAAIG,GAAE,MAAM,SAAQ;AAAC,cAAG,EAAE,SAASH,EAAC,EAAE,QAAOA;AAAE,cAAG,EAAE,YAAYA,EAAC,EAAE,QAAM;AAAG,gBAAM,MAAM,sBAAsB;AAAA,QAAC;AAAA,MAAC,CAAC,GAAEJ,KAAE,EAAE,IAAIH,IAAE,SAASI,IAAE;AAAC,YAAIG,KAAEH,GAAE;AAAW,YAAGG,IAAE;AAAC,cAAIK,KAAE,EAAE,QAAQZ,IAAEO,EAAC;AAAE,iBAAOK;AAAA,QAAC;AAAA,MAAC,CAAC,GAAE,IAAE,EAAE,IAAIZ,IAAE,SAASI,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAS,CAAC,GAAEC,KAAE,EAAE,IAAIL,IAAE,SAASI,IAAE;AAAC,eAAO,EAAE,IAAIA,IAAE,UAAU;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAIE;AAAE,MAAE,4BAA2B,WAAU;AAAC,UAAIF,KAAE,GAAG,EAAE,wBAAwB;AAAE,MAAAE,KAAE,EAAE,IAAIN,IAAE,SAASO,IAAE;AAAC,eAAM;AAAA,MAAE,CAAC,GAAE,EAAE,qBAAmB,iBAAeD,KAAE,EAAE,IAAIN,IAAE,SAASO,IAAE;AAAC,YAAG,EAAE,IAAIA,IAAE,aAAa,EAAE,QAAOA,GAAE;AAAY,YAAG,GAAGA,IAAEH,EAAC,MAAI,MAAG,QAAO,GAAG,iBAAiBA,IAAEG,GAAE,OAAO;AAAA,MAAC,CAAC;AAAA,IAAE,CAAC;AAAE,QAAI,GAAE,GAAE,GAAE;AAAE,MAAE,mBAAkB,WAAU;AAAC,UAAE,EAAE,IAAIP,IAAE,EAAE,GAAE,IAAE,EAAE,IAAIC,IAAE,EAAE,GAAE,IAAE,EAAE,OAAOD,IAAE,SAASI,IAAEG,IAAE;AAAC,YAAIK,KAAEL,GAAE;AAAM,eAAO,EAAE,SAASK,EAAC,KAAGA,OAAIF,GAAE,MAAM,YAAUN,GAAEQ,EAAC,IAAE,CAAC,IAAGR;AAAA,MAAC,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAIH,IAAE,SAASG,IAAEG,IAAE;AAAC,eAAM,EAAC,SAAQN,GAAEM,EAAC,GAAE,WAAUJ,GAAEI,EAAC,GAAE,mBAAkBD,GAAEC,EAAC,GAAE,UAAS,EAAEA,EAAC,GAAE,OAAM,EAAEA,EAAC,GAAE,OAAM,EAAEA,EAAC,GAAE,MAAK,EAAEA,EAAC,GAAE,KAAIF,GAAEE,EAAC,GAAE,cAAa,EAAEA,EAAC,GAAE,WAAUP,GAAEO,EAAC,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAIL,KAAE,MAAG,IAAE,CAAC;AAAE,WAAO,EAAE,YAAU,EAAE,2BAA0B,WAAU;AAAC,UAAE,EAAE,OAAOF,IAAE,SAASI,IAAEG,IAAEK,IAAE;AAAC,YAAG,OAAOL,GAAE,WAAS,UAAS;AAAC,cAAI,IAAEA,GAAE,QAAQ,WAAW,CAAC,GAAEM,MAAG,GAAG,CAAC;AAAE,aAAGT,IAAES,KAAG,EAAED,EAAC,CAAC;AAAA,QAAC,WAAS,EAAE,QAAQL,GAAE,gBAAgB,GAAE;AAAC,cAAI;AAAG,YAAE,QAAQA,GAAE,kBAAiB,SAAS,IAAG;AAAC,gBAAIO,KAAE,OAAO,MAAI,WAAS,GAAG,WAAW,CAAC,IAAE,IAAGC,MAAG,GAAGD,EAAC;AAAE,mBAAKC,QAAK,KAAGA,KAAG,GAAGX,IAAEW,KAAG,EAAEH,EAAC,CAAC;AAAA,UAAE,CAAC;AAAA,QAAC,WAAS,EAAE,SAASL,GAAE,OAAO,EAAE,KAAGA,GAAE,QAAQ,QAAQ,CAAAL,KAAE,OAAG,EAAE,uBAAqB,EAAE,YAAY,KAAG,GAAG,+BAA6B,0BAAwBK,GAAE,QAAQ,SAAS,IAAE;AAAA,KAC9zE;AAAA;AAAA,gGAE6F;AAAA,aAAM;AAAC,cAAIS,KAAE,GAAG,8BAA8BT,GAAE,SAAQ,EAAE,mBAAmB;AAAE,YAAE,QAAQS,EAAC,MAAId,KAAE,QAAI,EAAE,QAAQc,IAAE,SAAS,IAAG;AAAC,eAAGZ,IAAE,IAAG,EAAEQ,EAAC,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC;AAAA,YAAM,GAAE,uBAAqB,EAAE,YAAY,KAAG,GAAG,+BAA6B,kBAAgBL,GAAE,OAAK;AAAA,KAC9U;AAAA,+FAC4F,GAAEL,KAAE;AAAG,eAAOE;AAAA,MAAC,GAAE,CAAC,CAAC;AAAA,IAAC,CAAC,GAAE,EAAE,gBAAe,WAAU;AAAC,UAAE,EAAE,UAAU,CAAC;AAAA,IAAC,CAAC,GAAE,EAAC,aAAY,GAAE,oBAAmB,GAAE,8BAA6B,GAAE,WAAU,GAAE,gBAAeF,GAAC;AAAA,EAAC;AAAC,IAAE,oBAAkB;AAAG,WAAS,GAAGH,IAAE,GAAE;AAAC,QAAI,IAAE,CAAC,GAAEC,KAAE,GAAGD,EAAC;AAAE,QAAE,EAAE,OAAOC,GAAE,MAAM;AAAE,QAAI,IAAE,GAAGA,GAAE,KAAK,GAAEC,KAAE,EAAE;AAAM,WAAO,IAAE,EAAE,OAAO,EAAE,MAAM,GAAE,IAAE,EAAE,OAAO,GAAGA,EAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAGA,EAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAGA,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAGA,EAAC,CAAC,GAAE;AAAA,EAAC;AAAC,IAAE,mBAAiB;AAAG,WAAS,GAAGF,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE;AAAC,aAAO,EAAE,SAASA,GAAEW,GAAE,CAAC;AAAA,IAAC,CAAC;AAAE,WAAO,IAAE,EAAE,OAAO,GAAG,CAAC,CAAC,GAAE,IAAE,EAAE,OAAOM,IAAG,CAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAG,CAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAG,CAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAG,CAAC,CAAC,GAAE;AAAA,EAAC;AAAC,WAAS,GAAGlB,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAM,CAAC,EAAE,IAAI,GAAEY,GAAE;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiB,EAAE,OAAK,wCAAuC,MAAKD,GAAE,yBAAyB,iBAAgB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC,GAAEV,KAAE,EAAE,WAAWD,IAAE,CAAC;AAAE,WAAM,EAAC,QAAO,GAAE,OAAMC,GAAC;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,EAAEU,GAAE;AAAE,aAAM,CAAC,EAAE,SAASV,EAAC,KAAG,CAAC,EAAE,WAAWA,EAAC,KAAG,CAAC,EAAE,IAAIA,IAAE,MAAM,KAAG,CAAC,EAAE,SAASA,EAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiB,EAAE,OAAK,2JAA0J,MAAKS,GAAE,yBAAyB,iBAAgB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC,GAAEV,KAAE,EAAE,WAAWD,IAAE,CAAC;AAAE,WAAM,EAAC,QAAO,GAAE,OAAMC,GAAC;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAG,MAAI,KAAG;AAAY,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,SAAS,GAAE;AAAC,SAAGE,IAAE,CAAC;AAAE,eAASA,KAAG;AAAC,YAAI,IAAE,MAAI,QAAM,EAAE,MAAM,MAAK,SAAS,KAAG;AAAK,eAAO,EAAE,QAAM,OAAG;AAAA,MAAC;AAAC,aAAOA,GAAE,UAAU,iBAAe,SAAS,GAAE;AAAC,aAAK,QAAM;AAAA,MAAE,GAAEA;AAAA,IAAC,EAAE,GAAG,iBAAiB,GAAE,IAAE,EAAE,OAAOF,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,EAAEU,GAAE;AAAE,UAAG;AAAC,YAAI,IAAE,GAAG,aAAaV,EAAC,GAAE,IAAE,IAAI;AAAE,eAAO,EAAE,MAAM,CAAC,GAAE,EAAE;AAAA,MAAK,SAAOE,IAAE;AAAC,eAAO,GAAG,KAAKF,GAAE,MAAM;AAAA,MAAC;AAAA,IAAC,CAAC,GAAED,KAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,EAAC,SAAQ;AAAA,mBAC1yD,EAAE,OAAK;AAAA,iFACwD,MAAKU,GAAE,yBAAyB,kBAAiB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAOV;AAAA,EAAC;AAAC,IAAE,uBAAqB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE;AAAC,UAAI,IAAEA,GAAEW,GAAE;AAAE,aAAO,EAAE,KAAK,EAAE;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAASX,IAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiBA,GAAE,OAAK,sDAAqD,MAAKU,GAAE,yBAAyB,qBAAoB,YAAW,CAACV,EAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,IAAE,wBAAsB;AAAG,MAAI,KAAG;AAAiB,WAASiB,IAAGlB,IAAE;AAAC,QAAI,IAAE,SAAS,GAAE;AAAC,SAAGE,IAAE,CAAC;AAAE,eAASA,KAAG;AAAC,YAAI,IAAE,MAAI,QAAM,EAAE,MAAM,MAAK,SAAS,KAAG;AAAK,eAAO,EAAE,QAAM,OAAG;AAAA,MAAC;AAAC,aAAOA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,aAAK,QAAM;AAAA,MAAE,GAAEA;AAAA,IAAC,EAAE,GAAG,iBAAiB,GAAE,IAAE,EAAE,OAAOF,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,EAAEU,GAAE;AAAE,UAAG;AAAC,YAAI,IAAE,GAAG,aAAaV,EAAC,GAAE,IAAE,IAAI;AAAE,eAAO,EAAE,MAAM,CAAC,GAAE,EAAE;AAAA,MAAK,SAAOE,IAAE;AAAC,eAAO,GAAG,KAAKF,GAAE,MAAM;AAAA,MAAC;AAAA,IAAC,CAAC,GAAED,KAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,EAAC,SAAQ;AAAA,mBACn2B,EAAE,OAAK;AAAA,yFACgE,MAAKU,GAAE,yBAAyB,kBAAiB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAOV;AAAA,EAAC;AAAC,IAAE,yBAAuBiB;AAAG,WAAS,GAAGlB,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE;AAAC,UAAI,IAAEA,GAAEW,GAAE;AAAE,aAAO,aAAa,WAAS,EAAE,aAAW,EAAE;AAAA,IAAO,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAASX,IAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiBA,GAAE,OAAK,qEAAoE,MAAKU,GAAE,yBAAyB,yBAAwB,YAAW,CAACV,EAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,IAAE,uBAAqB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAIA,IAAE,SAASE,IAAE;AAAC,aAAO,EAAE,OAAOF,IAAE,SAAS,GAAE,GAAE;AAAC,eAAOE,GAAE,QAAQ,WAAS,EAAE,QAAQ,UAAQ,CAAC,EAAE,SAAS,GAAE,CAAC,KAAG,EAAE,YAAUS,GAAE,MAAM,OAAK,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,MAAC,GAAE,CAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAE,EAAE,QAAQ,CAAC;AAAE,QAAIV,KAAE,EAAE,OAAO,GAAE,SAASC,IAAE;AAAC,aAAOA,GAAE,SAAO;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAID,IAAE,SAASC,IAAE;AAAC,UAAI,IAAE,EAAE,IAAIA,IAAE,SAASE,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAI,CAAC,GAAE,IAAE,EAAE,MAAMF,EAAC,EAAE;AAAQ,aAAM,EAAC,SAAQ,+BAA6B,IAAE,QAAM,wDAAsD,EAAE,KAAK,IAAI,IAAE,QAAO,MAAKS,GAAE,yBAAyB,0BAAyB,YAAWT,GAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,IAAE,wBAAsB;AAAG,WAAS,GAAGF,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE;AAAC,UAAG,CAAC,EAAE,IAAIA,IAAE,OAAO,EAAE,QAAM;AAAG,UAAI,IAAEA,GAAE;AAAM,aAAO,MAAIU,GAAE,MAAM,WAAS,MAAIA,GAAE,MAAM,MAAI,CAAC,EAAE,SAAS,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAASV,IAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiBA,GAAE,OAAK,iEAAgE,MAAKU,GAAE,yBAAyB,0BAAyB,YAAW,CAACV,EAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,IAAE,uBAAqB;AAAG,WAAS,GAAGD,IAAE,GAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAO,EAAE,cAAY,UAAQ,CAAC,EAAE,SAAS,GAAE,EAAE,SAAS;AAAA,IAAC,CAAC,GAAEC,KAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,UAAIC,KAAE,mBAAiB,EAAE,OAAK,gEAA8D,EAAE,YAAU;AAAyB,aAAM,EAAC,SAAQA,IAAE,MAAKS,GAAE,yBAAyB,0BAAyB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAOV;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAE;AAAQ,aAAO,MAAIS,GAAE,MAAM,OAAK,EAAE,SAAS,CAAC,IAAEV,GAAE,KAAK,EAAC,KAAI,GAAE,KAAIC,IAAE,WAAU,EAAC,CAAC,IAAE,EAAE,SAAS,CAAC,KAAG,GAAG,CAAC,KAAGD,GAAE,KAAK,EAAC,KAAI,EAAE,QAAO,KAAIC,IAAE,WAAU,EAAC,CAAC,IAAGD;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAO,EAAE,QAAQD,IAAE,SAASC,IAAE,GAAE;AAAC,QAAE,QAAQ,GAAE,SAASC,IAAE;AAAC,YAAI,IAAEA,GAAE,KAAI,IAAEA,GAAE,KAAIE,KAAEF,GAAE;AAAU,YAAG,IAAE,KAAG,GAAG,GAAED,GAAE,OAAO,GAAE;AAAC,cAAI,IAAE,cAAYG,GAAE,OAAK;AAAA,KAC9rE,+CAA6CH,GAAE,OAAK,QAAM;AAAA;AACiB,YAAE,KAAK,EAAC,SAAQ,GAAE,MAAKU,GAAE,yBAAyB,qBAAoB,YAAW,CAACV,IAAEG,EAAC,EAAC,CAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGJ,IAAE,GAAE;AAAC,QAAG,EAAE,SAAS,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,KAAKA,EAAC;AAAE,aAAO,MAAI,QAAM,EAAE,UAAQ;AAAA,IAAC,OAAK;AAAC,UAAG,EAAE,WAAW,CAAC,EAAE,QAAO,EAAEA,IAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,UAAG,EAAE,IAAI,GAAE,MAAM,EAAE,QAAO,EAAE,KAAKA,IAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,UAAG,OAAO,KAAG,SAAS,QAAO,MAAIA;AAAE,YAAM,MAAM,sBAAsB;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAE,CAAC,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,WAAO,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,aAAOA,GAAE,OAAO,QAAQ,CAAC,MAAI;AAAA,IAAE,CAAC,MAAI;AAAA,EAAM;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE,aAAW,MAAI;AAAG,WAAO,IAAI,OAAO,SAAOA,GAAE,SAAO,KAAI,CAAC;AAAA,EAAC;AAAC,IAAE,kBAAgB;AAAG,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE,aAAW,OAAK;AAAI,WAAO,IAAI,OAAO,KAAGA,GAAE,QAAO,CAAC;AAAA,EAAC;AAAC,IAAE,gBAAc;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC;AAAE,WAAO,EAAE,IAAID,IAAE,EAAE,YAAY,KAAGC,GAAE,KAAK,EAAC,SAAQ,wDAAsD,EAAE,eAAa;AAAA,GACn6B,MAAKU,GAAE,yBAAyB,sCAAqC,CAAC,GAAE,EAAE,IAAIX,IAAE,EAAE,KAAK,KAAGC,GAAE,KAAK,EAAC,SAAQ,wDAAsD,EAAE,QAAM;AAAA,GACxK,MAAKU,GAAE,yBAAyB,wCAAuC,CAAC,GAAE,EAAE,IAAIX,IAAE,EAAE,KAAK,KAAG,EAAE,IAAIA,IAAE,EAAE,YAAY,KAAG,CAAC,EAAE,IAAIA,GAAE,OAAMA,GAAE,WAAW,KAAGC,GAAE,KAAK,EAAC,SAAQ,oDAAkD,EAAE,eAAa,QAAMD,GAAE,cAAY;AAAA,GACzP,MAAKW,GAAE,yBAAyB,mDAAkD,CAAC,GAAE,EAAE,IAAIX,IAAE,EAAE,KAAK,KAAG,EAAE,QAAQA,GAAE,OAAM,SAAS,GAAEE,IAAE;AAAC,QAAE,QAAQ,GAAE,SAAS,GAAE,GAAE;AAAC,UAAE,YAAY,CAAC,KAAGD,GAAE,KAAK,EAAC,SAAQ,wEAAsE,MAAIC,KAAE,kBAAgB,IAAE;AAAA,IAChS,MAAKS,GAAE,yBAAyB,0CAAyC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAEV;AAAA,EAAC;AAAC,IAAE,uBAAqB;AAAG,WAAS,GAAGD,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC,GAAE,IAAE,OAAGC,KAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAUF,GAAE,OAAM,SAASI,IAAE;AAAC,aAAOA;AAAA,IAAC,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,OAAOF,IAAE,SAASE,IAAE;AAAC,aAAOA,GAAEQ,GAAE,MAAID,GAAE,MAAM;AAAA,IAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,WAAO,KAAG,EAAE,QAAQ,GAAE,SAASP,IAAE;AAAC,UAAI,IAAE,GAAGA,IAAE,CAAC;AAAE,UAAG,MAAI,OAAG;AAAC,YAAIE,KAAEa,IAAGf,IAAE,CAAC,GAAEG,KAAE,EAAC,SAAQD,IAAE,MAAK,EAAE,OAAM,WAAUF,GAAC;AAAE,QAAAH,GAAE,KAAKM,EAAC;AAAA,MAAC,MAAM,GAAE,IAAIH,IAAE,aAAa,IAAEA,GAAE,gBAAc,SAAK,IAAE,QAAI,GAAG,iBAAiB,GAAEA,GAAE,OAAO,MAAI,IAAE;AAAA,IAAG,CAAC,GAAE,KAAG,CAAC,KAAGH,GAAE,KAAK,EAAC,SAAQ;AAAA;AAAA;AAAA;AAAA,gBAIpf,MAAKU,GAAE,yBAAyB,qBAAoB,CAAC,GAAEV;AAAA,EAAC;AAAC,IAAE,8BAA4B;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,EAAE,KAAKA,EAAC;AAAE,WAAO,EAAE,QAAQ,GAAE,SAASC,IAAE;AAAC,UAAI,IAAED,GAAEC,EAAC;AAAE,UAAG,EAAE,QAAQ,CAAC,EAAE,GAAEA,EAAC,IAAE,CAAC;AAAA,UAAO,OAAM,MAAM,sBAAsB;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,IAAE,mBAAiB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAQ,QAAG,EAAE,SAAS,CAAC,EAAE,QAAM;AAAG,QAAG,EAAE,WAAW,CAAC,EAAE,QAAM;AAAG,QAAG,EAAE,IAAI,GAAE,MAAM,EAAE,QAAM;AAAG,QAAG,EAAE,SAAS,CAAC,EAAE,QAAM;AAAG,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,IAAE,kBAAgB;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,SAASA,EAAC,KAAGA,GAAE,WAAS,IAAEA,GAAE,WAAW,CAAC,IAAE;AAAA,EAAE;AAAC,IAAE,iBAAe;AAAG,IAAE,gCAA8B,EAAC,MAAK,SAASA,IAAE;AAAC,aAAQ,IAAEA,GAAE,QAAO,IAAE,KAAK,WAAU,IAAE,GAAE,KAAI;AAAC,UAAIC,KAAED,GAAE,WAAW,CAAC;AAAE,UAAGC,OAAI,GAAG,QAAO,KAAK,YAAU,IAAE,GAAE;AAAG,UAAGA,OAAI,GAAG,QAAOD,GAAE,WAAW,IAAE,CAAC,MAAI,KAAG,KAAK,YAAU,IAAE,IAAE,KAAK,YAAU,IAAE,GAAE;AAAA,IAAE;AAAC,WAAM;AAAA,EAAE,GAAE,WAAU,EAAC;AAAE,WAAS,GAAGA,IAAE,GAAE;AAAC,QAAG,EAAE,IAAIA,IAAE,aAAa,EAAE,QAAM;AAAG,QAAG,EAAE,SAASA,GAAE,OAAO,GAAE;AAAC,UAAG;AAAC,WAAG,iBAAiB,GAAEA,GAAE,OAAO;AAAA,MAAC,SAAO,GAAE;AAAC,eAAM,EAAC,OAAMW,GAAE,yBAAyB,qBAAoB,QAAO,EAAE,QAAO;AAAA,MAAC;AAAC,aAAM;AAAA,IAAE,OAAK;AAAC,UAAG,EAAE,SAASX,GAAE,OAAO,EAAE,QAAM;AAAG,UAAG,GAAGA,EAAC,EAAE,QAAM,EAAC,OAAMW,GAAE,yBAAyB,kBAAiB;AAAE,YAAM,MAAM,sBAAsB;AAAA,IAAC;AAAA,EAAC;AAAC,WAASQ,IAAGnB,IAAE,GAAE;AAAC,QAAG,EAAE,UAAQW,GAAE,yBAAyB,oBAAoB,QAAM;AAAA,KACtuC,6BAA2BX,GAAE,OAAK;AAAA,MACjC,mBAAiB,EAAE,SAAO;AAAA,KAC3B;AAAqG,QAAG,EAAE,UAAQW,GAAE,yBAAyB,kBAAkB,QAAM;AAAA,KACrK,6BAA2BX,GAAE,OAAK;AAAA,KAClC;AAAmG,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,IAAE,6BAA2BmB;AAAG,WAAS,GAAGnB,IAAE;AAAC,QAAI,IAAE,EAAE,IAAIA,IAAE,SAAS,GAAE;AAAC,aAAO,EAAE,SAAS,CAAC,KAAG,EAAE,SAAO,IAAE,EAAE,WAAW,CAAC,IAAE;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,IAAAA,GAAE,CAAC,MAAI,SAAOA,GAAE,CAAC,IAAE,CAAC,CAAC,IAAEA,GAAE,CAAC,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,IAAE,qBAAmB;AAAI,MAAIoB,MAAG,CAAC;AAAE,WAAS,GAAGpB,IAAE;AAAC,WAAOA,KAAE,EAAE,qBAAmBA,KAAEoB,IAAGpB,EAAC;AAAA,EAAC;AAAC,IAAE,2BAAyB;AAAG,WAAS,KAAI;AAAC,QAAG,EAAE,QAAQoB,GAAE,GAAE;AAAC,MAAAA,MAAG,IAAI,MAAM,KAAK;AAAE,eAAQpB,KAAE,GAAEA,KAAE,OAAMA,KAAI,CAAAoB,IAAGpB,EAAC,IAAEA,KAAE,MAAI,MAAI,CAAC,EAAEA,KAAE,OAAKA;AAAA,IAAC;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,cAAY,EAAE,qCAAmC,EAAE,kCAAgC,EAAE,wBAAsB,EAAE,sBAAoB,EAAE,gCAA8B,EAAE,0BAAwB,EAAE,6BAA2B,EAAE,0BAAwB,EAAE,mBAAiB,EAAE,oBAAkB,EAAE,kBAAgB,EAAE,oBAAkB,EAAE,qCAAmC,EAAE,yBAAuB;AAAO,MAAI,IAAE,EAAE;AAAE,WAAS,GAAGC,IAAE,GAAE;AAAC,QAAI,IAAEA,GAAE;AAAa,WAAO,MAAI,EAAE,eAAa,OAAG,EAAE,aAAW,QAAI,EAAE,mBAAmB,CAAC,MAAI;AAAA,EAAE;AAAC,IAAE,yBAAuB;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,WAAOA,GAAE,iBAAe,EAAE;AAAA,EAAY;AAAC,IAAE,qCAAmC;AAAG,IAAE,oBAAkB;AAAE,IAAE,kBAAgB,CAAC;AAAE,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAE,GAAGA,EAAC;AAAE,OAAG,CAAC,GAAE,GAAG,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,QAAQ,GAAE,SAAS,GAAE;AAAC,QAAE,WAAS,EAAE,gBAAgB,SAAO;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,IAAE,oBAAkB;AAAG,WAAS,GAAGA,IAAE;AAAC,aAAQ,IAAE,EAAE,SAASA,EAAC,GAAE,IAAEA,IAAEC,KAAE,MAAGA,MAAG;AAAC,UAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAE,SAASC,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAU,CAAC,CAAC,CAAC;AAAE,UAAI,IAAE,EAAE,WAAW,GAAE,CAAC;AAAE,UAAE,EAAE,OAAO,CAAC,GAAE,EAAE,QAAQ,CAAC,IAAED,KAAE,QAAG,IAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,IAAE,mBAAiB;AAAG,WAAS,GAAGD,IAAE;AAAC,MAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,SAAG,CAAC,MAAI,EAAE,gBAAgB,EAAE,iBAAiB,IAAE,GAAE,EAAE,eAAa,EAAE,sBAAqB,GAAG,CAAC,KAAG,CAAC,EAAE,QAAQ,EAAE,UAAU,MAAI,EAAE,aAAW,CAAC,EAAE,UAAU,IAAG,GAAG,CAAC,MAAI,EAAE,aAAW,CAAC,IAAG,GAAG,CAAC,MAAI,EAAE,kBAAgB,CAAC,IAAG,GAAG,CAAC,MAAI,EAAE,qBAAmB,CAAC;AAAA,IAAE,CAAC;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGA,IAAE;AAAC,MAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,QAAE,kBAAgB,CAAC,GAAE,EAAE,QAAQ,EAAE,oBAAmB,SAAS,GAAEC,IAAE;AAAC,UAAE,gBAAgB,KAAK,EAAE,gBAAgBA,EAAC,EAAE,YAAY;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,IAAE,6BAA2B;AAAG,WAAS,GAAGD,IAAE;AAAC,MAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,SAAG,CAAC,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,MAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,QAAE,mBAAmB,EAAE,YAAY,IAAE;AAAA,IAAE,CAAC,GAAE,EAAE,QAAQ,EAAE,YAAW,SAAS,GAAE;AAAC,UAAIC,KAAED,GAAE,OAAO,CAAC;AAAE,QAAE,SAASC,IAAE,CAAC,KAAG,GAAGA,IAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,IAAE,gCAA8B;AAAG,WAAS,GAAGD,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,cAAc;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,YAAY;AAAA,EAAC;AAAC,IAAE,wBAAsB;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,iBAAiB;AAAA,EAAC;AAAC,IAAE,kCAAgC;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,oBAAoB;AAAA,EAAC;AAAC,IAAE,qCAAmC;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,cAAc;AAAA,EAAC;AAAC,IAAE,cAAY;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,4BAA0B;AAAO,KAAG,4BAA0B,EAAC,kCAAiC,SAASC,IAAE;AAAC,WAAM,yDAAuDA,GAAE,QAAM;AAAA,EAA4B,GAAE,kCAAiC,SAASA,IAAE,GAAE,GAAEC,IAAE,GAAE;AAAC,WAAM,6BAA2BD,GAAE,OAAO,CAAC,IAAE,mBAAiB,IAAE,OAAK,cAAY,IAAE;AAAA,EAAe,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,QAAM,GAAG,2BAAyB;AAAO,MAAI,KAAG,GAAG,GAAE,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE;AAAG,GAAC,SAASC,IAAE;AAAC,IAAAA,GAAEA,GAAE,kBAAgB,CAAC,IAAE,mBAAkBA,GAAEA,GAAE,kBAAgB,CAAC,IAAE,mBAAkBA,GAAEA,GAAE,mBAAiB,CAAC,IAAE,oBAAmBA,GAAEA,GAAE,0BAAwB,CAAC,IAAE,2BAA0BA,GAAEA,GAAE,2BAAyB,CAAC,IAAE,4BAA2BA,GAAEA,GAAE,2BAAyB,CAAC,IAAE,4BAA2BA,GAAEA,GAAE,2BAAyB,CAAC,IAAE,4BAA2BA,GAAEA,GAAE,wCAAsC,CAAC,IAAE,yCAAwCA,GAAEA,GAAE,0CAAwC,CAAC,IAAE,2CAA0CA,GAAEA,GAAE,qDAAmD,CAAC,IAAE,sDAAqDA,GAAEA,GAAE,4CAA0C,EAAE,IAAE,6CAA4CA,GAAEA,GAAE,mBAAiB,EAAE,IAAE,oBAAmBA,GAAEA,GAAE,sBAAoB,EAAE,IAAE,uBAAsBA,GAAEA,GAAE,uBAAqB,EAAE,IAAE,wBAAuBA,GAAEA,GAAE,sBAAoB,EAAE,IAAE,uBAAsBA,GAAEA,GAAE,sBAAoB,EAAE,IAAE,uBAAsBA,GAAEA,GAAE,oBAAkB,EAAE,IAAE;AAAA,EAAmB,GAAG,KAAG,GAAG,6BAA2B,GAAG,2BAAyB,CAAC,EAAE;AAAE,MAAI,KAAG,EAAC,+BAA8B,OAAG,kBAAiB,QAAO,wBAAuB,aAAY,0BAAyB,CAAC;AAAA,GACvjJ,IAAI,GAAE,qBAAoB,OAAG,UAAS,OAAG,sBAAqB,GAAG,2BAA0B,eAAc,OAAG,iBAAgB,MAAE;AAAE,SAAO,OAAO,EAAE;AAAE,MAAI,KAAG,WAAU;AAAC,aAASA,GAAE,GAAE,GAAE;AAAC,UAAIC,KAAE;AAAK,UAAG,MAAI,WAAS,IAAE,KAAI,KAAK,kBAAgB,GAAE,KAAK,wBAAsB,CAAC,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,qBAAmB,CAAC,GAAE,KAAK,+BAA6B,CAAC,GAAE,KAAK,QAAM,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,SAAO,QAAO,KAAK,kBAAgB,MAAG,KAAK,gBAAc,MAAG,KAAK,YAAU,OAAG,KAAK,qBAAmB,CAAC,GAAE,OAAO,KAAG,UAAU,OAAM,MAAM;AAAA,8CAC7e;AAAE,WAAK,SAAO,EAAE,MAAM,IAAG,CAAC;AAAE,UAAI,IAAE,KAAK,OAAO;AAAc,YAAI,QAAI,KAAK,oBAAkB,UAAS,KAAK,gBAAc,QAAI,OAAO,KAAG,aAAW,KAAK,oBAAkB,GAAE,KAAK,gBAAc,OAAI,KAAK,kBAAgB,IAAG,KAAK,WAAW,qBAAoB,WAAU;AAAC,YAAIC,IAAE,IAAE;AAAG,QAAAD,GAAE,WAAW,yBAAwB,WAAU;AAAC,cAAGA,GAAE,OAAO,2BAAyB,GAAG,uBAAuB,CAAAA,GAAE,OAAO,yBAAuB,GAAG;AAAA,mBAAsCA,GAAE,OAAO,6BAA2B,GAAG,yBAAyB,OAAM,MAAM;AAAA,uGAC7d;AAAE,cAAG,EAAE,YAAU,EAAE,oBAAoB,OAAM,MAAM,oEAAoE;AAAE,UAAAA,GAAE,kBAAgB,kBAAkB,KAAKA,GAAE,OAAO,gBAAgB,GAAEA,GAAE,gBAAc,QAAQ,KAAKA,GAAE,OAAO,gBAAgB,GAAE,EAAE,QAAQ,CAAC,KAAGC,KAAE,EAAC,OAAM,CAAC,EAAC,GAAEA,GAAE,MAAM,GAAG,YAAY,IAAE,EAAE,SAAS,CAAC,GAAEA,GAAE,GAAG,YAAY,IAAE,GAAG,iBAAe,IAAE,OAAGA,KAAE,EAAE,SAAS,CAAC;AAAA,QAAE,CAAC,GAAED,GAAE,OAAO,oBAAkB,UAAKA,GAAE,WAAW,wBAAuB,WAAU;AAAC,UAAAA,GAAE,wBAAsBA,GAAE,sBAAsB,OAAO,GAAG,qBAAqBC,IAAED,GAAE,iBAAgBA,GAAE,OAAO,wBAAwB,CAAC;AAAA,QAAC,CAAC,GAAEA,GAAE,WAAW,+BAA8B,WAAU;AAAC,UAAAA,GAAE,yBAAuBA,GAAE,uBAAuB,OAAO,GAAG,4BAA4BC,IAAED,GAAE,iBAAgBA,GAAE,OAAO,wBAAwB,CAAC;AAAA,QAAC,CAAC,IAAGC,GAAE,QAAMA,GAAE,QAAMA,GAAE,QAAM,CAAC,GAAE,EAAE,QAAQA,GAAE,OAAM,SAASI,IAAEC,IAAE;AAAC,UAAAL,GAAE,MAAMK,EAAC,IAAE,EAAE,OAAOD,IAAE,SAAS,GAAE;AAAC,mBAAO,EAAE,YAAY,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC,CAAC;AAAE,YAAI,IAAE,EAAE,KAAKJ,GAAE,KAAK;AAAE,YAAG,EAAE,QAAQA,GAAE,OAAM,SAASI,IAAEC,IAAE;AAAC,UAAAN,GAAE,WAAW,YAAUM,KAAE,gBAAe,WAAU;AAAC,gBAAGN,GAAE,MAAM,KAAKM,EAAC,GAAEN,GAAE,OAAO,oBAAkB,SAAIA,GAAE,WAAW,oBAAmB,WAAU;AAAC,cAAAA,GAAE,wBAAsBA,GAAE,sBAAsB,OAAO,GAAG,iBAAiBK,IAAE,CAAC,CAAC;AAAA,YAAC,CAAC,GAAE,EAAE,QAAQL,GAAE,qBAAqB,GAAE;AAAC,iBAAG,kBAAkBK,EAAC;AAAE,kBAAI;AAAE,cAAAL,GAAE,WAAW,qBAAoB,WAAU;AAAC,oBAAE,GAAG,kBAAkBK,IAAE,EAAC,0BAAyBL,GAAE,OAAO,0BAAyB,kBAAiB,EAAE,kBAAiB,qBAAoB,EAAE,qBAAoB,UAAS,EAAE,UAAS,QAAOA,GAAE,WAAW,KAAKA,EAAC,EAAC,CAAC;AAAA,cAAC,CAAC,GAAEA,GAAE,mBAAmBM,EAAC,IAAE,EAAE,oBAAmBN,GAAE,6BAA6BM,EAAC,IAAE,EAAE,8BAA6BN,GAAE,cAAY,EAAE,MAAMA,GAAE,aAAY,EAAE,WAAW,GAAEA,GAAE,YAAU,EAAE,aAAWA,GAAE,WAAUA,GAAE,mBAAmBM,EAAC,IAAE,EAAE;AAAA,YAAc;AAAA,UAAC,CAAC;AAAA,QAAC,CAAC,GAAEN,GAAE,cAAYC,GAAE,aAAY,CAAC,EAAE,QAAQD,GAAE,qBAAqB,KAAG,CAACA,GAAE,OAAO,+BAA8B;AAAC,cAAIG,KAAE,EAAE,IAAIH,GAAE,uBAAsB,SAASK,IAAE;AAAC,mBAAOA,GAAE;AAAA,UAAO,CAAC,GAAE,IAAEF,GAAE,KAAK;AAAA,CAC//D;AAAE,gBAAM,IAAI,MAAM;AAAA,IACjB,CAAC;AAAA,QAAC;AAAC,UAAE,QAAQH,GAAE,wBAAuB,SAASK,IAAE;AAAC,YAAE,cAAcA,GAAE,OAAO;AAAA,QAAC,CAAC,GAAEL,GAAE,WAAW,wCAAuC,WAAU;AAAC,cAAG,GAAG,kBAAgBA,GAAE,YAAU,EAAE,UAASA,GAAE,QAAMA,GAAE,kBAAgBA,GAAE,kBAAgB,EAAE,MAAKA,GAAE,QAAMA,GAAE,gBAAe,MAAIA,GAAE,cAAY,EAAE,OAAMA,GAAE,oBAAkB,UAAKA,GAAE,mBAAiB,EAAE,WAAUA,GAAE,kBAAgB,UAAKA,GAAE,mCAAiC,EAAE,OAAM,QAAQ,KAAKA,GAAE,OAAO,gBAAgB,EAAE,CAAAA,GAAE,sBAAoBA,GAAE;AAAA,mBAAwB,aAAa,KAAKA,GAAE,OAAO,gBAAgB,EAAE,CAAAA,GAAE,sBAAoBA,GAAE;AAAA,mBAA6B,cAAc,KAAKA,GAAE,OAAO,gBAAgB,EAAE,CAAAA,GAAE,sBAAoBA,GAAE;AAAA,cAA2B,OAAM,MAAM,gDAA8CA,GAAE,OAAO,mBAAiB,GAAG;AAAE,UAAAA,GAAE,aAAWA,GAAE,WAASA,GAAE,mBAAkBA,GAAE,gBAAcA,GAAE,4BAA0BA,GAAE,WAASA,GAAE,2BAA0BA,GAAE,gBAAcA,GAAE;AAAA,QAAsB,CAAC,GAAEA,GAAE,WAAW,gCAA+B,WAAU;AAAC,cAAIK,KAAE,EAAE,OAAOL,GAAE,oBAAmB,SAASM,IAAE,GAAE,GAAE;AAAC,mBAAO,MAAI,SAAIA,GAAE,KAAK,CAAC,GAAEA;AAAA,UAAC,GAAE,CAAC,CAAC;AAAE,cAAG,EAAE,uBAAqB,CAAC,EAAE,QAAQD,EAAC,EAAE,OAAM,MAAM,oBAAkBA,GAAE,KAAK,IAAI,IAAE;AAAA;AAAA,yEAEhlC;AAAA,QAAC,CAAC,GAAEL,GAAE,WAAW,0BAAyB,WAAU;AAAC,aAAG,uBAAuB;AAAA,QAAC,CAAC,GAAEA,GAAE,WAAW,oBAAmB,WAAU;AAAC,YAAE,iBAAiBA,EAAC;AAAA,QAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC;AAAC,WAAOD,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,UAAG,MAAI,WAAS,IAAE,KAAK,cAAa,CAAC,EAAE,QAAQ,KAAK,qBAAqB,GAAE;AAAC,YAAIC,KAAE,EAAE,IAAI,KAAK,uBAAsB,SAAS,GAAE;AAAC,iBAAO,EAAE;AAAA,QAAO,CAAC,GAAE,IAAEA,GAAE,KAAK;AAAA,CACra;AAAE,cAAM,IAAI,MAAM;AAAA,IACjB,CAAC;AAAA,MAAC;AAAC,UAAIC,KAAE,KAAK,iBAAiB,GAAE,CAAC;AAAE,aAAOA;AAAA,IAAC,GAAEF,GAAE,UAAU,mBAAiB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,MAAK,GAAEC,IAAE,GAAE,GAAEE,IAAE,GAAEE,IAAEC,IAAE,GAAE,GAAE,GAAE,GAAEJ,IAAE,GAAEE,IAAEG,KAAE,GAAEK,KAAEL,GAAE,QAAO,IAAE,GAAEM,MAAG,GAAE,KAAG,KAAK,YAAU,IAAE,KAAK,MAAM,EAAE,SAAO,EAAE,GAAEG,KAAE,IAAI,MAAM,EAAE,GAAE,KAAG,CAAC,GAAEF,KAAE,KAAK,kBAAgB,IAAE,QAAOC,MAAG,KAAK,kBAAgB,IAAE,QAAOK,MAAG,GAAG,iBAAiB,KAAK,WAAW,GAAE,KAAG,KAAK,iBAAgB,KAAG,KAAK,OAAO,wBAAuB,KAAG,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC;AAAE,aAAO,OAAO,EAAE;AAAE,UAAI,KAAG;AAAO,eAAS,KAAI;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,KAAG,GAAG,yBAAyB,CAAC,GAAE,KAAG,GAAG,EAAE;AAAE,eAAO,OAAK,SAAO,KAAG;AAAA,MAAE;AAAC,UAAI,KAAG,SAAS,GAAE;AAAC,YAAG,GAAG,WAAS,KAAG,EAAE,UAAU,cAAY,QAAO;AAAC,cAAI,KAAGpB,GAAE,OAAO,qBAAqB,iCAAiC,CAAC;AAAE,aAAG,KAAK,EAAC,QAAO,EAAE,aAAY,MAAK,EAAE,cAAY,SAAO,EAAE,YAAU,QAAO,QAAO,EAAE,gBAAc,SAAO,EAAE,cAAY,QAAO,QAAO,EAAE,MAAM,QAAO,SAAQ,GAAE,CAAC;AAAA,QAAC,OAAK;AAAC,aAAG,IAAI;AAAE,cAAI,KAAG,EAAE,KAAK,EAAE;AAAE,eAAGA,GAAE,mBAAmB,EAAE,GAAE,KAAGA,GAAE,6BAA6B,EAAE,GAAE,KAAG,GAAG;AAAO,cAAI,KAAGA,GAAE,mBAAmB,EAAE,KAAGA,GAAE,OAAO,aAAW;AAAG,gBAAI,KAAG,KAAG,KAAG,KAAG;AAAA,QAAE;AAAA,MAAC;AAAE,eAAS,GAAG,GAAE;AAAC,WAAG,KAAK,CAAC,GAAE,KAAG,KAAK,6BAA6B,CAAC,GAAE,KAAG,KAAK,mBAAmB,CAAC,GAAE,KAAG,GAAG,QAAO,KAAG,GAAG;AAAO,YAAI,KAAG,KAAK,mBAAmB,CAAC,KAAG,KAAK,OAAO,aAAW;AAAG,cAAI,KAAG,KAAG,KAAG,KAAG;AAAA,MAAE;AAAC,SAAG,KAAK,MAAK,CAAC;AAAE,eAAQ,IAAG,IAAEY,MAAG;AAAC,QAAAT,KAAE;AAAK,YAAI,KAAGI,GAAE,WAAW,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAG,GAAG;AAAO,aAAI,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,eAAG,GAAG,CAAC;AAAE,cAAI,KAAG,GAAG;AAAQ,cAAE;AAAK,cAAI,KAAG,GAAG;AAAM,cAAG,OAAK,QAAG,OAAK,OAAKJ,KAAE,MAAI,GAAG,aAAW,QAAIC,KAAE,GAAG,KAAKG,IAAE,GAAES,IAAEI,GAAE,GAAEhB,OAAI,QAAMD,KAAEC,GAAE,CAAC,GAAEA,GAAE,YAAU,WAAS,IAAEA,GAAE,YAAUD,KAAE,SAAO,KAAK,gBAAgB,IAAG,CAAC,GAAEA,KAAE,KAAK,MAAM,IAAG,GAAE,CAAC,IAAGA,OAAI,MAAK;AAAC,gBAAG,IAAE,GAAG,WAAU,MAAI,QAAO;AAAC,kBAAI,KAAG,GAAG,CAAC,GAAE,KAAG,GAAG;AAAQ,cAAAE,KAAE,MAAK,GAAG,aAAW,QAAID,KAAE,GAAG,KAAKG,IAAE,GAAES,IAAEI,GAAE,GAAEhB,OAAI,QAAM,IAAEA,GAAE,CAAC,GAAEA,GAAE,YAAU,WAASC,KAAED,GAAE,YAAU,IAAE,SAAO,KAAK,gBAAgB,IAAG,CAAC,GAAE,IAAE,KAAK,MAAM,IAAG,GAAE,CAAC,IAAG,KAAG,EAAE,SAAOD,GAAE,WAASA,KAAE,GAAE,IAAEE,IAAE,KAAG;AAAA,YAAG;AAAC;AAAA,UAAK;AAAA,QAAC;AAAC,YAAGF,OAAI,MAAK;AAAC,cAAGG,KAAEH,GAAE,QAAO,IAAE,GAAG,OAAM,MAAI,WAAS,IAAE,GAAG,cAAa,IAAE,KAAK,oBAAoBA,IAAE,GAAE,GAAE,GAAG,WAAUW,IAAEC,KAAGT,EAAC,GAAE,KAAK,cAAc,GAAE,CAAC,GAAE,MAAI,QAAGO,MAAG,KAAK,SAASG,IAAEH,KAAG,CAAC,IAAEO,IAAG,CAAC,EAAE,KAAK,CAAC,IAAG,IAAE,KAAK,UAAU,GAAEd,EAAC,GAAE,IAAE,IAAEA,IAAES,MAAG,KAAK,iBAAiBA,KAAGT,EAAC,GAAE,OAAK,QAAI,GAAG,sBAAoB,MAAG;AAAC,gBAAI,KAAG,GAAE,KAAG,QAAO,KAAG;AAAO,eAAG,YAAU;AAAE;AAAG,mBAAG,GAAG,KAAKH,EAAC,GAAE,OAAK,SAAK,KAAG,GAAG,YAAU,GAAE;AAAA,mBAAY,OAAK;AAAI,mBAAK,MAAIW,KAAEA,KAAE,IAAGC,MAAGT,KAAE,IAAG,KAAK,iCAAiC,GAAE,GAAE,IAAG,IAAGQ,IAAEC,KAAGT,EAAC;AAAA,UAAE;AAAC,eAAK,YAAY,IAAG,IAAG,IAAG,CAAC;AAAA,QAAC,OAAK;AAAC,mBAAQ,KAAG,GAAE,KAAGQ,IAAE,KAAGC,KAAGM,MAAG,OAAG,CAACA,OAAI,IAAET,KAAG,MAAIV,KAAEK,GAAE,WAAW,CAAC,GAAE,IAAE,KAAK,UAAU,GAAE,CAAC,GAAE,KAAIN,KAAE,GAAEA,KAAE,IAAGA,MAAI;AAAC,gBAAI,KAAG,GAAGA,EAAC,GAAE,KAAG,GAAG,SAAQ,KAAG,GAAG;AAAM,gBAAG,OAAK,QAAGM,GAAE,WAAW,CAAC,MAAI,OAAKc,MAAG,QAAI,GAAG,aAAW,OAAGA,MAAG,GAAG,KAAKd,IAAE,GAAES,IAAEI,GAAE,MAAI,QAAM,KAAK,gBAAgB,IAAG,CAAC,GAAEC,MAAG,GAAG,KAAK,CAAC,MAAI,OAAMA,QAAK,KAAG;AAAA,UAAK;AAAC,cAAE,IAAE,IAAG,IAAE,KAAK,OAAO,qBAAqB,iCAAiCd,IAAE,IAAG,GAAE,IAAG,EAAE,GAAE,GAAG,KAAK,EAAC,QAAO,IAAG,MAAK,IAAG,QAAO,IAAG,QAAO,GAAE,SAAQ,EAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,KAAK,cAAYS,GAAE,SAAOH,MAAI,EAAC,QAAOG,IAAE,QAAOI,KAAG,QAAO,GAAE;AAAA,IAAC,GAAErB,GAAE,UAAU,cAAY,SAAS,GAAE,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,MAAG;AAAC,YAAIC,KAAE,EAAE;AAAK,UAAE,CAAC,GAAEA,OAAI,UAAQD,GAAE,KAAK,MAAKC,EAAC;AAAA,MAAC,MAAM,GAAE,SAAO,UAAQD,GAAE,KAAK,MAAK,EAAE,IAAI;AAAA,IAAC,GAAED,GAAE,UAAU,YAAU,SAAS,GAAE,GAAE;AAAC,aAAO,EAAE,UAAU,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAE;AAAC,QAAE,YAAU;AAAA,IAAC,GAAEA,GAAE,UAAU,mCAAiC,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE,GAAE;AAAC,UAAIE,IAAE;AAAE,YAAI,WAASA,KAAEH,OAAI,IAAE,GAAE,IAAEG,KAAE,KAAG,GAAE,MAAI,KAAGA,OAAI,SAAK,EAAE,UAAQF,KAAE,GAAE,EAAE,YAAU,IAAE,IAAE,CAAC;AAAA,IAAG,GAAEF,GAAE,UAAU,mBAAiB,SAAS,GAAE,GAAE;AAAC,aAAO,IAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,sBAAoB,WAAU;AAAC,eAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,GAAE,CAAC,IAAE,UAAU,CAAC;AAAE,aAAO;AAAA,IAAI,GAAEA,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAEC,IAAE,GAAE;AAAC,aAAM,EAAC,OAAM,GAAE,aAAY,GAAE,cAAaA,IAAE,WAAU,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE;AAAC,aAAM,EAAC,OAAM,GAAE,aAAY,GAAE,WAAUA,IAAE,aAAY,GAAE,cAAaD,IAAE,WAAU,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE,GAAE;AAAC,aAAM,EAAC,OAAM,GAAE,aAAY,GAAE,WAAU,IAAE,IAAE,GAAE,WAAUA,IAAE,SAAQA,IAAE,aAAY,GAAE,WAAU,IAAE,IAAE,GAAE,cAAaD,IAAE,WAAU,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,WAAS,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO;AAAA,IAAG,GAAED,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,EAAE,KAAKA,EAAC,GAAE;AAAA,IAAC,GAAED,GAAE,UAAU,4BAA0B,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,EAAE,CAAC,IAAEA,IAAE,KAAI;AAAA,IAAC,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAE;AAAC,YAAI,SAAO,EAAE,UAAQ;AAAA,IAAE,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO;AAAA,IAAI,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAE,KAAK,CAAC;AAAE,aAAO,MAAI,OAAG,EAAE,UAAUA,IAAE,EAAE,SAAS,IAAE;AAAA,IAAI,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,EAAE,KAAK,CAAC;AAAE,aAAOA,OAAI,OAAKA,GAAE,CAAC,IAAEA;AAAA,IAAC,GAAED,GAAE,UAAU,aAAW,SAAS,GAAE,GAAE;AAAC,UAAG,KAAK,kBAAgB,MAAG;AAAC,aAAK;AAAkB,YAAIC,KAAE,IAAI,MAAM,KAAK,kBAAgB,CAAC,EAAE,KAAK,GAAG;AAAE,aAAK,kBAAgB,KAAK,qBAAmB,QAAQ,IAAIA,KAAE,UAAQ,IAAE,GAAG;AAAE,YAAI,IAAE,EAAE,MAAM,CAAC,GAAEC,KAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAEA,KAAE,KAAG,QAAQ,OAAK,QAAQ;AAAI,eAAO,KAAK,kBAAgB,KAAK,qBAAmB,EAAED,KAAE,UAAQ,IAAE,aAAWC,KAAE,IAAI,GAAE,KAAK,mBAAkB;AAAA,MAAC,MAAM,QAAO,EAAE;AAAA,IAAC,GAAEF,GAAE,UAAQ,8LAA6LA,GAAE,KAAG,kBAAiBA;AAAA,EAAC,EAAE;AAAE,KAAG,QAAM;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,eAAa,EAAE,sBAAoB,EAAE,MAAI,EAAE,cAAY,EAAE,gBAAc,EAAE,YAAU,EAAE,aAAW;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGC,IAAE;AAAC,WAAO,GAAGA,EAAC,IAAEA,GAAE,QAAMA,GAAE;AAAA,EAAI;AAAC,IAAE,aAAW;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAOA,GAAE;AAAA,EAAI;AAAC,IAAE,YAAU;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,GAAG,SAASA,GAAE,KAAK,KAAGA,GAAE,UAAQ;AAAA,EAAE;AAAC,IAAE,gBAAc;AAAG,MAAI,KAAG,UAAS,KAAG,cAAa,KAAG,SAAQ,KAAG,SAAQ,KAAG,aAAY,KAAG,YAAW,KAAG,cAAa,KAAG,eAAc,KAAG;AAAmB,WAAS,GAAGA,IAAE;AAAC,WAAO,GAAGA,EAAC;AAAA,EAAC;AAAC,IAAE,cAAY;AAAG,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE,SAAQ,IAAE,CAAC;AAAE,QAAG,EAAE,OAAKA,GAAE,MAAK,GAAG,YAAY,CAAC,MAAI,EAAE,UAAQ,IAAG,GAAG,IAAIA,IAAE,EAAE,EAAE,OAAK;AAAA;AAC3kL,WAAO,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,aAAWA,GAAE,EAAE,IAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAE,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,QAAMA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,QAAMA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,WAASA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,YAAUA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,aAAWA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,cAAYA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,mBAAiBA,GAAE,EAAE,IAAG;AAAA,EAAC;AAAC,IAAE,MAAI,GAAG,EAAC,MAAK,OAAM,SAAQ,GAAG,MAAM,GAAE,CAAC;AAAE,KAAG,kBAAkB,CAAC,EAAE,GAAG,CAAC;AAAE,WAAS,GAAGA,IAAE,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE,GAAE;AAAC,WAAM,EAAC,OAAM,GAAE,aAAY,GAAE,WAAUD,IAAE,WAAU,GAAE,SAAQC,IAAE,aAAY,GAAE,WAAU,GAAE,cAAaF,GAAE,cAAa,WAAUA,GAAC;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,WAAO,GAAG,uBAAuBA,IAAE,CAAC;AAAA,EAAC;AAAC,IAAE,eAAa;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,MAAI,KAAG,KAAG,EAAE,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,sBAAoB,EAAE,mBAAiB,EAAE,WAAS,EAAE,cAAY,EAAE,0BAAwB,EAAE,aAAW,EAAE,mCAAiC,EAAE,sBAAoB,EAAE,SAAO,EAAE,cAAY,EAAE,OAAK,EAAE,cAAY,EAAE,qBAAmB;AAAO,MAAI,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASD,GAAE,GAAE;AAAC,WAAK,cAAY;AAAA,IAAC;AAAC,WAAO,OAAO,eAAeA,GAAE,WAAU,cAAa,EAAC,KAAI,WAAU;AAAC,aAAO,KAAK;AAAA,IAAW,GAAE,KAAI,SAAS,GAAE;AAAC,WAAK,cAAY;AAAA,IAAC,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAEA,GAAE,UAAU,SAAO,SAAS,GAAE;AAAC,QAAE,MAAM,IAAI,GAAE,EAAE,QAAQ,KAAK,YAAW,SAAS,GAAE;AAAC,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,IAAE,qBAAmB;AAAG,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,CAAC,CAAC,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO,OAAO,eAAe,EAAE,WAAU,cAAa,EAAC,KAAI,WAAU;AAAC,aAAO,KAAK,mBAAiB,SAAO,KAAK,eAAe,aAAW,CAAC;AAAA,IAAC,GAAE,KAAI,SAAS,GAAE;AAAA,IAAC,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAE,EAAE,UAAU,SAAO,SAAS,GAAE;AAAC,QAAE,MAAM,IAAI;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,cAAY;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,UAAQ,IAAG,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,OAAK;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,oBAAkB,OAAG,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,cAAY;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,SAAO;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,sBAAoB;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,mCAAiC;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,aAAW;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,0BAAwB;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAEA,GAAE,oBAAkB,OAAGA,GAAE,gBAAc,OAAG,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO,OAAO,eAAe,EAAE,WAAU,cAAa,EAAC,KAAI,WAAU;AAAC,aAAO,KAAK;AAAA,IAAW,GAAE,KAAI,SAAS,GAAE;AAAC,WAAK,cAAY;AAAA,IAAC,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,cAAY;AAAG,MAAI,KAAG,WAAU;AAAC,aAASD,GAAE,GAAE;AAAC,WAAK,MAAI,GAAE,EAAE,OAAO,MAAK,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,SAAO,SAAS,GAAE;AAAC,QAAE,MAAM,IAAI;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,IAAE,WAAS;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,EAAE;AAAA,EAAC;AAAC,IAAE,mBAAiB;AAAG,WAAS,GAAGA,IAAE;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,IAAI,GAAE,EAAE;AAAA,IAAC;AAAC,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,eAAc,MAAKA,GAAE,iBAAgB,KAAIA,GAAE,IAAG;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,eAAc,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,UAAS,KAAIA,GAAE,KAAI,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,uBAAsB,KAAIA,GAAE,KAAI,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,oCAAmC,KAAIA,GAAE,KAAI,WAAU,GAAG,IAAI,GAAG,EAAC,cAAaA,GAAE,UAAS,CAAC,CAAC,GAAE,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,2BAA0B,KAAIA,GAAE,KAAI,WAAU,GAAG,IAAI,GAAG,EAAC,cAAaA,GAAE,UAAS,CAAC,CAAC,GAAE,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,cAAa,KAAIA,GAAE,KAAI,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,eAAc,KAAIA,GAAE,KAAI,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,IAAG;AAAC,UAAI,IAAE,EAAC,MAAK,YAAW,MAAKA,GAAE,aAAa,MAAK,OAAM,GAAG,WAAWA,GAAE,YAAY,GAAE,KAAIA,GAAE,IAAG,GAAEC,KAAED,GAAE,aAAa;AAAQ,aAAOA,GAAE,aAAa,YAAU,EAAE,UAAQ,EAAE,SAASC,EAAC,IAAEA,GAAE,SAAOA,KAAG;AAAA,IAAC,OAAK;AAAC,UAAGD,cAAa,GAAG,QAAM,EAAC,MAAK,QAAO,MAAKA,GAAE,MAAK,SAAQA,GAAE,SAAQ,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,YAAM,MAAM,sBAAsB;AAAA,IAAC;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,aAAW;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,OAAK,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE;AAAK,YAAI,WAAS,IAAE,CAAC,IAAG,GAAG,QAAQ,EAAE,YAAW,SAAS,GAAEC,IAAE;AAAC,YAAI,IAAE,GAAG,KAAK,EAAE,YAAWA,KAAE,CAAC;AAAE,YAAG,aAAa,GAAG,YAAY,CAAAD,GAAE,YAAY,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,SAAS,CAAAA,GAAE,aAAa,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,YAAY,CAAAA,GAAE,SAAS,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,OAAO,CAAAA,GAAE,WAAW,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,oBAAoB,CAAAA,GAAE,eAAe,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,iCAAiC,CAAAA,GAAE,kBAAkB,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,wBAAwB,CAAAA,GAAE,YAAY,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,WAAW,CAAAA,GAAE,SAAS,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,YAAY,CAAAA,GAAE,OAAO,GAAE,GAAE,CAAC;AAAA,YAAO,OAAM,MAAM,sBAAsB;AAAA,MAAC,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,eAAa,SAAS,GAAE,GAAEC,IAAE;AAAA,IAAC,GAAED,GAAE,UAAU,cAAY,SAAS,GAAE,GAAEC,IAAE;AAAA,IAAC,GAAED,GAAE,UAAU,WAAS,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAE,OAAOA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,aAAW,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAE,OAAOA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,iBAAe,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,CAAC,IAAI,GAAG,OAAO,EAAC,YAAW,EAAE,WAAU,CAAC,CAAC,EAAE,OAAO,GAAEA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,GAAG,GAAE,GAAEA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,WAAS,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,CAAC,IAAI,GAAG,OAAO,EAAC,YAAW,EAAE,WAAU,CAAC,CAAC,EAAE,OAAO,GAAEA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,cAAY,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,GAAG,GAAE,GAAEA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,SAAO,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,EAAE,OAAOD,EAAC;AAAE,SAAG,QAAQ,EAAE,YAAW,SAAS,GAAE;AAAC,YAAI,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,CAAC,CAAC,EAAC,CAAC;AAAE,UAAE,KAAK,GAAEC,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEF;AAAA,EAAC,EAAE;AAAE,KAAG,aAAW;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC,IAAI,GAAG,OAAO,EAAC,YAAW,CAAC,IAAI,GAAG,SAAS,EAAC,cAAaD,GAAE,UAAS,CAAC,CAAC,EAAE,OAAOA,GAAE,UAAU,EAAC,CAAC,CAAC,GAAE,IAAEC,GAAE,OAAO,GAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGF,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,cAAY;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,UAAI,IAAE;AAAE,cAAO,EAAE,aAAY;AAAA,QAAC,KAAK,GAAG;AAAY,iBAAO,KAAK,iBAAiB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAY,iBAAO,KAAK,iBAAiB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAO,iBAAO,KAAK,YAAY,CAAC;AAAA,QAAE,KAAK,GAAG;AAAoB,iBAAO,KAAK,yBAAyB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAiC,iBAAO,KAAK,sCAAsC,CAAC;AAAA,QAAE,KAAK,GAAG;AAAwB,iBAAO,KAAK,6BAA6B,CAAC;AAAA,QAAE,KAAK,GAAG;AAAW,iBAAO,KAAK,gBAAgB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAY,iBAAO,KAAK,iBAAiB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAS,iBAAO,KAAK,cAAc,CAAC;AAAA,QAAE,KAAK,GAAG;AAAK,iBAAO,KAAK,UAAU,CAAC;AAAA,QAAE;AAAQ,gBAAM,MAAM,sBAAsB;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,2BAAyB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,wCAAsC,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,+BAA6B,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,cAAY;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,CAAAwB,OAAG;AAAC;AAAa,MAAI,KAAGA,MAAGA,GAAE,aAAW,2BAAU;AAAC,QAAIvB,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAesB,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,iBAAeA,GAAE,6BAA2BA,GAAE,uBAAqBA,GAAE,kBAAgBA,GAAE,iBAAeA,GAAE,iBAAe;AAAO,MAAIC,MAAG,EAAE,GAAE,IAAE,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGxB,IAAE;AAAC,WAAOA,cAAa,EAAE,eAAaA,cAAa,EAAE,UAAQA,cAAa,EAAE,cAAYA,cAAa,EAAE,uBAAqBA,cAAa,EAAE,oCAAkCA,cAAa,EAAE,2BAAyBA,cAAa,EAAE,YAAUA,cAAa,EAAE;AAAA,EAAI;AAAC,EAAAuB,GAAE,iBAAe;AAAG,WAAS,GAAGvB,IAAE,GAAE;AAAC,UAAI,WAAS,IAAE,CAAC;AAAG,QAAI,IAAEA,cAAa,EAAE,UAAQA,cAAa,EAAE,cAAYA,cAAa,EAAE;AAAwB,WAAO,IAAE,OAAGA,cAAa,EAAE,cAAYwB,IAAG,KAAKxB,GAAE,YAAW,SAASC,IAAE;AAAC,aAAO,GAAGA,IAAE,CAAC;AAAA,IAAC,CAAC,IAAED,cAAa,EAAE,eAAawB,IAAG,SAAS,GAAExB,EAAC,IAAE,QAAGA,cAAa,EAAE,sBAAoBA,cAAa,EAAE,eAAa,EAAE,KAAKA,EAAC,GAAEwB,IAAG,MAAMxB,GAAE,YAAW,SAASC,IAAE;AAAC,aAAO,GAAGA,IAAE,CAAC;AAAA,IAAC,CAAC,KAAG;AAAA,EAAE;AAAC,EAAAsB,GAAE,iBAAe;AAAG,WAAS,GAAGvB,IAAE;AAAC,WAAOA,cAAa,EAAE;AAAA,EAAW;AAAC,EAAAuB,GAAE,kBAAgB;AAAG,WAAS,GAAGvB,IAAE;AAAC,QAAGA,cAAa,EAAE,YAAY,QAAM;AAAU,QAAGA,cAAa,EAAE,OAAO,QAAM;AAAS,QAAGA,cAAa,EAAE,YAAY,QAAM;AAAK,QAAGA,cAAa,EAAE,oBAAoB,QAAM;AAAe,QAAGA,cAAa,EAAE,iCAAiC,QAAM;AAAmB,QAAGA,cAAa,EAAE,wBAAwB,QAAM;AAAW,QAAGA,cAAa,EAAE,WAAW,QAAM;AAAO,QAAGA,cAAa,EAAE,SAAS,QAAM;AAAU,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,EAAAuB,GAAE,uBAAqB;AAAG,MAAI,KAAG,SAASvB,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,UAAI,IAAEA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAK,aAAO,EAAE,YAAU,KAAI,EAAE,aAAW,EAAC,QAAO,CAAC,GAAE,aAAY,CAAC,GAAE,YAAW,CAAC,GAAE,yBAAwB,CAAC,GAAE,qBAAoB,CAAC,GAAE,kCAAiC,CAAC,EAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,QAAM,WAAU;AAAC,WAAK,aAAW,EAAC,QAAO,CAAC,GAAE,aAAY,CAAC,GAAE,YAAW,CAAC,GAAE,yBAAwB,CAAC,GAAE,qBAAoB,CAAC,GAAE,kCAAiC,CAAC,EAAC;AAAA,IAAC,GAAE,EAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,UAAIC,KAAE,EAAE,aAAa,OAAK,KAAK,YAAU;AAAW,MAAAuB,IAAG,IAAI,KAAK,YAAWvB,EAAC,MAAI,KAAK,WAAWA,EAAC,IAAE,CAAC,IAAG,KAAK,WAAWA,EAAC,EAAE,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,UAAIA,KAAE,EAAE,kBAAgB,KAAK,YAAU;AAAW,MAAAuB,IAAG,IAAI,KAAK,YAAWvB,EAAC,MAAI,KAAK,WAAWA,EAAC,IAAE,CAAC,IAAG,KAAK,WAAWA,EAAC,EAAE,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAE;AAAC,WAAK,WAAW,OAAO,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,WAAK,WAAW,wBAAwB,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,WAAK,WAAW,oBAAoB,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,wCAAsC,SAAS,GAAE;AAAC,WAAK,WAAW,iCAAiC,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,WAAW,WAAW,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,WAAW,YAAY,KAAK,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,EAAAsB,GAAE,6BAA2B;AAAG,MAAI,KAAG,IAAI;AAAG,WAAS,GAAGvB,IAAE;AAAC,OAAG,MAAM,GAAEA,GAAE,OAAO,EAAE;AAAE,QAAI,IAAE,GAAG;AAAW,WAAO,GAAG,MAAM,GAAE;AAAA,EAAC;AAAC,EAAAuB,GAAE,iBAAe;AAAE,CAAC;AAAE,IAAI,KAAGxB,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,mBAAiB,GAAG,oBAAkB,GAAG,mBAAiB,GAAG,QAAM;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGC,IAAE;AAAC,QAAGA,cAAa,GAAG,YAAY,QAAO,GAAGA,GAAE,cAAc;AAAE,QAAGA,cAAa,GAAG,SAAS,QAAO,GAAGA,EAAC;AAAE,QAAG,GAAG,eAAeA,EAAC,EAAE,QAAO,GAAGA,EAAC;AAAE,QAAG,GAAG,gBAAgBA,EAAC,EAAE,QAAO,GAAGA,EAAC;AAAE,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,KAAG,QAAM;AAAG,WAAS,GAAGA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAEA,GAAE,YAAWC,KAAE,GAAE,IAAE,EAAE,SAAOA,IAAEC,IAAE,IAAE,MAAG,KAAG,IAAG,CAAAA,KAAE,EAAED,EAAC,GAAE,IAAE,GAAG,eAAeC,EAAC,GAAE,IAAE,EAAE,OAAO,GAAGA,EAAC,CAAC,GAAED,KAAEA,KAAE,GAAE,IAAE,EAAE,SAAOA;AAAE,WAAO,GAAG,KAAK,CAAC;AAAA,EAAC;AAAC,KAAG,mBAAiB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,GAAG,IAAIA,GAAE,YAAW,SAAS,GAAE;AAAC,aAAO,GAAG,CAAC;AAAA,IAAC,CAAC;AAAE,WAAO,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;AAAA,EAAC;AAAC,KAAG,oBAAkB;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAM,CAACA,GAAE,YAAY;AAAA,EAAC;AAAC,KAAG,mBAAiB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,KAAG;AAAO,KAAG,KAAG;AAAQ,CAAC;AAAE,IAAI,KAAGA,GAAE,QAAI;AAAC;AAAa,MAAI,KAAG,MAAI,GAAG,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,0BAAwB,GAAG,gCAA8B,GAAG,yBAAuB,GAAG,sBAAoB;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAOC,GAAE,UAAQ,GAAEA,GAAE,UAAQ,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,WAAU;AAAC,aAAO,KAAK,KAAK,KAAK,OAAO,GAAE,KAAK;AAAA,IAAO,GAAE,EAAE,UAAU,eAAa,SAAS,GAAEA,IAAE,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAEA,IAAE,GAAE;AAAC,UAAIC,KAAE,GAAG,EAAE,gBAAe,EAAE,GAAG,IAAE,KAAK,QAAQ,MAAK,IAAED,GAAE,OAAO,CAAC,GAAE,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,EAAC,CAAC,GAAEG,KAAE,GAAG,MAAM,CAAC;AAAE,WAAK,QAAQF,EAAC,IAAEE;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,UAAU;AAAE,KAAG,sBAAoB;AAAG,WAAS,GAAGJ,IAAE;AAAC,QAAI,IAAE,CAAC;AAAE,WAAO,GAAG,QAAQA,IAAE,SAAS,GAAE;AAAC,UAAIC,KAAE,IAAI,GAAG,CAAC,EAAE,aAAa;AAAE,SAAG,OAAO,GAAEA,EAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,KAAG,yBAAuB;AAAG,WAAS,GAAGD,IAAE,GAAE;AAAC,WAAOA,GAAE,OAAK,IAAE,GAAG;AAAA,EAAE;AAAC,KAAG,gCAA8B;AAAG,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE,aAAa;AAAK,WAAO,IAAEA,GAAE,MAAI,GAAG;AAAA,EAAE;AAAC,KAAG,0BAAwB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,uCAAqC,GAAG,sCAAoC,GAAG,6BAA2B;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,EAAE,GAAE,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,KAAG,6BAA2B,EAAC,2BAA0B,SAASC,IAAE;AAAC,QAAI,IAAEA,GAAE,UAAS,IAAEA,GAAE,QAAOC,KAAED,GAAE,UAAS,IAAEA,GAAE,UAASE,KAAE,GAAG,cAAc,CAAC,GAAE,IAAEA,KAAE,SAAO,GAAG,WAAW,CAAC,IAAE,SAAO,uBAAqB,EAAE,OAAK,QAAO,IAAE,eAAa,IAAE,qBAAmB,EAAE,QAAM;AAAQ,WAAO;AAAA,EAAC,GAAE,+BAA8B,SAASF,IAAE;AAAC,QAAI,IAAEA,GAAE,gBAAe,IAAEA,GAAE;AAAS,WAAM,+CAA6C,EAAE;AAAA,EAAK,GAAE,yBAAwB,SAASA,IAAE;AAAC,QAAI,IAAEA,GAAE,qBAAoB,IAAEA,GAAE,QAAOC,KAAED,GAAE,UAAS,IAAEA,GAAE,uBAAsBE,KAAEF,GAAE,UAAS,IAAE,eAAc,IAAE,GAAG,MAAM,CAAC,EAAE,OAAMI,KAAE;AAAA,gBAChzd,IAAE;AAAI,QAAG,EAAE,QAAO,IAAE,IAAEA;AAAE,QAAI,IAAE,GAAG,OAAO,GAAE,SAAS,GAAE,GAAE;AAAC,aAAO,EAAE,OAAO,CAAC;AAAA,IAAC,GAAE,CAAC,CAAC,GAAEE,KAAE,GAAG,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,MAAI,GAAG,IAAI,GAAE,SAAS,GAAE;AAAC,eAAO,GAAG,WAAW,CAAC;AAAA,MAAC,CAAC,EAAE,KAAK,IAAI,IAAE;AAAA,IAAG,CAAC,GAAEC,KAAE,GAAG,IAAID,IAAE,SAAS,GAAE,GAAE;AAAC,aAAM,QAAM,IAAE,KAAG,OAAK;AAAA,IAAC,CAAC,GAAE,IAAE;AAAA,IAClPC,GAAE,KAAK;AAAA,CACR;AAAE,WAAO,IAAE,IAAEH;AAAA,EAAC,GAAE,uBAAsB,SAASJ,IAAE;AAAC,QAAI,IAAEA,GAAE,wBAAuB,IAAEA,GAAE,QAAOC,KAAED,GAAE,uBAAsB,IAAEA,GAAE,UAASE,KAAE,eAAc,IAAE,GAAG,MAAM,CAAC,EAAE,OAAM,IAAE;AAAA,gBAC5J,IAAE;AAAI,QAAGD,GAAE,QAAOC,KAAED,KAAE;AAAE,QAAIG,KAAE,GAAG,IAAI,GAAE,SAASE,IAAE;AAAC,aAAM,MAAI,GAAG,IAAIA,IAAE,SAASC,IAAE;AAAC,eAAO,GAAG,WAAWA,EAAC;AAAA,MAAC,CAAC,EAAE,KAAK,GAAG,IAAE;AAAA,IAAG,CAAC,GAAE,IAAE;AAAA,OACvI,MAAIH,GAAE,KAAK,IAAI,IAAE;AAAK,WAAOF,KAAE,IAAE;AAAA,EAAC,EAAC;AAAE,SAAO,OAAO,GAAG,0BAA0B;AAAE,KAAG,sCAAoC,EAAC,wBAAuB,SAASF,IAAE,GAAE;AAAC,QAAI,IAAE,kEAAgE,EAAE,kBAAgB;AAAA,6BACjOA,GAAE,OAAK;AAAK,WAAO;AAAA,EAAC,EAAC;AAAE,KAAG,uCAAqC,EAAC,0BAAyB,SAASA,IAAE,GAAE;AAAC,aAAS,EAAEM,IAAE;AAAC,aAAOA,cAAa,GAAG,WAASA,GAAE,aAAa,OAAKA,cAAa,GAAG,cAAYA,GAAE,kBAAgB;AAAA,IAAE;AAAC,QAAIL,KAAED,GAAE,MAAK,IAAE,GAAG,MAAM,CAAC,GAAEE,KAAE,EAAE,KAAI,IAAE,GAAG,qBAAqB,CAAC,GAAE,IAAE,EAAE,CAAC,GAAEE,KAAEF,KAAE,GAAE,IAAE,OAAK,KAAGE,KAAEF,KAAE,MAAI,SAAO,IAAE,sBAAoB,IAAE,OAAK,MAAI;AAAA,8CAChV,EAAE,SAAO,sCAAoCD,KAAE;AAAA;AAAA;AAEvE,WAAO,IAAE,EAAE,QAAQ,WAAU,GAAG,GAAE,IAAE,EAAE,QAAQ,UAAS;AAAA,CAC1E,GAAE;AAAA,EAAC,GAAE,6BAA4B,SAASD,IAAE;AAAC,QAAI,IAAE;AAAA,KACjD,6EAA2EA,GAAE,OAAK;AAAA,KAClF;AAAA;AAAA;AAEqD,WAAO;AAAA,EAAC,GAAE,sCAAqC,SAASA,IAAE;AAAC,QAAI,IAAE,GAAG,IAAIA,GAAE,YAAW,SAAS,GAAE;AAAC,aAAO,GAAG,WAAW,CAAC;AAAA,IAAC,CAAC,EAAE,KAAK,IAAI,GAAE,IAAEA,GAAE,YAAY,QAAM,IAAE,KAAGA,GAAE,YAAY,KAAIC,KAAE,8BAA4BD,GAAE,iBAAiB,KAAK,IAAI,IAAE;AAAA,KACpS,WAAS,IAAE,eAAaA,GAAE,aAAa,OAAK;AAAA,MAC3C,MAAI,IAAE;AAAA,KACP;AAAA;AACmB,WAAOC;AAAA,EAAC,GAAE,gCAA+B,SAASD,IAAE;AAAC,QAAI,IAAE,GAAG,IAAIA,GAAE,YAAW,SAAS,GAAE;AAAC,aAAO,GAAG,WAAW,CAAC;AAAA,IAAC,CAAC,EAAE,KAAK,IAAI,GAAE,IAAEA,GAAE,YAAY,QAAM,IAAE,KAAGA,GAAE,YAAY,KAAIC,KAAE,uCAAqCD,GAAE,iBAAiB,KAAK,IAAI,IAAE,aAAW,IAAE,OAAK,cAAYA,GAAE,aAAa,OAAK;AAAA,MACtT,MAAI,IAAE;AAAA;AACP,WAAOC,KAAEA,KAAE;AAAA,uBACQA;AAAA,EAAC,GAAE,2BAA0B,SAASD,IAAE;AAAC,QAAI,IAAE,GAAG,qBAAqBA,GAAE,UAAU;AAAE,IAAAA,GAAE,WAAW,QAAM,MAAI,KAAGA,GAAE,WAAW;AAAK,QAAI,IAAE,qBAAmB,IAAE,oBAAkBA,GAAE,aAAa,OAAK;AAAA;AAClL,WAAO;AAAA,EAAC,GAAE,qBAAoB,SAASA,IAAE;AAAC,WAAM;AAAA,EAAY,GAAE,4BAA2B,SAASA,IAAE;AAAC,QAAI,IAAE,oCAAkCA,GAAE,iBAAe,KAAG,OAAK,YAAUA,GAAE,YAAY,MAAI,eAAaA,GAAE,aAAa,OAAK;AAAA,KACtQ;AAAyD,WAAO;AAAA,EAAC,GAAE,+BAA8B,SAASA,IAAE;AAAC,QAAI,IAAE;AAAA,KACnH,QAAMA,GAAE,YAAY,MAAI,eAAaA,GAAE,aAAa,OAAK;AAAA,UACpDA,GAAE,YAAY,WAAW,SAAO,KAAG;AAAkB,WAAO;AAAA,EAAC,GAAE,yBAAwB,SAASA,IAAE;AAAC,QAAI,IAAEA,GAAE,aAAa,MAAK,IAAE,GAAG,IAAIA,GAAE,mBAAkB,SAASE,IAAE;AAAC,aAAOA,GAAE;AAAA,IAAI,CAAC,GAAED,KAAE,IAAE,UAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,GAAE,IAAE;AAAA,KACrO,YAAU,IAAE;AAAA,MACX;AAAA,KACDA,KAAE;AAAA,KACF;AAAA;AAC2D,WAAO;AAAA,EAAC,GAAE,2BAA0B,SAASD,IAAE;AAAC,WAAM;AAAA,EAAY,GAAE,6BAA4B,SAASA,IAAE;AAAC,QAAI;AAAE,IAAAA,GAAE,wBAAwB,GAAG,OAAK,IAAEA,GAAE,aAAa,OAAK,IAAEA,GAAE;AAAa,QAAI,IAAE,mCAAiC,IAAE,6CAA2CA,GAAE,cAAY;AAAK,WAAO;AAAA,EAAC,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,MAAI,KAAG,MAAI,GAAG,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,yBAAuB,GAAG,iBAAe;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,EAAE,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGD,IAAE,GAAE;AAAC,QAAI,IAAE,IAAI,GAAGA,IAAE,CAAC;AAAE,WAAO,EAAE,YAAY,GAAE,EAAE;AAAA,EAAM;AAAC,KAAG,iBAAe;AAAG,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAO,EAAE,gBAAc,GAAE,EAAE,iBAAeC,IAAE,EAAE,SAAO,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,cAAY,WAAU;AAAC,UAAI,IAAE;AAAK,SAAG,QAAQ,GAAG,OAAO,KAAK,aAAa,GAAE,SAASA,IAAE;AAAC,UAAE,eAAaA,IAAEA,GAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,UAAIA,KAAE,KAAK,cAAc,EAAE,eAAe;AAAE,UAAGA,GAAE,GAAE,iBAAeA;AAAA,WAAM;AAAC,YAAI,IAAE,KAAK,eAAe,uBAAuB,KAAK,cAAa,CAAC;AAAE,aAAK,OAAO,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,wBAAuB,UAAS,KAAK,aAAa,MAAK,mBAAkB,EAAE,gBAAe,CAAC;AAAA,MAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,KAAG,yBAAuB;AAAE,CAAC;AAAE,IAAI,KAAGF,GAAE,OAAG;AAAC;AAAa,MAAI,KAAG,KAAG,EAAE,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,0BAAwB,EAAE,oBAAkB,EAAE,uCAAqC,EAAE,oCAAkC,EAAE,iCAA+B,EAAE,8BAA4B,EAAE,4CAA0C,EAAE,uBAAqB,EAAE,mCAAiC;AAAO,MAAIwB,MAAG,GAAG,GAAEC,KAAE,EAAE,GAAE,KAAG,GAAG,GAAE,IAAE,GAAG,GAAEC,MAAG,SAAS3B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAO,EAAE,UAAQ,GAAE,EAAE,OAAKC,IAAE,EAAE,mBAAiB,CAAC,GAAE,EAAE,qBAAmB,IAAG,EAAE,2BAAyB,GAAE,EAAE,QAAM,OAAG,EAAE,gBAAc,OAAG;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,WAAU;AAAC,UAAG,KAAK,QAAM,OAAG,KAAK,KAAK,UAAU,CAAC,MAAI,KAAK,QAAQ,KAAK,OAAM,MAAM,qDAAqD;AAAE,aAAO,KAAK,YAAUyB,GAAE,SAAS,KAAK,KAAK,SAAS,EAAE,QAAQ,GAAE,KAAK,kBAAgBA,GAAE,SAAS,KAAK,KAAK,eAAe,EAAE,QAAQ,GAAE,KAAK,UAAU,IAAI,GAAE,KAAK,gBAAgB,IAAI,GAAE,KAAK,mBAAmB,GAAE,KAAK,KAAK,KAAK,OAAO,GAAE,KAAK;AAAA,IAAgB,GAAE,EAAE,UAAU,OAAK,SAAS,GAAEzB,IAAE;AAAC,MAAAA,OAAI,WAASA,KAAE,CAAC,IAAG,KAAK,SAAOD,GAAE,UAAU,KAAK,KAAK,MAAK,GAAEC,EAAC;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAEA,IAAE,GAAE;AAAC,UAAG,EAAE,eAAe,SAAO,KAAK,sBAAoB,EAAE,QAAM,KAAK,0BAAyB;AAAC,YAAIC,KAAED,GAAE,OAAO,CAAC;AAAE,aAAK,mBAAmB,GAAE,KAAK,KAAK,EAAE,gBAAeC,EAAC;AAAA,MAAC;AAAA,IAAC,GAAE,EAAE,UAAU,qBAAmB,WAAU;AAAC,MAAAwB,GAAE,QAAQ,KAAK,SAAS,KAAG,KAAK,qBAAmB,IAAG,KAAK,2BAAyB,GAAE,KAAK,gBAAc,SAAK,KAAK,qBAAmB,KAAK,UAAU,IAAI,GAAE,KAAK,2BAAyB,KAAK,gBAAgB,IAAI;AAAA,IAAE,GAAE;AAAA,EAAC,EAAED,IAAG,UAAU;AAAE,IAAE,mCAAiCE;AAAG,MAAI,KAAG,SAAS3B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAO,EAAE,OAAKA,IAAE,EAAE,mBAAiB,IAAG,EAAE,yBAAuB,GAAE,EAAE,mBAAiB,EAAE,KAAK,QAAQ,MAAK,EAAE,yBAAuB,EAAE,KAAK,mBAAkB;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,SAAS,GAAEA,IAAE,GAAE;AAAC,UAAG,KAAK,iBAAe,EAAE,aAAa,SAAO,KAAK,oBAAkB,EAAE,QAAM,KAAK,0BAAwB,CAAC,KAAK,OAAM;AAAC,YAAIC,KAAED,GAAE,OAAO,CAAC,GAAE,IAAE,IAAI,EAAE,YAAY,EAAC,YAAWC,GAAC,CAAC;AAAE,aAAK,mBAAiB,GAAG,MAAM,CAAC,GAAE,KAAK,QAAM;AAAA,MAAE;AAAA,IAAC,GAAE;AAAA,EAAC,EAAEyB,GAAE;AAAE,IAAE,uBAAqB;AAAG,MAAI,KAAG,SAAS3B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAO,EAAE,UAAQ,GAAE,EAAE,aAAWC,IAAE,EAAE,SAAO,EAAC,OAAM,QAAO,YAAW,QAAO,aAAY,OAAM,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,WAAU;AAAC,aAAO,KAAK,KAAK,KAAK,OAAO,GAAE,KAAK;AAAA,IAAM,GAAE;AAAA,EAAC,EAAEwB,IAAG,UAAU;AAAE,IAAE,4CAA0C;AAAG,MAAI,KAAG,SAASzB,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,aAAOA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAA,IAAI;AAAC,WAAO,EAAE,UAAU,WAAS,SAAS,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,KAAK,YAAW;AAAC,YAAIC,KAAEwB,GAAE,MAAMzB,GAAE,OAAO,CAAC,CAAC;AAAE,aAAK,OAAO,cAAYC,OAAI,QAAOA,cAAa,EAAE,aAAW,KAAK,OAAO,QAAMA,GAAE,cAAa,KAAK,OAAO,aAAWA,GAAE;AAAA,MAAI,MAAM,CAAAF,GAAE,UAAU,SAAS,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,8BAA4B;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,aAAOA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAA,IAAI;AAAC,WAAO,EAAE,UAAU,cAAY,SAAS,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,KAAK,YAAW;AAAC,YAAIC,KAAEwB,GAAE,MAAMzB,GAAE,OAAO,CAAC,CAAC;AAAE,aAAK,OAAO,cAAYC,OAAI,QAAOA,cAAa,EAAE,aAAW,KAAK,OAAO,QAAMA,GAAE,cAAa,KAAK,OAAO,aAAWA,GAAE;AAAA,MAAI,MAAM,CAAAF,GAAE,UAAU,YAAY,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,iCAA+B;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,aAAOA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAA,IAAI;AAAC,WAAO,EAAE,UAAU,iBAAe,SAAS,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,KAAK,YAAW;AAAC,YAAIC,KAAEwB,GAAE,MAAMzB,GAAE,OAAO,CAAC,CAAC;AAAE,aAAK,OAAO,cAAYC,OAAI,QAAOA,cAAa,EAAE,aAAW,KAAK,OAAO,QAAMA,GAAE,cAAa,KAAK,OAAO,aAAWA,GAAE;AAAA,MAAI,MAAM,CAAAF,GAAE,UAAU,eAAe,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,oCAAkC;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,aAAOA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAA,IAAI;AAAC,WAAO,EAAE,UAAU,oBAAkB,SAAS,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,KAAK,YAAW;AAAC,YAAIC,KAAEwB,GAAE,MAAMzB,GAAE,OAAO,CAAC,CAAC;AAAE,aAAK,OAAO,cAAYC,OAAI,QAAOA,cAAa,EAAE,aAAW,KAAK,OAAO,QAAMA,GAAE,cAAa,KAAK,OAAO,aAAWA,GAAE;AAAA,MAAI,MAAM,CAAAF,GAAE,UAAU,kBAAkB,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,uCAAqC;AAAG,WAAS,GAAGD,IAAE,GAAE,GAAE;AAAC,UAAI,WAAS,IAAE,CAAC,IAAG,IAAE0B,GAAE,SAAS,CAAC;AAAE,QAAIzB,KAAE,CAAC,GAAE,IAAE;AAAE,aAASC,GAAE,GAAE;AAAC,aAAO,EAAE,OAAOwB,GAAE,KAAK1B,IAAE,IAAE,CAAC,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,UAAIM,KAAE,GAAGJ,GAAE,CAAC,GAAE,GAAE,CAAC;AAAE,aAAOD,GAAE,OAAOK,EAAC;AAAA,IAAC;AAAC,WAAK,EAAE,SAAO,KAAG,IAAEN,GAAE,UAAQ;AAAC,UAAI,IAAEA,GAAE,CAAC;AAAE,UAAG,aAAa,EAAE,YAAY,QAAO,EAAE,EAAE,UAAU;AAAE,UAAG,aAAa,EAAE,YAAY,QAAO,EAAE,EAAE,UAAU;AAAE,UAAG,aAAa,EAAE,OAAO,CAAAC,KAAE,EAAE,EAAE,UAAU;AAAA,eAAU,aAAa,EAAE,qBAAoB;AAAC,YAAIG,KAAE,EAAE,WAAW,OAAO,CAAC,IAAI,EAAE,WAAW,EAAC,YAAW,EAAE,WAAU,CAAC,CAAC,CAAC;AAAE,eAAO,EAAEA,EAAC;AAAA,MAAC,WAAS,aAAa,EAAE,kCAAiC;AAAC,YAAIA,KAAE,CAAC,IAAI,EAAE,YAAY,EAAC,YAAW,EAAE,WAAU,CAAC,GAAE,IAAI,EAAE,WAAW,EAAC,YAAW,CAAC,IAAI,EAAE,SAAS,EAAC,cAAa,EAAE,UAAS,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAC,CAAC,CAAC;AAAE,eAAO,EAAEA,EAAC;AAAA,MAAC,WAAS,aAAa,EAAE,yBAAwB;AAAC,YAAIA,KAAE,EAAE,WAAW,OAAO,CAAC,IAAI,EAAE,WAAW,EAAC,YAAW,CAAC,IAAI,EAAE,SAAS,EAAC,cAAa,EAAE,UAAS,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAC,CAAC,CAAC,CAAC;AAAE,QAAAH,KAAE,EAAEG,EAAC;AAAA,MAAC,WAAS,aAAa,EAAE,YAAW;AAAC,YAAIA,KAAE,EAAE,WAAW,OAAO,CAAC,IAAI,EAAE,WAAW,EAAC,YAAW,EAAE,WAAU,CAAC,CAAC,CAAC;AAAE,QAAAH,KAAE,EAAEG,EAAC;AAAA,MAAC,OAAK;AAAC,YAAG,aAAa,EAAE,YAAY,QAAOsB,GAAE,QAAQ,EAAE,YAAW,SAAS,GAAE;AAAC,UAAAA,GAAE,QAAQ,EAAE,UAAU,MAAI,UAAKzB,KAAE,EAAE,EAAE,UAAU;AAAA,QAAE,CAAC,GAAEA;AAAE,YAAG,aAAa,EAAE,SAAS,GAAE,KAAK,EAAE,YAAY;AAAA,YAAO,OAAM,MAAM,sBAAsB;AAAA,MAAC;AAAC;AAAA,IAAG;AAAC,WAAOA,GAAE,KAAK,EAAC,aAAY,GAAE,WAAUyB,GAAE,KAAK1B,IAAE,CAAC,EAAC,CAAC,GAAEC;AAAA,EAAC;AAAC,IAAE,oBAAkB;AAAG,WAAS,GAAGD,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,sBAAqBC,KAAE,CAAC,CAAC,GAAE,IAAE,oBAAmB,IAAE,OAAGE,KAAE,EAAE,QAAO,IAAEA,KAAEH,KAAE,GAAEK,KAAE,CAAC,GAAEC,KAAE,CAAC;AAAE,SAAIA,GAAE,KAAK,EAAC,KAAI,IAAG,KAAIP,IAAE,WAAU,CAAC,GAAE,iBAAgB,CAAC,EAAC,CAAC,GAAE,CAAC0B,GAAE,QAAQnB,EAAC,KAAG;AAAC,UAAI,IAAEA,GAAE,IAAI;AAAE,UAAG,MAAI,GAAE;AAAC,aAAGmB,GAAE,KAAKnB,EAAC,EAAE,OAAK,KAAGA,GAAE,IAAI;AAAE;AAAA,MAAQ;AAAC,UAAI,IAAE,EAAE,KAAI,IAAE,EAAE,KAAI,IAAE,EAAE,WAAUJ,KAAE,EAAE;AAAgB,UAAG,CAACuB,GAAE,QAAQ,CAAC,GAAE;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,YAAG,MAAI,GAAE;AAAC,cAAIrB,KAAE,EAAC,KAAI,GAAE,KAAIqB,GAAE,KAAK,CAAC,GAAE,WAAUA,GAAE,UAAU,CAAC,GAAE,iBAAgBA,GAAE,UAAUvB,EAAC,EAAC;AAAE,UAAAI,GAAE,KAAKF,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,SAAS,KAAG,IAAED,KAAE,GAAE;AAAC,cAAII,KAAE,IAAE,GAAEK,KAAE,EAAEL,EAAC;AAAE,cAAG,EAAEK,IAAE,EAAE,YAAY,GAAE;AAAC,gBAAIR,KAAE,EAAC,KAAIG,IAAE,KAAIkB,GAAE,KAAK,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,YAAAI,GAAE,KAAKF,EAAC;AAAA,UAAC;AAAA,QAAC,WAAS,MAAID,KAAE,EAAE,CAAAE,GAAE,KAAK,EAAC,eAAc,EAAE,cAAa,qBAAoB,EAAE,KAAI,WAAU,GAAE,iBAAgBH,GAAC,CAAC,GAAE,IAAE;AAAA,YAAQ,OAAM,MAAM,sBAAsB;AAAA,iBAAU,aAAa,EAAE,aAAY;AAAC,cAAI,IAAEuB,GAAE,SAAS,CAAC;AAAE,YAAE,KAAK,EAAE,eAAe;AAAE,cAAIZ,MAAGY,GAAE,SAASvB,EAAC;AAAE,UAAAW,IAAG,KAAK,EAAE,GAAG;AAAE,cAAIT,KAAE,EAAC,KAAI,GAAE,KAAI,EAAE,WAAW,OAAOH,IAAEwB,GAAE,KAAK,CAAC,CAAC,GAAE,WAAU,GAAE,iBAAgBZ,IAAE;AAAE,UAAAP,GAAE,KAAKF,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,QAAO;AAAC,cAAI,KAAG,EAAC,KAAI,GAAE,KAAIqB,GAAE,KAAK,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAK,EAAE,GAAEA,GAAE,KAAK,CAAC;AAAE,cAAIU,KAAE,EAAC,KAAI,GAAE,KAAI,EAAE,WAAW,OAAOS,GAAE,KAAK,CAAC,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAKU,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,qBAAoB;AAAC,cAAI,KAAG,IAAI,EAAE,WAAW,EAAC,YAAW,EAAE,YAAW,KAAI,EAAE,IAAG,CAAC,GAAEF,KAAE,EAAE,WAAW,OAAO,CAAC,EAAE,GAAEW,GAAE,KAAK,CAAC,CAAC,GAAErB,KAAE,EAAC,KAAI,GAAE,KAAIU,IAAE,WAAU,GAAE,iBAAgBZ,GAAC;AAAE,UAAAI,GAAE,KAAKF,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,kCAAiC;AAAC,cAAIW,MAAG,IAAI,EAAE,SAAS,EAAC,cAAa,EAAE,UAAS,CAAC,GAAE,KAAG,IAAI,EAAE,WAAW,EAAC,YAAW,CAACA,GAAE,EAAE,OAAO,EAAE,UAAU,GAAE,KAAI,EAAE,IAAG,CAAC,GAAED,KAAE,EAAE,WAAW,OAAO,CAAC,EAAE,GAAEW,GAAE,KAAK,CAAC,CAAC,GAAErB,KAAE,EAAC,KAAI,GAAE,KAAIU,IAAE,WAAU,GAAE,iBAAgBZ,GAAC;AAAE,UAAAI,GAAE,KAAKF,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,yBAAwB;AAAC,cAAI,KAAG,EAAC,KAAI,GAAE,KAAIqB,GAAE,KAAK,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAK,EAAE,GAAEA,GAAE,KAAK,CAAC;AAAE,cAAIS,MAAG,IAAI,EAAE,SAAS,EAAC,cAAa,EAAE,UAAS,CAAC,GAAEK,MAAG,IAAI,EAAE,WAAW,EAAC,YAAW,CAACL,GAAE,EAAE,OAAO,EAAE,UAAU,GAAE,KAAI,EAAE,IAAG,CAAC,GAAED,KAAE,EAAE,WAAW,OAAO,CAACM,GAAE,GAAEK,GAAE,KAAK,CAAC,CAAC,GAAET,KAAE,EAAC,KAAI,GAAE,KAAIF,IAAE,WAAU,GAAE,iBAAgBZ,GAAC;AAAE,UAAAI,GAAE,KAAKU,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,YAAW;AAAC,cAAI,KAAG,EAAC,KAAI,GAAE,KAAIS,GAAE,KAAK,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAK,EAAE,GAAEA,GAAE,KAAK,CAAC;AAAE,cAAIc,MAAG,IAAI,EAAE,WAAW,EAAC,YAAW,EAAE,YAAW,KAAI,EAAE,IAAG,CAAC,GAAEN,KAAE,EAAE,WAAW,OAAO,CAACM,GAAE,GAAEK,GAAE,KAAK,CAAC,CAAC,GAAET,KAAE,EAAC,KAAI,GAAE,KAAIF,IAAE,WAAU,GAAE,iBAAgBZ,GAAC;AAAE,UAAAI,GAAE,KAAKU,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,YAAY,UAAQ,KAAG,EAAE,WAAW,SAAO,GAAE,MAAI,GAAE,MAAK;AAAC,cAAI,KAAG,EAAE,WAAW,EAAE,GAAE,KAAG,EAAC,KAAI,GAAE,KAAI,GAAG,WAAW,OAAOS,GAAE,KAAK,CAAC,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAK,EAAE,GAAEA,GAAE,KAAK,CAAC;AAAA,QAAC;AAAA,iBAAS,aAAa,EAAE,YAAY,CAAAA,GAAE,KAAK,EAAC,KAAI,GAAE,KAAI,EAAE,WAAW,OAAOmB,GAAE,KAAK,CAAC,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC,CAAC;AAAA,iBAAU,aAAa,EAAE,KAAK,CAAAI,GAAE,KAAK,GAAG,GAAE,GAAE,GAAEJ,EAAC,CAAC;AAAA,YAAO,OAAM,MAAM,sBAAsB;AAAA,MAAC;AAAA,IAAC;AAAC,WAAOG;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGN,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAEyB,GAAE,SAAS,CAAC;AAAE,MAAE,KAAK1B,GAAE,IAAI;AAAE,QAAIE,KAAEwB,GAAE,SAASzB,EAAC;AAAE,WAAOC,GAAE,KAAK,CAAC,GAAE,EAAC,KAAI,GAAE,KAAIF,GAAE,YAAW,WAAU,GAAE,iBAAgBE,GAAC;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI0B,MAAG7B,GAAE,CAAA8B,OAAG;AAAC;AAAa,MAAI,KAAGA,MAAGA,GAAE,aAAW,2BAAU;AAAC,QAAI7B,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe4B,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,4BAA0BA,GAAE,uBAAqBA,GAAE,eAAaA,GAAE,mCAAiCA,GAAE,yBAAuBA,GAAE,oCAAkCA,GAAE,0CAAwCA,GAAE,iCAA+BA,GAAE,oCAAkCA,GAAE,0BAAwBA,GAAE,cAAYA,GAAE,YAAU;AAAO,MAAI,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE;AAAE,GAAC,SAAS7B,IAAE;AAAC,IAAAA,GAAEA,GAAE,SAAO,CAAC,IAAE,UAASA,GAAEA,GAAE,aAAW,CAAC,IAAE,cAAaA,GAAEA,GAAE,uBAAqB,CAAC,IAAE,wBAAuBA,GAAEA,GAAE,sCAAoC,CAAC,IAAE,uCAAsCA,GAAEA,GAAE,4BAA0B,CAAC,IAAE,6BAA4BA,GAAEA,GAAE,cAAY,CAAC,IAAE;AAAA,EAAa,GAAG,IAAE6B,GAAE,cAAYA,GAAE,YAAU,CAAC,EAAE;AAAE,WAAS,GAAG7B,IAAE;AAAC,QAAGA,cAAa,GAAG,OAAO,QAAO,EAAE;AAAO,QAAGA,cAAa,GAAG,WAAW,QAAO,EAAE;AAAW,QAAGA,cAAa,GAAG,oBAAoB,QAAO,EAAE;AAAqB,QAAGA,cAAa,GAAG,iCAAiC,QAAO,EAAE;AAAoC,QAAGA,cAAa,GAAG,wBAAwB,QAAO,EAAE;AAA0B,QAAGA,cAAa,GAAG,YAAY,QAAO,EAAE;AAAY,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,EAAA6B,GAAE,cAAY;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,GAAGF,IAAE,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,IAAE,GAAG,qCAAmC,GAAG;AAAuB,WAAOE,GAAE,GAAED,IAAE,GAAE,CAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,0BAAwB;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,GAAGF,IAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,IAAE,GAAG,qCAAmC,GAAG;AAAuB,WAAOE,GAAE,EAAE,CAAC,GAAE,GAAED,EAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,oCAAkC;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAED,GAAE,QAAOE,KAAE,EAAE,MAAMF,IAAE,SAASI,IAAE;AAAC,aAAO,EAAE,MAAMA,IAAE,SAAS,GAAE;AAAC,eAAO,EAAE,WAAS;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAG,EAAE,QAAO,SAASA,IAAE;AAAC,eAAQ,IAAE,EAAE,IAAIA,IAAE,SAASI,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAI,CAAC,GAAEF,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAIC,KAAEP,GAAEM,EAAC,GAAE,IAAEC,GAAE,QAAO,IAAE,EAAED,EAAC;AAAE,YAAG,MAAI,UAAQ,EAAE,KAAK,IAAI,MAAI,MAAG;AAAS,UAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,mBAAQ,IAAEC,GAAE,CAAC,GAAEJ,KAAE,EAAE,QAAO,IAAE,GAAE,IAAEA,IAAE,KAAI;AAAC,gBAAIE,KAAE,KAAK,GAAG,IAAE,CAAC;AAAE,gBAAG,EAAEA,IAAE,EAAE,CAAC,CAAC,MAAI,MAAG,UAAS;AAAA,UAAC;AAAC,iBAAOC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAE,QAAGJ,MAAG,CAACD,IAAE;AAAC,UAAI,IAAE,EAAE,IAAID,IAAE,SAASI,IAAE;AAAC,eAAO,EAAE,QAAQA,EAAC;AAAA,MAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAE,SAASA,IAAE,GAAEE,IAAE;AAAC,eAAO,EAAE,QAAQ,GAAE,SAASC,IAAE;AAAC,YAAE,IAAIH,IAAEG,GAAE,YAAY,MAAIH,GAAEG,GAAE,YAAY,IAAED,KAAG,EAAE,QAAQC,GAAE,iBAAgB,SAAS,GAAE;AAAC,cAAE,IAAIH,IAAE,CAAC,MAAIA,GAAE,CAAC,IAAEE;AAAA,UAAE,CAAC;AAAA,QAAC,CAAC,GAAEF;AAAA,MAAC,GAAE,CAAC,CAAC;AAAE,aAAO,WAAU;AAAC,YAAIA,KAAE,KAAK,GAAG,CAAC;AAAE,eAAO,EAAEA,GAAE,YAAY;AAAA,MAAC;AAAA,IAAC,MAAM,QAAO,WAAU;AAAC,eAAQA,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAI,IAAEJ,GAAEI,EAAC,GAAEE,KAAE,EAAE;AAAO,UAAE,UAAQC,KAAE,GAAEA,KAAED,IAAEC,MAAI;AAAC,mBAAQ,IAAE,EAAEA,EAAC,GAAE,IAAE,EAAE,QAAO,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,gBAAI,IAAE,KAAK,GAAG,IAAE,CAAC;AAAE,gBAAG,EAAE,GAAE,EAAE,CAAC,CAAC,MAAI,MAAG,UAAS;AAAA,UAAC;AAAC,iBAAOH;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,EAAAyB,GAAE,iCAA+B;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,EAAE,MAAMD,IAAE,SAAS,GAAE;AAAC,aAAO,EAAE,WAAS;AAAA,IAAC,CAAC,GAAE,IAAEA,GAAE;AAAO,QAAGC,MAAG,CAAC,GAAE;AAAC,UAAIC,KAAE,EAAE,QAAQF,EAAC;AAAE,UAAGE,GAAE,WAAS,KAAG,EAAE,QAAQA,GAAE,CAAC,EAAE,eAAe,GAAE;AAAC,YAAI,IAAEA,GAAE,CAAC,GAAE,IAAE,EAAE;AAAa,eAAO,WAAU;AAAC,iBAAO,KAAK,GAAG,CAAC,EAAE,iBAAe;AAAA,QAAC;AAAA,MAAC,OAAK;AAAC,YAAIE,KAAE,EAAE,OAAOF,IAAE,SAAS,GAAEI,IAAEC,IAAE;AAAC,iBAAO,EAAED,GAAE,YAAY,IAAE,MAAG,EAAE,QAAQA,GAAE,iBAAgB,SAAS,GAAE;AAAC,cAAE,CAAC,IAAE;AAAA,UAAE,CAAC,GAAE;AAAA,QAAC,GAAE,CAAC,CAAC;AAAE,eAAO,WAAU;AAAC,cAAI,IAAE,KAAK,GAAG,CAAC;AAAE,iBAAOF,GAAE,EAAE,YAAY,MAAI;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC,MAAM,QAAO,WAAU;AAAC,QAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,iBAAQE,KAAEN,GAAE,CAAC,GAAEO,KAAED,GAAE,QAAO,IAAE,GAAE,IAAEC,IAAE,KAAI;AAAC,cAAI,IAAE,KAAK,GAAG,IAAE,CAAC;AAAE,cAAG,EAAE,GAAED,GAAE,CAAC,CAAC,MAAI,MAAG,UAAS;AAAA,QAAC;AAAC,eAAM;AAAA,MAAE;AAAC,aAAM;AAAA,IAAE;AAAA,EAAC;AAAC,EAAAuB,GAAE,0CAAwC;AAAG,MAAI,KAAG,SAAS7B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,IAAI,KAAG;AAAK,aAAOE,GAAE,UAAQ,GAAEA,GAAE,mBAAiBD,IAAEC,GAAE,iBAAe,GAAEA;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,WAAU;AAAC,aAAO,KAAK,KAAK,KAAK,OAAO,GAAE,KAAK;AAAA,IAAO,GAAE,EAAE,UAAU,gBAAc,SAAS,GAAED,IAAE,GAAEC,IAAE;AAAC,aAAO,EAAE,QAAM,KAAK,oBAAkB,KAAK,mBAAiBD,MAAG,KAAK,UAAQ,EAAE,OAAOC,EAAC,GAAE,QAAI;AAAA,IAAE,GAAE,EAAE,UAAU,aAAW,SAAS,GAAED,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,QAAOA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAEA,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,sBAAqBA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,oBAAkB,SAAS,GAAEA,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,qCAAoCA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,WAAS,SAAS,GAAEA,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,YAAWA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAEA,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,2BAA0BA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,UAAU,GAAE6B,MAAG,SAAS9B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,IAAI,KAAG;AAAK,aAAOE,GAAE,mBAAiB,GAAEA,GAAE,iBAAeD,IAAEC,GAAE,YAAU,GAAEA,GAAE,SAAO,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,gBAAc,SAAS,GAAED,IAAE;AAAC,QAAE,QAAM,KAAK,oBAAkB,KAAK,mBAAiBA,OAAI,KAAK,cAAY,UAAQ,MAAI,KAAK,eAAa,KAAK,SAAO,EAAE;AAAA,IAAW,GAAE,EAAE,UAAU,cAAY,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,MAAM;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,UAAU;AAAA,IAAC,GAAE,EAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,oBAAoB;AAAA,IAAC,GAAE,EAAE,UAAU,wCAAsC,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,mCAAmC;AAAA,IAAC,GAAE,EAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,yBAAyB;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,WAAW;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,WAAS,GAAGD,IAAE;AAAC,aAAQ,IAAE,IAAI,MAAMA,EAAC,GAAE,IAAE,GAAE,IAAEA,IAAE,IAAI,GAAE,CAAC,IAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,aAAQ,IAAE,CAAC,EAAE,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,eAAQC,KAAED,GAAE,CAAC,GAAE,IAAE,CAAC,GAAEE,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,YAAI,IAAE,EAAEA,EAAC;AAAE,UAAE,KAAK,IAAE,MAAID,GAAE,YAAY;AAAE,iBAAQ,IAAE,GAAE,IAAEA,GAAE,gBAAgB,QAAO,KAAI;AAAC,cAAIG,KAAE,MAAIH,GAAE,gBAAgB,CAAC;AAAE,YAAE,KAAK,IAAEG,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGJ,IAAE,GAAE,GAAE;AAAC,aAAQC,KAAE,GAAEA,KAAED,GAAE,QAAOC,KAAI,KAAGA,OAAI,EAAE,UAAQ,IAAED,GAAEC,EAAC,GAAEC,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,UAAI,IAAE,EAAEA,EAAC;AAAE,UAAG,EAAE,CAAC,MAAI,KAAG,QAAM;AAAA,IAAE;AAAC,WAAM;AAAA,EAAE;AAAC,WAAS,GAAGF,IAAE,GAAE;AAAC,aAAQ,IAAE,EAAE,IAAIA,IAAE,SAASM,IAAE;AAAC,aAAO,GAAG,kBAAkB,CAACA,EAAC,GAAE,CAAC;AAAA,IAAC,CAAC,GAAEL,KAAE,GAAG,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,GAAE,SAASK,IAAE;AAAC,UAAIC,KAAE,CAAC;AAAE,aAAO,EAAE,QAAQD,IAAE,SAAS,GAAE;AAAC,YAAI,IAAE,GAAG,EAAE,WAAW;AAAE,UAAE,QAAQ,GAAE,SAAS,GAAE;AAAC,UAAAC,GAAE,CAAC,IAAE;AAAA,QAAE,CAAC;AAAA,MAAC,CAAC,GAAEA;AAAA,IAAC,CAAC,GAAEL,KAAE,GAAE,IAAE,GAAE,KAAG,GAAE,KAAI;AAAC,UAAI,IAAEA;AAAE,MAAAA,KAAE,GAAG,EAAE,MAAM;AAAE,eAAQE,KAAE,SAASE,IAAE;AAAC,iBAAQC,KAAE,EAAED,EAAC,GAAE,IAAE,GAAE,IAAEC,GAAE,QAAO,KAAI;AAAC,cAAI,IAAEA,GAAE,CAAC,EAAE,aAAY,IAAEA,GAAE,CAAC,EAAE,WAAU,IAAE,GAAG,CAAC,GAAEJ,KAAE,GAAG,GAAE,GAAEG,EAAC;AAAE,cAAGH,MAAG,EAAE,QAAQ,CAAC,KAAG,EAAE,WAAS,GAAE;AAAC,gBAAI,IAAEF,GAAEK,EAAC;AAAE,gBAAGyB,IAAG,GAAE,CAAC,MAAI,OAAG;AAAC,gBAAE,KAAK,CAAC;AAAE,uBAAQ1B,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,oBAAIG,KAAE,EAAEH,EAAC;AAAE,kBAAEC,EAAC,EAAEE,EAAC,IAAE;AAAA,cAAE;AAAA,YAAC;AAAA,UAAC,OAAK;AAAC,gBAAIK,KAAE,GAAG,kBAAkB,GAAE,IAAE,GAAE,CAAC;AAAE,YAAAX,GAAEI,EAAC,IAAEJ,GAAEI,EAAC,EAAE,OAAOO,EAAC,GAAE,EAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,kBAAIC,MAAG,GAAG,EAAE,WAAW;AAAE,gBAAE,QAAQA,KAAG,SAAS,IAAG;AAAC,kBAAER,EAAC,EAAE,EAAE,IAAE;AAAA,cAAE,CAAC;AAAA,YAAC,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,CAAAF,GAAE,CAAC;AAAA,IAAC;AAAC,WAAOH;AAAA,EAAC;AAAC,EAAA4B,GAAE,oCAAkC;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,IAAI6B,IAAG9B,IAAE,EAAE,aAAYC,EAAC;AAAE,WAAO,EAAE,OAAO,CAAC,GAAE,GAAG,EAAE,QAAO,CAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,yBAAuB;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,IAAI6B,IAAG9B,IAAE,CAAC;AAAE,MAAE,OAAO,CAAC;AAAE,QAAIE,KAAE,EAAE,QAAO,IAAE,IAAI,GAAG,GAAEF,IAAE,CAAC,GAAE,IAAE,EAAE,aAAa,GAAEI,KAAE,IAAI,GAAG,YAAY,EAAC,YAAWF,GAAC,CAAC,GAAE,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,EAAC,CAAC;AAAE,WAAO,GAAG,CAACE,IAAE,CAAC,GAAEH,EAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,mCAAiC;AAAG,WAASE,IAAG/B,IAAE,GAAE;AAAC,MAAE,UAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,UAAGC,GAAE,WAAS,EAAE,QAAO;AAAC,iBAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,cAAIC,KAAE,EAAE,CAAC,GAAE,IAAED,GAAE,CAAC,GAAE,IAAEC,OAAI,KAAG,EAAE,mBAAmBA,GAAE,YAAY,MAAI;AAAO,cAAG,MAAI,MAAG,UAAS;AAAA,QAAC;AAAC,eAAM;AAAA,MAAE;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAC,EAAA2B,GAAE,eAAaE;AAAG,WAAS,GAAG/B,IAAE,GAAE;AAAC,WAAOA,GAAE,SAAO,EAAE,UAAQ,EAAE,MAAMA,IAAE,SAAS,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAEA,EAAC;AAAE,aAAO,MAAI,KAAG,EAAE,mBAAmB,EAAE,YAAY;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,uBAAqB;AAAG,WAAS,GAAG7B,IAAE;AAAC,WAAO,EAAE,MAAMA,IAAE,SAAS,GAAE;AAAC,aAAO,EAAE,MAAM,GAAE,SAAS,GAAE;AAAC,eAAO,EAAE,MAAM,GAAE,SAASC,IAAE;AAAC,iBAAO,EAAE,QAAQA,GAAE,eAAe;AAAA,QAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,4BAA0B;AAAE,CAAC;AAAE,IAAI,KAAG9B,GAAE,CAAAiC,OAAG;AAAC;AAAa,MAAI,KAAGA,MAAGA,GAAE,aAAW,2BAAU;AAAC,QAAIhC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe+B,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,qCAAmCA,GAAE,oCAAkCA,GAAE,sBAAoBA,GAAE,oBAAkBA,GAAE,2CAAyCA,GAAE,6BAA2BA,GAAE,uBAAqBA,GAAE,0BAAwBA,GAAE,2BAAyBA,GAAE,kCAAgCA,GAAE,gCAA8BA,GAAE,kCAAgCA,GAAE,kBAAgB;AAAO,MAAI,IAAE,EAAE,GAAEC,KAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAGL,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAG5B,IAAE,GAAE,GAAEC,IAAE,GAAE;AAAC,QAAIC,KAAE,EAAE,IAAIF,IAAE,SAAS,GAAE;AAAC,aAAO,GAAG,GAAEC,EAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAID,IAAE,SAAS,GAAE;AAAC,aAAO,GAAG,GAAE,GAAEC,EAAC;AAAA,IAAC,CAAC,GAAE,IAAE,CAAC,GAAEG,KAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAA6B,GAAE,MAAM,GAAEA,GAAE,OAAO,MAAI,IAAEA,GAAE,IAAIjC,IAAE,SAAS,GAAE;AAAC,aAAOkC,IAAG,GAAEjC,EAAC;AAAA,IAAC,CAAC,GAAEG,KAAE6B,GAAE,IAAIjC,IAAE,SAAS,GAAE;AAAC,aAAOmC,IAAG,GAAE,GAAElC,EAAC;AAAA,IAAC,CAAC,GAAE,IAAEmC,IAAGpC,IAAE,GAAEC,EAAC;AAAG,QAAIK,KAAE,GAAGN,IAAE,GAAEC,EAAC,GAAEM,KAAE0B,GAAE,IAAIjC,IAAE,SAAS,GAAE;AAAC,aAAO,GAAG,GAAEC,EAAC;AAAA,IAAC,CAAC,GAAE,IAAEgC,GAAE,IAAIjC,IAAE,SAAS,GAAE;AAAC,aAAO,GAAG,GAAEA,IAAE,GAAEC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQC,GAAE,OAAO,GAAE,GAAE,GAAEE,IAAEE,IAAEC,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,EAAAyB,GAAE,kBAAgB;AAAG,WAAS,GAAGhC,IAAE,GAAE;AAAC,QAAI,IAAE,IAAI;AAAG,IAAAA,GAAE,OAAO,CAAC;AAAE,QAAIC,KAAE,EAAE,gBAAe,IAAE,EAAE,QAAQA,IAAE,EAAE,GAAEC,KAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,aAAO,EAAE,SAAO;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,OAAOA,EAAC,GAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,yBAAyBJ,IAAE,CAAC,GAAEM,KAAE,GAAG,qBAAqBF,EAAC,GAAEG,KAAE,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,uBAAsB,UAASP,GAAE,MAAK,SAAQM,IAAE,YAAWF,GAAE,IAAG,GAAE,IAAEiC,IAAGjC,EAAC;AAAE,aAAO,MAAIG,GAAE,YAAU,IAAGA;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGP,IAAE;AAAC,WAAO,GAAG,qBAAqBA,EAAC,IAAE,QAAMA,GAAE,MAAI,QAAMqC,IAAGrC,EAAC;AAAA,EAAC;AAAC,EAAAgC,GAAE,kCAAgC;AAAG,WAASK,IAAGrC,IAAE;AAAC,WAAOA,cAAa,GAAG,WAASA,GAAE,aAAa,OAAKA,cAAa,GAAG,cAAYA,GAAE,kBAAgB;AAAA,EAAE;AAAC,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,UAAI,IAAEA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAK,aAAO,EAAE,iBAAe,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,wCAAsC,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,EAAAgC,GAAE,gCAA8B;AAAG,WAAS,GAAGhC,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,CAAC,GAAEC,KAAE+B,GAAE,OAAO,GAAE,SAAS,GAAE7B,IAAE;AAAC,aAAOA,GAAE,SAAOJ,GAAE,OAAK,IAAE,IAAE;AAAA,IAAC,GAAE,CAAC;AAAE,QAAGE,KAAE,GAAE;AAAC,UAAI,IAAED,GAAE,4BAA4B,EAAC,cAAaD,IAAE,aAAY,EAAC,CAAC;AAAE,QAAE,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,qBAAoB,UAASA,GAAE,KAAI,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,EAAAgC,GAAE,kCAAgC;AAAG,WAAS,GAAGhC,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC,GAAE;AAAE,WAAO,EAAE,SAAS,GAAED,EAAC,MAAI,IAAE,oCAAkCA,KAAE,+CAA6C,IAAE,wDAAuDC,GAAE,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,uBAAsB,UAASD,GAAC,CAAC,IAAGC;AAAA,EAAC;AAAC,EAAA+B,GAAE,2BAAyB;AAAG,WAAS,GAAGhC,IAAE,GAAE,GAAEC,IAAE;AAAC,IAAAA,OAAI,WAASA,KAAE,CAAC;AAAG,QAAI,IAAE,CAAC,GAAEC,KAAE,GAAG,EAAE,UAAU;AAAE,QAAG,EAAE,QAAQA,EAAC,EAAE,QAAM,CAAC;AAAE,QAAI,IAAEF,GAAE,MAAK,IAAE,EAAE,SAASE,IAAEF,EAAC;AAAE,SAAG,EAAE,KAAK,EAAC,SAAQ,EAAE,wBAAwB,EAAC,cAAaA,IAAE,mBAAkBC,GAAC,CAAC,GAAE,MAAK,GAAG,0BAA0B,gBAAe,UAAS,EAAC,CAAC;AAAE,QAAIG,KAAE,EAAE,WAAWF,IAAED,GAAE,OAAO,CAACD,EAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAII,IAAE,SAASE,IAAE;AAAC,UAAIC,KAAE,EAAE,SAASN,EAAC;AAAE,aAAOM,GAAE,KAAKD,EAAC,GAAE,GAAGN,IAAEM,IAAE,GAAEC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAA,EAAC;AAAC,EAAAyB,GAAE,0BAAwB;AAAG,WAAS,GAAGhC,IAAE;AAAC,QAAI,IAAE,CAAC;AAAE,QAAG,EAAE,QAAQA,EAAC,EAAE,QAAO;AAAE,QAAI,IAAE,EAAE,MAAMA,EAAC;AAAE,QAAG,aAAa,GAAG,YAAY,GAAE,KAAK,EAAE,cAAc;AAAA,aAAU,aAAa,GAAG,eAAa,aAAa,GAAG,UAAQ,aAAa,GAAG,uBAAqB,aAAa,GAAG,oCAAkC,aAAa,GAAG,2BAAyB,aAAa,GAAG,WAAW,KAAE,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC;AAAA,aAAU,aAAa,GAAG,YAAY,KAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAW,SAAS,GAAE;AAAC,aAAO,GAAG,EAAE,UAAU;AAAA,IAAC,CAAC,CAAC;AAAA,aAAU,EAAE,aAAa,GAAG,UAAU,OAAM,MAAM,sBAAsB;AAAE,QAAIC,KAAE,GAAG,eAAe,CAAC,GAAE,IAAED,GAAE,SAAO;AAAE,QAAGC,MAAG,GAAE;AAAC,UAAIC,KAAE,EAAE,KAAKF,EAAC;AAAE,aAAO,EAAE,OAAO,GAAGE,EAAC,CAAC;AAAA,IAAC,MAAM,QAAO;AAAA,EAAC;AAAC,EAAA8B,GAAE,uBAAqB;AAAG,MAAI,KAAG,SAAShC,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,UAAI,IAAEA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAK,aAAO,EAAE,eAAa,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,aAAa,KAAK,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,WAASkC,IAAGlC,IAAE,GAAE;AAAC,QAAI,IAAE,IAAI;AAAG,IAAAA,GAAE,OAAO,CAAC;AAAE,QAAIC,KAAE,EAAE,cAAa,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE,GAAE;AAAC,UAAI,IAAE,EAAE,UAAU,EAAE,UAAU,GAAEE,KAAE,EAAE,IAAI,GAAE,SAAS,GAAEE,IAAE;AAAC,YAAIC,KAAE,GAAG,wBAAwB,CAAC,CAAC,GAAE,CAAC,GAAE,MAAK,CAAC;AAAE,eAAO,EAAE,QAAQA,EAAC,IAAE,EAAC,SAAQ,EAAE,2BAA2B,EAAC,cAAaP,IAAE,aAAY,GAAE,gBAAeM,GAAC,CAAC,GAAE,MAAK,GAAG,0BAA0B,qBAAoB,UAASN,GAAE,MAAK,YAAW,EAAE,KAAI,aAAYM,KAAE,EAAC,IAAE;AAAA,MAAI,CAAC;AAAE,aAAOJ,GAAE,OAAO,EAAE,QAAQE,EAAC,CAAC;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,EAAA4B,GAAE,6BAA2BE;AAAG,WAASC,IAAGnC,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,IAAI;AAAG,IAAAD,GAAE,OAAOC,EAAC;AAAE,QAAI,IAAEA,GAAE;AAAa,QAAEgC,GAAE,OAAO,GAAE,SAAS,GAAE;AAAC,aAAO,EAAE,sBAAoB;AAAA,IAAE,CAAC;AAAE,QAAI/B,KAAE,EAAE,OAAO,GAAE,SAAS,GAAE,GAAE;AAAC,UAAIE,KAAE,EAAE,KAAI,IAAE,EAAE,gBAAc,GAAEE,KAAE,GAAG,uBAAuBF,IAAEJ,IAAE,GAAE,CAAC,GAAEO,KAAE,GAAGD,IAAE,GAAEN,IAAE,CAAC,GAAE,IAAEsC,IAAGhC,IAAE,GAAEN,IAAE,CAAC;AAAE,aAAO,EAAE,OAAOO,IAAE,CAAC;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAOL;AAAA,EAAC;AAAC,EAAA8B,GAAE,2CAAyCG;AAAG,MAAI,KAAG,SAASnC,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,UAAI,IAAEA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAK,aAAO,EAAE,iBAAe,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,wCAAsC,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,EAAAgC,GAAE,oBAAkB;AAAG,WAAS,GAAGhC,IAAE,GAAE;AAAC,QAAI,IAAE,IAAI;AAAG,IAAAA,GAAE,OAAO,CAAC;AAAE,QAAIC,KAAE,EAAE,cAAa,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE,GAAE;AAAC,aAAO,EAAE,WAAW,SAAO,OAAKA,GAAE,KAAK,EAAC,SAAQ,EAAE,8BAA8B,EAAC,cAAaF,IAAE,aAAY,EAAC,CAAC,GAAE,MAAK,GAAG,0BAA0B,eAAc,UAASA,GAAE,MAAK,YAAW,EAAE,IAAG,CAAC,GAAEE;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,EAAA8B,GAAE,sBAAoB;AAAG,WAASI,IAAGpC,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC;AAAE,WAAOgC,GAAE,QAAQjC,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,IAAI;AAAG,QAAE,OAAOA,EAAC;AAAE,UAAI,IAAEA,GAAE;AAAe,MAAA+B,GAAE,QAAQ,GAAE,SAAS,GAAE;AAAC,YAAI7B,KAAE,GAAG,YAAY,CAAC,GAAE,IAAE,EAAE,gBAAc,GAAEE,KAAE,EAAE,KAAIC,KAAE,GAAG,iCAAiCD,IAAE,GAAEF,IAAE,CAAC,GAAE,IAAEG,GAAE,CAAC;AAAE,YAAG0B,GAAE,QAAQA,GAAE,QAAQ,CAAC,CAAC,GAAE;AAAC,cAAI,IAAE,EAAE,0BAA0B,EAAC,cAAa,GAAE,YAAW,EAAC,CAAC;AAAE,UAAAhC,GAAE,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,wBAAuB,UAAS,EAAE,KAAI,CAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAEA;AAAA,EAAC;AAAC,EAAA+B,GAAE,oCAAkCI;AAAG,WAAS,GAAGpC,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,CAAC,GAAEC,KAAE+B,GAAE,OAAOjC,IAAE,SAAS,GAAEI,IAAE,GAAE;AAAC,aAAO,EAAE,WAAW,CAAC,EAAE,sBAAoB,QAAI6B,GAAE,QAAQ7B,IAAE,SAASE,IAAE;AAAC,YAAIC,KAAE,CAAC,CAAC;AAAE,QAAA0B,GAAE,QAAQjC,IAAE,SAAS,GAAE,GAAE;AAAC,gBAAI,KAAG,GAAG,aAAa,GAAEM,EAAC,KAAG,EAAE,WAAW,CAAC,EAAE,sBAAoB,QAAIC,GAAE,KAAK,CAAC;AAAA,QAAC,CAAC,GAAEA,GAAE,SAAO,KAAG,CAAC,GAAG,aAAa,GAAED,EAAC,MAAI,EAAE,KAAKA,EAAC,GAAE,EAAE,KAAK,EAAC,MAAKC,IAAE,MAAKD,GAAC,CAAC;AAAA,MAAE,CAAC,GAAE;AAAA,IAAC,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAIJ,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE6B,GAAE,IAAI,EAAE,MAAK,SAAS3B,IAAE;AAAC,eAAOA,KAAE;AAAA,MAAC,CAAC,GAAE,IAAEL,GAAE,+BAA+B,EAAC,cAAa,GAAE,aAAY,GAAE,kBAAiBG,IAAE,YAAW,EAAE,KAAI,CAAC;AAAE,aAAM,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,gBAAe,UAAS,EAAE,MAAK,YAAW,EAAE,KAAI,cAAa,CAAC,EAAE,IAAI,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,WAASkC,IAAGtC,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,CAAC,GAAEC,KAAE+B,GAAE,OAAOjC,IAAE,SAAS,GAAE,GAAEI,IAAE;AAAC,UAAI,IAAE6B,GAAE,IAAI,GAAE,SAAS3B,IAAE;AAAC,eAAM,EAAC,KAAIF,IAAE,MAAKE,GAAC;AAAA,MAAC,CAAC;AAAE,aAAO,EAAE,OAAO,CAAC;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAO2B,GAAE,QAAQ/B,IAAE,SAAS,GAAE;AAAC,UAAI,IAAE,EAAE,WAAW,EAAE,GAAG;AAAE,UAAG,EAAE,sBAAoB,MAAG;AAAC,YAAIE,KAAE,EAAE,KAAI,IAAE,EAAE,MAAKE,KAAE2B,GAAE,QAAQ/B,IAAE,SAAS,GAAE;AAAC,iBAAO,EAAE,WAAW,EAAE,GAAG,EAAE,sBAAoB,QAAI,EAAE,MAAIE,MAAG,GAAG,qBAAqB,EAAE,MAAK,CAAC;AAAA,QAAC,CAAC,GAAEG,KAAE0B,GAAE,IAAI3B,IAAE,SAAS,GAAE;AAAC,cAAI,IAAE,CAAC,EAAE,MAAI,GAAEF,KAAE,CAAC,GAAE,IAAE,EAAE,QAAM,IAAE,KAAG,EAAE,KAAI,IAAEH,GAAE,qCAAqC,EAAC,cAAa,GAAE,aAAY,GAAE,kBAAiB,GAAE,YAAW,EAAE,KAAI,CAAC;AAAE,iBAAM,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,uBAAsB,UAAS,EAAE,MAAK,YAAW,GAAE,cAAa,EAAC;AAAA,QAAC,CAAC;AAAE,YAAE,EAAE,OAAOM,EAAC;AAAA,MAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,EAAAyB,GAAE,qCAAmCM;AAAG,WAAS,GAAGtC,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC,GAAE,IAAEgC,GAAE,IAAI,GAAE,SAAS/B,IAAE;AAAC,aAAOA,GAAE;AAAA,IAAI,CAAC;AAAE,WAAO+B,GAAE,QAAQjC,IAAE,SAASE,IAAE;AAAC,UAAI,IAAEA,GAAE;AAAK,UAAG+B,GAAE,SAAS,GAAE,CAAC,GAAE;AAAC,YAAI,IAAE,EAAE,4BAA4B/B,EAAC;AAAE,QAAAD,GAAE,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,iCAAgC,UAAS,EAAC,CAAC;AAAA,MAAC;AAAA,IAAC,CAAC,GAAEA;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGF,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,kBAAgB,GAAG,iBAAe;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGC,IAAE;AAAC,IAAAA,KAAE,GAAG,SAASA,IAAE,EAAC,gBAAe,GAAG,oCAAmC,CAAC;AAAE,QAAI,IAAE,CAAC;AAAE,WAAO,GAAG,QAAQA,GAAE,OAAM,SAAS,GAAE;AAAC,QAAE,EAAE,IAAI,IAAE;AAAA,IAAC,CAAC,GAAE,GAAG,eAAe,GAAEA,GAAE,cAAc;AAAA,EAAC;AAAC,KAAG,iBAAe;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAOA,KAAE,GAAG,SAASA,IAAE,EAAC,gBAAe,GAAG,qCAAoC,CAAC,GAAE,GAAG,gBAAgBA,GAAE,OAAMA,GAAE,cAAaA,GAAE,YAAWA,GAAE,gBAAeA,GAAE,WAAW;AAAA,EAAC;AAAC,KAAG,kBAAgB;AAAE,CAAC;AAAE,IAAIuC,MAAGxC,GAAE,QAAI;AAAC;AAAa,MAAIyC,MAAG,MAAI,GAAG,aAAW,2BAAU;AAAC,QAAIxC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,qBAAmB,GAAG,6BAA2B,GAAG,uBAAqB,GAAG,2BAAyB,GAAG,yBAAuB;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,4BAA2B,KAAG,wBAAuB,KAAG,sBAAqB,KAAG,8BAA6B,KAAG,CAAC,IAAG,IAAG,IAAG,EAAE;AAAE,SAAO,OAAO,EAAE;AAAE,WAAS,GAAGD,IAAE;AAAC,WAAO,GAAG,SAAS,IAAGA,GAAE,IAAI;AAAA,EAAC;AAAC,KAAG,yBAAuB;AAAG,MAAI,KAAG,SAASA,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,KAAK,aAAYC,KAAEF,GAAE,KAAK,MAAK,CAAC,KAAG;AAAK,aAAOE,GAAE,QAAMD,IAAEC,GAAE,iBAAe,CAAC,GAAE,OAAO,eAAeA,IAAE,EAAE,SAAS,GAAE,MAAM,qBAAmB,MAAM,kBAAkBA,IAAEA,GAAE,WAAW,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,KAAK,GAAE,KAAG,SAASF,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAOC,GAAE,gBAAc,GAAEA,GAAE,OAAK,IAAGA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,KAAG,2BAAyB;AAAG,MAAI,KAAG,SAASF,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAOC,GAAE,gBAAc,GAAEA,GAAE,OAAK,IAAGA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,KAAG,uBAAqB;AAAG,MAAI,KAAG,SAASF,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAO,EAAE,OAAK,IAAG;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,KAAG,6BAA2B;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAOC,GAAE,gBAAc,GAAEA,GAAE,OAAK,IAAGA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,KAAG,qBAAmB;AAAE,CAAC;AAAE,IAAI,KAAGH,GAAE,CAAA0C,OAAG;AAAC;AAAa,SAAO,eAAeA,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,8BAA4BA,GAAE,cAAYA,GAAE,0BAAwBA,GAAE,6BAA2BA,GAAE,iBAAe;AAAO,MAAI,KAAG,GAAG,GAAEC,MAAG,EAAE,GAAE,KAAGH,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,EAAAE,GAAE,iBAAe,CAAC;AAAE,EAAAA,GAAE,6BAA2B;AAA0B,WAAS,GAAGzC,IAAE;AAAC,SAAK,OAAKyC,GAAE,4BAA2B,KAAK,UAAQzC;AAAA,EAAC;AAAC,EAAAyC,GAAE,0BAAwB;AAAG,KAAG,YAAU,MAAM;AAAU,MAAI,KAAG,WAAU;AAAC,aAASzC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,mBAAiB,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,kBAAgB0C,IAAG,IAAI,GAAE,iBAAiB,IAAE,EAAE,kBAAgB,GAAG,sBAAsB,iBAAgB,KAAK,oBAAkB,KAAK,8BAA4BC;AAAA,IAAG,GAAE3C,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,UAAI,IAAE,GAAG,oBAAoB,GAAE,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,aAAO,EAAE,uBAAqB,MAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,mCAAiC,SAAS,GAAE;AAAC,aAAM;AAAA,IAAE,GAAEA,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAEC,IAAE,GAAE;AAAC,eAAQC,KAAE,MAAK,IAAE,KAAK,oBAAoB,GAAE,IAAE,KAAK,iBAAiB,GAAEE,KAAE,CAAC,GAAE,IAAE,OAAGE,KAAE,KAAK,GAAG,CAAC,GAAEC,KAAE,KAAK,GAAG,CAAC,GAAE,IAAE,WAAU;AAAC,YAAI,IAAEL,GAAE,GAAG,CAAC,GAAE,IAAEA,GAAE,qBAAqB,0BAA0B,EAAC,UAAS,GAAE,QAAOI,IAAE,UAAS,GAAE,UAASJ,GAAE,oBAAoB,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,yBAAyB,GAAEI,IAAEJ,GAAE,GAAG,CAAC,CAAC;AAAE,UAAE,iBAAewC,IAAG,UAAUtC,EAAC,GAAEF,GAAE,WAAW,CAAC;AAAA,MAAC,GAAE,CAAC,IAAG,KAAG,KAAK,aAAaK,IAAE,CAAC,GAAE;AAAC,UAAE;AAAE;AAAA,MAAM,WAASN,GAAE,KAAK,IAAI,GAAE;AAAC,UAAE,GAAE,EAAE,MAAM,MAAK,CAAC;AAAE;AAAA,MAAM,MAAM,MAAK,aAAaM,IAAE,CAAC,IAAE,IAAE,QAAIA,KAAE,KAAK,WAAW,GAAE,KAAK,kBAAkBA,IAAEH,EAAC;AAAG,WAAK,iBAAiB,CAAC;AAAA,IAAC,GAAEJ,GAAE,UAAU,oCAAkC,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAM,EAAEA,OAAI,SAAI,MAAI,UAAQ,MAAI,UAAQ,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,CAAC,KAAG,KAAK,eAAe,KAAG,KAAK,yBAAyB,GAAE,KAAK,4BAA4B,GAAE,CAAC,CAAC;AAAA,IAAE,GAAED,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,sBAAsB,GAAE,CAAC,GAAE,IAAE,KAAK,0BAA0BA,EAAC;AAAE,aAAO;AAAA,IAAC,GAAED,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAE;AAAC,UAAG,KAAK,mCAAmC,GAAE,CAAC,GAAE;AAAC,YAAIC,KAAE,KAAK,iBAAiB,CAAC;AAAE,eAAOA;AAAA,MAAC;AAAC,UAAG,KAAK,kCAAkC,CAAC,GAAE;AAAC,YAAI,IAAE,KAAK,WAAW;AAAE,eAAO,KAAK,aAAa,GAAE;AAAA,MAAC;AAAC,YAAM,IAAI,GAAG,eAAe;AAAA,IAAC,GAAED,GAAE,UAAU,2BAAyB,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,mCAAmC,GAAE,CAAC,KAAG,KAAK,kCAAkC,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,qCAAmC,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE;AAAK,UAAG,CAAC,KAAK,iCAAiC,CAAC,KAAGyC,IAAG,QAAQ,CAAC,EAAE,QAAM;AAAG,UAAI,IAAE,KAAK,GAAG,CAAC,GAAExC,KAAEwC,IAAG,KAAK,GAAE,SAAS,GAAE;AAAC,eAAOzC,GAAE,aAAa,GAAE,CAAC;AAAA,MAAC,CAAC,MAAI;AAAO,aAAOC;AAAA,IAAC,GAAEF,GAAE,UAAU,oCAAkC,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,CAAC;AAAE,aAAO;AAAA,IAAC,GAAEA,GAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,iBAAiB,GAAEC,KAAE,KAAK,0BAA0B,CAAC;AAAE,aAAOyC,IAAG,SAASzC,IAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,sBAAoB,WAAU;AAAC,eAAQ,IAAE,KAAK,iBAAiB,GAAE,IAAE,KAAK,GAAG,CAAC,GAAEC,KAAE,OAAI;AAAC,YAAI,IAAE,EAAE;AAAU,YAAGyC,IAAG,SAAS,GAAE,CAAC,EAAE,QAAO;AAAE,YAAE,KAAK,GAAGzC,EAAC,GAAEA;AAAA,MAAG;AAAA,IAAC,GAAED,GAAE,UAAU,mBAAiB,WAAU;AAAC,UAAG,KAAK,WAAW,WAAS,EAAE,QAAOyC,GAAE;AAAe,UAAI,IAAE,KAAK,6BAA6B,GAAE,IAAE,KAAK,mCAAmC,GAAExC,KAAE,KAAK,iCAAiC;AAAE,aAAM,EAAC,UAAS,KAAK,wBAAwB,CAAC,GAAE,kBAAiB,GAAE,QAAO,KAAK,wBAAwBA,EAAC,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,0BAAwB,WAAU;AAAC,UAAI,IAAE,MAAK,IAAE,KAAK,YAAWC,KAAE,KAAK;AAAsB,aAAOyC,IAAG,IAAI,GAAE,SAAS,GAAExC,IAAE;AAAC,eAAOA,OAAI,IAAEuC,GAAE,iBAAe,EAAC,UAAS,EAAE,wBAAwB,CAAC,GAAE,kBAAiBxC,GAAEC,EAAC,GAAE,QAAO,EAAE,wBAAwB,EAAEA,KAAE,CAAC,CAAC,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,mBAAiB,WAAU;AAAC,UAAI,IAAE,MAAK,IAAE0C,IAAG,IAAI,KAAK,wBAAwB,GAAE,SAASzC,IAAE;AAAC,eAAO,EAAE,0BAA0BA,EAAC;AAAA,MAAC,CAAC;AAAE,aAAOyC,IAAG,QAAQ,CAAC;AAAA,IAAC,GAAE1C,GAAE,UAAU,4BAA0B,SAAS,GAAE;AAAC,UAAG,MAAIyC,GAAE,eAAe,QAAM,CAAC,GAAG,GAAG;AAAE,UAAI,IAAE,EAAE,WAAS,EAAE,mBAAiB,GAAG,KAAG,EAAE;AAAO,aAAO,KAAK,cAAc,CAAC;AAAA,IAAC,GAAEzC,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,aAAa,GAAE,GAAG,GAAG,KAAG,EAAE,KAAK,CAAC,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE;AAAC,eAAQ,IAAE,CAAC,GAAEC,KAAE,KAAK,GAAG,CAAC,GAAE,KAAK,aAAaA,IAAE,CAAC,MAAI,QAAI,CAAAA,KAAE,KAAK,WAAW,GAAE,KAAK,kBAAkBA,IAAE,CAAC;AAAE,aAAOyC,IAAG,UAAU,CAAC;AAAA,IAAC,GAAE1C,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE,GAAE;AAAA,IAAC,GAAEF,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,0BAA0B,GAAE,IAAEyC,IAAG,SAAS,KAAK,qBAAqB,GAAExC,KAAE,EAAC,WAAUD,IAAE,iBAAgB,GAAE,SAAQ,GAAE,mBAAkB,EAAC;AAAE,aAAOC;AAAA,IAAC,GAAEF,GAAE,UAAU,4BAA0B,WAAU;AAAC,UAAI,IAAE;AAAK,aAAO0C,IAAG,IAAI,KAAK,YAAW,SAAS,GAAE;AAAC,eAAO,EAAE,wBAAwB,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAE1C;AAAA,EAAC,EAAE;AAAE,EAAAyC,GAAE,cAAY;AAAG,WAASE,IAAG3C,IAAE,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,4BAA4BD,IAAE,CAAC,GAAEG,KAAE,KAAK,iBAAiB,CAAC;AAAE,QAAGA,OAAI,QAAO;AAAC,UAAI,IAAE,KAAK,oBAAoB,GAAEE,KAAE,KAAK,mBAAmB,EAAE,CAAC,GAAEC,KAAE,IAAIL,GAAEI,IAAE,CAAC;AAAE,MAAAF,KAAEG,GAAE,aAAa,GAAE,KAAK,iBAAiB,CAAC,IAAEH;AAAA,IAAC;AAAC,QAAI,IAAEA,GAAE,OAAM,IAAEA,GAAE,YAAW,IAAEA,GAAE;AAAY,SAAK,WAAW,WAAS,KAAG,KAAG,MAAI,WAAS,IAAE,GAAG,KAAI,IAAE,IAAG,KAAK,kCAAkC,GAAE,GAAE,CAAC,KAAG,KAAK,wBAAwBJ,IAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,EAAAyC,GAAE,8BAA4BE;AAAE,CAAC;AAAE,IAAI,KAAG5C,GAAE,OAAG;AAAC;AAAa,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,8BAA4B,EAAE,uBAAqB,EAAE,eAAa,EAAE,mBAAiB,EAAE,WAAS,EAAE,aAAW,EAAE,SAAO,EAAE,mBAAiB,EAAE,oBAAkB,EAAE,0BAAwB,EAAE,uBAAqB;AAAO,IAAE,uBAAqB;AAAE,IAAE,0BAAwB;AAAE,IAAE,oBAAkB;AAAG,IAAE,mBAAiB;AAAE,IAAE,SAAO,KAAG,EAAE;AAAwB,IAAE,aAAW,KAAG,EAAE;AAAwB,IAAE,WAAS,KAAG,EAAE;AAAwB,IAAE,mBAAiB,KAAG,EAAE;AAAwB,IAAE,eAAa,KAAG,EAAE;AAAwB,IAAE,uBAAqB,KAAG,EAAE;AAAwB,WAAS,GAAGC,IAAE,GAAE,GAAE;AAAC,WAAO,IAAE,IAAEA;AAAA,EAAC;AAAC,IAAE,8BAA4B;AAAG,MAAI,KAAG,KAAG,EAAE;AAAgB,CAAC;AAAE,IAAI4C,MAAG7C,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,aAAW;AAAO,MAAI,KAAG6B,IAAG,GAAE,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAAS5B,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,iBAAe,SAAS,GAAE;AAAC,WAAK,uBAAqB,GAAG,IAAI,GAAE,sBAAsB,IAAE,EAAE,uBAAqB,GAAG,sBAAsB,sBAAqB,KAAK,eAAa,GAAG,IAAI,GAAE,cAAc,IAAE,EAAE,eAAa,GAAG,sBAAsB,cAAa,KAAK,sBAAoB,GAAG,qBAAqB,IAAE,oBAAI,QAAI,CAAC,GAAE,GAAG,qBAAqB,KAAG,KAAK,qBAAmB,KAAK,kBAAiB,KAAK,iBAAe,KAAK,2BAAyB,KAAK,qBAAmB,KAAK,kBAAiB,KAAK,iBAAe,KAAK;AAAA,IAAkB,GAAEA,GAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,UAAI,IAAE;AAAK,SAAG,QAAQ,GAAE,SAASC,IAAE;AAAC,UAAE,WAAWA,GAAE,OAAK,mBAAkB,WAAU;AAAC,cAAI,IAAE,GAAG,eAAeA,EAAC,GAAEC,KAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,QAAOE,KAAE,EAAE,qBAAoB,IAAE,EAAE,kCAAiCE,KAAE,EAAE;AAAwB,aAAG,QAAQJ,IAAE,SAASK,IAAE;AAAC,gBAAI,IAAEA,GAAE,QAAM,IAAE,KAAGA,GAAE;AAAI,cAAE,WAAW,KAAG,GAAG,qBAAqBA,EAAC,IAAE,GAAE,WAAU;AAAC,kBAAI,IAAE,GAAG,wBAAwBA,GAAE,KAAIN,IAAEM,GAAE,gBAAc,EAAE,cAAaA,GAAE,eAAc,EAAE,sBAAqB,EAAE,+BAA+B,GAAE,IAAE,GAAG,4BAA4B,EAAE,oBAAoBN,GAAE,IAAI,GAAE,GAAG,QAAOM,GAAE,GAAG;AAAE,gBAAE,eAAe,GAAE,CAAC;AAAA,YAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQ,GAAE,SAASA,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,UAAS,GAAG,UAAU,YAAWA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQ,GAAE,SAASA,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,YAAW,GAAG,UAAU,QAAOA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQH,IAAE,SAASG,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,kBAAiB,GAAG,UAAU,sBAAqBA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQ,GAAE,SAASA,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,sBAAqB,GAAG,UAAU,qCAAoCA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQD,IAAE,SAASC,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,cAAa,GAAG,UAAU,2BAA0BA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEP,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE;AAAC,UAAI,IAAE;AAAK,WAAK,WAAW,KAAG,KAAG,MAAI,IAAE,KAAG,IAAG,WAAU;AAAC,YAAIE,KAAE,GAAG,kCAAkC,GAAE,GAAEF,MAAG,EAAE,cAAa,EAAE,sBAAqB,GAAE,EAAE,2BAA2B,GAAE,IAAE,GAAG,4BAA4B,EAAE,oBAAoB,EAAE,IAAI,GAAED,IAAE,CAAC;AAAE,UAAE,eAAe,GAAEG,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEJ,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,GAAG,wCAAwC,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,kCAAgC,SAAS,GAAE,GAAEC,IAAE,GAAE;AAAC,aAAO,GAAG,+BAA+B,GAAE,GAAEA,IAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,6BAA6B;AAAE,aAAO,GAAG,4BAA4BA,IAAE,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,qBAAmB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,aAAO,KAAK,oBAAoB,IAAI,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,aAAO,KAAK,oBAAoB,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,iBAAe,SAAS,GAAE,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,yBAAuB,SAAS,GAAE,GAAE;AAAC,WAAK,oBAAoB,IAAI,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAE;AAAC,WAAK,oBAAoB,CAAC,IAAE;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,aAAW;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,uBAAqB,GAAG,mBAAiB,GAAG,sBAAoB,GAAG,4BAA0B;AAAO,WAAS,GAAGC,IAAE,GAAE;AAAC,UAAMA,GAAE,WAAW,MAAI,QAAIA,GAAE,cAAY,EAAE,aAAYA,GAAE,YAAU,EAAE,aAAWA,GAAE,YAAU,EAAE,cAAYA,GAAE,YAAU,EAAE;AAAA,EAAU;AAAC,KAAG,4BAA0B;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,UAAMA,GAAE,WAAW,MAAI,QAAIA,GAAE,cAAY,EAAE,aAAYA,GAAE,cAAY,EAAE,aAAYA,GAAE,YAAU,EAAE,WAAUA,GAAE,YAAU,EAAE,WAAUA,GAAE,YAAU,EAAE,WAAUA,GAAE,UAAQ,EAAE,WAASA,GAAE,YAAU,EAAE,cAAYA,GAAE,YAAU,EAAE,WAAUA,GAAE,YAAU,EAAE,WAAUA,GAAE,UAAQ,EAAE;AAAA,EAAQ;AAAC,KAAG,sBAAoB;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,IAAAA,GAAE,SAAS,CAAC,MAAI,SAAOA,GAAE,SAAS,CAAC,IAAE,CAAC,CAAC,IAAEA,GAAE,SAAS,CAAC,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,KAAG,mBAAiB;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,IAAAA,GAAE,SAAS,CAAC,MAAI,SAAOA,GAAE,SAAS,CAAC,IAAE,CAAC,CAAC,IAAEA,GAAE,SAAS,CAAC,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,KAAG,uBAAqB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,iBAAe,GAAG,eAAa,GAAG,wBAAsB;AAAO,MAAI,KAAG,EAAE;AAAE,WAAS,GAAGC,IAAE;AAAC,WAAO,GAAGA,GAAE,WAAW;AAAA,EAAC;AAAC,KAAG,wBAAsB;AAAG,MAAI,KAAG;AAAO,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAK,WAAO,KAAG;AAAA,EAAW;AAAC,KAAG,eAAa;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,QAAI,IAAE,OAAO,yBAAyBA,IAAE,EAAE;AAAE,WAAO,GAAG,YAAY,CAAC,KAAG,EAAE,gBAAc,OAAO,eAAeA,IAAE,IAAG,EAAC,YAAW,OAAG,cAAa,MAAG,UAAS,OAAG,OAAM,EAAC,CAAC,GAAE,QAAI;AAAA,EAAE;AAAC,KAAG,iBAAe;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,CAAA8C,OAAG;AAAC;AAAa,SAAO,eAAeA,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,2BAAyBA,GAAE,4BAA0BA,GAAE,kBAAgBA,GAAE,4BAA0BA,GAAE,2CAAyCA,GAAE,uCAAqCA,GAAE,eAAa;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG;AAAE,WAAS,GAAG7C,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAG,KAAKA,EAAC,GAAEC,KAAE,EAAE,QAAO,IAAE,GAAE,IAAEA,IAAE,IAAI,UAAQC,KAAE,EAAE,CAAC,GAAE,IAAEF,GAAEE,EAAC,GAAE,IAAE,EAAE,QAAOE,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,UAAI,IAAE,EAAEA,EAAC;AAAE,QAAE,iBAAe,UAAQ,KAAK,EAAE,IAAI,EAAE,EAAE,UAAS,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,EAAAyC,GAAE,eAAa;AAAG,WAAS,GAAG7C,IAAE,GAAE;AAAC,QAAI,IAAE,WAAU;AAAA,IAAC;AAAE,OAAG,eAAe,GAAEA,KAAE,eAAe;AAAE,QAAIC,KAAE,EAAC,OAAM,SAAS,GAAEC,IAAE;AAAC,UAAG,GAAG,QAAQ,CAAC,MAAI,IAAE,EAAE,CAAC,IAAG,CAAC,GAAG,YAAY,CAAC,EAAE,QAAO,KAAK,EAAE,IAAI,EAAE,EAAE,UAASA,EAAC;AAAA,IAAC,GAAE,iBAAgB,WAAU;AAAC,UAAI,IAAE,GAAG,MAAK,CAAC;AAAE,UAAG,CAAC,GAAG,QAAQ,CAAC,GAAE;AAAC,YAAIA,KAAE,GAAG,IAAI,GAAE,SAAS,GAAE;AAAC,iBAAO,EAAE;AAAA,QAAG,CAAC;AAAE,cAAM,MAAM,qCAAmC,GAAG,aAAa,KAAK,WAAW,IAAE;AAAA,MAC9yuC,KAAGA,GAAE,KAAK;AAAA;AAAA,CAEb,EAAE,QAAQ,OAAM;AAAA,EACf,EAAE;AAAA,MAAC;AAAA,IAAC,EAAC;AAAE,WAAO,EAAE,YAAUD,IAAE,EAAE,UAAU,cAAY,GAAE,EAAE,cAAY,GAAE;AAAA,EAAC;AAAC,EAAA4C,GAAE,uCAAqC;AAAG,WAAS,GAAG7C,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,WAAU;AAAA,IAAC;AAAE,OAAG,eAAeA,IAAED,KAAE,2BAA2B;AAAE,QAAI,IAAE,OAAO,OAAO,EAAE,SAAS;AAAE,WAAO,GAAG,QAAQ,GAAE,SAASE,IAAE;AAAC,QAAEA,EAAC,IAAE;AAAA,IAAE,CAAC,GAAED,GAAE,YAAU,GAAEA,GAAE,UAAU,cAAYA,IAAEA;AAAA,EAAC;AAAC,EAAA4C,GAAE,2CAAyC;AAAG,MAAI;AAAG,GAAC,SAAS7C,IAAE;AAAC,IAAAA,GAAEA,GAAE,mBAAiB,CAAC,IAAE,oBAAmBA,GAAEA,GAAE,iBAAe,CAAC,IAAE;AAAA,EAAgB,GAAG,KAAG6C,GAAE,8BAA4BA,GAAE,4BAA0B,CAAC,EAAE;AAAE,WAAS,GAAG7C,IAAE,GAAE;AAAC,QAAI,IAAE,GAAGA,IAAE,CAAC,GAAEC,KAAE,GAAGD,IAAE,CAAC;AAAE,WAAO,EAAE,OAAOC,EAAC;AAAA,EAAC;AAAC,EAAA4C,GAAE,kBAAgB;AAAG,WAAS,GAAG7C,IAAE,GAAE;AAAC,QAAI,IAAE,GAAG,IAAI,GAAE,SAASC,IAAE;AAAC,UAAG,CAAC,GAAG,WAAWD,GAAEC,EAAC,CAAC,EAAE,QAAM,EAAC,KAAI,8BAA4BA,KAAE,UAAQ,GAAG,aAAaD,GAAE,WAAW,IAAE,iBAAgB,MAAK,GAAG,gBAAe,YAAWC,GAAC;AAAA,IAAC,CAAC;AAAE,WAAO,GAAG,QAAQ,CAAC;AAAA,EAAC;AAAC,EAAA4C,GAAE,4BAA0B;AAAG,MAAI,KAAG,CAAC,eAAc,SAAQ,iBAAiB;AAAE,WAAS,GAAG7C,IAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQC,MAAKD,GAAE,IAAG,WAAWA,GAAEC,EAAC,CAAC,KAAG,CAAC,GAAG,SAAS,IAAGA,EAAC,KAAG,CAAC,GAAG,SAAS,GAAEA,EAAC,KAAG,EAAE,KAAK,EAAC,KAAI,gCAA8BA,KAAE,UAAQ,GAAG,aAAaD,GAAE,WAAW,IAAE;AAAA;AAAA,GAEjlC,MAAK,GAAG,kBAAiB,YAAWC,GAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,EAAA4C,GAAE,2BAAyB;AAAE,CAAC;AAAE,IAAI,KAAG9C,GAAE,CAAA+C,QAAI;AAAC;AAAa,SAAO,eAAeA,KAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,IAAG,cAAY;AAAO,MAAI,KAAG,GAAG,GAAE,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAAS9C,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,UAAG,KAAK,YAAU,CAAC,GAAE,KAAK,YAAU,EAAE,WAAU,KAAK,uBAAqB,EAAE,IAAI,GAAE,sBAAsB,IAAE,EAAE,uBAAqB,GAAG,sBAAsB,sBAAqB,CAAC,KAAK,UAAU,MAAK,2BAAyB,EAAE,MAAK,KAAK,wBAAsB,EAAE,MAAK,KAAK,kBAAgB,EAAE,MAAK,KAAK,qBAAmB,EAAE,MAAK,KAAK,cAAY,EAAE;AAAA,eAAa,QAAQ,KAAK,KAAK,oBAAoB,EAAE,MAAK,mBAAiB,KAAK,2BAAyB,GAAG,qBAAoB,KAAK,0BAAwB,GAAG,qBAAoB,KAAK,cAAY,EAAE,MAAK,KAAK,yBAAuB,KAAK,uCAAqC,KAAK,2BAAyB,EAAE,MAAK,KAAK,0BAAwB,EAAE,MAAK,KAAK,cAAY,KAAK,iBAAgB,KAAK,yBAAuB,KAAK;AAAA,eAA2C,cAAc,KAAK,KAAK,oBAAoB,EAAE,MAAK,mBAAiB,KAAK,2BAAyB,GAAG,2BAA0B,KAAK,0BAAwB,GAAG,2BAA0B,KAAK,cAAY,EAAE,MAAK,KAAK,yBAAuB,KAAK,6CAA2C,KAAK,2BAAyB,EAAE,MAAK,KAAK,0BAAwB,EAAE,MAAK,KAAK,cAAY,KAAK,uBAAsB,KAAK,yBAAuB,KAAK;AAAA,eAAiD,QAAQ,KAAK,KAAK,oBAAoB,EAAE,MAAK,2BAAyB,EAAE,MAAK,KAAK,0BAAwB,EAAE,MAAK,KAAK,cAAY,EAAE,MAAK,KAAK,yBAAuB,EAAE;AAAA,UAAU,OAAM,MAAM,oDAAkD,EAAE,uBAAqB,GAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,2CAAyC,SAAS,GAAE;AAAC,QAAE,WAAS,EAAC,aAAY,KAAI,WAAU,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,0CAAwC,SAAS,GAAE;AAAC,QAAE,WAAS,EAAC,aAAY,KAAK,GAAG,CAAC,EAAE,aAAY,WAAU,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,qCAAmC,SAAS,GAAE;AAAC,QAAE,WAAS,EAAC,aAAY,KAAI,WAAU,KAAI,aAAY,KAAI,WAAU,KAAI,SAAQ,KAAI,WAAU,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,oCAAkC,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,GAAG,CAAC;AAAE,QAAE,WAAS,EAAC,aAAY,EAAE,aAAY,WAAU,EAAE,WAAU,aAAY,EAAE,aAAY,WAAU,KAAI,SAAQ,KAAI,WAAU,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,2BAAyB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,EAAC,MAAK,GAAE,UAAS,CAAC,EAAC;AAAE,WAAK,uBAAuBA,EAAC,GAAE,KAAK,UAAU,KAAKA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,wBAAsB,WAAU;AAAC,WAAK,UAAU,IAAI;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,GAAG,CAAC,GAAEC,KAAE,EAAE;AAAS,MAAAA,GAAE,eAAa,EAAE,eAAaA,GAAE,YAAU,EAAE,WAAUA,GAAE,UAAQ,EAAE,SAAQA,GAAE,YAAU,EAAE,cAAYA,GAAE,cAAY,KAAIA,GAAE,YAAU,KAAIA,GAAE,cAAY;AAAA,IAAI,GAAED,GAAE,UAAU,wBAAsB,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,GAAG,CAAC,GAAEC,KAAE,EAAE;AAAS,MAAAA,GAAE,eAAa,EAAE,cAAYA,GAAE,YAAU,EAAE,YAAUA,GAAE,cAAY;AAAA,IAAG,GAAED,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,SAAG,iBAAiBA,IAAE,GAAE,CAAC,GAAE,KAAK,yBAAyBA,GAAE,UAAS,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,qBAAmB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,SAAG,qBAAqBA,IAAE,GAAE,CAAC,GAAE,KAAK,wBAAwBA,GAAE,UAAS,EAAE,QAAQ;AAAA,IAAC,GAAED,GAAE,UAAU,+BAA6B,WAAU;AAAC,UAAG,EAAE,YAAY,KAAK,yBAAyB,GAAE;AAAC,YAAI,IAAE,GAAG,qCAAqC,KAAK,WAAU,EAAE,KAAK,KAAK,oBAAoB,CAAC;AAAE,eAAO,KAAK,4BAA0B,GAAE;AAAA,MAAC;AAAC,aAAO,KAAK;AAAA,IAAyB,GAAEA,GAAE,UAAU,2CAAyC,WAAU;AAAC,UAAG,EAAE,YAAY,KAAK,qCAAqC,GAAE;AAAC,YAAI,IAAE,GAAG,yCAAyC,KAAK,WAAU,EAAE,KAAK,KAAK,oBAAoB,GAAE,KAAK,6BAA6B,CAAC;AAAE,eAAO,KAAK,wCAAsC,GAAE;AAAA,MAAC;AAAC,aAAO,KAAK;AAAA,IAAqC,GAAEA,GAAE,UAAU,+BAA6B,WAAU;AAAC,UAAI,IAAE,KAAK;AAAW,aAAO,EAAE,EAAE,SAAO,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mCAAiC,WAAU;AAAC,UAAI,IAAE,KAAK;AAAW,aAAO,EAAE,EAAE,SAAO,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,qCAAmC,WAAU;AAAC,UAAI,IAAE,KAAK;AAAsB,aAAO,EAAE,EAAE,SAAO,CAAC;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,EAAA8C,IAAG,cAAY;AAAE,CAAC;AAAE,IAAI,KAAG/C,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,eAAa;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,mBAAiB,WAAU;AAAC,WAAK,YAAU,CAAC,GAAE,KAAK,kBAAgB,GAAE,KAAK,UAAQ;AAAA,IAAE,GAAE,OAAO,eAAeA,GAAE,WAAU,SAAQ,EAAC,KAAI,WAAU;AAAC,aAAO,KAAK;AAAA,IAAS,GAAE,KAAI,SAAS,GAAE;AAAC,UAAG,KAAK,qBAAmB,KAAG,OAAM,MAAM,kFAAkF;AAAE,WAAK,MAAM,GAAE,KAAK,YAAU,GAAE,KAAK,kBAAgB,EAAE;AAAA,IAAM,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAEA,GAAE,UAAU,aAAW,WAAU;AAAC,aAAO,KAAK,WAAS,KAAK,UAAU,SAAO,KAAG,KAAK,aAAa,GAAE,KAAK,GAAG,CAAC,KAAG,GAAG;AAAA,IAAW,GAAEA,GAAE,UAAU,KAAG,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,UAAQ;AAAE,aAAO,IAAE,KAAG,KAAK,mBAAiB,IAAE,GAAG,cAAY,KAAK,UAAU,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,WAAU;AAAC,WAAK;AAAA,IAAS,GAAEA,GAAE,UAAU,mBAAiB,WAAU;AAAC,aAAO,KAAK;AAAA,IAAO,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,UAAQ;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,WAAU;AAAC,WAAK,UAAQ;AAAA,IAAE,GAAEA,GAAE,UAAU,wBAAsB,WAAU;AAAC,WAAK,UAAQ,KAAK,UAAU,SAAO;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,WAAU;AAAC,aAAO,KAAK,iBAAiB;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,eAAa;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,gBAAc;AAAO,MAAI,KAAG,EAAE,GAAE,KAAGwC,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASvC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,SAAO,SAAS,GAAE;AAAC,aAAO,EAAE,KAAK,IAAI;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,UAAQ,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,SAAO,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,KAAG,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,OAAK,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,aAAW,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,SAAO,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,KAAG,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,OAAK,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,aAAO,KAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,OAAK,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAGA,OAAI,WAASA,KAAE,GAAG,sBAAqB,GAAG,SAAS,KAAK,mBAAkB,CAAC,GAAE;AAAC,YAAI,IAAE,GAAG,qCAAqC,4BAA4B,EAAC,cAAa,GAAE,aAAY,KAAK,UAAS,CAAC,GAAEC,KAAE,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,qBAAoB,UAAS,EAAC;AAAE,aAAK,iBAAiB,KAAKA,EAAC;AAAA,MAAC;AAAC,WAAK,kBAAkB,KAAK,CAAC;AAAE,UAAI,IAAE,KAAK,WAAW,GAAE,GAAED,EAAC;AAAE,aAAO,KAAK,CAAC,IAAE,GAAE;AAAA,IAAC,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE,GAAEC,IAAE;AAAC,MAAAA,OAAI,WAASA,KAAE,GAAG;AAAqB,UAAI,IAAE,CAAC;AAAE,UAAE,EAAE,OAAO,GAAG,yBAAyB,GAAE,KAAK,mBAAkB,KAAK,SAAS,CAAC,GAAE,KAAK,mBAAiB,KAAK,iBAAiB,OAAO,CAAC;AAAE,UAAIC,KAAE,KAAK,WAAW,GAAE,GAAED,EAAC;AAAE,aAAO,KAAK,CAAC,IAAEC,IAAEA;AAAA,IAAC,GAAEF,GAAE,UAAU,YAAU,SAAS,GAAE,GAAE;AAAC,aAAO,WAAU;AAAC,aAAK,oBAAoB,KAAK,CAAC;AAAE,YAAIC,KAAE,KAAK,eAAe;AAAE,YAAG;AAAC,iBAAO,EAAE,MAAM,MAAK,CAAC,GAAE;AAAA,QAAE,SAAO,GAAE;AAAC,cAAG,GAAG,uBAAuB,CAAC,EAAE,QAAM;AAAG,gBAAM;AAAA,QAAC,UAAC;AAAQ,eAAK,iBAAiBA,EAAC,GAAE,KAAK,oBAAoB,IAAI;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC,GAAED,GAAE,UAAU,qBAAmB,WAAU;AAAC,aAAO,KAAK;AAAA,IAAoB,GAAEA,GAAE,UAAU,+BAA6B,WAAU;AAAC,aAAO,GAAG,iBAAiB,GAAG,OAAO,KAAK,oBAAoB,CAAC;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,gBAAc;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,mBAAiB;AAAO,MAAIgD,KAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAGR,IAAG,GAAE,KAAGX,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAAS5B,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAE;AAAC,UAAG,KAAK,YAAU,GAAG,sBAAsB,IAAI,GAAE,KAAK,sBAAoB,CAAC,GAAE,KAAK,sBAAoB,CAAC,GAAE,KAAK,mBAAiB,KAAI,KAAK,eAAa,GAAG,oCAAmC,KAAK,oBAAkB,CAAC,GAAE,KAAK,YAAU,CAAC,GAAE,KAAK,sBAAoB,CAAC,GAAE,KAAK,aAAW,CAAC,GAAE,KAAK,wBAAsB,CAAC,GAAE,KAAK,uBAAqB,CAAC,GAAE+C,GAAE,IAAI,GAAE,mBAAmB,EAAE,OAAM,MAAM;AAAA;AAAA,sBAEpga;AAAE,UAAGA,GAAE,QAAQ,CAAC,GAAE;AAAC,YAAGA,GAAE,QAAQ,CAAC,EAAE,OAAM,MAAM;AAAA;AAAA,2CAE1B;AAAE,YAAG,OAAO,EAAE,CAAC,EAAE,eAAa,SAAS,OAAM,MAAM;AAAA;AAAA,sBAExE;AAAA,MAAC;AAAC,UAAGA,GAAE,QAAQ,CAAC,EAAE,MAAK,YAAUA,GAAE,OAAO,GAAE,SAAS,GAAE,GAAE;AAAC,eAAO,EAAE,EAAE,IAAI,IAAE,GAAE;AAAA,MAAC,GAAE,CAAC,CAAC;AAAA,eAAUA,GAAE,IAAI,GAAE,OAAO,KAAGA,GAAE,MAAMA,GAAE,QAAQA,GAAE,OAAO,EAAE,KAAK,CAAC,GAAE,GAAG,WAAW,GAAE;AAAC,YAAI9C,KAAE8C,GAAE,QAAQA,GAAE,OAAO,EAAE,KAAK,CAAC,GAAE,IAAEA,GAAE,KAAK9C,EAAC;AAAE,aAAK,YAAU8C,GAAE,OAAO,GAAE,SAAS,GAAE,GAAE;AAAC,iBAAO,EAAE,EAAE,IAAI,IAAE,GAAE;AAAA,QAAC,GAAE,CAAC,CAAC;AAAA,MAAC,WAASA,GAAE,SAAS,CAAC,EAAE,MAAK,YAAUA,GAAE,SAAS,CAAC;AAAA,UAAO,OAAM,IAAI,MAAM,wIAAwI;AAAE,WAAK,UAAU,MAAI,GAAG;AAAI,UAAI7C,KAAE6C,GAAE,MAAMA,GAAE,OAAO,CAAC,GAAE,SAAS,GAAE;AAAC,eAAOA,GAAE,QAAQ,EAAE,eAAe;AAAA,MAAC,CAAC;AAAE,WAAK,eAAa7C,KAAE,GAAG,qCAAmC,GAAG,wBAAuB,GAAG,kBAAkB6C,GAAE,OAAO,KAAK,SAAS,CAAC;AAAA,IAAC,GAAE/C,GAAE,UAAU,aAAW,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAG,KAAK,iBAAiB,OAAM,MAAM,mBAAiB,IAAE;AAAA,6FACzuB;AAAE,UAAI,IAAE8C,GAAE,IAAI9C,IAAE,eAAe,IAAEA,GAAE,gBAAc,GAAG,oBAAoB,eAAcC,KAAE6C,GAAE,IAAI9C,IAAE,mBAAmB,IAAEA,GAAE,oBAAkB,GAAG,oBAAoB,mBAAkB,IAAE,KAAK,oBAAkB,GAAG,uBAAqB,GAAG;AAAwB,WAAK,oBAAmB,KAAK,oBAAoB,CAAC,IAAE,GAAE,KAAK,oBAAoB,CAAC,IAAE;AAAE,eAAS,EAAEK,IAAE;AAAC,YAAG;AAAC,cAAG,KAAK,cAAY,MAAG;AAAC,cAAE,MAAM,MAAKA,EAAC;AAAE,gBAAIC,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,mBAAO,KAAK,YAAYA,EAAC,GAAEA;AAAA,UAAC,MAAM,QAAO,EAAE,MAAM,MAAKD,EAAC;AAAA,QAAC,SAAO,GAAE;AAAC,iBAAO,KAAK,gBAAgB,GAAE,GAAEJ,EAAC;AAAA,QAAC,UAAC;AAAQ,eAAK,uBAAuB;AAAA,QAAC;AAAA,MAAC;AAAC,UAAIE,KAAE,SAASE,IAAEC,IAAE;AAAC,eAAOD,OAAI,WAASA,KAAE,IAAG,KAAK,0BAA0B,GAAE,GAAEA,EAAC,GAAE,EAAE,KAAK,MAAKC,EAAC;AAAA,MAAC,GAAE,IAAE;AAAW,aAAOH,GAAE,CAAC,IAAE,GAAEA,GAAE,wBAAsB,GAAEA;AAAA,IAAC,GAAEJ,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,KAAK,WAAW,WAAS,GAAEC,KAAE,KAAG,CAAC,KAAK,eAAe,KAAG,KAAK;AAAgB,UAAG,GAAG,uBAAuB,CAAC,GAAE;AAAC,YAAI,IAAE;AAAE,YAAGA,IAAE;AAAC,cAAI,IAAE,KAAK,oBAAoB;AAAE,cAAG,KAAK,yBAAyB,CAAC,EAAE,KAAG,EAAE,iBAAe,KAAK,SAAS,CAAC,GAAE,KAAK,WAAU;AAAC,gBAAIE,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,mBAAOA,GAAE,gBAAc,MAAGA;AAAA,UAAC,MAAM,QAAOH,GAAE;AAAA,eAAM;AAAC,gBAAG,KAAK,WAAU;AAAC,kBAAIG,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,cAAAA,GAAE,gBAAc,MAAG,EAAE,mBAAiBA;AAAA,YAAC;AAAC,kBAAM;AAAA,UAAC;AAAA,QAAC,OAAK;AAAC,cAAG,EAAE,QAAO,KAAK,sBAAsB,GAAEH,GAAE;AAAE,gBAAM;AAAA,QAAC;AAAA,MAAC,MAAM,OAAM;AAAA,IAAC,GAAED,GAAE,UAAU,iBAAe,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,YAAW,CAAC;AAAE,aAAO,KAAK,oBAAoB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,sBAAoB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,KAAK,mBAAmBD,EAAC,GAAE,GAAE;AAAE,UAAG,EAAE,QAAM,QAAO;AAAC,YAAG,IAAE,EAAE,KAAI,IAAE,EAAE,MAAK,MAAI,QAAO;AAAC,cAAIG,KAAEF;AAAE,UAAAA,KAAE,WAAU;AAAC,mBAAO,EAAE,KAAK,CAAC,KAAGE,GAAE,KAAK,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,MAAM,KAAE;AAAE,UAAGF,GAAE,KAAK,IAAI,MAAI,KAAG,QAAO,EAAE,KAAK,IAAI;AAAA,IAAC,GAAEF,GAAE,UAAU,qBAAmB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,kBAAiB,CAAC;AAAE,aAAO,KAAK,wBAAwB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,KAAK,mBAAmBD,EAAC,GAAE,GAAE;AAAE,UAAG,EAAE,QAAM,QAAO;AAAC,YAAG,IAAE,EAAE,KAAI,IAAE,EAAE,MAAK,MAAI,QAAO;AAAC,cAAIG,KAAEF;AAAE,UAAAA,KAAE,WAAU;AAAC,mBAAO,EAAE,KAAK,CAAC,KAAGE,GAAE,KAAK,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,MAAM,KAAE;AAAE,UAAGF,GAAE,KAAK,IAAI,MAAI,KAAG,UAAQ,IAAE,KAAK,mBAAmB,CAAC,GAAEA,GAAE,KAAK,IAAI,MAAI,QAAI,MAAI,OAAI,KAAE,KAAK,mBAAmB,CAAC;AAAA,UAAO,OAAM,KAAK,wBAAwB,GAAE,GAAG,UAAU,sBAAqB,EAAE,OAAO;AAAE,WAAK,4BAA4B,KAAK,oBAAmB,CAAC,GAAE,CAAC,GAAEA,IAAE,GAAG,kBAAiB,GAAE,GAAG,iCAAiC;AAAA,IAAC,GAAEF,GAAE,UAAU,6BAA2B,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,sBAAqB,CAAC;AAAE,WAAK,gCAAgC,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,kCAAgC,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,EAAE,KAAI,IAAE,EAAE,KAAI,IAAE,KAAK,mBAAmBD,EAAC;AAAE,UAAG,EAAE,KAAK,IAAI,MAAI,MAAG;AAAC,QAAAC,GAAE,KAAK,IAAI;AAAE,iBAAQE,KAAE,WAAU;AAAC,iBAAO,EAAE,aAAa,EAAE,GAAG,CAAC,GAAE,CAAC;AAAA,QAAC,GAAE,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,CAAC,MAAI,OAAI,MAAK,QAAQ,CAAC,GAAEF,GAAE,KAAK,IAAI;AAAE,aAAK,4BAA4B,KAAK,6BAA4B,CAAC,GAAE,GAAEE,IAAEF,IAAE,GAAG,oCAAoC,GAAEE,IAAE,GAAG,sBAAqB,GAAE,GAAG,oCAAoC;AAAA,MAAC,MAAM,OAAM,KAAK,wBAAwB,GAAE,GAAG,UAAU,qCAAoC,EAAE,OAAO;AAAA,IAAC,GAAEJ,GAAE,UAAU,eAAa,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,UAAS,CAAC;AAAE,aAAO,KAAK,kBAAkB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,KAAK,mBAAmBD,EAAC,GAAE,GAAE;AAAE,UAAG,EAAE,QAAM,QAAO;AAAC,YAAG,IAAE,EAAE,KAAI,IAAE,EAAE,MAAK,MAAI,QAAO;AAAC,cAAIG,KAAEF;AAAE,UAAAA,KAAE,WAAU;AAAC,mBAAO,EAAE,KAAK,CAAC,KAAGE,GAAE,KAAK,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,MAAM,KAAE;AAAE,eAAQ,IAAE,MAAGF,GAAE,KAAK,IAAI,MAAI,QAAI,MAAI,OAAI,KAAE,KAAK,mBAAmB,CAAC;AAAE,WAAK,4BAA4B,KAAK,cAAa,CAAC,GAAE,CAAC,GAAEA,IAAE,GAAG,UAAS,GAAE,GAAG,6BAA4B,CAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,cAAa,CAAC;AAAE,WAAK,0BAA0B,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,4BAA0B,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,EAAE,KAAI,IAAE,EAAE,KAAI,IAAE,KAAK,mBAAmBD,EAAC;AAAE,UAAG,EAAE,KAAK,IAAI,MAAI,MAAG;AAAC,QAAAC,GAAE,KAAK,IAAI;AAAE,iBAAQE,KAAE,WAAU;AAAC,iBAAO,EAAE,aAAa,EAAE,GAAG,CAAC,GAAE,CAAC;AAAA,QAAC,GAAE,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,CAAC,MAAI,OAAI,MAAK,QAAQ,CAAC,GAAEF,GAAE,KAAK,IAAI;AAAE,aAAK,4BAA4B,KAAK,6BAA4B,CAAC,GAAE,GAAEE,IAAEF,IAAE,GAAG,8BAA8B,GAAEE,IAAE,GAAG,cAAa,GAAE,GAAG,8BAA8B;AAAA,MAAC;AAAA,IAAC,GAAEJ,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE;AAAC,aAAKD,GAAE,IAAG,MAAK,QAAQ,CAAC,GAAE,EAAE,KAAK,IAAI;AAAE,WAAK,4BAA4B,KAAK,6BAA4B,CAAC,GAAE,GAAEA,IAAE,GAAEC,EAAC,GAAED,IAAE,GAAG,sBAAqB,GAAEC,EAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,qBAAmB,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,iBAAiB;AAAE,QAAE,KAAK,IAAI;AAAE,UAAIC,KAAE,KAAK,iBAAiB;AAAE,aAAOA,KAAE;AAAA,IAAC,GAAED,GAAE,UAAU,aAAW,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,QAAO,CAAC,GAAE,IAAE8C,GAAE,QAAQ,CAAC,IAAE,IAAE,EAAE,KAAI7C,KAAE,KAAK,mBAAmBD,EAAC,GAAE,IAAEC,GAAE,KAAK,MAAK,CAAC;AAAE,UAAG,MAAI,QAAO;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,eAAO,EAAE,IAAI,KAAK,IAAI;AAAA,MAAC;AAAC,WAAK,oBAAoB,GAAE,EAAE,OAAO;AAAA,IAAC,GAAEF,GAAE,UAAU,yBAAuB,WAAU;AAAC,UAAG,KAAK,WAAW,IAAI,GAAE,KAAK,sBAAsB,IAAI,GAAE,KAAK,sBAAsB,GAAE,KAAK,WAAW,WAAS,KAAG,KAAK,eAAe,MAAI,OAAG;AAAC,YAAI,IAAE,KAAK,GAAG,CAAC,GAAE,IAAE,KAAK,qBAAqB,8BAA8B,EAAC,gBAAe,GAAE,UAAS,KAAK,oBAAoB,EAAC,CAAC;AAAE,aAAK,WAAW,IAAI,GAAG,2BAA2B,GAAE,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI;AAAE,UAAG;AAAC,YAAIC,KAAED,OAAI,SAAOA,GAAE,OAAK;AAAO,eAAO,IAAE,EAAE,KAAK,MAAK,GAAEC,EAAC,GAAE,KAAK,mBAAmB,GAAED,OAAI,UAAQA,GAAE,UAAQ,SAAOA,GAAE,QAAM,EAAE,QAAQ,GAAE;AAAA,MAAC,SAAO,GAAE;AAAC,aAAK,qBAAqB,GAAEA,IAAE,EAAE,QAAQ;AAAA,MAAC;AAAA,IAAC,GAAED,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAEC,IAAE;AAAC,YAAM,GAAG,uBAAuB,CAAC,KAAG,EAAE,qBAAmB,WAAS,KAAK,mBAAmB,EAAE,kBAAiB,MAAI,UAAQ,EAAE,UAAQ,SAAO,EAAE,QAAMA,EAAC,GAAE,OAAO,EAAE,mBAAkB;AAAA,IAAC,GAAED,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI;AAAE,UAAG;AAAC,YAAIC,KAAE,KAAK,GAAG,CAAC;AAAE,aAAK,aAAaA,IAAE,CAAC,MAAI,QAAI,KAAK,aAAa,GAAE,IAAEA,MAAG,KAAK,qBAAqB,GAAEA,IAAED,EAAC;AAAA,MAAC,SAAO,GAAE;AAAC,YAAE,KAAK,wBAAwB,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC,aAAO,KAAK,gBAAgBA,OAAI,UAAQA,GAAE,UAAQ,SAAOA,GAAE,QAAM,EAAE,MAAK,CAAC,GAAE;AAAA,IAAC,GAAED,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,GAAEC,KAAE,KAAK,GAAG,CAAC;AAAE,YAAMD,OAAI,UAAQA,GAAE,UAAQ,IAAEA,GAAE,UAAQ,IAAE,KAAK,qBAAqB,0BAA0B,EAAC,UAAS,GAAE,QAAO,GAAE,UAASC,IAAE,UAAS,KAAK,oBAAoB,EAAC,CAAC,GAAE,KAAK,WAAW,IAAI,GAAG,yBAAyB,GAAE,GAAEA,EAAC,CAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAG,KAAK,mBAAiBA,GAAE,SAAO,8BAA4B,CAAC,KAAK,eAAe,GAAE;AAAC,YAAI,IAAE,KAAK,4BAA4B,GAAE,CAAC;AAAE,YAAG;AAAC,iBAAO,KAAK,kBAAkB,GAAE,CAAC;AAAA,QAAC,SAAOC,IAAE;AAAC,gBAAMA,GAAE,SAAO,GAAG,6BAA2BD,KAAEC;AAAA,QAAC;AAAA,MAAC,MAAM,OAAMD;AAAA,IAAC,GAAED,GAAE,UAAU,iBAAe,WAAU;AAAC,UAAI,IAAE,KAAK,QAAO,IAAE+C,GAAE,SAAS,KAAK,UAAU;AAAE,aAAM,EAAC,QAAO,GAAE,YAAW,KAAK,iBAAiB,GAAE,YAAW,GAAE,WAAU,KAAK,UAAS;AAAA,IAAC,GAAE/C,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,SAAO,EAAE,QAAO,KAAK,iBAAiB,EAAE,UAAU,GAAE,KAAK,aAAW,EAAE;AAAA,IAAU,GAAEA,GAAE,UAAU,4BAA0B,SAAS,GAAE,GAAEC,IAAE;AAAC,WAAK,sBAAsB,KAAKA,EAAC,GAAE,KAAK,WAAW,KAAK,CAAC,GAAE,KAAK,yBAAyB,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,iBAAe,WAAU;AAAC,aAAO,KAAK,oBAAoB,WAAS;AAAA,IAAC,GAAEA,GAAE,UAAU,sBAAoB,WAAU;AAAC,UAAI,IAAE,KAAK,6BAA6B;AAAE,aAAO,KAAK,oBAAoB,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,0BAAwB,SAAS,GAAE;AAAC,aAAO,KAAK,oBAAoB,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,iBAAe,WAAU;AAAC,aAAO,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,GAAG,GAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,WAAU;AAAC,WAAK,gBAAgB,GAAE,KAAK,sBAAoB,CAAC,GAAE,KAAK,SAAO,CAAC,GAAE,KAAK,aAAW,CAAC,GAAE,KAAK,YAAU,CAAC,GAAE,KAAK,wBAAsB,CAAC;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,mBAAiB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,eAAa;AAAO,MAAI,KAAGwC,IAAG,GAAE,KAAG,EAAE,GAAE,KAAGX,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAAS5B,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,UAAQ,CAAC,GAAE,KAAK,uBAAqB,GAAG,IAAI,GAAE,sBAAsB,IAAE,EAAE,uBAAqB,GAAG,sBAAsB;AAAA,IAAoB,GAAEA,GAAE,UAAU,aAAW,SAAS,GAAE;AAAC,UAAG,GAAG,uBAAuB,CAAC,EAAE,QAAO,EAAE,UAAQ,EAAC,WAAU,KAAK,0BAA0B,GAAE,qBAAoB,GAAG,SAAS,KAAK,qBAAqB,EAAC,GAAE,KAAK,QAAQ,KAAK,CAAC,GAAE;AAAE,YAAM,MAAM,6DAA6D;AAAA,IAAC,GAAE,OAAO,eAAeA,GAAE,WAAU,UAAS,EAAC,KAAI,WAAU;AAAC,aAAO,GAAG,SAAS,KAAK,OAAO;AAAA,IAAC,GAAE,KAAI,SAAS,GAAE;AAAC,WAAK,UAAQ;AAAA,IAAC,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAEA,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAEC,IAAE;AAAC,eAAQ,IAAE,KAAK,oBAAoB,GAAEC,KAAE,KAAK,mBAAmB,EAAE,CAAC,GAAE,IAAE,GAAG,iCAAiC,GAAEA,IAAE,GAAE,KAAK,YAAY,GAAE,IAAE,EAAE,CAAC,GAAEE,KAAE,CAAC,GAAE,IAAE,GAAE,KAAG,KAAK,cAAa,IAAI,CAAAA,GAAE,KAAK,KAAK,GAAG,CAAC,CAAC;AAAE,UAAIE,KAAE,KAAK,qBAAqB,sBAAsB,EAAC,wBAAuB,GAAE,QAAOF,IAAE,UAAS,KAAK,GAAG,CAAC,GAAE,uBAAsBH,IAAE,UAAS,EAAC,CAAC;AAAE,YAAM,KAAK,WAAW,IAAI,GAAG,mBAAmBK,IAAE,KAAK,GAAG,CAAC,GAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAAA,IAAC,GAAEN,GAAE,UAAU,sBAAoB,SAAS,GAAE,GAAE;AAAC,eAAQC,KAAE,KAAK,oBAAoB,GAAE,IAAE,KAAK,mBAAmB,EAAEA,EAAC,GAAEC,KAAE,GAAG,uBAAuB,GAAE,GAAE,KAAK,YAAY,GAAE,IAAE,CAAC,GAAE,IAAE,GAAE,KAAG,KAAK,cAAa,IAAI,GAAE,KAAK,KAAK,GAAG,CAAC,CAAC;AAAE,UAAIE,KAAE,KAAK,GAAG,CAAC,GAAE,IAAE,KAAK,qBAAqB,wBAAwB,EAAC,qBAAoBF,IAAE,QAAO,GAAE,UAASE,IAAE,uBAAsB,GAAE,UAAS,KAAK,oBAAoB,EAAC,CAAC;AAAE,YAAM,KAAK,WAAW,IAAI,GAAG,qBAAqB,GAAE,KAAK,GAAG,CAAC,GAAEA,EAAC,CAAC;AAAA,IAAC,GAAEJ;AAAA,EAAC,EAAE;AAAE,KAAG,eAAa;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,gBAAc;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,EAAE,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,oBAAkB,WAAU;AAAA,IAAC,GAAEA,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,qBAAqB,CAAC;AAAE,UAAG,GAAG,YAAYA,EAAC,EAAE,OAAM,MAAM,YAAU,IAAE,oCAAoC;AAAE,aAAO,GAAG,wBAAwB,CAACA,EAAC,GAAE,GAAE,KAAK,cAAa,KAAK,YAAY;AAAA,IAAC,GAAED,GAAE,UAAU,4BAA0B,SAAS,GAAE;AAAC,UAAI,IAAE,GAAG,MAAM,EAAE,SAAS,GAAEC,KAAE,KAAK,mBAAmB,GAAE,IAAEA,GAAE,CAAC,GAAEC,KAAE,IAAI,GAAG,qBAAqB,GAAE,CAAC,EAAE,aAAa;AAAE,aAAOA;AAAA,IAAC,GAAEF;AAAA,EAAC,EAAE;AAAE,KAAG,gBAAc;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,eAAa;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,EAAC,aAAY,6DAA4D;AAAE,SAAO,OAAO,EAAE;AAAE,MAAI,KAAG,MAAG,KAAG,KAAK,IAAI,GAAE,GAAG,uBAAuB,IAAE,GAAEiD,MAAG,GAAG,YAAY,EAAC,MAAK,yBAAwB,SAAQ,GAAG,MAAM,GAAE,CAAC;AAAE,KAAG,kBAAkB,CAACA,GAAE,CAAC;AAAE,MAAI,KAAG,GAAG,oBAAoBA,KAAG;AAAA,sFAC3mU,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAO,OAAO,EAAE;AAAE,MAAI,KAAG,EAAC,MAAK;AAAA,sFAClD,UAAS,CAAC,EAAC,GAAE,KAAG,WAAU;AAAC,aAAShD,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,qBAAmB,CAAC,GAAE,KAAK,kBAAgB;AAAA,IAAE,GAAEA,GAAE,UAAU,kBAAgB,WAAU;AAAC,UAAI,IAAE;AAAK,WAAK,kBAAgB,MAAG,KAAK,WAAW,oBAAmB,WAAU;AAAC,iBAAQ,IAAE,SAAS,GAAE;AAAC,cAAIE,KAAE,IAAE,IAAE,IAAE;AAAG,YAAE,YAAUA,EAAC,IAAE,SAAS,GAAE,GAAE;AAAC,mBAAO,KAAK,sBAAsB,GAAE,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,YAAUA,EAAC,IAAE,SAAS,GAAE,GAAE;AAAC,mBAAO,KAAK,sBAAsB,GAAE,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,WAASA,EAAC,IAAE,SAAS,GAAE;AAAC,mBAAO,KAAK,qBAAqB,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,OAAKA,EAAC,IAAE,SAAS,GAAE;AAAC,mBAAO,KAAK,iBAAiB,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,SAAOA,EAAC,IAAE,SAAS,GAAE;AAAC,iBAAK,mBAAmB,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,aAAWA,EAAC,IAAE,SAAS,GAAE;AAAC,iBAAK,2BAA2B,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,iBAAeA,EAAC,IAAE,SAAS,GAAE;AAAC,iBAAK,yBAAyB,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,qBAAmBA,EAAC,IAAE,SAAS,GAAE;AAAC,iBAAK,iCAAiC,GAAE,CAAC;AAAA,UAAC;AAAA,QAAC,GAAED,KAAE,GAAEA,KAAE,IAAGA,KAAI,GAAEA,EAAC;AAAE,UAAE,UAAQ,SAAS,GAAEC,IAAE,GAAE;AAAC,iBAAO,KAAK,sBAAsBA,IAAE,GAAE,CAAC;AAAA,QAAC,GAAE,EAAE,UAAQ,SAAS,GAAEA,IAAE,GAAE;AAAC,iBAAO,KAAK,sBAAsBA,IAAE,GAAE,CAAC;AAAA,QAAC,GAAE,EAAE,SAAO,SAAS,GAAEA,IAAE;AAAC,iBAAO,KAAK,qBAAqBA,IAAE,CAAC;AAAA,QAAC,GAAE,EAAE,KAAG,SAAS,GAAEA,IAAE;AAAC,iBAAO,KAAK,iBAAiBA,IAAE,CAAC;AAAA,QAAC,GAAE,EAAE,OAAK,SAAS,GAAEA,IAAE;AAAC,eAAK,mBAAmB,GAAEA,EAAC;AAAA,QAAC,GAAE,EAAE,aAAW,SAAS,GAAEA,IAAE;AAAC,eAAK,yBAAyB,GAAEA,EAAC;AAAA,QAAC,GAAE,EAAE,SAAO,EAAE,eAAc,EAAE,YAAU,EAAE,kBAAiB,EAAE,KAAG,EAAE;AAAA,MAAS,CAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,mBAAiB,WAAU;AAAC,UAAI,IAAE;AAAK,WAAK,kBAAgB,OAAG,KAAK,WAAW,8BAA6B,WAAU;AAAC,iBAAQ,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,cAAIC,KAAE,IAAE,IAAE,IAAE;AAAG,iBAAO,EAAE,YAAUA,EAAC,GAAE,OAAO,EAAE,YAAUA,EAAC,GAAE,OAAO,EAAE,WAASA,EAAC,GAAE,OAAO,EAAE,OAAKA,EAAC,GAAE,OAAO,EAAE,SAAOA,EAAC,GAAE,OAAO,EAAE,aAAWA,EAAC,GAAE,OAAO,EAAE,iBAAeA,EAAC,GAAE,OAAO,EAAE,qBAAmBA,EAAC;AAAA,QAAC;AAAC,eAAO,EAAE,SAAQ,OAAO,EAAE,SAAQ,OAAO,EAAE,QAAO,OAAO,EAAE,IAAG,OAAO,EAAE,MAAK,OAAO,EAAE,YAAW,OAAO,EAAE,QAAO,OAAO,EAAE,WAAU,OAAO,EAAE;AAAA,MAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE,GAAE;AAAC,aAAO,WAAU;AAAC,eAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,aAAO,GAAG;AAAA,IAAW,GAAEA,GAAE,UAAU,qBAAmB,SAAS,GAAE,GAAE;AAAC,UAAG;AAAC,YAAIC,KAAE,IAAI,GAAG,KAAK,EAAC,YAAW,CAAC,GAAE,MAAK,EAAC,CAAC;AAAE,eAAOA,GAAE,OAAK,GAAE,KAAK,mBAAmB,KAAKA,EAAC,GAAE,EAAE,KAAK,IAAI,GAAE,KAAK,mBAAmB,IAAI,GAAEA;AAAA,MAAC,SAAO,GAAE;AAAC,YAAG,EAAE,yBAAuB,KAAG,KAAG;AAAC,YAAE,UAAQ,EAAE,UAAQ;AAAA;AAAA;AAAA,QAE9qE,SAAOC,IAAE;AAAC,gBAAM;AAAA,QAAC;AAAC,cAAM;AAAA,MAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAE;AAAC,aAAOiD,IAAG,KAAK,MAAK,GAAG,QAAO,GAAE,CAAC;AAAA,IAAC,GAAEjD,GAAE,UAAU,2BAAyB,SAAS,GAAE,GAAE;AAAC,MAAAiD,IAAG,KAAK,MAAK,GAAG,qBAAoB,GAAE,CAAC;AAAA,IAAC,GAAEjD,GAAE,UAAU,mCAAiC,SAAS,GAAE,GAAE;AAAC,MAAAiD,IAAG,KAAK,MAAK,GAAG,kCAAiC,GAAE,GAAE,EAAE;AAAA,IAAC,GAAEjD,GAAE,UAAU,qBAAmB,SAAS,GAAE,GAAE;AAAC,MAAAiD,IAAG,KAAK,MAAK,GAAG,YAAW,GAAE,CAAC;AAAA,IAAC,GAAEjD,GAAE,UAAU,6BAA2B,SAAS,GAAE,GAAE;AAAC,MAAAiD,IAAG,KAAK,MAAK,GAAG,yBAAwB,GAAE,GAAE,EAAE;AAAA,IAAC,GAAEjD,GAAE,UAAU,mBAAiB,SAAS,GAAE,GAAE;AAAC,aAAO,GAAG,KAAK,MAAK,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAG,GAAG,CAAC,GAAE,CAAC,KAAG,GAAG,IAAI,GAAE,UAAU,MAAI,OAAG;AAAC,YAAI,IAAE,IAAI,MAAM,aAAW,GAAG,CAAC,IAAE,2BAAyB,oDAAkD,KAAK,UAAU,CAAC,IAAE,QAAM;AAAA,6BACh0B,KAAK,mBAAmB,CAAC,EAAE,OAAK,IAAI;AAAE,cAAM,EAAE,uBAAqB,MAAG;AAAA,MAAC;AAAC,UAAIC,KAAE,GAAG,KAAK,KAAK,kBAAkB,GAAE,IAAE,EAAE,UAAS,IAAE,IAAI,GAAG,YAAY,EAAC,KAAI,GAAE,iBAAgB,GAAE,gBAAe,OAAM,CAAC;AAAE,aAAOA,GAAE,WAAW,KAAK,CAAC,GAAE,KAAK,YAAU,KAAG;AAAA,IAAE,GAAEF,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAG,GAAG,CAAC,GAAE,CAAC,GAAG,oBAAoB,CAAC,GAAE;AAAC,YAAI,IAAE,IAAI,MAAM,aAAW,GAAG,CAAC,IAAE,2BAAyB,gDAA8C,KAAK,UAAU,CAAC,IAAE,QAAM;AAAA,6BAC3c,KAAK,mBAAmB,CAAC,EAAE,OAAK,IAAI;AAAE,cAAM,EAAE,uBAAqB,MAAG;AAAA,MAAC;AAAC,UAAIC,KAAE,GAAG,KAAK,KAAK,kBAAkB,GAAE,IAAE,IAAI,GAAG,SAAS,EAAC,KAAI,GAAE,cAAa,EAAC,CAAC;AAAE,aAAOA,GAAE,WAAW,KAAK,CAAC,GAAE;AAAA,IAAE,GAAEF;AAAA,EAAC,EAAE;AAAE,KAAG,eAAa;AAAG,WAASiD,IAAGjD,IAAE,GAAE,GAAEC,IAAE;AAAC,IAAAA,OAAI,WAASA,KAAE,QAAI,GAAG,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,KAAK,kBAAkB,GAAEC,KAAE,GAAG,WAAW,CAAC,IAAE,IAAE,EAAE,KAAI,IAAE,IAAIF,GAAE,EAAC,YAAW,CAAC,GAAE,KAAI,EAAC,CAAC;AAAE,WAAOC,OAAI,EAAE,YAAU,EAAE,MAAK,GAAG,IAAI,GAAE,eAAe,MAAI,EAAE,eAAa,EAAE,gBAAe,KAAK,mBAAmB,KAAK,CAAC,GAAEC,GAAE,KAAK,IAAI,GAAE,EAAE,WAAW,KAAK,CAAC,GAAE,KAAK,mBAAmB,IAAI,GAAE;AAAA,EAAE;AAAC,WAAS,GAAGF,IAAE,GAAE;AAAC,QAAI,IAAE;AAAK,OAAG,CAAC;AAAE,QAAIC,KAAE,GAAG,KAAK,KAAK,kBAAkB,GAAE,IAAE,GAAG,QAAQD,EAAC,MAAI,OAAGE,KAAE,MAAI,QAAGF,KAAEA,GAAE,KAAI,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,CAAC,GAAE,KAAI,GAAE,mBAAkB,KAAGA,GAAE,uBAAqB,KAAE,CAAC;AAAE,OAAG,IAAIA,IAAE,eAAe,MAAI,EAAE,eAAaA,GAAE;AAAe,QAAI,IAAE,GAAG,KAAKE,IAAE,SAASE,IAAE;AAAC,aAAO,GAAG,WAAWA,GAAE,IAAI;AAAA,IAAC,CAAC;AAAE,WAAO,EAAE,gBAAc,GAAEH,GAAE,WAAW,KAAK,CAAC,GAAE,GAAG,QAAQC,IAAE,SAASE,IAAE;AAAC,UAAI,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,CAAC,EAAC,CAAC;AAAE,QAAE,WAAW,KAAK,CAAC,GAAE,GAAG,IAAIA,IAAE,oBAAoB,IAAE,EAAE,oBAAkBA,GAAE,qBAAmB,GAAG,IAAIA,IAAE,MAAM,MAAI,EAAE,oBAAkB,OAAI,EAAE,mBAAmB,KAAK,CAAC,GAAEA,GAAE,IAAI,KAAK,CAAC,GAAE,EAAE,mBAAmB,IAAI;AAAA,IAAC,CAAC,GAAE;AAAA,EAAE;AAAC,WAAS,GAAGJ,IAAE;AAAC,WAAOA,OAAI,IAAE,KAAG,KAAGA;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAGA,KAAE,KAAGA,KAAE,IAAG;AAAC,UAAI,IAAE,IAAI,MAAM,oCAAkCA,KAAE;AAAA,MAC9yC,2DAAyD,KAAG,GAAG;AAAE,YAAM,EAAE,uBAAqB,MAAG;AAAA,IAAC;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,oBAAkB;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,wBAAsB,SAAS,GAAE;AAAC,UAAG,GAAG,IAAI,GAAE,eAAe,GAAE;AAAC,YAAI,IAAE,EAAE,eAAcC,KAAE,OAAO,KAAG;AAAS,aAAK,oBAAkBA,KAAE,IAAE,UAAS,KAAK,gBAAcA,KAAE,IAAE,IAAE;AAAA,MAAC,MAAM,MAAK,oBAAkB,GAAE,KAAK,gBAAc,GAAG,sBAAsB;AAAc,WAAK,kBAAgB;AAAA,IAAE,GAAED,GAAE,UAAU,aAAW,SAAS,GAAE,GAAE;AAAC,UAAG,KAAK,kBAAgB,MAAG;AAAC,aAAK;AAAkB,YAAIC,KAAE,IAAI,MAAM,KAAK,kBAAgB,CAAC,EAAE,KAAK,GAAG;AAAE,aAAK,kBAAgB,KAAK,qBAAmB,QAAQ,IAAIA,KAAE,UAAQ,IAAE,GAAG;AAAE,YAAI,IAAE,GAAG,MAAM,CAAC,GAAEC,KAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAEA,KAAE,KAAG,QAAQ,OAAK,QAAQ;AAAI,eAAO,KAAK,kBAAgB,KAAK,qBAAmB,EAAED,KAAE,UAAQ,IAAE,aAAWC,KAAE,IAAI,GAAE,KAAK,mBAAkB;AAAA,MAAC,MAAM,QAAO,EAAE;AAAA,IAAC,GAAEF;AAAA,EAAC,EAAE;AAAE,KAAG,oBAAkB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,cAAY;AAAO,WAAS,GAAGC,IAAE,GAAE;AAAC,MAAE,QAAQ,SAAS,GAAE;AAAC,UAAIC,KAAE,EAAE;AAAU,aAAO,oBAAoBA,EAAC,EAAE,QAAQ,SAAS,GAAE;AAAC,YAAG,MAAI,eAAc;AAAC,cAAIC,KAAE,OAAO,yBAAyBD,IAAE,CAAC;AAAE,UAAAC,OAAIA,GAAE,OAAKA,GAAE,OAAK,OAAO,eAAeF,GAAE,WAAU,GAAEE,EAAC,IAAEF,GAAE,UAAU,CAAC,IAAE,EAAE,UAAU,CAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,KAAG,cAAY;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,MAAI,KAAG,KAAG,EAAE,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,wBAAsB,EAAE,YAAU,EAAE,SAAO,EAAE,YAAU,EAAE,4BAA0B,EAAE,sBAAoB,EAAE,wBAAsB,EAAE,cAAY;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG2C,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,IAAE,cAAY,GAAG,oBAAoB,GAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,SAAO,OAAO,EAAE,WAAW;AAAE,IAAE,wBAAsB,OAAO,OAAO,EAAC,iBAAgB,OAAG,cAAa,GAAE,sBAAqB,OAAG,WAAU,MAAG,sBAAqB,GAAG,4BAA2B,sBAAqB,QAAO,eAAc,OAAG,iBAAgB,MAAE,CAAC;AAAE,IAAE,sBAAoB,OAAO,OAAO,EAAC,mBAAkB,WAAU;AAAA,EAAC,GAAE,eAAc,KAAE,CAAC;AAAE,MAAI;AAAG,GAAC,SAAS5C,IAAE;AAAC,IAAAA,GAAEA,GAAE,oBAAkB,CAAC,IAAE,qBAAoBA,GAAEA,GAAE,sBAAoB,CAAC,IAAE,uBAAsBA,GAAEA,GAAE,wBAAsB,CAAC,IAAE,yBAAwBA,GAAEA,GAAE,wBAAsB,CAAC,IAAE,yBAAwBA,GAAEA,GAAE,yBAAuB,CAAC,IAAE,0BAAyBA,GAAEA,GAAE,iBAAe,CAAC,IAAE,kBAAiBA,GAAEA,GAAE,sBAAoB,CAAC,IAAE,uBAAsBA,GAAEA,GAAE,iBAAe,CAAC,IAAE,kBAAiBA,GAAEA,GAAE,kCAAgC,CAAC,IAAE,mCAAkCA,GAAEA,GAAE,qBAAmB,CAAC,IAAE,sBAAqBA,GAAEA,GAAE,yBAAuB,EAAE,IAAE,0BAAyBA,GAAEA,GAAE,wBAAsB,EAAE,IAAE,yBAAwBA,GAAEA,GAAE,gBAAc,EAAE,IAAE;AAAA,EAAe,GAAG,KAAG,EAAE,8BAA4B,EAAE,4BAA0B,CAAC,EAAE;AAAE,WAAS,GAAGA,IAAE;AAAC,WAAOA,OAAI,WAASA,KAAE,SAAQ,WAAU;AAAC,aAAOA;AAAA,IAAC;AAAA,EAAC;AAAC,IAAE,YAAU;AAAG,MAAI,KAAG,WAAU;AAAC,aAASA,GAAE,GAAE,GAAE;AAAC,WAAK,mBAAiB,CAAC,GAAE,KAAK,mBAAiB;AAAG,UAAIC,KAAE;AAAK,UAAGA,GAAE,iBAAiB,CAAC,GAAEA,GAAE,iBAAiB,GAAEA,GAAE,eAAe,CAAC,GAAEA,GAAE,qBAAqB,GAAE,CAAC,GAAEA,GAAE,gBAAgB,CAAC,GAAEA,GAAE,gBAAgB,CAAC,GAAEA,GAAE,kBAAkB,GAAEA,GAAE,iBAAiB,CAAC,GAAEA,GAAE,sBAAsB,CAAC,GAAE,GAAG,IAAI,GAAE,eAAe,EAAE,OAAM,IAAI,MAAM;AAAA;AAAA;AAAA,sBAGhtH;AAAE,WAAK,kBAAgB,GAAG,IAAI,GAAE,iBAAiB,IAAE,EAAE,kBAAgB,EAAE,sBAAsB;AAAA,IAAe;AAAC,WAAOD,GAAE,sBAAoB,SAAS,GAAE;AAAC,YAAM,MAAM,4HAA4H;AAAA,IAAC,GAAEA,GAAE,UAAU,sBAAoB,WAAU;AAAC,UAAI,IAAE;AAAK,WAAK,WAAW,uBAAsB,WAAU;AAAC,YAAI;AAAE,UAAE,mBAAiB;AAAG,YAAIC,KAAE,EAAE;AAAU,UAAE,WAAW,eAAc,WAAU;AAAC,aAAG,iBAAiB,CAAC;AAAA,QAAC,CAAC,GAAE,EAAE,WAAW,qBAAoB,WAAU;AAAC,cAAG;AAAC,cAAE,gBAAgB,GAAE,GAAG,QAAQ,EAAE,mBAAkB,SAASC,IAAE;AAAC,kBAAI,IAAE,EAAEA,EAAC,GAAE,IAAE,EAAE,uBAAsBE,KAAE;AAAO,gBAAE,WAAWF,KAAE,SAAQ,WAAU;AAAC,gBAAAE,KAAE,EAAE,mBAAmBF,IAAE,CAAC;AAAA,cAAC,CAAC,GAAE,EAAE,qBAAqBA,EAAC,IAAEE;AAAA,YAAC,CAAC;AAAA,UAAC,UAAC;AAAQ,cAAE,iBAAiB;AAAA,UAAC;AAAA,QAAC,CAAC;AAAE,YAAI,IAAE,CAAC;AAAE,YAAG,EAAE,WAAW,qBAAoB,WAAU;AAAC,cAAE,GAAG,eAAe,EAAC,OAAM,GAAG,OAAO,EAAE,oBAAoB,EAAC,CAAC,GAAE,EAAE,mBAAiB,EAAE,iBAAiB,OAAO,CAAC;AAAA,QAAC,CAAC,GAAE,EAAE,WAAW,uBAAsB,WAAU;AAAC,cAAG,GAAG,QAAQ,CAAC,KAAG,EAAE,oBAAkB,OAAG;AAAC,gBAAIF,KAAE,GAAG,gBAAgB,EAAC,OAAM,GAAG,OAAO,EAAE,oBAAoB,GAAE,cAAa,EAAE,cAAa,YAAW,GAAG,OAAO,EAAE,SAAS,GAAE,gBAAe,GAAG,sCAAqC,aAAYD,GAAC,CAAC;AAAE,cAAE,mBAAiB,EAAE,iBAAiB,OAAOC,EAAC;AAAA,UAAC;AAAA,QAAC,CAAC,GAAE,GAAG,QAAQ,EAAE,gBAAgB,MAAI,EAAE,mBAAiB,EAAE,WAAW,0BAAyB,WAAU;AAAC,cAAIA,KAAE,GAAG,uBAAuB,GAAG,OAAO,EAAE,oBAAoB,CAAC;AAAE,YAAE,gBAAcA;AAAA,QAAC,CAAC,GAAE,EAAE,WAAW,6BAA4B,WAAU;AAAC,YAAE,6BAA6B,GAAG,OAAO,EAAE,oBAAoB,CAAC;AAAA,QAAC,CAAC,IAAG,CAACF,GAAE,oCAAkC,CAAC,GAAG,QAAQ,EAAE,gBAAgB,EAAE,OAAM,IAAE,GAAG,IAAI,EAAE,kBAAiB,SAASE,IAAE;AAAC,iBAAOA,GAAE;AAAA,QAAO,CAAC,GAAE,IAAI,MAAM;AAAA,KACnuD,EAAE,KAAK;AAAA;AAAA,CAET,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEF,GAAE,mCAAiC,OAAGA;AAAA,EAAC,EAAE;AAAE,IAAE,SAAO;AAAG,KAAG,YAAY,IAAG,CAAC,GAAG,aAAY,GAAG,YAAW,GAAG,aAAY,GAAG,cAAa,GAAG,kBAAiB,GAAG,eAAc,GAAG,cAAa,GAAG,eAAc,GAAG,cAAa,GAAG,iBAAiB,CAAC;AAAE,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,MAAAA,OAAI,WAASA,KAAE,EAAE;AAAuB,UAAI,IAAE,MAAKC,KAAE,GAAG,SAASD,EAAC;AAAE,aAAOC,GAAE,YAAU,MAAG,IAAEF,GAAE,KAAK,MAAK,GAAEE,EAAC,KAAG,MAAK;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,YAAU;AAAG,MAAI,KAAG,SAASF,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,MAAAA,OAAI,WAASA,KAAE,EAAE;AAAuB,UAAI,IAAE,MAAKC,KAAE,GAAG,SAASD,EAAC;AAAE,aAAOC,GAAE,YAAU,OAAG,IAAEF,GAAE,KAAK,MAAK,GAAEE,EAAC,KAAG,MAAK;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,wBAAsB;AAAE,CAAC;AAAE,IAAI,KAAGH,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,2BAAyB;AAAO,MAAI,KAAG,GAAG;AAAE,WAAS,GAAGC,IAAE,GAAE;AAAC,QAAI,IAAE,MAAI,SAAO,CAAC,IAAE,GAAEC,KAAE,EAAE,cAAa,IAAEA,OAAI,SAAO,kCAAgC,GAAG,UAAQ,eAAaA,IAAEC,KAAE,EAAE,KAAI,IAAEA,OAAI,SAAO,kCAAgC,GAAG,UAAQ,2BAAyBA,IAAE,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUx9BE,KAAE;AAAA,iCAC2B,IAAE;AAAA,GAC/B,IAAE;AAAA,iBACW,IAAE;AAAA,iBACF,IAAE;AAAA,iBACF,IAAE;AAAA,iBACF,IAAE;AAAA,GACfE,KAAE;AAAA;AAAA,GAEFC,KAAE;AAAA;AAAA,mCAE6B,KAAK,UAAUP,IAAE,MAAK,IAAI,IAAE;AAAA;AAAA,GAE3D,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAKF,WAAO,IAAEI,KAAE,IAAEE,KAAEC,KAAE;AAAA,EAAC;AAAC,KAAG,2BAAyB;AAAE,CAAC;AAAE,IAAI,KAAGR,GAAE,CAAAmD,OAAG;AAAC;AAAa,SAAO,eAAeA,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,SAAOA,GAAE,2BAAyBA,GAAE,aAAWA,GAAE,cAAYA,GAAE,sBAAoBA,GAAE,mBAAiBA,GAAE,WAASA,GAAE,OAAKA,GAAE,0BAAwBA,GAAE,mCAAiCA,GAAE,sBAAoBA,GAAE,aAAWA,GAAE,SAAOA,GAAE,cAAYA,GAAE,cAAYA,GAAE,cAAYA,GAAE,4BAA0BA,GAAE,uBAAqBA,GAAE,6BAA2BA,GAAE,2BAAyBA,GAAE,yBAAuBA,GAAE,qBAAmBA,GAAE,6BAA2BA,GAAE,YAAUA,GAAE,eAAaA,GAAE,aAAWA,GAAE,MAAIA,GAAE,sBAAoBA,GAAE,cAAYA,GAAE,2BAAyBA,GAAE,QAAMA,GAAE,YAAUA,GAAE,4BAA0BA,GAAE,wBAAsBA,GAAE,YAAUA,GAAE,UAAQ;AAAO,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,WAAU,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAO,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,aAAY,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAS,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,yBAAwB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAqB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,6BAA4B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAyB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,aAAY,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAS,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,SAAQ,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAK,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,4BAA2B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAwB,EAAC,CAAC;AAAE,MAAIC,MAAG,GAAG;AAAE,SAAO,eAAeD,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAW,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,uBAAsB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAmB,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,OAAM,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAG,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,cAAa,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAU,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,gBAAe,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAY,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,aAAY,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAS,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeD,IAAE,8BAA6B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAA0B,EAAC,CAAC;AAAE,MAAI,KAAGX,IAAG;AAAE,SAAO,eAAeW,IAAE,sBAAqB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAkB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,0BAAyB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAsB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,4BAA2B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAwB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,8BAA6B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAA0B,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,wBAAuB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAoB,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,6BAA4B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAyB,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAW,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAW,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAW,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,UAAS,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAM,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,cAAa,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAU,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,uBAAsB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAmB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,oCAAmC,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAgC,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,2BAA0B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAuB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,QAAO,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAI,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,YAAW,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAQ,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,oBAAmB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAgB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,uBAAsB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAmB,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAW,EAAC,CAAC;AAAE,WAAS,KAAI;AAAC,YAAQ,KAAK;AAAA;AAAA,uEAE7nI;AAAA,EAAC;AAAC,EAAAA,GAAE,aAAW;AAAG,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,4BAA2B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAwB,EAAC,CAAC;AAAE,MAAI,KAAG,2BAAU;AAAC,aAASlD,KAAG;AAAC,YAAM,IAAI,MAAM;AAAA,qEACtM;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC,EAAE;AAAE,EAAAkD,GAAE,SAAO;AAAE,CAAC;AAAE,IAAO,gCAAQ,GAAG;;;ACtGnH,IAAM,aAAN,cAAyB,OAAO;AAAA,EAE/B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAAA,EAEhB;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,OAAS,MAAM,SAAS,KAAO,YAAY,eAAgB,GAAI,IAAI,MAAM;AAE/E,UAAM,SAAS,IAAI,WAAY,MAAM,OAAQ;AAC7C,WAAO,QAAS,MAAM,IAAK;AAC3B,WAAO,iBAAkB,MAAM,aAAc;AAC7C,WAAO,mBAAoB,MAAM,eAAgB;AACjD,WAAO,KAAM,KAAK,SAAWE,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,OAAM,IAAK,CAAE;AAAA,MAEnC,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOC,OAAM,MAAO;AAEnB,UAAM,UAAU,CAAC;AAEjB,aAAS,iBAAkBA,OAAO;AAIjC,YAAM,YAAY,aAAa;AAE/B,YAAM,QAAQ,IAAI,UAAW,UAAU,MAAO;AAC9C,YAAM,SAAS,IAAI,WAAY,UAAU,eAAgB;AACzD,YAAM,UAAU,cAAe,OAAO,6BAA6B,CAAE;AAIrE,YAAM,eAAe,MAAM,IAAKA,KAAK;AACrC,aAAO,QAAQ,aAAa;AAI5B,YAAM,YAAY,OAAO,KAAK;AAE9B,UAAK,OAAO,OAAO,SAAS,GAAI;AAE/B,gBAAQ,MAAO,OAAO,MAAO;AAE7B,cAAM,MAAO,4CAA6C;AAAA,MAE3D;AAIA,YAAM,MAAM,QAAQ,MAAO,SAAU;AAErC,aAAO;AAAA,IAER;AAEA,aAAS,eAAe;AAEvB,YAAM,cAAc,8BAAW;AAI/B,YAAM,kBAAkB,YAAa,EAAE,MAAM,mBAAmB,SAAS,mQAAmQ,CAAE;AAC9U,YAAM,aAAa,YAAa,EAAE,MAAM,cAAc,SAAS,gIAAgI,YAAY,gBAAgB,CAAE;AAI7N,YAAM,YAAY;AAAA,QACjB;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAS;AAAA;AAAA,QAC7C;AAAA,QAAU;AAAA,QAAO;AAAA;AAAA,QACjB;AAAA,QAAa;AAAA,QAAoB;AAAA,QAAc;AAAA,QAAU;AAAA,QAAS;AAAA,QAAS;AAAA,QAAa;AAAA;AAAA,QACxF;AAAA,QAAkB;AAAA,QAAe;AAAA,QAAmB;AAAA,QAAgB;AAAA,QAAc;AAAA,QAAe;AAAA;AAAA,QACjG;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAY;AAAA,QAAiB;AAAA,QAAa;AAAA,QAAkB;AAAA,QAAkB;AAAA,QAAY;AAAA;AAAA,QACzG;AAAA,QAAS;AAAA,QAAc;AAAA,QAAU;AAAA;AAAA,QACjC;AAAA,QAAc;AAAA,QAAa;AAAA,QAAgB;AAAA,QAAY;AAAA,QAAgB;AAAA,QAAgB;AAAA;AAAA,QACvF;AAAA,QAAqB;AAAA,QAA0B;AAAA,QAAsB;AAAA,QAA2B;AAAA,QAAwB;AAAA;AAAA,QACxH;AAAA,QAAc;AAAA,QAAO;AAAA,QAAkB;AAAA;AAAA,QACvC;AAAA;AAAA,MACD;AAIA,YAAM,UAAU,YAAa;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,WAAW,YAAa;AAAA,QAC7B,MAAM;AAAA,QACN,SAAS,IAAI,OAAQ,UAAU,KAAM,GAAI,CAAE;AAAA,QAC3C,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,MAAM,YAAa;AAAA,QACxB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,MAAM,YAAa;AAAA,QACxB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,QAAQ,YAAa;AAAA,QAC1B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,KAAK,YAAa;AAAA,QACvB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAIF,YAAM,gBAAgB,YAAa,EAAE,MAAM,iBAAiB,SAAS,mFAAmF,CAAE;AAC1J,YAAM,aAAa,YAAa,EAAE,MAAM,cAAc,SAAS,oBAAoB,CAAE;AACrF,YAAM,gBAAgB,YAAa,EAAE,MAAM,iBAAiB,SAAS,yCAAyC,CAAE;AAChH,YAAM,cAAc,YAAa,EAAE,MAAM,eAAe,SAAS,OAAO,CAAE;AAC1E,YAAM,eAAe,YAAa,EAAE,MAAM,gBAAgB,SAAS,QAAQ,CAAE;AAC7E,YAAM,cAAc,YAAa,EAAE,MAAM,eAAe,SAAS,OAAO,CAAE;AAC1E,YAAM,UAAU,YAAa,EAAE,MAAM,WAAW,SAAS,KAAK,CAAE;AAChE,YAAM,UAAU,YAAa,EAAE,MAAM,WAAW,SAAS,IAAI,CAAE;AAC/D,YAAM,SAAS,YAAa,EAAE,MAAM,UAAU,SAAS,IAAI,CAAE;AAC7D,YAAM,SAAS,YAAa,EAAE,MAAM,UAAU,SAAS,IAAI,CAAE;AAC7D,YAAM,UAAU,YAAa;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO,8BAAW,MAAM;AAAA,MACzB,CAAE;AAIF,YAAM,aAAa,YAAa;AAAA,QAC/B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO,8BAAW,MAAM;AAAA,MACzB,CAAE;AAEF,YAAM,SAAS;AAAA,QACd;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAEA,YAAM,kBAAkB,CAAC;AAEzB,eAAU,IAAI,GAAGC,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AAExB,wBAAiB,MAAM,IAAK,IAAI;AAAA,MAEjC;AAEA,aAAO,EAAE,QAAgB,gBAAiC;AAAA,IAE3D;AAGA,aAAS,cAAe,iBAAkB;AAAA,MAIzC,MAAM,yBAAyB,gBAAgB;AAAA,QAE9C,cAAc;AAEb,gBAAM;AAEN,eAAK,gBAAgB;AAAA,QAEtB;AAAA,QAEA,KAAM,KAAM;AAEX,gBAAMD,QAAO;AAAA,YACZ,SAAS,KAAK,MAAO,IAAI,OAAQ;AAAA,YACjC,OAAO,CAAC;AAAA,YACR,QAAQ,CAAC;AAAA,UACV;AAEA,mBAAU,IAAI,GAAGC,KAAI,IAAI,KAAK,QAAQ,IAAIA,IAAG,KAAO;AAEnD,kBAAM,OAAO,IAAI,KAAM,CAAE;AAEzB,YAAAD,MAAK,MAAM,KAAM,KAAK,MAAO,IAAK,CAAE;AAAA,UAErC;AAEA,cAAK,IAAI,OAAQ;AAEhB,qBAAU,IAAI,GAAGC,KAAI,IAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEpD,oBAAM,QAAQ,IAAI,MAAO,CAAE;AAE3B,cAAAD,MAAK,OAAO,KAAM,KAAK,MAAO,KAAM,CAAE;AAAA,YAEvC;AAAA,UAED;AAEA,iBAAOA;AAAA,QAER;AAAA,QAEA,QAAS,KAAM;AAEd,iBAAO,IAAI,QAAS,CAAE,EAAE;AAAA,QAEzB;AAAA,QAEA,KAAM,KAAM;AAEX,gBAAMA,QAAO;AAAA,YACZ,MAAM,IAAI,SAAU,CAAE,EAAE;AAAA,YACxB,QAAQ,CAAC;AAAA,UACV;AAEA,cAAK,IAAI,OAAQ;AAEhB,qBAAU,IAAI,GAAGC,KAAI,IAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEpD,oBAAM,QAAQ,IAAI,MAAO,CAAE;AAE3B,cAAAD,MAAK,OAAO,KAAM,KAAK,MAAO,KAAM,CAAE;AAAA,YAEvC;AAAA,UAED;AAIA,cAAK,IAAI,KAAM;AAEd,YAAAA,MAAK,MAAM,KAAK,MAAO,IAAI,IAAK,CAAE,CAAE;AAAA,UAErC;AAEA,iBAAOA;AAAA,QAER;AAAA,QAEA,MAAO,KAAM;AAEZ,gBAAMA,QAAO;AAAA,YACZ,MAAM,IAAI,WAAY,CAAE,EAAE;AAAA,YAC1B,MAAM;AAAA,YACN,QAAQ;AAAA,UACT;AAEA,cAAI;AAIJ,cAAK,IAAI,kBAAmB;AAE3B,qBAAS,KAAK,MAAO,IAAI,iBAAkB,CAAE,CAAE;AAAA,UAEhD;AAIA,cAAK,IAAI,iBAAkB;AAE1B,qBAAS,KAAK,MAAO,IAAI,gBAAiB,CAAE,CAAE;AAAA,UAE/C;AAEA,UAAAA,MAAK,OAAO,OAAO;AACnB,UAAAA,MAAK,SAAS,OAAO;AAErB,iBAAOA;AAAA,QAER;AAAA,QAEA,IAAK,KAAM;AAEV,kBAAS,IAAI,cAAc,IAAI,UAAY,CAAE,EAAE;AAAA,QAEhD;AAAA,QAEA,IAAK,KAAM;AAEV,iBAAO,EAAE,MAAO,IAAI,cAAc,IAAI,UAAY,CAAE,EAAE,MAAM;AAAA,QAE7D;AAAA,QAEA,iBAAkB,KAAM;AAEvB,iBAAO,aAAc,MAAM,GAAI;AAAA,QAEhC;AAAA,QAEA,gBAAiB,KAAM;AAEtB,iBAAO,aAAc,MAAM,GAAI;AAAA,QAEhC;AAAA,QAEA,MAAO,KAAM;AAEZ,gBAAMA,QAAO;AAAA,YACZ,MAAM,IAAI,gBAAiB,CAAE,EAAE;AAAA,YAC/B,IAAI,IAAI,gBAAiB,CAAE,EAAE;AAAA,UAC9B;AAEA,iBAAOA;AAAA,QAER;AAAA,MAED;AAEA,eAAS,aAAc,OAAO,KAAM;AAEnC,cAAM,QAAQ;AAAA,UACb,MAAM;AAAA,UACN,QAAQ,CAAC;AAAA,QACV;AAEA,YAAK,IAAI,MAAO;AAEf,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGC,KAAI,IAAI,KAAK,QAAQ,IAAIA,IAAG,KAAO;AAEnD,kBAAM,OAAO,IAAI,KAAM,CAAE;AAEzB,kBAAM,OAAO,KAAM,MAAM,MAAO,IAAK,CAAE;AAAA,UAExC;AAAA,QAED;AAEA,YAAK,IAAI,KAAM;AAEd,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,IAAI,QAAQ,IAAIA,IAAG,KAAO;AAElD,kBAAM,MAAM,IAAI,IAAK,CAAE;AAEvB,kBAAM,OAAO,KAAM,MAAM,MAAO,GAAI,CAAE;AAAA,UAEvC;AAAA,QAED;AAEA,YAAK,IAAI,eAAgB;AAExB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,cAAc,QAAQ,IAAIA,IAAG,KAAO;AAE5D,kBAAM,gBAAgB,IAAI,cAAe,CAAE;AAE3C,kBAAM,OAAO,KAAM,cAAc,MAAM,QAAS,QAAQ,EAAG,CAAE;AAAA,UAE9D;AAAA,QAED;AAEA,YAAK,IAAI,eAAgB;AAExB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,cAAc,QAAQ,IAAIA,IAAG,KAAO;AAE5D,kBAAM,gBAAgB,IAAI,cAAe,CAAE;AAE3C,kBAAM,OAAO,KAAM,WAAY,cAAc,KAAM,CAAE;AAAA,UAEtD;AAAA,QAED;AAEA,YAAK,IAAI,YAAa;AAErB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,WAAW,QAAQ,IAAIA,IAAG,KAAO;AAEzD,kBAAM,aAAa,IAAI,WAAY,CAAE;AAErC,kBAAM,OAAO,KAAM,WAAW,KAAM;AAAA,UAErC;AAAA,QAED;AAEA,YAAK,IAAI,aAAc;AAEtB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,YAAY,QAAQ,IAAIA,IAAG,KAAO;AAE1D,kBAAM,cAAc,IAAI,YAAa,CAAE;AAEvC,gBAAK,YAAY,UAAU,OAAS,OAAM,OAAO,KAAM,IAAK;AAAA,UAE7D;AAAA,QAED;AAEA,YAAK,IAAI,cAAe;AAEvB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,aAAa,QAAQ,IAAIA,IAAG,KAAO;AAE3D,kBAAM,eAAe,IAAI,aAAc,CAAE;AAEzC,gBAAK,aAAa,UAAU,QAAU,OAAM,OAAO,KAAM,KAAM;AAAA,UAEhE;AAAA,QAED;AAEA,YAAK,IAAI,aAAc;AAEtB,gBAAM,OAAO;AAEb,cAAI,YAAY,QAAS,WAAY;AAEpC,kBAAM,OAAO,KAAM,IAAK;AAAA,UAEzB,CAAE;AAAA,QAEH;AAEA,eAAO;AAAA,MAER;AAEA,aAAO,IAAI,iBAAiB;AAAA,IAE7B;AAEA,aAAS,UAAWC,OAAO;AAI1B,YAAM,QAAQA,MAAK;AACnB,YAAMC,SAAQ,IAAI,MAAM;AAIxB,eAAU,IAAI,GAAGF,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,cAAM,OAAO,MAAO,CAAE;AAEtB,qBAAc,IAAK;AAAA,MAEpB;AAIA,eAAU,IAAI,GAAGA,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,cAAM,OAAO,MAAO,CAAE;AACtB,cAAM,SAAS,QAAS,IAAK;AAE7B,YAAK,kBAAkB,SAAW,CAAAE,OAAM,IAAK,MAAO;AAEpD,YAAK,KAAK,SAAS,YAAc,CAAAA,OAAM,SAAS,YAAY;AAAA,MAE7D;AAEA,aAAOA;AAAA,IAER;AAEA,aAAS,aAAc,MAAO;AAE7B,UAAK,KAAK,KAAM;AAEf,gBAAS,KAAK,GAAI,IAAI;AAAA,MAEvB;AAEA,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGF,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AAExB,YAAK,MAAM,SAAS,QAAS;AAE5B,gBAAM,cAAc,MAAM;AAE1B,mBAAU,IAAI,GAAG,KAAK,YAAY,QAAQ,IAAI,IAAI,KAAO;AAExD,yBAAc,YAAa,CAAE,CAAE;AAAA,UAEhC;AAAA,QAED;AAAA,MAGD;AAAA,IAED;AAGA,aAAS,QAAS,MAAO;AAIxB,UAAK,KAAK,KAAM;AAEf,eAAO,WAAY,KAAK,GAAI;AAAA,MAE7B;AAEA,UAAK,KAAK,UAAU,OAAY,QAAO,KAAK;AAE5C,WAAK,QAAQ,UAAW,IAAK;AAE7B,aAAO,KAAK;AAAA,IAEb;AAIA,aAAS,UAAW,MAAO;AAE1B,YAAM,WAAW,KAAK;AACtB,UAAI;AAEJ,cAAS,UAAW;AAAA,QAEnB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACJ,kBAAQ,kBAAmB,IAAK;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,oBAAqB,IAAK;AAClC;AAAA,QAED,KAAK;AACJ,kBAAQ,eAAgB,IAAK;AAC7B;AAAA,QAED,KAAK;AACJ,kBAAQ,oBAAqB,IAAK;AAClC;AAAA,QAED,KAAK;AACJ,kBAAQ,kBAAmB,IAAK;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,sBAAuB,IAAK;AACpC;AAAA,QAED,KAAK;AACJ,kBAAQ,sBAAuB,IAAK;AACpC;AAAA,QAED,KAAK;AACJ,kBAAQ,0BAA2B,IAAK;AACxC;AAAA,QAED,KAAK;AACJ,kBAAQ,wBAAyB,IAAK;AACtC;AAAA,QAED,KAAK;AACJ,kBAAQ,wBAAyB,IAAK;AACtC;AAAA,QAED,KAAK;AACJ,kBAAQ,kBAAmB,IAAK;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,aAAc,IAAK;AAC3B;AAAA,QAED,KAAK;AACJ,kBAAQ,cAAe,IAAK;AAC5B;AAAA,QAED,KAAK;AACJ,kBAAQ,kBAAmB,IAAK;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,gBAAiB,IAAK;AAC9B;AAAA,QAED,KAAK;AACJ,kBAAQ,uBAAwB,IAAK;AACrC;AAAA,QAED,KAAK;AACJ,kBAAQ,mBAAoB,IAAK;AACjC;AAAA,QAED,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACJ,kBAAQ,mBAAoB,IAAK;AACjC;AAAA,QAED,KAAK;AACJ,kBAAQ,mBAAoB,IAAK;AACjC;AAAA,QAED,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAEJ;AAAA,QAED;AACC,kBAAQ,KAAM,mCAAmC,QAAS;AAC1D;AAAA,MAEF;AAEA,UAAK,UAAU,UAAa,KAAK,QAAQ,UAAa,MAAM,eAAgB,MAAO,MAAM,MAAO;AAE/F,cAAM,OAAO,KAAK;AAAA,MAEnB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,YAAM,SAAS,IAAI,MAAM;AAIzB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,+BAAoB,aAAa,MAAO;AACxC;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,kBAAM,OAAO,IAAI,QAAS,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE,EAAE,UAAU;AAC3F,kBAAM,QAAQ,YAAa,CAAE;AAC7B,mBAAO,WAAW,iBAAkB,MAAM,KAAM;AAChD;AAAA,UAED,KAAK;AACJ,mBAAO,MAAM,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AACvE;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,mBAAO,SAAS,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC1E;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,oBAAqB,MAAO;AAEpC,YAAM,QAAQ,IAAI,MAAM;AAExB,UAAI,aAAa;AACjB,UAAI,UAAU;AAEd,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,0BAAc;AACd;AAAA,UAED,KAAK;AACJ,0BAAc;AACd;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,uBAAW;AACX;AAAA,UAED,KAAK;AACJ,uBAAW;AACX;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,SAAS;AAIf,UAAK,UAAW;AAEf,cAAM,cAAc,IAAI,eAAgB,QAAQ,IAAI,EAAG;AACvD,cAAM,cAAc,IAAI,kBAAmB,EAAE,KAAK,OAAO,MAAM,UAAU,YAAY,OAAO,WAAW,MAAM,CAAE;AAE/G,YAAK,SAAS,SAAS,GAAI;AAE1B,qBAAY,aAAa,QAAQ,UAAU,aAAc,QAAS,GAAG,IAAK;AAC1E,sBAAY,eAAe;AAAA,QAE5B,OAAO;AAEN,sBAAY,MAAM,OAAQ,SAAU,CAAE,GAAG,SAAU,CAAE,GAAG,SAAU,CAAE,CAAE;AACtE,sBAAY,MAAM,oBAAoB;AAAA,QAEvC;AAEA,cAAM,MAAM,IAAI,KAAM,aAAa,WAAY;AAC/C,cAAM,IAAK,GAAI;AAAA,MAEhB;AAIA,UAAK,aAAc;AAElB,YAAK,YAAY,SAAS,GAAI;AAE7B,gBAAM,iBAAiB,IAAI,eAAgB,QAAQ,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,KAAK,EAAG;AACxG,gBAAM,iBAAiB,IAAI,kBAAmB,EAAE,KAAK,OAAO,MAAM,UAAU,cAAc,MAAM,YAAY,OAAO,WAAW,MAAM,CAAE;AAEtI,qBAAY,gBAAgB,QAAQ,aAAa,aAAc,WAAY,GAAG,KAAM;AAEpF,gBAAM,SAAS,IAAI,KAAM,gBAAgB,cAAe;AACxD,gBAAM,IAAK,MAAO;AAAA,QAEnB;AAAA,MAED;AAIA,YAAM,cAAc;AAEpB,aAAO;AAAA,IAER;AAEA,aAAS,eAAgB,MAAO;AAE/B,YAAM,SAAS,KAAK;AAIpB,UAAI,WAAW,IAAI,kBAAmB;AAAA,QACrC,MAAM,OAAO;AAAA,QACb,OAAO;AAAA,MACR,CAAE;AACF,UAAI;AAEJ,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAO;AAEhC,yBAAW,QAAS,YAAa,CAAE,CAAE;AAAA,YAEtC;AAEA;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAO;AAEhC,yBAAW,QAAS,YAAa,CAAE,CAAE;AAAA,YAEtC;AAEA;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAIA,UAAI;AAEJ,UAAK,YAAY,SAAS,WAAW,UAAW;AAE/C,cAAM,OAAO,SAAS;AAEtB,YAAK,SAAS,UAAW;AAExB,gBAAM,iBAAiB,IAAI,eAAgB;AAAA,YAC1C,MAAM,OAAO;AAAA,YACb,OAAO;AAAA,YACP,SAAS,SAAS;AAAA,YAClB,aAAa,SAAS;AAAA,UACvB,CAAE;AAEF,cAAK,SAAS,WAAW,UAAU,QAAY;AAE9C,2BAAe,eAAe;AAAA,UAE/B,OAAO;AAIN,gBAAK,SAAS,qBAAsB;AAEnC,6BAAe,MAAM,KAAM,SAAS,QAAS;AAAA,YAE9C;AAAA,UAED;AAEA,mBAAS,IAAI,OAAQ,UAAU,cAAe;AAAA,QAE/C,WAAY,SAAS,QAAS;AAE7B,gBAAM,eAAe,IAAI,kBAAmB;AAAA,YAC3C,MAAM,OAAO;AAAA,YACb,OAAO;AAAA,YACP,SAAS,SAAS;AAAA,YAClB,aAAa,SAAS;AAAA,UACvB,CAAE;AAEF,cAAK,SAAS,WAAW,UAAU,QAAY;AAE9C,yBAAa,eAAe;AAAA,UAE7B,OAAO;AAIN,gBAAK,SAAS,qBAAsB;AAEnC,2BAAa,MAAM,KAAM,SAAS,QAAS;AAAA,YAE5C;AAAA,UAED;AAEA,mBAAS,IAAI,aAAc,UAAU,YAAa;AAAA,QAEnD,OAAO;AAIN,cAAK,SAAS,WAAW,QAAY;AAEpC,qBAAS,OAAS,SAAS,SAAW,YAAY;AAAA,UAEnD;AAIA,cAAK,SAAS,WAAW,UAAU,QAAY;AAE9C,qBAAS,eAAe;AAAA,UAEzB;AAEA,mBAAS,IAAI,KAAM,UAAU,QAAS;AAAA,QAEvC;AAAA,MAED,OAAO;AAEN,iBAAS,IAAI,SAAS;AAItB,eAAO,UAAU;AAAA,MAElB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,oBAAqB,MAAO;AAEpC,UAAI,WAAW,IAAI,kBAAkB;AACrC,UAAI;AAEJ,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAO;AAEhC,oBAAM,eAAe,QAAS,YAAa,CAAE,CAAE;AAE/C,kBAAK,aAAa,aAAe,UAAS,MAAM,KAAM,aAAa,YAAa;AAChF,kBAAK,aAAa,cAAgB,UAAS,SAAS,KAAM,aAAa,aAAc;AACrF,kBAAK,aAAa,UAAY,UAAS,YAAY,aAAa;AAChE,kBAAK,aAAa,cAAgB,UAAS,SAAS,KAAM,aAAa,aAAc;AACrF,kBAAK,aAAa,aAAe,UAAS,UAAU,IAAI,aAAa;AACrE,kBAAK,aAAa,eAAe,EAAI,UAAS,cAAc;AAAA,YAE7D,OAAO;AAIN,yBAAW,IAAI,kBAAmB;AAAA,gBACjC,MAAM,OAAO;AAAA,gBACb,OAAO;AAAA,cACR,CAAE;AAAA,YAEH;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,cAAc,YAAa,CAAE;AACnC,gBAAK,gBAAgB,MAAO;AAE3B,kBAAK,YAAY,SAAS,kBAAkB,YAAY,SAAS,gBAAiB;AAEjF,yBAAS,MAAM,QAAS,WAAY;AAAA,cAErC,OAAO;AAAA,cAIP;AAAA,YAED;AAEA;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAO;AAEhC,8BAAgB,QAAS,YAAa,CAAE,CAAE;AAAA,YAE3C;AAEA;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAIA,UAAK,SAAS,KAAM;AAInB,YAAK,SAAS,IAAI,QAAS;AAE1B,kBAAS,SAAS,IAAI,QAAS;AAAA,YAE9B,KAAK,aAAa;AACjB,uBAAS,UAAU;AACnB;AAAA,YAED,KAAK,aAAa;AACjB,uBAAS,MAAM,IAAK,QAAS;AAC7B;AAAA,YAED,KAAK,aAAa;AACjB,uBAAS,MAAM,IAAK,QAAS;AAC7B,uBAAS,UAAU;AACnB;AAAA,YAED;AAAA,UAED;AAEA,iBAAO,SAAS,IAAI;AAAA,QAErB;AAIA,YAAK,eAAgB;AAEpB,mBAAS,IAAI,OAAO,KAAM,cAAc,MAAO;AAC/C,mBAAS,IAAI,WAAW,cAAc;AACtC,mBAAS,IAAI,OAAO,KAAM,cAAc,KAAM;AAC9C,mBAAS,IAAI,OAAO,KAAM,cAAc,WAAY;AAAA,QAErD;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,YAAM,eAAe,CAAC;AAEtB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,yBAAa,eAAe,IAAI,MAAO,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC5F,yBAAa,aAAa,oBAAoB;AAC9C;AAAA,UAED,KAAK;AACJ,yBAAa,gBAAgB,IAAI,MAAO,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC7F,yBAAa,cAAc,oBAAoB;AAC/C;AAAA,UAED,KAAK;AACJ,yBAAa,YAAY,YAAa,CAAE;AACxC;AAAA,UAED,KAAK;AACJ,yBAAa,gBAAgB,IAAI,MAAO,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC7F,yBAAa,cAAc,oBAAoB;AAC/C;AAAA,UAED,KAAK;AACJ,yBAAa,eAAe,YAAa,CAAE;AAC3C;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,cAAe,KAAK,aAAa,OAAQ;AAEjD,UAAIG;AAEJ,cAAS,aAAc;AAAA,QAEtB,KAAK,aAAa;AAEjB,UAAAA,SAAQ,SAAU,GAAI;AACtB,gBAAM,IAAIA;AACV,gBAAM,IAAIA;AACV,gBAAM,IAAIA;AACV,gBAAM,IAAI;AACV;AAAA,QAED,KAAK,aAAa;AAEjB,UAAAA,SAAQ,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AAC/C,gBAAM,IAAIA;AACV,gBAAM,IAAIA;AACV,gBAAM,IAAIA;AACV,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD;AAAA,QAED,KAAK,aAAa;AAEjB,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI;AACV;AAAA,QAED,KAAK,aAAa;AAEjB,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,EAAG,CAAE;AAClD;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAEA,aAAS,eAAgB,gBAAiB;AAEzC,UAAI;AAEJ,cAAS,gBAAiB;AAAA,QAEzB,KAAK;AACJ,iBAAO,aAAa;AACpB;AAAA,QAED,KAAK;AACJ,iBAAO,aAAa;AACpB;AAAA,QAED,KAAK;AACJ,iBAAO,aAAa;AACpB;AAAA,QAED,KAAK;AACJ,iBAAO,aAAa;AACpB;AAAA,QAED;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,sBAAuB,MAAO;AAEtC,UAAI;AACJ,UAAI,QAAQ;AACZ,UAAI,QAAQ;AAEZ,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGH,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAMI,SAAQ,YAAa,CAAE;AAC7B,kBAAMC,UAAS,YAAa,CAAE;AAC9B,kBAAM,iBAAiB,YAAa,CAAE;AAEtC,kBAAM,cAAc,eAAgB,cAAe;AAEnD,kBAAMN,QAAO,IAAI,WAAY,IAAIK,SAAQC,OAAO;AAEhD,kBAAM,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAEvC,qBAAU,IAAI,GAAGC,KAAI,GAAG,KAAK,YAAY,QAAQ,IAAI,IAAI,KAAMA,MAAO;AAErE,4BAAe,YAAa,CAAE,GAAG,aAAa,KAAM;AAEpD,oBAAM,SAASA,KAAI;AAEnB,cAAAP,MAAM,SAAS,CAAE,IAAI,MAAM;AAC3B,cAAAA,MAAM,SAAS,CAAE,IAAI,MAAM;AAC3B,cAAAA,MAAM,SAAS,CAAE,IAAI,MAAM;AAC3B,cAAAA,MAAM,SAAS,CAAE,IAAI,MAAM;AAAA,YAE5B;AAEA,sBAAU,IAAI,YAAaA,OAAMK,QAAOC,OAAO;AAC/C,oBAAQ,aAAa;AACrB,oBAAQ,cAAc;AACtB,oBAAQ,SAAS;AACjB;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAQ,SAAQ;AAC1C;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAQ,SAAQ;AAC1C;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,UAAK,SAAU;AAEd,gBAAQ,QAAQ;AAChB,gBAAQ,QAAQ;AAAA,MAEjB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,sBAAuB,MAAO;AAEtC,UAAI;AACJ,UAAI,QAAQ;AACZ,UAAI,QAAQ;AAEZ,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,MAAM,YAAa,CAAE;AAC3B,gBAAK,IAAM,WAAU,cAAc,KAAM,GAAI;AAC7C;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAQ,SAAQ;AAC1C;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAQ,SAAQ;AAC1C;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,UAAK,SAAU;AAEd,gBAAQ,QAAQ;AAChB,gBAAQ,QAAQ;AAChB,gBAAQ,aAAa;AAAA,MAEtB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,0BAA2B,MAAO;AAE1C,YAAM,gBAAgB;AAAA,QACrB,QAAQ,IAAI,QAAQ;AAAA,QACpB,UAAU,IAAI,QAAQ;AAAA,QACtB,OAAO,IAAI,QAAQ;AAAA,QACnB,aAAa,IAAI,QAAQ;AAAA,MAC1B;AAEA,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,0BAAc,OAAO,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC7D;AAAA,UAED,KAAK;AACJ,0BAAc,WAAW,YAAa,CAAE;AACxC;AAAA,UAED,KAAK;AACJ,0BAAc,MAAM,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC5D;AAAA,UAED,KAAK;AACJ,0BAAc,YAAY,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAClE;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,mBAAoB,MAAO;AAEnC,aAAO,KAAK,OAAQ,CAAE,EAAE;AAAA,IAEzB;AAEA,aAAS,mBAAoB,MAAO;AAEnC,YAAM,YAAY,CAAC;AAEnB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,sBAAU,QAAQ,YAAa,CAAE;AACjC;AAAA,UAED,KAAK;AACJ,sBAAU,OAAO;AACjB;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,wBAAyB,MAAO;AAExC,UAAI,OAAO,OAAO,QAAQ;AAC1B,UAAI,MAAM,MAAM,QAAQ,MAAM,cAAc;AAC5C,UAAI,YAAY,YAAY,aAAa;AACzC,UAAI,iBAAiB,MAAM,kBAAkB;AAE7C,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,aAAa,YAAa,CAAE;AAElC,gBAAK,eAAe,MAAO;AAE1B,uBAAS,QAAS,UAAW;AAAA,YAE9B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,eAAe,YAAa,CAAE;AAEpC,gBAAK,iBAAiB,MAAO;AAE5B,yBAAW,QAAS,YAAa;AAAA,YAElC;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,YAAa,CAAE;AACrB;AAAA,UAED,KAAK;AACJ,yBAAa;AACb;AAAA,UAED,KAAK;AACJ,6BAAiB,YAAa,CAAE;AAChC;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,yBAAa;AACb;AAAA,UAED,KAAK;AACJ,0BAAc,YAAa,CAAE;AAC7B;AAAA,UAED,KAAK;AACJ,0BAAc;AACd;AAAA,UAED,KAAK;AACJ,8BAAkB,YAAa,CAAE;AACjC;AAAA,UAED,KAAK;AACJ,oBAAQ,YAAa,CAAE;AACvB;AAAA,UAED,KAAK;AACJ,4BAAgB;AAChB;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,UAAK,eAAe,QAAY;AAE/B,gBAAQ,KAAM,uCAAwC;AAEtD,eAAO,IAAI,eAAe;AAAA,MAE3B;AAEA,YAAM,yBAAyB,qBAAsB,YAAY,GAAI;AAErE,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,UAAK,OAAQ;AAEZ,YAAK,mBAAmB,MAAO;AAE9B,cAAK,cAAc,WAAW,SAAS,GAAI;AAI1C,kBAAM,yBAAyB,qBAAsB,YAAY,GAAI;AACrE,6BAAiB,gCAAiC,wBAAwB,wBAAwB,OAAO,CAAE;AAAA,UAE5G,OAAO;AAIN,6BAAiB,sBAAuB,wBAAwB,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAAA,UAExG;AAAA,QAED,OAAO;AAEN,cAAK,cAAc,WAAW,SAAS,GAAI;AAI1C,kBAAM,oBAAoB,YAAa,OAAO,UAAW;AACzD,kBAAM,yBAAyB,oBAAqB,mBAAmB,UAAW;AAClF,6BAAiB,6BAA8B,wBAAwB,sBAAuB;AAAA,UAE/F,OAAO;AAIN,kBAAM,yBAAyB,oBAAqB,OAAO,UAAW;AACtE,6BAAiB,6BAA8B,wBAAwB,sBAAuB;AAAA,UAG/F;AAAA,QAED;AAEA,kCAA2B,cAAe;AAAA,MAE3C;AAEA,UAAK,QAAS;AAEb,YAAK,oBAAoB,MAAO;AAI/B,cAAK,eAAe,YAAY,SAAS,GAAI;AAI5C,kBAAM,0BAA0B,qBAAsB,aAAa,GAAI;AACvE,8BAAkB,gCAAiC,wBAAwB,yBAAyB,QAAQ,CAAE;AAAA,UAE/G,OAAO;AAIN,8BAAkB,sBAAuB,wBAAwB,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AAAA,UAE1G;AAAA,QAED,OAAO;AAIN,cAAK,eAAe,YAAY,SAAS,GAAI;AAI5C,kBAAM,qBAAqB,YAAa,QAAQ,WAAY;AAC5D,kBAAM,0BAA0B,oBAAqB,oBAAoB,UAAW;AACpF,8BAAkB,6BAA8B,wBAAwB,uBAAwB;AAAA,UAEjG,OAAO;AAIN,kBAAM,0BAA0B,oBAAqB,QAAQ,UAAW;AACxE,8BAAkB,6BAA8B,wBAAwB,uBAAwB;AAAA,UAEjG;AAAA,QAED;AAAA,MAED,OAAO;AAIN,0BAAkB,uBAAwB,wBAAwB,OAAO,WAAY;AAAA,MAEtF;AAEA,UAAK,UAAW;AAIf,YAAK,iBAAiB,cAAc,SAAS,GAAI;AAIhD,gBAAM,4BAA4B,qBAAsB,eAAe,GAAI;AAC3E,wBAAc,gCAAiC,wBAAwB,2BAA2B,UAAU,CAAE;AAAA,QAG/G,OAAO;AAIN,wBAAc,sBAAuB,wBAAwB,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAAA,QAExG;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,eAAe;AACpC,YAAM,oBAAoB,sBAAuB,wBAAwB,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAEhH,eAAS,aAAc,YAAY,iBAAkB;AACrD,eAAS,aAAc,UAAU,eAAgB;AAIjD,UAAK,eAAiB,UAAS,aAAc,SAAS,cAAe;AACrE,UAAK,YAAc,UAAS,aAAc,MAAM,WAAY;AAI5D,eAAS,SAAS;AAClB,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAEA,aAAS,wBAAyB,MAAO;AAExC,UAAI,OAAO;AACX,UAAI,YAAY;AAChB,UAAI,iBAAiB;AAErB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,yBAAa;AACb;AAAA,UAED,KAAK;AACJ,6BAAiB,YAAa,CAAE;AAChC;AAAA,UAED,KAAK;AACJ,yBAAa;AACb;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAIA,UAAI;AAEJ,YAAM,oBAAoB,gBAAiB,UAAW;AAEtD,UAAK,OAAQ;AAEZ,YAAK,mBAAmB,MAAO;AAE9B,cAAK,WAAW,SAAS,GAAI;AAI5B,kBAAM,qBAAqB,gBAAiB,UAAW;AACvD,6BAAiB,gCAAiC,mBAAmB,oBAAoB,OAAO,CAAE;AAAA,UAEnG,OAAO;AAIN,6BAAiB,sBAAuB,mBAAmB,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAAA,UAEnG;AAAA,QAED,OAAO;AAEN,cAAK,WAAW,SAAS,GAAI;AAI5B,kBAAM,oBAAoB,YAAa,OAAO,UAAW;AACzD,kBAAM,qBAAqB,eAAgB,mBAAmB,UAAW;AACzE,6BAAiB,6BAA8B,mBAAmB,kBAAmB;AAAA,UAGtF,OAAO;AAIN,kBAAM,qBAAqB,eAAgB,OAAO,UAAW;AAC7D,6BAAiB,6BAA8B,mBAAmB,kBAAmB;AAAA,UAEtF;AAAA,QAED;AAEA,kCAA2B,cAAe;AAAA,MAE3C;AAIA,YAAM,WAAW,IAAI,eAAe;AAEpC,YAAM,oBAAoB,sBAAuB,mBAAmB,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAC3G,eAAS,aAAc,YAAY,iBAAkB;AAErD,UAAK,eAAiB,UAAS,aAAc,SAAS,cAAe;AAErE,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,UAAI,OAAO;AAEX,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAGD;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,eAAe;AAEpC,eAAS,aAAc,YAAY,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAE1E,UAAK,OAAQ;AAEZ,cAAM,iBAAiB,IAAI,uBAAwB,OAAO,CAAE;AAC5D,kCAA2B,cAAe;AAE1C,iBAAS,aAAc,SAAS,cAAe;AAAA,MAEhD;AAEA,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAEA,aAAS,aAAc,MAAO;AAE7B,YAAMO,QAAO,IAAI,QAAS,GAAG,GAAG,CAAE;AAElC,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGP,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,YAAAO,MAAK,IAAI,YAAa,CAAE;AACxB,YAAAA,MAAK,IAAI,YAAa,CAAE;AACxB,YAAAA,MAAK,IAAI,YAAa,CAAE;AACxB;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,YAAaA,MAAK,GAAGA,MAAK,GAAGA,MAAK,CAAE;AAEzD,aAAO;AAAA,IAER;AAEA,aAAS,cAAe,MAAO;AAE9B,UAAI,SAAS,GAAGF,UAAS,GAAG,YAAY;AAExC,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,wBAAY,CAAE,YAAa,CAAE;AAC7B;AAAA,UAED,KAAK;AACJ,qBAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AACJ,YAAAK,UAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AAEJ;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,aAAc,QAAQA,SAAQ,IAAI,GAAG,SAAU;AAEpE,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,UAAI,SAAS,GAAGA,UAAS;AAEzB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,qBAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AACJ,YAAAK,UAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,iBAAkB,QAAQ,QAAQA,SAAQ,IAAI,CAAE;AAErE,aAAO;AAAA,IAER;AAEA,aAAS,gBAAiB,MAAO;AAEhC,UAAI,SAAS;AAEb,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,qBAAS,YAAa,CAAE;AACxB;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,eAAgB,QAAQ,IAAI,EAAG;AAEpD,aAAO;AAAA,IAER;AAEA,aAAS,uBAAwB,MAAO;AAEvC,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAIK;AAEJ,UAAI,iBAAiB;AACrB,UAAI,kBAAkB;AACtB,UAAI,QAAQ;AACZ,UAAI,MAAM;AACV,UAAI,cAAc;AAClB,UAAI,aAAa;AACjB,UAAI,aAAa;AACjB,UAAI,WAAW;AACf,UAAI,WAAW;AAEf,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,aAAa,YAAa,CAAE;AAElC,gBAAK,eAAe,MAAO;AAE1B,uBAAS,QAAS,UAAW;AAAA,YAE9B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,eAAe,YAAa,CAAE;AAEpC,gBAAK,iBAAiB,MAAO;AAE5B,yBAAW,QAAS,YAAa;AAAA,YAElC;AAEA;AAAA,UAED,KAAK;AACJ,YAAAK,UAAS;AACT;AAAA,UAED,KAAK;AACJ,kBAAM,YAAa,CAAE;AACrB;AAAA,UAED,KAAK;AACJ,6BAAiB,YAAa,CAAE;AAChC;AAAA,UAED,KAAK;AACJ,0BAAc,YAAa,CAAE;AAC7B;AAAA,UAED,KAAK;AACJ,8BAAkB,YAAa,CAAE;AACjC;AAAA,UAED,KAAK;AACJ,oBAAQ,YAAa,CAAE;AACvB;AAAA,UAED,KAAK;AACJ,yBAAa,YAAa,CAAE;AAC5B;AAAA,UAED,KAAK;AACJ,uBAAW,YAAa,CAAE;AAC1B;AAAA,UAED,KAAK;AACJ,yBAAa,YAAa,CAAE;AAC5B;AAAA,UAED,KAAK;AACJ,uBAAW,YAAa,CAAE;AAC1B;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAIA,YAAM,WAAW,CAAC;AAClB,YAAM,UAAU,CAAC;AACjB,YAAM,SAAS,CAAC;AAChB,YAAM,MAAM,CAAC;AAEb,eAAU,IAAI,GAAG,IAAI,YAAY,KAAO;AAEvC,iBAAU,IAAI,GAAG,IAAI,YAAY,KAAO;AAIvC,gBAAMG,SAAU,IAAI,aAAe;AAInC,gBAAMC,KAAI,WAAW;AACrB,gBAAMC,KAAIL,QAAQG,MAAM;AACxB,gBAAM,IAAI,WAAW;AAErB,mBAAS,KAAMC,IAAGC,IAAG,CAAE;AAIvB,cAAK,SAAS,mBAAmB,MAAO;AAEvC,kBAAM,IAAI,MAAOF,SAAQ,IAAI,CAAE;AAC/B,kBAAMG,KAAI,MAAOH,SAAQ,IAAI,CAAE;AAC/B,kBAAMI,KAAI,MAAOJ,SAAQ,IAAI,CAAE;AAE/B,mBAAO,KAAM,GAAGG,IAAGC,EAAE;AAAA,UAEtB;AAIA,cAAK,UAAU,oBAAoB,MAAO;AAEzC,kBAAM,KAAK,OAAQJ,SAAQ,IAAI,CAAE;AACjC,kBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AACjC,kBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AAEjC,oBAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,UAE1B;AAIA,cAAK,UAAW;AAEf,kBAAM,IAAI,SAAUA,SAAQ,IAAI,CAAE;AAClC,kBAAMK,KAAI,SAAUL,SAAQ,IAAI,CAAE;AAElC,gBAAI,KAAM,GAAGK,EAAE;AAAA,UAGhB,OAAO;AAEN,gBAAI,KAAM,KAAM,aAAa,IAAK,KAAM,aAAa,EAAI;AAAA,UAE1D;AAAA,QAED;AAAA,MAED;AAIA,YAAM,UAAU,CAAC;AAEjB,eAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,iBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAI3C,gBAAMC,KAAI,IAAI,IAAI;AAClB,gBAAMF,KAAI,KAAM,IAAI,KAAM;AAC1B,gBAAMG,KAAM,IAAI,KAAQ,IAAI,KAAM;AAClC,gBAAM,IAAM,IAAI,IAAM,IAAI;AAI1B,cAAK,QAAQ,MAAO;AAEnB,oBAAQ,KAAMD,IAAGC,IAAGH,EAAE;AACtB,oBAAQ,KAAMG,IAAGD,IAAG,CAAE;AAAA,UAEvB,OAAO;AAEN,oBAAQ,KAAMA,IAAGF,IAAGG,EAAE;AACtB,oBAAQ,KAAMA,IAAG,GAAGD,EAAE;AAAA,UAEvB;AAAA,QAED;AAAA,MAED;AAIA,YAAM,oBAAoB,sBAAuB,SAAS,IAAI,uBAAwB,UAAU,CAAE,CAAE;AACpG,YAAM,cAAc,sBAAuB,SAAS,IAAI,uBAAwB,KAAK,CAAE,CAAE;AACzF,UAAI;AACJ,UAAI;AAIJ,UAAK,OAAQ;AAEZ,YAAK,mBAAmB,OAAQ;AAE/B,mBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,qBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,oBAAMN,SAAQ,IAAI,KAAM,aAAa;AAErC,oBAAM,IAAI,MAAOA,SAAQ,IAAI,CAAE;AAC/B,oBAAMG,KAAI,MAAOH,SAAQ,IAAI,CAAE;AAC/B,oBAAMI,KAAI,MAAOJ,SAAQ,IAAI,CAAE;AAI/B,qBAAO,KAAM,GAAGG,IAAGC,EAAE;AAAG,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AAAG,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AACrE,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AAAG,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AAAG,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AAAA,YAEtE;AAAA,UAED;AAEA,2BAAiB,IAAI,uBAAwB,QAAQ,CAAE;AAAA,QAExD,OAAO;AAEN,2BAAiB,sBAAuB,SAAS,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AAAA,QAE1F;AAEA,kCAA2B,cAAe;AAAA,MAE3C;AAIA,UAAK,QAAS;AAEb,YAAK,oBAAoB,OAAQ;AAEhC,mBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,qBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,oBAAMJ,SAAQ,IAAI,KAAM,aAAa;AAErC,oBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AACjC,oBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AACjC,oBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AAIjC,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAG,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAG,sBAAQ,KAAM,IAAI,IAAI,EAAG;AACjF,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAG,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAG,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,YAElF;AAAA,UAED;AAEA,4BAAkB,IAAI,uBAAwB,SAAS,CAAE;AAAA,QAE1D,OAAO;AAEN,4BAAkB,sBAAuB,SAAS,IAAI,uBAAwB,SAAS,CAAE,CAAE;AAAA,QAE5F;AAAA,MAED,OAAO;AAEN,0BAAkB,uBAAwB,SAAS,UAAU,WAAY;AAAA,MAE1E;AAIA,YAAM,WAAW,IAAI,eAAe;AACpC,eAAS,aAAc,YAAY,iBAAkB;AACrD,eAAS,aAAc,UAAU,eAAgB;AACjD,eAAS,aAAc,MAAM,WAAY;AAEzC,UAAK,eAAiB,UAAS,aAAc,SAAS,cAAe;AAIrE,eAAS,SAAS;AAClB,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAEA,aAAS,mBAAoB,MAAO;AAEnC,UAAI,eAAe,CAAE,GAAG,GAAG,GAAG,IAAK,IAAK,IAAK,IAAK,GAAG,GAAG,CAAE;AAC1D,UAAI,QAAQ,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC/B,UAAIQ;AACJ,UAAI;AAEJ,UAAI,WAAW;AACf,UAAI,MAAM;AACV,UAAI,cAAc;AAClB,UAAI,SAAS;AACb,UAAI,QAAQ;AAEZ,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGhB,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,uBAAW,YAAa,CAAE;AAC1B;AAAA,UAED,KAAK;AACJ,kBAAM,YAAa,CAAE;AACrB;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,0BAAc,YAAa,CAAE;AAC7B;AAAA,UAED,KAAK;AACJ,2BAAe;AACf;AAAA,UAED,KAAK;AACJ,qBAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AACJ,0BAAc;AACd;AAAA,UAED,KAAK;AACJ,YAAAgB,SAAQ;AACR;AAAA,UAED,KAAK;AACJ,oBAAQ,YAAa,CAAE;AACvB;AAAA,UAED,KAAK;AACJ,oBAAQ;AACR;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,qBAAuB,aAAc,CAAE,MAAM,aAAc,aAAa,SAAS,CAAE,KAAK,aAAc,CAAE,MAAM,aAAc,aAAa,SAAS,CAAE;AAI1J,YAAM,WAAW,CAAC;AAClB,YAAM,cAAc,IAAI,QAAQ;AAChC,YAAM,UAAU,IAAI,QAAQ;AAE5B,YAAM,OAAO,IAAI,QAAQ;AACzB,YAAM,SAAS,IAAI,QAAQ;AAC3B,YAAM,aAAa,IAAI,WAAW;AAElC,eAAU,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,GAAI;AAElF,oBAAY,UAAW,OAAO,CAAE;AAEhC,gBAAQ,IAAIA,SAAQA,OAAO,IAAI,CAAE,IAAI;AACrC,gBAAQ,IAAI;AACZ,gBAAQ,IAAIA,SAAQA,OAAO,IAAI,CAAE,IAAI;AAErC,aAAK,IAAI,cAAc,YAAa,IAAI,CAAE,IAAI;AAC9C,aAAK,IAAI,cAAc,YAAa,IAAI,CAAE,IAAI;AAC9C,aAAK,IAAI,cAAc,YAAa,IAAI,CAAE,IAAI;AAC9C,cAAM,QAAQ,cAAc,YAAa,IAAI,CAAE,IAAI;AAEnD,iBAAUV,KAAI,GAAG,KAAK,aAAa,QAAQA,KAAI,IAAIA,MAAK,GAAI;AAE3D,iBAAO,IAAI,aAAcA,KAAI,CAAE;AAC/B,iBAAO,IAAI;AACX,iBAAO,IAAI,aAAcA,KAAI,CAAE;AAI/B,iBAAO,SAAU,OAAQ;AAIzB,qBAAW,iBAAkB,MAAM,KAAM;AACzC,iBAAO,gBAAiB,UAAW;AAInC,iBAAO,IAAK,WAAY;AAExB,mBAAS,KAAM,OAAO,GAAG,OAAO,GAAG,OAAO,CAAE;AAAA,QAE7C;AAAA,MAED;AAIA,YAAM,UAAU,CAAC;AAEjB,YAAM,aAAa,MAAM,SAAS;AAClC,YAAM,oBAAoB,aAAa,SAAS;AAEhD,eAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,iBAAU,IAAI,GAAG,IAAI,oBAAoB,GAAG,KAAO;AAElD,gBAAMQ,KAAI,IAAI,IAAI;AAClB,cAAIF,KAAM,IAAI,IAAM,IAAI;AACxB,gBAAMG,KAAI,KAAM,IAAI,KAAM;AAC1B,cAAI,IAAM,IAAI,KAAQ,IAAI,KAAM;AAEhC,cAAO,MAAM,oBAAoB,KAAS,uBAAuB,MAAS;AAEzE,YAAAH,KAAI,IAAI;AACR,iBAAM,IAAI,KAAM;AAAA,UAEjB;AAEA,cAAK,QAAQ,MAAO;AAEnB,oBAAQ,KAAME,IAAGF,IAAGG,EAAE;AACtB,oBAAQ,KAAMA,IAAGH,IAAG,CAAE;AAAA,UAEvB,OAAO;AAEN,oBAAQ,KAAME,IAAGC,IAAGH,EAAE;AACtB,oBAAQ,KAAMG,IAAG,GAAGH,EAAE;AAAA,UAEvB;AAAA,QAED;AAAA,MAED;AAIA,UAAK,aAAa,QAAQ,WAAW,MAAO;AAE3C,cAAM,UAAU,CAAC;AAEjB,iBAAU,IAAI,GAAGZ,KAAI,aAAa,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEzD,kBAAQ,KAAM,IAAI,QAAS,aAAc,CAAE,GAAG,aAAc,IAAI,CAAE,CAAE,CAAE;AAAA,QAEvE;AAEA,cAAM,QAAQ,WAAW,iBAAkB,SAAS,CAAC,CAAE;AACvD,cAAM,aAAa,CAAC;AAEpB,iBAAU,IAAI,GAAGA,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,gBAAM,OAAO,MAAO,CAAE;AAEtB,qBAAW,KAAM,KAAM,CAAE,GAAG,KAAM,CAAE,GAAG,KAAM,CAAE,CAAE;AAAA,QAElD;AAIA,YAAK,aAAa,MAAO;AAExB,mBAAU,IAAI,GAAGA,KAAI,WAAW,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEvD,gBAAK,QAAQ,MAAO;AAEnB,sBAAQ,KAAM,WAAY,IAAI,CAAE,GAAG,WAAY,IAAI,CAAE,GAAG,WAAY,IAAI,CAAE,CAAE;AAAA,YAE7E,OAAO;AAEN,sBAAQ,KAAM,WAAY,IAAI,CAAE,GAAG,WAAY,IAAI,CAAE,GAAG,WAAY,IAAI,CAAE,CAAE;AAAA,YAE7E;AAAA,UAED;AAAA,QAED;AAIA,YAAK,WAAW,MAAO;AAEtB,gBAAM,cAAc,qBAAsB,aAAa;AAEvD,mBAAU,IAAI,GAAGA,KAAI,WAAW,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEvD,gBAAK,QAAQ,MAAO;AAEnB,sBAAQ,KAAM,cAAc,WAAY,IAAI,CAAE,GAAG,cAAc,WAAY,IAAI,CAAE,GAAG,cAAc,WAAY,IAAI,CAAE,CAAE;AAAA,YAEvH,OAAO;AAEN,sBAAQ,KAAM,cAAc,WAAY,IAAI,CAAE,GAAG,cAAc,WAAY,IAAI,CAAE,GAAG,cAAc,WAAY,IAAI,CAAE,CAAE;AAAA,YAEvH;AAAA,UAED;AAAA,QAED;AAAA,MAED;AAEA,YAAM,oBAAoB,sBAAuB,SAAS,IAAI,uBAAwB,UAAU,CAAE,CAAE;AACpG,YAAM,kBAAkB,uBAAwB,SAAS,UAAU,WAAY;AAE/E,YAAM,WAAW,IAAI,eAAe;AACpC,eAAS,aAAc,YAAY,iBAAkB;AACrD,eAAS,aAAc,UAAU,eAAgB;AAKjD,eAAS,SAAS;AAClB,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAIA,aAAS,WAAY,YAAa;AAEjC,YAAM,OAAO,QAAS,UAAW;AACjC,YAAM,QAAQ,QAAS,IAAK;AAM5B,aAAS,MAAM,cAAc,MAAM,aAAe,MAAM,MAAM,IAAI;AAAA,IAEnE;AAEA,aAAS,mBAAoB,UAAU,OAAQ;AAE9C,eAAU,IAAI,GAAGA,KAAI,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEnD,cAAM,SAAS,QAAS,SAAU,CAAE,CAAE;AAEtC,YAAK,kBAAkB,SAAW,OAAM,IAAK,MAAO;AAAA,MAErD;AAAA,IAED;AAEA,aAAS,qBAAsBQ,QAAO,KAAM;AAE3C,YAAM,UAAU,CAAC;AAKjB,UAAI,QAAQ;AAEZ,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,KAAKQ,OAAO,KAAM;AACxB,cAAM,KAAKA,OAAO,KAAM,MAAM,IAAI,EAAI;AACtC,cAAM,KAAKA,OAAO,KAAM,MAAM,IAAI,EAAI;AAEtC,gBAAQ,KAAM,IAAI,IAAI,EAAG;AAIzB,YAAKA,OAAO,IAAI,CAAE,MAAM,MAAO,IAAI,KAAKR,IAAI;AAE3C,eAAK;AACL,kBAAQ,IAAI;AAAA,QAEb;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,oBAAqBD,OAAMS,QAAQ;AAE3C,YAAM,mBAAmB,CAAC;AAE1B,UAAI,QAAQ;AAEZ,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,SAAS,QAAQ;AAEvB,cAAMS,KAAIV,MAAM,MAAO;AACvB,cAAMW,KAAIX,MAAM,SAAS,CAAE;AAC3B,cAAM,IAAIA,MAAM,SAAS,CAAE;AAE3B,yBAAiB,KAAMU,IAAGC,IAAG,CAAE;AAI/B,YAAKF,OAAO,IAAI,CAAE,MAAM,MAAO,IAAI,KAAKR,IAAI;AAE3C,eAAK;AACL;AAAA,QAED;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,YAAaD,OAAMS,QAAQ;AAEnC,YAAMS,eAAc,CAAC;AAErB,eAAU,IAAI,GAAGjB,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,KAAKQ,OAAO,CAAE;AAEpB,cAAM,SAAS,KAAK;AAEpB,cAAMC,KAAIV,MAAM,MAAO;AACvB,cAAMW,KAAIX,MAAM,SAAS,CAAE;AAC3B,cAAM,IAAIA,MAAM,SAAS,CAAE;AAE3B,QAAAkB,aAAY,KAAMR,IAAGC,IAAG,CAAE;AAAA,MAE3B;AAEA,aAAOO;AAAA,IAER;AAEA,aAAS,gBAAiBT,QAAQ;AAEjC,YAAM,UAAU,CAAC;AAEjB,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,KAAKQ,OAAO,CAAE;AACpB,cAAM,KAAKA,OAAO,IAAI,CAAE;AAExB,gBAAQ,KAAM,IAAI,EAAG;AAIrB,YAAKA,OAAO,IAAI,CAAE,MAAM,MAAO,IAAI,KAAKR,IAAI;AAE3C,eAAK;AAAA,QAEN;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,eAAgBD,OAAMS,QAAQ;AAEtC,YAAM,mBAAmB,CAAC;AAE1B,UAAI,QAAQ;AAEZ,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,SAAS,QAAQ;AAEvB,cAAMS,KAAIV,MAAM,MAAO;AACvB,cAAMW,KAAIX,MAAM,SAAS,CAAE;AAC3B,cAAM,IAAIA,MAAM,SAAS,CAAE;AAE3B,yBAAiB,KAAMU,IAAGC,IAAG,CAAE;AAI/B,YAAKF,OAAO,IAAI,CAAE,MAAM,MAAO,IAAI,KAAKR,IAAI;AAE3C,eAAK;AACL;AAAA,QAED;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,UAAM,KAAK,IAAI,QAAQ;AACvB,UAAM,KAAK,IAAI,QAAQ;AACvB,UAAM,KAAK,IAAI,QAAQ;AAEvB,UAAM,MAAM,IAAI,QAAQ;AACxB,UAAM,MAAM,IAAI,QAAQ;AACxB,UAAM,MAAM,IAAI,QAAQ;AAExB,aAAS,gCAAiC,YAAYQ,QAAOT,OAAM,UAAW;AAE7E,YAAM,QAAQ,CAAC;AAIf,eAAU,IAAI,GAAGC,KAAI,WAAW,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEvD,cAAMc,KAAIN,OAAO,CAAE;AACnB,cAAMI,KAAIJ,OAAO,IAAI,CAAE;AACvB,cAAMO,KAAIP,OAAO,IAAI,CAAE;AAEvB,YAAK,aAAa,GAAI;AAErB,cAAI,UAAWT,OAAMe,KAAI,QAAS;AAClC,cAAI,UAAWf,OAAMa,KAAI,QAAS;AAClC,cAAI,UAAWb,OAAMgB,KAAI,QAAS;AAElC,gBAAM,KAAM,IAAI,GAAG,IAAI,CAAE;AACzB,gBAAM,KAAM,IAAI,GAAG,IAAI,CAAE;AACzB,gBAAM,KAAM,IAAI,GAAG,IAAI,CAAE;AAAA,QAE1B,OAAO;AAEN,aAAG,UAAWhB,OAAMe,KAAI,QAAS;AACjC,aAAG,UAAWf,OAAMa,KAAI,QAAS;AACjC,aAAG,UAAWb,OAAMgB,KAAI,QAAS;AAEjC,gBAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,gBAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,gBAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAAA,QAE9B;AAAA,MAED;AAEA,aAAO,IAAI,uBAAwB,OAAO,QAAS;AAAA,IAEpD;AAEA,aAAS,6BAA8BP,QAAO,UAAW;AAExD,YAAM,QAAQ,CAAC;AAEf,eAAU,IAAI,GAAG,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAK,GAAG,KAAO;AAE/D,WAAG,UAAW,UAAU,IAAI,CAAE;AAE9B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAAA,MAE9B;AAEA,aAAO,IAAI,uBAAwB,OAAO,CAAE;AAAA,IAE7C;AAEA,aAAS,6BAA8BQ,QAAO,UAAW;AAExD,YAAM,QAAQ,CAAC;AAEf,eAAU,IAAI,GAAG,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAK,GAAG,KAAO;AAE/D,WAAG,UAAW,UAAU,IAAI,CAAE;AAE9B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAAA,MAE9B;AAEA,aAAO,IAAI,uBAAwB,OAAO,CAAE;AAAA,IAE7C;AAEA,aAAS,sBAAuB,SAAS,WAAY;AAEpD,YAAM,QAAQ,UAAU;AACxB,YAAM,WAAW,UAAU;AAE3B,YAAM,SAAS,IAAI,MAAM,YAAa,QAAQ,SAAS,QAAS;AAEhE,UAAIQ,SAAQ,GAAGU,UAAS;AAExB,eAAU,IAAI,GAAGlB,KAAI,QAAQ,QAAQ,IAAIA,IAAG,KAAO;AAElD,QAAAQ,SAAQ,QAAS,CAAE,IAAI;AAEvB,iBAAU,IAAI,GAAG,IAAI,UAAU,KAAO;AAErC,iBAAQU,SAAU,IAAI,MAAOV,QAAS;AAAA,QAEvC;AAAA,MAED;AAEA,aAAO,IAAI,uBAAwB,QAAQ,QAAS;AAAA,IAErD;AAEA,UAAM,KAAK,IAAI,QAAQ;AACvB,UAAM,KAAK,IAAI,QAAQ;AAEvB,aAAS,uBAAwBA,QAAO,OAAO,aAAc;AAE5D,YAAM,QAAQ,CAAC;AACf,YAAM,gBAAgB,CAAC;AAIvB,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAK,GAAI;AAElD,cAAMc,KAAIN,OAAO,CAAE;AACnB,cAAMI,KAAIJ,OAAO,IAAI,CAAE;AACvB,cAAMO,KAAIP,OAAO,IAAI,CAAE;AAEvB,cAAM,OAAO,IAAIW,MAAML,IAAGF,IAAGG,EAAE;AAE/B,WAAG,UAAW,OAAOD,KAAI,CAAE;AAC3B,WAAG,UAAW,OAAOF,KAAI,CAAE;AAC3B,WAAG,UAAW,OAAOG,KAAI,CAAE;AAE3B,WAAG,WAAY,IAAI,EAAG;AACtB,WAAG,WAAY,IAAI,EAAG;AACtB,WAAG,MAAO,EAAG;AAEb,WAAG,UAAU;AAEb,aAAK,OAAO,KAAM,EAAG;AAErB,YAAK,cAAeD,EAAE,MAAM,OAAY,eAAeA,EAAE,IAAI,CAAC;AAC9D,YAAK,cAAeF,EAAE,MAAM,OAAY,eAAeA,EAAE,IAAI,CAAC;AAC9D,YAAK,cAAeG,EAAE,MAAM,OAAY,eAAeA,EAAE,IAAI,CAAC;AAE9D,sBAAeD,EAAE,EAAE,KAAM,KAAK,MAAO;AACrC,sBAAeF,EAAE,EAAE,KAAM,KAAK,MAAO;AACrC,sBAAeG,EAAE,EAAE,KAAM,KAAK,MAAO;AAErC,cAAM,KAAM,IAAK;AAAA,MAElB;AAIA,YAAM,UAAU,CAAC;AAEjB,eAAU,IAAI,GAAGf,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,cAAM,OAAO,MAAO,CAAE;AAEtB,cAAM,KAAK,eAAgB,cAAe,KAAK,CAAE,GAAG,KAAK,QAAQ,WAAY;AAC7E,cAAM,KAAK,eAAgB,cAAe,KAAK,CAAE,GAAG,KAAK,QAAQ,WAAY;AAC7E,cAAM,KAAK,eAAgB,cAAe,KAAK,CAAE,GAAG,KAAK,QAAQ,WAAY;AAE7E,WAAG,UAAW,OAAO,KAAK,IAAI,CAAE;AAChC,WAAG,UAAW,OAAO,KAAK,IAAI,CAAE;AAChC,WAAG,UAAW,OAAO,KAAK,IAAI,CAAE;AAEhC,gBAAQ,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC/B,gBAAQ,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC/B,gBAAQ,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAAA,MAEhC;AAEA,aAAO,IAAI,uBAAwB,SAAS,CAAE;AAAA,IAE/C;AAEA,aAAS,eAAgB,SAAS,QAAQ,aAAc;AAEvD,YAAM,SAAS,IAAI,QAAQ;AAE3B,UAAK,gBAAgB,GAAI;AAExB,eAAO,KAAM,MAAO;AAAA,MAErB,OAAO;AAEN,iBAAU,IAAI,GAAGA,KAAI,QAAQ,QAAQ,IAAIA,IAAG,KAAO;AAElD,cAAK,QAAS,CAAE,EAAE,QAAS,MAAO,IAAI,aAAc;AAEnD,mBAAO,IAAK,QAAS,CAAE,CAAE;AAAA,UAE1B;AAAA,QAED;AAAA,MAED;AAEA,aAAO,OAAO,UAAU;AAAA,IAEzB;AAEA,aAAS,aAAc,QAAS;AAE/B,YAAM,QAAQ,CAAC;AAEf,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEnD,cAAM,KAAM,IAAI,MAAO,OAAQ,CAAE,GAAG,OAAQ,IAAI,CAAE,GAAG,OAAQ,IAAI,CAAE,CAAE,CAAE;AAAA,MAExE;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,0BAA2B,WAAY;AAE/C,YAAM,QAAQ,IAAI,MAAM;AAExB,eAAU,IAAI,GAAG,IAAI,UAAU,OAAO,KAAO;AAE5C,cAAM,oBAAqB,WAAW,CAAE;AACxC,cAAM,oBAAoB;AAE1B,kBAAU,OAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,MAEhD;AAAA,IAED;AAwBA,aAAS,WAAY,UAAU,QAAQ,QAAQ,QAAQ,SAAU;AAIhE,YAAM,aAAa,CAAC;AACpB,YAAM,aAAe,YAAY,OAAS,IAAI,KAAK;AAEnD,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,YAAI,QAAU,MAAM,IAAM,IAAI,OAAQ,IAAI,CAAE;AAC5C,gBAAU,YAAY,OAAS,QAAU,aAAa;AAEtD,cAAM,QAAQ,IAAI,QAAQ;AAC1B,cAAM,uBAAwB,QAAQ,OAAO,CAAE;AAE/C,mBAAW,KAAM,KAAM;AAAA,MAExB;AAIA,YAAM,UAAU,SAAS;AACzB,YAAM,oBAAoB,SAAS,WAAW;AAC9C,YAAM,iBAAiB,IAAI,gBAAiB,IAAI,aAAc,SAAS,WAAW,SAAS,QAAQ,CAAE,GAAG,CAAE;AAE1G,YAAMoB,YAAW,IAAI,QAAQ;AAC7B,YAAM,QAAQ,IAAI,MAAM;AAExB,eAAU,IAAI,GAAG,IAAI,QAAQ,OAAO,KAAO;AAE1C,cAAMZ,SAAQ,QAAQ,KAAM,CAAE;AAC9B,QAAAY,UAAS,oBAAqB,mBAAmBZ,MAAM;AAEvD,YAAI,iBAAiB;AACrB,YAAIK,KAAI;AAER,iBAAU,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAO;AAE9C,4BAAkB,IAAI;AACtB,4BAAkB;AAElB,gBAAM,aAAa,WAAY,eAAgB;AAC/C,gBAAM,aAAa,WAAY,eAAgB;AAE/C,cAAK,YAAY,MAAO;AAIvB,gBAAKO,UAAS,KAAK,WAAW,KAAKA,UAAS,IAAI,WAAW,GAAI;AAE9D,cAAAP,KAAI,KAAK,IAAK,WAAW,IAAIO,UAAS,CAAE,IAAI,KAAK,IAAK,WAAW,IAAI,WAAW,CAAE;AAElF;AAAA,YAED;AAAA,UAED,OAAO;AAIN,gBAAKA,UAAS,KAAK,WAAW,KAAKA,UAAS,IAAI,WAAW,GAAI;AAE9D,cAAAP,KAAI,KAAK,IAAK,WAAW,IAAIO,UAAS,CAAE,IAAI,KAAK,IAAK,WAAW,IAAI,WAAW,CAAE;AAElF;AAAA,YAED;AAAA,UAED;AAAA,QAED;AAEA,cAAM,SAAS,OAAQ,eAAgB;AACvC,cAAM,SAAS,OAAQ,eAAgB;AAEvC,cAAM,KAAM,MAAO,EAAE,KAAM,QAAQP,EAAE,EAAE,oBAAoB;AAE3D,uBAAe,OAAQL,QAAO,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,MAEzD;AAEA,eAAS,aAAc,SAAS,cAAe;AAAA,IAEhD;AAIA,UAAM,gBAAgB,IAAI,cAAe,KAAK,OAAQ;AACtD,kBAAc,QAAS,KAAK,gBAAgB,IAAK,EAAE,eAAgB,KAAK,WAAY;AAIpF,QAAKT,MAAK,QAAS,YAAa,MAAM,IAAM;AAE3C,YAAM,MAAO,uDAAwD;AAAA,IAEtE;AAIA,UAAM,OAAO,iBAAkBA,KAAK;AAIpC,UAAM,QAAQ,UAAW,IAAK;AAE9B,WAAO;AAAA,EAER;AAED;AAEA,IAAM,YAAN,MAAgB;AAAA,EAEf,YAAa,QAAS;AAErB,SAAK,QAAQ,IAAI,8BAAW,MAAO,MAAO;AAAA,EAE3C;AAAA,EAEA,IAAK,WAAY;AAEhB,UAAM,eAAe,KAAK,MAAM,SAAU,SAAU;AAEpD,QAAK,aAAa,OAAO,SAAS,GAAI;AAErC,cAAQ,MAAO,aAAa,MAAO;AAEnC,YAAM,MAAO,0CAA2C;AAAA,IAEzD;AAEA,WAAO;AAAA,EAER;AAED;AAEA,IAAM,YAAY,8BAAW;AAE7B,IAAM,aAAN,cAAyB,UAAU;AAAA,EAElC,YAAa,iBAAkB;AAE9B,UAAO,eAAgB;AAEvB,UAAMsB,KAAI;AAEV,UAAM,UAAU,gBAAiB,SAAU;AAC3C,UAAM,SAAS,gBAAiB,QAAS;AACzC,UAAM,SAAS,gBAAiB,QAAS;AACzC,UAAM,UAAU,gBAAiB,SAAU;AAC3C,UAAM,UAAU,gBAAiB,SAAU;AAC3C,UAAM,aAAa,gBAAiB,YAAa;AACjD,UAAM,kBAAkB,gBAAiB,iBAAkB;AAC3D,UAAM,gBAAgB,gBAAiB,eAAgB;AACvD,UAAM,aAAa,gBAAiB,YAAa;AACjD,UAAM,gBAAgB,gBAAiB,eAAgB;AACvD,UAAM,cAAc,gBAAiB,aAAc;AACnD,UAAM,eAAe,gBAAiB,cAAe;AACrD,UAAM,cAAc,gBAAiB,aAAc;AACnD,UAAM,MAAM,gBAAiB,KAAM;AACnC,UAAM,MAAM,gBAAiB,KAAM;AACnC,UAAM,QAAQ,gBAAiB,OAAQ;AACvC,UAAM,KAAK,gBAAiB,IAAK;AACjC,UAAM,WAAW,gBAAiB,UAAW;AAE7C,IAAAA,GAAE,KAAM,QAAQ,WAAY;AAE3B,MAAAA,GAAE,QAASA,GAAE,OAAQ;AACrB,MAAAA,GAAE,aAAc,WAAY;AAE3B,QAAAA,GAAE,QAASA,GAAE,IAAK;AAAA,MAEnB,CAAE;AACF,MAAAA,GAAE,KAAM,WAAY;AAEnB,QAAAA,GAAE,QAASA,GAAE,KAAM;AAAA,MAEpB,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,WAAW,WAAY;AAE9B,MAAAA,GAAE,QAAS,OAAQ;AAAA,IAEpB,CAAE;AAEF,IAAAA,GAAE,KAAM,QAAQ,WAAY;AAE3B,MAAAA,GAAE,OAAQ,WAAY;AAErB,QAAAA,GAAE,QAASA,GAAE,GAAI;AAAA,MAElB,CAAE;AAEF,MAAAA,GAAE,QAAS,QAAS;AACpB,MAAAA,GAAE,QAAS,MAAO;AAClB,MAAAA,GAAE,KAAM,WAAY;AAEnB,QAAAA,GAAE,QAASA,GAAE,KAAM;AAAA,MAEpB,CAAE;AACF,MAAAA,GAAE,QAAS,MAAO;AAAA,IAEnB,CAAE;AAEF,IAAAA,GAAE,KAAM,SAAS,WAAY;AAE5B,MAAAA,GAAE,QAAS,UAAW;AAEtB,MAAAA,GAAE,IAAK;AAAA,QACN,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAASA,GAAE,gBAAiB;AAAA,QAE/B,EAAE;AAAA,QACF,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAASA,GAAE,eAAgB;AAAA,QAE9B,EAAE;AAAA,MACH,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,OAAO,WAAY;AAE1B,MAAAA,GAAE,QAAS,GAAI;AACf,MAAAA,GAAE,GAAI;AAAA,QACL,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAAS,UAAW;AAAA,QAEvB,EAAE;AAAA,QACF,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAAS,QAAS;AAAA,QAErB,EAAE;AAAA,MACH,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,OAAO,WAAY;AAE1B,MAAAA,GAAE,QAAS,GAAI;AACf,MAAAA,GAAE,GAAI;AAAA,QACL,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAAS,UAAW;AAAA,QAEvB,EAAE;AAAA,QACF,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAAS,QAAS;AAAA,QAErB,EAAE;AAAA,MACH,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,oBAAoB,WAAY;AAEvC,MAAAA,GAAE,aAAc,WAAY;AAE3B,QAAAA,GAAE,GAAI;AAAA,UACL,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAASA,GAAE,IAAK;AAAA,UAEnB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAASA,GAAE,GAAI;AAAA,UAElB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,aAAc;AAAA,UAE1B,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,UAAW;AAAA,UAEvB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,aAAc;AAAA,UAE1B,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,WAAY;AAAA,UAExB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,YAAa;AAAA,UAEzB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,WAAY;AAAA,UAExB,EAAE;AAAA,QACH,CAAE;AAAA,MAGH,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,mBAAmB,WAAY;AAEtC,MAAAA,GAAE,QAAS,OAAQ;AACnB,MAAAA,GAAE,KAAM,WAAY;AAEnB,QAAAA,GAAE,GAAI;AAAA,UACL,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAASA,GAAE,IAAK;AAAA,UAEnB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAASA,GAAE,GAAI;AAAA,UAElB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,aAAc;AAAA,UAE1B,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,UAAW;AAAA,UAEvB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,aAAc;AAAA,UAE1B,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,WAAY;AAAA,UAExB,EAAE;AAAA,QACH,CAAE;AAAA,MAEH,CAAE;AACF,MAAAA,GAAE,QAAS,OAAQ;AAAA,IAEpB,CAAE;AAEF,IAAAA,GAAE,KAAM,SAAS,WAAY;AAE5B,MAAAA,GAAE,QAAS,KAAM;AACjB,MAAAA,GAAE,QAAS,eAAgB;AAC3B,MAAAA,GAAE,QAAS,EAAG;AACd,MAAAA,GAAE,SAAU,eAAgB;AAAA,IAE7B,CAAE;AAEF,SAAK,oBAAoB;AAAA,EAE1B;AAED;AAEA,IAAMF,QAAN,MAAW;AAAA,EAEV,YAAaL,IAAGF,IAAGG,IAAI;AAEtB,SAAK,IAAID;AACT,SAAK,IAAIF;AACT,SAAK,IAAIG;AACT,SAAK,SAAS,IAAI,QAAQ;AAAA,EAE3B;AAED;AAEA,IAAM,eAAe;AAAA,EACpB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,KAAK;AAAA,EACL,MAAM;AACP;;;ACp8GA,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAAA,EAEhB;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,MAAM,OAAQ;AAC7C,WAAO,QAAS,MAAM,IAAK;AAC3B,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,MAAM,aAAc;AAC7C,WAAO,mBAAoB,MAAM,eAAgB;AACjD,WAAO,KAAM,KAAK,SAAWO,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOC,OAAO;AAEb,aAAS,WAAYA,OAAO;AAG3B,YAAM,UAAU,CAAC;AAGjB,YAAM,YAAY,CAAC;AAGnB,YAAM,SAAS,CAAC;AAGhB,YAAM,UAAU,CAAC;AAEjB,UAAI;AAGJ,YAAM,UAAU;AAGhB,YAAM,aAAa;AAInB,YAAM,kBAAkB;AAGxB,YAAM,YAAY;AAGlB,YAAM,cAAc;AAGpB,YAAM,qBAAqB;AAG3B,YAAM,gBAAgB;AAGtB,YAAM,eAAe;AAGrB,YAAM,mBAAmB;AAGzB,YAAM,aAAa;AAEnB,UAAI,kBAAkB;AACtB,UAAI,oBAAoB;AACxB,UAAI,yBAAyB;AAC7B,UAAI,qBAAqB;AACzB,UAAI,oBAAoB;AACxB,UAAI,iBAAiB;AACrB,UAAI,mBAAmB;AAEvB,YAAM,QAAQ,IAAI,MAAM;AAExB,YAAM,QAAQA,MAAK,MAAO,IAAK;AAE/B,iBAAY,KAAK,OAAQ;AAExB,cAAMC,QAAO,MAAO,CAAE,EAAE,KAAK;AAE7B,YAAKA,MAAK,QAAS,SAAU,MAAM,GAAI;AAEtC,gBAAM,UAAUA,MAAK,MAAO,GAAI,EAAG,CAAE;AAErC,cAAK,YAAY,WAAa,OAAM,IAAI,MAAO,+BAA+B,OAAQ;AAAA,QAEvF,WAAY,iBAAkB;AAG7B,kBAAU,SAAS,WAAW,KAAMA,KAAK,OAAQ,MAAO;AAEvD,gBAAK,QAAQ,KAAMA,KAAK,MAAM,KAAO;AAErC,kBAAMC,KAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,kBAAMC,KAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,kBAAM,IAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,sBAAU,KAAMD,IAAGC,IAAG,CAAE;AAAA,UAEzB;AAAA,QAED,WAAY,mBAAoB;AAE/B,eAAO,SAAS,gBAAgB,KAAMF,KAAK,OAAQ,MAAO;AAGzD,kBAAM,cAAc,SAAU,OAAQ,CAAE,CAAE;AAC1C,kBAAM,OAAO,OAAQ,CAAE,EAAE,MAAO,KAAM;AAEtC,gBAAK,eAAe,GAAI;AAEvB,oBAAM,KAAK,SAAU,KAAM,CAAE,CAAE;AAC/B,kBAAIG,KAAI;AAER,uBAAU,IAAI,GAAG,IAAI,cAAc,GAAG,EAAG,GAAI;AAE5C,sBAAM,KAAK,SAAU,KAAMA,EAAE,CAAE;AAC/B,sBAAM,KAAK,SAAU,KAAMA,KAAI,CAAE,CAAE;AACnC,wBAAQ,KAAM,IAAI,IAAI,EAAG;AACzB,gBAAAA;AAAA,cAED;AAAA,YAED;AAAA,UAED;AAAA,QAED,WAAY,wBAAyB;AAEpC,eAAO,SAAS,gBAAgB,KAAMH,KAAK,OAAQ,MAAO;AAGzD,kBAAM,cAAc,SAAU,OAAQ,CAAE,CAAE;AAC1C,kBAAM,OAAO,OAAQ,CAAE,EAAE,MAAO,KAAM;AAEtC,gBAAK,eAAe,GAAI;AAGvB,uBAAU,IAAI,GAAG,IAAI,cAAc,GAAG,KAAO;AAE5C,oBAAK,IAAI,MAAM,GAAI;AAElB,wBAAM,KAAK,SAAU,KAAM,CAAE,CAAE;AAC/B,wBAAM,KAAK,SAAU,KAAM,IAAI,CAAE,CAAE;AACnC,wBAAM,KAAK,SAAU,KAAM,IAAI,CAAE,CAAE;AACnC,0BAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,gBAE1B,OAAO;AAEN,wBAAM,KAAK,SAAU,KAAM,CAAE,CAAE;AAC/B,wBAAM,KAAK,SAAU,KAAM,IAAI,CAAE,CAAE;AACnC,wBAAM,KAAK,SAAU,KAAM,IAAI,CAAE,CAAE;AACnC,0BAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,gBAE1B;AAAA,cAED;AAAA,YAED;AAAA,UAED;AAAA,QAED,WAAY,sBAAsB,mBAAoB;AAErD,cAAK,gBAAiB;AAIrB,oBAAU,SAAS,WAAW,KAAMA,KAAK,OAAQ,MAAO;AAEvD,kBAAK,QAAQ,KAAMA,KAAK,MAAM,KAAO;AAErC,oBAAM,IAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,oBAAMI,KAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,oBAAMC,KAAI,WAAY,OAAQ,CAAE,CAAE;AAElC,oBAAM,IAAK,GAAGD,IAAGC,EAAE,EAAE,oBAAoB;AAEzC,qBAAO,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,YAExC;AAAA,UAED,WAAY,kBAAmB;AAI9B,oBAAU,SAAS,WAAW,KAAML,KAAK,OAAQ,MAAO;AAEvD,kBAAK,QAAQ,KAAMA,KAAK,MAAM,KAAO;AAErC,oBAAM,KAAK,WAAY,OAAQ,CAAE,CAAE;AACnC,oBAAM,KAAK,WAAY,OAAQ,CAAE,CAAE;AACnC,oBAAM,KAAK,WAAY,OAAQ,CAAE,CAAE;AACnC,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,YAE1B;AAAA,UAED;AAAA,QAED;AAEA,YAAK,YAAY,KAAMA,KAAK,MAAM,MAAO;AAExC,8BAAoB;AACpB,4BAAkB;AAClB,mCAAyB;AAAA,QAE1B,WAAY,UAAU,KAAMA,KAAK,MAAM,MAAO;AAE7C,8BAAoB;AACpB,4BAAkB;AAClB,mCAAyB;AAAA,QAE1B,WAAY,mBAAmB,KAAMA,KAAK,MAAM,MAAO;AAEtD,8BAAoB;AACpB,4BAAkB;AAClB,mCAAyB;AAAA,QAE1B,WAAY,cAAc,KAAMA,KAAK,MAAM,MAAO;AAEjD,+BAAqB;AACrB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAE1B,WAAY,aAAa,KAAMA,KAAK,MAAM,MAAO;AAEhD,8BAAoB;AACpB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAE1B,WAAY,iBAAiB,KAAMA,KAAK,MAAM,MAAO;AAEpD,2BAAiB;AACjB,6BAAmB;AACnB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAE1B,WAAY,WAAW,KAAMA,KAAK,MAAM,MAAO;AAE9C,6BAAmB;AACnB,2BAAiB;AACjB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAE1B;AAAA,MAED;AAEA,UAAI,WAAW,IAAI,eAAe;AAClC,eAAS,SAAU,OAAQ;AAC3B,eAAS,aAAc,YAAY,IAAI,uBAAwB,WAAW,CAAE,CAAE;AAE9E,UAAK,QAAQ,WAAW,UAAU,QAAS;AAE1C,iBAAS,aAAc,UAAU,IAAI,uBAAwB,SAAS,CAAE,CAAE;AAAA,MAE3E;AAEA,UAAK,OAAO,WAAW,QAAQ,QAAS;AAIvC,YAAK,OAAO,WAAW,UAAU,QAAS;AAEzC,mBAAS,aAAc,SAAS,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AAAA,QAEzE;AAAA,MAED,OAAO;AAIN,mBAAW,SAAS,aAAa;AACjC,cAAM,eAAe,SAAS,WAAW,SAAS,QAAQ;AAE1D,YAAK,OAAO,WAAa,eAAe,GAAM;AAE7C,gBAAM,YAAY,CAAC;AAEnB,mBAAU,IAAI,GAAG,IAAI,cAAc,KAAO;AAEzC,kBAAM,IAAI,OAAQ,IAAI,IAAI,CAAE;AAC5B,kBAAMI,KAAI,OAAQ,IAAI,IAAI,CAAE;AAC5B,kBAAMC,KAAI,OAAQ,IAAI,IAAI,CAAE;AAE5B,kBAAM,IAAK,GAAGD,IAAGC,EAAE,EAAE,oBAAoB;AAEzC,sBAAU,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAC1C,sBAAU,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAC1C,sBAAU,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,UAE3C;AAEA,mBAAS,aAAc,SAAS,IAAI,uBAAwB,WAAW,CAAE,CAAE;AAAA,QAE5E;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,YAAaN,OAAO;AAE5B,YAAM,SAAS,IAAI,WAAYA,KAAK;AACpC,YAAM,WAAW,IAAI,SAAUA,KAAK;AAGpC,UAAI,SAAS,CAAC;AACd,UAAI,UAAU,CAAC;AACf,UAAI,UAAU,CAAC;AAEf,UAAIO,SAAQ;AAEZ,eAAS,WAAYC,SAAQ,OAAQ;AAEpC,YAAID,SAAQ;AACZ,YAAIE,KAAID,QAAQD,MAAM;AACtB,cAAM,IAAI,CAAC;AACX,eAAQE,OAAM,IAAK;AAElB,YAAE,KAAM,OAAO,aAAcA,EAAE,CAAE;AACjC,UAAAF;AACA,UAAAE,KAAID,QAAQD,MAAM;AAAA,QAEnB;AAEA,eAAO;AAAA,UAAE;AAAA,UACR,KAAKA;AAAA,UACL,MAAMA,SAAQ;AAAA,UACd,cAAc,EAAE,KAAM,EAAG;AAAA,QAAE;AAAA,MAE7B;AAEA,UAAI,OAAON;AAEX,aAAQ,MAAO;AAGd,gBAAQ,WAAY,QAAQM,MAAM;AAClC,QAAAN,QAAO,MAAM;AAEb,YAAKA,MAAK,QAAS,SAAU,MAAM,GAAI;AAEtC,gBAAM,UAAUA,MAAK,MAAO,GAAI,EAAG,CAAE;AAErC,cAAK,YAAY,WAAa,OAAM,IAAI,MAAO,+BAA+B,OAAQ;AAAA,QAEvF,WAAYA,MAAK,QAAS,QAAS,MAAM,GAAI;AAG5C,gBAAM,iBAAiB,SAAUA,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAG5D,gBAAM,QAAQ,iBAAiB,IAAI;AAEnC,mBAAS,IAAI,aAAc,iBAAiB,CAAE;AAE9C,cAAI,aAAa,MAAM;AACvB,mBAAU,IAAI,GAAG,IAAI,gBAAgB,KAAO;AAE3C,mBAAQ,IAAI,CAAE,IAAI,SAAS,WAAY,YAAY,KAAM;AACzD,mBAAQ,IAAI,IAAI,CAAE,IAAI,SAAS,WAAY,aAAa,GAAG,KAAM;AACjE,mBAAQ,IAAI,IAAI,CAAE,IAAI,SAAS,WAAY,aAAa,GAAG,KAAM;AACjE,yBAAa,aAAa;AAAA,UAE3B;AAGA,gBAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,QAEnC,WAAYA,MAAK,QAAS,iBAAkB,MAAM,GAAI;AAErD,gBAAM,iBAAiB,SAAUA,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAC5D,gBAAMS,QAAO,SAAUT,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAElD,gBAAM,QAAQS,QAAO;AAErB,oBAAU,IAAI,YAAa,IAAIA,QAAO,IAAI,cAAe;AACzD,cAAI,eAAe;AAEnB,cAAI,aAAa,MAAM;AACvB,mBAAU,IAAI,GAAG,IAAI,gBAAgB,KAAO;AAG3C,kBAAM,aAAa,SAAS,SAAU,YAAY,KAAM;AACxD,kBAAM,QAAQ,CAAC;AACf,0BAAc;AACd,qBAAU,IAAI,GAAG,IAAI,YAAY,KAAO;AAEvC,oBAAM,KAAM,SAAS,SAAU,YAAY,KAAM,CAAE;AACnD,4BAAc;AAAA,YAEf;AAGA,qBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,kBAAK,IAAI,GAAI;AAEZ,wBAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,wBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAC1C,wBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,cAE3C,OAAO;AAEN,wBAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,wBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAC1C,wBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,cAE3C;AAAA,YAED;AAAA,UAED;AAGA,gBAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,QAEnC,WAAYT,MAAK,QAAS,UAAW,MAAM,GAAI;AAE9C,gBAAM,iBAAiB,SAAUA,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAC5D,gBAAMS,QAAO,SAAUT,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAElD,gBAAM,QAAQS,QAAO;AAErB,oBAAU,IAAI,YAAa,IAAIA,QAAO,IAAI,cAAe;AACzD,cAAI,eAAe;AAEnB,cAAI,aAAa,MAAM;AACvB,mBAAU,IAAI,GAAG,IAAI,gBAAgB,KAAO;AAG3C,kBAAM,aAAa,SAAS,SAAU,YAAY,KAAM;AACxD,kBAAM,QAAQ,CAAC;AACf,0BAAc;AACd,qBAAU,IAAI,GAAG,IAAI,YAAY,KAAO;AAEvC,oBAAM,KAAM,SAAS,SAAU,YAAY,KAAM,CAAE;AACnD,4BAAc;AAAA,YAEf;AAGA,qBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,sBAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,sBAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,sBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,YAE3C;AAAA,UAED;AAGA,gBAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,QAEnC,WAAYT,MAAK,QAAS,YAAa,MAAM,GAAI;AAEhD,gBAAM,iBAAiB,SAAUA,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAG5D,kBAAQ,WAAY,QAAQ,MAAM,IAAK;AAGvC,gBAAM,QAAQ,iBAAiB,IAAI;AAEnC,oBAAU,IAAI,aAAc,iBAAiB,CAAE;AAC/C,cAAI,aAAa,MAAM;AACvB,mBAAU,IAAI,GAAG,IAAI,gBAAgB,KAAO;AAE3C,oBAAS,IAAI,CAAE,IAAI,SAAS,WAAY,YAAY,KAAM;AAC1D,oBAAS,IAAI,IAAI,CAAE,IAAI,SAAS,WAAY,aAAa,GAAG,KAAM;AAClE,oBAAS,IAAI,IAAI,CAAE,IAAI,SAAS,WAAY,aAAa,GAAG,KAAM;AAClE,0BAAc;AAAA,UAEf;AAGA,gBAAM,OAAO,MAAM,OAAO;AAAA,QAE3B;AAGA,QAAAM,SAAQ,MAAM;AAEd,YAAKA,UAAS,OAAO,YAAa;AAEjC;AAAA,QAED;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,eAAe;AACpC,eAAS,SAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AACrD,eAAS,aAAc,YAAY,IAAI,gBAAiB,QAAQ,CAAE,CAAE;AAEpE,UAAK,QAAQ,WAAW,OAAO,QAAS;AAEvC,iBAAS,aAAc,UAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AAAA,MAEpE;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,cAAeI,QAAO,QAAS;AAEvC,YAAM,cAAcA,OAAM,QAAQ,SAAS,IAAI,aAAc,cAAc,OAAO,MAAO;AAEzF,aAAO,IAAKA,MAAM;AAClB,aAAO,IAAK,QAAQ,WAAY;AAEhC,aAAO;AAAA,IAER;AAEA,aAAS,YAAaA,QAAO,QAAS;AAErC,YAAM,cAAcA,OAAM,QAAQ,SAAS,IAAI,WAAY,cAAc,OAAO,MAAO;AAEvF,aAAO,IAAKA,MAAM;AAClB,aAAO,IAAK,QAAQ,WAAY;AAEhC,aAAO;AAAA,IAER;AAEA,aAAS,SAAU,YAAa;AAI/B,eAAS,UAAW,KAAM;AAGzB,YAAI,MAAM,CAAC;AAEX,YAAK,IAAI,aAAa,GAAI;AAIzB,cAAK,IAAI,YAAa;AAErB,gBAAK,IAAI,WAAW,SAAS,GAAI;AAEhC,kBAAK,YAAa,IAAI,CAAC;AAEvB,uBAAU,IAAI,GAAG,IAAI,IAAI,WAAW,QAAQ,KAAO;AAElD,sBAAM,YAAY,IAAI,WAAW,KAAM,CAAE;AACzC,oBAAK,YAAa,EAAG,UAAU,QAAS,IAAI,UAAU,UAAU,KAAK;AAAA,cAEtE;AAAA,YAED;AAAA,UAED;AAAA,QAED,WAAY,IAAI,aAAa,GAAI;AAEhC,gBAAM,IAAI,UAAU,KAAK;AAAA,QAE1B;AAGA,YAAK,IAAI,cAAc,GAAI;AAE1B,mBAAU,IAAI,GAAG,IAAI,IAAI,WAAW,QAAQ,KAAO;AAElD,kBAAM,OAAO,IAAI,WAAW,KAAM,CAAE;AACpC,kBAAM,WAAW,KAAK;AAEtB,gBAAK,OAAO,IAAK,QAAS,MAAM,aAAc;AAE7C,oBAAM,MAAM,UAAW,IAAK;AAE5B,kBAAK,QAAQ,IAAK;AAEjB,oBAAK,MAAM,QAAS,IAAK,OAAQ,CAAE,GAAI;AAEtC,sBAAK,OAAQ,IAAI,IAAK,OAAQ,EAAG,CAAE;AAAA,gBAEpC;AAEA,oBAAK,QAAS,IAAI;AAAA,cAEnB;AAAA,YAED,OAAO;AAEN,kBAAK,OAAO,IAAK,QAAS,EAAE,SAAS,aAAc;AAElD,sBAAM,MAAM,IAAK,QAAS;AAC1B,oBAAK,QAAS,IAAI,CAAE,GAAI;AAAA,cAEzB;AAEA,oBAAM,MAAM,UAAW,IAAK;AAE5B,kBAAK,QAAQ,IAAK;AAEjB,oBAAK,MAAM,QAAS,IAAK,OAAQ,CAAE,GAAI;AAEtC,sBAAK,OAAQ,IAAI,IAAK,OAAQ,EAAG,CAAE;AAAA,gBAEpC;AAEA,oBAAK,QAAS,EAAE,KAAM,GAAI;AAAA,cAE3B;AAAA,YAED;AAAA,UAED;AAAA,QAED;AAEA,eAAO;AAAA,MAER;AAGA,eAAS,kBAAmB,KAAM;AAEjC,cAAM,MAAM,OAAO,eAAe,cAAc,aAAa;AAC7D,cAAM,YAAY,CAAC;AACnB,cAAM,OAAO;AAEb,iBAAUC,KAAI,GAAGC,KAAI,KAAK,QAAQD,KAAIC,IAAG,EAAGD,IAAI;AAE/C,oBAAW,KAAK,WAAYA,EAAE,CAAE,IAAIA;AAAA,QAErC;AAEA,kBAAW,IAAI,WAAY,CAAE,CAAE,IAAI;AACnC,kBAAW,IAAI,WAAY,CAAE,CAAE,IAAI;AAEnC,cAAM,MAAM,IAAI;AAEhB,YAAK,MAAM,IAAI,GAAI;AAElB,gBAAM,IAAI,MAAO,gDAAiD;AAAA,QAEnE;AAEA,cAAM,eAAe,IAAK,MAAM,CAAE,MAAM,MAAM,IAAI,IAAK,MAAM,CAAE,MAAM,MAAM,IAAI;AAC/E,cAAM,MAAM,IAAI,IAAK,MAAM,IAAI,IAAI,YAAa;AAChD,cAAMC,KAAI,eAAe,IAAI,MAAM,IAAI;AAEvC,YAAI,IAAI;AACR,YAAI,GAAG;AAEP,aAAM,IAAI,GAAG,IAAI,GAAG,IAAIA,IAAG,KAAK,GAAG,KAAK,GAAI;AAE3C,gBAAM,MAAQ,UAAW,IAAI,WAAY,CAAE,CAAE,KAAK,KAAS,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK,KAAS,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK,IAAM,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE;AAC7L,cAAK,GAAK,KAAM,MAAM,aAAc;AACpC,cAAK,GAAK,KAAM,MAAM,UAAY;AAClC,cAAK,GAAK,IAAI,MAAM;AAAA,QAErB;AAEA,YAAK,iBAAiB,GAAI;AAEzB,gBAAM,MAAQ,UAAW,IAAI,WAAY,CAAE,CAAE,KAAK,IAAQ,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK;AAClG,cAAK,GAAK,IAAI,MAAM;AAAA,QAErB,WAAY,iBAAiB,GAAI;AAEhC,gBAAM,MAAQ,UAAW,IAAI,WAAY,CAAE,CAAE,KAAK,KAAS,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK,IAAQ,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK;AACnJ,cAAK,GAAK,IAAM,OAAO,IAAM;AAC7B,cAAK,GAAK,IAAI,MAAM;AAAA,QAErB;AAEA,eAAO;AAAA,MAER;AAEA,eAAS,eAAgB,KAAK,YAAa;AAE1C,YAAI,WAAW;AAEf,YAAK,KAAK,WAAW,gBAAgB,UAAW;AAE/C,qBAAW;AAAA,QAEZ,WAAY,KAAK,WAAW,gBAAgB,UAAW;AAEtD,qBAAW;AAAA,QAEZ;AAEA,YAAI,KAAKC;AAGT,YAAK,IAAI,WAAW,WAAW,YAAY,YAAa;AAEvD,cAAK,IAAI,WAAW,SAAS,WAAY;AAExC,kBAAM,IAAI,aAAc;AAAA,UAEzB,WAAY,IAAI,WAAW,SAAS,WAAW,IAAI,WAAW,SAAS,SAAU;AAEhF,kBAAM,IAAI,WAAY;AAAA,UAEvB;AAcA,gBAAM,WAAW,IAAK,OAAQ;AAC9B,gBAAM,UAAU,MAAM,QAAS,QAAS,IAAI,SAAU,CAAE,IAAI;AAE5D,gBAAM,WAAW,kBAAmB,OAAQ;AAG5C,gBAAM,gBAAgB;AAEtB,cAAI,SAAS,SAAU,CAAE;AACzB,mBAAU,IAAI,GAAG,IAAI,WAAW,GAAG,KAAO;AAEzC,qBAAS,SAAW,SAAU,CAAE,KAAO,IAAI;AAAA,UAE5C;AAEA,cAAI,cAAe,SAAS,KAAM;AAClC,gBAAM,UAAc,aAAa,IAAM,IAAM,IAAM,aAAa,IAAM;AACtE,uBAAa,aAAa;AAE1B,gBAAM,cAAc,CAAC;AACrB,cAAI,gBAAgB;AACpB,sBAAY,KAAM,aAAc;AAIhC,gBAAM,aAAa,IAAI;AAEvB,mBAAU,IAAI,GAAG,IAAI,QAAQ,KAAO;AAEnC,gBAAI,mBAAmB,SAAU,IAAI,WAAW,UAAW;AAE3D,qBAAU,IAAI,GAAG,IAAI,WAAW,GAAG,KAAO;AAEzC,iCAAmB,mBAAqB,SAAU,IAAI,WAAW,aAAa,CAAE,KAAO,IAAI;AAAA,YAE5F;AAEA,4BAAgB,gBAAgB;AAChC,wBAAY,KAAM,aAAc;AAAA,UAEjC;AAEA,mBAAU,IAAI,GAAG,IAAI,YAAY,SAAS,GAAG,KAAO;AAEnD,kBAAMd,QAAc,WAAY,SAAS,MAAO,YAAa,CAAE,GAAG,YAAa,IAAI,CAAE,CAAE,CAAE;AACzF,YAAAc,WAAUd,MAAK;AAEf,gBAAK,IAAI,WAAW,SAAS,WAAY;AAExC,cAAAc,WAAU,IAAI,aAAcA,QAAQ;AACpC,oBAAM,cAAe,KAAKA,QAAQ;AAAA,YAEnC,WAAY,IAAI,WAAW,SAAS,WAAW,IAAI,WAAW,SAAS,SAAU;AAEhF,cAAAA,WAAU,IAAI,WAAYA,QAAQ;AAClC,oBAAM,YAAa,KAAKA,QAAQ;AAAA,YAEjC;AAAA,UAED;AAEA,iBAAO,IAAK,OAAQ;AAEpB,cAAK,IAAI,WAAW,SAAS,SAAU;AAEtC,gBAAK,IAAI,WAAW,WAAW,UAAW;AAEzC,oBAAM,IAAI,OAAQ,SAAW,IAAI,KAAM;AAEtC,oBAAK,MAAM,MAAM,EAAI,QAAO;AAAA,cAE7B,CAAE;AAAA,YAEH;AAAA,UAED;AAAA,QAED,OAAO;AAEN,cAAK,IAAI,WAAW,WAAW,YAAY,CAAE,YAAa;AAEzD,YAAAA,WAAU,kBAAmB,IAAK,OAAQ,CAAE;AAK5C,YAAAA,WAAUA,SAAQ,MAAO,QAAS,EAAE;AAAA,UAErC,OAAO;AAEN,gBAAK,IAAK,OAAQ,GAAI;AAErB,cAAAA,WAAU,IAAK,OAAQ,EAAE,MAAO,KAAM,EAAE,OAAQ,SAAW,IAAK;AAE/D,oBAAK,OAAO,GAAK,QAAO;AAAA,cAEzB,CAAE;AAAA,YAEH,OAAO;AAEN,cAAAA,WAAU,IAAI,WAAY,CAAE,EAAE;AAAA,YAE/B;AAAA,UAED;AAEA,iBAAO,IAAK,OAAQ;AAGpB,cAAK,IAAI,WAAW,SAAS,WAAY;AAExC,kBAAM,IAAI,aAAcA,QAAQ;AAAA,UAEjC,WAAY,IAAI,WAAW,SAAS,SAAU;AAE7C,kBAAM,IAAI,WAAYA,QAAQ;AAAA,UAE/B,WAAY,IAAI,WAAW,SAAS,SAAU;AAE7C,kBAAM,IAAI,WAAYA,QAAQ;AAE9B,gBAAK,IAAI,WAAW,WAAW,UAAW;AAEzC,oBAAM,IAAI,OAAQ,SAAW,IAAI,KAAM;AAEtC,oBAAK,MAAM,MAAM,EAAI,QAAO;AAAA,cAE7B,CAAE;AAAA,YAEH;AAAA,UAED;AAAA,QAED;AAEA,eAAO;AAAA,MAER;AAIA,YAAM,MAAM,IAAI,UAAU,EAAE,gBAAiB,YAAY,iBAAkB;AAG3E,YAAM,MAAM,IAAI;AAEhB,YAAM,OAAO,UAAW,GAAI;AAC5B,UAAI,SAAS,CAAC;AACd,UAAI,UAAU,CAAC;AACf,UAAI,UAAU,CAAC;AAEf,UAAK,KAAK,cAAe;AAExB,cAAM,eAAe,KAAK,aAAc,OAAQ,EAAE,MAAO,CAAE;AAC3D,cAAM,QAAQ,KAAK,SAAS;AAE5B,cAAM,WAAW,CAAE,aAAa,YAAY,UAAU,SAAS,SAAS,UAAU,OAAQ;AAC1F,YAAI,eAAe;AAEnB,cAAM,UAAU,SAAS,IAAK,OAAK;AAElC,gBAAM,OAAO,MAAO,CAAE;AAEtB,cAAK,QAAQ,KAAK,WAAY;AAE7B,kBAAM,MAAM,MAAM,QAAS,KAAK,SAAU,IAAI,KAAK,YAAY,CAAE,KAAK,SAAU;AAEhF,mBAAO,IAAI,IAAK,CAAAC,OAAKA,GAAE,WAAW,MAAO;AAAA,UAE1C;AAEA,iBAAO,CAAC;AAAA,QAET,CAAE,EAAE,KAAK;AAET,mBAAY,QAAQ,UAAW;AAE9B,gBAAM,UAAU,MAAO,IAAK;AAE5B,cAAK,WAAW,QAAQ,WAAY;AAEnC,gBAAK,MAAM,QAAS,QAAQ,SAAU,GAAI;AAEzC,yBAAY,cAAc,QAAQ,WAAY;AAE7C,2BAAY,OAAQ,IAAI,aAAa,MAAO,QAAS,YAAa,GAAG,QAAS,eAAe,CAAE,CAAE;AACjG,2BAAW,WAAW,SAAS;AAC/B;AAAA,cAED;AAAA,YAED,OAAO;AAEN,sBAAQ,UAAW,OAAQ,IAAI,aAAa,MAAO,QAAS,YAAa,GAAG,QAAS,eAAe,CAAE,CAAE;AACxG,sBAAQ,UAAU,WAAW,SAAS;AACtC;AAAA,YAED;AAAA,UAED;AAAA,QAED;AAAA,MAED;AAEA,UAAK,KAAK,UAAW;AAEpB,cAAM,QAAQ,KAAK,SAAS;AAC5B,cAAM,aAAa,KAAK,WAAW,eAAgB,YAAa;AAIhE,cAAM,WAAW,CAAE,aAAa,UAAU,UAAU,OAAQ;AAC5D,YAAI,eAAe;AACnB,cAAM,mBAAmB,SAAS;AAElC,eAAQ,eAAe,kBAAmB;AAEzC,gBAAM,UAAU,MAAO,SAAU,YAAa,CAAE;AAIhD,cAAK,WAAW,QAAQ,WAAY;AAInC,gBAAI;AAEJ,gBAAK,MAAM,QAAS,QAAQ,SAAU,GAAI;AAEzC,oBAAM,QAAQ;AAAA,YAEf,OAAO;AAEN,oBAAM,CAAE,QAAQ,SAAU;AAAA,YAE3B;AAEA,gBAAI,iBAAiB;AACrB,kBAAM,qBAAqB,IAAI;AAE/B,mBAAQ,iBAAiB,oBAAqB;AAG7C,kBAAO,WAAW,IAAK,cAAe,KAAS,IAAK,cAAe,EAAG,OAAQ,EAAE,SAAS,GAAM;AAE9F,oBAAK,cAAe,EAAE,OAAO,eAAgB,IAAK,cAAe,GAAG,UAAW;AAAA,cAEhF;AAEA;AAAA,YAED;AAEA,oBAAS,SAAU,YAAa,GAAI;AAAA,cAGnC,KAAK;AAEJ;AAEC,wBAAM,iBAAiB,SAAU,MAAM,WAAW,cAAe;AACjE,wBAAM,cAAc,QAAQ,WAAW;AAEvC,sBAAK,iBAAiB,GAAI;AAEzB,6BAAU,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAO;AAElD,0BAAK,gBAAgB,IAAK,CAAE,EAAE,WAAW,MAAO;AAE/C,8BAAM,aAAa,IAAK,CAAE,EAAE,WAAW;AACvC,kCAAU,IAAI,aAAc,iBAAiB,UAAW;AACxD,gCAAQ,IAAK,IAAK,CAAE,EAAE,MAAM,CAAE;AAAA,sBAE/B;AAAA,oBAED;AAAA,kBAED;AAAA,gBAED;AAEA;AAAA,cAGD,KAAK;AAEJ;AAEC,wBAAM,iBAAiB,SAAU,MAAM,WAAW,cAAe;AAEjE,sBAAK,iBAAiB,GAAI;AAEzB,0BAAM,aAAa,QAAQ,UAAU,WAAW;AAChD,6BAAS,IAAI,aAAc,iBAAiB,UAAW;AACvD,2BAAO,IAAK,QAAQ,UAAU,MAAM,CAAE;AAAA,kBAEvC;AAAA,gBAED;AAEA;AAAA,cAGD,KAAK;AAEJ;AAEC,wBAAM,iBAAiB,SAAU,MAAM,WAAW,cAAe;AAEjE,sBAAK,iBAAiB,GAAI;AAEzB,0BAAM,eAAe,IAAI,WAAY,QAAQ,UAAW,CAAE,EAAE,KAAK,MAAO;AACxE,0BAAM,SAAS,IAAI,WAAY,QAAQ,UAAW,CAAE,EAAE,KAAK,MAAO;AAClE,iCAAa,IAAK,QAAQ,UAAW,CAAE,EAAE,MAAM,CAAE;AACjD,2BAAO,IAAK,QAAQ,UAAW,CAAE,EAAE,MAAM,CAAE;AAE3C,0BAAML,QAAO,iBAAiB,aAAa;AAC3C,8BAAU,IAAI,YAAa,IAAIA,QAAO,IAAI,cAAe;AAEzD,wBAAI,eAAe;AAEnB,6BAAU,IAAI,GAAG,MAAM,gBAAgB,IAAI,KAAK,KAAO;AAEtD,4BAAM,QAAQ,CAAC;AAEf,+BAAU,IAAI,GAAG,OAAO,OAAQ,CAAE,GAAG,OAAO,GAAG,IAAI,OAAO,MAAM,KAAO;AAEtE,8BAAM,KAAM,aAAc,CAAE,CAAE;AAE9B,4BAAK,IAAI,EAAI,QAAO,OAAQ,IAAI,CAAE;AAAA,sBAEnC;AAEA,+BAAU,IAAI,GAAG,OAAO,OAAQ,CAAE,GAAG,OAAO,GAAG,IAAI,OAAO,OAAO,GAAG,KAAO;AAE1E,4BAAK,IAAI,GAAI;AAEZ,kCAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,kCAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAC1C,kCAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,wBAE3C,OAAO;AAEN,kCAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,kCAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAC1C,kCAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,wBAE3C;AAEA,4BAAK,IAAI,EAAI,QAAO,OAAQ,IAAI,CAAE;AAAA,sBAEnC;AAAA,oBAED;AAAA,kBAED;AAAA,gBAED;AAEA;AAAA,cAGD,KAAK;AAEJ;AAEC,wBAAM,gBAAgB,SAAU,MAAM,WAAW,aAAc;AAE/D,sBAAK,gBAAgB,GAAI;AAExB,0BAAM,eAAe,IAAI,WAAY,QAAQ,UAAW,CAAE,EAAE,KAAK,MAAO;AACxE,0BAAM,SAAS,IAAI,WAAY,QAAQ,UAAW,CAAE,EAAE,KAAK,MAAO;AAClE,iCAAa,IAAK,QAAQ,UAAW,CAAE,EAAE,MAAM,CAAE;AACjD,2BAAO,IAAK,QAAQ,UAAW,CAAE,EAAE,MAAM,CAAE;AAE3C,0BAAMA,QAAO,gBAAgB,aAAa;AAC1C,8BAAU,IAAI,YAAa,IAAIA,QAAO,IAAI,aAAc;AACxD,wBAAI,eAAe,GAAG,oBAAoB;AAC1C,wBAAI,IAAI,GAAG,OAAO;AAClB,0BAAM,MAAM;AAEZ,2BAAQ,IAAI,KAAM;AAEjB,4BAAM,OAAO,CAAC;AACd,0BAAI,IAAI;AACR,4BAAM,OAAO,OAAQ,CAAE;AAEvB,6BAAQ,IAAI,OAAO,MAAO;AAEzB,6BAAK,KAAM,aAAc,mBAAqB,CAAE;AAChD;AAAA,sBAED;AAEA,0BAAI,IAAI;AAER,6BAAQ,IAAI,OAAO,OAAO,GAAI;AAE7B,gCAAS,cAAgB,IAAI,KAAM,CAAE;AACrC,gCAAS,cAAgB,IAAI,KAAM,CAAE;AACrC,gCAAS,cAAgB,IAAI,KAAM,IAAI,CAAE;AACzC;AAAA,sBAED;AAEA;AACA,6BAAO,OAAQ,IAAI,CAAE;AAAA,oBAEtB;AAAA,kBAED;AAAA,gBAED;AAEA;AAAA,cAED;AACC;AAAA,YAEF;AAAA,UAED;AAEA;AAAA,QAED;AAEA,cAAM,WAAW,IAAI,eAAe;AACpC,iBAAS,SAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AACrD,iBAAS,aAAc,YAAY,IAAI,gBAAiB,QAAQ,CAAE,CAAE;AAEpE,YAAK,QAAQ,WAAW,OAAO,QAAS;AAEvC,mBAAS,aAAc,UAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AAAA,QAEpE;AAEA,eAAO;AAAA,MAER,OAAO;AAEN,cAAM,IAAI,MAAO,0BAA2B;AAAA,MAE7C;AAAA,IAED;AAEA,UAAM,cAAc,IAAI,YAAY;AAGpC,UAAMM,QAAO,YAAY,OAAQ,IAAI,WAAYhB,OAAM,GAAG,GAAI,CAAE,EAAE,MAAO,IAAK;AAE9E,QAAKgB,MAAM,CAAE,EAAE,QAAS,KAAM,MAAM,IAAM;AAEzC,aAAO,SAAU,YAAY,OAAQhB,KAAK,CAAE;AAAA,IAE7C,WAAYgB,MAAM,CAAE,EAAE,SAAU,OAAQ,GAAI;AAE3C,aAAO,WAAY,YAAY,OAAQhB,KAAK,CAAE;AAAA,IAE/C,OAAO;AAEN,aAAO,YAAaA,KAAK;AAAA,IAE1B;AAAA,EAED;AAED;;;ACzsCA,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,mBAAoB,KAAK,eAAgB;AAChD,WAAO,KAAM,KAAK,SAAWiB,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOA,OAAO;AAEb,UAAM,QAAQA,MAAK,MAAO,IAAK;AAE/B,UAAM,WAAW,CAAC;AAClB,UAAM,SAAS,CAAC;AAChB,UAAM,QAAQ,IAAI,MAAM;AAExB,aAAUC,SAAQ,OAAQ;AAEzB,MAAAA,QAAOA,MAAK,KAAK;AAEjB,UAAKA,MAAK,OAAQ,CAAE,MAAM,IAAM;AAEhC,YAAM,aAAaA,MAAK,MAAO,KAAM;AAErC,UAAK,WAAW,WAAW,GAAI;AAI9B,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAC7C,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAC7C,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAAA,MAE9C;AAEA,UAAK,WAAW,WAAW,GAAI;AAI9B,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAC7C,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAC7C,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAE7C,cAAM,IAAI,WAAY,WAAY,CAAE,CAAE,IAAI;AAC1C,cAAMC,KAAI,WAAY,WAAY,CAAE,CAAE,IAAI;AAC1C,cAAMC,KAAI,WAAY,WAAY,CAAE,CAAE,IAAI;AAE1C,cAAM,IAAK,GAAGD,IAAGC,EAAE,EAAE,oBAAoB;AAEzC,eAAO,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,MAExC;AAAA,IAED;AAEA,UAAM,WAAW,IAAI,eAAe;AACpC,aAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAE7E,QAAK,OAAO,SAAS,GAAI;AAExB,eAAS,aAAc,SAAS,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AAAA,IAEzE;AAEA,WAAO;AAAA,EAER;AAED;;;AC9FA,IAAM,gBAAgB;AAAA,EAErB,MAAM;AAAA,EAEN,UAAU,cAAc,MAAO;AAAA,IAC9B,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ;AAAA,MACC,UAAU,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,IAC1C;AAAA,EACD,CAAE;AAAA,EAEF;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmLxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyG3B;AAIA,IAAM,sBAAN,cAAkC,eAAe;AAAA,EAEhD,YAAa,YAAa;AAEzB,UAAM;AAEN,SAAK,wBAAwB;AAE7B,SAAK,OAAO;AAqBZ,SAAK,UAAU;AAIf,SAAK,MAAM;AACX,SAAK,SAAS;AACd,SAAK,WAAW;AAEhB,UAAM,SAAS;AAEf,SAAK,UAAU,OAAO,OAAQ,CAAC,GAAG,OAAO,OAAQ;AACjD,SAAK,WAAW,cAAc,MAAO,OAAO,QAAS;AACrD,SAAK,eAAe,OAAO;AAC3B,SAAK,iBAAiB,OAAO;AAE7B,UAAM,sBAAsB;AAAA,MAC3B;AAAA,MAAO;AAAA,MAAY;AAAA,MAAqB;AAAA,MAAS;AAAA,MACjD;AAAA,MAAY;AAAA,MAAqB;AAAA,MAAe;AAAA,MAAe;AAAA,MAC/D;AAAA,MAAU;AAAA,MAAgB;AAAA,MAAmB;AAAA,MAAW;AAAA,IACzD;AAEA,eAAY,gBAAgB,qBAAsB;AAEjD,aAAO,eAAgB,MAAM,cAAc;AAAA,QAE1C,KAAK,WAAY;AAEhB,iBAAO,KAAK,SAAU,YAAa,EAAE;AAAA,QAEtC;AAAA,QAEA,KAAK,SAAWC,QAAQ;AAEvB,eAAK,SAAU,YAAa,EAAE,QAAQA;AAAA,QAEvC;AAAA,MAED,CAAE;AAAA,IAEH;AAEA,WAAO,eAAgB,MAAM,SAAS,OAAO,yBAA0B,MAAM,SAAU,CAAE;AAEzF,SAAK,UAAW,UAAW;AAAA,EAE5B;AAAA,EAEA,KAAM,QAAS;AAEd,UAAM,KAAM,MAAO;AAEnB,SAAK,MAAM,KAAM,OAAO,KAAM;AAE9B,SAAK,MAAM,OAAO;AAElB,SAAK,WAAW,OAAO;AACvB,SAAK,oBAAoB,OAAO;AAEhC,SAAK,QAAQ,OAAO;AACpB,SAAK,iBAAiB,OAAO;AAE7B,SAAK,SAAS,KAAM,OAAO,QAAS;AACpC,SAAK,cAAc,OAAO;AAC1B,SAAK,oBAAoB,OAAO;AAEhC,SAAK,cAAc,OAAO;AAE1B,SAAK,WAAW,OAAO;AAEvB,SAAK,SAAS,OAAO;AACrB,SAAK,UAAU,OAAO;AACtB,SAAK,eAAe,OAAO;AAC3B,SAAK,kBAAkB,OAAO;AAE9B,SAAK,YAAY,OAAO;AACxB,SAAK,qBAAqB,OAAO;AACjC,SAAK,mBAAmB,OAAO;AAC/B,SAAK,oBAAoB,OAAO;AAEhC,SAAK,MAAM,OAAO;AAElB,WAAO;AAAA,EAER;AAED;;;ACzaA,IAAM,UAAN,MAAM,SAAQ;AAAA,EAEb,YAAa,QAAQ,IAAI,QAAS,GAAG,GAAG,CAAE,GAAG,MAAM,IAAI,QAAS,GAAG,GAAG,CAAE,GAAG,SAAS,GAAI;AAEvF,SAAK,QAAQ;AACb,SAAK,MAAM;AACX,SAAK,SAAS;AAAA,EAEf;AAAA,EAEA,QAAQ;AAEP,WAAO,IAAI,SAAS,KAAK,MAAM,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,KAAK,MAAO;AAAA,EAEvE;AAAA,EAEA,IAAK,OAAO,KAAK,QAAS;AAEzB,SAAK,MAAM,KAAM,KAAM;AACvB,SAAK,IAAI,KAAM,GAAI;AACnB,SAAK,SAAS;AAAA,EAEf;AAAA,EAEA,KAAM,SAAU;AAEf,SAAK,MAAM,KAAM,QAAQ,KAAM;AAC/B,SAAK,IAAI,KAAM,QAAQ,GAAI;AAC3B,SAAK,SAAS,QAAQ;AAAA,EAEvB;AAAA,EAEA,UAAW,QAAS;AAEnB,WAAO,OAAO,KAAM,KAAK,GAAI,EAAE,IAAK,KAAK,KAAM,EAAE,eAAgB,GAAI;AAAA,EAEtE;AAAA,EAEA,UAAW,GAAI;AAEd,SAAK,MAAM,IAAK,CAAE;AAClB,SAAK,IAAI,IAAK,CAAE;AAAA,EAEjB;AAAA,EAEA,cAAe,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,QAAS;AAEnE,YACG,OAAO,MAAM,UAAU,OAAO,MAAM,YACpC,MAAM,OAAO,UAAU,MAAM,OAAO,YACpC,OAAO,MAAM,UAAU,OAAO,MAAM,YACpC,MAAM,OAAO,UAAU,MAAM,OAAO;AAAA,EAGxC;AAAA,EAEA,cAAe,KAAM;AAEpB,WACC,KAAK;AAAA,MACJ,KAAK,MAAM;AAAA,MAAG,KAAK,MAAM;AAAA,MAAG,KAAK,IAAI;AAAA,MAAG,KAAK,IAAI;AAAA,MACjD,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MACzC,KAAK;AAAA,IAAO,KACb,KAAK;AAAA,MACJ,KAAK,MAAM;AAAA,MAAG,KAAK,MAAM;AAAA,MAAG,KAAK,IAAI;AAAA,MAAG,KAAK,IAAI;AAAA,MACjD,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MACzC,KAAK;AAAA,IAAO,KACb,KAAK;AAAA,MACJ,KAAK,MAAM;AAAA,MAAG,KAAK,MAAM;AAAA,MAAG,KAAK,IAAI;AAAA,MAAG,KAAK,IAAI;AAAA,MACjD,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MACzC,KAAK;AAAA,IAAO;AAAA,EAGf;AAED;;;AC7EA,IAAM,OAAO,CAAC;AAEd,IAAM,iBAAN,MAAqB;AAAA,EAEpB,OAAO,OAAQ,OAAO,GAAG,GAAG,GAAI;AAI/B,QAAI,UAAU,gBAAiB,GAAG,CAAE;AACpC,QAAI,UAAU,MAAO,GAAG,GAAG,CAAE;AAC7B,QAAI,UAAU,MAAO,GAAG,GAAG,CAAE;AAE7B,WAAO,MAAM,OAAQ,GAAK,IAAI,MAAU,KAAM,IAAI,KAAM,KAAM,IAAI,IAAM,IAAI,IAAO,IAAI,GAAI;AAAA,EAE5F;AAAA,EAEA,OAAO,OAAQ,OAAO,QAAS;AAE9B,UAAM,OAAQ,IAAK;AAGnB,SAAK,KAAO,KAAK,IAAI,MAAQ,KAAK,IAAM,IAAI,KAAK;AAEjD,WAAO,IAAI,KAAK;AAChB,WAAO,IAAI,IAAI,KAAK,KAAM,KAAK,IAAI,KAAK;AACxC,WAAO,IAAI,KAAK,IAAI,KAAK;AAEzB,WAAO;AAAA,EAER;AAED;;;AC/BA,IAAM,KAAK;AAAA,EAAE;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EACjI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACvH;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACpH;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EACpH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtH;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;A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,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,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AAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAI,CAAE;AAExD,IAAM,WAAW,IAAI,WAAY;AAAA,EAChC;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3E;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EACjD;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACjD;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClE;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EA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,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EACjD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAClD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC9C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAChD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC/C;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAChD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAChD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC9C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AA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lD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAC/C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC/C;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+Q3B;;;AC1SA,IAAM,eAAN,cAA2B,KAAK;AAAA,EAE/B,YAAaI,QAAOC,SAAQ,QAAS;AAEpC,UAAM;AAEL,SAAK,WAAW,cAAc,MAAO,eAAe,QAAS;AAC7D,SAAK,WAAW,IAAI,eAAgB;AAAA,MACnC,UAAU,KAAK;AAAA,MACf,gBAAgB,eAAe;AAAA,MAC/B,cAAc,eAAe;AAAA,IAC9B,CAAE;AAGH,SAAK,SAAS,MAAM,QAAQD;AAC5B,SAAK,SAAS,OAAO,QAAQC;AAE7B,eAAYC,QAAO,QAAS;AAE3B,UAAK,OAAO,eAAgBA,IAAI,KAAK,KAAK,SAAS,eAAgBA,IAAI,GAAI;AAE1E,aAAK,SAAUA,IAAI,EAAE,QAAQ,OAAQA,IAAI;AAAA,MAE1C;AAAA,IAED;AAEA,SAAK,SAAS,IAAI,eAAgB,KAAK,QAAS;AAAA,EAEjD;AAAA,EAEA,OAAQC,WAAU,aAAa,YAAwC;AAErE,SAAK,SAAS,SAAU,UAAW,EAAE,QAAQ,WAAW;AAExD,QAAK,KAAK,gBAAiB;AAE1B,MAAAA,UAAS,gBAAiB,IAAK;AAC/B,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE/B,OAAO;AAEL,MAAAA,UAAS,gBAAiB,WAAY;AACtC,UAAK,KAAK,MAAQ,CAAAA,UAAS,MAAM;AAClC,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B;AAAA,EAEA;AAAA,EAEA,QAASH,QAAOC,SAAS;AAExB,SAAK,SAAS,MAAM,QAAQD;AAC5B,SAAK,SAAS,OAAO,QAAQC;AAAA,EAE9B;AAAA,EAED,UAAU;AAET,SAAK,SAAS,QAAQ;AAEtB,SAAK,OAAO,QAAQ;AAAA,EAErB;AAED;;;AC1EA,IAAM,YAAY;AAAA,EAEjB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,KAAK,EAAE,OAAO,KAAK;AAAA,IACnB,SAAS,EAAE,OAAO,EAAE;AAAA,IAEpB,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,WAAW,EAAE,OAAO,EAAI;AAAA,EACzB;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4B3B;AAEA,IAAM,UAAN,cAAsB,WAAW;AAAA,EAEhC,IAAI,IAAK,GAAI;AAEZ,UAAM,WAAW,KAAK;AAEtB,QAAK,MAAM,KAAK,KAAM;AAErB,eAAS,SAAS,IAAI,QAAQ;AAE9B,UAAK,GAAI;AAER,iBAAS,SAAS,QAAQ,QAAQ,EAAE,MAAM;AAC1C,iBAAS,SAAS,IAAI,QAAQ;AAAA,MAE/B;AAAA,IAED;AAAA,EAED;AAAA,EAEA,IAAI,MAAM;AAET,WAAO,KAAK,SAAS,SAAS,IAAI;AAAA,EAEnC;AAAA,EAEA,IAAI,UAAW,GAAI;AAElB,SAAK,SAAS,SAAS,UAAU,QAAQ;AAAA,EAE1C;AAAA,EAEA,IAAI,YAAY;AAEf,WAAO,KAAK,SAAS,SAAS,UAAU;AAAA,EAEzC;AAAA,EAEA,YAAa,UAAU,CAAC,GAAI;AAE3B,UAAO,SAAU;AACjB,SAAK,MAAM,QAAQ,OAAO;AAC1B,SAAK,YAAY,eAAe,UAAU,QAAQ,YAAY;AAAA,EAE/D;AAED;;;ACvFA,IAAM,cAAN,MAAM,qBAAoB,KAAK;AAAA,EAE9B,YAAa,YAAY,OAAO,QAAQ,iBAAkB;AAEzD,UAAM;AAEN,SAAK,cAAc;AACnB,SAAK,eAAe;AACpB,SAAK,kBAAkB,oBAAoB,SAAY,kBAAkB,CAAC;AAC1E,SAAK,mBAAmB,IAAI,MAAO,GAAG,GAAG,CAAE;AAC3C,SAAK,kBAAkB,IAAI,MAAO,KAAK,MAAM,IAAK;AAClD,SAAK,WAAW;AAChB,SAAK,oBAAoB;AACzB,SAAK,gBAAgB;AACrB,SAAK,eAAe;AACpB,SAAK,kBAAkB;AACvB,SAAK,cAAc;AAEnB,SAAK,mBAAmB,oBAAI,IAAI;AAGhC,SAAK,aAAe,eAAe,SAAc,IAAI,QAAS,WAAW,GAAG,WAAW,CAAE,IAAI,IAAI,QAAS,KAAK,GAAI;AAEnH,UAAM,OAAO,KAAK,MAAO,KAAK,WAAW,IAAI,KAAK,eAAgB;AAClE,UAAM,OAAO,KAAK,MAAO,KAAK,WAAW,IAAI,KAAK,eAAgB;AAElE,SAAK,yBAAyB,IAAI,kBAAmB,KAAK,WAAW,GAAG,KAAK,WAAW,CAAE;AAC1F,SAAK,uBAAuB,QAAQ,OAAO;AAC3C,SAAK,uBAAuB,QAAQ,kBAAkB;AAEtD,SAAK,gBAAgB,IAAI,kBAAkB;AAC3C,SAAK,cAAc,OAAO;AAC1B,SAAK,cAAc,eAAe;AAClC,SAAK,cAAc,WAAW;AAE9B,SAAK,sBAAsB,KAAK,uBAAuB;AACvD,SAAK,oBAAoB,OAAO;AAChC,SAAK,oBAAoB,iBAAiB,oBAAqB,KAAK,oBAAoB,gBAAgB,KAAK,YAAa;AAE1H,SAAK,0BAA0B,IAAI,kBAAmB,KAAK,WAAW,GAAG,KAAK,WAAW,GAAG,EAAE,MAAM,cAAc,CAAE;AACpH,SAAK,wBAAwB,QAAQ,OAAO;AAC5C,SAAK,wBAAwB,QAAQ,kBAAkB;AAEvD,SAAK,mCAAmC,IAAI,kBAAmB,MAAM,MAAM,EAAE,MAAM,cAAc,CAAE;AACnG,SAAK,iCAAiC,QAAQ,OAAO;AACrD,SAAK,iCAAiC,QAAQ,kBAAkB;AAEhE,SAAK,0BAA0B,IAAI,kBAAmB,MAAM,MAAM,EAAE,MAAM,cAAc,CAAE;AAC1F,SAAK,wBAAwB,QAAQ,OAAO;AAC5C,SAAK,wBAAwB,QAAQ,kBAAkB;AACvD,SAAK,0BAA0B,IAAI,kBAAmB,KAAK,MAAO,OAAO,CAAE,GAAG,KAAK,MAAO,OAAO,CAAE,GAAG,EAAE,MAAM,cAAc,CAAE;AAC9H,SAAK,wBAAwB,QAAQ,OAAO;AAC5C,SAAK,wBAAwB,QAAQ,kBAAkB;AAEvD,SAAK,wBAAwB,KAAK,yBAAyB;AAC3D,SAAK,0BAA0B,IAAI,kBAAmB,MAAM,MAAM,EAAE,MAAM,cAAc,CAAE;AAC1F,SAAK,wBAAwB,QAAQ,OAAO;AAC5C,SAAK,wBAAwB,QAAQ,kBAAkB;AACvD,SAAK,0BAA0B,IAAI,kBAAmB,KAAK,MAAO,OAAO,CAAE,GAAG,KAAK,MAAO,OAAO,CAAE,GAAG,EAAE,MAAM,cAAc,CAAE;AAC9H,SAAK,wBAAwB,QAAQ,OAAO;AAC5C,SAAK,wBAAwB,QAAQ,kBAAkB;AAEvD,UAAM,qBAAqB;AAC3B,UAAM,gBAAgB;AAEtB,SAAK,yBAAyB,KAAK,yBAA0B,kBAAmB;AAChF,SAAK,uBAAuB,SAAU,SAAU,EAAE,MAAM,IAAK,MAAM,IAAK;AACxE,SAAK,uBAAuB,SAAU,cAAe,EAAE,QAAQ;AAC/D,SAAK,yBAAyB,KAAK,yBAA0B,aAAc;AAC3E,SAAK,uBAAuB,SAAU,SAAU,EAAE,MAAM,IAAK,KAAK,MAAO,OAAO,CAAE,GAAG,KAAK,MAAO,OAAO,CAAE,CAAE;AAC5G,SAAK,uBAAuB,SAAU,cAAe,EAAE,QAAQ;AAG/D,SAAK,kBAAkB,KAAK,mBAAmB;AAI/C,UAAM,aAAa;AAEnB,SAAK,eAAe,cAAc,MAAO,WAAW,QAAS;AAE7D,SAAK,eAAe,IAAI,eAAgB;AAAA,MACvC,UAAU,KAAK;AAAA,MACf,cAAc,WAAW;AAAA,MACzB,gBAAgB,WAAW;AAAA,MAC3B,UAAU;AAAA,MACV,WAAW;AAAA,MACX,YAAY;AAAA,IACb,CAAE;AAEF,SAAK,UAAU;AACf,SAAK,YAAY;AAEjB,SAAK,iBAAiB,IAAI,MAAM;AAChC,SAAK,gBAAgB;AAErB,SAAK,SAAS,IAAI,eAAgB,IAAK;AAEvC,SAAK,kBAAkB,IAAI,MAAM;AACjC,SAAK,kBAAkB,IAAI,MAAM;AACjC,SAAK,gBAAgB,IAAI,QAAQ;AAEjC,aAAS,oBAAqB,QAAQG,SAAS;AAE9C,YAAM,OAAOA,QAAO,sBAAsB,gBAAgB;AAE1D,aAAO,OAAO,QAAS,oBAAoB,OAAO,cAAe;AAAA,IAElE;AAAA,EAED;AAAA,EAEA,UAAU;AAET,SAAK,uBAAuB,QAAQ;AACpC,SAAK,wBAAwB,QAAQ;AACrC,SAAK,iCAAiC,QAAQ;AAC9C,SAAK,wBAAwB,QAAQ;AACrC,SAAK,wBAAwB,QAAQ;AACrC,SAAK,wBAAwB,QAAQ;AACrC,SAAK,wBAAwB,QAAQ;AAErC,SAAK,cAAc,QAAQ;AAC3B,SAAK,oBAAoB,QAAQ;AACjC,SAAK,sBAAsB,QAAQ;AACnC,SAAK,uBAAuB,QAAQ;AACpC,SAAK,uBAAuB,QAAQ;AACpC,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,aAAa,QAAQ;AAE1B,SAAK,OAAO,QAAQ;AAAA,EAErB;AAAA,EAEA,QAASC,QAAOC,SAAS;AAExB,SAAK,uBAAuB,QAASD,QAAOC,OAAO;AACnD,SAAK,wBAAwB,QAASD,QAAOC,OAAO;AAEpD,QAAI,OAAO,KAAK,MAAOD,SAAQ,KAAK,eAAgB;AACpD,QAAI,OAAO,KAAK,MAAOC,UAAS,KAAK,eAAgB;AACrD,SAAK,iCAAiC,QAAS,MAAM,IAAK;AAC1D,SAAK,wBAAwB,QAAS,MAAM,IAAK;AACjD,SAAK,wBAAwB,QAAS,MAAM,IAAK;AACjD,SAAK,uBAAuB,SAAU,SAAU,EAAE,MAAM,IAAK,MAAM,IAAK;AAExE,WAAO,KAAK,MAAO,OAAO,CAAE;AAC5B,WAAO,KAAK,MAAO,OAAO,CAAE;AAE5B,SAAK,wBAAwB,QAAS,MAAM,IAAK;AACjD,SAAK,wBAAwB,QAAS,MAAM,IAAK;AAEjD,SAAK,uBAAuB,SAAU,SAAU,EAAE,MAAM,IAAK,MAAM,IAAK;AAAA,EAEzE;AAAA,EAEA,kCAAmC,UAAW;AAE7C,UAAM,QAAQ,KAAK;AAEnB,aAAS,6BAA8B,QAAS;AAE/C,UAAK,OAAO,QAAS;AAEpB,YAAK,aAAa,MAAO;AAExB,iBAAO,UAAU,MAAM,IAAK,MAAO;AAAA,QAEpC,OAAO;AAEN,gBAAM,IAAK,QAAQ,OAAO,OAAQ;AAClC,iBAAO,UAAU;AAAA,QAElB;AAAA,MAED;AAAA,IAED;AAEA,aAAU,IAAI,GAAG,IAAI,KAAK,gBAAgB,QAAQ,KAAO;AAExD,YAAM,iBAAiB,KAAK,gBAAiB,CAAE;AAC/C,qBAAe,SAAU,4BAA6B;AAAA,IAEvD;AAAA,EAED;AAAA,EAEA,qCAAsC,UAAW;AAEhD,UAAM,QAAQ,KAAK;AACnB,UAAM,iBAAiB,CAAC;AAExB,aAAS,6BAA8B,QAAS;AAE/C,UAAK,OAAO,OAAS,gBAAe,KAAM,MAAO;AAAA,IAElD;AAEA,aAAU,IAAI,GAAG,IAAI,KAAK,gBAAgB,QAAQ,KAAO;AAExD,YAAM,iBAAiB,KAAK,gBAAiB,CAAE;AAC/C,qBAAe,SAAU,4BAA6B;AAAA,IAEvD;AAEA,aAAS,yBAA0B,QAAS;AAE3C,UAAK,OAAO,UAAU,OAAO,UAAW;AAIvC,YAAI,SAAS;AAEb,iBAAU,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAO;AAElD,gBAAM,mBAAmB,eAAgB,CAAE,EAAE;AAE7C,cAAK,qBAAqB,OAAO,IAAK;AAErC,qBAAS;AACT;AAAA,UAED;AAAA,QAED;AAEA,YAAK,WAAW,OAAQ;AAEvB,gBAAM,aAAa,OAAO;AAE1B,cAAK,aAAa,SAAS,MAAM,IAAK,MAAO,MAAM,MAAO;AAEzD,mBAAO,UAAU;AAAA,UAElB;AAEA,gBAAM,IAAK,QAAQ,UAAW;AAAA,QAE/B;AAAA,MAED,WAAY,OAAO,YAAY,OAAO,QAAS;AAK9C,YAAK,aAAa,MAAO;AAExB,iBAAO,UAAU,MAAM,IAAK,MAAO;AAAA,QAEpC,OAAO;AAEN,gBAAM,IAAK,QAAQ,OAAO,OAAQ;AAClC,iBAAO,UAAU;AAAA,QAElB;AAAA,MAED;AAAA,IAED;AAEA,SAAK,YAAY,SAAU,wBAAyB;AAAA,EAErD;AAAA,EAEA,sBAAsB;AAErB,SAAK,cAAc;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MACtC;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MACf;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MACf;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,IAAI;AACpB,SAAK,cAAc,SAAU,KAAK,aAAa,gBAAiB;AAChE,SAAK,cAAc,SAAU,KAAK,aAAa,kBAAmB;AAAA,EAEnE;AAAA,EAEA,OAAQC,WAAU,aAAa,YAAY,WAAW,YAAa;AAElE,QAAK,KAAK,gBAAgB,SAAS,GAAI;AAEtC,MAAAA,UAAS,cAAe,KAAK,cAAe;AAC5C,WAAK,gBAAgBA,UAAS,cAAc;AAC5C,YAAM,eAAeA,UAAS;AAE9B,MAAAA,UAAS,YAAY;AAErB,UAAK,WAAa,CAAAA,UAAS,MAAM,QAAQ,QAAQ,QAAS,KAAM;AAEhE,MAAAA,UAAS,cAAe,UAAU,CAAE;AAGpC,WAAK,kCAAmC,KAAM;AAE9C,YAAM,oBAAoB,KAAK,YAAY;AAC3C,WAAK,YAAY,aAAa;AAG9B,WAAK,YAAY,mBAAmB,KAAK;AACzC,MAAAA,UAAS,gBAAiB,KAAK,uBAAwB;AACvD,MAAAA,UAAS,MAAM;AACf,MAAAA,UAAS,OAAQ,KAAK,aAAa,KAAK,YAAa;AAGrD,WAAK,kCAAmC,IAAK;AAC7C,WAAK,iBAAiB,MAAM;AAG5B,WAAK,oBAAoB;AAGzB,WAAK,qCAAsC,KAAM;AACjD,WAAK,YAAY,mBAAmB,KAAK;AACzC,WAAK,oBAAoB,SAAU,eAAgB,EAAE,MAAM,IAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AAC9G,WAAK,oBAAoB,SAAU,cAAe,EAAE,QAAQ,KAAK,wBAAwB;AACzF,WAAK,oBAAoB,SAAU,eAAgB,EAAE,QAAQ,KAAK;AAClE,MAAAA,UAAS,gBAAiB,KAAK,sBAAuB;AACtD,MAAAA,UAAS,MAAM;AACf,MAAAA,UAAS,OAAQ,KAAK,aAAa,KAAK,YAAa;AACrD,WAAK,YAAY,mBAAmB;AACpC,WAAK,qCAAsC,IAAK;AAChD,WAAK,iBAAiB,MAAM;AAE5B,WAAK,YAAY,aAAa;AAG9B,WAAK,OAAO,WAAW,KAAK;AAC5B,WAAK,aAAc,UAAW,EAAE,QAAQ,KAAK,uBAAuB;AACpE,MAAAA,UAAS,gBAAiB,KAAK,gCAAiC;AAChE,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAE7B,WAAK,gBAAgB,KAAM,KAAK,gBAAiB;AACjD,WAAK,gBAAgB,KAAM,KAAK,eAAgB;AAEhD,UAAK,KAAK,cAAc,GAAI;AAE3B,cAAM,UAAW,IAAI,QAAS,IAAI,KAAK,IAAK,YAAY,IAAI,IAAI,OAAO,KAAK,WAAY,KAAM,IAAM,QAAS;AAC7G,aAAK,gBAAgB,eAAgB,MAAO;AAC5C,aAAK,gBAAgB,eAAgB,MAAO;AAAA,MAE7C;AAGA,WAAK,OAAO,WAAW,KAAK;AAC5B,WAAK,sBAAsB,SAAU,aAAc,EAAE,QAAQ,KAAK,iCAAiC;AACnG,WAAK,sBAAsB,SAAU,SAAU,EAAE,MAAM,IAAK,KAAK,iCAAiC,OAAO,KAAK,iCAAiC,MAAO;AACtJ,WAAK,sBAAsB,SAAU,kBAAmB,EAAE,QAAQ,KAAK;AACvE,WAAK,sBAAsB,SAAU,iBAAkB,EAAE,QAAQ,KAAK;AACtE,MAAAA,UAAS,gBAAiB,KAAK,uBAAwB;AACvD,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAG7B,WAAK,OAAO,WAAW,KAAK;AAC5B,WAAK,uBAAuB,SAAU,cAAe,EAAE,QAAQ,KAAK,wBAAwB;AAC5F,WAAK,uBAAuB,SAAU,WAAY,EAAE,QAAQ,aAAY;AACxE,WAAK,uBAAuB,SAAU,cAAe,EAAE,QAAQ,KAAK;AACpE,MAAAA,UAAS,gBAAiB,KAAK,uBAAwB;AACvD,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAC7B,WAAK,uBAAuB,SAAU,cAAe,EAAE,QAAQ,KAAK,wBAAwB;AAC5F,WAAK,uBAAuB,SAAU,WAAY,EAAE,QAAQ,aAAY;AACxE,MAAAA,UAAS,gBAAiB,KAAK,uBAAwB;AACvD,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAG7B,WAAK,OAAO,WAAW,KAAK;AAC5B,WAAK,uBAAuB,SAAU,cAAe,EAAE,QAAQ,KAAK,wBAAwB;AAC5F,WAAK,uBAAuB,SAAU,WAAY,EAAE,QAAQ,aAAY;AACxE,MAAAA,UAAS,gBAAiB,KAAK,uBAAwB;AACvD,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAC7B,WAAK,uBAAuB,SAAU,cAAe,EAAE,QAAQ,KAAK,wBAAwB;AAC5F,WAAK,uBAAuB,SAAU,WAAY,EAAE,QAAQ,aAAY;AACxE,MAAAA,UAAS,gBAAiB,KAAK,uBAAwB;AACvD,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAG7B,WAAK,OAAO,WAAW,KAAK;AAC5B,WAAK,gBAAgB,SAAU,aAAc,EAAE,QAAQ,KAAK,uBAAuB;AACnF,WAAK,gBAAgB,SAAU,cAAe,EAAE,QAAQ,KAAK,wBAAwB;AACrF,WAAK,gBAAgB,SAAU,cAAe,EAAE,QAAQ,KAAK,wBAAwB;AACrF,WAAK,gBAAgB,SAAU,gBAAiB,EAAE,QAAQ,KAAK;AAC/D,WAAK,gBAAgB,SAAU,cAAe,EAAE,QAAQ,KAAK;AAC7D,WAAK,gBAAgB,SAAU,UAAW,EAAE,QAAQ,KAAK;AACzD,WAAK,gBAAgB,SAAU,mBAAoB,EAAE,QAAQ,KAAK;AAGlE,UAAK,WAAa,CAAAA,UAAS,MAAM,QAAQ,QAAQ,QAAS,IAAK;AAE/D,MAAAA,UAAS,gBAAiB,UAAW;AACrC,WAAK,OAAO,OAAQA,SAAS;AAE7B,MAAAA,UAAS,cAAe,KAAK,gBAAgB,KAAK,aAAc;AAChE,MAAAA,UAAS,YAAY;AAAA,IAEtB;AAEA,QAAK,KAAK,gBAAiB;AAE1B,WAAK,OAAO,WAAW,KAAK;AAC5B,WAAK,aAAc,UAAW,EAAE,QAAQ,WAAW;AACnD,MAAAA,UAAS,gBAAiB,IAAK;AAC/B,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B;AAAA,EAED;AAAA,EAEA,yBAAyB;AAExB,WAAO,IAAI,eAAgB;AAAA,MAE1B,UAAU;AAAA,QACT,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,iBAAiB,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA,QAClD,iBAAiB,EAAE,OAAO,KAAK;AAAA,MAChC;AAAA,MAEA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA+BD,gBACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeF,CAAE;AAAA,EAEH;AAAA,EAEA,2BAA2B;AAE1B,WAAO,IAAI,eAAgB;AAAA,MAE1B,UAAU;AAAA,QACT,eAAe,EAAE,OAAO,KAAK;AAAA,QAC7B,WAAW,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA,QAC5C,oBAAoB,EAAE,OAAO,IAAI,QAAS,GAAK,GAAK,CAAI,EAAE;AAAA,QAC1D,mBAAmB,EAAE,OAAO,IAAI,QAAS,GAAK,GAAK,CAAI,EAAE;AAAA,MAC1D;AAAA,MAEA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,gBACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAuBF,CAAE;AAAA,EAEH;AAAA,EAEA,yBAA0B,WAAY;AAErC,WAAO,IAAI,eAAgB;AAAA,MAE1B,SAAS;AAAA,QACR,cAAc;AAAA,MACf;AAAA,MAEA,UAAU;AAAA,QACT,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,WAAW,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA,QAC5C,aAAa,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA,QAC9C,gBAAgB,EAAE,OAAO,EAAI;AAAA,MAC9B;AAAA,MAEA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,gBACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA6BF,CAAE;AAAA,EAEH;AAAA,EAEA,qBAAqB;AAEpB,WAAO,IAAI,eAAgB;AAAA,MAE1B,UAAU;AAAA,QACT,eAAe,EAAE,OAAO,KAAK;AAAA,QAC7B,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,kBAAkB,EAAE,OAAO,KAAK;AAAA,QAChC,gBAAgB,EAAE,OAAO,EAAI;AAAA,QAC7B,YAAY,EAAE,OAAO,EAAI;AAAA,QACzB,qBAAqB,EAAE,OAAO,EAAI;AAAA,MACnC;AAAA,MAEA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,gBACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBD,UAAU;AAAA,MACV,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,aAAa;AAAA,IACd,CAAE;AAAA,EAEH;AAED;AAEA,YAAY,iBAAiB,IAAI,QAAS,GAAK,CAAI;AACnD,YAAY,iBAAiB,IAAI,QAAS,GAAK,CAAI;;;AC3oBnD,IAAM,eAAe;AAAA,EAEpB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,uBAAuB,EAAE,OAAO,EAAE;AAAA,EAEnC;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqD3B;;;ACnEA,IAAM,aAAN,cAAyB,KAAK;AAAA,EAE7B,cAAc;AAEb,UAAM;AAIN,UAAM,SAAS;AAEf,SAAK,WAAW,cAAc,MAAO,OAAO,QAAS;AAErD,SAAK,WAAW,IAAI,kBAAmB;AAAA,MACtC,MAAM,OAAO;AAAA,MACb,UAAU,KAAK;AAAA,MACf,cAAc,OAAO;AAAA,MACrB,gBAAgB,OAAO;AAAA,IACxB,CAAE;AAEF,SAAK,SAAS,IAAI,eAAgB,KAAK,QAAS;AAIhD,SAAK,oBAAoB;AACzB,SAAK,eAAe;AAAA,EAErB;AAAA,EAEA,OAAQC,WAAU,aAAa,YAAyC;AAEvE,SAAK,SAAU,UAAW,EAAE,QAAQ,WAAW;AAC/C,SAAK,SAAU,qBAAsB,EAAE,QAAQA,UAAS;AAIxD,QAAK,KAAK,sBAAsBA,UAAS,oBAAoB,KAAK,iBAAiBA,UAAS,aAAc;AAEzG,WAAK,oBAAoBA,UAAS;AAClC,WAAK,eAAeA,UAAS;AAE7B,WAAK,SAAS,UAAU,CAAC;AAEzB,UAAK,gBAAgB,YAAa,KAAK,iBAAkB,MAAM,aAAe,MAAK,SAAS,QAAQ,gBAAgB;AAEpH,UAAK,KAAK,iBAAiB,kBAAoB,MAAK,SAAS,QAAQ,sBAAsB;AAAA,eACjF,KAAK,iBAAiB,oBAAsB,MAAK,SAAS,QAAQ,wBAAwB;AAAA,eAC1F,KAAK,iBAAiB,kBAAoB,MAAK,SAAS,QAAQ,sBAAsB;AAAA,eACtF,KAAK,iBAAiB,sBAAwB,MAAK,SAAS,QAAQ,2BAA2B;AAAA,eAC/F,KAAK,iBAAiB,eAAiB,MAAK,SAAS,QAAQ,mBAAmB;AAAA,eAChF,KAAK,iBAAiB,mBAAqB,MAAK,SAAS,QAAQ,uBAAuB;AAElG,WAAK,SAAS,cAAc;AAAA,IAE7B;AAIA,QAAK,KAAK,mBAAmB,MAAO;AAEnC,MAAAA,UAAS,gBAAiB,IAAK;AAC/B,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B,OAAO;AAEN,MAAAA,UAAS,gBAAiB,WAAY;AACtC,UAAK,KAAK,MAAQ,CAAAA,UAAS,MAAOA,UAAS,gBAAgBA,UAAS,gBAAgBA,UAAS,gBAAiB;AAC9G,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B;AAAA,EAED;AAAA,EAEA,UAAU;AAET,SAAK,SAAS,QAAQ;AACtB,SAAK,OAAO,QAAQ;AAAA,EAErB;AAED;;;ACzFA,IAAM,aAAN,cAAyB,KAAK;AAAA,EAE7B,YAAa,OAAO,QAAQ,mBAAmB,MAAM,aAAa,MAAM,aAAa,MAAO;AAE3F,UAAM;AAEN,SAAK,QAAQ;AACb,SAAK,SAAS;AAEd,SAAK,mBAAmB;AAExB,SAAK,aAAa;AAClB,SAAK,aAAa;AAElB,SAAK,QAAQ;AACb,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,iBAAiB,IAAI,MAAM;AAAA,EAEjC;AAAA,EAEA,OAAQC,WAAU,aAAa,YAA0C;AAExE,UAAM,eAAeA,UAAS;AAC9B,IAAAA,UAAS,YAAY;AAErB,QAAI,eAAe;AAEnB,QAAK,KAAK,qBAAqB,MAAO;AAErC,4BAAsB,KAAK,MAAM;AAEjC,WAAK,MAAM,mBAAmB,KAAK;AAAA,IAEpC;AAEA,QAAK,KAAK,eAAe,MAAO;AAE/B,MAAAA,UAAS,cAAe,KAAK,cAAe;AAC5C,MAAAA,UAAS,cAAe,KAAK,YAAYA,UAAS,cAAc,CAAE;AAAA,IAEnE;AAEA,QAAK,KAAK,eAAe,MAAO;AAE/B,sBAAgBA,UAAS,cAAc;AACvC,MAAAA,UAAS,cAAe,KAAK,UAAW;AAAA,IAEzC;AAEA,QAAK,KAAK,cAAc,MAAO;AAE9B,MAAAA,UAAS,WAAW;AAAA,IAErB;AAEA,IAAAA,UAAS,gBAAiB,KAAK,iBAAiB,OAAO,UAAW;AAElE,QAAK,KAAK,UAAU,MAAO;AAG1B,MAAAA,UAAS,MAAOA,UAAS,gBAAgBA,UAAS,gBAAgBA,UAAS,gBAAiB;AAAA,IAE7F;AAEA,IAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AAIzC,QAAK,KAAK,eAAe,MAAO;AAE/B,MAAAA,UAAS,cAAe,KAAK,cAAe;AAAA,IAE7C;AAEA,QAAK,KAAK,eAAe,MAAO;AAE/B,MAAAA,UAAS,cAAe,aAAc;AAAA,IAEvC;AAEA,QAAK,KAAK,qBAAqB,MAAO;AAErC,WAAK,MAAM,mBAAmB;AAAA,IAE/B;AAEA,IAAAA,UAAS,YAAY;AAAA,EAEtB;AAED;;;ACpFA,IAAM,sBAAN,cAAkC,KAAK;AAAA,EAEtC,YAAa,WAAW,OAAO,QAAQ,UAAU,CAAC,GAAI;AAErD,UAAM;AAEN,SAAK,YAAY;AACjB,SAAK,aAAa,IAAI,QAAQ;AAC9B,SAAK,mBAAmB,IAAI,QAAQ;AAEpC,SAAK,oBAAoB,KAAK,wBAAwB;AACtD,SAAK,iBAAiB,IAAI,mBAAmB;AAE7C,SAAK,SAAS,IAAI,eAAgB,KAAK,iBAAkB;AACzD,SAAK,QAAQ;AACb,SAAK,SAAS;AAEd,SAAK,qBAAqB,QAAQ,sBAAsB;AACxD,SAAK,oBAAoB,QAAQ,qBAAqB;AAEtD,SAAK,qBAAqB,IAAI,kBAAkB;AAChD,SAAK,mBAAmB,QAAQ,YAAY;AAC5C,SAAK,mBAAmB,QAAQ,YAAY;AAC5C,SAAK,mBAAmB,QAAQ,OAAO;AACvC,SAAK,mBAAmB,eAAe,IAAI,aAAa;AAExD,SAAK,qBAAqB,IAAI,kBAAkB;AAChD,SAAK,mBAAmB,QAAQ,YAAY;AAC5C,SAAK,mBAAmB,QAAQ,YAAY;AAC5C,SAAK,mBAAmB,QAAQ,OAAO;AAAA,EAExC;AAAA,EAEA,UAAU;AAET,SAAK,mBAAmB,QAAQ;AAChC,SAAK,mBAAmB,QAAQ;AAEhC,SAAK,kBAAkB,QAAQ;AAC/B,SAAK,eAAe,QAAQ;AAE5B,SAAK,OAAO,QAAQ;AAAA,EAErB;AAAA,EAEA,QAASC,QAAOC,SAAS;AAExB,SAAK,WAAW,IAAKD,QAAOC,OAAO;AACnC,SAAK,iBAAiB,IAAOD,SAAQ,KAAK,YAAc,GAAKC,UAAS,KAAK,YAAc,CAAE;AAC3F,UAAM,EAAE,GAAAC,IAAG,GAAAC,GAAE,IAAI,KAAK;AACtB,SAAK,mBAAmB,QAASD,IAAGC,EAAE;AACtC,SAAK,mBAAmB,QAASD,IAAGC,EAAE;AACtC,SAAK,OAAO,SAAS,SAAS,WAAW,MAAM,IAAKD,IAAGC,IAAG,IAAID,IAAG,IAAIC,EAAE;AAAA,EAExE;AAAA,EAEA,aAAc,WAAY;AAEzB,SAAK,YAAY;AACjB,SAAK,QAAS,KAAK,WAAW,GAAG,KAAK,WAAW,CAAE;AAAA,EAEpD;AAAA,EAEA,OAAQC,WAAU,aAAc;AAE/B,UAAM,WAAW,KAAK,OAAO,SAAS;AACtC,aAAS,mBAAmB,QAAQ,KAAK;AACzC,aAAS,kBAAkB,QAAQ,KAAK;AAExC,IAAAA,UAAS,gBAAiB,KAAK,kBAAmB;AAClD,IAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AAEzC,UAAM,uBAAuB,KAAK,MAAM;AACxC,IAAAA,UAAS,gBAAiB,KAAK,kBAAmB;AAClD,SAAK,MAAM,mBAAmB,KAAK;AACnC,IAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AACzC,SAAK,MAAM,mBAAmB;AAE9B,aAAS,SAAS,QAAQ,KAAK,mBAAmB;AAClD,aAAS,OAAO,QAAQ,KAAK,mBAAmB;AAChD,aAAS,QAAQ,QAAQ,KAAK,mBAAmB;AAEjD,QAAK,KAAK,gBAAiB;AAE1B,MAAAA,UAAS,gBAAiB,IAAK;AAAA,IAEhC,OAAO;AAEN,MAAAA,UAAS,gBAAiB,WAAY;AAEtC,UAAK,KAAK,MAAQ,CAAAA,UAAS,MAAM;AAAA,IAElC;AAEA,SAAK,OAAO,OAAQA,SAAS;AAAA,EAE9B;AAAA,EAEA,0BAA0B;AAEzB,WAAO,IAAI,eAAgB;AAAA,MAC1B,UAAU;AAAA,QACT,UAAU,EAAE,OAAO,KAAK;AAAA,QACxB,QAAQ,EAAE,OAAO,KAAK;AAAA,QACtB,SAAS,EAAE,OAAO,KAAK;AAAA,QACvB,YAAY;AAAA,UACX,OAAO,IAAI;AAAA,YACV,KAAK,iBAAiB;AAAA,YACtB,KAAK,iBAAiB;AAAA,YACtB,IAAI,KAAK,iBAAiB;AAAA,YAC1B,IAAI,KAAK,iBAAiB;AAAA,UAC3B;AAAA,QACD;AAAA,QACA,oBAAoB,EAAE,OAAO,EAAE;AAAA,QAC/B,mBAAmB,EAAE,OAAO,EAAE;AAAA,MAC/B;AAAA,MACA;AAAA;AAAA,QAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUxB;AAAA;AAAA,QAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0F3B,CAAE;AAAA,EAEH;AAED;;;AC/NA,IAAM,YAAY;AAAA,EAEjB,MAAM;AAAA,EAEN,SAAS;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,EACvB;AAAA,EAEA,UAAU;AAAA,IAET,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,WAAW,EAAE,OAAO,KAAK;AAAA,IACzB,QAAQ,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA,IAEzC,cAAc,EAAE,OAAO,EAAE;AAAA,IACzB,aAAa,EAAE,OAAO,IAAI;AAAA,IAC1B,0BAA0B,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACjD,iCAAiC,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IAExD,SAAS,EAAE,OAAO,EAAI;AAAA,IACtB,aAAa,EAAE,OAAO,IAAI;AAAA,IAC1B,QAAQ,EAAE,OAAO,IAAI;AAAA,IAErB,iBAAiB,EAAE,OAAO,EAAI;AAAA,IAC9B,gBAAgB,EAAE,OAAO,IAAM;AAAA,IAC/B,cAAc,EAAE,OAAO,EAAI;AAAA,EAC5B;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8H3B;;;ACxKA,IAAM,yBAAyB;AAAA,EAE9B,MAAM;AAAA,EAEN,SAAS;AAAA,IACR,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,EACvB;AAAA,EAEA,UAAU;AAAA,IACT,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,QAAQ,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA,IACzC,mBAAmB,EAAE,OAAO,CAAE,IAAI,QAAS,GAAG,CAAE,CAAE,EAAE;AAAA,IACpD,iBAAiB,EAAE,OAAO,CAAE,CAAI,EAAE;AAAA,IAClC,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,cAAc,EAAE,OAAO,GAAG;AAAA,IAC1B,aAAa,EAAE,OAAO,IAAK;AAAA,IAC3B,eAAe,EAAE,OAAO,GAAG;AAAA,EAC5B;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4E3B;AAEA,IAAM,kBAAkB;AAAA,EAEvB,qBAAqB,SAAW,cAAc,QAAS;AAEtD,UAAM,UAAU,CAAC;AAEjB,aAAU,IAAI,GAAG,KAAK,cAAc,KAAO;AAE1C,cAAQ,KAAM,SAAU,GAAG,MAAO,CAAE;AAAA,IAErC;AAEA,WAAO;AAAA,EAER;AAAA,EAEA,qBAAqB,SAAW,cAAc,aAAc;AAE3D,UAAM,UAAU,CAAC;AAEjB,aAAU,IAAI,GAAG,KAAK,cAAc,KAAO;AAE1C,cAAQ,KAAM,YAAY,MAAM,EAAE,eAAgB,CAAE,CAAE;AAAA,IAEvD;AAEA,WAAO;AAAA,EAER;AAAA,EAEA,WAAW,SAAW,UAAU,cAAc,QAAQ,aAAc;AAEnE,aAAS,QAAS,eAAgB,IAAI;AACtC,aAAS,SAAU,iBAAkB,EAAE,QAAQ,gBAAgB,oBAAqB,cAAc,WAAY;AAC9G,aAAS,SAAU,eAAgB,EAAE,QAAQ,gBAAgB,oBAAqB,cAAc,MAAO;AACvG,aAAS,cAAc;AAAA,EAExB;AAED;AAEA,SAAS,SAAUC,IAAG,QAAS;AAE9B,SAAO,KAAK,IAAK,EAAIA,KAAIA,OAAQ,KAAQ,SAAS,QAAW,KAAM,KAAK,KAAM,IAAM,KAAK,EAAG,IAAI;AAEjG;;;AC3IA,IAAM,UAAN,MAAM,iBAAgB,KAAK;AAAA,EAE1B,YAAa,OAAO,QAAQ,aAAa,IAAI,QAAS,KAAK,GAAI,GAAI;AAElE,UAAM;AAEN,SAAK,QAAQ;AACb,SAAK,SAAS;AAEd,SAAK,QAAQ;AACb,SAAK,YAAY;AAEjB,SAAK,qBAAqB,IAAI,MAAM;AACpC,SAAK,iBAAiB,IAAI,MAAM;AAChC,SAAK,gBAAgB;AAErB,SAAK,SAAS;AAAA,MACb,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,cAAc;AAAA,MACd,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,SAAS;AAAA,MACT,eAAe;AAAA,MACf,eAAe;AAAA,MACf,oBAAoB;AAAA,IACrB;AAEA,SAAK,aAAa,IAAI,QAAS,WAAW,GAAG,WAAW,CAAE;AAE1D,SAAK,kBAAkB,IAAI,kBAAmB,KAAK,WAAW,GAAG,KAAK,WAAW,GAAG,EAAE,MAAM,cAAc,CAAE;AAC5G,SAAK,+BAA+B,KAAK,gBAAgB,MAAM;AAE/D,UAAM,eAAe,IAAI,aAAa;AACtC,iBAAa,SAAS;AACtB,iBAAa,OAAO;AAEpB,SAAK,qBAAqB,IAAI,kBAAmB,KAAK,WAAW,GAAG,KAAK,WAAW,GAAG;AAAA,MACtF,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IACD,CAAE;AAEF,SAAK,iBAAiB,IAAI,mBAAmB;AAC7C,SAAK,eAAe,WAAW;AAE/B,SAAK,cAAc,IAAI,eAAgB;AAAA,MACtC,SAAS,OAAO,OAAQ,CAAC,GAAG,UAAU,OAAQ;AAAA,MAC9C,gBAAgB,UAAU;AAAA,MAC1B,cAAc,UAAU;AAAA,MACxB,UAAU,cAAc,MAAO,UAAU,QAAS;AAAA,IACnD,CAAE;AACF,SAAK,YAAY,QAAS,oBAAqB,IAAI,KAAK,OAAO,sBAAsB,IAAI;AACzF,SAAK,YAAY,SAAU,QAAS,EAAE,QAAQ;AAC9C,SAAK,YAAY,SAAU,SAAU,EAAE,QAAQ,KAAK,mBAAmB;AACvE,SAAK,YAAY,SAAU,MAAO,EAAE,MAAM,IAAK,KAAK,WAAW,GAAG,KAAK,WAAW,CAAE;AACpF,SAAK,YAAY,SAAU,+BAAgC,EAAE,MAAM,KAAM,KAAK,OAAO,uBAAwB;AAC7G,SAAK,YAAY,SAAU,wBAAyB,EAAE,QAAQ,KAAK,OAAO;AAC1E,SAAK,YAAY,WAAW;AAE5B,SAAK,gBAAgB,IAAI,eAAgB;AAAA,MACxC,UAAU,cAAc,MAAO,uBAAuB,QAAS;AAAA,MAC/D,SAAS,OAAO,OAAQ,CAAC,GAAG,uBAAuB,OAAQ;AAAA,MAC3D,cAAc,uBAAuB;AAAA,MACrC,gBAAgB,uBAAuB;AAAA,IACxC,CAAE;AACF,SAAK,cAAc,QAAS,eAAgB,IAAI;AAChD,SAAK,cAAc,QAAS,oBAAqB,IAAI,KAAK,OAAO,sBAAsB,IAAI;AAC3F,SAAK,cAAc,SAAU,UAAW,EAAE,QAAQ,KAAK,gBAAgB;AACvE,SAAK,cAAc,SAAU,QAAS,EAAE,QAAQ;AAChD,SAAK,cAAc,SAAU,MAAO,EAAE,MAAM,IAAK,KAAK,WAAW,GAAG,KAAK,WAAW,CAAE;AACtF,SAAK,cAAc,WAAW;AAE9B,SAAK,gBAAgB,IAAI,eAAgB;AAAA,MACxC,UAAU,cAAc,MAAO,uBAAuB,QAAS;AAAA,MAC/D,SAAS,OAAO,OAAQ,CAAC,GAAG,uBAAuB,OAAQ;AAAA,MAC3D,cAAc,uBAAuB;AAAA,MACrC,gBAAgB,uBAAuB;AAAA,IACxC,CAAE;AACF,SAAK,cAAc,QAAS,eAAgB,IAAI;AAChD,SAAK,cAAc,QAAS,oBAAqB,IAAI,KAAK,OAAO,sBAAsB,IAAI;AAC3F,SAAK,cAAc,SAAU,UAAW,EAAE,QAAQ,KAAK,6BAA6B;AACpF,SAAK,cAAc,SAAU,QAAS,EAAE,QAAQ;AAChD,SAAK,cAAc,SAAU,MAAO,EAAE,MAAM,IAAK,KAAK,WAAW,GAAG,KAAK,WAAW,CAAE;AACtF,SAAK,cAAc,WAAW;AAE9B,SAAK,eAAe,IAAI,eAAgB;AAAA,MACvC,UAAU,cAAc,MAAO,WAAW,QAAS;AAAA,MACnD,cAAc,WAAW;AAAA,MACzB,gBAAgB,WAAW;AAAA,MAC3B,UAAU;AAAA,IACX,CAAE;AACF,SAAK,aAAa,cAAc;AAChC,SAAK,aAAa,YAAY;AAC9B,SAAK,aAAa,aAAa;AAC/B,SAAK,aAAa,WAAW;AAC7B,SAAK,aAAa,WAAW;AAC7B,SAAK,aAAa,WAAW;AAC7B,SAAK,aAAa,gBAAgB;AAClC,SAAK,aAAa,gBAAgB;AAClC,SAAK,aAAa,gBAAgB;AAClC,SAAK,aAAa,qBAAqB;AAEvC,SAAK,SAAS,IAAI,eAAgB,IAAK;AAAA,EAExC;AAAA,EAEA,OAAQC,WAAU,aAAa,YAAwC;AAGtE,QAAK,KAAK,gBAAiB;AAE1B,WAAK,aAAa,WAAW;AAC7B,WAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,WAAW;AAC5D,WAAK,aAAa,cAAc;AAChC,WAAK,WAAYA,WAAU,KAAK,cAAc,IAAK;AAAA,IAEpD;AAEA,IAAAA,UAAS,cAAe,KAAK,cAAe;AAC5C,SAAK,gBAAgBA,UAAS,cAAc;AAC5C,UAAM,eAAeA,UAAS;AAC9B,IAAAA,UAAS,YAAY;AAErB,SAAK,YAAY,SAAU,MAAO,EAAE,QAAQ,KAAK,OAAO;AACxD,SAAK,YAAY,SAAU,WAAY,EAAE,QAAQ,KAAK,OAAO;AAC7D,SAAK,YAAY,SAAU,OAAQ,EAAE,QAAQ,KAAK,OAAO;AACzD,SAAK,YAAY,SAAU,cAAe,EAAE,QAAQ,KAAK,OAAO;AAChE,SAAK,YAAY,SAAU,eAAgB,EAAE,QAAQ,KAAK,OAAO;AACjE,SAAK,YAAY,SAAU,YAAa,EAAE,QAAQ,KAAK,OAAO;AAC9D,SAAK,YAAY,SAAU,WAAY,EAAE,QAAQ,KAAK,OAAO;AAG7D,UAAM,cAAc,KAAK,OAAO,sBAAuB,KAAK,OAAO,MAAM,KAAK,OAAO;AACrF,SAAK,cAAc,SAAU,aAAc,EAAE,QAAQ;AACrD,SAAK,cAAc,SAAU,aAAc,EAAE,QAAQ;AAErD,SAAK,cAAc,SAAU,YAAa,EAAE,QAAQ,KAAK,OAAO;AAChE,SAAK,cAAc,SAAU,WAAY,EAAE,QAAQ,KAAK,OAAO;AAC/D,SAAK,cAAc,SAAU,YAAa,EAAE,QAAQ,KAAK,OAAO;AAChE,SAAK,cAAc,SAAU,WAAY,EAAE,QAAQ,KAAK,OAAO;AAE/D,SAAK,OAAO,gBAAgB,KAAK,MAAO,KAAK,OAAO,aAAc;AAClE,QAAO,KAAK,eAAe,KAAK,OAAO,iBAAqB,KAAK,mBAAmB,KAAK,OAAO,eAAkB;AAEjH,sBAAgB,UAAW,KAAK,eAAe,KAAK,OAAO,eAAe,KAAK,OAAO,eAAe,IAAI,QAAS,GAAG,CAAE,CAAE;AACzH,sBAAgB,UAAW,KAAK,eAAe,KAAK,OAAO,eAAe,KAAK,OAAO,eAAe,IAAI,QAAS,GAAG,CAAE,CAAE;AACzH,WAAK,aAAa,KAAK,OAAO;AAC9B,WAAK,iBAAiB,KAAK,OAAO;AAAA,IAEnC;AAGA,SAAK,eAAgBA,WAAU,KAAK,gBAAgB,KAAK,oBAAoB,SAAU,CAAI;AAG3F,SAAK,WAAYA,WAAU,KAAK,aAAa,KAAK,iBAAiB,UAAU,CAAI;AAGjF,QAAK,KAAK,OAAO,SAAU;AAE1B,WAAK,WAAYA,WAAU,KAAK,eAAe,KAAK,8BAA8B,UAAU,CAAI;AAChG,WAAK,WAAYA,WAAU,KAAK,eAAe,KAAK,iBAAiB,UAAU,CAAI;AAAA,IAEpF;AAEA,UAAM,iBAAiB,KAAK;AAG5B,QAAK,KAAK,OAAO,WAAW,SAAQ,OAAO,QAAS;AAEnD,WAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AACzE,WAAK,aAAa,cAAc;AAAA,IAEjC,OAAO;AAEN,WAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,gBAAgB;AACtE,WAAK,aAAa,cAAc;AAAA,IAEjC;AAGA,QAAK,KAAK,OAAO,WAAW,SAAQ,OAAO,SAAU;AAEpD,qBAAe,WAAW;AAAA,IAE3B,OAAO;AAEN,qBAAe,WAAW;AAAA,IAE3B;AAGA,SAAK,WAAYA,WAAU,gBAAgB,KAAK,iBAAiB,OAAO,UAAW;AAEnF,IAAAA,UAAS,cAAe,KAAK,gBAAgB,KAAK,aAAc;AAChE,IAAAA,UAAS,YAAY;AAAA,EAEtB;AAAA,EAEA,WAAYA,WAAU,cAAc,cAAc,YAAY,YAAa;AAG1E,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,UAAM,qBAAqBA,UAAS,cAAc;AAClD,UAAM,oBAAoBA,UAAS;AAEnC,IAAAA,UAAS,gBAAiB,YAAa;AAGvC,IAAAA,UAAS,YAAY;AACrB,QAAO,eAAe,UAAiB,eAAe,MAAS;AAE9D,MAAAA,UAAS,cAAe,UAAW;AACnC,MAAAA,UAAS,cAAe,cAAc,CAAI;AAC1C,MAAAA,UAAS,MAAM;AAAA,IAEhB;AAEA,SAAK,OAAO,WAAW;AACvB,SAAK,OAAO,OAAQA,SAAS;AAG7B,IAAAA,UAAS,YAAY;AACrB,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,IAAAA,UAAS,cAAe,kBAAmB;AAAA,EAE5C;AAAA,EAEA,eAAgBA,WAAU,kBAAkB,cAAc,YAAY,YAAa;AAElF,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,UAAM,qBAAqBA,UAAS,cAAc;AAClD,UAAM,oBAAoBA,UAAS;AAEnC,IAAAA,UAAS,gBAAiB,YAAa;AACvC,IAAAA,UAAS,YAAY;AAErB,iBAAa,iBAAiB,cAAc;AAC5C,iBAAa,iBAAiB,cAAc;AAC5C,QAAO,eAAe,UAAiB,eAAe,MAAS;AAE9D,MAAAA,UAAS,cAAe,UAAW;AACnC,MAAAA,UAAS,cAAe,cAAc,CAAI;AAC1C,MAAAA,UAAS,MAAM;AAAA,IAEhB;AAEA,SAAK,MAAM,mBAAmB;AAC9B,IAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AACzC,SAAK,MAAM,mBAAmB;AAG9B,IAAAA,UAAS,YAAY;AACrB,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,IAAAA,UAAS,cAAe,kBAAmB;AAAA,EAE5C;AAAA,EAEA,QAASC,QAAOC,SAAS;AAExB,SAAK,gBAAgB,QAASD,QAAOC,OAAO;AAC5C,SAAK,6BAA6B,QAASD,QAAOC,OAAO;AACzD,SAAK,mBAAmB,QAASD,QAAOC,OAAO;AAE/C,SAAK,YAAY,SAAU,MAAO,EAAE,MAAM,IAAKD,QAAOC,OAAO;AAC7D,SAAK,YAAY,SAAU,+BAAgC,EAAE,MAAM,KAAM,KAAK,OAAO,uBAAwB;AAC7G,SAAK,YAAY,SAAU,wBAAyB,EAAE,QAAQ,KAAK,OAAO;AAC1E,SAAK,YAAY,cAAc;AAE/B,SAAK,cAAc,SAAU,MAAO,EAAE,MAAM,IAAKD,QAAOC,OAAO;AAC/D,SAAK,cAAc,cAAc;AAEjC,SAAK,cAAc,SAAU,MAAO,EAAE,MAAM,IAAKD,QAAOC,OAAO;AAC/D,SAAK,cAAc,cAAc;AAAA,EAElC;AAAA,EAEA,UAAU;AAET,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,6BAA6B,QAAQ;AAC1C,SAAK,mBAAmB,QAAQ;AAEhC,SAAK,eAAe,QAAQ;AAC5B,SAAK,YAAY,QAAQ;AACzB,SAAK,cAAc,QAAQ;AAC3B,SAAK,cAAc,QAAQ;AAC3B,SAAK,aAAa,QAAQ;AAE1B,SAAK,OAAO,QAAQ;AAAA,EAErB;AAED;AAEA,QAAQ,SAAS;AAAA,EAChB,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AACX;;;ACjUA,IAAM,kBAAkB;AAAA,EAEvB,MAAM;AAAA,EAEN,SAAS;AAAA,IAER,kBAAkB;AAAA,EAEnB;AAAA,EAEA,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,cAAc,EAAE,OAAO,IAAI,QAAS,IAAI,MAAM,IAAI,GAAI,EAAE;AAAA,EAEzD;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiE3B;AAEA,IAAM,oBAAoB;AAAA,EAEzB,MAAM;AAAA,EAEN,SAAS;AAAA,IAER,yBAAyB;AAAA,IACzB,6BAA6B;AAAA,IAC7B,2BAA2B;AAAA,IAC3B,4BAA4B;AAAA,EAE7B;AAAA,EAEA,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,SAAS,EAAE,OAAO,KAAK;AAAA,IACvB,WAAW,EAAE,OAAO,KAAK;AAAA,IACzB,cAAc,EAAE,OAAO,IAAI,QAAS,IAAI,MAAM,IAAI,GAAI,EAAE;AAAA,EAEzD;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0M3B;AAEA,IAAM,kBAAkB;AAAA,EAEvB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,cAAc,EAAE,OAAO,IAAI,QAAS,IAAI,MAAM,IAAI,GAAI,EAAE;AAAA,EAEzD;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwD3B;;;ACjcA,IAAM,WAAN,cAAuB,KAAK;AAAA,EAE3B,YAAaC,QAAOC,SAAS;AAE5B,UAAM;AAIN,SAAK,UAAU,IAAI,kBAAmBD,QAAOC,SAAQ;AAAA,MACpD,aAAa;AAAA,MACb,MAAM;AAAA,IACP,CAAE;AACF,SAAK,QAAQ,QAAQ,OAAO;AAE5B,SAAK,YAAY,IAAI,kBAAmBD,QAAOC,SAAQ;AAAA,MACtD,aAAa;AAAA,MACb,MAAM;AAAA,IACP,CAAE;AACF,SAAK,UAAU,QAAQ,OAAO;AAG9B,UAAM,QAAQ;AAEd,UAAM,mBAAmB,IAAI,MAAM;AACnC,qBAAiB,MAAM,KAAK,eAAe;AAC3C,qBAAiB,SAAS,WAAY;AAGrC,YAAM,YAAY,cAAc;AAAA,IAEjC;AAEA,SAAK,cAAc,IAAI,QAAQ;AAC/B,SAAK,YAAY,OAAO;AACxB,SAAK,YAAY,QAAQ;AACzB,SAAK,YAAY,YAAY;AAC7B,SAAK,YAAY,kBAAkB;AACnC,SAAK,YAAY,QAAQ;AAEzB,UAAM,qBAAqB,IAAI,MAAM;AACrC,uBAAmB,MAAM,KAAK,iBAAiB;AAC/C,uBAAmB,SAAS,WAAY;AAGvC,YAAM,cAAc,cAAc;AAAA,IAEnC;AAEA,SAAK,gBAAgB,IAAI,QAAQ;AACjC,SAAK,cAAc,OAAO;AAC1B,SAAK,cAAc,QAAQ;AAC3B,SAAK,cAAc,YAAY;AAC/B,SAAK,cAAc,YAAY;AAC/B,SAAK,cAAc,kBAAkB;AACrC,SAAK,cAAc,QAAQ;AAI3B,SAAK,gBAAgB,cAAc,MAAO,gBAAgB,QAAS;AAEnE,SAAK,cAAe,YAAa,EAAE,MAAM,IAAK,IAAID,QAAO,IAAIC,OAAO;AAEpE,SAAK,gBAAgB,IAAI,eAAgB;AAAA,MACxC,SAAS,OAAO,OAAQ,CAAC,GAAG,gBAAgB,OAAQ;AAAA,MACpD,UAAU,KAAK;AAAA,MACf,cAAc,gBAAgB;AAAA,MAC9B,gBAAgB,gBAAgB;AAAA,IACjC,CAAE;AAIF,SAAK,kBAAkB,cAAc,MAAO,kBAAkB,QAAS;AAEvE,SAAK,gBAAiB,YAAa,EAAE,MAAM,IAAK,IAAID,QAAO,IAAIC,OAAO;AACtE,SAAK,gBAAiB,UAAW,EAAE,QAAQ,KAAK,QAAQ;AACxD,SAAK,gBAAiB,OAAQ,EAAE,QAAQ,KAAK;AAC7C,SAAK,gBAAiB,SAAU,EAAE,QAAQ,KAAK;AAE/C,SAAK,kBAAkB,IAAI,eAAgB;AAAA,MAC1C,SAAS,OAAO,OAAQ,CAAC,GAAG,kBAAkB,OAAQ;AAAA,MACtD,UAAU,KAAK;AAAA,MACf,cAAc,kBAAkB;AAAA,MAChC,gBAAgB,kBAAkB;AAAA,IACnC,CAAE;AAIF,SAAK,gBAAgB,cAAc,MAAO,gBAAgB,QAAS;AAEnE,SAAK,cAAe,YAAa,EAAE,MAAM,IAAK,IAAID,QAAO,IAAIC,OAAO;AACpE,SAAK,cAAe,UAAW,EAAE,QAAQ,KAAK,UAAU;AAExD,SAAK,gBAAgB,IAAI,eAAgB;AAAA,MACxC,UAAU,KAAK;AAAA,MACf,cAAc,gBAAgB;AAAA,MAC9B,gBAAgB,gBAAgB;AAAA,IACjC,CAAE;AAEF,SAAK,SAAS,IAAI,eAAgB,IAAK;AAAA,EAExC;AAAA,EAEA,OAAQC,WAAU,aAAa,YAAwC;AAItE,SAAK,cAAe,UAAW,EAAE,QAAQ,WAAW;AAEpD,SAAK,OAAO,WAAW,KAAK;AAE5B,IAAAA,UAAS,gBAAiB,KAAK,OAAQ;AACvC,QAAK,KAAK,MAAQ,CAAAA,UAAS,MAAM;AACjC,SAAK,OAAO,OAAQA,SAAS;AAI7B,SAAK,OAAO,WAAW,KAAK;AAE5B,IAAAA,UAAS,gBAAiB,KAAK,SAAU;AACzC,QAAK,KAAK,MAAQ,CAAAA,UAAS,MAAM;AACjC,SAAK,OAAO,OAAQA,SAAS;AAI7B,SAAK,cAAe,QAAS,EAAE,QAAQ,WAAW;AAElD,SAAK,OAAO,WAAW,KAAK;AAE5B,QAAK,KAAK,gBAAiB;AAE1B,MAAAA,UAAS,gBAAiB,IAAK;AAC/B,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B,OAAO;AAEN,MAAAA,UAAS,gBAAiB,WAAY;AACtC,UAAK,KAAK,MAAQ,CAAAA,UAAS,MAAM;AACjC,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B;AAAA,EAED;AAAA,EAEA,QAASF,QAAOC,SAAS;AAExB,SAAK,QAAQ,QAASD,QAAOC,OAAO;AACpC,SAAK,UAAU,QAASD,QAAOC,OAAO;AAEtC,SAAK,cAAc,SAAU,YAAa,EAAE,MAAM,IAAK,IAAID,QAAO,IAAIC,OAAO;AAC7E,SAAK,gBAAgB,SAAU,YAAa,EAAE,MAAM,IAAK,IAAID,QAAO,IAAIC,OAAO;AAC/E,SAAK,cAAc,SAAU,YAAa,EAAE,MAAM,IAAK,IAAID,QAAO,IAAIC,OAAO;AAAA,EAE9E;AAAA,EAEA,iBAAiB;AAEhB,WAAO;AAAA,EAER;AAAA,EAEA,mBAAmB;AAElB,WAAO;AAAA,EAER;AAAA,EAEA,UAAU;AAET,SAAK,QAAQ,QAAQ;AACrB,SAAK,UAAU,QAAQ;AAEvB,SAAK,YAAY,QAAQ;AACzB,SAAK,cAAc,QAAQ;AAE3B,SAAK,cAAc,QAAQ;AAC3B,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,cAAc,QAAQ;AAE3B,SAAK,OAAO,QAAQ;AAAA,EAErB;AAED;;;AC/KA,IAAM,iBAAN,cAA6B,KAAK;AAAA,EAEjC,YAAa,OAAO,QAAQ,YAAY,YAAa;AAEpD,UAAM;AAEN,SAAK,QAAQ;AACb,SAAK,SAAS;AAEd,SAAK,cAAc;AACnB,SAAK,WAAW;AAGhB,SAAK,aAAe,eAAe,SAAc,aAAa;AAC9D,SAAK,aAAe,eAAe,SAAc,aAAa;AAC9D,SAAK,iBAAiB,IAAI,MAAM;AAEhC,UAAM,aAAa;AACnB,SAAK,eAAe,cAAc,MAAO,WAAW,QAAS;AAE7D,SAAK,eAAe,IAAI,eAAgB;AAAA,MACvC,UAAU,KAAK;AAAA,MACf,cAAc,WAAW;AAAA,MACzB,gBAAgB,WAAW;AAAA,MAC3B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,oBAAoB;AAAA,MACpB,UAAU;AAAA,IACX,CAAE;AAEF,SAAK,SAAS,IAAI,eAAgB,KAAK,YAAa;AAAA,EAErD;AAAA,EAEA,UAAU;AAET,QAAK,KAAK,oBAAqB;AAE9B,WAAK,mBAAmB,QAAQ;AAChC,WAAK,qBAAqB;AAAA,IAE3B;AAEA,SAAK,aAAa,QAAQ;AAE1B,SAAK,OAAO,QAAQ;AAAA,EAErB;AAAA,EAEA,QAASE,QAAOC,SAAS;AAExB,QAAK,KAAK,mBAAqB,MAAK,mBAAmB,QAASD,QAAOC,OAAO;AAAA,EAE/E;AAAA,EAEA,OAAQC,WAAU,aAAa,YAAa;AAE3C,QAAK,CAAE,KAAK,oBAAqB;AAEhC,WAAK,qBAAqB,IAAI,kBAAmB,WAAW,OAAO,WAAW,QAAQ,EAAE,MAAM,cAAc,CAAE;AAC9G,WAAK,mBAAmB,QAAQ,OAAO;AAAA,IAExC;AAEA,UAAM,gBAAgB,eAAgB,KAAK,IAAK,GAAG,KAAK,IAAK,KAAK,aAAa,CAAE,CAAE,CAAE;AAErF,UAAM,YAAYA,UAAS;AAC3B,IAAAA,UAAS,YAAY;AAErB,IAAAA,UAAS,cAAe,KAAK,cAAe;AAC5C,UAAM,gBAAgBA,UAAS,cAAc;AAE7C,UAAM,mBAAmB,IAAM,cAAc;AAC7C,UAAM,gBAAgB,IAAI;AAC1B,SAAK,aAAc,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AAEhE,UAAM,aAAa;AAAA,MAElB,WAAW,WAAW;AAAA,MACtB,YAAY,WAAW;AAAA,MACvB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO,WAAW;AAAA,MAClB,QAAQ,WAAW;AAAA,IAEpB;AAEA,UAAM,qBAAqB,OAAO,OAAQ,CAAC,GAAG,KAAK,OAAO,IAAK;AAE/D,QAAK,mBAAmB,QAAU,QAAO,OAAQ,YAAY,kBAAmB;AAGhF,aAAU,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAO;AAEjD,YAAM,eAAe,cAAe,CAAE;AAEtC,UAAK,KAAK,OAAO,eAAgB;AAEhC,aAAK,OAAO;AAAA,UAEX,WAAW;AAAA,UAAW,WAAW;AAAA,UAEjC,WAAW,UAAU,aAAc,CAAE,IAAI;AAAA,UAAQ,WAAW,UAAU,aAAc,CAAE,IAAI;AAAA;AAAA,UAE1F,WAAW;AAAA,UAAO,WAAW;AAAA,QAE9B;AAAA,MAED;AAEA,UAAI,eAAe;AAEnB,UAAK,KAAK,UAAW;AAMpB,cAAM,8BAAgC,QAAU,IAAI,OAAQ,cAAc;AAC1E,wBAAgB,gBAAgB;AAAA,MAEjC;AAEA,WAAK,aAAc,SAAU,EAAE,QAAQ;AACvC,MAAAA,UAAS,cAAe,KAAK,YAAY,KAAK,UAAW;AACzD,MAAAA,UAAS,gBAAiB,KAAK,kBAAmB;AAClD,MAAAA,UAAS,MAAM;AACf,MAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AAEzC,MAAAA,UAAS,gBAAiB,KAAK,iBAAiB,OAAO,WAAY;AAEnE,UAAK,MAAM,GAAI;AAEd,QAAAA,UAAS,cAAe,GAAU,CAAI;AACtC,QAAAA,UAAS,MAAM;AAAA,MAEhB;AAEA,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B;AAEA,QAAK,KAAK,OAAO,iBAAiB,mBAAmB,SAAU;AAE9D,WAAK,OAAO;AAAA,QAEX,mBAAmB;AAAA,QAAW,mBAAmB;AAAA,QAEjD,mBAAmB;AAAA,QAAS,mBAAmB;AAAA,QAE/C,mBAAmB;AAAA,QAAO,mBAAmB;AAAA,MAE9C;AAAA,IAED,WAAY,KAAK,OAAO,iBAAkB;AAEzC,WAAK,OAAO,gBAAgB;AAAA,IAE7B;AAEA,IAAAA,UAAS,YAAY;AACrB,IAAAA,UAAS,cAAe,KAAK,gBAAgB,aAAc;AAAA,EAE5D;AAED;AAQA,IAAM,iBAAiB;AAAA,EACtB;AAAA,IACC,CAAE,GAAG,CAAE;AAAA,EACR;AAAA,EACA;AAAA,IACC,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,EACtB;AAAA,EACA;AAAA,IACC,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,EAC9C;AAAA,EACA;AAAA,IACC,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAC7C,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,EAC9C;AAAA,EACA;AAAA,IACC,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAC7C,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAC3C,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAC/C,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,EAC9C;AAAA,EACA;AAAA,IACC,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IACrD,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IACnD,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAC7C,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAC7C,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAC7C,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAC7C,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IACrC,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,EACtC;AACD;;;ACrNA,IAAM,aAAa;AAAA,EAElB,MAAM;AAAA,EAEN,SAAS;AAAA,IACR,sBAAsB;AAAA,IACtB,eAAe;AAAA,EAChB;AAAA,EAEA,UAAU;AAAA,IAET,WAAW,EAAE,OAAO,KAAK;AAAA,IACzB,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,cAAc,EAAE,OAAO,KAAK;AAAA,IAC5B,aAAa,EAAE,OAAO,KAAK;AAAA,IAC3B,cAAc,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACrC,0BAA0B,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACjD,iCAAiC,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACxD,gBAAgB,EAAE,OAAO,EAAE;AAAA,IAC3B,eAAe,EAAE,OAAO,KAAM;AAAA,IAC9B,eAAe,EAAE,OAAO,KAAK;AAAA,EAE9B;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoI3B;AAEA,IAAM,kBAAkB;AAAA,EAEvB,MAAM;AAAA,EAEN,SAAS;AAAA,IACR,sBAAsB;AAAA,EACvB;AAAA,EAEA,UAAU;AAAA,IAET,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,cAAc,EAAE,OAAO,KAAK;AAAA,IAC5B,aAAa,EAAE,OAAO,KAAK;AAAA,EAE5B;AAAA,EAEA,cAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,gBAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCF;AAEA,IAAM,iBAAiB;AAAA,EAEtB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,cAAc,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,EAEtC;AAAA,EAEA,cAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,gBAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BF;;;AC1QA,IAAM,WAAN,MAAM,kBAAiB,KAAK;AAAA,EAE3B,YAAa,OAAO,QAAQC,QAAOC,SAAQ,aAAa,IAAK;AAE5D,UAAM;AAEN,SAAK,QAAUD,WAAU,SAAcA,SAAQ;AAC/C,SAAK,SAAWC,YAAW,SAAcA,UAAS;AAElD,SAAK,QAAQ;AACb,SAAK,YAAY;AAEjB,SAAK,SAAS;AACd,SAAK,QAAQ;AAEb,SAAK,eAAe;AACpB,SAAK,SAAS,CAAC;AACf,SAAK,eAAe;AACpB,SAAK,SAAS;AAEd,SAAK,cAAc;AACnB,SAAK,cAAc;AAEnB,SAAK,mBAAmB,oBAAI,IAAI;AAIhC,SAAK,qBAAsB,UAAW;AACtC,SAAK,8BAA8B;AAInC,UAAM,eAAe,IAAI,aAAa;AACtC,iBAAa,SAAS;AACtB,iBAAa,OAAO;AAIpB,SAAK,qBAAqB,IAAI,kBAAmB,KAAK,OAAO,KAAK,QAAQ;AAAA,MACzE,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IACD,CAAE;AAIF,SAAK,mBAAmB,IAAI,kBAAmB,KAAK,OAAO,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAE;AAEhG,SAAK,mBAAmB,KAAK,iBAAiB,MAAM;AAIpD,SAAK,eAAe,IAAI,eAAgB;AAAA,MACvC,SAAS,OAAO,OAAQ,CAAC,GAAG,WAAW,OAAQ;AAAA,MAC/C,UAAU,cAAc,MAAO,WAAW,QAAS;AAAA,MACnD,cAAc,WAAW;AAAA,MACzB,gBAAgB,WAAW;AAAA,MAC3B,UAAU;AAAA,IACX,CAAE;AAEF,SAAK,aAAa,QAAS,aAAc,IAAI;AAE7C,SAAK,aAAa,SAAU,SAAU,EAAE,QAAQ,KAAK,mBAAmB;AACxE,SAAK,aAAa,SAAU,QAAS,EAAE,QAAQ,KAAK,mBAAmB;AACvE,SAAK,aAAa,SAAU,QAAS,EAAE,QAAQ,KAAK;AACpD,SAAK,aAAa,SAAU,QAAS,EAAE,QAAQ,KAAK;AACpD,SAAK,aAAa,SAAU,YAAa,EAAE,QAAQ,KAAK,OAAO;AAC/D,SAAK,aAAa,SAAU,WAAY,EAAE,QAAQ,KAAK,OAAO;AAC9D,SAAK,aAAa,SAAU,YAAa,EAAE,MAAM,IAAK,KAAK,OAAO,KAAK,MAAO;AAC9E,SAAK,aAAa,SAAU,wBAAyB,EAAE,MAAM,KAAM,KAAK,OAAO,gBAAiB;AAChG,SAAK,aAAa,SAAU,+BAAgC,EAAE,MAAM,KAAM,KAAK,OAAO,uBAAwB;AAI9G,SAAK,iBAAiB,IAAI,mBAAmB;AAC7C,SAAK,eAAe,WAAW;AAI/B,SAAK,eAAe,IAAI,eAAgB;AAAA,MACvC,SAAS,OAAO,OAAQ,CAAC,GAAG,eAAe,OAAQ;AAAA,MACnD,UAAU,cAAc,MAAO,eAAe,QAAS;AAAA,MACvD,cAAc,eAAe;AAAA,MAC7B,gBAAgB,eAAe;AAAA,IAChC,CAAE;AACF,SAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,iBAAiB;AACvE,SAAK,aAAa,SAAU,YAAa,EAAE,MAAM,IAAK,KAAK,OAAO,KAAK,MAAO;AAI9E,SAAK,sBAAsB,IAAI,eAAgB;AAAA,MAC9C,SAAS,OAAO,OAAQ,CAAC,GAAG,gBAAgB,OAAQ;AAAA,MACpD,UAAU,cAAc,MAAO,gBAAgB,QAAS;AAAA,MACxD,cAAc,gBAAgB;AAAA,MAC9B,gBAAgB,gBAAgB;AAAA,MAChC,UAAU;AAAA,IACX,CAAE;AACF,SAAK,oBAAoB,SAAU,QAAS,EAAE,QAAQ,KAAK,mBAAmB;AAC9E,SAAK,oBAAoB,SAAU,YAAa,EAAE,QAAQ,KAAK,OAAO;AACtE,SAAK,oBAAoB,SAAU,WAAY,EAAE,QAAQ,KAAK,OAAO;AAIrE,SAAK,eAAe,IAAI,eAAgB;AAAA,MACvC,UAAU,cAAc,MAAO,WAAW,QAAS;AAAA,MACnD,cAAc,WAAW;AAAA,MACzB,gBAAgB,WAAW;AAAA,MAC3B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,oBAAoB;AAAA,IACrB,CAAE;AAEF,SAAK,SAAS,IAAI,eAAgB,IAAK;AAEvC,SAAK,qBAAqB,IAAI,MAAM;AAAA,EAErC;AAAA,EAEA,UAAU;AAIT,SAAK,mBAAmB,QAAQ;AAChC,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,iBAAiB,QAAQ;AAI9B,SAAK,eAAe,QAAQ;AAC5B,SAAK,aAAa,QAAQ;AAC1B,SAAK,aAAa,QAAQ;AAC1B,SAAK,oBAAoB,QAAQ;AAIjC,SAAK,OAAO,QAAQ;AAAA,EAErB;AAAA,EAEA,OAAQC,WAAU,aAAa,YAA0C;AAIxE,SAAK,mBAAmB;AACxB,SAAK,eAAgBA,WAAU,KAAK,gBAAgB,KAAK,oBAAoB,SAAU,CAAI;AAC3F,SAAK,kBAAkB;AAIvB,SAAK,aAAa,SAAU,cAAe,EAAE,QAAQ,KAAK;AAC1D,SAAK,aAAa,SAAU,aAAc,EAAE,QAAQ,KAAK;AACzD,SAAK,aAAa,SAAU,aAAc,EAAE,QAAQ,KAAK;AACzD,SAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,gBAAiB;AAIpE,SAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,gBAAiB;AAIpE,YAAS,KAAK,QAAS;AAAA,MAEtB,KAAK,UAAS,OAAO;AAEpB,aAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,iBAAiB;AACvE,aAAK,aAAa,WAAW;AAC7B,aAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,UAAW;AAEtF;AAAA,MAED,KAAK,UAAS,OAAO;AAEpB,aAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,iBAAiB;AACvE,aAAK,aAAa,WAAW;AAC7B,aAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,UAAW;AAEtF;AAAA,MAED,KAAK,UAAS,OAAO;AAEpB,aAAK,WAAYA,WAAU,KAAK,qBAAqB,KAAK,iBAAiB,OAAO,UAAW;AAE7F;AAAA,MAED,KAAK,UAAS,OAAO;AAEpB,aAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AACzE,aAAK,aAAa,WAAW;AAC7B,aAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,UAAW;AAEtF;AAAA,MAED,KAAK,UAAS,OAAO;AAEpB,aAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,iBAAiB;AACvE,aAAK,aAAa,WAAW;AAC7B,aAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,UAAW;AAEtF;AAAA,MAED;AACC,gBAAQ,KAAM,sCAAuC;AAAA,IAEvD;AAAA,EAED;AAAA,EAEA,WAAYA,WAAU,cAAc,cAAc,YAAY,YAAa;AAG1E,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,UAAM,qBAAqBA,UAAS,cAAc;AAClD,UAAM,oBAAoBA,UAAS;AAEnC,IAAAA,UAAS,gBAAiB,YAAa;AAGvC,IAAAA,UAAS,YAAY;AACrB,QAAO,eAAe,UAAiB,eAAe,MAAS;AAE9D,MAAAA,UAAS,cAAe,UAAW;AACnC,MAAAA,UAAS,cAAe,cAAc,CAAI;AAC1C,MAAAA,UAAS,MAAM;AAAA,IAEhB;AAEA,SAAK,OAAO,WAAW;AACvB,SAAK,OAAO,OAAQA,SAAS;AAG7B,IAAAA,UAAS,YAAY;AACrB,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,IAAAA,UAAS,cAAe,kBAAmB;AAAA,EAE5C;AAAA,EAEA,eAAgBA,WAAU,kBAAkB,cAAc,YAAY,YAAa;AAElF,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,UAAM,qBAAqBA,UAAS,cAAc;AAClD,UAAM,oBAAoBA,UAAS;AAEnC,IAAAA,UAAS,gBAAiB,YAAa;AACvC,IAAAA,UAAS,YAAY;AAErB,iBAAa,iBAAiB,cAAc;AAC5C,iBAAa,iBAAiB,cAAc;AAE5C,QAAO,eAAe,UAAiB,eAAe,MAAS;AAE9D,MAAAA,UAAS,cAAe,UAAW;AACnC,MAAAA,UAAS,cAAe,cAAc,CAAI;AAC1C,MAAAA,UAAS,MAAM;AAAA,IAEhB;AAEA,SAAK,MAAM,mBAAmB;AAC9B,IAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AACzC,SAAK,MAAM,mBAAmB;AAI9B,IAAAA,UAAS,YAAY;AACrB,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,IAAAA,UAAS,cAAe,kBAAmB;AAAA,EAE5C;AAAA,EAEA,QAASF,QAAOC,SAAS;AAExB,SAAK,QAAQD;AACb,SAAK,SAASC;AAEd,SAAK,iBAAiB,QAASD,QAAOC,OAAO;AAC7C,SAAK,mBAAmB,QAASD,QAAOC,OAAO;AAC/C,SAAK,iBAAiB,QAASD,QAAOC,OAAO;AAE7C,SAAK,aAAa,SAAU,YAAa,EAAE,MAAM,IAAKD,QAAOC,OAAO;AACpE,SAAK,aAAa,SAAU,wBAAyB,EAAE,MAAM,KAAM,KAAK,OAAO,gBAAiB;AAChG,SAAK,aAAa,SAAU,+BAAgC,EAAE,MAAM,KAAM,KAAK,OAAO,uBAAwB;AAE9G,SAAK,aAAa,SAAU,YAAa,EAAE,MAAM,IAAKD,QAAOC,OAAO;AAAA,EAErE;AAAA,EAEA,qBAAsB,YAAa;AAElC,UAAM,SAAS,KAAK;AAEpB,aAAU,IAAI,GAAG,IAAI,YAAY,KAAO;AAEvC,YAAM,SAAS,IAAI,QAAQ;AAC3B,aAAO,IAAM,KAAK,OAAO,IAAI,IAAM;AACnC,aAAO,IAAM,KAAK,OAAO,IAAI,IAAM;AACnC,aAAO,IAAI,KAAK,OAAO;AAEvB,aAAO,UAAU;AAEjB,UAAIE,SAAQ,IAAI;AAChB,MAAAA,SAAQ,UAAU,KAAM,KAAK,GAAGA,SAAQA,MAAM;AAC9C,aAAO,eAAgBA,MAAM;AAE7B,aAAO,KAAM,MAAO;AAAA,IAErB;AAAA,EAED;AAAA,EAEA,gCAAgC;AAE/B,UAAMH,SAAQ,GAAGC,UAAS;AAE1B,UAAM,UAAU,IAAI,aAAa;AAEjC,UAAMG,QAAOJ,SAAQC;AACrB,UAAMI,QAAO,IAAI,aAAcD,KAAK;AAEpC,aAAU,IAAI,GAAG,IAAIA,OAAM,KAAO;AAEjC,YAAME,KAAM,KAAK,OAAO,IAAI,IAAM;AAClC,YAAMC,KAAM,KAAK,OAAO,IAAI,IAAM;AAClC,YAAM,IAAI;AAEV,MAAAF,MAAM,CAAE,IAAI,QAAQ,QAASC,IAAGC,IAAG,CAAE;AAAA,IAEtC;AAEA,SAAK,eAAe,IAAI,YAAaF,OAAML,QAAOC,SAAQ,WAAW,SAAU;AAC/E,SAAK,aAAa,QAAQ;AAC1B,SAAK,aAAa,QAAQ;AAC1B,SAAK,aAAa,cAAc;AAAA,EAEjC;AAAA,EAEA,qBAAqB;AAEpB,UAAM,QAAQ,KAAK;AACnB,UAAM,QAAQ,KAAK;AAEnB,UAAM,SAAU,SAAW,QAAS;AAEnC,YAAM,IAAK,QAAQ,OAAO,OAAQ;AAElC,UAAK,OAAO,YAAY,OAAO,OAAS,QAAO,UAAU;AAAA,IAE1D,CAAE;AAAA,EAEH;AAAA,EAEA,oBAAoB;AAEnB,UAAM,QAAQ,KAAK;AACnB,UAAM,QAAQ,KAAK;AAEnB,UAAM,SAAU,SAAW,QAAS;AAEnC,YAAM,UAAU,MAAM,IAAK,MAAO;AAClC,aAAO,UAAU;AAAA,IAElB,CAAE;AAEF,UAAM,MAAM;AAAA,EAEb;AAED;AAEA,SAAS,SAAS;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AACX;;;AClZA,IAAM,YAAY;AAAA,EAEjB,MAAM;AAAA,EAEN,SAAS;AAAA,IACR,UAAU;AAAA,IACV,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,WAAW;AAAA,EACZ;AAAA,EAEA,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,WAAW,EAAE,OAAO,KAAK;AAAA,IACzB,cAAc,EAAE,OAAO,KAAK;AAAA,IAC5B,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,cAAc,EAAE,OAAO,KAAK;AAAA,IAC5B,aAAa,EAAE,OAAO,KAAK;AAAA,IAC3B,cAAc,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACrC,0BAA0B,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACjD,iCAAiC,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACxD,WAAW,EAAE,OAAO,IAAG;AAAA,IACvB,eAAe,EAAE,OAAO,IAAI;AAAA,IAC5B,eAAe,EAAE,OAAO,EAAE;AAAA,IAC1B,aAAa,EAAE,OAAO,MAAK;AAAA,EAE5B;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmL3B;AAEA,IAAM,iBAAiB;AAAA,EAEtB,MAAM;AAAA,EAEN,SAAS;AAAA,IACR,sBAAsB;AAAA,EACvB;AAAA,EAEA,UAAU;AAAA,IAET,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,cAAc,EAAE,OAAO,KAAK;AAAA,IAC5B,aAAa,EAAE,OAAO,KAAK;AAAA,EAE5B;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsC3B;AAEA,IAAM,gBAAgB;AAAA,EAErB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,cAAc,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACrC,WAAW,EAAE,OAAO,IAAG;AAAA,EAExB;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsC3B;;;ACxVA,IAAM,UAAN,MAAM,iBAAgB,KAAK;AAAA,EAE1B,YAAa,EAAE,UAAAO,WAAU,OAAO,QAAQ,OAAAC,QAAO,QAAAC,SAAQ,SAAS,WAAW,OAAO,gBAAgB,GAAI;AAErG,UAAM;AAEN,SAAK,QAAUD,WAAU,SAAcA,SAAQ;AAC/C,SAAK,SAAWC,YAAW,SAAcA,UAAS;AAElD,SAAK,QAAQ;AAEb,SAAK,WAAWF;AAChB,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,kBAAkB;AAEvB,SAAK,UAAU,UAAU,SAAS,QAAQ;AAC1C,SAAK,SAAS;AAEd,SAAK,cAAc,UAAU,SAAS,YAAY;AAClD,SAAK,YAAY,UAAU,SAAS,UAAU;AAE9C,SAAK,YAAY,IAAI,MAAM;AAE3B,SAAK,WAAW;AAChB,SAAK,YAAY,MAAM,QAAS,KAAK,QAAS;AAC9C,WAAO,eAAgB,MAAM,WAAW;AAAA,MACvC,MAAM;AAEL,eAAO,KAAK;AAAA,MAEb;AAAA,MACA,IAAKG,MAAM;AAEV,YAAK,KAAK,aAAaA,KAAM;AAC7B,aAAK,WAAWA;AAChB,YAAK,MAAM,QAASA,IAAI,GAAI;AAE3B,eAAK,YAAY;AACjB,eAAK,YAAY,QAAQ,YAAY;AACrC,eAAK,YAAY,cAAc;AAAA,QAEhC,OAAO;AAEN,eAAK,YAAY;AACjB,eAAK,YAAY,QAAQ,YAAY;AACrC,eAAK,YAAY,cAAc;AAAA,QAEhC;AAAA,MAED;AAAA,IACD,CAAE;AAEF,SAAK,YAAY;AACjB,WAAO,eAAgB,MAAM,YAAY;AAAA,MACxC,MAAM;AAEL,eAAO,KAAK;AAAA,MAEb;AAAA,MACA,IAAKA,MAAM;AAEV,YAAK,KAAK,cAAcA,KAAM;AAC9B,aAAK,YAAYA;AACjB,YAAKA,MAAM;AAEV,eAAK,YAAY,SAAU,UAAW,EAAE,QAAQ,KAAK,iBAAiB;AAAA,QAEvE,OAAO;AAEN,eAAK,YAAY,SAAU,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AAAA,QAEzE;AAAA,MAED;AAAA,IACD,CAAE;AAEF,SAAK,OAAO;AAEZ,SAAK,uBAAuB,UAAU,QAAQ;AAC9C,WAAO,eAAgB,MAAM,uBAAuB;AAAA,MACnD,MAAM;AAEL,eAAO,KAAK;AAAA,MAEb;AAAA,MACA,IAAKA,MAAM;AAEV,YAAK,KAAK,yBAAyBA,KAAM;AACzC,aAAK,uBAAuBA;AAC5B,aAAK,YAAY,QAAQ,uBAAuBA;AAChD,aAAK,YAAY,cAAc;AAAA,MAEhC;AAAA,IACD,CAAE;AAGF,SAAK,WAAW,UAAU,QAAQ;AAClC,WAAO,eAAgB,MAAM,WAAW;AAAA,MACvC,MAAM;AAEL,eAAO,KAAK;AAAA,MAEb;AAAA,MACA,IAAKA,MAAM;AAEV,YAAK,KAAK,aAAaA,KAAM;AAC7B,aAAK,WAAWA;AAChB,aAAK,YAAY,QAAQ,UAAUA;AACnC,aAAK,YAAY,cAAc;AAAA,MAEhC;AAAA,IACD,CAAE;AAEF,SAAK,iBAAiB,UAAU,QAAQ;AACxC,WAAO,eAAgB,MAAM,iBAAiB;AAAA,MAC7C,MAAM;AAEL,eAAO,KAAK;AAAA,MAEb;AAAA,MACA,IAAKA,MAAM;AAEV,YAAK,KAAK,mBAAmBA,KAAM;AACnC,aAAK,iBAAiBA;AACtB,aAAK,YAAY,QAAQ,iBAAiBA;AAC1C,aAAK,YAAY,cAAc;AAAA,MAEhC;AAAA,IACD,CAAE;AAIF,UAAM,eAAe,IAAI,aAAa;AACtC,iBAAa,OAAO;AACpB,iBAAa,YAAY;AACzB,iBAAa,YAAY;AAEzB,SAAK,qBAAqB,IAAI,kBAAmB,KAAK,OAAO,KAAK,QAAQ;AAAA,MACzE,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,MACA,aAAa;AAAA,IACd,CAAE;AAGF,SAAK,mBAAmB,IAAI,kBAAmB,KAAK,OAAO,KAAK,QAAQ;AAAA,MACvE,WAAW;AAAA,MACX,WAAW;AAAA,IACZ,CAAE;AAIF,SAAK,qBAAqB,IAAI,kBAAmB,KAAK,OAAO,KAAK,QAAQ;AAAA,MACzE,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,IACP,CAAE;AAIF,SAAK,wBAAwB,IAAI,kBAAmB,KAAK,OAAO,KAAK,QAAQ;AAAA,MAC5E,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,IACP,CAAE;AAMF,SAAK,kBAAkB,IAAI,kBAAmB,KAAK,OAAO,KAAK,QAAQ;AAAA,MACtE,WAAW;AAAA,MACX,WAAW;AAAA,IACZ,CAAE;AAEF,SAAK,mBAAmB,KAAK,gBAAgB,MAAM;AACnD,SAAK,oBAAoB,KAAK,gBAAgB,MAAM;AAKpD,SAAK,cAAc,IAAI,eAAgB;AAAA,MACtC,SAAS,OAAO,OAAQ,CAAC,GAAG,UAAU,SAAS;AAAA,QAC9C,UAAU,KAAK,KAAM,KAAK,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,MAAO;AAAA,MAC1E,CAAE;AAAA,MACF,UAAU,cAAc,MAAO,UAAU,QAAS;AAAA,MAClD,cAAc,UAAU;AAAA,MACxB,gBAAgB,UAAU;AAAA,MAC1B,UAAU;AAAA,IACX,CAAE;AAEF,SAAK,YAAY,SAAU,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AACxE,SAAK,YAAY,SAAU,SAAU,EAAE,QAAQ,KAAK,mBAAmB;AACvE,SAAK,YAAY,QAAQ,YAAY,KAAK;AAC1C,SAAK,YAAY,cAAc;AAC/B,SAAK,YAAY,SAAU,YAAa,EAAE,QAAQ,KAAK,sBAAsB;AAC7E,SAAK,YAAY,SAAU,QAAS,EAAE,QAAQ,KAAK,mBAAmB;AACtE,SAAK,YAAY,SAAU,YAAa,EAAE,QAAQ,KAAK,OAAO;AAC9D,SAAK,YAAY,SAAU,WAAY,EAAE,QAAQ,KAAK,OAAO;AAC7D,SAAK,YAAY,SAAU,WAAY,EAAE,QAAQ,KAAK;AACtD,SAAK,YAAY,SAAU,YAAa,EAAE,MAAM,IAAK,KAAK,OAAO,KAAK,MAAO;AAC7E,SAAK,YAAY,SAAU,wBAAyB,EAAE,MAAM,KAAM,KAAK,OAAO,gBAAiB;AAC/F,SAAK,YAAY,SAAU,+BAAgC,EAAE,MAAM,KAAM,KAAK,OAAO,uBAAwB;AAI7G,SAAK,iBAAiB,IAAI,mBAAmB;AAC7C,SAAK,eAAe,WAAW;AAI/B,SAAK,sBAAsB,IAAI,kBAAmB;AAAA,MACjD,OAAO;AAAA,IACR,CAAE;AAIF,SAAK,uBAAuB,IAAI,kBAAmB;AAAA,MAClD,OAAO;AAAA,IACR,CAAE;AAIF,SAAK,eAAe,IAAI,eAAgB;AAAA,MACvC,SAAS,OAAO,OAAQ,CAAC,GAAG,cAAc,OAAQ;AAAA,MAClD,UAAU,cAAc,MAAO,cAAc,QAAS;AAAA,MACtD,cAAc,cAAc;AAAA,MAC5B,gBAAgB,cAAc;AAAA,IAC/B,CAAE;AACF,SAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,gBAAgB;AACtE,SAAK,aAAa,SAAU,YAAa,EAAE,MAAM,IAAK,KAAK,OAAO,KAAK,MAAO;AAI9E,SAAK,gBAAgB,IAAI,eAAgB;AAAA,MACxC,SAAS,OAAO,OAAQ,CAAC,GAAG,cAAc,OAAQ;AAAA,MAClD,UAAU,cAAc,MAAO,cAAc,QAAS;AAAA,MACtD,cAAc,cAAc;AAAA,MAC5B,gBAAgB,cAAc;AAAA,IAC/B,CAAE;AACF,SAAK,cAAc,SAAU,UAAW,EAAE,QAAQ,KAAK,iBAAiB;AACxE,SAAK,cAAc,SAAU,YAAa,EAAE,MAAM,IAAK,KAAK,OAAO,KAAK,MAAO;AAe/E,SAAK,sBAAsB,IAAI,eAAgB;AAAA,MAC9C,SAAS,OAAO,OAAQ,CAAC,GAAG,eAAe,OAAQ;AAAA,MACnD,UAAU,cAAc,MAAO,eAAe,QAAS;AAAA,MACvD,cAAc,eAAe;AAAA,MAC7B,gBAAgB,eAAe;AAAA,MAC/B,UAAU;AAAA,IACX,CAAE;AACF,SAAK,oBAAoB,SAAU,QAAS,EAAE,QAAQ,KAAK,mBAAmB;AAC9E,SAAK,oBAAoB,SAAU,YAAa,EAAE,QAAQ,KAAK,OAAO;AACtE,SAAK,oBAAoB,SAAU,WAAY,EAAE,QAAQ,KAAK,OAAO;AAIrE,SAAK,eAAe,IAAI,eAAgB;AAAA,MACvC,UAAU,cAAc,MAAO,WAAW,QAAS;AAAA,MACnD,cAAc,WAAW;AAAA,MACzB,gBAAgB,WAAW;AAAA,MAC3B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,oBAAoB;AAAA;AAAA,IAErB,CAAE;AAEF,SAAK,SAAS,IAAI,eAAgB,IAAK;AAEvC,SAAK,qBAAqB,IAAI,MAAM;AAAA,EAErC;AAAA,EAEA,UAAU;AAIT,SAAK,mBAAmB,QAAQ;AAChC,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,mBAAmB,QAAQ;AAChC,SAAK,sBAAsB,QAAQ;AACnC,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,kBAAkB,QAAQ;AAK/B,SAAK,eAAe,QAAQ;AAC5B,SAAK,oBAAoB,QAAQ;AACjC,SAAK,qBAAqB,QAAQ;AAClC,SAAK,aAAa,QAAQ;AAC1B,SAAK,cAAc,QAAQ;AAC3B,SAAK,aAAa,QAAQ;AAC1B,SAAK,oBAAoB,QAAQ;AAIjC,SAAK,OAAO,QAAQ;AAAA,EAErB;AAAA,EAEA,OAAQH,WAAU,aAAuD;AAIxE,IAAAA,UAAS,gBAAiB,KAAK,kBAAmB;AAClD,IAAAA,UAAS,MAAM;AACf,QAAK,KAAK,iBAAkB;AAE3B,WAAK,gBAAgB,UAAU;AAC/B,WAAK,gBAAgB,SAAU,KAAK,UAAU,KAAK,OAAO,KAAK,MAAO;AACtE,WAAK,gBAAgB,UAAU;AAAA,IAEhC;AAEA,IAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AACzC,QAAK,KAAK,gBAAkB,MAAK,gBAAgB,UAAU;AAI3D,SAAK,eAAgBA,WAAU,KAAK,gBAAgB,KAAK,oBAAoB,GAAG,CAAE;AAIlF,QAAK,KAAK,WAAY;AAErB,WAAK,gBAAiBA,WAAU,KAAK,qBAAqB,KAAK,uBAAuB,GAAG,CAAE;AAAA,IAE5F;AAIA,SAAK,YAAY,SAAU,SAAU,EAAE,QAAQ,KAAK;AACpD,SAAK,YAAY,SAAU,aAAc,EAAE,QAAQ,KAAK;AACxD,SAAK,YAAY,SAAU,WAAY,EAAE,QAAQ,KAAK;AACtD,SAAK,WAAYA,WAAU,KAAK,aAAa,KAAK,eAAgB;AAKlE,QAAK,KAAK,MAAO;AAEhB,WAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,gBAAiB;AACpE,WAAK,WAAYA,WAAU,KAAK,eAAe,KAAK,iBAAkB;AAAA,IAGvE;AAIA,YAAS,KAAK,QAAS;AAAA,MAEtB,KAAK,SAAQ,OAAO;AAEnB,YAAK,KAAK,UAAW;AAEpB,eAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AACzE,eAAK,aAAa,WAAW;AAC7B,eAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,gBAAiB;AAEpE,cAAK,KAAK;AACT,iBAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,kBAAkB;AAAA;AAExE,iBAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,gBAAgB;AACvE,eAAK,aAAa,WAAW;AAC7B,eAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,gBAAiB;AAEpE,eAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,iBAAiB;AACvE,eAAK,aAAa,WAAW;AAC7B,eAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,WAAY;AAAA,QAExF,OAAO;AAEN,eAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AACzE,eAAK,aAAa,WAAW;AAC7B,eAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,WAAY;AAEvF,cAAK,KAAK;AACT,iBAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,kBAAkB;AAAA;AAExE,iBAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,gBAAgB;AACvE,eAAK,aAAa,WAAW;AAC7B,eAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,WAAY;AAAA,QAExF;AAEA;AAAA,MACD,KAAK,SAAQ,OAAO;AAEnB,YAAK,KAAK;AACT,eAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,kBAAkB;AAAA;AAExE,eAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,gBAAgB;AACvE,aAAK,aAAa,WAAW;AAC7B,aAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,WAAY;AAEvF,YAAK,KAAK,UAAW;AAEpB,cAAK,KAAK;AACT,iBAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,kBAAkB;AAAA;AAExE,iBAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AAC1E,eAAK,aAAa,WAAW;AAC7B,eAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,gBAAiB;AAEpE,eAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,gBAAgB;AACtE,eAAK,aAAa,WAAW;AAC7B,eAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,gBAAiB;AAAA,QAErE;AAEA;AAAA,MAED,KAAK,SAAQ,OAAO;AAEnB,aAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AACzE,aAAK,aAAa,WAAW;AAC7B,aAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,WAAY;AAEvF;AAAA,MAED,KAAK,SAAQ,OAAO;AAEnB,aAAK,WAAYA,WAAU,KAAK,qBAAqB,KAAK,iBAAiB,OAAO,WAAY;AAE9F;AAAA,MAED,KAAK,SAAQ,OAAO;AAEnB,aAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AACzE,aAAK,aAAa,WAAW;AAC7B,aAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,WAAY;AAEvF;AAAA,MAED,KAAK,SAAQ,OAAO;AAEnB,aAAK,aAAa,SAAU,UAAW,EAAE,QAAQ,KAAK,sBAAsB;AAC5E,aAAK,aAAa,WAAW;AAC7B,aAAK,WAAYA,WAAU,KAAK,cAAc,KAAK,iBAAiB,OAAO,WAAY;AAEvF;AAAA,MAED;AACC,gBAAQ,KAAM,qCAAsC;AAAA,IAEtD;AAAA,EAED;AAAA,EAEA,WAAYA,WAAU,cAAc,cAAc,YAAY,YAAa;AAG1E,SAAK,mBAAmB,KAAMA,UAAS,cAAe,KAAK,SAAU,CAAE;AACvE,UAAM,qBAAqBA,UAAS,cAAe,KAAK,SAAU;AAClE,UAAM,oBAAoBA,UAAS;AAEnC,IAAAA,UAAS,gBAAiB,YAAa;AAGvC,IAAAA,UAAS,YAAY;AACrB,QAAO,eAAe,UAAiB,eAAe,MAAS;AAE9D,MAAAA,UAAS,cAAe,UAAW;AACnC,MAAAA,UAAS,cAAe,cAAc,CAAI;AAC1C,MAAAA,UAAS,MAAM;AAAA,IAEhB;AAEA,SAAK,OAAO,WAAW;AACvB,SAAK,OAAO,OAAQA,SAAS;AAG7B,IAAAA,UAAS,YAAY;AACrB,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,IAAAA,UAAS,cAAe,kBAAmB;AAAA,EAE5C;AAAA,EAEA,eAAgBA,WAAU,kBAAkB,cAAc,YAAY,YAAa;AAElF,SAAK,mBAAmB,KAAMA,UAAS,cAAe,KAAK,SAAU,CAAE;AACvE,UAAM,qBAAqBA,UAAS,cAAe,KAAK,SAAU;AAClE,UAAM,oBAAoBA,UAAS;AAEnC,IAAAA,UAAS,gBAAiB,YAAa;AACvC,IAAAA,UAAS,YAAY;AAErB,iBAAa,iBAAiB,cAAc;AAC5C,iBAAa,iBAAiB,cAAc;AAE5C,QAAO,eAAe,UAAiB,eAAe,MAAS;AAE9D,MAAAA,UAAS,cAAe,UAAW;AACnC,MAAAA,UAAS,cAAe,cAAc,CAAI;AAC1C,MAAAA,UAAS,MAAM;AAAA,IAEhB;AAEA,SAAK,MAAM,mBAAmB;AAC9B,IAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AACzC,SAAK,MAAM,mBAAmB;AAI9B,IAAAA,UAAS,YAAY;AACrB,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,IAAAA,UAAS,cAAe,kBAAmB;AAAA,EAE5C;AAAA,EAEA,gBAAiBA,WAAU,kBAAkB,cAAc,YAAY,YAAa;AAEnF,SAAK,mBAAmB,KAAMA,UAAS,cAAe,KAAK,SAAU,CAAE;AACvE,UAAM,qBAAqBA,UAAS,cAAe,KAAK,SAAU;AAClE,UAAM,oBAAoBA,UAAS;AAEnC,IAAAA,UAAS,gBAAiB,YAAa;AACvC,IAAAA,UAAS,YAAY;AAErB,iBAAa,iBAAiB,cAAc;AAC5C,iBAAa,iBAAiB,cAAc;AAE5C,QAAO,eAAe,UAAiB,eAAe,MAAS;AAE9D,MAAAA,UAAS,cAAe,UAAW;AACnC,MAAAA,UAAS,cAAe,cAAc,CAAI;AAC1C,MAAAA,UAAS,MAAM;AAAA,IAEhB;AAEA,SAAK,MAAM,gBAAiB,WAAS;AAEpC,YAAM,yBAAyB,MAAM;AACrC,UAAK,KAAK,SAAS,SAAU,KAAM,GAAI;AAEtC,cAAM,WAAW,KAAK;AAAA,MAEvB,OAAO;AAEN,cAAM,WAAW,KAAK;AAAA,MAEvB;AAAA,IAED,CAAE;AACF,IAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AACzC,SAAK,MAAM,gBAAiB,WAAS;AAEpC,YAAM,WAAW,MAAM;AAAA,IAExB,CAAE;AAIF,IAAAA,UAAS,YAAY;AACrB,IAAAA,UAAS,cAAe,KAAK,kBAAmB;AAChD,IAAAA,UAAS,cAAe,kBAAmB;AAAA,EAE5C;AAAA,EAEA,QAASC,QAAOC,SAAS;AAExB,SAAK,QAAQD;AACb,SAAK,SAASC;AAEd,SAAK,YAAY,QAAQ,WAAW,KAAK,KAAMD,SAAQA,SAAQC,UAASA,OAAO;AAC/E,SAAK,YAAY,cAAc;AAC/B,SAAK,mBAAmB,QAASD,QAAOC,OAAO;AAC/C,SAAK,iBAAiB,QAASD,QAAOC,OAAO;AAC7C,SAAK,gBAAgB,QAASD,QAAOC,OAAO;AAC5C,SAAK,mBAAmB,QAASD,QAAOC,OAAO;AAC/C,SAAK,sBAAsB,QAASD,QAAOC,OAAO;AAClD,SAAK,iBAAiB,QAASD,QAAOC,OAAO;AAC7C,SAAK,kBAAkB,QAASD,QAAOC,OAAO;AAG9C,SAAK,YAAY,SAAU,YAAa,EAAE,MAAM,IAAKD,QAAOC,OAAO;AACnE,SAAK,YAAY,SAAU,wBAAyB,EAAE,MAAM,KAAM,KAAK,OAAO,gBAAiB;AAC/F,SAAK,YAAY,SAAU,+BAAgC,EAAE,MAAM,KAAM,KAAK,OAAO,uBAAwB;AAE7G,SAAK,aAAa,SAAU,YAAa,EAAE,MAAM,IAAKD,QAAOC,OAAO;AACpE,SAAK,cAAc,SAAU,YAAa,EAAE,MAAM,IAAKD,QAAOC,OAAO;AAAA,EAEtE;AAED;AAEA,QAAQ,SAAS;AAAA,EAChB,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,aAAa;AACd;;;ACpnBA,IAAM,WAAN,cAAuB,KAAK;AAAA,EAE3B,YAAa,cAAe;AAE3B,UAAM;AAEN,UAAM,SAAS;AAEf,SAAK,YAAY;AAEjB,SAAK,WAAW,cAAc,MAAO,OAAO,QAAS;AAErD,SAAK,WAAW,IAAI,eAAgB;AAAA,MAEnC,UAAU,KAAK;AAAA,MACf,cAAc,OAAO;AAAA,MACrB,gBAAgB,OAAO;AAAA,MACvB,UAAU;AAAA,IAEX,CAAE;AAEF,SAAK,eAAe;AAEpB,QAAK,KAAK,iBAAiB,QAAY;AAEtC,WAAK,eAAe,IAAI,kBAAmB,GAAG,GAAG,EAAE,MAAM,cAAc,CAAE;AACzE,WAAK,aAAa,QAAQ,OAAO;AAAA,IAElC;AAEA,SAAK,YAAY;AAEjB,SAAK,SAAS,IAAI,eAAgB,KAAK,QAAS;AAAA,EAEjD;AAAA,EAEA,OAAQE,WAAU,aAAa,YAAyC;AAEvE,QAAK,KAAK,SAAU,KAAK,SAAU,GAAI;AAEtC,WAAK,SAAU,KAAK,SAAU,EAAE,QAAQ,WAAW;AAAA,IAEpD;AAEA,IAAAA,UAAS,gBAAiB,KAAK,YAAa;AAC5C,QAAK,KAAK,MAAQ,CAAAA,UAAS,MAAM;AACjC,SAAK,OAAO,OAAQA,SAAS;AAAA,EAE9B;AAAA,EAEA,QAASC,QAAOC,SAAS;AAExB,SAAK,aAAa,QAASD,QAAOC,OAAO;AAAA,EAE1C;AAAA,EAEA,UAAU;AAET,SAAK,aAAa,QAAQ;AAE1B,SAAK,SAAS,QAAQ;AAEtB,SAAK,OAAO,QAAQ;AAAA,EAErB;AAED;;;AC1DA,IAAM,gBAAN,cAA4B,eAAe;AAAA,EAE1C,YAAa,OAAO,QAAQ,YAAY,YAAa;AAEpD,UAAO,OAAO,QAAQ,YAAY,UAAW;AAE7C,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,kBAAkB;AAAA,EAExB;AAAA,EAEA,OAAQC,WAAU,aAAa,YAAY,WAAY;AAEtD,QAAK,KAAK,eAAe,OAAQ;AAEhC,YAAM,OAAQA,WAAU,aAAa,YAAY,SAAU;AAE3D,WAAK,kBAAkB;AACvB;AAAA,IAED;AAEA,UAAM,gBAAgBC,gBAAgB,CAAE;AAExC,QAAK,KAAK,uBAAuB,QAAY;AAE5C,WAAK,qBAAqB,IAAI,kBAAmB,WAAW,OAAO,WAAW,QAAQ,EAAE,MAAM,cAAc,CAAE;AAC9G,WAAK,mBAAmB,QAAQ,OAAO;AAAA,IAExC;AAEA,QAAK,KAAK,qBAAqB,QAAY;AAE1C,WAAK,mBAAmB,IAAI,kBAAmB,WAAW,OAAO,WAAW,QAAQ,EAAE,MAAM,cAAc,CAAE;AAC5G,WAAK,iBAAiB,QAAQ,OAAO;AAAA,IAEtC;AAEA,QAAK,KAAK,oBAAoB,IAAM;AAEnC,YAAM,OAAQD,WAAU,KAAK,kBAAkB,YAAY,SAAU;AAErE,WAAK,kBAAkB;AAAA,IAExB;AAEA,UAAM,YAAYA,UAAS;AAC3B,IAAAA,UAAS,YAAY;AAErB,IAAAA,UAAS,cAAe,KAAK,cAAe;AAC5C,UAAM,gBAAgBA,UAAS,cAAc;AAE7C,UAAM,eAAe,IAAQ,cAAc;AAE3C,QAAK,KAAK,mBAAmB,KAAK,KAAK,kBAAkB,cAAc,QAAS;AAE/E,WAAK,aAAc,SAAU,EAAE,QAAQ;AACvC,WAAK,aAAc,UAAW,EAAE,QAAQ,YAAY;AAGpD,YAAM,qBAAqB,KAAK,IAAK,GAAG,KAAK,WAAY;AACzD,eAAU,IAAI,GAAG,IAAI,oBAAoB,KAAO;AAE/C,cAAM,IAAI,KAAK;AACf,cAAM,eAAe,cAAe,CAAE;AAEtC,YAAK,KAAK,OAAO,eAAgB;AAEhC,eAAK,OAAO;AAAA,YAAe,WAAW;AAAA,YAAO,WAAW;AAAA,YACvD,aAAc,CAAE,IAAI;AAAA,YAAQ,aAAc,CAAE,IAAI;AAAA;AAAA,YAChD,WAAW;AAAA,YAAO,WAAW;AAAA,UAAO;AAAA,QAEtC;AAEA,QAAAA,UAAS,gBAAiB,WAAY;AACtC,QAAAA,UAAS,cAAe,KAAK,YAAY,KAAK,UAAW;AACzD,QAAAA,UAAS,MAAM;AACf,QAAAA,UAAS,OAAQ,KAAK,OAAO,KAAK,MAAO;AAEzC,QAAAA,UAAS,gBAAiB,KAAK,kBAAmB;AAClD,YAAK,KAAK,oBAAoB,GAAI;AAEjC,UAAAA,UAAS,cAAe,GAAU,CAAI;AACtC,UAAAA,UAAS,MAAM;AAAA,QAEhB;AAEA,aAAK,OAAO,OAAQA,SAAS;AAE7B,aAAK;AAEL,YAAK,KAAK,mBAAmB,cAAc,OAAS;AAAA,MAErD;AAEA,UAAK,KAAK,OAAO,gBAAkB,MAAK,OAAO,gBAAgB;AAAA,IAEhE;AAEA,IAAAA,UAAS,cAAe,KAAK,YAAY,KAAK,UAAW;AACzD,UAAM,qBAAqB,KAAK,kBAAkB;AAElD,QAAK,qBAAqB,GAAI;AAE7B,WAAK,aAAc,SAAU,EAAE,QAAQ;AACvC,WAAK,aAAc,UAAW,EAAE,QAAQ,KAAK,mBAAmB;AAChE,MAAAA,UAAS,gBAAiB,WAAY;AACtC,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B;AAEA,QAAK,qBAAqB,GAAM;AAE/B,WAAK,aAAc,SAAU,EAAE,QAAQ,IAAM;AAC7C,WAAK,aAAc,UAAW,EAAE,QAAQ,KAAK,iBAAiB;AAC9D,MAAAA,UAAS,gBAAiB,WAAY;AACtC,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B;AAEA,IAAAA,UAAS,YAAY;AACrB,IAAAA,UAAS,cAAe,KAAK,gBAAgB,aAAc;AAAA,EAE5D;AAAA,EAEA,UAAU;AAET,UAAM,QAAQ;AAEd,QAAK,KAAK,iBAAmB,MAAK,iBAAiB,QAAQ;AAAA,EAE5D;AAED;AAEA,IAAMC,kBAAiB;AAAA,EACtB;AAAA,IACC,CAAE,GAAG,CAAE;AAAA,EACR;AAAA,EACA;AAAA,IACC,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,EACtB;AAAA,EACA;AAAA,IACC,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,EAC9C;AAAA,EACA;AAAA,IACC,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAC7C,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,EAC9C;AAAA,EACA;AAAA,IACC,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAC7C,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAC3C,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAC/C,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,EAC9C;AAAA,EACA;AAAA,IACC,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IACrD,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,EAAI;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IACnD,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAC7C,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAAG,CAAE,IAAK,CAAE;AAAA,IAC7C,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAC7C,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAAG,CAAE,GAAG,EAAI;AAAA,IAC7C,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IACrC,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,IAAG,CAAE,GAAG,CAAE;AAAA,EACtC;AACD;;;AClLA,IAAM,cAAN,cAA0B,KAAK;AAAA,EAE9B,YAAaC,MAAK,SAAU;AAE3B,UAAM;AAEN,UAAM,SAAS;AAEf,SAAK,MAAMA;AACX,SAAK,UAAY,YAAY,SAAc,UAAU;AAErD,SAAK,WAAW,cAAc,MAAO,OAAO,QAAS;AAErD,SAAK,WAAW,IAAI,eAAgB;AAAA,MAEnC,UAAU,KAAK;AAAA,MACf,cAAc,OAAO;AAAA,MACrB,gBAAgB,OAAO;AAAA,MACvB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,oBAAoB;AAAA,IAErB,CAAE;AAEF,SAAK,YAAY;AAEjB,SAAK,SAAS,IAAI,eAAgB,IAAK;AAAA,EAExC;AAAA,EAEA,OAAQC,WAAU,aAAa,YAA0C;AAExE,UAAM,eAAeA,UAAS;AAC9B,IAAAA,UAAS,YAAY;AAErB,SAAK,OAAO,WAAW,KAAK;AAE5B,SAAK,SAAU,SAAU,EAAE,QAAQ,KAAK;AACxC,SAAK,SAAU,UAAW,EAAE,QAAQ,KAAK;AACzC,SAAK,SAAS,cAAgB,KAAK,UAAU;AAE7C,IAAAA,UAAS,gBAAiB,KAAK,iBAAiB,OAAO,UAAW;AAClE,QAAK,KAAK,MAAQ,CAAAA,UAAS,MAAM;AACjC,SAAK,OAAO,OAAQA,SAAS;AAE7B,IAAAA,UAAS,YAAY;AAAA,EAEtB;AAAA,EAEA,UAAU;AAET,SAAK,SAAS,QAAQ;AAEtB,SAAK,OAAO,QAAQ;AAAA,EAErB;AAED;;;ACvDA,IAAM,2BAA2B;AAAA,EAEhC,MAAM;AAAA,EAEN,UAAU;AAAA,EAEV,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,uBAAuB,EAAE,OAAO,EAAI;AAAA,IACpC,eAAe,EAAE,OAAO,EAAI;AAAA,IAC5B,gBAAgB,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,IAC/C,kBAAkB,EAAE,OAAO,EAAI;AAAA,EAEhC;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwB3B;;;ACrCA,IAAM,kBAAN,MAAM,yBAAwB,KAAK;AAAA,EAElC,YAAa,YAAY,UAAU,QAAQ,WAAY;AAEtD,UAAM;AAEN,SAAK,WAAa,aAAa,SAAc,WAAW;AACxD,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,aAAe,eAAe,SAAc,IAAI,QAAS,WAAW,GAAG,WAAW,CAAE,IAAI,IAAI,QAAS,KAAK,GAAI;AAGnH,SAAK,aAAa,IAAI,MAAO,GAAG,GAAG,CAAE;AAGrC,SAAK,0BAA0B,CAAC;AAChC,SAAK,wBAAwB,CAAC;AAC9B,SAAK,QAAQ;AACb,QAAI,OAAO,KAAK,MAAO,KAAK,WAAW,IAAI,CAAE;AAC7C,QAAI,OAAO,KAAK,MAAO,KAAK,WAAW,IAAI,CAAE;AAE7C,SAAK,qBAAqB,IAAI,kBAAmB,MAAM,MAAM,EAAE,MAAM,cAAc,CAAE;AACrF,SAAK,mBAAmB,QAAQ,OAAO;AACvC,SAAK,mBAAmB,QAAQ,kBAAkB;AAElD,aAAU,IAAI,GAAG,IAAI,KAAK,OAAO,KAAO;AAEvC,YAAM,yBAAyB,IAAI,kBAAmB,MAAM,MAAM,EAAE,MAAM,cAAc,CAAE;AAE1F,6BAAuB,QAAQ,OAAO,sBAAsB;AAC5D,6BAAuB,QAAQ,kBAAkB;AAEjD,WAAK,wBAAwB,KAAM,sBAAuB;AAE1D,YAAM,uBAAuB,IAAI,kBAAmB,MAAM,MAAM,EAAE,MAAM,cAAc,CAAE;AAExF,2BAAqB,QAAQ,OAAO,sBAAsB;AAC1D,2BAAqB,QAAQ,kBAAkB;AAE/C,WAAK,sBAAsB,KAAM,oBAAqB;AAEtD,aAAO,KAAK,MAAO,OAAO,CAAE;AAE5B,aAAO,KAAK,MAAO,OAAO,CAAE;AAAA,IAE7B;AAIA,UAAM,iBAAiB;AACvB,SAAK,mBAAmB,cAAc,MAAO,eAAe,QAAS;AAErE,SAAK,iBAAkB,qBAAsB,EAAE,QAAQ;AACvD,SAAK,iBAAkB,aAAc,EAAE,QAAQ;AAE/C,SAAK,yBAAyB,IAAI,eAAgB;AAAA,MACjD,UAAU,KAAK;AAAA,MACf,cAAc,eAAe;AAAA,MAC7B,gBAAgB,eAAe;AAAA,IAChC,CAAE;AAIF,SAAK,yBAAyB,CAAC;AAC/B,UAAM,kBAAkB,CAAE,GAAG,GAAG,GAAG,GAAG,EAAG;AACzC,WAAO,KAAK,MAAO,KAAK,WAAW,IAAI,CAAE;AACzC,WAAO,KAAK,MAAO,KAAK,WAAW,IAAI,CAAE;AAEzC,aAAU,IAAI,GAAG,IAAI,KAAK,OAAO,KAAO;AAEvC,WAAK,uBAAuB,KAAM,KAAK,yBAA0B,gBAAiB,CAAE,CAAE,CAAE;AAExF,WAAK,uBAAwB,CAAE,EAAE,SAAU,SAAU,EAAE,QAAQ,IAAI,QAAS,IAAI,MAAM,IAAI,IAAK;AAE/F,aAAO,KAAK,MAAO,OAAO,CAAE;AAE5B,aAAO,KAAK,MAAO,OAAO,CAAE;AAAA,IAE7B;AAIA,SAAK,oBAAoB,KAAK,qBAAsB,KAAK,KAAM;AAC/D,SAAK,kBAAkB,SAAU,cAAe,EAAE,QAAQ,KAAK,sBAAuB,CAAE,EAAE;AAC1F,SAAK,kBAAkB,SAAU,cAAe,EAAE,QAAQ,KAAK,sBAAuB,CAAE,EAAE;AAC1F,SAAK,kBAAkB,SAAU,cAAe,EAAE,QAAQ,KAAK,sBAAuB,CAAE,EAAE;AAC1F,SAAK,kBAAkB,SAAU,cAAe,EAAE,QAAQ,KAAK,sBAAuB,CAAE,EAAE;AAC1F,SAAK,kBAAkB,SAAU,cAAe,EAAE,QAAQ,KAAK,sBAAuB,CAAE,EAAE;AAC1F,SAAK,kBAAkB,SAAU,eAAgB,EAAE,QAAQ;AAC3D,SAAK,kBAAkB,SAAU,aAAc,EAAE,QAAQ;AAEzD,UAAM,eAAe,CAAE,GAAK,KAAK,KAAK,KAAK,GAAI;AAC/C,SAAK,kBAAkB,SAAU,cAAe,EAAE,QAAQ;AAC1D,SAAK,kBAAkB,CAAE,IAAI,QAAS,GAAG,GAAG,CAAE,GAAG,IAAI,QAAS,GAAG,GAAG,CAAE,GAAG,IAAI,QAAS,GAAG,GAAG,CAAE,GAAG,IAAI,QAAS,GAAG,GAAG,CAAE,GAAG,IAAI,QAAS,GAAG,GAAG,CAAE,CAAE;AAChJ,SAAK,kBAAkB,SAAU,iBAAkB,EAAE,QAAQ,KAAK;AAIlE,UAAM,aAAa;AAEnB,SAAK,eAAe,cAAc,MAAO,WAAW,QAAS;AAE7D,SAAK,gBAAgB,IAAI,eAAgB;AAAA,MACxC,UAAU,KAAK;AAAA,MACf,cAAc,WAAW;AAAA,MACzB,gBAAgB,WAAW;AAAA,MAC3B,UAAU;AAAA,MACV,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,aAAa;AAAA,IACd,CAAE;AAEF,SAAK,UAAU;AACf,SAAK,YAAY;AAEjB,SAAK,iBAAiB,IAAI,MAAM;AAChC,SAAK,gBAAgB;AAErB,SAAK,QAAQ,IAAI,kBAAkB;AAEnC,SAAK,SAAS,IAAI,eAAgB,IAAK;AAAA,EAExC;AAAA,EAEA,UAAU;AAET,aAAU,IAAI,GAAG,IAAI,KAAK,wBAAwB,QAAQ,KAAO;AAEhE,WAAK,wBAAyB,CAAE,EAAE,QAAQ;AAAA,IAE3C;AAEA,aAAU,IAAI,GAAG,IAAI,KAAK,sBAAsB,QAAQ,KAAO;AAE9D,WAAK,sBAAuB,CAAE,EAAE,QAAQ;AAAA,IAEzC;AAEA,SAAK,mBAAmB,QAAQ;AAIhC,aAAU,IAAI,GAAG,IAAI,KAAK,uBAAuB,QAAQ,KAAO;AAE/D,WAAK,uBAAwB,CAAE,EAAE,QAAQ;AAAA,IAE1C;AAEA,SAAK,kBAAkB,QAAQ;AAC/B,SAAK,cAAc,QAAQ;AAC3B,SAAK,MAAM,QAAQ;AAInB,SAAK,OAAO,QAAQ;AAAA,EAErB;AAAA,EAEA,QAASC,QAAOC,SAAS;AAExB,QAAI,OAAO,KAAK,MAAOD,SAAQ,CAAE;AACjC,QAAI,OAAO,KAAK,MAAOC,UAAS,CAAE;AAElC,SAAK,mBAAmB,QAAS,MAAM,IAAK;AAE5C,aAAU,IAAI,GAAG,IAAI,KAAK,OAAO,KAAO;AAEvC,WAAK,wBAAyB,CAAE,EAAE,QAAS,MAAM,IAAK;AACtD,WAAK,sBAAuB,CAAE,EAAE,QAAS,MAAM,IAAK;AAEpD,WAAK,uBAAwB,CAAE,EAAE,SAAU,SAAU,EAAE,QAAQ,IAAI,QAAS,IAAI,MAAM,IAAI,IAAK;AAE/F,aAAO,KAAK,MAAO,OAAO,CAAE;AAC5B,aAAO,KAAK,MAAO,OAAO,CAAE;AAAA,IAE7B;AAAA,EAED;AAAA,EAEA,OAAQC,WAAU,aAAa,YAAY,WAAW,YAAa;AAElE,IAAAA,UAAS,cAAe,KAAK,cAAe;AAC5C,SAAK,gBAAgBA,UAAS,cAAc;AAC5C,UAAM,eAAeA,UAAS;AAC9B,IAAAA,UAAS,YAAY;AAErB,IAAAA,UAAS,cAAe,KAAK,YAAY,CAAE;AAE3C,QAAK,WAAa,CAAAA,UAAS,MAAM,QAAQ,QAAQ,QAAS,KAAM;AAIhE,QAAK,KAAK,gBAAiB;AAE1B,WAAK,OAAO,WAAW,KAAK;AAC5B,WAAK,MAAM,MAAM,WAAW;AAE5B,MAAAA,UAAS,gBAAiB,IAAK;AAC/B,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B;AAIA,SAAK,iBAAkB,UAAW,EAAE,QAAQ,WAAW;AACvD,SAAK,iBAAkB,qBAAsB,EAAE,QAAQ,KAAK;AAC5D,SAAK,OAAO,WAAW,KAAK;AAE5B,IAAAA,UAAS,gBAAiB,KAAK,kBAAmB;AAClD,IAAAA,UAAS,MAAM;AACf,SAAK,OAAO,OAAQA,SAAS;AAI7B,QAAI,oBAAoB,KAAK;AAE7B,aAAU,IAAI,GAAG,IAAI,KAAK,OAAO,KAAO;AAEvC,WAAK,OAAO,WAAW,KAAK,uBAAwB,CAAE;AAEtD,WAAK,uBAAwB,CAAE,EAAE,SAAU,cAAe,EAAE,QAAQ,kBAAkB;AACtF,WAAK,uBAAwB,CAAE,EAAE,SAAU,WAAY,EAAE,QAAQ,iBAAgB;AACjF,MAAAA,UAAS,gBAAiB,KAAK,wBAAyB,CAAE,CAAE;AAC5D,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAE7B,WAAK,uBAAwB,CAAE,EAAE,SAAU,cAAe,EAAE,QAAQ,KAAK,wBAAyB,CAAE,EAAE;AACtG,WAAK,uBAAwB,CAAE,EAAE,SAAU,WAAY,EAAE,QAAQ,iBAAgB;AACjF,MAAAA,UAAS,gBAAiB,KAAK,sBAAuB,CAAE,CAAE;AAC1D,MAAAA,UAAS,MAAM;AACf,WAAK,OAAO,OAAQA,SAAS;AAE7B,0BAAoB,KAAK,sBAAuB,CAAE;AAAA,IAEnD;AAIA,SAAK,OAAO,WAAW,KAAK;AAC5B,SAAK,kBAAkB,SAAU,eAAgB,EAAE,QAAQ,KAAK;AAChE,SAAK,kBAAkB,SAAU,aAAc,EAAE,QAAQ,KAAK;AAC9D,SAAK,kBAAkB,SAAU,iBAAkB,EAAE,QAAQ,KAAK;AAElE,IAAAA,UAAS,gBAAiB,KAAK,wBAAyB,CAAE,CAAE;AAC5D,IAAAA,UAAS,MAAM;AACf,SAAK,OAAO,OAAQA,SAAS;AAI7B,SAAK,OAAO,WAAW,KAAK;AAC5B,SAAK,aAAc,UAAW,EAAE,QAAQ,KAAK,wBAAyB,CAAE,EAAE;AAE1E,QAAK,WAAa,CAAAA,UAAS,MAAM,QAAQ,QAAQ,QAAS,IAAK;AAE/D,QAAK,KAAK,gBAAiB;AAE1B,MAAAA,UAAS,gBAAiB,IAAK;AAC/B,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B,OAAO;AAEN,MAAAA,UAAS,gBAAiB,UAAW;AACrC,WAAK,OAAO,OAAQA,SAAS;AAAA,IAE9B;AAIA,IAAAA,UAAS,cAAe,KAAK,gBAAgB,KAAK,aAAc;AAChE,IAAAA,UAAS,YAAY;AAAA,EAEtB;AAAA,EAEA,yBAA0B,cAAe;AAExC,UAAM,eAAe,CAAC;AAEtB,aAAU,IAAI,GAAG,IAAI,cAAc,KAAO;AAEzC,mBAAa,KAAM,UAAU,KAAK,IAAK,OAAQ,IAAI,KAAM,eAAe,aAAe,IAAI,YAAa;AAAA,IAEzG;AAEA,WAAO,IAAI,eAAgB;AAAA,MAE1B,SAAS;AAAA,QACR,iBAAiB;AAAA,MAClB;AAAA,MAEA,UAAU;AAAA,QACT,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,WAAW,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA;AAAA,QAC5C,aAAa,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA,QAC9C,wBAAwB,EAAE,OAAO,aAAa;AAAA;AAAA,MAC/C;AAAA,MAEA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,gBACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBF,CAAE;AAAA,EAEH;AAAA,EAEA,qBAAsB,OAAQ;AAE7B,WAAO,IAAI,eAAgB;AAAA,MAE1B,SAAS;AAAA,QACR,YAAY;AAAA,MACb;AAAA,MAEA,UAAU;AAAA,QACT,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,iBAAiB,EAAE,OAAO,EAAI;AAAA,QAC9B,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,mBAAmB,EAAE,OAAO,KAAK;AAAA,QACjC,eAAe,EAAE,OAAO,EAAI;AAAA,MAC7B;AAAA,MAEA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,gBACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAuBF,CAAE;AAAA,EAEH;AAED;AAEA,gBAAgB,iBAAiB,IAAI,QAAS,GAAK,CAAI;AACvD,gBAAgB,iBAAiB,IAAI,QAAS,GAAK,CAAI;;;ACrZvD,IAAM,cAAN,cAA0B,SAAS;AAAA,EAElC,YAAa,UAAU,SAAS,cAAe,KAAM,GAAI;AAExD,UAAM;AAEN,SAAK,gBAAgB;AAErB,SAAK,UAAU;AAEf,SAAK,QAAQ,MAAM,WAAW;AAC9B,SAAK,QAAQ,MAAM,aAAa;AAEhC,SAAK,QAAQ,aAAc,aAAa,KAAM;AAE9C,SAAK,SAAS,IAAI,QAAS,KAAK,GAAI;AAEpC,SAAK,iBAAkB,WAAW,WAAY;AAE7C,WAAK,SAAU,SAAW,QAAS;AAElC,YAAK,OAAO,mBAAmB,WAAW,OAAO,QAAQ,eAAe,MAAO;AAE9E,iBAAO,QAAQ,WAAW,YAAa,OAAO,OAAQ;AAAA,QAEvD;AAAA,MAED,CAAE;AAAA,IAEH,CAAE;AAAA,EAEH;AAAA,EAEA,KAAM,QAAQ,WAAY;AAEzB,UAAM,KAAM,QAAQ,SAAU;AAE9B,SAAK,UAAU,OAAO,QAAQ,UAAW,IAAK;AAE9C,SAAK,SAAS,OAAO;AAErB,WAAO;AAAA,EAER;AAED;AAIA,IAAMC,WAAU,IAAI,QAAQ;AAC5B,IAAM,cAAc,IAAI,QAAQ;AAChC,IAAM,wBAAwB,IAAI,QAAQ;AAC1C,IAAMC,MAAK,IAAI,QAAQ;AACvB,IAAMC,MAAK,IAAI,QAAQ;AAEvB,IAAM,gBAAN,MAAoB;AAAA,EAEnB,YAAa,aAAa,CAAC,GAAI;AAE9B,UAAM,QAAQ;AAEd,QAAI,QAAQ;AACZ,QAAI,YAAY;AAEhB,UAAM,QAAQ;AAAA,MACb,SAAS,oBAAI,QAAQ;AAAA,IACtB;AAEA,UAAM,aAAa,WAAW,YAAY,SAAY,WAAW,UAAU,SAAS,cAAe,KAAM;AAEzG,eAAW,MAAM,WAAW;AAE5B,SAAK,aAAa;AAElB,SAAK,UAAU,WAAY;AAE1B,aAAO;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAAA,IAED;AAEA,SAAK,SAAS,SAAW,OAAO,QAAS;AAExC,UAAK,MAAM,0BAA0B,KAAO,OAAM,kBAAkB;AACpE,UAAK,OAAO,WAAW,QAAQ,OAAO,0BAA0B,KAAO,QAAO,kBAAkB;AAEhG,kBAAY,KAAM,OAAO,kBAAmB;AAC5C,4BAAsB,iBAAkB,OAAO,kBAAkB,WAAY;AAE7E,mBAAc,OAAO,OAAO,MAAO;AACnC,aAAQ,KAAM;AAAA,IAEf;AAEA,SAAK,UAAU,SAAWC,QAAOC,SAAS;AAEzC,eAASD;AACT,gBAAUC;AAEV,mBAAa,SAAS;AACtB,oBAAc,UAAU;AAExB,iBAAW,MAAM,QAAQD,SAAQ;AACjC,iBAAW,MAAM,SAASC,UAAS;AAAA,IAEpC;AAEA,aAAS,WAAY,QAAS;AAE7B,UAAK,OAAO,cAAgB,QAAO,QAAQ,MAAM,UAAU;AAE3D,eAAU,IAAI,GAAGC,KAAI,OAAO,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAE1D,mBAAY,OAAO,SAAU,CAAE,CAAE;AAAA,MAElC;AAAA,IAED;AAEA,aAAS,aAAc,QAAQ,OAAO,QAAS;AAE9C,UAAK,OAAO,YAAY,OAAQ;AAE/B,mBAAY,MAAO;AAEnB;AAAA,MAED;AAEA,UAAK,OAAO,eAAgB;AAE3B,QAAAL,SAAQ,sBAAuB,OAAO,WAAY;AAClD,QAAAA,SAAQ,aAAc,qBAAsB;AAE5C,cAAM,UAAYA,SAAQ,KAAK,MAAOA,SAAQ,KAAK,KAAS,OAAO,OAAO,KAAM,OAAO,MAAO,MAAM;AAEpG,cAAM,UAAU,OAAO;AACvB,gBAAQ,MAAM,UAAU,YAAY,OAAO,KAAK;AAEhD,YAAK,YAAY,MAAO;AAEvB,iBAAO,eAAgB,OAAO,OAAO,MAAO;AAE5C,kBAAQ,MAAM,YAAY,eAAiB,OAAQ,OAAO,OAAO,IAAM,OAAS,OAAQ,OAAO,OAAO,IAAM,kBAAwBA,SAAQ,IAAI,aAAa,cAAe,SAAU,CAAEA,SAAQ,IAAI,cAAc,eAAgB;AAElO,cAAK,QAAQ,eAAe,YAAa;AAExC,uBAAW,YAAa,OAAQ;AAAA,UAEjC;AAEA,iBAAO,cAAe,OAAO,OAAO,MAAO;AAAA,QAE5C;AAEA,cAAM,aAAa;AAAA,UAClB,yBAAyB,qBAAsB,QAAQ,MAAO;AAAA,QAC/D;AAEA,cAAM,QAAQ,IAAK,QAAQ,UAAW;AAAA,MAEvC;AAEA,eAAU,IAAI,GAAGK,KAAI,OAAO,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAE1D,qBAAc,OAAO,SAAU,CAAE,GAAG,OAAO,MAAO;AAAA,MAEnD;AAAA,IAED;AAEA,aAAS,qBAAsB,SAAS,SAAU;AAEjD,MAAAJ,IAAG,sBAAuB,QAAQ,WAAY;AAC9C,MAAAC,IAAG,sBAAuB,QAAQ,WAAY;AAE9C,aAAOD,IAAG,kBAAmBC,GAAG;AAAA,IAEjC;AAEA,aAAS,iBAAkB,OAAQ;AAElC,YAAM,SAAS,CAAC;AAEhB,YAAM,gBAAiB,SAAW,QAAS;AAE1C,YAAK,OAAO,cAAgB,QAAO,KAAM,MAAO;AAAA,MAEjD,CAAE;AAEF,aAAO;AAAA,IAER;AAEA,aAAS,OAAQ,OAAQ;AAExB,YAAM,SAAS,iBAAkB,KAAM,EAAE,KAAM,SAAWI,IAAGC,IAAI;AAEhE,YAAKD,GAAE,gBAAgBC,GAAE,aAAc;AAEtC,iBAAOA,GAAE,cAAcD,GAAE;AAAA,QAE1B;AAEA,cAAM,YAAY,MAAM,QAAQ,IAAKA,EAAE,EAAE;AACzC,cAAM,YAAY,MAAM,QAAQ,IAAKC,EAAE,EAAE;AAEzC,eAAO,YAAY;AAAA,MAEpB,CAAE;AAEF,YAAM,OAAO,OAAO;AAEpB,eAAU,IAAI,GAAGF,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,eAAQ,CAAE,EAAE,QAAQ,MAAM,SAAS,OAAO;AAAA,MAE3C;AAAA,IAED;AAAA,EAED;AAED;;;AC7NA,IAAMG,aAAY,IAAI,QAAQ;AAC9B,IAAMC,eAAc,IAAI,WAAW;AACnC,IAAMC,UAAS,IAAI,QAAQ;AAE3B,IAAM,cAAN,cAA0B,SAAS;AAAA,EAElC,YAAa,UAAU,SAAS,cAAe,KAAM,GAAI;AAExD,UAAM;AAEN,SAAK,gBAAgB;AAErB,SAAK,UAAU;AACf,SAAK,QAAQ,MAAM,WAAW;AAC9B,SAAK,QAAQ,MAAM,gBAAgB;AACnC,SAAK,QAAQ,MAAM,aAAa;AAEhC,SAAK,QAAQ,aAAc,aAAa,KAAM;AAE9C,SAAK,iBAAkB,WAAW,WAAY;AAE7C,WAAK,SAAU,SAAW,QAAS;AAElC,YAAK,OAAO,mBAAmB,WAAW,OAAO,QAAQ,eAAe,MAAO;AAE9E,iBAAO,QAAQ,WAAW,YAAa,OAAO,OAAQ;AAAA,QAEvD;AAAA,MAED,CAAE;AAAA,IAEH,CAAE;AAAA,EAEH;AAAA,EAEA,KAAM,QAAQ,WAAY;AAEzB,UAAM,KAAM,QAAQ,SAAU;AAE9B,SAAK,UAAU,OAAO,QAAQ,UAAW,IAAK;AAE9C,WAAO;AAAA,EAER;AAED;AAEA,IAAM,cAAN,cAA0B,YAAY;AAAA,EAErC,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAEf,SAAK,gBAAgB;AAErB,SAAK,aAAa;AAAA,EAEnB;AAAA,EAEA,KAAM,QAAQ,WAAY;AAEzB,UAAM,KAAM,QAAQ,SAAU;AAE9B,SAAK,aAAa,OAAO;AAEzB,WAAO;AAAA,EAER;AAED;AAIA,IAAMC,WAAU,IAAI,QAAQ;AAC5B,IAAMC,YAAW,IAAI,QAAQ;AAE7B,IAAM,gBAAN,MAAoB;AAAA,EAEnB,YAAa,aAAa,CAAC,GAAI;AAE9B,UAAM,QAAQ;AAEd,QAAI,QAAQ;AACZ,QAAI,YAAY;AAEhB,UAAM,QAAQ;AAAA,MACb,QAAQ,EAAE,OAAO,GAAG;AAAA,MACpB,SAAS,oBAAI,QAAQ;AAAA,IACtB;AAEA,UAAM,aAAa,WAAW,YAAY,SAAY,WAAW,UAAU,SAAS,cAAe,KAAM;AAEzG,eAAW,MAAM,WAAW;AAE5B,SAAK,aAAa;AAElB,UAAM,cAAc,SAAS,cAAe,KAAM;AAClD,gBAAY,MAAM,kBAAkB;AACpC,gBAAY,MAAM,gBAAgB;AAClC,eAAW,YAAa,WAAY;AAEpC,UAAM,gBAAgB,SAAS,cAAe,KAAM;AAEpD,kBAAc,MAAM,iBAAiB;AAErC,gBAAY,YAAa,aAAc;AAEvC,SAAK,UAAU,WAAY;AAE1B,aAAO;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAAA,IAED;AAEA,SAAK,SAAS,SAAW,OAAO,QAAS;AAExC,YAAM,MAAM,OAAO,iBAAiB,SAAU,CAAE,IAAI;AAEpD,UAAK,OAAO,QAAQ,OAAO,KAAK,SAAU;AAGzC,oBAAY,MAAM,YAAY,cAAe,CAAE,OAAO,KAAK,WAAY,SAAS,OAAO,KAAK,MAAQ,OAAQ,CAAE,OAAO,KAAK,WAAY,UAAU,OAAO,KAAK,OAAS;AAGrK,oBAAY,MAAM,aAAa,UAAW,OAAO,KAAK,YAAY,OAAO,KAAK,KAAM,KAAM,OAAO,KAAK,aAAa,OAAO,KAAK,MAAO;AAAA,MAEvI,OAAO;AAEN,oBAAY,MAAM,YAAY;AAAA,MAE/B;AAEA,UAAK,MAAM,0BAA0B,KAAO,OAAM,kBAAkB;AACpE,UAAK,OAAO,WAAW,QAAQ,OAAO,0BAA0B,KAAO,QAAO,kBAAkB;AAEhG,UAAI,IAAI;AAER,UAAK,OAAO,sBAAuB;AAElC,aAAK,EAAI,OAAO,QAAQ,OAAO,QAAS;AACxC,cAAO,OAAO,MAAM,OAAO,UAAW;AAAA,MAEvC;AAEA,YAAM,oBAAoB,OAAO,QAAQ,OAAO,KAAK,UAAU,OAAO,KAAK,SAAS,OAAO,KAAK,aAAa;AAC7G,YAAM,kBAAkB,OAAO,uBAC9B,UAAW,iBAAkB,aAAkB,MAAM,gBAAqB,QAAS,EAAG,IAAI,QAAQ,QAAS,EAAG,IAAI,QAAQ,mBAAoB,OAAO,kBAAmB,IACxK,UAAW,iBAAkB,kBAAuB,MAAM,QAAQ,mBAAoB,OAAO,kBAAmB;AACjH,YAAM,cAAc,OAAO,sBAAsB,iBAAiB,MAAM,SAAS;AAEjF,YAAM,QAAQ,cAAc,kBAC3B,eAAe,aAAa,QAAQ,cAAc;AAEnD,UAAK,MAAM,OAAO,UAAU,OAAQ;AAEnC,sBAAc,MAAM,YAAY;AAEhC,cAAM,OAAO,QAAQ;AAAA,MAEtB;AAEA,mBAAc,OAAO,OAAO,QAAQ,eAAgB;AAAA,IAErD;AAEA,SAAK,UAAU,SAAWC,QAAOC,SAAS;AAEzC,eAASD;AACT,gBAAUC;AACV,mBAAa,SAAS;AACtB,oBAAc,UAAU;AAExB,iBAAW,MAAM,QAAQD,SAAQ;AACjC,iBAAW,MAAM,SAASC,UAAS;AAEnC,kBAAY,MAAM,QAAQD,SAAQ;AAClC,kBAAY,MAAM,SAASC,UAAS;AAEpC,oBAAc,MAAM,QAAQD,SAAQ;AACpC,oBAAc,MAAM,SAASC,UAAS;AAAA,IAEvC;AAEA,aAAS,QAASC,QAAQ;AAEzB,aAAO,KAAK,IAAKA,MAAM,IAAI,QAAQ,IAAIA;AAAA,IAExC;AAEA,aAAS,mBAAoBC,SAAS;AAErC,YAAM,WAAWA,QAAO;AAExB,aAAO,cACN,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,CAAE,SAAU,CAAE,CAAE,IAAI,MAC7B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,CAAE,SAAU,CAAE,CAAE,IAAI,MAC7B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,CAAE,SAAU,CAAE,CAAE,IAAI,MAC7B,QAAS,SAAU,EAAG,CAAE,IAAI,MAC5B,QAAS,SAAU,EAAG,CAAE,IAAI,MAC5B,QAAS,SAAU,EAAG,CAAE,IAAI,MAC5B,QAAS,CAAE,SAAU,EAAG,CAAE,IAAI,MAC9B,QAAS,SAAU,EAAG,CAAE,IAAI,MAC5B,QAAS,SAAU,EAAG,CAAE,IACzB;AAAA,IAED;AAEA,aAAS,mBAAoBA,SAAS;AAErC,YAAM,WAAWA,QAAO;AACxB,YAAM,WAAW,cAChB,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,CAAE,SAAU,CAAE,CAAE,IAAI,MAC7B,QAAS,CAAE,SAAU,CAAE,CAAE,IAAI,MAC7B,QAAS,CAAE,SAAU,CAAE,CAAE,IAAI,MAC7B,QAAS,CAAE,SAAU,CAAE,CAAE,IAAI,MAC7B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,SAAU,CAAE,CAAE,IAAI,MAC3B,QAAS,SAAU,EAAG,CAAE,IAAI,MAC5B,QAAS,SAAU,EAAG,CAAE,IAAI,MAC5B,QAAS,SAAU,EAAG,CAAE,IAAI,MAC5B,QAAS,SAAU,EAAG,CAAE,IAAI,MAC5B,QAAS,SAAU,EAAG,CAAE,IAAI,MAC5B,QAAS,SAAU,EAAG,CAAE,IACzB;AAEA,aAAO,yBAAyB;AAAA,IAEjC;AAEA,aAAS,WAAY,QAAS;AAE7B,UAAK,OAAO,cAAgB,QAAO,QAAQ,MAAM,UAAU;AAE3D,eAAU,IAAI,GAAGC,KAAI,OAAO,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEzD,mBAAY,OAAO,SAAU,CAAE,CAAE;AAAA,MAEnC;AAAA,IAED;AAEA,aAAS,aAAc,QAAQ,OAAO,QAAQ,iBAAkB;AAE/D,UAAK,OAAO,YAAY,OAAQ;AAE/B,mBAAY,MAAO;AAEnB;AAAA,MAED;AAEA,UAAK,OAAO,eAAgB;AAE3B,cAAM,UAAY,OAAO,OAAO,KAAM,OAAO,MAAO,MAAM;AAE1D,cAAM,UAAU,OAAO;AACvB,gBAAQ,MAAM,UAAU,YAAY,OAAO,KAAK;AAEhD,YAAK,YAAY,MAAO;AAEvB,iBAAO,eAAgB,OAAO,OAAO,MAAO;AAE5C,cAAI;AAEJ,cAAK,OAAO,eAAgB;AAI3B,YAAAN,SAAQ,KAAM,OAAO,kBAAmB;AACxC,YAAAA,SAAQ,UAAU;AAElB,gBAAK,OAAO,eAAe,EAAI,CAAAA,SAAQ,SAAUC,UAAS,cAAe,OAAO,UAAW,CAAE;AAE7F,mBAAO,YAAY,UAAWJ,YAAWC,cAAaC,OAAO;AAC7D,YAAAC,SAAQ,YAAaH,UAAU;AAC/B,YAAAG,SAAQ,MAAOD,OAAO;AAEtB,YAAAC,SAAQ,SAAU,CAAE,IAAI;AACxB,YAAAA,SAAQ,SAAU,CAAE,IAAI;AACxB,YAAAA,SAAQ,SAAU,EAAG,IAAI;AACzB,YAAAA,SAAQ,SAAU,EAAG,IAAI;AAEzB,oBAAQ,mBAAoBA,QAAQ;AAAA,UAErC,OAAO;AAEN,oBAAQ,mBAAoB,OAAO,WAAY;AAAA,UAEhD;AAEA,gBAAM,eAAe,MAAM,QAAQ,IAAK,MAAO;AAE/C,cAAK,iBAAiB,UAAa,aAAa,UAAU,OAAQ;AAEjE,oBAAQ,MAAM,YAAY;AAE1B,kBAAM,aAAa,EAAE,MAAa;AAClC,kBAAM,QAAQ,IAAK,QAAQ,UAAW;AAAA,UAEvC;AAEA,cAAK,QAAQ,eAAe,eAAgB;AAE3C,0BAAc,YAAa,OAAQ;AAAA,UAEpC;AAEA,iBAAO,cAAe,OAAO,OAAO,MAAO;AAAA,QAE5C;AAAA,MAED;AAEA,eAAU,IAAI,GAAGM,KAAI,OAAO,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAE1D,qBAAc,OAAO,SAAU,CAAE,GAAG,OAAO,QAAQ,eAAgB;AAAA,MAEpE;AAAA,IAED;AAAA,EAED;AAED;;;AC/UA,IAAM,mBAAN,MAAuB;AAAA,EAEtB,cAAc;AAEb,SAAK,KAAK;AAEV,SAAK,SAAS;AACd,SAAK,IAAI;AACT,SAAK,cAAc;AAAA,EAEpB;AAED;AAIA,IAAM,iBAAN,MAAqB;AAAA,EAEpB,cAAc;AAEb,SAAK,KAAK;AAEV,SAAK,KAAK,IAAI,iBAAiB;AAC/B,SAAK,KAAK,IAAI,iBAAiB;AAC/B,SAAK,KAAK,IAAI,iBAAiB;AAE/B,SAAK,cAAc,IAAI,QAAQ;AAE/B,SAAK,qBAAqB,CAAE,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,CAAE;AACxE,SAAK,sBAAsB;AAE3B,SAAK,QAAQ,IAAI,MAAM;AACvB,SAAK,WAAW;AAChB,SAAK,MAAM,CAAE,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,CAAE;AAEzD,SAAK,IAAI;AACT,SAAK,cAAc;AAAA,EAEpB;AAED;AAIA,IAAM,mBAAN,MAAuB;AAAA,EAEtB,cAAc;AAEb,SAAK,WAAW,IAAI,QAAQ;AAC5B,SAAK,gBAAgB,IAAI,QAAQ;AACjC,SAAK,iBAAiB,IAAI,QAAQ;AAElC,SAAK,UAAU;AAAA,EAEhB;AAAA,EAEA,KAAM,QAAS;AAEd,SAAK,cAAc,KAAM,OAAO,aAAc;AAC9C,SAAK,eAAe,KAAM,OAAO,cAAe;AAAA,EAEjD;AAED;AAIA,IAAM,iBAAN,MAAqB;AAAA,EAEpB,cAAc;AAEb,SAAK,KAAK;AAEV,SAAK,KAAK,IAAI,iBAAiB;AAC/B,SAAK,KAAK,IAAI,iBAAiB;AAE/B,SAAK,eAAe,CAAE,IAAI,MAAM,GAAG,IAAI,MAAM,CAAE;AAC/C,SAAK,WAAW;AAEhB,SAAK,IAAI;AACT,SAAK,cAAc;AAAA,EAEpB;AAED;AAIA,IAAM,mBAAN,MAAuB;AAAA,EAEtB,cAAc;AAEb,SAAK,KAAK;AAEV,SAAK,SAAS;AAEd,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,IAAI;AAET,SAAK,WAAW;AAChB,SAAK,QAAQ,IAAI,QAAQ;AAEzB,SAAK,WAAW;AAChB,SAAK,cAAc;AAAA,EAEpB;AAED;AAIA,IAAM,YAAN,MAAgB;AAAA,EAEf,cAAc;AAEb,QAAI,SAAS,cAAc,oBAAoB,GAC9C,SAAS,cAAc,oBAAoB,GAC3CC,QAAO,YAAY,kBAAkB,GACrCC,QAAO,YAAY,kBAAkB,GACrC,SAAS,cAAc,oBAAoB,GAC3C;AAED,UAEC,cAAc,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,GAAG,UAAU,CAAC,EAAE,GAEtDC,YAAW,IAAI,QAAQ,GACvBC,YAAW,IAAI,QAAQ,GAEvB,WAAW,IAAI,KAAM,IAAI,QAAS,IAAK,IAAK,EAAI,GAAG,IAAI,QAAS,GAAG,GAAG,CAAE,CAAE,GAC1E,eAAe,IAAI,KAAK,GACxB,WAAW,IAAI,MAAO,CAAE,GAExBC,eAAc,IAAI,QAAQ,GAC1BC,yBAAwB,IAAI,QAAQ,GAEpC,6BAA6B,IAAI,QAAQ,GAEzCC,YAAW,IAAI,QAAQ,GAEvB,cAAc,CAAC,GAAG,cAAc,CAAC,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC,GAAG,cAAc,CAAC;AAIpF,aAAS,aAAa;AAErB,YAAM,UAAU,CAAC;AACjB,YAAM,SAAS,CAAC;AAChB,YAAM,MAAM,CAAC;AAEb,UAAI,SAAS;AAEb,YAAM,eAAe,IAAI,QAAQ;AAEjC,eAAS,UAAWC,QAAQ;AAE3B,iBAASA;AAET,qBAAa,gBAAiB,OAAO,WAAY;AAEjD,gBAAQ,SAAS;AACjB,eAAO,SAAS;AAChB,YAAI,SAAS;AAAA,MAEd;AAEA,eAAS,cAAe,QAAS;AAEhC,cAAMC,YAAW,OAAO;AACxB,cAAM,gBAAgB,OAAO;AAC7B,cAAM,iBAAiB,OAAO;AAE9B,sBAAc,KAAMA,SAAS,EAAE,aAAc,YAAa;AAC1D,uBAAe,KAAM,aAAc,EAAE,aAAcH,sBAAsB;AAEzE,cAAM,OAAO,IAAI,eAAe;AAEhC,uBAAe,KAAK;AACpB,uBAAe,KAAK;AACpB,uBAAe,KAAK;AAEpB,eAAO,UAAU,eAAe,KAAK,MAAO,eAAe,KAAK,KAC7D,eAAe,KAAK,MAAO,eAAe,KAAK,KAC/C,eAAe,KAAK,MAAO,eAAe,KAAK;AAAA,MAEnD;AAEA,eAAS,WAAYI,IAAGC,IAAG,GAAI;AAE9B,kBAAU,oBAAoB;AAC9B,gBAAQ,SAAS,IAAKD,IAAGC,IAAG,CAAE;AAE9B,sBAAe,OAAQ;AAAA,MAExB;AAEA,eAAS,WAAYD,IAAGC,IAAG,GAAI;AAE9B,gBAAQ,KAAMD,IAAGC,IAAG,CAAE;AAAA,MAEvB;AAEA,eAAS,UAAW,GAAGC,IAAGC,IAAI;AAE7B,eAAO,KAAM,GAAGD,IAAGC,EAAE;AAAA,MAEtB;AAEA,eAAS,OAAQH,IAAGC,IAAI;AAEvB,YAAI,KAAMD,IAAGC,EAAE;AAAA,MAEhB;AAEA,eAAS,wBAAyBG,KAAI,IAAI,IAAK;AAE9C,YAAKA,IAAG,YAAY,QAAQ,GAAG,YAAY,QAAQ,GAAG,YAAY,KAAO,QAAO;AAEhF,iBAAU,CAAE,IAAIA,IAAG;AACnB,iBAAU,CAAE,IAAI,GAAG;AACnB,iBAAU,CAAE,IAAI,GAAG;AAEnB,eAAO,SAAS,cAAe,aAAa,cAAe,QAAS,CAAE;AAAA,MAEvE;AAEA,eAAS,qBAAsBA,KAAI,IAAI,IAAK;AAE3C,gBAAW,GAAG,eAAe,IAAIA,IAAG,eAAe,MAC5C,GAAG,eAAe,IAAIA,IAAG,eAAe,MACxC,GAAG,eAAe,IAAIA,IAAG,eAAe,MACxC,GAAG,eAAe,IAAIA,IAAG,eAAe,KAAQ;AAAA,MAExD;AAEA,eAAS,SAAUC,IAAGF,IAAI;AAEzB,cAAMC,MAAK,YAAaC,EAAE;AAC1B,cAAM,KAAK,YAAaF,EAAE;AAI1B,QAAAC,IAAG,eAAe,KAAMA,IAAG,QAAS,EAAE,aAAc,0BAA2B;AAC/E,WAAG,eAAe,KAAM,GAAG,QAAS,EAAE,aAAc,0BAA2B;AAE/E,YAAK,SAAUA,IAAG,gBAAgB,GAAG,cAAe,MAAM,MAAO;AAGhE,UAAAA,IAAG,eAAe,eAAgB,IAAIA,IAAG,eAAe,CAAE;AAC1D,aAAG,eAAe,eAAgB,IAAI,GAAG,eAAe,CAAE;AAE1D,UAAAZ,SAAQ,kBAAkB;AAC1B,UAAAA,OAAM,KAAK,OAAO;AAClB,UAAAA,OAAM,GAAG,KAAMY,GAAG;AAClB,UAAAZ,OAAM,GAAG,KAAM,EAAG;AAClB,UAAAA,OAAM,IAAI,KAAK,IAAKY,IAAG,eAAe,GAAG,GAAG,eAAe,CAAE;AAC7D,UAAAZ,OAAM,cAAc,OAAO;AAE3B,UAAAA,OAAM,WAAW,OAAO;AAExB,cAAK,OAAO,SAAS,cAAe;AAEnC,YAAAA,OAAM,aAAc,CAAE,EAAE,UAAW,QAAQa,KAAI,CAAE;AACjD,YAAAb,OAAM,aAAc,CAAE,EAAE,UAAW,QAAQW,KAAI,CAAE;AAAA,UAElD;AAEA,sBAAY,SAAS,KAAMX,MAAM;AAAA,QAElC;AAAA,MAED;AAEA,eAAS,aAAca,IAAGF,IAAGG,IAAG,UAAW;AAE1C,cAAMF,MAAK,YAAaC,EAAE;AAC1B,cAAM,KAAK,YAAaF,EAAE;AAC1B,cAAM,KAAK,YAAaG,EAAE;AAE1B,YAAK,wBAAyBF,KAAI,IAAI,EAAG,MAAM,MAAQ;AAEvD,YAAK,SAAS,SAAS,cAAc,qBAAsBA,KAAI,IAAI,EAAG,MAAM,MAAO;AAElF,UAAAb,SAAQ,kBAAkB;AAE1B,UAAAA,OAAM,KAAK,OAAO;AAClB,UAAAA,OAAM,GAAG,KAAMa,GAAG;AAClB,UAAAb,OAAM,GAAG,KAAM,EAAG;AAClB,UAAAA,OAAM,GAAG,KAAM,EAAG;AAClB,UAAAA,OAAM,KAAMa,IAAG,eAAe,IAAI,GAAG,eAAe,IAAI,GAAG,eAAe,KAAM;AAChF,UAAAb,OAAM,cAAc,OAAO;AAG3B,UAAAE,UAAS,WAAY,GAAG,UAAU,GAAG,QAAS;AAC9C,UAAAC,UAAS,WAAYU,IAAG,UAAU,GAAG,QAAS;AAC9C,UAAAX,UAAS,MAAOC,SAAS;AACzB,UAAAH,OAAM,YAAY,KAAME,SAAS;AACjC,UAAAF,OAAM,YAAY,aAAc,YAAa,EAAE,UAAU;AAEzD,mBAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,kBAAM,SAASA,OAAM,mBAAoB,CAAE;AAC3C,mBAAO,UAAW,SAAS,UAAW,CAAE,IAAI,CAAE;AAC9C,mBAAO,aAAc,YAAa,EAAE,UAAU;AAE9C,kBAAM,KAAKA,OAAM,IAAK,CAAE;AACxB,eAAG,UAAW,KAAK,UAAW,CAAE,IAAI,CAAE;AAAA,UAEvC;AAEA,UAAAA,OAAM,sBAAsB;AAE5B,UAAAA,OAAM,WAAW;AAEjB,cAAK,SAAS,cAAe;AAE5B,YAAAA,OAAM,MAAM,UAAW,QAAQc,KAAI,CAAE;AAAA,UAEtC;AAEA,sBAAY,SAAS,KAAMd,MAAM;AAAA,QAElC;AAAA,MAED;AAEA,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IAED;AAEA,UAAM,aAAa,IAAI,WAAW;AAElC,aAAS,cAAe,QAAS;AAEhC,UAAK,OAAO,YAAY,MAAQ;AAEhC,UAAK,OAAO,SAAU;AAErB,oBAAY,OAAO,KAAM,MAAO;AAAA,MAEjC,WAAY,OAAO,UAAU,OAAO,UAAU,OAAO,UAAW;AAE/D,YAAK,OAAO,SAAS,YAAY,MAAQ;AACzC,YAAK,OAAO,kBAAkB,QAAQM,UAAS,iBAAkB,MAAO,MAAM,MAAQ;AAEtF,kBAAW,MAAO;AAAA,MAEnB,WAAY,OAAO,UAAW;AAE7B,YAAK,OAAO,SAAS,YAAY,MAAQ;AACzC,YAAK,OAAO,kBAAkB,QAAQA,UAAS,iBAAkB,MAAO,MAAM,MAAQ;AAEtF,kBAAW,MAAO;AAAA,MAEnB;AAEA,YAAM,WAAW,OAAO;AAExB,eAAU,IAAI,GAAGU,KAAI,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEnD,sBAAe,SAAU,CAAE,CAAE;AAAA,MAE9B;AAAA,IAED;AAEA,aAAS,UAAW,QAAS;AAE5B,gBAAU,oBAAoB;AAC9B,cAAQ,KAAK,OAAO;AACpB,cAAQ,SAAS;AAEjB,MAAAd,UAAS,sBAAuB,OAAO,WAAY;AACnD,MAAAA,UAAS,aAAcG,sBAAsB;AAC7C,cAAQ,IAAIH,UAAS;AACrB,cAAQ,cAAc,OAAO;AAE7B,kBAAY,QAAQ,KAAM,OAAQ;AAAA,IAEnC;AAEA,SAAK,eAAe,SAAW,OAAO,QAAQ,aAAa,cAAe;AAEzE,mBAAa;AACb,mBAAa;AACb,qBAAe;AAEf,kBAAY,SAAS,SAAS;AAE9B,UAAK,MAAM,0BAA0B,KAAO,OAAM,kBAAkB;AACpE,UAAK,OAAO,WAAW,QAAQ,OAAO,0BAA0B,KAAO,QAAO,kBAAkB;AAEhG,MAAAE,aAAY,KAAM,OAAO,kBAAmB;AAC5C,MAAAC,uBAAsB,iBAAkB,OAAO,kBAAkBD,YAAY;AAE7E,MAAAE,UAAS,wBAAyBD,sBAAsB;AAIxD,qBAAe;AAEf,kBAAY,QAAQ,SAAS;AAC7B,kBAAY,OAAO,SAAS;AAE5B,oBAAe,KAAM;AAErB,UAAK,gBAAgB,MAAO;AAE3B,oBAAY,QAAQ,KAAM,WAAY;AAAA,MAEvC;AAIA,YAAM,UAAU,YAAY;AAE5B,eAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAO;AAEpD,cAAM,SAAS,QAAS,CAAE,EAAE;AAC5B,cAAM,WAAW,OAAO;AAExB,mBAAW,UAAW,MAAO;AAE7B,uBAAe,OAAO;AAEtB,uBAAe;AAEf,YAAK,OAAO,QAAS;AAEpB,cAAI,WAAW,OAAO;AAEtB,gBAAM,kBAAkB,MAAM,QAAS,QAAS;AAEhD,gBAAM,aAAa,SAAS;AAC5B,gBAAM,SAAS,SAAS;AAExB,cAAK,WAAW,aAAa,OAAY;AAEzC,gBAAM,YAAY,WAAW,SAAS;AAEtC,mBAAU,IAAI,GAAGW,KAAI,UAAU,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEtD,gBAAIP,KAAI,UAAW,CAAE;AACrB,gBAAIC,KAAI,UAAW,IAAI,CAAE;AACzB,gBAAI,IAAI,UAAW,IAAI,CAAE;AAEzB,kBAAM,eAAe,SAAS,gBAAgB;AAE9C,gBAAK,iBAAiB,QAAY;AAEjC,oBAAM,uBAAuB,SAAS;AACtC,oBAAM,kBAAkB,OAAO;AAE/B,uBAAUO,KAAI,GAAG,KAAK,aAAa,QAAQA,KAAI,IAAIA,MAAO;AAEzD,sBAAM,YAAY,gBAAiBA,EAAE;AAErC,oBAAK,cAAc,EAAI;AAEvB,sBAAM,SAAS,aAAcA,EAAE;AAE/B,oBAAK,sBAAuB;AAE3B,kBAAAR,MAAK,OAAO,KAAM,IAAI,CAAE,IAAI;AAC5B,kBAAAC,MAAK,OAAO,KAAM,IAAI,CAAE,IAAI;AAC5B,uBAAK,OAAO,KAAM,IAAI,CAAE,IAAI;AAAA,gBAE7B,OAAO;AAEN,kBAAAD,OAAO,OAAO,KAAM,IAAI,CAAE,IAAI,UAAW,CAAE,KAAM;AACjD,kBAAAC,OAAO,OAAO,KAAM,IAAI,CAAE,IAAI,UAAW,IAAI,CAAE,KAAM;AACrD,wBAAO,OAAO,KAAM,IAAI,CAAE,IAAI,UAAW,IAAI,CAAE,KAAM;AAAA,gBAEtD;AAAA,cAED;AAAA,YAED;AAEA,uBAAW,WAAYD,IAAGC,IAAG,CAAE;AAAA,UAEhC;AAEA,cAAK,WAAW,WAAW,QAAY;AAEtC,kBAAM,UAAU,WAAW,OAAO;AAElC,qBAAU,IAAI,GAAGM,KAAI,QAAQ,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEpD,yBAAW,WAAY,QAAS,CAAE,GAAG,QAAS,IAAI,CAAE,GAAG,QAAS,IAAI,CAAE,CAAE;AAAA,YAEzE;AAAA,UAED;AAEA,cAAK,WAAW,UAAU,QAAY;AAErC,kBAAM,SAAS,WAAW,MAAM;AAEhC,qBAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEnD,yBAAW,UAAW,OAAQ,CAAE,GAAG,OAAQ,IAAI,CAAE,GAAG,OAAQ,IAAI,CAAE,CAAE;AAAA,YAErE;AAAA,UAED;AAEA,cAAK,WAAW,OAAO,QAAY;AAElC,kBAAM,MAAM,WAAW,GAAG;AAE1B,qBAAU,IAAI,GAAGA,KAAI,IAAI,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEhD,yBAAW,OAAQ,IAAK,CAAE,GAAG,IAAK,IAAI,CAAE,CAAE;AAAA,YAE3C;AAAA,UAED;AAEA,cAAK,SAAS,UAAU,MAAO;AAE9B,kBAAM,UAAU,SAAS,MAAM;AAE/B,gBAAK,OAAO,SAAS,GAAI;AAExB,uBAAUL,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAO;AAE1C,sBAAM,QAAQ,OAAQA,EAAE;AAExB,2BAAW,oBAAoB,OAC3B,OAAO,SAAU,MAAM,aAAc,IACrC,OAAO;AAEX,oBAAK,aAAa,OAAY;AAE9B,yBAAU,IAAI,MAAM,OAAOK,KAAI,MAAM,QAAQ,MAAM,OAAO,IAAIA,IAAG,KAAK,GAAI;AAEzE,6BAAW,aAAc,QAAS,CAAE,GAAG,QAAS,IAAI,CAAE,GAAG,QAAS,IAAI,CAAE,GAAG,QAAS;AAAA,gBAErF;AAAA,cAED;AAAA,YAED,OAAO;AAEN,uBAAU,IAAI,GAAGA,KAAI,QAAQ,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEpD,2BAAW,aAAc,QAAS,CAAE,GAAG,QAAS,IAAI,CAAE,GAAG,QAAS,IAAI,CAAE,GAAG,QAAS;AAAA,cAErF;AAAA,YAED;AAAA,UAED,OAAO;AAEN,gBAAK,OAAO,SAAS,GAAI;AAExB,uBAAUL,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAO;AAE1C,sBAAM,QAAQ,OAAQA,EAAE;AAExB,2BAAW,oBAAoB,OAC3B,OAAO,SAAU,MAAM,aAAc,IACrC,OAAO;AAEX,oBAAK,aAAa,OAAY;AAE9B,yBAAU,IAAI,MAAM,OAAOK,KAAI,MAAM,QAAQ,MAAM,OAAO,IAAIA,IAAG,KAAK,GAAI;AAEzE,6BAAW,aAAc,GAAG,IAAI,GAAG,IAAI,GAAG,QAAS;AAAA,gBAEpD;AAAA,cAED;AAAA,YAED,OAAO;AAEN,uBAAU,IAAI,GAAGA,KAAI,UAAU,SAAS,GAAG,IAAIA,IAAG,KAAK,GAAI;AAE1D,2BAAW,aAAc,GAAG,IAAI,GAAG,IAAI,GAAG,QAAS;AAAA,cAEpD;AAAA,YAED;AAAA,UAED;AAAA,QAED,WAAY,OAAO,QAAS;AAE3B,qCAA2B,iBAAkBX,wBAAuB,YAAa;AAEjF,gBAAM,aAAa,SAAS;AAE5B,cAAK,WAAW,aAAa,QAAY;AAExC,kBAAM,YAAY,WAAW,SAAS;AAEtC,qBAAU,IAAI,GAAGW,KAAI,UAAU,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEtD,yBAAW,WAAY,UAAW,CAAE,GAAG,UAAW,IAAI,CAAE,GAAG,UAAW,IAAI,CAAE,CAAE;AAAA,YAE/E;AAEA,gBAAK,WAAW,UAAU,QAAY;AAErC,oBAAM,SAAS,WAAW,MAAM;AAEhC,uBAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEnD,2BAAW,UAAW,OAAQ,CAAE,GAAG,OAAQ,IAAI,CAAE,GAAG,OAAQ,IAAI,CAAE,CAAE;AAAA,cAErE;AAAA,YAED;AAEA,gBAAK,SAAS,UAAU,MAAO;AAE9B,oBAAM,UAAU,SAAS,MAAM;AAE/B,uBAAU,IAAI,GAAGA,KAAI,QAAQ,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEpD,2BAAW,SAAU,QAAS,CAAE,GAAG,QAAS,IAAI,CAAE,CAAE;AAAA,cAErD;AAAA,YAED,OAAO;AAEN,oBAAM,OAAO,OAAO,iBAAiB,IAAI;AAEzC,uBAAU,IAAI,GAAGA,KAAM,UAAU,SAAS,IAAM,GAAG,IAAIA,IAAG,KAAK,MAAO;AAErE,2BAAW,SAAU,GAAG,IAAI,CAAE;AAAA,cAE/B;AAAA,YAED;AAAA,UAED;AAAA,QAED,WAAY,OAAO,UAAW;AAE7B,qCAA2B,iBAAkBX,wBAAuB,YAAa;AAEjF,gBAAM,aAAa,SAAS;AAE5B,cAAK,WAAW,aAAa,QAAY;AAExC,kBAAM,YAAY,WAAW,SAAS;AAEtC,qBAAU,IAAI,GAAGW,KAAI,UAAU,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEtD,cAAAb,UAAS,IAAK,UAAW,CAAE,GAAG,UAAW,IAAI,CAAE,GAAG,UAAW,IAAI,CAAE,GAAG,CAAE;AACxE,cAAAA,UAAS,aAAc,0BAA2B;AAElD,wBAAWA,WAAU,QAAQ,MAAO;AAAA,YAErC;AAAA,UAED;AAAA,QAED,WAAY,OAAO,UAAW;AAE7B,iBAAO,gBAAgB,iBAAkB,OAAO,oBAAoB,OAAO,WAAY;AACvF,UAAAA,UAAS,IAAK,aAAa,SAAU,EAAG,GAAG,aAAa,SAAU,EAAG,GAAG,aAAa,SAAU,EAAG,GAAG,CAAE;AACvG,UAAAA,UAAS,aAAcE,sBAAsB;AAE7C,oBAAWF,WAAU,QAAQ,MAAO;AAAA,QAErC;AAAA,MAED;AAEA,UAAK,iBAAiB,MAAO;AAE5B,oBAAY,SAAS,KAAM,WAAY;AAAA,MAExC;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,UAAWA,WAAU,QAAQ,QAAS;AAE9C,YAAM,OAAO,IAAIA,UAAS;AAE1B,MAAAA,UAAS,KAAK;AAEd,UAAKA,UAAS,KAAK,MAAOA,UAAS,KAAK,GAAI;AAE3C,kBAAU,oBAAoB;AAC9B,gBAAQ,KAAK,OAAO;AACpB,gBAAQ,IAAIA,UAAS,IAAI;AACzB,gBAAQ,IAAIA,UAAS,IAAI;AACzB,gBAAQ,IAAIA,UAAS;AACrB,gBAAQ,cAAc,OAAO;AAC7B,gBAAQ,SAAS;AAEjB,gBAAQ,WAAW,OAAO;AAE1B,gBAAQ,MAAM,IAAI,OAAO,MAAM,IAAI,KAAK,IAAK,QAAQ,KAAMA,UAAS,IAAI,OAAO,iBAAiB,SAAU,CAAE,MAAQA,UAAS,IAAI,OAAO,iBAAiB,SAAU,EAAG,EAAI;AAC1K,gBAAQ,MAAM,IAAI,OAAO,MAAM,IAAI,KAAK,IAAK,QAAQ,KAAMA,UAAS,IAAI,OAAO,iBAAiB,SAAU,CAAE,MAAQA,UAAS,IAAI,OAAO,iBAAiB,SAAU,EAAG,EAAI;AAE1K,gBAAQ,WAAW,OAAO;AAE1B,oBAAY,SAAS,KAAM,OAAQ;AAAA,MAEpC;AAAA,IAED;AAIA,aAAS,sBAAsB;AAE9B,UAAK,iBAAiB,mBAAoB;AAEzC,cAAM,SAAS,IAAI,iBAAiB;AACpC,oBAAY,KAAM,MAAO;AACzB;AACA;AACA,eAAO;AAAA,MAER;AAEA,aAAO,YAAa,cAAgB;AAAA,IAErC;AAEA,aAAS,sBAAsB;AAE9B,UAAK,iBAAiB,mBAAoB;AAEzC,cAAM,SAAS,IAAI,iBAAiB;AACpC,oBAAY,KAAM,MAAO;AACzB;AACA;AACA,eAAO;AAAA,MAER;AAEA,aAAO,YAAa,cAAgB;AAAA,IAErC;AAEA,aAAS,oBAAoB;AAE5B,UAAK,eAAe,iBAAkB;AAErC,cAAM,OAAO,IAAI,eAAe;AAChC,kBAAU,KAAM,IAAK;AACrB;AACA;AACA,eAAO;AAAA,MAER;AAEA,aAAO,UAAW,YAAc;AAAA,IAGjC;AAEA,aAAS,oBAAoB;AAE5B,UAAK,eAAe,iBAAkB;AAErC,cAAMe,QAAO,IAAI,eAAe;AAChC,kBAAU,KAAMA,KAAK;AACrB;AACA;AACA,eAAOA;AAAA,MAER;AAEA,aAAO,UAAW,YAAc;AAAA,IAEjC;AAEA,aAAS,sBAAsB;AAE9B,UAAK,iBAAiB,mBAAoB;AAEzC,cAAM,SAAS,IAAI,iBAAiB;AACpC,oBAAY,KAAM,MAAO;AACzB;AACA;AACA,eAAO;AAAA,MAER;AAEA,aAAO,YAAa,cAAgB;AAAA,IAErC;AAIA,aAAS,YAAaJ,IAAGF,IAAI;AAE5B,UAAKE,GAAE,gBAAgBF,GAAE,aAAc;AAEtC,eAAOE,GAAE,cAAcF,GAAE;AAAA,MAE1B,WAAYE,GAAE,MAAMF,GAAE,GAAI;AAEzB,eAAOA,GAAE,IAAIE,GAAE;AAAA,MAEhB,WAAYA,GAAE,OAAOF,GAAE,IAAK;AAE3B,eAAOE,GAAE,KAAKF,GAAE;AAAA,MAEjB,OAAO;AAEN,eAAO;AAAA,MAER;AAAA,IAED;AAEA,aAAS,SAAU,IAAI,IAAK;AAE3B,UAAI,SAAS,GAAG,SAAS;AAKzB,YAAM,UAAU,GAAG,IAAI,GAAG,GACzB,UAAU,GAAG,IAAI,GAAG,GACpB,SAAS,CAAE,GAAG,IAAI,GAAG,GACrB,SAAS,CAAE,GAAG,IAAI,GAAG;AAEtB,UAAK,WAAW,KAAK,WAAW,KAAK,UAAU,KAAK,UAAU,GAAI;AAGjE,eAAO;AAAA,MAER,WAAc,UAAU,KAAK,UAAU,KAAS,SAAS,KAAK,SAAS,GAAM;AAG5E,eAAO;AAAA,MAER,OAAO;AAIN,YAAK,UAAU,GAAI;AAGlB,mBAAS,KAAK,IAAK,QAAQ,WAAY,UAAU,QAAU;AAAA,QAE5D,WAAY,UAAU,GAAI;AAGzB,mBAAS,KAAK,IAAK,QAAQ,WAAY,UAAU,QAAU;AAAA,QAE5D;AAEA,YAAK,SAAS,GAAI;AAGjB,mBAAS,KAAK,IAAK,QAAQ,UAAW,SAAS,OAAS;AAAA,QAEzD,WAAY,SAAS,GAAI;AAGxB,mBAAS,KAAK,IAAK,QAAQ,UAAW,SAAS,OAAS;AAAA,QAEzD;AAEA,YAAK,SAAS,QAAS;AAKtB,iBAAO;AAAA,QAER,OAAO;AAGN,aAAG,KAAM,IAAI,MAAO;AACpB,aAAG,KAAM,IAAI,IAAI,MAAO;AAExB,iBAAO;AAAA,QAER;AAAA,MAED;AAAA,IAED;AAAA,EAED;AAED;;;ACp4BA,IAAM,YAAN,cAAwB,SAAS;AAAA,EAEhC,YAAa,MAAO;AAEnB,UAAM;AAEN,SAAK,cAAc;AAEnB,SAAK,OAAO;AAAA,EAEb;AAED;AAEA,IAAMO,eAAN,MAAkB;AAAA,EAEjB,cAAc;AAEb,QAAI,aAAa,WAAW,SAC3B,WAAW,YAAY,eAAe,gBAEtCC,MAAKC,MAAKC,MAEV,UACA,aAAa,GAEb,aAAa,MACb,WAAW,GAEX,cAAc;AAEf,UAAM,QAAQ,MACb,WAAW,IAAI,KAAK,GACpB,WAAW,IAAI,KAAK,GAEpBC,UAAS,IAAI,MAAM,GACnB,gBAAgB,IAAI,MAAM,GAC1B,gBAAgB,IAAI,MAAM,GAC1B,qBAAqB,IAAI,MAAM,GAC/B,eAAe,IAAI,MAAM,GACzB,cAAc,IAAI,MAAM,GAExBC,YAAW,IAAI,QAAQ,GACvB,YAAY,IAAI,QAAQ,GACxB,UAAU,IAAI,QAAQ,GACtB,oBAAoB,IAAI,QAAQ,GAEhCC,eAAc,IAAI,QAAQ,GAC1BC,yBAAwB,IAAI,QAAQ,GAEpC,eAAe,CAAC,GAEhB,aAAa,IAAI,UAAU,GAC3B,OAAO,SAAS,gBAAiB,8BAA8B,KAAM;AAEtE,SAAK,aAAa;AAElB,SAAK,YAAY;AACjB,SAAK,cAAc;AACnB,SAAK,eAAe;AAEpB,SAAK,WAAW;AAEhB,SAAK,mBAAmB;AAExB,SAAK,OAAO;AAAA,MAEX,QAAQ;AAAA,QAEP,UAAU;AAAA,QACV,OAAO;AAAA,MAER;AAAA,IAED;AAEA,SAAK,aAAa,SAAW,SAAU;AAEtC,cAAS,SAAU;AAAA,QAElB,KAAK;AAAQ,qBAAW;AAAG;AAAA,QAC3B,KAAK;AAAO,qBAAW;AAAG;AAAA,MAE3B;AAAA,IAED;AAEA,SAAK,gBAAgB,SAAW,OAAQ;AAEvC,kBAAY,IAAK,KAAM;AAAA,IAExB;AAEA,SAAK,gBAAgB,WAAY;AAAA,IAAC;AAElC,SAAK,UAAU,SAAWC,QAAOC,SAAS;AAEzC,kBAAYD;AAAO,mBAAaC;AAChC,sBAAgB,YAAY;AAAG,uBAAiB,aAAa;AAE7D,WAAK,aAAc,WAAa,CAAE,gBAAkB,MAAQ,CAAE,iBAAmB,MAAM,YAAY,MAAM,UAAW;AACpH,WAAK,aAAc,SAAS,SAAU;AACtC,WAAK,aAAc,UAAU,UAAW;AAExC,eAAS,IAAI,IAAK,CAAE,eAAe,CAAE,cAAe;AACpD,eAAS,IAAI,IAAK,eAAe,cAAe;AAAA,IAEjD;AAEA,SAAK,UAAU,WAAY;AAE1B,aAAO;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAAA,IAED;AAEA,SAAK,eAAe,SAAW,WAAY;AAE1C,mBAAa;AAAA,IAEd;AAEA,aAAS,mBAAmB;AAE3B,mBAAa;AAEb,aAAQ,KAAK,WAAW,SAAS,GAAI;AAEpC,aAAK,YAAa,KAAK,WAAY,CAAE,CAAE;AAAA,MAExC;AAAA,IAED;AAEA,aAAS,QAASC,IAAI;AAErB,aAAO,eAAe,OAAOA,GAAE,QAAS,UAAW,IAAIA;AAAA,IAExD;AAEA,SAAK,QAAQ,WAAY;AAExB,uBAAiB;AACjB,WAAK,MAAM,kBAAkB,YAAY,SAAU,MAAM,gBAAiB;AAAA,IAE3E;AAEA,SAAK,SAAS,SAAW,OAAO,QAAS;AAExC,UAAK,kBAAkB,WAAW,OAAQ;AAEzC,gBAAQ,MAAO,gEAAiE;AAChF;AAAA,MAED;AAEA,YAAM,aAAa,MAAM;AAEzB,UAAK,cAAc,WAAW,SAAU;AAEvC,yBAAiB;AACjB,aAAK,MAAM,kBAAkB,WAAW,SAAU,MAAM,gBAAiB;AAAA,MAE1E,WAAY,KAAK,cAAc,MAAO;AAErC,aAAK,MAAM;AAAA,MAEZ;AAEA,YAAM,KAAK,OAAO,WAAW;AAC7B,YAAM,KAAK,OAAO,QAAQ;AAE1B,MAAAJ,aAAY,KAAM,OAAO,kBAAmB;AAC5C,MAAAC,uBAAsB,iBAAkB,OAAO,kBAAkBD,YAAY;AAE7E,oBAAc,WAAW,aAAc,OAAO,QAAQ,KAAK,aAAa,KAAK,YAAa;AAC1F,kBAAY,YAAY;AACxB,gBAAU,YAAY;AAEtB,wBAAkB,gBAAiB,OAAO,kBAAmB;AAE7D,sBAAiB,OAAQ;AAIzB,qBAAe;AACf,sBAAgB;AAEhB,eAAU,IAAI,GAAG,KAAK,UAAU,QAAQ,IAAI,IAAI,KAAO;AAEtD,cAAM,UAAU,UAAW,CAAE;AAC7B,cAAM,WAAW,QAAQ;AAEzB,YAAK,aAAa,UAAa,SAAS,YAAY,EAAI;AAExD,iBAAS,UAAU;AAEnB,YAAK,mBAAmB,kBAAmB;AAE1C,UAAAL,OAAM;AACN,UAAAA,KAAI,KAAK;AAAe,UAAAA,KAAI,KAAK,CAAE;AAEnC,uBAAcA,MAAK,SAAS,QAAS;AAAA,QAEtC,WAAY,mBAAmB,gBAAiB;AAE/C,UAAAA,OAAM,QAAQ;AAAI,UAAAC,OAAM,QAAQ;AAEhC,UAAAD,KAAI,eAAe,KAAK;AAAe,UAAAA,KAAI,eAAe,KAAK,CAAE;AACjE,UAAAC,KAAI,eAAe,KAAK;AAAe,UAAAA,KAAI,eAAe,KAAK,CAAE;AAEjE,mBAAS,cAAe,CAAED,KAAI,gBAAgBC,KAAI,cAAe,CAAE;AAEnE,cAAK,SAAS,cAAe,QAAS,MAAM,MAAO;AAElD,uBAAYD,MAAKC,MAAK,QAAS;AAAA,UAEhC;AAAA,QAED,WAAY,mBAAmB,gBAAiB;AAE/C,UAAAD,OAAM,QAAQ;AAAI,UAAAC,OAAM,QAAQ;AAAI,UAAAC,OAAM,QAAQ;AAElD,cAAKF,KAAI,eAAe,IAAI,MAAOA,KAAI,eAAe,IAAI,EAAI;AAC9D,cAAKC,KAAI,eAAe,IAAI,MAAOA,KAAI,eAAe,IAAI,EAAI;AAC9D,cAAKC,KAAI,eAAe,IAAI,MAAOA,KAAI,eAAe,IAAI,EAAI;AAE9D,UAAAF,KAAI,eAAe,KAAK;AAAe,UAAAA,KAAI,eAAe,KAAK,CAAE;AACjE,UAAAC,KAAI,eAAe,KAAK;AAAe,UAAAA,KAAI,eAAe,KAAK,CAAE;AACjE,UAAAC,KAAI,eAAe,KAAK;AAAe,UAAAA,KAAI,eAAe,KAAK,CAAE;AAEjE,cAAK,KAAK,WAAW,GAAI;AAExB,mBAAQF,KAAI,gBAAgBC,KAAI,gBAAgB,KAAK,QAAS;AAC9D,mBAAQA,KAAI,gBAAgBC,KAAI,gBAAgB,KAAK,QAAS;AAC9D,mBAAQA,KAAI,gBAAgBF,KAAI,gBAAgB,KAAK,QAAS;AAAA,UAE/D;AAEA,mBAAS,cAAe;AAAA,YACvBA,KAAI;AAAA,YACJC,KAAI;AAAA,YACJC,KAAI;AAAA,UACL,CAAE;AAEF,cAAK,SAAS,cAAe,QAAS,MAAM,MAAO;AAElD,wBAAaF,MAAKC,MAAKC,MAAK,SAAS,QAAS;AAAA,UAE/C;AAAA,QAED;AAAA,MAED;AAEA,gBAAU;AAEV,YAAM,gBAAiB,SAAW,QAAS;AAEzC,YAAK,OAAO,aAAc;AAE1B,UAAAE,UAAS,sBAAuB,OAAO,WAAY;AACnD,UAAAA,UAAS,aAAcE,sBAAsB;AAE7C,cAAKF,UAAS,IAAI,MAAOA,UAAS,IAAI,EAAI;AAE1C,gBAAMM,KAAIN,UAAS,IAAI;AACvB,gBAAMO,KAAI,CAAEP,UAAS,IAAI;AAEzB,gBAAM,OAAO,OAAO;AACpB,eAAK,aAAc,aAAa,eAAeM,KAAI,MAAMC,KAAI,GAAI;AAEjE,eAAK,YAAa,IAAK;AAAA,QAExB;AAAA,MAED,CAAE;AAAA,IAEH;AAEA,aAAS,gBAAiB,QAAS;AAElC,oBAAc,OAAQ,GAAG,GAAG,CAAE;AAC9B,yBAAmB,OAAQ,GAAG,GAAG,CAAE;AACnC,mBAAa,OAAQ,GAAG,GAAG,CAAE;AAE7B,eAAUC,KAAI,GAAG,KAAK,OAAO,QAAQA,KAAI,IAAIA,MAAO;AAEnD,cAAM,QAAQ,OAAQA,EAAE;AACxB,cAAM,aAAa,MAAM;AAEzB,YAAK,MAAM,gBAAiB;AAE3B,wBAAc,KAAK,WAAW;AAC9B,wBAAc,KAAK,WAAW;AAC9B,wBAAc,KAAK,WAAW;AAAA,QAE/B,WAAY,MAAM,oBAAqB;AAEtC,6BAAmB,KAAK,WAAW;AACnC,6BAAmB,KAAK,WAAW;AACnC,6BAAmB,KAAK,WAAW;AAAA,QAEpC,WAAY,MAAM,cAAe;AAEhC,uBAAa,KAAK,WAAW;AAC7B,uBAAa,KAAK,WAAW;AAC7B,uBAAa,KAAK,WAAW;AAAA,QAE9B;AAAA,MAED;AAAA,IAED;AAEA,aAAS,eAAgB,QAAQC,WAAU,QAAQ,OAAQ;AAE1D,eAAUD,KAAI,GAAG,KAAK,OAAO,QAAQA,KAAI,IAAIA,MAAO;AAEnD,cAAM,QAAQ,OAAQA,EAAE;AACxB,cAAM,aAAa,MAAM;AAEzB,YAAK,MAAM,oBAAqB;AAE/B,gBAAM,gBAAgBR,UAAS,sBAAuB,MAAM,WAAY,EAAE,UAAU;AAEpF,cAAI,SAAS,OAAO,IAAK,aAAc;AAEvC,cAAK,UAAU,EAAI;AAEnB,oBAAU,MAAM;AAEhB,gBAAM,KAAK,WAAW,IAAI;AAC1B,gBAAM,KAAK,WAAW,IAAI;AAC1B,gBAAM,KAAK,WAAW,IAAI;AAAA,QAE3B,WAAY,MAAM,cAAe;AAEhC,gBAAM,gBAAgBA,UAAS,sBAAuB,MAAM,WAAY;AAExE,cAAI,SAAS,OAAO,IAAKA,UAAS,WAAY,eAAeS,SAAS,EAAE,UAAU,CAAE;AAEpF,cAAK,UAAU,EAAI;AAEnB,oBAAU,MAAM,YAAY,IAAI,IAAI,IAAI,KAAK,IAAKA,UAAS,WAAY,aAAc,IAAI,MAAM,UAAU,CAAE;AAE3G,cAAK,UAAU,EAAI;AAEnB,oBAAU,MAAM;AAEhB,gBAAM,KAAK,WAAW,IAAI;AAC1B,gBAAM,KAAK,WAAW,IAAI;AAC1B,gBAAM,KAAK,WAAW,IAAI;AAAA,QAE3B;AAAA,MAED;AAAA,IAED;AAEA,aAAS,aAAcC,KAAI,SAAS,UAAW;AAE9C,UAAI,SAAS,QAAQ,MAAM,IAAI;AAC/B,UAAI,SAAS,QAAQ,MAAM,IAAI;AAE/B,UAAK,SAAS,kBAAmB;AAEhC,kBAAU,SAAS;AACnB,kBAAU,SAAS;AAAA,MAEpB;AAEA,YAAM,OAAO,MAAM,QAASA,IAAG,IAAI,SAAS,GAAI,IAAI,MAAM,QAASA,IAAG,IAAI,SAAS,GAAI,IAAI,MAAM,QAAS,MAAO,IAAI,MAAM,QAAS,MAAO,IAAI,MAAM,QAAS,CAAE,MAAO,IAAI;AAC3K,UAAI,QAAQ;AAEZ,UAAK,SAAS,oBAAoB,SAAS,kBAAmB;AAE7D,gBAAQ,UAAU,SAAS,MAAM,SAAU,MAAM,gBAAiB,IAAI,mBAAmB,SAAS;AAAA,MAEnG;AAEA,cAAS,OAAO,IAAK;AAAA,IAEtB;AAEA,aAAS,WAAYA,KAAI,IAAI,UAAW;AAEvC,YAAM,OAAO,MAAM,QAASA,IAAG,eAAe,CAAE,IAAI,MAAM,QAASA,IAAG,eAAe,CAAE,IAAI,MAAM,QAAS,GAAG,eAAe,CAAE,IAAI,MAAM,QAAS,GAAG,eAAe,CAAE;AAErK,UAAK,SAAS,qBAAsB;AAEnC,YAAI,QAAQ,sBAAsB,SAAS,MAAM,SAAU,MAAM,gBAAiB,IAAI,qBAAqB,SAAS,UAAU,mBAAmB,SAAS,YAAY,qBAAqB,SAAS;AAEpM,YAAK,SAAS,sBAAuB;AAEpC,kBAAQ,QAAQ,uBAAuB,SAAS,WAAW,MAAM,SAAS;AAAA,QAE3E;AAEA,gBAAS,OAAO,IAAK;AAAA,MAEtB;AAAA,IAED;AAEA,aAAS,YAAaA,KAAI,IAAI,IAAI,SAAS,UAAW;AAErD,YAAM,KAAK,OAAO,YAAY;AAC9B,YAAM,KAAK,OAAO;AAElB,YAAM,OAAO,MAAM,QAASA,IAAG,eAAe,CAAE,IAAI,MAAM,QAASA,IAAG,eAAe,CAAE,IAAI,MAAM,QAAS,GAAG,eAAe,CAAE,IAAI,MAAM,QAAS,GAAG,eAAe,CAAE,IAAI,MAAM,QAAS,GAAG,eAAe,CAAE,IAAI,MAAM,QAAS,GAAG,eAAe,CAAE,IAAI;AACvP,UAAI,QAAQ;AAEZ,UAAK,SAAS,qBAAsB;AAEnC,QAAAX,QAAO,KAAM,SAAS,KAAM;AAE5B,YAAK,SAAS,cAAe;AAE5B,UAAAA,QAAO,SAAU,QAAQ,KAAM;AAAA,QAEhC;AAAA,MAED,WAAY,SAAS,yBAAyB,SAAS,uBAAuB,SAAS,wBAAyB;AAE/G,sBAAc,KAAM,SAAS,KAAM;AAEnC,YAAK,SAAS,cAAe;AAE5B,wBAAc,SAAU,QAAQ,KAAM;AAAA,QAEvC;AAEA,QAAAA,QAAO,KAAM,aAAc;AAE3B,kBAAU,KAAMW,IAAG,aAAc,EAAE,IAAK,GAAG,aAAc,EAAE,IAAK,GAAG,aAAc,EAAE,aAAc,CAAE;AAEnG,uBAAgB,SAAS,WAAW,QAAQ,aAAaX,OAAO;AAEhE,QAAAA,QAAO,SAAU,aAAc,EAAE,IAAK,SAAS,QAAS;AAAA,MAEzD,WAAY,SAAS,sBAAuB;AAE3C,gBAAQ,KAAM,QAAQ,WAAY,EAAE,aAAc,iBAAkB,EAAE,UAAU;AAEhF,QAAAA,QAAO,OAAQ,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAE,EAAE,eAAgB,GAAI,EAAE,UAAW,GAAI;AAAA,MAEvF;AAEA,UAAK,SAAS,WAAY;AAEzB,gBAAQ,sBAAsBA,QAAO,SAAU,MAAM,gBAAiB,IAAI,qBAAqB,SAAS,UAAU,mBAAmB,SAAS,qBAAqB,qBAAqB,SAAS,mBAAmB,sBAAsB,SAAS;AAAA,MAEpP,OAAO;AAEN,gBAAQ,UAAUA,QAAO,SAAU,MAAM,gBAAiB,IAAI,mBAAmB,SAAS;AAAA,MAE3F;AAEA,cAAS,OAAO,IAAK;AAAA,IAEtB;AAIA,aAAS,OAAQW,KAAI,IAAI,QAAS;AAEjC,UAAIJ,KAAI,GAAG,IAAII,IAAG,GAAGH,KAAI,GAAG,IAAIG,IAAG;AACnC,YAAM,MAAMJ,KAAIA,KAAIC,KAAIA;AAExB,UAAK,QAAQ,EAAI;AAEjB,YAAM,OAAO,SAAS,KAAK,KAAM,GAAI;AAErC,MAAAD,MAAK;AAAM,MAAAC,MAAK;AAEhB,SAAG,KAAKD;AAAG,SAAG,KAAKC;AACnB,MAAAG,IAAG,KAAKJ;AAAG,MAAAI,IAAG,KAAKH;AAAA,IAEpB;AAEA,aAAS,QAAS,OAAO,MAAO;AAE/B,UAAK,kBAAkB,OAAQ;AAE9B,wBAAgB;AAAA,MAEjB,OAAO;AAEN,kBAAU;AAEV,wBAAgB;AAChB,uBAAe;AAAA,MAEhB;AAAA,IAED;AAEA,aAAS,YAAY;AAEpB,UAAK,cAAe;AAEnB,mBAAW,YAAa,YAAc;AACtC,iBAAS,aAAc,KAAK,YAAa;AACzC,iBAAS,aAAc,SAAS,aAAc;AAC9C,aAAK,YAAa,QAAS;AAAA,MAE5B;AAEA,qBAAe;AACf,sBAAgB;AAAA,IAEjB;AAEA,aAAS,YAAa,IAAK;AAE1B,UAAK,aAAc,EAAG,KAAK,MAAO;AAEjC,qBAAc,EAAG,IAAI,SAAS,gBAAiB,8BAA8B,MAAO;AAEpF,YAAK,YAAY,GAAI;AAEpB,uBAAc,EAAG,EAAE,aAAc,mBAAmB,YAAa;AAAA,QAElE;AAEA,eAAO,aAAc,EAAG;AAAA,MAEzB;AAEA,aAAO,aAAc,EAAG;AAAA,IAEzB;AAAA,EAED;AAED;;;ACjiBA,IAAM,8BAA8B;AAAA,EAEnC,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,YAAY,EAAE,OAAO,EAAI;AAAA,EAE1B;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwD3B;;;AClFA,IAAM,cAAc;AAAA,EAEnB,MAAM;AAAA,EAEN,UAAU,CAAC;AAAA,EAEX;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ3B;;;ACpBA,IAAM,qBAAqB;AAAA,EAE1B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,WAAW,EAAE,OAAO,EAAI;AAAA,EAEzB;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+B3B;;;ACvDA,IAAM,cAAc;AAAA,EAEnB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,aAAa,EAAE,OAAO,KAAK;AAAA,IAC3B,aAAa,EAAE,OAAO,KAAK;AAAA,IAC3B,YAAY,EAAE,OAAO,IAAI;AAAA,IACzB,WAAW,EAAE,OAAO,EAAI;AAAA,EAEzB;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkB3B;;;ACvCA,IAAM,2BAA2B;AAAA,EAEhC,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,cAAc,EAAE,OAAO,EAAE;AAAA,IACzB,YAAY,EAAE,OAAO,EAAE;AAAA,EAExB;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsB3B;;;AC7CA,IAAM,wBAAwB;AAAA,EAE7B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,UAAU,EAAE,OAAO,IAAI,QAAS,GAAG,GAAG,CAAE,EAAE;AAAA,IAC1C,UAAU,EAAE,OAAO,IAAI,QAAS,GAAG,GAAG,CAAE,EAAE;AAAA,IAC1C,UAAU,EAAE,OAAO,IAAI,QAAS,GAAG,GAAG,CAAE,EAAE;AAAA,EAE3C;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB3B;;;ACzCA,IAAM,iBAAiB;AAAA,EAEtB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,SAAS,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,EAEzC;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiB3B;;;ACzCA,IAAM,kBAAkB;AAAA,EAEvB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,SAAS,EAAE,OAAO,EAAI;AAAA,IACtB,WAAW,EAAE,OAAO,EAAI;AAAA,EAEzB;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuB3B;;;ACjDA,IAAM,iBAAiB;AAAA,EAEtB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,YAAY,EAAE,OAAO,EAAI;AAAA,EAE1B;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe3B;;;AC7BA,IAAM,aAAa;AAAA,EAElB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,cAAc,EAAE,OAAO,IAAI,QAAS,IAAI,MAAM,IAAI,GAAI,EAAE;AAAA,EAEzD;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyP3B;;;ACrRA,IAAM,cAAc;AAAA,E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", "names": ["values", "c", "c2", "index", "line", "position", "scale", "parent", "world", "q", "t", "t2", "a", "v1", "x", "y", "p", "rotation", "param", "key", "a", "b", "max", "p", "_q", "q", "x", "renderer", "size", "x", "y", "self", "t", "key", "width", "height", "value", "rotation", "time", "l", "q", "a", "b", "c", "rayLength", "EPS", "scale", "_raycaster", "_offset", "_camera", "onPointerMove", "onPointerDown", "onPointerCancel", "x", "y", "position", "_changeEvent", "EPS", "_vector", "_changeEvent", "_changeEvent", "_startEvent", "_endEvent", "STATE", "EPS", "getMouseOnScreen", "getMouseOnCircle", "onPointerDown", "onPointerMove", "onPointerUp", "onMouseMove", "onPointerCancel", "x", "y", "position", "contextmenu", "_raycaster", "_changeEvent", "_plane", "value", "onPointerDown", "onPointerMove", "onPointerUp", "size", "name", "position", "rotation", "scale", "a", "data", "_center", "_up", "data", "far", "shaders", "l", "farVerts", "t", "x", "y", "scale", "a", "R", "b", "t2", "p", "q", "p", "n", "C", "r", "a", "k", "j", "q", "l", "w", "t", "t2", "k", "t2", "renderer", "width", "height", "_camera", "renderer", "width", "height", "oAscii", "y", "x", "renderer", "data", "keys", "key", "value", "width", "height", "x", "y", "renderer", "_camera", "width", "height", "renderer", "_position", "_quaternion", "_scale", "width", "height", "renderer", "size", "width", "height", "renderer", "faces", "length", "_color", "c", "err", "b", "x", "l", "a", "p", "nt", "l", "t", "c", "n", "dt", "add", "b", "p", "t2", "a", "_a", "_b", "post", "head", "i", "k", "post", "a", "b", "k", "td", "dt", "t", "t", "err", "b", "c", "l", "fl", "Deflate", "AsyncDeflate", "data", "Inflate", "c", "n", "dt", "AsyncInflate", "data", "Gzip", "c", "Gunzip", "p", "AsyncGunzip", "data", "Zlib", "c", "data", "a", "Unzlib", "AsyncUnzlib", "data", "Decompress", "n", "AsyncDecompress", "err", "size", "p", "t", "k", "val", "n", "c", "DecodeUTF8", "_a", "EncodeUTF8", "l", "n", "c", "_a", "l", "b", "_a", "k", "c", "ce", "fl", "dt", "y", "ZipPassThrough", "ZipDeflate", "AsyncZipDeflate", "err", "Zip", "err", "l", "_a", "_b", "data", "_a", "p", "l", "c", "UnzipPassThrough", "UnzipInflate", "data", "AsyncUnzipInflate", "err", "data", "Unzip", "l", "add", "_a", "err", "dat", "final", "data", "c", "_a", "b", "renderer", "y", "x", "g", "b", "a", "line", "sum", "size", "data", "t2", "p", "t", "value", "renderer", "_camera", "width", "height", "reject", "index", "text", "matrix", "a", "value", "uids", "map", "c", "width", "height", "data", "key", "l", "rotation", "position", "scale", "nodeIndex", "time", "values", "et", "t", "n", "e", "a", "l", "c", "p", "g", "y", "i", "s", "x", "b", "B", "A", "k", "I", "r", "o", "et", "renderer", "t", "p", "key", "value", "size", "a", "q", "v1", "i", "text", "n", "line", "a", "index", "p", "array", "position", "matrix", "table", "keys", "key", "value", "l", "line", "k", "l", "line", "index", "a", "b", "c", "vA", "vB", "vC", "scale", "name", "transform", "matrix", "index", "length", "x", "y", "rotation", "width", "height", "x", "y", "_v1", "_plane", "l", "t", "max", "index", "v1", "a", "b", "c", "head", "position", "size", "index", "plane", "v1", "p", "EPS", "a", "b", "c", "x", "y", "width", "height", "t", "a", "b", "frames", "position", "p", "q", "SphereGeometry", "size", "u", "v", "PlaneGeometry", "width", "height", "position", "size", "g", "p", "c", "t", "v1", "text", "size", "max", "c", "max", "_geometry", "name", "index", "l", "c", "value", "k", "key", "i", "position", "_vA", "_vB", "_vC", "object", "morphTargetsRelative", "a", "b", "il", "x", "y", "n", "width", "height", "position", "_v1", "_v2", "size", "position", "_v1", "_v2", "size", "position", "xAxis", "yAxis", "zAxis", "renderer", "x", "radius", "text", "context", "x", "y", "width", "height", "element", "max", "value", "property", "position", "rect", "_pointer", "_raycaster", "renderer", "controller", "_center", "_matrix", "_quaternion", "_scale", "x", "renderer", "width", "height", "data", "renderer", "g", "b", "x", "index", "_vector", "index", "matrix", "value", "_closestPoint", "_box", "l", "t", "renderer", "length", "line", "_start", "_end", "_viewport", "l", "renderer", "k", "n", "c", "lc", "uInt8Array", "l", "p", "value", "buffer", "p2", "index", "data", "t", "t2", "size", "width", "height", "comp", "offset", "y", "x", "decodeFloat16", "a", "b", "g", "length", "name", "log2", "EXRDecoder", "line", "EXRHeader", "reject", "data", "map", "p", "matrix", "_color", "width", "height", "jsContent", "binaryContent", "worker", "a", "b", "rhino", "content", "t", "_geometry", "position", "property", "value", "data", "relsView", "relsFileText", "i", "name", "x", "y", "v1", "transform", "t", "matrix", "objects", "l", "keys", "build", "data3mf", "text", "data", "xmlData", "scale", "i", "v1", "x", "y", "text", "lines", "data", "line", "bones", "header", "use_rle", "use_pal", "offset", "data", "c", "imageData", "x", "y", "width", "height", "content", "text", "xml", "name", "l", "isEmpty", "library", "data", "transform", "time", "value", "index", "a", "b", "position", "scale", "matrix", "property", "key", "animations", "buildMaterial", "effect", "technique", "k", "getMaterial", "buildCamera", "count", "p", "g", "length", "c", "max", "vector", "j", "root", "object", "keys", "material", "parserError", "value", "buffer", "dataOffset", "width", "height", "y", "x", "b", "g", "a", "_taskCache", "reject", "name", "_color", "worker", "a", "b", "module", "index", "content", "values", "name", "child", "parent", "transform", "width", "height", "material", "g", "b", "skeleton", "index", "data", "length", "c", "l", "key", "val", "a", "time", "Q2", "Q", "E", "t", "text", "line", "property", "elem", "value", "keys", "size", "text", "data", "size", "p", "scale", "createPath", "ShapePath", "x", "y", "l", "text", "data", "line", "addSegment", "v1", "key", "value", "GLTFMaterialsClearcoatExtension", "GLTFMaterialsDispersionExtension", "GLTFMaterialsSheenExtension", "GLTFMaterialsTransmissionExtension", "GLTFMaterialsVolumeExtension", "GLTFMaterialsIorExtension", "GLTFMaterialsEmissiveStrengthExtension", "GLTFMaterialsSpecularExtension", "GLTFMaterialsIridescenceExtension", "GLTFMaterialsAnisotropyExtension", "GLTFMaterialsBumpExtension", "GLTFMeshGpuInstancing", "data", "GLTFMaterialsUnlitExtension", "reject", "key", "index", "self", "scale", "name", "res", "WEBGL_CONSTANTS", "p", "q", "transform", "values", "t", "td", "_q", "PATH_PROPERTIES", "keys", "isSafari", "clone", "URL", "sourceURI", "k", "matrix", "value", "node", "max", "accessor", "buffer", "p", "line", "w", "h", "l", "scale", "data", "value", "onLoad", "onProgress", "onError", "value", "width", "height", "size", "data", "startTheta", "endTheta", "t2", "v1", "text", "line", "values", "value", "text", "data", "resolve", "msg", "A", "Q", "g", "C", "E", "_taskCache", "renderer", "jsContent", "binaryContent", "width", "height", "a", "b", "value", "zstd", "Q", "data", "width", "height", "value", "l", "v1", "_ray", "x", "y", "info", "index", "i", "key", "line", "text", "meta", "matrix", "fileName", "clone", "subobject", "group", "a", "b", "elem", "n", "c", "getMaterial", "name", "token", "text", "size", "l", "index", "g", "b", "bits", "data", "scale", "text", "size", "length", "data", "scale", "IFFParser", "length", "index", "IFFParser", "length", "index", "length", "name", "map", "data", "value", "size", "a", "GeometryParser", "name", "connections", "index", "k", "value", "data", "y", "x", "t", "c", "X", "Y", "Z", "g", "b", "p", "a", "l", "n", "value", "g", "b", "p", "q", "t", "max", "key", "k", "lengths", "length", "partial", "name", "data", "elem", "globalData", "comp", "x", "mask", "effect", "position", "renderer", "width", "flatten", "n", "prng", "seed", "i", "j", "s", "a", "BMMath", "loopOut", "loopIn", "smooth", "time", "matrix", "scale", "rotation", "text", "val", "animationData", "err", "loadAnimation", "ob", "keys", "line", "expressionsPlugin", "index", "first", "searchAnimations", "standalone", "div", "c", "A", "B", "C", "values", "y", "clone", "v1", "l", "transform", "b2", "_p", "equals", "_a", "_b", "frameRate", "size", "sum", "Font", "property", "toWorld", "fromWorld", "fromComp", "len", "content", "_identityMatrix", "wiggle", "velocity", "value", "text", "data", "data", "l", "scale", "frames", "x", "y", "n", "positions", "normals", "data", "values", "data", "text", "value", "index", "key", "materials", "name", "t", "width", "height", "map", "x", "y", "a", "b", "time", "position", "rotation", "values", "q", "c", "ft", "text", "value", "line", "key", "index", "map", "n", "index", "slice", "value", "data", "value", "slice", "k", "index", "y", "x", "length", "max", "data", "_bytes", "u8", "i", "k", "l", "value", "max", "name", "index", "mi", "value", "a", "b", "c", "ia", "l", "text", "line", "data", "v1", "data", "PCDheader", "x", "l", "position", "c", "line", "g", "b", "text", "length", "c", "l", "x", "y", "g", "b", "index", "_color", "text", "data", "property", "line", "n", "l", "name", "geometry", "little_endian", "c", "height", "width", "value", "data", "width", "height", "reject", "x", "y", "value", "reject", "data", "size", "g", "b", "a", "p", "y", "x", "fd", "text", "R", "Q", "X", "C", "n", "A", "l", "I", "Z", "q", "c", "$", "Y", "val", "pa", "oa", "text", "data", "g", "b", "index", "name", "text", "transform", "node", "ShapePath", "l", "data", "i", "q", "x", "y", "a", "b", "index", "clamp", "current", "partial", "length", "n", "scale", "currentTransform", "v1", "te", "A", "B", "C", "t", "t2", "p", "index2", "scanlineMinX", "scanlineMaxX", "width", "position", "joinIsOnLeftSide", "innerSideModified", "points", "data", "scale", "name", "value", "values", "matrix", "inverse", "index", "g", "b", "position", "c", "UTIF", "W", "p", "t", "ak", "Q", "n", "E", "a", "F", "C", "q", "X", "x", "k", "g", "R", "c", "Y", "I", "l", "Z", "e", "N", "A", "$", "b", "y", "B", "V", "data", "bits", "arr_a", "arr_b", "i", "a6", "height", "sum", "b2", "val", "max", "dt", "EOI", "SOS", "sosMarker", "line", "keys", "key", "de", "map", "mi", "a3", "position", "size", "index", "first", "bits", "sum", "dt", "t", "lengths", "val", "length", "clen", "offs", "v1", "x", "y", "b", "a", "c", "t2", "Path", "i", "value", "data", "table", "l", "keys", "k", "subtableMakers", "Parser", "values", "cmap", "p", "g", "post", "name", "scale", "parseGlyph", "buildPath", "parseCFFCharstring", "b2", "b4", "key", "meta", "width", "parse", "code", "charString", "head", "hhea", "maxp", "ltag", "stringOffset", "property", "text", "os2", "glyphCount", "substCount", "tableData", "gsub", "sfnt", "n", "langSysTable", "sub", "transform", "loca", "pi", "div", "check", "Font", "fvar", "gdef", "parseLookup1", "parseLookup2", "parseLookup3", "parseLookup4", "parseLookup5", "parseLookup6", "parseLookup7", "parseLookup8", "gpos", "reject", "err", "scale", "c", "p", "result", "data", "k", "position", "size", "l", "name", "text", "data", "line", "values", "meta", "zip", "buffer", "value", "index", "name", "indices", "a", "b", "c", "index2", "l", "map", "buildMaterial", "group", "data", "id", "x", "y", "size", "_color", "add", "g", "b", "index", "c", "R", "t", "n", "a", "A", "c", "g", "p", "l", "y", "pe", "ln", "F", "Ae", "b", "se", "Q", "te", "Z", "In", "Sn", "Ft", "xe", "ct", "X", "dt", "Ei", "I", "Ti", "yt", "C", "Oi", "Ii", "x", "B", "Pi", "Si", "Ci", "Mi", "Fi", "et", "gt", "$", "de", "Vi", "zi", "Y", "$t", "q", "_a", "Ot", "E", "nt", "text", "data", "l", "tree", "scene", "value", "width", "height", "k", "size", "index", "x", "y", "g", "b", "t", "a", "c", "scale", "flattenData", "index2", "Face", "position", "$", "text", "data", "line", "x", "y", "k", "g", "b", "index", "buffer", "c", "size", "first", "i", "l", "content", "a", "meta", "text", "line", "g", "b", "value", "t", "a", "b", "x", "y", "X", "Y", "Z", "A", "B", "value", "max", "name", "data", "k", "_color", "name", "x", "index", "R", "t", "rotation", "obb", "x", "y", "ra", "matrix", "_v1", "_v2", "_plane", "_sphere", "a", "b", "c", "t2", "x", "y", "position", "v1", "g", "x", "y", "t", "t2", "k", "k2", "t3", "l", "c", "l2", "x2", "y2", "_v1", "n", "velocity", "b2", "va", "p", "x", "y", "renderer", "value", "renderer", "data", "l", "index", "name", "name", "key", "time", "index", "name", "k", "a", "b", "width", "height", "last", "renderer", "ob", "l", "position", "offset", "fromPoint", "toPoint", "x", "y", "size", "_color", "height", "random", "size", "matrix1", "matrix2", "count", "position", "value", "dataArray", "index", "x", "y", "data", "matrix", "index", "indexes", "name", "_cb", "_ab", "name", "t", "index", "a", "b", "c", "Triangle", "position", "k", "n", "v1", "va", "a", "b", "c", "v1", "c2", "map", "height", "scale", "renderer", "size", "l", "uniforms", "invAspect", "resolution", "lerp", "a", "b", "t", "q", "x", "y", "q2", "bits", "c", "err", "val", "size", "value", "index", "size2", "x2", "y2", "index2", "val2", "rotationMatrix", "q", "renderer", "yAxis", "val", "rotationMatrix", "renderer", "rotationMatrix", "visible", "position", "scale", "updateRefractorPlane", "q", "updateVirtualCamera", "renderer", "time", "rotationMatrix", "q", "renderer", "Water", "scale", "renderer", "frameRate", "world", "getShape", "position", "transform", "index", "time", "l", "x", "y", "x2", "y2", "_scale", "world", "_vector", "_quaternion", "_matrix", "position", "index", "velocity", "l", "renderer", "width", "height", "values", "sum", "x", "renderer", "width", "height", "BokehShader", "BokehShader", "renderer", "width", "height", "renderer", "renderer", "scale", "renderer", "renderer", "renderer", "renderer", "size", "index", "width", "height", "renderer", "renderer", "length", "val", "size", "data", "width", "height", "renderer", "size", "data", "x", "y", "width", "height", "key", "renderer", "camera", "width", "height", "renderer", "renderer", "renderer", "width", "height", "x", "y", "renderer", "x", "renderer", "width", "height", "width", "height", "renderer", "width", "height", "renderer", "width", "height", "renderer", "scale", "size", "data", "x", "y", "renderer", "width", "height", "val", "renderer", "width", "height", "renderer", "_JitterVectors", "map", "renderer", "width", "height", "renderer", "_vector", "_a", "_b", "width", "height", "l", "a", "b", "_position", "_quaternion", "_scale", "_matrix", "_matrix2", "width", "height", "value", "matrix", "l", "_face", "_line", "_vector3", "_vector4", "_viewMatrix", "_viewProjectionMatrix", "_frustum", "value", "position", "x", "y", "g", "b", "v1", "a", "c", "l", "t", "line", "SVGRenderer", "_v1", "_v2", "_v3", "_color", "_vector3", "_viewMatrix", "_viewProjectionMatrix", "width", "height", "c", "x", "y", "l", "position", "v1", "find", "width", "height", "x", "y", "l", "pa", "pe", "n", "l", "b", "t", "frames", "time", "name", "max", "value", "name", "position", "x", "y", "oct", "z", "length", "max", "size", "v1", "l", "gosper", "x", "y", "c", "_color", "_matrix", "index", "name", "k", "n", "l", "value", "position", "parent", "width", "height", "x", "y", "renderer", "scale", "name", "time", "clone", "a", "b", "data", "a", "b", "len", "p", "t", "size", "a", "b", "width", "height", "index", "face", "uvs", "renderer", "err", "position", "position", "height", "renderer", "err", "renderer", "err", "supported", "x", "y", "xAxis", "yAxis", "data", "value", "err", "renderer", "time", "_matrix", "_vector", "renderer", "matrix", "width", "height"] +======= + "sources": ["../../three/examples/jsm/animation/AnimationClipCreator.js", "../../three/examples/jsm/animation/CCDIKSolver.js", "../../three/examples/jsm/animation/MMDPhysics.js", "../../three/examples/jsm/animation/MMDAnimationHelper.js", "../../three/examples/jsm/shaders/BokehShader2.js", "../../three/examples/jsm/cameras/CinematicCamera.js", "../../three/examples/jsm/capabilities/WebGL.js", "../../three/examples/jsm/controls/ArcballControls.js", "../../three/examples/jsm/controls/DragControls.js", "../../three/examples/jsm/controls/FirstPersonControls.js", "../../three/examples/jsm/controls/FlyControls.js", "../../three/examples/jsm/controls/OrbitControls.js", "../../three/examples/jsm/controls/MapControls.js", "../../three/examples/jsm/controls/PointerLockControls.js", "../../three/examples/jsm/controls/TrackballControls.js", "../../three/examples/jsm/controls/TransformControls.js", "../../three/examples/jsm/csm/CSMFrustum.js", "../../three/examples/jsm/csm/CSMShader.js", "../../three/examples/jsm/csm/CSM.js", "../../three/examples/jsm/csm/CSMHelper.js", "../../three/examples/jsm/curves/CurveExtras.js", "../../three/examples/jsm/curves/NURBSUtils.js", "../../three/examples/jsm/curves/NURBSCurve.js", "../../three/examples/jsm/curves/NURBSSurface.js", "../../three/examples/jsm/curves/NURBSVolume.js", "../../three/examples/jsm/effects/AnaglyphEffect.js", "../../three/examples/jsm/effects/AsciiEffect.js", "../../three/examples/jsm/effects/OutlineEffect.js", "../../three/examples/jsm/effects/ParallaxBarrierEffect.js", "../../three/examples/jsm/effects/PeppersGhostEffect.js", "../../three/examples/jsm/effects/StereoEffect.js", "../../three/examples/jsm/environments/DebugEnvironment.js", "../../three/examples/jsm/environments/RoomEnvironment.js", "../../three/examples/jsm/exporters/DRACOExporter.js", "../../three/examples/jsm/libs/fflate.module.js", "../../three/examples/jsm/exporters/EXRExporter.js", "../../three/examples/jsm/utils/TextureUtils.js", "../../three/examples/jsm/exporters/GLTFExporter.js", "../../three/examples/jsm/libs/ktx-parse.module.js", "../../three/examples/jsm/exporters/KTX2Exporter.js", "../../three/examples/jsm/libs/mmdparser.module.js", "../../three/examples/jsm/exporters/MMDExporter.js", "../../three/examples/jsm/exporters/OBJExporter.js", "../../three/examples/jsm/exporters/PLYExporter.js", "../../three/examples/jsm/exporters/STLExporter.js", "../../three/examples/jsm/exporters/USDZExporter.js", "../../three/examples/jsm/geometries/BoxLineGeometry.js", "../../three/examples/jsm/math/ConvexHull.js", "../../three/examples/jsm/geometries/ConvexGeometry.js", "../../three/examples/jsm/geometries/DecalGeometry.js", "../../three/examples/jsm/geometries/ParametricGeometry.js", "../../three/examples/jsm/geometries/ParametricGeometries.js", "../../three/examples/jsm/geometries/RoundedBoxGeometry.js", "../../three/examples/jsm/geometries/TeapotGeometry.js", "../../three/examples/jsm/geometries/TextGeometry.js", "../../three/examples/jsm/helpers/LightProbeHelper.js", "../../three/examples/jsm/helpers/OctreeHelper.js", "../../three/examples/jsm/helpers/PositionalAudioHelper.js", "../../three/examples/jsm/helpers/RectAreaLightHelper.js", "../../three/examples/jsm/utils/BufferGeometryUtils.js", "../../three/examples/jsm/helpers/TextureHelper.js", "../../three/examples/jsm/helpers/VertexNormalsHelper.js", "../../three/examples/jsm/helpers/VertexTangentsHelper.js", "../../three/examples/jsm/helpers/ViewHelper.js", "../../three/examples/jsm/interactive/HTMLMesh.js", "../../three/examples/jsm/interactive/InteractiveGroup.js", "../../three/examples/jsm/interactive/SelectionBox.js", "../../three/examples/jsm/interactive/SelectionHelper.js", "../../three/examples/jsm/lights/LightProbeGenerator.js", "../../three/examples/jsm/lights/RectAreaLightTexturesLib.js", "../../three/examples/jsm/lights/RectAreaLightUniformsLib.js", "../../three/examples/jsm/lines/LineSegmentsGeometry.js", "../../three/examples/jsm/lines/LineMaterial.js", "../../three/examples/jsm/lines/LineSegments2.js", "../../three/examples/jsm/lines/LineGeometry.js", "../../three/examples/jsm/lines/Line2.js", "../../three/examples/jsm/lines/Wireframe.js", "../../three/examples/jsm/lines/WireframeGeometry2.js", "../../three/examples/jsm/loaders/EXRLoader.js", "../../three/examples/jsm/loaders/3DMLoader.js", "../../three/examples/jsm/loaders/3MFLoader.js", "../../three/examples/jsm/loaders/AMFLoader.js", "../../three/examples/jsm/loaders/BVHLoader.js", "../../three/examples/jsm/loaders/TGALoader.js", "../../three/examples/jsm/loaders/ColladaLoader.js", "../../three/examples/jsm/loaders/DDSLoader.js", "../../three/examples/jsm/loaders/DRACOLoader.js", "../../three/examples/jsm/loaders/FBXLoader.js", "../../three/examples/jsm/loaders/FontLoader.js", "../../three/examples/jsm/loaders/GCodeLoader.js", "../../three/examples/jsm/loaders/GLTFLoader.js", "../../three/examples/jsm/loaders/RGBELoader.js", "../../three/examples/jsm/loaders/HDRCubeTextureLoader.js", "../../three/examples/jsm/loaders/IESLoader.js", "../../three/examples/jsm/loaders/KMZLoader.js", "../../three/examples/jsm/utils/WorkerPool.js", "../../three/examples/jsm/libs/zstddec.module.js", "../../three/examples/jsm/loaders/KTX2Loader.js", "../../three/examples/jsm/loaders/KTXLoader.js", "../../three/examples/jsm/loaders/LDrawLoader.js", "../../three/examples/jsm/loaders/LUT3dlLoader.js", "../../three/examples/jsm/loaders/LUTCubeLoader.js", "../../three/examples/jsm/loaders/lwo/LWO2Parser.js", "../../three/examples/jsm/loaders/lwo/LWO3Parser.js", "../../three/examples/jsm/loaders/lwo/IFFParser.js", "../../three/examples/jsm/loaders/LWOLoader.js", "../../three/examples/jsm/loaders/LogLuvLoader.js", "../../three/examples/jsm/libs/lottie_canvas.module.js", "../../three/examples/jsm/loaders/LottieLoader.js", "../../three/examples/jsm/loaders/MD2Loader.js", "../../three/examples/jsm/loaders/MDDLoader.js", "../../three/examples/jsm/shaders/MMDToonShader.js", "../../three/examples/jsm/loaders/MMDLoader.js", "../../three/examples/jsm/loaders/MTLLoader.js", "../../three/examples/jsm/misc/VolumeSlice.js", "../../three/examples/jsm/misc/Volume.js", "../../three/examples/jsm/loaders/NRRDLoader.js", "../../three/examples/jsm/loaders/OBJLoader.js", "../../three/examples/jsm/loaders/PCDLoader.js", "../../three/examples/jsm/loaders/PDBLoader.js", "../../three/examples/jsm/loaders/PLYLoader.js", "../../three/examples/jsm/loaders/PVRLoader.js", "../../three/examples/jsm/loaders/UltraHDRLoader.js", "../../three/examples/jsm/loaders/RGBMLoader.js", "../../three/examples/jsm/loaders/STLLoader.js", "../../three/examples/jsm/loaders/SVGLoader.js", "../../three/examples/jsm/loaders/TDSLoader.js", "../../three/examples/jsm/libs/utif.module.js", "../../three/examples/jsm/loaders/TIFFLoader.js", "../../three/examples/jsm/libs/opentype.module.js", "../../three/examples/jsm/loaders/TTFLoader.js", "../../three/examples/jsm/loaders/TiltLoader.js", "../../three/examples/jsm/loaders/USDZLoader.js", "../../three/examples/jsm/loaders/VOXLoader.js", "../../three/examples/jsm/libs/chevrotain.module.min.js", "../../three/examples/jsm/loaders/VRMLLoader.js", "../../three/examples/jsm/loaders/VTKLoader.js", "../../three/examples/jsm/loaders/XYZLoader.js", "../../three/examples/jsm/materials/MeshGouraudMaterial.js", "../../three/examples/jsm/math/Capsule.js", "../../three/examples/jsm/math/ColorConverter.js", "../../three/examples/jsm/math/ImprovedNoise.js", "../../three/examples/jsm/math/Lut.js", "../../three/examples/jsm/math/MeshSurfaceSampler.js", "../../three/examples/jsm/math/OBB.js", "../../three/examples/jsm/math/Octree.js", "../../three/examples/jsm/math/SimplexNoise.js", "../../three/examples/jsm/misc/ConvexObjectBreaker.js", "../../three/examples/jsm/postprocessing/Pass.js", "../../three/examples/jsm/misc/GPUComputationRenderer.js", "../../three/examples/jsm/misc/Gyroscope.js", "../../three/examples/jsm/misc/MD2Character.js", "../../three/examples/jsm/misc/MorphBlendMesh.js", "../../three/examples/jsm/misc/MD2CharacterComplex.js", "../../three/examples/jsm/misc/MorphAnimMesh.js", "../../three/examples/jsm/libs/potpack.module.js", "../../three/examples/jsm/misc/ProgressiveLightMap.js", "../../three/examples/jsm/misc/RollerCoaster.js", "../../three/examples/jsm/misc/Timer.js", "../../three/examples/jsm/misc/TubePainter.js", "../../three/examples/jsm/modifiers/CurveModifier.js", "../../three/examples/jsm/modifiers/EdgeSplitModifier.js", "../../three/examples/jsm/modifiers/SimplifyModifier.js", "../../three/examples/jsm/modifiers/TessellateModifier.js", "../../three/examples/jsm/objects/GroundedSkybox.js", "../../three/examples/jsm/objects/Lensflare.js", "../../three/examples/jsm/objects/MarchingCubes.js", "../../three/examples/jsm/objects/Reflector.js", "../../three/examples/jsm/objects/ReflectorForSSRPass.js", "../../three/examples/jsm/objects/Refractor.js", "../../three/examples/jsm/objects/ShadowMesh.js", "../../three/examples/jsm/objects/Sky.js", "../../three/examples/jsm/objects/Water.js", "../../three/examples/jsm/objects/Water2.js", "../../three/examples/jsm/physics/AmmoPhysics.js", "../../three/examples/jsm/physics/RapierPhysics.js", "../../three/examples/jsm/shaders/AfterimageShader.js", "../../three/examples/jsm/postprocessing/AfterimagePass.js", "../../three/examples/jsm/shaders/ConvolutionShader.js", "../../three/examples/jsm/postprocessing/BloomPass.js", "../../three/examples/jsm/shaders/BokehShader.js", "../../three/examples/jsm/postprocessing/BokehPass.js", "../../three/examples/jsm/postprocessing/ClearPass.js", "../../three/examples/jsm/postprocessing/CubeTexturePass.js", "../../three/examples/jsm/shaders/DotScreenShader.js", "../../three/examples/jsm/postprocessing/DotScreenPass.js", "../../three/examples/jsm/shaders/CopyShader.js", "../../three/examples/jsm/postprocessing/ShaderPass.js", "../../three/examples/jsm/postprocessing/MaskPass.js", "../../three/examples/jsm/postprocessing/EffectComposer.js", "../../three/examples/jsm/shaders/FilmShader.js", "../../three/examples/jsm/postprocessing/FilmPass.js", "../../three/examples/jsm/shaders/DigitalGlitch.js", "../../three/examples/jsm/postprocessing/GlitchPass.js", "../../three/examples/jsm/shaders/GTAOShader.js", "../../three/examples/jsm/shaders/PoissonDenoiseShader.js", "../../three/examples/jsm/postprocessing/GTAOPass.js", "../../three/examples/jsm/shaders/HalftoneShader.js", "../../three/examples/jsm/postprocessing/HalftonePass.js", "../../three/examples/jsm/postprocessing/LUTPass.js", "../../three/examples/jsm/postprocessing/OutlinePass.js", "../../three/examples/jsm/shaders/OutputShader.js", "../../three/examples/jsm/postprocessing/OutputPass.js", "../../three/examples/jsm/postprocessing/RenderPass.js", "../../three/examples/jsm/postprocessing/RenderPixelatedPass.js", "../../three/examples/jsm/shaders/SAOShader.js", "../../three/examples/jsm/shaders/DepthLimitedBlurShader.js", "../../three/examples/jsm/postprocessing/SAOPass.js", "../../three/examples/jsm/shaders/SMAAShader.js", "../../three/examples/jsm/postprocessing/SMAAPass.js", "../../three/examples/jsm/postprocessing/SSAARenderPass.js", "../../three/examples/jsm/shaders/SSAOShader.js", "../../three/examples/jsm/postprocessing/SSAOPass.js", "../../three/examples/jsm/shaders/SSRShader.js", "../../three/examples/jsm/postprocessing/SSRPass.js", "../../three/examples/jsm/postprocessing/SavePass.js", "../../three/examples/jsm/postprocessing/TAARenderPass.js", "../../three/examples/jsm/postprocessing/TexturePass.js", "../../three/examples/jsm/shaders/LuminosityHighPassShader.js", "../../three/examples/jsm/postprocessing/UnrealBloomPass.js", "../../three/examples/jsm/renderers/CSS2DRenderer.js", "../../three/examples/jsm/renderers/CSS3DRenderer.js", "../../three/examples/jsm/renderers/Projector.js", "../../three/examples/jsm/renderers/SVGRenderer.js", "../../three/examples/jsm/shaders/ACESFilmicToneMappingShader.js", "../../three/examples/jsm/shaders/BasicShader.js", "../../three/examples/jsm/shaders/BleachBypassShader.js", "../../three/examples/jsm/shaders/BlendShader.js", "../../three/examples/jsm/shaders/BrightnessContrastShader.js", "../../three/examples/jsm/shaders/ColorCorrectionShader.js", "../../three/examples/jsm/shaders/ColorifyShader.js", "../../three/examples/jsm/shaders/DOFMipMapShader.js", "../../three/examples/jsm/shaders/ExposureShader.js", "../../three/examples/jsm/shaders/FXAAShader.js", "../../three/examples/jsm/shaders/FocusShader.js", "../../three/examples/jsm/shaders/FreiChenShader.js", "../../three/examples/jsm/shaders/GammaCorrectionShader.js", "../../three/examples/jsm/shaders/GodRaysShader.js", "../../three/examples/jsm/shaders/HorizontalBlurShader.js", "../../three/examples/jsm/shaders/HorizontalTiltShiftShader.js", "../../three/examples/jsm/shaders/HueSaturationShader.js", "../../three/examples/jsm/shaders/KaleidoShader.js", "../../three/examples/jsm/shaders/LuminosityShader.js", "../../three/examples/jsm/shaders/MirrorShader.js", "../../three/examples/jsm/shaders/NormalMapShader.js", "../../three/examples/jsm/shaders/RGBShiftShader.js", "../../three/examples/jsm/shaders/SepiaShader.js", "../../three/examples/jsm/shaders/SobelOperatorShader.js", "../../three/examples/jsm/shaders/SubsurfaceScatteringShader.js", "../../three/examples/jsm/shaders/TechnicolorShader.js", "../../three/examples/jsm/shaders/ToonShader.js", "../../three/examples/jsm/shaders/TriangleBlurShader.js", "../../three/examples/jsm/shaders/UnpackDepthRGBAShader.js", "../../three/examples/jsm/shaders/VelocityShader.js", "../../three/examples/jsm/shaders/VerticalBlurShader.js", "../../three/examples/jsm/shaders/VerticalTiltShiftShader.js", "../../three/examples/jsm/shaders/VignetteShader.js", "../../three/examples/jsm/shaders/VolumeShader.js", "../../three/examples/jsm/shaders/WaterRefractionShader.js", "../../three/examples/jsm/textures/FlakesTexture.js", "../../three/examples/jsm/utils/CameraUtils.js", "../../three/examples/jsm/libs/stats.module.js", "../../three/examples/jsm/utils/GPUStatsPanel.js", "../../three/examples/jsm/utils/GeometryCompressionUtils.js", "../../three/examples/jsm/utils/PackedPhongMaterial.js", "../../three/examples/jsm/utils/GeometryUtils.js", "../../three/examples/jsm/utils/LDrawUtils.js", "../../three/examples/jsm/utils/SceneUtils.js", "../../three/examples/jsm/utils/ShadowMapViewer.js", "../../three/examples/jsm/utils/SkeletonUtils.js", "../../three/examples/jsm/utils/SortUtils.js", "../../three/examples/jsm/utils/UVsDebug.js", "../../three/examples/jsm/webxr/ARButton.js", "../../three/examples/jsm/webxr/XRHandMeshModel.js", "../../three/examples/jsm/webxr/OculusHandModel.js", "../../three/examples/jsm/webxr/OculusHandPointerModel.js", "../../three/examples/jsm/webxr/Text2D.js", "../../three/examples/jsm/webxr/VRButton.js", "../../three/examples/jsm/webxr/XRButton.js", "../../three/examples/jsm/libs/motion-controllers.module.js", "../../three/examples/jsm/webxr/XRControllerModelFactory.js", "../../three/examples/jsm/webxr/XREstimatedLight.js", "../../three/examples/jsm/webxr/XRHandPrimitiveModel.js", "../../three/examples/jsm/webxr/XRHandModelFactory.js", "../../three/examples/jsm/webxr/XRPlanes.js"], + "sourcesContent": ["import {\n\tAnimationClip,\n\tBooleanKeyframeTrack,\n\tColorKeyframeTrack,\n\tNumberKeyframeTrack,\n\tVector3,\n\tVectorKeyframeTrack\n} from 'three';\n\nclass AnimationClipCreator {\n\n\tstatic CreateRotationAnimation( period, axis = 'x' ) {\n\n\t\tconst times = [ 0, period ], values = [ 0, 360 ];\n\n\t\tconst trackName = '.rotation[' + axis + ']';\n\n\t\tconst track = new NumberKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, period, [ track ] );\n\n\t}\n\n\tstatic CreateScaleAxisAnimation( period, axis = 'x' ) {\n\n\t\tconst times = [ 0, period ], values = [ 0, 1 ];\n\n\t\tconst trackName = '.scale[' + axis + ']';\n\n\t\tconst track = new NumberKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, period, [ track ] );\n\n\t}\n\n\tstatic CreateShakeAnimation( duration, shakeScale ) {\n\n\t\tconst times = [], values = [], tmp = new Vector3();\n\n\t\tfor ( let i = 0; i < duration * 10; i ++ ) {\n\n\t\t\ttimes.push( i / 10 );\n\n\t\t\ttmp.set( Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0 ).\n\t\t\t\tmultiply( shakeScale ).\n\t\t\t\ttoArray( values, values.length );\n\n\t\t}\n\n\t\tconst trackName = '.position';\n\n\t\tconst track = new VectorKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, duration, [ track ] );\n\n\t}\n\n\tstatic CreatePulsationAnimation( duration, pulseScale ) {\n\n\t\tconst times = [], values = [], tmp = new Vector3();\n\n\t\tfor ( let i = 0; i < duration * 10; i ++ ) {\n\n\t\t\ttimes.push( i / 10 );\n\n\t\t\tconst scaleFactor = Math.random() * pulseScale;\n\t\t\ttmp.set( scaleFactor, scaleFactor, scaleFactor ).\n\t\t\t\ttoArray( values, values.length );\n\n\t\t}\n\n\t\tconst trackName = '.scale';\n\n\t\tconst track = new VectorKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, duration, [ track ] );\n\n\t}\n\n\tstatic CreateVisibilityAnimation( duration ) {\n\n\t\tconst times = [ 0, duration / 2, duration ], values = [ true, false, true ];\n\n\t\tconst trackName = '.visible';\n\n\t\tconst track = new BooleanKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, duration, [ track ] );\n\n\t}\n\n\tstatic CreateMaterialColorAnimation( duration, colors ) {\n\n\t\tconst times = [], values = [],\n\t\t\ttimeStep = duration / colors.length;\n\n\t\tfor ( let i = 0; i < colors.length; i ++ ) {\n\n\t\t\ttimes.push( i * timeStep );\n\n\t\t\tconst color = colors[ i ];\n\t\t\tvalues.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\tconst trackName = '.material.color';\n\n\t\tconst track = new ColorKeyframeTrack( trackName, times, values );\n\n\t\treturn new AnimationClip( null, duration, [ track ] );\n\n\t}\n\n}\n\nexport { AnimationClipCreator };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tLine,\n\tLineBasicMaterial,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tQuaternion,\n\tSphereGeometry,\n\tVector3\n} from 'three';\n\nconst _q = new Quaternion();\nconst _targetPos = new Vector3();\nconst _targetVec = new Vector3();\nconst _effectorPos = new Vector3();\nconst _effectorVec = new Vector3();\nconst _linkPos = new Vector3();\nconst _invLinkQ = new Quaternion();\nconst _linkScale = new Vector3();\nconst _axis = new Vector3();\nconst _vector = new Vector3();\nconst _matrix = new Matrix4();\n\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n\n\t/**\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Array} iks\n\t */\n\tconstructor( mesh, iks = [] ) {\n\n\t\tthis.mesh = mesh;\n\t\tthis.iks = iks;\n\n\t\tthis._valid();\n\n\t}\n\n\t/**\n\t * Update all IK bones.\n\t *\n\t * @return {CCDIKSolver}\n\t */\n\tupdate() {\n\n\t\tconst iks = this.iks;\n\n\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\tthis.updateOne( iks[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Update one IK bone\n\t *\n\t * @param {Object} ik parameter\n\t * @return {CCDIKSolver}\n\t */\n\tupdateOne( ik ) {\n\n\t\tconst bones = this.mesh.skeleton.bones;\n\n\t\t// for reference overhead reduction in loop\n\t\tconst math = Math;\n\n\t\tconst effector = bones[ ik.effector ];\n\t\tconst target = bones[ ik.target ];\n\n\t\t// don't use getWorldPosition() here for the performance\n\t\t// because it calls updateMatrixWorld( true ) inside.\n\t\t_targetPos.setFromMatrixPosition( target.matrixWorld );\n\n\t\tconst links = ik.links;\n\t\tconst iteration = ik.iteration !== undefined ? ik.iteration : 1;\n\n\t\tfor ( let i = 0; i < iteration; i ++ ) {\n\n\t\t\tlet rotated = false;\n\n\t\t\tfor ( let j = 0, jl = links.length; j < jl; j ++ ) {\n\n\t\t\t\tconst link = bones[ links[ j ].index ];\n\n\t\t\t\t// skip this link and following links.\n\t\t\t\t// this skip is used for MMD performance optimization.\n\t\t\t\tif ( links[ j ].enabled === false ) break;\n\n\t\t\t\tconst limitation = links[ j ].limitation;\n\t\t\t\tconst rotationMin = links[ j ].rotationMin;\n\t\t\t\tconst rotationMax = links[ j ].rotationMax;\n\n\t\t\t\t// don't use getWorldPosition/Quaternion() here for the performance\n\t\t\t\t// because they call updateMatrixWorld( true ) inside.\n\t\t\t\tlink.matrixWorld.decompose( _linkPos, _invLinkQ, _linkScale );\n\t\t\t\t_invLinkQ.invert();\n\t\t\t\t_effectorPos.setFromMatrixPosition( effector.matrixWorld );\n\n\t\t\t\t// work in link world\n\t\t\t\t_effectorVec.subVectors( _effectorPos, _linkPos );\n\t\t\t\t_effectorVec.applyQuaternion( _invLinkQ );\n\t\t\t\t_effectorVec.normalize();\n\n\t\t\t\t_targetVec.subVectors( _targetPos, _linkPos );\n\t\t\t\t_targetVec.applyQuaternion( _invLinkQ );\n\t\t\t\t_targetVec.normalize();\n\n\t\t\t\tlet angle = _targetVec.dot( _effectorVec );\n\n\t\t\t\tif ( angle > 1.0 ) {\n\n\t\t\t\t\tangle = 1.0;\n\n\t\t\t\t} else if ( angle < - 1.0 ) {\n\n\t\t\t\t\tangle = - 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tangle = math.acos( angle );\n\n\t\t\t\t// skip if changing angle is too small to prevent vibration of bone\n\t\t\t\tif ( angle < 1e-5 ) continue;\n\n\t\t\t\tif ( ik.minAngle !== undefined && angle < ik.minAngle ) {\n\n\t\t\t\t\tangle = ik.minAngle;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ik.maxAngle !== undefined && angle > ik.maxAngle ) {\n\n\t\t\t\t\tangle = ik.maxAngle;\n\n\t\t\t\t}\n\n\t\t\t\t_axis.crossVectors( _effectorVec, _targetVec );\n\t\t\t\t_axis.normalize();\n\n\t\t\t\t_q.setFromAxisAngle( _axis, angle );\n\t\t\t\tlink.quaternion.multiply( _q );\n\n\t\t\t\t// TODO: re-consider the limitation specification\n\t\t\t\tif ( limitation !== undefined ) {\n\n\t\t\t\t\tlet c = link.quaternion.w;\n\n\t\t\t\t\tif ( c > 1.0 ) c = 1.0;\n\n\t\t\t\t\tconst c2 = math.sqrt( 1 - c * c );\n\t\t\t\t\tlink.quaternion.set( limitation.x * c2,\n\t\t\t\t\t limitation.y * c2,\n\t\t\t\t\t limitation.z * c2,\n\t\t\t\t\t c );\n\n\t\t\t\t}\n\n\t\t\t\tif ( rotationMin !== undefined ) {\n\n\t\t\t\t\tlink.rotation.setFromVector3( _vector.setFromEuler( link.rotation ).max( rotationMin ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( rotationMax !== undefined ) {\n\n\t\t\t\t\tlink.rotation.setFromVector3( _vector.setFromEuler( link.rotation ).min( rotationMax ) );\n\n\t\t\t\t}\n\n\t\t\t\tlink.updateMatrixWorld( true );\n\n\t\t\t\trotated = true;\n\n\t\t\t}\n\n\t\t\tif ( ! rotated ) break;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates Helper\n\t *\n\t * @param {number} sphereSize\n\t * @return {CCDIKHelper}\n\t */\n\tcreateHelper( sphereSize ) {\n\n\t\treturn new CCDIKHelper( this.mesh, this.iks, sphereSize );\n\n\t}\n\n\t// private methods\n\n\t_valid() {\n\n\t\tconst iks = this.iks;\n\t\tconst bones = this.mesh.skeleton.bones;\n\n\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\tconst ik = iks[ i ];\n\t\t\tconst effector = bones[ ik.effector ];\n\t\t\tconst links = ik.links;\n\t\t\tlet link0, link1;\n\n\t\t\tlink0 = effector;\n\n\t\t\tfor ( let j = 0, jl = links.length; j < jl; j ++ ) {\n\n\t\t\t\tlink1 = bones[ links[ j ].index ];\n\n\t\t\t\tif ( link0.parent !== link1 ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name );\n\n\t\t\t\t}\n\n\t\t\t\tlink0 = link1;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction getPosition( bone, matrixWorldInv ) {\n\n\treturn _vector\n\t\t.setFromMatrixPosition( bone.matrixWorld )\n\t\t.applyMatrix4( matrixWorldInv );\n\n}\n\nfunction setPositionOfBoneToAttributeArray( array, index, bone, matrixWorldInv ) {\n\n\tconst v = getPosition( bone, matrixWorldInv );\n\n\tarray[ index * 3 + 0 ] = v.x;\n\tarray[ index * 3 + 1 ] = v.y;\n\tarray[ index * 3 + 2 ] = v.z;\n\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array} iks\n * @param {number} sphereSize\n */\nclass CCDIKHelper extends Object3D {\n\n\tconstructor( mesh, iks = [], sphereSize = 0.25 ) {\n\n\t\tsuper();\n\n\t\tthis.root = mesh;\n\t\tthis.iks = iks;\n\n\t\tthis.matrix.copy( mesh.matrixWorld );\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.sphereGeometry = new SphereGeometry( sphereSize, 16, 8 );\n\n\t\tthis.targetSphereMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: new Color( 0xff8888 ),\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis.effectorSphereMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: new Color( 0x88ff88 ),\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis.linkSphereMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: new Color( 0x8888ff ),\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis.lineMaterial = new LineBasicMaterial( {\n\t\t\tcolor: new Color( 0xff0000 ),\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis._init();\n\n\t}\n\n\t/**\n\t * Updates IK bones visualization.\n\t */\n\tupdateMatrixWorld( force ) {\n\n\t\tconst mesh = this.root;\n\n\t\tif ( this.visible ) {\n\n\t\t\tlet offset = 0;\n\n\t\t\tconst iks = this.iks;\n\t\t\tconst bones = mesh.skeleton.bones;\n\n\t\t\t_matrix.copy( mesh.matrixWorld ).invert();\n\n\t\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\t\tconst ik = iks[ i ];\n\n\t\t\t\tconst targetBone = bones[ ik.target ];\n\t\t\t\tconst effectorBone = bones[ ik.effector ];\n\n\t\t\t\tconst targetMesh = this.children[ offset ++ ];\n\t\t\t\tconst effectorMesh = this.children[ offset ++ ];\n\n\t\t\t\ttargetMesh.position.copy( getPosition( targetBone, _matrix ) );\n\t\t\t\teffectorMesh.position.copy( getPosition( effectorBone, _matrix ) );\n\n\t\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst link = ik.links[ j ];\n\t\t\t\t\tconst linkBone = bones[ link.index ];\n\n\t\t\t\t\tconst linkMesh = this.children[ offset ++ ];\n\n\t\t\t\t\tlinkMesh.position.copy( getPosition( linkBone, _matrix ) );\n\n\t\t\t\t}\n\n\t\t\t\tconst line = this.children[ offset ++ ];\n\t\t\t\tconst array = line.geometry.attributes.position.array;\n\n\t\t\t\tsetPositionOfBoneToAttributeArray( array, 0, targetBone, _matrix );\n\t\t\t\tsetPositionOfBoneToAttributeArray( array, 1, effectorBone, _matrix );\n\n\t\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst link = ik.links[ j ];\n\t\t\t\t\tconst linkBone = bones[ link.index ];\n\t\t\t\t\tsetPositionOfBoneToAttributeArray( array, j + 2, linkBone, _matrix );\n\n\t\t\t\t}\n\n\t\t\t\tline.geometry.attributes.position.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.matrix.copy( mesh.matrixWorld );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.sphereGeometry.dispose();\n\n\t\tthis.targetSphereMaterial.dispose();\n\t\tthis.effectorSphereMaterial.dispose();\n\t\tthis.linkSphereMaterial.dispose();\n\t\tthis.lineMaterial.dispose();\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tif ( child.isLine ) child.geometry.dispose();\n\n\t\t}\n\n\t}\n\n\t// private method\n\n\t_init() {\n\n\t\tconst scope = this;\n\t\tconst iks = this.iks;\n\n\t\tfunction createLineGeometry( ik ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst vertices = new Float32Array( ( 2 + ik.links.length ) * 3 );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction createTargetMesh() {\n\n\t\t\treturn new Mesh( scope.sphereGeometry, scope.targetSphereMaterial );\n\n\t\t}\n\n\t\tfunction createEffectorMesh() {\n\n\t\t\treturn new Mesh( scope.sphereGeometry, scope.effectorSphereMaterial );\n\n\t\t}\n\n\t\tfunction createLinkMesh() {\n\n\t\t\treturn new Mesh( scope.sphereGeometry, scope.linkSphereMaterial );\n\n\t\t}\n\n\t\tfunction createLine( ik ) {\n\n\t\t\treturn new Line( createLineGeometry( ik ), scope.lineMaterial );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\tconst ik = iks[ i ];\n\n\t\t\tthis.add( createTargetMesh() );\n\t\t\tthis.add( createEffectorMesh() );\n\n\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.add( createLinkMesh() );\n\n\t\t\t}\n\n\t\t\tthis.add( createLine( ik ) );\n\n\t\t}\n\n\t}\n\n}\n\nexport { CCDIKSolver, CCDIKHelper };\n", "import {\n\tBone,\n\tBoxGeometry,\n\tCapsuleGeometry,\n\tColor,\n\tEuler,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tQuaternion,\n\tSphereGeometry,\n\tVector3\n} from 'three';\n\n/**\n * Dependencies\n * - Ammo.js https://github.com/kripken/ammo.js\n *\n * MMDPhysics calculates physics with Ammo(Bullet based JavaScript Physics engine)\n * for MMD model loaded by MMDLoader.\n *\n * TODO\n * - Physics in Worker\n */\n\n/* global Ammo */\n\nclass MMDPhysics {\n\n\t/**\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Array} rigidBodyParams\n\t * @param {Array} (optional) constraintParams\n\t * @param {Object} params - (optional)\n\t * @param {Number} params.unitStep - Default is 1 / 65.\n\t * @param {Integer} params.maxStepNum - Default is 3.\n\t * @param {Vector3} params.gravity - Default is ( 0, - 9.8 * 10, 0 )\n\t */\n\tconstructor( mesh, rigidBodyParams, constraintParams = [], params = {} ) {\n\n\t\tif ( typeof Ammo === 'undefined' ) {\n\n\t\t\tthrow new Error( 'THREE.MMDPhysics: Import ammo.js https://github.com/kripken/ammo.js' );\n\n\t\t}\n\n\t\tthis.manager = new ResourceManager();\n\n\t\tthis.mesh = mesh;\n\n\t\t/*\n\t\t * I don't know why but 1/60 unitStep easily breaks models\n\t\t * so I set it 1/65 so far.\n\t\t * Don't set too small unitStep because\n\t\t * the smaller unitStep can make the performance worse.\n\t\t */\n\t\tthis.unitStep = ( params.unitStep !== undefined ) ? params.unitStep : 1 / 65;\n\t\tthis.maxStepNum = ( params.maxStepNum !== undefined ) ? params.maxStepNum : 3;\n\t\tthis.gravity = new Vector3( 0, - 9.8 * 10, 0 );\n\n\t\tif ( params.gravity !== undefined ) this.gravity.copy( params.gravity );\n\n\t\tthis.world = params.world !== undefined ? params.world : null; // experimental\n\n\t\tthis.bodies = [];\n\t\tthis.constraints = [];\n\n\t\tthis._init( mesh, rigidBodyParams, constraintParams );\n\n\t}\n\n\t/**\n\t * Advances Physics calculation and updates bones.\n\t *\n\t * @param {Number} delta - time in second\n\t * @return {MMDPhysics}\n\t */\n\tupdate( delta ) {\n\n\t\tconst manager = this.manager;\n\t\tconst mesh = this.mesh;\n\n\t\t// rigid bodies and constrains are for\n\t\t// mesh's world scale (1, 1, 1).\n\t\t// Convert to (1, 1, 1) if it isn't.\n\n\t\tlet isNonDefaultScale = false;\n\n\t\tconst position = manager.allocThreeVector3();\n\t\tconst quaternion = manager.allocThreeQuaternion();\n\t\tconst scale = manager.allocThreeVector3();\n\n\t\tmesh.matrixWorld.decompose( position, quaternion, scale );\n\n\t\tif ( scale.x !== 1 || scale.y !== 1 || scale.z !== 1 ) {\n\n\t\t\tisNonDefaultScale = true;\n\n\t\t}\n\n\t\tlet parent;\n\n\t\tif ( isNonDefaultScale ) {\n\n\t\t\tparent = mesh.parent;\n\n\t\t\tif ( parent !== null ) mesh.parent = null;\n\n\t\t\tscale.copy( this.mesh.scale );\n\n\t\t\tmesh.scale.set( 1, 1, 1 );\n\t\t\tmesh.updateMatrixWorld( true );\n\n\t\t}\n\n\t\t// calculate physics and update bones\n\n\t\tthis._updateRigidBodies();\n\t\tthis._stepSimulation( delta );\n\t\tthis._updateBones();\n\n\t\t// restore mesh if converted above\n\n\t\tif ( isNonDefaultScale ) {\n\n\t\t\tif ( parent !== null ) mesh.parent = parent;\n\n\t\t\tmesh.scale.copy( scale );\n\n\t\t}\n\n\t\tmanager.freeThreeVector3( scale );\n\t\tmanager.freeThreeQuaternion( quaternion );\n\t\tmanager.freeThreeVector3( position );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Resets rigid bodies transorm to current bone's.\n\t *\n\t * @return {MMDPhysics}\n\t */\n\treset() {\n\n\t\tfor ( let i = 0, il = this.bodies.length; i < il; i ++ ) {\n\n\t\t\tthis.bodies[ i ].reset();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Warm ups Rigid bodies. Calculates cycles steps.\n\t *\n\t * @param {Integer} cycles\n\t * @return {MMDPhysics}\n\t */\n\twarmup( cycles ) {\n\n\t\tfor ( let i = 0; i < cycles; i ++ ) {\n\n\t\t\tthis.update( 1 / 60 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets gravity.\n\t *\n\t * @param {Vector3} gravity\n\t * @return {MMDPhysicsHelper}\n\t */\n\tsetGravity( gravity ) {\n\n\t\tthis.world.setGravity( new Ammo.btVector3( gravity.x, gravity.y, gravity.z ) );\n\t\tthis.gravity.copy( gravity );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates MMDPhysicsHelper\n\t *\n\t * @return {MMDPhysicsHelper}\n\t */\n\tcreateHelper() {\n\n\t\treturn new MMDPhysicsHelper( this.mesh, this );\n\n\t}\n\n\t// private methods\n\n\t_init( mesh, rigidBodyParams, constraintParams ) {\n\n\t\tconst manager = this.manager;\n\n\t\t// rigid body/constraint parameters are for\n\t\t// mesh's default world transform as position(0, 0, 0),\n\t\t// quaternion(0, 0, 0, 1) and scale(0, 0, 0)\n\n\t\tconst parent = mesh.parent;\n\n\t\tif ( parent !== null ) mesh.parent = null;\n\n\t\tconst currentPosition = manager.allocThreeVector3();\n\t\tconst currentQuaternion = manager.allocThreeQuaternion();\n\t\tconst currentScale = manager.allocThreeVector3();\n\n\t\tcurrentPosition.copy( mesh.position );\n\t\tcurrentQuaternion.copy( mesh.quaternion );\n\t\tcurrentScale.copy( mesh.scale );\n\n\t\tmesh.position.set( 0, 0, 0 );\n\t\tmesh.quaternion.set( 0, 0, 0, 1 );\n\t\tmesh.scale.set( 1, 1, 1 );\n\n\t\tmesh.updateMatrixWorld( true );\n\n\t\tif ( this.world === null ) {\n\n\t\t\tthis.world = this._createWorld();\n\t\t\tthis.setGravity( this.gravity );\n\n\t\t}\n\n\t\tthis._initRigidBodies( rigidBodyParams );\n\t\tthis._initConstraints( constraintParams );\n\n\t\tif ( parent !== null ) mesh.parent = parent;\n\n\t\tmesh.position.copy( currentPosition );\n\t\tmesh.quaternion.copy( currentQuaternion );\n\t\tmesh.scale.copy( currentScale );\n\n\t\tmesh.updateMatrixWorld( true );\n\n\t\tthis.reset();\n\n\t\tmanager.freeThreeVector3( currentPosition );\n\t\tmanager.freeThreeQuaternion( currentQuaternion );\n\t\tmanager.freeThreeVector3( currentScale );\n\n\t}\n\n\t_createWorld() {\n\n\t\tconst config = new Ammo.btDefaultCollisionConfiguration();\n\t\tconst dispatcher = new Ammo.btCollisionDispatcher( config );\n\t\tconst cache = new Ammo.btDbvtBroadphase();\n\t\tconst solver = new Ammo.btSequentialImpulseConstraintSolver();\n\t\tconst world = new Ammo.btDiscreteDynamicsWorld( dispatcher, cache, solver, config );\n\t\treturn world;\n\n\t}\n\n\t_initRigidBodies( rigidBodies ) {\n\n\t\tfor ( let i = 0, il = rigidBodies.length; i < il; i ++ ) {\n\n\t\t\tthis.bodies.push( new RigidBody(\n\t\t\t\tthis.mesh, this.world, rigidBodies[ i ], this.manager ) );\n\n\t\t}\n\n\t}\n\n\t_initConstraints( constraints ) {\n\n\t\tfor ( let i = 0, il = constraints.length; i < il; i ++ ) {\n\n\t\t\tconst params = constraints[ i ];\n\t\t\tconst bodyA = this.bodies[ params.rigidBodyIndex1 ];\n\t\t\tconst bodyB = this.bodies[ params.rigidBodyIndex2 ];\n\t\t\tthis.constraints.push( new Constraint( this.mesh, this.world, bodyA, bodyB, params, this.manager ) );\n\n\t\t}\n\n\t}\n\n\t_stepSimulation( delta ) {\n\n\t\tconst unitStep = this.unitStep;\n\t\tlet stepTime = delta;\n\t\tlet maxStepNum = ( ( delta / unitStep ) | 0 ) + 1;\n\n\t\tif ( stepTime < unitStep ) {\n\n\t\t\tstepTime = unitStep;\n\t\t\tmaxStepNum = 1;\n\n\t\t}\n\n\t\tif ( maxStepNum > this.maxStepNum ) {\n\n\t\t\tmaxStepNum = this.maxStepNum;\n\n\t\t}\n\n\t\tthis.world.stepSimulation( stepTime, maxStepNum, unitStep );\n\n\t}\n\n\t_updateRigidBodies() {\n\n\t\tfor ( let i = 0, il = this.bodies.length; i < il; i ++ ) {\n\n\t\t\tthis.bodies[ i ].updateFromBone();\n\n\t\t}\n\n\t}\n\n\t_updateBones() {\n\n\t\tfor ( let i = 0, il = this.bodies.length; i < il; i ++ ) {\n\n\t\t\tthis.bodies[ i ].updateBone();\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * This manager's responsibilies are\n *\n * 1. manage Ammo.js and Three.js object resources and\n * improve the performance and the memory consumption by\n * reusing objects.\n *\n * 2. provide simple Ammo object operations.\n */\nclass ResourceManager {\n\n\tconstructor() {\n\n\t\t// for Three.js\n\t\tthis.threeVector3s = [];\n\t\tthis.threeMatrix4s = [];\n\t\tthis.threeQuaternions = [];\n\t\tthis.threeEulers = [];\n\n\t\t// for Ammo.js\n\t\tthis.transforms = [];\n\t\tthis.quaternions = [];\n\t\tthis.vector3s = [];\n\n\t}\n\n\tallocThreeVector3() {\n\n\t\treturn ( this.threeVector3s.length > 0 )\n\t\t\t? this.threeVector3s.pop()\n\t\t\t: new Vector3();\n\n\t}\n\n\tfreeThreeVector3( v ) {\n\n\t\tthis.threeVector3s.push( v );\n\n\t}\n\n\tallocThreeMatrix4() {\n\n\t\treturn ( this.threeMatrix4s.length > 0 )\n\t\t\t? this.threeMatrix4s.pop()\n\t\t\t: new Matrix4();\n\n\t}\n\n\tfreeThreeMatrix4( m ) {\n\n\t\tthis.threeMatrix4s.push( m );\n\n\t}\n\n\tallocThreeQuaternion() {\n\n\t\treturn ( this.threeQuaternions.length > 0 )\n\t\t\t? this.threeQuaternions.pop()\n\t\t\t: new Quaternion();\n\n\t}\n\n\tfreeThreeQuaternion( q ) {\n\n\t\tthis.threeQuaternions.push( q );\n\n\t}\n\n\tallocThreeEuler() {\n\n\t\treturn ( this.threeEulers.length > 0 )\n\t\t\t? this.threeEulers.pop()\n\t\t\t: new Euler();\n\n\t}\n\n\tfreeThreeEuler( e ) {\n\n\t\tthis.threeEulers.push( e );\n\n\t}\n\n\tallocTransform() {\n\n\t\treturn ( this.transforms.length > 0 )\n\t\t\t? this.transforms.pop()\n\t\t\t: new Ammo.btTransform();\n\n\t}\n\n\tfreeTransform( t ) {\n\n\t\tthis.transforms.push( t );\n\n\t}\n\n\tallocQuaternion() {\n\n\t\treturn ( this.quaternions.length > 0 )\n\t\t\t? this.quaternions.pop()\n\t\t\t: new Ammo.btQuaternion();\n\n\t}\n\n\tfreeQuaternion( q ) {\n\n\t\tthis.quaternions.push( q );\n\n\t}\n\n\tallocVector3() {\n\n\t\treturn ( this.vector3s.length > 0 )\n\t\t\t? this.vector3s.pop()\n\t\t\t: new Ammo.btVector3();\n\n\t}\n\n\tfreeVector3( v ) {\n\n\t\tthis.vector3s.push( v );\n\n\t}\n\n\tsetIdentity( t ) {\n\n\t\tt.setIdentity();\n\n\t}\n\n\tgetBasis( t ) {\n\n\t\tvar q = this.allocQuaternion();\n\t\tt.getBasis().getRotation( q );\n\t\treturn q;\n\n\t}\n\n\tgetBasisAsMatrix3( t ) {\n\n\t\tvar q = this.getBasis( t );\n\t\tvar m = this.quaternionToMatrix3( q );\n\t\tthis.freeQuaternion( q );\n\t\treturn m;\n\n\t}\n\n\tgetOrigin( t ) {\n\n\t\treturn t.getOrigin();\n\n\t}\n\n\tsetOrigin( t, v ) {\n\n\t\tt.getOrigin().setValue( v.x(), v.y(), v.z() );\n\n\t}\n\n\tcopyOrigin( t1, t2 ) {\n\n\t\tvar o = t2.getOrigin();\n\t\tthis.setOrigin( t1, o );\n\n\t}\n\n\tsetBasis( t, q ) {\n\n\t\tt.setRotation( q );\n\n\t}\n\n\tsetBasisFromMatrix3( t, m ) {\n\n\t\tvar q = this.matrix3ToQuaternion( m );\n\t\tthis.setBasis( t, q );\n\t\tthis.freeQuaternion( q );\n\n\t}\n\n\tsetOriginFromArray3( t, a ) {\n\n\t\tt.getOrigin().setValue( a[ 0 ], a[ 1 ], a[ 2 ] );\n\n\t}\n\n\tsetOriginFromThreeVector3( t, v ) {\n\n\t\tt.getOrigin().setValue( v.x, v.y, v.z );\n\n\t}\n\n\tsetBasisFromArray3( t, a ) {\n\n\t\tvar thQ = this.allocThreeQuaternion();\n\t\tvar thE = this.allocThreeEuler();\n\t\tthE.set( a[ 0 ], a[ 1 ], a[ 2 ] );\n\t\tthis.setBasisFromThreeQuaternion( t, thQ.setFromEuler( thE ) );\n\n\t\tthis.freeThreeEuler( thE );\n\t\tthis.freeThreeQuaternion( thQ );\n\n\t}\n\n\tsetBasisFromThreeQuaternion( t, a ) {\n\n\t\tvar q = this.allocQuaternion();\n\n\t\tq.setX( a.x );\n\t\tq.setY( a.y );\n\t\tq.setZ( a.z );\n\t\tq.setW( a.w );\n\t\tthis.setBasis( t, q );\n\n\t\tthis.freeQuaternion( q );\n\n\t}\n\n\tmultiplyTransforms( t1, t2 ) {\n\n\t\tvar t = this.allocTransform();\n\t\tthis.setIdentity( t );\n\n\t\tvar m1 = this.getBasisAsMatrix3( t1 );\n\t\tvar m2 = this.getBasisAsMatrix3( t2 );\n\n\t\tvar o1 = this.getOrigin( t1 );\n\t\tvar o2 = this.getOrigin( t2 );\n\n\t\tvar v1 = this.multiplyMatrix3ByVector3( m1, o2 );\n\t\tvar v2 = this.addVector3( v1, o1 );\n\t\tthis.setOrigin( t, v2 );\n\n\t\tvar m3 = this.multiplyMatrices3( m1, m2 );\n\t\tthis.setBasisFromMatrix3( t, m3 );\n\n\t\tthis.freeVector3( v1 );\n\t\tthis.freeVector3( v2 );\n\n\t\treturn t;\n\n\t}\n\n\tinverseTransform( t ) {\n\n\t\tvar t2 = this.allocTransform();\n\n\t\tvar m1 = this.getBasisAsMatrix3( t );\n\t\tvar o = this.getOrigin( t );\n\n\t\tvar m2 = this.transposeMatrix3( m1 );\n\t\tvar v1 = this.negativeVector3( o );\n\t\tvar v2 = this.multiplyMatrix3ByVector3( m2, v1 );\n\n\t\tthis.setOrigin( t2, v2 );\n\t\tthis.setBasisFromMatrix3( t2, m2 );\n\n\t\tthis.freeVector3( v1 );\n\t\tthis.freeVector3( v2 );\n\n\t\treturn t2;\n\n\t}\n\n\tmultiplyMatrices3( m1, m2 ) {\n\n\t\tvar m3 = [];\n\n\t\tvar v10 = this.rowOfMatrix3( m1, 0 );\n\t\tvar v11 = this.rowOfMatrix3( m1, 1 );\n\t\tvar v12 = this.rowOfMatrix3( m1, 2 );\n\n\t\tvar v20 = this.columnOfMatrix3( m2, 0 );\n\t\tvar v21 = this.columnOfMatrix3( m2, 1 );\n\t\tvar v22 = this.columnOfMatrix3( m2, 2 );\n\n\t\tm3[ 0 ] = this.dotVectors3( v10, v20 );\n\t\tm3[ 1 ] = this.dotVectors3( v10, v21 );\n\t\tm3[ 2 ] = this.dotVectors3( v10, v22 );\n\t\tm3[ 3 ] = this.dotVectors3( v11, v20 );\n\t\tm3[ 4 ] = this.dotVectors3( v11, v21 );\n\t\tm3[ 5 ] = this.dotVectors3( v11, v22 );\n\t\tm3[ 6 ] = this.dotVectors3( v12, v20 );\n\t\tm3[ 7 ] = this.dotVectors3( v12, v21 );\n\t\tm3[ 8 ] = this.dotVectors3( v12, v22 );\n\n\t\tthis.freeVector3( v10 );\n\t\tthis.freeVector3( v11 );\n\t\tthis.freeVector3( v12 );\n\t\tthis.freeVector3( v20 );\n\t\tthis.freeVector3( v21 );\n\t\tthis.freeVector3( v22 );\n\n\t\treturn m3;\n\n\t}\n\n\taddVector3( v1, v2 ) {\n\n\t\tvar v = this.allocVector3();\n\t\tv.setValue( v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z() );\n\t\treturn v;\n\n\t}\n\n\tdotVectors3( v1, v2 ) {\n\n\t\treturn v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z();\n\n\t}\n\n\trowOfMatrix3( m, i ) {\n\n\t\tvar v = this.allocVector3();\n\t\tv.setValue( m[ i * 3 + 0 ], m[ i * 3 + 1 ], m[ i * 3 + 2 ] );\n\t\treturn v;\n\n\t}\n\n\tcolumnOfMatrix3( m, i ) {\n\n\t\tvar v = this.allocVector3();\n\t\tv.setValue( m[ i + 0 ], m[ i + 3 ], m[ i + 6 ] );\n\t\treturn v;\n\n\t}\n\n\tnegativeVector3( v ) {\n\n\t\tvar v2 = this.allocVector3();\n\t\tv2.setValue( - v.x(), - v.y(), - v.z() );\n\t\treturn v2;\n\n\t}\n\n\tmultiplyMatrix3ByVector3( m, v ) {\n\n\t\tvar v4 = this.allocVector3();\n\n\t\tvar v0 = this.rowOfMatrix3( m, 0 );\n\t\tvar v1 = this.rowOfMatrix3( m, 1 );\n\t\tvar v2 = this.rowOfMatrix3( m, 2 );\n\t\tvar x = this.dotVectors3( v0, v );\n\t\tvar y = this.dotVectors3( v1, v );\n\t\tvar z = this.dotVectors3( v2, v );\n\n\t\tv4.setValue( x, y, z );\n\n\t\tthis.freeVector3( v0 );\n\t\tthis.freeVector3( v1 );\n\t\tthis.freeVector3( v2 );\n\n\t\treturn v4;\n\n\t}\n\n\ttransposeMatrix3( m ) {\n\n\t\tvar m2 = [];\n\t\tm2[ 0 ] = m[ 0 ];\n\t\tm2[ 1 ] = m[ 3 ];\n\t\tm2[ 2 ] = m[ 6 ];\n\t\tm2[ 3 ] = m[ 1 ];\n\t\tm2[ 4 ] = m[ 4 ];\n\t\tm2[ 5 ] = m[ 7 ];\n\t\tm2[ 6 ] = m[ 2 ];\n\t\tm2[ 7 ] = m[ 5 ];\n\t\tm2[ 8 ] = m[ 8 ];\n\t\treturn m2;\n\n\t}\n\n\tquaternionToMatrix3( q ) {\n\n\t\tvar m = [];\n\n\t\tvar x = q.x();\n\t\tvar y = q.y();\n\t\tvar z = q.z();\n\t\tvar w = q.w();\n\n\t\tvar xx = x * x;\n\t\tvar yy = y * y;\n\t\tvar zz = z * z;\n\n\t\tvar xy = x * y;\n\t\tvar yz = y * z;\n\t\tvar zx = z * x;\n\n\t\tvar xw = x * w;\n\t\tvar yw = y * w;\n\t\tvar zw = z * w;\n\n\t\tm[ 0 ] = 1 - 2 * ( yy + zz );\n\t\tm[ 1 ] = 2 * ( xy - zw );\n\t\tm[ 2 ] = 2 * ( zx + yw );\n\t\tm[ 3 ] = 2 * ( xy + zw );\n\t\tm[ 4 ] = 1 - 2 * ( zz + xx );\n\t\tm[ 5 ] = 2 * ( yz - xw );\n\t\tm[ 6 ] = 2 * ( zx - yw );\n\t\tm[ 7 ] = 2 * ( yz + xw );\n\t\tm[ 8 ] = 1 - 2 * ( xx + yy );\n\n\t\treturn m;\n\n\t}\n\n\tmatrix3ToQuaternion( m ) {\n\n\t\tvar t = m[ 0 ] + m[ 4 ] + m[ 8 ];\n\t\tvar s, x, y, z, w;\n\n\t\tif ( t > 0 ) {\n\n\t\t\ts = Math.sqrt( t + 1.0 ) * 2;\n\t\t\tw = 0.25 * s;\n\t\t\tx = ( m[ 7 ] - m[ 5 ] ) / s;\n\t\t\ty = ( m[ 2 ] - m[ 6 ] ) / s;\n\t\t\tz = ( m[ 3 ] - m[ 1 ] ) / s;\n\n\t\t} else if ( ( m[ 0 ] > m[ 4 ] ) && ( m[ 0 ] > m[ 8 ] ) ) {\n\n\t\t\ts = Math.sqrt( 1.0 + m[ 0 ] - m[ 4 ] - m[ 8 ] ) * 2;\n\t\t\tw = ( m[ 7 ] - m[ 5 ] ) / s;\n\t\t\tx = 0.25 * s;\n\t\t\ty = ( m[ 1 ] + m[ 3 ] ) / s;\n\t\t\tz = ( m[ 2 ] + m[ 6 ] ) / s;\n\n\t\t} else if ( m[ 4 ] > m[ 8 ] ) {\n\n\t\t\ts = Math.sqrt( 1.0 + m[ 4 ] - m[ 0 ] - m[ 8 ] ) * 2;\n\t\t\tw = ( m[ 2 ] - m[ 6 ] ) / s;\n\t\t\tx = ( m[ 1 ] + m[ 3 ] ) / s;\n\t\t\ty = 0.25 * s;\n\t\t\tz = ( m[ 5 ] + m[ 7 ] ) / s;\n\n\t\t} else {\n\n\t\t\ts = Math.sqrt( 1.0 + m[ 8 ] - m[ 0 ] - m[ 4 ] ) * 2;\n\t\t\tw = ( m[ 3 ] - m[ 1 ] ) / s;\n\t\t\tx = ( m[ 2 ] + m[ 6 ] ) / s;\n\t\t\ty = ( m[ 5 ] + m[ 7 ] ) / s;\n\t\t\tz = 0.25 * s;\n\n\t\t}\n\n\t\tvar q = this.allocQuaternion();\n\t\tq.setX( x );\n\t\tq.setY( y );\n\t\tq.setZ( z );\n\t\tq.setW( w );\n\t\treturn q;\n\n\t}\n\n}\n\n/**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Ammo.btDiscreteDynamicsWorld} world\n * @param {Object} params\n * @param {ResourceManager} manager\n */\nclass RigidBody {\n\n\tconstructor( mesh, world, params, manager ) {\n\n\t\tthis.mesh = mesh;\n\t\tthis.world = world;\n\t\tthis.params = params;\n\t\tthis.manager = manager;\n\n\t\tthis.body = null;\n\t\tthis.bone = null;\n\t\tthis.boneOffsetForm = null;\n\t\tthis.boneOffsetFormInverse = null;\n\n\t\tthis._init();\n\n\t}\n\n\t/**\n\t * Resets rigid body transform to the current bone's.\n\t *\n\t * @return {RigidBody}\n\t */\n\treset() {\n\n\t\tthis._setTransformFromBone();\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Updates rigid body's transform from the current bone.\n\t *\n\t * @return {RidigBody}\n\t */\n\tupdateFromBone() {\n\n\t\tif ( this.params.boneIndex !== - 1 && this.params.type === 0 ) {\n\n\t\t\tthis._setTransformFromBone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Updates bone from the current ridid body's transform.\n\t *\n\t * @return {RidigBody}\n\t */\n\tupdateBone() {\n\n\t\tif ( this.params.type === 0 || this.params.boneIndex === - 1 ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis._updateBoneRotation();\n\n\t\tif ( this.params.type === 1 ) {\n\n\t\t\tthis._updateBonePosition();\n\n\t\t}\n\n\t\tthis.bone.updateMatrixWorld( true );\n\n\t\tif ( this.params.type === 2 ) {\n\n\t\t\tthis._setPositionFromBone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// private methods\n\n\t_init() {\n\n\t\tfunction generateShape( p ) {\n\n\t\t\tswitch ( p.shapeType ) {\n\n\t\t\t\tcase 0:\n\t\t\t\t\treturn new Ammo.btSphereShape( p.width );\n\n\t\t\t\tcase 1:\n\t\t\t\t\treturn new Ammo.btBoxShape( new Ammo.btVector3( p.width, p.height, p.depth ) );\n\n\t\t\t\tcase 2:\n\t\t\t\t\treturn new Ammo.btCapsuleShape( p.width, p.height );\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'unknown shape type ' + p.shapeType );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst manager = this.manager;\n\t\tconst params = this.params;\n\t\tconst bones = this.mesh.skeleton.bones;\n\t\tconst bone = ( params.boneIndex === - 1 )\n\t\t\t? new Bone()\n\t\t\t: bones[ params.boneIndex ];\n\n\t\tconst shape = generateShape( params );\n\t\tconst weight = ( params.type === 0 ) ? 0 : params.weight;\n\t\tconst localInertia = manager.allocVector3();\n\t\tlocalInertia.setValue( 0, 0, 0 );\n\n\t\tif ( weight !== 0 ) {\n\n\t\t\tshape.calculateLocalInertia( weight, localInertia );\n\n\t\t}\n\n\t\tconst boneOffsetForm = manager.allocTransform();\n\t\tmanager.setIdentity( boneOffsetForm );\n\t\tmanager.setOriginFromArray3( boneOffsetForm, params.position );\n\t\tmanager.setBasisFromArray3( boneOffsetForm, params.rotation );\n\n\t\tconst vector = manager.allocThreeVector3();\n\t\tconst boneForm = manager.allocTransform();\n\t\tmanager.setIdentity( boneForm );\n\t\tmanager.setOriginFromThreeVector3( boneForm, bone.getWorldPosition( vector ) );\n\n\t\tconst form = manager.multiplyTransforms( boneForm, boneOffsetForm );\n\t\tconst state = new Ammo.btDefaultMotionState( form );\n\n\t\tconst info = new Ammo.btRigidBodyConstructionInfo( weight, state, shape, localInertia );\n\t\tinfo.set_m_friction( params.friction );\n\t\tinfo.set_m_restitution( params.restitution );\n\n\t\tconst body = new Ammo.btRigidBody( info );\n\n\t\tif ( params.type === 0 ) {\n\n\t\t\tbody.setCollisionFlags( body.getCollisionFlags() | 2 );\n\n\t\t\t/*\n\t\t\t * It'd be better to comment out this line though in general I should call this method\n\t\t\t * because I'm not sure why but physics will be more like MMD's\n\t\t\t * if I comment out.\n\t\t\t */\n\t\t\tbody.setActivationState( 4 );\n\n\t\t}\n\n\t\tbody.setDamping( params.positionDamping, params.rotationDamping );\n\t\tbody.setSleepingThresholds( 0, 0 );\n\n\t\tthis.world.addRigidBody( body, 1 << params.groupIndex, params.groupTarget );\n\n\t\tthis.body = body;\n\t\tthis.bone = bone;\n\t\tthis.boneOffsetForm = boneOffsetForm;\n\t\tthis.boneOffsetFormInverse = manager.inverseTransform( boneOffsetForm );\n\n\t\tmanager.freeVector3( localInertia );\n\t\tmanager.freeTransform( form );\n\t\tmanager.freeTransform( boneForm );\n\t\tmanager.freeThreeVector3( vector );\n\n\t}\n\n\t_getBoneTransform() {\n\n\t\tconst manager = this.manager;\n\t\tconst p = manager.allocThreeVector3();\n\t\tconst q = manager.allocThreeQuaternion();\n\t\tconst s = manager.allocThreeVector3();\n\n\t\tthis.bone.matrixWorld.decompose( p, q, s );\n\n\t\tconst tr = manager.allocTransform();\n\t\tmanager.setOriginFromThreeVector3( tr, p );\n\t\tmanager.setBasisFromThreeQuaternion( tr, q );\n\n\t\tconst form = manager.multiplyTransforms( tr, this.boneOffsetForm );\n\n\t\tmanager.freeTransform( tr );\n\t\tmanager.freeThreeVector3( s );\n\t\tmanager.freeThreeQuaternion( q );\n\t\tmanager.freeThreeVector3( p );\n\n\t\treturn form;\n\n\t}\n\n\t_getWorldTransformForBone() {\n\n\t\tconst manager = this.manager;\n\t\tconst tr = this.body.getCenterOfMassTransform();\n\t\treturn manager.multiplyTransforms( tr, this.boneOffsetFormInverse );\n\n\t}\n\n\t_setTransformFromBone() {\n\n\t\tconst manager = this.manager;\n\t\tconst form = this._getBoneTransform();\n\n\t\t// TODO: check the most appropriate way to set\n\t\t//this.body.setWorldTransform( form );\n\t\tthis.body.setCenterOfMassTransform( form );\n\t\tthis.body.getMotionState().setWorldTransform( form );\n\n\t\tmanager.freeTransform( form );\n\n\t}\n\n\t_setPositionFromBone() {\n\n\t\tconst manager = this.manager;\n\t\tconst form = this._getBoneTransform();\n\n\t\tconst tr = manager.allocTransform();\n\t\tthis.body.getMotionState().getWorldTransform( tr );\n\t\tmanager.copyOrigin( tr, form );\n\n\t\t// TODO: check the most appropriate way to set\n\t\t//this.body.setWorldTransform( tr );\n\t\tthis.body.setCenterOfMassTransform( tr );\n\t\tthis.body.getMotionState().setWorldTransform( tr );\n\n\t\tmanager.freeTransform( tr );\n\t\tmanager.freeTransform( form );\n\n\t}\n\n\t_updateBoneRotation() {\n\n\t\tconst manager = this.manager;\n\n\t\tconst tr = this._getWorldTransformForBone();\n\t\tconst q = manager.getBasis( tr );\n\n\t\tconst thQ = manager.allocThreeQuaternion();\n\t\tconst thQ2 = manager.allocThreeQuaternion();\n\t\tconst thQ3 = manager.allocThreeQuaternion();\n\n\t\tthQ.set( q.x(), q.y(), q.z(), q.w() );\n\t\tthQ2.setFromRotationMatrix( this.bone.matrixWorld );\n\t\tthQ2.conjugate();\n\t\tthQ2.multiply( thQ );\n\n\t\t//this.bone.quaternion.multiply( thQ2 );\n\n\t\tthQ3.setFromRotationMatrix( this.bone.matrix );\n\n\t\t// Renormalizing quaternion here because repeatedly transforming\n\t\t// quaternion continuously accumulates floating point error and\n\t\t// can end up being overflow. See #15335\n\t\tthis.bone.quaternion.copy( thQ2.multiply( thQ3 ).normalize() );\n\n\t\tmanager.freeThreeQuaternion( thQ );\n\t\tmanager.freeThreeQuaternion( thQ2 );\n\t\tmanager.freeThreeQuaternion( thQ3 );\n\n\t\tmanager.freeQuaternion( q );\n\t\tmanager.freeTransform( tr );\n\n\t}\n\n\t_updateBonePosition() {\n\n\t\tconst manager = this.manager;\n\n\t\tconst tr = this._getWorldTransformForBone();\n\n\t\tconst thV = manager.allocThreeVector3();\n\n\t\tconst o = manager.getOrigin( tr );\n\t\tthV.set( o.x(), o.y(), o.z() );\n\n\t\tif ( this.bone.parent ) {\n\n\t\t\tthis.bone.parent.worldToLocal( thV );\n\n\t\t}\n\n\t\tthis.bone.position.copy( thV );\n\n\t\tmanager.freeThreeVector3( thV );\n\n\t\tmanager.freeTransform( tr );\n\n\t}\n\n}\n\n//\n\nclass Constraint {\n\n\t/**\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Ammo.btDiscreteDynamicsWorld} world\n\t * @param {RigidBody} bodyA\n\t * @param {RigidBody} bodyB\n\t * @param {Object} params\n\t * @param {ResourceManager} manager\n\t */\n\tconstructor( mesh, world, bodyA, bodyB, params, manager ) {\n\n\t\tthis.mesh = mesh;\n\t\tthis.world = world;\n\t\tthis.bodyA = bodyA;\n\t\tthis.bodyB = bodyB;\n\t\tthis.params = params;\n\t\tthis.manager = manager;\n\n\t\tthis.constraint = null;\n\n\t\tthis._init();\n\n\t}\n\n\t// private method\n\n\t_init() {\n\n\t\tconst manager = this.manager;\n\t\tconst params = this.params;\n\t\tconst bodyA = this.bodyA;\n\t\tconst bodyB = this.bodyB;\n\n\t\tconst form = manager.allocTransform();\n\t\tmanager.setIdentity( form );\n\t\tmanager.setOriginFromArray3( form, params.position );\n\t\tmanager.setBasisFromArray3( form, params.rotation );\n\n\t\tconst formA = manager.allocTransform();\n\t\tconst formB = manager.allocTransform();\n\n\t\tbodyA.body.getMotionState().getWorldTransform( formA );\n\t\tbodyB.body.getMotionState().getWorldTransform( formB );\n\n\t\tconst formInverseA = manager.inverseTransform( formA );\n\t\tconst formInverseB = manager.inverseTransform( formB );\n\n\t\tconst formA2 = manager.multiplyTransforms( formInverseA, form );\n\t\tconst formB2 = manager.multiplyTransforms( formInverseB, form );\n\n\t\tconst constraint = new Ammo.btGeneric6DofSpringConstraint( bodyA.body, bodyB.body, formA2, formB2, true );\n\n\t\tconst lll = manager.allocVector3();\n\t\tconst lul = manager.allocVector3();\n\t\tconst all = manager.allocVector3();\n\t\tconst aul = manager.allocVector3();\n\n\t\tlll.setValue( params.translationLimitation1[ 0 ],\n\t\t params.translationLimitation1[ 1 ],\n\t\t params.translationLimitation1[ 2 ] );\n\t\tlul.setValue( params.translationLimitation2[ 0 ],\n\t\t params.translationLimitation2[ 1 ],\n\t\t params.translationLimitation2[ 2 ] );\n\t\tall.setValue( params.rotationLimitation1[ 0 ],\n\t\t params.rotationLimitation1[ 1 ],\n\t\t params.rotationLimitation1[ 2 ] );\n\t\taul.setValue( params.rotationLimitation2[ 0 ],\n\t\t params.rotationLimitation2[ 1 ],\n\t\t params.rotationLimitation2[ 2 ] );\n\n\t\tconstraint.setLinearLowerLimit( lll );\n\t\tconstraint.setLinearUpperLimit( lul );\n\t\tconstraint.setAngularLowerLimit( all );\n\t\tconstraint.setAngularUpperLimit( aul );\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tif ( params.springPosition[ i ] !== 0 ) {\n\n\t\t\t\tconstraint.enableSpring( i, true );\n\t\t\t\tconstraint.setStiffness( i, params.springPosition[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tif ( params.springRotation[ i ] !== 0 ) {\n\n\t\t\t\tconstraint.enableSpring( i + 3, true );\n\t\t\t\tconstraint.setStiffness( i + 3, params.springRotation[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t * Currently(10/31/2016) official ammo.js doesn't support\n\t\t * btGeneric6DofSpringConstraint.setParam method.\n\t\t * You need custom ammo.js (add the method into idl) if you wanna use.\n\t\t * By setting this parameter, physics will be more like MMD's\n\t\t */\n\t\tif ( constraint.setParam !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tconstraint.setParam( 2, 0.475, i );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.world.addConstraint( constraint, true );\n\t\tthis.constraint = constraint;\n\n\t\tmanager.freeTransform( form );\n\t\tmanager.freeTransform( formA );\n\t\tmanager.freeTransform( formB );\n\t\tmanager.freeTransform( formInverseA );\n\t\tmanager.freeTransform( formInverseB );\n\t\tmanager.freeTransform( formA2 );\n\t\tmanager.freeTransform( formB2 );\n\t\tmanager.freeVector3( lll );\n\t\tmanager.freeVector3( lul );\n\t\tmanager.freeVector3( all );\n\t\tmanager.freeVector3( aul );\n\n\t}\n\n}\n\n//\n\nconst _position = new Vector3();\nconst _quaternion = new Quaternion();\nconst _scale = new Vector3();\nconst _matrixWorldInv = new Matrix4();\n\nclass MMDPhysicsHelper extends Object3D {\n\n\t/**\n\t * Visualize Rigid bodies\n\t *\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Physics} physics\n\t */\n\tconstructor( mesh, physics ) {\n\n\t\tsuper();\n\n\t\tthis.root = mesh;\n\t\tthis.physics = physics;\n\n\t\tthis.matrix.copy( mesh.matrixWorld );\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.materials = [];\n\n\t\tthis.materials.push(\n\t\t\tnew MeshBasicMaterial( {\n\t\t\t\tcolor: new Color( 0xff8888 ),\n\t\t\t\twireframe: true,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\topacity: 0.25,\n\t\t\t\ttransparent: true\n\t\t\t} )\n\t\t);\n\n\t\tthis.materials.push(\n\t\t\tnew MeshBasicMaterial( {\n\t\t\t\tcolor: new Color( 0x88ff88 ),\n\t\t\t\twireframe: true,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\topacity: 0.25,\n\t\t\t\ttransparent: true\n\t\t\t} )\n\t\t);\n\n\t\tthis.materials.push(\n\t\t\tnew MeshBasicMaterial( {\n\t\t\t\tcolor: new Color( 0x8888ff ),\n\t\t\t\twireframe: true,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\topacity: 0.25,\n\t\t\t\ttransparent: true\n\t\t\t} )\n\t\t);\n\n\t\tthis._init();\n\n\t}\n\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tconst materials = this.materials;\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0; i < materials.length; i ++ ) {\n\n\t\t\tmaterials[ i ].dispose();\n\n\t\t}\n\n\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tif ( child.isMesh ) child.geometry.dispose();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates Rigid Bodies visualization.\n\t */\n\tupdateMatrixWorld( force ) {\n\n\t\tvar mesh = this.root;\n\n\t\tif ( this.visible ) {\n\n\t\t\tvar bodies = this.physics.bodies;\n\n\t\t\t_matrixWorldInv\n\t\t\t\t.copy( mesh.matrixWorld )\n\t\t\t\t.decompose( _position, _quaternion, _scale )\n\t\t\t\t.compose( _position, _quaternion, _scale.set( 1, 1, 1 ) )\n\t\t\t\t.invert();\n\n\t\t\tfor ( var i = 0, il = bodies.length; i < il; i ++ ) {\n\n\t\t\t\tvar body = bodies[ i ].body;\n\t\t\t\tvar child = this.children[ i ];\n\n\t\t\t\tvar tr = body.getCenterOfMassTransform();\n\t\t\t\tvar origin = tr.getOrigin();\n\t\t\t\tvar rotation = tr.getRotation();\n\n\t\t\t\tchild.position\n\t\t\t\t\t.set( origin.x(), origin.y(), origin.z() )\n\t\t\t\t\t.applyMatrix4( _matrixWorldInv );\n\n\t\t\t\tchild.quaternion\n\t\t\t\t\t.setFromRotationMatrix( _matrixWorldInv )\n\t\t\t\t\t.multiply(\n\t\t\t\t\t\t_quaternion.set( rotation.x(), rotation.y(), rotation.z(), rotation.w() )\n\t\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.matrix\n\t\t\t.copy( mesh.matrixWorld )\n\t\t\t.decompose( _position, _quaternion, _scale )\n\t\t\t.compose( _position, _quaternion, _scale.set( 1, 1, 1 ) );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\t// private method\n\n\t_init() {\n\n\t\tvar bodies = this.physics.bodies;\n\n\t\tfunction createGeometry( param ) {\n\n\t\t\tswitch ( param.shapeType ) {\n\n\t\t\t\tcase 0:\n\t\t\t\t\treturn new SphereGeometry( param.width, 16, 8 );\n\n\t\t\t\tcase 1:\n\t\t\t\t\treturn new BoxGeometry( param.width * 2, param.height * 2, param.depth * 2, 8, 8, 8 );\n\n\t\t\t\tcase 2:\n\t\t\t\t\treturn new CapsuleGeometry( param.width, param.height, 8, 16 );\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0, il = bodies.length; i < il; i ++ ) {\n\n\t\t\tvar param = bodies[ i ].params;\n\t\t\tthis.add( new Mesh( createGeometry( param ), this.materials[ param.type ] ) );\n\n\t\t}\n\n\t}\n\n}\n\nexport { MMDPhysics };\n", "import {\n\tAnimationMixer,\n\tObject3D,\n\tQuaternion,\n\tVector3\n} from 'three';\nimport { CCDIKSolver } from '../animation/CCDIKSolver.js';\nimport { MMDPhysics } from '../animation/MMDPhysics.js';\n\n/**\n * MMDAnimationHelper handles animation of MMD assets loaded by MMDLoader\n * with MMD special features as IK, Grant, and Physics.\n *\n * Dependencies\n * - ammo.js https://github.com/kripken/ammo.js\n * - MMDPhysics\n * - CCDIKSolver\n *\n * TODO\n * - more precise grant skinning support.\n */\nclass MMDAnimationHelper {\n\n\t/**\n\t * @param {Object} params - (optional)\n\t * @param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true.\n\t * @param {Number} params.afterglow - Default is 0.0.\n\t * @param {boolean} params.resetPhysicsOnLoop - Default is true.\n\t */\n\tconstructor( params = {} ) {\n\n\t\tthis.meshes = [];\n\n\t\tthis.camera = null;\n\t\tthis.cameraTarget = new Object3D();\n\t\tthis.cameraTarget.name = 'target';\n\n\t\tthis.audio = null;\n\t\tthis.audioManager = null;\n\n\t\tthis.objects = new WeakMap();\n\n\t\tthis.configuration = {\n\t\t\tsync: params.sync !== undefined ? params.sync : true,\n\t\t\tafterglow: params.afterglow !== undefined ? params.afterglow : 0.0,\n\t\t\tresetPhysicsOnLoop: params.resetPhysicsOnLoop !== undefined ? params.resetPhysicsOnLoop : true,\n\t\t\tpmxAnimation: params.pmxAnimation !== undefined ? params.pmxAnimation : false\n\t\t};\n\n\t\tthis.enabled = {\n\t\t\tanimation: true,\n\t\t\tik: true,\n\t\t\tgrant: true,\n\t\t\tphysics: true,\n\t\t\tcameraAnimation: true\n\t\t};\n\n\t\tthis.onBeforePhysics = function ( /* mesh */ ) {};\n\n\t\t// experimental\n\t\tthis.sharedPhysics = false;\n\t\tthis.masterPhysics = null;\n\n\t}\n\n\t/**\n\t * Adds an Three.js Object to helper and setups animation.\n\t * The anmation durations of added objects are synched\n\t * if this.configuration.sync is true.\n\t *\n\t * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object\n\t * @param {Object} params - (optional)\n\t * @param {THREE.AnimationClip|Array} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined.\n\t * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true.\n\t * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60.\n\t * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65.\n\t * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3.\n\t * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ).\n\t * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0.\n\t * @return {MMDAnimationHelper}\n\t */\n\tadd( object, params = {} ) {\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tthis._addMesh( object, params );\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tthis._setupCamera( object, params );\n\n\t\t} else if ( object.type === 'Audio' ) {\n\n\t\t\tthis._setupAudio( object, params );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper.add: '\n\t\t\t\t+ 'accepts only '\n\t\t\t\t+ 'THREE.SkinnedMesh or '\n\t\t\t\t+ 'THREE.Camera or '\n\t\t\t\t+ 'THREE.Audio instance.' );\n\n\t\t}\n\n\t\tif ( this.configuration.sync ) this._syncDuration();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes an Three.js Object from helper.\n\t *\n\t * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object\n\t * @return {MMDAnimationHelper}\n\t */\n\tremove( object ) {\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tthis._removeMesh( object );\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tthis._clearCamera( object );\n\n\t\t} else if ( object.type === 'Audio' ) {\n\n\t\t\tthis._clearAudio( object );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper.remove: '\n\t\t\t\t+ 'accepts only '\n\t\t\t\t+ 'THREE.SkinnedMesh or '\n\t\t\t\t+ 'THREE.Camera or '\n\t\t\t\t+ 'THREE.Audio instance.' );\n\n\t\t}\n\n\t\tif ( this.configuration.sync ) this._syncDuration();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Updates the animation.\n\t *\n\t * @param {Number} delta\n\t * @return {MMDAnimationHelper}\n\t */\n\tupdate( delta ) {\n\n\t\tif ( this.audioManager !== null ) this.audioManager.control( delta );\n\n\t\tfor ( let i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis._animateMesh( this.meshes[ i ], delta );\n\n\t\t}\n\n\t\tif ( this.sharedPhysics ) this._updateSharedPhysics( delta );\n\n\t\tif ( this.camera !== null ) this._animateCamera( this.camera, delta );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Changes the pose of SkinnedMesh as VPD specifies.\n\t *\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @param {Object} vpd - VPD content parsed MMDParser\n\t * @param {Object} params - (optional)\n\t * @param {boolean} params.resetPose - Default is true.\n\t * @param {boolean} params.ik - Default is true.\n\t * @param {boolean} params.grant - Default is true.\n\t * @return {MMDAnimationHelper}\n\t */\n\tpose( mesh, vpd, params = {} ) {\n\n\t\tif ( params.resetPose !== false ) mesh.pose();\n\n\t\tconst bones = mesh.skeleton.bones;\n\t\tconst boneParams = vpd.bones;\n\n\t\tconst boneNameDictionary = {};\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tboneNameDictionary[ bones[ i ].name ] = i;\n\n\t\t}\n\n\t\tconst vector = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\n\t\tfor ( let i = 0, il = boneParams.length; i < il; i ++ ) {\n\n\t\t\tconst boneParam = boneParams[ i ];\n\t\t\tconst boneIndex = boneNameDictionary[ boneParam.name ];\n\n\t\t\tif ( boneIndex === undefined ) continue;\n\n\t\t\tconst bone = bones[ boneIndex ];\n\t\t\tbone.position.add( vector.fromArray( boneParam.translation ) );\n\t\t\tbone.quaternion.multiply( quaternion.fromArray( boneParam.quaternion ) );\n\n\t\t}\n\n\t\tmesh.updateMatrixWorld( true );\n\n\t\t// PMX animation system special path\n\t\tif ( this.configuration.pmxAnimation &&\n\t\t\tmesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === 'pmx' ) {\n\n\t\t\tconst sortedBonesData = this._sortBoneDataArray( mesh.geometry.userData.MMD.bones.slice() );\n\t\t\tconst ikSolver = params.ik !== false ? this._createCCDIKSolver( mesh ) : null;\n\t\t\tconst grantSolver = params.grant !== false ? this.createGrantSolver( mesh ) : null;\n\t\t\tthis._animatePMXMesh( mesh, sortedBonesData, ikSolver, grantSolver );\n\n\t\t} else {\n\n\t\t\tif ( params.ik !== false ) {\n\n\t\t\t\tthis._createCCDIKSolver( mesh ).update();\n\n\t\t\t}\n\n\t\t\tif ( params.grant !== false ) {\n\n\t\t\t\tthis.createGrantSolver( mesh ).update();\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Enabes/Disables an animation feature.\n\t *\n\t * @param {string} key\n\t * @param {boolean} enabled\n\t * @return {MMDAnimationHelper}\n\t */\n\tenable( key, enabled ) {\n\n\t\tif ( this.enabled[ key ] === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper.enable: '\n\t\t\t\t+ 'unknown key ' + key );\n\n\t\t}\n\n\t\tthis.enabled[ key ] = enabled;\n\n\t\tif ( key === 'physics' ) {\n\n\t\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\t\tthis._optimizeIK( this.meshes[ i ], enabled );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates an GrantSolver instance.\n\t *\n\t * @param {THREE.SkinnedMesh} mesh\n\t * @return {GrantSolver}\n\t */\n\tcreateGrantSolver( mesh ) {\n\n\t\treturn new GrantSolver( mesh, mesh.geometry.userData.MMD.grants );\n\n\t}\n\n\t// private methods\n\n\t_addMesh( mesh, params ) {\n\n\t\tif ( this.meshes.indexOf( mesh ) >= 0 ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._addMesh: '\n\t\t\t\t+ 'SkinnedMesh \\'' + mesh.name + '\\' has already been added.' );\n\n\t\t}\n\n\t\tthis.meshes.push( mesh );\n\t\tthis.objects.set( mesh, { looped: false } );\n\n\t\tthis._setupMeshAnimation( mesh, params.animation );\n\n\t\tif ( params.physics !== false ) {\n\n\t\t\tthis._setupMeshPhysics( mesh, params );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t_setupCamera( camera, params ) {\n\n\t\tif ( this.camera === camera ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._setupCamera: '\n\t\t\t\t+ 'Camera \\'' + camera.name + '\\' has already been set.' );\n\n\t\t}\n\n\t\tif ( this.camera ) this.clearCamera( this.camera );\n\n\t\tthis.camera = camera;\n\n\t\tcamera.add( this.cameraTarget );\n\n\t\tthis.objects.set( camera, {} );\n\n\t\tif ( params.animation !== undefined ) {\n\n\t\t\tthis._setupCameraAnimation( camera, params.animation );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t_setupAudio( audio, params ) {\n\n\t\tif ( this.audio === audio ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._setupAudio: '\n\t\t\t\t+ 'Audio \\'' + audio.name + '\\' has already been set.' );\n\n\t\t}\n\n\t\tif ( this.audio ) this.clearAudio( this.audio );\n\n\t\tthis.audio = audio;\n\t\tthis.audioManager = new AudioManager( audio, params );\n\n\t\tthis.objects.set( this.audioManager, {\n\t\t\tduration: this.audioManager.duration\n\t\t} );\n\n\t\treturn this;\n\n\t}\n\n\t_removeMesh( mesh ) {\n\n\t\tlet found = false;\n\t\tlet writeIndex = 0;\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tif ( this.meshes[ i ] === mesh ) {\n\n\t\t\t\tthis.objects.delete( mesh );\n\t\t\t\tfound = true;\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tthis.meshes[ writeIndex ++ ] = this.meshes[ i ];\n\n\t\t}\n\n\t\tif ( ! found ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._removeMesh: '\n\t\t\t\t+ 'SkinnedMesh \\'' + mesh.name + '\\' has not been added yet.' );\n\n\t\t}\n\n\t\tthis.meshes.length = writeIndex;\n\n\t\treturn this;\n\n\t}\n\n\t_clearCamera( camera ) {\n\n\t\tif ( camera !== this.camera ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._clearCamera: '\n\t\t\t\t+ 'Camera \\'' + camera.name + '\\' has not been set yet.' );\n\n\t\t}\n\n\t\tthis.camera.remove( this.cameraTarget );\n\n\t\tthis.objects.delete( this.camera );\n\t\tthis.camera = null;\n\n\t\treturn this;\n\n\t}\n\n\t_clearAudio( audio ) {\n\n\t\tif ( audio !== this.audio ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper._clearAudio: '\n\t\t\t\t+ 'Audio \\'' + audio.name + '\\' has not been set yet.' );\n\n\t\t}\n\n\t\tthis.objects.delete( this.audioManager );\n\n\t\tthis.audio = null;\n\t\tthis.audioManager = null;\n\n\t\treturn this;\n\n\t}\n\n\t_setupMeshAnimation( mesh, animation ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\tif ( animation !== undefined ) {\n\n\t\t\tconst animations = Array.isArray( animation )\n\t\t\t\t? animation : [ animation ];\n\n\t\t\tobjects.mixer = new AnimationMixer( mesh );\n\n\t\t\tfor ( let i = 0, il = animations.length; i < il; i ++ ) {\n\n\t\t\t\tobjects.mixer.clipAction( animations[ i ] ).play();\n\n\t\t\t}\n\n\t\t\t// TODO: find a workaround not to access ._clip looking like a private property\n\t\t\tobjects.mixer.addEventListener( 'loop', function ( event ) {\n\n\t\t\t\tconst tracks = event.action._clip.tracks;\n\n\t\t\t\tif ( tracks.length > 0 && tracks[ 0 ].name.slice( 0, 6 ) !== '.bones' ) return;\n\n\t\t\t\tobjects.looped = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tobjects.ikSolver = this._createCCDIKSolver( mesh );\n\t\tobjects.grantSolver = this.createGrantSolver( mesh );\n\n\t\treturn this;\n\n\t}\n\n\t_setupCameraAnimation( camera, animation ) {\n\n\t\tconst animations = Array.isArray( animation )\n\t\t\t? animation : [ animation ];\n\n\t\tconst objects = this.objects.get( camera );\n\n\t\tobjects.mixer = new AnimationMixer( camera );\n\n\t\tfor ( let i = 0, il = animations.length; i < il; i ++ ) {\n\n\t\t\tobjects.mixer.clipAction( animations[ i ] ).play();\n\n\t\t}\n\n\t}\n\n\t_setupMeshPhysics( mesh, params ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\t// shared physics is experimental\n\n\t\tif ( params.world === undefined && this.sharedPhysics ) {\n\n\t\t\tconst masterPhysics = this._getMasterPhysics();\n\n\t\t\tif ( masterPhysics !== null ) world = masterPhysics.world; // eslint-disable-line no-undef\n\n\t\t}\n\n\t\tobjects.physics = this._createMMDPhysics( mesh, params );\n\n\t\tif ( objects.mixer && params.animationWarmup !== false ) {\n\n\t\t\tthis._animateMesh( mesh, 0 );\n\t\t\tobjects.physics.reset();\n\n\t\t}\n\n\t\tobjects.physics.warmup( params.warmup !== undefined ? params.warmup : 60 );\n\n\t\tthis._optimizeIK( mesh, true );\n\n\t}\n\n\t_animateMesh( mesh, delta ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\tconst mixer = objects.mixer;\n\t\tconst ikSolver = objects.ikSolver;\n\t\tconst grantSolver = objects.grantSolver;\n\t\tconst physics = objects.physics;\n\t\tconst looped = objects.looped;\n\n\t\tif ( mixer && this.enabled.animation ) {\n\n\t\t\t// alternate solution to save/restore bones but less performant?\n\t\t\t//mesh.pose();\n\t\t\t//this._updatePropertyMixersBuffer( mesh );\n\n\t\t\tthis._restoreBones( mesh );\n\n\t\t\tmixer.update( delta );\n\n\t\t\tthis._saveBones( mesh );\n\n\t\t\t// PMX animation system special path\n\t\t\tif ( this.configuration.pmxAnimation &&\n\t\t\t\tmesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === 'pmx' ) {\n\n\t\t\t\tif ( ! objects.sortedBonesData ) objects.sortedBonesData = this._sortBoneDataArray( mesh.geometry.userData.MMD.bones.slice() );\n\n\t\t\t\tthis._animatePMXMesh(\n\t\t\t\t\tmesh,\n\t\t\t\t\tobjects.sortedBonesData,\n\t\t\t\t\tikSolver && this.enabled.ik ? ikSolver : null,\n\t\t\t\t\tgrantSolver && this.enabled.grant ? grantSolver : null\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tif ( ikSolver && this.enabled.ik ) {\n\n\t\t\t\t\tmesh.updateMatrixWorld( true );\n\t\t\t\t\tikSolver.update();\n\n\t\t\t\t}\n\n\t\t\t\tif ( grantSolver && this.enabled.grant ) {\n\n\t\t\t\t\tgrantSolver.update();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( looped === true && this.enabled.physics ) {\n\n\t\t\tif ( physics && this.configuration.resetPhysicsOnLoop ) physics.reset();\n\n\t\t\tobjects.looped = false;\n\n\t\t}\n\n\t\tif ( physics && this.enabled.physics && ! this.sharedPhysics ) {\n\n\t\t\tthis.onBeforePhysics( mesh );\n\t\t\tphysics.update( delta );\n\n\t\t}\n\n\t}\n\n\t// Sort bones in order by 1. transformationClass and 2. bone index.\n\t// In PMX animation system, bone transformations should be processed\n\t// in this order.\n\t_sortBoneDataArray( boneDataArray ) {\n\n\t\treturn boneDataArray.sort( function ( a, b ) {\n\n\t\t\tif ( a.transformationClass !== b.transformationClass ) {\n\n\t\t\t\treturn a.transformationClass - b.transformationClass;\n\n\t\t\t} else {\n\n\t\t\t\treturn a.index - b.index;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t// PMX Animation system is a bit too complex and doesn't great match to\n\t// Three.js Animation system. This method attempts to simulate it as much as\n\t// possible but doesn't perfectly simulate.\n\t// This method is more costly than the regular one so\n\t// you are recommended to set constructor parameter \"pmxAnimation: true\"\n\t// only if your PMX model animation doesn't work well.\n\t// If you need better method you would be required to write your own.\n\t_animatePMXMesh( mesh, sortedBonesData, ikSolver, grantSolver ) {\n\n\t\t_quaternionIndex = 0;\n\t\t_grantResultMap.clear();\n\n\t\tfor ( let i = 0, il = sortedBonesData.length; i < il; i ++ ) {\n\n\t\t\tupdateOne( mesh, sortedBonesData[ i ].index, ikSolver, grantSolver );\n\n\t\t}\n\n\t\tmesh.updateMatrixWorld( true );\n\t\treturn this;\n\n\t}\n\n\t_animateCamera( camera, delta ) {\n\n\t\tconst mixer = this.objects.get( camera ).mixer;\n\n\t\tif ( mixer && this.enabled.cameraAnimation ) {\n\n\t\t\tmixer.update( delta );\n\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\tcamera.up.set( 0, 1, 0 );\n\t\t\tcamera.up.applyQuaternion( camera.quaternion );\n\t\t\tcamera.lookAt( this.cameraTarget.position );\n\n\t\t}\n\n\t}\n\n\t_optimizeIK( mesh, physicsEnabled ) {\n\n\t\tconst iks = mesh.geometry.userData.MMD.iks;\n\t\tconst bones = mesh.geometry.userData.MMD.bones;\n\n\t\tfor ( let i = 0, il = iks.length; i < il; i ++ ) {\n\n\t\t\tconst ik = iks[ i ];\n\t\t\tconst links = ik.links;\n\n\t\t\tfor ( let j = 0, jl = links.length; j < jl; j ++ ) {\n\n\t\t\t\tconst link = links[ j ];\n\n\t\t\t\tif ( physicsEnabled === true ) {\n\n\t\t\t\t\t// disable IK of the bone the corresponding rigidBody type of which is 1 or 2\n\t\t\t\t\t// because its rotation will be overriden by physics\n\t\t\t\t\tlink.enabled = bones[ link.index ].rigidBodyType > 0 ? false : true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlink.enabled = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_createCCDIKSolver( mesh ) {\n\n\t\tif ( CCDIKSolver === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.MMDAnimationHelper: Import CCDIKSolver.' );\n\n\t\t}\n\n\t\treturn new CCDIKSolver( mesh, mesh.geometry.userData.MMD.iks );\n\n\t}\n\n\t_createMMDPhysics( mesh, params ) {\n\n\t\tif ( MMDPhysics === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.MMDPhysics: Import MMDPhysics.' );\n\n\t\t}\n\n\t\treturn new MMDPhysics(\n\t\t\tmesh,\n\t\t\tmesh.geometry.userData.MMD.rigidBodies,\n\t\t\tmesh.geometry.userData.MMD.constraints,\n\t\t\tparams );\n\n\t}\n\n\t/*\n\t * Detects the longest duration and then sets it to them to sync.\n\t * TODO: Not to access private properties ( ._actions and ._clip )\n\t */\n\t_syncDuration() {\n\n\t\tlet max = 0.0;\n\n\t\tconst objects = this.objects;\n\t\tconst meshes = this.meshes;\n\t\tconst camera = this.camera;\n\t\tconst audioManager = this.audioManager;\n\n\t\t// get the longest duration\n\n\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\tconst mixer = this.objects.get( meshes[ i ] ).mixer;\n\n\t\t\tif ( mixer === undefined ) continue;\n\n\t\t\tfor ( let j = 0; j < mixer._actions.length; j ++ ) {\n\n\t\t\t\tconst clip = mixer._actions[ j ]._clip;\n\n\t\t\t\tif ( ! objects.has( clip ) ) {\n\n\t\t\t\t\tobjects.set( clip, {\n\t\t\t\t\t\tduration: clip.duration\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tmax = Math.max( max, objects.get( clip ).duration );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( camera !== null ) {\n\n\t\t\tconst mixer = this.objects.get( camera ).mixer;\n\n\t\t\tif ( mixer !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, il = mixer._actions.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst clip = mixer._actions[ i ]._clip;\n\n\t\t\t\t\tif ( ! objects.has( clip ) ) {\n\n\t\t\t\t\t\tobjects.set( clip, {\n\t\t\t\t\t\t\tduration: clip.duration\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmax = Math.max( max, objects.get( clip ).duration );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( audioManager !== null ) {\n\n\t\t\tmax = Math.max( max, objects.get( audioManager ).duration );\n\n\t\t}\n\n\t\tmax += this.configuration.afterglow;\n\n\t\t// update the duration\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tconst mixer = this.objects.get( this.meshes[ i ] ).mixer;\n\n\t\t\tif ( mixer === undefined ) continue;\n\n\t\t\tfor ( let j = 0, jl = mixer._actions.length; j < jl; j ++ ) {\n\n\t\t\t\tmixer._actions[ j ]._clip.duration = max;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( camera !== null ) {\n\n\t\t\tconst mixer = this.objects.get( camera ).mixer;\n\n\t\t\tif ( mixer !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, il = mixer._actions.length; i < il; i ++ ) {\n\n\t\t\t\t\tmixer._actions[ i ]._clip.duration = max;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( audioManager !== null ) {\n\n\t\t\taudioManager.duration = max;\n\n\t\t}\n\n\t}\n\n\t// workaround\n\n\t_updatePropertyMixersBuffer( mesh ) {\n\n\t\tconst mixer = this.objects.get( mesh ).mixer;\n\n\t\tconst propertyMixers = mixer._bindings;\n\t\tconst accuIndex = mixer._accuIndex;\n\n\t\tfor ( let i = 0, il = propertyMixers.length; i < il; i ++ ) {\n\n\t\t\tconst propertyMixer = propertyMixers[ i ];\n\t\t\tconst buffer = propertyMixer.buffer;\n\t\t\tconst stride = propertyMixer.valueSize;\n\t\t\tconst offset = ( accuIndex + 1 ) * stride;\n\n\t\t\tpropertyMixer.binding.getValue( buffer, offset );\n\n\t\t}\n\n\t}\n\n\t/*\n\t * Avoiding these two issues by restore/save bones before/after mixer animation.\n\t *\n\t * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer.\n\t * Calculating IK, Grant, and Physics after mixer animation can break\n\t * the cache coherency.\n\t *\n\t * 2. Applying Grant two or more times without reset the posing breaks model.\n\t */\n\t_saveBones( mesh ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\tconst bones = mesh.skeleton.bones;\n\n\t\tlet backupBones = objects.backupBones;\n\n\t\tif ( backupBones === undefined ) {\n\n\t\t\tbackupBones = new Float32Array( bones.length * 7 );\n\t\t\tobjects.backupBones = backupBones;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tbone.position.toArray( backupBones, i * 7 );\n\t\t\tbone.quaternion.toArray( backupBones, i * 7 + 3 );\n\n\t\t}\n\n\t}\n\n\t_restoreBones( mesh ) {\n\n\t\tconst objects = this.objects.get( mesh );\n\n\t\tconst backupBones = objects.backupBones;\n\n\t\tif ( backupBones === undefined ) return;\n\n\t\tconst bones = mesh.skeleton.bones;\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tbone.position.fromArray( backupBones, i * 7 );\n\t\t\tbone.quaternion.fromArray( backupBones, i * 7 + 3 );\n\n\t\t}\n\n\t}\n\n\t// experimental\n\n\t_getMasterPhysics() {\n\n\t\tif ( this.masterPhysics !== null ) return this.masterPhysics;\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tconst physics = this.meshes[ i ].physics;\n\n\t\t\tif ( physics !== undefined && physics !== null ) {\n\n\t\t\t\tthis.masterPhysics = physics;\n\t\t\t\treturn this.masterPhysics;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_updateSharedPhysics( delta ) {\n\n\t\tif ( this.meshes.length === 0 || ! this.enabled.physics || ! this.sharedPhysics ) return;\n\n\t\tconst physics = this._getMasterPhysics();\n\n\t\tif ( physics === null ) return;\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tconst p = this.meshes[ i ].physics;\n\n\t\t\tif ( p !== null && p !== undefined ) {\n\n\t\t\t\tp.updateRigidBodies();\n\n\t\t\t}\n\n\t\t}\n\n\t\tphysics.stepSimulation( delta );\n\n\t\tfor ( let i = 0, il = this.meshes.length; i < il; i ++ ) {\n\n\t\t\tconst p = this.meshes[ i ].physics;\n\n\t\t\tif ( p !== null && p !== undefined ) {\n\n\t\t\t\tp.updateBones();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n// Keep working quaternions for less GC\nconst _quaternions = [];\nlet _quaternionIndex = 0;\n\nfunction getQuaternion() {\n\n\tif ( _quaternionIndex >= _quaternions.length ) {\n\n\t\t_quaternions.push( new Quaternion() );\n\n\t}\n\n\treturn _quaternions[ _quaternionIndex ++ ];\n\n}\n\n// Save rotation whose grant and IK are already applied\n// used by grant children\nconst _grantResultMap = new Map();\n\nfunction updateOne( mesh, boneIndex, ikSolver, grantSolver ) {\n\n\tconst bones = mesh.skeleton.bones;\n\tconst bonesData = mesh.geometry.userData.MMD.bones;\n\tconst boneData = bonesData[ boneIndex ];\n\tconst bone = bones[ boneIndex ];\n\n\t// Return if already updated by being referred as a grant parent.\n\tif ( _grantResultMap.has( boneIndex ) ) return;\n\n\tconst quaternion = getQuaternion();\n\n\t// Initialize grant result here to prevent infinite loop.\n\t// If it's referred before updating with actual result later\n\t// result without applyting IK or grant is gotten\n\t// but better than composing of infinite loop.\n\t_grantResultMap.set( boneIndex, quaternion.copy( bone.quaternion ) );\n\n\t// @TODO: Support global grant and grant position\n\tif ( grantSolver && boneData.grant &&\n\t\t! boneData.grant.isLocal && boneData.grant.affectRotation ) {\n\n\t\tconst parentIndex = boneData.grant.parentIndex;\n\t\tconst ratio = boneData.grant.ratio;\n\n\t\tif ( ! _grantResultMap.has( parentIndex ) ) {\n\n\t\t\tupdateOne( mesh, parentIndex, ikSolver, grantSolver );\n\n\t\t}\n\n\t\tgrantSolver.addGrantRotation( bone, _grantResultMap.get( parentIndex ), ratio );\n\n\t}\n\n\tif ( ikSolver && boneData.ik ) {\n\n\t\t// @TODO: Updating world matrices every time solving an IK bone is\n\t\t// costly. Optimize if possible.\n\t\tmesh.updateMatrixWorld( true );\n\t\tikSolver.updateOne( boneData.ik );\n\n\t\t// No confident, but it seems the grant results with ik links should be updated?\n\t\tconst links = boneData.ik.links;\n\n\t\tfor ( let i = 0, il = links.length; i < il; i ++ ) {\n\n\t\t\tconst link = links[ i ];\n\n\t\t\tif ( link.enabled === false ) continue;\n\n\t\t\tconst linkIndex = link.index;\n\n\t\t\tif ( _grantResultMap.has( linkIndex ) ) {\n\n\t\t\t\t_grantResultMap.set( linkIndex, _grantResultMap.get( linkIndex ).copy( bones[ linkIndex ].quaternion ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Update with the actual result here\n\tquaternion.copy( bone.quaternion );\n\n}\n\n//\n\nclass AudioManager {\n\n\t/**\n\t * @param {THREE.Audio} audio\n\t * @param {Object} params - (optional)\n\t * @param {Nuumber} params.delayTime\n\t */\n\tconstructor( audio, params = {} ) {\n\n\t\tthis.audio = audio;\n\n\t\tthis.elapsedTime = 0.0;\n\t\tthis.currentTime = 0.0;\n\t\tthis.delayTime = params.delayTime !== undefined\n\t\t\t? params.delayTime : 0.0;\n\n\t\tthis.audioDuration = this.audio.buffer.duration;\n\t\tthis.duration = this.audioDuration + this.delayTime;\n\n\t}\n\n\t/**\n\t * @param {Number} delta\n\t * @return {AudioManager}\n\t */\n\tcontrol( delta ) {\n\n\t\tthis.elapsed += delta;\n\t\tthis.currentTime += delta;\n\n\t\tif ( this._shouldStopAudio() ) this.audio.stop();\n\t\tif ( this._shouldStartAudio() ) this.audio.play();\n\n\t\treturn this;\n\n\t}\n\n\t// private methods\n\n\t_shouldStartAudio() {\n\n\t\tif ( this.audio.isPlaying ) return false;\n\n\t\twhile ( this.currentTime >= this.duration ) {\n\n\t\t\tthis.currentTime -= this.duration;\n\n\t\t}\n\n\t\tif ( this.currentTime < this.delayTime ) return false;\n\n\t\t// 'duration' can be bigger than 'audioDuration + delayTime' because of sync configuration\n\t\tif ( ( this.currentTime - this.delayTime ) > this.audioDuration ) return false;\n\n\t\treturn true;\n\n\t}\n\n\t_shouldStopAudio() {\n\n\t\treturn this.audio.isPlaying &&\n\t\t\tthis.currentTime >= this.duration;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\n/**\n * Solver for Grant (Fuyo in Japanese. I just google translated because\n * Fuyo may be MMD specific term and may not be common word in 3D CG terms.)\n * Grant propagates a bone's transform to other bones transforms even if\n * they are not children.\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array} grants\n */\nclass GrantSolver {\n\n\tconstructor( mesh, grants = [] ) {\n\n\t\tthis.mesh = mesh;\n\t\tthis.grants = grants;\n\n\t}\n\n\t/**\n\t * Solve all the grant bones\n\t * @return {GrantSolver}\n\t */\n\tupdate() {\n\n\t\tconst grants = this.grants;\n\n\t\tfor ( let i = 0, il = grants.length; i < il; i ++ ) {\n\n\t\t\tthis.updateOne( grants[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Solve a grant bone\n\t * @param {Object} grant - grant parameter\n\t * @return {GrantSolver}\n\t */\n\tupdateOne( grant ) {\n\n\t\tconst bones = this.mesh.skeleton.bones;\n\t\tconst bone = bones[ grant.index ];\n\t\tconst parentBone = bones[ grant.parentIndex ];\n\n\t\tif ( grant.isLocal ) {\n\n\t\t\t// TODO: implement\n\t\t\tif ( grant.affectPosition ) {\n\n\t\t\t}\n\n\t\t\t// TODO: implement\n\t\t\tif ( grant.affectRotation ) {\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// TODO: implement\n\t\t\tif ( grant.affectPosition ) {\n\n\t\t\t}\n\n\t\t\tif ( grant.affectRotation ) {\n\n\t\t\t\tthis.addGrantRotation( bone, parentBone.quaternion, grant.ratio );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddGrantRotation( bone, q, ratio ) {\n\n\t\t_q.set( 0, 0, 0, 1 );\n\t\t_q.slerp( q, ratio );\n\t\tbone.quaternion.multiply( _q );\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MMDAnimationHelper };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Depth-of-field shader with bokeh\n * ported from GLSL shader by Martins Upitis\n * http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update)\n *\n * Requires #define RINGS and SAMPLES integers\n */\nconst BokehShader = {\n\n\tname: 'BokehShader',\n\n\tuniforms: {\n\n\t\t'textureWidth': { value: 1.0 },\n\t\t'textureHeight': { value: 1.0 },\n\n\t\t'focalDepth': { value: 1.0 },\n\t\t'focalLength': { value: 24.0 },\n\t\t'fstop': { value: 0.9 },\n\n\t\t'tColor': { value: null },\n\t\t'tDepth': { value: null },\n\n\t\t'maxblur': { value: 1.0 },\n\n\t\t'showFocus': { value: 0 },\n\t\t'manualdof': { value: 0 },\n\t\t'vignetting': { value: 0 },\n\t\t'depthblur': { value: 0 },\n\n\t\t'threshold': { value: 0.5 },\n\t\t'gain': { value: 2.0 },\n\t\t'bias': { value: 0.5 },\n\t\t'fringe': { value: 0.7 },\n\n\t\t'znear': { value: 0.1 },\n\t\t'zfar': { value: 100 },\n\n\t\t'noise': { value: 1 },\n\t\t'dithering': { value: 0.0001 },\n\t\t'pentagon': { value: 0 },\n\n\t\t'shaderFocus': { value: 1 },\n\t\t'focusCoords': { value: new Vector2() }\n\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tColor;\n\t\tuniform sampler2D tDepth;\n\t\tuniform float textureWidth;\n\t\tuniform float textureHeight;\n\n\t\tuniform float focalDepth; //focal distance value in meters, but you may use autofocus option below\n\t\tuniform float focalLength; //focal length in mm\n\t\tuniform float fstop; //f-stop value\n\t\tuniform bool showFocus; //show debug focus point and focal range (red = focal point, green = focal range)\n\n\t\t/*\n\t\tmake sure that these two values are the same for your camera, otherwise distances will be wrong.\n\t\t*/\n\n\t\tuniform float znear; // camera clipping start\n\t\tuniform float zfar; // camera clipping end\n\n\t\t//------------------------------------------\n\t\t//user variables\n\n\t\tconst int samples = SAMPLES; //samples on the first ring\n\t\tconst int rings = RINGS; //ring count\n\n\t\tconst int maxringsamples = rings * samples;\n\n\t\tuniform bool manualdof; // manual dof calculation\n\t\tfloat ndofstart = 1.0; // near dof blur start\n\t\tfloat ndofdist = 2.0; // near dof blur falloff distance\n\t\tfloat fdofstart = 1.0; // far dof blur start\n\t\tfloat fdofdist = 3.0; // far dof blur falloff distance\n\n\t\tfloat CoC = 0.03; //circle of confusion size in mm (35mm film = 0.03mm)\n\n\t\tuniform bool vignetting; // use optical lens vignetting\n\n\t\tfloat vignout = 1.3; // vignetting outer border\n\t\tfloat vignin = 0.0; // vignetting inner border\n\t\tfloat vignfade = 22.0; // f-stops till vignete fades\n\n\t\tuniform bool shaderFocus;\n\t\t// disable if you use external focalDepth value\n\n\t\tuniform vec2 focusCoords;\n\t\t// autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right)\n\t\t// if center of screen use vec2(0.5, 0.5);\n\n\t\tuniform float maxblur;\n\t\t//clamp value of max blur (0.0 = no blur, 1.0 default)\n\n\t\tuniform float threshold; // highlight threshold;\n\t\tuniform float gain; // highlight gain;\n\n\t\tuniform float bias; // bokeh edge bias\n\t\tuniform float fringe; // bokeh chromatic aberration / fringing\n\n\t\tuniform bool noise; //use noise instead of pattern for sample dithering\n\n\t\tuniform float dithering;\n\n\t\tuniform bool depthblur; // blur the depth buffer\n\t\tfloat dbsize = 1.25; // depth blur size\n\n\t\t/*\n\t\tnext part is experimental\n\t\tnot looking good with small sample and ring count\n\t\tlooks okay starting from samples = 4, rings = 4\n\t\t*/\n\n\t\tuniform bool pentagon; //use pentagon as bokeh shape?\n\t\tfloat feather = 0.4; //pentagon shape feather\n\n\t\t//------------------------------------------\n\n\t\tfloat penta(vec2 coords) {\n\t\t\t//pentagonal shape\n\t\t\tfloat scale = float(rings) - 1.3;\n\t\t\tvec4 HS0 = vec4( 1.0, 0.0, 0.0, 1.0);\n\t\t\tvec4 HS1 = vec4( 0.309016994, 0.951056516, 0.0, 1.0);\n\t\t\tvec4 HS2 = vec4(-0.809016994, 0.587785252, 0.0, 1.0);\n\t\t\tvec4 HS3 = vec4(-0.809016994,-0.587785252, 0.0, 1.0);\n\t\t\tvec4 HS4 = vec4( 0.309016994,-0.951056516, 0.0, 1.0);\n\t\t\tvec4 HS5 = vec4( 0.0 ,0.0 , 1.0, 1.0);\n\n\t\t\tvec4 one = vec4( 1.0 );\n\n\t\t\tvec4 P = vec4((coords),vec2(scale, scale));\n\n\t\t\tvec4 dist = vec4(0.0);\n\t\t\tfloat inorout = -4.0;\n\n\t\t\tdist.x = dot( P, HS0 );\n\t\t\tdist.y = dot( P, HS1 );\n\t\t\tdist.z = dot( P, HS2 );\n\t\t\tdist.w = dot( P, HS3 );\n\n\t\t\tdist = smoothstep( -feather, feather, dist );\n\n\t\t\tinorout += dot( dist, one );\n\n\t\t\tdist.x = dot( P, HS4 );\n\t\t\tdist.y = HS5.w - abs( P.z );\n\n\t\t\tdist = smoothstep( -feather, feather, dist );\n\t\t\tinorout += dist.x;\n\n\t\t\treturn clamp( inorout, 0.0, 1.0 );\n\t\t}\n\n\t\tfloat bdepth(vec2 coords) {\n\t\t\t// Depth buffer blur\n\t\t\tfloat d = 0.0;\n\t\t\tfloat kernel[9];\n\t\t\tvec2 offset[9];\n\n\t\t\tvec2 wh = vec2(1.0/textureWidth,1.0/textureHeight) * dbsize;\n\n\t\t\toffset[0] = vec2(-wh.x,-wh.y);\n\t\t\toffset[1] = vec2( 0.0, -wh.y);\n\t\t\toffset[2] = vec2( wh.x -wh.y);\n\n\t\t\toffset[3] = vec2(-wh.x, 0.0);\n\t\t\toffset[4] = vec2( 0.0, 0.0);\n\t\t\toffset[5] = vec2( wh.x, 0.0);\n\n\t\t\toffset[6] = vec2(-wh.x, wh.y);\n\t\t\toffset[7] = vec2( 0.0, wh.y);\n\t\t\toffset[8] = vec2( wh.x, wh.y);\n\n\t\t\tkernel[0] = 1.0/16.0; kernel[1] = 2.0/16.0; kernel[2] = 1.0/16.0;\n\t\t\tkernel[3] = 2.0/16.0; kernel[4] = 4.0/16.0; kernel[5] = 2.0/16.0;\n\t\t\tkernel[6] = 1.0/16.0; kernel[7] = 2.0/16.0; kernel[8] = 1.0/16.0;\n\n\n\t\t\tfor( int i=0; i<9; i++ ) {\n\t\t\t\tfloat tmp = texture2D(tDepth, coords + offset[i]).r;\n\t\t\t\td += tmp * kernel[i];\n\t\t\t}\n\n\t\t\treturn d;\n\t\t}\n\n\n\t\tvec3 color(vec2 coords,float blur) {\n\t\t\t//processing the sample\n\n\t\t\tvec3 col = vec3(0.0);\n\t\t\tvec2 texel = vec2(1.0/textureWidth,1.0/textureHeight);\n\n\t\t\tcol.r = texture2D(tColor,coords + vec2(0.0,1.0)*texel*fringe*blur).r;\n\t\t\tcol.g = texture2D(tColor,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g;\n\t\t\tcol.b = texture2D(tColor,coords + vec2(0.866,-0.5)*texel*fringe*blur).b;\n\n\t\t\tvec3 lumcoeff = vec3(0.299,0.587,0.114);\n\t\t\tfloat lum = dot(col.rgb, lumcoeff);\n\t\t\tfloat thresh = max((lum-threshold)*gain, 0.0);\n\t\t\treturn col+mix(vec3(0.0),col,thresh*blur);\n\t\t}\n\n\t\tvec3 debugFocus(vec3 col, float blur, float depth) {\n\t\t\tfloat edge = 0.002*depth; //distance based edge smoothing\n\t\t\tfloat m = clamp(smoothstep(0.0,edge,blur),0.0,1.0);\n\t\t\tfloat e = clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0);\n\n\t\t\tcol = mix(col,vec3(1.0,0.5,0.0),(1.0-m)*0.6);\n\t\t\tcol = mix(col,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2);\n\n\t\t\treturn col;\n\t\t}\n\n\t\tfloat linearize(float depth) {\n\t\t\treturn -zfar * znear / (depth * (zfar - znear) - zfar);\n\t\t}\n\n\t\tfloat vignette() {\n\t\t\tfloat dist = distance(vUv.xy, vec2(0.5,0.5));\n\t\t\tdist = smoothstep(vignout+(fstop/vignfade), vignin+(fstop/vignfade), dist);\n\t\t\treturn clamp(dist,0.0,1.0);\n\t\t}\n\n\t\tfloat gather(float i, float j, int ringsamples, inout vec3 col, float w, float h, float blur) {\n\t\t\tfloat rings2 = float(rings);\n\t\t\tfloat step = PI*2.0 / float(ringsamples);\n\t\t\tfloat pw = cos(j*step)*i;\n\t\t\tfloat ph = sin(j*step)*i;\n\t\t\tfloat p = 1.0;\n\t\t\tif (pentagon) {\n\t\t\t\tp = penta(vec2(pw,ph));\n\t\t\t}\n\t\t\tcol += color(vUv.xy + vec2(pw*w,ph*h), blur) * mix(1.0, i/rings2, bias) * p;\n\t\t\treturn 1.0 * mix(1.0, i /rings2, bias) * p;\n\t\t}\n\n\t\tvoid main() {\n\t\t\t//scene depth calculation\n\n\t\t\tfloat depth = linearize(texture2D(tDepth,vUv.xy).x);\n\n\t\t\t// Blur depth?\n\t\t\tif ( depthblur ) {\n\t\t\t\tdepth = linearize(bdepth(vUv.xy));\n\t\t\t}\n\n\t\t\t//focal plane calculation\n\n\t\t\tfloat fDepth = focalDepth;\n\n\t\t\tif (shaderFocus) {\n\n\t\t\t\tfDepth = linearize(texture2D(tDepth,focusCoords).x);\n\n\t\t\t}\n\n\t\t\t// dof blur factor calculation\n\n\t\t\tfloat blur = 0.0;\n\n\t\t\tif (manualdof) {\n\t\t\t\tfloat a = depth-fDepth; // Focal plane\n\t\t\t\tfloat b = (a-fdofstart)/fdofdist; // Far DoF\n\t\t\t\tfloat c = (-a-ndofstart)/ndofdist; // Near Dof\n\t\t\t\tblur = (a>0.0) ? b : c;\n\t\t\t} else {\n\t\t\t\tfloat f = focalLength; // focal length in mm\n\t\t\t\tfloat d = fDepth*1000.0; // focal plane in mm\n\t\t\t\tfloat o = depth*1000.0; // depth in mm\n\n\t\t\t\tfloat a = (o*f)/(o-f);\n\t\t\t\tfloat b = (d*f)/(d-f);\n\t\t\t\tfloat c = (d-f)/(d*fstop*CoC);\n\n\t\t\t\tblur = abs(a-b)*c;\n\t\t\t}\n\n\t\t\tblur = clamp(blur,0.0,1.0);\n\n\t\t\t// calculation of pattern for dithering\n\n\t\t\tvec2 noise = vec2(rand(vUv.xy), rand( vUv.xy + vec2( 0.4, 0.6 ) ) )*dithering*blur;\n\n\t\t\t// getting blur x and y step factor\n\n\t\t\tfloat w = (1.0/textureWidth)*blur*maxblur+noise.x;\n\t\t\tfloat h = (1.0/textureHeight)*blur*maxblur+noise.y;\n\n\t\t\t// calculation of final color\n\n\t\t\tvec3 col = vec3(0.0);\n\n\t\t\tif(blur < 0.05) {\n\t\t\t\t//some optimization thingy\n\t\t\t\tcol = texture2D(tColor, vUv.xy).rgb;\n\t\t\t} else {\n\t\t\t\tcol = texture2D(tColor, vUv.xy).rgb;\n\t\t\t\tfloat s = 1.0;\n\t\t\t\tint ringsamples;\n\n\t\t\t\tfor (int i = 1; i <= rings; i++) {\n\t\t\t\t\t/*unboxstart*/\n\t\t\t\t\tringsamples = i * samples;\n\n\t\t\t\t\tfor (int j = 0 ; j < maxringsamples ; j++) {\n\t\t\t\t\t\tif (j >= ringsamples) break;\n\t\t\t\t\t\ts += gather(float(i), float(j), ringsamples, col, w, h, blur);\n\t\t\t\t\t}\n\t\t\t\t\t/*unboxend*/\n\t\t\t\t}\n\n\t\t\t\tcol /= s; //divide by sample count\n\t\t\t}\n\n\t\t\tif (showFocus) {\n\t\t\t\tcol = debugFocus(col, blur, depth);\n\t\t\t}\n\n\t\t\tif (vignetting) {\n\t\t\t\tcol *= vignette();\n\t\t\t}\n\n\t\t\tgl_FragColor.rgb = col;\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t\t#include \n\t\t\t#include \n\t\t}`\n\n};\n\nconst BokehDepthShader = {\n\n\tname: 'BokehDepthShader',\n\n\tuniforms: {\n\n\t\t'mNear': { value: 1.0 },\n\t\t'mFar': { value: 1000.0 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying float vViewZDepth;\n\n\t\tvoid main() {\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t\tvViewZDepth = - mvPosition.z;\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float mNear;\n\t\tuniform float mFar;\n\n\t\tvarying float vViewZDepth;\n\n\t\tvoid main() {\n\n\t\t\tfloat color = 1.0 - smoothstep( mNear, mFar, vViewZDepth );\n\t\t\tgl_FragColor = vec4( vec3( color ), 1.0 );\n\n\t\t}`\n\n};\n\nexport { BokehShader, BokehDepthShader };\n", "import {\n\tMesh,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPlaneGeometry,\n\tScene,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\n\nimport { BokehShader, BokehDepthShader } from '../shaders/BokehShader2.js';\n\nclass CinematicCamera extends PerspectiveCamera {\n\n\tconstructor( fov, aspect, near, far ) {\n\n\t\tsuper( fov, aspect, near, far );\n\n\t\tthis.type = 'CinematicCamera';\n\n\t\tthis.postprocessing = { enabled: true };\n\t\tthis.shaderSettings = {\n\t\t\trings: 3,\n\t\t\tsamples: 4\n\t\t};\n\n\t\tconst depthShader = BokehDepthShader;\n\n\t\tthis.materialDepth = new ShaderMaterial( {\n\t\t\tuniforms: depthShader.uniforms,\n\t\t\tvertexShader: depthShader.vertexShader,\n\t\t\tfragmentShader: depthShader.fragmentShader\n\t\t} );\n\n\t\tthis.materialDepth.uniforms[ 'mNear' ].value = near;\n\t\tthis.materialDepth.uniforms[ 'mFar' ].value = far;\n\n\t\t// In case of cinematicCamera, having a default lens set is important\n\t\tthis.setLens();\n\n\t\tthis.initPostProcessing();\n\n\t}\n\n\t// providing fnumber and coc(Circle of Confusion) as extra arguments\n\t// In case of cinematicCamera, having a default lens set is important\n\t// if fnumber and coc are not provided, cinematicCamera tries to act as a basic PerspectiveCamera\n\tsetLens( focalLength = 35, filmGauge = 35, fNumber = 8, coc = 0.019 ) {\n\n\t\tthis.filmGauge = filmGauge;\n\n\t\tthis.setFocalLength( focalLength );\n\n\t\tthis.fNumber = fNumber;\n\t\tthis.coc = coc;\n\n\t\t// fNumber is focalLength by aperture\n\t\tthis.aperture = focalLength / this.fNumber;\n\n\t\t// hyperFocal is required to calculate depthOfField when a lens tries to focus at a distance with given fNumber and focalLength\n\t\tthis.hyperFocal = ( focalLength * focalLength ) / ( this.aperture * this.coc );\n\n\t}\n\n\tlinearize( depth ) {\n\n\t\tconst zfar = this.far;\n\t\tconst znear = this.near;\n\t\treturn - zfar * znear / ( depth * ( zfar - znear ) - zfar );\n\n\t}\n\n\tsmoothstep( near, far, depth ) {\n\n\t\tconst x = this.saturate( ( depth - near ) / ( far - near ) );\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t}\n\n\tsaturate( x ) {\n\n\t\treturn Math.max( 0, Math.min( 1, x ) );\n\n\t}\n\n\t// function for focusing at a distance from the camera\n\tfocusAt( focusDistance = 20 ) {\n\n\t\tconst focalLength = this.getFocalLength();\n\n\t\t// distance from the camera (normal to frustrum) to focus on\n\t\tthis.focus = focusDistance;\n\n\t\t// the nearest point from the camera which is in focus (unused)\n\t\tthis.nearPoint = ( this.hyperFocal * this.focus ) / ( this.hyperFocal + ( this.focus - focalLength ) );\n\n\t\t// the farthest point from the camera which is in focus (unused)\n\t\tthis.farPoint = ( this.hyperFocal * this.focus ) / ( this.hyperFocal - ( this.focus - focalLength ) );\n\n\t\t// the gap or width of the space in which is everything is in focus (unused)\n\t\tthis.depthOfField = this.farPoint - this.nearPoint;\n\n\t\t// Considering minimum distance of focus for a standard lens (unused)\n\t\tif ( this.depthOfField < 0 ) this.depthOfField = 0;\n\n\t\tthis.sdistance = this.smoothstep( this.near, this.far, this.focus );\n\n\t\tthis.ldistance = this.linearize( 1 -\tthis.sdistance );\n\n\t\tthis.postprocessing.bokeh_uniforms[ 'focalDepth' ].value = this.ldistance;\n\n\t}\n\n\tinitPostProcessing() {\n\n\t\tif ( this.postprocessing.enabled ) {\n\n\t\t\tthis.postprocessing.scene = new Scene();\n\n\t\t\tthis.postprocessing.camera = new OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2,\twindow.innerHeight / 2, window.innerHeight / - 2, - 10000, 10000 );\n\n\t\t\tthis.postprocessing.scene.add( this.postprocessing.camera );\n\n\t\t\tthis.postprocessing.rtTextureDepth = new WebGLRenderTarget( window.innerWidth, window.innerHeight );\n\t\t\tthis.postprocessing.rtTextureColor = new WebGLRenderTarget( window.innerWidth, window.innerHeight );\n\n\t\t\tconst bokeh_shader = BokehShader;\n\n\t\t\tthis.postprocessing.bokeh_uniforms = UniformsUtils.clone( bokeh_shader.uniforms );\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'tColor' ].value = this.postprocessing.rtTextureColor.texture;\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'tDepth' ].value = this.postprocessing.rtTextureDepth.texture;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'manualdof' ].value = 0;\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'shaderFocus' ].value = 0;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'fstop' ].value = 2.8;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'showFocus' ].value = 1;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'focalDepth' ].value = 0.1;\n\n\t\t\t//console.log( this.postprocessing.bokeh_uniforms[ \"focalDepth\" ].value );\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'znear' ].value = this.near;\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'zfar' ].value = this.near;\n\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'textureWidth' ].value = window.innerWidth;\n\n\t\t\tthis.postprocessing.bokeh_uniforms[ 'textureHeight' ].value = window.innerHeight;\n\n\t\t\tthis.postprocessing.materialBokeh = new ShaderMaterial( {\n\t\t\t\tuniforms: this.postprocessing.bokeh_uniforms,\n\t\t\t\tvertexShader: bokeh_shader.vertexShader,\n\t\t\t\tfragmentShader: bokeh_shader.fragmentShader,\n\t\t\t\tdefines: {\n\t\t\t\t\tRINGS: this.shaderSettings.rings,\n\t\t\t\t\tSAMPLES: this.shaderSettings.samples,\n\t\t\t\t\tDEPTH_PACKING: 1\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.postprocessing.quad = new Mesh( new PlaneGeometry( window.innerWidth, window.innerHeight ), this.postprocessing.materialBokeh );\n\t\t\tthis.postprocessing.quad.position.z = - 500;\n\t\t\tthis.postprocessing.scene.add( this.postprocessing.quad );\n\n\t\t}\n\n\t}\n\n\trenderCinematic( scene, renderer ) {\n\n\t\tif ( this.postprocessing.enabled ) {\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\trenderer.clear();\n\n\t\t\t// Render scene into texture\n\n\t\t\tscene.overrideMaterial = null;\n\t\t\trenderer.setRenderTarget( this.postprocessing.rtTextureColor );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, this );\n\n\t\t\t// Render depth into texture\n\n\t\t\tscene.overrideMaterial = this.materialDepth;\n\t\t\trenderer.setRenderTarget( this.postprocessing.rtTextureDepth );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, this );\n\n\t\t\t// Render bokeh composite\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.render( this.postprocessing.scene, this.postprocessing.camera );\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t}\n\n\t}\n\n}\n\nexport { CinematicCamera };\n", "class WebGL {\n\n\tstatic isWebGLAvailable() {\n\n\t\ttry {\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tstatic isWebGL2Available() {\n\n\t\ttry {\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGL2RenderingContext && canvas.getContext( 'webgl2' ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tstatic isColorSpaceAvailable( colorSpace ) {\n\n\t\ttry {\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\tconst ctx = window.WebGL2RenderingContext && canvas.getContext( 'webgl2' );\n\t\t\tctx.drawingBufferColorSpace = colorSpace;\n\t\t\treturn ctx.drawingBufferColorSpace === colorSpace; // deepscan-disable-line SAME_OPERAND_VALUE\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tstatic getWebGLErrorMessage() {\n\n\t\treturn this.getErrorMessage( 1 );\n\n\t}\n\n\tstatic getWebGL2ErrorMessage() {\n\n\t\treturn this.getErrorMessage( 2 );\n\n\t}\n\n\tstatic getErrorMessage( version ) {\n\n\t\tconst names = {\n\t\t\t1: 'WebGL',\n\t\t\t2: 'WebGL 2'\n\t\t};\n\n\t\tconst contexts = {\n\t\t\t1: window.WebGLRenderingContext,\n\t\t\t2: window.WebGL2RenderingContext\n\t\t};\n\n\t\tlet message = 'Your $0 does not seem to support $1';\n\n\t\tconst element = document.createElement( 'div' );\n\t\telement.id = 'webglmessage';\n\t\telement.style.fontFamily = 'monospace';\n\t\telement.style.fontSize = '13px';\n\t\telement.style.fontWeight = 'normal';\n\t\telement.style.textAlign = 'center';\n\t\telement.style.background = '#fff';\n\t\telement.style.color = '#000';\n\t\telement.style.padding = '1.5em';\n\t\telement.style.width = '400px';\n\t\telement.style.margin = '5em auto 0';\n\n\t\tif ( contexts[ version ] ) {\n\n\t\t\tmessage = message.replace( '$0', 'graphics card' );\n\n\t\t} else {\n\n\t\t\tmessage = message.replace( '$0', 'browser' );\n\n\t\t}\n\n\t\tmessage = message.replace( '$1', names[ version ] );\n\n\t\telement.innerHTML = message;\n\n\t\treturn element;\n\n\t}\n\n}\n\nexport default WebGL;\n", "import {\n\tGridHelper,\n\tEllipseCurve,\n\tBufferGeometry,\n\tLine,\n\tLineBasicMaterial,\n\tRaycaster,\n\tGroup,\n\tBox3,\n\tSphere,\n\tQuaternion,\n\tVector2,\n\tVector3,\n\tMatrix4,\n\tMathUtils,\n\tEventDispatcher\n} from 'three';\n\n//trackball state\nconst STATE = {\n\n\tIDLE: Symbol(),\n\tROTATE: Symbol(),\n\tPAN: Symbol(),\n\tSCALE: Symbol(),\n\tFOV: Symbol(),\n\tFOCUS: Symbol(),\n\tZROTATE: Symbol(),\n\tTOUCH_MULTI: Symbol(),\n\tANIMATION_FOCUS: Symbol(),\n\tANIMATION_ROTATE: Symbol()\n\n};\n\nconst INPUT = {\n\n\tNONE: Symbol(),\n\tONE_FINGER: Symbol(),\n\tONE_FINGER_SWITCHED: Symbol(),\n\tTWO_FINGER: Symbol(),\n\tMULT_FINGER: Symbol(),\n\tCURSOR: Symbol()\n\n};\n\n//cursor center coordinates\nconst _center = {\n\n\tx: 0,\n\ty: 0\n\n};\n\n//transformation matrices for gizmos and camera\nconst _transformation = {\n\n\tcamera: new Matrix4(),\n\tgizmos: new Matrix4()\n\n};\n\n//events\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\n\nconst _raycaster = new Raycaster();\nconst _offset = new Vector3();\n\nconst _gizmoMatrixStateTemp = new Matrix4();\nconst _cameraMatrixStateTemp = new Matrix4();\nconst _scalePointTemp = new Vector3();\n/**\n *\n * @param {Camera} camera Virtual camera used in the scene\n * @param {HTMLElement} domElement Renderer's dom element\n * @param {Scene} scene The scene to be rendered\n */\nclass ArcballControls extends EventDispatcher {\n\n\tconstructor( camera, domElement, scene = null ) {\n\n\t\tsuper();\n\t\tthis.camera = null;\n\t\tthis.domElement = domElement;\n\t\tthis.scene = scene;\n\t\tthis.target = new Vector3();\n\t\tthis._currentTarget = new Vector3();\n\t\tthis.radiusFactor = 0.67;\n\n\t\tthis.mouseActions = [];\n\t\tthis._mouseOp = null;\n\n\n\t\t//global vectors and matrices that are used in some operations to avoid creating new objects every time (e.g. every time cursor moves)\n\t\tthis._v2_1 = new Vector2();\n\t\tthis._v3_1 = new Vector3();\n\t\tthis._v3_2 = new Vector3();\n\n\t\tthis._m4_1 = new Matrix4();\n\t\tthis._m4_2 = new Matrix4();\n\n\t\tthis._quat = new Quaternion();\n\n\t\t//transformation matrices\n\t\tthis._translationMatrix = new Matrix4(); //matrix for translation operation\n\t\tthis._rotationMatrix = new Matrix4(); //matrix for rotation operation\n\t\tthis._scaleMatrix = new Matrix4(); //matrix for scaling operation\n\n\t\tthis._rotationAxis = new Vector3(); //axis for rotate operation\n\n\n\t\t//camera state\n\t\tthis._cameraMatrixState = new Matrix4();\n\t\tthis._cameraProjectionState = new Matrix4();\n\n\t\tthis._fovState = 1;\n\t\tthis._upState = new Vector3();\n\t\tthis._zoomState = 1;\n\t\tthis._nearPos = 0;\n\t\tthis._farPos = 0;\n\n\t\tthis._gizmoMatrixState = new Matrix4();\n\n\t\t//initial values\n\t\tthis._up0 = new Vector3();\n\t\tthis._zoom0 = 1;\n\t\tthis._fov0 = 0;\n\t\tthis._initialNear = 0;\n\t\tthis._nearPos0 = 0;\n\t\tthis._initialFar = 0;\n\t\tthis._farPos0 = 0;\n\t\tthis._cameraMatrixState0 = new Matrix4();\n\t\tthis._gizmoMatrixState0 = new Matrix4();\n\n\t\t//pointers array\n\t\tthis._button = - 1;\n\t\tthis._touchStart = [];\n\t\tthis._touchCurrent = [];\n\t\tthis._input = INPUT.NONE;\n\n\t\t//two fingers touch interaction\n\t\tthis._switchSensibility = 32;\t//minimum movement to be performed to fire single pan start after the second finger has been released\n\t\tthis._startFingerDistance = 0; //distance between two fingers\n\t\tthis._currentFingerDistance = 0;\n\t\tthis._startFingerRotation = 0; //amount of rotation performed with two fingers\n\t\tthis._currentFingerRotation = 0;\n\n\t\t//double tap\n\t\tthis._devPxRatio = 0;\n\t\tthis._downValid = true;\n\t\tthis._nclicks = 0;\n\t\tthis._downEvents = [];\n\t\tthis._downStart = 0;\t//pointerDown time\n\t\tthis._clickStart = 0;\t//first click time\n\t\tthis._maxDownTime = 250;\n\t\tthis._maxInterval = 300;\n\t\tthis._posThreshold = 24;\n\t\tthis._movementThreshold = 24;\n\n\t\t//cursor positions\n\t\tthis._currentCursorPosition = new Vector3();\n\t\tthis._startCursorPosition = new Vector3();\n\n\t\t//grid\n\t\tthis._grid = null; //grid to be visualized during pan operation\n\t\tthis._gridPosition = new Vector3();\n\n\t\t//gizmos\n\t\tthis._gizmos = new Group();\n\t\tthis._curvePts = 128;\n\n\n\t\t//animations\n\t\tthis._timeStart = - 1; //initial time\n\t\tthis._animationId = - 1;\n\n\t\t//focus animation\n\t\tthis.focusAnimationTime = 500; //duration of focus animation in ms\n\n\t\t//rotate animation\n\t\tthis._timePrev = 0; //time at which previous rotate operation has been detected\n\t\tthis._timeCurrent = 0; //time at which current rotate operation has been detected\n\t\tthis._anglePrev = 0; //angle of previous rotation\n\t\tthis._angleCurrent = 0; //angle of current rotation\n\t\tthis._cursorPosPrev = new Vector3();\t//cursor position when previous rotate operation has been detected\n\t\tthis._cursorPosCurr = new Vector3();//cursor position when current rotate operation has been detected\n\t\tthis._wPrev = 0; //angular velocity of the previous rotate operation\n\t\tthis._wCurr = 0; //angular velocity of the current rotate operation\n\n\n\t\t//parameters\n\t\tthis.adjustNearFar = false;\n\t\tthis.scaleFactor = 1.1;\t//zoom/distance multiplier\n\t\tthis.dampingFactor = 25;\n\t\tthis.wMax = 20;\t//maximum angular velocity allowed\n\t\tthis.enableAnimations = true; //if animations should be performed\n\t\tthis.enableGrid = false; //if grid should be showed during pan operation\n\t\tthis.cursorZoom = false;\t//if wheel zoom should be cursor centered\n\t\tthis.minFov = 5;\n\t\tthis.maxFov = 90;\n\t\tthis.rotateSpeed = 1;\n\n\t\tthis.enabled = true;\n\t\tthis.enablePan = true;\n\t\tthis.enableRotate = true;\n\t\tthis.enableZoom = true;\n\t\tthis.enableGizmos = true;\n\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t//trackball parameters\n\t\tthis._tbRadius = 1;\n\n\t\t//FSA\n\t\tthis._state = STATE.IDLE;\n\n\t\tthis.setCamera( camera );\n\n\t\tif ( this.scene != null ) {\n\n\t\t\tthis.scene.add( this._gizmos );\n\n\t\t}\n\n\t\tthis.domElement.style.touchAction = 'none';\n\t\tthis._devPxRatio = window.devicePixelRatio;\n\n\t\tthis.initializeMouseActions();\n\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\t\tthis._onWheel = onWheel.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerCancel = onPointerCancel.bind( this );\n\t\tthis._onWindowResize = onWindowResize.bind( this );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\t\tthis.domElement.addEventListener( 'wheel', this._onWheel );\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerCancel );\n\n\t\twindow.addEventListener( 'resize', this._onWindowResize );\n\n\t}\n\n\tonSinglePanStart( event, operation ) {\n\n\t\tif ( this.enabled ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.setCenter( event.clientX, event.clientY );\n\n\t\t\tswitch ( operation ) {\n\n\t\t\t\tcase 'PAN':\n\n\t\t\t\t\tif ( ! this.enablePan ) {\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\t\tcancelAnimationFrame( this._animationId );\n\t\t\t\t\t\tthis._animationId = - 1;\n\t\t\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\t\t\tthis.activateGizmos( false );\n\t\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.PAN, true );\n\t\t\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement ) );\n\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\tthis.drawGrid();\n\t\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ROTATE':\n\n\t\t\t\t\tif ( ! this.enableRotate ) {\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\t\tcancelAnimationFrame( this._animationId );\n\t\t\t\t\t\tthis._animationId = - 1;\n\t\t\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.ROTATE, true );\n\t\t\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbSurface( this.camera, _center.x, _center.y, this.domElement, this._tbRadius ) );\n\t\t\t\t\tthis.activateGizmos( true );\n\t\t\t\t\tif ( this.enableAnimations ) {\n\n\t\t\t\t\t\tthis._timePrev = this._timeCurrent = performance.now();\n\t\t\t\t\t\tthis._angleCurrent = this._anglePrev = 0;\n\t\t\t\t\t\tthis._cursorPosPrev.copy( this._startCursorPosition );\n\t\t\t\t\t\tthis._cursorPosCurr.copy( this._cursorPosPrev );\n\t\t\t\t\t\tthis._wCurr = 0;\n\t\t\t\t\t\tthis._wPrev = this._wCurr;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'FOV':\n\n\t\t\t\t\tif ( ! this.camera.isPerspectiveCamera || ! this.enableZoom ) {\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\t\tcancelAnimationFrame( this._animationId );\n\t\t\t\t\t\tthis._animationId = - 1;\n\t\t\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\t\t\tthis.activateGizmos( false );\n\t\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.FOV, true );\n\t\t\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZOOM':\n\n\t\t\t\t\tif ( ! this.enableZoom ) {\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\t\tcancelAnimationFrame( this._animationId );\n\t\t\t\t\t\tthis._animationId = - 1;\n\t\t\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\t\t\tthis.activateGizmos( false );\n\t\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.SCALE, true );\n\t\t\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tonSinglePanMove( event, opState ) {\n\n\t\tif ( this.enabled ) {\n\n\t\t\tconst restart = opState != this._state;\n\t\t\tthis.setCenter( event.clientX, event.clientY );\n\n\t\t\tswitch ( opState ) {\n\n\t\t\t\tcase STATE.PAN:\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tif ( restart ) {\n\n\t\t\t\t\t\t\t//switch to pan operation\n\n\t\t\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\t\t\t\t\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\t\t\t\t\tthis.updateTbState( opState, true );\n\t\t\t\t\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement ) );\n\t\t\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\t\t\tthis.drawGrid();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t//continue with pan operation\n\t\t\t\t\t\t\tthis._currentCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement ) );\n\t\t\t\t\t\t\tthis.applyTransformMatrix( this.pan( this._startCursorPosition, this._currentCursorPosition ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.ROTATE:\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tif ( restart ) {\n\n\t\t\t\t\t\t\t//switch to rotate operation\n\n\t\t\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\t\t\t\t\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\t\t\t\t\tthis.updateTbState( opState, true );\n\t\t\t\t\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbSurface( this.camera, _center.x, _center.y, this.domElement, this._tbRadius ) );\n\n\t\t\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\t\t\tthis.disposeGrid();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.activateGizmos( true );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t//continue with rotate operation\n\t\t\t\t\t\t\tthis._currentCursorPosition.copy( this.unprojectOnTbSurface( this.camera, _center.x, _center.y, this.domElement, this._tbRadius ) );\n\n\t\t\t\t\t\t\tconst distance = this._startCursorPosition.distanceTo( this._currentCursorPosition );\n\t\t\t\t\t\t\tconst angle = this._startCursorPosition.angleTo( this._currentCursorPosition );\n\t\t\t\t\t\t\tconst amount = Math.max( distance / this._tbRadius, angle ) * this.rotateSpeed; //effective rotation angle\n\n\t\t\t\t\t\t\tthis.applyTransformMatrix( this.rotate( this.calculateRotationAxis( this._startCursorPosition, this._currentCursorPosition ), amount ) );\n\n\t\t\t\t\t\t\tif ( this.enableAnimations ) {\n\n\t\t\t\t\t\t\t\tthis._timePrev = this._timeCurrent;\n\t\t\t\t\t\t\t\tthis._timeCurrent = performance.now();\n\t\t\t\t\t\t\t\tthis._anglePrev = this._angleCurrent;\n\t\t\t\t\t\t\t\tthis._angleCurrent = amount;\n\t\t\t\t\t\t\t\tthis._cursorPosPrev.copy( this._cursorPosCurr );\n\t\t\t\t\t\t\t\tthis._cursorPosCurr.copy( this._currentCursorPosition );\n\t\t\t\t\t\t\t\tthis._wPrev = this._wCurr;\n\t\t\t\t\t\t\t\tthis._wCurr = this.calculateAngularSpeed( this._anglePrev, this._angleCurrent, this._timePrev, this._timeCurrent );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.SCALE:\n\n\t\t\t\t\tif ( this.enableZoom ) {\n\n\t\t\t\t\t\tif ( restart ) {\n\n\t\t\t\t\t\t\t//switch to zoom operation\n\n\t\t\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\t\t\t\t\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\t\t\t\t\tthis.updateTbState( opState, true );\n\t\t\t\t\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\t\t\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\n\t\t\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\t\t\tthis.disposeGrid();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t//continue with zoom operation\n\t\t\t\t\t\t\tconst screenNotches = 8;\t//how many wheel notches corresponds to a full screen pan\n\t\t\t\t\t\t\tthis._currentCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\n\t\t\t\t\t\t\tconst movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n\n\t\t\t\t\t\t\tlet size = 1;\n\n\t\t\t\t\t\t\tif ( movement < 0 ) {\n\n\t\t\t\t\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, - movement * screenNotches ) );\n\n\t\t\t\t\t\t\t} else if ( movement > 0 ) {\n\n\t\t\t\t\t\t\t\tsize = Math.pow( this.scaleFactor, movement * screenNotches );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._v3_1.setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, this._v3_1 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.FOV:\n\n\t\t\t\t\tif ( this.enableZoom && this.camera.isPerspectiveCamera ) {\n\n\t\t\t\t\t\tif ( restart ) {\n\n\t\t\t\t\t\t\t//switch to fov operation\n\n\t\t\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\t\t\t\t\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\t\t\t\t\tthis.updateTbState( opState, true );\n\t\t\t\t\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\t\t\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\n\t\t\t\t\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\t\t\t\t\tthis.disposeGrid();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t//continue with fov operation\n\t\t\t\t\t\t\tconst screenNotches = 8;\t//how many wheel notches corresponds to a full screen pan\n\t\t\t\t\t\t\tthis._currentCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\n\t\t\t\t\t\t\tconst movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n\n\t\t\t\t\t\t\tlet size = 1;\n\n\t\t\t\t\t\t\tif ( movement < 0 ) {\n\n\t\t\t\t\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, - movement * screenNotches ) );\n\n\t\t\t\t\t\t\t} else if ( movement > 0 ) {\n\n\t\t\t\t\t\t\t\tsize = Math.pow( this.scaleFactor, movement * screenNotches );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState );\n\t\t\t\t\t\t\tconst x = this._v3_1.distanceTo( this._gizmos.position );\n\t\t\t\t\t\t\tlet xNew = x / size; //distance between camera and gizmos if scale(size, scalepoint) would be performed\n\n\t\t\t\t\t\t\t//check min and max distance\n\t\t\t\t\t\t\txNew = MathUtils.clamp( xNew, this.minDistance, this.maxDistance );\n\n\t\t\t\t\t\t\tconst y = x * Math.tan( MathUtils.DEG2RAD * this._fovState * 0.5 );\n\n\t\t\t\t\t\t\t//calculate new fov\n\t\t\t\t\t\t\tlet newFov = MathUtils.RAD2DEG * ( Math.atan( y / xNew ) * 2 );\n\n\t\t\t\t\t\t\t//check min and max fov\n\t\t\t\t\t\t\tnewFov = MathUtils.clamp( newFov, this.minFov, this.maxFov );\n\n\t\t\t\t\t\t\tconst newDistance = y / Math.tan( MathUtils.DEG2RAD * ( newFov / 2 ) );\n\t\t\t\t\t\t\tsize = x / newDistance;\n\t\t\t\t\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\t\t\t\t\tthis.setFov( newFov );\n\t\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, this._v3_2, false ) );\n\n\t\t\t\t\t\t\t//adjusting distance\n\t\t\t\t\t\t\t_offset.copy( this._gizmos.position ).sub( this.camera.position ).normalize().multiplyScalar( newDistance / x );\n\t\t\t\t\t\t\tthis._m4_1.makeTranslation( _offset.x, _offset.y, _offset.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonSinglePanEnd() {\n\n\t\tif ( this._state == STATE.ROTATE ) {\n\n\n\t\t\tif ( ! this.enableRotate ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( this.enableAnimations ) {\n\n\t\t\t\t//perform rotation animation\n\t\t\t\tconst deltaTime = ( performance.now() - this._timeCurrent );\n\t\t\t\tif ( deltaTime < 120 ) {\n\n\t\t\t\t\tconst w = Math.abs( ( this._wPrev + this._wCurr ) / 2 );\n\n\t\t\t\t\tconst self = this;\n\t\t\t\t\tthis._animationId = window.requestAnimationFrame( function ( t ) {\n\n\t\t\t\t\t\tself.updateTbState( STATE.ANIMATION_ROTATE, true );\n\t\t\t\t\t\tconst rotationAxis = self.calculateRotationAxis( self._cursorPosPrev, self._cursorPosCurr );\n\n\t\t\t\t\t\tself.onRotationAnim( t, rotationAxis, Math.min( w, self.wMax ) );\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t//cursor has been standing still for over 120 ms since last movement\n\t\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\t\tthis.activateGizmos( false );\n\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\tthis.activateGizmos( false );\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t}\n\n\t\t} else if ( this._state == STATE.PAN || this._state == STATE.IDLE ) {\n\n\t\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\t\tif ( this.enableGrid ) {\n\n\t\t\t\tthis.disposeGrid();\n\n\t\t\t}\n\n\t\t\tthis.activateGizmos( false );\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\n\t\t}\n\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonDoubleTap( event ) {\n\n\t\tif ( this.enabled && this.enablePan && this.scene != null ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.setCenter( event.clientX, event.clientY );\n\t\t\tconst hitP = this.unprojectOnObj( this.getCursorNDC( _center.x, _center.y, this.domElement ), this.camera );\n\n\t\t\tif ( hitP != null && this.enableAnimations ) {\n\n\t\t\t\tconst self = this;\n\t\t\t\tif ( this._animationId != - 1 ) {\n\n\t\t\t\t\twindow.cancelAnimationFrame( this._animationId );\n\n\t\t\t\t}\n\n\t\t\t\tthis._timeStart = - 1;\n\t\t\t\tthis._animationId = window.requestAnimationFrame( function ( t ) {\n\n\t\t\t\t\tself.updateTbState( STATE.ANIMATION_FOCUS, true );\n\t\t\t\t\tself.onFocusAnim( t, hitP, self._cameraMatrixState, self._gizmoMatrixState );\n\n\t\t\t\t} );\n\n\t\t\t} else if ( hitP != null && ! this.enableAnimations ) {\n\n\t\t\t\tthis.updateTbState( STATE.FOCUS, true );\n\t\t\t\tthis.focus( hitP, this.scaleFactor );\n\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonDoublePanStart() {\n\n\t\tif ( this.enabled && this.enablePan ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.updateTbState( STATE.PAN, true );\n\n\t\t\tthis.setCenter( ( this._touchCurrent[ 0 ].clientX + this._touchCurrent[ 1 ].clientX ) / 2, ( this._touchCurrent[ 0 ].clientY + this._touchCurrent[ 1 ].clientY ) / 2 );\n\t\t\tthis._startCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement, true ) );\n\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\n\t\t\tthis.activateGizmos( false );\n\n\t\t}\n\n\t}\n\n\tonDoublePanMove() {\n\n\t\tif ( this.enabled && this.enablePan ) {\n\n\t\t\tthis.setCenter( ( this._touchCurrent[ 0 ].clientX + this._touchCurrent[ 1 ].clientX ) / 2, ( this._touchCurrent[ 0 ].clientY + this._touchCurrent[ 1 ].clientY ) / 2 );\n\n\t\t\tif ( this._state != STATE.PAN ) {\n\n\t\t\t\tthis.updateTbState( STATE.PAN, true );\n\t\t\t\tthis._startCursorPosition.copy( this._currentCursorPosition );\n\n\t\t\t}\n\n\t\t\tthis._currentCursorPosition.copy( this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement, true ) );\n\t\t\tthis.applyTransformMatrix( this.pan( this._startCursorPosition, this._currentCursorPosition, true ) );\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonDoublePanEnd() {\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonRotateStart() {\n\n\t\tif ( this.enabled && this.enableRotate ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.updateTbState( STATE.ZROTATE, true );\n\n\t\t\t//this._startFingerRotation = event.rotation;\n\n\t\t\tthis._startFingerRotation = this.getAngle( this._touchCurrent[ 1 ], this._touchCurrent[ 0 ] ) + this.getAngle( this._touchStart[ 1 ], this._touchStart[ 0 ] );\n\t\t\tthis._currentFingerRotation = this._startFingerRotation;\n\n\t\t\tthis.camera.getWorldDirection( this._rotationAxis ); //rotation axis\n\n\t\t\tif ( ! this.enablePan && ! this.enableZoom ) {\n\n\t\t\t\tthis.activateGizmos( true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tonRotateMove() {\n\n\t\tif ( this.enabled && this.enableRotate ) {\n\n\t\t\tthis.setCenter( ( this._touchCurrent[ 0 ].clientX + this._touchCurrent[ 1 ].clientX ) / 2, ( this._touchCurrent[ 0 ].clientY + this._touchCurrent[ 1 ].clientY ) / 2 );\n\t\t\tlet rotationPoint;\n\n\t\t\tif ( this._state != STATE.ZROTATE ) {\n\n\t\t\t\tthis.updateTbState( STATE.ZROTATE, true );\n\t\t\t\tthis._startFingerRotation = this._currentFingerRotation;\n\n\t\t\t}\n\n\t\t\t//this._currentFingerRotation = event.rotation;\n\t\t\tthis._currentFingerRotation = this.getAngle( this._touchCurrent[ 1 ], this._touchCurrent[ 0 ] ) + this.getAngle( this._touchStart[ 1 ], this._touchStart[ 0 ] );\n\n\t\t\tif ( ! this.enablePan ) {\n\n\t\t\t\trotationPoint = new Vector3().setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\t} else {\n\n\t\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState );\n\t\t\t\trotationPoint = this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement ).applyQuaternion( this.camera.quaternion ).multiplyScalar( 1 / this.camera.zoom ).add( this._v3_2 );\n\n\t\t\t}\n\n\t\t\tconst amount = MathUtils.DEG2RAD * ( this._startFingerRotation - this._currentFingerRotation );\n\n\t\t\tthis.applyTransformMatrix( this.zRotate( rotationPoint, amount ) );\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonRotateEnd() {\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\t\tthis.activateGizmos( false );\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonPinchStart() {\n\n\t\tif ( this.enabled && this.enableZoom ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\t\t\tthis.updateTbState( STATE.SCALE, true );\n\n\t\t\tthis._startFingerDistance = this.calculatePointersDistance( this._touchCurrent[ 0 ], this._touchCurrent[ 1 ] );\n\t\t\tthis._currentFingerDistance = this._startFingerDistance;\n\n\t\t\tthis.activateGizmos( false );\n\n\t\t}\n\n\t}\n\n\tonPinchMove() {\n\n\t\tif ( this.enabled && this.enableZoom ) {\n\n\t\t\tthis.setCenter( ( this._touchCurrent[ 0 ].clientX + this._touchCurrent[ 1 ].clientX ) / 2, ( this._touchCurrent[ 0 ].clientY + this._touchCurrent[ 1 ].clientY ) / 2 );\n\t\t\tconst minDistance = 12; //minimum distance between fingers (in css pixels)\n\n\t\t\tif ( this._state != STATE.SCALE ) {\n\n\t\t\t\tthis._startFingerDistance = this._currentFingerDistance;\n\t\t\t\tthis.updateTbState( STATE.SCALE, true );\n\n\t\t\t}\n\n\t\t\tthis._currentFingerDistance = Math.max( this.calculatePointersDistance( this._touchCurrent[ 0 ], this._touchCurrent[ 1 ] ), minDistance * this._devPxRatio );\n\t\t\tconst amount = this._currentFingerDistance / this._startFingerDistance;\n\n\t\t\tlet scalePoint;\n\n\t\t\tif ( ! this.enablePan ) {\n\n\t\t\t\tscalePoint = this._gizmos.position;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t\t\tscalePoint = this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement )\n\t\t\t\t\t\t.applyQuaternion( this.camera.quaternion )\n\t\t\t\t\t\t.multiplyScalar( 1 / this.camera.zoom )\n\t\t\t\t\t\t.add( this._gizmos.position );\n\n\t\t\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\t\tscalePoint = this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement )\n\t\t\t\t\t\t.applyQuaternion( this.camera.quaternion )\n\t\t\t\t\t\t.add( this._gizmos.position );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.applyTransformMatrix( this.scale( amount, scalePoint ) );\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonPinchEnd() {\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\t\tthis.dispatchEvent( _endEvent );\n\n\t}\n\n\tonTriplePanStart() {\n\n\t\tif ( this.enabled && this.enableZoom ) {\n\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tthis.updateTbState( STATE.SCALE, true );\n\n\t\t\t//const center = event.center;\n\t\t\tlet clientX = 0;\n\t\t\tlet clientY = 0;\n\t\t\tconst nFingers = this._touchCurrent.length;\n\n\t\t\tfor ( let i = 0; i < nFingers; i ++ ) {\n\n\t\t\t\tclientX += this._touchCurrent[ i ].clientX;\n\t\t\t\tclientY += this._touchCurrent[ i ].clientY;\n\n\t\t\t}\n\n\t\t\tthis.setCenter( clientX / nFingers, clientY / nFingers );\n\n\t\t\tthis._startCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\t\t\tthis._currentCursorPosition.copy( this._startCursorPosition );\n\n\t\t}\n\n\t}\n\n\tonTriplePanMove() {\n\n\t\tif ( this.enabled && this.enableZoom ) {\n\n\t\t\t//\t fov / 2\n\t\t\t//\t\t|\\\n\t\t\t//\t\t| \\\n\t\t\t//\t\t| \\\n\t\t\t//\tx\t|\t\\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t\t| _ _ _\\\n\t\t\t//\t\t\ty\n\n\t\t\t//const center = event.center;\n\t\t\tlet clientX = 0;\n\t\t\tlet clientY = 0;\n\t\t\tconst nFingers = this._touchCurrent.length;\n\n\t\t\tfor ( let i = 0; i < nFingers; i ++ ) {\n\n\t\t\t\tclientX += this._touchCurrent[ i ].clientX;\n\t\t\t\tclientY += this._touchCurrent[ i ].clientY;\n\n\t\t\t}\n\n\t\t\tthis.setCenter( clientX / nFingers, clientY / nFingers );\n\n\t\t\tconst screenNotches = 8;\t//how many wheel notches corresponds to a full screen pan\n\t\t\tthis._currentCursorPosition.setY( this.getCursorNDC( _center.x, _center.y, this.domElement ).y * 0.5 );\n\n\t\t\tconst movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n\n\t\t\tlet size = 1;\n\n\t\t\tif ( movement < 0 ) {\n\n\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, - movement * screenNotches ) );\n\n\t\t\t} else if ( movement > 0 ) {\n\n\t\t\t\tsize = Math.pow( this.scaleFactor, movement * screenNotches );\n\n\t\t\t}\n\n\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState );\n\t\t\tconst x = this._v3_1.distanceTo( this._gizmos.position );\n\t\t\tlet xNew = x / size; //distance between camera and gizmos if scale(size, scalepoint) would be performed\n\n\t\t\t//check min and max distance\n\t\t\txNew = MathUtils.clamp( xNew, this.minDistance, this.maxDistance );\n\n\t\t\tconst y = x * Math.tan( MathUtils.DEG2RAD * this._fovState * 0.5 );\n\n\t\t\t//calculate new fov\n\t\t\tlet newFov = MathUtils.RAD2DEG * ( Math.atan( y / xNew ) * 2 );\n\n\t\t\t//check min and max fov\n\t\t\tnewFov = MathUtils.clamp( newFov, this.minFov, this.maxFov );\n\n\t\t\tconst newDistance = y / Math.tan( MathUtils.DEG2RAD * ( newFov / 2 ) );\n\t\t\tsize = x / newDistance;\n\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\tthis.setFov( newFov );\n\t\t\tthis.applyTransformMatrix( this.scale( size, this._v3_2, false ) );\n\n\t\t\t//adjusting distance\n\t\t\t_offset.copy( this._gizmos.position ).sub( this.camera.position ).normalize().multiplyScalar( newDistance / x );\n\t\t\tthis._m4_1.makeTranslation( _offset.x, _offset.y, _offset.z );\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n\tonTriplePanEnd() {\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\t\tthis.dispatchEvent( _endEvent );\n\t\t//this.dispatchEvent( _changeEvent );\n\n\t}\n\n\t/**\n\t * Set _center's x/y coordinates\n\t * @param {Number} clientX\n\t * @param {Number} clientY\n\t */\n\tsetCenter( clientX, clientY ) {\n\n\t\t_center.x = clientX;\n\t\t_center.y = clientY;\n\n\t}\n\n\t/**\n\t * Set default mouse actions\n\t */\n\tinitializeMouseActions() {\n\n\t\tthis.setMouseAction( 'PAN', 0, 'CTRL' );\n\t\tthis.setMouseAction( 'PAN', 2 );\n\n\t\tthis.setMouseAction( 'ROTATE', 0 );\n\n\t\tthis.setMouseAction( 'ZOOM', 'WHEEL' );\n\t\tthis.setMouseAction( 'ZOOM', 1 );\n\n\t\tthis.setMouseAction( 'FOV', 'WHEEL', 'SHIFT' );\n\t\tthis.setMouseAction( 'FOV', 1, 'SHIFT' );\n\n\n\t}\n\n\t/**\n\t * Compare two mouse actions\n\t * @param {Object} action1\n\t * @param {Object} action2\n\t * @returns {Boolean} True if action1 and action 2 are the same mouse action, false otherwise\n\t */\n\tcompareMouseAction( action1, action2 ) {\n\n\t\tif ( action1.operation == action2.operation ) {\n\n\t\t\tif ( action1.mouse == action2.mouse && action1.key == action2.key ) {\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one\n\t * @param {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV)\n\t * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n\t * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n\t * @returns {Boolean} True if the mouse action has been successfully added, false otherwise\n\t */\n\tsetMouseAction( operation, mouse, key = null ) {\n\n\t\tconst operationInput = [ 'PAN', 'ROTATE', 'ZOOM', 'FOV' ];\n\t\tconst mouseInput = [ 0, 1, 2, 'WHEEL' ];\n\t\tconst keyInput = [ 'CTRL', 'SHIFT', null ];\n\t\tlet state;\n\n\t\tif ( ! operationInput.includes( operation ) || ! mouseInput.includes( mouse ) || ! keyInput.includes( key ) ) {\n\n\t\t\t//invalid parameters\n\t\t\treturn false;\n\n\t\t}\n\n\t\tif ( mouse == 'WHEEL' ) {\n\n\t\t\tif ( operation != 'ZOOM' && operation != 'FOV' ) {\n\n\t\t\t\t//cannot associate 2D operation to 1D input\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tswitch ( operation ) {\n\n\t\t\tcase 'PAN':\n\n\t\t\t\tstate = STATE.PAN;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROTATE':\n\n\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZOOM':\n\n\t\t\t\tstate = STATE.SCALE;\n\t\t\t\tbreak;\n\n\t\t\tcase 'FOV':\n\n\t\t\t\tstate = STATE.FOV;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst action = {\n\n\t\t\toperation: operation,\n\t\t\tmouse: mouse,\n\t\t\tkey: key,\n\t\t\tstate: state\n\n\t\t};\n\n\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\tif ( this.mouseActions[ i ].mouse == action.mouse && this.mouseActions[ i ].key == action.key ) {\n\n\t\t\t\tthis.mouseActions.splice( i, 1, action );\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.mouseActions.push( action );\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Remove a mouse action by specifying its mouse/key combination\n\t * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n\t * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n\t * @returns {Boolean} True if the operation has been succesfully removed, false otherwise\n\t */\n\tunsetMouseAction( mouse, key = null ) {\n\n\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\tif ( this.mouseActions[ i ].mouse == mouse && this.mouseActions[ i ].key == key ) {\n\n\t\t\t\tthis.mouseActions.splice( i, 1 );\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Return the operation associated to a mouse/keyboard combination\n\t * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n\t * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n\t * @returns The operation if it has been found, null otherwise\n\t */\n\tgetOpFromAction( mouse, key ) {\n\n\t\tlet action;\n\n\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\taction = this.mouseActions[ i ];\n\t\t\tif ( action.mouse == mouse && action.key == key ) {\n\n\t\t\t\treturn action.operation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( key != null ) {\n\n\t\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\t\taction = this.mouseActions[ i ];\n\t\t\t\tif ( action.mouse == mouse && action.key == null ) {\n\n\t\t\t\t\treturn action.operation;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Get the operation associated to mouse and key combination and returns the corresponding FSA state\n\t * @param {Number} mouse Mouse button\n\t * @param {String} key Keyboard modifier\n\t * @returns The FSA state obtained from the operation associated to mouse/keyboard combination\n\t */\n\tgetOpStateFromAction( mouse, key ) {\n\n\t\tlet action;\n\n\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\taction = this.mouseActions[ i ];\n\t\t\tif ( action.mouse == mouse && action.key == key ) {\n\n\t\t\t\treturn action.state;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( key != null ) {\n\n\t\t\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\t\t\taction = this.mouseActions[ i ];\n\t\t\t\tif ( action.mouse == mouse && action.key == null ) {\n\n\t\t\t\t\treturn action.state;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Calculate the angle between two pointers\n\t * @param {PointerEvent} p1\n\t * @param {PointerEvent} p2\n\t * @returns {Number} The angle between two pointers in degrees\n\t */\n\tgetAngle( p1, p2 ) {\n\n\t\treturn Math.atan2( p2.clientY - p1.clientY, p2.clientX - p1.clientX ) * 180 / Math.PI;\n\n\t}\n\n\t/**\n\t * Update a PointerEvent inside current pointerevents array\n\t * @param {PointerEvent} event\n\t */\n\tupdateTouchEvent( event ) {\n\n\t\tfor ( let i = 0; i < this._touchCurrent.length; i ++ ) {\n\n\t\t\tif ( this._touchCurrent[ i ].pointerId == event.pointerId ) {\n\n\t\t\t\tthis._touchCurrent.splice( i, 1, event );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Apply a transformation matrix, to the camera and gizmos\n\t * @param {Object} transformation Object containing matrices to apply to camera and gizmos\n\t */\n\tapplyTransformMatrix( transformation ) {\n\n\t\tif ( transformation.camera != null ) {\n\n\t\t\tthis._m4_1.copy( this._cameraMatrixState ).premultiply( transformation.camera );\n\t\t\tthis._m4_1.decompose( this.camera.position, this.camera.quaternion, this.camera.scale );\n\t\t\tthis.camera.updateMatrix();\n\n\t\t\t//update camera up vector\n\t\t\tif ( this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE ) {\n\n\t\t\t\tthis.camera.up.copy( this._upState ).applyQuaternion( this.camera.quaternion );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( transformation.gizmos != null ) {\n\n\t\t\tthis._m4_1.copy( this._gizmoMatrixState ).premultiply( transformation.gizmos );\n\t\t\tthis._m4_1.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\t\t\tthis._gizmos.updateMatrix();\n\n\t\t}\n\n\t\tif ( this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS ) {\n\n\t\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\n\t\t\tif ( this.adjustNearFar ) {\n\n\t\t\t\tconst cameraDistance = this.camera.position.distanceTo( this._gizmos.position );\n\n\t\t\t\tconst bb = new Box3();\n\t\t\t\tbb.setFromObject( this._gizmos );\n\t\t\t\tconst sphere = new Sphere();\n\t\t\t\tbb.getBoundingSphere( sphere );\n\n\t\t\t\tconst adjustedNearPosition = Math.max( this._nearPos0, sphere.radius + sphere.center.length() );\n\t\t\t\tconst regularNearPosition = cameraDistance - this._initialNear;\n\n\t\t\t\tconst minNearPos = Math.min( adjustedNearPosition, regularNearPosition );\n\t\t\t\tthis.camera.near = cameraDistance - minNearPos;\n\n\n\t\t\t\tconst adjustedFarPosition = Math.min( this._farPos0, - sphere.radius + sphere.center.length() );\n\t\t\t\tconst regularFarPosition = cameraDistance - this._initialFar;\n\n\t\t\t\tconst minFarPos = Math.min( adjustedFarPosition, regularFarPosition );\n\t\t\t\tthis.camera.far = cameraDistance - minFarPos;\n\n\t\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\t} else {\n\n\t\t\t\tlet update = false;\n\n\t\t\t\tif ( this.camera.near != this._initialNear ) {\n\n\t\t\t\t\tthis.camera.near = this._initialNear;\n\t\t\t\t\tupdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.camera.far != this._initialFar ) {\n\n\t\t\t\t\tthis.camera.far = this._initialFar;\n\t\t\t\t\tupdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tif ( update ) {\n\n\t\t\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Calculate the angular speed\n\t * @param {Number} p0 Position at t0\n\t * @param {Number} p1 Position at t1\n\t * @param {Number} t0 Initial time in milliseconds\n\t * @param {Number} t1 Ending time in milliseconds\n\t */\n\tcalculateAngularSpeed( p0, p1, t0, t1 ) {\n\n\t\tconst s = p1 - p0;\n\t\tconst t = ( t1 - t0 ) / 1000;\n\t\tif ( t == 0 ) {\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\treturn s / t;\n\n\t}\n\n\t/**\n\t * Calculate the distance between two pointers\n\t * @param {PointerEvent} p0 The first pointer\n\t * @param {PointerEvent} p1 The second pointer\n\t * @returns {number} The distance between the two pointers\n\t */\n\tcalculatePointersDistance( p0, p1 ) {\n\n\t\treturn Math.sqrt( Math.pow( p1.clientX - p0.clientX, 2 ) + Math.pow( p1.clientY - p0.clientY, 2 ) );\n\n\t}\n\n\t/**\n\t * Calculate the rotation axis as the vector perpendicular between two vectors\n\t * @param {Vector3} vec1 The first vector\n\t * @param {Vector3} vec2 The second vector\n\t * @returns {Vector3} The normalized rotation axis\n\t */\n\tcalculateRotationAxis( vec1, vec2 ) {\n\n\t\tthis._rotationMatrix.extractRotation( this._cameraMatrixState );\n\t\tthis._quat.setFromRotationMatrix( this._rotationMatrix );\n\n\t\tthis._rotationAxis.crossVectors( vec1, vec2 ).applyQuaternion( this._quat );\n\t\treturn this._rotationAxis.normalize().clone();\n\n\t}\n\n\t/**\n\t * Calculate the trackball radius so that gizmo's diamater will be 2/3 of the minimum side of the camera frustum\n\t * @param {Camera} camera\n\t * @returns {Number} The trackball radius\n\t */\n\tcalculateTbRadius( camera ) {\n\n\t\tconst distance = camera.position.distanceTo( this._gizmos.position );\n\n\t\tif ( camera.type == 'PerspectiveCamera' ) {\n\n\t\t\tconst halfFovV = MathUtils.DEG2RAD * camera.fov * 0.5; //vertical fov/2 in radians\n\t\t\tconst halfFovH = Math.atan( ( camera.aspect ) * Math.tan( halfFovV ) ); //horizontal fov/2 in radians\n\t\t\treturn Math.tan( Math.min( halfFovV, halfFovH ) ) * distance * this.radiusFactor;\n\n\t\t} else if ( camera.type == 'OrthographicCamera' ) {\n\n\t\t\treturn Math.min( camera.top, camera.right ) * this.radiusFactor;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in\n\t * @param {Vector3} point The point of interest\n\t * @param {Number} size Scale factor\n\t * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation)\n\t */\n\tfocus( point, size, amount = 1 ) {\n\n\t\t//move center of camera (along with gizmos) towards point of interest\n\t\t_offset.copy( point ).sub( this._gizmos.position ).multiplyScalar( amount );\n\t\tthis._translationMatrix.makeTranslation( _offset.x, _offset.y, _offset.z );\n\n\t\t_gizmoMatrixStateTemp.copy( this._gizmoMatrixState );\n\t\tthis._gizmoMatrixState.premultiply( this._translationMatrix );\n\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\n\t\t_cameraMatrixStateTemp.copy( this._cameraMatrixState );\n\t\tthis._cameraMatrixState.premultiply( this._translationMatrix );\n\t\tthis._cameraMatrixState.decompose( this.camera.position, this.camera.quaternion, this.camera.scale );\n\n\t\t//apply zoom\n\t\tif ( this.enableZoom ) {\n\n\t\t\tthis.applyTransformMatrix( this.scale( size, this._gizmos.position ) );\n\n\t\t}\n\n\t\tthis._gizmoMatrixState.copy( _gizmoMatrixStateTemp );\n\t\tthis._cameraMatrixState.copy( _cameraMatrixStateTemp );\n\n\t}\n\n\t/**\n\t * Draw a grid and add it to the scene\n\t */\n\tdrawGrid() {\n\n\t\tif ( this.scene != null ) {\n\n\t\t\tconst color = 0x888888;\n\t\t\tconst multiplier = 3;\n\t\t\tlet size, divisions, maxLength, tick;\n\n\t\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t\tconst width = this.camera.right - this.camera.left;\n\t\t\t\tconst height = this.camera.bottom - this.camera.top;\n\n\t\t\t\tmaxLength = Math.max( width, height );\n\t\t\t\ttick = maxLength / 20;\n\n\t\t\t\tsize = maxLength / this.camera.zoom * multiplier;\n\t\t\t\tdivisions = size / tick * this.camera.zoom;\n\n\t\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\tconst distance = this.camera.position.distanceTo( this._gizmos.position );\n\t\t\t\tconst halfFovV = MathUtils.DEG2RAD * this.camera.fov * 0.5;\n\t\t\t\tconst halfFovH = Math.atan( ( this.camera.aspect ) * Math.tan( halfFovV ) );\n\n\t\t\t\tmaxLength = Math.tan( Math.max( halfFovV, halfFovH ) ) * distance * 2;\n\t\t\t\ttick = maxLength / 20;\n\n\t\t\t\tsize = maxLength * multiplier;\n\t\t\t\tdivisions = size / tick;\n\n\t\t\t}\n\n\t\t\tif ( this._grid == null ) {\n\n\t\t\t\tthis._grid = new GridHelper( size, divisions, color, color );\n\t\t\t\tthis._grid.position.copy( this._gizmos.position );\n\t\t\t\tthis._gridPosition.copy( this._grid.position );\n\t\t\t\tthis._grid.quaternion.copy( this.camera.quaternion );\n\t\t\t\tthis._grid.rotateX( Math.PI * 0.5 );\n\n\t\t\t\tthis.scene.add( this._grid );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Remove all listeners, stop animations and clean scene\n\t */\n\tdispose() {\n\n\t\tif ( this._animationId != - 1 ) {\n\n\t\t\twindow.cancelAnimationFrame( this._animationId );\n\n\t\t}\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );\n\t\tthis.domElement.removeEventListener( 'wheel', this._onWheel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\twindow.removeEventListener( 'pointermove', this._onPointerMove );\n\t\twindow.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\twindow.removeEventListener( 'resize', this._onWindowResize );\n\n\t\tif ( this.scene !== null ) this.scene.remove( this._gizmos );\n\t\tthis.disposeGrid();\n\n\t}\n\n\t/**\n\t * remove the grid from the scene\n\t */\n\tdisposeGrid() {\n\n\t\tif ( this._grid != null && this.scene != null ) {\n\n\t\t\tthis.scene.remove( this._grid );\n\t\t\tthis._grid = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Compute the easing out cubic function for ease out effect in animation\n\t * @param {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation)\n\t * @returns {Number} Result of easing out cubic at time t\n\t */\n\teaseOutCubic( t ) {\n\n\t\treturn 1 - Math.pow( 1 - t, 3 );\n\n\t}\n\n\t/**\n\t * Make rotation gizmos more or less visible\n\t * @param {Boolean} isActive If true, make gizmos more visible\n\t */\n\tactivateGizmos( isActive ) {\n\n\t\tconst gizmoX = this._gizmos.children[ 0 ];\n\t\tconst gizmoY = this._gizmos.children[ 1 ];\n\t\tconst gizmoZ = this._gizmos.children[ 2 ];\n\n\t\tif ( isActive ) {\n\n\t\t\tgizmoX.material.setValues( { opacity: 1 } );\n\t\t\tgizmoY.material.setValues( { opacity: 1 } );\n\t\t\tgizmoZ.material.setValues( { opacity: 1 } );\n\n\t\t} else {\n\n\t\t\tgizmoX.material.setValues( { opacity: 0.6 } );\n\t\t\tgizmoY.material.setValues( { opacity: 0.6 } );\n\t\t\tgizmoZ.material.setValues( { opacity: 0.6 } );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Calculate the cursor position in NDC\n\t * @param {number} x Cursor horizontal coordinate within the canvas\n\t * @param {number} y Cursor vertical coordinate within the canvas\n\t * @param {HTMLElement} canvas The canvas where the renderer draws its output\n\t * @returns {Vector2} Cursor normalized position inside the canvas\n\t */\n\tgetCursorNDC( cursorX, cursorY, canvas ) {\n\n\t\tconst canvasRect = canvas.getBoundingClientRect();\n\t\tthis._v2_1.setX( ( ( cursorX - canvasRect.left ) / canvasRect.width ) * 2 - 1 );\n\t\tthis._v2_1.setY( ( ( canvasRect.bottom - cursorY ) / canvasRect.height ) * 2 - 1 );\n\t\treturn this._v2_1.clone();\n\n\t}\n\n\t/**\n\t * Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas\n\t * @param {Number} x Cursor horizontal coordinate within the canvas\n\t * @param {Number} y Cursor vertical coordinate within the canvas\n\t * @param {HTMLElement} canvas The canvas where the renderer draws its output\n\t * @returns {Vector2} Cursor position inside the canvas\n\t */\n\tgetCursorPosition( cursorX, cursorY, canvas ) {\n\n\t\tthis._v2_1.copy( this.getCursorNDC( cursorX, cursorY, canvas ) );\n\t\tthis._v2_1.x *= ( this.camera.right - this.camera.left ) * 0.5;\n\t\tthis._v2_1.y *= ( this.camera.top - this.camera.bottom ) * 0.5;\n\t\treturn this._v2_1.clone();\n\n\t}\n\n\t/**\n\t * Set the camera to be controlled\n\t * @param {Camera} camera The virtual camera to be controlled\n\t */\n\tsetCamera( camera ) {\n\n\t\tcamera.lookAt( this.target );\n\t\tcamera.updateMatrix();\n\n\t\t//setting state\n\t\tif ( camera.type == 'PerspectiveCamera' ) {\n\n\t\t\tthis._fov0 = camera.fov;\n\t\t\tthis._fovState = camera.fov;\n\n\t\t}\n\n\t\tthis._cameraMatrixState0.copy( camera.matrix );\n\t\tthis._cameraMatrixState.copy( this._cameraMatrixState0 );\n\t\tthis._cameraProjectionState.copy( camera.projectionMatrix );\n\t\tthis._zoom0 = camera.zoom;\n\t\tthis._zoomState = this._zoom0;\n\n\t\tthis._initialNear = camera.near;\n\t\tthis._nearPos0 = camera.position.distanceTo( this.target ) - camera.near;\n\t\tthis._nearPos = this._initialNear;\n\n\t\tthis._initialFar = camera.far;\n\t\tthis._farPos0 = camera.position.distanceTo( this.target ) - camera.far;\n\t\tthis._farPos = this._initialFar;\n\n\t\tthis._up0.copy( camera.up );\n\t\tthis._upState.copy( camera.up );\n\n\t\tthis.camera = camera;\n\t\tthis.camera.updateProjectionMatrix();\n\n\t\t//making gizmos\n\t\tthis._tbRadius = this.calculateTbRadius( camera );\n\t\tthis.makeGizmos( this.target, this._tbRadius );\n\n\t}\n\n\t/**\n\t * Set gizmos visibility\n\t * @param {Boolean} value Value of gizmos visibility\n\t */\n\tsetGizmosVisible( value ) {\n\n\t\tthis._gizmos.visible = value;\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t}\n\n\t/**\n\t * Set gizmos radius factor and redraws gizmos\n\t * @param {Float} value Value of radius factor\n\t */\n\tsetTbRadius( value ) {\n\n\t\tthis.radiusFactor = value;\n\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\n\t\tconst curve = new EllipseCurve( 0, 0, this._tbRadius, this._tbRadius );\n\t\tconst points = curve.getPoints( this._curvePts );\n\t\tconst curveGeometry = new BufferGeometry().setFromPoints( points );\n\n\n\t\tfor ( const gizmo in this._gizmos.children ) {\n\n\t\t\tthis._gizmos.children[ gizmo ].geometry = curveGeometry;\n\n\t\t}\n\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t}\n\n\t/**\n\t * Creates the rotation gizmos matching trackball center and radius\n\t * @param {Vector3} tbCenter The trackball center\n\t * @param {number} tbRadius The trackball radius\n\t */\n\tmakeGizmos( tbCenter, tbRadius ) {\n\n\t\tconst curve = new EllipseCurve( 0, 0, tbRadius, tbRadius );\n\t\tconst points = curve.getPoints( this._curvePts );\n\n\t\t//geometry\n\t\tconst curveGeometry = new BufferGeometry().setFromPoints( points );\n\n\t\t//material\n\t\tconst curveMaterialX = new LineBasicMaterial( { color: 0xff8080, fog: false, transparent: true, opacity: 0.6 } );\n\t\tconst curveMaterialY = new LineBasicMaterial( { color: 0x80ff80, fog: false, transparent: true, opacity: 0.6 } );\n\t\tconst curveMaterialZ = new LineBasicMaterial( { color: 0x8080ff, fog: false, transparent: true, opacity: 0.6 } );\n\n\t\t//line\n\t\tconst gizmoX = new Line( curveGeometry, curveMaterialX );\n\t\tconst gizmoY = new Line( curveGeometry, curveMaterialY );\n\t\tconst gizmoZ = new Line( curveGeometry, curveMaterialZ );\n\n\t\tconst rotation = Math.PI * 0.5;\n\t\tgizmoX.rotation.x = rotation;\n\t\tgizmoY.rotation.y = rotation;\n\n\n\t\t//setting state\n\t\tthis._gizmoMatrixState0.identity().setPosition( tbCenter );\n\t\tthis._gizmoMatrixState.copy( this._gizmoMatrixState0 );\n\n\t\tif ( this.camera.zoom !== 1 ) {\n\n\t\t\t//adapt gizmos size to camera zoom\n\t\t\tconst size = 1 / this.camera.zoom;\n\t\t\tthis._scaleMatrix.makeScale( size, size, size );\n\t\t\tthis._translationMatrix.makeTranslation( - tbCenter.x, - tbCenter.y, - tbCenter.z );\n\n\t\t\tthis._gizmoMatrixState.premultiply( this._translationMatrix ).premultiply( this._scaleMatrix );\n\t\t\tthis._translationMatrix.makeTranslation( tbCenter.x, tbCenter.y, tbCenter.z );\n\t\t\tthis._gizmoMatrixState.premultiply( this._translationMatrix );\n\n\t\t}\n\n\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\n\t\t//\n\n\t\tthis._gizmos.traverse( function ( object ) {\n\n\t\t\tif ( object.isLine ) {\n\n\t\t\t\tobject.geometry.dispose();\n\t\t\t\tobject.material.dispose();\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis._gizmos.clear();\n\n\t\t//\n\n\t\tthis._gizmos.add( gizmoX );\n\t\tthis._gizmos.add( gizmoY );\n\t\tthis._gizmos.add( gizmoZ );\n\n\t}\n\n\t/**\n\t * Perform animation for focus operation\n\t * @param {Number} time Instant in which this function is called as performance.now()\n\t * @param {Vector3} point Point of interest for focus operation\n\t * @param {Matrix4} cameraMatrix Camera matrix\n\t * @param {Matrix4} gizmoMatrix Gizmos matrix\n\t */\n\tonFocusAnim( time, point, cameraMatrix, gizmoMatrix ) {\n\n\t\tif ( this._timeStart == - 1 ) {\n\n\t\t\t//animation start\n\t\t\tthis._timeStart = time;\n\n\t\t}\n\n\t\tif ( this._state == STATE.ANIMATION_FOCUS ) {\n\n\t\t\tconst deltaTime = time - this._timeStart;\n\t\t\tconst animTime = deltaTime / this.focusAnimationTime;\n\n\t\t\tthis._gizmoMatrixState.copy( gizmoMatrix );\n\n\t\t\tif ( animTime >= 1 ) {\n\n\t\t\t\t//animation end\n\n\t\t\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\n\t\t\t\tthis.focus( point, this.scaleFactor );\n\n\t\t\t\tthis._timeStart = - 1;\n\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t} else {\n\n\t\t\t\tconst amount = this.easeOutCubic( animTime );\n\t\t\t\tconst size = ( ( 1 - amount ) + ( this.scaleFactor * amount ) );\n\n\t\t\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\t\t\t\tthis.focus( point, size, amount );\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\tconst self = this;\n\t\t\t\tthis._animationId = window.requestAnimationFrame( function ( t ) {\n\n\t\t\t\t\tself.onFocusAnim( t, point, cameraMatrix, gizmoMatrix.clone() );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t//interrupt animation\n\n\t\t\tthis._animationId = - 1;\n\t\t\tthis._timeStart = - 1;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Perform animation for rotation operation\n\t * @param {Number} time Instant in which this function is called as performance.now()\n\t * @param {Vector3} rotationAxis Rotation axis\n\t * @param {number} w0 Initial angular velocity\n\t */\n\tonRotationAnim( time, rotationAxis, w0 ) {\n\n\t\tif ( this._timeStart == - 1 ) {\n\n\t\t\t//animation start\n\t\t\tthis._anglePrev = 0;\n\t\t\tthis._angleCurrent = 0;\n\t\t\tthis._timeStart = time;\n\n\t\t}\n\n\t\tif ( this._state == STATE.ANIMATION_ROTATE ) {\n\n\t\t\t//w = w0 + alpha * t\n\t\t\tconst deltaTime = ( time - this._timeStart ) / 1000;\n\t\t\tconst w = w0 + ( ( - this.dampingFactor ) * deltaTime );\n\n\t\t\tif ( w > 0 ) {\n\n\t\t\t\t//tetha = 0.5 * alpha * t^2 + w0 * t + tetha0\n\t\t\t\tthis._angleCurrent = 0.5 * ( - this.dampingFactor ) * Math.pow( deltaTime, 2 ) + w0 * deltaTime + 0;\n\t\t\t\tthis.applyTransformMatrix( this.rotate( rotationAxis, this._angleCurrent ) );\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\tconst self = this;\n\t\t\t\tthis._animationId = window.requestAnimationFrame( function ( t ) {\n\n\t\t\t\t\tself.onRotationAnim( t, rotationAxis, w0 );\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tthis._animationId = - 1;\n\t\t\t\tthis._timeStart = - 1;\n\n\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\t\t\t\tthis.activateGizmos( false );\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t//interrupt animation\n\n\t\t\tthis._animationId = - 1;\n\t\t\tthis._timeStart = - 1;\n\n\t\t\tif ( this._state != STATE.ROTATE ) {\n\n\t\t\t\tthis.activateGizmos( false );\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Perform pan operation moving camera between two points\n\t * @param {Vector3} p0 Initial point\n\t * @param {Vector3} p1 Ending point\n\t * @param {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only)\n\t */\n\tpan( p0, p1, adjust = false ) {\n\n\t\tconst movement = p0.clone().sub( p1 );\n\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t//adjust movement amount\n\t\t\tmovement.multiplyScalar( 1 / this.camera.zoom );\n\n\t\t} else if ( this.camera.isPerspectiveCamera && adjust ) {\n\n\t\t\t//adjust movement amount\n\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState0 );\t//camera's initial position\n\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState0 );\t//gizmo's initial position\n\t\t\tconst distanceFactor = this._v3_1.distanceTo( this._v3_2 ) / this.camera.position.distanceTo( this._gizmos.position );\n\t\t\tmovement.multiplyScalar( 1 / distanceFactor );\n\n\t\t}\n\n\t\tthis._v3_1.set( movement.x, movement.y, 0 ).applyQuaternion( this.camera.quaternion );\n\n\t\tthis._m4_1.makeTranslation( this._v3_1.x, this._v3_1.y, this._v3_1.z );\n\n\t\tthis.setTransformationMatrices( this._m4_1, this._m4_1 );\n\t\treturn _transformation;\n\n\t}\n\n\t/**\n\t * Reset trackball\n\t */\n\treset() {\n\n\t\tthis.camera.zoom = this._zoom0;\n\n\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis.camera.fov = this._fov0;\n\n\t\t}\n\n\t\tthis.camera.near = this._nearPos;\n\t\tthis.camera.far = this._farPos;\n\t\tthis._cameraMatrixState.copy( this._cameraMatrixState0 );\n\t\tthis._cameraMatrixState.decompose( this.camera.position, this.camera.quaternion, this.camera.scale );\n\t\tthis.camera.up.copy( this._up0 );\n\n\t\tthis.camera.updateMatrix();\n\t\tthis.camera.updateProjectionMatrix();\n\n\t\tthis._gizmoMatrixState.copy( this._gizmoMatrixState0 );\n\t\tthis._gizmoMatrixState0.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\t\tthis._gizmos.updateMatrix();\n\n\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\t\tthis.makeGizmos( this._gizmos.position, this._tbRadius );\n\n\t\tthis.camera.lookAt( this._gizmos.position );\n\n\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t}\n\n\t/**\n\t * Rotate the camera around an axis passing by trackball's center\n\t * @param {Vector3} axis Rotation axis\n\t * @param {number} angle Angle in radians\n\t * @returns {Object} Object with 'camera' field containing transformation matrix resulting from the operation to be applied to the camera\n\t */\n\trotate( axis, angle ) {\n\n\t\tconst point = this._gizmos.position; //rotation center\n\t\tthis._translationMatrix.makeTranslation( - point.x, - point.y, - point.z );\n\t\tthis._rotationMatrix.makeRotationAxis( axis, - angle );\n\n\t\t//rotate camera\n\t\tthis._m4_1.makeTranslation( point.x, point.y, point.z );\n\t\tthis._m4_1.multiply( this._rotationMatrix );\n\t\tthis._m4_1.multiply( this._translationMatrix );\n\n\t\tthis.setTransformationMatrices( this._m4_1 );\n\n\t\treturn _transformation;\n\n\t}\n\n\tcopyState() {\n\n\t\tlet state;\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\tstate = JSON.stringify( { arcballState: {\n\n\t\t\t\tcameraFar: this.camera.far,\n\t\t\t\tcameraMatrix: this.camera.matrix,\n\t\t\t\tcameraNear: this.camera.near,\n\t\t\t\tcameraUp: this.camera.up,\n\t\t\t\tcameraZoom: this.camera.zoom,\n\t\t\t\tgizmoMatrix: this._gizmos.matrix\n\n\t\t\t} } );\n\n\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tstate = JSON.stringify( { arcballState: {\n\t\t\t\tcameraFar: this.camera.far,\n\t\t\t\tcameraFov: this.camera.fov,\n\t\t\t\tcameraMatrix: this.camera.matrix,\n\t\t\t\tcameraNear: this.camera.near,\n\t\t\t\tcameraUp: this.camera.up,\n\t\t\t\tcameraZoom: this.camera.zoom,\n\t\t\t\tgizmoMatrix: this._gizmos.matrix\n\n\t\t\t} } );\n\n\t\t}\n\n\t\tnavigator.clipboard.writeText( state );\n\n\t}\n\n\tpasteState() {\n\n\t\tconst self = this;\n\t\tnavigator.clipboard.readText().then( function resolved( value ) {\n\n\t\t\tself.setStateFromJSON( value );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Save the current state of the control. This can later be recover with .reset\n\t */\n\tsaveState() {\n\n\t\tthis._cameraMatrixState0.copy( this.camera.matrix );\n\t\tthis._gizmoMatrixState0.copy( this._gizmos.matrix );\n\t\tthis._nearPos = this.camera.near;\n\t\tthis._farPos = this.camera.far;\n\t\tthis._zoom0 = this.camera.zoom;\n\t\tthis._up0.copy( this.camera.up );\n\n\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis._fov0 = this.camera.fov;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Perform uniform scale operation around a given point\n\t * @param {Number} size Scale factor\n\t * @param {Vector3} point Point around which scale\n\t * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only)\n\t * @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos\n\t */\n\tscale( size, point, scaleGizmos = true ) {\n\n\t\t_scalePointTemp.copy( point );\n\t\tlet sizeInverse = 1 / size;\n\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t//camera zoom\n\t\t\tthis.camera.zoom = this._zoomState;\n\t\t\tthis.camera.zoom *= size;\n\n\t\t\t//check min and max zoom\n\t\t\tif ( this.camera.zoom > this.maxZoom ) {\n\n\t\t\t\tthis.camera.zoom = this.maxZoom;\n\t\t\t\tsizeInverse = this._zoomState / this.maxZoom;\n\n\t\t\t} else if ( this.camera.zoom < this.minZoom ) {\n\n\t\t\t\tthis.camera.zoom = this.minZoom;\n\t\t\t\tsizeInverse = this._zoomState / this.minZoom;\n\n\t\t\t}\n\n\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\tthis._v3_1.setFromMatrixPosition( this._gizmoMatrixState );\t//gizmos position\n\n\t\t\t//scale gizmos so they appear in the same spot having the same dimension\n\t\t\tthis._scaleMatrix.makeScale( sizeInverse, sizeInverse, sizeInverse );\n\t\t\tthis._translationMatrix.makeTranslation( - this._v3_1.x, - this._v3_1.y, - this._v3_1.z );\n\n\t\t\tthis._m4_2.makeTranslation( this._v3_1.x, this._v3_1.y, this._v3_1.z ).multiply( this._scaleMatrix );\n\t\t\tthis._m4_2.multiply( this._translationMatrix );\n\n\n\t\t\t//move camera and gizmos to obtain pinch effect\n\t\t\t_scalePointTemp.sub( this._v3_1 );\n\n\t\t\tconst amount = _scalePointTemp.clone().multiplyScalar( sizeInverse );\n\t\t\t_scalePointTemp.sub( amount );\n\n\t\t\tthis._m4_1.makeTranslation( _scalePointTemp.x, _scalePointTemp.y, _scalePointTemp.z );\n\t\t\tthis._m4_2.premultiply( this._m4_1 );\n\n\t\t\tthis.setTransformationMatrices( this._m4_1, this._m4_2 );\n\t\t\treturn _transformation;\n\n\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState );\n\t\t\tthis._v3_2.setFromMatrixPosition( this._gizmoMatrixState );\n\n\t\t\t//move camera\n\t\t\tlet distance = this._v3_1.distanceTo( _scalePointTemp );\n\t\t\tlet amount = distance - ( distance * sizeInverse );\n\n\t\t\t//check min and max distance\n\t\t\tconst newDistance = distance - amount;\n\t\t\tif ( newDistance < this.minDistance ) {\n\n\t\t\t\tsizeInverse = this.minDistance / distance;\n\t\t\t\tamount = distance - ( distance * sizeInverse );\n\n\t\t\t} else if ( newDistance > this.maxDistance ) {\n\n\t\t\t\tsizeInverse = this.maxDistance / distance;\n\t\t\t\tamount = distance - ( distance * sizeInverse );\n\n\t\t\t}\n\n\t\t\t_offset.copy( _scalePointTemp ).sub( this._v3_1 ).normalize().multiplyScalar( amount );\n\n\t\t\tthis._m4_1.makeTranslation( _offset.x, _offset.y, _offset.z );\n\n\n\t\t\tif ( scaleGizmos ) {\n\n\t\t\t\t//scale gizmos so they appear in the same spot having the same dimension\n\t\t\t\tconst pos = this._v3_2;\n\n\t\t\t\tdistance = pos.distanceTo( _scalePointTemp );\n\t\t\t\tamount = distance - ( distance * sizeInverse );\n\t\t\t\t_offset.copy( _scalePointTemp ).sub( this._v3_2 ).normalize().multiplyScalar( amount );\n\n\t\t\t\tthis._translationMatrix.makeTranslation( pos.x, pos.y, pos.z );\n\t\t\t\tthis._scaleMatrix.makeScale( sizeInverse, sizeInverse, sizeInverse );\n\n\t\t\t\tthis._m4_2.makeTranslation( _offset.x, _offset.y, _offset.z ).multiply( this._translationMatrix );\n\t\t\t\tthis._m4_2.multiply( this._scaleMatrix );\n\n\t\t\t\tthis._translationMatrix.makeTranslation( - pos.x, - pos.y, - pos.z );\n\n\t\t\t\tthis._m4_2.multiply( this._translationMatrix );\n\t\t\t\tthis.setTransformationMatrices( this._m4_1, this._m4_2 );\n\n\n\t\t\t} else {\n\n\t\t\t\tthis.setTransformationMatrices( this._m4_1 );\n\n\t\t\t}\n\n\t\t\treturn _transformation;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Set camera fov\n\t * @param {Number} value fov to be setted\n\t */\n\tsetFov( value ) {\n\n\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis.camera.fov = MathUtils.clamp( value, this.minFov, this.maxFov );\n\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Set values in transformation object\n\t * @param {Matrix4} camera Transformation to be applied to the camera\n\t * @param {Matrix4} gizmos Transformation to be applied to gizmos\n\t */\n\t setTransformationMatrices( camera = null, gizmos = null ) {\n\n\t\tif ( camera != null ) {\n\n\t\t\tif ( _transformation.camera != null ) {\n\n\t\t\t\t_transformation.camera.copy( camera );\n\n\t\t\t} else {\n\n\t\t\t\t_transformation.camera = camera.clone();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_transformation.camera = null;\n\n\t\t}\n\n\t\tif ( gizmos != null ) {\n\n\t\t\tif ( _transformation.gizmos != null ) {\n\n\t\t\t\t_transformation.gizmos.copy( gizmos );\n\n\t\t\t} else {\n\n\t\t\t\t_transformation.gizmos = gizmos.clone();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_transformation.gizmos = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Rotate camera around its direction axis passing by a given point by a given angle\n\t * @param {Vector3} point The point where the rotation axis is passing trough\n\t * @param {Number} angle Angle in radians\n\t * @returns The computed transormation matix\n\t */\n\tzRotate( point, angle ) {\n\n\t\tthis._rotationMatrix.makeRotationAxis( this._rotationAxis, angle );\n\t\tthis._translationMatrix.makeTranslation( - point.x, - point.y, - point.z );\n\n\t\tthis._m4_1.makeTranslation( point.x, point.y, point.z );\n\t\tthis._m4_1.multiply( this._rotationMatrix );\n\t\tthis._m4_1.multiply( this._translationMatrix );\n\n\t\tthis._v3_1.setFromMatrixPosition( this._gizmoMatrixState ).sub( point );\t//vector from rotation center to gizmos position\n\t\tthis._v3_2.copy( this._v3_1 ).applyAxisAngle( this._rotationAxis, angle );\t//apply rotation\n\t\tthis._v3_2.sub( this._v3_1 );\n\n\t\tthis._m4_2.makeTranslation( this._v3_2.x, this._v3_2.y, this._v3_2.z );\n\n\t\tthis.setTransformationMatrices( this._m4_1, this._m4_2 );\n\t\treturn _transformation;\n\n\t}\n\n\n\tgetRaycaster() {\n\n\t\treturn _raycaster;\n\n\t}\n\n\n\t/**\n\t * Unproject the cursor on the 3D object surface\n\t * @param {Vector2} cursor Cursor coordinates in NDC\n\t * @param {Camera} camera Virtual camera\n\t * @returns {Vector3} The point of intersection with the model, if exist, null otherwise\n\t */\n\tunprojectOnObj( cursor, camera ) {\n\n\t\tconst raycaster = this.getRaycaster();\n\t\traycaster.near = camera.near;\n\t\traycaster.far = camera.far;\n\t\traycaster.setFromCamera( cursor, camera );\n\n\t\tconst intersect = raycaster.intersectObjects( this.scene.children, true );\n\n\t\tfor ( let i = 0; i < intersect.length; i ++ ) {\n\n\t\t\tif ( intersect[ i ].object.uuid != this._gizmos.uuid && intersect[ i ].face != null ) {\n\n\t\t\t\treturn intersect[ i ].point.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Unproject the cursor on the trackball surface\n\t * @param {Camera} camera The virtual camera\n\t * @param {Number} cursorX Cursor horizontal coordinate on screen\n\t * @param {Number} cursorY Cursor vertical coordinate on screen\n\t * @param {HTMLElement} canvas The canvas where the renderer draws its output\n\t * @param {number} tbRadius The trackball radius\n\t * @returns {Vector3} The unprojected point on the trackball surface\n\t */\n\tunprojectOnTbSurface( camera, cursorX, cursorY, canvas, tbRadius ) {\n\n\t\tif ( camera.type == 'OrthographicCamera' ) {\n\n\t\t\tthis._v2_1.copy( this.getCursorPosition( cursorX, cursorY, canvas ) );\n\t\t\tthis._v3_1.set( this._v2_1.x, this._v2_1.y, 0 );\n\n\t\t\tconst x2 = Math.pow( this._v2_1.x, 2 );\n\t\t\tconst y2 = Math.pow( this._v2_1.y, 2 );\n\t\t\tconst r2 = Math.pow( this._tbRadius, 2 );\n\n\t\t\tif ( x2 + y2 <= r2 * 0.5 ) {\n\n\t\t\t\t//intersection with sphere\n\t\t\t\tthis._v3_1.setZ( Math.sqrt( r2 - ( x2 + y2 ) ) );\n\n\t\t\t} else {\n\n\t\t\t\t//intersection with hyperboloid\n\t\t\t\tthis._v3_1.setZ( ( r2 * 0.5 ) / ( Math.sqrt( x2 + y2 ) ) );\n\n\t\t\t}\n\n\t\t\treturn this._v3_1;\n\n\t\t} else if ( camera.type == 'PerspectiveCamera' ) {\n\n\t\t\t//unproject cursor on the near plane\n\t\t\tthis._v2_1.copy( this.getCursorNDC( cursorX, cursorY, canvas ) );\n\n\t\t\tthis._v3_1.set( this._v2_1.x, this._v2_1.y, - 1 );\n\t\t\tthis._v3_1.applyMatrix4( camera.projectionMatrixInverse );\n\n\t\t\tconst rayDir = this._v3_1.clone().normalize(); //unprojected ray direction\n\t\t\tconst cameraGizmoDistance = camera.position.distanceTo( this._gizmos.position );\n\t\t\tconst radius2 = Math.pow( tbRadius, 2 );\n\n\t\t\t//\t camera\n\t\t\t//\t\t|\\\n\t\t\t//\t\t| \\\n\t\t\t//\t\t| \\\n\t\t\t//\th\t|\t\\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t_ _ | _ _ _\\ _ _ near plane\n\t\t\t//\t\t\tl\n\n\t\t\tconst h = this._v3_1.z;\n\t\t\tconst l = Math.sqrt( Math.pow( this._v3_1.x, 2 ) + Math.pow( this._v3_1.y, 2 ) );\n\n\t\t\tif ( l == 0 ) {\n\n\t\t\t\t//ray aligned with camera\n\t\t\t\trayDir.set( this._v3_1.x, this._v3_1.y, tbRadius );\n\t\t\t\treturn rayDir;\n\n\t\t\t}\n\n\t\t\tconst m = h / l;\n\t\t\tconst q = cameraGizmoDistance;\n\n\t\t\t/*\n\t\t\t * calculate intersection point between unprojected ray and trackball surface\n\t\t\t *|y = m * x + q\n\t\t\t *|x^2 + y^2 = r^2\n\t\t\t *\n\t\t\t * (m^2 + 1) * x^2 + (2 * m * q) * x + q^2 - r^2 = 0\n\t\t\t */\n\t\t\tlet a = Math.pow( m, 2 ) + 1;\n\t\t\tlet b = 2 * m * q;\n\t\t\tlet c = Math.pow( q, 2 ) - radius2;\n\t\t\tlet delta = Math.pow( b, 2 ) - ( 4 * a * c );\n\n\t\t\tif ( delta >= 0 ) {\n\n\t\t\t\t//intersection with sphere\n\t\t\t\tthis._v2_1.setX( ( - b - Math.sqrt( delta ) ) / ( 2 * a ) );\n\t\t\t\tthis._v2_1.setY( m * this._v2_1.x + q );\n\n\t\t\t\tconst angle = MathUtils.RAD2DEG * this._v2_1.angle();\n\n\t\t\t\tif ( angle >= 45 ) {\n\n\t\t\t\t\t//if angle between intersection point and X' axis is >= 45°, return that point\n\t\t\t\t\t//otherwise, calculate intersection point with hyperboloid\n\n\t\t\t\t\tconst rayLength = Math.sqrt( Math.pow( this._v2_1.x, 2 ) + Math.pow( ( cameraGizmoDistance - this._v2_1.y ), 2 ) );\n\t\t\t\t\trayDir.multiplyScalar( rayLength );\n\t\t\t\t\trayDir.z += cameraGizmoDistance;\n\t\t\t\t\treturn rayDir;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//intersection with hyperboloid\n\t\t\t/*\n\t\t\t *|y = m * x + q\n\t\t\t *|y = (1 / x) * (r^2 / 2)\n\t\t\t *\n\t\t\t * m * x^2 + q * x - r^2 / 2 = 0\n\t\t\t */\n\n\t\t\ta = m;\n\t\t\tb = q;\n\t\t\tc = - radius2 * 0.5;\n\t\t\tdelta = Math.pow( b, 2 ) - ( 4 * a * c );\n\t\t\tthis._v2_1.setX( ( - b - Math.sqrt( delta ) ) / ( 2 * a ) );\n\t\t\tthis._v2_1.setY( m * this._v2_1.x + q );\n\n\t\t\tconst rayLength = Math.sqrt( Math.pow( this._v2_1.x, 2 ) + Math.pow( ( cameraGizmoDistance - this._v2_1.y ), 2 ) );\n\n\t\t\trayDir.multiplyScalar( rayLength );\n\t\t\trayDir.z += cameraGizmoDistance;\n\t\t\treturn rayDir;\n\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera\n\t * @param {Camera} camera The virtual camera\n\t * @param {Number} cursorX Cursor horizontal coordinate on screen\n\t * @param {Number} cursorY Cursor vertical coordinate on screen\n\t * @param {HTMLElement} canvas The canvas where the renderer draws its output\n\t * @param {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only)\n\t * @returns {Vector3} The unprojected point on the trackball plane\n\t */\n\tunprojectOnTbPlane( camera, cursorX, cursorY, canvas, initialDistance = false ) {\n\n\t\tif ( camera.type == 'OrthographicCamera' ) {\n\n\t\t\tthis._v2_1.copy( this.getCursorPosition( cursorX, cursorY, canvas ) );\n\t\t\tthis._v3_1.set( this._v2_1.x, this._v2_1.y, 0 );\n\n\t\t\treturn this._v3_1.clone();\n\n\t\t} else if ( camera.type == 'PerspectiveCamera' ) {\n\n\t\t\tthis._v2_1.copy( this.getCursorNDC( cursorX, cursorY, canvas ) );\n\n\t\t\t//unproject cursor on the near plane\n\t\t\tthis._v3_1.set( this._v2_1.x, this._v2_1.y, - 1 );\n\t\t\tthis._v3_1.applyMatrix4( camera.projectionMatrixInverse );\n\n\t\t\tconst rayDir = this._v3_1.clone().normalize(); //unprojected ray direction\n\n\t\t\t//\t camera\n\t\t\t//\t\t|\\\n\t\t\t//\t\t| \\\n\t\t\t//\t\t| \\\n\t\t\t//\th\t|\t\\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t\t| \t \\\n\t\t\t//\t_ _ | _ _ _\\ _ _ near plane\n\t\t\t//\t\t\tl\n\n\t\t\tconst h = this._v3_1.z;\n\t\t\tconst l = Math.sqrt( Math.pow( this._v3_1.x, 2 ) + Math.pow( this._v3_1.y, 2 ) );\n\t\t\tlet cameraGizmoDistance;\n\n\t\t\tif ( initialDistance ) {\n\n\t\t\t\tcameraGizmoDistance = this._v3_1.setFromMatrixPosition( this._cameraMatrixState0 ).distanceTo( this._v3_2.setFromMatrixPosition( this._gizmoMatrixState0 ) );\n\n\t\t\t} else {\n\n\t\t\t\tcameraGizmoDistance = camera.position.distanceTo( this._gizmos.position );\n\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * calculate intersection point between unprojected ray and the plane\n\t\t\t *|y = mx + q\n\t\t\t *|y = 0\n\t\t\t *\n\t\t\t * x = -q/m\n\t\t\t*/\n\t\t\tif ( l == 0 ) {\n\n\t\t\t\t//ray aligned with camera\n\t\t\t\trayDir.set( 0, 0, 0 );\n\t\t\t\treturn rayDir;\n\n\t\t\t}\n\n\t\t\tconst m = h / l;\n\t\t\tconst q = cameraGizmoDistance;\n\t\t\tconst x = - q / m;\n\n\t\t\tconst rayLength = Math.sqrt( Math.pow( q, 2 ) + Math.pow( x, 2 ) );\n\t\t\trayDir.multiplyScalar( rayLength );\n\t\t\trayDir.z = 0;\n\t\t\treturn rayDir;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Update camera and gizmos state\n\t */\n\tupdateMatrixState() {\n\n\t\t//update camera and gizmos state\n\t\tthis._cameraMatrixState.copy( this.camera.matrix );\n\t\tthis._gizmoMatrixState.copy( this._gizmos.matrix );\n\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\tthis._cameraProjectionState.copy( this.camera.projectionMatrix );\n\t\t\tthis.camera.updateProjectionMatrix();\n\t\t\tthis._zoomState = this.camera.zoom;\n\n\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\tthis._fovState = this.camera.fov;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Update the trackball FSA\n\t * @param {STATE} newState New state of the FSA\n\t * @param {Boolean} updateMatrices If matriices state should be updated\n\t */\n\tupdateTbState( newState, updateMatrices ) {\n\n\t\tthis._state = newState;\n\t\tif ( updateMatrices ) {\n\n\t\t\tthis.updateMatrixState();\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst EPS = 0.000001;\n\n\t\tif ( this.target.equals( this._currentTarget ) === false ) {\n\n\t\t\tthis._gizmos.position.copy( this.target );\t//for correct radius calculation\n\t\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\t\t\tthis.makeGizmos( this.target, this._tbRadius );\n\t\t\tthis._currentTarget.copy( this.target );\n\n\t\t}\n\n\t\t//check min/max parameters\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t//check zoom\n\t\t\tif ( this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom ) {\n\n\t\t\t\tconst newZoom = MathUtils.clamp( this.camera.zoom, this.minZoom, this.maxZoom );\n\t\t\t\tthis.applyTransformMatrix( this.scale( newZoom / this.camera.zoom, this._gizmos.position, true ) );\n\n\t\t\t}\n\n\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t//check distance\n\t\t\tconst distance = this.camera.position.distanceTo( this._gizmos.position );\n\n\t\t\tif ( distance > this.maxDistance + EPS || distance < this.minDistance - EPS ) {\n\n\t\t\t\tconst newDistance = MathUtils.clamp( distance, this.minDistance, this.maxDistance );\n\t\t\t\tthis.applyTransformMatrix( this.scale( newDistance / distance, this._gizmos.position ) );\n\t\t\t\tthis.updateMatrixState();\n\n\t\t\t }\n\n\t\t\t//check fov\n\t\t\tif ( this.camera.fov < this.minFov || this.camera.fov > this.maxFov ) {\n\n\t\t\t\tthis.camera.fov = MathUtils.clamp( this.camera.fov, this.minFov, this.maxFov );\n\t\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tconst oldRadius = this._tbRadius;\n\t\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\n\t\t\tif ( oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS ) {\n\n\t\t\t\tconst scale = ( this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z ) / 3;\n\t\t\t\tconst newRadius = this._tbRadius / scale;\n\t\t\t\tconst curve = new EllipseCurve( 0, 0, newRadius, newRadius );\n\t\t\t\tconst points = curve.getPoints( this._curvePts );\n\t\t\t\tconst curveGeometry = new BufferGeometry().setFromPoints( points );\n\n\t\t\t\tfor ( const gizmo in this._gizmos.children ) {\n\n\t\t\t\t\tthis._gizmos.children[ gizmo ].geometry = curveGeometry;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.camera.lookAt( this._gizmos.position );\n\n\t}\n\n\tsetStateFromJSON( json ) {\n\n\t\tconst state = JSON.parse( json );\n\n\t\tif ( state.arcballState != undefined ) {\n\n\t\t\tthis._cameraMatrixState.fromArray( state.arcballState.cameraMatrix.elements );\n\t\t\tthis._cameraMatrixState.decompose( this.camera.position, this.camera.quaternion, this.camera.scale );\n\n\t\t\tthis.camera.up.copy( state.arcballState.cameraUp );\n\t\t\tthis.camera.near = state.arcballState.cameraNear;\n\t\t\tthis.camera.far = state.arcballState.cameraFar;\n\n\t\t\tthis.camera.zoom = state.arcballState.cameraZoom;\n\n\t\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\tthis.camera.fov = state.arcballState.cameraFov;\n\n\t\t\t}\n\n\t\t\tthis._gizmoMatrixState.fromArray( state.arcballState.gizmoMatrix.elements );\n\t\t\tthis._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );\n\n\t\t\tthis.camera.updateMatrix();\n\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\tthis._gizmos.updateMatrix();\n\n\t\t\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\t\t\tconst gizmoTmp = new Matrix4().copy( this._gizmoMatrixState0 );\n\t\t\tthis.makeGizmos( this._gizmos.position, this._tbRadius );\n\t\t\tthis._gizmoMatrixState0.copy( gizmoTmp );\n\n\t\t\tthis.camera.lookAt( this._gizmos.position );\n\t\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t}\n\n\t}\n\n}\n\n//listeners\n\nfunction onWindowResize() {\n\n\tconst scale = ( this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z ) / 3;\n\tthis._tbRadius = this.calculateTbRadius( this.camera );\n\n\tconst newRadius = this._tbRadius / scale;\n\tconst curve = new EllipseCurve( 0, 0, newRadius, newRadius );\n\tconst points = curve.getPoints( this._curvePts );\n\tconst curveGeometry = new BufferGeometry().setFromPoints( points );\n\n\n\tfor ( const gizmo in this._gizmos.children ) {\n\n\t\tthis._gizmos.children[ gizmo ].geometry = curveGeometry;\n\n\t}\n\n\tthis.dispatchEvent( _changeEvent );\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( ! this.enabled ) {\n\n\t\treturn;\n\n\t}\n\n\tfor ( let i = 0; i < this.mouseActions.length; i ++ ) {\n\n\t\tif ( this.mouseActions[ i ].mouse == 2 ) {\n\n\t\t\t//prevent only if button 2 is actually used\n\t\t\tevent.preventDefault();\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\nfunction onPointerCancel() {\n\n\tthis._touchStart.splice( 0, this._touchStart.length );\n\tthis._touchCurrent.splice( 0, this._touchCurrent.length );\n\tthis._input = INPUT.NONE;\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( event.button == 0 && event.isPrimary ) {\n\n\t\tthis._downValid = true;\n\t\tthis._downEvents.push( event );\n\t\tthis._downStart = performance.now();\n\n\t} else {\n\n\t\tthis._downValid = false;\n\n\t}\n\n\tif ( event.pointerType == 'touch' && this._input != INPUT.CURSOR ) {\n\n\t\tthis._touchStart.push( event );\n\t\tthis._touchCurrent.push( event );\n\n\t\tswitch ( this._input ) {\n\n\t\t\tcase INPUT.NONE:\n\n\t\t\t\t//singleStart\n\t\t\t\tthis._input = INPUT.ONE_FINGER;\n\t\t\t\tthis.onSinglePanStart( event, 'ROTATE' );\n\n\t\t\t\twindow.addEventListener( 'pointermove', this._onPointerMove );\n\t\t\t\twindow.addEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.ONE_FINGER:\n\t\t\tcase INPUT.ONE_FINGER_SWITCHED:\n\n\t\t\t\t//doubleStart\n\t\t\t\tthis._input = INPUT.TWO_FINGER;\n\n\t\t\t\tthis.onRotateStart();\n\t\t\t\tthis.onPinchStart();\n\t\t\t\tthis.onDoublePanStart();\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.TWO_FINGER:\n\n\t\t\t\t//multipleStart\n\t\t\t\tthis._input = INPUT.MULT_FINGER;\n\t\t\t\tthis.onTriplePanStart( event );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t} else if ( event.pointerType != 'touch' && this._input == INPUT.NONE ) {\n\n\t\tlet modifier = null;\n\n\t\tif ( event.ctrlKey || event.metaKey ) {\n\n\t\t\tmodifier = 'CTRL';\n\n\t\t} else if ( event.shiftKey ) {\n\n\t\t\tmodifier = 'SHIFT';\n\n\t\t}\n\n\t\tthis._mouseOp = this.getOpFromAction( event.button, modifier );\n\t\tif ( this._mouseOp != null ) {\n\n\t\t\twindow.addEventListener( 'pointermove', this._onPointerMove );\n\t\t\twindow.addEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\t//singleStart\n\t\t\tthis._input = INPUT.CURSOR;\n\t\t\tthis._button = event.button;\n\t\t\tthis.onSinglePanStart( event, this._mouseOp );\n\n\t\t}\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( event.pointerType == 'touch' && this._input != INPUT.CURSOR ) {\n\n\t\tswitch ( this._input ) {\n\n\t\t\tcase INPUT.ONE_FINGER:\n\n\t\t\t\t//singleMove\n\t\t\t\tthis.updateTouchEvent( event );\n\n\t\t\t\tthis.onSinglePanMove( event, STATE.ROTATE );\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.ONE_FINGER_SWITCHED:\n\n\t\t\t\tconst movement = this.calculatePointersDistance( this._touchCurrent[ 0 ], event ) * this._devPxRatio;\n\n\t\t\t\tif ( movement >= this._switchSensibility ) {\n\n\t\t\t\t\t//singleMove\n\t\t\t\t\tthis._input = INPUT.ONE_FINGER;\n\t\t\t\t\tthis.updateTouchEvent( event );\n\n\t\t\t\t\tthis.onSinglePanStart( event, 'ROTATE' );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.TWO_FINGER:\n\n\t\t\t\t//rotate/pan/pinchMove\n\t\t\t\tthis.updateTouchEvent( event );\n\n\t\t\t\tthis.onRotateMove();\n\t\t\t\tthis.onPinchMove();\n\t\t\t\tthis.onDoublePanMove();\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.MULT_FINGER:\n\n\t\t\t\t//multMove\n\t\t\t\tthis.updateTouchEvent( event );\n\n\t\t\t\tthis.onTriplePanMove( event );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t} else if ( event.pointerType != 'touch' && this._input == INPUT.CURSOR ) {\n\n\t\tlet modifier = null;\n\n\t\tif ( event.ctrlKey || event.metaKey ) {\n\n\t\t\tmodifier = 'CTRL';\n\n\t\t} else if ( event.shiftKey ) {\n\n\t\t\tmodifier = 'SHIFT';\n\n\t\t}\n\n\t\tconst mouseOpState = this.getOpStateFromAction( this._button, modifier );\n\n\t\tif ( mouseOpState != null ) {\n\n\t\t\tthis.onSinglePanMove( event, mouseOpState );\n\n\t\t}\n\n\t}\n\n\t//checkDistance\n\tif ( this._downValid ) {\n\n\t\tconst movement = this.calculatePointersDistance( this._downEvents[ this._downEvents.length - 1 ], event ) * this._devPxRatio;\n\t\tif ( movement > this._movementThreshold ) {\n\n\t\t\tthis._downValid = false;\n\n\t\t}\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tif ( event.pointerType == 'touch' && this._input != INPUT.CURSOR ) {\n\n\t\tconst nTouch = this._touchCurrent.length;\n\n\t\tfor ( let i = 0; i < nTouch; i ++ ) {\n\n\t\t\tif ( this._touchCurrent[ i ].pointerId == event.pointerId ) {\n\n\t\t\t\tthis._touchCurrent.splice( i, 1 );\n\t\t\t\tthis._touchStart.splice( i, 1 );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tswitch ( this._input ) {\n\n\t\t\tcase INPUT.ONE_FINGER:\n\t\t\tcase INPUT.ONE_FINGER_SWITCHED:\n\n\t\t\t\t//singleEnd\n\t\t\t\twindow.removeEventListener( 'pointermove', this._onPointerMove );\n\t\t\t\twindow.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\t\tthis._input = INPUT.NONE;\n\t\t\t\tthis.onSinglePanEnd();\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.TWO_FINGER:\n\n\t\t\t\t//doubleEnd\n\t\t\t\tthis.onDoublePanEnd( event );\n\t\t\t\tthis.onPinchEnd( event );\n\t\t\t\tthis.onRotateEnd( event );\n\n\t\t\t\t//switching to singleStart\n\t\t\t\tthis._input = INPUT.ONE_FINGER_SWITCHED;\n\n\t\t\t\tbreak;\n\n\t\t\tcase INPUT.MULT_FINGER:\n\n\t\t\t\tif ( this._touchCurrent.length == 0 ) {\n\n\t\t\t\t\twindow.removeEventListener( 'pointermove', this._onPointerMove );\n\t\t\t\t\twindow.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\t\t\t//multCancel\n\t\t\t\t\tthis._input = INPUT.NONE;\n\t\t\t\t\tthis.onTriplePanEnd();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t} else if ( event.pointerType != 'touch' && this._input == INPUT.CURSOR ) {\n\n\t\twindow.removeEventListener( 'pointermove', this._onPointerMove );\n\t\twindow.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\tthis._input = INPUT.NONE;\n\t\tthis.onSinglePanEnd();\n\t\tthis._button = - 1;\n\n\t}\n\n\tif ( event.isPrimary ) {\n\n\t\tif ( this._downValid ) {\n\n\t\t\tconst downTime = event.timeStamp - this._downEvents[ this._downEvents.length - 1 ].timeStamp;\n\n\t\t\tif ( downTime <= this._maxDownTime ) {\n\n\t\t\t\tif ( this._nclicks == 0 ) {\n\n\t\t\t\t\t//first valid click detected\n\t\t\t\t\tthis._nclicks = 1;\n\t\t\t\t\tthis._clickStart = performance.now();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst clickInterval = event.timeStamp - this._clickStart;\n\t\t\t\t\tconst movement = this.calculatePointersDistance( this._downEvents[ 1 ], this._downEvents[ 0 ] ) * this._devPxRatio;\n\n\t\t\t\t\tif ( clickInterval <= this._maxInterval && movement <= this._posThreshold ) {\n\n\t\t\t\t\t\t//second valid click detected\n\t\t\t\t\t\t//fire double tap and reset values\n\t\t\t\t\t\tthis._nclicks = 0;\n\t\t\t\t\t\tthis._downEvents.splice( 0, this._downEvents.length );\n\t\t\t\t\t\tthis.onDoubleTap( event );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t//new 'first click'\n\t\t\t\t\t\tthis._nclicks = 1;\n\t\t\t\t\t\tthis._downEvents.shift();\n\t\t\t\t\t\tthis._clickStart = performance.now();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis._downValid = false;\n\t\t\t\tthis._nclicks = 0;\n\t\t\t\tthis._downEvents.splice( 0, this._downEvents.length );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis._nclicks = 0;\n\t\t\tthis._downEvents.splice( 0, this._downEvents.length );\n\n\t\t}\n\n\t}\n\n}\n\nfunction onWheel( event ) {\n\n\tif ( this.enabled && this.enableZoom ) {\n\n\t\tlet modifier = null;\n\n\t\tif ( event.ctrlKey || event.metaKey ) {\n\n\t\t\tmodifier = 'CTRL';\n\n\t\t} else if ( event.shiftKey ) {\n\n\t\t\tmodifier = 'SHIFT';\n\n\t\t}\n\n\t\tconst mouseOp = this.getOpFromAction( 'WHEEL', modifier );\n\n\t\tif ( mouseOp != null ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tthis.dispatchEvent( _startEvent );\n\n\t\t\tconst notchDeltaY = 125; //distance of one notch of mouse wheel\n\t\t\tlet sgn = event.deltaY / notchDeltaY;\n\n\t\t\tlet size = 1;\n\n\t\t\tif ( sgn > 0 ) {\n\n\t\t\t\tsize = 1 / this.scaleFactor;\n\n\t\t\t} else if ( sgn < 0 ) {\n\n\t\t\t\tsize = this.scaleFactor;\n\n\t\t\t}\n\n\t\t\tswitch ( mouseOp ) {\n\n\t\t\t\tcase 'ZOOM':\n\n\t\t\t\t\tthis.updateTbState( STATE.SCALE, true );\n\n\t\t\t\t\tif ( sgn > 0 ) {\n\n\t\t\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, sgn ) );\n\n\t\t\t\t\t} else if ( sgn < 0 ) {\n\n\t\t\t\t\t\tsize = Math.pow( this.scaleFactor, - sgn );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.cursorZoom && this.enablePan ) {\n\n\t\t\t\t\t\tlet scalePoint;\n\n\t\t\t\t\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t\t\t\t\tscalePoint = this.unprojectOnTbPlane( this.camera, event.clientX, event.clientY, this.domElement ).applyQuaternion( this.camera.quaternion ).multiplyScalar( 1 / this.camera.zoom ).add( this._gizmos.position );\n\n\t\t\t\t\t\t} else if ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\t\t\t\tscalePoint = this.unprojectOnTbPlane( this.camera, event.clientX, event.clientY, this.domElement ).applyQuaternion( this.camera.quaternion ).add( this._gizmos.position );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, scalePoint ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, this._gizmos.position ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._grid != null ) {\n\n\t\t\t\t\t\tthis.disposeGrid();\n\t\t\t\t\t\tthis.drawGrid();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'FOV':\n\n\t\t\t\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\t\t\tthis.updateTbState( STATE.FOV, true );\n\n\n\t\t\t\t\t\t//Vertigo effect\n\n\t\t\t\t\t\t//\t fov / 2\n\t\t\t\t\t\t//\t\t|\\\n\t\t\t\t\t\t//\t\t| \\\n\t\t\t\t\t\t//\t\t| \\\n\t\t\t\t\t\t//\tx\t|\t\\\n\t\t\t\t\t\t//\t\t| \t \\\n\t\t\t\t\t\t//\t\t| \t \\\n\t\t\t\t\t\t//\t\t| _ _ _\\\n\t\t\t\t\t\t//\t\t\ty\n\n\t\t\t\t\t\t//check for iOs shift shortcut\n\t\t\t\t\t\tif ( event.deltaX != 0 ) {\n\n\t\t\t\t\t\t\tsgn = event.deltaX / notchDeltaY;\n\n\t\t\t\t\t\t\tsize = 1;\n\n\t\t\t\t\t\t\tif ( sgn > 0 ) {\n\n\t\t\t\t\t\t\t\tsize = 1 / ( Math.pow( this.scaleFactor, sgn ) );\n\n\t\t\t\t\t\t\t} else if ( sgn < 0 ) {\n\n\t\t\t\t\t\t\t\tsize = Math.pow( this.scaleFactor, - sgn );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._v3_1.setFromMatrixPosition( this._cameraMatrixState );\n\t\t\t\t\t\tconst x = this._v3_1.distanceTo( this._gizmos.position );\n\t\t\t\t\t\tlet xNew = x / size;\t//distance between camera and gizmos if scale(size, scalepoint) would be performed\n\n\t\t\t\t\t\t//check min and max distance\n\t\t\t\t\t\txNew = MathUtils.clamp( xNew, this.minDistance, this.maxDistance );\n\n\t\t\t\t\t\tconst y = x * Math.tan( MathUtils.DEG2RAD * this.camera.fov * 0.5 );\n\n\t\t\t\t\t\t//calculate new fov\n\t\t\t\t\t\tlet newFov = MathUtils.RAD2DEG * ( Math.atan( y / xNew ) * 2 );\n\n\t\t\t\t\t\t//check min and max fov\n\t\t\t\t\t\tif ( newFov > this.maxFov ) {\n\n\t\t\t\t\t\t\tnewFov = this.maxFov;\n\n\t\t\t\t\t\t} else if ( newFov < this.minFov ) {\n\n\t\t\t\t\t\t\tnewFov = this.minFov;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst newDistance = y / Math.tan( MathUtils.DEG2RAD * ( newFov / 2 ) );\n\t\t\t\t\t\tsize = x / newDistance;\n\n\t\t\t\t\t\tthis.setFov( newFov );\n\t\t\t\t\t\tthis.applyTransformMatrix( this.scale( size, this._gizmos.position, false ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._grid != null ) {\n\n\t\t\t\t\t\tthis.disposeGrid();\n\t\t\t\t\t\tthis.drawGrid();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateTbState( STATE.IDLE, false );\n\n\t\t\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\t\t\tthis.dispatchEvent( _endEvent );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { ArcballControls };\n", "import {\n\tEventDispatcher,\n\tMatrix4,\n\tPlane,\n\tRaycaster,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _plane = new Plane();\nconst _raycaster = new Raycaster();\n\nconst _pointer = new Vector2();\nconst _offset = new Vector3();\nconst _diff = new Vector2();\nconst _previousPointer = new Vector2();\nconst _intersection = new Vector3();\nconst _worldPosition = new Vector3();\nconst _inverseMatrix = new Matrix4();\n\nconst _up = new Vector3();\nconst _right = new Vector3();\n\nclass DragControls extends EventDispatcher {\n\n\tconstructor( _objects, _camera, _domElement ) {\n\n\t\tsuper();\n\n\t\t_domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t\tlet _selected = null, _hovered = null;\n\n\t\tconst _intersections = [];\n\n\t\tthis.mode = 'translate';\n\n\t\tthis.rotateSpeed = 1;\n\n\t\t//\n\n\t\tconst scope = this;\n\n\t\tfunction activate() {\n\n\t\t\t_domElement.addEventListener( 'pointermove', onPointerMove );\n\t\t\t_domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\t\t_domElement.addEventListener( 'pointerup', onPointerCancel );\n\t\t\t_domElement.addEventListener( 'pointerleave', onPointerCancel );\n\n\t\t}\n\n\t\tfunction deactivate() {\n\n\t\t\t_domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\t_domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\t_domElement.removeEventListener( 'pointerup', onPointerCancel );\n\t\t\t_domElement.removeEventListener( 'pointerleave', onPointerCancel );\n\n\t\t\t_domElement.style.cursor = '';\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tdeactivate();\n\n\t\t}\n\n\t\tfunction getObjects() {\n\n\t\t\treturn _objects;\n\n\t\t}\n\n\t\tfunction setObjects( objects ) {\n\n\t\t\t_objects = objects;\n\n\t\t}\n\n\t\tfunction getRaycaster() {\n\n\t\t\treturn _raycaster;\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tupdatePointer( event );\n\n\t\t\t_raycaster.setFromCamera( _pointer, _camera );\n\n\t\t\tif ( _selected ) {\n\n\t\t\t\tif ( scope.mode === 'translate' ) {\n\n\t\t\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( scope.mode === 'rotate' ) {\n\n\t\t\t\t\t_diff.subVectors( _pointer, _previousPointer ).multiplyScalar( scope.rotateSpeed );\n\t\t\t\t\t_selected.rotateOnWorldAxis( _up, _diff.x );\n\t\t\t\t\t_selected.rotateOnWorldAxis( _right.normalize(), - _diff.y );\n\n\t\t\t\t}\n\n\t\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\t\t_previousPointer.copy( _pointer );\n\n\t\t\t} else {\n\n\t\t\t\t// hover support\n\n\t\t\t\tif ( event.pointerType === 'mouse' || event.pointerType === 'pen' ) {\n\n\t\t\t\t\t_intersections.length = 0;\n\n\t\t\t\t\t_raycaster.setFromCamera( _pointer, _camera );\n\t\t\t\t\t_raycaster.intersectObjects( _objects, scope.recursive, _intersections );\n\n\t\t\t\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t\t\t\tconst object = _intersections[ 0 ].object;\n\n\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) );\n\n\t\t\t\t\t\tif ( _hovered !== object && _hovered !== null ) {\n\n\t\t\t\t\t\t\tscope.dispatchEvent( { type: 'hoveroff', object: _hovered } );\n\n\t\t\t\t\t\t\t_domElement.style.cursor = 'auto';\n\t\t\t\t\t\t\t_hovered = null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( _hovered !== object ) {\n\n\t\t\t\t\t\t\tscope.dispatchEvent( { type: 'hoveron', object: object } );\n\n\t\t\t\t\t\t\t_domElement.style.cursor = 'pointer';\n\t\t\t\t\t\t\t_hovered = object;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( _hovered !== null ) {\n\n\t\t\t\t\t\t\tscope.dispatchEvent( { type: 'hoveroff', object: _hovered } );\n\n\t\t\t\t\t\t\t_domElement.style.cursor = 'auto';\n\t\t\t\t\t\t\t_hovered = null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_previousPointer.copy( _pointer );\n\n\t\t}\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tupdatePointer( event );\n\n\t\t\t_intersections.length = 0;\n\n\t\t\t_raycaster.setFromCamera( _pointer, _camera );\n\t\t\t_raycaster.intersectObjects( _objects, scope.recursive, _intersections );\n\n\t\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t\tif ( scope.transformGroup === true ) {\n\n\t\t\t\t\t// look for the outermost group in the object's upper hierarchy\n\n\t\t\t\t\t_selected = findGroup( _intersections[ 0 ].object );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_selected = _intersections[ 0 ].object;\n\n\t\t\t\t}\n\n\t\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t\tif ( scope.mode === 'translate' ) {\n\n\t\t\t\t\t\t_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();\n\t\t\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t\t\t} else if ( scope.mode === 'rotate' ) {\n\n\t\t\t\t\t\t// the controls only support Y+ up\n\t\t\t\t\t\t_up.set( 0, 1, 0 ).applyQuaternion( _camera.quaternion ).normalize();\n\t\t\t\t\t\t_right.set( 1, 0, 0 ).applyQuaternion( _camera.quaternion ).normalize();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t\t}\n\n\t\t\t_previousPointer.copy( _pointer );\n\n\t\t}\n\n\t\tfunction onPointerCancel() {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( _selected ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t\t_selected = null;\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = _hovered ? 'pointer' : 'auto';\n\n\t\t}\n\n\t\tfunction updatePointer( event ) {\n\n\t\t\tconst rect = _domElement.getBoundingClientRect();\n\n\t\t\t_pointer.x = ( event.clientX - rect.left ) / rect.width * 2 - 1;\n\t\t\t_pointer.y = - ( event.clientY - rect.top ) / rect.height * 2 + 1;\n\n\t\t}\n\n\t\tfunction findGroup( obj, group = null ) {\n\n\t\t\tif ( obj.isGroup ) group = obj;\n\n\t\t\tif ( obj.parent === null ) return group;\n\n\t\t\treturn findGroup( obj.parent, group );\n\n\t\t}\n\n\t\tactivate();\n\n\t\t// API\n\n\t\tthis.enabled = true;\n\t\tthis.recursive = true;\n\t\tthis.transformGroup = false;\n\n\t\tthis.activate = activate;\n\t\tthis.deactivate = deactivate;\n\t\tthis.dispose = dispose;\n\t\tthis.getObjects = getObjects;\n\t\tthis.getRaycaster = getRaycaster;\n\t\tthis.setObjects = setObjects;\n\n\t}\n\n}\n\nexport { DragControls };\n", "import {\n\tMathUtils,\n\tSpherical,\n\tVector3\n} from 'three';\n\nconst _lookDirection = new Vector3();\nconst _spherical = new Spherical();\nconst _target = new Vector3();\n\nclass FirstPersonControls {\n\n\tconstructor( object, domElement ) {\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\n\t\t// API\n\n\t\tthis.enabled = true;\n\n\t\tthis.movementSpeed = 1.0;\n\t\tthis.lookSpeed = 0.005;\n\n\t\tthis.lookVertical = true;\n\t\tthis.autoForward = false;\n\n\t\tthis.activeLook = true;\n\n\t\tthis.heightSpeed = false;\n\t\tthis.heightCoef = 1.0;\n\t\tthis.heightMin = 0.0;\n\t\tthis.heightMax = 1.0;\n\n\t\tthis.constrainVertical = false;\n\t\tthis.verticalMin = 0;\n\t\tthis.verticalMax = Math.PI;\n\n\t\tthis.mouseDragOn = false;\n\n\t\t// internals\n\n\t\tthis.autoSpeedFactor = 0.0;\n\n\t\tthis.pointerX = 0;\n\t\tthis.pointerY = 0;\n\n\t\tthis.moveForward = false;\n\t\tthis.moveBackward = false;\n\t\tthis.moveLeft = false;\n\t\tthis.moveRight = false;\n\n\t\tthis.viewHalfX = 0;\n\t\tthis.viewHalfY = 0;\n\n\t\t// private variables\n\n\t\tlet lat = 0;\n\t\tlet lon = 0;\n\n\t\t//\n\n\t\tthis.handleResize = function () {\n\n\t\t\tif ( this.domElement === document ) {\n\n\t\t\t\tthis.viewHalfX = window.innerWidth / 2;\n\t\t\t\tthis.viewHalfY = window.innerHeight / 2;\n\n\t\t\t} else {\n\n\t\t\t\tthis.viewHalfX = this.domElement.offsetWidth / 2;\n\t\t\t\tthis.viewHalfY = this.domElement.offsetHeight / 2;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.onPointerDown = function ( event ) {\n\n\t\t\tif ( this.domElement !== document ) {\n\n\t\t\t\tthis.domElement.focus();\n\n\t\t\t}\n\n\t\t\tif ( this.activeLook ) {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveForward = true; break;\n\t\t\t\t\tcase 2: this.moveBackward = true; break;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.mouseDragOn = true;\n\n\t\t};\n\n\t\tthis.onPointerUp = function ( event ) {\n\n\t\t\tif ( this.activeLook ) {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveForward = false; break;\n\t\t\t\t\tcase 2: this.moveBackward = false; break;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.mouseDragOn = false;\n\n\t\t};\n\n\t\tthis.onPointerMove = function ( event ) {\n\n\t\t\tif ( this.domElement === document ) {\n\n\t\t\t\tthis.pointerX = event.pageX - this.viewHalfX;\n\t\t\t\tthis.pointerY = event.pageY - this.viewHalfY;\n\n\t\t\t} else {\n\n\t\t\t\tthis.pointerX = event.pageX - this.domElement.offsetLeft - this.viewHalfX;\n\t\t\t\tthis.pointerY = event.pageY - this.domElement.offsetTop - this.viewHalfY;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.onKeyDown = function ( event ) {\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\tcase 'KeyW': this.moveForward = true; break;\n\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\tcase 'KeyA': this.moveLeft = true; break;\n\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\tcase 'KeyS': this.moveBackward = true; break;\n\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'KeyD': this.moveRight = true; break;\n\n\t\t\t\tcase 'KeyR': this.moveUp = true; break;\n\t\t\t\tcase 'KeyF': this.moveDown = true; break;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.onKeyUp = function ( event ) {\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\tcase 'KeyW': this.moveForward = false; break;\n\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\tcase 'KeyA': this.moveLeft = false; break;\n\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\tcase 'KeyS': this.moveBackward = false; break;\n\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'KeyD': this.moveRight = false; break;\n\n\t\t\t\tcase 'KeyR': this.moveUp = false; break;\n\t\t\t\tcase 'KeyF': this.moveDown = false; break;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.lookAt = function ( x, y, z ) {\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\t_target.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\t_target.set( x, y, z );\n\n\t\t\t}\n\n\t\t\tthis.object.lookAt( _target );\n\n\t\t\tsetOrientation( this );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\tconst targetPosition = new Vector3();\n\n\t\t\treturn function update( delta ) {\n\n\t\t\t\tif ( this.enabled === false ) return;\n\n\t\t\t\tif ( this.heightSpeed ) {\n\n\t\t\t\t\tconst y = MathUtils.clamp( this.object.position.y, this.heightMin, this.heightMax );\n\t\t\t\t\tconst heightDelta = y - this.heightMin;\n\n\t\t\t\t\tthis.autoSpeedFactor = delta * ( heightDelta * this.heightCoef );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.autoSpeedFactor = 0.0;\n\n\t\t\t\t}\n\n\t\t\t\tconst actualMoveSpeed = delta * this.movementSpeed;\n\n\t\t\t\tif ( this.moveForward || ( this.autoForward && ! this.moveBackward ) ) this.object.translateZ( - ( actualMoveSpeed + this.autoSpeedFactor ) );\n\t\t\t\tif ( this.moveBackward ) this.object.translateZ( actualMoveSpeed );\n\n\t\t\t\tif ( this.moveLeft ) this.object.translateX( - actualMoveSpeed );\n\t\t\t\tif ( this.moveRight ) this.object.translateX( actualMoveSpeed );\n\n\t\t\t\tif ( this.moveUp ) this.object.translateY( actualMoveSpeed );\n\t\t\t\tif ( this.moveDown ) this.object.translateY( - actualMoveSpeed );\n\n\t\t\t\tlet actualLookSpeed = delta * this.lookSpeed;\n\n\t\t\t\tif ( ! this.activeLook ) {\n\n\t\t\t\t\tactualLookSpeed = 0;\n\n\t\t\t\t}\n\n\t\t\t\tlet verticalLookRatio = 1;\n\n\t\t\t\tif ( this.constrainVertical ) {\n\n\t\t\t\t\tverticalLookRatio = Math.PI / ( this.verticalMax - this.verticalMin );\n\n\t\t\t\t}\n\n\t\t\t\tlon -= this.pointerX * actualLookSpeed;\n\t\t\t\tif ( this.lookVertical ) lat -= this.pointerY * actualLookSpeed * verticalLookRatio;\n\n\t\t\t\tlat = Math.max( - 85, Math.min( 85, lat ) );\n\n\t\t\t\tlet phi = MathUtils.degToRad( 90 - lat );\n\t\t\t\tconst theta = MathUtils.degToRad( lon );\n\n\t\t\t\tif ( this.constrainVertical ) {\n\n\t\t\t\t\tphi = MathUtils.mapLinear( phi, 0, Math.PI, this.verticalMin, this.verticalMax );\n\n\t\t\t\t}\n\n\t\t\t\tconst position = this.object.position;\n\n\t\t\t\ttargetPosition.setFromSphericalCoords( 1, phi, theta ).add( position );\n\n\t\t\t\tthis.object.lookAt( targetPosition );\n\n\t\t\t};\n\n\t\t}();\n\n\t\tthis.dispose = function () {\n\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', contextmenu );\n\t\t\tthis.domElement.removeEventListener( 'pointerdown', _onPointerDown );\n\t\t\tthis.domElement.removeEventListener( 'pointermove', _onPointerMove );\n\t\t\tthis.domElement.removeEventListener( 'pointerup', _onPointerUp );\n\n\t\t\twindow.removeEventListener( 'keydown', _onKeyDown );\n\t\t\twindow.removeEventListener( 'keyup', _onKeyUp );\n\n\t\t};\n\n\t\tconst _onPointerMove = this.onPointerMove.bind( this );\n\t\tconst _onPointerDown = this.onPointerDown.bind( this );\n\t\tconst _onPointerUp = this.onPointerUp.bind( this );\n\t\tconst _onKeyDown = this.onKeyDown.bind( this );\n\t\tconst _onKeyUp = this.onKeyUp.bind( this );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', contextmenu );\n\t\tthis.domElement.addEventListener( 'pointerdown', _onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointermove', _onPointerMove );\n\t\tthis.domElement.addEventListener( 'pointerup', _onPointerUp );\n\n\t\twindow.addEventListener( 'keydown', _onKeyDown );\n\t\twindow.addEventListener( 'keyup', _onKeyUp );\n\n\t\tfunction setOrientation( controls ) {\n\n\t\t\tconst quaternion = controls.object.quaternion;\n\n\t\t\t_lookDirection.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\t\t\t_spherical.setFromVector3( _lookDirection );\n\n\t\t\tlat = 90 - MathUtils.radToDeg( _spherical.phi );\n\t\t\tlon = MathUtils.radToDeg( _spherical.theta );\n\n\t\t}\n\n\t\tthis.handleResize();\n\n\t\tsetOrientation( this );\n\n\t}\n\n}\n\nfunction contextmenu( event ) {\n\n\tevent.preventDefault();\n\n}\n\nexport { FirstPersonControls };\n", "import {\n\tEventDispatcher,\n\tQuaternion,\n\tVector3\n} from 'three';\n\nconst _changeEvent = { type: 'change' };\n\nclass FlyControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\n\t\t// API\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\tthis.movementSpeed = 1.0;\n\t\tthis.rollSpeed = 0.005;\n\n\t\tthis.dragToLook = false;\n\t\tthis.autoForward = false;\n\n\t\t// disable default target object behavior\n\n\t\t// internals\n\n\t\tconst scope = this;\n\n\t\tconst EPS = 0.000001;\n\n\t\tconst lastQuaternion = new Quaternion();\n\t\tconst lastPosition = new Vector3();\n\n\t\tthis.tmpQuaternion = new Quaternion();\n\n\t\tthis.status = 0;\n\n\t\tthis.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 };\n\t\tthis.moveVector = new Vector3( 0, 0, 0 );\n\t\tthis.rotationVector = new Vector3( 0, 0, 0 );\n\n\t\tthis.keydown = function ( event ) {\n\n\t\t\tif ( event.altKey || this.enabled === false ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ShiftLeft':\n\t\t\t\tcase 'ShiftRight': this.movementSpeedMultiplier = .1; break;\n\n\t\t\t\tcase 'KeyW': this.moveState.forward = 1; break;\n\t\t\t\tcase 'KeyS': this.moveState.back = 1; break;\n\n\t\t\t\tcase 'KeyA': this.moveState.left = 1; break;\n\t\t\t\tcase 'KeyD': this.moveState.right = 1; break;\n\n\t\t\t\tcase 'KeyR': this.moveState.up = 1; break;\n\t\t\t\tcase 'KeyF': this.moveState.down = 1; break;\n\n\t\t\t\tcase 'ArrowUp': this.moveState.pitchUp = 1; break;\n\t\t\t\tcase 'ArrowDown': this.moveState.pitchDown = 1; break;\n\n\t\t\t\tcase 'ArrowLeft': this.moveState.yawLeft = 1; break;\n\t\t\t\tcase 'ArrowRight': this.moveState.yawRight = 1; break;\n\n\t\t\t\tcase 'KeyQ': this.moveState.rollLeft = 1; break;\n\t\t\t\tcase 'KeyE': this.moveState.rollRight = 1; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.keyup = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ShiftLeft':\n\t\t\t\tcase 'ShiftRight': this.movementSpeedMultiplier = 1; break;\n\n\t\t\t\tcase 'KeyW': this.moveState.forward = 0; break;\n\t\t\t\tcase 'KeyS': this.moveState.back = 0; break;\n\n\t\t\t\tcase 'KeyA': this.moveState.left = 0; break;\n\t\t\t\tcase 'KeyD': this.moveState.right = 0; break;\n\n\t\t\t\tcase 'KeyR': this.moveState.up = 0; break;\n\t\t\t\tcase 'KeyF': this.moveState.down = 0; break;\n\n\t\t\t\tcase 'ArrowUp': this.moveState.pitchUp = 0; break;\n\t\t\t\tcase 'ArrowDown': this.moveState.pitchDown = 0; break;\n\n\t\t\t\tcase 'ArrowLeft': this.moveState.yawLeft = 0; break;\n\t\t\t\tcase 'ArrowRight': this.moveState.yawRight = 0; break;\n\n\t\t\t\tcase 'KeyQ': this.moveState.rollLeft = 0; break;\n\t\t\t\tcase 'KeyE': this.moveState.rollRight = 0; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.pointerdown = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( this.dragToLook ) {\n\n\t\t\t\tthis.status ++;\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveState.forward = 1; break;\n\t\t\t\t\tcase 2: this.moveState.back = 1; break;\n\n\t\t\t\t}\n\n\t\t\t\tthis.updateMovementVector();\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.pointermove = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( ! this.dragToLook || this.status > 0 ) {\n\n\t\t\t\tconst container = this.getContainerDimensions();\n\t\t\t\tconst halfWidth = container.size[ 0 ] / 2;\n\t\t\t\tconst halfHeight = container.size[ 1 ] / 2;\n\n\t\t\t\tthis.moveState.yawLeft = - ( ( event.pageX - container.offset[ 0 ] ) - halfWidth ) / halfWidth;\n\t\t\t\tthis.moveState.pitchDown = ( ( event.pageY - container.offset[ 1 ] ) - halfHeight ) / halfHeight;\n\n\t\t\t\tthis.updateRotationVector();\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.pointerup = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( this.dragToLook ) {\n\n\t\t\t\tthis.status --;\n\n\t\t\t\tthis.moveState.yawLeft = this.moveState.pitchDown = 0;\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveState.forward = 0; break;\n\t\t\t\t\tcase 2: this.moveState.back = 0; break;\n\n\t\t\t\t}\n\n\t\t\t\tthis.updateMovementVector();\n\n\t\t\t}\n\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.pointercancel = function () {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( this.dragToLook ) {\n\n\t\t\t\tthis.status = 0;\n\n\t\t\t\tthis.moveState.yawLeft = this.moveState.pitchDown = 0;\n\n\t\t\t} else {\n\n\t\t\t\tthis.moveState.forward = 0;\n\t\t\t\tthis.moveState.back = 0;\n\n\t\t\t\tthis.updateMovementVector();\n\n\t\t\t}\n\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.contextMenu = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t};\n\n\t\tthis.update = function ( delta ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tconst moveMult = delta * scope.movementSpeed;\n\t\t\tconst rotMult = delta * scope.rollSpeed;\n\n\t\t\tscope.object.translateX( scope.moveVector.x * moveMult );\n\t\t\tscope.object.translateY( scope.moveVector.y * moveMult );\n\t\t\tscope.object.translateZ( scope.moveVector.z * moveMult );\n\n\t\t\tscope.tmpQuaternion.set( scope.rotationVector.x * rotMult, scope.rotationVector.y * rotMult, scope.rotationVector.z * rotMult, 1 ).normalize();\n\t\t\tscope.object.quaternion.multiply( scope.tmpQuaternion );\n\n\t\t\tif (\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS\n\t\t\t) {\n\n\t\t\t\tscope.dispatchEvent( _changeEvent );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.updateMovementVector = function () {\n\n\t\t\tconst forward = ( this.moveState.forward || ( this.autoForward && ! this.moveState.back ) ) ? 1 : 0;\n\n\t\t\tthis.moveVector.x = ( - this.moveState.left + this.moveState.right );\n\t\t\tthis.moveVector.y = ( - this.moveState.down + this.moveState.up );\n\t\t\tthis.moveVector.z = ( - forward + this.moveState.back );\n\n\t\t\t//console.log( 'move:', [ this.moveVector.x, this.moveVector.y, this.moveVector.z ] );\n\n\t\t};\n\n\t\tthis.updateRotationVector = function () {\n\n\t\t\tthis.rotationVector.x = ( - this.moveState.pitchDown + this.moveState.pitchUp );\n\t\t\tthis.rotationVector.y = ( - this.moveState.yawRight + this.moveState.yawLeft );\n\t\t\tthis.rotationVector.z = ( - this.moveState.rollRight + this.moveState.rollLeft );\n\n\t\t\t//console.log( 'rotate:', [ this.rotationVector.x, this.rotationVector.y, this.rotationVector.z ] );\n\n\t\t};\n\n\t\tthis.getContainerDimensions = function () {\n\n\t\t\tif ( this.domElement != document ) {\n\n\t\t\t\treturn {\n\t\t\t\t\tsize: [ this.domElement.offsetWidth, this.domElement.offsetHeight ],\n\t\t\t\t\toffset: [ this.domElement.offsetLeft, this.domElement.offsetTop ]\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\treturn {\n\t\t\t\t\tsize: [ window.innerWidth, window.innerHeight ],\n\t\t\t\t\toffset: [ 0, 0 ]\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', _contextmenu );\n\t\t\tthis.domElement.removeEventListener( 'pointerdown', _pointerdown );\n\t\t\tthis.domElement.removeEventListener( 'pointermove', _pointermove );\n\t\t\tthis.domElement.removeEventListener( 'pointerup', _pointerup );\n\t\t\tthis.domElement.removeEventListener( 'pointercancel', _pointercancel );\n\n\t\t\twindow.removeEventListener( 'keydown', _keydown );\n\t\t\twindow.removeEventListener( 'keyup', _keyup );\n\n\t\t};\n\n\t\tconst _contextmenu = this.contextMenu.bind( this );\n\t\tconst _pointermove = this.pointermove.bind( this );\n\t\tconst _pointerdown = this.pointerdown.bind( this );\n\t\tconst _pointerup = this.pointerup.bind( this );\n\t\tconst _pointercancel = this.pointercancel.bind( this );\n\t\tconst _keydown = this.keydown.bind( this );\n\t\tconst _keyup = this.keyup.bind( this );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', _contextmenu );\n\t\tthis.domElement.addEventListener( 'pointerdown', _pointerdown );\n\t\tthis.domElement.addEventListener( 'pointermove', _pointermove );\n\t\tthis.domElement.addEventListener( 'pointerup', _pointerup );\n\t\tthis.domElement.addEventListener( 'pointercancel', _pointercancel );\n\n\t\twindow.addEventListener( 'keydown', _keydown );\n\t\twindow.addEventListener( 'keyup', _keyup );\n\n\t\tthis.updateMovementVector();\n\t\tthis.updateRotationVector();\n\n\t}\n\n}\n\nexport { FlyControls };\n", "import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3,\n\tPlane,\n\tRay,\n\tMathUtils\n} from 'three';\n\n// OrbitControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nclass OrbitControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new Vector3();\n\n\t\t// Sets the 3D cursor (similar to Blender), from which the maxTargetRadius takes effect\n\t\tthis.cursor = new Vector3();\n\n\t\t// How far you can dolly in and out ( PerspectiveCamera only )\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out ( OrthographicCamera only )\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// Limit camera target within a spherical area around the cursor\n\t\tthis.minTargetRadius = 0;\n\t\tthis.maxTargetRadius = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\t\tthis.minAzimuthAngle = - Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.05;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.panSpeed = 1.0;\n\t\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\t\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\t\tthis.zoomToCursor = false;\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// Touch fingers\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\n\t\tthis.getPolarAngle = function () {\n\n\t\t\treturn spherical.phi;\n\n\t\t};\n\n\t\tthis.getAzimuthalAngle = function () {\n\n\t\t\treturn spherical.theta;\n\n\t\t};\n\n\t\tthis.getDistance = function () {\n\n\t\t\treturn this.object.position.distanceTo( this.target );\n\n\t\t};\n\n\t\tthis.listenToKeyEvents = function ( domElement ) {\n\n\t\t\tdomElement.addEventListener( 'keydown', onKeyDown );\n\t\t\tthis._domElementKeyEvents = domElement;\n\n\t\t};\n\n\t\tthis.stopListenToKeyEvents = function () {\n\n\t\t\tthis._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n\t\t\tthis._domElementKeyEvents = null;\n\n\t\t};\n\n\t\tthis.saveState = function () {\n\n\t\t\tscope.target0.copy( scope.target );\n\t\t\tscope.position0.copy( scope.object.position );\n\t\t\tscope.zoom0 = scope.object.zoom;\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\tscope.target.copy( scope.target0 );\n\t\t\tscope.object.position.copy( scope.position0 );\n\t\t\tscope.object.zoom = scope.zoom0;\n\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\tscope.update();\n\n\t\t\tstate = STATE.NONE;\n\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\n\t\t\tconst offset = new Vector3();\n\n\t\t\t// so camera.up is the orbit axis\n\t\t\tconst quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\t\tconst quatInverse = quat.clone().invert();\n\n\t\t\tconst lastPosition = new Vector3();\n\t\t\tconst lastQuaternion = new Quaternion();\n\t\t\tconst lastTargetPosition = new Vector3();\n\n\t\t\tconst twoPI = 2 * Math.PI;\n\n\t\t\treturn function update( deltaTime = null ) {\n\n\t\t\t\tconst position = scope.object.position;\n\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3( offset );\n\n\t\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\t\trotateLeft( getAutoRotationAngle( deltaTime ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.enableDamping ) {\n\n\t\t\t\t\tspherical.theta += sphericalDelta.theta * scope.dampingFactor;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t\t}\n\n\t\t\t\t// restrict theta to be between desired limits\n\n\t\t\t\tlet min = scope.minAzimuthAngle;\n\t\t\t\tlet max = scope.maxAzimuthAngle;\n\n\t\t\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\t\t\tif ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n\t\t\t\t\tif ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n\t\t\t\t\tif ( min <= max ) {\n\n\t\t\t\t\t\tspherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tspherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\t\t\tMath.max( min, spherical.theta ) :\n\t\t\t\t\t\t\tMath.min( max, spherical.theta );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\t\tspherical.makeSafe();\n\n\n\t\t\t\t// move target to panned location\n\n\t\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\t\tscope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tscope.target.add( panOffset );\n\n\t\t\t\t}\n\n\t\t\t\t// Limit the target distance from the cursor to create a sphere around the center of interest\n\t\t\t\tscope.target.sub( scope.cursor );\n\t\t\t\tscope.target.clampLength( scope.minTargetRadius, scope.maxTargetRadius );\n\t\t\t\tscope.target.add( scope.cursor );\n\n\t\t\t\tlet zoomChanged = false;\n\t\t\t\t// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n\t\t\t\t// we adjust zoom later in these cases\n\t\t\t\tif ( scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tspherical.radius = clampDistance( spherical.radius );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst prevRadius = spherical.radius;\n\t\t\t\t\tspherical.radius = clampDistance( spherical.radius * scale );\n\t\t\t\t\tzoomChanged = prevRadius != spherical.radius;\n\n\t\t\t\t}\n\n\t\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t\t// adjust camera position\n\t\t\t\tif ( scope.zoomToCursor && performCursorZoom ) {\n\n\t\t\t\t\tlet newRadius = null;\n\t\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t\t// move the camera down the pointer ray\n\t\t\t\t\t\t// this method avoids floating point error\n\t\t\t\t\t\tconst prevRadius = offset.length();\n\t\t\t\t\t\tnewRadius = clampDistance( prevRadius * scale );\n\n\t\t\t\t\t\tconst radiusDelta = prevRadius - newRadius;\n\t\t\t\t\t\tscope.object.position.addScaledVector( dollyDirection, radiusDelta );\n\t\t\t\t\t\tscope.object.updateMatrixWorld();\n\n\t\t\t\t\t\tzoomChanged = !! radiusDelta;\n\n\t\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t\t// adjust the ortho camera position based on zoom changes\n\t\t\t\t\t\tconst mouseBefore = new Vector3( mouse.x, mouse.y, 0 );\n\t\t\t\t\t\tmouseBefore.unproject( scope.object );\n\n\t\t\t\t\t\tconst prevZoom = scope.object.zoom;\n\t\t\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t\t\tzoomChanged = prevZoom !== scope.object.zoom;\n\n\t\t\t\t\t\tconst mouseAfter = new Vector3( mouse.x, mouse.y, 0 );\n\t\t\t\t\t\tmouseAfter.unproject( scope.object );\n\n\t\t\t\t\t\tscope.object.position.sub( mouseAfter ).add( mouseBefore );\n\t\t\t\t\t\tscope.object.updateMatrixWorld();\n\n\t\t\t\t\t\tnewRadius = offset.length();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n\t\t\t\t\t\tscope.zoomToCursor = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// handle the placement of the target\n\t\t\t\t\tif ( newRadius !== null ) {\n\n\t\t\t\t\t\tif ( this.screenSpacePanning ) {\n\n\t\t\t\t\t\t\t// position the orbit target in front of the new camera position\n\t\t\t\t\t\t\tscope.target.set( 0, 0, - 1 )\n\t\t\t\t\t\t\t\t.transformDirection( scope.object.matrix )\n\t\t\t\t\t\t\t\t.multiplyScalar( newRadius )\n\t\t\t\t\t\t\t\t.add( scope.object.position );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// get the ray and translation plane to compute target\n\t\t\t\t\t\t\t_ray.origin.copy( scope.object.position );\n\t\t\t\t\t\t\t_ray.direction.set( 0, 0, - 1 ).transformDirection( scope.object.matrix );\n\n\t\t\t\t\t\t\t// if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n\t\t\t\t\t\t\t// extremely large values\n\t\t\t\t\t\t\tif ( Math.abs( scope.object.up.dot( _ray.direction ) ) < TILT_LIMIT ) {\n\n\t\t\t\t\t\t\t\tobject.lookAt( scope.target );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( scope.object.up, scope.target );\n\t\t\t\t\t\t\t\t_ray.intersectPlane( _plane, scope.target );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tconst prevZoom = scope.object.zoom;\n\t\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n\n\t\t\t\t\tif ( prevZoom !== scope.object.zoom ) {\n\n\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\t\t\tzoomChanged = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscale = 1;\n\t\t\t\tperformCursorZoom = false;\n\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\t\tif ( zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ||\n\t\t\t\t\tlastTargetPosition.distanceToSquared( scope.target ) > EPS ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\t\tlastTargetPosition.copy( scope.target );\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t};\n\n\t\t}();\n\n\t\tthis.dispose = function () {\n\n\t\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu );\n\n\t\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\tscope.domElement.removeEventListener( 'pointercancel', onPointerUp );\n\t\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n\t\t\tscope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\tconst document = scope.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\t\tdocument.removeEventListener( 'keydown', interceptControlDown, { capture: true } );\n\n\t\t\tif ( scope._domElementKeyEvents !== null ) {\n\n\t\t\t\tscope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\tscope._domElementKeyEvents = null;\n\n\t\t\t}\n\n\t\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t\t};\n\n\t\t//\n\t\t// internals\n\t\t//\n\n\t\tconst scope = this;\n\n\t\tconst STATE = {\n\t\t\tNONE: - 1,\n\t\t\tROTATE: 0,\n\t\t\tDOLLY: 1,\n\t\t\tPAN: 2,\n\t\t\tTOUCH_ROTATE: 3,\n\t\t\tTOUCH_PAN: 4,\n\t\t\tTOUCH_DOLLY_PAN: 5,\n\t\t\tTOUCH_DOLLY_ROTATE: 6\n\t\t};\n\n\t\tlet state = STATE.NONE;\n\n\t\tconst EPS = 0.000001;\n\n\t\t// current position in spherical coordinates\n\t\tconst spherical = new Spherical();\n\t\tconst sphericalDelta = new Spherical();\n\n\t\tlet scale = 1;\n\t\tconst panOffset = new Vector3();\n\n\t\tconst rotateStart = new Vector2();\n\t\tconst rotateEnd = new Vector2();\n\t\tconst rotateDelta = new Vector2();\n\n\t\tconst panStart = new Vector2();\n\t\tconst panEnd = new Vector2();\n\t\tconst panDelta = new Vector2();\n\n\t\tconst dollyStart = new Vector2();\n\t\tconst dollyEnd = new Vector2();\n\t\tconst dollyDelta = new Vector2();\n\n\t\tconst dollyDirection = new Vector3();\n\t\tconst mouse = new Vector2();\n\t\tlet performCursorZoom = false;\n\n\t\tconst pointers = [];\n\t\tconst pointerPositions = {};\n\n\t\tlet controlActive = false;\n\n\t\tfunction getAutoRotationAngle( deltaTime ) {\n\n\t\t\tif ( deltaTime !== null ) {\n\n\t\t\t\treturn ( 2 * Math.PI / 60 * scope.autoRotateSpeed ) * deltaTime;\n\n\t\t\t} else {\n\n\t\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getZoomScale( delta ) {\n\n\t\t\tconst normalizedDelta = Math.abs( delta * 0.01 );\n\t\t\treturn Math.pow( 0.95, scope.zoomSpeed * normalizedDelta );\n\n\t\t}\n\n\t\tfunction rotateLeft( angle ) {\n\n\t\t\tsphericalDelta.theta -= angle;\n\n\t\t}\n\n\t\tfunction rotateUp( angle ) {\n\n\t\t\tsphericalDelta.phi -= angle;\n\n\t\t}\n\n\t\tconst panLeft = function () {\n\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar( - distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\tconst panUp = function () {\n\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t\t}\n\n\t\t\t\tv.multiplyScalar( distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tconst pan = function () {\n\n\t\t\tconst offset = new Vector3();\n\n\t\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\t\tconst element = scope.domElement;\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t// perspective\n\t\t\t\t\tconst position = scope.object.position;\n\t\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\t\tlet targetDistance = offset.length();\n\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\t\tscope.enablePan = false;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}();\n\n\t\tfunction dollyOut( dollyScale ) {\n\n\t\t\tif ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscale /= dollyScale;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction dollyIn( dollyScale ) {\n\n\t\t\tif ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscale *= dollyScale;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateZoomParameters( x, y ) {\n\n\t\t\tif ( ! scope.zoomToCursor ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tperformCursorZoom = true;\n\n\t\t\tconst rect = scope.domElement.getBoundingClientRect();\n\t\t\tconst dx = x - rect.left;\n\t\t\tconst dy = y - rect.top;\n\t\t\tconst w = rect.width;\n\t\t\tconst h = rect.height;\n\n\t\t\tmouse.x = ( dx / w ) * 2 - 1;\n\t\t\tmouse.y = - ( dy / h ) * 2 + 1;\n\n\t\t\tdollyDirection.set( mouse.x, mouse.y, 1 ).unproject( scope.object ).sub( scope.object.position ).normalize();\n\n\t\t}\n\n\t\tfunction clampDistance( dist ) {\n\n\t\t\treturn Math.max( scope.minDistance, Math.min( scope.maxDistance, dist ) );\n\n\t\t}\n\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\n\t\tfunction handleMouseDownRotate( event ) {\n\n\t\t\trotateStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownDolly( event ) {\n\n\t\t\tupdateZoomParameters( event.clientX, event.clientX );\n\t\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownPan( event ) {\n\n\t\t\tpanStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseMoveRotate( event ) {\n\n\t\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMoveDolly( event ) {\n\n\t\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale( dollyDelta.y ) );\n\n\t\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale( dollyDelta.y ) );\n\n\t\t\t}\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMovePan( event ) {\n\n\t\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseWheel( event ) {\n\n\t\t\tupdateZoomParameters( event.clientX, event.clientY );\n\n\t\t\tif ( event.deltaY < 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale( event.deltaY ) );\n\n\t\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale( event.deltaY ) );\n\n\t\t\t}\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleKeyDown( event ) {\n\n\t\t\tlet needsUpdate = false;\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase scope.keys.UP:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\trotateUp( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpan( 0, scope.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.BOTTOM:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\trotateUp( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.LEFT:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\trotateLeft( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.RIGHT:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\trotateLeft( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tscope.update();\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tfunction handleTouchStartRotate( event ) {\n\n\t\t\tif ( pointers.length === 1 ) {\n\n\t\t\t\trotateStart.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\trotateStart.set( x, y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction handleTouchStartPan( event ) {\n\n\t\t\tif ( pointers.length === 1 ) {\n\n\t\t\t\tpanStart.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\tpanStart.set( x, y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction handleTouchStartDolly( event ) {\n\n\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\tconst dx = event.pageX - position.x;\n\t\t\tconst dy = event.pageY - position.y;\n\n\t\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyStart.set( 0, distance );\n\n\t\t}\n\n\t\tfunction handleTouchStartDollyPan( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\t\tif ( scope.enablePan ) handleTouchStartPan( event );\n\n\t\t}\n\n\t\tfunction handleTouchStartDollyRotate( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\t\tif ( scope.enableRotate ) handleTouchStartRotate( event );\n\n\t\t}\n\n\t\tfunction handleTouchMoveRotate( event ) {\n\n\t\t\tif ( pointers.length == 1 ) {\n\n\t\t\t\trotateEnd.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\trotateEnd.set( x, y );\n\n\t\t\t}\n\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMovePan( event ) {\n\n\t\t\tif ( pointers.length === 1 ) {\n\n\t\t\t\tpanEnd.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\tpanEnd.set( x, y );\n\n\t\t\t}\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDolly( event ) {\n\n\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\tconst dx = event.pageX - position.x;\n\t\t\tconst dy = event.pageY - position.y;\n\n\t\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyEnd.set( 0, distance );\n\n\t\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\t\tdollyOut( dollyDelta.y );\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t\tconst centerX = ( event.pageX + position.x ) * 0.5;\n\t\t\tconst centerY = ( event.pageY + position.y ) * 0.5;\n\n\t\t\tupdateZoomParameters( centerX, centerY );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\t\tif ( scope.enablePan ) handleTouchMovePan( event );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDollyRotate( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\t\tif ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n\t\t}\n\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( pointers.length === 0 ) {\n\n\t\t\t\tscope.domElement.setPointerCapture( event.pointerId );\n\n\t\t\t\tscope.domElement.addEventListener( 'pointermove', onPointerMove );\n\t\t\t\tscope.domElement.addEventListener( 'pointerup', onPointerUp );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( isTrackingPointer( event ) ) return;\n\n\t\t\t//\n\n\t\t\taddPointer( event );\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchStart( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseDown( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchMove( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseMove( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerUp( event ) {\n\n\t\t\tremovePointer( event );\n\n\t\t\tswitch ( pointers.length ) {\n\n\t\t\t\tcase 0:\n\n\t\t\t\t\tscope.domElement.releasePointerCapture( event.pointerId );\n\n\t\t\t\t\tscope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\t\t\tscope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tconst pointerId = pointers[ 0 ];\n\t\t\t\t\tconst position = pointerPositions[ pointerId ];\n\n\t\t\t\t\t// minimal placeholder event - allows state correction on pointer-up\n\t\t\t\t\tonTouchStart( { pointerId: pointerId, pageX: position.x, pageY: position.y } );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseDown( event ) {\n\n\t\t\tlet mouseAction;\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.LEFT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.MIDDLE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.RIGHT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tmouseAction = - 1;\n\n\t\t\t}\n\n\t\t\tswitch ( mouseAction ) {\n\n\t\t\t\tcase MOUSE.DOLLY:\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.ROTATE:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.PAN:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseMove( event ) {\n\n\t\t\tswitch ( state ) {\n\n\t\t\t\tcase STATE.ROTATE:\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.DOLLY:\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.PAN:\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseWheel( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\thandleMouseWheel( customWheelEvent( event ) );\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction customWheelEvent( event ) {\n\n\t\t\tconst mode = event.deltaMode;\n\n\t\t\t// minimal wheel event altered to meet delta-zoom demand\n\t\t\tconst newEvent = {\n\t\t\t\tclientX: event.clientX,\n\t\t\t\tclientY: event.clientY,\n\t\t\t\tdeltaY: event.deltaY,\n\t\t\t};\n\n\t\t\tswitch ( mode ) {\n\n\t\t\t\tcase 1: // LINE_MODE\n\t\t\t\t\tnewEvent.deltaY *= 16;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2: // PAGE_MODE\n\t\t\t\t\tnewEvent.deltaY *= 100;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// detect if event was triggered by pinching\n\t\t\tif ( event.ctrlKey && ! controlActive ) {\n\n\t\t\t\tnewEvent.deltaY *= 10;\n\n\t\t\t}\n\n\t\t\treturn newEvent;\n\n\t\t}\n\n\t\tfunction interceptControlDown( event ) {\n\n\t\t\tif ( event.key === 'Control' ) {\n\n\t\t\t\tcontrolActive = true;\n\n\n\t\t\t\tconst document = scope.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\t\t\tdocument.addEventListener( 'keyup', interceptControlUp, { passive: true, capture: true } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction interceptControlUp( event ) {\n\n\t\t\tif ( event.key === 'Control' ) {\n\n\t\t\t\tcontrolActive = false;\n\n\n\t\t\t\tconst document = scope.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\t\t\tdocument.removeEventListener( 'keyup', interceptControlUp, { passive: true, capture: true } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onKeyDown( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enablePan === false ) return;\n\n\t\t\thandleKeyDown( event );\n\n\t\t}\n\n\t\tfunction onTouchStart( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( pointers.length ) {\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tswitch ( scope.touches.ONE ) {\n\n\t\t\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartPan( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\n\t\t\t\t\tswitch ( scope.touches.TWO ) {\n\n\t\t\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyRotate( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchMove( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( state ) {\n\n\t\t\t\tcase STATE.TOUCH_ROTATE:\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_PAN:\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\n\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleTouchMoveDollyRotate( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onContextMenu( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t}\n\n\t\tfunction addPointer( event ) {\n\n\t\t\tpointers.push( event.pointerId );\n\n\t\t}\n\n\t\tfunction removePointer( event ) {\n\n\t\t\tdelete pointerPositions[ event.pointerId ];\n\n\t\t\tfor ( let i = 0; i < pointers.length; i ++ ) {\n\n\t\t\t\tif ( pointers[ i ] == event.pointerId ) {\n\n\t\t\t\t\tpointers.splice( i, 1 );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction isTrackingPointer( event ) {\n\n\t\t\tfor ( let i = 0; i < pointers.length; i ++ ) {\n\n\t\t\t\tif ( pointers[ i ] == event.pointerId ) return true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfunction trackPointer( event ) {\n\n\t\t\tlet position = pointerPositions[ event.pointerId ];\n\n\t\t\tif ( position === undefined ) {\n\n\t\t\t\tposition = new Vector2();\n\t\t\t\tpointerPositions[ event.pointerId ] = position;\n\n\t\t\t}\n\n\t\t\tposition.set( event.pageX, event.pageY );\n\n\t\t}\n\n\t\tfunction getSecondPointerPosition( event ) {\n\n\t\t\tconst pointerId = ( event.pointerId === pointers[ 0 ] ) ? pointers[ 1 ] : pointers[ 0 ];\n\n\t\t\treturn pointerPositions[ pointerId ];\n\n\t\t}\n\n\t\t//\n\n\t\tscope.domElement.addEventListener( 'contextmenu', onContextMenu );\n\n\t\tscope.domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\tscope.domElement.addEventListener( 'pointercancel', onPointerUp );\n\t\tscope.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );\n\n\t\tconst document = scope.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.addEventListener( 'keydown', interceptControlDown, { passive: true, capture: true } );\n\n\t\t// force an update at start\n\n\t\tthis.update();\n\n\t}\n\n}\n\nexport { OrbitControls };\n", "import { MOUSE, TOUCH } from 'three';\n\nimport { OrbitControls } from './OrbitControls.js';\n\n// MapControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - left mouse, or arrow keys / touch: one-finger move\n\nclass MapControls extends OrbitControls {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper( object, domElement );\n\n\t\tthis.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up\n\n\t\tthis.mouseButtons = { LEFT: MOUSE.PAN, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.ROTATE };\n\n\t\tthis.touches = { ONE: TOUCH.PAN, TWO: TOUCH.DOLLY_ROTATE };\n\n\t}\n\n}\n\nexport { MapControls };\n", "import {\n\tEuler,\n\tEventDispatcher,\n\tVector3\n} from 'three';\n\nconst _euler = new Euler( 0, 0, 0, 'YXZ' );\nconst _vector = new Vector3();\n\nconst _changeEvent = { type: 'change' };\nconst _lockEvent = { type: 'lock' };\nconst _unlockEvent = { type: 'unlock' };\n\nconst _PI_2 = Math.PI / 2;\n\nclass PointerLockControls extends EventDispatcher {\n\n\tconstructor( camera, domElement ) {\n\n\t\tsuper();\n\n\t\tthis.camera = camera;\n\t\tthis.domElement = domElement;\n\n\t\tthis.isLocked = false;\n\n\t\t// Set to constrain the pitch of the camera\n\t\t// Range is 0 to Math.PI radians\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\tthis.pointerSpeed = 1.0;\n\n\t\tthis._onMouseMove = onMouseMove.bind( this );\n\t\tthis._onPointerlockChange = onPointerlockChange.bind( this );\n\t\tthis._onPointerlockError = onPointerlockError.bind( this );\n\n\t\tthis.connect();\n\n\t}\n\n\tconnect() {\n\n\t\tthis.domElement.ownerDocument.addEventListener( 'mousemove', this._onMouseMove );\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointerlockchange', this._onPointerlockChange );\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointerlockerror', this._onPointerlockError );\n\n\t}\n\n\tdisconnect() {\n\n\t\tthis.domElement.ownerDocument.removeEventListener( 'mousemove', this._onMouseMove );\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointerlockchange', this._onPointerlockChange );\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointerlockerror', this._onPointerlockError );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\tgetObject() { // retaining this method for backward compatibility\n\n\t\treturn this.camera;\n\n\t}\n\n\tgetDirection( v ) {\n\n\t\treturn v.set( 0, 0, - 1 ).applyQuaternion( this.camera.quaternion );\n\n\t}\n\n\tmoveForward( distance ) {\n\n\t\t// move forward parallel to the xz-plane\n\t\t// assumes camera.up is y-up\n\n\t\tconst camera = this.camera;\n\n\t\t_vector.setFromMatrixColumn( camera.matrix, 0 );\n\n\t\t_vector.crossVectors( camera.up, _vector );\n\n\t\tcamera.position.addScaledVector( _vector, distance );\n\n\t}\n\n\tmoveRight( distance ) {\n\n\t\tconst camera = this.camera;\n\n\t\t_vector.setFromMatrixColumn( camera.matrix, 0 );\n\n\t\tcamera.position.addScaledVector( _vector, distance );\n\n\t}\n\n\tlock() {\n\n\t\tthis.domElement.requestPointerLock();\n\n\t}\n\n\tunlock() {\n\n\t\tthis.domElement.ownerDocument.exitPointerLock();\n\n\t}\n\n}\n\n// event listeners\n\nfunction onMouseMove( event ) {\n\n\tif ( this.isLocked === false ) return;\n\n\tconst movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;\n\tconst movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;\n\n\tconst camera = this.camera;\n\t_euler.setFromQuaternion( camera.quaternion );\n\n\t_euler.y -= movementX * 0.002 * this.pointerSpeed;\n\t_euler.x -= movementY * 0.002 * this.pointerSpeed;\n\n\t_euler.x = Math.max( _PI_2 - this.maxPolarAngle, Math.min( _PI_2 - this.minPolarAngle, _euler.x ) );\n\n\tcamera.quaternion.setFromEuler( _euler );\n\n\tthis.dispatchEvent( _changeEvent );\n\n}\n\nfunction onPointerlockChange() {\n\n\tif ( this.domElement.ownerDocument.pointerLockElement === this.domElement ) {\n\n\t\tthis.dispatchEvent( _lockEvent );\n\n\t\tthis.isLocked = true;\n\n\t} else {\n\n\t\tthis.dispatchEvent( _unlockEvent );\n\n\t\tthis.isLocked = false;\n\n\t}\n\n}\n\nfunction onPointerlockError() {\n\n\tconsole.error( 'THREE.PointerLockControls: Unable to use Pointer Lock API' );\n\n}\n\nexport { PointerLockControls };\n", "import {\n\tEventDispatcher,\n\tMathUtils,\n\tMOUSE,\n\tQuaternion,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\n\nclass TrackballControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\t\tconst STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t\t// API\n\n\t\tthis.enabled = true;\n\n\t\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\t\tthis.rotateSpeed = 1.0;\n\t\tthis.zoomSpeed = 1.2;\n\t\tthis.panSpeed = 0.3;\n\n\t\tthis.noRotate = false;\n\t\tthis.noZoom = false;\n\t\tthis.noPan = false;\n\n\t\tthis.staticMoving = false;\n\t\tthis.dynamicDampingFactor = 0.2;\n\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\tthis.keys = [ 'KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/ ];\n\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// internals\n\n\t\tthis.target = new Vector3();\n\n\t\tconst EPS = 0.000001;\n\n\t\tconst lastPosition = new Vector3();\n\t\tlet lastZoom = 1;\n\n\t\tlet _state = STATE.NONE,\n\t\t\t_keyState = STATE.NONE,\n\n\t\t\t_touchZoomDistanceStart = 0,\n\t\t\t_touchZoomDistanceEnd = 0,\n\n\t\t\t_lastAngle = 0;\n\n\t\tconst _eye = new Vector3(),\n\n\t\t\t_movePrev = new Vector2(),\n\t\t\t_moveCurr = new Vector2(),\n\n\t\t\t_lastAxis = new Vector3(),\n\n\t\t\t_zoomStart = new Vector2(),\n\t\t\t_zoomEnd = new Vector2(),\n\n\t\t\t_panStart = new Vector2(),\n\t\t\t_panEnd = new Vector2(),\n\n\t\t\t_pointers = [],\n\t\t\t_pointerPositions = {};\n\n\t\t// for reset\n\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.up0 = this.object.up.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// methods\n\n\t\tthis.handleResize = function () {\n\n\t\t\tconst box = scope.domElement.getBoundingClientRect();\n\t\t\t// adjustments come from similar code in the jquery offset() function\n\t\t\tconst d = scope.domElement.ownerDocument.documentElement;\n\t\t\tscope.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\t\tscope.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\t\tscope.screen.width = box.width;\n\t\t\tscope.screen.height = box.height;\n\n\t\t};\n\n\t\tconst getMouseOnScreen = ( function () {\n\n\t\t\tconst vector = new Vector2();\n\n\t\t\treturn function getMouseOnScreen( pageX, pageY ) {\n\n\t\t\t\tvector.set(\n\t\t\t\t\t( pageX - scope.screen.left ) / scope.screen.width,\n\t\t\t\t\t( pageY - scope.screen.top ) / scope.screen.height\n\t\t\t\t);\n\n\t\t\t\treturn vector;\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tconst getMouseOnCircle = ( function () {\n\n\t\t\tconst vector = new Vector2();\n\n\t\t\treturn function getMouseOnCircle( pageX, pageY ) {\n\n\t\t\t\tvector.set(\n\t\t\t\t\t( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ),\n\t\t\t\t\t( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional\n\t\t\t\t);\n\n\t\t\t\treturn vector;\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.rotateCamera = ( function () {\n\n\t\t\tconst axis = new Vector3(),\n\t\t\t\tquaternion = new Quaternion(),\n\t\t\t\teyeDirection = new Vector3(),\n\t\t\t\tobjectUpDirection = new Vector3(),\n\t\t\t\tobjectSidewaysDirection = new Vector3(),\n\t\t\t\tmoveDirection = new Vector3();\n\n\t\t\treturn function rotateCamera() {\n\n\t\t\t\tmoveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 );\n\t\t\t\tlet angle = moveDirection.length();\n\n\t\t\t\tif ( angle ) {\n\n\t\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\n\t\t\t\t\teyeDirection.copy( _eye ).normalize();\n\t\t\t\t\tobjectUpDirection.copy( scope.object.up ).normalize();\n\t\t\t\t\tobjectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize();\n\n\t\t\t\t\tobjectUpDirection.setLength( _moveCurr.y - _movePrev.y );\n\t\t\t\t\tobjectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x );\n\n\t\t\t\t\tmoveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) );\n\n\t\t\t\t\taxis.crossVectors( moveDirection, _eye ).normalize();\n\n\t\t\t\t\tangle *= scope.rotateSpeed;\n\t\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\n\t\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t\t_lastAxis.copy( axis );\n\t\t\t\t\t_lastAngle = angle;\n\n\t\t\t\t} else if ( ! scope.staticMoving && _lastAngle ) {\n\n\t\t\t\t\t_lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor );\n\t\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\t\t\t\t\tquaternion.setFromAxisAngle( _lastAxis, _lastAngle );\n\t\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t}\n\n\t\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t\t};\n\n\t\t}() );\n\n\n\t\tthis.zoomCamera = function () {\n\n\t\t\tlet factor;\n\n\t\t\tif ( _state === STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\t\tfactor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\n\t\t\t\t_touchZoomDistanceStart = _touchZoomDistanceEnd;\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tscope.object.zoom = MathUtils.clamp( scope.object.zoom / factor, scope.minZoom, scope.maxZoom );\n\n\t\t\t\t\tif ( lastZoom !== scope.object.zoom ) {\n\n\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfactor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed;\n\n\t\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t\tscope.object.zoom = MathUtils.clamp( scope.object.zoom / factor, scope.minZoom, scope.maxZoom );\n\n\t\t\t\t\t\tif ( lastZoom !== scope.object.zoom ) {\n\n\t\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.panCamera = ( function () {\n\n\t\t\tconst mouseChange = new Vector2(),\n\t\t\t\tobjectUp = new Vector3(),\n\t\t\t\tpan = new Vector3();\n\n\t\t\treturn function panCamera() {\n\n\t\t\t\tmouseChange.copy( _panEnd ).sub( _panStart );\n\n\t\t\t\tif ( mouseChange.lengthSq() ) {\n\n\t\t\t\t\tif ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t\tconst scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth;\n\t\t\t\t\t\tconst scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth;\n\n\t\t\t\t\t\tmouseChange.x *= scale_x;\n\t\t\t\t\t\tmouseChange.y *= scale_y;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmouseChange.multiplyScalar( _eye.length() * scope.panSpeed );\n\n\t\t\t\t\tpan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x );\n\t\t\t\t\tpan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) );\n\n\t\t\t\t\tscope.object.position.add( pan );\n\t\t\t\t\tscope.target.add( pan );\n\n\t\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t\t_panStart.copy( _panEnd );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.checkDistances = function () {\n\n\t\t\tif ( ! scope.noZoom || ! scope.noPan ) {\n\n\t\t\t\tif ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) {\n\n\t\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) );\n\t\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) {\n\n\t\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) );\n\t\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\t\tif ( ! scope.noRotate ) {\n\n\t\t\t\tscope.rotateCamera();\n\n\t\t\t}\n\n\t\t\tif ( ! scope.noZoom ) {\n\n\t\t\t\tscope.zoomCamera();\n\n\t\t\t}\n\n\t\t\tif ( ! scope.noPan ) {\n\n\t\t\t\tscope.panCamera();\n\n\t\t\t}\n\n\t\t\tscope.object.position.addVectors( scope.target, _eye );\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\tscope.checkDistances();\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t\t}\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\t\tlastZoom = scope.object.zoom;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\t_state = STATE.NONE;\n\t\t\t_keyState = STATE.NONE;\n\n\t\t\tscope.target.copy( scope.target0 );\n\t\t\tscope.object.position.copy( scope.position0 );\n\t\t\tscope.object.up.copy( scope.up0 );\n\t\t\tscope.object.zoom = scope.zoom0;\n\n\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\tlastPosition.copy( scope.object.position );\n\t\t\tlastZoom = scope.object.zoom;\n\n\t\t};\n\n\t\t// listeners\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( _pointers.length === 0 ) {\n\n\t\t\t\tscope.domElement.setPointerCapture( event.pointerId );\n\n\t\t\t\tscope.domElement.addEventListener( 'pointermove', onPointerMove );\n\t\t\t\tscope.domElement.addEventListener( 'pointerup', onPointerUp );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\taddPointer( event );\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchStart( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseDown( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchMove( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseMove( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerUp( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchEnd( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseUp();\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tremovePointer( event );\n\n\t\t\tif ( _pointers.length === 0 ) {\n\n\t\t\t\tscope.domElement.releasePointerCapture( event.pointerId );\n\n\t\t\t\tscope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\t\tscope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tfunction onPointerCancel( event ) {\n\n\t\t\tremovePointer( event );\n\n\t\t}\n\n\t\tfunction keydown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\twindow.removeEventListener( 'keydown', keydown );\n\n\t\t\tif ( _keyState !== STATE.NONE ) {\n\n\t\t\t\treturn;\n\n\t\t\t} else if ( event.code === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) {\n\n\t\t\t\t_keyState = STATE.ROTATE;\n\n\t\t\t} else if ( event.code === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) {\n\n\t\t\t\t_keyState = STATE.ZOOM;\n\n\t\t\t} else if ( event.code === scope.keys[ STATE.PAN ] && ! scope.noPan ) {\n\n\t\t\t\t_keyState = STATE.PAN;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction keyup() {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\t_keyState = STATE.NONE;\n\n\t\t\twindow.addEventListener( 'keydown', keydown );\n\n\t\t}\n\n\t\tfunction onMouseDown( event ) {\n\n\t\t\tif ( _state === STATE.NONE ) {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase scope.mouseButtons.LEFT:\n\t\t\t\t\t\t_state = STATE.ROTATE;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase scope.mouseButtons.MIDDLE:\n\t\t\t\t\t\t_state = STATE.ZOOM;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase scope.mouseButtons.RIGHT:\n\t\t\t\t\t\t_state = STATE.PAN;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t\t_zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t\t_zoomEnd.copy( _zoomStart );\n\n\t\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t\t_panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t\t_panEnd.copy( _panStart );\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t}\n\n\t\tfunction onMouseMove( event ) {\n\n\t\t\tconst state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t\t_zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t\t_panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseUp() {\n\n\t\t\t_state = STATE.NONE;\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction onMouseWheel( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( scope.noZoom === true ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tswitch ( event.deltaMode ) {\n\n\t\t\t\tcase 2:\n\t\t\t\t\t// Zoom in pages\n\t\t\t\t\t_zoomStart.y -= event.deltaY * 0.025;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\t// Zoom in lines\n\t\t\t\t\t_zoomStart.y -= event.deltaY * 0.01;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t// undefined, 0, assume pixels\n\t\t\t\t\t_zoomStart.y -= event.deltaY * 0.00025;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction onTouchStart( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( _pointers.length ) {\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( _pointers[ 0 ].pageX, _pointers[ 0 ].pageY ) );\n\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // 2 or more\n\t\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\t\t\t\t\tconst dx = _pointers[ 0 ].pageX - _pointers[ 1 ].pageX;\n\t\t\t\t\tconst dy = _pointers[ 0 ].pageY - _pointers[ 1 ].pageY;\n\t\t\t\t\t_touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\t\tconst x = ( _pointers[ 0 ].pageX + _pointers[ 1 ].pageX ) / 2;\n\t\t\t\t\tconst y = ( _pointers[ 0 ].pageY + _pointers[ 1 ].pageY ) / 2;\n\t\t\t\t\t_panStart.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t\t_panEnd.copy( _panStart );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t}\n\n\t\tfunction onTouchMove( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( _pointers.length ) {\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // 2 or more\n\n\t\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\t\tconst dx = event.pageX - position.x;\n\t\t\t\t\tconst dy = event.pageY - position.y;\n\t\t\t\t\t_touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\t\tconst x = ( event.pageX + position.x ) / 2;\n\t\t\t\t\tconst y = ( event.pageY + position.y ) / 2;\n\t\t\t\t\t_panEnd.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchEnd( event ) {\n\n\t\t\tswitch ( _pointers.length ) {\n\n\t\t\t\tcase 0:\n\t\t\t\t\t_state = STATE.NONE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\n\t\t\t\t\tfor ( let i = 0; i < _pointers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( _pointers[ i ].pointerId !== event.pointerId ) {\n\n\t\t\t\t\t\t\tconst position = _pointerPositions[ _pointers[ i ].pointerId ];\n\t\t\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( position.x, position.y ) );\n\t\t\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction contextmenu( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t}\n\n\t\tfunction addPointer( event ) {\n\n\t\t\t_pointers.push( event );\n\n\t\t}\n\n\t\tfunction removePointer( event ) {\n\n\t\t\tdelete _pointerPositions[ event.pointerId ];\n\n\t\t\tfor ( let i = 0; i < _pointers.length; i ++ ) {\n\n\t\t\t\tif ( _pointers[ i ].pointerId == event.pointerId ) {\n\n\t\t\t\t\t_pointers.splice( i, 1 );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction trackPointer( event ) {\n\n\t\t\tlet position = _pointerPositions[ event.pointerId ];\n\n\t\t\tif ( position === undefined ) {\n\n\t\t\t\tposition = new Vector2();\n\t\t\t\t_pointerPositions[ event.pointerId ] = position;\n\n\t\t\t}\n\n\t\t\tposition.set( event.pageX, event.pageY );\n\n\t\t}\n\n\t\tfunction getSecondPointerPosition( event ) {\n\n\t\t\tconst pointer = ( event.pointerId === _pointers[ 0 ].pointerId ) ? _pointers[ 1 ] : _pointers[ 0 ];\n\n\t\t\treturn _pointerPositions[ pointer.pointerId ];\n\n\t\t}\n\n\t\tthis.dispose = function () {\n\n\t\t\tscope.domElement.removeEventListener( 'contextmenu', contextmenu );\n\n\t\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\tscope.domElement.removeEventListener( 'pointercancel', onPointerCancel );\n\t\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n\t\t\tscope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\twindow.removeEventListener( 'keydown', keydown );\n\t\t\twindow.removeEventListener( 'keyup', keyup );\n\n\t\t};\n\n\t\tthis.domElement.addEventListener( 'contextmenu', contextmenu );\n\n\t\tthis.domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', onPointerCancel );\n\t\tthis.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );\n\n\n\t\twindow.addEventListener( 'keydown', keydown );\n\t\twindow.addEventListener( 'keyup', keyup );\n\n\t\tthis.handleResize();\n\n\t\t// force an update at start\n\t\tthis.update();\n\n\t}\n\n}\n\nexport { TrackballControls };\n", "import {\n\tBoxGeometry,\n\tBufferGeometry,\n\tCylinderGeometry,\n\tDoubleSide,\n\tEuler,\n\tFloat32BufferAttribute,\n\tLine,\n\tLineBasicMaterial,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tOctahedronGeometry,\n\tPlaneGeometry,\n\tQuaternion,\n\tRaycaster,\n\tSphereGeometry,\n\tTorusGeometry,\n\tVector3\n} from 'three';\n\nconst _raycaster = new Raycaster();\n\nconst _tempVector = new Vector3();\nconst _tempVector2 = new Vector3();\nconst _tempQuaternion = new Quaternion();\nconst _unit = {\n\tX: new Vector3( 1, 0, 0 ),\n\tY: new Vector3( 0, 1, 0 ),\n\tZ: new Vector3( 0, 0, 1 )\n};\n\nconst _changeEvent = { type: 'change' };\nconst _mouseDownEvent = { type: 'mouseDown', mode: null };\nconst _mouseUpEvent = { type: 'mouseUp', mode: null };\nconst _objectChangeEvent = { type: 'objectChange' };\n\nclass TransformControls extends Object3D {\n\n\tconstructor( camera, domElement ) {\n\n\t\tsuper();\n\n\t\tif ( domElement === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.TransformControls: The second parameter \"domElement\" is now mandatory.' );\n\t\t\tdomElement = document;\n\n\t\t}\n\n\t\tthis.isTransformControls = true;\n\n\t\tthis.visible = false;\n\t\tthis.domElement = domElement;\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t\tconst _gizmo = new TransformControlsGizmo();\n\t\tthis._gizmo = _gizmo;\n\t\tthis.add( _gizmo );\n\n\t\tconst _plane = new TransformControlsPlane();\n\t\tthis._plane = _plane;\n\t\tthis.add( _plane );\n\n\t\tconst scope = this;\n\n\t\t// Defined getter, setter and store for a property\n\t\tfunction defineProperty( propName, defaultValue ) {\n\n\t\t\tlet propValue = defaultValue;\n\n\t\t\tObject.defineProperty( scope, propName, {\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn propValue !== undefined ? propValue : defaultValue;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tif ( propValue !== value ) {\n\n\t\t\t\t\t\tpropValue = value;\n\t\t\t\t\t\t_plane[ propName ] = value;\n\t\t\t\t\t\t_gizmo[ propName ] = value;\n\n\t\t\t\t\t\tscope.dispatchEvent( { type: propName + '-changed', value: value } );\n\t\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tscope[ propName ] = defaultValue;\n\t\t\t_plane[ propName ] = defaultValue;\n\t\t\t_gizmo[ propName ] = defaultValue;\n\n\t\t}\n\n\t\t// Define properties with getters/setter\n\t\t// Setting the defined property will automatically trigger change event\n\t\t// Defined properties are passed down to gizmo and plane\n\n\t\tdefineProperty( 'camera', camera );\n\t\tdefineProperty( 'object', undefined );\n\t\tdefineProperty( 'enabled', true );\n\t\tdefineProperty( 'axis', null );\n\t\tdefineProperty( 'mode', 'translate' );\n\t\tdefineProperty( 'translationSnap', null );\n\t\tdefineProperty( 'rotationSnap', null );\n\t\tdefineProperty( 'scaleSnap', null );\n\t\tdefineProperty( 'space', 'world' );\n\t\tdefineProperty( 'size', 1 );\n\t\tdefineProperty( 'dragging', false );\n\t\tdefineProperty( 'showX', true );\n\t\tdefineProperty( 'showY', true );\n\t\tdefineProperty( 'showZ', true );\n\n\t\t// Reusable utility variables\n\n\t\tconst worldPosition = new Vector3();\n\t\tconst worldPositionStart = new Vector3();\n\t\tconst worldQuaternion = new Quaternion();\n\t\tconst worldQuaternionStart = new Quaternion();\n\t\tconst cameraPosition = new Vector3();\n\t\tconst cameraQuaternion = new Quaternion();\n\t\tconst pointStart = new Vector3();\n\t\tconst pointEnd = new Vector3();\n\t\tconst rotationAxis = new Vector3();\n\t\tconst rotationAngle = 0;\n\t\tconst eye = new Vector3();\n\n\t\t// TODO: remove properties unused in plane and gizmo\n\n\t\tdefineProperty( 'worldPosition', worldPosition );\n\t\tdefineProperty( 'worldPositionStart', worldPositionStart );\n\t\tdefineProperty( 'worldQuaternion', worldQuaternion );\n\t\tdefineProperty( 'worldQuaternionStart', worldQuaternionStart );\n\t\tdefineProperty( 'cameraPosition', cameraPosition );\n\t\tdefineProperty( 'cameraQuaternion', cameraQuaternion );\n\t\tdefineProperty( 'pointStart', pointStart );\n\t\tdefineProperty( 'pointEnd', pointEnd );\n\t\tdefineProperty( 'rotationAxis', rotationAxis );\n\t\tdefineProperty( 'rotationAngle', rotationAngle );\n\t\tdefineProperty( 'eye', eye );\n\n\t\tthis._offset = new Vector3();\n\t\tthis._startNorm = new Vector3();\n\t\tthis._endNorm = new Vector3();\n\t\tthis._cameraScale = new Vector3();\n\n\t\tthis._parentPosition = new Vector3();\n\t\tthis._parentQuaternion = new Quaternion();\n\t\tthis._parentQuaternionInv = new Quaternion();\n\t\tthis._parentScale = new Vector3();\n\n\t\tthis._worldScaleStart = new Vector3();\n\t\tthis._worldQuaternionInv = new Quaternion();\n\t\tthis._worldScale = new Vector3();\n\n\t\tthis._positionStart = new Vector3();\n\t\tthis._quaternionStart = new Quaternion();\n\t\tthis._scaleStart = new Vector3();\n\n\t\tthis._getPointer = getPointer.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerHover = onPointerHover.bind( this );\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointermove', this._onPointerHover );\n\t\tthis.domElement.addEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n\t// updateMatrixWorld updates key transformation variables\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\tif ( this.object.parent === null ) {\n\n\t\t\t\tconsole.error( 'TransformControls: The attached 3D object must be a part of the scene graph.' );\n\n\t\t\t} else {\n\n\t\t\t\tthis.object.parent.matrixWorld.decompose( this._parentPosition, this._parentQuaternion, this._parentScale );\n\n\t\t\t}\n\n\t\t\tthis.object.matrixWorld.decompose( this.worldPosition, this.worldQuaternion, this._worldScale );\n\n\t\t\tthis._parentQuaternionInv.copy( this._parentQuaternion ).invert();\n\t\t\tthis._worldQuaternionInv.copy( this.worldQuaternion ).invert();\n\n\t\t}\n\n\t\tthis.camera.updateMatrixWorld();\n\t\tthis.camera.matrixWorld.decompose( this.cameraPosition, this.cameraQuaternion, this._cameraScale );\n\n\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\tthis.camera.getWorldDirection( this.eye ).negate();\n\n\t\t} else {\n\n\t\t\tthis.eye.copy( this.cameraPosition ).sub( this.worldPosition ).normalize();\n\n\t\t}\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tpointerHover( pointer ) {\n\n\t\tif ( this.object === undefined || this.dragging === true ) return;\n\n\t\tif ( pointer !== null ) _raycaster.setFromCamera( pointer, this.camera );\n\n\t\tconst intersect = intersectObjectWithRay( this._gizmo.picker[ this.mode ], _raycaster );\n\n\t\tif ( intersect ) {\n\n\t\t\tthis.axis = intersect.object.name;\n\n\t\t} else {\n\n\t\t\tthis.axis = null;\n\n\t\t}\n\n\t}\n\n\tpointerDown( pointer ) {\n\n\t\tif ( this.object === undefined || this.dragging === true || ( pointer != null && pointer.button !== 0 ) ) return;\n\n\t\tif ( this.axis !== null ) {\n\n\t\t\tif ( pointer !== null ) _raycaster.setFromCamera( pointer, this.camera );\n\n\t\t\tconst planeIntersect = intersectObjectWithRay( this._plane, _raycaster, true );\n\n\t\t\tif ( planeIntersect ) {\n\n\t\t\t\tthis.object.updateMatrixWorld();\n\t\t\t\tthis.object.parent.updateMatrixWorld();\n\n\t\t\t\tthis._positionStart.copy( this.object.position );\n\t\t\t\tthis._quaternionStart.copy( this.object.quaternion );\n\t\t\t\tthis._scaleStart.copy( this.object.scale );\n\n\t\t\t\tthis.object.matrixWorld.decompose( this.worldPositionStart, this.worldQuaternionStart, this._worldScaleStart );\n\n\t\t\t\tthis.pointStart.copy( planeIntersect.point ).sub( this.worldPositionStart );\n\n\t\t\t}\n\n\t\t\tthis.dragging = true;\n\t\t\t_mouseDownEvent.mode = this.mode;\n\t\t\tthis.dispatchEvent( _mouseDownEvent );\n\n\t\t}\n\n\t}\n\n\tpointerMove( pointer ) {\n\n\t\tconst axis = this.axis;\n\t\tconst mode = this.mode;\n\t\tconst object = this.object;\n\t\tlet space = this.space;\n\n\t\tif ( mode === 'scale' ) {\n\n\t\t\tspace = 'local';\n\n\t\t} else if ( axis === 'E' || axis === 'XYZE' || axis === 'XYZ' ) {\n\n\t\t\tspace = 'world';\n\n\t\t}\n\n\t\tif ( object === undefined || axis === null || this.dragging === false || ( pointer !== null && pointer.button !== - 1 ) ) return;\n\n\t\tif ( pointer !== null ) _raycaster.setFromCamera( pointer, this.camera );\n\n\t\tconst planeIntersect = intersectObjectWithRay( this._plane, _raycaster, true );\n\n\t\tif ( ! planeIntersect ) return;\n\n\t\tthis.pointEnd.copy( planeIntersect.point ).sub( this.worldPositionStart );\n\n\t\tif ( mode === 'translate' ) {\n\n\t\t\t// Apply translate\n\n\t\t\tthis._offset.copy( this.pointEnd ).sub( this.pointStart );\n\n\t\t\tif ( space === 'local' && axis !== 'XYZ' ) {\n\n\t\t\t\tthis._offset.applyQuaternion( this._worldQuaternionInv );\n\n\t\t\t}\n\n\t\t\tif ( axis.indexOf( 'X' ) === - 1 ) this._offset.x = 0;\n\t\t\tif ( axis.indexOf( 'Y' ) === - 1 ) this._offset.y = 0;\n\t\t\tif ( axis.indexOf( 'Z' ) === - 1 ) this._offset.z = 0;\n\n\t\t\tif ( space === 'local' && axis !== 'XYZ' ) {\n\n\t\t\t\tthis._offset.applyQuaternion( this._quaternionStart ).divide( this._parentScale );\n\n\t\t\t} else {\n\n\t\t\t\tthis._offset.applyQuaternion( this._parentQuaternionInv ).divide( this._parentScale );\n\n\t\t\t}\n\n\t\t\tobject.position.copy( this._offset ).add( this._positionStart );\n\n\t\t\t// Apply translation snap\n\n\t\t\tif ( this.translationSnap ) {\n\n\t\t\t\tif ( space === 'local' ) {\n\n\t\t\t\t\tobject.position.applyQuaternion( _tempQuaternion.copy( this._quaternionStart ).invert() );\n\n\t\t\t\t\tif ( axis.search( 'X' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.x = Math.round( object.position.x / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'Y' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.y = Math.round( object.position.y / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'Z' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.z = Math.round( object.position.z / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.position.applyQuaternion( this._quaternionStart );\n\n\t\t\t\t}\n\n\t\t\t\tif ( space === 'world' ) {\n\n\t\t\t\t\tif ( object.parent ) {\n\n\t\t\t\t\t\tobject.position.add( _tempVector.setFromMatrixPosition( object.parent.matrixWorld ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'X' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.x = Math.round( object.position.x / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'Y' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.y = Math.round( object.position.y / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( axis.search( 'Z' ) !== - 1 ) {\n\n\t\t\t\t\t\tobject.position.z = Math.round( object.position.z / this.translationSnap ) * this.translationSnap;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( object.parent ) {\n\n\t\t\t\t\t\tobject.position.sub( _tempVector.setFromMatrixPosition( object.parent.matrixWorld ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( mode === 'scale' ) {\n\n\t\t\tif ( axis.search( 'XYZ' ) !== - 1 ) {\n\n\t\t\t\tlet d = this.pointEnd.length() / this.pointStart.length();\n\n\t\t\t\tif ( this.pointEnd.dot( this.pointStart ) < 0 ) d *= - 1;\n\n\t\t\t\t_tempVector2.set( d, d, d );\n\n\t\t\t} else {\n\n\t\t\t\t_tempVector.copy( this.pointStart );\n\t\t\t\t_tempVector2.copy( this.pointEnd );\n\n\t\t\t\t_tempVector.applyQuaternion( this._worldQuaternionInv );\n\t\t\t\t_tempVector2.applyQuaternion( this._worldQuaternionInv );\n\n\t\t\t\t_tempVector2.divide( _tempVector );\n\n\t\t\t\tif ( axis.search( 'X' ) === - 1 ) {\n\n\t\t\t\t\t_tempVector2.x = 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( axis.search( 'Y' ) === - 1 ) {\n\n\t\t\t\t\t_tempVector2.y = 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( axis.search( 'Z' ) === - 1 ) {\n\n\t\t\t\t\t_tempVector2.z = 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Apply scale\n\n\t\t\tobject.scale.copy( this._scaleStart ).multiply( _tempVector2 );\n\n\t\t\tif ( this.scaleSnap ) {\n\n\t\t\t\tif ( axis.search( 'X' ) !== - 1 ) {\n\n\t\t\t\t\tobject.scale.x = Math.round( object.scale.x / this.scaleSnap ) * this.scaleSnap || this.scaleSnap;\n\n\t\t\t\t}\n\n\t\t\t\tif ( axis.search( 'Y' ) !== - 1 ) {\n\n\t\t\t\t\tobject.scale.y = Math.round( object.scale.y / this.scaleSnap ) * this.scaleSnap || this.scaleSnap;\n\n\t\t\t\t}\n\n\t\t\t\tif ( axis.search( 'Z' ) !== - 1 ) {\n\n\t\t\t\t\tobject.scale.z = Math.round( object.scale.z / this.scaleSnap ) * this.scaleSnap || this.scaleSnap;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( mode === 'rotate' ) {\n\n\t\t\tthis._offset.copy( this.pointEnd ).sub( this.pointStart );\n\n\t\t\tconst ROTATION_SPEED = 20 / this.worldPosition.distanceTo( _tempVector.setFromMatrixPosition( this.camera.matrixWorld ) );\n\n\t\t\tlet _inPlaneRotation = false;\n\n\t\t\tif ( axis === 'XYZE' ) {\n\n\t\t\t\tthis.rotationAxis.copy( this._offset ).cross( this.eye ).normalize();\n\t\t\t\tthis.rotationAngle = this._offset.dot( _tempVector.copy( this.rotationAxis ).cross( this.eye ) ) * ROTATION_SPEED;\n\n\t\t\t} else if ( axis === 'X' || axis === 'Y' || axis === 'Z' ) {\n\n\t\t\t\tthis.rotationAxis.copy( _unit[ axis ] );\n\n\t\t\t\t_tempVector.copy( _unit[ axis ] );\n\n\t\t\t\tif ( space === 'local' ) {\n\n\t\t\t\t\t_tempVector.applyQuaternion( this.worldQuaternion );\n\n\t\t\t\t}\n\n\t\t\t\t_tempVector.cross( this.eye );\n\n\t\t\t\t// When _tempVector is 0 after cross with this.eye the vectors are parallel and should use in-plane rotation logic.\n\t\t\t\tif ( _tempVector.length() === 0 ) {\n\n\t\t\t\t\t_inPlaneRotation = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.rotationAngle = this._offset.dot( _tempVector.normalize() ) * ROTATION_SPEED;\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\tif ( axis === 'E' || _inPlaneRotation ) {\n\n\t\t\t\tthis.rotationAxis.copy( this.eye );\n\t\t\t\tthis.rotationAngle = this.pointEnd.angleTo( this.pointStart );\n\n\t\t\t\tthis._startNorm.copy( this.pointStart ).normalize();\n\t\t\t\tthis._endNorm.copy( this.pointEnd ).normalize();\n\n\t\t\t\tthis.rotationAngle *= ( this._endNorm.cross( this._startNorm ).dot( this.eye ) < 0 ? 1 : - 1 );\n\n\t\t\t}\n\n\t\t\t// Apply rotation snap\n\n\t\t\tif ( this.rotationSnap ) this.rotationAngle = Math.round( this.rotationAngle / this.rotationSnap ) * this.rotationSnap;\n\n\t\t\t// Apply rotate\n\t\t\tif ( space === 'local' && axis !== 'E' && axis !== 'XYZE' ) {\n\n\t\t\t\tobject.quaternion.copy( this._quaternionStart );\n\t\t\t\tobject.quaternion.multiply( _tempQuaternion.setFromAxisAngle( this.rotationAxis, this.rotationAngle ) ).normalize();\n\n\t\t\t} else {\n\n\t\t\t\tthis.rotationAxis.applyQuaternion( this._parentQuaternionInv );\n\t\t\t\tobject.quaternion.copy( _tempQuaternion.setFromAxisAngle( this.rotationAxis, this.rotationAngle ) );\n\t\t\t\tobject.quaternion.multiply( this._quaternionStart ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( _changeEvent );\n\t\tthis.dispatchEvent( _objectChangeEvent );\n\n\t}\n\n\tpointerUp( pointer ) {\n\n\t\tif ( pointer !== null && pointer.button !== 0 ) return;\n\n\t\tif ( this.dragging && ( this.axis !== null ) ) {\n\n\t\t\t_mouseUpEvent.mode = this.mode;\n\t\t\tthis.dispatchEvent( _mouseUpEvent );\n\n\t\t}\n\n\t\tthis.dragging = false;\n\t\tthis.axis = null;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerHover );\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\tthis.traverse( function ( child ) {\n\n\t\t\tif ( child.geometry ) child.geometry.dispose();\n\t\t\tif ( child.material ) child.material.dispose();\n\n\t\t} );\n\n\t}\n\n\t// Set current object\n\tattach( object ) {\n\n\t\tthis.object = object;\n\t\tthis.visible = true;\n\n\t\treturn this;\n\n\t}\n\n\t// Detach from object\n\tdetach() {\n\n\t\tthis.object = undefined;\n\t\tthis.visible = false;\n\t\tthis.axis = null;\n\n\t\treturn this;\n\n\t}\n\n\treset() {\n\n\t\tif ( ! this.enabled ) return;\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis.object.position.copy( this._positionStart );\n\t\t\tthis.object.quaternion.copy( this._quaternionStart );\n\t\t\tthis.object.scale.copy( this._scaleStart );\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\tthis.dispatchEvent( _objectChangeEvent );\n\n\t\t\tthis.pointStart.copy( this.pointEnd );\n\n\t\t}\n\n\t}\n\n\tgetRaycaster() {\n\n\t\treturn _raycaster;\n\n\t}\n\n\t// TODO: deprecate\n\n\tgetMode() {\n\n\t\treturn this.mode;\n\n\t}\n\n\tsetMode( mode ) {\n\n\t\tthis.mode = mode;\n\n\t}\n\n\tsetTranslationSnap( translationSnap ) {\n\n\t\tthis.translationSnap = translationSnap;\n\n\t}\n\n\tsetRotationSnap( rotationSnap ) {\n\n\t\tthis.rotationSnap = rotationSnap;\n\n\t}\n\n\tsetScaleSnap( scaleSnap ) {\n\n\t\tthis.scaleSnap = scaleSnap;\n\n\t}\n\n\tsetSize( size ) {\n\n\t\tthis.size = size;\n\n\t}\n\n\tsetSpace( space ) {\n\n\t\tthis.space = space;\n\n\t}\n\n}\n\n// mouse / touch event handlers\n\nfunction getPointer( event ) {\n\n\tif ( this.domElement.ownerDocument.pointerLockElement ) {\n\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tbutton: event.button\n\t\t};\n\n\t} else {\n\n\t\tconst rect = this.domElement.getBoundingClientRect();\n\n\t\treturn {\n\t\t\tx: ( event.clientX - rect.left ) / rect.width * 2 - 1,\n\t\t\ty: - ( event.clientY - rect.top ) / rect.height * 2 + 1,\n\t\t\tbutton: event.button\n\t\t};\n\n\t}\n\n}\n\nfunction onPointerHover( event ) {\n\n\tif ( ! this.enabled ) return;\n\n\tswitch ( event.pointerType ) {\n\n\t\tcase 'mouse':\n\t\tcase 'pen':\n\t\t\tthis.pointerHover( this._getPointer( event ) );\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( ! this.enabled ) return;\n\n\tif ( ! document.pointerLockElement ) {\n\n\t\tthis.domElement.setPointerCapture( event.pointerId );\n\n\t}\n\n\tthis.domElement.addEventListener( 'pointermove', this._onPointerMove );\n\n\tthis.pointerHover( this._getPointer( event ) );\n\tthis.pointerDown( this._getPointer( event ) );\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( ! this.enabled ) return;\n\n\tthis.pointerMove( this._getPointer( event ) );\n\n}\n\nfunction onPointerUp( event ) {\n\n\tif ( ! this.enabled ) return;\n\n\tthis.domElement.releasePointerCapture( event.pointerId );\n\n\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\n\tthis.pointerUp( this._getPointer( event ) );\n\n}\n\nfunction intersectObjectWithRay( object, raycaster, includeInvisible ) {\n\n\tconst allIntersections = raycaster.intersectObject( object, true );\n\n\tfor ( let i = 0; i < allIntersections.length; i ++ ) {\n\n\t\tif ( allIntersections[ i ].object.visible || includeInvisible ) {\n\n\t\t\treturn allIntersections[ i ];\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\n//\n\n// Reusable utility variables\n\nconst _tempEuler = new Euler();\nconst _alignVector = new Vector3( 0, 1, 0 );\nconst _zeroVector = new Vector3( 0, 0, 0 );\nconst _lookAtMatrix = new Matrix4();\nconst _tempQuaternion2 = new Quaternion();\nconst _identityQuaternion = new Quaternion();\nconst _dirVector = new Vector3();\nconst _tempMatrix = new Matrix4();\n\nconst _unitX = new Vector3( 1, 0, 0 );\nconst _unitY = new Vector3( 0, 1, 0 );\nconst _unitZ = new Vector3( 0, 0, 1 );\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\nconst _v3 = new Vector3();\n\nclass TransformControlsGizmo extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isTransformControlsGizmo = true;\n\n\t\tthis.type = 'TransformControlsGizmo';\n\n\t\t// shared materials\n\n\t\tconst gizmoMaterial = new MeshBasicMaterial( {\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tfog: false,\n\t\t\ttoneMapped: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tconst gizmoLineMaterial = new LineBasicMaterial( {\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tfog: false,\n\t\t\ttoneMapped: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\t// Make unique material for each axis/color\n\n\t\tconst matInvisible = gizmoMaterial.clone();\n\t\tmatInvisible.opacity = 0.15;\n\n\t\tconst matHelper = gizmoLineMaterial.clone();\n\t\tmatHelper.opacity = 0.5;\n\n\t\tconst matRed = gizmoMaterial.clone();\n\t\tmatRed.color.setHex( 0xff0000 );\n\n\t\tconst matGreen = gizmoMaterial.clone();\n\t\tmatGreen.color.setHex( 0x00ff00 );\n\n\t\tconst matBlue = gizmoMaterial.clone();\n\t\tmatBlue.color.setHex( 0x0000ff );\n\n\t\tconst matRedTransparent = gizmoMaterial.clone();\n\t\tmatRedTransparent.color.setHex( 0xff0000 );\n\t\tmatRedTransparent.opacity = 0.5;\n\n\t\tconst matGreenTransparent = gizmoMaterial.clone();\n\t\tmatGreenTransparent.color.setHex( 0x00ff00 );\n\t\tmatGreenTransparent.opacity = 0.5;\n\n\t\tconst matBlueTransparent = gizmoMaterial.clone();\n\t\tmatBlueTransparent.color.setHex( 0x0000ff );\n\t\tmatBlueTransparent.opacity = 0.5;\n\n\t\tconst matWhiteTransparent = gizmoMaterial.clone();\n\t\tmatWhiteTransparent.opacity = 0.25;\n\n\t\tconst matYellowTransparent = gizmoMaterial.clone();\n\t\tmatYellowTransparent.color.setHex( 0xffff00 );\n\t\tmatYellowTransparent.opacity = 0.25;\n\n\t\tconst matYellow = gizmoMaterial.clone();\n\t\tmatYellow.color.setHex( 0xffff00 );\n\n\t\tconst matGray = gizmoMaterial.clone();\n\t\tmatGray.color.setHex( 0x787878 );\n\n\t\t// reusable geometry\n\n\t\tconst arrowGeometry = new CylinderGeometry( 0, 0.04, 0.1, 12 );\n\t\tarrowGeometry.translate( 0, 0.05, 0 );\n\n\t\tconst scaleHandleGeometry = new BoxGeometry( 0.08, 0.08, 0.08 );\n\t\tscaleHandleGeometry.translate( 0, 0.04, 0 );\n\n\t\tconst lineGeometry = new BufferGeometry();\n\t\tlineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0,\t1, 0, 0 ], 3 ) );\n\n\t\tconst lineGeometry2 = new CylinderGeometry( 0.0075, 0.0075, 0.5, 3 );\n\t\tlineGeometry2.translate( 0, 0.25, 0 );\n\n\t\tfunction CircleGeometry( radius, arc ) {\n\n\t\t\tconst geometry = new TorusGeometry( radius, 0.0075, 3, 64, arc * Math.PI * 2 );\n\t\t\tgeometry.rotateY( Math.PI / 2 );\n\t\t\tgeometry.rotateX( Math.PI / 2 );\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\t// Special geometry for transform helper. If scaled with position vector it spans from [0,0,0] to position\n\n\t\tfunction TranslateHelperGeometry() {\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 1, 1, 1 ], 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\t// Gizmo definitions - custom hierarchy definitions for setupGizmo() function\n\n\t\tconst gizmoTranslate = {\n\t\t\tX: [\n\t\t\t\t[ new Mesh( arrowGeometry, matRed ), [ 0.5, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( arrowGeometry, matRed ), [ - 0.5, 0, 0 ], [ 0, 0, Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matRed ), [ 0, 0, 0 ], [ 0, 0, - Math.PI / 2 ]]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( arrowGeometry, matGreen ), [ 0, 0.5, 0 ]],\n\t\t\t\t[ new Mesh( arrowGeometry, matGreen ), [ 0, - 0.5, 0 ], [ Math.PI, 0, 0 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matGreen ) ]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( arrowGeometry, matBlue ), [ 0, 0, 0.5 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( arrowGeometry, matBlue ), [ 0, 0, - 0.5 ], [ - Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matBlue ), null, [ Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXYZ: [\n\t\t\t\t[ new Mesh( new OctahedronGeometry( 0.1, 0 ), matWhiteTransparent.clone() ), [ 0, 0, 0 ]]\n\t\t\t],\n\t\t\tXY: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matBlueTransparent.clone() ), [ 0.15, 0.15, 0 ]]\n\t\t\t],\n\t\t\tYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matRedTransparent.clone() ), [ 0, 0.15, 0.15 ], [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tXZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matGreenTransparent.clone() ), [ 0.15, 0, 0.15 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t]\n\t\t};\n\n\t\tconst pickerTranslate = {\n\t\t\tX: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0.3, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ - 0.3, 0, 0 ], [ 0, 0, Math.PI / 2 ]]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0.3, 0 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, - 0.3, 0 ], [ 0, 0, Math.PI ]]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0, 0.3 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0, - 0.3 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXYZ: [\n\t\t\t\t[ new Mesh( new OctahedronGeometry( 0.2, 0 ), matInvisible ) ]\n\t\t\t],\n\t\t\tXY: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0.15, 0.15, 0 ]]\n\t\t\t],\n\t\t\tYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0, 0.15, 0.15 ], [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tXZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0.15, 0, 0.15 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t]\n\t\t};\n\n\t\tconst helperTranslate = {\n\t\t\tSTART: [\n\t\t\t\t[ new Mesh( new OctahedronGeometry( 0.01, 2 ), matHelper ), null, null, null, 'helper' ]\n\t\t\t],\n\t\t\tEND: [\n\t\t\t\t[ new Mesh( new OctahedronGeometry( 0.01, 2 ), matHelper ), null, null, null, 'helper' ]\n\t\t\t],\n\t\t\tDELTA: [\n\t\t\t\t[ new Line( TranslateHelperGeometry(), matHelper ), null, null, null, 'helper' ]\n\t\t\t],\n\t\t\tX: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ - 1e3, 0, 0 ], null, [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ 0, - 1e3, 0 ], [ 0, 0, Math.PI / 2 ], [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ 0, 0, - 1e3 ], [ 0, - Math.PI / 2, 0 ], [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t]\n\t\t};\n\n\t\tconst gizmoRotate = {\n\t\t\tXYZE: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.5, 1 ), matGray ), null, [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tX: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.5, 0.5 ), matRed ) ]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.5, 0.5 ), matGreen ), null, [ 0, 0, - Math.PI / 2 ]]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.5, 0.5 ), matBlue ), null, [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tE: [\n\t\t\t\t[ new Mesh( CircleGeometry( 0.75, 1 ), matYellowTransparent ), null, [ 0, Math.PI / 2, 0 ]]\n\t\t\t]\n\t\t};\n\n\t\tconst helperRotate = {\n\t\t\tAXIS: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ - 1e3, 0, 0 ], null, [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t]\n\t\t};\n\n\t\tconst pickerRotate = {\n\t\t\tXYZE: [\n\t\t\t\t[ new Mesh( new SphereGeometry( 0.25, 10, 8 ), matInvisible ) ]\n\t\t\t],\n\t\t\tX: [\n\t\t\t\t[ new Mesh( new TorusGeometry( 0.5, 0.1, 4, 24 ), matInvisible ), [ 0, 0, 0 ], [ 0, - Math.PI / 2, - Math.PI / 2 ]],\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( new TorusGeometry( 0.5, 0.1, 4, 24 ), matInvisible ), [ 0, 0, 0 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( new TorusGeometry( 0.5, 0.1, 4, 24 ), matInvisible ), [ 0, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t],\n\t\t\tE: [\n\t\t\t\t[ new Mesh( new TorusGeometry( 0.75, 0.1, 2, 24 ), matInvisible ) ]\n\t\t\t]\n\t\t};\n\n\t\tconst gizmoScale = {\n\t\t\tX: [\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matRed ), [ 0.5, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matRed ), [ 0, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matRed ), [ - 0.5, 0, 0 ], [ 0, 0, Math.PI / 2 ]],\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matGreen ), [ 0, 0.5, 0 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matGreen ) ],\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matGreen ), [ 0, - 0.5, 0 ], [ 0, 0, Math.PI ]],\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matBlue ), [ 0, 0, 0.5 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( lineGeometry2, matBlue ), [ 0, 0, 0 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( scaleHandleGeometry, matBlue ), [ 0, 0, - 0.5 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXY: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matBlueTransparent ), [ 0.15, 0.15, 0 ]]\n\t\t\t],\n\t\t\tYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matRedTransparent ), [ 0, 0.15, 0.15 ], [ 0, Math.PI / 2, 0 ]]\n\t\t\t],\n\t\t\tXZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.15, 0.15, 0.01 ), matGreenTransparent ), [ 0.15, 0, 0.15 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.1, 0.1, 0.1 ), matWhiteTransparent.clone() ) ],\n\t\t\t]\n\t\t};\n\n\t\tconst pickerScale = {\n\t\t\tX: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0.3, 0, 0 ], [ 0, 0, - Math.PI / 2 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ - 0.3, 0, 0 ], [ 0, 0, Math.PI / 2 ]]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0.3, 0 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, - 0.3, 0 ], [ 0, 0, Math.PI ]]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0, 0.3 ], [ Math.PI / 2, 0, 0 ]],\n\t\t\t\t[ new Mesh( new CylinderGeometry( 0.2, 0, 0.6, 4 ), matInvisible ), [ 0, 0, - 0.3 ], [ - Math.PI / 2, 0, 0 ]]\n\t\t\t],\n\t\t\tXY: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0.15, 0.15, 0 ]],\n\t\t\t],\n\t\t\tYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0, 0.15, 0.15 ], [ 0, Math.PI / 2, 0 ]],\n\t\t\t],\n\t\t\tXZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.01 ), matInvisible ), [ 0.15, 0, 0.15 ], [ - Math.PI / 2, 0, 0 ]],\n\t\t\t],\n\t\t\tXYZ: [\n\t\t\t\t[ new Mesh( new BoxGeometry( 0.2, 0.2, 0.2 ), matInvisible ), [ 0, 0, 0 ]],\n\t\t\t]\n\t\t};\n\n\t\tconst helperScale = {\n\t\t\tX: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ - 1e3, 0, 0 ], null, [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t],\n\t\t\tY: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ 0, - 1e3, 0 ], [ 0, 0, Math.PI / 2 ], [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t],\n\t\t\tZ: [\n\t\t\t\t[ new Line( lineGeometry, matHelper.clone() ), [ 0, 0, - 1e3 ], [ 0, - Math.PI / 2, 0 ], [ 1e6, 1, 1 ], 'helper' ]\n\t\t\t]\n\t\t};\n\n\t\t// Creates an Object3D with gizmos described in custom hierarchy definition.\n\n\t\tfunction setupGizmo( gizmoMap ) {\n\n\t\t\tconst gizmo = new Object3D();\n\n\t\t\tfor ( const name in gizmoMap ) {\n\n\t\t\t\tfor ( let i = gizmoMap[ name ].length; i --; ) {\n\n\t\t\t\t\tconst object = gizmoMap[ name ][ i ][ 0 ].clone();\n\t\t\t\t\tconst position = gizmoMap[ name ][ i ][ 1 ];\n\t\t\t\t\tconst rotation = gizmoMap[ name ][ i ][ 2 ];\n\t\t\t\t\tconst scale = gizmoMap[ name ][ i ][ 3 ];\n\t\t\t\t\tconst tag = gizmoMap[ name ][ i ][ 4 ];\n\n\t\t\t\t\t// name and tag properties are essential for picking and updating logic.\n\t\t\t\t\tobject.name = name;\n\t\t\t\t\tobject.tag = tag;\n\n\t\t\t\t\tif ( position ) {\n\n\t\t\t\t\t\tobject.position.set( position[ 0 ], position[ 1 ], position[ 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( rotation ) {\n\n\t\t\t\t\t\tobject.rotation.set( rotation[ 0 ], rotation[ 1 ], rotation[ 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( scale ) {\n\n\t\t\t\t\t\tobject.scale.set( scale[ 0 ], scale[ 1 ], scale[ 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.updateMatrix();\n\n\t\t\t\t\tconst tempGeometry = object.geometry.clone();\n\t\t\t\t\ttempGeometry.applyMatrix4( object.matrix );\n\t\t\t\t\tobject.geometry = tempGeometry;\n\t\t\t\t\tobject.renderOrder = Infinity;\n\n\t\t\t\t\tobject.position.set( 0, 0, 0 );\n\t\t\t\t\tobject.rotation.set( 0, 0, 0 );\n\t\t\t\t\tobject.scale.set( 1, 1, 1 );\n\n\t\t\t\t\tgizmo.add( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn gizmo;\n\n\t\t}\n\n\t\t// Gizmo creation\n\n\t\tthis.gizmo = {};\n\t\tthis.picker = {};\n\t\tthis.helper = {};\n\n\t\tthis.add( this.gizmo[ 'translate' ] = setupGizmo( gizmoTranslate ) );\n\t\tthis.add( this.gizmo[ 'rotate' ] = setupGizmo( gizmoRotate ) );\n\t\tthis.add( this.gizmo[ 'scale' ] = setupGizmo( gizmoScale ) );\n\t\tthis.add( this.picker[ 'translate' ] = setupGizmo( pickerTranslate ) );\n\t\tthis.add( this.picker[ 'rotate' ] = setupGizmo( pickerRotate ) );\n\t\tthis.add( this.picker[ 'scale' ] = setupGizmo( pickerScale ) );\n\t\tthis.add( this.helper[ 'translate' ] = setupGizmo( helperTranslate ) );\n\t\tthis.add( this.helper[ 'rotate' ] = setupGizmo( helperRotate ) );\n\t\tthis.add( this.helper[ 'scale' ] = setupGizmo( helperScale ) );\n\n\t\t// Pickers should be hidden always\n\n\t\tthis.picker[ 'translate' ].visible = false;\n\t\tthis.picker[ 'rotate' ].visible = false;\n\t\tthis.picker[ 'scale' ].visible = false;\n\n\t}\n\n\t// updateMatrixWorld will update transformations and appearance of individual handles\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst space = ( this.mode === 'scale' ) ? 'local' : this.space; // scale always oriented to local rotation\n\n\t\tconst quaternion = ( space === 'local' ) ? this.worldQuaternion : _identityQuaternion;\n\n\t\t// Show only gizmos for current transform mode\n\n\t\tthis.gizmo[ 'translate' ].visible = this.mode === 'translate';\n\t\tthis.gizmo[ 'rotate' ].visible = this.mode === 'rotate';\n\t\tthis.gizmo[ 'scale' ].visible = this.mode === 'scale';\n\n\t\tthis.helper[ 'translate' ].visible = this.mode === 'translate';\n\t\tthis.helper[ 'rotate' ].visible = this.mode === 'rotate';\n\t\tthis.helper[ 'scale' ].visible = this.mode === 'scale';\n\n\n\t\tlet handles = [];\n\t\thandles = handles.concat( this.picker[ this.mode ].children );\n\t\thandles = handles.concat( this.gizmo[ this.mode ].children );\n\t\thandles = handles.concat( this.helper[ this.mode ].children );\n\n\t\tfor ( let i = 0; i < handles.length; i ++ ) {\n\n\t\t\tconst handle = handles[ i ];\n\n\t\t\t// hide aligned to camera\n\n\t\t\thandle.visible = true;\n\t\t\thandle.rotation.set( 0, 0, 0 );\n\t\t\thandle.position.copy( this.worldPosition );\n\n\t\t\tlet factor;\n\n\t\t\tif ( this.camera.isOrthographicCamera ) {\n\n\t\t\t\tfactor = ( this.camera.top - this.camera.bottom ) / this.camera.zoom;\n\n\t\t\t} else {\n\n\t\t\t\tfactor = this.worldPosition.distanceTo( this.cameraPosition ) * Math.min( 1.9 * Math.tan( Math.PI * this.camera.fov / 360 ) / this.camera.zoom, 7 );\n\n\t\t\t}\n\n\t\t\thandle.scale.set( 1, 1, 1 ).multiplyScalar( factor * this.size / 4 );\n\n\t\t\t// TODO: simplify helpers and consider decoupling from gizmo\n\n\t\t\tif ( handle.tag === 'helper' ) {\n\n\t\t\t\thandle.visible = false;\n\n\t\t\t\tif ( handle.name === 'AXIS' ) {\n\n\t\t\t\t\thandle.visible = !! this.axis;\n\n\t\t\t\t\tif ( this.axis === 'X' ) {\n\n\t\t\t\t\t\t_tempQuaternion.setFromEuler( _tempEuler.set( 0, 0, 0 ) );\n\t\t\t\t\t\thandle.quaternion.copy( quaternion ).multiply( _tempQuaternion );\n\n\t\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > 0.9 ) {\n\n\t\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis === 'Y' ) {\n\n\t\t\t\t\t\t_tempQuaternion.setFromEuler( _tempEuler.set( 0, 0, Math.PI / 2 ) );\n\t\t\t\t\t\thandle.quaternion.copy( quaternion ).multiply( _tempQuaternion );\n\n\t\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > 0.9 ) {\n\n\t\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis === 'Z' ) {\n\n\t\t\t\t\t\t_tempQuaternion.setFromEuler( _tempEuler.set( 0, Math.PI / 2, 0 ) );\n\t\t\t\t\t\thandle.quaternion.copy( quaternion ).multiply( _tempQuaternion );\n\n\t\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > 0.9 ) {\n\n\t\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis === 'XYZE' ) {\n\n\t\t\t\t\t\t_tempQuaternion.setFromEuler( _tempEuler.set( 0, Math.PI / 2, 0 ) );\n\t\t\t\t\t\t_alignVector.copy( this.rotationAxis );\n\t\t\t\t\t\thandle.quaternion.setFromRotationMatrix( _lookAtMatrix.lookAt( _zeroVector, _alignVector, _unitY ) );\n\t\t\t\t\t\thandle.quaternion.multiply( _tempQuaternion );\n\t\t\t\t\t\thandle.visible = this.dragging;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis === 'E' ) {\n\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else if ( handle.name === 'START' ) {\n\n\t\t\t\t\thandle.position.copy( this.worldPositionStart );\n\t\t\t\t\thandle.visible = this.dragging;\n\n\t\t\t\t} else if ( handle.name === 'END' ) {\n\n\t\t\t\t\thandle.position.copy( this.worldPosition );\n\t\t\t\t\thandle.visible = this.dragging;\n\n\t\t\t\t} else if ( handle.name === 'DELTA' ) {\n\n\t\t\t\t\thandle.position.copy( this.worldPositionStart );\n\t\t\t\t\thandle.quaternion.copy( this.worldQuaternionStart );\n\t\t\t\t\t_tempVector.set( 1e-10, 1e-10, 1e-10 ).add( this.worldPositionStart ).sub( this.worldPosition ).multiplyScalar( - 1 );\n\t\t\t\t\t_tempVector.applyQuaternion( this.worldQuaternionStart.clone().invert() );\n\t\t\t\t\thandle.scale.copy( _tempVector );\n\t\t\t\t\thandle.visible = this.dragging;\n\n\t\t\t\t} else {\n\n\t\t\t\t\thandle.quaternion.copy( quaternion );\n\n\t\t\t\t\tif ( this.dragging ) {\n\n\t\t\t\t\t\thandle.position.copy( this.worldPositionStart );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\thandle.position.copy( this.worldPosition );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.axis ) {\n\n\t\t\t\t\t\thandle.visible = this.axis.search( handle.name ) !== - 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// If updating helper, skip rest of the loop\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// Align handles to current local or world rotation\n\n\t\t\thandle.quaternion.copy( quaternion );\n\n\t\t\tif ( this.mode === 'translate' || this.mode === 'scale' ) {\n\n\t\t\t\t// Hide translate and scale axis facing the camera\n\n\t\t\t\tconst AXIS_HIDE_THRESHOLD = 0.99;\n\t\t\t\tconst PLANE_HIDE_THRESHOLD = 0.2;\n\n\t\t\t\tif ( handle.name === 'X' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'Y' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'Z' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'XY' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'YZ' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'XZ' ) {\n\n\t\t\t\t\tif ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {\n\n\t\t\t\t\t\thandle.scale.set( 1e-10, 1e-10, 1e-10 );\n\t\t\t\t\t\thandle.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( this.mode === 'rotate' ) {\n\n\t\t\t\t// Align handles to current local or world rotation\n\n\t\t\t\t_tempQuaternion2.copy( quaternion );\n\t\t\t\t_alignVector.copy( this.eye ).applyQuaternion( _tempQuaternion.copy( quaternion ).invert() );\n\n\t\t\t\tif ( handle.name.search( 'E' ) !== - 1 ) {\n\n\t\t\t\t\thandle.quaternion.setFromRotationMatrix( _lookAtMatrix.lookAt( this.eye, _zeroVector, _unitY ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'X' ) {\n\n\t\t\t\t\t_tempQuaternion.setFromAxisAngle( _unitX, Math.atan2( - _alignVector.y, _alignVector.z ) );\n\t\t\t\t\t_tempQuaternion.multiplyQuaternions( _tempQuaternion2, _tempQuaternion );\n\t\t\t\t\thandle.quaternion.copy( _tempQuaternion );\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'Y' ) {\n\n\t\t\t\t\t_tempQuaternion.setFromAxisAngle( _unitY, Math.atan2( _alignVector.x, _alignVector.z ) );\n\t\t\t\t\t_tempQuaternion.multiplyQuaternions( _tempQuaternion2, _tempQuaternion );\n\t\t\t\t\thandle.quaternion.copy( _tempQuaternion );\n\n\t\t\t\t}\n\n\t\t\t\tif ( handle.name === 'Z' ) {\n\n\t\t\t\t\t_tempQuaternion.setFromAxisAngle( _unitZ, Math.atan2( _alignVector.y, _alignVector.x ) );\n\t\t\t\t\t_tempQuaternion.multiplyQuaternions( _tempQuaternion2, _tempQuaternion );\n\t\t\t\t\thandle.quaternion.copy( _tempQuaternion );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Hide disabled axes\n\t\t\thandle.visible = handle.visible && ( handle.name.indexOf( 'X' ) === - 1 || this.showX );\n\t\t\thandle.visible = handle.visible && ( handle.name.indexOf( 'Y' ) === - 1 || this.showY );\n\t\t\thandle.visible = handle.visible && ( handle.name.indexOf( 'Z' ) === - 1 || this.showZ );\n\t\t\thandle.visible = handle.visible && ( handle.name.indexOf( 'E' ) === - 1 || ( this.showX && this.showY && this.showZ ) );\n\n\t\t\t// highlight selected axis\n\n\t\t\thandle.material._color = handle.material._color || handle.material.color.clone();\n\t\t\thandle.material._opacity = handle.material._opacity || handle.material.opacity;\n\n\t\t\thandle.material.color.copy( handle.material._color );\n\t\t\thandle.material.opacity = handle.material._opacity;\n\n\t\t\tif ( this.enabled && this.axis ) {\n\n\t\t\t\tif ( handle.name === this.axis ) {\n\n\t\t\t\t\thandle.material.color.setHex( 0xffff00 );\n\t\t\t\t\thandle.material.opacity = 1.0;\n\n\t\t\t\t} else if ( this.axis.split( '' ).some( function ( a ) {\n\n\t\t\t\t\treturn handle.name === a;\n\n\t\t\t\t} ) ) {\n\n\t\t\t\t\thandle.material.color.setHex( 0xffff00 );\n\t\t\t\t\thandle.material.opacity = 1.0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n//\n\nclass TransformControlsPlane extends Mesh {\n\n\tconstructor() {\n\n\t\tsuper(\n\t\t\tnew PlaneGeometry( 100000, 100000, 2, 2 ),\n\t\t\tnew MeshBasicMaterial( { visible: false, wireframe: true, side: DoubleSide, transparent: true, opacity: 0.1, toneMapped: false } )\n\t\t);\n\n\t\tthis.isTransformControlsPlane = true;\n\n\t\tthis.type = 'TransformControlsPlane';\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tlet space = this.space;\n\n\t\tthis.position.copy( this.worldPosition );\n\n\t\tif ( this.mode === 'scale' ) space = 'local'; // scale always oriented to local rotation\n\n\t\t_v1.copy( _unitX ).applyQuaternion( space === 'local' ? this.worldQuaternion : _identityQuaternion );\n\t\t_v2.copy( _unitY ).applyQuaternion( space === 'local' ? this.worldQuaternion : _identityQuaternion );\n\t\t_v3.copy( _unitZ ).applyQuaternion( space === 'local' ? this.worldQuaternion : _identityQuaternion );\n\n\t\t// Align the plane for current transform mode, axis and space.\n\n\t\t_alignVector.copy( _v2 );\n\n\t\tswitch ( this.mode ) {\n\n\t\t\tcase 'translate':\n\t\t\tcase 'scale':\n\t\t\t\tswitch ( this.axis ) {\n\n\t\t\t\t\tcase 'X':\n\t\t\t\t\t\t_alignVector.copy( this.eye ).cross( _v1 );\n\t\t\t\t\t\t_dirVector.copy( _v1 ).cross( _alignVector );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Y':\n\t\t\t\t\t\t_alignVector.copy( this.eye ).cross( _v2 );\n\t\t\t\t\t\t_dirVector.copy( _v2 ).cross( _alignVector );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Z':\n\t\t\t\t\t\t_alignVector.copy( this.eye ).cross( _v3 );\n\t\t\t\t\t\t_dirVector.copy( _v3 ).cross( _alignVector );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'XY':\n\t\t\t\t\t\t_dirVector.copy( _v3 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'YZ':\n\t\t\t\t\t\t_dirVector.copy( _v1 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'XZ':\n\t\t\t\t\t\t_alignVector.copy( _v3 );\n\t\t\t\t\t\t_dirVector.copy( _v2 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'XYZ':\n\t\t\t\t\tcase 'E':\n\t\t\t\t\t\t_dirVector.set( 0, 0, 0 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase 'rotate':\n\t\t\tdefault:\n\t\t\t\t// special case for rotate\n\t\t\t\t_dirVector.set( 0, 0, 0 );\n\n\t\t}\n\n\t\tif ( _dirVector.length() === 0 ) {\n\n\t\t\t// If in rotate mode, make the plane parallel to camera\n\t\t\tthis.quaternion.copy( this.cameraQuaternion );\n\n\t\t} else {\n\n\t\t\t_tempMatrix.lookAt( _tempVector.set( 0, 0, 0 ), _dirVector, _alignVector );\n\n\t\t\tthis.quaternion.setFromRotationMatrix( _tempMatrix );\n\n\t\t}\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nexport { TransformControls, TransformControlsGizmo, TransformControlsPlane };\n", "import { Vector3, Matrix4 } from 'three';\n\nconst inverseProjectionMatrix = new Matrix4();\n\nclass CSMFrustum {\n\n\tconstructor( data ) {\n\n\t\tdata = data || {};\n\n\t\tthis.vertices = {\n\t\t\tnear: [\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3()\n\t\t\t],\n\t\t\tfar: [\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3()\n\t\t\t]\n\t\t};\n\n\t\tif ( data.projectionMatrix !== undefined ) {\n\n\t\t\tthis.setFromProjectionMatrix( data.projectionMatrix, data.maxFar || 10000 );\n\n\t\t}\n\n\t}\n\n\tsetFromProjectionMatrix( projectionMatrix, maxFar ) {\n\n\t\tconst isOrthographic = projectionMatrix.elements[ 2 * 4 + 3 ] === 0;\n\n\t\tinverseProjectionMatrix.copy( projectionMatrix ).invert();\n\n\t\t// 3 --- 0 vertices.near/far order\n\t\t// | |\n\t\t// 2 --- 1\n\t\t// clip space spans from [-1, 1]\n\n\t\tthis.vertices.near[ 0 ].set( 1, 1, - 1 );\n\t\tthis.vertices.near[ 1 ].set( 1, - 1, - 1 );\n\t\tthis.vertices.near[ 2 ].set( - 1, - 1, - 1 );\n\t\tthis.vertices.near[ 3 ].set( - 1, 1, - 1 );\n\t\tthis.vertices.near.forEach( function ( v ) {\n\n\t\t\tv.applyMatrix4( inverseProjectionMatrix );\n\n\t\t} );\n\n\t\tthis.vertices.far[ 0 ].set( 1, 1, 1 );\n\t\tthis.vertices.far[ 1 ].set( 1, - 1, 1 );\n\t\tthis.vertices.far[ 2 ].set( - 1, - 1, 1 );\n\t\tthis.vertices.far[ 3 ].set( - 1, 1, 1 );\n\t\tthis.vertices.far.forEach( function ( v ) {\n\n\t\t\tv.applyMatrix4( inverseProjectionMatrix );\n\n\t\t\tconst absZ = Math.abs( v.z );\n\t\t\tif ( isOrthographic ) {\n\n\t\t\t\tv.z *= Math.min( maxFar / absZ, 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.multiplyScalar( Math.min( maxFar / absZ, 1.0 ) );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this.vertices;\n\n\t}\n\n\tsplit( breaks, target ) {\n\n\t\twhile ( breaks.length > target.length ) {\n\n\t\t\ttarget.push( new CSMFrustum() );\n\n\t\t}\n\n\t\ttarget.length = breaks.length;\n\n\t\tfor ( let i = 0; i < breaks.length; i ++ ) {\n\n\t\t\tconst cascade = target[ i ];\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tcascade.vertices.near[ j ].copy( this.vertices.near[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tcascade.vertices.near[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i - 1 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( i === breaks.length - 1 ) {\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tcascade.vertices.far[ j ].copy( this.vertices.far[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tcascade.vertices.far[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoSpace( cameraMatrix, target ) {\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\ttarget.vertices.near[ i ]\n\t\t\t\t.copy( this.vertices.near[ i ] )\n\t\t\t\t.applyMatrix4( cameraMatrix );\n\n\t\t\ttarget.vertices.far[ i ]\n\t\t\t\t.copy( this.vertices.far[ i ] )\n\t\t\t\t.applyMatrix4( cameraMatrix );\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSMFrustum };\n", "import { ShaderChunk } from 'three';\n\nconst CSMShader = {\n\tlights_fragment_begin: /* glsl */`\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n\n#ifdef USE_CLEARCOAT\n\n\tgeometryClearcoatNormal = clearcoatNormal;\n\n#endif\n\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\t// Iridescence F0 approximation\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n \tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\n \t\t// spot lights are ordered [shadows with maps, shadows without maps, maps without shadows, none]\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\tfloat linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n\t\tvec2 cascade;\n\t\tfloat cascadeCenter;\n\t\tfloat closestEdge;\n\t\tfloat margin;\n\t\tfloat csmx;\n\t\tfloat csmy;\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\t\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\n\t\t\t#if ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\t\t\t// NOTE: Depth gets larger away from the camera.\n\t\t\t\t// cascade.x is closer, cascade.y is further\n\t\t\t\tcascade = CSM_cascades[ i ];\n\t\t\t\tcascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n\t\t\t\tclosestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n\t\t\t\tmargin = 0.25 * pow( closestEdge, 2.0 );\n\t\t\t\tcsmx = cascade.x - margin / 2.0;\n\t\t\t\tcsmy = cascade.y + margin / 2.0;\n\t\t\t\tif( linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) {\n\n\t\t\t\t\tfloat dist = min( linearDepth - csmx, csmy - linearDepth );\n\t\t\t\t\tfloat ratio = clamp( dist / margin, 0.0, 1.0 );\n\n\t\t\t\t\tvec3 prevColor = directLight.color;\n\t\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\t\tbool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n\t\t\t\t\tdirectLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n\t\t\t\t\tReflectedLight prevLight = reflectedLight;\n\t\t\t\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t\t\t\t\tbool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n\t\t\t\t\tfloat blendRatio = shouldBlend ? ratio : 1.0;\n\n\t\t\t\t\treflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n\t\t\t\t\treflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n\t\t\t\t\treflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n\t\t\t\t\treflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n\t\t\t\t}\n\t\t\t#endif\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#elif defined (USE_SHADOWMAP)\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\t\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\n\t\t\t#if ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t\t\t#endif\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#elif ( NUM_DIR_LIGHT_SHADOWS > 0 )\n\t\t// note: no loop here - all CSM lights are in fact one light only\n\t\tgetDirectionalLightInfo( directionalLights[0], directLight );\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t#endif\n\n\t#if ( NUM_DIR_LIGHTS > NUM_DIR_LIGHT_SHADOWS)\n\t\t// compute the lights not casting shadows (if any)\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = NUM_DIR_LIGHT_SHADOWS; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\n\t\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\n\t\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\t#if defined( USE_LIGHT_PROBES )\n\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\n\t#endif\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n`,\n\tlights_pars_begin: /* glsl */`\n#if defined( USE_CSM ) && defined( CSM_CASCADES )\nuniform vec2 CSM_cascades[CSM_CASCADES];\nuniform float cameraNear;\nuniform float shadowFar;\n#endif\n\t` + ShaderChunk.lights_pars_begin\n};\n\nexport { CSMShader };\n", "import {\n\tVector2,\n\tVector3,\n\tDirectionalLight,\n\tMathUtils,\n\tShaderChunk,\n\tMatrix4,\n\tBox3\n} from 'three';\nimport { CSMFrustum } from './CSMFrustum.js';\nimport { CSMShader } from './CSMShader.js';\n\nconst _cameraToLightMatrix = new Matrix4();\nconst _lightSpaceFrustum = new CSMFrustum();\nconst _center = new Vector3();\nconst _bbox = new Box3();\nconst _uniformArray = [];\nconst _logArray = [];\nconst _lightOrientationMatrix = new Matrix4();\nconst _lightOrientationMatrixInverse = new Matrix4();\nconst _up = new Vector3( 0, 1, 0 );\n\nexport class CSM {\n\n\tconstructor( data ) {\n\n\t\tthis.camera = data.camera;\n\t\tthis.parent = data.parent;\n\t\tthis.cascades = data.cascades || 3;\n\t\tthis.maxFar = data.maxFar || 100000;\n\t\tthis.mode = data.mode || 'practical';\n\t\tthis.shadowMapSize = data.shadowMapSize || 2048;\n\t\tthis.shadowBias = data.shadowBias || 0.000001;\n\t\tthis.lightDirection = data.lightDirection || new Vector3( 1, - 1, 1 ).normalize();\n\t\tthis.lightIntensity = data.lightIntensity || 3;\n\t\tthis.lightNear = data.lightNear || 1;\n\t\tthis.lightFar = data.lightFar || 2000;\n\t\tthis.lightMargin = data.lightMargin || 200;\n\t\tthis.customSplitsCallback = data.customSplitsCallback;\n\t\tthis.fade = false;\n\t\tthis.mainFrustum = new CSMFrustum();\n\t\tthis.frustums = [];\n\t\tthis.breaks = [];\n\n\t\tthis.lights = [];\n\t\tthis.shaders = new Map();\n\n\t\tthis.createLights();\n\t\tthis.updateFrustums();\n\t\tthis.injectInclude();\n\n\t}\n\n\tcreateLights() {\n\n\t\tfor ( let i = 0; i < this.cascades; i ++ ) {\n\n\t\t\tconst light = new DirectionalLight( 0xffffff, this.lightIntensity );\n\t\t\tlight.castShadow = true;\n\t\t\tlight.shadow.mapSize.width = this.shadowMapSize;\n\t\t\tlight.shadow.mapSize.height = this.shadowMapSize;\n\n\t\t\tlight.shadow.camera.near = this.lightNear;\n\t\t\tlight.shadow.camera.far = this.lightFar;\n\t\t\tlight.shadow.bias = this.shadowBias;\n\n\t\t\tthis.parent.add( light );\n\t\t\tthis.parent.add( light.target );\n\t\t\tthis.lights.push( light );\n\n\t\t}\n\n\t}\n\n\tinitCascades() {\n\n\t\tconst camera = this.camera;\n\t\tcamera.updateProjectionMatrix();\n\t\tthis.mainFrustum.setFromProjectionMatrix( camera.projectionMatrix, this.maxFar );\n\t\tthis.mainFrustum.split( this.breaks, this.frustums );\n\n\t}\n\n\tupdateShadowBounds() {\n\n\t\tconst frustums = this.frustums;\n\t\tfor ( let i = 0; i < frustums.length; i ++ ) {\n\n\t\t\tconst light = this.lights[ i ];\n\t\t\tconst shadowCam = light.shadow.camera;\n\t\t\tconst frustum = this.frustums[ i ];\n\n\t\t\t// Get the two points that represent that furthest points on the frustum assuming\n\t\t\t// that's either the diagonal across the far plane or the diagonal across the whole\n\t\t\t// frustum itself.\n\t\t\tconst nearVerts = frustum.vertices.near;\n\t\t\tconst farVerts = frustum.vertices.far;\n\t\t\tconst point1 = farVerts[ 0 ];\n\t\t\tlet point2;\n\t\t\tif ( point1.distanceTo( farVerts[ 2 ] ) > point1.distanceTo( nearVerts[ 2 ] ) ) {\n\n\t\t\t\tpoint2 = farVerts[ 2 ];\n\n\t\t\t} else {\n\n\t\t\t\tpoint2 = nearVerts[ 2 ];\n\n\t\t\t}\n\n\t\t\tlet squaredBBWidth = point1.distanceTo( point2 );\n\t\t\tif ( this.fade ) {\n\n\t\t\t\t// expand the shadow extents by the fade margin if fade is enabled.\n\t\t\t\tconst camera = this.camera;\n\t\t\t\tconst far = Math.max( camera.far, this.maxFar );\n\t\t\t\tconst linearDepth = frustum.vertices.far[ 0 ].z / ( far - camera.near );\n\t\t\t\tconst margin = 0.25 * Math.pow( linearDepth, 2.0 ) * ( far - camera.near );\n\n\t\t\t\tsquaredBBWidth += margin;\n\n\t\t\t}\n\n\t\t\tshadowCam.left = - squaredBBWidth / 2;\n\t\t\tshadowCam.right = squaredBBWidth / 2;\n\t\t\tshadowCam.top = squaredBBWidth / 2;\n\t\t\tshadowCam.bottom = - squaredBBWidth / 2;\n\t\t\tshadowCam.updateProjectionMatrix();\n\n\t\t}\n\n\t}\n\n\tgetBreaks() {\n\n\t\tconst camera = this.camera;\n\t\tconst far = Math.min( camera.far, this.maxFar );\n\t\tthis.breaks.length = 0;\n\n\t\tswitch ( this.mode ) {\n\n\t\t\tcase 'uniform':\n\t\t\t\tuniformSplit( this.cascades, camera.near, far, this.breaks );\n\t\t\t\tbreak;\n\t\t\tcase 'logarithmic':\n\t\t\t\tlogarithmicSplit( this.cascades, camera.near, far, this.breaks );\n\t\t\t\tbreak;\n\t\t\tcase 'practical':\n\t\t\t\tpracticalSplit( this.cascades, camera.near, far, 0.5, this.breaks );\n\t\t\t\tbreak;\n\t\t\tcase 'custom':\n\t\t\t\tif ( this.customSplitsCallback === undefined ) console.error( 'CSM: Custom split scheme callback not defined.' );\n\t\t\t\tthis.customSplitsCallback( this.cascades, camera.near, far, this.breaks );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tfunction uniformSplit( amount, near, far, target ) {\n\n\t\t\tfor ( let i = 1; i < amount; i ++ ) {\n\n\t\t\t\ttarget.push( ( near + ( far - near ) * i / amount ) / far );\n\n\t\t\t}\n\n\t\t\ttarget.push( 1 );\n\n\t\t}\n\n\t\tfunction logarithmicSplit( amount, near, far, target ) {\n\n\t\t\tfor ( let i = 1; i < amount; i ++ ) {\n\n\t\t\t\ttarget.push( ( near * ( far / near ) ** ( i / amount ) ) / far );\n\n\t\t\t}\n\n\t\t\ttarget.push( 1 );\n\n\t\t}\n\n\t\tfunction practicalSplit( amount, near, far, lambda, target ) {\n\n\t\t\t_uniformArray.length = 0;\n\t\t\t_logArray.length = 0;\n\t\t\tlogarithmicSplit( amount, near, far, _logArray );\n\t\t\tuniformSplit( amount, near, far, _uniformArray );\n\n\t\t\tfor ( let i = 1; i < amount; i ++ ) {\n\n\t\t\t\ttarget.push( MathUtils.lerp( _uniformArray[ i - 1 ], _logArray[ i - 1 ], lambda ) );\n\n\t\t\t}\n\n\t\t\ttarget.push( 1 );\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst camera = this.camera;\n\t\tconst frustums = this.frustums;\n\n\t\t// for each frustum we need to find its min-max box aligned with the light orientation\n\t\t// the position in _lightOrientationMatrix does not matter, as we transform there and back\n\t\t_lightOrientationMatrix.lookAt( new Vector3(), this.lightDirection, _up );\n\t\t_lightOrientationMatrixInverse.copy( _lightOrientationMatrix ).invert();\n\n\t\tfor ( let i = 0; i < frustums.length; i ++ ) {\n\n\t\t\tconst light = this.lights[ i ];\n\t\t\tconst shadowCam = light.shadow.camera;\n\t\t\tconst texelWidth = ( shadowCam.right - shadowCam.left ) / this.shadowMapSize;\n\t\t\tconst texelHeight = ( shadowCam.top - shadowCam.bottom ) / this.shadowMapSize;\n\t\t\t_cameraToLightMatrix.multiplyMatrices( _lightOrientationMatrixInverse, camera.matrixWorld );\n\t\t\tfrustums[ i ].toSpace( _cameraToLightMatrix, _lightSpaceFrustum );\n\n\t\t\tconst nearVerts = _lightSpaceFrustum.vertices.near;\n\t\t\tconst farVerts = _lightSpaceFrustum.vertices.far;\n\t\t\t_bbox.makeEmpty();\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t_bbox.expandByPoint( nearVerts[ j ] );\n\t\t\t\t_bbox.expandByPoint( farVerts[ j ] );\n\n\t\t\t}\n\n\t\t\t_bbox.getCenter( _center );\n\t\t\t_center.z = _bbox.max.z + this.lightMargin;\n\t\t\t_center.x = Math.floor( _center.x / texelWidth ) * texelWidth;\n\t\t\t_center.y = Math.floor( _center.y / texelHeight ) * texelHeight;\n\t\t\t_center.applyMatrix4( _lightOrientationMatrix );\n\n\t\t\tlight.position.copy( _center );\n\t\t\tlight.target.position.copy( _center );\n\n\t\t\tlight.target.position.x += this.lightDirection.x;\n\t\t\tlight.target.position.y += this.lightDirection.y;\n\t\t\tlight.target.position.z += this.lightDirection.z;\n\n\t\t}\n\n\t}\n\n\tinjectInclude() {\n\n\t\tShaderChunk.lights_fragment_begin = CSMShader.lights_fragment_begin;\n\t\tShaderChunk.lights_pars_begin = CSMShader.lights_pars_begin;\n\n\t}\n\n\tsetupMaterial( material ) {\n\n\t\tmaterial.defines = material.defines || {};\n\t\tmaterial.defines.USE_CSM = 1;\n\t\tmaterial.defines.CSM_CASCADES = this.cascades;\n\n\t\tif ( this.fade ) {\n\n\t\t\tmaterial.defines.CSM_FADE = '';\n\n\t\t}\n\n\t\tconst breaksVec2 = [];\n\t\tconst scope = this;\n\t\tconst shaders = this.shaders;\n\n\t\tmaterial.onBeforeCompile = function ( shader ) {\n\n\t\t\tconst far = Math.min( scope.camera.far, scope.maxFar );\n\t\t\tscope.getExtendedBreaks( breaksVec2 );\n\n\t\t\tshader.uniforms.CSM_cascades = { value: breaksVec2 };\n\t\t\tshader.uniforms.cameraNear = { value: scope.camera.near };\n\t\t\tshader.uniforms.shadowFar = { value: far };\n\n\t\t\tshaders.set( material, shader );\n\n\t\t};\n\n\t\tshaders.set( material, null );\n\n\t}\n\n\tupdateUniforms() {\n\n\t\tconst far = Math.min( this.camera.far, this.maxFar );\n\t\tconst shaders = this.shaders;\n\n\t\tshaders.forEach( function ( shader, material ) {\n\n\t\t\tif ( shader !== null ) {\n\n\t\t\t\tconst uniforms = shader.uniforms;\n\t\t\t\tthis.getExtendedBreaks( uniforms.CSM_cascades.value );\n\t\t\t\tuniforms.cameraNear.value = this.camera.near;\n\t\t\t\tuniforms.shadowFar.value = far;\n\n\t\t\t}\n\n\t\t\tif ( ! this.fade && 'CSM_FADE' in material.defines ) {\n\n\t\t\t\tdelete material.defines.CSM_FADE;\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( this.fade && ! ( 'CSM_FADE' in material.defines ) ) {\n\n\t\t\t\tmaterial.defines.CSM_FADE = '';\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}, this );\n\n\t}\n\n\tgetExtendedBreaks( target ) {\n\n\t\twhile ( target.length < this.breaks.length ) {\n\n\t\t\ttarget.push( new Vector2() );\n\n\t\t}\n\n\t\ttarget.length = this.breaks.length;\n\n\t\tfor ( let i = 0; i < this.cascades; i ++ ) {\n\n\t\t\tconst amount = this.breaks[ i ];\n\t\t\tconst prev = this.breaks[ i - 1 ] || 0;\n\t\t\ttarget[ i ].x = prev;\n\t\t\ttarget[ i ].y = amount;\n\n\t\t}\n\n\t}\n\n\tupdateFrustums() {\n\n\t\tthis.getBreaks();\n\t\tthis.initCascades();\n\t\tthis.updateShadowBounds();\n\t\tthis.updateUniforms();\n\n\t}\n\n\tremove() {\n\n\t\tfor ( let i = 0; i < this.lights.length; i ++ ) {\n\n\t\t\tthis.parent.remove( this.lights[ i ].target );\n\t\t\tthis.parent.remove( this.lights[ i ] );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tconst shaders = this.shaders;\n\t\tshaders.forEach( function ( shader, material ) {\n\n\t\t\tdelete material.onBeforeCompile;\n\t\t\tdelete material.defines.USE_CSM;\n\t\t\tdelete material.defines.CSM_CASCADES;\n\t\t\tdelete material.defines.CSM_FADE;\n\n\t\t\tif ( shader !== null ) {\n\n\t\t\t\tdelete shader.uniforms.CSM_cascades;\n\t\t\t\tdelete shader.uniforms.cameraNear;\n\t\t\t\tdelete shader.uniforms.shadowFar;\n\n\t\t\t}\n\n\t\t\tmaterial.needsUpdate = true;\n\n\t\t} );\n\t\tshaders.clear();\n\n\t}\n\n}\n", "import {\n\tGroup,\n\tMesh,\n\tLineSegments,\n\tBufferGeometry,\n\tLineBasicMaterial,\n\tBox3Helper,\n\tBox3,\n\tPlaneGeometry,\n\tMeshBasicMaterial,\n\tBufferAttribute,\n\tDoubleSide\n} from 'three';\n\nclass CSMHelper extends Group {\n\n\tconstructor( csm ) {\n\n\t\tsuper();\n\t\tthis.csm = csm;\n\t\tthis.displayFrustum = true;\n\t\tthis.displayPlanes = true;\n\t\tthis.displayShadowBounds = true;\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 24 );\n\t\tconst frustumGeometry = new BufferGeometry();\n\t\tfrustumGeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tfrustumGeometry.setAttribute( 'position', new BufferAttribute( positions, 3, false ) );\n\t\tconst frustumLines = new LineSegments( frustumGeometry, new LineBasicMaterial() );\n\t\tthis.add( frustumLines );\n\n\t\tthis.frustumLines = frustumLines;\n\t\tthis.cascadeLines = [];\n\t\tthis.cascadePlanes = [];\n\t\tthis.shadowLines = [];\n\n\t}\n\n\tupdateVisibility() {\n\n\t\tconst displayFrustum = this.displayFrustum;\n\t\tconst displayPlanes = this.displayPlanes;\n\t\tconst displayShadowBounds = this.displayShadowBounds;\n\n\t\tconst frustumLines = this.frustumLines;\n\t\tconst cascadeLines = this.cascadeLines;\n\t\tconst cascadePlanes = this.cascadePlanes;\n\t\tconst shadowLines = this.shadowLines;\n\t\tfor ( let i = 0, l = cascadeLines.length; i < l; i ++ ) {\n\n\t\t\tconst cascadeLine = cascadeLines[ i ];\n\t\t\tconst cascadePlane = cascadePlanes[ i ];\n\t\t\tconst shadowLineGroup = shadowLines[ i ];\n\n\t\t\tcascadeLine.visible = displayFrustum;\n\t\t\tcascadePlane.visible = displayFrustum && displayPlanes;\n\t\t\tshadowLineGroup.visible = displayShadowBounds;\n\n\t\t}\n\n\t\tfrustumLines.visible = displayFrustum;\n\n\t}\n\n\tupdate() {\n\n\t\tconst csm = this.csm;\n\t\tconst camera = csm.camera;\n\t\tconst cascades = csm.cascades;\n\t\tconst mainFrustum = csm.mainFrustum;\n\t\tconst frustums = csm.frustums;\n\t\tconst lights = csm.lights;\n\n\t\tconst frustumLines = this.frustumLines;\n\t\tconst frustumLinePositions = frustumLines.geometry.getAttribute( 'position' );\n\t\tconst cascadeLines = this.cascadeLines;\n\t\tconst cascadePlanes = this.cascadePlanes;\n\t\tconst shadowLines = this.shadowLines;\n\n\t\tthis.position.copy( camera.position );\n\t\tthis.quaternion.copy( camera.quaternion );\n\t\tthis.scale.copy( camera.scale );\n\t\tthis.updateMatrixWorld( true );\n\n\t\twhile ( cascadeLines.length > cascades ) {\n\n\t\t\tthis.remove( cascadeLines.pop() );\n\t\t\tthis.remove( cascadePlanes.pop() );\n\t\t\tthis.remove( shadowLines.pop() );\n\n\t\t}\n\n\t\twhile ( cascadeLines.length < cascades ) {\n\n\t\t\tconst cascadeLine = new Box3Helper( new Box3(), 0xffffff );\n\t\t\tconst planeMat = new MeshBasicMaterial( { transparent: true, opacity: 0.1, depthWrite: false, side: DoubleSide } );\n\t\t\tconst cascadePlane = new Mesh( new PlaneGeometry(), planeMat );\n\t\t\tconst shadowLineGroup = new Group();\n\t\t\tconst shadowLine = new Box3Helper( new Box3(), 0xffff00 );\n\t\t\tshadowLineGroup.add( shadowLine );\n\n\t\t\tthis.add( cascadeLine );\n\t\t\tthis.add( cascadePlane );\n\t\t\tthis.add( shadowLineGroup );\n\n\t\t\tcascadeLines.push( cascadeLine );\n\t\t\tcascadePlanes.push( cascadePlane );\n\t\t\tshadowLines.push( shadowLineGroup );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < cascades; i ++ ) {\n\n\t\t\tconst frustum = frustums[ i ];\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadowCam = light.shadow.camera;\n\t\t\tconst farVerts = frustum.vertices.far;\n\n\t\t\tconst cascadeLine = cascadeLines[ i ];\n\t\t\tconst cascadePlane = cascadePlanes[ i ];\n\t\t\tconst shadowLineGroup = shadowLines[ i ];\n\t\t\tconst shadowLine = shadowLineGroup.children[ 0 ];\n\n\t\t\tcascadeLine.box.min.copy( farVerts[ 2 ] );\n\t\t\tcascadeLine.box.max.copy( farVerts[ 0 ] );\n\t\t\tcascadeLine.box.max.z += 1e-4;\n\n\t\t\tcascadePlane.position.addVectors( farVerts[ 0 ], farVerts[ 2 ] );\n\t\t\tcascadePlane.position.multiplyScalar( 0.5 );\n\t\t\tcascadePlane.scale.subVectors( farVerts[ 0 ], farVerts[ 2 ] );\n\t\t\tcascadePlane.scale.z = 1e-4;\n\n\t\t\tthis.remove( shadowLineGroup );\n\t\t\tshadowLineGroup.position.copy( shadowCam.position );\n\t\t\tshadowLineGroup.quaternion.copy( shadowCam.quaternion );\n\t\t\tshadowLineGroup.scale.copy( shadowCam.scale );\n\t\t\tshadowLineGroup.updateMatrixWorld( true );\n\t\t\tthis.attach( shadowLineGroup );\n\n\t\t\tshadowLine.box.min.set( shadowCam.bottom, shadowCam.left, - shadowCam.far );\n\t\t\tshadowLine.box.max.set( shadowCam.top, shadowCam.right, - shadowCam.near );\n\n\t\t}\n\n\t\tconst nearVerts = mainFrustum.vertices.near;\n\t\tconst farVerts = mainFrustum.vertices.far;\n\t\tfrustumLinePositions.setXYZ( 0, farVerts[ 0 ].x, farVerts[ 0 ].y, farVerts[ 0 ].z );\n\t\tfrustumLinePositions.setXYZ( 1, farVerts[ 3 ].x, farVerts[ 3 ].y, farVerts[ 3 ].z );\n\t\tfrustumLinePositions.setXYZ( 2, farVerts[ 2 ].x, farVerts[ 2 ].y, farVerts[ 2 ].z );\n\t\tfrustumLinePositions.setXYZ( 3, farVerts[ 1 ].x, farVerts[ 1 ].y, farVerts[ 1 ].z );\n\n\t\tfrustumLinePositions.setXYZ( 4, nearVerts[ 0 ].x, nearVerts[ 0 ].y, nearVerts[ 0 ].z );\n\t\tfrustumLinePositions.setXYZ( 5, nearVerts[ 3 ].x, nearVerts[ 3 ].y, nearVerts[ 3 ].z );\n\t\tfrustumLinePositions.setXYZ( 6, nearVerts[ 2 ].x, nearVerts[ 2 ].y, nearVerts[ 2 ].z );\n\t\tfrustumLinePositions.setXYZ( 7, nearVerts[ 1 ].x, nearVerts[ 1 ].y, nearVerts[ 1 ].z );\n\t\tfrustumLinePositions.needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tconst frustumLines = this.frustumLines;\n\t\tconst cascadeLines = this.cascadeLines;\n\t\tconst cascadePlanes = this.cascadePlanes;\n\t\tconst shadowLines = this.shadowLines;\n\n\t\tfrustumLines.geometry.dispose();\n\t\tfrustumLines.material.dispose();\n\n\t\tconst cascades = this.csm.cascades;\n\n\t\tfor ( let i = 0; i < cascades; i ++ ) {\n\n\t\t\tconst cascadeLine = cascadeLines[ i ];\n\t\t\tconst cascadePlane = cascadePlanes[ i ];\n\t\t\tconst shadowLineGroup = shadowLines[ i ];\n\t\t\tconst shadowLine = shadowLineGroup.children[ 0 ];\n\n\t\t\tcascadeLine.dispose(); // Box3Helper\n\n\t\t\tcascadePlane.geometry.dispose();\n\t\t\tcascadePlane.material.dispose();\n\n\t\t\tshadowLine.dispose(); // Box3Helper\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSMHelper };\n", "import {\n\tCurve,\n\tVector3\n} from 'three';\n\n/**\n * A bunch of parametric curves\n *\n * Formulas collected from various sources\n * http://mathworld.wolfram.com/HeartCurve.html\n * http://en.wikipedia.org/wiki/Viviani%27s_curve\n * http://www.mi.sanu.ac.rs/vismath/taylorapril2011/Taylor.pdf\n * https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\n// GrannyKnot\n\nclass GrannyKnot extends Curve {\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt = 2 * Math.PI * t;\n\n\t\tconst x = - 0.22 * Math.cos( t ) - 1.28 * Math.sin( t ) - 0.44 * Math.cos( 3 * t ) - 0.78 * Math.sin( 3 * t );\n\t\tconst y = - 0.1 * Math.cos( 2 * t ) - 0.27 * Math.sin( 2 * t ) + 0.38 * Math.cos( 4 * t ) + 0.46 * Math.sin( 4 * t );\n\t\tconst z = 0.7 * Math.cos( 3 * t ) - 0.4 * Math.sin( 3 * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( 20 );\n\n\t}\n\n}\n\n// HeartCurve\n\nclass HeartCurve extends Curve {\n\n\tconstructor( scale = 5 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt *= 2 * Math.PI;\n\n\t\tconst x = 16 * Math.pow( Math.sin( t ), 3 );\n\t\tconst y = 13 * Math.cos( t ) - 5 * Math.cos( 2 * t ) - 2 * Math.cos( 3 * t ) - Math.cos( 4 * t );\n\t\tconst z = 0;\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// Viviani's Curve\n\nclass VivianiCurve extends Curve {\n\n\tconstructor( scale = 70 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt = t * 4 * Math.PI; // normalized to 0..1\n\t\tconst a = this.scale / 2;\n\n\t\tconst x = a * ( 1 + Math.cos( t ) );\n\t\tconst y = a * Math.sin( t );\n\t\tconst z = 2 * a * Math.sin( t / 2 );\n\n\t\treturn point.set( x, y, z );\n\n\t}\n\n}\n\n// KnotCurve\n\nclass KnotCurve extends Curve {\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt *= 2 * Math.PI;\n\n\t\tconst R = 10;\n\t\tconst s = 50;\n\n\t\tconst x = s * Math.sin( t );\n\t\tconst y = Math.cos( t ) * ( R + s * Math.cos( t ) );\n\t\tconst z = Math.sin( t ) * ( R + s * Math.cos( t ) );\n\n\t\treturn point.set( x, y, z );\n\n\t}\n\n}\n\n\n// HelixCurve\n\nclass HelixCurve extends Curve {\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst a = 30; // radius\n\t\tconst b = 150; // height\n\n\t\tconst t2 = 2 * Math.PI * t * b / 30;\n\n\t\tconst x = Math.cos( t2 ) * a;\n\t\tconst y = Math.sin( t2 ) * a;\n\t\tconst z = b * t;\n\n\t\treturn point.set( x, y, z );\n\n\t}\n\n}\n\n// TrefoilKnot\n\nclass TrefoilKnot extends Curve {\n\n\tconstructor( scale = 10 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt *= Math.PI * 2;\n\n\t\tconst x = ( 2 + Math.cos( 3 * t ) ) * Math.cos( 2 * t );\n\t\tconst y = ( 2 + Math.cos( 3 * t ) ) * Math.sin( 2 * t );\n\t\tconst z = Math.sin( 3 * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// TorusKnot\n\nclass TorusKnot extends Curve {\n\n\tconstructor( scale = 10 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst p = 3;\n\t\tconst q = 4;\n\n\t\tt *= Math.PI * 2;\n\n\t\tconst x = ( 2 + Math.cos( q * t ) ) * Math.cos( p * t );\n\t\tconst y = ( 2 + Math.cos( q * t ) ) * Math.sin( p * t );\n\t\tconst z = Math.sin( q * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// CinquefoilKnot\n\nclass CinquefoilKnot extends Curve {\n\n\tconstructor( scale = 10 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst p = 2;\n\t\tconst q = 5;\n\n\t\tt *= Math.PI * 2;\n\n\t\tconst x = ( 2 + Math.cos( q * t ) ) * Math.cos( p * t );\n\t\tconst y = ( 2 + Math.cos( q * t ) ) * Math.sin( p * t );\n\t\tconst z = Math.sin( q * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n\n// TrefoilPolynomialKnot\n\nclass TrefoilPolynomialKnot extends Curve {\n\n\tconstructor( scale = 10 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt = t * 4 - 2;\n\n\t\tconst x = Math.pow( t, 3 ) - 3 * t;\n\t\tconst y = Math.pow( t, 4 ) - 4 * t * t;\n\t\tconst z = 1 / 5 * Math.pow( t, 5 ) - 2 * t;\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\nfunction scaleTo( x, y, t ) {\n\n\tconst r = y - x;\n\treturn t * r + x;\n\n}\n\n// FigureEightPolynomialKnot\n\nclass FigureEightPolynomialKnot extends Curve {\n\n\tconstructor( scale = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt = scaleTo( - 4, 4, t );\n\n\t\tconst x = 2 / 5 * t * ( t * t - 7 ) * ( t * t - 10 );\n\t\tconst y = Math.pow( t, 4 ) - 13 * t * t;\n\t\tconst z = 1 / 10 * t * ( t * t - 4 ) * ( t * t - 9 ) * ( t * t - 12 );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// DecoratedTorusKnot4a\n\nclass DecoratedTorusKnot4a extends Curve {\n\n\tconstructor( scale = 40 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tt *= Math.PI * 2;\n\n\t\tconst x = Math.cos( 2 * t ) * ( 1 + 0.6 * ( Math.cos( 5 * t ) + 0.75 * Math.cos( 10 * t ) ) );\n\t\tconst y = Math.sin( 2 * t ) * ( 1 + 0.6 * ( Math.cos( 5 * t ) + 0.75 * Math.cos( 10 * t ) ) );\n\t\tconst z = 0.35 * Math.sin( 5 * t );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// DecoratedTorusKnot4b\n\nclass DecoratedTorusKnot4b extends Curve {\n\n\tconstructor( scale = 40 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst fi = t * Math.PI * 2;\n\n\t\tconst x = Math.cos( 2 * fi ) * ( 1 + 0.45 * Math.cos( 3 * fi ) + 0.4 * Math.cos( 9 * fi ) );\n\t\tconst y = Math.sin( 2 * fi ) * ( 1 + 0.45 * Math.cos( 3 * fi ) + 0.4 * Math.cos( 9 * fi ) );\n\t\tconst z = 0.2 * Math.sin( 9 * fi );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n\n// DecoratedTorusKnot5a\n\nclass DecoratedTorusKnot5a extends Curve {\n\n\tconstructor( scale = 40 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst fi = t * Math.PI * 2;\n\n\t\tconst x = Math.cos( 3 * fi ) * ( 1 + 0.3 * Math.cos( 5 * fi ) + 0.5 * Math.cos( 10 * fi ) );\n\t\tconst y = Math.sin( 3 * fi ) * ( 1 + 0.3 * Math.cos( 5 * fi ) + 0.5 * Math.cos( 10 * fi ) );\n\t\tconst z = 0.2 * Math.sin( 20 * fi );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\n// DecoratedTorusKnot5c\n\nclass DecoratedTorusKnot5c extends Curve {\n\n\tconstructor( scale = 40 ) {\n\n\t\tsuper();\n\n\t\tthis.scale = scale;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst fi = t * Math.PI * 2;\n\n\t\tconst x = Math.cos( 4 * fi ) * ( 1 + 0.5 * ( Math.cos( 5 * fi ) + 0.4 * Math.cos( 20 * fi ) ) );\n\t\tconst y = Math.sin( 4 * fi ) * ( 1 + 0.5 * ( Math.cos( 5 * fi ) + 0.4 * Math.cos( 20 * fi ) ) );\n\t\tconst z = 0.35 * Math.sin( 15 * fi );\n\n\t\treturn point.set( x, y, z ).multiplyScalar( this.scale );\n\n\t}\n\n}\n\nexport {\n\tGrannyKnot,\n\tHeartCurve,\n\tVivianiCurve,\n\tKnotCurve,\n\tHelixCurve,\n\tTrefoilKnot,\n\tTorusKnot,\n\tCinquefoilKnot,\n\tTrefoilPolynomialKnot,\n\tFigureEightPolynomialKnot,\n\tDecoratedTorusKnot4a,\n\tDecoratedTorusKnot4b,\n\tDecoratedTorusKnot5a,\n\tDecoratedTorusKnot5c\n};\n", "import {\n\tVector3,\n\tVector4\n} from 'three';\n\n/**\n * NURBS utils\n *\n * See NURBSCurve and NURBSSurface.\n **/\n\n\n/**************************************************************\n *\tNURBS Utils\n **************************************************************/\n\n/*\nFinds knot vector span.\n\np : degree\nu : parametric value\nU : knot vector\n\nreturns the span\n*/\nfunction findSpan( p, u, U ) {\n\n\tconst n = U.length - p - 1;\n\n\tif ( u >= U[ n ] ) {\n\n\t\treturn n - 1;\n\n\t}\n\n\tif ( u <= U[ p ] ) {\n\n\t\treturn p;\n\n\t}\n\n\tlet low = p;\n\tlet high = n;\n\tlet mid = Math.floor( ( low + high ) / 2 );\n\n\twhile ( u < U[ mid ] || u >= U[ mid + 1 ] ) {\n\n\t\tif ( u < U[ mid ] ) {\n\n\t\t\thigh = mid;\n\n\t\t} else {\n\n\t\t\tlow = mid;\n\n\t\t}\n\n\t\tmid = Math.floor( ( low + high ) / 2 );\n\n\t}\n\n\treturn mid;\n\n}\n\n\n/*\nCalculate basis functions. See The NURBS Book, page 70, algorithm A2.2\n\nspan : span in which u lies\nu : parametric point\np : degree\nU : knot vector\n\nreturns array[p+1] with basis functions values.\n*/\nfunction calcBasisFunctions( span, u, p, U ) {\n\n\tconst N = [];\n\tconst left = [];\n\tconst right = [];\n\tN[ 0 ] = 1.0;\n\n\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\tleft[ j ] = u - U[ span + 1 - j ];\n\t\tright[ j ] = U[ span + j ] - u;\n\n\t\tlet saved = 0.0;\n\n\t\tfor ( let r = 0; r < j; ++ r ) {\n\n\t\t\tconst rv = right[ r + 1 ];\n\t\t\tconst lv = left[ j - r ];\n\t\t\tconst temp = N[ r ] / ( rv + lv );\n\t\t\tN[ r ] = saved + rv * temp;\n\t\t\tsaved = lv * temp;\n\n\t\t}\n\n\t\tN[ j ] = saved;\n\n\t}\n\n\treturn N;\n\n}\n\n\n/*\nCalculate B-Spline curve points. See The NURBS Book, page 82, algorithm A3.1.\n\np : degree of B-Spline\nU : knot vector\nP : control points (x, y, z, w)\nu : parametric point\n\nreturns point for given u\n*/\nfunction calcBSplinePoint( p, U, P, u ) {\n\n\tconst span = findSpan( p, u, U );\n\tconst N = calcBasisFunctions( span, u, p, U );\n\tconst C = new Vector4( 0, 0, 0, 0 );\n\n\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\tconst point = P[ span - p + j ];\n\t\tconst Nj = N[ j ];\n\t\tconst wNj = point.w * Nj;\n\t\tC.x += point.x * wNj;\n\t\tC.y += point.y * wNj;\n\t\tC.z += point.z * wNj;\n\t\tC.w += point.w * Nj;\n\n\t}\n\n\treturn C;\n\n}\n\n\n/*\nCalculate basis functions derivatives. See The NURBS Book, page 72, algorithm A2.3.\n\nspan : span in which u lies\nu : parametric point\np : degree\nn : number of derivatives to calculate\nU : knot vector\n\nreturns array[n+1][p+1] with basis functions derivatives\n*/\nfunction calcBasisFunctionDerivatives( span, u, p, n, U ) {\n\n\tconst zeroArr = [];\n\tfor ( let i = 0; i <= p; ++ i )\n\t\tzeroArr[ i ] = 0.0;\n\n\tconst ders = [];\n\n\tfor ( let i = 0; i <= n; ++ i )\n\t\tders[ i ] = zeroArr.slice( 0 );\n\n\tconst ndu = [];\n\n\tfor ( let i = 0; i <= p; ++ i )\n\t\tndu[ i ] = zeroArr.slice( 0 );\n\n\tndu[ 0 ][ 0 ] = 1.0;\n\n\tconst left = zeroArr.slice( 0 );\n\tconst right = zeroArr.slice( 0 );\n\n\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\tleft[ j ] = u - U[ span + 1 - j ];\n\t\tright[ j ] = U[ span + j ] - u;\n\n\t\tlet saved = 0.0;\n\n\t\tfor ( let r = 0; r < j; ++ r ) {\n\n\t\t\tconst rv = right[ r + 1 ];\n\t\t\tconst lv = left[ j - r ];\n\t\t\tndu[ j ][ r ] = rv + lv;\n\n\t\t\tconst temp = ndu[ r ][ j - 1 ] / ndu[ j ][ r ];\n\t\t\tndu[ r ][ j ] = saved + rv * temp;\n\t\t\tsaved = lv * temp;\n\n\t\t}\n\n\t\tndu[ j ][ j ] = saved;\n\n\t}\n\n\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\tders[ 0 ][ j ] = ndu[ j ][ p ];\n\n\t}\n\n\tfor ( let r = 0; r <= p; ++ r ) {\n\n\t\tlet s1 = 0;\n\t\tlet s2 = 1;\n\n\t\tconst a = [];\n\t\tfor ( let i = 0; i <= p; ++ i ) {\n\n\t\t\ta[ i ] = zeroArr.slice( 0 );\n\n\t\t}\n\n\t\ta[ 0 ][ 0 ] = 1.0;\n\n\t\tfor ( let k = 1; k <= n; ++ k ) {\n\n\t\t\tlet d = 0.0;\n\t\t\tconst rk = r - k;\n\t\t\tconst pk = p - k;\n\n\t\t\tif ( r >= k ) {\n\n\t\t\t\ta[ s2 ][ 0 ] = a[ s1 ][ 0 ] / ndu[ pk + 1 ][ rk ];\n\t\t\t\td = a[ s2 ][ 0 ] * ndu[ rk ][ pk ];\n\n\t\t\t}\n\n\t\t\tconst j1 = ( rk >= - 1 ) ? 1 : - rk;\n\t\t\tconst j2 = ( r - 1 <= pk ) ? k - 1 : p - r;\n\n\t\t\tfor ( let j = j1; j <= j2; ++ j ) {\n\n\t\t\t\ta[ s2 ][ j ] = ( a[ s1 ][ j ] - a[ s1 ][ j - 1 ] ) / ndu[ pk + 1 ][ rk + j ];\n\t\t\t\td += a[ s2 ][ j ] * ndu[ rk + j ][ pk ];\n\n\t\t\t}\n\n\t\t\tif ( r <= pk ) {\n\n\t\t\t\ta[ s2 ][ k ] = - a[ s1 ][ k - 1 ] / ndu[ pk + 1 ][ r ];\n\t\t\t\td += a[ s2 ][ k ] * ndu[ r ][ pk ];\n\n\t\t\t}\n\n\t\t\tders[ k ][ r ] = d;\n\n\t\t\tconst j = s1;\n\t\t\ts1 = s2;\n\t\t\ts2 = j;\n\n\t\t}\n\n\t}\n\n\tlet r = p;\n\n\tfor ( let k = 1; k <= n; ++ k ) {\n\n\t\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\t\tders[ k ][ j ] *= r;\n\n\t\t}\n\n\t\tr *= p - k;\n\n\t}\n\n\treturn ders;\n\n}\n\n\n/*\n\tCalculate derivatives of a B-Spline. See The NURBS Book, page 93, algorithm A3.2.\n\n\tp : degree\n\tU : knot vector\n\tP : control points\n\tu : Parametric points\n\tnd : number of derivatives\n\n\treturns array[d+1] with derivatives\n\t*/\nfunction calcBSplineDerivatives( p, U, P, u, nd ) {\n\n\tconst du = nd < p ? nd : p;\n\tconst CK = [];\n\tconst span = findSpan( p, u, U );\n\tconst nders = calcBasisFunctionDerivatives( span, u, p, du, U );\n\tconst Pw = [];\n\n\tfor ( let i = 0; i < P.length; ++ i ) {\n\n\t\tconst point = P[ i ].clone();\n\t\tconst w = point.w;\n\n\t\tpoint.x *= w;\n\t\tpoint.y *= w;\n\t\tpoint.z *= w;\n\n\t\tPw[ i ] = point;\n\n\t}\n\n\tfor ( let k = 0; k <= du; ++ k ) {\n\n\t\tconst point = Pw[ span - p ].clone().multiplyScalar( nders[ k ][ 0 ] );\n\n\t\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\t\tpoint.add( Pw[ span - p + j ].clone().multiplyScalar( nders[ k ][ j ] ) );\n\n\t\t}\n\n\t\tCK[ k ] = point;\n\n\t}\n\n\tfor ( let k = du + 1; k <= nd + 1; ++ k ) {\n\n\t\tCK[ k ] = new Vector4( 0, 0, 0 );\n\n\t}\n\n\treturn CK;\n\n}\n\n\n/*\nCalculate \"K over I\"\n\nreturns k!/(i!(k-i)!)\n*/\nfunction calcKoverI( k, i ) {\n\n\tlet nom = 1;\n\n\tfor ( let j = 2; j <= k; ++ j ) {\n\n\t\tnom *= j;\n\n\t}\n\n\tlet denom = 1;\n\n\tfor ( let j = 2; j <= i; ++ j ) {\n\n\t\tdenom *= j;\n\n\t}\n\n\tfor ( let j = 2; j <= k - i; ++ j ) {\n\n\t\tdenom *= j;\n\n\t}\n\n\treturn nom / denom;\n\n}\n\n\n/*\nCalculate derivatives (0-nd) of rational curve. See The NURBS Book, page 127, algorithm A4.2.\n\nPders : result of function calcBSplineDerivatives\n\nreturns array with derivatives for rational curve.\n*/\nfunction calcRationalCurveDerivatives( Pders ) {\n\n\tconst nd = Pders.length;\n\tconst Aders = [];\n\tconst wders = [];\n\n\tfor ( let i = 0; i < nd; ++ i ) {\n\n\t\tconst point = Pders[ i ];\n\t\tAders[ i ] = new Vector3( point.x, point.y, point.z );\n\t\twders[ i ] = point.w;\n\n\t}\n\n\tconst CK = [];\n\n\tfor ( let k = 0; k < nd; ++ k ) {\n\n\t\tconst v = Aders[ k ].clone();\n\n\t\tfor ( let i = 1; i <= k; ++ i ) {\n\n\t\t\tv.sub( CK[ k - i ].clone().multiplyScalar( calcKoverI( k, i ) * wders[ i ] ) );\n\n\t\t}\n\n\t\tCK[ k ] = v.divideScalar( wders[ 0 ] );\n\n\t}\n\n\treturn CK;\n\n}\n\n\n/*\nCalculate NURBS curve derivatives. See The NURBS Book, page 127, algorithm A4.2.\n\np : degree\nU : knot vector\nP : control points in homogeneous space\nu : parametric points\nnd : number of derivatives\n\nreturns array with derivatives.\n*/\nfunction calcNURBSDerivatives( p, U, P, u, nd ) {\n\n\tconst Pders = calcBSplineDerivatives( p, U, P, u, nd );\n\treturn calcRationalCurveDerivatives( Pders );\n\n}\n\n\n/*\nCalculate rational B-Spline surface point. See The NURBS Book, page 134, algorithm A4.3.\n\np, q : degrees of B-Spline surface\nU, V : knot vectors\nP : control points (x, y, z, w)\nu, v : parametric values\n\nreturns point for given (u, v)\n*/\nfunction calcSurfacePoint( p, q, U, V, P, u, v, target ) {\n\n\tconst uspan = findSpan( p, u, U );\n\tconst vspan = findSpan( q, v, V );\n\tconst Nu = calcBasisFunctions( uspan, u, p, U );\n\tconst Nv = calcBasisFunctions( vspan, v, q, V );\n\tconst temp = [];\n\n\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\ttemp[ l ] = new Vector4( 0, 0, 0, 0 );\n\t\tfor ( let k = 0; k <= p; ++ k ) {\n\n\t\t\tconst point = P[ uspan - p + k ][ vspan - q + l ].clone();\n\t\t\tconst w = point.w;\n\t\t\tpoint.x *= w;\n\t\t\tpoint.y *= w;\n\t\t\tpoint.z *= w;\n\t\t\ttemp[ l ].add( point.multiplyScalar( Nu[ k ] ) );\n\n\t\t}\n\n\t}\n\n\tconst Sw = new Vector4( 0, 0, 0, 0 );\n\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\tSw.add( temp[ l ].multiplyScalar( Nv[ l ] ) );\n\n\t}\n\n\tSw.divideScalar( Sw.w );\n\ttarget.set( Sw.x, Sw.y, Sw.z );\n\n}\n\n/*\nCalculate rational B-Spline volume point. See The NURBS Book, page 134, algorithm A4.3.\n\np, q, r : degrees of B-Splinevolume\nU, V, W : knot vectors\nP : control points (x, y, z, w)\nu, v, w : parametric values\n\nreturns point for given (u, v, w)\n*/\nfunction calcVolumePoint( p, q, r, U, V, W, P, u, v, w, target ) {\n\n\tconst uspan = findSpan( p, u, U );\n\tconst vspan = findSpan( q, v, V );\n\tconst wspan = findSpan( r, w, W );\n\tconst Nu = calcBasisFunctions( uspan, u, p, U );\n\tconst Nv = calcBasisFunctions( vspan, v, q, V );\n\tconst Nw = calcBasisFunctions( wspan, w, r, W );\n\tconst temp = [];\n\n\tfor ( let m = 0; m <= r; ++ m ) {\n\n\t\ttemp[ m ] = [];\n\n\t\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\t\ttemp[ m ][ l ] = new Vector4( 0, 0, 0, 0 );\n\t\t\tfor ( let k = 0; k <= p; ++ k ) {\n\n\t\t\t\tconst point = P[ uspan - p + k ][ vspan - q + l ][ wspan - r + m ].clone();\n\t\t\t\tconst w = point.w;\n\t\t\t\tpoint.x *= w;\n\t\t\t\tpoint.y *= w;\n\t\t\t\tpoint.z *= w;\n\t\t\t\ttemp[ m ][ l ].add( point.multiplyScalar( Nu[ k ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\tconst Sw = new Vector4( 0, 0, 0, 0 );\n\tfor ( let m = 0; m <= r; ++ m ) {\n\t\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\t\tSw.add( temp[ m ][ l ].multiplyScalar( Nw[ m ] ).multiplyScalar( Nv[ l ] ) );\n\n\t\t}\n\t}\n\n\tSw.divideScalar( Sw.w );\n\ttarget.set( Sw.x, Sw.y, Sw.z );\n\n}\n\n\nexport {\n\tfindSpan,\n\tcalcBasisFunctions,\n\tcalcBSplinePoint,\n\tcalcBasisFunctionDerivatives,\n\tcalcBSplineDerivatives,\n\tcalcKoverI,\n\tcalcRationalCurveDerivatives,\n\tcalcNURBSDerivatives,\n\tcalcSurfacePoint,\n\tcalcVolumePoint,\n};\n", "import {\n\tCurve,\n\tVector3,\n\tVector4\n} from 'three';\nimport * as NURBSUtils from '../curves/NURBSUtils.js';\n\n/**\n * NURBS curve object\n *\n * Derives from Curve, overriding getPoint and getTangent.\n *\n * Implementation is based on (x, y [, z=0 [, w=1]]) control points with w=weight.\n *\n **/\n\nclass NURBSCurve extends Curve {\n\n\tconstructor(\n\t\tdegree,\n\t\tknots /* array of reals */,\n\t\tcontrolPoints /* array of Vector(2|3|4) */,\n\t\tstartKnot /* index in knots */,\n\t\tendKnot /* index in knots */\n\t) {\n\n\t\tsuper();\n\n\t\tthis.degree = degree;\n\t\tthis.knots = knots;\n\t\tthis.controlPoints = [];\n\t\t// Used by periodic NURBS to remove hidden spans\n\t\tthis.startKnot = startKnot || 0;\n\t\tthis.endKnot = endKnot || ( this.knots.length - 1 );\n\n\t\tfor ( let i = 0; i < controlPoints.length; ++ i ) {\n\n\t\t\t// ensure Vector4 for control points\n\t\t\tconst point = controlPoints[ i ];\n\t\t\tthis.controlPoints[ i ] = new Vector4( point.x, point.y, point.z, point.w );\n\n\t\t}\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst u = this.knots[ this.startKnot ] + t * ( this.knots[ this.endKnot ] - this.knots[ this.startKnot ] ); // linear mapping t->u\n\n\t\t// following results in (wx, wy, wz, w) homogeneous point\n\t\tconst hpoint = NURBSUtils.calcBSplinePoint( this.degree, this.knots, this.controlPoints, u );\n\n\t\tif ( hpoint.w !== 1.0 ) {\n\n\t\t\t// project to 3D space: (wx, wy, wz, w) -> (x, y, z, 1)\n\t\t\thpoint.divideScalar( hpoint.w );\n\n\t\t}\n\n\t\treturn point.set( hpoint.x, hpoint.y, hpoint.z );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\tconst tangent = optionalTarget;\n\n\t\tconst u = this.knots[ 0 ] + t * ( this.knots[ this.knots.length - 1 ] - this.knots[ 0 ] );\n\t\tconst ders = NURBSUtils.calcNURBSDerivatives( this.degree, this.knots, this.controlPoints, u, 1 );\n\t\ttangent.copy( ders[ 1 ] ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n}\n\nexport { NURBSCurve };\n", "import {\n\tVector4\n} from 'three';\nimport * as NURBSUtils from '../curves/NURBSUtils.js';\n\n/**\n * NURBS surface object\n *\n * Implementation is based on (x, y [, z=0 [, w=1]]) control points with w=weight.\n **/\n\nclass NURBSSurface {\n\n\tconstructor( degree1, degree2, knots1, knots2 /* arrays of reals */, controlPoints /* array^2 of Vector(2|3|4) */ ) {\n\n\t\tthis.degree1 = degree1;\n\t\tthis.degree2 = degree2;\n\t\tthis.knots1 = knots1;\n\t\tthis.knots2 = knots2;\n\t\tthis.controlPoints = [];\n\n\t\tconst len1 = knots1.length - degree1 - 1;\n\t\tconst len2 = knots2.length - degree2 - 1;\n\n\t\t// ensure Vector4 for control points\n\t\tfor ( let i = 0; i < len1; ++ i ) {\n\n\t\t\tthis.controlPoints[ i ] = [];\n\n\t\t\tfor ( let j = 0; j < len2; ++ j ) {\n\n\t\t\t\tconst point = controlPoints[ i ][ j ];\n\t\t\t\tthis.controlPoints[ i ][ j ] = new Vector4( point.x, point.y, point.z, point.w );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetPoint( t1, t2, target ) {\n\n\t\tconst u = this.knots1[ 0 ] + t1 * ( this.knots1[ this.knots1.length - 1 ] - this.knots1[ 0 ] ); // linear mapping t1->u\n\t\tconst v = this.knots2[ 0 ] + t2 * ( this.knots2[ this.knots2.length - 1 ] - this.knots2[ 0 ] ); // linear mapping t2->u\n\n\t\tNURBSUtils.calcSurfacePoint( this.degree1, this.degree2, this.knots1, this.knots2, this.controlPoints, u, v, target );\n\n\t}\n\n}\n\nexport { NURBSSurface };\n", "import {\n\tVector4\n} from 'three';\nimport * as NURBSUtils from '../curves/NURBSUtils.js';\n\n/**\n * NURBS volume object\n *\n * Implementation is based on (x, y, z [, w=1]]) control points with w=weight.\n **/\n\nclass NURBSVolume {\n\n\tconstructor( degree1, degree2, degree3, knots1, knots2, knots3 /* arrays of reals */, controlPoints /* array^3 of Vector(2|3|4) */ ) {\n\n\t\tthis.degree1 = degree1;\n\t\tthis.degree2 = degree2;\n\t\tthis.degree3 = degree3;\n\t\tthis.knots1 = knots1;\n\t\tthis.knots2 = knots2;\n\t\tthis.knots3 = knots3;\n\t\tthis.controlPoints = [];\n\n\t\tconst len1 = knots1.length - degree1 - 1;\n\t\tconst len2 = knots2.length - degree2 - 1;\n\t\tconst len3 = knots3.length - degree3 - 1;\n\n\t\t// ensure Vector4 for control points\n\t\tfor ( let i = 0; i < len1; ++ i ) {\n\n\t\t\tthis.controlPoints[ i ] = [];\n\n\t\t\tfor ( let j = 0; j < len2; ++ j ) {\n\n\t\t\t\tthis.controlPoints[ i ][ j ] = [];\n\n\t\t\t\tfor ( let k = 0; k < len3; ++ k ) {\n\n\t\t\t\t\tconst point = controlPoints[ i ][ j ][ k ];\n\t\t\t\t\tthis.controlPoints[ i ][ j ][ k ] = new Vector4( point.x, point.y, point.z, point.w );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetPoint( t1, t2, t3, target ) {\n\n\t\tconst u = this.knots1[ 0 ] + t1 * ( this.knots1[ this.knots1.length - 1 ] - this.knots1[ 0 ] ); // linear mapping t1->u\n\t\tconst v = this.knots2[ 0 ] + t2 * ( this.knots2[ this.knots2.length - 1 ] - this.knots2[ 0 ] ); // linear mapping t2->v\n\t\tconst w = this.knots3[ 0 ] + t3 * ( this.knots3[ this.knots3.length - 1 ] - this.knots3[ 0 ] ); // linear mapping t3->w\n\n\t\tNURBSUtils.calcVolumePoint( this.degree1, this.degree2, this.degree3, this.knots1, this.knots2, this.knots3, this.controlPoints, u, v, w, target );\n\n\t}\n\n}\n\nexport { NURBSVolume };\n", "import {\n\tLinearFilter,\n\tMatrix3,\n\tMesh,\n\tNearestFilter,\n\tOrthographicCamera,\n\tPlaneGeometry,\n\tRGBAFormat,\n\tScene,\n\tShaderMaterial,\n\tStereoCamera,\n\tWebGLRenderTarget\n} from 'three';\n\nclass AnaglyphEffect {\n\n\tconstructor( renderer, width = 512, height = 512 ) {\n\n\t\t// Dubois matrices from https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.6968&rep=rep1&type=pdf#page=4\n\n\t\tthis.colorMatrixLeft = new Matrix3().fromArray( [\n\t\t\t0.456100, - 0.0400822, - 0.0152161,\n\t\t\t0.500484, - 0.0378246, - 0.0205971,\n\t\t\t0.176381, - 0.0157589, - 0.00546856\n\t\t] );\n\n\t\tthis.colorMatrixRight = new Matrix3().fromArray( [\n\t\t\t- 0.0434706, 0.378476, - 0.0721527,\n\t\t\t- 0.0879388, 0.73364, - 0.112961,\n\t\t\t- 0.00155529, - 0.0184503, 1.2264\n\t\t] );\n\n\t\tconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\tconst _scene = new Scene();\n\n\t\tconst _stereo = new StereoCamera();\n\n\t\tconst _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\tconst _renderTargetL = new WebGLRenderTarget( width, height, _params );\n\t\tconst _renderTargetR = new WebGLRenderTarget( width, height, _params );\n\n\t\tconst _material = new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\n\t\t\t\t'mapLeft': { value: _renderTargetL.texture },\n\t\t\t\t'mapRight': { value: _renderTargetR.texture },\n\n\t\t\t\t'colorMatrixLeft': { value: this.colorMatrixLeft },\n\t\t\t\t'colorMatrixRight': { value: this.colorMatrixRight }\n\n\t\t\t},\n\n\t\t\tvertexShader: [\n\n\t\t\t\t'varying vec2 vUv;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvUv = vec2( uv.x, uv.y );',\n\t\t\t\t'\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ),\n\n\t\t\tfragmentShader: [\n\n\t\t\t\t'uniform sampler2D mapLeft;',\n\t\t\t\t'uniform sampler2D mapRight;',\n\t\t\t\t'varying vec2 vUv;',\n\n\t\t\t\t'uniform mat3 colorMatrixLeft;',\n\t\t\t\t'uniform mat3 colorMatrixRight;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvec2 uv = vUv;',\n\n\t\t\t\t'\tvec4 colorL = texture2D( mapLeft, uv );',\n\t\t\t\t'\tvec4 colorR = texture2D( mapRight, uv );',\n\n\t\t\t\t'\tvec3 color = clamp(',\n\t\t\t\t'\t\t\tcolorMatrixLeft * colorL.rgb +',\n\t\t\t\t'\t\t\tcolorMatrixRight * colorR.rgb, 0., 1. );',\n\n\t\t\t\t'\tgl_FragColor = vec4(',\n\t\t\t\t'\t\t\tcolor.r, color.g, color.b,',\n\t\t\t\t'\t\t\tmax( colorL.a, colorR.a ) );',\n\n\t\t\t\t'\t#include ',\n\t\t\t\t'\t#include ',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' )\n\n\t\t} );\n\n\t\tconst _mesh = new Mesh( new PlaneGeometry( 2, 2 ), _material );\n\t\t_scene.add( _mesh );\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\trenderer.setSize( width, height );\n\n\t\t\tconst pixelRatio = renderer.getPixelRatio();\n\n\t\t\t_renderTargetL.setSize( width * pixelRatio, height * pixelRatio );\n\t\t\t_renderTargetR.setSize( width * pixelRatio, height * pixelRatio );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_stereo.update( camera );\n\n\t\t\trenderer.setRenderTarget( _renderTargetL );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\t\trenderer.setRenderTarget( _renderTargetR );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.render( _scene, _camera );\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\t_renderTargetL.dispose();\n\t\t\t_renderTargetR.dispose();\n\t\t\t_mesh.geometry.dispose();\n\t\t\t_mesh.material.dispose();\n\n\t\t};\n\n\t}\n\n}\n\nexport { AnaglyphEffect };\n", "/**\n * Ascii generation is based on https://github.com/hassadee/jsascii/blob/master/jsascii.js\n *\n * 16 April 2012 - @blurspline\n */\n\nclass AsciiEffect {\n\n\tconstructor( renderer, charSet = ' .:-=+*#%@', options = {} ) {\n\n\t\t// ' .,:;=|iI+hHOE#`$';\n\t\t// darker bolder character set from https://github.com/saw/Canvas-ASCII-Art/\n\t\t// ' .\\'`^\",:;Il!i~+_-?][}{1)(|/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$'.split('');\n\n\t\t// Some ASCII settings\n\n\t\tconst fResolution = options[ 'resolution' ] || 0.15; // Higher for more details\n\t\tconst iScale = options[ 'scale' ] || 1;\n\t\tconst bColor = options[ 'color' ] || false; // nice but slows down rendering!\n\t\tconst bAlpha = options[ 'alpha' ] || false; // Transparency\n\t\tconst bBlock = options[ 'block' ] || false; // blocked characters. like good O dos\n\t\tconst bInvert = options[ 'invert' ] || false; // black is white, white is black\n\t\tconst strResolution = options[ 'strResolution' ] || 'low';\n\n\t\tlet width, height;\n\n\t\tconst domElement = document.createElement( 'div' );\n\t\tdomElement.style.cursor = 'default';\n\n\t\tconst oAscii = document.createElement( 'table' );\n\t\tdomElement.appendChild( oAscii );\n\n\t\tlet iWidth, iHeight;\n\t\tlet oImg;\n\n\t\tthis.setSize = function ( w, h ) {\n\n\t\t\twidth = w;\n\t\t\theight = h;\n\n\t\t\trenderer.setSize( w, h );\n\n\t\t\tinitAsciiSize();\n\n\t\t};\n\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\trenderer.render( scene, camera );\n\t\t\tasciifyImage( oAscii );\n\n\t\t};\n\n\t\tthis.domElement = domElement;\n\n\n\t\t// Throw in ascii library from https://github.com/hassadee/jsascii/blob/master/jsascii.js (MIT License)\n\n\t\tfunction initAsciiSize() {\n\n\t\t\tiWidth = Math.floor( width * fResolution );\n\t\t\tiHeight = Math.floor( height * fResolution );\n\n\t\t\toCanvas.width = iWidth;\n\t\t\toCanvas.height = iHeight;\n\t\t\t// oCanvas.style.display = \"none\";\n\t\t\t// oCanvas.style.width = iWidth;\n\t\t\t// oCanvas.style.height = iHeight;\n\n\t\t\toImg = renderer.domElement;\n\n\t\t\tif ( oImg.style.backgroundColor ) {\n\n\t\t\t\toAscii.rows[ 0 ].cells[ 0 ].style.backgroundColor = oImg.style.backgroundColor;\n\t\t\t\toAscii.rows[ 0 ].cells[ 0 ].style.color = oImg.style.color;\n\n\t\t\t}\n\n\t\t\toAscii.cellSpacing = 0;\n\t\t\toAscii.cellPadding = 0;\n\n\t\t\tconst oStyle = oAscii.style;\n\t\t\toStyle.whiteSpace = 'pre';\n\t\t\toStyle.margin = '0px';\n\t\t\toStyle.padding = '0px';\n\t\t\toStyle.letterSpacing = fLetterSpacing + 'px';\n\t\t\toStyle.fontFamily = strFont;\n\t\t\toStyle.fontSize = fFontSize + 'px';\n\t\t\toStyle.lineHeight = fLineHeight + 'px';\n\t\t\toStyle.textAlign = 'left';\n\t\t\toStyle.textDecoration = 'none';\n\n\t\t}\n\n\n\t\tconst aDefaultCharList = ( ' .,:;i1tfLCG08@' ).split( '' );\n\t\tconst aDefaultColorCharList = ( ' CGO08@' ).split( '' );\n\t\tconst strFont = 'courier new, monospace';\n\n\t\tconst oCanvasImg = renderer.domElement;\n\n\t\tconst oCanvas = document.createElement( 'canvas' );\n\t\tif ( ! oCanvas.getContext ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst oCtx = oCanvas.getContext( '2d' );\n\t\tif ( ! oCtx.getImageData ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet aCharList = ( bColor ? aDefaultColorCharList : aDefaultCharList );\n\n\t\tif ( charSet ) aCharList = charSet;\n\n\t\t// Setup dom\n\n\t\tconst fFontSize = ( 2 / fResolution ) * iScale;\n\t\tconst fLineHeight = ( 2 / fResolution ) * iScale;\n\n\t\t// adjust letter-spacing for all combinations of scale and resolution to get it to fit the image width.\n\n\t\tlet fLetterSpacing = 0;\n\n\t\tif ( strResolution == 'low' ) {\n\n\t\t\tswitch ( iScale ) {\n\n\t\t\t\tcase 1 : fLetterSpacing = - 1; break;\n\t\t\t\tcase 2 :\n\t\t\t\tcase 3 : fLetterSpacing = - 2.1; break;\n\t\t\t\tcase 4 : fLetterSpacing = - 3.1; break;\n\t\t\t\tcase 5 : fLetterSpacing = - 4.15; break;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( strResolution == 'medium' ) {\n\n\t\t\tswitch ( iScale ) {\n\n\t\t\t\tcase 1 : fLetterSpacing = 0; break;\n\t\t\t\tcase 2 : fLetterSpacing = - 1; break;\n\t\t\t\tcase 3 : fLetterSpacing = - 1.04; break;\n\t\t\t\tcase 4 :\n\t\t\t\tcase 5 : fLetterSpacing = - 2.1; break;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( strResolution == 'high' ) {\n\n\t\t\tswitch ( iScale ) {\n\n\t\t\t\tcase 1 :\n\t\t\t\tcase 2 : fLetterSpacing = 0; break;\n\t\t\t\tcase 3 :\n\t\t\t\tcase 4 :\n\t\t\t\tcase 5 : fLetterSpacing = - 1; break;\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// can't get a span or div to flow like an img element, but a table works?\n\n\n\t\t// convert img element to ascii\n\n\t\tfunction asciifyImage( oAscii ) {\n\n\t\t\toCtx.clearRect( 0, 0, iWidth, iHeight );\n\t\t\toCtx.drawImage( oCanvasImg, 0, 0, iWidth, iHeight );\n\t\t\tconst oImgData = oCtx.getImageData( 0, 0, iWidth, iHeight ).data;\n\n\t\t\t// Coloring loop starts now\n\t\t\tlet strChars = '';\n\n\t\t\t// console.time('rendering');\n\n\t\t\tfor ( let y = 0; y < iHeight; y += 2 ) {\n\n\t\t\t\tfor ( let x = 0; x < iWidth; x ++ ) {\n\n\t\t\t\t\tconst iOffset = ( y * iWidth + x ) * 4;\n\n\t\t\t\t\tconst iRed = oImgData[ iOffset ];\n\t\t\t\t\tconst iGreen = oImgData[ iOffset + 1 ];\n\t\t\t\t\tconst iBlue = oImgData[ iOffset + 2 ];\n\t\t\t\t\tconst iAlpha = oImgData[ iOffset + 3 ];\n\t\t\t\t\tlet iCharIdx;\n\n\t\t\t\t\tlet fBrightness;\n\n\t\t\t\t\tfBrightness = ( 0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue ) / 255;\n\t\t\t\t\t// fBrightness = (0.3*iRed + 0.5*iGreen + 0.3*iBlue) / 255;\n\n\t\t\t\t\tif ( iAlpha == 0 ) {\n\n\t\t\t\t\t\t// should calculate alpha instead, but quick hack :)\n\t\t\t\t\t\t//fBrightness *= (iAlpha / 255);\n\t\t\t\t\t\tfBrightness = 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tiCharIdx = Math.floor( ( 1 - fBrightness ) * ( aCharList.length - 1 ) );\n\n\t\t\t\t\tif ( bInvert ) {\n\n\t\t\t\t\t\tiCharIdx = aCharList.length - iCharIdx - 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// good for debugging\n\t\t\t\t\t//fBrightness = Math.floor(fBrightness * 10);\n\t\t\t\t\t//strThisChar = fBrightness;\n\n\t\t\t\t\tlet strThisChar = aCharList[ iCharIdx ];\n\n\t\t\t\t\tif ( strThisChar === undefined || strThisChar == ' ' )\n\t\t\t\t\t\tstrThisChar = ' ';\n\n\t\t\t\t\tif ( bColor ) {\n\n\t\t\t\t\t\tstrChars += '' + strThisChar + '';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstrChars += strThisChar;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstrChars += '
';\n\n\t\t\t}\n\n\t\t\toAscii.innerHTML = `${strChars}`;\n\n\t\t\t// console.timeEnd('rendering');\n\n\t\t\t// return oAscii;\n\n\t\t}\n\n\t}\n\n}\n\nexport { AsciiEffect };\n", "import {\n\tBackSide,\n\tColor,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils\n} from 'three';\n\n/**\n * Reference: https://en.wikipedia.org/wiki/Cel_shading\n *\n * API\n *\n * 1. Traditional\n *\n * const effect = new OutlineEffect( renderer );\n *\n * function render() {\n *\n * \teffect.render( scene, camera );\n *\n * }\n *\n * 2. VR compatible\n *\n * const effect = new OutlineEffect( renderer );\n * let renderingOutline = false;\n *\n * scene.onAfterRender = function () {\n *\n * \tif ( renderingOutline ) return;\n *\n * \trenderingOutline = true;\n *\n * \teffect.renderOutline( scene, camera );\n *\n * \trenderingOutline = false;\n *\n * };\n *\n * function render() {\n *\n * \trenderer.render( scene, camera );\n *\n * }\n *\n * // How to set default outline parameters\n * new OutlineEffect( renderer, {\n * \tdefaultThickness: 0.01,\n * \tdefaultColor: [ 0, 0, 0 ],\n * \tdefaultAlpha: 0.8,\n * \tdefaultKeepAlive: true // keeps outline material in cache even if material is removed from scene\n * } );\n *\n * // How to set outline parameters for each material\n * material.userData.outlineParameters = {\n * \tthickness: 0.01,\n * \tcolor: [ 0, 0, 0 ],\n * \talpha: 0.8,\n * \tvisible: true,\n * \tkeepAlive: true\n * };\n */\n\nclass OutlineEffect {\n\n\tconstructor( renderer, parameters = {} ) {\n\n\t\tthis.enabled = true;\n\n\t\tconst defaultThickness = parameters.defaultThickness !== undefined ? parameters.defaultThickness : 0.003;\n\t\tconst defaultColor = new Color().fromArray( parameters.defaultColor !== undefined ? parameters.defaultColor : [ 0, 0, 0 ] );\n\t\tconst defaultAlpha = parameters.defaultAlpha !== undefined ? parameters.defaultAlpha : 1.0;\n\t\tconst defaultKeepAlive = parameters.defaultKeepAlive !== undefined ? parameters.defaultKeepAlive : false;\n\n\t\t// object.material.uuid -> outlineMaterial or\n\t\t// object.material[ n ].uuid -> outlineMaterial\n\t\t// save at the outline material creation and release\n\t\t// if it's unused removeThresholdCount frames\n\t\t// unless keepAlive is true.\n\t\tconst cache = {};\n\n\t\tconst removeThresholdCount = 60;\n\n\t\t// outlineMaterial.uuid -> object.material or\n\t\t// outlineMaterial.uuid -> object.material[ n ]\n\t\t// save before render and release after render.\n\t\tconst originalMaterials = {};\n\n\t\t// object.uuid -> originalOnBeforeRender\n\t\t// save before render and release after render.\n\t\tconst originalOnBeforeRenders = {};\n\n\t\t//this.cache = cache; // for debug\n\n\t\tconst uniformsOutline = {\n\t\t\toutlineThickness: { value: defaultThickness },\n\t\t\toutlineColor: { value: defaultColor },\n\t\t\toutlineAlpha: { value: defaultAlpha }\n\t\t};\n\n\t\tconst vertexShader = [\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\n\t\t\t'uniform float outlineThickness;',\n\n\t\t\t'vec4 calculateOutline( vec4 pos, vec3 normal, vec4 skinned ) {',\n\t\t\t'\tfloat thickness = outlineThickness;',\n\t\t\t'\tconst float ratio = 1.0;', // TODO: support outline thickness ratio for each vertex\n\t\t\t'\tvec4 pos2 = projectionMatrix * modelViewMatrix * vec4( skinned.xyz + normal, 1.0 );',\n\t\t\t// NOTE: subtract pos2 from pos because BackSide objectNormal is negative\n\t\t\t'\tvec4 norm = normalize( pos - pos2 );',\n\t\t\t'\treturn pos + norm * thickness * pos.w * ratio;',\n\t\t\t'}',\n\n\t\t\t'void main() {',\n\n\t\t\t'\t#include ',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'\tvec3 outlineNormal = - objectNormal;', // the outline material is always rendered with BackSide\n\n\t\t\t'\tgl_Position = calculateOutline( gl_Position, outlineNormal, vec4( transformed, 1.0 ) );',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'}',\n\n\t\t].join( '\\n' );\n\n\t\tconst fragmentShader = [\n\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\t\t\t'#include ',\n\n\t\t\t'uniform vec3 outlineColor;',\n\t\t\t'uniform float outlineAlpha;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'\tgl_FragColor = vec4( outlineColor, outlineAlpha );',\n\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\t\t\t'\t#include ',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' );\n\n\t\tfunction createMaterial() {\n\n\t\t\treturn new ShaderMaterial( {\n\t\t\t\ttype: 'OutlineEffect',\n\t\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\t\tUniformsLib[ 'fog' ],\n\t\t\t\t\tUniformsLib[ 'displacementmap' ],\n\t\t\t\t\tuniformsOutline\n\t\t\t\t] ),\n\t\t\t\tvertexShader: vertexShader,\n\t\t\t\tfragmentShader: fragmentShader,\n\t\t\t\tside: BackSide\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction getOutlineMaterialFromCache( originalMaterial ) {\n\n\t\t\tlet data = cache[ originalMaterial.uuid ];\n\n\t\t\tif ( data === undefined ) {\n\n\t\t\t\tdata = {\n\t\t\t\t\tmaterial: createMaterial(),\n\t\t\t\t\tused: true,\n\t\t\t\t\tkeepAlive: defaultKeepAlive,\n\t\t\t\t\tcount: 0\n\t\t\t\t};\n\n\t\t\t\tcache[ originalMaterial.uuid ] = data;\n\n\t\t\t}\n\n\t\t\tdata.used = true;\n\n\t\t\treturn data.material;\n\n\t\t}\n\n\t\tfunction getOutlineMaterial( originalMaterial ) {\n\n\t\t\tconst outlineMaterial = getOutlineMaterialFromCache( originalMaterial );\n\n\t\t\toriginalMaterials[ outlineMaterial.uuid ] = originalMaterial;\n\n\t\t\tupdateOutlineMaterial( outlineMaterial, originalMaterial );\n\n\t\t\treturn outlineMaterial;\n\n\t\t}\n\n\t\tfunction isCompatible( object ) {\n\n\t\t\tconst geometry = object.geometry;\n\t\t\tconst hasNormals = ( geometry !== undefined ) && ( geometry.attributes.normal !== undefined );\n\n\t\t\treturn ( object.isMesh === true && object.material !== undefined && hasNormals === true );\n\n\t\t}\n\n\t\tfunction setOutlineMaterial( object ) {\n\n\t\t\tif ( isCompatible( object ) === false ) return;\n\n\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = object.material.length; i < il; i ++ ) {\n\n\t\t\t\t\tobject.material[ i ] = getOutlineMaterial( object.material[ i ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = getOutlineMaterial( object.material );\n\n\t\t\t}\n\n\t\t\toriginalOnBeforeRenders[ object.uuid ] = object.onBeforeRender;\n\t\t\tobject.onBeforeRender = onBeforeRender;\n\n\t\t}\n\n\t\tfunction restoreOriginalMaterial( object ) {\n\n\t\t\tif ( isCompatible( object ) === false ) return;\n\n\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = object.material.length; i < il; i ++ ) {\n\n\t\t\t\t\tobject.material[ i ] = originalMaterials[ object.material[ i ].uuid ];\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = originalMaterials[ object.material.uuid ];\n\n\t\t\t}\n\n\t\t\tobject.onBeforeRender = originalOnBeforeRenders[ object.uuid ];\n\n\t\t}\n\n\t\tfunction onBeforeRender( renderer, scene, camera, geometry, material ) {\n\n\t\t\tconst originalMaterial = originalMaterials[ material.uuid ];\n\n\t\t\t// just in case\n\t\t\tif ( originalMaterial === undefined ) return;\n\n\t\t\tupdateUniforms( material, originalMaterial );\n\n\t\t}\n\n\t\tfunction updateUniforms( material, originalMaterial ) {\n\n\t\t\tconst outlineParameters = originalMaterial.userData.outlineParameters;\n\n\t\t\tmaterial.uniforms.outlineAlpha.value = originalMaterial.opacity;\n\n\t\t\tif ( outlineParameters !== undefined ) {\n\n\t\t\t\tif ( outlineParameters.thickness !== undefined ) material.uniforms.outlineThickness.value = outlineParameters.thickness;\n\t\t\t\tif ( outlineParameters.color !== undefined ) material.uniforms.outlineColor.value.fromArray( outlineParameters.color );\n\t\t\t\tif ( outlineParameters.alpha !== undefined ) material.uniforms.outlineAlpha.value = outlineParameters.alpha;\n\n\t\t\t}\n\n\t\t\tif ( originalMaterial.displacementMap ) {\n\n\t\t\t\tmaterial.uniforms.displacementMap.value = originalMaterial.displacementMap;\n\t\t\t\tmaterial.uniforms.displacementScale.value = originalMaterial.displacementScale;\n\t\t\t\tmaterial.uniforms.displacementBias.value = originalMaterial.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateOutlineMaterial( material, originalMaterial ) {\n\n\t\t\tif ( material.name === 'invisible' ) return;\n\n\t\t\tconst outlineParameters = originalMaterial.userData.outlineParameters;\n\n\t\t\tmaterial.fog = originalMaterial.fog;\n\t\t\tmaterial.toneMapped = originalMaterial.toneMapped;\n\t\t\tmaterial.premultipliedAlpha = originalMaterial.premultipliedAlpha;\n\t\t\tmaterial.displacementMap = originalMaterial.displacementMap;\n\n\t\t\tif ( outlineParameters !== undefined ) {\n\n\t\t\t\tif ( originalMaterial.visible === false ) {\n\n\t\t\t\t\tmaterial.visible = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterial.visible = ( outlineParameters.visible !== undefined ) ? outlineParameters.visible : true;\n\n\t\t\t\t}\n\n\t\t\t\tmaterial.transparent = ( outlineParameters.alpha !== undefined && outlineParameters.alpha < 1.0 ) ? true : originalMaterial.transparent;\n\n\t\t\t\tif ( outlineParameters.keepAlive !== undefined ) cache[ originalMaterial.uuid ].keepAlive = outlineParameters.keepAlive;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.transparent = originalMaterial.transparent;\n\t\t\t\tmaterial.visible = originalMaterial.visible;\n\n\t\t\t}\n\n\t\t\tif ( originalMaterial.wireframe === true || originalMaterial.depthTest === false ) material.visible = false;\n\n\t\t\tif ( originalMaterial.clippingPlanes ) {\n\n\t\t\t\tmaterial.clipping = true;\n\n\t\t\t\tmaterial.clippingPlanes = originalMaterial.clippingPlanes;\n\t\t\t\tmaterial.clipIntersection = originalMaterial.clipIntersection;\n\t\t\t\tmaterial.clipShadows = originalMaterial.clipShadows;\n\n\t\t\t}\n\n\t\t\tmaterial.version = originalMaterial.version; // update outline material if necessary\n\n\t\t}\n\n\t\tfunction cleanupCache() {\n\n\t\t\tlet keys;\n\n\t\t\t// clear originialMaterials\n\t\t\tkeys = Object.keys( originalMaterials );\n\n\t\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\toriginalMaterials[ keys[ i ] ] = undefined;\n\n\t\t\t}\n\n\t\t\t// clear originalOnBeforeRenders\n\t\t\tkeys = Object.keys( originalOnBeforeRenders );\n\n\t\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\toriginalOnBeforeRenders[ keys[ i ] ] = undefined;\n\n\t\t\t}\n\n\t\t\t// remove unused outlineMaterial from cache\n\t\t\tkeys = Object.keys( cache );\n\n\t\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\tconst key = keys[ i ];\n\n\t\t\t\tif ( cache[ key ].used === false ) {\n\n\t\t\t\t\tcache[ key ].count ++;\n\n\t\t\t\t\tif ( cache[ key ].keepAlive === false && cache[ key ].count > removeThresholdCount ) {\n\n\t\t\t\t\t\tdelete cache[ key ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcache[ key ].used = false;\n\t\t\t\t\tcache[ key ].count = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( this.enabled === false ) {\n\n\t\t\t\trenderer.render( scene, camera );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst currentAutoClear = renderer.autoClear;\n\t\t\trenderer.autoClear = this.autoClear;\n\n\t\t\trenderer.render( scene, camera );\n\n\t\t\trenderer.autoClear = currentAutoClear;\n\n\t\t\tthis.renderOutline( scene, camera );\n\n\t\t};\n\n\t\tthis.renderOutline = function ( scene, camera ) {\n\n\t\t\tconst currentAutoClear = renderer.autoClear;\n\t\t\tconst currentSceneAutoUpdate = scene.matrixWorldAutoUpdate;\n\t\t\tconst currentSceneBackground = scene.background;\n\t\t\tconst currentShadowMapEnabled = renderer.shadowMap.enabled;\n\n\t\t\tscene.matrixWorldAutoUpdate = false;\n\t\t\tscene.background = null;\n\t\t\trenderer.autoClear = false;\n\t\t\trenderer.shadowMap.enabled = false;\n\n\t\t\tscene.traverse( setOutlineMaterial );\n\n\t\t\trenderer.render( scene, camera );\n\n\t\t\tscene.traverse( restoreOriginalMaterial );\n\n\t\t\tcleanupCache();\n\n\t\t\tscene.matrixWorldAutoUpdate = currentSceneAutoUpdate;\n\t\t\tscene.background = currentSceneBackground;\n\t\t\trenderer.autoClear = currentAutoClear;\n\t\t\trenderer.shadowMap.enabled = currentShadowMapEnabled;\n\n\t\t};\n\n\t\t/*\n\t\t * See #9918\n\t\t *\n\t\t * The following property copies and wrapper methods enable\n\t\t * OutlineEffect to be called from other *Effect, like\n\t\t *\n\t\t * effect = new StereoEffect( new OutlineEffect( renderer ) );\n\t\t *\n\t\t * function render () {\n\t\t *\n\t \t * \teffect.render( scene, camera );\n\t\t *\n\t\t * }\n\t\t */\n\t\tthis.autoClear = renderer.autoClear;\n\t\tthis.domElement = renderer.domElement;\n\t\tthis.shadowMap = renderer.shadowMap;\n\n\t\tthis.clear = function ( color, depth, stencil ) {\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn renderer.getPixelRatio();\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\trenderer.setPixelRatio( value );\n\n\t\t};\n\n\t\tthis.getSize = function ( target ) {\n\n\t\t\treturn renderer.getSize( target );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\t\trenderer.setSize( width, height, updateStyle );\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\trenderer.setViewport( x, y, width, height );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\trenderer.setScissor( x, y, width, height );\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\trenderer.setScissorTest( boolean );\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t};\n\n\t}\n\n}\n\nexport { OutlineEffect };\n", "import {\n\tLinearFilter,\n\tMesh,\n\tNearestFilter,\n\tOrthographicCamera,\n\tPlaneGeometry,\n\tRGBAFormat,\n\tScene,\n\tShaderMaterial,\n\tStereoCamera,\n\tWebGLRenderTarget\n} from 'three';\n\nclass ParallaxBarrierEffect {\n\n\tconstructor( renderer ) {\n\n\t\tconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\tconst _scene = new Scene();\n\n\t\tconst _stereo = new StereoCamera();\n\n\t\tconst _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\tconst _renderTargetL = new WebGLRenderTarget( 512, 512, _params );\n\t\tconst _renderTargetR = new WebGLRenderTarget( 512, 512, _params );\n\n\t\tconst _material = new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\n\t\t\t\t'mapLeft': { value: _renderTargetL.texture },\n\t\t\t\t'mapRight': { value: _renderTargetR.texture }\n\n\t\t\t},\n\n\t\t\tvertexShader: [\n\n\t\t\t\t'varying vec2 vUv;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvUv = vec2( uv.x, uv.y );',\n\t\t\t\t'\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ),\n\n\t\t\tfragmentShader: [\n\n\t\t\t\t'uniform sampler2D mapLeft;',\n\t\t\t\t'uniform sampler2D mapRight;',\n\t\t\t\t'varying vec2 vUv;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvec2 uv = vUv;',\n\n\t\t\t\t'\tif ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {',\n\n\t\t\t\t'\t\tgl_FragColor = texture2D( mapLeft, uv );',\n\n\t\t\t\t'\t} else {',\n\n\t\t\t\t'\t\tgl_FragColor = texture2D( mapRight, uv );',\n\n\t\t\t\t'\t}',\n\n\t\t\t\t'\t#include ',\n\t\t\t\t'\t#include ',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' )\n\n\t\t} );\n\n\t\tconst mesh = new Mesh( new PlaneGeometry( 2, 2 ), _material );\n\t\t_scene.add( mesh );\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\trenderer.setSize( width, height );\n\n\t\t\tconst pixelRatio = renderer.getPixelRatio();\n\n\t\t\t_renderTargetL.setSize( width * pixelRatio, height * pixelRatio );\n\t\t\t_renderTargetR.setSize( width * pixelRatio, height * pixelRatio );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_stereo.update( camera );\n\n\t\t\trenderer.setRenderTarget( _renderTargetL );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\t\trenderer.setRenderTarget( _renderTargetR );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.render( _scene, _camera );\n\n\t\t};\n\n\t}\n\n}\n\nexport { ParallaxBarrierEffect };\n", "import {\n\tPerspectiveCamera,\n\tQuaternion,\n\tVector3\n} from 'three';\n\n/**\n * peppers ghost effect based on http://www.instructables.com/id/Reflective-Prism/?ALLSTEPS\n */\n\nclass PeppersGhostEffect {\n\n\tconstructor( renderer ) {\n\n\t\tconst scope = this;\n\n\t\tscope.cameraDistance = 15;\n\t\tscope.reflectFromAbove = false;\n\n\t\t// Internals\n\t\tlet _halfWidth, _width, _height;\n\n\t\tconst _cameraF = new PerspectiveCamera(); //front\n\t\tconst _cameraB = new PerspectiveCamera(); //back\n\t\tconst _cameraL = new PerspectiveCamera(); //left\n\t\tconst _cameraR = new PerspectiveCamera(); //right\n\n\t\tconst _position = new Vector3();\n\t\tconst _quaternion = new Quaternion();\n\t\tconst _scale = new Vector3();\n\n\t\t// Initialization\n\t\trenderer.autoClear = false;\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_halfWidth = width / 2;\n\t\t\tif ( width < height ) {\n\n\t\t\t\t_width = width / 3;\n\t\t\t\t_height = width / 3;\n\n\t\t\t} else {\n\n\t\t\t\t_width = height / 3;\n\t\t\t\t_height = height / 3;\n\n\t\t\t}\n\n\t\t\trenderer.setSize( width, height );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tcamera.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t\t// front\n\t\t\t_cameraF.position.copy( _position );\n\t\t\t_cameraF.quaternion.copy( _quaternion );\n\t\t\t_cameraF.translateZ( scope.cameraDistance );\n\t\t\t_cameraF.lookAt( scene.position );\n\n\t\t\t// back\n\t\t\t_cameraB.position.copy( _position );\n\t\t\t_cameraB.quaternion.copy( _quaternion );\n\t\t\t_cameraB.translateZ( - ( scope.cameraDistance ) );\n\t\t\t_cameraB.lookAt( scene.position );\n\t\t\t_cameraB.rotation.z += 180 * ( Math.PI / 180 );\n\n\t\t\t// left\n\t\t\t_cameraL.position.copy( _position );\n\t\t\t_cameraL.quaternion.copy( _quaternion );\n\t\t\t_cameraL.translateX( - ( scope.cameraDistance ) );\n\t\t\t_cameraL.lookAt( scene.position );\n\t\t\t_cameraL.rotation.x += 90 * ( Math.PI / 180 );\n\n\t\t\t// right\n\t\t\t_cameraR.position.copy( _position );\n\t\t\t_cameraR.quaternion.copy( _quaternion );\n\t\t\t_cameraR.translateX( scope.cameraDistance );\n\t\t\t_cameraR.lookAt( scene.position );\n\t\t\t_cameraR.rotation.x += 90 * ( Math.PI / 180 );\n\n\n\t\t\trenderer.clear();\n\t\t\trenderer.setScissorTest( true );\n\n\t\t\trenderer.setScissor( _halfWidth - ( _width / 2 ), ( _height * 2 ), _width, _height );\n\t\t\trenderer.setViewport( _halfWidth - ( _width / 2 ), ( _height * 2 ), _width, _height );\n\n\t\t\tif ( scope.reflectFromAbove ) {\n\n\t\t\t\trenderer.render( scene, _cameraB );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( scene, _cameraF );\n\n\t\t\t}\n\n\t\t\trenderer.setScissor( _halfWidth - ( _width / 2 ), 0, _width, _height );\n\t\t\trenderer.setViewport( _halfWidth - ( _width / 2 ), 0, _width, _height );\n\n\t\t\tif ( scope.reflectFromAbove ) {\n\n\t\t\t\trenderer.render( scene, _cameraF );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( scene, _cameraB );\n\n\t\t\t}\n\n\t\t\trenderer.setScissor( _halfWidth - ( _width / 2 ) - _width, _height, _width, _height );\n\t\t\trenderer.setViewport( _halfWidth - ( _width / 2 ) - _width, _height, _width, _height );\n\n\t\t\tif ( scope.reflectFromAbove ) {\n\n\t\t\t\trenderer.render( scene, _cameraR );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( scene, _cameraL );\n\n\t\t\t}\n\n\t\t\trenderer.setScissor( _halfWidth + ( _width / 2 ), _height, _width, _height );\n\t\t\trenderer.setViewport( _halfWidth + ( _width / 2 ), _height, _width, _height );\n\n\t\t\tif ( scope.reflectFromAbove ) {\n\n\t\t\t\trenderer.render( scene, _cameraL );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( scene, _cameraR );\n\n\t\t\t}\n\n\t\t\trenderer.setScissorTest( false );\n\n\t\t};\n\n\t}\n\n}\n\nexport { PeppersGhostEffect };\n", "import {\n\tStereoCamera,\n\tVector2\n} from 'three';\n\nclass StereoEffect {\n\n\tconstructor( renderer ) {\n\n\t\tconst _stereo = new StereoCamera();\n\t\t_stereo.aspect = 0.5;\n\t\tconst size = new Vector2();\n\n\t\tthis.setEyeSeparation = function ( eyeSep ) {\n\n\t\t\t_stereo.eyeSep = eyeSep;\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\trenderer.setSize( width, height );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_stereo.update( camera );\n\n\t\t\trenderer.getSize( size );\n\n\t\t\tif ( renderer.autoClear ) renderer.clear();\n\t\t\trenderer.setScissorTest( true );\n\n\t\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\t\trenderer.setScissorTest( false );\n\n\t\t};\n\n\t}\n\n}\n\nexport { StereoEffect };\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tMesh,\n\tMeshLambertMaterial,\n\tMeshStandardMaterial,\n\tPointLight,\n\tScene,\n} from 'three';\n\nclass DebugEnvironment extends Scene {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tconst geometry = new BoxGeometry();\n\t\tgeometry.deleteAttribute( 'uv' );\n\t\tconst roomMaterial = new MeshStandardMaterial( { metalness: 0, side: BackSide } );\n\t\tconst room = new Mesh( geometry, roomMaterial );\n\t\troom.scale.setScalar( 10 );\n\t\tthis.add( room );\n\n\t\tconst mainLight = new PointLight( 0xffffff, 50, 0, 2 );\n\t\tthis.add( mainLight );\n\n\t\tconst material1 = new MeshLambertMaterial( { color: 0xff0000, emissive: 0xffffff, emissiveIntensity: 10 } );\n\n\t\tconst light1 = new Mesh( geometry, material1 );\n\t\tlight1.position.set( - 5, 2, 0 );\n\t\tlight1.scale.set( 0.1, 1, 1 );\n\t\tthis.add( light1 );\n\n\t\tconst material2 = new MeshLambertMaterial( { color: 0x00ff00, emissive: 0xffffff, emissiveIntensity: 10 } );\n\n\t\tconst light2 = new Mesh( geometry, material2 );\n\t\tlight2.position.set( 0, 5, 0 );\n\t\tlight2.scale.set( 1, 0.1, 1 );\n\t\tthis.add( light2 );\n\n\t\tconst material3 = new MeshLambertMaterial( { color: 0x0000ff, emissive: 0xffffff, emissiveIntensity: 10 } );\n\n\t\tconst light3 = new Mesh( geometry, material3 );\n\t\tlight3.position.set( 2, 1, 5 );\n\t\tlight3.scale.set( 1.5, 2, 0.1 );\n\t\tthis.add( light3 );\n\n\t}\n\n}\n\nexport { DebugEnvironment };\n", "/**\n * https://github.com/google/model-viewer/blob/master/packages/model-viewer/src/three-components/EnvironmentScene.ts\n */\n\nimport {\n \tBackSide,\n \tBoxGeometry,\n \tMesh,\n\tMeshBasicMaterial,\n \tMeshStandardMaterial,\n \tPointLight,\n \tScene,\n} from 'three';\n\nclass RoomEnvironment extends Scene {\n\n\tconstructor( renderer = null ) {\n\n\t\tsuper();\n\n\t\tconst geometry = new BoxGeometry();\n\t\tgeometry.deleteAttribute( 'uv' );\n\n\t\tconst roomMaterial = new MeshStandardMaterial( { side: BackSide } );\n\t\tconst boxMaterial = new MeshStandardMaterial();\n\n\t\tconst mainLight = new PointLight( 0xffffff, 900, 28, 2 );\n\t\tmainLight.position.set( 0.418, 16.199, 0.300 );\n\t\tthis.add( mainLight );\n\n\t\tconst room = new Mesh( geometry, roomMaterial );\n\t\troom.position.set( - 0.757, 13.219, 0.717 );\n\t\troom.scale.set( 31.713, 28.305, 28.591 );\n\t\tthis.add( room );\n\n\t\tconst box1 = new Mesh( geometry, boxMaterial );\n\t\tbox1.position.set( - 10.906, 2.009, 1.846 );\n\t\tbox1.rotation.set( 0, - 0.195, 0 );\n\t\tbox1.scale.set( 2.328, 7.905, 4.651 );\n\t\tthis.add( box1 );\n\n\t\tconst box2 = new Mesh( geometry, boxMaterial );\n\t\tbox2.position.set( - 5.607, - 0.754, - 0.758 );\n\t\tbox2.rotation.set( 0, 0.994, 0 );\n\t\tbox2.scale.set( 1.970, 1.534, 3.955 );\n\t\tthis.add( box2 );\n\n\t\tconst box3 = new Mesh( geometry, boxMaterial );\n\t\tbox3.position.set( 6.167, 0.857, 7.803 );\n\t\tbox3.rotation.set( 0, 0.561, 0 );\n\t\tbox3.scale.set( 3.927, 6.285, 3.687 );\n\t\tthis.add( box3 );\n\n\t\tconst box4 = new Mesh( geometry, boxMaterial );\n\t\tbox4.position.set( - 2.017, 0.018, 6.124 );\n\t\tbox4.rotation.set( 0, 0.333, 0 );\n\t\tbox4.scale.set( 2.002, 4.566, 2.064 );\n\t\tthis.add( box4 );\n\n\t\tconst box5 = new Mesh( geometry, boxMaterial );\n\t\tbox5.position.set( 2.291, - 0.756, - 2.621 );\n\t\tbox5.rotation.set( 0, - 0.286, 0 );\n\t\tbox5.scale.set( 1.546, 1.552, 1.496 );\n\t\tthis.add( box5 );\n\n\t\tconst box6 = new Mesh( geometry, boxMaterial );\n\t\tbox6.position.set( - 2.193, - 0.369, - 5.547 );\n\t\tbox6.rotation.set( 0, 0.516, 0 );\n\t\tbox6.scale.set( 3.875, 3.487, 2.986 );\n\t\tthis.add( box6 );\n\n\n\t\t// -x right\n\t\tconst light1 = new Mesh( geometry, createAreaLightMaterial( 50 ) );\n\t\tlight1.position.set( - 16.116, 14.37, 8.208 );\n\t\tlight1.scale.set( 0.1, 2.428, 2.739 );\n\t\tthis.add( light1 );\n\n\t\t// -x left\n\t\tconst light2 = new Mesh( geometry, createAreaLightMaterial( 50 ) );\n\t\tlight2.position.set( - 16.109, 18.021, - 8.207 );\n\t\tlight2.scale.set( 0.1, 2.425, 2.751 );\n\t\tthis.add( light2 );\n\n\t\t// +x\n\t\tconst light3 = new Mesh( geometry, createAreaLightMaterial( 17 ) );\n\t\tlight3.position.set( 14.904, 12.198, - 1.832 );\n\t\tlight3.scale.set( 0.15, 4.265, 6.331 );\n\t\tthis.add( light3 );\n\n\t\t// +z\n\t\tconst light4 = new Mesh( geometry, createAreaLightMaterial( 43 ) );\n\t\tlight4.position.set( - 0.462, 8.89, 14.520 );\n\t\tlight4.scale.set( 4.38, 5.441, 0.088 );\n\t\tthis.add( light4 );\n\n\t\t// -z\n\t\tconst light5 = new Mesh( geometry, createAreaLightMaterial( 20 ) );\n\t\tlight5.position.set( 3.235, 11.486, - 12.541 );\n\t\tlight5.scale.set( 2.5, 2.0, 0.1 );\n\t\tthis.add( light5 );\n\n\t\t// +y\n\t\tconst light6 = new Mesh( geometry, createAreaLightMaterial( 100 ) );\n\t\tlight6.position.set( 0.0, 20.0, 0.0 );\n\t\tlight6.scale.set( 1.0, 0.1, 1.0 );\n\t\tthis.add( light6 );\n\n\t}\n\n\tdispose() {\n\n\t\tconst resources = new Set();\n\n\t\tthis.traverse( ( object ) => {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tresources.add( object.geometry );\n\t\t\t\tresources.add( object.material );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tfor ( const resource of resources ) {\n\n\t\t\tresource.dispose();\n\n\t\t}\n\n\t}\n\n}\n\nfunction createAreaLightMaterial( intensity ) {\n\n\tconst material = new MeshBasicMaterial();\n\tmaterial.color.setScalar( intensity );\n\treturn material;\n\n}\n\nexport { RoomEnvironment };\n", "import { Color } from 'three';\n\n/**\n * Export draco compressed files from threejs geometry objects.\n *\n * Draco files are compressed and usually are smaller than conventional 3D file formats.\n *\n * The exporter receives a options object containing\n * - decodeSpeed, indicates how to tune the encoder regarding decode speed (0 gives better speed but worst quality)\n * - encodeSpeed, indicates how to tune the encoder parameters (0 gives better speed but worst quality)\n * - encoderMethod\n * - quantization, indicates the presision of each type of data stored in the draco file in the order (POSITION, NORMAL, COLOR, TEX_COORD, GENERIC)\n * - exportUvs\n * - exportNormals\n * - exportColor\n */\n\n/* global DracoEncoderModule */\n\nclass DRACOExporter {\n\n\tparse( object, options = {} ) {\n\n\t\toptions = Object.assign( {\n\t\t\tdecodeSpeed: 5,\n\t\t\tencodeSpeed: 5,\n\t\t\tencoderMethod: DRACOExporter.MESH_EDGEBREAKER_ENCODING,\n\t\t\tquantization: [ 16, 8, 8, 8, 8 ],\n\t\t\texportUvs: true,\n\t\t\texportNormals: true,\n\t\t\texportColor: false,\n\t\t}, options );\n\n\t\tif ( DracoEncoderModule === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOExporter: required the draco_encoder to work.' );\n\n\t\t}\n\n\t\tconst geometry = object.geometry;\n\n\t\tconst dracoEncoder = DracoEncoderModule();\n\t\tconst encoder = new dracoEncoder.Encoder();\n\t\tlet builder;\n\t\tlet dracoObject;\n\n\t\tif ( object.isMesh === true ) {\n\n\t\t\tbuilder = new dracoEncoder.MeshBuilder();\n\t\t\tdracoObject = new dracoEncoder.Mesh();\n\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tbuilder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array );\n\n\t\t\tconst faces = geometry.getIndex();\n\n\t\t\tif ( faces !== null ) {\n\n\t\t\t\tbuilder.AddFacesToMesh( dracoObject, faces.count / 3, faces.array );\n\n\t\t\t} else {\n\n\t\t\t\tconst faces = new ( vertices.count > 65535 ? Uint32Array : Uint16Array )( vertices.count );\n\n\t\t\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\t\t\tfaces[ i ] = i;\n\n\t\t\t\t}\n\n\t\t\t\tbuilder.AddFacesToMesh( dracoObject, vertices.count, faces );\n\n\t\t\t}\n\n\t\t\tif ( options.exportNormals === true ) {\n\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\n\t\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\t\tbuilder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.NORMAL, normals.count, normals.itemSize, normals.array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( options.exportUvs === true ) {\n\n\t\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\n\t\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\t\tbuilder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.TEX_COORD, uvs.count, uvs.itemSize, uvs.array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( options.exportColor === true ) {\n\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\n\t\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\t\tconst array = createVertexColorSRGBArray( colors );\n\n\t\t\t\t\tbuilder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints === true ) {\n\n\t\t\tbuilder = new dracoEncoder.PointCloudBuilder();\n\t\t\tdracoObject = new dracoEncoder.PointCloud();\n\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tbuilder.AddFloatAttribute( dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array );\n\n\t\t\tif ( options.exportColor === true ) {\n\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\n\t\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\t\tconst array = createVertexColorSRGBArray( colors );\n\n\t\t\t\t\tbuilder.AddFloatAttribute( dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'DRACOExporter: Unsupported object type.' );\n\n\t\t}\n\n\t\t//Compress using draco encoder\n\n\t\tconst encodedData = new dracoEncoder.DracoInt8Array();\n\n\t\t//Sets the desired encoding and decoding speed for the given options from 0 (slowest speed, but the best compression) to 10 (fastest, but the worst compression).\n\n\t\tconst encodeSpeed = ( options.encodeSpeed !== undefined ) ? options.encodeSpeed : 5;\n\t\tconst decodeSpeed = ( options.decodeSpeed !== undefined ) ? options.decodeSpeed : 5;\n\n\t\tencoder.SetSpeedOptions( encodeSpeed, decodeSpeed );\n\n\t\t// Sets the desired encoding method for a given geometry.\n\n\t\tif ( options.encoderMethod !== undefined ) {\n\n\t\t\tencoder.SetEncodingMethod( options.encoderMethod );\n\n\t\t}\n\n\t\t// Sets the quantization (number of bits used to represent) compression options for a named attribute.\n\t\t// The attribute values will be quantized in a box defined by the maximum extent of the attribute values.\n\t\tif ( options.quantization !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < 5; i ++ ) {\n\n\t\t\t\tif ( options.quantization[ i ] !== undefined ) {\n\n\t\t\t\t\tencoder.SetAttributeQuantization( i, options.quantization[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet length;\n\n\t\tif ( object.isMesh === true ) {\n\n\t\t\tlength = encoder.EncodeMeshToDracoBuffer( dracoObject, encodedData );\n\n\t\t} else {\n\n\t\t\tlength = encoder.EncodePointCloudToDracoBuffer( dracoObject, true, encodedData );\n\n\t\t}\n\n\t\tdracoEncoder.destroy( dracoObject );\n\n\t\tif ( length === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOExporter: Draco encoding failed.' );\n\n\t\t}\n\n\t\t//Copy encoded data to buffer.\n\t\tconst outputData = new Int8Array( new ArrayBuffer( length ) );\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\toutputData[ i ] = encodedData.GetValue( i );\n\n\t\t}\n\n\t\tdracoEncoder.destroy( encodedData );\n\t\tdracoEncoder.destroy( encoder );\n\t\tdracoEncoder.destroy( builder );\n\n\t\treturn outputData;\n\n\t}\n\n}\n\nfunction createVertexColorSRGBArray( attribute ) {\n\n\t// While .drc files do not specify colorspace, the only 'official' tooling\n\t// is PLY and OBJ converters, which use sRGB. We'll assume sRGB is expected\n\t// for .drc files, but note that Draco buffers embedded in glTF files will\n\t// be Linear-sRGB instead.\n\n\tconst _color = new Color();\n\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst array = new Float32Array( count * itemSize );\n\n\tfor ( let i = 0, il = count; i < il; i ++ ) {\n\n\t\t_color.fromBufferAttribute( attribute, i ).convertLinearToSRGB();\n\n\t\tarray[ i * itemSize ] = _color.r;\n\t\tarray[ i * itemSize + 1 ] = _color.g;\n\t\tarray[ i * itemSize + 2 ] = _color.b;\n\n\t\tif ( itemSize === 4 ) {\n\n\t\t\tarray[ i * itemSize + 3 ] = attribute.getW( i );\n\n\t\t}\n\n\t}\n\n\treturn array;\n\n}\n\n// Encoder methods\n\nDRACOExporter.MESH_EDGEBREAKER_ENCODING = 1;\nDRACOExporter.MESH_SEQUENTIAL_ENCODING = 0;\n\n// Geometry type\n\nDRACOExporter.POINT_CLOUD = 0;\nDRACOExporter.TRIANGULAR_MESH = 1;\n\n// Attribute type\n\nDRACOExporter.INVALID = - 1;\nDRACOExporter.POSITION = 0;\nDRACOExporter.NORMAL = 1;\nDRACOExporter.COLOR = 2;\nDRACOExporter.TEX_COORD = 3;\nDRACOExporter.GENERIC = 4;\n\nexport { DRACOExporter };\n", "/*!\nfflate - fast JavaScript compression/decompression\n\nLicensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE\nversion 0.8.2\n*/\n\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data.length) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush();\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function () { w.postMessage([]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n */\n Deflate.prototype.flush = function () {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n */\n Gzip.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n */\n Zlib.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n", "/**\n * @author sciecode / https://github.com/sciecode\n *\n * EXR format references:\n * \thttps://www.openexr.com/documentation/openexrfilelayout.pdf\n */\n\nimport {\n\tFloatType,\n\tHalfFloatType,\n\tRGBAFormat,\n\tDataUtils,\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\nconst textEncoder = new TextEncoder();\n\nconst NO_COMPRESSION = 0;\nconst ZIPS_COMPRESSION = 2;\nconst ZIP_COMPRESSION = 3;\n\nclass EXRExporter {\n\n\tparse( arg1, arg2, arg3 ) {\n\n\t\tif ( ! arg1 || ! ( arg1.isWebGLRenderer || arg1.isDataTexture ) ) {\n\n\t\t\tthrow Error( 'EXRExporter.parse: Unsupported first parameter, expected instance of WebGLRenderer or DataTexture.' );\n\n\t\t} else if ( arg1.isWebGLRenderer ) {\n\n\t\t\tconst renderer = arg1, renderTarget = arg2, options = arg3;\n\n\t\t\tsupportedRTT( renderTarget );\n\n\t\t\tconst info = buildInfoRTT( renderTarget, options ),\n\t\t\t\tdataBuffer = getPixelData( renderer, renderTarget, info ),\n\t\t\t\trawContentBuffer = reorganizeDataBuffer( dataBuffer, info ),\n\t\t\t\tchunks = compressData( rawContentBuffer, info );\n\n\t\t\treturn fillData( chunks, info );\n\n\t\t} else if ( arg1.isDataTexture ) {\n\n\t\t\tconst texture = arg1, options = arg2;\n\n\t\t\tsupportedDT( texture );\n\n\t\t\tconst info = buildInfoDT( texture, options ),\n\t\t\t\tdataBuffer = texture.image.data,\n\t\t\t\trawContentBuffer = reorganizeDataBuffer( dataBuffer, info ),\n\t\t\t\tchunks = compressData( rawContentBuffer, info );\n\n\t\t\treturn fillData( chunks, info );\n\n\t\t}\n\n\t}\n\n}\n\nfunction supportedRTT( renderTarget ) {\n\n\tif ( ! renderTarget || ! renderTarget.isWebGLRenderTarget ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported second parameter, expected instance of WebGLRenderTarget.' );\n\n\t}\n\n\tif ( renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported render target type, expected instance of WebGLRenderTarget.' );\n\n\t}\n\n\tif ( renderTarget.texture.type !== FloatType && renderTarget.texture.type !== HalfFloatType ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported WebGLRenderTarget texture type.' );\n\n\t}\n\n\tif ( renderTarget.texture.format !== RGBAFormat ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported WebGLRenderTarget texture format, expected RGBAFormat.' );\n\n\t}\n\n}\n\nfunction supportedDT( texture ) {\n\n\tif ( texture.type !== FloatType && texture.type !== HalfFloatType ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported DataTexture texture type.' );\n\n\t}\n\n\tif ( texture.format !== RGBAFormat ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Unsupported DataTexture texture format, expected RGBAFormat.' );\n\n\t}\n\n\tif ( ! texture.image.data ) {\n\n\t\tthrow Error( 'EXRExporter.parse: Invalid DataTexture image data.' );\n\n\t}\n\n\tif ( texture.type === FloatType && texture.image.data.constructor.name !== 'Float32Array' ) {\n\n\t\tthrow Error( 'EXRExporter.parse: DataTexture image data doesn\\'t match type, expected \\'Float32Array\\'.' );\n\n\t}\n\n\tif ( texture.type === HalfFloatType && texture.image.data.constructor.name !== 'Uint16Array' ) {\n\n\t\tthrow Error( 'EXRExporter.parse: DataTexture image data doesn\\'t match type, expected \\'Uint16Array\\'.' );\n\n\t}\n\n}\n\nfunction buildInfoRTT( renderTarget, options = {} ) {\n\n\tconst compressionSizes = {\n\t\t0: 1,\n\t\t2: 1,\n\t\t3: 16\n\t};\n\n\tconst WIDTH = renderTarget.width,\n\t\tHEIGHT = renderTarget.height,\n\t\tTYPE = renderTarget.texture.type,\n\t\tFORMAT = renderTarget.texture.format,\n\t\tCOMPRESSION = ( options.compression !== undefined ) ? options.compression : ZIP_COMPRESSION,\n\t\tEXPORTER_TYPE = ( options.type !== undefined ) ? options.type : HalfFloatType,\n\t\tOUT_TYPE = ( EXPORTER_TYPE === FloatType ) ? 2 : 1,\n\t\tCOMPRESSION_SIZE = compressionSizes[ COMPRESSION ],\n\t\tNUM_CHANNELS = 4;\n\n\treturn {\n\t\twidth: WIDTH,\n\t\theight: HEIGHT,\n\t\ttype: TYPE,\n\t\tformat: FORMAT,\n\t\tcompression: COMPRESSION,\n\t\tblockLines: COMPRESSION_SIZE,\n\t\tdataType: OUT_TYPE,\n\t\tdataSize: 2 * OUT_TYPE,\n\t\tnumBlocks: Math.ceil( HEIGHT / COMPRESSION_SIZE ),\n\t\tnumInputChannels: 4,\n\t\tnumOutputChannels: NUM_CHANNELS,\n\t};\n\n}\n\nfunction buildInfoDT( texture, options = {} ) {\n\n\tconst compressionSizes = {\n\t\t0: 1,\n\t\t2: 1,\n\t\t3: 16\n\t};\n\n\tconst WIDTH = texture.image.width,\n\t\tHEIGHT = texture.image.height,\n\t\tTYPE = texture.type,\n\t\tFORMAT = texture.format,\n\t\tCOMPRESSION = ( options.compression !== undefined ) ? options.compression : ZIP_COMPRESSION,\n\t\tEXPORTER_TYPE = ( options.type !== undefined ) ? options.type : HalfFloatType,\n\t\tOUT_TYPE = ( EXPORTER_TYPE === FloatType ) ? 2 : 1,\n\t\tCOMPRESSION_SIZE = compressionSizes[ COMPRESSION ],\n\t\tNUM_CHANNELS = 4;\n\n\treturn {\n\t\twidth: WIDTH,\n\t\theight: HEIGHT,\n\t\ttype: TYPE,\n\t\tformat: FORMAT,\n\t\tcompression: COMPRESSION,\n\t\tblockLines: COMPRESSION_SIZE,\n\t\tdataType: OUT_TYPE,\n\t\tdataSize: 2 * OUT_TYPE,\n\t\tnumBlocks: Math.ceil( HEIGHT / COMPRESSION_SIZE ),\n\t\tnumInputChannels: 4,\n\t\tnumOutputChannels: NUM_CHANNELS,\n\t};\n\n}\n\nfunction getPixelData( renderer, rtt, info ) {\n\n\tlet dataBuffer;\n\n\tif ( info.type === FloatType ) {\n\n\t\tdataBuffer = new Float32Array( info.width * info.height * info.numInputChannels );\n\n\t} else {\n\n\t\tdataBuffer = new Uint16Array( info.width * info.height * info.numInputChannels );\n\n\t}\n\n\trenderer.readRenderTargetPixels( rtt, 0, 0, info.width, info.height, dataBuffer );\n\n\treturn dataBuffer;\n\n}\n\nfunction reorganizeDataBuffer( inBuffer, info ) {\n\n\tconst w = info.width,\n\t\th = info.height,\n\t\tdec = { r: 0, g: 0, b: 0, a: 0 },\n\t\toffset = { value: 0 },\n\t\tcOffset = ( info.numOutputChannels == 4 ) ? 1 : 0,\n\t\tgetValue = ( info.type == FloatType ) ? getFloat32 : getFloat16,\n\t\tsetValue = ( info.dataType == 1 ) ? setFloat16 : setFloat32,\n\t\toutBuffer = new Uint8Array( info.width * info.height * info.numOutputChannels * info.dataSize ),\n\t\tdv = new DataView( outBuffer.buffer );\n\n\tfor ( let y = 0; y < h; ++ y ) {\n\n\t\tfor ( let x = 0; x < w; ++ x ) {\n\n\t\t\tconst i = y * w * 4 + x * 4;\n\n\t\t\tconst r = getValue( inBuffer, i );\n\t\t\tconst g = getValue( inBuffer, i + 1 );\n\t\t\tconst b = getValue( inBuffer, i + 2 );\n\t\t\tconst a = getValue( inBuffer, i + 3 );\n\n\t\t\tconst line = ( h - y - 1 ) * w * ( 3 + cOffset ) * info.dataSize;\n\n\t\t\tdecodeLinear( dec, r, g, b, a );\n\n\t\t\toffset.value = line + x * info.dataSize;\n\t\t\tsetValue( dv, dec.a, offset );\n\n\t\t\toffset.value = line + ( cOffset ) * w * info.dataSize + x * info.dataSize;\n\t\t\tsetValue( dv, dec.b, offset );\n\n\t\t\toffset.value = line + ( 1 + cOffset ) * w * info.dataSize + x * info.dataSize;\n\t\t\tsetValue( dv, dec.g, offset );\n\n\t\t\toffset.value = line + ( 2 + cOffset ) * w * info.dataSize + x * info.dataSize;\n\t\t\tsetValue( dv, dec.r, offset );\n\n\t\t}\n\n\t}\n\n\treturn outBuffer;\n\n}\n\nfunction compressData( inBuffer, info ) {\n\n\tlet compress,\n\t\ttmpBuffer,\n\t\tsum = 0;\n\n\tconst chunks = { data: new Array(), totalSize: 0 },\n\t\tsize = info.width * info.numOutputChannels * info.blockLines * info.dataSize;\n\n\tswitch ( info.compression ) {\n\n\t\tcase 0:\n\t\t\tcompress = compressNONE;\n\t\t\tbreak;\n\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tcompress = compressZIP;\n\t\t\tbreak;\n\n\t}\n\n\tif ( info.compression !== 0 ) {\n\n\t\ttmpBuffer = new Uint8Array( size );\n\n\t}\n\n\tfor ( let i = 0; i < info.numBlocks; ++ i ) {\n\n\t\tconst arr = inBuffer.subarray( size * i, size * ( i + 1 ) );\n\n\t\tconst block = compress( arr, tmpBuffer );\n\n\t\tsum += block.length;\n\n\t\tchunks.data.push( { dataChunk: block, size: block.length } );\n\n\t}\n\n\tchunks.totalSize = sum;\n\n\treturn chunks;\n\n}\n\nfunction compressNONE( data ) {\n\n\treturn data;\n\n}\n\nfunction compressZIP( data, tmpBuffer ) {\n\n\t//\n\t// Reorder the pixel data.\n\t//\n\n\tlet t1 = 0,\n\t\tt2 = Math.floor( ( data.length + 1 ) / 2 ),\n\t\ts = 0;\n\n\tconst stop = data.length - 1;\n\n\twhile ( true ) {\n\n\t\tif ( s > stop ) break;\n\t\ttmpBuffer[ t1 ++ ] = data[ s ++ ];\n\n\t\tif ( s > stop ) break;\n\t\ttmpBuffer[ t2 ++ ] = data[ s ++ ];\n\n\t}\n\n\t//\n\t// Predictor.\n\t//\n\n\tlet p = tmpBuffer[ 0 ];\n\n\tfor ( let t = 1; t < tmpBuffer.length; t ++ ) {\n\n\t\tconst d = tmpBuffer[ t ] - p + ( 128 + 256 );\n\t\tp = tmpBuffer[ t ];\n\t\ttmpBuffer[ t ] = d;\n\n\t}\n\n\tconst deflate = fflate.zlibSync( tmpBuffer );\n\n\treturn deflate;\n\n}\n\nfunction fillHeader( outBuffer, chunks, info ) {\n\n\tconst offset = { value: 0 };\n\tconst dv = new DataView( outBuffer.buffer );\n\n\tsetUint32( dv, 20000630, offset ); // magic\n\tsetUint32( dv, 2, offset ); // mask\n\n\t// = HEADER =\n\n\tsetString( dv, 'compression', offset );\n\tsetString( dv, 'compression', offset );\n\tsetUint32( dv, 1, offset );\n\tsetUint8( dv, info.compression, offset );\n\n\tsetString( dv, 'screenWindowCenter', offset );\n\tsetString( dv, 'v2f', offset );\n\tsetUint32( dv, 8, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, 0, offset );\n\n\tsetString( dv, 'screenWindowWidth', offset );\n\tsetString( dv, 'float', offset );\n\tsetUint32( dv, 4, offset );\n\tsetFloat32( dv, 1.0, offset );\n\n\tsetString( dv, 'pixelAspectRatio', offset );\n\tsetString( dv, 'float', offset );\n\tsetUint32( dv, 4, offset );\n\tsetFloat32( dv, 1.0, offset );\n\n\tsetString( dv, 'lineOrder', offset );\n\tsetString( dv, 'lineOrder', offset );\n\tsetUint32( dv, 1, offset );\n\tsetUint8( dv, 0, offset );\n\n\tsetString( dv, 'dataWindow', offset );\n\tsetString( dv, 'box2i', offset );\n\tsetUint32( dv, 16, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, info.width - 1, offset );\n\tsetUint32( dv, info.height - 1, offset );\n\n\tsetString( dv, 'displayWindow', offset );\n\tsetString( dv, 'box2i', offset );\n\tsetUint32( dv, 16, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, 0, offset );\n\tsetUint32( dv, info.width - 1, offset );\n\tsetUint32( dv, info.height - 1, offset );\n\n\tsetString( dv, 'channels', offset );\n\tsetString( dv, 'chlist', offset );\n\tsetUint32( dv, info.numOutputChannels * 18 + 1, offset );\n\n\tsetString( dv, 'A', offset );\n\tsetUint32( dv, info.dataType, offset );\n\toffset.value += 4;\n\tsetUint32( dv, 1, offset );\n\tsetUint32( dv, 1, offset );\n\n\tsetString( dv, 'B', offset );\n\tsetUint32( dv, info.dataType, offset );\n\toffset.value += 4;\n\tsetUint32( dv, 1, offset );\n\tsetUint32( dv, 1, offset );\n\n\tsetString( dv, 'G', offset );\n\tsetUint32( dv, info.dataType, offset );\n\toffset.value += 4;\n\tsetUint32( dv, 1, offset );\n\tsetUint32( dv, 1, offset );\n\n\tsetString( dv, 'R', offset );\n\tsetUint32( dv, info.dataType, offset );\n\toffset.value += 4;\n\tsetUint32( dv, 1, offset );\n\tsetUint32( dv, 1, offset );\n\n\tsetUint8( dv, 0, offset );\n\n\t// null-byte\n\tsetUint8( dv, 0, offset );\n\n\t// = OFFSET TABLE =\n\n\tlet sum = offset.value + info.numBlocks * 8;\n\n\tfor ( let i = 0; i < chunks.data.length; ++ i ) {\n\n\t\tsetUint64( dv, sum, offset );\n\n\t\tsum += chunks.data[ i ].size + 8;\n\n\t}\n\n}\n\nfunction fillData( chunks, info ) {\n\n\tconst TableSize = info.numBlocks * 8,\n\t\tHeaderSize = 259 + ( 18 * info.numOutputChannels ), // 259 + 18 * chlist\n\t\toffset = { value: HeaderSize + TableSize },\n\t\toutBuffer = new Uint8Array( HeaderSize + TableSize + chunks.totalSize + info.numBlocks * 8 ),\n\t\tdv = new DataView( outBuffer.buffer );\n\n\tfillHeader( outBuffer, chunks, info );\n\n\tfor ( let i = 0; i < chunks.data.length; ++ i ) {\n\n\t\tconst data = chunks.data[ i ].dataChunk;\n\t\tconst size = chunks.data[ i ].size;\n\n\t\tsetUint32( dv, i * info.blockLines, offset );\n\t\tsetUint32( dv, size, offset );\n\n\t\toutBuffer.set( data, offset.value );\n\t\toffset.value += size;\n\n\t}\n\n\treturn outBuffer;\n\n}\n\nfunction decodeLinear( dec, r, g, b, a ) {\n\n\tdec.r = r;\n\tdec.g = g;\n\tdec.b = b;\n\tdec.a = a;\n\n}\n\n// function decodeSRGB( dec, r, g, b, a ) {\n\n// \tdec.r = r > 0.04045 ? Math.pow( r * 0.9478672986 + 0.0521327014, 2.4 ) : r * 0.0773993808;\n// \tdec.g = g > 0.04045 ? Math.pow( g * 0.9478672986 + 0.0521327014, 2.4 ) : g * 0.0773993808;\n// \tdec.b = b > 0.04045 ? Math.pow( b * 0.9478672986 + 0.0521327014, 2.4 ) : b * 0.0773993808;\n// \tdec.a = a;\n\n// }\n\n\nfunction setUint8( dv, value, offset ) {\n\n\tdv.setUint8( offset.value, value );\n\n\toffset.value += 1;\n\n}\n\nfunction setUint32( dv, value, offset ) {\n\n\tdv.setUint32( offset.value, value, true );\n\n\toffset.value += 4;\n\n}\n\nfunction setFloat16( dv, value, offset ) {\n\n\tdv.setUint16( offset.value, DataUtils.toHalfFloat( value ), true );\n\n\toffset.value += 2;\n\n}\n\nfunction setFloat32( dv, value, offset ) {\n\n\tdv.setFloat32( offset.value, value, true );\n\n\toffset.value += 4;\n\n}\n\nfunction setUint64( dv, value, offset ) {\n\n\tdv.setBigUint64( offset.value, BigInt( value ), true );\n\n\toffset.value += 8;\n\n}\n\nfunction setString( dv, string, offset ) {\n\n\tconst tmp = textEncoder.encode( string + '\\0' );\n\n\tfor ( let i = 0; i < tmp.length; ++ i ) {\n\n\t\tsetUint8( dv, tmp[ i ], offset );\n\n\t}\n\n}\n\nfunction decodeFloat16( binary ) {\n\n\tconst exponent = ( binary & 0x7C00 ) >> 10,\n\t\tfraction = binary & 0x03FF;\n\n\treturn ( binary >> 15 ? - 1 : 1 ) * (\n\t\texponent ?\n\t\t\t(\n\t\t\t\texponent === 0x1F ?\n\t\t\t\t\tfraction ? NaN : Infinity :\n\t\t\t\t\tMath.pow( 2, exponent - 15 ) * ( 1 + fraction / 0x400 )\n\t\t\t) :\n\t\t\t6.103515625e-5 * ( fraction / 0x400 )\n\t);\n\n}\n\nfunction getFloat16( arr, i ) {\n\n\treturn decodeFloat16( arr[ i ] );\n\n}\n\nfunction getFloat32( arr, i ) {\n\n\treturn arr[ i ];\n\n}\n\nexport { EXRExporter, NO_COMPRESSION, ZIP_COMPRESSION, ZIPS_COMPRESSION };\n", "import {\n\tPlaneGeometry,\n\tShaderMaterial,\n\tUniform,\n\tMesh,\n\tPerspectiveCamera,\n\tScene,\n\tWebGLRenderer,\n\tCanvasTexture,\n\tSRGBColorSpace\n} from 'three';\n\nlet _renderer;\nlet fullscreenQuadGeometry;\nlet fullscreenQuadMaterial;\nlet fullscreenQuad;\n\nexport function decompress( texture, maxTextureSize = Infinity, renderer = null ) {\n\n\tif ( ! fullscreenQuadGeometry ) fullscreenQuadGeometry = new PlaneGeometry( 2, 2, 1, 1 );\n\tif ( ! fullscreenQuadMaterial ) fullscreenQuadMaterial = new ShaderMaterial( {\n\t\tuniforms: { blitTexture: new Uniform( texture ) },\n\t\tvertexShader: `\n\t\t\tvarying vec2 vUv;\n\t\t\tvoid main(){\n\t\t\t\tvUv = uv;\n\t\t\t\tgl_Position = vec4(position.xy * 1.0,0.,.999999);\n\t\t\t}`,\n\t\tfragmentShader: `\n\t\t\tuniform sampler2D blitTexture; \n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main(){ \n\t\t\t\tgl_FragColor = vec4(vUv.xy, 0, 1);\n\t\t\t\t\n\t\t\t\t#ifdef IS_SRGB\n\t\t\t\tgl_FragColor = sRGBTransferOETF( texture2D( blitTexture, vUv) );\n\t\t\t\t#else\n\t\t\t\tgl_FragColor = texture2D( blitTexture, vUv);\n\t\t\t\t#endif\n\t\t\t}`\n\t} );\n\n\tfullscreenQuadMaterial.uniforms.blitTexture.value = texture;\n\tfullscreenQuadMaterial.defines.IS_SRGB = texture.colorSpace == SRGBColorSpace;\n\tfullscreenQuadMaterial.needsUpdate = true;\n\n\tif ( ! fullscreenQuad ) {\n\n\t\tfullscreenQuad = new Mesh( fullscreenQuadGeometry, fullscreenQuadMaterial );\n\t\tfullscreenQuad.frustumCulled = false;\n\n\t}\n\n\tconst _camera = new PerspectiveCamera();\n\tconst _scene = new Scene();\n\t_scene.add( fullscreenQuad );\n\n\tif ( renderer === null ) {\n\n\t\trenderer = _renderer = new WebGLRenderer( { antialias: false } );\n\n\t}\n\n\tconst width = Math.min( texture.image.width, maxTextureSize );\n\tconst height = Math.min( texture.image.height, maxTextureSize );\n\n\trenderer.setSize( width, height );\n\trenderer.clear();\n\trenderer.render( _scene, _camera );\n\n\tconst canvas = document.createElement( 'canvas' );\n\tconst context = canvas.getContext( '2d' );\n\n\tcanvas.width = width;\n\tcanvas.height = height;\n\n\tcontext.drawImage( renderer.domElement, 0, 0, width, height );\n\n\tconst readableTexture = new CanvasTexture( canvas );\n\n\treadableTexture.minFilter = texture.minFilter;\n\treadableTexture.magFilter = texture.magFilter;\n\treadableTexture.wrapS = texture.wrapS;\n\treadableTexture.wrapT = texture.wrapT;\n\treadableTexture.name = texture.name;\n\n\tif ( _renderer ) {\n\n\t\t_renderer.forceContextLoss();\n\t\t_renderer.dispose();\n\t\t_renderer = null;\n\n\t}\n\n\treturn readableTexture;\n\n}\n", "import {\n\tBufferAttribute,\n\tClampToEdgeWrapping,\n\tColor,\n\tDoubleSide,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tNoColorSpace,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tMathUtils,\n\tMatrix4,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tPropertyBinding,\n\tRGBAFormat,\n\tRepeatWrapping,\n\tScene,\n\tSource,\n\tSRGBColorSpace,\n\tCompressedTexture,\n\tVector3,\n\tQuaternion,\n\tREVISION\n} from 'three';\nimport { decompress } from './../utils/TextureUtils.js';\n\n\n/**\n * The KHR_mesh_quantization extension allows these extra attribute component types\n *\n * @see https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md#extending-mesh-attributes\n */\nconst KHR_mesh_quantization_ExtraAttrTypes = {\n\tPOSITION: [\n\t\t'byte',\n\t\t'byte normalized',\n\t\t'unsigned byte',\n\t\t'unsigned byte normalized',\n\t\t'short',\n\t\t'short normalized',\n\t\t'unsigned short',\n\t\t'unsigned short normalized',\n\t],\n\tNORMAL: [\n\t\t'byte normalized',\n\t\t'short normalized',\n\t],\n\tTANGENT: [\n\t\t'byte normalized',\n\t\t'short normalized',\n\t],\n\tTEXCOORD: [\n\t\t'byte',\n\t\t'byte normalized',\n\t\t'unsigned byte',\n\t\t'short',\n\t\t'short normalized',\n\t\t'unsigned short',\n\t],\n};\n\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Function} onError Callback on errors\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, onError, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.write( input, onDone, options ).catch( onError );\n\n\t}\n\n\tparseAsync( input, options ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( input, resolve, reject, options );\n\n\t\t} );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tBYTE: 0x1400,\n\tUNSIGNED_BYTE: 0x1401,\n\tSHORT: 0x1402,\n\tUNSIGNED_SHORT: 0x1403,\n\tINT: 0x1404,\n\tUNSIGNED_INT: 0x1405,\n\tFLOAT: 0x1406,\n\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst KHR_MESH_QUANTIZATION = 'KHR_mesh_quantization';\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\nconst DEFAULT_SPECULAR_COLOR = new Color();\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\treturn new TextEncoder().encode( text ).buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Integer} start\n * @param {Integer} count\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\tif ( attribute.normalized === true ) {\n\n\t\t\t\t\tvalue = MathUtils.normalize( value, attribute.array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Integer} bufferSize The size the original buffer.\n * @returns {Integer} new buffer size with required padding.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Integer} paddingByte (Optional)\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nfunction getCanvas() {\n\n\tif ( typeof document === 'undefined' && typeof OffscreenCanvas !== 'undefined' ) {\n\n\t\treturn new OffscreenCanvas( 1, 1 );\n\n\t}\n\n\treturn document.createElement( 'canvas' );\n\n}\n\nfunction getToBlobPromise( canvas, mimeType ) {\n\n\tif ( canvas.toBlob !== undefined ) {\n\n\t\treturn new Promise( ( resolve ) => canvas.toBlob( resolve, mimeType ) );\n\n\t}\n\n\tlet quality;\n\n\t// Blink's implementation of convertToBlob seems to default to a quality level of 100%\n\t// Use the Blink default quality levels of toBlob instead so that file sizes are comparable.\n\tif ( mimeType === 'image/jpeg' ) {\n\n\t\tquality = 0.92;\n\n\t} else if ( mimeType === 'image/webp' ) {\n\n\t\tquality = 0.8;\n\n\t}\n\n\treturn canvas.convertToBlob( {\n\n\t\ttype: mimeType,\n\t\tquality: quality\n\n\t} );\n\n}\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\n\t\tthis.extensionsUsed = {};\n\t\tthis.extensionsRequired = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter r' + REVISION\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tasync write( input, onDone, options = {} ) {\n\n\t\tthis.options = Object.assign( {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tthis.processInput( input );\n\n\t\tawait Promise.all( this.pending );\n\n\t\tconst writer = this;\n\t\tconst buffers = writer.buffers;\n\t\tconst json = writer.json;\n\t\toptions = writer.options;\n\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\t\tconst extensionsRequired = writer.extensionsRequired;\n\n\t\t// Merge buffers.\n\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t// Declare extensions.\n\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\t\tconst extensionsRequiredList = Object.keys( extensionsRequired );\n\n\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\t\tif ( extensionsRequiredList.length > 0 ) json.extensionsRequired = extensionsRequiredList;\n\n\t\t// Update bytelength of the single buffer.\n\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\tif ( options.binary === true ) {\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\t// Binary chunk.\n\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t// JSON chunk.\n\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t// GLB header.\n\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\theader,\n\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\tjsonChunk,\n\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\tbinaryChunk\n\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\tconst glbReader = new FileReader();\n\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\tonDone( glbReader.result );\n\n\t\t\t\t};\n\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\tconst reader = new FileReader();\n\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tonDone( json );\n\n\t\t\t}\n\n\t\t}\n\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns ids for buffer attributes.\n\t * @param {Object} object\n\t * @return {Integer}\n\t */\n\tgetUID( attribute, isRelativeCopy = false ) {\n\n\t\tif ( this.uids.has( attribute ) === false ) {\n\n\t\t\tconst uids = new Map();\n\n\t\t\tuids.set( true, this.uid ++ );\n\t\t\tuids.set( false, this.uid ++ );\n\n\t\t\tthis.uids.set( attribute, uids );\n\n\t\t}\n\n\t\tconst uids = this.uids.get( attribute );\n\n\t\treturn uids.get( isRelativeCopy );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\tbuildMetalRoughTexture( metalnessMap, roughnessMap ) {\n\n\t\tif ( metalnessMap === roughnessMap ) return metalnessMap;\n\n\t\tfunction getEncodingConversion( map ) {\n\n\t\t\tif ( map.colorSpace === SRGBColorSpace ) {\n\n\t\t\t\treturn function SRGBToLinear( c ) {\n\n\t\t\t\t\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\treturn function LinearToLinear( c ) {\n\n\t\t\t\treturn c;\n\n\t\t\t};\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );\n\n\t\tif ( metalnessMap instanceof CompressedTexture ) {\n\n\t\t\tmetalnessMap = decompress( metalnessMap );\n\n\t\t}\n\n\t\tif ( roughnessMap instanceof CompressedTexture ) {\n\n\t\t\troughnessMap = decompress( roughnessMap );\n\n\t\t}\n\n\t\tconst metalness = metalnessMap ? metalnessMap.image : null;\n\t\tconst roughness = roughnessMap ? roughnessMap.image : null;\n\n\t\tconst width = Math.max( metalness ? metalness.width : 0, roughness ? roughness.width : 0 );\n\t\tconst height = Math.max( metalness ? metalness.height : 0, roughness ? roughness.height : 0 );\n\n\t\tconst canvas = getCanvas();\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tconst context = canvas.getContext( '2d', {\n\t\t\twillReadFrequently: true,\n\t\t} );\n\t\tcontext.fillStyle = '#00ffff';\n\t\tcontext.fillRect( 0, 0, width, height );\n\n\t\tconst composite = context.getImageData( 0, 0, width, height );\n\n\t\tif ( metalness ) {\n\n\t\t\tcontext.drawImage( metalness, 0, 0, width, height );\n\n\t\t\tconst convert = getEncodingConversion( metalnessMap );\n\t\t\tconst data = context.getImageData( 0, 0, width, height ).data;\n\n\t\t\tfor ( let i = 2; i < data.length; i += 4 ) {\n\n\t\t\t\tcomposite.data[ i ] = convert( data[ i ] / 256 ) * 256;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( roughness ) {\n\n\t\t\tcontext.drawImage( roughness, 0, 0, width, height );\n\n\t\t\tconst convert = getEncodingConversion( roughnessMap );\n\t\t\tconst data = context.getImageData( 0, 0, width, height ).data;\n\n\t\t\tfor ( let i = 1; i < data.length; i += 4 ) {\n\n\t\t\t\tcomposite.data[ i ] = convert( data[ i ] / 256 ) * 256;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcontext.putImageData( composite, 0, 0 );\n\n\t\t//\n\n\t\tconst reference = metalnessMap || roughnessMap;\n\n\t\tconst texture = reference.clone();\n\n\t\ttexture.source = new Source( canvas );\n\t\ttexture.colorSpace = NoColorSpace;\n\t\ttexture.channel = ( metalnessMap || roughnessMap ).channel;\n\n\t\tif ( metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match.' );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {Integer}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number} target (Optional) Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tswitch ( componentType ) {\n\n\t\t\tcase WEBGL_CONSTANTS.BYTE:\n\t\t\tcase WEBGL_CONSTANTS.UNSIGNED_BYTE:\n\n\t\t\t\tcomponentSize = 1;\n\n\t\t\t\tbreak;\n\n\t\t\tcase WEBGL_CONSTANTS.SHORT:\n\t\t\tcase WEBGL_CONSTANTS.UNSIGNED_SHORT:\n\n\t\t\t\tcomponentSize = 2;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tlet byteStride = attribute.itemSize * componentSize;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Each element of a vertex attribute MUST be aligned to 4-byte boundaries\n\t\t\t// inside a bufferView\n\t\t\tbyteStride = Math.ceil( byteStride / 4 ) * 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * byteStride );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t\tif ( attribute.normalized === true ) {\n\n\t\t\t\t\t\tvalue = MathUtils.normalize( value, attribute.array );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.INT ) {\n\n\t\t\t\t\tdataView.setInt32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.SHORT ) {\n\n\t\t\t\t\tdataView.setInt16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.BYTE ) {\n\n\t\t\t\t\tdataView.setInt8( offset, value );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t\tif ( ( offset % byteStride ) !== 0 ) {\n\n\t\t\t\toffset += byteStride - ( offset % byteStride );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = byteStride;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise}\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n\t * @param {Integer} start (Optional)\n\t * @param {Integer} count (Optional)\n\t * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t9: 'MAT3',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Int32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.INT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Int16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Int8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.BYTE;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type: ' + attribute.array.constructor.name );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined || count === Infinity ) count = attribute.count;\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Integer} format of the image (RGBAFormat)\n\t * @param {Boolean} flipY before writing out the image\n\t * @param {String} mimeType export format\n\t * @return {Integer} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY, mimeType = 'image/png' ) {\n\n\t\tif ( image !== null ) {\n\n\t\t\tconst writer = this;\n\t\t\tconst cache = writer.cache;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst pending = writer.pending;\n\n\t\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\t\tconst cachedImages = cache.images.get( image );\n\n\t\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\t\tif ( ! json.images ) json.images = [];\n\n\t\t\tconst imageDef = { mimeType: mimeType };\n\n\t\t\tconst canvas = getCanvas();\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d', {\n\t\t\t\twillReadFrequently: true,\n\t\t\t} );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( image.data !== undefined ) { // THREE.DataTexture\n\n\t\t\t\tif ( format !== RGBAFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGBAFormat is supported.', format );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tconst data = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\t\t\tdata[ i + 0 ] = image.data[ i + 0 ];\n\t\t\t\t\tdata[ i + 1 ] = image.data[ i + 1 ];\n\t\t\t\t\tdata[ i + 2 ] = image.data[ i + 2 ];\n\t\t\t\t\tdata[ i + 3 ] = image.data[ i + 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ) {\n\n\t\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push(\n\n\t\t\t\t\tgetToBlobPromise( canvas, mimeType )\n\t\t\t\t\t\t.then( blob => writer.processBufferViewImage( blob ) )\n\t\t\t\t\t\t.then( bufferViewIndex => {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\n\t\t\t\t\t\t} )\n\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tif ( canvas.toDataURL !== undefined ) {\n\n\t\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpending.push(\n\n\t\t\t\t\t\tgetToBlobPromise( canvas, mimeType )\n\t\t\t\t\t\t\t.then( blob => new FileReader().readAsDataURL( blob ) )\n\t\t\t\t\t\t\t.then( dataURL => {\n\n\t\t\t\t\t\t\t\timageDef.uri = dataURL;\n\n\t\t\t\t\t\t\t} )\n\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst index = json.images.push( imageDef ) - 1;\n\t\t\tcachedImages[ key ] = index;\n\t\t\treturn index;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: No valid image data found. Unable to process texture.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Integer} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Integer} Index of the processed texture in the \"textures\" array\n\t */\n\tprocessTexture( map ) {\n\n\t\tconst writer = this;\n\t\tconst options = writer.options;\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\t// make non-readable textures (e.g. CompressedTexture) readable by blitting them into a new texture\n\t\tif ( map instanceof CompressedTexture ) {\n\n\t\t\tmap = decompress( map, options.maxTextureSize );\n\n\t\t}\n\n\t\tlet mimeType = map.userData.mimeType;\n\n\t\tif ( mimeType === 'image/webp' ) mimeType = 'image/png';\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY, mimeType )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeTexture && ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Integer|null} Index of the processed material in the \"materials\" array\n\t */\n\tprocessMaterial( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tconst metalRoughTexture = this.buildMetalRoughTexture( material.metalnessMap, material.roughnessMap );\n\n\t\t\tconst metalRoughMapDef = {\n\t\t\t\tindex: this.processTexture( metalRoughTexture ),\n\t\t\t\tchannel: metalRoughTexture.channel\n\t\t\t};\n\t\t\tthis.applyTextureTransform( metalRoughMapDef, metalRoughTexture );\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = {\n\t\t\t\tindex: this.processTexture( material.map ),\n\t\t\t\ttexCoord: material.map.channel\n\t\t\t};\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tconst emissive = material.emissive;\n\t\t\tconst maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );\n\n\t\t\tif ( maxEmissiveComponent > 0 ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = material.emissive.toArray();\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = {\n\t\t\t\t\tindex: this.processTexture( material.emissiveMap ),\n\t\t\t\t\ttexCoord: material.emissiveMap.channel\n\t\t\t\t};\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = {\n\t\t\t\tindex: this.processTexture( material.normalMap ),\n\t\t\t\ttexCoord: material.normalMap.channel\n\t\t\t};\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== 1 ) {\n\n\t\t\t\t// glTF normal scale is univariate. Ignore `y`, which may be flipped.\n\t\t\t\t// Context: https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: this.processTexture( material.aoMap ),\n\t\t\t\ttexCoord: material.aoMap.channel\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMaterial && ext.writeMaterial( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n\t */\n\tprocessMesh( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv1: 'TEXCOORD_1',\n\t\t\tuv2: 'TEXCOORD_2',\n\t\t\tuv3: 'TEXCOORD_3',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.slice( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tif ( ! attributeName.startsWith( '_' ) ) {\n\n\t\t\t\t\tthis.detectMeshQuantization( attributeName, attribute );\n\n\t\t\t\t}\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tconst gltfAttributeName = attributeName.toUpperCase();\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute, true ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute, true ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = attribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n\t\t\t\t\t\tfor ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\t\t\t\t\tif ( a === 0 ) relativeAttribute.setX( j, attribute.getX( j ) - baseAttribute.getX( j ) );\n\t\t\t\t\t\t\t\tif ( a === 1 ) relativeAttribute.setY( j, attribute.getY( j ) - baseAttribute.getY( j ) );\n\t\t\t\t\t\t\t\tif ( a === 2 ) relativeAttribute.setZ( j, attribute.getZ( j ) - baseAttribute.getZ( j ) );\n\t\t\t\t\t\t\t\tif ( a === 3 ) relativeAttribute.setW( j, attribute.getW( j ) - baseAttribute.getW( j ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute, true ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tlet didForceIndices = false;\n\n\t\tif ( isMultiMaterial && geometry.index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0, il = geometry.attributes.position.count; i < il; i ++ ) {\n\n\t\t\t\tindices[ i ] = i;\n\n\t\t\t}\n\n\t\t\tgeometry.setIndex( indices );\n\n\t\t\tdidForceIndices = true;\n\n\t\t}\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = this.processMaterial( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tif ( didForceIndices === true ) {\n\n\t\t\tgeometry.setIndex( null );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * If a vertex attribute with a\n\t * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)\n\t * is used, it is checked whether it is a valid data type according to the\n\t * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)\n\t * extension.\n\t * In this case the extension is automatically added to the list of used extensions.\n\t *\n\t * @param {string} attributeName\n\t * @param {THREE.BufferAttribute} attribute\n\t */\n\tdetectMeshQuantization( attributeName, attribute ) {\n\n\t\tif ( this.extensionsUsed[ KHR_MESH_QUANTIZATION ] ) return;\n\n\t\tlet attrType = undefined;\n\n\t\tswitch ( attribute.array.constructor ) {\n\n\t\t\tcase Int8Array:\n\n\t\t\t\tattrType = 'byte';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Uint8Array:\n\n\t\t\t\tattrType = 'unsigned byte';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Int16Array:\n\n\t\t\t\tattrType = 'short';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Uint16Array:\n\n\t\t\t\tattrType = 'unsigned short';\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.normalized ) attrType += ' normalized';\n\n\t\tconst attrNamePrefix = attributeName.split( '_', 1 )[ 0 ];\n\n\t\tif ( KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ] && KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ].includes( attrType ) ) {\n\n\t\t\tthis.extensionsUsed[ KHR_MESH_QUANTIZATION ] = true;\n\t\t\tthis.extensionsRequired[ KHR_MESH_QUANTIZATION ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Integer} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} node Object3D to processNode\n\t * @return {Integer} Index of the node in the nodes list\n\t */\n\tprocessNode( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = this.processMesh( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} node Scene to process\n\t */\n\tprocessScene( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tprocessObjects( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tthis.processScene( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array} input\n\t */\n\tprocessInput( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tthis.processScene( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ], input[ 0 ] );\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tfunc( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( 1.0 - light.penumbra ) * light.angle;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_clearcoat';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.clearcoat === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.clearcoatFactor = material.clearcoat;\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tconst clearcoatMapDef = {\n\t\t\t\tindex: writer.processTexture( material.clearcoatMap ),\n\t\t\t\ttexCoord: material.clearcoatMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );\n\t\t\textensionDef.clearcoatTexture = clearcoatMapDef;\n\n\t\t}\n\n\t\textensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness;\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tconst clearcoatRoughnessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.clearcoatRoughnessMap ),\n\t\t\t\ttexCoord: material.clearcoatRoughnessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );\n\t\t\textensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tconst clearcoatNormalMapDef = {\n\t\t\t\tindex: writer.processTexture( material.clearcoatNormalMap ),\n\t\t\t\ttexCoord: material.clearcoatNormalMap.channel\n\t\t\t};\n\n\t\t\tif ( material.clearcoatNormalScale.x !== 1 ) clearcoatNormalMapDef.scale = material.clearcoatNormalScale.x;\n\n\t\t\twriter.applyTextureTransform( clearcoatNormalMapDef, material.clearcoatNormalMap );\n\t\t\textensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_dispersion';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.dispersion === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.dispersion = material.dispersion;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_iridescence';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.iridescence === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.iridescenceFactor = material.iridescence;\n\n\t\tif ( material.iridescenceMap ) {\n\n\t\t\tconst iridescenceMapDef = {\n\t\t\t\tindex: writer.processTexture( material.iridescenceMap ),\n\t\t\t\ttexCoord: material.iridescenceMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( iridescenceMapDef, material.iridescenceMap );\n\t\t\textensionDef.iridescenceTexture = iridescenceMapDef;\n\n\t\t}\n\n\t\textensionDef.iridescenceIor = material.iridescenceIOR;\n\t\textensionDef.iridescenceThicknessMinimum = material.iridescenceThicknessRange[ 0 ];\n\t\textensionDef.iridescenceThicknessMaximum = material.iridescenceThicknessRange[ 1 ];\n\n\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\tconst iridescenceThicknessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.iridescenceThicknessMap ),\n\t\t\t\ttexCoord: material.iridescenceThicknessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( iridescenceThicknessMapDef, material.iridescenceThicknessMap );\n\t\t\textensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_transmission';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.transmissionFactor = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tconst transmissionMapDef = {\n\t\t\t\tindex: writer.processTexture( material.transmissionMap ),\n\t\t\t\ttexCoord: material.transmissionMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( transmissionMapDef, material.transmissionMap );\n\t\t\textensionDef.transmissionTexture = transmissionMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_volume';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.thicknessFactor = material.thickness;\n\n\t\tif ( material.thicknessMap ) {\n\n\t\t\tconst thicknessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.thicknessMap ),\n\t\t\t\ttexCoord: material.thicknessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( thicknessMapDef, material.thicknessMap );\n\t\t\textensionDef.thicknessTexture = thicknessMapDef;\n\n\t\t}\n\n\t\textensionDef.attenuationDistance = material.attenuationDistance;\n\t\textensionDef.attenuationColor = material.attenuationColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_ior';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.ior === 1.5 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.ior = material.ior;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_specular';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || ( material.specularIntensity === 1.0 &&\n\t\t material.specularColor.equals( DEFAULT_SPECULAR_COLOR ) &&\n\t\t ! material.specularIntensityMap && ! material.specularColorMap ) ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tconst specularIntensityMapDef = {\n\t\t\t\tindex: writer.processTexture( material.specularIntensityMap ),\n\t\t\t\ttexCoord: material.specularIntensityMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( specularIntensityMapDef, material.specularIntensityMap );\n\t\t\textensionDef.specularTexture = specularIntensityMapDef;\n\n\t\t}\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tconst specularColorMapDef = {\n\t\t\t\tindex: writer.processTexture( material.specularColorMap ),\n\t\t\t\ttexCoord: material.specularColorMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( specularColorMapDef, material.specularColorMap );\n\t\t\textensionDef.specularColorTexture = specularColorMapDef;\n\n\t\t}\n\n\t\textensionDef.specularFactor = material.specularIntensity;\n\t\textensionDef.specularColorFactor = material.specularColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_sheen';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.sheen == 0.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\tconst sheenRoughnessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.sheenRoughnessMap ),\n\t\t\t\ttexCoord: material.sheenRoughnessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( sheenRoughnessMapDef, material.sheenRoughnessMap );\n\t\t\textensionDef.sheenRoughnessTexture = sheenRoughnessMapDef;\n\n\t\t}\n\n\t\tif ( material.sheenColorMap ) {\n\n\t\t\tconst sheenColorMapDef = {\n\t\t\t\tindex: writer.processTexture( material.sheenColorMap ),\n\t\t\t\ttexCoord: material.sheenColorMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( sheenColorMapDef, material.sheenColorMap );\n\t\t\textensionDef.sheenColorTexture = sheenColorMapDef;\n\n\t\t}\n\n\t\textensionDef.sheenRoughnessFactor = material.sheenRoughness;\n\t\textensionDef.sheenColorFactor = material.sheenColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Anisotropy Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_anisotropy';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.anisotropy == 0.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.anisotropyMap ) {\n\n\t\t\tconst anisotropyMapDef = { index: writer.processTexture( material.anisotropyMap ) };\n\t\t\twriter.applyTextureTransform( anisotropyMapDef, material.anisotropyMap );\n\t\t\textensionDef.anisotropyTexture = anisotropyMapDef;\n\n\t\t}\n\n\t\textensionDef.anisotropyStrength = material.anisotropy;\n\t\textensionDef.anisotropyRotation = material.anisotropyRotation;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_emissive_strength';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshStandardMaterial || material.emissiveIntensity === 1.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.emissiveStrength = material.emissiveIntensity;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'EXT_materials_bump';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshStandardMaterial || (\n\t\t material.bumpScale === 1 &&\n\t\t ! material.bumpMap ) ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tconst bumpMapDef = {\n\t\t\t\tindex: writer.processTexture( material.bumpMap ),\n\t\t\t\ttexCoord: material.bumpMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( bumpMapDef, material.bumpMap );\n\t\t\textensionDef.bumpTexture = bumpMapDef;\n\n\t\t}\n\n\t\textensionDef.bumpFactor = material.bumpScale;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'EXT_mesh_gpu_instancing';\n\n\t}\n\n\twriteNode( object, nodeDef ) {\n\n\t\tif ( ! object.isInstancedMesh ) return;\n\n\t\tconst writer = this.writer;\n\n\t\tconst mesh = object;\n\n\t\tconst translationAttr = new Float32Array( mesh.count * 3 );\n\t\tconst rotationAttr = new Float32Array( mesh.count * 4 );\n\t\tconst scaleAttr = new Float32Array( mesh.count * 3 );\n\n\t\tconst matrix = new Matrix4();\n\t\tconst position = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3();\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tmesh.getMatrixAt( i, matrix );\n\t\t\tmatrix.decompose( position, quaternion, scale );\n\n\t\t\tposition.toArray( translationAttr, i * 3 );\n\t\t\tquaternion.toArray( rotationAttr, i * 4 );\n\t\t\tscale.toArray( scaleAttr, i * 3 );\n\n\t\t}\n\n\t\tconst attributes = {\n\t\t\tTRANSLATION: writer.processAccessor( new BufferAttribute( translationAttr, 3 ) ),\n\t\t\tROTATION: writer.processAccessor( new BufferAttribute( rotationAttr, 4 ) ),\n\t\t\tSCALE: writer.processAccessor( new BufferAttribute( scaleAttr, 3 ) ),\n\t\t};\n\n\t\tif ( mesh.instanceColor )\n\t\t\tattributes._COLOR_0 = writer.processAccessor( mesh.instanceColor );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { attributes };\n\n\t\twriter.extensionsUsed[ this.name ] = true;\n\t\twriter.extensionsRequired[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t}\n\n};\n\nexport { GLTFExporter };\n", "const t=0,e=1,n=2,i=3,s=0,a=0,r=2,o=0,l=1,f=160,U=161,c=162,h=163,_=0,p=1,g=0,y=1,x=2,u=3,b=4,d=5,m=6,w=7,D=8,B=9,L=10,A=11,k=12,v=13,S=14,I=15,O=16,T=17,V=18,E=0,F=1,P=2,C=3,z=4,M=5,W=6,N=7,H=8,K=9,X=10,j=11,R=0,Y=1,q=2,G=13,J=14,Q=15,Z=128,$=64,tt=32,et=16,nt=0,it=1,st=2,at=3,rt=4,ot=5,lt=6,ft=7,Ut=8,ct=9,ht=10,_t=13,pt=14,gt=15,yt=16,xt=17,ut=20,bt=21,dt=22,mt=23,wt=24,Dt=27,Bt=28,Lt=29,At=30,kt=31,vt=34,St=35,It=36,Ot=37,Tt=38,Vt=41,Et=42,Ft=43,Pt=44,Ct=45,zt=48,Mt=49,Wt=50,Nt=58,Ht=59,Kt=62,Xt=63,jt=64,Rt=65,Yt=68,qt=69,Gt=70,Jt=71,Qt=74,Zt=75,$t=76,te=77,ee=78,ne=81,ie=82,se=83,ae=84,re=85,oe=88,le=89,fe=90,Ue=91,ce=92,he=95,_e=96,pe=97,ge=98,ye=99,xe=100,ue=101,be=102,de=103,me=104,we=105,De=106,Be=107,Le=108,Ae=109,ke=110,ve=111,Se=112,Ie=113,Oe=114,Te=115,Ve=116,Ee=117,Fe=118,Pe=119,Ce=120,ze=121,Me=122,We=123,Ne=124,He=125,Ke=126,Xe=127,je=128,Re=129,Ye=130,qe=131,Ge=132,Je=133,Qe=134,Ze=135,$e=136,tn=137,en=138,nn=139,sn=140,an=141,rn=142,on=143,ln=144,fn=145,Un=146,cn=147,hn=148,_n=149,pn=150,gn=151,yn=152,xn=153,un=154,bn=155,dn=156,mn=157,wn=158,Dn=159,Bn=160,Ln=161,An=162,kn=163,vn=164,Sn=165,In=166,On=167,Tn=168,Vn=169,En=170,Fn=171,Pn=172,Cn=173,zn=174,Mn=175,Wn=176,Nn=177,Hn=178,Kn=179,Xn=180,jn=181,Rn=182,Yn=183,qn=184,Gn=1000156007,Jn=1000156008,Qn=1000156009,Zn=1000156010,$n=1000156011,ti=1000156017,ei=1000156018,ni=1000156019,ii=1000156020,si=1000156021,ai=1000054e3,ri=1000054001,oi=1000054002,li=1000054003,fi=1000054004,Ui=1000054005,ci=1000054006,hi=1000054007,_i=1000066e3,pi=1000066001,gi=1000066002,yi=1000066003,xi=1000066004,ui=1000066005,bi=1000066006,di=1000066007,mi=1000066008,wi=1000066009,Di=1000066010,Bi=1000066011,Li=1000066012,Ai=1000066013,ki=100034e4,vi=1000340001;class Si{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class Ii{constructor(t,e,n,i){this._dataView=new DataView(t.buffer,t.byteOffset+e,n),this._littleEndian=i,this._offset=0}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_nextInt32(){const t=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,t}_skip(t){return this._offset+=t,this}_scan(t,e=0){const n=this._offset;let i=0;for(;this._dataView.getUint8(this._offset)!==e&&i0?c+a.byteLength:0;h%8&&(h+=8-h%8);const _=[],p=new DataView(new ArrayBuffer(3*t.levels.length*8));let g=(h||c+a.byteLength)+n.byteLength;for(let e=0;e0?h:0),!0),x.setBigUint64(60,BigInt(n.byteLength),!0),new Uint8Array(Fi([new Uint8Array(Ti).buffer,y,p.buffer,o,a,h>0?new ArrayBuffer(h-(c+a.byteLength)):new ArrayBuffer(0),n,..._]))}export{Q as KHR_DF_CHANNEL_RGBSDA_ALPHA,q as KHR_DF_CHANNEL_RGBSDA_BLUE,J as KHR_DF_CHANNEL_RGBSDA_DEPTH,Y as KHR_DF_CHANNEL_RGBSDA_GREEN,R as KHR_DF_CHANNEL_RGBSDA_RED,G as KHR_DF_CHANNEL_RGBSDA_STENCIL,p as KHR_DF_FLAG_ALPHA_PREMULTIPLIED,_ as KHR_DF_FLAG_ALPHA_STRAIGHT,s as KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,c as KHR_DF_MODEL_ASTC,f as KHR_DF_MODEL_ETC1,h as KHR_DF_MODEL_ETC1S,U as KHR_DF_MODEL_ETC2,l as KHR_DF_MODEL_RGBSDA,o as KHR_DF_MODEL_UNSPECIFIED,W as KHR_DF_PRIMARIES_ACES,N as KHR_DF_PRIMARIES_ACESCC,j as KHR_DF_PRIMARIES_ADOBERGB,z as KHR_DF_PRIMARIES_BT2020,P as KHR_DF_PRIMARIES_BT601_EBU,C as KHR_DF_PRIMARIES_BT601_SMPTE,F as KHR_DF_PRIMARIES_BT709,M as KHR_DF_PRIMARIES_CIEXYZ,X as KHR_DF_PRIMARIES_DISPLAYP3,H as KHR_DF_PRIMARIES_NTSC1953,K as KHR_DF_PRIMARIES_PAL525,E as KHR_DF_PRIMARIES_UNSPECIFIED,tt as KHR_DF_SAMPLE_DATATYPE_EXPONENT,Z as KHR_DF_SAMPLE_DATATYPE_FLOAT,et as KHR_DF_SAMPLE_DATATYPE_LINEAR,$ as KHR_DF_SAMPLE_DATATYPE_SIGNED,O as KHR_DF_TRANSFER_ACESCC,T as KHR_DF_TRANSFER_ACESCCT,V as KHR_DF_TRANSFER_ADOBERGB,w as KHR_DF_TRANSFER_BT1886,k as KHR_DF_TRANSFER_DCIP3,B as KHR_DF_TRANSFER_HLG_EOTF,D as KHR_DF_TRANSFER_HLG_OETF,u as KHR_DF_TRANSFER_ITU,y as KHR_DF_TRANSFER_LINEAR,b as KHR_DF_TRANSFER_NTSC,S as KHR_DF_TRANSFER_PAL625_EOTF,v as KHR_DF_TRANSFER_PAL_OETF,L as KHR_DF_TRANSFER_PQ_EOTF,A as KHR_DF_TRANSFER_PQ_OETF,d as KHR_DF_TRANSFER_SLOG,m as KHR_DF_TRANSFER_SLOG2,x as KHR_DF_TRANSFER_SRGB,I as KHR_DF_TRANSFER_ST240,g as KHR_DF_TRANSFER_UNSPECIFIED,a as KHR_DF_VENDORID_KHRONOS,r as KHR_DF_VERSION,e as KHR_SUPERCOMPRESSION_BASISLZ,t as KHR_SUPERCOMPRESSION_NONE,i as KHR_SUPERCOMPRESSION_ZLIB,n as KHR_SUPERCOMPRESSION_ZSTD,Si as KTX2Container,Ut as VK_FORMAT_A1R5G5B5_UNORM_PACK16,qt as VK_FORMAT_A2B10G10R10_SINT_PACK32,Rt as VK_FORMAT_A2B10G10R10_SNORM_PACK32,Yt as VK_FORMAT_A2B10G10R10_UINT_PACK32,jt as VK_FORMAT_A2B10G10R10_UNORM_PACK32,Xt as VK_FORMAT_A2R10G10B10_SINT_PACK32,Ht as VK_FORMAT_A2R10G10B10_SNORM_PACK32,Kt as VK_FORMAT_A2R10G10B10_UINT_PACK32,Nt as VK_FORMAT_A2R10G10B10_UNORM_PACK32,vi as VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT,ki as VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT,Bi as VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT,Xn as VK_FORMAT_ASTC_10x10_SRGB_BLOCK,Kn as VK_FORMAT_ASTC_10x10_UNORM_BLOCK,mi as VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT,zn as VK_FORMAT_ASTC_10x5_SRGB_BLOCK,Cn as VK_FORMAT_ASTC_10x5_UNORM_BLOCK,wi as VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT,Wn as VK_FORMAT_ASTC_10x6_SRGB_BLOCK,Mn as VK_FORMAT_ASTC_10x6_UNORM_BLOCK,Di as VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT,Hn as VK_FORMAT_ASTC_10x8_SRGB_BLOCK,Nn as VK_FORMAT_ASTC_10x8_UNORM_BLOCK,Li as VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT,Rn as VK_FORMAT_ASTC_12x10_SRGB_BLOCK,jn as VK_FORMAT_ASTC_12x10_UNORM_BLOCK,Ai as VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT,qn as VK_FORMAT_ASTC_12x12_SRGB_BLOCK,Yn as VK_FORMAT_ASTC_12x12_UNORM_BLOCK,_i as VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,wn as VK_FORMAT_ASTC_4x4_SRGB_BLOCK,mn as VK_FORMAT_ASTC_4x4_UNORM_BLOCK,pi as VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT,Bn as VK_FORMAT_ASTC_5x4_SRGB_BLOCK,Dn as VK_FORMAT_ASTC_5x4_UNORM_BLOCK,gi as VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT,An as VK_FORMAT_ASTC_5x5_SRGB_BLOCK,Ln as VK_FORMAT_ASTC_5x5_UNORM_BLOCK,yi as VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT,vn as VK_FORMAT_ASTC_6x5_SRGB_BLOCK,kn as VK_FORMAT_ASTC_6x5_UNORM_BLOCK,xi as VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT,In as VK_FORMAT_ASTC_6x6_SRGB_BLOCK,Sn as VK_FORMAT_ASTC_6x6_UNORM_BLOCK,ui as VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT,Tn as VK_FORMAT_ASTC_8x5_SRGB_BLOCK,On as VK_FORMAT_ASTC_8x5_UNORM_BLOCK,bi as VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT,En as VK_FORMAT_ASTC_8x6_SRGB_BLOCK,Vn as VK_FORMAT_ASTC_8x6_UNORM_BLOCK,di as VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT,Pn as VK_FORMAT_ASTC_8x8_SRGB_BLOCK,Fn as VK_FORMAT_ASTC_8x8_UNORM_BLOCK,Me as VK_FORMAT_B10G11R11_UFLOAT_PACK32,$n as VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,si as VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,at as VK_FORMAT_B4G4R4A4_UNORM_PACK16,ft as VK_FORMAT_B5G5R5A1_UNORM_PACK16,ot as VK_FORMAT_B5G6R5_UNORM_PACK16,Mt as VK_FORMAT_B8G8R8A8_SINT,Ct as VK_FORMAT_B8G8R8A8_SNORM,Wt as VK_FORMAT_B8G8R8A8_SRGB,zt as VK_FORMAT_B8G8R8A8_UINT,Pt as VK_FORMAT_B8G8R8A8_UNORM,St as VK_FORMAT_B8G8R8_SINT,kt as VK_FORMAT_B8G8R8_SNORM,It as VK_FORMAT_B8G8R8_SRGB,vt as VK_FORMAT_B8G8R8_UINT,At as VK_FORMAT_B8G8R8_UNORM,Qe as VK_FORMAT_BC1_RGBA_SRGB_BLOCK,Je as VK_FORMAT_BC1_RGBA_UNORM_BLOCK,Ge as VK_FORMAT_BC1_RGB_SRGB_BLOCK,qe as VK_FORMAT_BC1_RGB_UNORM_BLOCK,$e as VK_FORMAT_BC2_SRGB_BLOCK,Ze as VK_FORMAT_BC2_UNORM_BLOCK,en as VK_FORMAT_BC3_SRGB_BLOCK,tn as VK_FORMAT_BC3_UNORM_BLOCK,sn as VK_FORMAT_BC4_SNORM_BLOCK,nn as VK_FORMAT_BC4_UNORM_BLOCK,rn as VK_FORMAT_BC5_SNORM_BLOCK,an as VK_FORMAT_BC5_UNORM_BLOCK,ln as VK_FORMAT_BC6H_SFLOAT_BLOCK,on as VK_FORMAT_BC6H_UFLOAT_BLOCK,Un as VK_FORMAT_BC7_SRGB_BLOCK,fn as VK_FORMAT_BC7_UNORM_BLOCK,Ne as VK_FORMAT_D16_UNORM,je as VK_FORMAT_D16_UNORM_S8_UINT,Re as VK_FORMAT_D24_UNORM_S8_UINT,Ke as VK_FORMAT_D32_SFLOAT,Ye as VK_FORMAT_D32_SFLOAT_S8_UINT,We as VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,dn as VK_FORMAT_EAC_R11G11_SNORM_BLOCK,bn as VK_FORMAT_EAC_R11G11_UNORM_BLOCK,un as VK_FORMAT_EAC_R11_SNORM_BLOCK,xn as VK_FORMAT_EAC_R11_UNORM_BLOCK,pn as VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,_n as VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,yn as VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,gn as VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,hn as VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,cn as VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,Zn as VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,ii as VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,fi as VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,ai as VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,Ui as VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,ri as VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,ci as VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,oi as VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,hi as VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG,li as VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,Qn as VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,Jn as VK_FORMAT_R10X6G10X6_UNORM_2PACK16,Gn as VK_FORMAT_R10X6_UNORM_PACK16,ni as VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,ei as VK_FORMAT_R12X4G12X4_UNORM_2PACK16,ti as VK_FORMAT_R12X4_UNORM_PACK16,pe as VK_FORMAT_R16G16B16A16_SFLOAT,_e as VK_FORMAT_R16G16B16A16_SINT,ce as VK_FORMAT_R16G16B16A16_SNORM,he as VK_FORMAT_R16G16B16A16_UINT,Ue as VK_FORMAT_R16G16B16A16_UNORM,fe as VK_FORMAT_R16G16B16_SFLOAT,le as VK_FORMAT_R16G16B16_SINT,re as VK_FORMAT_R16G16B16_SNORM,oe as VK_FORMAT_R16G16B16_UINT,ae as VK_FORMAT_R16G16B16_UNORM,se as VK_FORMAT_R16G16_SFLOAT,ie as VK_FORMAT_R16G16_SINT,ee as VK_FORMAT_R16G16_SNORM,ne as VK_FORMAT_R16G16_UINT,te as VK_FORMAT_R16G16_UNORM,$t as VK_FORMAT_R16_SFLOAT,Zt as VK_FORMAT_R16_SINT,Jt as VK_FORMAT_R16_SNORM,Qt as VK_FORMAT_R16_UINT,Gt as VK_FORMAT_R16_UNORM,Ae as VK_FORMAT_R32G32B32A32_SFLOAT,Le as VK_FORMAT_R32G32B32A32_SINT,Be as VK_FORMAT_R32G32B32A32_UINT,De as VK_FORMAT_R32G32B32_SFLOAT,we as VK_FORMAT_R32G32B32_SINT,me as VK_FORMAT_R32G32B32_UINT,de as VK_FORMAT_R32G32_SFLOAT,be as VK_FORMAT_R32G32_SINT,ue as VK_FORMAT_R32G32_UINT,xe as VK_FORMAT_R32_SFLOAT,ye as VK_FORMAT_R32_SINT,ge as VK_FORMAT_R32_UINT,st as VK_FORMAT_R4G4B4A4_UNORM_PACK16,it as VK_FORMAT_R4G4_UNORM_PACK8,lt as VK_FORMAT_R5G5B5A1_UNORM_PACK16,rt as VK_FORMAT_R5G6B5_UNORM_PACK16,ze as VK_FORMAT_R64G64B64A64_SFLOAT,Ce as VK_FORMAT_R64G64B64A64_SINT,Pe as VK_FORMAT_R64G64B64A64_UINT,Fe as VK_FORMAT_R64G64B64_SFLOAT,Ee as VK_FORMAT_R64G64B64_SINT,Ve as VK_FORMAT_R64G64B64_UINT,Te as VK_FORMAT_R64G64_SFLOAT,Oe as VK_FORMAT_R64G64_SINT,Ie as VK_FORMAT_R64G64_UINT,Se as VK_FORMAT_R64_SFLOAT,ve as VK_FORMAT_R64_SINT,ke as VK_FORMAT_R64_UINT,Et as VK_FORMAT_R8G8B8A8_SINT,Tt as VK_FORMAT_R8G8B8A8_SNORM,Ft as VK_FORMAT_R8G8B8A8_SRGB,Vt as VK_FORMAT_R8G8B8A8_UINT,Ot as VK_FORMAT_R8G8B8A8_UNORM,Bt as VK_FORMAT_R8G8B8_SINT,wt as VK_FORMAT_R8G8B8_SNORM,Lt as VK_FORMAT_R8G8B8_SRGB,Dt as VK_FORMAT_R8G8B8_UINT,mt as VK_FORMAT_R8G8B8_UNORM,bt as VK_FORMAT_R8G8_SINT,xt as VK_FORMAT_R8G8_SNORM,dt as VK_FORMAT_R8G8_SRGB,ut as VK_FORMAT_R8G8_UINT,yt as VK_FORMAT_R8G8_UNORM,pt as VK_FORMAT_R8_SINT,ht as VK_FORMAT_R8_SNORM,gt as VK_FORMAT_R8_SRGB,_t as VK_FORMAT_R8_UINT,ct as VK_FORMAT_R8_UNORM,Xe as VK_FORMAT_S8_UINT,nt as VK_FORMAT_UNDEFINED,He as VK_FORMAT_X8_D24_UNORM_PACK32,Pi as read,Mi as write};\n", "import {\n\tFloatType,\n\tHalfFloatType,\n\tUnsignedByteType,\n\tRGBAFormat,\n\tRGFormat,\n\tRGIntegerFormat,\n\tRedFormat,\n\tRedIntegerFormat,\n\tNoColorSpace,\n\tLinearSRGBColorSpace,\n\tSRGBColorSpace,\n\tDataTexture,\n\tREVISION,\n} from 'three';\n\nimport {\n\twrite,\n\tKTX2Container,\n\tKHR_DF_CHANNEL_RGBSDA_ALPHA,\n\tKHR_DF_CHANNEL_RGBSDA_BLUE,\n\tKHR_DF_CHANNEL_RGBSDA_GREEN,\n\tKHR_DF_CHANNEL_RGBSDA_RED,\n\tKHR_DF_MODEL_RGBSDA,\n\tKHR_DF_PRIMARIES_BT709,\n\tKHR_DF_PRIMARIES_UNSPECIFIED,\n\tKHR_DF_SAMPLE_DATATYPE_FLOAT,\n\tKHR_DF_SAMPLE_DATATYPE_LINEAR,\n\tKHR_DF_SAMPLE_DATATYPE_SIGNED,\n\tKHR_DF_TRANSFER_LINEAR,\n\tKHR_DF_TRANSFER_SRGB,\n\tVK_FORMAT_R16_SFLOAT,\n\tVK_FORMAT_R16G16_SFLOAT,\n\tVK_FORMAT_R16G16B16A16_SFLOAT,\n\tVK_FORMAT_R32_SFLOAT,\n\tVK_FORMAT_R32G32_SFLOAT,\n\tVK_FORMAT_R32G32B32A32_SFLOAT,\n\tVK_FORMAT_R8_SRGB,\n\tVK_FORMAT_R8_UNORM,\n\tVK_FORMAT_R8G8_SRGB,\n\tVK_FORMAT_R8G8_UNORM,\n\tVK_FORMAT_R8G8B8A8_SRGB,\n\tVK_FORMAT_R8G8B8A8_UNORM,\n} from '../libs/ktx-parse.module.js';\n\nconst VK_FORMAT_MAP = {\n\n\t[ RGBAFormat ]: {\n\t\t[ FloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R32G32B32A32_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R32G32B32A32_SFLOAT,\n\t\t},\n\t\t[ HalfFloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R16G16B16A16_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R16G16B16A16_SFLOAT,\n\t\t},\n\t\t[ UnsignedByteType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R8G8B8A8_UNORM,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R8G8B8A8_UNORM,\n\t\t\t[ SRGBColorSpace ]: VK_FORMAT_R8G8B8A8_SRGB,\n\t\t},\n\t},\n\n\t[ RGFormat ]: {\n\t\t[ FloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R32G32_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R32G32_SFLOAT,\n\t\t},\n\t\t[ HalfFloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R16G16_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R16G16_SFLOAT,\n\t\t},\n\t\t[ UnsignedByteType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R8G8_UNORM,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R8G8_UNORM,\n\t\t\t[ SRGBColorSpace ]: VK_FORMAT_R8G8_SRGB,\n\t\t},\n\t},\n\n\t[ RedFormat ]: {\n\t\t[ FloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R32_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R32_SFLOAT,\n\t\t},\n\t\t[ HalfFloatType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R16_SFLOAT,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R16_SFLOAT,\n\t\t},\n\t\t[ UnsignedByteType ]: {\n\t\t\t[ NoColorSpace ]: VK_FORMAT_R8_UNORM,\n\t\t\t[ LinearSRGBColorSpace ]: VK_FORMAT_R8_UNORM,\n\t\t\t[ SRGBColorSpace ]: VK_FORMAT_R8_SRGB,\n\t\t},\n\t},\n\n};\n\nconst KHR_DF_CHANNEL_MAP = {\n\n\t0: KHR_DF_CHANNEL_RGBSDA_RED,\n\t1: KHR_DF_CHANNEL_RGBSDA_GREEN,\n\t2: KHR_DF_CHANNEL_RGBSDA_BLUE,\n\t3: KHR_DF_CHANNEL_RGBSDA_ALPHA,\n\n};\n\nconst ERROR_INPUT = 'THREE.KTX2Exporter: Supported inputs are DataTexture, Data3DTexture, or WebGLRenderer and WebGLRenderTarget.';\nconst ERROR_FORMAT = 'THREE.KTX2Exporter: Supported formats are RGBAFormat, RGFormat, or RedFormat.';\nconst ERROR_TYPE = 'THREE.KTX2Exporter: Supported types are FloatType, HalfFloatType, or UnsignedByteType.\"';\nconst ERROR_COLOR_SPACE = 'THREE.KTX2Exporter: Supported color spaces are SRGBColorSpace (UnsignedByteType only), LinearSRGBColorSpace, or NoColorSpace.';\n\nexport class KTX2Exporter {\n\n\tparse( arg1, arg2 ) {\n\n\t\tlet texture;\n\n\t\tif ( arg1.isDataTexture || arg1.isData3DTexture ) {\n\n\t\t\ttexture = arg1;\n\n\t\t} else if ( arg1.isWebGLRenderer && arg2.isWebGLRenderTarget ) {\n\n\t\t\ttexture = toDataTexture( arg1, arg2 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( ERROR_INPUT );\n\n\t\t}\n\n\t\tif ( VK_FORMAT_MAP[ texture.format ] === undefined ) {\n\n\t\t\tthrow new Error( ERROR_FORMAT );\n\n\t\t}\n\n\t\tif ( VK_FORMAT_MAP[ texture.format ][ texture.type ] === undefined ) {\n\n\t\t\tthrow new Error( ERROR_TYPE );\n\n\t\t}\n\n\t\tif ( VK_FORMAT_MAP[ texture.format ][ texture.type ][ texture.colorSpace ] === undefined ) {\n\n\t\t\tthrow new Error( ERROR_COLOR_SPACE );\n\n\t\t}\n\n\t\t//\n\n\t\tconst array = texture.image.data;\n\t\tconst channelCount = getChannelCount( texture );\n\t\tconst container = new KTX2Container();\n\n\t\tcontainer.vkFormat = VK_FORMAT_MAP[ texture.format ][ texture.type ][ texture.colorSpace ];\n\t\tcontainer.typeSize = array.BYTES_PER_ELEMENT;\n\t\tcontainer.pixelWidth = texture.image.width;\n\t\tcontainer.pixelHeight = texture.image.height;\n\n\t\tif ( texture.isData3DTexture ) {\n\n\t\t\tcontainer.pixelDepth = texture.image.depth;\n\n\t\t}\n\n\t\t//\n\n\t\tconst basicDesc = container.dataFormatDescriptor[ 0 ];\n\n\t\tbasicDesc.colorModel = KHR_DF_MODEL_RGBSDA;\n\t\tbasicDesc.colorPrimaries = texture.colorSpace === NoColorSpace\n\t\t\t? KHR_DF_PRIMARIES_UNSPECIFIED\n\t\t\t: KHR_DF_PRIMARIES_BT709;\n\t\tbasicDesc.transferFunction = texture.colorSpace === SRGBColorSpace\n\t\t\t? KHR_DF_TRANSFER_SRGB\n\t\t\t: KHR_DF_TRANSFER_LINEAR;\n\n\t\tbasicDesc.texelBlockDimension = [ 0, 0, 0, 0 ];\n\n\t\tbasicDesc.bytesPlane = [\n\n\t\t\tcontainer.typeSize * channelCount, 0, 0, 0, 0, 0, 0, 0,\n\n\t\t];\n\n\t\tfor ( let i = 0; i < channelCount; ++ i ) {\n\n\t\t\tlet channelType = KHR_DF_CHANNEL_MAP[ i ];\n\n\t\t\tif ( texture.colorSpace === LinearSRGBColorSpace || texture.colorSpace === NoColorSpace ) {\n\n\t\t\t\tchannelType |= KHR_DF_SAMPLE_DATATYPE_LINEAR;\n\n\t\t\t}\n\n\t\t\tif ( texture.type === FloatType || texture.type === HalfFloatType ) {\n\n\t\t\t\tchannelType |= KHR_DF_SAMPLE_DATATYPE_FLOAT;\n\t\t\t\tchannelType |= KHR_DF_SAMPLE_DATATYPE_SIGNED;\n\n\t\t\t}\n\n\t\t\tbasicDesc.samples.push( {\n\n\t\t\t\tchannelType: channelType,\n\t\t\t\tbitOffset: i * array.BYTES_PER_ELEMENT,\n\t\t\t\tbitLength: array.BYTES_PER_ELEMENT * 8 - 1,\n\t\t\t\tsamplePosition: [ 0, 0, 0, 0 ],\n\t\t\t\tsampleLower: texture.type === UnsignedByteType ? 0 : - 1,\n\t\t\t\tsampleUpper: texture.type === UnsignedByteType ? 255 : 1,\n\n\t\t\t} );\n\n\t\t}\n\n\t\t//\n\n\t\tcontainer.levels = [ {\n\n\t\t\tlevelData: new Uint8Array( array.buffer, array.byteOffset, array.byteLength ),\n\t\t\tuncompressedByteLength: array.byteLength,\n\n\t\t} ];\n\n\t\t//\n\n\t\tcontainer.keyValue[ 'KTXwriter' ] = `three.js ${ REVISION }`;\n\n\t\t//\n\n\t\treturn write( container, { keepWriter: true } );\n\n\t}\n\n}\n\nfunction toDataTexture( renderer, rtt ) {\n\n\tconst channelCount = getChannelCount( rtt.texture );\n\n\tlet view;\n\n\tif ( rtt.texture.type === FloatType ) {\n\n\t\tview = new Float32Array( rtt.width * rtt.height * channelCount );\n\n\t} else if ( rtt.texture.type === HalfFloatType ) {\n\n\t\tview = new Uint16Array( rtt.width * rtt.height * channelCount );\n\n\t} else if ( rtt.texture.type === UnsignedByteType ) {\n\n\t\tview = new Uint8Array( rtt.width * rtt.height * channelCount );\n\n\t} else {\n\n\t\tthrow new Error( ERROR_TYPE );\n\n\t}\n\n\trenderer.readRenderTargetPixels( rtt, 0, 0, rtt.width, rtt.height, view );\n\n\treturn new DataTexture( view, rtt.width, rtt.height, rtt.texture.format, rtt.texture.type );\n\n}\n\nfunction getChannelCount( texture ) {\n\n\tswitch ( texture.format ) {\n\n\t\tcase RGBAFormat:\n\n\t\t\treturn 4;\n\n\t\tcase RGFormat:\n\t\tcase RGIntegerFormat:\n\n\t\t\treturn 2;\n\n\t\tcase RedFormat:\n\t\tcase RedIntegerFormat:\n\n\t\t\treturn 1;\n\n\t\tdefault:\n\n\t\t\tthrow new Error( ERROR_FORMAT );\n\n\t}\n\n}\n", "/**\n * @author Takahiro / https://github.com/takahirox\n *\n * Simple CharsetEncoder.\n */\n\nfunction CharsetEncoder() {\n}\n\n/*\n * Converts from Shift_JIS Uint8Array data to Unicode strings.\n */\nCharsetEncoder.prototype.s2u = function(uint8Array) {\n var t = this.s2uTable;\n var str = '';\n var p = 0;\n\n while(p < uint8Array.length) {\n var key = uint8Array[p++];\n\n if(! ((key >= 0x00 && key <= 0x7e) ||\n (key >= 0xa1 && key <= 0xdf)) &&\n p < uint8Array.length) {\n key = (key << 8) | uint8Array[p++];\n }\n\n if(t[key] === undefined) {\n console.error('unknown char code ' + key + '.');\n return str;\n }\n\n str += String.fromCharCode(t[key]);\n }\n\n return str;\n};\n\nCharsetEncoder.prototype.s2uTable = {\n0:0,\n1:1,\n2:2,\n3:3,\n4:4,\n5:5,\n6:6,\n7:7,\n8:8,\n9:9,\n10:10,\n11:11,\n12:12,\n13:13,\n14:14,\n15:15,\n16:16,\n17:17,\n18:18,\n19:19,\n20:20,\n21:21,\n22:22,\n23:23,\n24:24,\n25:25,\n26:26,\n27:27,\n28:28,\n29:29,\n30:30,\n31:31,\n32:32,\n33:33,\n34:34,\n35:35,\n36:36,\n37:37,\n38:38,\n39:39,\n40:40,\n41:41,\n42:42,\n43:43,\n44:44,\n45:45,\n46:46,\n47:47,\n48:48,\n49:49,\n50:50,\n51:51,\n52:52,\n53:53,\n54:54,\n55:55,\n56:56,\n57:57,\n58:58,\n59:59,\n60:60,\n61:61,\n62:62,\n63:63,\n64:64,\n65:65,\n66:66,\n67:67,\n68:68,\n69:69,\n70:70,\n71:71,\n72:72,\n73:73,\n74:74,\n75:75,\n76:76,\n77:77,\n78:78,\n79:79,\n80:80,\n81:81,\n82:82,\n83:83,\n84:84,\n85:85,\n86:86,\n87:87,\n88:88,\n89:89,\n90:90,\n91:91,\n92:92,\n93:93,\n94:94,\n95:95,\n96:96,\n97:97,\n98:98,\n99:99,\n100:100,\n101:101,\n102:102,\n103:103,\n104:104,\n105:105,\n106:106,\n107:107,\n108:108,\n109:109,\n110:110,\n111:111,\n112:112,\n113:113,\n114:114,\n115:115,\n116:116,\n117:117,\n118:118,\n119:119,\n120:120,\n121:121,\n122:122,\n123:123,\n124:124,\n125:125,\n126:126,\n161:65377,\n162:65378,\n163:65379,\n164:65380,\n165:65381,\n166:65382,\n167:65383,\n168:65384,\n169:65385,\n170:65386,\n171:65387,\n172:65388,\n173:65389,\n174:65390,\n175:65391,\n176:65392,\n177:65393,\n178:65394,\n179:65395,\n180:65396,\n181:65397,\n182:65398,\n183:65399,\n184:65400,\n185:65401,\n186:65402,\n187:65403,\n188:65404,\n189:65405,\n190:65406,\n191:65407,\n192:65408,\n193:65409,\n194:65410,\n195:65411,\n196:65412,\n197:65413,\n198:65414,\n199:65415,\n200:65416,\n201:65417,\n202:65418,\n203:65419,\n204:65420,\n205:65421,\n206:65422,\n207:65423,\n208:65424,\n209:65425,\n210:65426,\n211:65427,\n212:65428,\n213:65429,\n214:65430,\n215:65431,\n216:65432,\n217:65433,\n218:65434,\n219:65435,\n220:65436,\n221:65437,\n222:65438,\n223:65439,\n33088:12288,\n33089:12289,\n33090:12290,\n33091:65292,\n33092:65294,\n33093:12539,\n33094:65306,\n33095:65307,\n33096:65311,\n33097:65281,\n33098:12443,\n33099:12444,\n33100:180,\n33101:65344,\n33102:168,\n33103:65342,\n33104:65507,\n33105:65343,\n33106:12541,\n33107:12542,\n33108:12445,\n33109:12446,\n33110:12291,\n33111:20189,\n33112:12293,\n33113:12294,\n33114:12295,\n33115:12540,\n33116:8213,\n33117:8208,\n33118:65295,\n33119:65340,\n33120:65374,\n33121:8741,\n33122:65372,\n33123:8230,\n33124:8229,\n33125:8216,\n33126:8217,\n33127:8220,\n33128:8221,\n33129:65288,\n33130:65289,\n33131:12308,\n33132:12309,\n33133:65339,\n33134:65341,\n33135:65371,\n33136:65373,\n33137:12296,\n33138:12297,\n33139:12298,\n33140:12299,\n33141:12300,\n33142:12301,\n33143:12302,\n33144:12303,\n33145:12304,\n33146:12305,\n33147:65291,\n33148:65293,\n33149:177,\n33150:215,\n33152:247,\n33153:65309,\n33154:8800,\n33155:65308,\n33156:65310,\n33157:8806,\n33158:8807,\n33159:8734,\n33160:8756,\n33161:9794,\n33162:9792,\n33163:176,\n33164:8242,\n33165:8243,\n33166:8451,\n33167:65509,\n33168:65284,\n33169:65504,\n33170:65505,\n33171:65285,\n33172:65283,\n33173:65286,\n33174:65290,\n33175:65312,\n33176:167,\n33177:9734,\n33178:9733,\n33179:9675,\n33180:9679,\n33181:9678,\n33182:9671,\n33183:9670,\n33184:9633,\n33185:9632,\n33186:9651,\n33187:9650,\n33188:9661,\n33189:9660,\n33190:8251,\n33191:12306,\n33192:8594,\n33193:8592,\n33194:8593,\n33195:8595,\n33196:12307,\n33208:8712,\n33209:8715,\n33210:8838,\n33211:8839,\n33212:8834,\n33213:8835,\n33214:8746,\n33215:8745,\n33224:8743,\n33225:8744,\n33226:65506,\n33227:8658,\n33228:8660,\n33229:8704,\n33230:8707,\n33242:8736,\n33243:8869,\n33244:8978,\n33245:8706,\n33246:8711,\n33247:8801,\n33248:8786,\n33249:8810,\n33250:8811,\n33251:8730,\n33252:8765,\n33253:8733,\n33254:8757,\n33255:8747,\n33256:8748,\n33264:8491,\n33265:8240,\n33266:9839,\n33267:9837,\n33268:9834,\n33269:8224,\n33270:8225,\n33271:182,\n33276:9711,\n33359:65296,\n33360:65297,\n33361:65298,\n33362:65299,\n33363:65300,\n33364:65301,\n33365:65302,\n33366:65303,\n33367:65304,\n33368:65305,\n33376:65313,\n33377:65314,\n33378:65315,\n33379:65316,\n33380:65317,\n33381:65318,\n33382:65319,\n33383:65320,\n33384:65321,\n33385:65322,\n33386:65323,\n33387:65324,\n33388:65325,\n33389:65326,\n33390:65327,\n33391:65328,\n33392:65329,\n33393:65330,\n33394:65331,\n33395:65332,\n33396:65333,\n33397:65334,\n33398:65335,\n33399:65336,\n33400:65337,\n33401:65338,\n33409:65345,\n33410:65346,\n33411:65347,\n33412:65348,\n33413:65349,\n33414:65350,\n33415:65351,\n33416:65352,\n33417:65353,\n33418:65354,\n33419:65355,\n33420:65356,\n33421:65357,\n33422:65358,\n33423:65359,\n33424:65360,\n33425:65361,\n33426:65362,\n33427:65363,\n33428:65364,\n33429:65365,\n33430:65366,\n33431:65367,\n33432:65368,\n33433:65369,\n33434:65370,\n33439:12353,\n33440:12354,\n33441:12355,\n33442:12356,\n33443:12357,\n33444:12358,\n33445:12359,\n33446:12360,\n33447:12361,\n33448:12362,\n33449:12363,\n33450:12364,\n33451:12365,\n33452:12366,\n33453:12367,\n33454:12368,\n33455:12369,\n33456:12370,\n33457:12371,\n33458:12372,\n33459:12373,\n33460:12374,\n33461:12375,\n33462:12376,\n33463:12377,\n33464:12378,\n33465:12379,\n33466:12380,\n33467:12381,\n33468:12382,\n33469:12383,\n33470:12384,\n33471:12385,\n33472:12386,\n33473:12387,\n33474:12388,\n33475:12389,\n33476:12390,\n33477:12391,\n33478:12392,\n33479:12393,\n33480:12394,\n33481:12395,\n33482:12396,\n33483:12397,\n33484:12398,\n33485:12399,\n33486:12400,\n33487:12401,\n33488:12402,\n33489:12403,\n33490:12404,\n33491:12405,\n33492:12406,\n33493:12407,\n33494:12408,\n33495:12409,\n33496:12410,\n33497:12411,\n33498:12412,\n33499:12413,\n33500:12414,\n33501:12415,\n33502:12416,\n33503:12417,\n33504:12418,\n33505:12419,\n33506:12420,\n33507:12421,\n33508:12422,\n33509:12423,\n33510:12424,\n33511:12425,\n33512:12426,\n33513:12427,\n33514:12428,\n33515:12429,\n33516:12430,\n33517:12431,\n33518:12432,\n33519:12433,\n33520:12434,\n33521:12435,\n33600:12449,\n33601:12450,\n33602:12451,\n33603:12452,\n33604:12453,\n33605:12454,\n33606:12455,\n33607:12456,\n33608:12457,\n33609:12458,\n33610:12459,\n33611:12460,\n33612:12461,\n33613:12462,\n33614:12463,\n33615:12464,\n33616:12465,\n33617:12466,\n33618:12467,\n33619:12468,\n33620:12469,\n33621:12470,\n33622:12471,\n33623:12472,\n33624:12473,\n33625:12474,\n33626:12475,\n33627:12476,\n33628:12477,\n33629:12478,\n33630:12479,\n33631:12480,\n33632:12481,\n33633:12482,\n33634:12483,\n33635:12484,\n33636:12485,\n33637:12486,\n33638:12487,\n33639:12488,\n33640:12489,\n33641:12490,\n33642:12491,\n33643:12492,\n33644:12493,\n33645:12494,\n33646:12495,\n33647:12496,\n33648:12497,\n33649:12498,\n33650:12499,\n33651:12500,\n33652:12501,\n33653:12502,\n33654:12503,\n33655:12504,\n33656:12505,\n33657:12506,\n33658:12507,\n33659:12508,\n33660:12509,\n33661:12510,\n33662:12511,\n33664:12512,\n33665:12513,\n33666:12514,\n33667:12515,\n33668:12516,\n33669:12517,\n33670:12518,\n33671:12519,\n33672:12520,\n33673:12521,\n33674:12522,\n33675:12523,\n33676:12524,\n33677:12525,\n33678:12526,\n33679:12527,\n33680:12528,\n33681:12529,\n33682:12530,\n33683:12531,\n33684:12532,\n33685:12533,\n33686:12534,\n33695:913,\n33696:914,\n33697:915,\n33698:916,\n33699:917,\n33700:918,\n33701:919,\n33702:920,\n33703:921,\n33704:922,\n33705:923,\n33706:924,\n33707:925,\n33708:926,\n33709:927,\n33710:928,\n33711:929,\n33712:931,\n33713:932,\n33714:933,\n33715:934,\n33716:935,\n33717:936,\n33718:937,\n33727:945,\n33728:946,\n33729:947,\n33730:948,\n33731:949,\n33732:950,\n33733:951,\n33734:952,\n33735:953,\n33736:954,\n33737:955,\n33738:956,\n33739:957,\n33740:958,\n33741:959,\n33742:960,\n33743:961,\n33744:963,\n33745:964,\n33746:965,\n33747:966,\n33748:967,\n33749:968,\n33750:969,\n33856:1040,\n33857:1041,\n33858:1042,\n33859:1043,\n33860:1044,\n33861:1045,\n33862:1025,\n33863:1046,\n33864:1047,\n33865:1048,\n33866:1049,\n33867:1050,\n33868:1051,\n33869:1052,\n33870:1053,\n33871:1054,\n33872:1055,\n33873:1056,\n33874:1057,\n33875:1058,\n33876:1059,\n33877:1060,\n33878:1061,\n33879:1062,\n33880:1063,\n33881:1064,\n33882:1065,\n33883:1066,\n33884:1067,\n33885:1068,\n33886:1069,\n33887:1070,\n33888:1071,\n33904:1072,\n33905:1073,\n33906:1074,\n33907:1075,\n33908:1076,\n33909:1077,\n33910:1105,\n33911:1078,\n33912:1079,\n33913:1080,\n33914:1081,\n33915:1082,\n33916:1083,\n33917:1084,\n33918:1085,\n33920:1086,\n33921:1087,\n33922:1088,\n33923:1089,\n33924:1090,\n33925:1091,\n33926:1092,\n33927:1093,\n33928:1094,\n33929:1095,\n33930:1096,\n33931:1097,\n33932:1098,\n33933:1099,\n33934:1100,\n33935:1101,\n33936:1102,\n33937:1103,\n33951:9472,\n33952:9474,\n33953:9484,\n33954:9488,\n33955:9496,\n33956:9492,\n33957:9500,\n33958:9516,\n33959:9508,\n33960:9524,\n33961:9532,\n33962:9473,\n33963:9475,\n33964:9487,\n33965:9491,\n33966:9499,\n33967:9495,\n33968:9507,\n33969:9523,\n33970:9515,\n33971:9531,\n33972:9547,\n33973:9504,\n33974:9519,\n33975:9512,\n33976:9527,\n33977:9535,\n33978:9501,\n33979:9520,\n33980:9509,\n33981:9528,\n33982:9538,\n34624:9312,\n34625:9313,\n34626:9314,\n34627:9315,\n34628:9316,\n34629:9317,\n34630:9318,\n34631:9319,\n34632:9320,\n34633:9321,\n34634:9322,\n34635:9323,\n34636:9324,\n34637:9325,\n34638:9326,\n34639:9327,\n34640:9328,\n34641:9329,\n34642:9330,\n34643:9331,\n34644:8544,\n34645:8545,\n34646:8546,\n34647:8547,\n34648:8548,\n34649:8549,\n34650:8550,\n34651:8551,\n34652:8552,\n34653:8553,\n34655:13129,\n34656:13076,\n34657:13090,\n34658:13133,\n34659:13080,\n34660:13095,\n34661:13059,\n34662:13110,\n34663:13137,\n34664:13143,\n34665:13069,\n34666:13094,\n34667:13091,\n34668:13099,\n34669:13130,\n34670:13115,\n34671:13212,\n34672:13213,\n34673:13214,\n34674:13198,\n34675:13199,\n34676:13252,\n34677:13217,\n34686:13179,\n34688:12317,\n34689:12319,\n34690:8470,\n34691:13261,\n34692:8481,\n34693:12964,\n34694:12965,\n34695:12966,\n34696:12967,\n34697:12968,\n34698:12849,\n34699:12850,\n34700:12857,\n34701:13182,\n34702:13181,\n34703:13180,\n34704:8786,\n34705:8801,\n34706:8747,\n34707:8750,\n34708:8721,\n34709:8730,\n34710:8869,\n34711:8736,\n34712:8735,\n34713:8895,\n34714:8757,\n34715:8745,\n34716:8746,\n34975:20124,\n34976:21782,\n34977:23043,\n34978:38463,\n34979:21696,\n34980:24859,\n34981:25384,\n34982:23030,\n34983:36898,\n34984:33909,\n34985:33564,\n34986:31312,\n34987:24746,\n34988:25569,\n34989:28197,\n34990:26093,\n34991:33894,\n34992:33446,\n34993:39925,\n34994:26771,\n34995:22311,\n34996:26017,\n34997:25201,\n34998:23451,\n34999:22992,\n35000:34427,\n35001:39156,\n35002:32098,\n35003:32190,\n35004:39822,\n35005:25110,\n35006:31903,\n35007:34999,\n35008:23433,\n35009:24245,\n35010:25353,\n35011:26263,\n35012:26696,\n35013:38343,\n35014:38797,\n35015:26447,\n35016:20197,\n35017:20234,\n35018:20301,\n35019:20381,\n35020:20553,\n35021:22258,\n35022:22839,\n35023:22996,\n35024:23041,\n35025:23561,\n35026:24799,\n35027:24847,\n35028:24944,\n35029:26131,\n35030:26885,\n35031:28858,\n35032:30031,\n35033:30064,\n35034:31227,\n35035:32173,\n35036:32239,\n35037:32963,\n35038:33806,\n35039:34915,\n35040:35586,\n35041:36949,\n35042:36986,\n35043:21307,\n35044:20117,\n35045:20133,\n35046:22495,\n35047:32946,\n35048:37057,\n35049:30959,\n35050:19968,\n35051:22769,\n35052:28322,\n35053:36920,\n35054:31282,\n35055:33576,\n35056:33419,\n35057:39983,\n35058:20801,\n35059:21360,\n35060:21693,\n35061:21729,\n35062:22240,\n35063:23035,\n35064:24341,\n35065:39154,\n35066:28139,\n35067:32996,\n35068:34093,\n35136:38498,\n35137:38512,\n35138:38560,\n35139:38907,\n35140:21515,\n35141:21491,\n35142:23431,\n35143:28879,\n35144:32701,\n35145:36802,\n35146:38632,\n35147:21359,\n35148:40284,\n35149:31418,\n35150:19985,\n35151:30867,\n35152:33276,\n35153:28198,\n35154:22040,\n35155:21764,\n35156:27421,\n35157:34074,\n35158:39995,\n35159:23013,\n35160:21417,\n35161:28006,\n35162:29916,\n35163:38287,\n35164:22082,\n35165:20113,\n35166:36939,\n35167:38642,\n35168:33615,\n35169:39180,\n35170:21473,\n35171:21942,\n35172:23344,\n35173:24433,\n35174:26144,\n35175:26355,\n35176:26628,\n35177:27704,\n35178:27891,\n35179:27945,\n35180:29787,\n35181:30408,\n35182:31310,\n35183:38964,\n35184:33521,\n35185:34907,\n35186:35424,\n35187:37613,\n35188:28082,\n35189:30123,\n35190:30410,\n35191:39365,\n35192:24742,\n35193:35585,\n35194:36234,\n35195:38322,\n35196:27022,\n35197:21421,\n35198:20870,\n35200:22290,\n35201:22576,\n35202:22852,\n35203:23476,\n35204:24310,\n35205:24616,\n35206:25513,\n35207:25588,\n35208:27839,\n35209:28436,\n35210:28814,\n35211:28948,\n35212:29017,\n35213:29141,\n35214:29503,\n35215:32257,\n35216:33398,\n35217:33489,\n35218:34199,\n35219:36960,\n35220:37467,\n35221:40219,\n35222:22633,\n35223:26044,\n35224:27738,\n35225:29989,\n35226:20985,\n35227:22830,\n35228:22885,\n35229:24448,\n35230:24540,\n35231:25276,\n35232:26106,\n35233:27178,\n35234:27431,\n35235:27572,\n35236:29579,\n35237:32705,\n35238:35158,\n35239:40236,\n35240:40206,\n35241:40644,\n35242:23713,\n35243:27798,\n35244:33659,\n35245:20740,\n35246:23627,\n35247:25014,\n35248:33222,\n35249:26742,\n35250:29281,\n35251:20057,\n35252:20474,\n35253:21368,\n35254:24681,\n35255:28201,\n35256:31311,\n35257:38899,\n35258:19979,\n35259:21270,\n35260:20206,\n35261:20309,\n35262:20285,\n35263:20385,\n35264:20339,\n35265:21152,\n35266:21487,\n35267:22025,\n35268:22799,\n35269:23233,\n35270:23478,\n35271:23521,\n35272:31185,\n35273:26247,\n35274:26524,\n35275:26550,\n35276:27468,\n35277:27827,\n35278:28779,\n35279:29634,\n35280:31117,\n35281:31166,\n35282:31292,\n35283:31623,\n35284:33457,\n35285:33499,\n35286:33540,\n35287:33655,\n35288:33775,\n35289:33747,\n35290:34662,\n35291:35506,\n35292:22057,\n35293:36008,\n35294:36838,\n35295:36942,\n35296:38686,\n35297:34442,\n35298:20420,\n35299:23784,\n35300:25105,\n35301:29273,\n35302:30011,\n35303:33253,\n35304:33469,\n35305:34558,\n35306:36032,\n35307:38597,\n35308:39187,\n35309:39381,\n35310:20171,\n35311:20250,\n35312:35299,\n35313:22238,\n35314:22602,\n35315:22730,\n35316:24315,\n35317:24555,\n35318:24618,\n35319:24724,\n35320:24674,\n35321:25040,\n35322:25106,\n35323:25296,\n35324:25913,\n35392:39745,\n35393:26214,\n35394:26800,\n35395:28023,\n35396:28784,\n35397:30028,\n35398:30342,\n35399:32117,\n35400:33445,\n35401:34809,\n35402:38283,\n35403:38542,\n35404:35997,\n35405:20977,\n35406:21182,\n35407:22806,\n35408:21683,\n35409:23475,\n35410:23830,\n35411:24936,\n35412:27010,\n35413:28079,\n35414:30861,\n35415:33995,\n35416:34903,\n35417:35442,\n35418:37799,\n35419:39608,\n35420:28012,\n35421:39336,\n35422:34521,\n35423:22435,\n35424:26623,\n35425:34510,\n35426:37390,\n35427:21123,\n35428:22151,\n35429:21508,\n35430:24275,\n35431:25313,\n35432:25785,\n35433:26684,\n35434:26680,\n35435:27579,\n35436:29554,\n35437:30906,\n35438:31339,\n35439:35226,\n35440:35282,\n35441:36203,\n35442:36611,\n35443:37101,\n35444:38307,\n35445:38548,\n35446:38761,\n35447:23398,\n35448:23731,\n35449:27005,\n35450:38989,\n35451:38990,\n35452:25499,\n35453:31520,\n35454:27179,\n35456:27263,\n35457:26806,\n35458:39949,\n35459:28511,\n35460:21106,\n35461:21917,\n35462:24688,\n35463:25324,\n35464:27963,\n35465:28167,\n35466:28369,\n35467:33883,\n35468:35088,\n35469:36676,\n35470:19988,\n35471:39993,\n35472:21494,\n35473:26907,\n35474:27194,\n35475:38788,\n35476:26666,\n35477:20828,\n35478:31427,\n35479:33970,\n35480:37340,\n35481:37772,\n35482:22107,\n35483:40232,\n35484:26658,\n35485:33541,\n35486:33841,\n35487:31909,\n35488:21000,\n35489:33477,\n35490:29926,\n35491:20094,\n35492:20355,\n35493:20896,\n35494:23506,\n35495:21002,\n35496:21208,\n35497:21223,\n35498:24059,\n35499:21914,\n35500:22570,\n35501:23014,\n35502:23436,\n35503:23448,\n35504:23515,\n35505:24178,\n35506:24185,\n35507:24739,\n35508:24863,\n35509:24931,\n35510:25022,\n35511:25563,\n35512:25954,\n35513:26577,\n35514:26707,\n35515:26874,\n35516:27454,\n35517:27475,\n35518:27735,\n35519:28450,\n35520:28567,\n35521:28485,\n35522:29872,\n35523:29976,\n35524:30435,\n35525:30475,\n35526:31487,\n35527:31649,\n35528:31777,\n35529:32233,\n35530:32566,\n35531:32752,\n35532:32925,\n35533:33382,\n35534:33694,\n35535:35251,\n35536:35532,\n35537:36011,\n35538:36996,\n35539:37969,\n35540:38291,\n35541:38289,\n35542:38306,\n35543:38501,\n35544:38867,\n35545:39208,\n35546:33304,\n35547:20024,\n35548:21547,\n35549:23736,\n35550:24012,\n35551:29609,\n35552:30284,\n35553:30524,\n35554:23721,\n35555:32747,\n35556:36107,\n35557:38593,\n35558:38929,\n35559:38996,\n35560:39000,\n35561:20225,\n35562:20238,\n35563:21361,\n35564:21916,\n35565:22120,\n35566:22522,\n35567:22855,\n35568:23305,\n35569:23492,\n35570:23696,\n35571:24076,\n35572:24190,\n35573:24524,\n35574:25582,\n35575:26426,\n35576:26071,\n35577:26082,\n35578:26399,\n35579:26827,\n35580:26820,\n35648:27231,\n35649:24112,\n35650:27589,\n35651:27671,\n35652:27773,\n35653:30079,\n35654:31048,\n35655:23395,\n35656:31232,\n35657:32000,\n35658:24509,\n35659:35215,\n35660:35352,\n35661:36020,\n35662:36215,\n35663:36556,\n35664:36637,\n35665:39138,\n35666:39438,\n35667:39740,\n35668:20096,\n35669:20605,\n35670:20736,\n35671:22931,\n35672:23452,\n35673:25135,\n35674:25216,\n35675:25836,\n35676:27450,\n35677:29344,\n35678:30097,\n35679:31047,\n35680:32681,\n35681:34811,\n35682:35516,\n35683:35696,\n35684:25516,\n35685:33738,\n35686:38816,\n35687:21513,\n35688:21507,\n35689:21931,\n35690:26708,\n35691:27224,\n35692:35440,\n35693:30759,\n35694:26485,\n35695:40653,\n35696:21364,\n35697:23458,\n35698:33050,\n35699:34384,\n35700:36870,\n35701:19992,\n35702:20037,\n35703:20167,\n35704:20241,\n35705:21450,\n35706:21560,\n35707:23470,\n35708:24339,\n35709:24613,\n35710:25937,\n35712:26429,\n35713:27714,\n35714:27762,\n35715:27875,\n35716:28792,\n35717:29699,\n35718:31350,\n35719:31406,\n35720:31496,\n35721:32026,\n35722:31998,\n35723:32102,\n35724:26087,\n35725:29275,\n35726:21435,\n35727:23621,\n35728:24040,\n35729:25298,\n35730:25312,\n35731:25369,\n35732:28192,\n35733:34394,\n35734:35377,\n35735:36317,\n35736:37624,\n35737:28417,\n35738:31142,\n35739:39770,\n35740:20136,\n35741:20139,\n35742:20140,\n35743:20379,\n35744:20384,\n35745:20689,\n35746:20807,\n35747:31478,\n35748:20849,\n35749:20982,\n35750:21332,\n35751:21281,\n35752:21375,\n35753:21483,\n35754:21932,\n35755:22659,\n35756:23777,\n35757:24375,\n35758:24394,\n35759:24623,\n35760:24656,\n35761:24685,\n35762:25375,\n35763:25945,\n35764:27211,\n35765:27841,\n35766:29378,\n35767:29421,\n35768:30703,\n35769:33016,\n35770:33029,\n35771:33288,\n35772:34126,\n35773:37111,\n35774:37857,\n35775:38911,\n35776:39255,\n35777:39514,\n35778:20208,\n35779:20957,\n35780:23597,\n35781:26241,\n35782:26989,\n35783:23616,\n35784:26354,\n35785:26997,\n35786:29577,\n35787:26704,\n35788:31873,\n35789:20677,\n35790:21220,\n35791:22343,\n35792:24062,\n35793:37670,\n35794:26020,\n35795:27427,\n35796:27453,\n35797:29748,\n35798:31105,\n35799:31165,\n35800:31563,\n35801:32202,\n35802:33465,\n35803:33740,\n35804:34943,\n35805:35167,\n35806:35641,\n35807:36817,\n35808:37329,\n35809:21535,\n35810:37504,\n35811:20061,\n35812:20534,\n35813:21477,\n35814:21306,\n35815:29399,\n35816:29590,\n35817:30697,\n35818:33510,\n35819:36527,\n35820:39366,\n35821:39368,\n35822:39378,\n35823:20855,\n35824:24858,\n35825:34398,\n35826:21936,\n35827:31354,\n35828:20598,\n35829:23507,\n35830:36935,\n35831:38533,\n35832:20018,\n35833:27355,\n35834:37351,\n35835:23633,\n35836:23624,\n35904:25496,\n35905:31391,\n35906:27795,\n35907:38772,\n35908:36705,\n35909:31402,\n35910:29066,\n35911:38536,\n35912:31874,\n35913:26647,\n35914:32368,\n35915:26705,\n35916:37740,\n35917:21234,\n35918:21531,\n35919:34219,\n35920:35347,\n35921:32676,\n35922:36557,\n35923:37089,\n35924:21350,\n35925:34952,\n35926:31041,\n35927:20418,\n35928:20670,\n35929:21009,\n35930:20804,\n35931:21843,\n35932:22317,\n35933:29674,\n35934:22411,\n35935:22865,\n35936:24418,\n35937:24452,\n35938:24693,\n35939:24950,\n35940:24935,\n35941:25001,\n35942:25522,\n35943:25658,\n35944:25964,\n35945:26223,\n35946:26690,\n35947:28179,\n35948:30054,\n35949:31293,\n35950:31995,\n35951:32076,\n35952:32153,\n35953:32331,\n35954:32619,\n35955:33550,\n35956:33610,\n35957:34509,\n35958:35336,\n35959:35427,\n35960:35686,\n35961:36605,\n35962:38938,\n35963:40335,\n35964:33464,\n35965:36814,\n35966:39912,\n35968:21127,\n35969:25119,\n35970:25731,\n35971:28608,\n35972:38553,\n35973:26689,\n35974:20625,\n35975:27424,\n35976:27770,\n35977:28500,\n35978:31348,\n35979:32080,\n35980:34880,\n35981:35363,\n35982:26376,\n35983:20214,\n35984:20537,\n35985:20518,\n35986:20581,\n35987:20860,\n35988:21048,\n35989:21091,\n35990:21927,\n35991:22287,\n35992:22533,\n35993:23244,\n35994:24314,\n35995:25010,\n35996:25080,\n35997:25331,\n35998:25458,\n35999:26908,\n36000:27177,\n36001:29309,\n36002:29356,\n36003:29486,\n36004:30740,\n36005:30831,\n36006:32121,\n36007:30476,\n36008:32937,\n36009:35211,\n36010:35609,\n36011:36066,\n36012:36562,\n36013:36963,\n36014:37749,\n36015:38522,\n36016:38997,\n36017:39443,\n36018:40568,\n36019:20803,\n36020:21407,\n36021:21427,\n36022:24187,\n36023:24358,\n36024:28187,\n36025:28304,\n36026:29572,\n36027:29694,\n36028:32067,\n36029:33335,\n36030:35328,\n36031:35578,\n36032:38480,\n36033:20046,\n36034:20491,\n36035:21476,\n36036:21628,\n36037:22266,\n36038:22993,\n36039:23396,\n36040:24049,\n36041:24235,\n36042:24359,\n36043:25144,\n36044:25925,\n36045:26543,\n36046:28246,\n36047:29392,\n36048:31946,\n36049:34996,\n36050:32929,\n36051:32993,\n36052:33776,\n36053:34382,\n36054:35463,\n36055:36328,\n36056:37431,\n36057:38599,\n36058:39015,\n36059:40723,\n36060:20116,\n36061:20114,\n36062:20237,\n36063:21320,\n36064:21577,\n36065:21566,\n36066:23087,\n36067:24460,\n36068:24481,\n36069:24735,\n36070:26791,\n36071:27278,\n36072:29786,\n36073:30849,\n36074:35486,\n36075:35492,\n36076:35703,\n36077:37264,\n36078:20062,\n36079:39881,\n36080:20132,\n36081:20348,\n36082:20399,\n36083:20505,\n36084:20502,\n36085:20809,\n36086:20844,\n36087:21151,\n36088:21177,\n36089:21246,\n36090:21402,\n36091:21475,\n36092:21521,\n36160:21518,\n36161:21897,\n36162:22353,\n36163:22434,\n36164:22909,\n36165:23380,\n36166:23389,\n36167:23439,\n36168:24037,\n36169:24039,\n36170:24055,\n36171:24184,\n36172:24195,\n36173:24218,\n36174:24247,\n36175:24344,\n36176:24658,\n36177:24908,\n36178:25239,\n36179:25304,\n36180:25511,\n36181:25915,\n36182:26114,\n36183:26179,\n36184:26356,\n36185:26477,\n36186:26657,\n36187:26775,\n36188:27083,\n36189:27743,\n36190:27946,\n36191:28009,\n36192:28207,\n36193:28317,\n36194:30002,\n36195:30343,\n36196:30828,\n36197:31295,\n36198:31968,\n36199:32005,\n36200:32024,\n36201:32094,\n36202:32177,\n36203:32789,\n36204:32771,\n36205:32943,\n36206:32945,\n36207:33108,\n36208:33167,\n36209:33322,\n36210:33618,\n36211:34892,\n36212:34913,\n36213:35611,\n36214:36002,\n36215:36092,\n36216:37066,\n36217:37237,\n36218:37489,\n36219:30783,\n36220:37628,\n36221:38308,\n36222:38477,\n36224:38917,\n36225:39321,\n36226:39640,\n36227:40251,\n36228:21083,\n36229:21163,\n36230:21495,\n36231:21512,\n36232:22741,\n36233:25335,\n36234:28640,\n36235:35946,\n36236:36703,\n36237:40633,\n36238:20811,\n36239:21051,\n36240:21578,\n36241:22269,\n36242:31296,\n36243:37239,\n36244:40288,\n36245:40658,\n36246:29508,\n36247:28425,\n36248:33136,\n36249:29969,\n36250:24573,\n36251:24794,\n36252:39592,\n36253:29403,\n36254:36796,\n36255:27492,\n36256:38915,\n36257:20170,\n36258:22256,\n36259:22372,\n36260:22718,\n36261:23130,\n36262:24680,\n36263:25031,\n36264:26127,\n36265:26118,\n36266:26681,\n36267:26801,\n36268:28151,\n36269:30165,\n36270:32058,\n36271:33390,\n36272:39746,\n36273:20123,\n36274:20304,\n36275:21449,\n36276:21766,\n36277:23919,\n36278:24038,\n36279:24046,\n36280:26619,\n36281:27801,\n36282:29811,\n36283:30722,\n36284:35408,\n36285:37782,\n36286:35039,\n36287:22352,\n36288:24231,\n36289:25387,\n36290:20661,\n36291:20652,\n36292:20877,\n36293:26368,\n36294:21705,\n36295:22622,\n36296:22971,\n36297:23472,\n36298:24425,\n36299:25165,\n36300:25505,\n36301:26685,\n36302:27507,\n36303:28168,\n36304:28797,\n36305:37319,\n36306:29312,\n36307:30741,\n36308:30758,\n36309:31085,\n36310:25998,\n36311:32048,\n36312:33756,\n36313:35009,\n36314:36617,\n36315:38555,\n36316:21092,\n36317:22312,\n36318:26448,\n36319:32618,\n36320:36001,\n36321:20916,\n36322:22338,\n36323:38442,\n36324:22586,\n36325:27018,\n36326:32948,\n36327:21682,\n36328:23822,\n36329:22524,\n36330:30869,\n36331:40442,\n36332:20316,\n36333:21066,\n36334:21643,\n36335:25662,\n36336:26152,\n36337:26388,\n36338:26613,\n36339:31364,\n36340:31574,\n36341:32034,\n36342:37679,\n36343:26716,\n36344:39853,\n36345:31545,\n36346:21273,\n36347:20874,\n36348:21047,\n36416:23519,\n36417:25334,\n36418:25774,\n36419:25830,\n36420:26413,\n36421:27578,\n36422:34217,\n36423:38609,\n36424:30352,\n36425:39894,\n36426:25420,\n36427:37638,\n36428:39851,\n36429:30399,\n36430:26194,\n36431:19977,\n36432:20632,\n36433:21442,\n36434:23665,\n36435:24808,\n36436:25746,\n36437:25955,\n36438:26719,\n36439:29158,\n36440:29642,\n36441:29987,\n36442:31639,\n36443:32386,\n36444:34453,\n36445:35715,\n36446:36059,\n36447:37240,\n36448:39184,\n36449:26028,\n36450:26283,\n36451:27531,\n36452:20181,\n36453:20180,\n36454:20282,\n36455:20351,\n36456:21050,\n36457:21496,\n36458:21490,\n36459:21987,\n36460:22235,\n36461:22763,\n36462:22987,\n36463:22985,\n36464:23039,\n36465:23376,\n36466:23629,\n36467:24066,\n36468:24107,\n36469:24535,\n36470:24605,\n36471:25351,\n36472:25903,\n36473:23388,\n36474:26031,\n36475:26045,\n36476:26088,\n36477:26525,\n36478:27490,\n36480:27515,\n36481:27663,\n36482:29509,\n36483:31049,\n36484:31169,\n36485:31992,\n36486:32025,\n36487:32043,\n36488:32930,\n36489:33026,\n36490:33267,\n36491:35222,\n36492:35422,\n36493:35433,\n36494:35430,\n36495:35468,\n36496:35566,\n36497:36039,\n36498:36060,\n36499:38604,\n36500:39164,\n36501:27503,\n36502:20107,\n36503:20284,\n36504:20365,\n36505:20816,\n36506:23383,\n36507:23546,\n36508:24904,\n36509:25345,\n36510:26178,\n36511:27425,\n36512:28363,\n36513:27835,\n36514:29246,\n36515:29885,\n36516:30164,\n36517:30913,\n36518:31034,\n36519:32780,\n36520:32819,\n36521:33258,\n36522:33940,\n36523:36766,\n36524:27728,\n36525:40575,\n36526:24335,\n36527:35672,\n36528:40235,\n36529:31482,\n36530:36600,\n36531:23437,\n36532:38635,\n36533:19971,\n36534:21489,\n36535:22519,\n36536:22833,\n36537:23241,\n36538:23460,\n36539:24713,\n36540:28287,\n36541:28422,\n36542:30142,\n36543:36074,\n36544:23455,\n36545:34048,\n36546:31712,\n36547:20594,\n36548:26612,\n36549:33437,\n36550:23649,\n36551:34122,\n36552:32286,\n36553:33294,\n36554:20889,\n36555:23556,\n36556:25448,\n36557:36198,\n36558:26012,\n36559:29038,\n36560:31038,\n36561:32023,\n36562:32773,\n36563:35613,\n36564:36554,\n36565:36974,\n36566:34503,\n36567:37034,\n36568:20511,\n36569:21242,\n36570:23610,\n36571:26451,\n36572:28796,\n36573:29237,\n36574:37196,\n36575:37320,\n36576:37675,\n36577:33509,\n36578:23490,\n36579:24369,\n36580:24825,\n36581:20027,\n36582:21462,\n36583:23432,\n36584:25163,\n36585:26417,\n36586:27530,\n36587:29417,\n36588:29664,\n36589:31278,\n36590:33131,\n36591:36259,\n36592:37202,\n36593:39318,\n36594:20754,\n36595:21463,\n36596:21610,\n36597:23551,\n36598:25480,\n36599:27193,\n36600:32172,\n36601:38656,\n36602:22234,\n36603:21454,\n36604:21608,\n36672:23447,\n36673:23601,\n36674:24030,\n36675:20462,\n36676:24833,\n36677:25342,\n36678:27954,\n36679:31168,\n36680:31179,\n36681:32066,\n36682:32333,\n36683:32722,\n36684:33261,\n36685:33311,\n36686:33936,\n36687:34886,\n36688:35186,\n36689:35728,\n36690:36468,\n36691:36655,\n36692:36913,\n36693:37195,\n36694:37228,\n36695:38598,\n36696:37276,\n36697:20160,\n36698:20303,\n36699:20805,\n36700:21313,\n36701:24467,\n36702:25102,\n36703:26580,\n36704:27713,\n36705:28171,\n36706:29539,\n36707:32294,\n36708:37325,\n36709:37507,\n36710:21460,\n36711:22809,\n36712:23487,\n36713:28113,\n36714:31069,\n36715:32302,\n36716:31899,\n36717:22654,\n36718:29087,\n36719:20986,\n36720:34899,\n36721:36848,\n36722:20426,\n36723:23803,\n36724:26149,\n36725:30636,\n36726:31459,\n36727:33308,\n36728:39423,\n36729:20934,\n36730:24490,\n36731:26092,\n36732:26991,\n36733:27529,\n36734:28147,\n36736:28310,\n36737:28516,\n36738:30462,\n36739:32020,\n36740:24033,\n36741:36981,\n36742:37255,\n36743:38918,\n36744:20966,\n36745:21021,\n36746:25152,\n36747:26257,\n36748:26329,\n36749:28186,\n36750:24246,\n36751:32210,\n36752:32626,\n36753:26360,\n36754:34223,\n36755:34295,\n36756:35576,\n36757:21161,\n36758:21465,\n36759:22899,\n36760:24207,\n36761:24464,\n36762:24661,\n36763:37604,\n36764:38500,\n36765:20663,\n36766:20767,\n36767:21213,\n36768:21280,\n36769:21319,\n36770:21484,\n36771:21736,\n36772:21830,\n36773:21809,\n36774:22039,\n36775:22888,\n36776:22974,\n36777:23100,\n36778:23477,\n36779:23558,\n36780:23567,\n36781:23569,\n36782:23578,\n36783:24196,\n36784:24202,\n36785:24288,\n36786:24432,\n36787:25215,\n36788:25220,\n36789:25307,\n36790:25484,\n36791:25463,\n36792:26119,\n36793:26124,\n36794:26157,\n36795:26230,\n36796:26494,\n36797:26786,\n36798:27167,\n36799:27189,\n36800:27836,\n36801:28040,\n36802:28169,\n36803:28248,\n36804:28988,\n36805:28966,\n36806:29031,\n36807:30151,\n36808:30465,\n36809:30813,\n36810:30977,\n36811:31077,\n36812:31216,\n36813:31456,\n36814:31505,\n36815:31911,\n36816:32057,\n36817:32918,\n36818:33750,\n36819:33931,\n36820:34121,\n36821:34909,\n36822:35059,\n36823:35359,\n36824:35388,\n36825:35412,\n36826:35443,\n36827:35937,\n36828:36062,\n36829:37284,\n36830:37478,\n36831:37758,\n36832:37912,\n36833:38556,\n36834:38808,\n36835:19978,\n36836:19976,\n36837:19998,\n36838:20055,\n36839:20887,\n36840:21104,\n36841:22478,\n36842:22580,\n36843:22732,\n36844:23330,\n36845:24120,\n36846:24773,\n36847:25854,\n36848:26465,\n36849:26454,\n36850:27972,\n36851:29366,\n36852:30067,\n36853:31331,\n36854:33976,\n36855:35698,\n36856:37304,\n36857:37664,\n36858:22065,\n36859:22516,\n36860:39166,\n36928:25325,\n36929:26893,\n36930:27542,\n36931:29165,\n36932:32340,\n36933:32887,\n36934:33394,\n36935:35302,\n36936:39135,\n36937:34645,\n36938:36785,\n36939:23611,\n36940:20280,\n36941:20449,\n36942:20405,\n36943:21767,\n36944:23072,\n36945:23517,\n36946:23529,\n36947:24515,\n36948:24910,\n36949:25391,\n36950:26032,\n36951:26187,\n36952:26862,\n36953:27035,\n36954:28024,\n36955:28145,\n36956:30003,\n36957:30137,\n36958:30495,\n36959:31070,\n36960:31206,\n36961:32051,\n36962:33251,\n36963:33455,\n36964:34218,\n36965:35242,\n36966:35386,\n36967:36523,\n36968:36763,\n36969:36914,\n36970:37341,\n36971:38663,\n36972:20154,\n36973:20161,\n36974:20995,\n36975:22645,\n36976:22764,\n36977:23563,\n36978:29978,\n36979:23613,\n36980:33102,\n36981:35338,\n36982:36805,\n36983:38499,\n36984:38765,\n36985:31525,\n36986:35535,\n36987:38920,\n36988:37218,\n36989:22259,\n36990:21416,\n36992:36887,\n36993:21561,\n36994:22402,\n36995:24101,\n36996:25512,\n36997:27700,\n36998:28810,\n36999:30561,\n37000:31883,\n37001:32736,\n37002:34928,\n37003:36930,\n37004:37204,\n37005:37648,\n37006:37656,\n37007:38543,\n37008:29790,\n37009:39620,\n37010:23815,\n37011:23913,\n37012:25968,\n37013:26530,\n37014:36264,\n37015:38619,\n37016:25454,\n37017:26441,\n37018:26905,\n37019:33733,\n37020:38935,\n37021:38592,\n37022:35070,\n37023:28548,\n37024:25722,\n37025:23544,\n37026:19990,\n37027:28716,\n37028:30045,\n37029:26159,\n37030:20932,\n37031:21046,\n37032:21218,\n37033:22995,\n37034:24449,\n37035:24615,\n37036:25104,\n37037:25919,\n37038:25972,\n37039:26143,\n37040:26228,\n37041:26866,\n37042:26646,\n37043:27491,\n37044:28165,\n37045:29298,\n37046:29983,\n37047:30427,\n37048:31934,\n37049:32854,\n37050:22768,\n37051:35069,\n37052:35199,\n37053:35488,\n37054:35475,\n37055:35531,\n37056:36893,\n37057:37266,\n37058:38738,\n37059:38745,\n37060:25993,\n37061:31246,\n37062:33030,\n37063:38587,\n37064:24109,\n37065:24796,\n37066:25114,\n37067:26021,\n37068:26132,\n37069:26512,\n37070:30707,\n37071:31309,\n37072:31821,\n37073:32318,\n37074:33034,\n37075:36012,\n37076:36196,\n37077:36321,\n37078:36447,\n37079:30889,\n37080:20999,\n37081:25305,\n37082:25509,\n37083:25666,\n37084:25240,\n37085:35373,\n37086:31363,\n37087:31680,\n37088:35500,\n37089:38634,\n37090:32118,\n37091:33292,\n37092:34633,\n37093:20185,\n37094:20808,\n37095:21315,\n37096:21344,\n37097:23459,\n37098:23554,\n37099:23574,\n37100:24029,\n37101:25126,\n37102:25159,\n37103:25776,\n37104:26643,\n37105:26676,\n37106:27849,\n37107:27973,\n37108:27927,\n37109:26579,\n37110:28508,\n37111:29006,\n37112:29053,\n37113:26059,\n37114:31359,\n37115:31661,\n37116:32218,\n37184:32330,\n37185:32680,\n37186:33146,\n37187:33307,\n37188:33337,\n37189:34214,\n37190:35438,\n37191:36046,\n37192:36341,\n37193:36984,\n37194:36983,\n37195:37549,\n37196:37521,\n37197:38275,\n37198:39854,\n37199:21069,\n37200:21892,\n37201:28472,\n37202:28982,\n37203:20840,\n37204:31109,\n37205:32341,\n37206:33203,\n37207:31950,\n37208:22092,\n37209:22609,\n37210:23720,\n37211:25514,\n37212:26366,\n37213:26365,\n37214:26970,\n37215:29401,\n37216:30095,\n37217:30094,\n37218:30990,\n37219:31062,\n37220:31199,\n37221:31895,\n37222:32032,\n37223:32068,\n37224:34311,\n37225:35380,\n37226:38459,\n37227:36961,\n37228:40736,\n37229:20711,\n37230:21109,\n37231:21452,\n37232:21474,\n37233:20489,\n37234:21930,\n37235:22766,\n37236:22863,\n37237:29245,\n37238:23435,\n37239:23652,\n37240:21277,\n37241:24803,\n37242:24819,\n37243:25436,\n37244:25475,\n37245:25407,\n37246:25531,\n37248:25805,\n37249:26089,\n37250:26361,\n37251:24035,\n37252:27085,\n37253:27133,\n37254:28437,\n37255:29157,\n37256:20105,\n37257:30185,\n37258:30456,\n37259:31379,\n37260:31967,\n37261:32207,\n37262:32156,\n37263:32865,\n37264:33609,\n37265:33624,\n37266:33900,\n37267:33980,\n37268:34299,\n37269:35013,\n37270:36208,\n37271:36865,\n37272:36973,\n37273:37783,\n37274:38684,\n37275:39442,\n37276:20687,\n37277:22679,\n37278:24974,\n37279:33235,\n37280:34101,\n37281:36104,\n37282:36896,\n37283:20419,\n37284:20596,\n37285:21063,\n37286:21363,\n37287:24687,\n37288:25417,\n37289:26463,\n37290:28204,\n37291:36275,\n37292:36895,\n37293:20439,\n37294:23646,\n37295:36042,\n37296:26063,\n37297:32154,\n37298:21330,\n37299:34966,\n37300:20854,\n37301:25539,\n37302:23384,\n37303:23403,\n37304:23562,\n37305:25613,\n37306:26449,\n37307:36956,\n37308:20182,\n37309:22810,\n37310:22826,\n37311:27760,\n37312:35409,\n37313:21822,\n37314:22549,\n37315:22949,\n37316:24816,\n37317:25171,\n37318:26561,\n37319:33333,\n37320:26965,\n37321:38464,\n37322:39364,\n37323:39464,\n37324:20307,\n37325:22534,\n37326:23550,\n37327:32784,\n37328:23729,\n37329:24111,\n37330:24453,\n37331:24608,\n37332:24907,\n37333:25140,\n37334:26367,\n37335:27888,\n37336:28382,\n37337:32974,\n37338:33151,\n37339:33492,\n37340:34955,\n37341:36024,\n37342:36864,\n37343:36910,\n37344:38538,\n37345:40667,\n37346:39899,\n37347:20195,\n37348:21488,\n37349:22823,\n37350:31532,\n37351:37261,\n37352:38988,\n37353:40441,\n37354:28381,\n37355:28711,\n37356:21331,\n37357:21828,\n37358:23429,\n37359:25176,\n37360:25246,\n37361:25299,\n37362:27810,\n37363:28655,\n37364:29730,\n37365:35351,\n37366:37944,\n37367:28609,\n37368:35582,\n37369:33592,\n37370:20967,\n37371:34552,\n37372:21482,\n37440:21481,\n37441:20294,\n37442:36948,\n37443:36784,\n37444:22890,\n37445:33073,\n37446:24061,\n37447:31466,\n37448:36799,\n37449:26842,\n37450:35895,\n37451:29432,\n37452:40008,\n37453:27197,\n37454:35504,\n37455:20025,\n37456:21336,\n37457:22022,\n37458:22374,\n37459:25285,\n37460:25506,\n37461:26086,\n37462:27470,\n37463:28129,\n37464:28251,\n37465:28845,\n37466:30701,\n37467:31471,\n37468:31658,\n37469:32187,\n37470:32829,\n37471:32966,\n37472:34507,\n37473:35477,\n37474:37723,\n37475:22243,\n37476:22727,\n37477:24382,\n37478:26029,\n37479:26262,\n37480:27264,\n37481:27573,\n37482:30007,\n37483:35527,\n37484:20516,\n37485:30693,\n37486:22320,\n37487:24347,\n37488:24677,\n37489:26234,\n37490:27744,\n37491:30196,\n37492:31258,\n37493:32622,\n37494:33268,\n37495:34584,\n37496:36933,\n37497:39347,\n37498:31689,\n37499:30044,\n37500:31481,\n37501:31569,\n37502:33988,\n37504:36880,\n37505:31209,\n37506:31378,\n37507:33590,\n37508:23265,\n37509:30528,\n37510:20013,\n37511:20210,\n37512:23449,\n37513:24544,\n37514:25277,\n37515:26172,\n37516:26609,\n37517:27880,\n37518:34411,\n37519:34935,\n37520:35387,\n37521:37198,\n37522:37619,\n37523:39376,\n37524:27159,\n37525:28710,\n37526:29482,\n37527:33511,\n37528:33879,\n37529:36015,\n37530:19969,\n37531:20806,\n37532:20939,\n37533:21899,\n37534:23541,\n37535:24086,\n37536:24115,\n37537:24193,\n37538:24340,\n37539:24373,\n37540:24427,\n37541:24500,\n37542:25074,\n37543:25361,\n37544:26274,\n37545:26397,\n37546:28526,\n37547:29266,\n37548:30010,\n37549:30522,\n37550:32884,\n37551:33081,\n37552:33144,\n37553:34678,\n37554:35519,\n37555:35548,\n37556:36229,\n37557:36339,\n37558:37530,\n37559:38263,\n37560:38914,\n37561:40165,\n37562:21189,\n37563:25431,\n37564:30452,\n37565:26389,\n37566:27784,\n37567:29645,\n37568:36035,\n37569:37806,\n37570:38515,\n37571:27941,\n37572:22684,\n37573:26894,\n37574:27084,\n37575:36861,\n37576:37786,\n37577:30171,\n37578:36890,\n37579:22618,\n37580:26626,\n37581:25524,\n37582:27131,\n37583:20291,\n37584:28460,\n37585:26584,\n37586:36795,\n37587:34086,\n37588:32180,\n37589:37716,\n37590:26943,\n37591:28528,\n37592:22378,\n37593:22775,\n37594:23340,\n37595:32044,\n37596:29226,\n37597:21514,\n37598:37347,\n37599:40372,\n37600:20141,\n37601:20302,\n37602:20572,\n37603:20597,\n37604:21059,\n37605:35998,\n37606:21576,\n37607:22564,\n37608:23450,\n37609:24093,\n37610:24213,\n37611:24237,\n37612:24311,\n37613:24351,\n37614:24716,\n37615:25269,\n37616:25402,\n37617:25552,\n37618:26799,\n37619:27712,\n37620:30855,\n37621:31118,\n37622:31243,\n37623:32224,\n37624:33351,\n37625:35330,\n37626:35558,\n37627:36420,\n37628:36883,\n37696:37048,\n37697:37165,\n37698:37336,\n37699:40718,\n37700:27877,\n37701:25688,\n37702:25826,\n37703:25973,\n37704:28404,\n37705:30340,\n37706:31515,\n37707:36969,\n37708:37841,\n37709:28346,\n37710:21746,\n37711:24505,\n37712:25764,\n37713:36685,\n37714:36845,\n37715:37444,\n37716:20856,\n37717:22635,\n37718:22825,\n37719:23637,\n37720:24215,\n37721:28155,\n37722:32399,\n37723:29980,\n37724:36028,\n37725:36578,\n37726:39003,\n37727:28857,\n37728:20253,\n37729:27583,\n37730:28593,\n37731:30000,\n37732:38651,\n37733:20814,\n37734:21520,\n37735:22581,\n37736:22615,\n37737:22956,\n37738:23648,\n37739:24466,\n37740:26007,\n37741:26460,\n37742:28193,\n37743:30331,\n37744:33759,\n37745:36077,\n37746:36884,\n37747:37117,\n37748:37709,\n37749:30757,\n37750:30778,\n37751:21162,\n37752:24230,\n37753:22303,\n37754:22900,\n37755:24594,\n37756:20498,\n37757:20826,\n37758:20908,\n37760:20941,\n37761:20992,\n37762:21776,\n37763:22612,\n37764:22616,\n37765:22871,\n37766:23445,\n37767:23798,\n37768:23947,\n37769:24764,\n37770:25237,\n37771:25645,\n37772:26481,\n37773:26691,\n37774:26812,\n37775:26847,\n37776:30423,\n37777:28120,\n37778:28271,\n37779:28059,\n37780:28783,\n37781:29128,\n37782:24403,\n37783:30168,\n37784:31095,\n37785:31561,\n37786:31572,\n37787:31570,\n37788:31958,\n37789:32113,\n37790:21040,\n37791:33891,\n37792:34153,\n37793:34276,\n37794:35342,\n37795:35588,\n37796:35910,\n37797:36367,\n37798:36867,\n37799:36879,\n37800:37913,\n37801:38518,\n37802:38957,\n37803:39472,\n37804:38360,\n37805:20685,\n37806:21205,\n37807:21516,\n37808:22530,\n37809:23566,\n37810:24999,\n37811:25758,\n37812:27934,\n37813:30643,\n37814:31461,\n37815:33012,\n37816:33796,\n37817:36947,\n37818:37509,\n37819:23776,\n37820:40199,\n37821:21311,\n37822:24471,\n37823:24499,\n37824:28060,\n37825:29305,\n37826:30563,\n37827:31167,\n37828:31716,\n37829:27602,\n37830:29420,\n37831:35501,\n37832:26627,\n37833:27233,\n37834:20984,\n37835:31361,\n37836:26932,\n37837:23626,\n37838:40182,\n37839:33515,\n37840:23493,\n37841:37193,\n37842:28702,\n37843:22136,\n37844:23663,\n37845:24775,\n37846:25958,\n37847:27788,\n37848:35930,\n37849:36929,\n37850:38931,\n37851:21585,\n37852:26311,\n37853:37389,\n37854:22856,\n37855:37027,\n37856:20869,\n37857:20045,\n37858:20970,\n37859:34201,\n37860:35598,\n37861:28760,\n37862:25466,\n37863:37707,\n37864:26978,\n37865:39348,\n37866:32260,\n37867:30071,\n37868:21335,\n37869:26976,\n37870:36575,\n37871:38627,\n37872:27741,\n37873:20108,\n37874:23612,\n37875:24336,\n37876:36841,\n37877:21250,\n37878:36049,\n37879:32905,\n37880:34425,\n37881:24319,\n37882:26085,\n37883:20083,\n37884:20837,\n37952:22914,\n37953:23615,\n37954:38894,\n37955:20219,\n37956:22922,\n37957:24525,\n37958:35469,\n37959:28641,\n37960:31152,\n37961:31074,\n37962:23527,\n37963:33905,\n37964:29483,\n37965:29105,\n37966:24180,\n37967:24565,\n37968:25467,\n37969:25754,\n37970:29123,\n37971:31896,\n37972:20035,\n37973:24316,\n37974:20043,\n37975:22492,\n37976:22178,\n37977:24745,\n37978:28611,\n37979:32013,\n37980:33021,\n37981:33075,\n37982:33215,\n37983:36786,\n37984:35223,\n37985:34468,\n37986:24052,\n37987:25226,\n37988:25773,\n37989:35207,\n37990:26487,\n37991:27874,\n37992:27966,\n37993:29750,\n37994:30772,\n37995:23110,\n37996:32629,\n37997:33453,\n37998:39340,\n37999:20467,\n38000:24259,\n38001:25309,\n38002:25490,\n38003:25943,\n38004:26479,\n38005:30403,\n38006:29260,\n38007:32972,\n38008:32954,\n38009:36649,\n38010:37197,\n38011:20493,\n38012:22521,\n38013:23186,\n38014:26757,\n38016:26995,\n38017:29028,\n38018:29437,\n38019:36023,\n38020:22770,\n38021:36064,\n38022:38506,\n38023:36889,\n38024:34687,\n38025:31204,\n38026:30695,\n38027:33833,\n38028:20271,\n38029:21093,\n38030:21338,\n38031:25293,\n38032:26575,\n38033:27850,\n38034:30333,\n38035:31636,\n38036:31893,\n38037:33334,\n38038:34180,\n38039:36843,\n38040:26333,\n38041:28448,\n38042:29190,\n38043:32283,\n38044:33707,\n38045:39361,\n38046:40614,\n38047:20989,\n38048:31665,\n38049:30834,\n38050:31672,\n38051:32903,\n38052:31560,\n38053:27368,\n38054:24161,\n38055:32908,\n38056:30033,\n38057:30048,\n38058:20843,\n38059:37474,\n38060:28300,\n38061:30330,\n38062:37271,\n38063:39658,\n38064:20240,\n38065:32624,\n38066:25244,\n38067:31567,\n38068:38309,\n38069:40169,\n38070:22138,\n38071:22617,\n38072:34532,\n38073:38588,\n38074:20276,\n38075:21028,\n38076:21322,\n38077:21453,\n38078:21467,\n38079:24070,\n38080:25644,\n38081:26001,\n38082:26495,\n38083:27710,\n38084:27726,\n38085:29256,\n38086:29359,\n38087:29677,\n38088:30036,\n38089:32321,\n38090:33324,\n38091:34281,\n38092:36009,\n38093:31684,\n38094:37318,\n38095:29033,\n38096:38930,\n38097:39151,\n38098:25405,\n38099:26217,\n38100:30058,\n38101:30436,\n38102:30928,\n38103:34115,\n38104:34542,\n38105:21290,\n38106:21329,\n38107:21542,\n38108:22915,\n38109:24199,\n38110:24444,\n38111:24754,\n38112:25161,\n38113:25209,\n38114:25259,\n38115:26000,\n38116:27604,\n38117:27852,\n38118:30130,\n38119:30382,\n38120:30865,\n38121:31192,\n38122:32203,\n38123:32631,\n38124:32933,\n38125:34987,\n38126:35513,\n38127:36027,\n38128:36991,\n38129:38750,\n38130:39131,\n38131:27147,\n38132:31800,\n38133:20633,\n38134:23614,\n38135:24494,\n38136:26503,\n38137:27608,\n38138:29749,\n38139:30473,\n38140:32654,\n38208:40763,\n38209:26570,\n38210:31255,\n38211:21305,\n38212:30091,\n38213:39661,\n38214:24422,\n38215:33181,\n38216:33777,\n38217:32920,\n38218:24380,\n38219:24517,\n38220:30050,\n38221:31558,\n38222:36924,\n38223:26727,\n38224:23019,\n38225:23195,\n38226:32016,\n38227:30334,\n38228:35628,\n38229:20469,\n38230:24426,\n38231:27161,\n38232:27703,\n38233:28418,\n38234:29922,\n38235:31080,\n38236:34920,\n38237:35413,\n38238:35961,\n38239:24287,\n38240:25551,\n38241:30149,\n38242:31186,\n38243:33495,\n38244:37672,\n38245:37618,\n38246:33948,\n38247:34541,\n38248:39981,\n38249:21697,\n38250:24428,\n38251:25996,\n38252:27996,\n38253:28693,\n38254:36007,\n38255:36051,\n38256:38971,\n38257:25935,\n38258:29942,\n38259:19981,\n38260:20184,\n38261:22496,\n38262:22827,\n38263:23142,\n38264:23500,\n38265:20904,\n38266:24067,\n38267:24220,\n38268:24598,\n38269:25206,\n38270:25975,\n38272:26023,\n38273:26222,\n38274:28014,\n38275:29238,\n38276:31526,\n38277:33104,\n38278:33178,\n38279:33433,\n38280:35676,\n38281:36000,\n38282:36070,\n38283:36212,\n38284:38428,\n38285:38468,\n38286:20398,\n38287:25771,\n38288:27494,\n38289:33310,\n38290:33889,\n38291:34154,\n38292:37096,\n38293:23553,\n38294:26963,\n38295:39080,\n38296:33914,\n38297:34135,\n38298:20239,\n38299:21103,\n38300:24489,\n38301:24133,\n38302:26381,\n38303:31119,\n38304:33145,\n38305:35079,\n38306:35206,\n38307:28149,\n38308:24343,\n38309:25173,\n38310:27832,\n38311:20175,\n38312:29289,\n38313:39826,\n38314:20998,\n38315:21563,\n38316:22132,\n38317:22707,\n38318:24996,\n38319:25198,\n38320:28954,\n38321:22894,\n38322:31881,\n38323:31966,\n38324:32027,\n38325:38640,\n38326:25991,\n38327:32862,\n38328:19993,\n38329:20341,\n38330:20853,\n38331:22592,\n38332:24163,\n38333:24179,\n38334:24330,\n38335:26564,\n38336:20006,\n38337:34109,\n38338:38281,\n38339:38491,\n38340:31859,\n38341:38913,\n38342:20731,\n38343:22721,\n38344:30294,\n38345:30887,\n38346:21029,\n38347:30629,\n38348:34065,\n38349:31622,\n38350:20559,\n38351:22793,\n38352:29255,\n38353:31687,\n38354:32232,\n38355:36794,\n38356:36820,\n38357:36941,\n38358:20415,\n38359:21193,\n38360:23081,\n38361:24321,\n38362:38829,\n38363:20445,\n38364:33303,\n38365:37610,\n38366:22275,\n38367:25429,\n38368:27497,\n38369:29995,\n38370:35036,\n38371:36628,\n38372:31298,\n38373:21215,\n38374:22675,\n38375:24917,\n38376:25098,\n38377:26286,\n38378:27597,\n38379:31807,\n38380:33769,\n38381:20515,\n38382:20472,\n38383:21253,\n38384:21574,\n38385:22577,\n38386:22857,\n38387:23453,\n38388:23792,\n38389:23791,\n38390:23849,\n38391:24214,\n38392:25265,\n38393:25447,\n38394:25918,\n38395:26041,\n38396:26379,\n38464:27861,\n38465:27873,\n38466:28921,\n38467:30770,\n38468:32299,\n38469:32990,\n38470:33459,\n38471:33804,\n38472:34028,\n38473:34562,\n38474:35090,\n38475:35370,\n38476:35914,\n38477:37030,\n38478:37586,\n38479:39165,\n38480:40179,\n38481:40300,\n38482:20047,\n38483:20129,\n38484:20621,\n38485:21078,\n38486:22346,\n38487:22952,\n38488:24125,\n38489:24536,\n38490:24537,\n38491:25151,\n38492:26292,\n38493:26395,\n38494:26576,\n38495:26834,\n38496:20882,\n38497:32033,\n38498:32938,\n38499:33192,\n38500:35584,\n38501:35980,\n38502:36031,\n38503:37502,\n38504:38450,\n38505:21536,\n38506:38956,\n38507:21271,\n38508:20693,\n38509:21340,\n38510:22696,\n38511:25778,\n38512:26420,\n38513:29287,\n38514:30566,\n38515:31302,\n38516:37350,\n38517:21187,\n38518:27809,\n38519:27526,\n38520:22528,\n38521:24140,\n38522:22868,\n38523:26412,\n38524:32763,\n38525:20961,\n38526:30406,\n38528:25705,\n38529:30952,\n38530:39764,\n38531:40635,\n38532:22475,\n38533:22969,\n38534:26151,\n38535:26522,\n38536:27598,\n38537:21737,\n38538:27097,\n38539:24149,\n38540:33180,\n38541:26517,\n38542:39850,\n38543:26622,\n38544:40018,\n38545:26717,\n38546:20134,\n38547:20451,\n38548:21448,\n38549:25273,\n38550:26411,\n38551:27819,\n38552:36804,\n38553:20397,\n38554:32365,\n38555:40639,\n38556:19975,\n38557:24930,\n38558:28288,\n38559:28459,\n38560:34067,\n38561:21619,\n38562:26410,\n38563:39749,\n38564:24051,\n38565:31637,\n38566:23724,\n38567:23494,\n38568:34588,\n38569:28234,\n38570:34001,\n38571:31252,\n38572:33032,\n38573:22937,\n38574:31885,\n38575:27665,\n38576:30496,\n38577:21209,\n38578:22818,\n38579:28961,\n38580:29279,\n38581:30683,\n38582:38695,\n38583:40289,\n38584:26891,\n38585:23167,\n38586:23064,\n38587:20901,\n38588:21517,\n38589:21629,\n38590:26126,\n38591:30431,\n38592:36855,\n38593:37528,\n38594:40180,\n38595:23018,\n38596:29277,\n38597:28357,\n38598:20813,\n38599:26825,\n38600:32191,\n38601:32236,\n38602:38754,\n38603:40634,\n38604:25720,\n38605:27169,\n38606:33538,\n38607:22916,\n38608:23391,\n38609:27611,\n38610:29467,\n38611:30450,\n38612:32178,\n38613:32791,\n38614:33945,\n38615:20786,\n38616:26408,\n38617:40665,\n38618:30446,\n38619:26466,\n38620:21247,\n38621:39173,\n38622:23588,\n38623:25147,\n38624:31870,\n38625:36016,\n38626:21839,\n38627:24758,\n38628:32011,\n38629:38272,\n38630:21249,\n38631:20063,\n38632:20918,\n38633:22812,\n38634:29242,\n38635:32822,\n38636:37326,\n38637:24357,\n38638:30690,\n38639:21380,\n38640:24441,\n38641:32004,\n38642:34220,\n38643:35379,\n38644:36493,\n38645:38742,\n38646:26611,\n38647:34222,\n38648:37971,\n38649:24841,\n38650:24840,\n38651:27833,\n38652:30290,\n38720:35565,\n38721:36664,\n38722:21807,\n38723:20305,\n38724:20778,\n38725:21191,\n38726:21451,\n38727:23461,\n38728:24189,\n38729:24736,\n38730:24962,\n38731:25558,\n38732:26377,\n38733:26586,\n38734:28263,\n38735:28044,\n38736:29494,\n38737:29495,\n38738:30001,\n38739:31056,\n38740:35029,\n38741:35480,\n38742:36938,\n38743:37009,\n38744:37109,\n38745:38596,\n38746:34701,\n38747:22805,\n38748:20104,\n38749:20313,\n38750:19982,\n38751:35465,\n38752:36671,\n38753:38928,\n38754:20653,\n38755:24188,\n38756:22934,\n38757:23481,\n38758:24248,\n38759:25562,\n38760:25594,\n38761:25793,\n38762:26332,\n38763:26954,\n38764:27096,\n38765:27915,\n38766:28342,\n38767:29076,\n38768:29992,\n38769:31407,\n38770:32650,\n38771:32768,\n38772:33865,\n38773:33993,\n38774:35201,\n38775:35617,\n38776:36362,\n38777:36965,\n38778:38525,\n38779:39178,\n38780:24958,\n38781:25233,\n38782:27442,\n38784:27779,\n38785:28020,\n38786:32716,\n38787:32764,\n38788:28096,\n38789:32645,\n38790:34746,\n38791:35064,\n38792:26469,\n38793:33713,\n38794:38972,\n38795:38647,\n38796:27931,\n38797:32097,\n38798:33853,\n38799:37226,\n38800:20081,\n38801:21365,\n38802:23888,\n38803:27396,\n38804:28651,\n38805:34253,\n38806:34349,\n38807:35239,\n38808:21033,\n38809:21519,\n38810:23653,\n38811:26446,\n38812:26792,\n38813:29702,\n38814:29827,\n38815:30178,\n38816:35023,\n38817:35041,\n38818:37324,\n38819:38626,\n38820:38520,\n38821:24459,\n38822:29575,\n38823:31435,\n38824:33870,\n38825:25504,\n38826:30053,\n38827:21129,\n38828:27969,\n38829:28316,\n38830:29705,\n38831:30041,\n38832:30827,\n38833:31890,\n38834:38534,\n38835:31452,\n38836:40845,\n38837:20406,\n38838:24942,\n38839:26053,\n38840:34396,\n38841:20102,\n38842:20142,\n38843:20698,\n38844:20001,\n38845:20940,\n38846:23534,\n38847:26009,\n38848:26753,\n38849:28092,\n38850:29471,\n38851:30274,\n38852:30637,\n38853:31260,\n38854:31975,\n38855:33391,\n38856:35538,\n38857:36988,\n38858:37327,\n38859:38517,\n38860:38936,\n38861:21147,\n38862:32209,\n38863:20523,\n38864:21400,\n38865:26519,\n38866:28107,\n38867:29136,\n38868:29747,\n38869:33256,\n38870:36650,\n38871:38563,\n38872:40023,\n38873:40607,\n38874:29792,\n38875:22593,\n38876:28057,\n38877:32047,\n38878:39006,\n38879:20196,\n38880:20278,\n38881:20363,\n38882:20919,\n38883:21169,\n38884:23994,\n38885:24604,\n38886:29618,\n38887:31036,\n38888:33491,\n38889:37428,\n38890:38583,\n38891:38646,\n38892:38666,\n38893:40599,\n38894:40802,\n38895:26278,\n38896:27508,\n38897:21015,\n38898:21155,\n38899:28872,\n38900:35010,\n38901:24265,\n38902:24651,\n38903:24976,\n38904:28451,\n38905:29001,\n38906:31806,\n38907:32244,\n38908:32879,\n38976:34030,\n38977:36899,\n38978:37676,\n38979:21570,\n38980:39791,\n38981:27347,\n38982:28809,\n38983:36034,\n38984:36335,\n38985:38706,\n38986:21172,\n38987:23105,\n38988:24266,\n38989:24324,\n38990:26391,\n38991:27004,\n38992:27028,\n38993:28010,\n38994:28431,\n38995:29282,\n38996:29436,\n38997:31725,\n38998:32769,\n38999:32894,\n39000:34635,\n39001:37070,\n39002:20845,\n39003:40595,\n39004:31108,\n39005:32907,\n39006:37682,\n39007:35542,\n39008:20525,\n39009:21644,\n39010:35441,\n39011:27498,\n39012:36036,\n39013:33031,\n39014:24785,\n39015:26528,\n39016:40434,\n39017:20121,\n39018:20120,\n39019:39952,\n39020:35435,\n39021:34241,\n39022:34152,\n39023:26880,\n39024:28286,\n39025:30871,\n39026:33109,\n39071:24332,\n39072:19984,\n39073:19989,\n39074:20010,\n39075:20017,\n39076:20022,\n39077:20028,\n39078:20031,\n39079:20034,\n39080:20054,\n39081:20056,\n39082:20098,\n39083:20101,\n39084:35947,\n39085:20106,\n39086:33298,\n39087:24333,\n39088:20110,\n39089:20126,\n39090:20127,\n39091:20128,\n39092:20130,\n39093:20144,\n39094:20147,\n39095:20150,\n39096:20174,\n39097:20173,\n39098:20164,\n39099:20166,\n39100:20162,\n39101:20183,\n39102:20190,\n39103:20205,\n39104:20191,\n39105:20215,\n39106:20233,\n39107:20314,\n39108:20272,\n39109:20315,\n39110:20317,\n39111:20311,\n39112:20295,\n39113:20342,\n39114:20360,\n39115:20367,\n39116:20376,\n39117:20347,\n39118:20329,\n39119:20336,\n39120:20369,\n39121:20335,\n39122:20358,\n39123:20374,\n39124:20760,\n39125:20436,\n39126:20447,\n39127:20430,\n39128:20440,\n39129:20443,\n39130:20433,\n39131:20442,\n39132:20432,\n39133:20452,\n39134:20453,\n39135:20506,\n39136:20520,\n39137:20500,\n39138:20522,\n39139:20517,\n39140:20485,\n39141:20252,\n39142:20470,\n39143:20513,\n39144:20521,\n39145:20524,\n39146:20478,\n39147:20463,\n39148:20497,\n39149:20486,\n39150:20547,\n39151:20551,\n39152:26371,\n39153:20565,\n39154:20560,\n39155:20552,\n39156:20570,\n39157:20566,\n39158:20588,\n39159:20600,\n39160:20608,\n39161:20634,\n39162:20613,\n39163:20660,\n39164:20658,\n39232:20681,\n39233:20682,\n39234:20659,\n39235:20674,\n39236:20694,\n39237:20702,\n39238:20709,\n39239:20717,\n39240:20707,\n39241:20718,\n39242:20729,\n39243:20725,\n39244:20745,\n39245:20737,\n39246:20738,\n39247:20758,\n39248:20757,\n39249:20756,\n39250:20762,\n39251:20769,\n39252:20794,\n39253:20791,\n39254:20796,\n39255:20795,\n39256:20799,\n39257:20800,\n39258:20818,\n39259:20812,\n39260:20820,\n39261:20834,\n39262:31480,\n39263:20841,\n39264:20842,\n39265:20846,\n39266:20864,\n39267:20866,\n39268:22232,\n39269:20876,\n39270:20873,\n39271:20879,\n39272:20881,\n39273:20883,\n39274:20885,\n39275:20886,\n39276:20900,\n39277:20902,\n39278:20898,\n39279:20905,\n39280:20906,\n39281:20907,\n39282:20915,\n39283:20913,\n39284:20914,\n39285:20912,\n39286:20917,\n39287:20925,\n39288:20933,\n39289:20937,\n39290:20955,\n39291:20960,\n39292:34389,\n39293:20969,\n39294:20973,\n39296:20976,\n39297:20981,\n39298:20990,\n39299:20996,\n39300:21003,\n39301:21012,\n39302:21006,\n39303:21031,\n39304:21034,\n39305:21038,\n39306:21043,\n39307:21049,\n39308:21071,\n39309:21060,\n39310:21067,\n39311:21068,\n39312:21086,\n39313:21076,\n39314:21098,\n39315:21108,\n39316:21097,\n39317:21107,\n39318:21119,\n39319:21117,\n39320:21133,\n39321:21140,\n39322:21138,\n39323:21105,\n39324:21128,\n39325:21137,\n39326:36776,\n39327:36775,\n39328:21164,\n39329:21165,\n39330:21180,\n39331:21173,\n39332:21185,\n39333:21197,\n39334:21207,\n39335:21214,\n39336:21219,\n39337:21222,\n39338:39149,\n39339:21216,\n39340:21235,\n39341:21237,\n39342:21240,\n39343:21241,\n39344:21254,\n39345:21256,\n39346:30008,\n39347:21261,\n39348:21264,\n39349:21263,\n39350:21269,\n39351:21274,\n39352:21283,\n39353:21295,\n39354:21297,\n39355:21299,\n39356:21304,\n39357:21312,\n39358:21318,\n39359:21317,\n39360:19991,\n39361:21321,\n39362:21325,\n39363:20950,\n39364:21342,\n39365:21353,\n39366:21358,\n39367:22808,\n39368:21371,\n39369:21367,\n39370:21378,\n39371:21398,\n39372:21408,\n39373:21414,\n39374:21413,\n39375:21422,\n39376:21424,\n39377:21430,\n39378:21443,\n39379:31762,\n39380:38617,\n39381:21471,\n39382:26364,\n39383:29166,\n39384:21486,\n39385:21480,\n39386:21485,\n39387:21498,\n39388:21505,\n39389:21565,\n39390:21568,\n39391:21548,\n39392:21549,\n39393:21564,\n39394:21550,\n39395:21558,\n39396:21545,\n39397:21533,\n39398:21582,\n39399:21647,\n39400:21621,\n39401:21646,\n39402:21599,\n39403:21617,\n39404:21623,\n39405:21616,\n39406:21650,\n39407:21627,\n39408:21632,\n39409:21622,\n39410:21636,\n39411:21648,\n39412:21638,\n39413:21703,\n39414:21666,\n39415:21688,\n39416:21669,\n39417:21676,\n39418:21700,\n39419:21704,\n39420:21672,\n39488:21675,\n39489:21698,\n39490:21668,\n39491:21694,\n39492:21692,\n39493:21720,\n39494:21733,\n39495:21734,\n39496:21775,\n39497:21780,\n39498:21757,\n39499:21742,\n39500:21741,\n39501:21754,\n39502:21730,\n39503:21817,\n39504:21824,\n39505:21859,\n39506:21836,\n39507:21806,\n39508:21852,\n39509:21829,\n39510:21846,\n39511:21847,\n39512:21816,\n39513:21811,\n39514:21853,\n39515:21913,\n39516:21888,\n39517:21679,\n39518:21898,\n39519:21919,\n39520:21883,\n39521:21886,\n39522:21912,\n39523:21918,\n39524:21934,\n39525:21884,\n39526:21891,\n39527:21929,\n39528:21895,\n39529:21928,\n39530:21978,\n39531:21957,\n39532:21983,\n39533:21956,\n39534:21980,\n39535:21988,\n39536:21972,\n39537:22036,\n39538:22007,\n39539:22038,\n39540:22014,\n39541:22013,\n39542:22043,\n39543:22009,\n39544:22094,\n39545:22096,\n39546:29151,\n39547:22068,\n39548:22070,\n39549:22066,\n39550:22072,\n39552:22123,\n39553:22116,\n39554:22063,\n39555:22124,\n39556:22122,\n39557:22150,\n39558:22144,\n39559:22154,\n39560:22176,\n39561:22164,\n39562:22159,\n39563:22181,\n39564:22190,\n39565:22198,\n39566:22196,\n39567:22210,\n39568:22204,\n39569:22209,\n39570:22211,\n39571:22208,\n39572:22216,\n39573:22222,\n39574:22225,\n39575:22227,\n39576:22231,\n39577:22254,\n39578:22265,\n39579:22272,\n39580:22271,\n39581:22276,\n39582:22281,\n39583:22280,\n39584:22283,\n39585:22285,\n39586:22291,\n39587:22296,\n39588:22294,\n39589:21959,\n39590:22300,\n39591:22310,\n39592:22327,\n39593:22328,\n39594:22350,\n39595:22331,\n39596:22336,\n39597:22351,\n39598:22377,\n39599:22464,\n39600:22408,\n39601:22369,\n39602:22399,\n39603:22409,\n39604:22419,\n39605:22432,\n39606:22451,\n39607:22436,\n39608:22442,\n39609:22448,\n39610:22467,\n39611:22470,\n39612:22484,\n39613:22482,\n39614:22483,\n39615:22538,\n39616:22486,\n39617:22499,\n39618:22539,\n39619:22553,\n39620:22557,\n39621:22642,\n39622:22561,\n39623:22626,\n39624:22603,\n39625:22640,\n39626:27584,\n39627:22610,\n39628:22589,\n39629:22649,\n39630:22661,\n39631:22713,\n39632:22687,\n39633:22699,\n39634:22714,\n39635:22750,\n39636:22715,\n39637:22712,\n39638:22702,\n39639:22725,\n39640:22739,\n39641:22737,\n39642:22743,\n39643:22745,\n39644:22744,\n39645:22757,\n39646:22748,\n39647:22756,\n39648:22751,\n39649:22767,\n39650:22778,\n39651:22777,\n39652:22779,\n39653:22780,\n39654:22781,\n39655:22786,\n39656:22794,\n39657:22800,\n39658:22811,\n39659:26790,\n39660:22821,\n39661:22828,\n39662:22829,\n39663:22834,\n39664:22840,\n39665:22846,\n39666:31442,\n39667:22869,\n39668:22864,\n39669:22862,\n39670:22874,\n39671:22872,\n39672:22882,\n39673:22880,\n39674:22887,\n39675:22892,\n39676:22889,\n39744:22904,\n39745:22913,\n39746:22941,\n39747:20318,\n39748:20395,\n39749:22947,\n39750:22962,\n39751:22982,\n39752:23016,\n39753:23004,\n39754:22925,\n39755:23001,\n39756:23002,\n39757:23077,\n39758:23071,\n39759:23057,\n39760:23068,\n39761:23049,\n39762:23066,\n39763:23104,\n39764:23148,\n39765:23113,\n39766:23093,\n39767:23094,\n39768:23138,\n39769:23146,\n39770:23194,\n39771:23228,\n39772:23230,\n39773:23243,\n39774:23234,\n39775:23229,\n39776:23267,\n39777:23255,\n39778:23270,\n39779:23273,\n39780:23254,\n39781:23290,\n39782:23291,\n39783:23308,\n39784:23307,\n39785:23318,\n39786:23346,\n39787:23248,\n39788:23338,\n39789:23350,\n39790:23358,\n39791:23363,\n39792:23365,\n39793:23360,\n39794:23377,\n39795:23381,\n39796:23386,\n39797:23387,\n39798:23397,\n39799:23401,\n39800:23408,\n39801:23411,\n39802:23413,\n39803:23416,\n39804:25992,\n39805:23418,\n39806:23424,\n39808:23427,\n39809:23462,\n39810:23480,\n39811:23491,\n39812:23495,\n39813:23497,\n39814:23508,\n39815:23504,\n39816:23524,\n39817:23526,\n39818:23522,\n39819:23518,\n39820:23525,\n39821:23531,\n39822:23536,\n39823:23542,\n39824:23539,\n39825:23557,\n39826:23559,\n39827:23560,\n39828:23565,\n39829:23571,\n39830:23584,\n39831:23586,\n39832:23592,\n39833:23608,\n39834:23609,\n39835:23617,\n39836:23622,\n39837:23630,\n39838:23635,\n39839:23632,\n39840:23631,\n39841:23409,\n39842:23660,\n39843:23662,\n39844:20066,\n39845:23670,\n39846:23673,\n39847:23692,\n39848:23697,\n39849:23700,\n39850:22939,\n39851:23723,\n39852:23739,\n39853:23734,\n39854:23740,\n39855:23735,\n39856:23749,\n39857:23742,\n39858:23751,\n39859:23769,\n39860:23785,\n39861:23805,\n39862:23802,\n39863:23789,\n39864:23948,\n39865:23786,\n39866:23819,\n39867:23829,\n39868:23831,\n39869:23900,\n39870:23839,\n39871:23835,\n39872:23825,\n39873:23828,\n39874:23842,\n39875:23834,\n39876:23833,\n39877:23832,\n39878:23884,\n39879:23890,\n39880:23886,\n39881:23883,\n39882:23916,\n39883:23923,\n39884:23926,\n39885:23943,\n39886:23940,\n39887:23938,\n39888:23970,\n39889:23965,\n39890:23980,\n39891:23982,\n39892:23997,\n39893:23952,\n39894:23991,\n39895:23996,\n39896:24009,\n39897:24013,\n39898:24019,\n39899:24018,\n39900:24022,\n39901:24027,\n39902:24043,\n39903:24050,\n39904:24053,\n39905:24075,\n39906:24090,\n39907:24089,\n39908:24081,\n39909:24091,\n39910:24118,\n39911:24119,\n39912:24132,\n39913:24131,\n39914:24128,\n39915:24142,\n39916:24151,\n39917:24148,\n39918:24159,\n39919:24162,\n39920:24164,\n39921:24135,\n39922:24181,\n39923:24182,\n39924:24186,\n39925:40636,\n39926:24191,\n39927:24224,\n39928:24257,\n39929:24258,\n39930:24264,\n39931:24272,\n39932:24271,\n40000:24278,\n40001:24291,\n40002:24285,\n40003:24282,\n40004:24283,\n40005:24290,\n40006:24289,\n40007:24296,\n40008:24297,\n40009:24300,\n40010:24305,\n40011:24307,\n40012:24304,\n40013:24308,\n40014:24312,\n40015:24318,\n40016:24323,\n40017:24329,\n40018:24413,\n40019:24412,\n40020:24331,\n40021:24337,\n40022:24342,\n40023:24361,\n40024:24365,\n40025:24376,\n40026:24385,\n40027:24392,\n40028:24396,\n40029:24398,\n40030:24367,\n40031:24401,\n40032:24406,\n40033:24407,\n40034:24409,\n40035:24417,\n40036:24429,\n40037:24435,\n40038:24439,\n40039:24451,\n40040:24450,\n40041:24447,\n40042:24458,\n40043:24456,\n40044:24465,\n40045:24455,\n40046:24478,\n40047:24473,\n40048:24472,\n40049:24480,\n40050:24488,\n40051:24493,\n40052:24508,\n40053:24534,\n40054:24571,\n40055:24548,\n40056:24568,\n40057:24561,\n40058:24541,\n40059:24755,\n40060:24575,\n40061:24609,\n40062:24672,\n40064:24601,\n40065:24592,\n40066:24617,\n40067:24590,\n40068:24625,\n40069:24603,\n40070:24597,\n40071:24619,\n40072:24614,\n40073:24591,\n40074:24634,\n40075:24666,\n40076:24641,\n40077:24682,\n40078:24695,\n40079:24671,\n40080:24650,\n40081:24646,\n40082:24653,\n40083:24675,\n40084:24643,\n40085:24676,\n40086:24642,\n40087:24684,\n40088:24683,\n40089:24665,\n40090:24705,\n40091:24717,\n40092:24807,\n40093:24707,\n40094:24730,\n40095:24708,\n40096:24731,\n40097:24726,\n40098:24727,\n40099:24722,\n40100:24743,\n40101:24715,\n40102:24801,\n40103:24760,\n40104:24800,\n40105:24787,\n40106:24756,\n40107:24560,\n40108:24765,\n40109:24774,\n40110:24757,\n40111:24792,\n40112:24909,\n40113:24853,\n40114:24838,\n40115:24822,\n40116:24823,\n40117:24832,\n40118:24820,\n40119:24826,\n40120:24835,\n40121:24865,\n40122:24827,\n40123:24817,\n40124:24845,\n40125:24846,\n40126:24903,\n40127:24894,\n40128:24872,\n40129:24871,\n40130:24906,\n40131:24895,\n40132:24892,\n40133:24876,\n40134:24884,\n40135:24893,\n40136:24898,\n40137:24900,\n40138:24947,\n40139:24951,\n40140:24920,\n40141:24921,\n40142:24922,\n40143:24939,\n40144:24948,\n40145:24943,\n40146:24933,\n40147:24945,\n40148:24927,\n40149:24925,\n40150:24915,\n40151:24949,\n40152:24985,\n40153:24982,\n40154:24967,\n40155:25004,\n40156:24980,\n40157:24986,\n40158:24970,\n40159:24977,\n40160:25003,\n40161:25006,\n40162:25036,\n40163:25034,\n40164:25033,\n40165:25079,\n40166:25032,\n40167:25027,\n40168:25030,\n40169:25018,\n40170:25035,\n40171:32633,\n40172:25037,\n40173:25062,\n40174:25059,\n40175:25078,\n40176:25082,\n40177:25076,\n40178:25087,\n40179:25085,\n40180:25084,\n40181:25086,\n40182:25088,\n40183:25096,\n40184:25097,\n40185:25101,\n40186:25100,\n40187:25108,\n40188:25115,\n40256:25118,\n40257:25121,\n40258:25130,\n40259:25134,\n40260:25136,\n40261:25138,\n40262:25139,\n40263:25153,\n40264:25166,\n40265:25182,\n40266:25187,\n40267:25179,\n40268:25184,\n40269:25192,\n40270:25212,\n40271:25218,\n40272:25225,\n40273:25214,\n40274:25234,\n40275:25235,\n40276:25238,\n40277:25300,\n40278:25219,\n40279:25236,\n40280:25303,\n40281:25297,\n40282:25275,\n40283:25295,\n40284:25343,\n40285:25286,\n40286:25812,\n40287:25288,\n40288:25308,\n40289:25292,\n40290:25290,\n40291:25282,\n40292:25287,\n40293:25243,\n40294:25289,\n40295:25356,\n40296:25326,\n40297:25329,\n40298:25383,\n40299:25346,\n40300:25352,\n40301:25327,\n40302:25333,\n40303:25424,\n40304:25406,\n40305:25421,\n40306:25628,\n40307:25423,\n40308:25494,\n40309:25486,\n40310:25472,\n40311:25515,\n40312:25462,\n40313:25507,\n40314:25487,\n40315:25481,\n40316:25503,\n40317:25525,\n40318:25451,\n40320:25449,\n40321:25534,\n40322:25577,\n40323:25536,\n40324:25542,\n40325:25571,\n40326:25545,\n40327:25554,\n40328:25590,\n40329:25540,\n40330:25622,\n40331:25652,\n40332:25606,\n40333:25619,\n40334:25638,\n40335:25654,\n40336:25885,\n40337:25623,\n40338:25640,\n40339:25615,\n40340:25703,\n40341:25711,\n40342:25718,\n40343:25678,\n40344:25898,\n40345:25749,\n40346:25747,\n40347:25765,\n40348:25769,\n40349:25736,\n40350:25788,\n40351:25818,\n40352:25810,\n40353:25797,\n40354:25799,\n40355:25787,\n40356:25816,\n40357:25794,\n40358:25841,\n40359:25831,\n40360:33289,\n40361:25824,\n40362:25825,\n40363:25260,\n40364:25827,\n40365:25839,\n40366:25900,\n40367:25846,\n40368:25844,\n40369:25842,\n40370:25850,\n40371:25856,\n40372:25853,\n40373:25880,\n40374:25884,\n40375:25861,\n40376:25892,\n40377:25891,\n40378:25899,\n40379:25908,\n40380:25909,\n40381:25911,\n40382:25910,\n40383:25912,\n40384:30027,\n40385:25928,\n40386:25942,\n40387:25941,\n40388:25933,\n40389:25944,\n40390:25950,\n40391:25949,\n40392:25970,\n40393:25976,\n40394:25986,\n40395:25987,\n40396:35722,\n40397:26011,\n40398:26015,\n40399:26027,\n40400:26039,\n40401:26051,\n40402:26054,\n40403:26049,\n40404:26052,\n40405:26060,\n40406:26066,\n40407:26075,\n40408:26073,\n40409:26080,\n40410:26081,\n40411:26097,\n40412:26482,\n40413:26122,\n40414:26115,\n40415:26107,\n40416:26483,\n40417:26165,\n40418:26166,\n40419:26164,\n40420:26140,\n40421:26191,\n40422:26180,\n40423:26185,\n40424:26177,\n40425:26206,\n40426:26205,\n40427:26212,\n40428:26215,\n40429:26216,\n40430:26207,\n40431:26210,\n40432:26224,\n40433:26243,\n40434:26248,\n40435:26254,\n40436:26249,\n40437:26244,\n40438:26264,\n40439:26269,\n40440:26305,\n40441:26297,\n40442:26313,\n40443:26302,\n40444:26300,\n40512:26308,\n40513:26296,\n40514:26326,\n40515:26330,\n40516:26336,\n40517:26175,\n40518:26342,\n40519:26345,\n40520:26352,\n40521:26357,\n40522:26359,\n40523:26383,\n40524:26390,\n40525:26398,\n40526:26406,\n40527:26407,\n40528:38712,\n40529:26414,\n40530:26431,\n40531:26422,\n40532:26433,\n40533:26424,\n40534:26423,\n40535:26438,\n40536:26462,\n40537:26464,\n40538:26457,\n40539:26467,\n40540:26468,\n40541:26505,\n40542:26480,\n40543:26537,\n40544:26492,\n40545:26474,\n40546:26508,\n40547:26507,\n40548:26534,\n40549:26529,\n40550:26501,\n40551:26551,\n40552:26607,\n40553:26548,\n40554:26604,\n40555:26547,\n40556:26601,\n40557:26552,\n40558:26596,\n40559:26590,\n40560:26589,\n40561:26594,\n40562:26606,\n40563:26553,\n40564:26574,\n40565:26566,\n40566:26599,\n40567:27292,\n40568:26654,\n40569:26694,\n40570:26665,\n40571:26688,\n40572:26701,\n40573:26674,\n40574:26702,\n40576:26803,\n40577:26667,\n40578:26713,\n40579:26723,\n40580:26743,\n40581:26751,\n40582:26783,\n40583:26767,\n40584:26797,\n40585:26772,\n40586:26781,\n40587:26779,\n40588:26755,\n40589:27310,\n40590:26809,\n40591:26740,\n40592:26805,\n40593:26784,\n40594:26810,\n40595:26895,\n40596:26765,\n40597:26750,\n40598:26881,\n40599:26826,\n40600:26888,\n40601:26840,\n40602:26914,\n40603:26918,\n40604:26849,\n40605:26892,\n40606:26829,\n40607:26836,\n40608:26855,\n40609:26837,\n40610:26934,\n40611:26898,\n40612:26884,\n40613:26839,\n40614:26851,\n40615:26917,\n40616:26873,\n40617:26848,\n40618:26863,\n40619:26920,\n40620:26922,\n40621:26906,\n40622:26915,\n40623:26913,\n40624:26822,\n40625:27001,\n40626:26999,\n40627:26972,\n40628:27000,\n40629:26987,\n40630:26964,\n40631:27006,\n40632:26990,\n40633:26937,\n40634:26996,\n40635:26941,\n40636:26969,\n40637:26928,\n40638:26977,\n40639:26974,\n40640:26973,\n40641:27009,\n40642:26986,\n40643:27058,\n40644:27054,\n40645:27088,\n40646:27071,\n40647:27073,\n40648:27091,\n40649:27070,\n40650:27086,\n40651:23528,\n40652:27082,\n40653:27101,\n40654:27067,\n40655:27075,\n40656:27047,\n40657:27182,\n40658:27025,\n40659:27040,\n40660:27036,\n40661:27029,\n40662:27060,\n40663:27102,\n40664:27112,\n40665:27138,\n40666:27163,\n40667:27135,\n40668:27402,\n40669:27129,\n40670:27122,\n40671:27111,\n40672:27141,\n40673:27057,\n40674:27166,\n40675:27117,\n40676:27156,\n40677:27115,\n40678:27146,\n40679:27154,\n40680:27329,\n40681:27171,\n40682:27155,\n40683:27204,\n40684:27148,\n40685:27250,\n40686:27190,\n40687:27256,\n40688:27207,\n40689:27234,\n40690:27225,\n40691:27238,\n40692:27208,\n40693:27192,\n40694:27170,\n40695:27280,\n40696:27277,\n40697:27296,\n40698:27268,\n40699:27298,\n40700:27299,\n40768:27287,\n40769:34327,\n40770:27323,\n40771:27331,\n40772:27330,\n40773:27320,\n40774:27315,\n40775:27308,\n40776:27358,\n40777:27345,\n40778:27359,\n40779:27306,\n40780:27354,\n40781:27370,\n40782:27387,\n40783:27397,\n40784:34326,\n40785:27386,\n40786:27410,\n40787:27414,\n40788:39729,\n40789:27423,\n40790:27448,\n40791:27447,\n40792:30428,\n40793:27449,\n40794:39150,\n40795:27463,\n40796:27459,\n40797:27465,\n40798:27472,\n40799:27481,\n40800:27476,\n40801:27483,\n40802:27487,\n40803:27489,\n40804:27512,\n40805:27513,\n40806:27519,\n40807:27520,\n40808:27524,\n40809:27523,\n40810:27533,\n40811:27544,\n40812:27541,\n40813:27550,\n40814:27556,\n40815:27562,\n40816:27563,\n40817:27567,\n40818:27570,\n40819:27569,\n40820:27571,\n40821:27575,\n40822:27580,\n40823:27590,\n40824:27595,\n40825:27603,\n40826:27615,\n40827:27628,\n40828:27627,\n40829:27635,\n40830:27631,\n40832:40638,\n40833:27656,\n40834:27667,\n40835:27668,\n40836:27675,\n40837:27684,\n40838:27683,\n40839:27742,\n40840:27733,\n40841:27746,\n40842:27754,\n40843:27778,\n40844:27789,\n40845:27802,\n40846:27777,\n40847:27803,\n40848:27774,\n40849:27752,\n40850:27763,\n40851:27794,\n40852:27792,\n40853:27844,\n40854:27889,\n40855:27859,\n40856:27837,\n40857:27863,\n40858:27845,\n40859:27869,\n40860:27822,\n40861:27825,\n40862:27838,\n40863:27834,\n40864:27867,\n40865:27887,\n40866:27865,\n40867:27882,\n40868:27935,\n40869:34893,\n40870:27958,\n40871:27947,\n40872:27965,\n40873:27960,\n40874:27929,\n40875:27957,\n40876:27955,\n40877:27922,\n40878:27916,\n40879:28003,\n40880:28051,\n40881:28004,\n40882:27994,\n40883:28025,\n40884:27993,\n40885:28046,\n40886:28053,\n40887:28644,\n40888:28037,\n40889:28153,\n40890:28181,\n40891:28170,\n40892:28085,\n40893:28103,\n40894:28134,\n40895:28088,\n40896:28102,\n40897:28140,\n40898:28126,\n40899:28108,\n40900:28136,\n40901:28114,\n40902:28101,\n40903:28154,\n40904:28121,\n40905:28132,\n40906:28117,\n40907:28138,\n40908:28142,\n40909:28205,\n40910:28270,\n40911:28206,\n40912:28185,\n40913:28274,\n40914:28255,\n40915:28222,\n40916:28195,\n40917:28267,\n40918:28203,\n40919:28278,\n40920:28237,\n40921:28191,\n40922:28227,\n40923:28218,\n40924:28238,\n40925:28196,\n40926:28415,\n40927:28189,\n40928:28216,\n40929:28290,\n40930:28330,\n40931:28312,\n40932:28361,\n40933:28343,\n40934:28371,\n40935:28349,\n40936:28335,\n40937:28356,\n40938:28338,\n40939:28372,\n40940:28373,\n40941:28303,\n40942:28325,\n40943:28354,\n40944:28319,\n40945:28481,\n40946:28433,\n40947:28748,\n40948:28396,\n40949:28408,\n40950:28414,\n40951:28479,\n40952:28402,\n40953:28465,\n40954:28399,\n40955:28466,\n40956:28364,\n57408:28478,\n57409:28435,\n57410:28407,\n57411:28550,\n57412:28538,\n57413:28536,\n57414:28545,\n57415:28544,\n57416:28527,\n57417:28507,\n57418:28659,\n57419:28525,\n57420:28546,\n57421:28540,\n57422:28504,\n57423:28558,\n57424:28561,\n57425:28610,\n57426:28518,\n57427:28595,\n57428:28579,\n57429:28577,\n57430:28580,\n57431:28601,\n57432:28614,\n57433:28586,\n57434:28639,\n57435:28629,\n57436:28652,\n57437:28628,\n57438:28632,\n57439:28657,\n57440:28654,\n57441:28635,\n57442:28681,\n57443:28683,\n57444:28666,\n57445:28689,\n57446:28673,\n57447:28687,\n57448:28670,\n57449:28699,\n57450:28698,\n57451:28532,\n57452:28701,\n57453:28696,\n57454:28703,\n57455:28720,\n57456:28734,\n57457:28722,\n57458:28753,\n57459:28771,\n57460:28825,\n57461:28818,\n57462:28847,\n57463:28913,\n57464:28844,\n57465:28856,\n57466:28851,\n57467:28846,\n57468:28895,\n57469:28875,\n57470:28893,\n57472:28889,\n57473:28937,\n57474:28925,\n57475:28956,\n57476:28953,\n57477:29029,\n57478:29013,\n57479:29064,\n57480:29030,\n57481:29026,\n57482:29004,\n57483:29014,\n57484:29036,\n57485:29071,\n57486:29179,\n57487:29060,\n57488:29077,\n57489:29096,\n57490:29100,\n57491:29143,\n57492:29113,\n57493:29118,\n57494:29138,\n57495:29129,\n57496:29140,\n57497:29134,\n57498:29152,\n57499:29164,\n57500:29159,\n57501:29173,\n57502:29180,\n57503:29177,\n57504:29183,\n57505:29197,\n57506:29200,\n57507:29211,\n57508:29224,\n57509:29229,\n57510:29228,\n57511:29232,\n57512:29234,\n57513:29243,\n57514:29244,\n57515:29247,\n57516:29248,\n57517:29254,\n57518:29259,\n57519:29272,\n57520:29300,\n57521:29310,\n57522:29314,\n57523:29313,\n57524:29319,\n57525:29330,\n57526:29334,\n57527:29346,\n57528:29351,\n57529:29369,\n57530:29362,\n57531:29379,\n57532:29382,\n57533:29380,\n57534:29390,\n57535:29394,\n57536:29410,\n57537:29408,\n57538:29409,\n57539:29433,\n57540:29431,\n57541:20495,\n57542:29463,\n57543:29450,\n57544:29468,\n57545:29462,\n57546:29469,\n57547:29492,\n57548:29487,\n57549:29481,\n57550:29477,\n57551:29502,\n57552:29518,\n57553:29519,\n57554:40664,\n57555:29527,\n57556:29546,\n57557:29544,\n57558:29552,\n57559:29560,\n57560:29557,\n57561:29563,\n57562:29562,\n57563:29640,\n57564:29619,\n57565:29646,\n57566:29627,\n57567:29632,\n57568:29669,\n57569:29678,\n57570:29662,\n57571:29858,\n57572:29701,\n57573:29807,\n57574:29733,\n57575:29688,\n57576:29746,\n57577:29754,\n57578:29781,\n57579:29759,\n57580:29791,\n57581:29785,\n57582:29761,\n57583:29788,\n57584:29801,\n57585:29808,\n57586:29795,\n57587:29802,\n57588:29814,\n57589:29822,\n57590:29835,\n57591:29854,\n57592:29863,\n57593:29898,\n57594:29903,\n57595:29908,\n57596:29681,\n57664:29920,\n57665:29923,\n57666:29927,\n57667:29929,\n57668:29934,\n57669:29938,\n57670:29936,\n57671:29937,\n57672:29944,\n57673:29943,\n57674:29956,\n57675:29955,\n57676:29957,\n57677:29964,\n57678:29966,\n57679:29965,\n57680:29973,\n57681:29971,\n57682:29982,\n57683:29990,\n57684:29996,\n57685:30012,\n57686:30020,\n57687:30029,\n57688:30026,\n57689:30025,\n57690:30043,\n57691:30022,\n57692:30042,\n57693:30057,\n57694:30052,\n57695:30055,\n57696:30059,\n57697:30061,\n57698:30072,\n57699:30070,\n57700:30086,\n57701:30087,\n57702:30068,\n57703:30090,\n57704:30089,\n57705:30082,\n57706:30100,\n57707:30106,\n57708:30109,\n57709:30117,\n57710:30115,\n57711:30146,\n57712:30131,\n57713:30147,\n57714:30133,\n57715:30141,\n57716:30136,\n57717:30140,\n57718:30129,\n57719:30157,\n57720:30154,\n57721:30162,\n57722:30169,\n57723:30179,\n57724:30174,\n57725:30206,\n57726:30207,\n57728:30204,\n57729:30209,\n57730:30192,\n57731:30202,\n57732:30194,\n57733:30195,\n57734:30219,\n57735:30221,\n57736:30217,\n57737:30239,\n57738:30247,\n57739:30240,\n57740:30241,\n57741:30242,\n57742:30244,\n57743:30260,\n57744:30256,\n57745:30267,\n57746:30279,\n57747:30280,\n57748:30278,\n57749:30300,\n57750:30296,\n57751:30305,\n57752:30306,\n57753:30312,\n57754:30313,\n57755:30314,\n57756:30311,\n57757:30316,\n57758:30320,\n57759:30322,\n57760:30326,\n57761:30328,\n57762:30332,\n57763:30336,\n57764:30339,\n57765:30344,\n57766:30347,\n57767:30350,\n57768:30358,\n57769:30355,\n57770:30361,\n57771:30362,\n57772:30384,\n57773:30388,\n57774:30392,\n57775:30393,\n57776:30394,\n57777:30402,\n57778:30413,\n57779:30422,\n57780:30418,\n57781:30430,\n57782:30433,\n57783:30437,\n57784:30439,\n57785:30442,\n57786:34351,\n57787:30459,\n57788:30472,\n57789:30471,\n57790:30468,\n57791:30505,\n57792:30500,\n57793:30494,\n57794:30501,\n57795:30502,\n57796:30491,\n57797:30519,\n57798:30520,\n57799:30535,\n57800:30554,\n57801:30568,\n57802:30571,\n57803:30555,\n57804:30565,\n57805:30591,\n57806:30590,\n57807:30585,\n57808:30606,\n57809:30603,\n57810:30609,\n57811:30624,\n57812:30622,\n57813:30640,\n57814:30646,\n57815:30649,\n57816:30655,\n57817:30652,\n57818:30653,\n57819:30651,\n57820:30663,\n57821:30669,\n57822:30679,\n57823:30682,\n57824:30684,\n57825:30691,\n57826:30702,\n57827:30716,\n57828:30732,\n57829:30738,\n57830:31014,\n57831:30752,\n57832:31018,\n57833:30789,\n57834:30862,\n57835:30836,\n57836:30854,\n57837:30844,\n57838:30874,\n57839:30860,\n57840:30883,\n57841:30901,\n57842:30890,\n57843:30895,\n57844:30929,\n57845:30918,\n57846:30923,\n57847:30932,\n57848:30910,\n57849:30908,\n57850:30917,\n57851:30922,\n57852:30956,\n57920:30951,\n57921:30938,\n57922:30973,\n57923:30964,\n57924:30983,\n57925:30994,\n57926:30993,\n57927:31001,\n57928:31020,\n57929:31019,\n57930:31040,\n57931:31072,\n57932:31063,\n57933:31071,\n57934:31066,\n57935:31061,\n57936:31059,\n57937:31098,\n57938:31103,\n57939:31114,\n57940:31133,\n57941:31143,\n57942:40779,\n57943:31146,\n57944:31150,\n57945:31155,\n57946:31161,\n57947:31162,\n57948:31177,\n57949:31189,\n57950:31207,\n57951:31212,\n57952:31201,\n57953:31203,\n57954:31240,\n57955:31245,\n57956:31256,\n57957:31257,\n57958:31264,\n57959:31263,\n57960:31104,\n57961:31281,\n57962:31291,\n57963:31294,\n57964:31287,\n57965:31299,\n57966:31319,\n57967:31305,\n57968:31329,\n57969:31330,\n57970:31337,\n57971:40861,\n57972:31344,\n57973:31353,\n57974:31357,\n57975:31368,\n57976:31383,\n57977:31381,\n57978:31384,\n57979:31382,\n57980:31401,\n57981:31432,\n57982:31408,\n57984:31414,\n57985:31429,\n57986:31428,\n57987:31423,\n57988:36995,\n57989:31431,\n57990:31434,\n57991:31437,\n57992:31439,\n57993:31445,\n57994:31443,\n57995:31449,\n57996:31450,\n57997:31453,\n57998:31457,\n57999:31458,\n58000:31462,\n58001:31469,\n58002:31472,\n58003:31490,\n58004:31503,\n58005:31498,\n58006:31494,\n58007:31539,\n58008:31512,\n58009:31513,\n58010:31518,\n58011:31541,\n58012:31528,\n58013:31542,\n58014:31568,\n58015:31610,\n58016:31492,\n58017:31565,\n58018:31499,\n58019:31564,\n58020:31557,\n58021:31605,\n58022:31589,\n58023:31604,\n58024:31591,\n58025:31600,\n58026:31601,\n58027:31596,\n58028:31598,\n58029:31645,\n58030:31640,\n58031:31647,\n58032:31629,\n58033:31644,\n58034:31642,\n58035:31627,\n58036:31634,\n58037:31631,\n58038:31581,\n58039:31641,\n58040:31691,\n58041:31681,\n58042:31692,\n58043:31695,\n58044:31668,\n58045:31686,\n58046:31709,\n58047:31721,\n58048:31761,\n58049:31764,\n58050:31718,\n58051:31717,\n58052:31840,\n58053:31744,\n58054:31751,\n58055:31763,\n58056:31731,\n58057:31735,\n58058:31767,\n58059:31757,\n58060:31734,\n58061:31779,\n58062:31783,\n58063:31786,\n58064:31775,\n58065:31799,\n58066:31787,\n58067:31805,\n58068:31820,\n58069:31811,\n58070:31828,\n58071:31823,\n58072:31808,\n58073:31824,\n58074:31832,\n58075:31839,\n58076:31844,\n58077:31830,\n58078:31845,\n58079:31852,\n58080:31861,\n58081:31875,\n58082:31888,\n58083:31908,\n58084:31917,\n58085:31906,\n58086:31915,\n58087:31905,\n58088:31912,\n58089:31923,\n58090:31922,\n58091:31921,\n58092:31918,\n58093:31929,\n58094:31933,\n58095:31936,\n58096:31941,\n58097:31938,\n58098:31960,\n58099:31954,\n58100:31964,\n58101:31970,\n58102:39739,\n58103:31983,\n58104:31986,\n58105:31988,\n58106:31990,\n58107:31994,\n58108:32006,\n58176:32002,\n58177:32028,\n58178:32021,\n58179:32010,\n58180:32069,\n58181:32075,\n58182:32046,\n58183:32050,\n58184:32063,\n58185:32053,\n58186:32070,\n58187:32115,\n58188:32086,\n58189:32078,\n58190:32114,\n58191:32104,\n58192:32110,\n58193:32079,\n58194:32099,\n58195:32147,\n58196:32137,\n58197:32091,\n58198:32143,\n58199:32125,\n58200:32155,\n58201:32186,\n58202:32174,\n58203:32163,\n58204:32181,\n58205:32199,\n58206:32189,\n58207:32171,\n58208:32317,\n58209:32162,\n58210:32175,\n58211:32220,\n58212:32184,\n58213:32159,\n58214:32176,\n58215:32216,\n58216:32221,\n58217:32228,\n58218:32222,\n58219:32251,\n58220:32242,\n58221:32225,\n58222:32261,\n58223:32266,\n58224:32291,\n58225:32289,\n58226:32274,\n58227:32305,\n58228:32287,\n58229:32265,\n58230:32267,\n58231:32290,\n58232:32326,\n58233:32358,\n58234:32315,\n58235:32309,\n58236:32313,\n58237:32323,\n58238:32311,\n58240:32306,\n58241:32314,\n58242:32359,\n58243:32349,\n58244:32342,\n58245:32350,\n58246:32345,\n58247:32346,\n58248:32377,\n58249:32362,\n58250:32361,\n58251:32380,\n58252:32379,\n58253:32387,\n58254:32213,\n58255:32381,\n58256:36782,\n58257:32383,\n58258:32392,\n58259:32393,\n58260:32396,\n58261:32402,\n58262:32400,\n58263:32403,\n58264:32404,\n58265:32406,\n58266:32398,\n58267:32411,\n58268:32412,\n58269:32568,\n58270:32570,\n58271:32581,\n58272:32588,\n58273:32589,\n58274:32590,\n58275:32592,\n58276:32593,\n58277:32597,\n58278:32596,\n58279:32600,\n58280:32607,\n58281:32608,\n58282:32616,\n58283:32617,\n58284:32615,\n58285:32632,\n58286:32642,\n58287:32646,\n58288:32643,\n58289:32648,\n58290:32647,\n58291:32652,\n58292:32660,\n58293:32670,\n58294:32669,\n58295:32666,\n58296:32675,\n58297:32687,\n58298:32690,\n58299:32697,\n58300:32686,\n58301:32694,\n58302:32696,\n58303:35697,\n58304:32709,\n58305:32710,\n58306:32714,\n58307:32725,\n58308:32724,\n58309:32737,\n58310:32742,\n58311:32745,\n58312:32755,\n58313:32761,\n58314:39132,\n58315:32774,\n58316:32772,\n58317:32779,\n58318:32786,\n58319:32792,\n58320:32793,\n58321:32796,\n58322:32801,\n58323:32808,\n58324:32831,\n58325:32827,\n58326:32842,\n58327:32838,\n58328:32850,\n58329:32856,\n58330:32858,\n58331:32863,\n58332:32866,\n58333:32872,\n58334:32883,\n58335:32882,\n58336:32880,\n58337:32886,\n58338:32889,\n58339:32893,\n58340:32895,\n58341:32900,\n58342:32902,\n58343:32901,\n58344:32923,\n58345:32915,\n58346:32922,\n58347:32941,\n58348:20880,\n58349:32940,\n58350:32987,\n58351:32997,\n58352:32985,\n58353:32989,\n58354:32964,\n58355:32986,\n58356:32982,\n58357:33033,\n58358:33007,\n58359:33009,\n58360:33051,\n58361:33065,\n58362:33059,\n58363:33071,\n58364:33099,\n58432:38539,\n58433:33094,\n58434:33086,\n58435:33107,\n58436:33105,\n58437:33020,\n58438:33137,\n58439:33134,\n58440:33125,\n58441:33126,\n58442:33140,\n58443:33155,\n58444:33160,\n58445:33162,\n58446:33152,\n58447:33154,\n58448:33184,\n58449:33173,\n58450:33188,\n58451:33187,\n58452:33119,\n58453:33171,\n58454:33193,\n58455:33200,\n58456:33205,\n58457:33214,\n58458:33208,\n58459:33213,\n58460:33216,\n58461:33218,\n58462:33210,\n58463:33225,\n58464:33229,\n58465:33233,\n58466:33241,\n58467:33240,\n58468:33224,\n58469:33242,\n58470:33247,\n58471:33248,\n58472:33255,\n58473:33274,\n58474:33275,\n58475:33278,\n58476:33281,\n58477:33282,\n58478:33285,\n58479:33287,\n58480:33290,\n58481:33293,\n58482:33296,\n58483:33302,\n58484:33321,\n58485:33323,\n58486:33336,\n58487:33331,\n58488:33344,\n58489:33369,\n58490:33368,\n58491:33373,\n58492:33370,\n58493:33375,\n58494:33380,\n58496:33378,\n58497:33384,\n58498:33386,\n58499:33387,\n58500:33326,\n58501:33393,\n58502:33399,\n58503:33400,\n58504:33406,\n58505:33421,\n58506:33426,\n58507:33451,\n58508:33439,\n58509:33467,\n58510:33452,\n58511:33505,\n58512:33507,\n58513:33503,\n58514:33490,\n58515:33524,\n58516:33523,\n58517:33530,\n58518:33683,\n58519:33539,\n58520:33531,\n58521:33529,\n58522:33502,\n58523:33542,\n58524:33500,\n58525:33545,\n58526:33497,\n58527:33589,\n58528:33588,\n58529:33558,\n58530:33586,\n58531:33585,\n58532:33600,\n58533:33593,\n58534:33616,\n58535:33605,\n58536:33583,\n58537:33579,\n58538:33559,\n58539:33560,\n58540:33669,\n58541:33690,\n58542:33706,\n58543:33695,\n58544:33698,\n58545:33686,\n58546:33571,\n58547:33678,\n58548:33671,\n58549:33674,\n58550:33660,\n58551:33717,\n58552:33651,\n58553:33653,\n58554:33696,\n58555:33673,\n58556:33704,\n58557:33780,\n58558:33811,\n58559:33771,\n58560:33742,\n58561:33789,\n58562:33795,\n58563:33752,\n58564:33803,\n58565:33729,\n58566:33783,\n58567:33799,\n58568:33760,\n58569:33778,\n58570:33805,\n58571:33826,\n58572:33824,\n58573:33725,\n58574:33848,\n58575:34054,\n58576:33787,\n58577:33901,\n58578:33834,\n58579:33852,\n58580:34138,\n58581:33924,\n58582:33911,\n58583:33899,\n58584:33965,\n58585:33902,\n58586:33922,\n58587:33897,\n58588:33862,\n58589:33836,\n58590:33903,\n58591:33913,\n58592:33845,\n58593:33994,\n58594:33890,\n58595:33977,\n58596:33983,\n58597:33951,\n58598:34009,\n58599:33997,\n58600:33979,\n58601:34010,\n58602:34000,\n58603:33985,\n58604:33990,\n58605:34006,\n58606:33953,\n58607:34081,\n58608:34047,\n58609:34036,\n58610:34071,\n58611:34072,\n58612:34092,\n58613:34079,\n58614:34069,\n58615:34068,\n58616:34044,\n58617:34112,\n58618:34147,\n58619:34136,\n58620:34120,\n58688:34113,\n58689:34306,\n58690:34123,\n58691:34133,\n58692:34176,\n58693:34212,\n58694:34184,\n58695:34193,\n58696:34186,\n58697:34216,\n58698:34157,\n58699:34196,\n58700:34203,\n58701:34282,\n58702:34183,\n58703:34204,\n58704:34167,\n58705:34174,\n58706:34192,\n58707:34249,\n58708:34234,\n58709:34255,\n58710:34233,\n58711:34256,\n58712:34261,\n58713:34269,\n58714:34277,\n58715:34268,\n58716:34297,\n58717:34314,\n58718:34323,\n58719:34315,\n58720:34302,\n58721:34298,\n58722:34310,\n58723:34338,\n58724:34330,\n58725:34352,\n58726:34367,\n58727:34381,\n58728:20053,\n58729:34388,\n58730:34399,\n58731:34407,\n58732:34417,\n58733:34451,\n58734:34467,\n58735:34473,\n58736:34474,\n58737:34443,\n58738:34444,\n58739:34486,\n58740:34479,\n58741:34500,\n58742:34502,\n58743:34480,\n58744:34505,\n58745:34851,\n58746:34475,\n58747:34516,\n58748:34526,\n58749:34537,\n58750:34540,\n58752:34527,\n58753:34523,\n58754:34543,\n58755:34578,\n58756:34566,\n58757:34568,\n58758:34560,\n58759:34563,\n58760:34555,\n58761:34577,\n58762:34569,\n58763:34573,\n58764:34553,\n58765:34570,\n58766:34612,\n58767:34623,\n58768:34615,\n58769:34619,\n58770:34597,\n58771:34601,\n58772:34586,\n58773:34656,\n58774:34655,\n58775:34680,\n58776:34636,\n58777:34638,\n58778:34676,\n58779:34647,\n58780:34664,\n58781:34670,\n58782:34649,\n58783:34643,\n58784:34659,\n58785:34666,\n58786:34821,\n58787:34722,\n58788:34719,\n58789:34690,\n58790:34735,\n58791:34763,\n58792:34749,\n58793:34752,\n58794:34768,\n58795:38614,\n58796:34731,\n58797:34756,\n58798:34739,\n58799:34759,\n58800:34758,\n58801:34747,\n58802:34799,\n58803:34802,\n58804:34784,\n58805:34831,\n58806:34829,\n58807:34814,\n58808:34806,\n58809:34807,\n58810:34830,\n58811:34770,\n58812:34833,\n58813:34838,\n58814:34837,\n58815:34850,\n58816:34849,\n58817:34865,\n58818:34870,\n58819:34873,\n58820:34855,\n58821:34875,\n58822:34884,\n58823:34882,\n58824:34898,\n58825:34905,\n58826:34910,\n58827:34914,\n58828:34923,\n58829:34945,\n58830:34942,\n58831:34974,\n58832:34933,\n58833:34941,\n58834:34997,\n58835:34930,\n58836:34946,\n58837:34967,\n58838:34962,\n58839:34990,\n58840:34969,\n58841:34978,\n58842:34957,\n58843:34980,\n58844:34992,\n58845:35007,\n58846:34993,\n58847:35011,\n58848:35012,\n58849:35028,\n58850:35032,\n58851:35033,\n58852:35037,\n58853:35065,\n58854:35074,\n58855:35068,\n58856:35060,\n58857:35048,\n58858:35058,\n58859:35076,\n58860:35084,\n58861:35082,\n58862:35091,\n58863:35139,\n58864:35102,\n58865:35109,\n58866:35114,\n58867:35115,\n58868:35137,\n58869:35140,\n58870:35131,\n58871:35126,\n58872:35128,\n58873:35148,\n58874:35101,\n58875:35168,\n58876:35166,\n58944:35174,\n58945:35172,\n58946:35181,\n58947:35178,\n58948:35183,\n58949:35188,\n58950:35191,\n58951:35198,\n58952:35203,\n58953:35208,\n58954:35210,\n58955:35219,\n58956:35224,\n58957:35233,\n58958:35241,\n58959:35238,\n58960:35244,\n58961:35247,\n58962:35250,\n58963:35258,\n58964:35261,\n58965:35263,\n58966:35264,\n58967:35290,\n58968:35292,\n58969:35293,\n58970:35303,\n58971:35316,\n58972:35320,\n58973:35331,\n58974:35350,\n58975:35344,\n58976:35340,\n58977:35355,\n58978:35357,\n58979:35365,\n58980:35382,\n58981:35393,\n58982:35419,\n58983:35410,\n58984:35398,\n58985:35400,\n58986:35452,\n58987:35437,\n58988:35436,\n58989:35426,\n58990:35461,\n58991:35458,\n58992:35460,\n58993:35496,\n58994:35489,\n58995:35473,\n58996:35493,\n58997:35494,\n58998:35482,\n58999:35491,\n59000:35524,\n59001:35533,\n59002:35522,\n59003:35546,\n59004:35563,\n59005:35571,\n59006:35559,\n59008:35556,\n59009:35569,\n59010:35604,\n59011:35552,\n59012:35554,\n59013:35575,\n59014:35550,\n59015:35547,\n59016:35596,\n59017:35591,\n59018:35610,\n59019:35553,\n59020:35606,\n59021:35600,\n59022:35607,\n59023:35616,\n59024:35635,\n59025:38827,\n59026:35622,\n59027:35627,\n59028:35646,\n59029:35624,\n59030:35649,\n59031:35660,\n59032:35663,\n59033:35662,\n59034:35657,\n59035:35670,\n59036:35675,\n59037:35674,\n59038:35691,\n59039:35679,\n59040:35692,\n59041:35695,\n59042:35700,\n59043:35709,\n59044:35712,\n59045:35724,\n59046:35726,\n59047:35730,\n59048:35731,\n59049:35734,\n59050:35737,\n59051:35738,\n59052:35898,\n59053:35905,\n59054:35903,\n59055:35912,\n59056:35916,\n59057:35918,\n59058:35920,\n59059:35925,\n59060:35938,\n59061:35948,\n59062:35960,\n59063:35962,\n59064:35970,\n59065:35977,\n59066:35973,\n59067:35978,\n59068:35981,\n59069:35982,\n59070:35988,\n59071:35964,\n59072:35992,\n59073:25117,\n59074:36013,\n59075:36010,\n59076:36029,\n59077:36018,\n59078:36019,\n59079:36014,\n59080:36022,\n59081:36040,\n59082:36033,\n59083:36068,\n59084:36067,\n59085:36058,\n59086:36093,\n59087:36090,\n59088:36091,\n59089:36100,\n59090:36101,\n59091:36106,\n59092:36103,\n59093:36111,\n59094:36109,\n59095:36112,\n59096:40782,\n59097:36115,\n59098:36045,\n59099:36116,\n59100:36118,\n59101:36199,\n59102:36205,\n59103:36209,\n59104:36211,\n59105:36225,\n59106:36249,\n59107:36290,\n59108:36286,\n59109:36282,\n59110:36303,\n59111:36314,\n59112:36310,\n59113:36300,\n59114:36315,\n59115:36299,\n59116:36330,\n59117:36331,\n59118:36319,\n59119:36323,\n59120:36348,\n59121:36360,\n59122:36361,\n59123:36351,\n59124:36381,\n59125:36382,\n59126:36368,\n59127:36383,\n59128:36418,\n59129:36405,\n59130:36400,\n59131:36404,\n59132:36426,\n59200:36423,\n59201:36425,\n59202:36428,\n59203:36432,\n59204:36424,\n59205:36441,\n59206:36452,\n59207:36448,\n59208:36394,\n59209:36451,\n59210:36437,\n59211:36470,\n59212:36466,\n59213:36476,\n59214:36481,\n59215:36487,\n59216:36485,\n59217:36484,\n59218:36491,\n59219:36490,\n59220:36499,\n59221:36497,\n59222:36500,\n59223:36505,\n59224:36522,\n59225:36513,\n59226:36524,\n59227:36528,\n59228:36550,\n59229:36529,\n59230:36542,\n59231:36549,\n59232:36552,\n59233:36555,\n59234:36571,\n59235:36579,\n59236:36604,\n59237:36603,\n59238:36587,\n59239:36606,\n59240:36618,\n59241:36613,\n59242:36629,\n59243:36626,\n59244:36633,\n59245:36627,\n59246:36636,\n59247:36639,\n59248:36635,\n59249:36620,\n59250:36646,\n59251:36659,\n59252:36667,\n59253:36665,\n59254:36677,\n59255:36674,\n59256:36670,\n59257:36684,\n59258:36681,\n59259:36678,\n59260:36686,\n59261:36695,\n59262:36700,\n59264:36706,\n59265:36707,\n59266:36708,\n59267:36764,\n59268:36767,\n59269:36771,\n59270:36781,\n59271:36783,\n59272:36791,\n59273:36826,\n59274:36837,\n59275:36834,\n59276:36842,\n59277:36847,\n59278:36999,\n59279:36852,\n59280:36869,\n59281:36857,\n59282:36858,\n59283:36881,\n59284:36885,\n59285:36897,\n59286:36877,\n59287:36894,\n59288:36886,\n59289:36875,\n59290:36903,\n59291:36918,\n59292:36917,\n59293:36921,\n59294:36856,\n59295:36943,\n59296:36944,\n59297:36945,\n59298:36946,\n59299:36878,\n59300:36937,\n59301:36926,\n59302:36950,\n59303:36952,\n59304:36958,\n59305:36968,\n59306:36975,\n59307:36982,\n59308:38568,\n59309:36978,\n59310:36994,\n59311:36989,\n59312:36993,\n59313:36992,\n59314:37002,\n59315:37001,\n59316:37007,\n59317:37032,\n59318:37039,\n59319:37041,\n59320:37045,\n59321:37090,\n59322:37092,\n59323:25160,\n59324:37083,\n59325:37122,\n59326:37138,\n59327:37145,\n59328:37170,\n59329:37168,\n59330:37194,\n59331:37206,\n59332:37208,\n59333:37219,\n59334:37221,\n59335:37225,\n59336:37235,\n59337:37234,\n59338:37259,\n59339:37257,\n59340:37250,\n59341:37282,\n59342:37291,\n59343:37295,\n59344:37290,\n59345:37301,\n59346:37300,\n59347:37306,\n59348:37312,\n59349:37313,\n59350:37321,\n59351:37323,\n59352:37328,\n59353:37334,\n59354:37343,\n59355:37345,\n59356:37339,\n59357:37372,\n59358:37365,\n59359:37366,\n59360:37406,\n59361:37375,\n59362:37396,\n59363:37420,\n59364:37397,\n59365:37393,\n59366:37470,\n59367:37463,\n59368:37445,\n59369:37449,\n59370:37476,\n59371:37448,\n59372:37525,\n59373:37439,\n59374:37451,\n59375:37456,\n59376:37532,\n59377:37526,\n59378:37523,\n59379:37531,\n59380:37466,\n59381:37583,\n59382:37561,\n59383:37559,\n59384:37609,\n59385:37647,\n59386:37626,\n59387:37700,\n59388:37678,\n59456:37657,\n59457:37666,\n59458:37658,\n59459:37667,\n59460:37690,\n59461:37685,\n59462:37691,\n59463:37724,\n59464:37728,\n59465:37756,\n59466:37742,\n59467:37718,\n59468:37808,\n59469:37804,\n59470:37805,\n59471:37780,\n59472:37817,\n59473:37846,\n59474:37847,\n59475:37864,\n59476:37861,\n59477:37848,\n59478:37827,\n59479:37853,\n59480:37840,\n59481:37832,\n59482:37860,\n59483:37914,\n59484:37908,\n59485:37907,\n59486:37891,\n59487:37895,\n59488:37904,\n59489:37942,\n59490:37931,\n59491:37941,\n59492:37921,\n59493:37946,\n59494:37953,\n59495:37970,\n59496:37956,\n59497:37979,\n59498:37984,\n59499:37986,\n59500:37982,\n59501:37994,\n59502:37417,\n59503:38000,\n59504:38005,\n59505:38007,\n59506:38013,\n59507:37978,\n59508:38012,\n59509:38014,\n59510:38017,\n59511:38015,\n59512:38274,\n59513:38279,\n59514:38282,\n59515:38292,\n59516:38294,\n59517:38296,\n59518:38297,\n59520:38304,\n59521:38312,\n59522:38311,\n59523:38317,\n59524:38332,\n59525:38331,\n59526:38329,\n59527:38334,\n59528:38346,\n59529:28662,\n59530:38339,\n59531:38349,\n59532:38348,\n59533:38357,\n59534:38356,\n59535:38358,\n59536:38364,\n59537:38369,\n59538:38373,\n59539:38370,\n59540:38433,\n59541:38440,\n59542:38446,\n59543:38447,\n59544:38466,\n59545:38476,\n59546:38479,\n59547:38475,\n59548:38519,\n59549:38492,\n59550:38494,\n59551:38493,\n59552:38495,\n59553:38502,\n59554:38514,\n59555:38508,\n59556:38541,\n59557:38552,\n59558:38549,\n59559:38551,\n59560:38570,\n59561:38567,\n59562:38577,\n59563:38578,\n59564:38576,\n59565:38580,\n59566:38582,\n59567:38584,\n59568:38585,\n59569:38606,\n59570:38603,\n59571:38601,\n59572:38605,\n59573:35149,\n59574:38620,\n59575:38669,\n59576:38613,\n59577:38649,\n59578:38660,\n59579:38662,\n59580:38664,\n59581:38675,\n59582:38670,\n59583:38673,\n59584:38671,\n59585:38678,\n59586:38681,\n59587:38692,\n59588:38698,\n59589:38704,\n59590:38713,\n59591:38717,\n59592:38718,\n59593:38724,\n59594:38726,\n59595:38728,\n59596:38722,\n59597:38729,\n59598:38748,\n59599:38752,\n59600:38756,\n59601:38758,\n59602:38760,\n59603:21202,\n59604:38763,\n59605:38769,\n59606:38777,\n59607:38789,\n59608:38780,\n59609:38785,\n59610:38778,\n59611:38790,\n59612:38795,\n59613:38799,\n59614:38800,\n59615:38812,\n59616:38824,\n59617:38822,\n59618:38819,\n59619:38835,\n59620:38836,\n59621:38851,\n59622:38854,\n59623:38856,\n59624:38859,\n59625:38876,\n59626:38893,\n59627:40783,\n59628:38898,\n59629:31455,\n59630:38902,\n59631:38901,\n59632:38927,\n59633:38924,\n59634:38968,\n59635:38948,\n59636:38945,\n59637:38967,\n59638:38973,\n59639:38982,\n59640:38991,\n59641:38987,\n59642:39019,\n59643:39023,\n59644:39024,\n59712:39025,\n59713:39028,\n59714:39027,\n59715:39082,\n59716:39087,\n59717:39089,\n59718:39094,\n59719:39108,\n59720:39107,\n59721:39110,\n59722:39145,\n59723:39147,\n59724:39171,\n59725:39177,\n59726:39186,\n59727:39188,\n59728:39192,\n59729:39201,\n59730:39197,\n59731:39198,\n59732:39204,\n59733:39200,\n59734:39212,\n59735:39214,\n59736:39229,\n59737:39230,\n59738:39234,\n59739:39241,\n59740:39237,\n59741:39248,\n59742:39243,\n59743:39249,\n59744:39250,\n59745:39244,\n59746:39253,\n59747:39319,\n59748:39320,\n59749:39333,\n59750:39341,\n59751:39342,\n59752:39356,\n59753:39391,\n59754:39387,\n59755:39389,\n59756:39384,\n59757:39377,\n59758:39405,\n59759:39406,\n59760:39409,\n59761:39410,\n59762:39419,\n59763:39416,\n59764:39425,\n59765:39439,\n59766:39429,\n59767:39394,\n59768:39449,\n59769:39467,\n59770:39479,\n59771:39493,\n59772:39490,\n59773:39488,\n59774:39491,\n59776:39486,\n59777:39509,\n59778:39501,\n59779:39515,\n59780:39511,\n59781:39519,\n59782:39522,\n59783:39525,\n59784:39524,\n59785:39529,\n59786:39531,\n59787:39530,\n59788:39597,\n59789:39600,\n59790:39612,\n59791:39616,\n59792:39631,\n59793:39633,\n59794:39635,\n59795:39636,\n59796:39646,\n59797:39647,\n59798:39650,\n59799:39651,\n59800:39654,\n59801:39663,\n59802:39659,\n59803:39662,\n59804:39668,\n59805:39665,\n59806:39671,\n59807:39675,\n59808:39686,\n59809:39704,\n59810:39706,\n59811:39711,\n59812:39714,\n59813:39715,\n59814:39717,\n59815:39719,\n59816:39720,\n59817:39721,\n59818:39722,\n59819:39726,\n59820:39727,\n59821:39730,\n59822:39748,\n59823:39747,\n59824:39759,\n59825:39757,\n59826:39758,\n59827:39761,\n59828:39768,\n59829:39796,\n59830:39827,\n59831:39811,\n59832:39825,\n59833:39830,\n59834:39831,\n59835:39839,\n59836:39840,\n59837:39848,\n59838:39860,\n59839:39872,\n59840:39882,\n59841:39865,\n59842:39878,\n59843:39887,\n59844:39889,\n59845:39890,\n59846:39907,\n59847:39906,\n59848:39908,\n59849:39892,\n59850:39905,\n59851:39994,\n59852:39922,\n59853:39921,\n59854:39920,\n59855:39957,\n59856:39956,\n59857:39945,\n59858:39955,\n59859:39948,\n59860:39942,\n59861:39944,\n59862:39954,\n59863:39946,\n59864:39940,\n59865:39982,\n59866:39963,\n59867:39973,\n59868:39972,\n59869:39969,\n59870:39984,\n59871:40007,\n59872:39986,\n59873:40006,\n59874:39998,\n59875:40026,\n59876:40032,\n59877:40039,\n59878:40054,\n59879:40056,\n59880:40167,\n59881:40172,\n59882:40176,\n59883:40201,\n59884:40200,\n59885:40171,\n59886:40195,\n59887:40198,\n59888:40234,\n59889:40230,\n59890:40367,\n59891:40227,\n59892:40223,\n59893:40260,\n59894:40213,\n59895:40210,\n59896:40257,\n59897:40255,\n59898:40254,\n59899:40262,\n59900:40264,\n59968:40285,\n59969:40286,\n59970:40292,\n59971:40273,\n59972:40272,\n59973:40281,\n59974:40306,\n59975:40329,\n59976:40327,\n59977:40363,\n59978:40303,\n59979:40314,\n59980:40346,\n59981:40356,\n59982:40361,\n59983:40370,\n59984:40388,\n59985:40385,\n59986:40379,\n59987:40376,\n59988:40378,\n59989:40390,\n59990:40399,\n59991:40386,\n59992:40409,\n59993:40403,\n59994:40440,\n59995:40422,\n59996:40429,\n59997:40431,\n59998:40445,\n59999:40474,\n60000:40475,\n60001:40478,\n60002:40565,\n60003:40569,\n60004:40573,\n60005:40577,\n60006:40584,\n60007:40587,\n60008:40588,\n60009:40594,\n60010:40597,\n60011:40593,\n60012:40605,\n60013:40613,\n60014:40617,\n60015:40632,\n60016:40618,\n60017:40621,\n60018:38753,\n60019:40652,\n60020:40654,\n60021:40655,\n60022:40656,\n60023:40660,\n60024:40668,\n60025:40670,\n60026:40669,\n60027:40672,\n60028:40677,\n60029:40680,\n60030:40687,\n60032:40692,\n60033:40694,\n60034:40695,\n60035:40697,\n60036:40699,\n60037:40700,\n60038:40701,\n60039:40711,\n60040:40712,\n60041:30391,\n60042:40725,\n60043:40737,\n60044:40748,\n60045:40766,\n60046:40778,\n60047:40786,\n60048:40788,\n60049:40803,\n60050:40799,\n60051:40800,\n60052:40801,\n60053:40806,\n60054:40807,\n60055:40812,\n60056:40810,\n60057:40823,\n60058:40818,\n60059:40822,\n60060:40853,\n60061:40860,\n60062:40864,\n60063:22575,\n60064:27079,\n60065:36953,\n60066:29796,\n60067:20956,\n60068:29081,\n60736:32394,\n60737:35100,\n60738:37704,\n60739:37512,\n60740:34012,\n60741:20425,\n60742:28859,\n60743:26161,\n60744:26824,\n60745:37625,\n60746:26363,\n60747:24389,\n60748:20008,\n60749:20193,\n60750:20220,\n60751:20224,\n60752:20227,\n60753:20281,\n60754:20310,\n60755:20370,\n60756:20362,\n60757:20378,\n60758:20372,\n60759:20429,\n60760:20544,\n60761:20514,\n60762:20479,\n60763:20510,\n60764:20550,\n60765:20592,\n60766:20546,\n60767:20628,\n60768:20724,\n60769:20696,\n60770:20810,\n60771:20836,\n60772:20893,\n60773:20926,\n60774:20972,\n60775:21013,\n60776:21148,\n60777:21158,\n60778:21184,\n60779:21211,\n60780:21248,\n60781:21255,\n60782:21284,\n60783:21362,\n60784:21395,\n60785:21426,\n60786:21469,\n60787:64014,\n60788:21660,\n60789:21642,\n60790:21673,\n60791:21759,\n60792:21894,\n60793:22361,\n60794:22373,\n60795:22444,\n60796:22472,\n60797:22471,\n60798:64015,\n60800:64016,\n60801:22686,\n60802:22706,\n60803:22795,\n60804:22867,\n60805:22875,\n60806:22877,\n60807:22883,\n60808:22948,\n60809:22970,\n60810:23382,\n60811:23488,\n60812:29999,\n60813:23512,\n60814:23532,\n60815:23582,\n60816:23718,\n60817:23738,\n60818:23797,\n60819:23847,\n60820:23891,\n60821:64017,\n60822:23874,\n60823:23917,\n60824:23992,\n60825:23993,\n60826:24016,\n60827:24353,\n60828:24372,\n60829:24423,\n60830:24503,\n60831:24542,\n60832:24669,\n60833:24709,\n60834:24714,\n60835:24798,\n60836:24789,\n60837:24864,\n60838:24818,\n60839:24849,\n60840:24887,\n60841:24880,\n60842:24984,\n60843:25107,\n60844:25254,\n60845:25589,\n60846:25696,\n60847:25757,\n60848:25806,\n60849:25934,\n60850:26112,\n60851:26133,\n60852:26171,\n60853:26121,\n60854:26158,\n60855:26142,\n60856:26148,\n60857:26213,\n60858:26199,\n60859:26201,\n60860:64018,\n60861:26227,\n60862:26265,\n60863:26272,\n60864:26290,\n60865:26303,\n60866:26362,\n60867:26382,\n60868:63785,\n60869:26470,\n60870:26555,\n60871:26706,\n60872:26560,\n60873:26625,\n60874:26692,\n60875:26831,\n60876:64019,\n60877:26984,\n60878:64020,\n60879:27032,\n60880:27106,\n60881:27184,\n60882:27243,\n60883:27206,\n60884:27251,\n60885:27262,\n60886:27362,\n60887:27364,\n60888:27606,\n60889:27711,\n60890:27740,\n60891:27782,\n60892:27759,\n60893:27866,\n60894:27908,\n60895:28039,\n60896:28015,\n60897:28054,\n60898:28076,\n60899:28111,\n60900:28152,\n60901:28146,\n60902:28156,\n60903:28217,\n60904:28252,\n60905:28199,\n60906:28220,\n60907:28351,\n60908:28552,\n60909:28597,\n60910:28661,\n60911:28677,\n60912:28679,\n60913:28712,\n60914:28805,\n60915:28843,\n60916:28943,\n60917:28932,\n60918:29020,\n60919:28998,\n60920:28999,\n60921:64021,\n60922:29121,\n60923:29182,\n60924:29361,\n60992:29374,\n60993:29476,\n60994:64022,\n60995:29559,\n60996:29629,\n60997:29641,\n60998:29654,\n60999:29667,\n61000:29650,\n61001:29703,\n61002:29685,\n61003:29734,\n61004:29738,\n61005:29737,\n61006:29742,\n61007:29794,\n61008:29833,\n61009:29855,\n61010:29953,\n61011:30063,\n61012:30338,\n61013:30364,\n61014:30366,\n61015:30363,\n61016:30374,\n61017:64023,\n61018:30534,\n61019:21167,\n61020:30753,\n61021:30798,\n61022:30820,\n61023:30842,\n61024:31024,\n61025:64024,\n61026:64025,\n61027:64026,\n61028:31124,\n61029:64027,\n61030:31131,\n61031:31441,\n61032:31463,\n61033:64028,\n61034:31467,\n61035:31646,\n61036:64029,\n61037:32072,\n61038:32092,\n61039:32183,\n61040:32160,\n61041:32214,\n61042:32338,\n61043:32583,\n61044:32673,\n61045:64030,\n61046:33537,\n61047:33634,\n61048:33663,\n61049:33735,\n61050:33782,\n61051:33864,\n61052:33972,\n61053:34131,\n61054:34137,\n61056:34155,\n61057:64031,\n61058:34224,\n61059:64032,\n61060:64033,\n61061:34823,\n61062:35061,\n61063:35346,\n61064:35383,\n61065:35449,\n61066:35495,\n61067:35518,\n61068:35551,\n61069:64034,\n61070:35574,\n61071:35667,\n61072:35711,\n61073:36080,\n61074:36084,\n61075:36114,\n61076:36214,\n61077:64035,\n61078:36559,\n61079:64036,\n61080:64037,\n61081:36967,\n61082:37086,\n61083:64038,\n61084:37141,\n61085:37159,\n61086:37338,\n61087:37335,\n61088:37342,\n61089:37357,\n61090:37358,\n61091:37348,\n61092:37349,\n61093:37382,\n61094:37392,\n61095:37386,\n61096:37434,\n61097:37440,\n61098:37436,\n61099:37454,\n61100:37465,\n61101:37457,\n61102:37433,\n61103:37479,\n61104:37543,\n61105:37495,\n61106:37496,\n61107:37607,\n61108:37591,\n61109:37593,\n61110:37584,\n61111:64039,\n61112:37589,\n61113:37600,\n61114:37587,\n61115:37669,\n61116:37665,\n61117:37627,\n61118:64040,\n61119:37662,\n61120:37631,\n61121:37661,\n61122:37634,\n61123:37744,\n61124:37719,\n61125:37796,\n61126:37830,\n61127:37854,\n61128:37880,\n61129:37937,\n61130:37957,\n61131:37960,\n61132:38290,\n61133:63964,\n61134:64041,\n61135:38557,\n61136:38575,\n61137:38707,\n61138:38715,\n61139:38723,\n61140:38733,\n61141:38735,\n61142:38737,\n61143:38741,\n61144:38999,\n61145:39013,\n61146:64042,\n61147:64043,\n61148:39207,\n61149:64044,\n61150:39326,\n61151:39502,\n61152:39641,\n61153:39644,\n61154:39797,\n61155:39794,\n61156:39823,\n61157:39857,\n61158:39867,\n61159:39936,\n61160:40304,\n61161:40299,\n61162:64045,\n61163:40473,\n61164:40657,\n61167:8560,\n61168:8561,\n61169:8562,\n61170:8563,\n61171:8564,\n61172:8565,\n61173:8566,\n61174:8567,\n61175:8568,\n61176:8569,\n61177:65506,\n61178:65508,\n61179:65287,\n61180:65282,\n61504:57344,\n61505:57345,\n61506:57346,\n61507:57347,\n61508:57348,\n61509:57349,\n61510:57350,\n61511:57351,\n61512:57352,\n61513:57353,\n61514:57354,\n61515:57355,\n61516:57356,\n61517:57357,\n61518:57358,\n61519:57359,\n61520:57360,\n61521:57361,\n61522:57362,\n61523:57363,\n61524:57364,\n61525:57365,\n61526:57366,\n61527:57367,\n61528:57368,\n61529:57369,\n61530:57370,\n61531:57371,\n61532:57372,\n61533:57373,\n61534:57374,\n61535:57375,\n61536:57376,\n61537:57377,\n61538:57378,\n61539:57379,\n61540:57380,\n61541:57381,\n61542:57382,\n61543:57383,\n61544:57384,\n61545:57385,\n61546:57386,\n61547:57387,\n61548:57388,\n61549:57389,\n61550:57390,\n61551:57391,\n61552:57392,\n61553:57393,\n61554:57394,\n61555:57395,\n61556:57396,\n61557:57397,\n61558:57398,\n61559:57399,\n61560:57400,\n61561:57401,\n61562:57402,\n61563:57403,\n61564:57404,\n61565:57405,\n61566:57406,\n61568:57407,\n61569:57408,\n61570:57409,\n61571:57410,\n61572:57411,\n61573:57412,\n61574:57413,\n61575:57414,\n61576:57415,\n61577:57416,\n61578:57417,\n61579:57418,\n61580:57419,\n61581:57420,\n61582:57421,\n61583:57422,\n61584:57423,\n61585:57424,\n61586:57425,\n61587:57426,\n61588:57427,\n61589:57428,\n61590:57429,\n61591:57430,\n61592:57431,\n61593:57432,\n61594:57433,\n61595:57434,\n61596:57435,\n61597:57436,\n61598:57437,\n61599:57438,\n61600:57439,\n61601:57440,\n61602:57441,\n61603:57442,\n61604:57443,\n61605:57444,\n61606:57445,\n61607:57446,\n61608:57447,\n61609:57448,\n61610:57449,\n61611:57450,\n61612:57451,\n61613:57452,\n61614:57453,\n61615:57454,\n61616:57455,\n61617:57456,\n61618:57457,\n61619:57458,\n61620:57459,\n61621:57460,\n61622:57461,\n61623:57462,\n61624:57463,\n61625:57464,\n61626:57465,\n61627:57466,\n61628:57467,\n61629:57468,\n61630:57469,\n61631:57470,\n61632:57471,\n61633:57472,\n61634:57473,\n61635:57474,\n61636:57475,\n61637:57476,\n61638:57477,\n61639:57478,\n61640:57479,\n61641:57480,\n61642:57481,\n61643:57482,\n61644:57483,\n61645:57484,\n61646:57485,\n61647:57486,\n61648:57487,\n61649:57488,\n61650:57489,\n61651:57490,\n61652:57491,\n61653:57492,\n61654:57493,\n61655:57494,\n61656:57495,\n61657:57496,\n61658:57497,\n61659:57498,\n61660:57499,\n61661:57500,\n61662:57501,\n61663:57502,\n61664:57503,\n61665:57504,\n61666:57505,\n61667:57506,\n61668:57507,\n61669:57508,\n61670:57509,\n61671:57510,\n61672:57511,\n61673:57512,\n61674:57513,\n61675:57514,\n61676:57515,\n61677:57516,\n61678:57517,\n61679:57518,\n61680:57519,\n61681:57520,\n61682:57521,\n61683:57522,\n61684:57523,\n61685:57524,\n61686:57525,\n61687:57526,\n61688:57527,\n61689:57528,\n61690:57529,\n61691:57530,\n61692:57531,\n61760:57532,\n61761:57533,\n61762:57534,\n61763:57535,\n61764:57536,\n61765:57537,\n61766:57538,\n61767:57539,\n61768:57540,\n61769:57541,\n61770:57542,\n61771:57543,\n61772:57544,\n61773:57545,\n61774:57546,\n61775:57547,\n61776:57548,\n61777:57549,\n61778:57550,\n61779:57551,\n61780:57552,\n61781:57553,\n61782:57554,\n61783:57555,\n61784:57556,\n61785:57557,\n61786:57558,\n61787:57559,\n61788:57560,\n61789:57561,\n61790:57562,\n61791:57563,\n61792:57564,\n61793:57565,\n61794:57566,\n61795:57567,\n61796:57568,\n61797:57569,\n61798:57570,\n61799:57571,\n61800:57572,\n61801:57573,\n61802:57574,\n61803:57575,\n61804:57576,\n61805:57577,\n61806:57578,\n61807:57579,\n61808:57580,\n61809:57581,\n61810:57582,\n61811:57583,\n61812:57584,\n61813:57585,\n61814:57586,\n61815:57587,\n61816:57588,\n61817:57589,\n61818:57590,\n61819:57591,\n61820:57592,\n61821:57593,\n61822:57594,\n61824:57595,\n61825:57596,\n61826:57597,\n61827:57598,\n61828:57599,\n61829:57600,\n61830:57601,\n61831:57602,\n61832:57603,\n61833:57604,\n61834:57605,\n61835:57606,\n61836:57607,\n61837:57608,\n61838:57609,\n61839:57610,\n61840:57611,\n61841:57612,\n61842:57613,\n61843:57614,\n61844:57615,\n61845:57616,\n61846:57617,\n61847:57618,\n61848:57619,\n61849:57620,\n61850:57621,\n61851:57622,\n61852:57623,\n61853:57624,\n61854:57625,\n61855:57626,\n61856:57627,\n61857:57628,\n61858:57629,\n61859:57630,\n61860:57631,\n61861:57632,\n61862:57633,\n61863:57634,\n61864:57635,\n61865:57636,\n61866:57637,\n61867:57638,\n61868:57639,\n61869:57640,\n61870:57641,\n61871:57642,\n61872:57643,\n61873:57644,\n61874:57645,\n61875:57646,\n61876:57647,\n61877:57648,\n61878:57649,\n61879:57650,\n61880:57651,\n61881:57652,\n61882:57653,\n61883:57654,\n61884:57655,\n61885:57656,\n61886:57657,\n61887:57658,\n61888:57659,\n61889:57660,\n61890:57661,\n61891:57662,\n61892:57663,\n61893:57664,\n61894:57665,\n61895:57666,\n61896:57667,\n61897:57668,\n61898:57669,\n61899:57670,\n61900:57671,\n61901:57672,\n61902:57673,\n61903:57674,\n61904:57675,\n61905:57676,\n61906:57677,\n61907:57678,\n61908:57679,\n61909:57680,\n61910:57681,\n61911:57682,\n61912:57683,\n61913:57684,\n61914:57685,\n61915:57686,\n61916:57687,\n61917:57688,\n61918:57689,\n61919:57690,\n61920:57691,\n61921:57692,\n61922:57693,\n61923:57694,\n61924:57695,\n61925:57696,\n61926:57697,\n61927:57698,\n61928:57699,\n61929:57700,\n61930:57701,\n61931:57702,\n61932:57703,\n61933:57704,\n61934:57705,\n61935:57706,\n61936:57707,\n61937:57708,\n61938:57709,\n61939:57710,\n61940:57711,\n61941:57712,\n61942:57713,\n61943:57714,\n61944:57715,\n61945:57716,\n61946:57717,\n61947:57718,\n61948:57719,\n62016:57720,\n62017:57721,\n62018:57722,\n62019:57723,\n62020:57724,\n62021:57725,\n62022:57726,\n62023:57727,\n62024:57728,\n62025:57729,\n62026:57730,\n62027:57731,\n62028:57732,\n62029:57733,\n62030:57734,\n62031:57735,\n62032:57736,\n62033:57737,\n62034:57738,\n62035:57739,\n62036:57740,\n62037:57741,\n62038:57742,\n62039:57743,\n62040:57744,\n62041:57745,\n62042:57746,\n62043:57747,\n62044:57748,\n62045:57749,\n62046:57750,\n62047:57751,\n62048:57752,\n62049:57753,\n62050:57754,\n62051:57755,\n62052:57756,\n62053:57757,\n62054:57758,\n62055:57759,\n62056:57760,\n62057:57761,\n62058:57762,\n62059:57763,\n62060:57764,\n62061:57765,\n62062:57766,\n62063:57767,\n62064:57768,\n62065:57769,\n62066:57770,\n62067:57771,\n62068:57772,\n62069:57773,\n62070:57774,\n62071:57775,\n62072:57776,\n62073:57777,\n62074:57778,\n62075:57779,\n62076:57780,\n62077:57781,\n62078:57782,\n62080:57783,\n62081:57784,\n62082:57785,\n62083:57786,\n62084:57787,\n62085:57788,\n62086:57789,\n62087:57790,\n62088:57791,\n62089:57792,\n62090:57793,\n62091:57794,\n62092:57795,\n62093:57796,\n62094:57797,\n62095:57798,\n62096:57799,\n62097:57800,\n62098:57801,\n62099:57802,\n62100:57803,\n62101:57804,\n62102:57805,\n62103:57806,\n62104:57807,\n62105:57808,\n62106:57809,\n62107:57810,\n62108:57811,\n62109:57812,\n62110:57813,\n62111:57814,\n62112:57815,\n62113:57816,\n62114:57817,\n62115:57818,\n62116:57819,\n62117:57820,\n62118:57821,\n62119:57822,\n62120:57823,\n62121:57824,\n62122:57825,\n62123:57826,\n62124:57827,\n62125:57828,\n62126:57829,\n62127:57830,\n62128:57831,\n62129:57832,\n62130:57833,\n62131:57834,\n62132:57835,\n62133:57836,\n62134:57837,\n62135:57838,\n62136:57839,\n62137:57840,\n62138:57841,\n62139:57842,\n62140:57843,\n62141:57844,\n62142:57845,\n62143:57846,\n62144:57847,\n62145:57848,\n62146:57849,\n62147:57850,\n62148:57851,\n62149:57852,\n62150:57853,\n62151:57854,\n62152:57855,\n62153:57856,\n62154:57857,\n62155:57858,\n62156:57859,\n62157:57860,\n62158:57861,\n62159:57862,\n62160:57863,\n62161:57864,\n62162:57865,\n62163:57866,\n62164:57867,\n62165:57868,\n62166:57869,\n62167:57870,\n62168:57871,\n62169:57872,\n62170:57873,\n62171:57874,\n62172:57875,\n62173:57876,\n62174:57877,\n62175:57878,\n62176:57879,\n62177:57880,\n62178:57881,\n62179:57882,\n62180:57883,\n62181:57884,\n62182:57885,\n62183:57886,\n62184:57887,\n62185:57888,\n62186:57889,\n62187:57890,\n62188:57891,\n62189:57892,\n62190:57893,\n62191:57894,\n62192:57895,\n62193:57896,\n62194:57897,\n62195:57898,\n62196:57899,\n62197:57900,\n62198:57901,\n62199:57902,\n62200:57903,\n62201:57904,\n62202:57905,\n62203:57906,\n62204:57907,\n62272:57908,\n62273:57909,\n62274:57910,\n62275:57911,\n62276:57912,\n62277:57913,\n62278:57914,\n62279:57915,\n62280:57916,\n62281:57917,\n62282:57918,\n62283:57919,\n62284:57920,\n62285:57921,\n62286:57922,\n62287:57923,\n62288:57924,\n62289:57925,\n62290:57926,\n62291:57927,\n62292:57928,\n62293:57929,\n62294:57930,\n62295:57931,\n62296:57932,\n62297:57933,\n62298:57934,\n62299:57935,\n62300:57936,\n62301:57937,\n62302:57938,\n62303:57939,\n62304:57940,\n62305:57941,\n62306:57942,\n62307:57943,\n62308:57944,\n62309:57945,\n62310:57946,\n62311:57947,\n62312:57948,\n62313:57949,\n62314:57950,\n62315:57951,\n62316:57952,\n62317:57953,\n62318:57954,\n62319:57955,\n62320:57956,\n62321:57957,\n62322:57958,\n62323:57959,\n62324:57960,\n62325:57961,\n62326:57962,\n62327:57963,\n62328:57964,\n62329:57965,\n62330:57966,\n62331:57967,\n62332:57968,\n62333:57969,\n62334:57970,\n62336:57971,\n62337:57972,\n62338:57973,\n62339:57974,\n62340:57975,\n62341:57976,\n62342:57977,\n62343:57978,\n62344:57979,\n62345:57980,\n62346:57981,\n62347:57982,\n62348:57983,\n62349:57984,\n62350:57985,\n62351:57986,\n62352:57987,\n62353:57988,\n62354:57989,\n62355:57990,\n62356:57991,\n62357:57992,\n62358:57993,\n62359:57994,\n62360:57995,\n62361:57996,\n62362:57997,\n62363:57998,\n62364:57999,\n62365:58000,\n62366:58001,\n62367:58002,\n62368:58003,\n62369:58004,\n62370:58005,\n62371:58006,\n62372:58007,\n62373:58008,\n62374:58009,\n62375:58010,\n62376:58011,\n62377:58012,\n62378:58013,\n62379:58014,\n62380:58015,\n62381:58016,\n62382:58017,\n62383:58018,\n62384:58019,\n62385:58020,\n62386:58021,\n62387:58022,\n62388:58023,\n62389:58024,\n62390:58025,\n62391:58026,\n62392:58027,\n62393:58028,\n62394:58029,\n62395:58030,\n62396:58031,\n62397:58032,\n62398:58033,\n62399:58034,\n62400:58035,\n62401:58036,\n62402:58037,\n62403:58038,\n62404:58039,\n62405:58040,\n62406:58041,\n62407:58042,\n62408:58043,\n62409:58044,\n62410:58045,\n62411:58046,\n62412:58047,\n62413:58048,\n62414:58049,\n62415:58050,\n62416:58051,\n62417:58052,\n62418:58053,\n62419:58054,\n62420:58055,\n62421:58056,\n62422:58057,\n62423:58058,\n62424:58059,\n62425:58060,\n62426:58061,\n62427:58062,\n62428:58063,\n62429:58064,\n62430:58065,\n62431:58066,\n62432:58067,\n62433:58068,\n62434:58069,\n62435:58070,\n62436:58071,\n62437:58072,\n62438:58073,\n62439:58074,\n62440:58075,\n62441:58076,\n62442:58077,\n62443:58078,\n62444:58079,\n62445:58080,\n62446:58081,\n62447:58082,\n62448:58083,\n62449:58084,\n62450:58085,\n62451:58086,\n62452:58087,\n62453:58088,\n62454:58089,\n62455:58090,\n62456:58091,\n62457:58092,\n62458:58093,\n62459:58094,\n62460:58095,\n62528:58096,\n62529:58097,\n62530:58098,\n62531:58099,\n62532:58100,\n62533:58101,\n62534:58102,\n62535:58103,\n62536:58104,\n62537:58105,\n62538:58106,\n62539:58107,\n62540:58108,\n62541:58109,\n62542:58110,\n62543:58111,\n62544:58112,\n62545:58113,\n62546:58114,\n62547:58115,\n62548:58116,\n62549:58117,\n62550:58118,\n62551:58119,\n62552:58120,\n62553:58121,\n62554:58122,\n62555:58123,\n62556:58124,\n62557:58125,\n62558:58126,\n62559:58127,\n62560:58128,\n62561:58129,\n62562:58130,\n62563:58131,\n62564:58132,\n62565:58133,\n62566:58134,\n62567:58135,\n62568:58136,\n62569:58137,\n62570:58138,\n62571:58139,\n62572:58140,\n62573:58141,\n62574:58142,\n62575:58143,\n62576:58144,\n62577:58145,\n62578:58146,\n62579:58147,\n62580:58148,\n62581:58149,\n62582:58150,\n62583:58151,\n62584:58152,\n62585:58153,\n62586:58154,\n62587:58155,\n62588:58156,\n62589:58157,\n62590:58158,\n62592:58159,\n62593:58160,\n62594:58161,\n62595:58162,\n62596:58163,\n62597:58164,\n62598:58165,\n62599:58166,\n62600:58167,\n62601:58168,\n62602:58169,\n62603:58170,\n62604:58171,\n62605:58172,\n62606:58173,\n62607:58174,\n62608:58175,\n62609:58176,\n62610:58177,\n62611:58178,\n62612:58179,\n62613:58180,\n62614:58181,\n62615:58182,\n62616:58183,\n62617:58184,\n62618:58185,\n62619:58186,\n62620:58187,\n62621:58188,\n62622:58189,\n62623:58190,\n62624:58191,\n62625:58192,\n62626:58193,\n62627:58194,\n62628:58195,\n62629:58196,\n62630:58197,\n62631:58198,\n62632:58199,\n62633:58200,\n62634:58201,\n62635:58202,\n62636:58203,\n62637:58204,\n62638:58205,\n62639:58206,\n62640:58207,\n62641:58208,\n62642:58209,\n62643:58210,\n62644:58211,\n62645:58212,\n62646:58213,\n62647:58214,\n62648:58215,\n62649:58216,\n62650:58217,\n62651:58218,\n62652:58219,\n62653:58220,\n62654:58221,\n62655:58222,\n62656:58223,\n62657:58224,\n62658:58225,\n62659:58226,\n62660:58227,\n62661:58228,\n62662:58229,\n62663:58230,\n62664:58231,\n62665:58232,\n62666:58233,\n62667:58234,\n62668:58235,\n62669:58236,\n62670:58237,\n62671:58238,\n62672:58239,\n62673:58240,\n62674:58241,\n62675:58242,\n62676:58243,\n62677:58244,\n62678:58245,\n62679:58246,\n62680:58247,\n62681:58248,\n62682:58249,\n62683:58250,\n62684:58251,\n62685:58252,\n62686:58253,\n62687:58254,\n62688:58255,\n62689:58256,\n62690:58257,\n62691:58258,\n62692:58259,\n62693:58260,\n62694:58261,\n62695:58262,\n62696:58263,\n62697:58264,\n62698:58265,\n62699:58266,\n62700:58267,\n62701:58268,\n62702:58269,\n62703:58270,\n62704:58271,\n62705:58272,\n62706:58273,\n62707:58274,\n62708:58275,\n62709:58276,\n62710:58277,\n62711:58278,\n62712:58279,\n62713:58280,\n62714:58281,\n62715:58282,\n62716:58283,\n62784:58284,\n62785:58285,\n62786:58286,\n62787:58287,\n62788:58288,\n62789:58289,\n62790:58290,\n62791:58291,\n62792:58292,\n62793:58293,\n62794:58294,\n62795:58295,\n62796:58296,\n62797:58297,\n62798:58298,\n62799:58299,\n62800:58300,\n62801:58301,\n62802:58302,\n62803:58303,\n62804:58304,\n62805:58305,\n62806:58306,\n62807:58307,\n62808:58308,\n62809:58309,\n62810:58310,\n62811:58311,\n62812:58312,\n62813:58313,\n62814:58314,\n62815:58315,\n62816:58316,\n62817:58317,\n62818:58318,\n62819:58319,\n62820:58320,\n62821:58321,\n62822:58322,\n62823:58323,\n62824:58324,\n62825:58325,\n62826:58326,\n62827:58327,\n62828:58328,\n62829:58329,\n62830:58330,\n62831:58331,\n62832:58332,\n62833:58333,\n62834:58334,\n62835:58335,\n62836:58336,\n62837:58337,\n62838:58338,\n62839:58339,\n62840:58340,\n62841:58341,\n62842:58342,\n62843:58343,\n62844:58344,\n62845:58345,\n62846:58346,\n62848:58347,\n62849:58348,\n62850:58349,\n62851:58350,\n62852:58351,\n62853:58352,\n62854:58353,\n62855:58354,\n62856:58355,\n62857:58356,\n62858:58357,\n62859:58358,\n62860:58359,\n62861:58360,\n62862:58361,\n62863:58362,\n62864:58363,\n62865:58364,\n62866:58365,\n62867:58366,\n62868:58367,\n62869:58368,\n62870:58369,\n62871:58370,\n62872:58371,\n62873:58372,\n62874:58373,\n62875:58374,\n62876:58375,\n62877:58376,\n62878:58377,\n62879:58378,\n62880:58379,\n62881:58380,\n62882:58381,\n62883:58382,\n62884:58383,\n62885:58384,\n62886:58385,\n62887:58386,\n62888:58387,\n62889:58388,\n62890:58389,\n62891:58390,\n62892:58391,\n62893:58392,\n62894:58393,\n62895:58394,\n62896:58395,\n62897:58396,\n62898:58397,\n62899:58398,\n62900:58399,\n62901:58400,\n62902:58401,\n62903:58402,\n62904:58403,\n62905:58404,\n62906:58405,\n62907:58406,\n62908:58407,\n62909:58408,\n62910:58409,\n62911:58410,\n62912:58411,\n62913:58412,\n62914:58413,\n62915:58414,\n62916:58415,\n62917:58416,\n62918:58417,\n62919:58418,\n62920:58419,\n62921:58420,\n62922:58421,\n62923:58422,\n62924:58423,\n62925:58424,\n62926:58425,\n62927:58426,\n62928:58427,\n62929:58428,\n62930:58429,\n62931:58430,\n62932:58431,\n62933:58432,\n62934:58433,\n62935:58434,\n62936:58435,\n62937:58436,\n62938:58437,\n62939:58438,\n62940:58439,\n62941:58440,\n62942:58441,\n62943:58442,\n62944:58443,\n62945:58444,\n62946:58445,\n62947:58446,\n62948:58447,\n62949:58448,\n62950:58449,\n62951:58450,\n62952:58451,\n62953:58452,\n62954:58453,\n62955:58454,\n62956:58455,\n62957:58456,\n62958:58457,\n62959:58458,\n62960:58459,\n62961:58460,\n62962:58461,\n62963:58462,\n62964:58463,\n62965:58464,\n62966:58465,\n62967:58466,\n62968:58467,\n62969:58468,\n62970:58469,\n62971:58470,\n62972:58471,\n63040:58472,\n63041:58473,\n63042:58474,\n63043:58475,\n63044:58476,\n63045:58477,\n63046:58478,\n63047:58479,\n63048:58480,\n63049:58481,\n63050:58482,\n63051:58483,\n63052:58484,\n63053:58485,\n63054:58486,\n63055:58487,\n63056:58488,\n63057:58489,\n63058:58490,\n63059:58491,\n63060:58492,\n63061:58493,\n63062:58494,\n63063:58495,\n63064:58496,\n63065:58497,\n63066:58498,\n63067:58499,\n63068:58500,\n63069:58501,\n63070:58502,\n63071:58503,\n63072:58504,\n63073:58505,\n63074:58506,\n63075:58507,\n63076:58508,\n63077:58509,\n63078:58510,\n63079:58511,\n63080:58512,\n63081:58513,\n63082:58514,\n63083:58515,\n63084:58516,\n63085:58517,\n63086:58518,\n63087:58519,\n63088:58520,\n63089:58521,\n63090:58522,\n63091:58523,\n63092:58524,\n63093:58525,\n63094:58526,\n63095:58527,\n63096:58528,\n63097:58529,\n63098:58530,\n63099:58531,\n63100:58532,\n63101:58533,\n63102:58534,\n63104:58535,\n63105:58536,\n63106:58537,\n63107:58538,\n63108:58539,\n63109:58540,\n63110:58541,\n63111:58542,\n63112:58543,\n63113:58544,\n63114:58545,\n63115:58546,\n63116:58547,\n63117:58548,\n63118:58549,\n63119:58550,\n63120:58551,\n63121:58552,\n63122:58553,\n63123:58554,\n63124:58555,\n63125:58556,\n63126:58557,\n63127:58558,\n63128:58559,\n63129:58560,\n63130:58561,\n63131:58562,\n63132:58563,\n63133:58564,\n63134:58565,\n63135:58566,\n63136:58567,\n63137:58568,\n63138:58569,\n63139:58570,\n63140:58571,\n63141:58572,\n63142:58573,\n63143:58574,\n63144:58575,\n63145:58576,\n63146:58577,\n63147:58578,\n63148:58579,\n63149:58580,\n63150:58581,\n63151:58582,\n63152:58583,\n63153:58584,\n63154:58585,\n63155:58586,\n63156:58587,\n63157:58588,\n63158:58589,\n63159:58590,\n63160:58591,\n63161:58592,\n63162:58593,\n63163:58594,\n63164:58595,\n63165:58596,\n63166:58597,\n63167:58598,\n63168:58599,\n63169:58600,\n63170:58601,\n63171:58602,\n63172:58603,\n63173:58604,\n63174:58605,\n63175:58606,\n63176:58607,\n63177:58608,\n63178:58609,\n63179:58610,\n63180:58611,\n63181:58612,\n63182:58613,\n63183:58614,\n63184:58615,\n63185:58616,\n63186:58617,\n63187:58618,\n63188:58619,\n63189:58620,\n63190:58621,\n63191:58622,\n63192:58623,\n63193:58624,\n63194:58625,\n63195:58626,\n63196:58627,\n63197:58628,\n63198:58629,\n63199:58630,\n63200:58631,\n63201:58632,\n63202:58633,\n63203:58634,\n63204:58635,\n63205:58636,\n63206:58637,\n63207:58638,\n63208:58639,\n63209:58640,\n63210:58641,\n63211:58642,\n63212:58643,\n63213:58644,\n63214:58645,\n63215:58646,\n63216:58647,\n63217:58648,\n63218:58649,\n63219:58650,\n63220:58651,\n63221:58652,\n63222:58653,\n63223:58654,\n63224:58655,\n63225:58656,\n63226:58657,\n63227:58658,\n63228:58659,\n63296:58660,\n63297:58661,\n63298:58662,\n63299:58663,\n63300:58664,\n63301:58665,\n63302:58666,\n63303:58667,\n63304:58668,\n63305:58669,\n63306:58670,\n63307:58671,\n63308:58672,\n63309:58673,\n63310:58674,\n63311:58675,\n63312:58676,\n63313:58677,\n63314:58678,\n63315:58679,\n63316:58680,\n63317:58681,\n63318:58682,\n63319:58683,\n63320:58684,\n63321:58685,\n63322:58686,\n63323:58687,\n63324:58688,\n63325:58689,\n63326:58690,\n63327:58691,\n63328:58692,\n63329:58693,\n63330:58694,\n63331:58695,\n63332:58696,\n63333:58697,\n63334:58698,\n63335:58699,\n63336:58700,\n63337:58701,\n63338:58702,\n63339:58703,\n63340:58704,\n63341:58705,\n63342:58706,\n63343:58707,\n63344:58708,\n63345:58709,\n63346:58710,\n63347:58711,\n63348:58712,\n63349:58713,\n63350:58714,\n63351:58715,\n63352:58716,\n63353:58717,\n63354:58718,\n63355:58719,\n63356:58720,\n63357:58721,\n63358:58722,\n63360:58723,\n63361:58724,\n63362:58725,\n63363:58726,\n63364:58727,\n63365:58728,\n63366:58729,\n63367:58730,\n63368:58731,\n63369:58732,\n63370:58733,\n63371:58734,\n63372:58735,\n63373:58736,\n63374:58737,\n63375:58738,\n63376:58739,\n63377:58740,\n63378:58741,\n63379:58742,\n63380:58743,\n63381:58744,\n63382:58745,\n63383:58746,\n63384:58747,\n63385:58748,\n63386:58749,\n63387:58750,\n63388:58751,\n63389:58752,\n63390:58753,\n63391:58754,\n63392:58755,\n63393:58756,\n63394:58757,\n63395:58758,\n63396:58759,\n63397:58760,\n63398:58761,\n63399:58762,\n63400:58763,\n63401:58764,\n63402:58765,\n63403:58766,\n63404:58767,\n63405:58768,\n63406:58769,\n63407:58770,\n63408:58771,\n63409:58772,\n63410:58773,\n63411:58774,\n63412:58775,\n63413:58776,\n63414:58777,\n63415:58778,\n63416:58779,\n63417:58780,\n63418:58781,\n63419:58782,\n63420:58783,\n63421:58784,\n63422:58785,\n63423:58786,\n63424:58787,\n63425:58788,\n63426:58789,\n63427:58790,\n63428:58791,\n63429:58792,\n63430:58793,\n63431:58794,\n63432:58795,\n63433:58796,\n63434:58797,\n63435:58798,\n63436:58799,\n63437:58800,\n63438:58801,\n63439:58802,\n63440:58803,\n63441:58804,\n63442:58805,\n63443:58806,\n63444:58807,\n63445:58808,\n63446:58809,\n63447:58810,\n63448:58811,\n63449:58812,\n63450:58813,\n63451:58814,\n63452:58815,\n63453:58816,\n63454:58817,\n63455:58818,\n63456:58819,\n63457:58820,\n63458:58821,\n63459:58822,\n63460:58823,\n63461:58824,\n63462:58825,\n63463:58826,\n63464:58827,\n63465:58828,\n63466:58829,\n63467:58830,\n63468:58831,\n63469:58832,\n63470:58833,\n63471:58834,\n63472:58835,\n63473:58836,\n63474:58837,\n63475:58838,\n63476:58839,\n63477:58840,\n63478:58841,\n63479:58842,\n63480:58843,\n63481:58844,\n63482:58845,\n63483:58846,\n63484:58847,\n63552:58848,\n63553:58849,\n63554:58850,\n63555:58851,\n63556:58852,\n63557:58853,\n63558:58854,\n63559:58855,\n63560:58856,\n63561:58857,\n63562:58858,\n63563:58859,\n63564:58860,\n63565:58861,\n63566:58862,\n63567:58863,\n63568:58864,\n63569:58865,\n63570:58866,\n63571:58867,\n63572:58868,\n63573:58869,\n63574:58870,\n63575:58871,\n63576:58872,\n63577:58873,\n63578:58874,\n63579:58875,\n63580:58876,\n63581:58877,\n63582:58878,\n63583:58879,\n63584:58880,\n63585:58881,\n63586:58882,\n63587:58883,\n63588:58884,\n63589:58885,\n63590:58886,\n63591:58887,\n63592:58888,\n63593:58889,\n63594:58890,\n63595:58891,\n63596:58892,\n63597:58893,\n63598:58894,\n63599:58895,\n63600:58896,\n63601:58897,\n63602:58898,\n63603:58899,\n63604:58900,\n63605:58901,\n63606:58902,\n63607:58903,\n63608:58904,\n63609:58905,\n63610:58906,\n63611:58907,\n63612:58908,\n63613:58909,\n63614:58910,\n63616:58911,\n63617:58912,\n63618:58913,\n63619:58914,\n63620:58915,\n63621:58916,\n63622:58917,\n63623:58918,\n63624:58919,\n63625:58920,\n63626:58921,\n63627:58922,\n63628:58923,\n63629:58924,\n63630:58925,\n63631:58926,\n63632:58927,\n63633:58928,\n63634:58929,\n63635:58930,\n63636:58931,\n63637:58932,\n63638:58933,\n63639:58934,\n63640:58935,\n63641:58936,\n63642:58937,\n63643:58938,\n63644:58939,\n63645:58940,\n63646:58941,\n63647:58942,\n63648:58943,\n63649:58944,\n63650:58945,\n63651:58946,\n63652:58947,\n63653:58948,\n63654:58949,\n63655:58950,\n63656:58951,\n63657:58952,\n63658:58953,\n63659:58954,\n63660:58955,\n63661:58956,\n63662:58957,\n63663:58958,\n63664:58959,\n63665:58960,\n63666:58961,\n63667:58962,\n63668:58963,\n63669:58964,\n63670:58965,\n63671:58966,\n63672:58967,\n63673:58968,\n63674:58969,\n63675:58970,\n63676:58971,\n63677:58972,\n63678:58973,\n63679:58974,\n63680:58975,\n63681:58976,\n63682:58977,\n63683:58978,\n63684:58979,\n63685:58980,\n63686:58981,\n63687:58982,\n63688:58983,\n63689:58984,\n63690:58985,\n63691:58986,\n63692:58987,\n63693:58988,\n63694:58989,\n63695:58990,\n63696:58991,\n63697:58992,\n63698:58993,\n63699:58994,\n63700:58995,\n63701:58996,\n63702:58997,\n63703:58998,\n63704:58999,\n63705:59000,\n63706:59001,\n63707:59002,\n63708:59003,\n63709:59004,\n63710:59005,\n63711:59006,\n63712:59007,\n63713:59008,\n63714:59009,\n63715:59010,\n63716:59011,\n63717:59012,\n63718:59013,\n63719:59014,\n63720:59015,\n63721:59016,\n63722:59017,\n63723:59018,\n63724:59019,\n63725:59020,\n63726:59021,\n63727:59022,\n63728:59023,\n63729:59024,\n63730:59025,\n63731:59026,\n63732:59027,\n63733:59028,\n63734:59029,\n63735:59030,\n63736:59031,\n63737:59032,\n63738:59033,\n63739:59034,\n63740:59035,\n64064:8560,\n64065:8561,\n64066:8562,\n64067:8563,\n64068:8564,\n64069:8565,\n64070:8566,\n64071:8567,\n64072:8568,\n64073:8569,\n64074:8544,\n64075:8545,\n64076:8546,\n64077:8547,\n64078:8548,\n64079:8549,\n64080:8550,\n64081:8551,\n64082:8552,\n64083:8553,\n64084:65506,\n64085:65508,\n64086:65287,\n64087:65282,\n64088:12849,\n64089:8470,\n64090:8481,\n64091:8757,\n64092:32394,\n64093:35100,\n64094:37704,\n64095:37512,\n64096:34012,\n64097:20425,\n64098:28859,\n64099:26161,\n64100:26824,\n64101:37625,\n64102:26363,\n64103:24389,\n64104:20008,\n64105:20193,\n64106:20220,\n64107:20224,\n64108:20227,\n64109:20281,\n64110:20310,\n64111:20370,\n64112:20362,\n64113:20378,\n64114:20372,\n64115:20429,\n64116:20544,\n64117:20514,\n64118:20479,\n64119:20510,\n64120:20550,\n64121:20592,\n64122:20546,\n64123:20628,\n64124:20724,\n64125:20696,\n64126:20810,\n64128:20836,\n64129:20893,\n64130:20926,\n64131:20972,\n64132:21013,\n64133:21148,\n64134:21158,\n64135:21184,\n64136:21211,\n64137:21248,\n64138:21255,\n64139:21284,\n64140:21362,\n64141:21395,\n64142:21426,\n64143:21469,\n64144:64014,\n64145:21660,\n64146:21642,\n64147:21673,\n64148:21759,\n64149:21894,\n64150:22361,\n64151:22373,\n64152:22444,\n64153:22472,\n64154:22471,\n64155:64015,\n64156:64016,\n64157:22686,\n64158:22706,\n64159:22795,\n64160:22867,\n64161:22875,\n64162:22877,\n64163:22883,\n64164:22948,\n64165:22970,\n64166:23382,\n64167:23488,\n64168:29999,\n64169:23512,\n64170:23532,\n64171:23582,\n64172:23718,\n64173:23738,\n64174:23797,\n64175:23847,\n64176:23891,\n64177:64017,\n64178:23874,\n64179:23917,\n64180:23992,\n64181:23993,\n64182:24016,\n64183:24353,\n64184:24372,\n64185:24423,\n64186:24503,\n64187:24542,\n64188:24669,\n64189:24709,\n64190:24714,\n64191:24798,\n64192:24789,\n64193:24864,\n64194:24818,\n64195:24849,\n64196:24887,\n64197:24880,\n64198:24984,\n64199:25107,\n64200:25254,\n64201:25589,\n64202:25696,\n64203:25757,\n64204:25806,\n64205:25934,\n64206:26112,\n64207:26133,\n64208:26171,\n64209:26121,\n64210:26158,\n64211:26142,\n64212:26148,\n64213:26213,\n64214:26199,\n64215:26201,\n64216:64018,\n64217:26227,\n64218:26265,\n64219:26272,\n64220:26290,\n64221:26303,\n64222:26362,\n64223:26382,\n64224:63785,\n64225:26470,\n64226:26555,\n64227:26706,\n64228:26560,\n64229:26625,\n64230:26692,\n64231:26831,\n64232:64019,\n64233:26984,\n64234:64020,\n64235:27032,\n64236:27106,\n64237:27184,\n64238:27243,\n64239:27206,\n64240:27251,\n64241:27262,\n64242:27362,\n64243:27364,\n64244:27606,\n64245:27711,\n64246:27740,\n64247:27782,\n64248:27759,\n64249:27866,\n64250:27908,\n64251:28039,\n64252:28015,\n64320:28054,\n64321:28076,\n64322:28111,\n64323:28152,\n64324:28146,\n64325:28156,\n64326:28217,\n64327:28252,\n64328:28199,\n64329:28220,\n64330:28351,\n64331:28552,\n64332:28597,\n64333:28661,\n64334:28677,\n64335:28679,\n64336:28712,\n64337:28805,\n64338:28843,\n64339:28943,\n64340:28932,\n64341:29020,\n64342:28998,\n64343:28999,\n64344:64021,\n64345:29121,\n64346:29182,\n64347:29361,\n64348:29374,\n64349:29476,\n64350:64022,\n64351:29559,\n64352:29629,\n64353:29641,\n64354:29654,\n64355:29667,\n64356:29650,\n64357:29703,\n64358:29685,\n64359:29734,\n64360:29738,\n64361:29737,\n64362:29742,\n64363:29794,\n64364:29833,\n64365:29855,\n64366:29953,\n64367:30063,\n64368:30338,\n64369:30364,\n64370:30366,\n64371:30363,\n64372:30374,\n64373:64023,\n64374:30534,\n64375:21167,\n64376:30753,\n64377:30798,\n64378:30820,\n64379:30842,\n64380:31024,\n64381:64024,\n64382:64025,\n64384:64026,\n64385:31124,\n64386:64027,\n64387:31131,\n64388:31441,\n64389:31463,\n64390:64028,\n64391:31467,\n64392:31646,\n64393:64029,\n64394:32072,\n64395:32092,\n64396:32183,\n64397:32160,\n64398:32214,\n64399:32338,\n64400:32583,\n64401:32673,\n64402:64030,\n64403:33537,\n64404:33634,\n64405:33663,\n64406:33735,\n64407:33782,\n64408:33864,\n64409:33972,\n64410:34131,\n64411:34137,\n64412:34155,\n64413:64031,\n64414:34224,\n64415:64032,\n64416:64033,\n64417:34823,\n64418:35061,\n64419:35346,\n64420:35383,\n64421:35449,\n64422:35495,\n64423:35518,\n64424:35551,\n64425:64034,\n64426:35574,\n64427:35667,\n64428:35711,\n64429:36080,\n64430:36084,\n64431:36114,\n64432:36214,\n64433:64035,\n64434:36559,\n64435:64036,\n64436:64037,\n64437:36967,\n64438:37086,\n64439:64038,\n64440:37141,\n64441:37159,\n64442:37338,\n64443:37335,\n64444:37342,\n64445:37357,\n64446:37358,\n64447:37348,\n64448:37349,\n64449:37382,\n64450:37392,\n64451:37386,\n64452:37434,\n64453:37440,\n64454:37436,\n64455:37454,\n64456:37465,\n64457:37457,\n64458:37433,\n64459:37479,\n64460:37543,\n64461:37495,\n64462:37496,\n64463:37607,\n64464:37591,\n64465:37593,\n64466:37584,\n64467:64039,\n64468:37589,\n64469:37600,\n64470:37587,\n64471:37669,\n64472:37665,\n64473:37627,\n64474:64040,\n64475:37662,\n64476:37631,\n64477:37661,\n64478:37634,\n64479:37744,\n64480:37719,\n64481:37796,\n64482:37830,\n64483:37854,\n64484:37880,\n64485:37937,\n64486:37957,\n64487:37960,\n64488:38290,\n64489:63964,\n64490:64041,\n64491:38557,\n64492:38575,\n64493:38707,\n64494:38715,\n64495:38723,\n64496:38733,\n64497:38735,\n64498:38737,\n64499:38741,\n64500:38999,\n64501:39013,\n64502:64042,\n64503:64043,\n64504:39207,\n64505:64044,\n64506:39326,\n64507:39502,\n64508:39641,\n64576:39644,\n64577:39797,\n64578:39794,\n64579:39823,\n64580:39857,\n64581:39867,\n64582:39936,\n64583:40304,\n64584:40299,\n64585:64045,\n64586:40473,\n64587:40657\n};\n\n/**\n * @author takahiro / https://github.com/takahirox\n */\n\nfunction DataViewEx ( buffer, littleEndian ) {\n\n\tthis.dv = new DataView( buffer );\n\tthis.offset = 0;\n\tthis.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true;\n\tthis.encoder = new CharsetEncoder();\n\n}\n\nDataViewEx.prototype = {\n\n\tconstructor: DataViewEx,\n\n\tgetInt8: function () {\n\n\t\tvar value = this.dv.getInt8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t},\n\n\tgetInt8Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getInt8() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetUint8: function () {\n\n\t\tvar value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t},\n\n\tgetUint8Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getUint8() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\n\tgetInt16: function () {\n\n\t\tvar value = this.dv.getInt16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t},\n\n\tgetInt16Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getInt16() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetUint16: function () {\n\n\t\tvar value = this.dv.getUint16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t},\n\n\tgetUint16Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getUint16() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetInt32: function () {\n\n\t\tvar value = this.dv.getInt32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetInt32Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getInt32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetUint32: function () {\n\n\t\tvar value = this.dv.getUint32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetUint32Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getUint32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetFloat32: function () {\n\n\t\tvar value = this.dv.getFloat32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetFloat32Array: function( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetFloat64: function () {\n\n\t\tvar value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t},\n\n\tgetFloat64Array: function( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetIndex: function ( type, isUnsigned ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 1:\n\t\t\t\treturn ( isUnsigned === true ) ? this.getUint8() : this.getInt8();\n\n\t\t\tcase 2:\n\t\t\t\treturn ( isUnsigned === true ) ? this.getUint16() : this.getInt16();\n\n\t\t\tcase 4:\n\t\t\t\treturn this.getInt32(); // No Uint32\n\n\t\t\tdefault:\n\t\t\t\tthrow 'unknown number type ' + type + ' exception.';\n\n\t\t}\n\n\t},\n\n\tgetIndexArray: function ( type, size, isUnsigned ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i++ ) {\n\n\t\t\ta.push( this.getIndex( type, isUnsigned ) );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetChars: function ( size ) {\n\n\t\tvar str = '';\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tvar value = this.getUint8();\n\t\t\tsize--;\n\n\t\t\tif ( value === 0 ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tstr += String.fromCharCode( value );\n\n\t\t}\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tthis.getUint8();\n\t\t\tsize--;\n\n\t\t}\n\n\t\treturn str;\n\n\t},\n\n\tgetSjisStringsAsUnicode: function ( size ) {\n\n\t\tvar a = [];\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tvar value = this.getUint8();\n\t\t\tsize--;\n\n\t\t\tif ( value === 0 ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\ta.push( value );\n\n\t\t}\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tthis.getUint8();\n\t\t\tsize--;\n\n\t\t}\n\n\t\treturn this.encoder.s2u( new Uint8Array( a ) );\n\n\t},\n\n\tgetUnicodeStrings: function ( size ) {\n\n\t\tvar str = '';\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tvar value = this.getUint16();\n\t\t\tsize -= 2;\n\n\t\t\tif ( value === 0 ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tstr += String.fromCharCode( value );\n\n\t\t}\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tthis.getUint8();\n\t\t\tsize--;\n\n\t\t}\n\n\t\treturn str;\n\n\t},\n\n\tgetTextBuffer: function () {\n\n\t\tvar size = this.getUint32();\n\t\treturn this.getUnicodeStrings( size );\n\n\t}\n\n};\n\n/**\n * @author takahiro / https://github.com/takahirox\n */\n\nfunction DataCreationHelper () {\n}\n\nDataCreationHelper.prototype = {\n\n\tconstructor: DataCreationHelper,\n\n\tleftToRightVector3: function ( v ) {\n\n\t\tv[ 2 ] = -v[ 2 ];\n\n\t},\n\n\tleftToRightQuaternion: function ( q ) {\n\n\t\tq[ 0 ] = -q[ 0 ];\n\t\tq[ 1 ] = -q[ 1 ];\n\n\t},\n\n\tleftToRightEuler: function ( r ) {\n\n\t\tr[ 0 ] = -r[ 0 ];\n\t\tr[ 1 ] = -r[ 1 ];\n\n\t},\n\n\tleftToRightIndexOrder: function ( p ) {\n\n\t\tvar tmp = p[ 2 ];\n\t\tp[ 2 ] = p[ 0 ];\n\t\tp[ 0 ] = tmp;\n\n\t},\n\n\tleftToRightVector3Range: function ( v1, v2 ) {\n\n\t\tvar tmp = -v2[ 2 ];\n\t\tv2[ 2 ] = -v1[ 2 ];\n\t\tv1[ 2 ] = tmp;\n\n\t},\n\n\tleftToRightEulerRange: function ( r1, r2 ) {\n\n\t\tvar tmp1 = -r2[ 0 ];\n\t\tvar tmp2 = -r2[ 1 ];\n\t\tr2[ 0 ] = -r1[ 0 ];\n\t\tr2[ 1 ] = -r1[ 1 ];\n\t\tr1[ 0 ] = tmp1;\n\t\tr1[ 1 ] = tmp2;\n\n\t}\n\n};\n\n/**\n * @author takahiro / https://github.com/takahirox\n */\n\nfunction Parser() {\n}\n\nParser.prototype.parsePmd = function ( buffer, leftToRight ) {\n\n\tvar pmd = {};\n\tvar dv = new DataViewEx( buffer );\n\n\tpmd.metadata = {};\n\tpmd.metadata.format = 'pmd';\n\tpmd.metadata.coordinateSystem = 'left';\n\n\tvar parseHeader = function () {\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.magic = dv.getChars( 3 );\n\n\t\tif ( metadata.magic !== 'Pmd' ) {\n\n\t\t\tthrow 'PMD file magic is not Pmd, but ' + metadata.magic;\n\n\t\t}\n\n\t\tmetadata.version = dv.getFloat32();\n\t\tmetadata.modelName = dv.getSjisStringsAsUnicode( 20 );\n\t\tmetadata.comment = dv.getSjisStringsAsUnicode( 256 );\n\n\t};\n\n\tvar parseVertices = function () {\n\n\t\tvar parseVertex = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.normal = dv.getFloat32Array( 3 );\n\t\t\tp.uv = dv.getFloat32Array( 2 );\n\t\t\tp.skinIndices = dv.getUint16Array( 2 );\n\t\t\tp.skinWeights = [ dv.getUint8() / 100 ];\n\t\t\tp.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );\n\t\t\tp.edgeFlag = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.vertexCount = dv.getUint32();\n\n\t\tpmd.vertices = [];\n\n\t\tfor ( var i = 0; i < metadata.vertexCount; i++ ) {\n\n\t\t\tpmd.vertices.push( parseVertex() );\n\n\t\t}\n\n\t};\n\n\tvar parseFaces = function () {\n\n\t\tvar parseFace = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.indices = dv.getUint16Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.faceCount = dv.getUint32() / 3;\n\n\t\tpmd.faces = [];\n\n\t\tfor ( var i = 0; i < metadata.faceCount; i++ ) {\n\n\t\t\tpmd.faces.push( parseFace() );\n\n\t\t}\n\n\t};\n\n\tvar parseMaterials = function () {\n\n\t\tvar parseMaterial = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.diffuse = dv.getFloat32Array( 4 );\n\t\t\tp.shininess = dv.getFloat32();\n\t\t\tp.specular = dv.getFloat32Array( 3 );\n\t\t\tp.ambient = dv.getFloat32Array( 3 );\n\t\t\tp.toonIndex = dv.getInt8();\n\t\t\tp.edgeFlag = dv.getUint8();\n\t\t\tp.faceCount = dv.getUint32() / 3;\n\t\t\tp.fileName = dv.getSjisStringsAsUnicode( 20 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.materialCount = dv.getUint32();\n\n\t\tpmd.materials = [];\n\n\t\tfor ( var i = 0; i < metadata.materialCount; i++ ) {\n\n\t\t\tpmd.materials.push( parseMaterial() );\n\n\t\t}\n\n\t};\n\n\tvar parseBones = function () {\n\n\t\tvar parseBone = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.parentIndex = dv.getInt16();\n\t\t\tp.tailIndex = dv.getInt16();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.ikIndex = dv.getInt16();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.boneCount = dv.getUint16();\n\n\t\tpmd.bones = [];\n\n\t\tfor ( var i = 0; i < metadata.boneCount; i++ ) {\n\n\t\t\tpmd.bones.push( parseBone() );\n\n\t\t}\n\n\t};\n\n\tvar parseIks = function () {\n\n\t\tvar parseIk = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.target = dv.getUint16();\n\t\t\tp.effector = dv.getUint16();\n\t\t\tp.linkCount = dv.getUint8();\n\t\t\tp.iteration = dv.getUint16();\n\t\t\tp.maxAngle = dv.getFloat32();\n\n\t\t\tp.links = [];\n\t\t\tfor ( var i = 0; i < p.linkCount; i++ ) {\n\n\t\t\t\tvar link = {};\n\t\t\t\tlink.index = dv.getUint16();\n\t\t\t\tp.links.push( link );\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.ikCount = dv.getUint16();\n\n\t\tpmd.iks = [];\n\n\t\tfor ( var i = 0; i < metadata.ikCount; i++ ) {\n\n\t\t\tpmd.iks.push( parseIk() );\n\n\t\t}\n\n\t};\n\n\tvar parseMorphs = function () {\n\n\t\tvar parseMorph = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.elementCount = dv.getUint32();\n\t\t\tp.type = dv.getUint8();\n\n\t\t\tp.elements = [];\n\t\t\tfor ( var i = 0; i < p.elementCount; i++ ) {\n\n\t\t\t\tp.elements.push( {\n\t\t\t\t\tindex: dv.getUint32(),\n\t\t\t\t\tposition: dv.getFloat32Array( 3 )\n\t\t\t\t} ) ;\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.morphCount = dv.getUint16();\n\n\t\tpmd.morphs = [];\n\n\t\tfor ( var i = 0; i < metadata.morphCount; i++ ) {\n\n\t\t\tpmd.morphs.push( parseMorph() );\n\n\t\t}\n\n\n\t};\n\n\tvar parseMorphFrames = function () {\n\n\t\tvar parseMorphFrame = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.index = dv.getUint16();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.morphFrameCount = dv.getUint8();\n\n\t\tpmd.morphFrames = [];\n\n\t\tfor ( var i = 0; i < metadata.morphFrameCount; i++ ) {\n\n\t\t\tpmd.morphFrames.push( parseMorphFrame() );\n\n\t\t}\n\n\t};\n\n\tvar parseBoneFrameNames = function () {\n\n\t\tvar parseBoneFrameName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 50 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.boneFrameNameCount = dv.getUint8();\n\n\t\tpmd.boneFrameNames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneFrameNameCount; i++ ) {\n\n\t\t\tpmd.boneFrameNames.push( parseBoneFrameName() );\n\n\t\t}\n\n\t};\n\n\tvar parseBoneFrames = function () {\n\n\t\tvar parseBoneFrame = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.boneIndex = dv.getInt16();\n\t\t\tp.frameIndex = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.boneFrameCount = dv.getUint32();\n\n\t\tpmd.boneFrames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneFrameCount; i++ ) {\n\n\t\t\tpmd.boneFrames.push( parseBoneFrame() );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishHeader = function () {\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.englishCompatibility = dv.getUint8();\n\n\t\tif ( metadata.englishCompatibility > 0 ) {\n\n\t\t\tmetadata.englishModelName = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tmetadata.englishComment = dv.getSjisStringsAsUnicode( 256 );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishBoneNames = function () {\n\n\t\tvar parseEnglishBoneName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\n\t\tif ( metadata.englishCompatibility === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tpmd.englishBoneNames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneCount; i++ ) {\n\n\t\t\tpmd.englishBoneNames.push( parseEnglishBoneName() );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishMorphNames = function () {\n\n\t\tvar parseEnglishMorphName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\n\t\tif ( metadata.englishCompatibility === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tpmd.englishMorphNames = [];\n\n\t\tfor ( var i = 0; i < metadata.morphCount - 1; i++ ) {\n\n\t\t\tpmd.englishMorphNames.push( parseEnglishMorphName() );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishBoneFrameNames = function () {\n\n\t\tvar parseEnglishBoneFrameName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 50 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\n\t\tif ( metadata.englishCompatibility === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tpmd.englishBoneFrameNames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneFrameNameCount; i++ ) {\n\n\t\t\tpmd.englishBoneFrameNames.push( parseEnglishBoneFrameName() );\n\n\t\t}\n\n\t};\n\n\tvar parseToonTextures = function () {\n\n\t\tvar parseToonTexture = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.fileName = dv.getSjisStringsAsUnicode( 100 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tpmd.toonTextures = [];\n\n\t\tfor ( var i = 0; i < 10; i++ ) {\n\n\t\t\tpmd.toonTextures.push( parseToonTexture() );\n\n\t\t}\n\n\t};\n\n\tvar parseRigidBodies = function () {\n\n\t\tvar parseRigidBody = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.boneIndex = dv.getInt16();\n\t\t\tp.groupIndex = dv.getUint8();\n\t\t\tp.groupTarget = dv.getUint16();\n\t\t\tp.shapeType = dv.getUint8();\n\t\t\tp.width = dv.getFloat32();\n\t\t\tp.height = dv.getFloat32();\n\t\t\tp.depth = dv.getFloat32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.weight = dv.getFloat32();\n\t\t\tp.positionDamping = dv.getFloat32();\n\t\t\tp.rotationDamping = dv.getFloat32();\n\t\t\tp.restitution = dv.getFloat32();\n\t\t\tp.friction = dv.getFloat32();\n\t\t\tp.type = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.rigidBodyCount = dv.getUint32();\n\n\t\tpmd.rigidBodies = [];\n\n\t\tfor ( var i = 0; i < metadata.rigidBodyCount; i++ ) {\n\n\t\t\tpmd.rigidBodies.push( parseRigidBody() );\n\n\t\t}\n\n\t};\n\n\tvar parseConstraints = function () {\n\n\t\tvar parseConstraint = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.rigidBodyIndex1 = dv.getUint32();\n\t\t\tp.rigidBodyIndex2 = dv.getUint32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.springPosition = dv.getFloat32Array( 3 );\n\t\t\tp.springRotation = dv.getFloat32Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.constraintCount = dv.getUint32();\n\n\t\tpmd.constraints = [];\n\n\t\tfor ( var i = 0; i < metadata.constraintCount; i++ ) {\n\n\t\t\tpmd.constraints.push( parseConstraint() );\n\n\t\t}\n\n\t};\n\n\tparseHeader();\n\tparseVertices();\n\tparseFaces();\n\tparseMaterials();\n\tparseBones();\n\tparseIks();\n\tparseMorphs();\n\tparseMorphFrames();\n\tparseBoneFrameNames();\n\tparseBoneFrames();\n\tparseEnglishHeader();\n\tparseEnglishBoneNames();\n\tparseEnglishMorphNames();\n\tparseEnglishBoneFrameNames();\n\tparseToonTextures();\n\tparseRigidBodies();\n\tparseConstraints();\n\n\tif ( leftToRight === true ) this.leftToRightModel( pmd );\n\n\t// console.log( pmd ); // for console debug\n\n\treturn pmd;\n\n};\n\nParser.prototype.parsePmx = function ( buffer, leftToRight ) {\n\n\tvar pmx = {};\n\tvar dv = new DataViewEx( buffer );\n\n\tpmx.metadata = {};\n\tpmx.metadata.format = 'pmx';\n\tpmx.metadata.coordinateSystem = 'left';\n\n\tvar parseHeader = function () {\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.magic = dv.getChars( 4 );\n\n\t\t// Note: don't remove the last blank space.\n\t\tif ( metadata.magic !== 'PMX ' ) {\n\n\t\t\tthrow 'PMX file magic is not PMX , but ' + metadata.magic;\n\n\t\t}\n\n\t\tmetadata.version = dv.getFloat32();\n\n\t\tif ( metadata.version !== 2.0 && metadata.version !== 2.1 ) {\n\n\t\t\tthrow 'PMX version ' + metadata.version + ' is not supported.';\n\n\t\t}\n\n\t\tmetadata.headerSize = dv.getUint8();\n\t\tmetadata.encoding = dv.getUint8();\n\t\tmetadata.additionalUvNum = dv.getUint8();\n\t\tmetadata.vertexIndexSize = dv.getUint8();\n\t\tmetadata.textureIndexSize = dv.getUint8();\n\t\tmetadata.materialIndexSize = dv.getUint8();\n\t\tmetadata.boneIndexSize = dv.getUint8();\n\t\tmetadata.morphIndexSize = dv.getUint8();\n\t\tmetadata.rigidBodyIndexSize = dv.getUint8();\n\t\tmetadata.modelName = dv.getTextBuffer();\n\t\tmetadata.englishModelName = dv.getTextBuffer();\n\t\tmetadata.comment = dv.getTextBuffer();\n\t\tmetadata.englishComment = dv.getTextBuffer();\n\n\t};\n\n\tvar parseVertices = function () {\n\n\t\tvar parseVertex = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.normal = dv.getFloat32Array( 3 );\n\t\t\tp.uv = dv.getFloat32Array( 2 );\n\n\t\t\tp.auvs = [];\n\n\t\t\tfor ( var i = 0; i < pmx.metadata.additionalUvNum; i++ ) {\n\n\t\t\t\tp.auvs.push( dv.getFloat32Array( 4 ) );\n\n\t\t\t}\n\n\t\t\tp.type = dv.getUint8();\n\n\t\t\tvar indexSize = metadata.boneIndexSize;\n\n\t\t\tif ( p.type === 0 ) { // BDEF1\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 1 );\n\t\t\t\tp.skinWeights = [ 1.0 ];\n\n\t\t\t} else if ( p.type === 1 ) { // BDEF2\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 2 );\n\t\t\t\tp.skinWeights = dv.getFloat32Array( 1 );\n\t\t\t\tp.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );\n\n\t\t\t} else if ( p.type === 2 ) { // BDEF4\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 4 );\n\t\t\t\tp.skinWeights = dv.getFloat32Array( 4 );\n\n\t\t\t} else if ( p.type === 3 ) { // SDEF\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 2 );\n\t\t\t\tp.skinWeights = dv.getFloat32Array( 1 );\n\t\t\t\tp.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );\n\n\t\t\t\tp.skinC = dv.getFloat32Array( 3 );\n\t\t\t\tp.skinR0 = dv.getFloat32Array( 3 );\n\t\t\t\tp.skinR1 = dv.getFloat32Array( 3 );\n\n\t\t\t\t// SDEF is not supported yet and is handled as BDEF2 so far.\n\t\t\t\t// TODO: SDEF support\n\t\t\t\tp.type = 1;\n\n\t\t\t} else {\n\n\t\t\t\tthrow 'unsupport bone type ' + p.type + ' exception.';\n\n\t\t\t}\n\n\t\t\tp.edgeRatio = dv.getFloat32();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.vertexCount = dv.getUint32();\n\n\t\tpmx.vertices = [];\n\n\t\tfor ( var i = 0; i < metadata.vertexCount; i++ ) {\n\n\t\t\tpmx.vertices.push( parseVertex() );\n\n\t\t}\n\n\t};\n\n\tvar parseFaces = function () {\n\n\t\tvar parseFace = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.indices = dv.getIndexArray( metadata.vertexIndexSize, 3, true );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.faceCount = dv.getUint32() / 3;\n\n\t\tpmx.faces = [];\n\n\t\tfor ( var i = 0; i < metadata.faceCount; i++ ) {\n\n\t\t\tpmx.faces.push( parseFace() );\n\n\t\t}\n\n\t};\n\n\tvar parseTextures = function () {\n\n\t\tvar parseTexture = function () {\n\n\t\t\treturn dv.getTextBuffer();\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.textureCount = dv.getUint32();\n\n\t\tpmx.textures = [];\n\n\t\tfor ( var i = 0; i < metadata.textureCount; i++ ) {\n\n\t\t\tpmx.textures.push( parseTexture() );\n\n\t\t}\n\n\t};\n\n\tvar parseMaterials = function () {\n\n\t\tvar parseMaterial = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.diffuse = dv.getFloat32Array( 4 );\n\t\t\tp.specular = dv.getFloat32Array( 3 );\n\t\t\tp.shininess = dv.getFloat32();\n\t\t\tp.ambient = dv.getFloat32Array( 3 );\n\t\t\tp.flag = dv.getUint8();\n\t\t\tp.edgeColor = dv.getFloat32Array( 4 );\n\t\t\tp.edgeSize = dv.getFloat32();\n\t\t\tp.textureIndex = dv.getIndex( pmx.metadata.textureIndexSize );\n\t\t\tp.envTextureIndex = dv.getIndex( pmx.metadata.textureIndexSize );\n\t\t\tp.envFlag = dv.getUint8();\n\t\t\tp.toonFlag = dv.getUint8();\n\n\t\t\tif ( p.toonFlag === 0 ) {\n\n\t\t\t\tp.toonIndex = dv.getIndex( pmx.metadata.textureIndexSize );\n\n\t\t\t} else if ( p.toonFlag === 1 ) {\n\n\t\t\t\tp.toonIndex = dv.getInt8();\n\n\t\t\t} else {\n\n\t\t\t\tthrow 'unknown toon flag ' + p.toonFlag + ' exception.';\n\n\t\t\t}\n\n\t\t\tp.comment = dv.getTextBuffer();\n\t\t\tp.faceCount = dv.getUint32() / 3;\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.materialCount = dv.getUint32();\n\n\t\tpmx.materials = [];\n\n\t\tfor ( var i = 0; i < metadata.materialCount; i++ ) {\n\n\t\t\tpmx.materials.push( parseMaterial() );\n\n\t\t}\n\n\t};\n\n\tvar parseBones = function () {\n\n\t\tvar parseBone = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.parentIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\tp.transformationClass = dv.getUint32();\n\t\t\tp.flag = dv.getUint16();\n\n\t\t\tif ( p.flag & 0x1 ) {\n\n\t\t\t\tp.connectIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\n\t\t\t} else {\n\n\t\t\t\tp.offsetPosition = dv.getFloat32Array( 3 );\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x100 || p.flag & 0x200 ) {\n\n\t\t\t\t// Note: I don't think Grant is an appropriate name\n\t\t\t\t// but I found that some English translated MMD tools use this term\n\t\t\t\t// so I've named it Grant so far.\n\t\t\t\t// I'd rename to more appropriate name from Grant later.\n\t\t\t\tvar grant = {};\n\n\t\t\t\tgrant.isLocal = ( p.flag & 0x80 ) !== 0 ? true : false;\n\t\t\t\tgrant.affectRotation = ( p.flag & 0x100 ) !== 0 ? true : false;\n\t\t\t\tgrant.affectPosition = ( p.flag & 0x200 ) !== 0 ? true : false;\n\t\t\t\tgrant.parentIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\tgrant.ratio = dv.getFloat32();\n\n\t\t\t\tp.grant = grant;\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x400 ) {\n\n\t\t\t\tp.fixAxis = dv.getFloat32Array( 3 );\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x800 ) {\n\n\t\t\t\tp.localXVector = dv.getFloat32Array( 3 );\n\t\t\t\tp.localZVector = dv.getFloat32Array( 3 );\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x2000 ) {\n\n\t\t\t\tp.key = dv.getUint32();\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x20 ) {\n\n\t\t\t\tvar ik = {};\n\n\t\t\t\tik.effector = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\tik.target = null;\n\t\t\t\tik.iteration = dv.getUint32();\n\t\t\t\tik.maxAngle = dv.getFloat32();\n\t\t\t\tik.linkCount = dv.getUint32();\n\t\t\t\tik.links = [];\n\n\t\t\t\tfor ( var i = 0; i < ik.linkCount; i++ ) {\n\n\t\t\t\t\tvar link = {};\n\t\t\t\t\tlink.index = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\t\tlink.angleLimitation = dv.getUint8();\n\n\t\t\t\t\tif ( link.angleLimitation === 1 ) {\n\n\t\t\t\t\t\tlink.lowerLimitationAngle = dv.getFloat32Array( 3 );\n\t\t\t\t\t\tlink.upperLimitationAngle = dv.getFloat32Array( 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tik.links.push( link );\n\n\t\t\t\t}\n\n\t\t\t\tp.ik = ik;\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.boneCount = dv.getUint32();\n\n\t\tpmx.bones = [];\n\n\t\tfor ( var i = 0; i < metadata.boneCount; i++ ) {\n\n\t\t\tpmx.bones.push( parseBone() );\n\n\t\t}\n\n\t};\n\n\tvar parseMorphs = function () {\n\n\t\tvar parseMorph = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.panel = dv.getUint8();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.elementCount = dv.getUint32();\n\t\t\tp.elements = [];\n\n\t\t\tfor ( var i = 0; i < p.elementCount; i++ ) {\n\n\t\t\t\tif ( p.type === 0 ) { // group morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.morphIndexSize );\n\t\t\t\t\tm.ratio = dv.getFloat32();\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 1 ) { // vertex morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.vertexIndexSize, true );\n\t\t\t\t\tm.position = dv.getFloat32Array( 3 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 2 ) { // bone morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\t\tm.position = dv.getFloat32Array( 3 );\n\t\t\t\t\tm.rotation = dv.getFloat32Array( 4 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 3 ) { // uv morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.vertexIndexSize, true );\n\t\t\t\t\tm.uv = dv.getFloat32Array( 4 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 4 ) { // additional uv1\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 5 ) { // additional uv2\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 6 ) { // additional uv3\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 7 ) { // additional uv4\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 8 ) { // material morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.materialIndexSize );\n\t\t\t\t\tm.type = dv.getUint8();\n\t\t\t\t\tm.diffuse = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.specular = dv.getFloat32Array( 3 );\n\t\t\t\t\tm.shininess = dv.getFloat32();\n\t\t\t\t\tm.ambient = dv.getFloat32Array( 3 );\n\t\t\t\t\tm.edgeColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.edgeSize = dv.getFloat32();\n\t\t\t\t\tm.textureColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.sphereTextureColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.toonColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.morphCount = dv.getUint32();\n\n\t\tpmx.morphs = [];\n\n\t\tfor ( var i = 0; i < metadata.morphCount; i++ ) {\n\n\t\t\tpmx.morphs.push( parseMorph() );\n\n\t\t}\n\n\t};\n\n\tvar parseFrames = function () {\n\n\t\tvar parseFrame = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.elementCount = dv.getUint32();\n\t\t\tp.elements = [];\n\n\t\t\tfor ( var i = 0; i < p.elementCount; i++ ) {\n\n\t\t\t\tvar e = {};\n\t\t\t\te.target = dv.getUint8();\n\t\t\t\te.index = ( e.target === 0 ) ? dv.getIndex( pmx.metadata.boneIndexSize ) : dv.getIndex( pmx.metadata.morphIndexSize );\n\t\t\t\tp.elements.push( e );\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.frameCount = dv.getUint32();\n\n\t\tpmx.frames = [];\n\n\t\tfor ( var i = 0; i < metadata.frameCount; i++ ) {\n\n\t\t\tpmx.frames.push( parseFrame() );\n\n\t\t}\n\n\t};\n\n\tvar parseRigidBodies = function () {\n\n\t\tvar parseRigidBody = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.boneIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\tp.groupIndex = dv.getUint8();\n\t\t\tp.groupTarget = dv.getUint16();\n\t\t\tp.shapeType = dv.getUint8();\n\t\t\tp.width = dv.getFloat32();\n\t\t\tp.height = dv.getFloat32();\n\t\t\tp.depth = dv.getFloat32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.weight = dv.getFloat32();\n\t\t\tp.positionDamping = dv.getFloat32();\n\t\t\tp.rotationDamping = dv.getFloat32();\n\t\t\tp.restitution = dv.getFloat32();\n\t\t\tp.friction = dv.getFloat32();\n\t\t\tp.type = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.rigidBodyCount = dv.getUint32();\n\n\t\tpmx.rigidBodies = [];\n\n\t\tfor ( var i = 0; i < metadata.rigidBodyCount; i++ ) {\n\n\t\t\tpmx.rigidBodies.push( parseRigidBody() );\n\n\t\t}\n\n\t};\n\n\tvar parseConstraints = function () {\n\n\t\tvar parseConstraint = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.rigidBodyIndex1 = dv.getIndex( pmx.metadata.rigidBodyIndexSize );\n\t\t\tp.rigidBodyIndex2 = dv.getIndex( pmx.metadata.rigidBodyIndexSize );\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.springPosition = dv.getFloat32Array( 3 );\n\t\t\tp.springRotation = dv.getFloat32Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.constraintCount = dv.getUint32();\n\n\t\tpmx.constraints = [];\n\n\t\tfor ( var i = 0; i < metadata.constraintCount; i++ ) {\n\n\t\t\tpmx.constraints.push( parseConstraint() );\n\n\t\t}\n\n\t};\n\n\tparseHeader();\n\tparseVertices();\n\tparseFaces();\n\tparseTextures();\n\tparseMaterials();\n\tparseBones();\n\tparseMorphs();\n\tparseFrames();\n\tparseRigidBodies();\n\tparseConstraints();\n\n\tif ( leftToRight === true ) this.leftToRightModel( pmx );\n\n\t// console.log( pmx ); // for console debug\n\n\treturn pmx;\n\n};\n\nParser.prototype.parseVmd = function ( buffer, leftToRight ) {\n\n\tvar vmd = {};\n\tvar dv = new DataViewEx( buffer );\n\n\tvmd.metadata = {};\n\tvmd.metadata.coordinateSystem = 'left';\n\n\tvar parseHeader = function () {\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.magic = dv.getChars( 30 );\n\n\t\tif ( metadata.magic !== 'Vocaloid Motion Data 0002' ) {\n\n\t\t\tthrow 'VMD file magic is not Vocaloid Motion Data 0002, but ' + metadata.magic;\n\n\t\t}\n\n\t\tmetadata.name = dv.getSjisStringsAsUnicode( 20 );\n\n\t};\n\n\tvar parseMotions = function () {\n\n\t\tvar parseMotion = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.boneName = dv.getSjisStringsAsUnicode( 15 );\n\t\t\tp.frameNum = dv.getUint32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 4 );\n\t\t\tp.interpolation = dv.getUint8Array( 64 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.motionCount = dv.getUint32();\n\n\t\tvmd.motions = [];\n\t\tfor ( var i = 0; i < metadata.motionCount; i++ ) {\n\n\t\t\tvmd.motions.push( parseMotion() );\n\n\t\t}\n\n\t};\n\n\tvar parseMorphs = function () {\n\n\t\tvar parseMorph = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.morphName = dv.getSjisStringsAsUnicode( 15 );\n\t\t\tp.frameNum = dv.getUint32();\n\t\t\tp.weight = dv.getFloat32();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.morphCount = dv.getUint32();\n\n\t\tvmd.morphs = [];\n\t\tfor ( var i = 0; i < metadata.morphCount; i++ ) {\n\n\t\t\tvmd.morphs.push( parseMorph() );\n\n\t\t}\n\n\t};\n\n\tvar parseCameras = function () {\n\n\t\tvar parseCamera = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.frameNum = dv.getUint32();\n\t\t\tp.distance = dv.getFloat32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.interpolation = dv.getUint8Array( 24 );\n\t\t\tp.fov = dv.getUint32();\n\t\t\tp.perspective = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.cameraCount = dv.getUint32();\n\n\t\tvmd.cameras = [];\n\t\tfor ( var i = 0; i < metadata.cameraCount; i++ ) {\n\n\t\t\tvmd.cameras.push( parseCamera() );\n\n\t\t}\n\n\t};\n\n\tparseHeader();\n\tparseMotions();\n\tparseMorphs();\n\tparseCameras();\n\n\tif ( leftToRight === true ) this.leftToRightVmd( vmd );\n\n\t// console.log( vmd ); // for console debug\n\n\treturn vmd;\n\n};\n\nParser.prototype.parseVpd = function ( text, leftToRight ) {\n\n\tvar vpd = {};\n\n\tvpd.metadata = {};\n\tvpd.metadata.coordinateSystem = 'left';\n\n\tvpd.bones = [];\n\n\tvar commentPatternG = /\\/\\/\\w*(\\r|\\n|\\r\\n)/g;\n\tvar newlinePattern = /\\r|\\n|\\r\\n/;\n\n\tvar lines = text.replace( commentPatternG, '' ).split( newlinePattern );\n\n\tfunction throwError () {\n\n\t\tthrow 'the file seems not vpd file.';\n\n\t}\n\n\tfunction checkMagic () {\n\n\t\tif ( lines[ 0 ] !== 'Vocaloid Pose Data file' ) {\n\n\t\t\tthrowError();\n\n\t\t}\n\n\t}\n\n\tfunction parseHeader () {\n\n\t\tif ( lines.length < 4 ) {\n\n\t\t\tthrowError();\n\n\t\t}\n\n\t\tvpd.metadata.parentFile = lines[ 2 ];\n\t\tvpd.metadata.boneCount = parseInt( lines[ 3 ] );\n\n\t}\n\n\tfunction parseBones () {\n\n\t\tvar boneHeaderPattern = /^\\s*(Bone[0-9]+)\\s*\\{\\s*(.*)$/;\n\t\tvar boneVectorPattern = /^\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*;/;\n\t\tvar boneQuaternionPattern = /^\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*;/;\n\t\tvar boneFooterPattern = /^\\s*}/;\n\n\t\tvar bones = vpd.bones;\n\t\tvar n = null;\n\t\tvar v = null;\n\t\tvar q = null;\n\n\t\tfor ( var i = 4; i < lines.length; i++ ) {\n\n\t\t\tvar line = lines[ i ];\n\n\t\t\tvar result;\n\n\t\t\tresult = line.match( boneHeaderPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( n !== null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tn = result[ 2 ];\n\n\t\t\t}\n\n\t\t\tresult = line.match( boneVectorPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( v !== null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tv = [\n\n\t\t\t\t\tparseFloat( result[ 1 ] ),\n\t\t\t\t\tparseFloat( result[ 2 ] ),\n\t\t\t\t\tparseFloat( result[ 3 ] )\n\n\t\t\t\t];\n\n\t\t\t}\n\n\t\t\tresult = line.match( boneQuaternionPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( q !== null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tq = [\n\n\t\t\t\t\tparseFloat( result[ 1 ] ),\n\t\t\t\t\tparseFloat( result[ 2 ] ),\n\t\t\t\t\tparseFloat( result[ 3 ] ),\n\t\t\t\t\tparseFloat( result[ 4 ] )\n\n\t\t\t\t];\n\n\n\t\t\t}\n\n\t\t\tresult = line.match( boneFooterPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( n === null || v === null || q === null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tbones.push( {\n\n\t\t\t\t\tname: n,\n\t\t\t\t\ttranslation: v,\n\t\t\t\t\tquaternion: q\n\n\t\t\t\t} );\n\n\t\t\t\tn = null;\n\t\t\t\tv = null;\n\t\t\t\tq = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( n !== null || v !== null || q !== null ) {\n\n\t\t\tthrowError();\n\n\t\t}\n\n\t}\n\n\tcheckMagic();\n\tparseHeader();\n\tparseBones();\n\n\tif ( leftToRight === true ) this.leftToRightVpd( vpd );\n\n\t// console.log( vpd ); // for console debug\n\n\treturn vpd;\n\n};\n\nParser.prototype.mergeVmds = function ( vmds ) {\n\n\tvar v = {};\n\tv.metadata = {};\n\tv.metadata.name = vmds[ 0 ].metadata.name;\n\tv.metadata.coordinateSystem = vmds[ 0 ].metadata.coordinateSystem;\n\tv.metadata.motionCount = 0;\n\tv.metadata.morphCount = 0;\n\tv.metadata.cameraCount = 0;\n\tv.motions = [];\n\tv.morphs = [];\n\tv.cameras = [];\n\n\tfor ( var i = 0; i < vmds.length; i++ ) {\n\n\t\tvar v2 = vmds[ i ];\n\n\t\tv.metadata.motionCount += v2.metadata.motionCount;\n\t\tv.metadata.morphCount += v2.metadata.morphCount;\n\t\tv.metadata.cameraCount += v2.metadata.cameraCount;\n\n\t\tfor ( var j = 0; j < v2.metadata.motionCount; j++ ) {\n\n\t\t\tv.motions.push( v2.motions[ j ] );\n\n\t\t}\n\n\t\tfor ( var j = 0; j < v2.metadata.morphCount; j++ ) {\n\n\t\t\tv.morphs.push( v2.morphs[ j ] );\n\n\t\t}\n\n\t\tfor ( var j = 0; j < v2.metadata.cameraCount; j++ ) {\n\n\t\t\tv.cameras.push( v2.cameras[ j ] );\n\n\t\t}\n\n\t}\n\n\treturn v;\n\n};\n\nParser.prototype.leftToRightModel = function ( model ) {\n\n\tif ( model.metadata.coordinateSystem === 'right' ) {\n\n\t\treturn;\n\n\t}\n\n\tmodel.metadata.coordinateSystem = 'right';\n\n\tvar helper = new DataCreationHelper();\n\n\tfor ( var i = 0; i < model.metadata.vertexCount; i++ ) {\n\n\t\thelper.leftToRightVector3( model.vertices[ i ].position );\n\t\thelper.leftToRightVector3( model.vertices[ i ].normal );\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.faceCount; i++ ) {\n\n\t\thelper.leftToRightIndexOrder( model.faces[ i ].indices );\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.boneCount; i++ ) {\n\n\t\thelper.leftToRightVector3( model.bones[ i ].position );\n\n\t}\n\n\t// TODO: support other morph for PMX\n\tfor ( var i = 0; i < model.metadata.morphCount; i++ ) {\n\n\t\tvar m = model.morphs[ i ];\n\n\t\tif ( model.metadata.format === 'pmx' && m.type !== 1 ) {\n\n\t\t\t// TODO: implement\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tfor ( var j = 0; j < m.elements.length; j++ ) {\n\n\t\t\thelper.leftToRightVector3( m.elements[ j ].position );\n\n\t\t}\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.rigidBodyCount; i++ ) {\n\n\t\thelper.leftToRightVector3( model.rigidBodies[ i ].position );\n\t\thelper.leftToRightEuler( model.rigidBodies[ i ].rotation );\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.constraintCount; i++ ) {\n\n\t\thelper.leftToRightVector3( model.constraints[ i ].position );\n\t\thelper.leftToRightEuler( model.constraints[ i ].rotation );\n\t\thelper.leftToRightVector3Range( model.constraints[ i ].translationLimitation1, model.constraints[ i ].translationLimitation2 );\n\t\thelper.leftToRightEulerRange( model.constraints[ i ].rotationLimitation1, model.constraints[ i ].rotationLimitation2 );\n\n\t}\n\n};\n\nParser.prototype.leftToRightVmd = function ( vmd ) {\n\n\tif ( vmd.metadata.coordinateSystem === 'right' ) {\n\n\t\treturn;\n\n\t}\n\n\tvmd.metadata.coordinateSystem = 'right';\n\n\tvar helper = new DataCreationHelper();\n\n\tfor ( var i = 0; i < vmd.metadata.motionCount; i++ ) {\n\n\t\thelper.leftToRightVector3( vmd.motions[ i ].position );\n\t\thelper.leftToRightQuaternion( vmd.motions[ i ].rotation );\n\n\t}\n\n\tfor ( var i = 0; i < vmd.metadata.cameraCount; i++ ) {\n\n\t\thelper.leftToRightVector3( vmd.cameras[ i ].position );\n\t\thelper.leftToRightEuler( vmd.cameras[ i ].rotation );\n\n\t}\n\n};\n\nParser.prototype.leftToRightVpd = function ( vpd ) {\n\n\tif ( vpd.metadata.coordinateSystem === 'right' ) {\n\n\t\treturn;\n\n\t}\n\n\tvpd.metadata.coordinateSystem = 'right';\n\n\tvar helper = new DataCreationHelper();\n\n\tfor ( var i = 0; i < vpd.bones.length; i++ ) {\n\n\t\thelper.leftToRightVector3( vpd.bones[ i ].translation );\n\t\thelper.leftToRightQuaternion( vpd.bones[ i ].quaternion );\n\n\t}\n\n};\n\nvar MMDParser = {\n CharsetEncoder: CharsetEncoder,\n Parser: Parser\n};\n\nexport { MMDParser, CharsetEncoder, Parser };\n", "import {\n\tMatrix4,\n\tQuaternion,\n\tVector3\n} from 'three';\nimport { MMDParser } from '../libs/mmdparser.module.js';\n\n/**\n * Dependencies\n * - mmd-parser https://github.com/takahirox/mmd-parser\n */\n\nclass MMDExporter {\n\n\t/* TODO: implement\n\t// mesh -> pmd\n\tthis.parsePmd = function ( object ) {\n\n\t};\n\t*/\n\n\t/* TODO: implement\n\t// mesh -> pmx\n\tthis.parsePmx = function ( object ) {\n\n\t};\n\t*/\n\n\t/* TODO: implement\n\t// animation + skeleton -> vmd\n\tthis.parseVmd = function ( object ) {\n\n\t};\n\t*/\n\n\t/*\n\t * skeleton -> vpd\n\t * Returns Shift_JIS encoded Uint8Array. Otherwise return strings.\n\t */\n\tparseVpd( skin, outputShiftJis, useOriginalBones ) {\n\n\t\tif ( skin.isSkinnedMesh !== true ) {\n\n\t\t\tconsole.warn( 'THREE.MMDExporter: parseVpd() requires SkinnedMesh instance.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction toStringsFromNumber( num ) {\n\n\t\t\tif ( Math.abs( num ) < 1e-6 ) num = 0;\n\n\t\t\tlet a = num.toString();\n\n\t\t\tif ( a.indexOf( '.' ) === - 1 ) {\n\n\t\t\t\ta += '.';\n\n\t\t\t}\n\n\t\t\ta += '000000';\n\n\t\t\tconst index = a.indexOf( '.' );\n\n\t\t\tconst d = a.slice( 0, index );\n\t\t\tconst p = a.slice( index + 1, index + 7 );\n\n\t\t\treturn d + '.' + p;\n\n\t\t}\n\n\t\tfunction toStringsFromArray( array ) {\n\n\t\t\tconst a = [];\n\n\t\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\ta.push( toStringsFromNumber( array[ i ] ) );\n\n\t\t\t}\n\n\t\t\treturn a.join( ',' );\n\n\t\t}\n\n\t\tskin.updateMatrixWorld( true );\n\n\t\tconst bones = skin.skeleton.bones;\n\t\tconst bones2 = getBindBones( skin );\n\n\t\tconst position = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\t\tconst quaternion2 = new Quaternion();\n\t\tconst matrix = new Matrix4();\n\n\t\tconst array = [];\n\t\tarray.push( 'Vocaloid Pose Data file' );\n\t\tarray.push( '' );\n\t\tarray.push( ( skin.name !== '' ? skin.name.replace( /\\s/g, '_' ) : 'skin' ) + '.osm;' );\n\t\tarray.push( bones.length + ';' );\n\t\tarray.push( '' );\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tconst bone2 = bones2[ i ];\n\n\t\t\t/*\n\t\t\t * use the bone matrix saved before solving IK.\n\t\t\t * see CCDIKSolver for the detail.\n\t\t\t */\n\t\t\tif ( useOriginalBones === true &&\n\t\t\t\tbone.userData.ik !== undefined &&\n\t\t\t\tbone.userData.ik.originalMatrix !== undefined ) {\n\n\t\t\t\tmatrix.fromArray( bone.userData.ik.originalMatrix );\n\n\t\t\t} else {\n\n\t\t\t\tmatrix.copy( bone.matrix );\n\n\t\t\t}\n\n\t\t\tposition.setFromMatrixPosition( matrix );\n\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\tconst pArray = position.sub( bone2.position ).toArray();\n\t\t\tconst qArray = quaternion2.copy( bone2.quaternion ).conjugate().multiply( quaternion ).toArray();\n\n\t\t\t// right to left\n\t\t\tpArray[ 2 ] = - pArray[ 2 ];\n\t\t\tqArray[ 0 ] = - qArray[ 0 ];\n\t\t\tqArray[ 1 ] = - qArray[ 1 ];\n\n\t\t\tarray.push( 'Bone' + i + '{' + bone.name );\n\t\t\tarray.push( ' ' + toStringsFromArray( pArray ) + ';' );\n\t\t\tarray.push( ' ' + toStringsFromArray( qArray ) + ';' );\n\t\t\tarray.push( '}' );\n\t\t\tarray.push( '' );\n\n\t\t}\n\n\t\tarray.push( '' );\n\n\t\tconst lines = array.join( '\\n' );\n\n\t\treturn ( outputShiftJis === true ) ? unicodeToShiftjis( lines ) : lines;\n\n\t}\n\n}\n\n// Unicode to Shift_JIS table\nlet u2sTable;\n\nfunction unicodeToShiftjis( str ) {\n\n\tif ( u2sTable === undefined ) {\n\n\t\tconst encoder = new MMDParser.CharsetEncoder();\n\t\tconst table = encoder.s2uTable;\n\t\tu2sTable = {};\n\n\t\tconst keys = Object.keys( table );\n\n\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\tlet key = keys[ i ];\n\n\t\t\tconst value = table[ key ];\n\t\t\tkey = parseInt( key );\n\n\t\t\tu2sTable[ value ] = key;\n\n\t\t}\n\n\t}\n\n\tconst array = [];\n\n\tfor ( let i = 0, il = str.length; i < il; i ++ ) {\n\n\t\tconst code = str.charCodeAt( i );\n\n\t\tconst value = u2sTable[ code ];\n\n\t\tif ( value === undefined ) {\n\n\t\t\tthrow new Error( 'cannot convert charcode 0x' + code.toString( 16 ) );\n\n\t\t} else if ( value > 0xff ) {\n\n\t\t\tarray.push( ( value >> 8 ) & 0xff );\n\t\t\tarray.push( value & 0xff );\n\n\t\t} else {\n\n\t\t\tarray.push( value & 0xff );\n\n\t\t}\n\n\t}\n\n\treturn new Uint8Array( array );\n\n}\n\nfunction getBindBones( skin ) {\n\n\t// any more efficient ways?\n\tconst poseSkin = skin.clone();\n\tposeSkin.pose();\n\treturn poseSkin.skeleton.bones;\n\n}\n\nexport { MMDExporter };\n", "import {\n\tColor,\n\tMatrix3,\n\tVector2,\n\tVector3\n} from 'three';\n\nclass OBJExporter {\n\n\tparse( object ) {\n\n\t\tlet output = '';\n\n\t\tlet indexVertex = 0;\n\t\tlet indexVertexUvs = 0;\n\t\tlet indexNormals = 0;\n\n\t\tconst vertex = new Vector3();\n\t\tconst color = new Color();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\tconst face = [];\n\n\t\tfunction parseMesh( mesh ) {\n\n\t\t\tlet nbVertex = 0;\n\t\t\tlet nbNormals = 0;\n\t\t\tlet nbVertexUvs = 0;\n\n\t\t\tconst geometry = mesh.geometry;\n\n\t\t\tconst normalMatrixWorld = new Matrix3();\n\n\t\t\t// shortcuts\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\t\t\tconst indices = geometry.getIndex();\n\n\t\t\t// name of the mesh object\n\t\t\toutput += 'o ' + mesh.name + '\\n';\n\n\t\t\t// name of the mesh material\n\t\t\tif ( mesh.material && mesh.material.name ) {\n\n\t\t\t\toutput += 'usemtl ' + mesh.material.name + '\\n';\n\n\t\t\t}\n\n\t\t\t// vertices\n\n\t\t\tif ( vertices !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\t// transform the vertex to world space\n\t\t\t\t\tvertex.applyMatrix4( mesh.matrixWorld );\n\n\t\t\t\t\t// transform the vertex to export format\n\t\t\t\t\toutput += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = uvs.count; i < l; i ++, nbVertexUvs ++ ) {\n\n\t\t\t\t\tuv.fromBufferAttribute( uvs, i );\n\n\t\t\t\t\t// transform the uv to export format\n\t\t\t\t\toutput += 'vt ' + uv.x + ' ' + uv.y + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\tnormalMatrixWorld.getNormalMatrix( mesh.matrixWorld );\n\n\t\t\t\tfor ( let i = 0, l = normals.count; i < l; i ++, nbNormals ++ ) {\n\n\t\t\t\t\tnormal.fromBufferAttribute( normals, i );\n\n\t\t\t\t\t// transform the normal to world space\n\t\t\t\t\tnormal.applyMatrix3( normalMatrixWorld ).normalize();\n\n\t\t\t\t\t// transform the normal to export format\n\t\t\t\t\toutput += 'vn ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// faces\n\n\t\t\tif ( indices !== null ) {\n\n\t\t\t\tfor ( let i = 0, l = indices.count; i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( let m = 0; m < 3; m ++ ) {\n\n\t\t\t\t\t\tconst j = indices.getX( i + m ) + 1;\n\n\t\t\t\t\t\tface[ m ] = ( indexVertex + j ) + ( normals || uvs ? '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + ( normals ? '/' + ( indexNormals + j ) : '' ) : '' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// transform the face to export format\n\t\t\t\t\toutput += 'f ' + face.join( ' ' ) + '\\n';\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( let m = 0; m < 3; m ++ ) {\n\n\t\t\t\t\t\tconst j = i + m + 1;\n\n\t\t\t\t\t\tface[ m ] = ( indexVertex + j ) + ( normals || uvs ? '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + ( normals ? '/' + ( indexNormals + j ) : '' ) : '' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// transform the face to export format\n\t\t\t\t\toutput += 'f ' + face.join( ' ' ) + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// update index\n\t\t\tindexVertex += nbVertex;\n\t\t\tindexVertexUvs += nbVertexUvs;\n\t\t\tindexNormals += nbNormals;\n\n\t\t}\n\n\t\tfunction parseLine( line ) {\n\n\t\t\tlet nbVertex = 0;\n\n\t\t\tconst geometry = line.geometry;\n\t\t\tconst type = line.type;\n\n\t\t\t// shortcuts\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\n\t\t\t// name of the line object\n\t\t\toutput += 'o ' + line.name + '\\n';\n\n\t\t\tif ( vertices !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\t// transform the vertex to world space\n\t\t\t\t\tvertex.applyMatrix4( line.matrixWorld );\n\n\t\t\t\t\t// transform the vertex to export format\n\t\t\t\t\toutput += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( type === 'Line' ) {\n\n\t\t\t\toutput += 'l ';\n\n\t\t\t\tfor ( let j = 1, l = vertices.count; j <= l; j ++ ) {\n\n\t\t\t\t\toutput += ( indexVertex + j ) + ' ';\n\n\t\t\t\t}\n\n\t\t\t\toutput += '\\n';\n\n\t\t\t}\n\n\t\t\tif ( type === 'LineSegments' ) {\n\n\t\t\t\tfor ( let j = 1, k = j + 1, l = vertices.count; j < l; j += 2, k = j + 1 ) {\n\n\t\t\t\t\toutput += 'l ' + ( indexVertex + j ) + ' ' + ( indexVertex + k ) + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// update index\n\t\t\tindexVertex += nbVertex;\n\n\t\t}\n\n\t\tfunction parsePoints( points ) {\n\n\t\t\tlet nbVertex = 0;\n\n\t\t\tconst geometry = points.geometry;\n\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tconst colors = geometry.getAttribute( 'color' );\n\n\t\t\toutput += 'o ' + points.name + '\\n';\n\n\t\t\tif ( vertices !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\t\t\t\t\tvertex.applyMatrix4( points.matrixWorld );\n\n\t\t\t\t\toutput += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z;\n\n\t\t\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\t\t\tcolor.fromBufferAttribute( colors, i ).convertLinearToSRGB();\n\n\t\t\t\t\t\toutput += ' ' + color.r + ' ' + color.g + ' ' + color.b;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutput += '\\n';\n\n\t\t\t\t}\n\n\t\t\t\toutput += 'p ';\n\n\t\t\t\tfor ( let j = 1, l = vertices.count; j <= l; j ++ ) {\n\n\t\t\t\t\toutput += ( indexVertex + j ) + ' ';\n\n\t\t\t\t}\n\n\t\t\t\toutput += '\\n';\n\n\t\t\t}\n\n\t\t\t// update index\n\t\t\tindexVertex += nbVertex;\n\n\t\t}\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh === true ) {\n\n\t\t\t\tparseMesh( child );\n\n\t\t\t}\n\n\t\t\tif ( child.isLine === true ) {\n\n\t\t\t\tparseLine( child );\n\n\t\t\t}\n\n\t\t\tif ( child.isPoints === true ) {\n\n\t\t\t\tparsePoints( child );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn output;\n\n\t}\n\n}\n\nexport { OBJExporter };\n", "import {\n\tMatrix3,\n\tVector3,\n\tColor\n} from 'three';\n\n/**\n * https://github.com/gkjohnson/ply-exporter-js\n *\n * Usage:\n * const exporter = new PLYExporter();\n *\n * // second argument is a list of options\n * exporter.parse(mesh, data => console.log(data), { binary: true, excludeAttributes: [ 'color' ], littleEndian: true });\n *\n * Format Definition:\n * http://paulbourke.net/dataformats/ply/\n */\n\nclass PLYExporter {\n\n\tparse( object, onDone, options = {} ) {\n\n\t\t// Iterate over the valid meshes in the object\n\t\tfunction traverseMeshes( cb ) {\n\n\t\t\tobject.traverse( function ( child ) {\n\n\t\t\t\tif ( child.isMesh === true || child.isPoints ) {\n\n\t\t\t\t\tconst mesh = child;\n\t\t\t\t\tconst geometry = mesh.geometry;\n\n\t\t\t\t\tif ( geometry.hasAttribute( 'position' ) === true ) {\n\n\t\t\t\t\t\tcb( mesh, geometry );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// Default options\n\t\tconst defaultOptions = {\n\t\t\tbinary: false,\n\t\t\texcludeAttributes: [], // normal, uv, color, index\n\t\t\tlittleEndian: false\n\t\t};\n\n\t\toptions = Object.assign( defaultOptions, options );\n\n\t\tconst excludeAttributes = options.excludeAttributes;\n\t\tlet includeIndices = true;\n\t\tlet includeNormals = false;\n\t\tlet includeColors = false;\n\t\tlet includeUVs = false;\n\n\t\t// count the vertices, check which properties are used,\n\t\t// and cache the BufferGeometry\n\t\tlet vertexCount = 0;\n\t\tlet faceCount = 0;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh === true ) {\n\n\t\t\t\tconst mesh = child;\n\t\t\t\tconst geometry = mesh.geometry;\n\n\t\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\t\t\t\tconst indices = geometry.getIndex();\n\n\t\t\t\tif ( vertices === undefined ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvertexCount += vertices.count;\n\t\t\t\tfaceCount += indices ? indices.count / 3 : vertices.count / 3;\n\n\t\t\t\tif ( normals !== undefined ) includeNormals = true;\n\n\t\t\t\tif ( uvs !== undefined ) includeUVs = true;\n\n\t\t\t\tif ( colors !== undefined ) includeColors = true;\n\n\t\t\t} else if ( child.isPoints ) {\n\n\t\t\t\tconst mesh = child;\n\t\t\t\tconst geometry = mesh.geometry;\n\n\t\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\n\t\t\t\tvertexCount += vertices.count;\n\n\t\t\t\tif ( normals !== undefined ) includeNormals = true;\n\n\t\t\t\tif ( colors !== undefined ) includeColors = true;\n\n\t\t\t\tincludeIndices = false;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst tempColor = new Color();\n\t\tincludeIndices = includeIndices && excludeAttributes.indexOf( 'index' ) === - 1;\n\t\tincludeNormals = includeNormals && excludeAttributes.indexOf( 'normal' ) === - 1;\n\t\tincludeColors = includeColors && excludeAttributes.indexOf( 'color' ) === - 1;\n\t\tincludeUVs = includeUVs && excludeAttributes.indexOf( 'uv' ) === - 1;\n\n\n\t\tif ( includeIndices && faceCount !== Math.floor( faceCount ) ) {\n\n\t\t\t// point cloud meshes will not have an index array and may not have a\n\t\t\t// number of vertices that is divisble by 3 (and therefore representable\n\t\t\t// as triangles)\n\t\t\tconsole.error(\n\n\t\t\t\t'PLYExporter: Failed to generate a valid PLY file with triangle indices because the ' +\n\t\t\t\t'number of indices is not divisible by 3.'\n\n\t\t\t);\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst indexByteCount = 4;\n\n\t\tlet header =\n\t\t\t'ply\\n' +\n\t\t\t`format ${ options.binary ? ( options.littleEndian ? 'binary_little_endian' : 'binary_big_endian' ) : 'ascii' } 1.0\\n` +\n\t\t\t`element vertex ${vertexCount}\\n` +\n\n\t\t\t// position\n\t\t\t'property float x\\n' +\n\t\t\t'property float y\\n' +\n\t\t\t'property float z\\n';\n\n\t\tif ( includeNormals === true ) {\n\n\t\t\t// normal\n\t\t\theader +=\n\t\t\t\t'property float nx\\n' +\n\t\t\t\t'property float ny\\n' +\n\t\t\t\t'property float nz\\n';\n\n\t\t}\n\n\t\tif ( includeUVs === true ) {\n\n\t\t\t// uvs\n\t\t\theader +=\n\t\t\t\t'property float s\\n' +\n\t\t\t\t'property float t\\n';\n\n\t\t}\n\n\t\tif ( includeColors === true ) {\n\n\t\t\t// colors\n\t\t\theader +=\n\t\t\t\t'property uchar red\\n' +\n\t\t\t\t'property uchar green\\n' +\n\t\t\t\t'property uchar blue\\n';\n\n\t\t}\n\n\t\tif ( includeIndices === true ) {\n\n\t\t\t// faces\n\t\t\theader +=\n\t\t\t\t`element face ${faceCount}\\n` +\n\t\t\t\t'property list uchar int vertex_index\\n';\n\n\t\t}\n\n\t\theader += 'end_header\\n';\n\n\n\t\t// Generate attribute data\n\t\tconst vertex = new Vector3();\n\t\tconst normalMatrixWorld = new Matrix3();\n\t\tlet result = null;\n\n\t\tif ( options.binary === true ) {\n\n\t\t\t// Binary File Generation\n\t\t\tconst headerBin = new TextEncoder().encode( header );\n\n\t\t\t// 3 position values at 4 bytes\n\t\t\t// 3 normal values at 4 bytes\n\t\t\t// 3 color channels with 1 byte\n\t\t\t// 2 uv values at 4 bytes\n\t\t\tconst vertexListLength = vertexCount * ( 4 * 3 + ( includeNormals ? 4 * 3 : 0 ) + ( includeColors ? 3 : 0 ) + ( includeUVs ? 4 * 2 : 0 ) );\n\n\t\t\t// 1 byte shape desciptor\n\t\t\t// 3 vertex indices at ${indexByteCount} bytes\n\t\t\tconst faceListLength = includeIndices ? faceCount * ( indexByteCount * 3 + 1 ) : 0;\n\t\t\tconst output = new DataView( new ArrayBuffer( headerBin.length + vertexListLength + faceListLength ) );\n\t\t\tnew Uint8Array( output.buffer ).set( headerBin, 0 );\n\n\n\t\t\tlet vOffset = headerBin.length;\n\t\t\tlet fOffset = headerBin.length + vertexListLength;\n\t\t\tlet writtenVertices = 0;\n\t\t\ttraverseMeshes( function ( mesh, geometry ) {\n\n\t\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\t\t\t\tconst indices = geometry.getIndex();\n\n\t\t\t\tnormalMatrixWorld.getNormalMatrix( mesh.matrixWorld );\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\tvertex.applyMatrix4( mesh.matrixWorld );\n\n\n\t\t\t\t\t// Position information\n\t\t\t\t\toutput.setFloat32( vOffset, vertex.x, options.littleEndian );\n\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\toutput.setFloat32( vOffset, vertex.y, options.littleEndian );\n\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\toutput.setFloat32( vOffset, vertex.z, options.littleEndian );\n\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t// Normal information\n\t\t\t\t\tif ( includeNormals === true ) {\n\n\t\t\t\t\t\tif ( normals != null ) {\n\n\t\t\t\t\t\t\tvertex.fromBufferAttribute( normals, i );\n\n\t\t\t\t\t\t\tvertex.applyMatrix3( normalMatrixWorld ).normalize();\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, vertex.x, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, vertex.y, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, vertex.z, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// UV information\n\t\t\t\t\tif ( includeUVs === true ) {\n\n\t\t\t\t\t\tif ( uvs != null ) {\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, uvs.getX( i ), options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, uvs.getY( i ), options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t\toutput.setFloat32( vOffset, 0, options.littleEndian );\n\t\t\t\t\t\t\tvOffset += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Color information\n\t\t\t\t\tif ( includeColors === true ) {\n\n\t\t\t\t\t\tif ( colors != null ) {\n\n\t\t\t\t\t\t\ttempColor\n\t\t\t\t\t\t\t\t.fromBufferAttribute( colors, i )\n\t\t\t\t\t\t\t\t.convertLinearToSRGB();\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, Math.floor( tempColor.r * 255 ) );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, Math.floor( tempColor.g * 255 ) );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, Math.floor( tempColor.b * 255 ) );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, 255 );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, 255 );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint8( vOffset, 255 );\n\t\t\t\t\t\t\tvOffset += 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( includeIndices === true ) {\n\n\t\t\t\t\t// Create the face list\n\n\t\t\t\t\tif ( indices !== null ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = indices.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\toutput.setUint8( fOffset, 3 );\n\t\t\t\t\t\t\tfOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, indices.getX( i + 0 ) + writtenVertices, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, indices.getX( i + 1 ) + writtenVertices, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, indices.getX( i + 2 ) + writtenVertices, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\toutput.setUint8( fOffset, 3 );\n\t\t\t\t\t\t\tfOffset += 1;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, writtenVertices + i, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, writtenVertices + i + 1, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t\toutput.setUint32( fOffset, writtenVertices + i + 2, options.littleEndian );\n\t\t\t\t\t\t\tfOffset += indexByteCount;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\t// Save the amount of verts we've already written so we can offset\n\t\t\t\t// the face index on the next mesh\n\t\t\t\twrittenVertices += vertices.count;\n\n\t\t\t} );\n\n\t\t\tresult = output.buffer;\n\n\t\t} else {\n\n\t\t\t// Ascii File Generation\n\t\t\t// count the number of vertices\n\t\t\tlet writtenVertices = 0;\n\t\t\tlet vertexList = '';\n\t\t\tlet faceList = '';\n\n\t\t\ttraverseMeshes( function ( mesh, geometry ) {\n\n\t\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\t\t\t\tconst colors = geometry.getAttribute( 'color' );\n\t\t\t\tconst indices = geometry.getIndex();\n\n\t\t\t\tnormalMatrixWorld.getNormalMatrix( mesh.matrixWorld );\n\n\t\t\t\t// form each line\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\tvertex.applyMatrix4( mesh.matrixWorld );\n\n\n\t\t\t\t\t// Position information\n\t\t\t\t\tlet line =\n\t\t\t\t\t\tvertex.x + ' ' +\n\t\t\t\t\t\tvertex.y + ' ' +\n\t\t\t\t\t\tvertex.z;\n\n\t\t\t\t\t// Normal information\n\t\t\t\t\tif ( includeNormals === true ) {\n\n\t\t\t\t\t\tif ( normals != null ) {\n\n\t\t\t\t\t\t\tvertex.fromBufferAttribute( normals, i );\n\n\t\t\t\t\t\t\tvertex.applyMatrix3( normalMatrixWorld ).normalize();\n\n\t\t\t\t\t\t\tline += ' ' +\n\t\t\t\t\t\t\t\tvertex.x + ' ' +\n\t\t\t\t\t\t\t\tvertex.y + ' ' +\n\t\t\t\t\t\t\t\tvertex.z;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tline += ' 0 0 0';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// UV information\n\t\t\t\t\tif ( includeUVs === true ) {\n\n\t\t\t\t\t\tif ( uvs != null ) {\n\n\t\t\t\t\t\t\tline += ' ' +\n\t\t\t\t\t\t\t\tuvs.getX( i ) + ' ' +\n\t\t\t\t\t\t\t\tuvs.getY( i );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tline += ' 0 0';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Color information\n\t\t\t\t\tif ( includeColors === true ) {\n\n\t\t\t\t\t\tif ( colors != null ) {\n\n\t\t\t\t\t\t\ttempColor\n\t\t\t\t\t\t\t\t.fromBufferAttribute( colors, i )\n\t\t\t\t\t\t\t\t.convertLinearToSRGB();\n\n\t\t\t\t\t\t\tline += ' ' +\n\t\t\t\t\t\t\t\tMath.floor( tempColor.r * 255 ) + ' ' +\n\t\t\t\t\t\t\t\tMath.floor( tempColor.g * 255 ) + ' ' +\n\t\t\t\t\t\t\t\tMath.floor( tempColor.b * 255 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tline += ' 255 255 255';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvertexList += line + '\\n';\n\n\t\t\t\t}\n\n\t\t\t\t// Create the face list\n\t\t\t\tif ( includeIndices === true ) {\n\n\t\t\t\t\tif ( indices !== null ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = indices.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\tfaceList += `3 ${ indices.getX( i + 0 ) + writtenVertices }`;\n\t\t\t\t\t\t\tfaceList += ` ${ indices.getX( i + 1 ) + writtenVertices }`;\n\t\t\t\t\t\t\tfaceList += ` ${ indices.getX( i + 2 ) + writtenVertices }\\n`;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\tfaceList += `3 ${ writtenVertices + i } ${ writtenVertices + i + 1 } ${ writtenVertices + i + 2 }\\n`;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCount += indices ? indices.count / 3 : vertices.count / 3;\n\n\t\t\t\t}\n\n\t\t\t\twrittenVertices += vertices.count;\n\n\t\t\t} );\n\n\t\t\tresult = `${ header }${vertexList}${ includeIndices ? `${faceList}\\n` : '\\n' }`;\n\n\t\t}\n\n\t\tif ( typeof onDone === 'function' ) requestAnimationFrame( () => onDone( result ) );\n\n\t\treturn result;\n\n\t}\n\n}\n\nexport { PLYExporter };\n", "import { Vector3 } from 'three';\n\n/**\n * Usage:\n * const exporter = new STLExporter();\n *\n * // second argument is a list of options\n * const data = exporter.parse( mesh, { binary: true } );\n *\n */\n\nclass STLExporter {\n\n\tparse( scene, options = {} ) {\n\n\t\toptions = Object.assign( {\n\t\t\tbinary: false\n\t\t}, options );\n\n\t\tconst binary = options.binary;\n\n\t\t//\n\n\t\tconst objects = [];\n\t\tlet triangles = 0;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tconst geometry = object.geometry;\n\n\t\t\t\tconst index = geometry.index;\n\t\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t\ttriangles += ( index !== null ) ? ( index.count / 3 ) : ( positionAttribute.count / 3 );\n\n\t\t\t\tobjects.push( {\n\t\t\t\t\tobject3d: object,\n\t\t\t\t\tgeometry: geometry\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tlet output;\n\t\tlet offset = 80; // skip header\n\n\t\tif ( binary === true ) {\n\n\t\t\tconst bufferLength = triangles * 2 + triangles * 3 * 4 * 4 + 80 + 4;\n\t\t\tconst arrayBuffer = new ArrayBuffer( bufferLength );\n\t\t\toutput = new DataView( arrayBuffer );\n\t\t\toutput.setUint32( offset, triangles, true ); offset += 4;\n\n\t\t} else {\n\n\t\t\toutput = '';\n\t\t\toutput += 'solid exported\\n';\n\n\t\t}\n\n\t\tconst vA = new Vector3();\n\t\tconst vB = new Vector3();\n\t\tconst vC = new Vector3();\n\t\tconst cb = new Vector3();\n\t\tconst ab = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\tconst object = objects[ i ].object3d;\n\t\t\tconst geometry = objects[ i ].geometry;\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed geometry\n\n\t\t\t\tfor ( let j = 0; j < index.count; j += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( j + 0 );\n\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\twriteFace( a, b, c, positionAttribute, object );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed geometry\n\n\t\t\t\tfor ( let j = 0; j < positionAttribute.count; j += 3 ) {\n\n\t\t\t\t\tconst a = j + 0;\n\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\twriteFace( a, b, c, positionAttribute, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( binary === false ) {\n\n\t\t\toutput += 'endsolid exported\\n';\n\n\t\t}\n\n\t\treturn output;\n\n\t\tfunction writeFace( a, b, c, positionAttribute, object ) {\n\n\t\t\tvA.fromBufferAttribute( positionAttribute, a );\n\t\t\tvB.fromBufferAttribute( positionAttribute, b );\n\t\t\tvC.fromBufferAttribute( positionAttribute, c );\n\n\t\t\tif ( object.isSkinnedMesh === true ) {\n\n\t\t\t\tobject.applyBoneTransform( a, vA );\n\t\t\t\tobject.applyBoneTransform( b, vB );\n\t\t\t\tobject.applyBoneTransform( c, vC );\n\n\t\t\t}\n\n\t\t\tvA.applyMatrix4( object.matrixWorld );\n\t\t\tvB.applyMatrix4( object.matrixWorld );\n\t\t\tvC.applyMatrix4( object.matrixWorld );\n\n\t\t\twriteNormal( vA, vB, vC );\n\n\t\t\twriteVertex( vA );\n\t\t\twriteVertex( vB );\n\t\t\twriteVertex( vC );\n\n\t\t\tif ( binary === true ) {\n\n\t\t\t\toutput.setUint16( offset, 0, true ); offset += 2;\n\n\t\t\t} else {\n\n\t\t\t\toutput += '\\t\\tendloop\\n';\n\t\t\t\toutput += '\\tendfacet\\n';\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction writeNormal( vA, vB, vC ) {\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab ).normalize();\n\n\t\t\tnormal.copy( cb ).normalize();\n\n\t\t\tif ( binary === true ) {\n\n\t\t\t\toutput.setFloat32( offset, normal.x, true ); offset += 4;\n\t\t\t\toutput.setFloat32( offset, normal.y, true ); offset += 4;\n\t\t\t\toutput.setFloat32( offset, normal.z, true ); offset += 4;\n\n\t\t\t} else {\n\n\t\t\t\toutput += '\\tfacet normal ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\\n';\n\t\t\t\toutput += '\\t\\touter loop\\n';\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction writeVertex( vertex ) {\n\n\t\t\tif ( binary === true ) {\n\n\t\t\t\toutput.setFloat32( offset, vertex.x, true ); offset += 4;\n\t\t\t\toutput.setFloat32( offset, vertex.y, true ); offset += 4;\n\t\t\t\toutput.setFloat32( offset, vertex.z, true ); offset += 4;\n\n\t\t\t} else {\n\n\t\t\t\toutput += '\\t\\t\\tvertex ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\\n';\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { STLExporter };\n", "import {\n\tNoColorSpace,\n\tDoubleSide,\n} from 'three';\n\nimport {\n\tstrToU8,\n\tzipSync,\n} from '../libs/fflate.module.js';\n\nimport { decompress } from './../utils/TextureUtils.js';\n\nclass USDZExporter {\n\n\tparse( scene, onDone, onError, options ) {\n\n\t\tthis.parseAsync( scene, options ).then( onDone ).catch( onError );\n\n\t}\n\n\tasync parseAsync( scene, options = {} ) {\n\n\t\toptions = Object.assign( {\n\t\t\tar: {\n\t\t\t\tanchoring: { type: 'plane' },\n\t\t\t\tplaneAnchoring: { alignment: 'horizontal' }\n\t\t\t},\n\t\t\tincludeAnchoringProperties: true,\n\t\t\tquickLookCompatible: false,\n\t\t\tmaxTextureSize: 1024,\n\t\t}, options );\n\n\t\tconst files = {};\n\t\tconst modelFileName = 'model.usda';\n\n\t\t// model file should be first in USDZ archive so we init it here\n\t\tfiles[ modelFileName ] = null;\n\n\t\tlet output = buildHeader();\n\n\t\toutput += buildSceneStart( options );\n\n\t\tconst materials = {};\n\t\tconst textures = {};\n\n\t\tscene.traverseVisible( ( object ) => {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\t\t\tconst geometryFileName = 'geometries/Geometry_' + geometry.id + '.usda';\n\n\t\t\t\t\tif ( ! ( geometryFileName in files ) ) {\n\n\t\t\t\t\t\tconst meshObject = buildMeshObject( geometry );\n\t\t\t\t\t\tfiles[ geometryFileName ] = buildUSDFileAsString( meshObject );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! ( material.uuid in materials ) ) {\n\n\t\t\t\t\t\tmaterials[ material.uuid ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutput += buildXform( object, geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)', object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isCamera ) {\n\n\t\t\t\toutput += buildCamera( object );\n\n\t\t\t}\n\n\t\t} );\n\n\n\t\toutput += buildSceneEnd();\n\n\t\toutput += buildMaterials( materials, textures, options.quickLookCompatible );\n\n\t\tfiles[ modelFileName ] = strToU8( output );\n\t\toutput = null;\n\n\t\tfor ( const id in textures ) {\n\n\t\t\tlet texture = textures[ id ];\n\n\t\t\tif ( texture.isCompressedTexture === true ) {\n\n\t\t\t\ttexture = decompress( texture );\n\n\t\t\t}\n\n\t\t\tconst canvas = imageToCanvas( texture.image, texture.flipY, options.maxTextureSize );\n\t\t\tconst blob = await new Promise( resolve => canvas.toBlob( resolve, 'image/png', 1 ) );\n\n\t\t\tfiles[ `textures/Texture_${ id }.png` ] = new Uint8Array( await blob.arrayBuffer() );\n\n\t\t}\n\n\t\t// 64 byte alignment\n\t\t// https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109\n\n\t\tlet offset = 0;\n\n\t\tfor ( const filename in files ) {\n\n\t\t\tconst file = files[ filename ];\n\t\t\tconst headerSize = 34 + filename.length;\n\n\t\t\toffset += headerSize;\n\n\t\t\tconst offsetMod64 = offset & 63;\n\n\t\t\tif ( offsetMod64 !== 4 ) {\n\n\t\t\t\tconst padLength = 64 - offsetMod64;\n\t\t\t\tconst padding = new Uint8Array( padLength );\n\n\t\t\t\tfiles[ filename ] = [ file, { extra: { 12345: padding } } ];\n\n\t\t\t}\n\n\t\t\toffset = file.length;\n\n\t\t}\n\n\t\treturn zipSync( files, { level: 0 } );\n\n\t}\n\n}\n\nfunction imageToCanvas( image, flipY, maxTextureSize ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\tconst scale = maxTextureSize / Math.max( image.width, image.height );\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = image.width * Math.min( 1, scale );\n\t\tcanvas.height = image.height * Math.min( 1, scale );\n\n\t\tconst context = canvas.getContext( '2d' );\n\n\t\t// TODO: We should be able to do this in the UsdTransform2d?\n\n\t\tif ( flipY === true ) {\n\n\t\t\tcontext.translate( 0, canvas.height );\n\t\t\tcontext.scale( 1, - 1 );\n\n\t\t}\n\n\t\tcontext.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\treturn canvas;\n\n\t} else {\n\n\t\tthrow new Error( 'THREE.USDZExporter: No valid image data found. Unable to process texture.' );\n\n\t}\n\n}\n\n//\n\nconst PRECISION = 7;\n\nfunction buildHeader() {\n\n\treturn `#usda 1.0\n(\n\tcustomLayerData = {\n\t\tstring creator = \"Three.js USDZExporter\"\n\t}\n\tdefaultPrim = \"Root\"\n\tmetersPerUnit = 1\n\tupAxis = \"Y\"\n)\n\n`;\n\n}\n\nfunction buildSceneStart( options ) {\n\n\tconst alignment = options.includeAnchoringProperties === true ? `\n\t\ttoken preliminary:anchoring:type = \"${options.ar.anchoring.type}\"\n\t\ttoken preliminary:planeAnchoring:alignment = \"${options.ar.planeAnchoring.alignment}\"\n\t` : '';\n\treturn `def Xform \"Root\"\n{\n\tdef Scope \"Scenes\" (\n\t\tkind = \"sceneLibrary\"\n\t)\n\t{\n\t\tdef Xform \"Scene\" (\n\t\t\tcustomData = {\n\t\t\t\tbool preliminary_collidesWithEnvironment = 0\n\t\t\t\tstring sceneName = \"Scene\"\n\t\t\t}\n\t\t\tsceneName = \"Scene\"\n\t\t)\n\t\t{${alignment}\n`;\n\n}\n\nfunction buildSceneEnd() {\n\n\treturn `\n\t\t}\n\t}\n}\n\n`;\n\n}\n\nfunction buildUSDFileAsString( dataToInsert ) {\n\n\tlet output = buildHeader();\n\toutput += dataToInsert;\n\treturn strToU8( output );\n\n}\n\n// Xform\n\nfunction buildXform( object, geometry, material ) {\n\n\tconst name = 'Object_' + object.id;\n\tconst transform = buildMatrix( object.matrixWorld );\n\n\tif ( object.matrixWorld.determinant() < 0 ) {\n\n\t\tconsole.warn( 'THREE.USDZExporter: USDZ does not support negative scales', object );\n\n\t}\n\n\treturn `def Xform \"${ name }\" (\n\tprepend references = @./geometries/Geometry_${ geometry.id }.usda@\n\tprepend apiSchemas = [\"MaterialBindingAPI\"]\n)\n{\n\tmatrix4d xformOp:transform = ${ transform }\n\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\n\n\trel material:binding = \n}\n\n`;\n\n}\n\nfunction buildMatrix( matrix ) {\n\n\tconst array = matrix.elements;\n\n\treturn `( ${ buildMatrixRow( array, 0 ) }, ${ buildMatrixRow( array, 4 ) }, ${ buildMatrixRow( array, 8 ) }, ${ buildMatrixRow( array, 12 ) } )`;\n\n}\n\nfunction buildMatrixRow( array, offset ) {\n\n\treturn `(${ array[ offset + 0 ] }, ${ array[ offset + 1 ] }, ${ array[ offset + 2 ] }, ${ array[ offset + 3 ] })`;\n\n}\n\n// Mesh\n\nfunction buildMeshObject( geometry ) {\n\n\tconst mesh = buildMesh( geometry );\n\treturn `\ndef \"Geometry\"\n{\n${mesh}\n}\n`;\n\n}\n\nfunction buildMesh( geometry ) {\n\n\tconst name = 'Geometry';\n\tconst attributes = geometry.attributes;\n\tconst count = attributes.position.count;\n\n\treturn `\n\tdef Mesh \"${ name }\"\n\t{\n\t\tint[] faceVertexCounts = [${ buildMeshVertexCount( geometry ) }]\n\t\tint[] faceVertexIndices = [${ buildMeshVertexIndices( geometry ) }]\n\t\tnormal3f[] normals = [${ buildVector3Array( attributes.normal, count )}] (\n\t\t\tinterpolation = \"vertex\"\n\t\t)\n\t\tpoint3f[] points = [${ buildVector3Array( attributes.position, count )}]\n${ buildPrimvars( attributes ) }\n\t\tuniform token subdivisionScheme = \"none\"\n\t}\n`;\n\n}\n\nfunction buildMeshVertexCount( geometry ) {\n\n\tconst count = geometry.index !== null ? geometry.index.count : geometry.attributes.position.count;\n\n\treturn Array( count / 3 ).fill( 3 ).join( ', ' );\n\n}\n\nfunction buildMeshVertexIndices( geometry ) {\n\n\tconst index = geometry.index;\n\tconst array = [];\n\n\tif ( index !== null ) {\n\n\t\tfor ( let i = 0; i < index.count; i ++ ) {\n\n\t\t\tarray.push( index.getX( i ) );\n\n\t\t}\n\n\t} else {\n\n\t\tconst length = geometry.attributes.position.count;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tarray.push( i );\n\n\t\t}\n\n\t}\n\n\treturn array.join( ', ' );\n\n}\n\nfunction buildVector3Array( attribute, count ) {\n\n\tif ( attribute === undefined ) {\n\n\t\tconsole.warn( 'USDZExporter: Normals missing.' );\n\t\treturn Array( count ).fill( '(0, 0, 0)' ).join( ', ' );\n\n\t}\n\n\tconst array = [];\n\n\tfor ( let i = 0; i < attribute.count; i ++ ) {\n\n\t\tconst x = attribute.getX( i );\n\t\tconst y = attribute.getY( i );\n\t\tconst z = attribute.getZ( i );\n\n\t\tarray.push( `(${ x.toPrecision( PRECISION ) }, ${ y.toPrecision( PRECISION ) }, ${ z.toPrecision( PRECISION ) })` );\n\n\t}\n\n\treturn array.join( ', ' );\n\n}\n\nfunction buildVector2Array( attribute ) {\n\n\tconst array = [];\n\n\tfor ( let i = 0; i < attribute.count; i ++ ) {\n\n\t\tconst x = attribute.getX( i );\n\t\tconst y = attribute.getY( i );\n\n\t\tarray.push( `(${ x.toPrecision( PRECISION ) }, ${ 1 - y.toPrecision( PRECISION ) })` );\n\n\t}\n\n\treturn array.join( ', ' );\n\n}\n\nfunction buildPrimvars( attributes ) {\n\n\tlet string = '';\n\n\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\tconst id = ( i > 0 ? i : '' );\n\t\tconst attribute = attributes[ 'uv' + id ];\n\n\t\tif ( attribute !== undefined ) {\n\n\t\t\tstring += `\n\t\ttexCoord2f[] primvars:st${ id } = [${ buildVector2Array( attribute )}] (\n\t\t\tinterpolation = \"vertex\"\n\t\t)`;\n\n\t\t}\n\n\t}\n\n\t// vertex colors\n\n\tconst colorAttribute = attributes.color;\n\n\tif ( colorAttribute !== undefined ) {\n\n\t\tconst count = colorAttribute.count;\n\n\t\tstring += `\n\tcolor3f[] primvars:displayColor = [${buildVector3Array( colorAttribute, count )}] (\n\t\tinterpolation = \"vertex\"\n\t\t)`;\n\n\t}\n\n\treturn string;\n\n}\n\n// Materials\n\nfunction buildMaterials( materials, textures, quickLookCompatible = false ) {\n\n\tconst array = [];\n\n\tfor ( const uuid in materials ) {\n\n\t\tconst material = materials[ uuid ];\n\n\t\tarray.push( buildMaterial( material, textures, quickLookCompatible ) );\n\n\t}\n\n\treturn `def \"Materials\"\n{\n${ array.join( '' ) }\n}\n\n`;\n\n}\n\nfunction buildMaterial( material, textures, quickLookCompatible = false ) {\n\n\t// https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html\n\n\tconst pad = '\t\t\t';\n\tconst inputs = [];\n\tconst samplers = [];\n\n\tfunction buildTexture( texture, mapType, color ) {\n\n\t\tconst id = texture.source.id + '_' + texture.flipY;\n\n\t\ttextures[ id ] = texture;\n\n\t\tconst uv = texture.channel > 0 ? 'st' + texture.channel : 'st';\n\n\t\tconst WRAPPINGS = {\n\t\t\t1000: 'repeat', // RepeatWrapping\n\t\t\t1001: 'clamp', // ClampToEdgeWrapping\n\t\t\t1002: 'mirror' // MirroredRepeatWrapping\n\t\t};\n\n\t\tconst repeat = texture.repeat.clone();\n\t\tconst offset = texture.offset.clone();\n\t\tconst rotation = texture.rotation;\n\n\t\t// rotation is around the wrong point. after rotation we need to shift offset again so that we're rotating around the right spot\n\t\tconst xRotationOffset = Math.sin( rotation );\n\t\tconst yRotationOffset = Math.cos( rotation );\n\n\t\t// texture coordinates start in the opposite corner, need to correct\n\t\toffset.y = 1 - offset.y - repeat.y;\n\n\t\t// turns out QuickLook is buggy and interprets texture repeat inverted/applies operations in a different order.\n\t\t// Apple Feedback: \tFB10036297 and FB11442287\n\t\tif ( quickLookCompatible ) {\n\n\t\t\t// This is NOT correct yet in QuickLook, but comes close for a range of models.\n\t\t\t// It becomes more incorrect the bigger the offset is\n\n\t\t\toffset.x = offset.x / repeat.x;\n\t\t\toffset.y = offset.y / repeat.y;\n\n\t\t\toffset.x += xRotationOffset / repeat.x;\n\t\t\toffset.y += yRotationOffset - 1;\n\n\t\t} else {\n\n\t\t\t// results match glTF results exactly. verified correct in usdview.\n\t\t\toffset.x += xRotationOffset * repeat.x;\n\t\t\toffset.y += ( 1 - yRotationOffset ) * repeat.y;\n\n\t\t}\n\n\t\treturn `\n\t\tdef Shader \"PrimvarReader_${ mapType }\"\n\t\t{\n\t\t\tuniform token info:id = \"UsdPrimvarReader_float2\"\n\t\t\tfloat2 inputs:fallback = (0.0, 0.0)\n\t\t\ttoken inputs:varname = \"${ uv }\"\n\t\t\tfloat2 outputs:result\n\t\t}\n\n\t\tdef Shader \"Transform2d_${ mapType }\"\n\t\t{\n\t\t\tuniform token info:id = \"UsdTransform2d\"\n\t\t\ttoken inputs:in.connect = \n\t\t\tfloat inputs:rotation = ${ ( rotation * ( 180 / Math.PI ) ).toFixed( PRECISION ) }\n\t\t\tfloat2 inputs:scale = ${ buildVector2( repeat ) }\n\t\t\tfloat2 inputs:translation = ${ buildVector2( offset ) }\n\t\t\tfloat2 outputs:result\n\t\t}\n\n\t\tdef Shader \"Texture_${ texture.id }_${ mapType }\"\n\t\t{\n\t\t\tuniform token info:id = \"UsdUVTexture\"\n\t\t\tasset inputs:file = @textures/Texture_${ id }.png@\n\t\t\tfloat2 inputs:st.connect = \n\t\t\t${ color !== undefined ? 'float4 inputs:scale = ' + buildColor4( color ) : '' }\n\t\t\ttoken inputs:sourceColorSpace = \"${ texture.colorSpace === NoColorSpace ? 'raw' : 'sRGB' }\"\n\t\t\ttoken inputs:wrapS = \"${ WRAPPINGS[ texture.wrapS ] }\"\n\t\t\ttoken inputs:wrapT = \"${ WRAPPINGS[ texture.wrapT ] }\"\n\t\t\tfloat outputs:r\n\t\t\tfloat outputs:g\n\t\t\tfloat outputs:b\n\t\t\tfloat3 outputs:rgb\n\t\t\t${ material.transparent || material.alphaTest > 0.0 ? 'float outputs:a' : '' }\n\t\t}`;\n\n\t}\n\n\n\tif ( material.side === DoubleSide ) {\n\n\t\tconsole.warn( 'THREE.USDZExporter: USDZ does not support double sided materials', material );\n\n\t}\n\n\tif ( material.map !== null ) {\n\n\t\tinputs.push( `${ pad }color3f inputs:diffuseColor.connect = ` );\n\n\t\tif ( material.transparent ) {\n\n\t\t\tinputs.push( `${ pad }float inputs:opacity.connect = ` );\n\n\t\t} else if ( material.alphaTest > 0.0 ) {\n\n\t\t\tinputs.push( `${ pad }float inputs:opacity.connect = ` );\n\t\t\tinputs.push( `${ pad }float inputs:opacityThreshold = ${material.alphaTest}` );\n\n\t\t}\n\n\t\tsamplers.push( buildTexture( material.map, 'diffuse', material.color ) );\n\n\t} else {\n\n\t\tinputs.push( `${ pad }color3f inputs:diffuseColor = ${ buildColor( material.color ) }` );\n\n\t}\n\n\tif ( material.emissiveMap !== null ) {\n\n\t\tinputs.push( `${ pad }color3f inputs:emissiveColor.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.emissiveMap, 'emissive' ) );\n\n\t} else if ( material.emissive.getHex() > 0 ) {\n\n\t\tinputs.push( `${ pad }color3f inputs:emissiveColor = ${ buildColor( material.emissive ) }` );\n\n\t}\n\n\tif ( material.normalMap !== null ) {\n\n\t\tinputs.push( `${ pad }normal3f inputs:normal.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.normalMap, 'normal' ) );\n\n\t}\n\n\tif ( material.aoMap !== null ) {\n\n\t\tinputs.push( `${ pad }float inputs:occlusion.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.aoMap, 'occlusion' ) );\n\n\t}\n\n\tif ( material.roughnessMap !== null && material.roughness === 1 ) {\n\n\t\tinputs.push( `${ pad }float inputs:roughness.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.roughnessMap, 'roughness' ) );\n\n\t} else {\n\n\t\tinputs.push( `${ pad }float inputs:roughness = ${ material.roughness }` );\n\n\t}\n\n\tif ( material.metalnessMap !== null && material.metalness === 1 ) {\n\n\t\tinputs.push( `${ pad }float inputs:metallic.connect = ` );\n\n\t\tsamplers.push( buildTexture( material.metalnessMap, 'metallic' ) );\n\n\t} else {\n\n\t\tinputs.push( `${ pad }float inputs:metallic = ${ material.metalness }` );\n\n\t}\n\n\tif ( material.alphaMap !== null ) {\n\n\t\tinputs.push( `${pad}float inputs:opacity.connect = ` );\n\t\tinputs.push( `${pad}float inputs:opacityThreshold = 0.0001` );\n\n\t\tsamplers.push( buildTexture( material.alphaMap, 'opacity' ) );\n\n\t} else {\n\n\t\tinputs.push( `${pad}float inputs:opacity = ${material.opacity}` );\n\n\t}\n\n\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\tinputs.push( `${ pad }float inputs:clearcoat = ${ material.clearcoat }` );\n\t\tinputs.push( `${ pad }float inputs:clearcoatRoughness = ${ material.clearcoatRoughness }` );\n\t\tinputs.push( `${ pad }float inputs:ior = ${ material.ior }` );\n\n\t}\n\n\treturn `\n\tdef Material \"Material_${ material.id }\"\n\t{\n\t\tdef Shader \"PreviewSurface\"\n\t\t{\n\t\t\tuniform token info:id = \"UsdPreviewSurface\"\n${ inputs.join( '\\n' ) }\n\t\t\tint inputs:useSpecularWorkflow = 0\n\t\t\ttoken outputs:surface\n\t\t}\n\n\t\ttoken outputs:surface.connect = \n\n${ samplers.join( '\\n' ) }\n\n\t}\n`;\n\n}\n\nfunction buildColor( color ) {\n\n\treturn `(${ color.r }, ${ color.g }, ${ color.b })`;\n\n}\n\nfunction buildColor4( color ) {\n\n\treturn `(${ color.r }, ${ color.g }, ${ color.b }, 1.0)`;\n\n}\n\nfunction buildVector2( vector ) {\n\n\treturn `(${ vector.x }, ${ vector.y })`;\n\n}\n\n\nfunction buildCamera( camera ) {\n\n\tconst name = camera.name ? camera.name : 'Camera_' + camera.id;\n\n\tconst transform = buildMatrix( camera.matrixWorld );\n\n\tif ( camera.matrixWorld.determinant() < 0 ) {\n\n\t\tconsole.warn( 'THREE.USDZExporter: USDZ does not support negative scales', camera );\n\n\t}\n\n\tif ( camera.isOrthographicCamera ) {\n\n\t\treturn `def Camera \"${name}\"\n\t\t{\n\t\t\tmatrix4d xformOp:transform = ${ transform }\n\t\t\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\n\n\t\t\tfloat2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })\n\t\t\tfloat horizontalAperture = ${ ( ( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10 ).toPrecision( PRECISION ) }\n\t\t\tfloat verticalAperture = ${ ( ( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10 ).toPrecision( PRECISION ) }\n\t\t\ttoken projection = \"orthographic\"\n\t\t}\n\t\n\t`;\n\n\t} else {\n\n\t\treturn `def Camera \"${name}\"\n\t\t{\n\t\t\tmatrix4d xformOp:transform = ${ transform }\n\t\t\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\n\n\t\t\tfloat2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })\n\t\t\tfloat focalLength = ${ camera.getFocalLength().toPrecision( PRECISION ) }\n\t\t\tfloat focusDistance = ${ camera.focus.toPrecision( PRECISION ) }\n\t\t\tfloat horizontalAperture = ${ camera.getFilmWidth().toPrecision( PRECISION ) }\n\t\t\ttoken projection = \"perspective\"\n\t\t\tfloat verticalAperture = ${ camera.getFilmHeight().toPrecision( PRECISION ) }\n\t\t}\n\t\n\t`;\n\n\t}\n\n}\n\nexport { USDZExporter };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute\n} from 'three';\n\nclass BoxLineGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\tconst widthHalf = width / 2;\n\t\tconst heightHalf = height / 2;\n\t\tconst depthHalf = depth / 2;\n\n\t\tconst segmentWidth = width / widthSegments;\n\t\tconst segmentHeight = height / heightSegments;\n\t\tconst segmentDepth = depth / depthSegments;\n\n\t\tconst vertices = [];\n\n\t\tlet x = - widthHalf;\n\t\tlet y = - heightHalf;\n\t\tlet z = - depthHalf;\n\n\t\tfor ( let i = 0; i <= widthSegments; i ++ ) {\n\n\t\t\tvertices.push( x, - heightHalf, - depthHalf, x, heightHalf, - depthHalf );\n\t\t\tvertices.push( x, heightHalf, - depthHalf, x, heightHalf, depthHalf );\n\t\t\tvertices.push( x, heightHalf, depthHalf, x, - heightHalf, depthHalf );\n\t\t\tvertices.push( x, - heightHalf, depthHalf, x, - heightHalf, - depthHalf );\n\n\t\t\tx += segmentWidth;\n\n\t\t}\n\n\t\tfor ( let i = 0; i <= heightSegments; i ++ ) {\n\n\t\t\tvertices.push( - widthHalf, y, - depthHalf, widthHalf, y, - depthHalf );\n\t\t\tvertices.push( widthHalf, y, - depthHalf, widthHalf, y, depthHalf );\n\t\t\tvertices.push( widthHalf, y, depthHalf, - widthHalf, y, depthHalf );\n\t\t\tvertices.push( - widthHalf, y, depthHalf, - widthHalf, y, - depthHalf );\n\n\t\t\ty += segmentHeight;\n\n\t\t}\n\n\t\tfor ( let i = 0; i <= depthSegments; i ++ ) {\n\n\t\t\tvertices.push( - widthHalf, - heightHalf, z, - widthHalf, heightHalf, z );\n\t\t\tvertices.push( - widthHalf, heightHalf, z, widthHalf, heightHalf, z );\n\t\t\tvertices.push( widthHalf, heightHalf, z, widthHalf, - heightHalf, z );\n\t\t\tvertices.push( widthHalf, - heightHalf, z, - widthHalf, - heightHalf, z );\n\n\t\t\tz += segmentDepth;\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\nexport { BoxLineGeometry };\n", "import {\n\tLine3,\n\tPlane,\n\tTriangle,\n\tVector3\n} from 'three';\n\n/**\n * Ported from: https://github.com/maurizzzio/quickhull3d/ by Mauricio Poppe (https://github.com/maurizzzio)\n */\n\nconst Visible = 0;\nconst Deleted = 1;\n\nconst _v1 = new Vector3();\nconst _line3 = new Line3();\nconst _plane = new Plane();\nconst _closestPoint = new Vector3();\nconst _triangle = new Triangle();\n\nclass ConvexHull {\n\n\tconstructor() {\n\n\t\tthis.tolerance = - 1;\n\n\t\tthis.faces = []; // the generated faces of the convex hull\n\t\tthis.newFaces = []; // this array holds the faces that are generated within a single iteration\n\n\t\t// the vertex lists work as follows:\n\t\t//\n\t\t// let 'a' and 'b' be 'Face' instances\n\t\t// let 'v' be points wrapped as instance of 'Vertex'\n\t\t//\n\t\t// [v, v, ..., v, v, v, ...]\n\t\t// ^ ^\n\t\t// | |\n\t\t// a.outside b.outside\n\t\t//\n\t\tthis.assigned = new VertexList();\n\t\tthis.unassigned = new VertexList();\n\n\t\tthis.vertices = []; \t// vertices of the hull (internal representation of given geometry data)\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\t// The algorithm needs at least four points.\n\n\t\tif ( points.length >= 4 ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tthis.vertices.push( new VertexNode( points[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.compute();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tconst points = [];\n\n\t\tobject.updateMatrixWorld( true );\n\n\t\tobject.traverse( function ( node ) {\n\n\t\t\tconst geometry = node.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tconst attribute = geometry.attributes.position;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst point = new Vector3();\n\n\t\t\t\t\t\tpoint.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\tpoints.push( point );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this.setFromPoints( points );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst faces = this.faces;\n\n\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// compute signed distance and check on what half space the point lies\n\n\t\t\tif ( face.distanceToPoint( point ) > this.tolerance ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectRay( ray, target ) {\n\n\t\t// based on \"Fast Ray-Convex Polyhedron Intersection\" by Eric Haines, GRAPHICS GEMS II\n\n\t\tconst faces = this.faces;\n\n\t\tlet tNear = - Infinity;\n\t\tlet tFar = Infinity;\n\n\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// interpret faces as planes for the further computation\n\n\t\t\tconst vN = face.distanceToPoint( ray.origin );\n\t\t\tconst vD = face.normal.dot( ray.direction );\n\n\t\t\t// if the origin is on the positive side of a plane (so the plane can \"see\" the origin) and\n\t\t\t// the ray is turned away or parallel to the plane, there is no intersection\n\n\t\t\tif ( vN > 0 && vD >= 0 ) return null;\n\n\t\t\t// compute the distance from the ray’s origin to the intersection with the plane\n\n\t\t\tconst t = ( vD !== 0 ) ? ( - vN / vD ) : 0;\n\n\t\t\t// only proceed if the distance is positive. a negative distance means the intersection point\n\t\t\t// lies \"behind\" the origin\n\n\t\t\tif ( t <= 0 ) continue;\n\n\t\t\t// now categorized plane as front-facing or back-facing\n\n\t\t\tif ( vD > 0 ) {\n\n\t\t\t\t// plane faces away from the ray, so this plane is a back-face\n\n\t\t\t\ttFar = Math.min( t, tFar );\n\n\t\t\t} else {\n\n\t\t\t\t// front-face\n\n\t\t\t\ttNear = Math.max( t, tNear );\n\n\t\t\t}\n\n\t\t\tif ( tNear > tFar ) {\n\n\t\t\t\t// if tNear ever is greater than tFar, the ray must miss the convex hull\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// evaluate intersection point\n\n\t\t// always try tNear first since its the closer intersection point\n\n\t\tif ( tNear !== - Infinity ) {\n\n\t\t\tray.at( tNear, target );\n\n\t\t} else {\n\n\t\t\tray.at( tFar, target );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tintersectsRay( ray ) {\n\n\t\treturn this.intersectRay( ray, _v1 ) !== null;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.faces = [];\n\t\tthis.vertices = [];\n\n\t\treturn this;\n\n\t}\n\n\t// Adds a vertex to the 'assigned' list of vertices and assigns it to the given face\n\n\taddVertexToFace( vertex, face ) {\n\n\t\tvertex.face = face;\n\n\t\tif ( face.outside === null ) {\n\n\t\t\tthis.assigned.append( vertex );\n\n\t\t} else {\n\n\t\t\tthis.assigned.insertBefore( face.outside, vertex );\n\n\t\t}\n\n\t\tface.outside = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Removes a vertex from the 'assigned' list of vertices and from the given face\n\n\tremoveVertexFromFace( vertex, face ) {\n\n\t\tif ( vertex === face.outside ) {\n\n\t\t\t// fix face.outside link\n\n\t\t\tif ( vertex.next !== null && vertex.next.face === face ) {\n\n\t\t\t\t// face has at least 2 outside vertices, move the 'outside' reference\n\n\t\t\t\tface.outside = vertex.next;\n\n\t\t\t} else {\n\n\t\t\t\t// vertex was the only outside vertex that face had\n\n\t\t\t\tface.outside = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.assigned.remove( vertex );\n\n\t\treturn this;\n\n\t}\n\n\t// Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertex list\n\n\tremoveAllVerticesFromFace( face ) {\n\n\t\tif ( face.outside !== null ) {\n\n\t\t\t// reference to the first and last vertex of this face\n\n\t\t\tconst start = face.outside;\n\t\t\tlet end = face.outside;\n\n\t\t\twhile ( end.next !== null && end.next.face === face ) {\n\n\t\t\t\tend = end.next;\n\n\t\t\t}\n\n\t\t\tthis.assigned.removeSubList( start, end );\n\n\t\t\t// fix references\n\n\t\t\tstart.prev = end.next = null;\n\t\t\tface.outside = null;\n\n\t\t\treturn start;\n\n\t\t}\n\n\t}\n\n\t// Removes all the visible vertices that 'face' is able to see\n\n\tdeleteFaceVertices( face, absorbingFace ) {\n\n\t\tconst faceVertices = this.removeAllVerticesFromFace( face );\n\n\t\tif ( faceVertices !== undefined ) {\n\n\t\t\tif ( absorbingFace === undefined ) {\n\n\t\t\t\t// mark the vertices to be reassigned to some other face\n\n\t\t\t\tthis.unassigned.appendChain( faceVertices );\n\n\n\t\t\t} else {\n\n\t\t\t\t// if there's an absorbing face try to assign as many vertices as possible to it\n\n\t\t\t\tlet vertex = faceVertices;\n\n\t\t\t\tdo {\n\n\t\t\t\t\t// we need to buffer the subsequent vertex at this point because the 'vertex.next' reference\n\t\t\t\t\t// will be changed by upcoming method calls\n\n\t\t\t\t\tconst nextVertex = vertex.next;\n\n\t\t\t\t\tconst distance = absorbingFace.distanceToPoint( vertex.point );\n\n\t\t\t\t\t// check if 'vertex' is able to see 'absorbingFace'\n\n\t\t\t\t\tif ( distance > this.tolerance ) {\n\n\t\t\t\t\t\tthis.addVertexToFace( vertex, absorbingFace );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.unassigned.append( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// now assign next vertex\n\n\t\t\t\t\tvertex = nextVertex;\n\n\t\t\t\t} while ( vertex !== null );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Reassigns as many vertices as possible from the unassigned list to the new faces\n\n\tresolveUnassignedPoints( newFaces ) {\n\n\t\tif ( this.unassigned.isEmpty() === false ) {\n\n\t\t\tlet vertex = this.unassigned.first();\n\n\t\t\tdo {\n\n\t\t\t\t// buffer 'next' reference, see .deleteFaceVertices()\n\n\t\t\t\tconst nextVertex = vertex.next;\n\n\t\t\t\tlet maxDistance = this.tolerance;\n\n\t\t\t\tlet maxFace = null;\n\n\t\t\t\tfor ( let i = 0; i < newFaces.length; i ++ ) {\n\n\t\t\t\t\tconst face = newFaces[ i ];\n\n\t\t\t\t\tif ( face.mark === Visible ) {\n\n\t\t\t\t\t\tconst distance = face.distanceToPoint( vertex.point );\n\n\t\t\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\t\t\tmaxFace = face;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( maxDistance > 1000 * this.tolerance ) break;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// 'maxFace' can be null e.g. if there are identical vertices\n\n\t\t\t\tif ( maxFace !== null ) {\n\n\t\t\t\t\tthis.addVertexToFace( vertex, maxFace );\n\n\t\t\t\t}\n\n\t\t\t\tvertex = nextVertex;\n\n\t\t\t} while ( vertex !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Computes the extremes of a simplex which will be the initial hull\n\n\tcomputeExtremes() {\n\n\t\tconst min = new Vector3();\n\t\tconst max = new Vector3();\n\n\t\tconst minVertices = [];\n\t\tconst maxVertices = [];\n\n\t\t// initially assume that the first vertex is the min/max\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tminVertices[ i ] = maxVertices[ i ] = this.vertices[ 0 ];\n\n\t\t}\n\n\t\tmin.copy( this.vertices[ 0 ].point );\n\t\tmax.copy( this.vertices[ 0 ].point );\n\n\t\t// compute the min/max vertex on all six directions\n\n\t\tfor ( let i = 0, l = this.vertices.length; i < l; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tconst point = vertex.point;\n\n\t\t\t// update the min coordinates\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tif ( point.getComponent( j ) < min.getComponent( j ) ) {\n\n\t\t\t\t\tmin.setComponent( j, point.getComponent( j ) );\n\t\t\t\t\tminVertices[ j ] = vertex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// update the max coordinates\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tif ( point.getComponent( j ) > max.getComponent( j ) ) {\n\n\t\t\t\t\tmax.setComponent( j, point.getComponent( j ) );\n\t\t\t\t\tmaxVertices[ j ] = vertex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use min/max vectors to compute an optimal epsilon\n\n\t\tthis.tolerance = 3 * Number.EPSILON * (\n\t\t\tMath.max( Math.abs( min.x ), Math.abs( max.x ) ) +\n\t\t\tMath.max( Math.abs( min.y ), Math.abs( max.y ) ) +\n\t\t\tMath.max( Math.abs( min.z ), Math.abs( max.z ) )\n\t\t);\n\n\t\treturn { min: minVertices, max: maxVertices };\n\n\t}\n\n\t// Computes the initial simplex assigning to its faces all the points\n\t// that are candidates to form part of the hull\n\n\tcomputeInitialHull() {\n\n\t\tconst vertices = this.vertices;\n\t\tconst extremes = this.computeExtremes();\n\t\tconst min = extremes.min;\n\t\tconst max = extremes.max;\n\n\t\t// 1. Find the two vertices 'v0' and 'v1' with the greatest 1d separation\n\t\t// (max.x - min.x)\n\t\t// (max.y - min.y)\n\t\t// (max.z - min.z)\n\n\t\tlet maxDistance = 0;\n\t\tlet index = 0;\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst distance = max[ i ].point.getComponent( i ) - min[ i ].point.getComponent( i );\n\n\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\tmaxDistance = distance;\n\t\t\t\tindex = i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst v0 = min[ index ];\n\t\tconst v1 = max[ index ];\n\t\tlet v2;\n\t\tlet v3;\n\n\t\t// 2. The next vertex 'v2' is the one farthest to the line formed by 'v0' and 'v1'\n\n\t\tmaxDistance = 0;\n\t\t_line3.set( v0.point, v1.point );\n\n\t\tfor ( let i = 0, l = this.vertices.length; i < l; i ++ ) {\n\n\t\t\tconst vertex = vertices[ i ];\n\n\t\t\tif ( vertex !== v0 && vertex !== v1 ) {\n\n\t\t\t\t_line3.closestPointToPoint( vertex.point, true, _closestPoint );\n\n\t\t\t\tconst distance = _closestPoint.distanceToSquared( vertex.point );\n\n\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\tv2 = vertex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// 3. The next vertex 'v3' is the one farthest to the plane 'v0', 'v1', 'v2'\n\n\t\tmaxDistance = - 1;\n\t\t_plane.setFromCoplanarPoints( v0.point, v1.point, v2.point );\n\n\t\tfor ( let i = 0, l = this.vertices.length; i < l; i ++ ) {\n\n\t\t\tconst vertex = vertices[ i ];\n\n\t\t\tif ( vertex !== v0 && vertex !== v1 && vertex !== v2 ) {\n\n\t\t\t\tconst distance = Math.abs( _plane.distanceToPoint( vertex.point ) );\n\n\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\tv3 = vertex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst faces = [];\n\n\t\tif ( _plane.distanceToPoint( v3.point ) < 0 ) {\n\n\t\t\t// the face is not able to see the point so 'plane.normal' is pointing outside the tetrahedron\n\n\t\t\tfaces.push(\n\t\t\t\tFace.create( v0, v1, v2 ),\n\t\t\t\tFace.create( v3, v1, v0 ),\n\t\t\t\tFace.create( v3, v2, v1 ),\n\t\t\t\tFace.create( v3, v0, v2 )\n\t\t\t);\n\n\t\t\t// set the twin edge\n\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst j = ( i + 1 ) % 3;\n\n\t\t\t\t// join face[ i ] i > 0, with the first face\n\n\t\t\t\tfaces[ i + 1 ].getEdge( 2 ).setTwin( faces[ 0 ].getEdge( j ) );\n\n\t\t\t\t// join face[ i ] with face[ i + 1 ], 1 <= i <= 3\n\n\t\t\t\tfaces[ i + 1 ].getEdge( 1 ).setTwin( faces[ j + 1 ].getEdge( 0 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// the face is able to see the point so 'plane.normal' is pointing inside the tetrahedron\n\n\t\t\tfaces.push(\n\t\t\t\tFace.create( v0, v2, v1 ),\n\t\t\t\tFace.create( v3, v0, v1 ),\n\t\t\t\tFace.create( v3, v1, v2 ),\n\t\t\t\tFace.create( v3, v2, v0 )\n\t\t\t);\n\n\t\t\t// set the twin edge\n\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst j = ( i + 1 ) % 3;\n\n\t\t\t\t// join face[ i ] i > 0, with the first face\n\n\t\t\t\tfaces[ i + 1 ].getEdge( 2 ).setTwin( faces[ 0 ].getEdge( ( 3 - i ) % 3 ) );\n\n\t\t\t\t// join face[ i ] with face[ i + 1 ]\n\n\t\t\t\tfaces[ i + 1 ].getEdge( 0 ).setTwin( faces[ j + 1 ].getEdge( 1 ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// the initial hull is the tetrahedron\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ] );\n\n\t\t}\n\n\t\t// initial assignment of vertices to the faces of the tetrahedron\n\n\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\tconst vertex = vertices[ i ];\n\n\t\t\tif ( vertex !== v0 && vertex !== v1 && vertex !== v2 && vertex !== v3 ) {\n\n\t\t\t\tmaxDistance = this.tolerance;\n\t\t\t\tlet maxFace = null;\n\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tconst distance = this.faces[ j ].distanceToPoint( vertex.point );\n\n\t\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\t\tmaxFace = this.faces[ j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( maxFace !== null ) {\n\n\t\t\t\t\tthis.addVertexToFace( vertex, maxFace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Removes inactive faces\n\n\treindexFaces() {\n\n\t\tconst activeFaces = [];\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tif ( face.mark === Visible ) {\n\n\t\t\t\tactiveFaces.push( face );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.faces = activeFaces;\n\n\t\treturn this;\n\n\t}\n\n\t// Finds the next vertex to create faces with the current hull\n\n\tnextVertexToAdd() {\n\n\t\t// if the 'assigned' list of vertices is empty, no vertices are left. return with 'undefined'\n\n\t\tif ( this.assigned.isEmpty() === false ) {\n\n\t\t\tlet eyeVertex, maxDistance = 0;\n\n\t\t\t// grap the first available face and start with the first visible vertex of that face\n\n\t\t\tconst eyeFace = this.assigned.first().face;\n\t\t\tlet vertex = eyeFace.outside;\n\n\t\t\t// now calculate the farthest vertex that face can see\n\n\t\t\tdo {\n\n\t\t\t\tconst distance = eyeFace.distanceToPoint( vertex.point );\n\n\t\t\t\tif ( distance > maxDistance ) {\n\n\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\teyeVertex = vertex;\n\n\t\t\t\t}\n\n\t\t\t\tvertex = vertex.next;\n\n\t\t\t} while ( vertex !== null && vertex.face === eyeFace );\n\n\t\t\treturn eyeVertex;\n\n\t\t}\n\n\t}\n\n\t// Computes a chain of half edges in CCW order called the 'horizon'.\n\t// For an edge to be part of the horizon it must join a face that can see\n\t// 'eyePoint' and a face that cannot see 'eyePoint'.\n\n\tcomputeHorizon( eyePoint, crossEdge, face, horizon ) {\n\n\t\t// moves face's vertices to the 'unassigned' vertex list\n\n\t\tthis.deleteFaceVertices( face );\n\n\t\tface.mark = Deleted;\n\n\t\tlet edge;\n\n\t\tif ( crossEdge === null ) {\n\n\t\t\tedge = crossEdge = face.getEdge( 0 );\n\n\t\t} else {\n\n\t\t\t// start from the next edge since 'crossEdge' was already analyzed\n\t\t\t// (actually 'crossEdge.twin' was the edge who called this method recursively)\n\n\t\t\tedge = crossEdge.next;\n\n\t\t}\n\n\t\tdo {\n\n\t\t\tconst twinEdge = edge.twin;\n\t\t\tconst oppositeFace = twinEdge.face;\n\n\t\t\tif ( oppositeFace.mark === Visible ) {\n\n\t\t\t\tif ( oppositeFace.distanceToPoint( eyePoint ) > this.tolerance ) {\n\n\t\t\t\t\t// the opposite face can see the vertex, so proceed with next edge\n\n\t\t\t\t\tthis.computeHorizon( eyePoint, twinEdge, oppositeFace, horizon );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// the opposite face can't see the vertex, so this edge is part of the horizon\n\n\t\t\t\t\thorizon.push( edge );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tedge = edge.next;\n\n\t\t} while ( edge !== crossEdge );\n\n\t\treturn this;\n\n\t}\n\n\t// Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head' in CCW order\n\n\taddAdjoiningFace( eyeVertex, horizonEdge ) {\n\n\t\t// all the half edges are created in ccw order thus the face is always pointing outside the hull\n\n\t\tconst face = Face.create( eyeVertex, horizonEdge.tail(), horizonEdge.head() );\n\n\t\tthis.faces.push( face );\n\n\t\t// join face.getEdge( - 1 ) with the horizon's opposite edge face.getEdge( - 1 ) = face.getEdge( 2 )\n\n\t\tface.getEdge( - 1 ).setTwin( horizonEdge.twin );\n\n\t\treturn face.getEdge( 0 ); // the half edge whose vertex is the eyeVertex\n\n\n\t}\n\n\t// Adds 'horizon.length' faces to the hull, each face will be linked with the\n\t// horizon opposite face and the face on the left/right\n\n\taddNewFaces( eyeVertex, horizon ) {\n\n\t\tthis.newFaces = [];\n\n\t\tlet firstSideEdge = null;\n\t\tlet previousSideEdge = null;\n\n\t\tfor ( let i = 0; i < horizon.length; i ++ ) {\n\n\t\t\tconst horizonEdge = horizon[ i ];\n\n\t\t\t// returns the right side edge\n\n\t\t\tconst sideEdge = this.addAdjoiningFace( eyeVertex, horizonEdge );\n\n\t\t\tif ( firstSideEdge === null ) {\n\n\t\t\t\tfirstSideEdge = sideEdge;\n\n\t\t\t} else {\n\n\t\t\t\t// joins face.getEdge( 1 ) with previousFace.getEdge( 0 )\n\n\t\t\t\tsideEdge.next.setTwin( previousSideEdge );\n\n\t\t\t}\n\n\t\t\tthis.newFaces.push( sideEdge.face );\n\t\t\tpreviousSideEdge = sideEdge;\n\n\t\t}\n\n\t\t// perform final join of new faces\n\n\t\tfirstSideEdge.next.setTwin( previousSideEdge );\n\n\t\treturn this;\n\n\t}\n\n\t// Adds a vertex to the hull\n\n\taddVertexToHull( eyeVertex ) {\n\n\t\tconst horizon = [];\n\n\t\tthis.unassigned.clear();\n\n\t\t// remove 'eyeVertex' from 'eyeVertex.face' so that it can't be added to the 'unassigned' vertex list\n\n\t\tthis.removeVertexFromFace( eyeVertex, eyeVertex.face );\n\n\t\tthis.computeHorizon( eyeVertex.point, null, eyeVertex.face, horizon );\n\n\t\tthis.addNewFaces( eyeVertex, horizon );\n\n\t\t// reassign 'unassigned' vertices to the new faces\n\n\t\tthis.resolveUnassignedPoints( this.newFaces );\n\n\t\treturn\tthis;\n\n\t}\n\n\tcleanup() {\n\n\t\tthis.assigned.clear();\n\t\tthis.unassigned.clear();\n\t\tthis.newFaces = [];\n\n\t\treturn this;\n\n\t}\n\n\tcompute() {\n\n\t\tlet vertex;\n\n\t\tthis.computeInitialHull();\n\n\t\t// add all available vertices gradually to the hull\n\n\t\twhile ( ( vertex = this.nextVertexToAdd() ) !== undefined ) {\n\n\t\t\tthis.addVertexToHull( vertex );\n\n\t\t}\n\n\t\tthis.reindexFaces();\n\n\t\tthis.cleanup();\n\n\t\treturn this;\n\n\t}\n\n}\n\n//\n\nclass Face {\n\n\tconstructor() {\n\n\t\tthis.normal = new Vector3();\n\t\tthis.midpoint = new Vector3();\n\t\tthis.area = 0;\n\n\t\tthis.constant = 0; // signed distance from face to the origin\n\t\tthis.outside = null; // reference to a vertex in a vertex list this face can see\n\t\tthis.mark = Visible;\n\t\tthis.edge = null;\n\n\t}\n\n\tstatic create( a, b, c ) {\n\n\t\tconst face = new Face();\n\n\t\tconst e0 = new HalfEdge( a, face );\n\t\tconst e1 = new HalfEdge( b, face );\n\t\tconst e2 = new HalfEdge( c, face );\n\n\t\t// join edges\n\n\t\te0.next = e2.prev = e1;\n\t\te1.next = e0.prev = e2;\n\t\te2.next = e1.prev = e0;\n\n\t\t// main half edge reference\n\n\t\tface.edge = e0;\n\n\t\treturn face.compute();\n\n\t}\n\n\tgetEdge( i ) {\n\n\t\tlet edge = this.edge;\n\n\t\twhile ( i > 0 ) {\n\n\t\t\tedge = edge.next;\n\t\t\ti --;\n\n\t\t}\n\n\t\twhile ( i < 0 ) {\n\n\t\t\tedge = edge.prev;\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn edge;\n\n\t}\n\n\tcompute() {\n\n\t\tconst a = this.edge.tail();\n\t\tconst b = this.edge.head();\n\t\tconst c = this.edge.next.head();\n\n\t\t_triangle.set( a.point, b.point, c.point );\n\n\t\t_triangle.getNormal( this.normal );\n\t\t_triangle.getMidpoint( this.midpoint );\n\t\tthis.area = _triangle.getArea();\n\n\t\tthis.constant = this.normal.dot( this.midpoint );\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) - this.constant;\n\n\t}\n\n}\n\n// Entity for a Doubly-Connected Edge List (DCEL).\n\nclass HalfEdge {\n\n\n\tconstructor( vertex, face ) {\n\n\t\tthis.vertex = vertex;\n\t\tthis.prev = null;\n\t\tthis.next = null;\n\t\tthis.twin = null;\n\t\tthis.face = face;\n\n\t}\n\n\thead() {\n\n\t\treturn this.vertex;\n\n\t}\n\n\ttail() {\n\n\t\treturn this.prev ? this.prev.vertex : null;\n\n\t}\n\n\tlength() {\n\n\t\tconst head = this.head();\n\t\tconst tail = this.tail();\n\n\t\tif ( tail !== null ) {\n\n\t\t\treturn tail.point.distanceTo( head.point );\n\n\t\t}\n\n\t\treturn - 1;\n\n\t}\n\n\tlengthSquared() {\n\n\t\tconst head = this.head();\n\t\tconst tail = this.tail();\n\n\t\tif ( tail !== null ) {\n\n\t\t\treturn tail.point.distanceToSquared( head.point );\n\n\t\t}\n\n\t\treturn - 1;\n\n\t}\n\n\tsetTwin( edge ) {\n\n\t\tthis.twin = edge;\n\t\tedge.twin = this;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// A vertex as a double linked list node.\n\nclass VertexNode {\n\n\tconstructor( point ) {\n\n\t\tthis.point = point;\n\t\tthis.prev = null;\n\t\tthis.next = null;\n\t\tthis.face = null; // the face that is able to see this vertex\n\n\t}\n\n}\n\n// A double linked list that contains vertex nodes.\n\nclass VertexList {\n\n\tconstructor() {\n\n\t\tthis.head = null;\n\t\tthis.tail = null;\n\n\t}\n\n\tfirst() {\n\n\t\treturn this.head;\n\n\t}\n\n\tlast() {\n\n\t\treturn this.tail;\n\n\t}\n\n\tclear() {\n\n\t\tthis.head = this.tail = null;\n\n\t\treturn this;\n\n\t}\n\n\t// Inserts a vertex before the target vertex\n\n\tinsertBefore( target, vertex ) {\n\n\t\tvertex.prev = target.prev;\n\t\tvertex.next = target;\n\n\t\tif ( vertex.prev === null ) {\n\n\t\t\tthis.head = vertex;\n\n\t\t} else {\n\n\t\t\tvertex.prev.next = vertex;\n\n\t\t}\n\n\t\ttarget.prev = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Inserts a vertex after the target vertex\n\n\tinsertAfter( target, vertex ) {\n\n\t\tvertex.prev = target;\n\t\tvertex.next = target.next;\n\n\t\tif ( vertex.next === null ) {\n\n\t\t\tthis.tail = vertex;\n\n\t\t} else {\n\n\t\t\tvertex.next.prev = vertex;\n\n\t\t}\n\n\t\ttarget.next = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Appends a vertex to the end of the linked list\n\n\tappend( vertex ) {\n\n\t\tif ( this.head === null ) {\n\n\t\t\tthis.head = vertex;\n\n\t\t} else {\n\n\t\t\tthis.tail.next = vertex;\n\n\t\t}\n\n\t\tvertex.prev = this.tail;\n\t\tvertex.next = null; // the tail has no subsequent vertex\n\n\t\tthis.tail = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Appends a chain of vertices where 'vertex' is the head.\n\n\tappendChain( vertex ) {\n\n\t\tif ( this.head === null ) {\n\n\t\t\tthis.head = vertex;\n\n\t\t} else {\n\n\t\t\tthis.tail.next = vertex;\n\n\t\t}\n\n\t\tvertex.prev = this.tail;\n\n\t\t// ensure that the 'tail' reference points to the last vertex of the chain\n\n\t\twhile ( vertex.next !== null ) {\n\n\t\t\tvertex = vertex.next;\n\n\t\t}\n\n\t\tthis.tail = vertex;\n\n\t\treturn this;\n\n\t}\n\n\t// Removes a vertex from the linked list\n\n\tremove( vertex ) {\n\n\t\tif ( vertex.prev === null ) {\n\n\t\t\tthis.head = vertex.next;\n\n\t\t} else {\n\n\t\t\tvertex.prev.next = vertex.next;\n\n\t\t}\n\n\t\tif ( vertex.next === null ) {\n\n\t\t\tthis.tail = vertex.prev;\n\n\t\t} else {\n\n\t\t\tvertex.next.prev = vertex.prev;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Removes a list of vertices whose 'head' is 'a' and whose 'tail' is b\n\n\tremoveSubList( a, b ) {\n\n\t\tif ( a.prev === null ) {\n\n\t\t\tthis.head = b.next;\n\n\t\t} else {\n\n\t\t\ta.prev.next = b.next;\n\n\t\t}\n\n\t\tif ( b.next === null ) {\n\n\t\t\tthis.tail = a.prev;\n\n\t\t} else {\n\n\t\t\tb.next.prev = a.prev;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn this.head === null;\n\n\t}\n\n}\n\nexport { ConvexHull, Face, HalfEdge, VertexNode, VertexList };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute\n} from 'three';\nimport { ConvexHull } from '../math/ConvexHull.js';\n\nclass ConvexGeometry extends BufferGeometry {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\t// buffers\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\n\t\tconst convexHull = new ConvexHull().setFromPoints( points );\n\n\t\t// generate vertices and normals\n\n\t\tconst faces = convexHull.faces;\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\t\t\tlet edge = face.edge;\n\n\t\t\t// we move along a doubly-connected edge list to access all face points (see HalfEdge docs)\n\n\t\t\tdo {\n\n\t\t\t\tconst point = edge.head().point;\n\n\t\t\t\tvertices.push( point.x, point.y, point.z );\n\t\t\t\tnormals.push( face.normal.x, face.normal.y, face.normal.z );\n\n\t\t\t\tedge = edge.next;\n\n\t\t\t} while ( edge !== face.edge );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t}\n\n}\n\nexport { ConvexGeometry };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tMatrix4,\n\tVector3\n} from 'three';\n\n/**\n * You can use this geometry to create a decal mesh, that serves different kinds of purposes.\n * e.g. adding unique details to models, performing dynamic visual environmental changes or covering seams.\n *\n * Constructor parameter:\n *\n * mesh — Any mesh object\n * position — Position of the decal projector\n * orientation — Orientation of the decal projector\n * size — Size of the decal projector\n *\n * reference: http://blog.wolfire.com/2009/06/how-to-project-decals/\n *\n */\n\nclass DecalGeometry extends BufferGeometry {\n\n\tconstructor( mesh, position, orientation, size ) {\n\n\t\tsuper();\n\n\t\t// buffers\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helpers\n\n\t\tconst plane = new Vector3();\n\n\t\t// this matrix represents the transformation of the decal projector\n\n\t\tconst projectorMatrix = new Matrix4();\n\t\tprojectorMatrix.makeRotationFromEuler( orientation );\n\t\tprojectorMatrix.setPosition( position );\n\n\t\tconst projectorMatrixInverse = new Matrix4();\n\t\tprojectorMatrixInverse.copy( projectorMatrix ).invert();\n\n\t\t// generate buffers\n\n\t\tgenerate();\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generate() {\n\n\t\t\tlet decalVertices = [];\n\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst normal = new Vector3();\n\n\t\t\t// handle different geometry types\n\n\t\t\tconst geometry = mesh.geometry;\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst normalAttribute = geometry.attributes.normal;\n\n\t\t\t// first, create an array of 'DecalVertex' objects\n\t\t\t// three consecutive 'DecalVertex' objects represent a single face\n\t\t\t//\n\t\t\t// this data structure will be later used to perform the clipping\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst index = geometry.index;\n\n\t\t\t\tfor ( let i = 0; i < index.count; i ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( positionAttribute, index.getX( i ) );\n\t\t\t\t\tnormal.fromBufferAttribute( normalAttribute, index.getX( i ) );\n\n\t\t\t\t\tpushDecalVertex( decalVertices, vertex, normal );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tnormal.fromBufferAttribute( normalAttribute, i );\n\n\t\t\t\t\tpushDecalVertex( decalVertices, vertex, normal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// second, clip the geometry so that it doesn't extend out from the projector\n\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 1, 0, 0 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( - 1, 0, 0 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 0, 1, 0 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 0, - 1, 0 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 0, 0, 1 ) );\n\t\t\tdecalVertices = clipGeometry( decalVertices, plane.set( 0, 0, - 1 ) );\n\n\t\t\t// third, generate final vertices, normals and uvs\n\n\t\t\tfor ( let i = 0; i < decalVertices.length; i ++ ) {\n\n\t\t\t\tconst decalVertex = decalVertices[ i ];\n\n\t\t\t\t// create texture coordinates (we are still in projector space)\n\n\t\t\t\tuvs.push(\n\t\t\t\t\t0.5 + ( decalVertex.position.x / size.x ),\n\t\t\t\t\t0.5 + ( decalVertex.position.y / size.y )\n\t\t\t\t);\n\n\t\t\t\t// transform the vertex back to world space\n\n\t\t\t\tdecalVertex.position.applyMatrix4( projectorMatrix );\n\n\t\t\t\t// now create vertex and normal buffer data\n\n\t\t\t\tvertices.push( decalVertex.position.x, decalVertex.position.y, decalVertex.position.z );\n\t\t\t\tnormals.push( decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushDecalVertex( decalVertices, vertex, normal ) {\n\n\t\t\t// transform the vertex to world space, then to projector space\n\n\t\t\tvertex.applyMatrix4( mesh.matrixWorld );\n\t\t\tvertex.applyMatrix4( projectorMatrixInverse );\n\n\t\t\tnormal.transformDirection( mesh.matrixWorld );\n\n\t\t\tdecalVertices.push( new DecalVertex( vertex.clone(), normal.clone() ) );\n\n\t\t}\n\n\t\tfunction clipGeometry( inVertices, plane ) {\n\n\t\t\tconst outVertices = [];\n\n\t\t\tconst s = 0.5 * Math.abs( size.dot( plane ) );\n\n\t\t\t// a single iteration clips one face,\n\t\t\t// which consists of three consecutive 'DecalVertex' objects\n\n\t\t\tfor ( let i = 0; i < inVertices.length; i += 3 ) {\n\n\t\t\t\tlet total = 0;\n\t\t\t\tlet nV1;\n\t\t\t\tlet nV2;\n\t\t\t\tlet nV3;\n\t\t\t\tlet nV4;\n\n\t\t\t\tconst d1 = inVertices[ i + 0 ].position.dot( plane ) - s;\n\t\t\t\tconst d2 = inVertices[ i + 1 ].position.dot( plane ) - s;\n\t\t\t\tconst d3 = inVertices[ i + 2 ].position.dot( plane ) - s;\n\n\t\t\t\tconst v1Out = d1 > 0;\n\t\t\t\tconst v2Out = d2 > 0;\n\t\t\t\tconst v3Out = d3 > 0;\n\n\t\t\t\t// calculate, how many vertices of the face lie outside of the clipping plane\n\n\t\t\t\ttotal = ( v1Out ? 1 : 0 ) + ( v2Out ? 1 : 0 ) + ( v3Out ? 1 : 0 );\n\n\t\t\t\tswitch ( total ) {\n\n\t\t\t\t\tcase 0: {\n\n\t\t\t\t\t\t// the entire face lies inside of the plane, no clipping needed\n\n\t\t\t\t\t\toutVertices.push( inVertices[ i ] );\n\t\t\t\t\t\toutVertices.push( inVertices[ i + 1 ] );\n\t\t\t\t\t\toutVertices.push( inVertices[ i + 2 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 1: {\n\n\t\t\t\t\t\t// one vertex lies outside of the plane, perform clipping\n\n\t\t\t\t\t\tif ( v1Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i + 1 ];\n\t\t\t\t\t\t\tnV2 = inVertices[ i + 2 ];\n\t\t\t\t\t\t\tnV3 = clip( inVertices[ i ], nV1, plane, s );\n\t\t\t\t\t\t\tnV4 = clip( inVertices[ i ], nV2, plane, s );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( v2Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i ];\n\t\t\t\t\t\t\tnV2 = inVertices[ i + 2 ];\n\t\t\t\t\t\t\tnV3 = clip( inVertices[ i + 1 ], nV1, plane, s );\n\t\t\t\t\t\t\tnV4 = clip( inVertices[ i + 1 ], nV2, plane, s );\n\n\t\t\t\t\t\t\toutVertices.push( nV3 );\n\t\t\t\t\t\t\toutVertices.push( nV2.clone() );\n\t\t\t\t\t\t\toutVertices.push( nV1.clone() );\n\n\t\t\t\t\t\t\toutVertices.push( nV2.clone() );\n\t\t\t\t\t\t\toutVertices.push( nV3.clone() );\n\t\t\t\t\t\t\toutVertices.push( nV4 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( v3Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i ];\n\t\t\t\t\t\t\tnV2 = inVertices[ i + 1 ];\n\t\t\t\t\t\t\tnV3 = clip( inVertices[ i + 2 ], nV1, plane, s );\n\t\t\t\t\t\t\tnV4 = clip( inVertices[ i + 2 ], nV2, plane, s );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\toutVertices.push( nV1.clone() );\n\t\t\t\t\t\toutVertices.push( nV2.clone() );\n\t\t\t\t\t\toutVertices.push( nV3 );\n\n\t\t\t\t\t\toutVertices.push( nV4 );\n\t\t\t\t\t\toutVertices.push( nV3.clone() );\n\t\t\t\t\t\toutVertices.push( nV2.clone() );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 2: {\n\n\t\t\t\t\t\t// two vertices lies outside of the plane, perform clipping\n\n\t\t\t\t\t\tif ( ! v1Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i ].clone();\n\t\t\t\t\t\t\tnV2 = clip( nV1, inVertices[ i + 1 ], plane, s );\n\t\t\t\t\t\t\tnV3 = clip( nV1, inVertices[ i + 2 ], plane, s );\n\t\t\t\t\t\t\toutVertices.push( nV1 );\n\t\t\t\t\t\t\toutVertices.push( nV2 );\n\t\t\t\t\t\t\toutVertices.push( nV3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! v2Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i + 1 ].clone();\n\t\t\t\t\t\t\tnV2 = clip( nV1, inVertices[ i + 2 ], plane, s );\n\t\t\t\t\t\t\tnV3 = clip( nV1, inVertices[ i ], plane, s );\n\t\t\t\t\t\t\toutVertices.push( nV1 );\n\t\t\t\t\t\t\toutVertices.push( nV2 );\n\t\t\t\t\t\t\toutVertices.push( nV3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! v3Out ) {\n\n\t\t\t\t\t\t\tnV1 = inVertices[ i + 2 ].clone();\n\t\t\t\t\t\t\tnV2 = clip( nV1, inVertices[ i ], plane, s );\n\t\t\t\t\t\t\tnV3 = clip( nV1, inVertices[ i + 1 ], plane, s );\n\t\t\t\t\t\t\toutVertices.push( nV1 );\n\t\t\t\t\t\t\toutVertices.push( nV2 );\n\t\t\t\t\t\t\toutVertices.push( nV3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 3: {\n\n\t\t\t\t\t\t// the entire face lies outside of the plane, so let's discard the corresponding vertices\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn outVertices;\n\n\t\t}\n\n\t\tfunction clip( v0, v1, p, s ) {\n\n\t\t\tconst d0 = v0.position.dot( p ) - s;\n\t\t\tconst d1 = v1.position.dot( p ) - s;\n\n\t\t\tconst s0 = d0 / ( d0 - d1 );\n\n\t\t\tconst v = new DecalVertex(\n\t\t\t\tnew Vector3(\n\t\t\t\t\tv0.position.x + s0 * ( v1.position.x - v0.position.x ),\n\t\t\t\t\tv0.position.y + s0 * ( v1.position.y - v0.position.y ),\n\t\t\t\t\tv0.position.z + s0 * ( v1.position.z - v0.position.z )\n\t\t\t\t),\n\t\t\t\tnew Vector3(\n\t\t\t\t\tv0.normal.x + s0 * ( v1.normal.x - v0.normal.x ),\n\t\t\t\t\tv0.normal.y + s0 * ( v1.normal.y - v0.normal.y ),\n\t\t\t\t\tv0.normal.z + s0 * ( v1.normal.z - v0.normal.z )\n\t\t\t\t)\n\t\t\t);\n\n\t\t\t// need to clip more values (texture coordinates)? do it this way:\n\t\t\t// intersectpoint.value = a.value + s * ( b.value - a.value );\n\n\t\t\treturn v;\n\n\t\t}\n\n\t}\n\n}\n\n// helper\n\nclass DecalVertex {\n\n\tconstructor( position, normal ) {\n\n\t\tthis.position = position;\n\t\tthis.normal = normal;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.position.clone(), this.normal.clone() );\n\n\t}\n\n}\n\nexport { DecalGeometry, DecalVertex };\n", "/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\nimport {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tVector3\n} from 'three';\n\nclass ParametricGeometry extends BufferGeometry {\n\n\tconstructor( func = ( u, v, target ) => target.set( u, v, Math.cos( u ) * Math.sin( v ) ), slices = 8, stacks = 8 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ParametricGeometry';\n\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tconst EPS = 0.00001;\n\n\t\tconst normal = new Vector3();\n\n\t\tconst p0 = new Vector3(), p1 = new Vector3();\n\t\tconst pu = new Vector3(), pv = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tconst sliceCount = slices + 1;\n\n\t\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\t\tconst v = i / stacks;\n\n\t\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\t\tconst u = j / slices;\n\n\t\t\t\t// vertex\n\n\t\t\t\tfunc( u, v, p0 );\n\t\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t\t// normal\n\n\t\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, v );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let i = 0; i < stacks; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\t\tconst a = i * sliceCount + j;\n\t\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\t\tconst d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t\t// faces one and two\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { ParametricGeometry };\n", "import {\n\tCurve,\n\tVector3\n} from 'three';\n\nimport { ParametricGeometry } from './ParametricGeometry.js';\n\n/**\n * Experimenting of primitive geometry creation using Surface Parametric equations\n */\n\nconst ParametricGeometries = {\n\n\tklein: function ( v, u, target ) {\n\n\t\tu *= Math.PI;\n\t\tv *= 2 * Math.PI;\n\n\t\tu = u * 2;\n\t\tlet x, z;\n\t\tif ( u < Math.PI ) {\n\n\t\t\tx = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( u ) * Math.cos( v );\n\t\t\tz = - 8 * Math.sin( u ) - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( u ) * Math.cos( v );\n\n\t\t} else {\n\n\t\t\tx = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( v + Math.PI );\n\t\t\tz = - 8 * Math.sin( u );\n\n\t\t}\n\n\t\tconst y = - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( v );\n\n\t\ttarget.set( x, y, z );\n\n\t},\n\n\tplane: function ( width, height ) {\n\n\t\treturn function ( u, v, target ) {\n\n\t\t\tconst x = u * width;\n\t\t\tconst y = 0;\n\t\t\tconst z = v * height;\n\n\t\t\ttarget.set( x, y, z );\n\n\t\t};\n\n\t},\n\n\tmobius: function ( u, t, target ) {\n\n\t\t// flat mobius strip\n\t\t// http://www.wolframalpha.com/input/?i=M%C3%B6bius+strip+parametric+equations&lk=1&a=ClashPrefs_*Surface.MoebiusStrip.SurfaceProperty.ParametricEquations-\n\t\tu = u - 0.5;\n\t\tconst v = 2 * Math.PI * t;\n\n\t\tconst a = 2;\n\n\t\tconst x = Math.cos( v ) * ( a + u * Math.cos( v / 2 ) );\n\t\tconst y = Math.sin( v ) * ( a + u * Math.cos( v / 2 ) );\n\t\tconst z = u * Math.sin( v / 2 );\n\n\t\ttarget.set( x, y, z );\n\n\t},\n\n\tmobius3d: function ( u, t, target ) {\n\n\t\t// volumetric mobius strip\n\n\t\tu *= Math.PI;\n\t\tt *= 2 * Math.PI;\n\n\t\tu = u * 2;\n\t\tconst phi = u / 2;\n\t\tconst major = 2.25, a = 0.125, b = 0.65;\n\n\t\tlet x = a * Math.cos( t ) * Math.cos( phi ) - b * Math.sin( t ) * Math.sin( phi );\n\t\tconst z = a * Math.cos( t ) * Math.sin( phi ) + b * Math.sin( t ) * Math.cos( phi );\n\t\tconst y = ( major + x ) * Math.sin( u );\n\t\tx = ( major + x ) * Math.cos( u );\n\n\t\ttarget.set( x, y, z );\n\n\t}\n\n};\n\n\n/*********************************************\n *\n * Parametric Replacement for TubeGeometry\n *\n *********************************************/\n\nParametricGeometries.TubeGeometry = class TubeGeometry extends ParametricGeometry {\n\n\tconstructor( path, segments = 64, radius = 1, segmentsRadius = 8, closed = false ) {\n\n\t\tconst numpoints = segments + 1;\n\n\t\tconst frames = path.computeFrenetFrames( segments, closed ),\n\t\t\ttangents = frames.tangents,\n\t\t\tnormals = frames.normals,\n\t\t\tbinormals = frames.binormals;\n\n\t\tconst position = new Vector3();\n\n\t\tfunction ParametricTube( u, v, target ) {\n\n\t\t\tv *= 2 * Math.PI;\n\n\t\t\tconst i = Math.floor( u * ( numpoints - 1 ) );\n\n\t\t\tpath.getPointAt( u, position );\n\n\t\t\tconst normal = normals[ i ];\n\t\t\tconst binormal = binormals[ i ];\n\n\t\t\tconst cx = - radius * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.\n\t\t\tconst cy = radius * Math.sin( v );\n\n\t\t\tposition.x += cx * normal.x + cy * binormal.x;\n\t\t\tposition.y += cx * normal.y + cy * binormal.y;\n\t\t\tposition.z += cx * normal.z + cy * binormal.z;\n\n\t\t\ttarget.copy( position );\n\n\t\t}\n\n\t\tsuper( ParametricTube, segments, segmentsRadius );\n\n\t\t// proxy internals\n\n\t\tthis.tangents = tangents;\n\t\tthis.normals = normals;\n\t\tthis.binormals = binormals;\n\n\t\tthis.path = path;\n\t\tthis.segments = segments;\n\t\tthis.radius = radius;\n\t\tthis.segmentsRadius = segmentsRadius;\n\t\tthis.closed = closed;\n\n\t}\n\n};\n\n\n/*********************************************\n *\n * Parametric Replacement for TorusKnotGeometry\n *\n *********************************************/\nParametricGeometries.TorusKnotGeometry = class TorusKnotGeometry extends ParametricGeometries.TubeGeometry {\n\n\tconstructor( radius = 200, tube = 40, segmentsT = 64, segmentsR = 8, p = 2, q = 3 ) {\n\n\t\tclass TorusKnotCurve extends Curve {\n\n\t\t\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\t\t\tconst point = optionalTarget;\n\n\t\t\t\tt *= Math.PI * 2;\n\n\t\t\t\tconst r = 0.5;\n\n\t\t\t\tconst x = ( 1 + r * Math.cos( q * t ) ) * Math.cos( p * t );\n\t\t\t\tconst y = ( 1 + r * Math.cos( q * t ) ) * Math.sin( p * t );\n\t\t\t\tconst z = r * Math.sin( q * t );\n\n\t\t\t\treturn point.set( x, y, z ).multiplyScalar( radius );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst segments = segmentsT;\n\t\tconst radiusSegments = segmentsR;\n\t\tconst extrudePath = new TorusKnotCurve();\n\n\t\tsuper( extrudePath, segments, tube, radiusSegments, true, false );\n\n\t\tthis.radius = radius;\n\t\tthis.tube = tube;\n\t\tthis.segmentsT = segmentsT;\n\t\tthis.segmentsR = segmentsR;\n\t\tthis.p = p;\n\t\tthis.q = q;\n\n\t}\n\n};\n\n/*********************************************\n *\n * Parametric Replacement for SphereGeometry\n *\n *********************************************/\nParametricGeometries.SphereGeometry = class SphereGeometry extends ParametricGeometry {\n\n\tconstructor( size, u, v ) {\n\n\t\tfunction sphere( u, v, target ) {\n\n\t\t\tu *= Math.PI;\n\t\t\tv *= 2 * Math.PI;\n\n\t\t\tconst x = size * Math.sin( u ) * Math.cos( v );\n\t\t\tconst y = size * Math.sin( u ) * Math.sin( v );\n\t\t\tconst z = size * Math.cos( u );\n\n\t\t\ttarget.set( x, y, z );\n\n\t\t}\n\n\t\tsuper( sphere, u, v );\n\n\t}\n\n};\n\n\n/*********************************************\n *\n * Parametric Replacement for PlaneGeometry\n *\n *********************************************/\n\nParametricGeometries.PlaneGeometry = class PlaneGeometry extends ParametricGeometry {\n\n\tconstructor( width, depth, segmentsWidth, segmentsDepth ) {\n\n\t\tfunction plane( u, v, target ) {\n\n\t\t\tconst x = u * width;\n\t\t\tconst y = 0;\n\t\t\tconst z = v * depth;\n\n\t\t\ttarget.set( x, y, z );\n\n\t\t}\n\n\t\tsuper( plane, segmentsWidth, segmentsDepth );\n\n\t}\n\n};\n\nexport { ParametricGeometries };\n", "import {\n\tBoxGeometry,\n\tVector3\n} from 'three';\n\nconst _tempNormal = new Vector3();\n\nfunction getUv( faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength ) {\n\n\tconst totArcLength = 2 * Math.PI * radius / 4;\n\n\t// length of the planes between the arcs on each axis\n\tconst centerLength = Math.max( sideLength - 2 * radius, 0 );\n\tconst halfArc = Math.PI / 4;\n\n\t// Get the vector projected onto the Y plane\n\t_tempNormal.copy( normal );\n\t_tempNormal[ projectionAxis ] = 0;\n\t_tempNormal.normalize();\n\n\t// total amount of UV space alloted to a single arc\n\tconst arcUvRatio = 0.5 * totArcLength / ( totArcLength + centerLength );\n\n\t// the distance along one arc the point is at\n\tconst arcAngleRatio = 1.0 - ( _tempNormal.angleTo( faceDirVector ) / halfArc );\n\n\tif ( Math.sign( _tempNormal[ uvAxis ] ) === 1 ) {\n\n\t\treturn arcAngleRatio * arcUvRatio;\n\n\t} else {\n\n\t\t// total amount of UV space alloted to the plane between the arcs\n\t\tconst lenUv = centerLength / ( totArcLength + centerLength );\n\t\treturn lenUv + arcUvRatio + arcUvRatio * ( 1.0 - arcAngleRatio );\n\n\t}\n\n}\n\nclass RoundedBoxGeometry extends BoxGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, segments = 2, radius = 0.1 ) {\n\n\t\t// ensure segments is odd so we have a plane connecting the rounded corners\n\t\tsegments = segments * 2 + 1;\n\n\t\t// ensure radius isn't bigger than shortest side\n\t\tradius = Math.min( width / 2, height / 2, depth / 2, radius );\n\n\t\tsuper( 1, 1, 1, segments, segments, segments );\n\n\t\t// if we just have one segment we're the same as a regular box\n\t\tif ( segments === 1 ) return;\n\n\t\tconst geometry2 = this.toNonIndexed();\n\n\t\tthis.index = null;\n\t\tthis.attributes.position = geometry2.attributes.position;\n\t\tthis.attributes.normal = geometry2.attributes.normal;\n\t\tthis.attributes.uv = geometry2.attributes.uv;\n\n\t\t//\n\n\t\tconst position = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst box = new Vector3( width, height, depth ).divideScalar( 2 ).subScalar( radius );\n\n\t\tconst positions = this.attributes.position.array;\n\t\tconst normals = this.attributes.normal.array;\n\t\tconst uvs = this.attributes.uv.array;\n\n\t\tconst faceTris = positions.length / 6;\n\t\tconst faceDirVector = new Vector3();\n\t\tconst halfSegmentSize = 0.5 / segments;\n\n\t\tfor ( let i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\tposition.fromArray( positions, i );\n\t\t\tnormal.copy( position );\n\t\t\tnormal.x -= Math.sign( normal.x ) * halfSegmentSize;\n\t\t\tnormal.y -= Math.sign( normal.y ) * halfSegmentSize;\n\t\t\tnormal.z -= Math.sign( normal.z ) * halfSegmentSize;\n\t\t\tnormal.normalize();\n\n\t\t\tpositions[ i + 0 ] = box.x * Math.sign( position.x ) + normal.x * radius;\n\t\t\tpositions[ i + 1 ] = box.y * Math.sign( position.y ) + normal.y * radius;\n\t\t\tpositions[ i + 2 ] = box.z * Math.sign( position.z ) + normal.z * radius;\n\n\t\t\tnormals[ i + 0 ] = normal.x;\n\t\t\tnormals[ i + 1 ] = normal.y;\n\t\t\tnormals[ i + 2 ] = normal.z;\n\n\t\t\tconst side = Math.floor( i / faceTris );\n\n\t\t\tswitch ( side ) {\n\n\t\t\t\tcase 0: // right\n\n\t\t\t\t\t// generate UVs along Z then Y\n\t\t\t\t\tfaceDirVector.set( 1, 0, 0 );\n\t\t\t\t\tuvs[ j + 0 ] = getUv( faceDirVector, normal, 'z', 'y', radius, depth );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'y', 'z', radius, height );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // left\n\n\t\t\t\t\t// generate UVs along Z then Y\n\t\t\t\t\tfaceDirVector.set( - 1, 0, 0 );\n\t\t\t\t\tuvs[ j + 0 ] = 1.0 - getUv( faceDirVector, normal, 'z', 'y', radius, depth );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'y', 'z', radius, height );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2: // top\n\n\t\t\t\t\t// generate UVs along X then Z\n\t\t\t\t\tfaceDirVector.set( 0, 1, 0 );\n\t\t\t\t\tuvs[ j + 0 ] = 1.0 - getUv( faceDirVector, normal, 'x', 'z', radius, width );\n\t\t\t\t\tuvs[ j + 1 ] = getUv( faceDirVector, normal, 'z', 'x', radius, depth );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3: // bottom\n\n\t\t\t\t\t// generate UVs along X then Z\n\t\t\t\t\tfaceDirVector.set( 0, - 1, 0 );\n\t\t\t\t\tuvs[ j + 0 ] = 1.0 - getUv( faceDirVector, normal, 'x', 'z', radius, width );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'z', 'x', radius, depth );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 4: // front\n\n\t\t\t\t\t// generate UVs along X then Y\n\t\t\t\t\tfaceDirVector.set( 0, 0, 1 );\n\t\t\t\t\tuvs[ j + 0 ] = 1.0 - getUv( faceDirVector, normal, 'x', 'y', radius, width );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'y', 'x', radius, height );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 5: // back\n\n\t\t\t\t\t// generate UVs along X then Y\n\t\t\t\t\tfaceDirVector.set( 0, 0, - 1 );\n\t\t\t\t\tuvs[ j + 0 ] = getUv( faceDirVector, normal, 'x', 'y', radius, width );\n\t\t\t\t\tuvs[ j + 1 ] = 1.0 - getUv( faceDirVector, normal, 'y', 'x', radius, height );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { RoundedBoxGeometry };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tMatrix4,\n\tVector3,\n\tVector4\n} from 'three';\n\n/**\n * Tessellates the famous Utah teapot database by Martin Newell into triangles.\n *\n * Parameters: size = 50, segments = 10, bottom = true, lid = true, body = true,\n * fitLid = true, blinn = true\n *\n * size is a relative scale: I've scaled the teapot to fit vertically between -1 and 1.\n * Think of it as a \"radius\".\n * segments - number of line segments to subdivide each patch edge;\n * 1 is possible but gives degenerates, so two is the real minimum.\n * bottom - boolean, if true (default) then the bottom patches are added. Some consider\n * adding the bottom heresy, so set this to \"false\" to adhere to the One True Way.\n * lid - to remove the lid and look inside, set to true.\n * body - to remove the body and leave the lid, set this and \"bottom\" to false.\n * fitLid - the lid is a tad small in the original. This stretches it a bit so you can't\n * see the teapot's insides through the gap.\n * blinn - Jim Blinn scaled the original data vertically by dividing by about 1.3 to look\n * nicer. If you want to see the original teapot, similar to the real-world model, set\n * this to false. True by default.\n * See http://en.wikipedia.org/wiki/File:Original_Utah_Teapot.jpg for the original\n * real-world teapot (from http://en.wikipedia.org/wiki/Utah_teapot).\n *\n * Note that the bottom (the last four patches) is not flat - blame Frank Crow, not me.\n *\n * The teapot should normally be rendered as a double sided object, since for some\n * patches both sides can be seen, e.g., the gap around the lid and inside the spout.\n *\n * Segments 'n' determines the number of triangles output.\n * Total triangles = 32*2*n*n - 8*n [degenerates at the top and bottom cusps are deleted]\n *\n * size_factor # triangles\n * 1 56\n * 2 240\n * 3 552\n * 4 992\n *\n * 10 6320\n * 20 25440\n * 30 57360\n *\n * Code converted from my ancient SPD software, http://tog.acm.org/resources/SPD/\n * Created for the Udacity course \"Interactive Rendering\", http://bit.ly/ericity\n * YouTube video on teapot history: https://www.youtube.com/watch?v=DxMfblPzFNc\n *\n * See https://en.wikipedia.org/wiki/Utah_teapot for the history of the teapot\n *\n */\n\nclass TeapotGeometry extends BufferGeometry {\n\n\tconstructor( size = 50, segments = 10, bottom = true, lid = true, body = true, fitLid = true, blinn = true ) {\n\n\t\t// 32 * 4 * 4 Bezier spline patches\n\t\tconst teapotPatches = [\n\t\t\t/*rim*/\n\t\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t\t\t3, 16, 17, 18, 7, 19, 20, 21, 11, 22, 23, 24, 15, 25, 26, 27,\n\t\t\t18, 28, 29, 30, 21, 31, 32, 33, 24, 34, 35, 36, 27, 37, 38, 39,\n\t\t\t30, 40, 41, 0, 33, 42, 43, 4, 36, 44, 45, 8, 39, 46, 47, 12,\n\t\t\t/*body*/\n\t\t\t12, 13, 14, 15, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n\t\t\t15, 25, 26, 27, 51, 60, 61, 62, 55, 63, 64, 65, 59, 66, 67, 68,\n\t\t\t27, 37, 38, 39, 62, 69, 70, 71, 65, 72, 73, 74, 68, 75, 76, 77,\n\t\t\t39, 46, 47, 12, 71, 78, 79, 48, 74, 80, 81, 52, 77, 82, 83, 56,\n\t\t\t56, 57, 58, 59, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,\n\t\t\t59, 66, 67, 68, 87, 96, 97, 98, 91, 99, 100, 101, 95, 102, 103, 104,\n\t\t\t68, 75, 76, 77, 98, 105, 106, 107, 101, 108, 109, 110, 104, 111, 112, 113,\n\t\t\t77, 82, 83, 56, 107, 114, 115, 84, 110, 116, 117, 88, 113, 118, 119, 92,\n\t\t\t/*handle*/\n\t\t\t120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,\n\t\t\t123, 136, 137, 120, 127, 138, 139, 124, 131, 140, 141, 128, 135, 142, 143, 132,\n\t\t\t132, 133, 134, 135, 144, 145, 146, 147, 148, 149, 150, 151, 68, 152, 153, 154,\n\t\t\t135, 142, 143, 132, 147, 155, 156, 144, 151, 157, 158, 148, 154, 159, 160, 68,\n\t\t\t/*spout*/\n\t\t\t161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,\n\t\t\t164, 177, 178, 161, 168, 179, 180, 165, 172, 181, 182, 169, 176, 183, 184, 173,\n\t\t\t173, 174, 175, 176, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,\n\t\t\t176, 183, 184, 173, 188, 197, 198, 185, 192, 199, 200, 189, 196, 201, 202, 193,\n\t\t\t/*lid*/\n\t\t\t203, 203, 203, 203, 204, 205, 206, 207, 208, 208, 208, 208, 209, 210, 211, 212,\n\t\t\t203, 203, 203, 203, 207, 213, 214, 215, 208, 208, 208, 208, 212, 216, 217, 218,\n\t\t\t203, 203, 203, 203, 215, 219, 220, 221, 208, 208, 208, 208, 218, 222, 223, 224,\n\t\t\t203, 203, 203, 203, 221, 225, 226, 204, 208, 208, 208, 208, 224, 227, 228, 209,\n\t\t\t209, 210, 211, 212, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,\n\t\t\t212, 216, 217, 218, 232, 241, 242, 243, 236, 244, 245, 246, 240, 247, 248, 249,\n\t\t\t218, 222, 223, 224, 243, 250, 251, 252, 246, 253, 254, 255, 249, 256, 257, 258,\n\t\t\t224, 227, 228, 209, 252, 259, 260, 229, 255, 261, 262, 233, 258, 263, 264, 237,\n\t\t\t/*bottom*/\n\t\t\t265, 265, 265, 265, 266, 267, 268, 269, 270, 271, 272, 273, 92, 119, 118, 113,\n\t\t\t265, 265, 265, 265, 269, 274, 275, 276, 273, 277, 278, 279, 113, 112, 111, 104,\n\t\t\t265, 265, 265, 265, 276, 280, 281, 282, 279, 283, 284, 285, 104, 103, 102, 95,\n\t\t\t265, 265, 265, 265, 282, 286, 287, 266, 285, 288, 289, 270, 95, 94, 93, 92\n\t\t];\n\n\t\tconst teapotVertices = [\n\t\t\t1.4, 0, 2.4,\n\t\t\t1.4, - 0.784, 2.4,\n\t\t\t0.784, - 1.4, 2.4,\n\t\t\t0, - 1.4, 2.4,\n\t\t\t1.3375, 0, 2.53125,\n\t\t\t1.3375, - 0.749, 2.53125,\n\t\t\t0.749, - 1.3375, 2.53125,\n\t\t\t0, - 1.3375, 2.53125,\n\t\t\t1.4375, 0, 2.53125,\n\t\t\t1.4375, - 0.805, 2.53125,\n\t\t\t0.805, - 1.4375, 2.53125,\n\t\t\t0, - 1.4375, 2.53125,\n\t\t\t1.5, 0, 2.4,\n\t\t\t1.5, - 0.84, 2.4,\n\t\t\t0.84, - 1.5, 2.4,\n\t\t\t0, - 1.5, 2.4,\n\t\t\t- 0.784, - 1.4, 2.4,\n\t\t\t- 1.4, - 0.784, 2.4,\n\t\t\t- 1.4, 0, 2.4,\n\t\t\t- 0.749, - 1.3375, 2.53125,\n\t\t\t- 1.3375, - 0.749, 2.53125,\n\t\t\t- 1.3375, 0, 2.53125,\n\t\t\t- 0.805, - 1.4375, 2.53125,\n\t\t\t- 1.4375, - 0.805, 2.53125,\n\t\t\t- 1.4375, 0, 2.53125,\n\t\t\t- 0.84, - 1.5, 2.4,\n\t\t\t- 1.5, - 0.84, 2.4,\n\t\t\t- 1.5, 0, 2.4,\n\t\t\t- 1.4, 0.784, 2.4,\n\t\t\t- 0.784, 1.4, 2.4,\n\t\t\t0, 1.4, 2.4,\n\t\t\t- 1.3375, 0.749, 2.53125,\n\t\t\t- 0.749, 1.3375, 2.53125,\n\t\t\t0, 1.3375, 2.53125,\n\t\t\t- 1.4375, 0.805, 2.53125,\n\t\t\t- 0.805, 1.4375, 2.53125,\n\t\t\t0, 1.4375, 2.53125,\n\t\t\t- 1.5, 0.84, 2.4,\n\t\t\t- 0.84, 1.5, 2.4,\n\t\t\t0, 1.5, 2.4,\n\t\t\t0.784, 1.4, 2.4,\n\t\t\t1.4, 0.784, 2.4,\n\t\t\t0.749, 1.3375, 2.53125,\n\t\t\t1.3375, 0.749, 2.53125,\n\t\t\t0.805, 1.4375, 2.53125,\n\t\t\t1.4375, 0.805, 2.53125,\n\t\t\t0.84, 1.5, 2.4,\n\t\t\t1.5, 0.84, 2.4,\n\t\t\t1.75, 0, 1.875,\n\t\t\t1.75, - 0.98, 1.875,\n\t\t\t0.98, - 1.75, 1.875,\n\t\t\t0, - 1.75, 1.875,\n\t\t\t2, 0, 1.35,\n\t\t\t2, - 1.12, 1.35,\n\t\t\t1.12, - 2, 1.35,\n\t\t\t0, - 2, 1.35,\n\t\t\t2, 0, 0.9,\n\t\t\t2, - 1.12, 0.9,\n\t\t\t1.12, - 2, 0.9,\n\t\t\t0, - 2, 0.9,\n\t\t\t- 0.98, - 1.75, 1.875,\n\t\t\t- 1.75, - 0.98, 1.875,\n\t\t\t- 1.75, 0, 1.875,\n\t\t\t- 1.12, - 2, 1.35,\n\t\t\t- 2, - 1.12, 1.35,\n\t\t\t- 2, 0, 1.35,\n\t\t\t- 1.12, - 2, 0.9,\n\t\t\t- 2, - 1.12, 0.9,\n\t\t\t- 2, 0, 0.9,\n\t\t\t- 1.75, 0.98, 1.875,\n\t\t\t- 0.98, 1.75, 1.875,\n\t\t\t0, 1.75, 1.875,\n\t\t\t- 2, 1.12, 1.35,\n\t\t\t- 1.12, 2, 1.35,\n\t\t\t0, 2, 1.35,\n\t\t\t- 2, 1.12, 0.9,\n\t\t\t- 1.12, 2, 0.9,\n\t\t\t0, 2, 0.9,\n\t\t\t0.98, 1.75, 1.875,\n\t\t\t1.75, 0.98, 1.875,\n\t\t\t1.12, 2, 1.35,\n\t\t\t2, 1.12, 1.35,\n\t\t\t1.12, 2, 0.9,\n\t\t\t2, 1.12, 0.9,\n\t\t\t2, 0, 0.45,\n\t\t\t2, - 1.12, 0.45,\n\t\t\t1.12, - 2, 0.45,\n\t\t\t0, - 2, 0.45,\n\t\t\t1.5, 0, 0.225,\n\t\t\t1.5, - 0.84, 0.225,\n\t\t\t0.84, - 1.5, 0.225,\n\t\t\t0, - 1.5, 0.225,\n\t\t\t1.5, 0, 0.15,\n\t\t\t1.5, - 0.84, 0.15,\n\t\t\t0.84, - 1.5, 0.15,\n\t\t\t0, - 1.5, 0.15,\n\t\t\t- 1.12, - 2, 0.45,\n\t\t\t- 2, - 1.12, 0.45,\n\t\t\t- 2, 0, 0.45,\n\t\t\t- 0.84, - 1.5, 0.225,\n\t\t\t- 1.5, - 0.84, 0.225,\n\t\t\t- 1.5, 0, 0.225,\n\t\t\t- 0.84, - 1.5, 0.15,\n\t\t\t- 1.5, - 0.84, 0.15,\n\t\t\t- 1.5, 0, 0.15,\n\t\t\t- 2, 1.12, 0.45,\n\t\t\t- 1.12, 2, 0.45,\n\t\t\t0, 2, 0.45,\n\t\t\t- 1.5, 0.84, 0.225,\n\t\t\t- 0.84, 1.5, 0.225,\n\t\t\t0, 1.5, 0.225,\n\t\t\t- 1.5, 0.84, 0.15,\n\t\t\t- 0.84, 1.5, 0.15,\n\t\t\t0, 1.5, 0.15,\n\t\t\t1.12, 2, 0.45,\n\t\t\t2, 1.12, 0.45,\n\t\t\t0.84, 1.5, 0.225,\n\t\t\t1.5, 0.84, 0.225,\n\t\t\t0.84, 1.5, 0.15,\n\t\t\t1.5, 0.84, 0.15,\n\t\t\t- 1.6, 0, 2.025,\n\t\t\t- 1.6, - 0.3, 2.025,\n\t\t\t- 1.5, - 0.3, 2.25,\n\t\t\t- 1.5, 0, 2.25,\n\t\t\t- 2.3, 0, 2.025,\n\t\t\t- 2.3, - 0.3, 2.025,\n\t\t\t- 2.5, - 0.3, 2.25,\n\t\t\t- 2.5, 0, 2.25,\n\t\t\t- 2.7, 0, 2.025,\n\t\t\t- 2.7, - 0.3, 2.025,\n\t\t\t- 3, - 0.3, 2.25,\n\t\t\t- 3, 0, 2.25,\n\t\t\t- 2.7, 0, 1.8,\n\t\t\t- 2.7, - 0.3, 1.8,\n\t\t\t- 3, - 0.3, 1.8,\n\t\t\t- 3, 0, 1.8,\n\t\t\t- 1.5, 0.3, 2.25,\n\t\t\t- 1.6, 0.3, 2.025,\n\t\t\t- 2.5, 0.3, 2.25,\n\t\t\t- 2.3, 0.3, 2.025,\n\t\t\t- 3, 0.3, 2.25,\n\t\t\t- 2.7, 0.3, 2.025,\n\t\t\t- 3, 0.3, 1.8,\n\t\t\t- 2.7, 0.3, 1.8,\n\t\t\t- 2.7, 0, 1.575,\n\t\t\t- 2.7, - 0.3, 1.575,\n\t\t\t- 3, - 0.3, 1.35,\n\t\t\t- 3, 0, 1.35,\n\t\t\t- 2.5, 0, 1.125,\n\t\t\t- 2.5, - 0.3, 1.125,\n\t\t\t- 2.65, - 0.3, 0.9375,\n\t\t\t- 2.65, 0, 0.9375,\n\t\t\t- 2, - 0.3, 0.9,\n\t\t\t- 1.9, - 0.3, 0.6,\n\t\t\t- 1.9, 0, 0.6,\n\t\t\t- 3, 0.3, 1.35,\n\t\t\t- 2.7, 0.3, 1.575,\n\t\t\t- 2.65, 0.3, 0.9375,\n\t\t\t- 2.5, 0.3, 1.125,\n\t\t\t- 1.9, 0.3, 0.6,\n\t\t\t- 2, 0.3, 0.9,\n\t\t\t1.7, 0, 1.425,\n\t\t\t1.7, - 0.66, 1.425,\n\t\t\t1.7, - 0.66, 0.6,\n\t\t\t1.7, 0, 0.6,\n\t\t\t2.6, 0, 1.425,\n\t\t\t2.6, - 0.66, 1.425,\n\t\t\t3.1, - 0.66, 0.825,\n\t\t\t3.1, 0, 0.825,\n\t\t\t2.3, 0, 2.1,\n\t\t\t2.3, - 0.25, 2.1,\n\t\t\t2.4, - 0.25, 2.025,\n\t\t\t2.4, 0, 2.025,\n\t\t\t2.7, 0, 2.4,\n\t\t\t2.7, - 0.25, 2.4,\n\t\t\t3.3, - 0.25, 2.4,\n\t\t\t3.3, 0, 2.4,\n\t\t\t1.7, 0.66, 0.6,\n\t\t\t1.7, 0.66, 1.425,\n\t\t\t3.1, 0.66, 0.825,\n\t\t\t2.6, 0.66, 1.425,\n\t\t\t2.4, 0.25, 2.025,\n\t\t\t2.3, 0.25, 2.1,\n\t\t\t3.3, 0.25, 2.4,\n\t\t\t2.7, 0.25, 2.4,\n\t\t\t2.8, 0, 2.475,\n\t\t\t2.8, - 0.25, 2.475,\n\t\t\t3.525, - 0.25, 2.49375,\n\t\t\t3.525, 0, 2.49375,\n\t\t\t2.9, 0, 2.475,\n\t\t\t2.9, - 0.15, 2.475,\n\t\t\t3.45, - 0.15, 2.5125,\n\t\t\t3.45, 0, 2.5125,\n\t\t\t2.8, 0, 2.4,\n\t\t\t2.8, - 0.15, 2.4,\n\t\t\t3.2, - 0.15, 2.4,\n\t\t\t3.2, 0, 2.4,\n\t\t\t3.525, 0.25, 2.49375,\n\t\t\t2.8, 0.25, 2.475,\n\t\t\t3.45, 0.15, 2.5125,\n\t\t\t2.9, 0.15, 2.475,\n\t\t\t3.2, 0.15, 2.4,\n\t\t\t2.8, 0.15, 2.4,\n\t\t\t0, 0, 3.15,\n\t\t\t0.8, 0, 3.15,\n\t\t\t0.8, - 0.45, 3.15,\n\t\t\t0.45, - 0.8, 3.15,\n\t\t\t0, - 0.8, 3.15,\n\t\t\t0, 0, 2.85,\n\t\t\t0.2, 0, 2.7,\n\t\t\t0.2, - 0.112, 2.7,\n\t\t\t0.112, - 0.2, 2.7,\n\t\t\t0, - 0.2, 2.7,\n\t\t\t- 0.45, - 0.8, 3.15,\n\t\t\t- 0.8, - 0.45, 3.15,\n\t\t\t- 0.8, 0, 3.15,\n\t\t\t- 0.112, - 0.2, 2.7,\n\t\t\t- 0.2, - 0.112, 2.7,\n\t\t\t- 0.2, 0, 2.7,\n\t\t\t- 0.8, 0.45, 3.15,\n\t\t\t- 0.45, 0.8, 3.15,\n\t\t\t0, 0.8, 3.15,\n\t\t\t- 0.2, 0.112, 2.7,\n\t\t\t- 0.112, 0.2, 2.7,\n\t\t\t0, 0.2, 2.7,\n\t\t\t0.45, 0.8, 3.15,\n\t\t\t0.8, 0.45, 3.15,\n\t\t\t0.112, 0.2, 2.7,\n\t\t\t0.2, 0.112, 2.7,\n\t\t\t0.4, 0, 2.55,\n\t\t\t0.4, - 0.224, 2.55,\n\t\t\t0.224, - 0.4, 2.55,\n\t\t\t0, - 0.4, 2.55,\n\t\t\t1.3, 0, 2.55,\n\t\t\t1.3, - 0.728, 2.55,\n\t\t\t0.728, - 1.3, 2.55,\n\t\t\t0, - 1.3, 2.55,\n\t\t\t1.3, 0, 2.4,\n\t\t\t1.3, - 0.728, 2.4,\n\t\t\t0.728, - 1.3, 2.4,\n\t\t\t0, - 1.3, 2.4,\n\t\t\t- 0.224, - 0.4, 2.55,\n\t\t\t- 0.4, - 0.224, 2.55,\n\t\t\t- 0.4, 0, 2.55,\n\t\t\t- 0.728, - 1.3, 2.55,\n\t\t\t- 1.3, - 0.728, 2.55,\n\t\t\t- 1.3, 0, 2.55,\n\t\t\t- 0.728, - 1.3, 2.4,\n\t\t\t- 1.3, - 0.728, 2.4,\n\t\t\t- 1.3, 0, 2.4,\n\t\t\t- 0.4, 0.224, 2.55,\n\t\t\t- 0.224, 0.4, 2.55,\n\t\t\t0, 0.4, 2.55,\n\t\t\t- 1.3, 0.728, 2.55,\n\t\t\t- 0.728, 1.3, 2.55,\n\t\t\t0, 1.3, 2.55,\n\t\t\t- 1.3, 0.728, 2.4,\n\t\t\t- 0.728, 1.3, 2.4,\n\t\t\t0, 1.3, 2.4,\n\t\t\t0.224, 0.4, 2.55,\n\t\t\t0.4, 0.224, 2.55,\n\t\t\t0.728, 1.3, 2.55,\n\t\t\t1.3, 0.728, 2.55,\n\t\t\t0.728, 1.3, 2.4,\n\t\t\t1.3, 0.728, 2.4,\n\t\t\t0, 0, 0,\n\t\t\t1.425, 0, 0,\n\t\t\t1.425, 0.798, 0,\n\t\t\t0.798, 1.425, 0,\n\t\t\t0, 1.425, 0,\n\t\t\t1.5, 0, 0.075,\n\t\t\t1.5, 0.84, 0.075,\n\t\t\t0.84, 1.5, 0.075,\n\t\t\t0, 1.5, 0.075,\n\t\t\t- 0.798, 1.425, 0,\n\t\t\t- 1.425, 0.798, 0,\n\t\t\t- 1.425, 0, 0,\n\t\t\t- 0.84, 1.5, 0.075,\n\t\t\t- 1.5, 0.84, 0.075,\n\t\t\t- 1.5, 0, 0.075,\n\t\t\t- 1.425, - 0.798, 0,\n\t\t\t- 0.798, - 1.425, 0,\n\t\t\t0, - 1.425, 0,\n\t\t\t- 1.5, - 0.84, 0.075,\n\t\t\t- 0.84, - 1.5, 0.075,\n\t\t\t0, - 1.5, 0.075,\n\t\t\t0.798, - 1.425, 0,\n\t\t\t1.425, - 0.798, 0,\n\t\t\t0.84, - 1.5, 0.075,\n\t\t\t1.5, - 0.84, 0.075\n\t\t];\n\n\t\tsuper();\n\n\t\t// number of segments per patch\n\t\tsegments = Math.max( 2, Math.floor( segments ) );\n\n\t\t// Jim Blinn scaled the teapot down in size by about 1.3 for\n\t\t// some rendering tests. He liked the new proportions that he kept\n\t\t// the data in this form. The model was distributed with these new\n\t\t// proportions and became the norm. Trivia: comparing images of the\n\t\t// real teapot and the computer model, the ratio for the bowl of the\n\t\t// real teapot is more like 1.25, but since 1.3 is the traditional\n\t\t// value given, we use it here.\n\t\tconst blinnScale = 1.3;\n\n\t\t// scale the size to be the real scaling factor\n\t\tconst maxHeight = 3.15 * ( blinn ? 1 : blinnScale );\n\n\t\tconst maxHeight2 = maxHeight / 2;\n\t\tconst trueSize = size / maxHeight2;\n\n\t\t// Number of elements depends on what is needed. Subtract degenerate\n\t\t// triangles at tip of bottom and lid out in advance.\n\t\tlet numTriangles = bottom ? ( 8 * segments - 4 ) * segments : 0;\n\t\tnumTriangles += lid ? ( 16 * segments - 4 ) * segments : 0;\n\t\tnumTriangles += body ? 40 * segments * segments : 0;\n\n\t\tconst indices = new Uint32Array( numTriangles * 3 );\n\n\t\tlet numVertices = bottom ? 4 : 0;\n\t\tnumVertices += lid ? 8 : 0;\n\t\tnumVertices += body ? 20 : 0;\n\t\tnumVertices *= ( segments + 1 ) * ( segments + 1 );\n\n\t\tconst vertices = new Float32Array( numVertices * 3 );\n\t\tconst normals = new Float32Array( numVertices * 3 );\n\t\tconst uvs = new Float32Array( numVertices * 2 );\n\n\t\t// Bezier form\n\t\tconst ms = new Matrix4();\n\t\tms.set(\n\t\t\t- 1.0, 3.0, - 3.0, 1.0,\n\t\t\t3.0, - 6.0, 3.0, 0.0,\n\t\t\t- 3.0, 3.0, 0.0, 0.0,\n\t\t\t1.0, 0.0, 0.0, 0.0 );\n\n\t\tconst g = [];\n\n\t\tconst sp = [];\n\t\tconst tp = [];\n\t\tconst dsp = [];\n\t\tconst dtp = [];\n\n\t\t// M * G * M matrix, sort of see\n\t\t// http://www.cs.helsinki.fi/group/goa/mallinnus/curves/surfaces.html\n\t\tconst mgm = [];\n\n\t\tconst vert = [];\n\t\tconst sdir = [];\n\t\tconst tdir = [];\n\n\t\tconst norm = new Vector3();\n\n\t\tlet tcoord;\n\n\t\tlet sval;\n\t\tlet tval;\n\t\tlet p;\n\t\tlet dsval = 0;\n\t\tlet dtval = 0;\n\n\t\tconst normOut = new Vector3();\n\n\t\tconst gmx = new Matrix4();\n\t\tconst tmtx = new Matrix4();\n\n\t\tconst vsp = new Vector4();\n\t\tconst vtp = new Vector4();\n\t\tconst vdsp = new Vector4();\n\t\tconst vdtp = new Vector4();\n\n\t\tconst vsdir = new Vector3();\n\t\tconst vtdir = new Vector3();\n\n\t\tconst mst = ms.clone();\n\t\tmst.transpose();\n\n\t\t// internal function: test if triangle has any matching vertices;\n\t\t// if so, don't save triangle, since it won't display anything.\n\t\tconst notDegenerate = ( vtx1, vtx2, vtx3 ) => // if any vertex matches, return false\n\t\t\t! ( ( ( vertices[ vtx1 * 3 ] === vertices[ vtx2 * 3 ] ) &&\n\t\t\t\t\t( vertices[ vtx1 * 3 + 1 ] === vertices[ vtx2 * 3 + 1 ] ) &&\n\t\t\t\t\t( vertices[ vtx1 * 3 + 2 ] === vertices[ vtx2 * 3 + 2 ] ) ) ||\n\t\t\t\t\t( ( vertices[ vtx1 * 3 ] === vertices[ vtx3 * 3 ] ) &&\n\t\t\t\t\t( vertices[ vtx1 * 3 + 1 ] === vertices[ vtx3 * 3 + 1 ] ) &&\n\t\t\t\t\t( vertices[ vtx1 * 3 + 2 ] === vertices[ vtx3 * 3 + 2 ] ) ) || ( vertices[ vtx2 * 3 ] === vertices[ vtx3 * 3 ] ) &&\n\t\t\t\t\t( vertices[ vtx2 * 3 + 1 ] === vertices[ vtx3 * 3 + 1 ] ) &&\n\t\t\t\t\t( vertices[ vtx2 * 3 + 2 ] === vertices[ vtx3 * 3 + 2 ] ) );\n\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tmgm[ i ] = new Matrix4();\n\n\t\t}\n\n\t\tconst minPatches = body ? 0 : 20;\n\t\tconst maxPatches = bottom ? 32 : 28;\n\n\t\tconst vertPerRow = segments + 1;\n\n\t\tlet surfCount = 0;\n\n\t\tlet vertCount = 0;\n\t\tlet normCount = 0;\n\t\tlet uvCount = 0;\n\n\t\tlet indexCount = 0;\n\n\t\tfor ( let surf = minPatches; surf < maxPatches; surf ++ ) {\n\n\t\t\t// lid is in the middle of the data, patches 20-27,\n\t\t\t// so ignore it for this part of the loop if the lid is not desired\n\t\t\tif ( lid || ( surf < 20 || surf >= 28 ) ) {\n\n\t\t\t\t// get M * G * M matrix for x,y,z\n\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t// get control patches\n\t\t\t\t\tfor ( let r = 0; r < 4; r ++ ) {\n\n\t\t\t\t\t\tfor ( let c = 0; c < 4; c ++ ) {\n\n\t\t\t\t\t\t\t// transposed\n\t\t\t\t\t\t\tg[ c * 4 + r ] = teapotVertices[ teapotPatches[ surf * 16 + r * 4 + c ] * 3 + i ];\n\n\t\t\t\t\t\t\t// is the lid to be made larger, and is this a point on the lid\n\t\t\t\t\t\t\t// that is X or Y?\n\t\t\t\t\t\t\tif ( fitLid && ( surf >= 20 && surf < 28 ) && ( i !== 2 ) ) {\n\n\t\t\t\t\t\t\t\t// increase XY size by 7.7%, found empirically. I don't\n\t\t\t\t\t\t\t\t// increase Z so that the teapot will continue to fit in the\n\t\t\t\t\t\t\t\t// space -1 to 1 for Y (Y is up for the final model).\n\t\t\t\t\t\t\t\tg[ c * 4 + r ] *= 1.077;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Blinn \"fixed\" the teapot by dividing Z by blinnScale, and that's the\n\t\t\t\t\t\t\t// data we now use. The original teapot is taller. Fix it:\n\t\t\t\t\t\t\tif ( ! blinn && ( i === 2 ) ) {\n\n\t\t\t\t\t\t\t\tg[ c * 4 + r ] *= blinnScale;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgmx.set( g[ 0 ], g[ 1 ], g[ 2 ], g[ 3 ], g[ 4 ], g[ 5 ], g[ 6 ], g[ 7 ], g[ 8 ], g[ 9 ], g[ 10 ], g[ 11 ], g[ 12 ], g[ 13 ], g[ 14 ], g[ 15 ] );\n\n\t\t\t\t\ttmtx.multiplyMatrices( gmx, ms );\n\t\t\t\t\tmgm[ i ].multiplyMatrices( mst, tmtx );\n\n\t\t\t\t}\n\n\t\t\t\t// step along, get points, and output\n\t\t\t\tfor ( let sstep = 0; sstep <= segments; sstep ++ ) {\n\n\t\t\t\t\tconst s = sstep / segments;\n\n\t\t\t\t\tfor ( let tstep = 0; tstep <= segments; tstep ++ ) {\n\n\t\t\t\t\t\tconst t = tstep / segments;\n\n\t\t\t\t\t\t// point from basis\n\t\t\t\t\t\t// get power vectors and their derivatives\n\t\t\t\t\t\tfor ( p = 4, sval = tval = 1.0; p --; ) {\n\n\t\t\t\t\t\t\tsp[ p ] = sval;\n\t\t\t\t\t\t\ttp[ p ] = tval;\n\t\t\t\t\t\t\tsval *= s;\n\t\t\t\t\t\t\ttval *= t;\n\n\t\t\t\t\t\t\tif ( p === 3 ) {\n\n\t\t\t\t\t\t\t\tdsp[ p ] = dtp[ p ] = 0.0;\n\t\t\t\t\t\t\t\tdsval = dtval = 1.0;\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tdsp[ p ] = dsval * ( 3 - p );\n\t\t\t\t\t\t\t\tdtp[ p ] = dtval * ( 3 - p );\n\t\t\t\t\t\t\t\tdsval *= s;\n\t\t\t\t\t\t\t\tdtval *= t;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvsp.fromArray( sp );\n\t\t\t\t\t\tvtp.fromArray( tp );\n\t\t\t\t\t\tvdsp.fromArray( dsp );\n\t\t\t\t\t\tvdtp.fromArray( dtp );\n\n\t\t\t\t\t\t// do for x,y,z\n\t\t\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\t// multiply power vectors times matrix to get value\n\t\t\t\t\t\t\ttcoord = vsp.clone();\n\t\t\t\t\t\t\ttcoord.applyMatrix4( mgm[ i ] );\n\t\t\t\t\t\t\tvert[ i ] = tcoord.dot( vtp );\n\n\t\t\t\t\t\t\t// get s and t tangent vectors\n\t\t\t\t\t\t\ttcoord = vdsp.clone();\n\t\t\t\t\t\t\ttcoord.applyMatrix4( mgm[ i ] );\n\t\t\t\t\t\t\tsdir[ i ] = tcoord.dot( vtp );\n\n\t\t\t\t\t\t\ttcoord = vsp.clone();\n\t\t\t\t\t\t\ttcoord.applyMatrix4( mgm[ i ] );\n\t\t\t\t\t\t\ttdir[ i ] = tcoord.dot( vdtp );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find normal\n\t\t\t\t\t\tvsdir.fromArray( sdir );\n\t\t\t\t\t\tvtdir.fromArray( tdir );\n\t\t\t\t\t\tnorm.crossVectors( vtdir, vsdir );\n\t\t\t\t\t\tnorm.normalize();\n\n\t\t\t\t\t\t// if X and Z length is 0, at the cusp, so point the normal up or down, depending on patch number\n\t\t\t\t\t\tif ( vert[ 0 ] === 0 && vert[ 1 ] === 0 ) {\n\n\t\t\t\t\t\t\t// if above the middle of the teapot, normal points up, else down\n\t\t\t\t\t\t\tnormOut.set( 0, vert[ 2 ] > maxHeight2 ? 1 : - 1, 0 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// standard output: rotate on X axis\n\t\t\t\t\t\t\tnormOut.set( norm.x, norm.z, - norm.y );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// store it all\n\t\t\t\t\t\tvertices[ vertCount ++ ] = trueSize * vert[ 0 ];\n\t\t\t\t\t\tvertices[ vertCount ++ ] = trueSize * ( vert[ 2 ] - maxHeight2 );\n\t\t\t\t\t\tvertices[ vertCount ++ ] = - trueSize * vert[ 1 ];\n\n\t\t\t\t\t\tnormals[ normCount ++ ] = normOut.x;\n\t\t\t\t\t\tnormals[ normCount ++ ] = normOut.y;\n\t\t\t\t\t\tnormals[ normCount ++ ] = normOut.z;\n\n\t\t\t\t\t\tuvs[ uvCount ++ ] = 1 - t;\n\t\t\t\t\t\tuvs[ uvCount ++ ] = 1 - s;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// save the faces\n\t\t\t\tfor ( let sstep = 0; sstep < segments; sstep ++ ) {\n\n\t\t\t\t\tfor ( let tstep = 0; tstep < segments; tstep ++ ) {\n\n\t\t\t\t\t\tconst v1 = surfCount * vertPerRow * vertPerRow + sstep * vertPerRow + tstep;\n\t\t\t\t\t\tconst v2 = v1 + 1;\n\t\t\t\t\t\tconst v3 = v2 + vertPerRow;\n\t\t\t\t\t\tconst v4 = v1 + vertPerRow;\n\n\t\t\t\t\t\t// Normals and UVs cannot be shared. Without clone(), you can see the consequences\n\t\t\t\t\t\t// of sharing if you call geometry.applyMatrix4( matrix ).\n\t\t\t\t\t\tif ( notDegenerate( v1, v2, v3 ) ) {\n\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v1;\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v2;\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v3;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( notDegenerate( v1, v3, v4 ) ) {\n\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v1;\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v3;\n\t\t\t\t\t\t\tindices[ indexCount ++ ] = v4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// increment only if a surface was used\n\t\t\t\tsurfCount ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tthis.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new BufferAttribute( uvs, 2 ) );\n\n\t\tthis.computeBoundingSphere();\n\n\t}\n\n}\n\nexport { TeapotGeometry };\n", "/**\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * depth: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\n * }\n */\n\nimport {\n\tExtrudeGeometry\n} from 'three';\n\nclass TextGeometry extends ExtrudeGeometry {\n\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( font === undefined ) {\n\n\t\t\tsuper(); // generate default extrude geometry\n\n\t\t} else {\n\n\t\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t\t// translate parameters to ExtrudeGeometry API\n\n\t\t\tif ( parameters.depth === undefined && parameters.height !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.TextGeometry: .height is now depreciated. Please use .depth instead' ); // @deprecated, r163\n\n\t\t\t}\n\n\t\t\tparameters.depth = parameters.depth !== undefined ?\n\t\t\t\tparameters.depth : parameters.height !== undefined ?\n\t\t\t\t\tparameters.height : 50;\n\n\t\t\t// defaults\n\n\t\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\t\tsuper( shapes, parameters );\n\n\t\t}\n\n\t\tthis.type = 'TextGeometry';\n\n\t}\n\n}\n\n\nexport { TextGeometry };\n", "import {\n\tMesh,\n\tShaderMaterial,\n\tSphereGeometry\n} from 'three';\n\nclass LightProbeHelper extends Mesh {\n\n\tconstructor( lightProbe, size ) {\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\ttype: 'LightProbeHelperMaterial',\n\n\t\t\tuniforms: {\n\n\t\t\t\tsh: { value: lightProbe.sh.coefficients }, // by reference\n\n\t\t\t\tintensity: { value: lightProbe.intensity }\n\n\t\t\t},\n\n\t\t\tvertexShader: [\n\n\t\t\t\t'varying vec3 vNormal;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvNormal = normalize( normalMatrix * normal );',\n\n\t\t\t\t'\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',\n\n\t\t\t\t'}',\n\n\t\t\t].join( '\\n' ),\n\n\t\t\tfragmentShader: [\n\n\t\t\t\t'#define RECIPROCAL_PI 0.318309886',\n\n\t\t\t\t'vec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {',\n\n\t\t\t\t'\t// matrix is assumed to be orthogonal',\n\n\t\t\t\t'\treturn normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );',\n\n\t\t\t\t'}',\n\n\t\t\t\t'// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf',\n\t\t\t\t'vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {',\n\n\t\t\t\t'\t// normal is assumed to have unit length',\n\n\t\t\t\t'\tfloat x = normal.x, y = normal.y, z = normal.z;',\n\n\t\t\t\t'\t// band 0',\n\t\t\t\t'\tvec3 result = shCoefficients[ 0 ] * 0.886227;',\n\n\t\t\t\t'\t// band 1',\n\t\t\t\t'\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;',\n\t\t\t\t'\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;',\n\t\t\t\t'\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;',\n\n\t\t\t\t'\t// band 2',\n\t\t\t\t'\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;',\n\t\t\t\t'\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;',\n\t\t\t\t'\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );',\n\t\t\t\t'\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;',\n\t\t\t\t'\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );',\n\n\t\t\t\t'\treturn result;',\n\n\t\t\t\t'}',\n\n\t\t\t\t'uniform vec3 sh[ 9 ]; // sh coefficients',\n\n\t\t\t\t'uniform float intensity; // light probe intensity',\n\n\t\t\t\t'varying vec3 vNormal;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvec3 normal = normalize( vNormal );',\n\n\t\t\t\t'\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );',\n\n\t\t\t\t'\tvec3 irradiance = shGetIrradianceAt( worldNormal, sh );',\n\n\t\t\t\t'\tvec3 outgoingLight = RECIPROCAL_PI * irradiance * intensity;',\n\n\t\t\t\t'\tgl_FragColor = linearToOutputTexel( vec4( outgoingLight, 1.0 ) );',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' )\n\n\t\t} );\n\n\t\tconst geometry = new SphereGeometry( 1, 32, 16 );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.lightProbe = lightProbe;\n\t\tthis.size = size;\n\t\tthis.type = 'LightProbeHelper';\n\n\t\tthis.onBeforeRender();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tonBeforeRender() {\n\n\t\tthis.position.copy( this.lightProbe.position );\n\n\t\tthis.scale.set( 1, 1, 1 ).multiplyScalar( this.size );\n\n\t\tthis.material.uniforms.intensity.value = this.lightProbe.intensity;\n\n\t}\n\n}\n\nexport { LightProbeHelper };\n", "import {\n\tLineSegments,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tLineBasicMaterial\n} from 'three';\n\nclass OctreeHelper extends LineSegments {\n\n\tconstructor( octree, color = 0xffff00 ) {\n\n\t\tsuper( new BufferGeometry(), new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.octree = octree;\n\t\tthis.color = color;\n\n\t\tthis.type = 'OctreeHelper';\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst vertices = [];\n\n\t\tfunction traverse( tree ) {\n\n\t\t\tfor ( let i = 0; i < tree.length; i ++ ) {\n\n\t\t\t\tconst min = tree[ i ].box.min;\n\t\t\t\tconst max = tree[ i ].box.max;\n\n\t\t\t\tvertices.push( max.x, max.y, max.z ); vertices.push( min.x, max.y, max.z ); // 0, 1\n\t\t\t\tvertices.push( min.x, max.y, max.z ); vertices.push( min.x, min.y, max.z ); // 1, 2\n\t\t\t\tvertices.push( min.x, min.y, max.z ); vertices.push( max.x, min.y, max.z ); // 2, 3\n\t\t\t\tvertices.push( max.x, min.y, max.z ); vertices.push( max.x, max.y, max.z ); // 3, 0\n\n\t\t\t\tvertices.push( max.x, max.y, min.z ); vertices.push( min.x, max.y, min.z ); // 4, 5\n\t\t\t\tvertices.push( min.x, max.y, min.z ); vertices.push( min.x, min.y, min.z ); // 5, 6\n\t\t\t\tvertices.push( min.x, min.y, min.z ); vertices.push( max.x, min.y, min.z ); // 6, 7\n\t\t\t\tvertices.push( max.x, min.y, min.z ); vertices.push( max.x, max.y, min.z ); // 7, 4\n\n\t\t\t\tvertices.push( max.x, max.y, max.z ); vertices.push( max.x, max.y, min.z ); // 0, 4\n\t\t\t\tvertices.push( min.x, max.y, max.z ); vertices.push( min.x, max.y, min.z ); // 1, 5\n\t\t\t\tvertices.push( min.x, min.y, max.z ); vertices.push( min.x, min.y, min.z ); // 2, 6\n\t\t\t\tvertices.push( max.x, min.y, max.z ); vertices.push( max.x, min.y, min.z ); // 3, 7\n\n\t\t\t\ttraverse( tree[ i ].subTrees );\n\n\t\t\t}\n\n\t\t}\n\n\t\ttraverse( this.octree.subTrees );\n\n\t\tthis.geometry.dispose();\n\n\t\tthis.geometry = new BufferGeometry();\n\t\tthis.geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nexport { OctreeHelper };\n", "import {\n\tBufferGeometry,\n\tBufferAttribute,\n\tLineBasicMaterial,\n\tLine,\n\tMathUtils\n} from 'three';\n\nclass PositionalAudioHelper extends Line {\n\n\tconstructor( audio, range = 1, divisionsInnerAngle = 16, divisionsOuterAngle = 2 ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst divisions = divisionsInnerAngle + divisionsOuterAngle * 2;\n\t\tconst positions = new Float32Array( ( divisions * 3 + 3 ) * 3 );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tconst materialInnerAngle = new LineBasicMaterial( { color: 0x00ff00 } );\n\t\tconst materialOuterAngle = new LineBasicMaterial( { color: 0xffff00 } );\n\n\t\tsuper( geometry, [ materialOuterAngle, materialInnerAngle ] );\n\n\t\tthis.audio = audio;\n\t\tthis.range = range;\n\t\tthis.divisionsInnerAngle = divisionsInnerAngle;\n\t\tthis.divisionsOuterAngle = divisionsOuterAngle;\n\t\tthis.type = 'PositionalAudioHelper';\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst audio = this.audio;\n\t\tconst range = this.range;\n\t\tconst divisionsInnerAngle = this.divisionsInnerAngle;\n\t\tconst divisionsOuterAngle = this.divisionsOuterAngle;\n\n\t\tconst coneInnerAngle = MathUtils.degToRad( audio.panner.coneInnerAngle );\n\t\tconst coneOuterAngle = MathUtils.degToRad( audio.panner.coneOuterAngle );\n\n\t\tconst halfConeInnerAngle = coneInnerAngle / 2;\n\t\tconst halfConeOuterAngle = coneOuterAngle / 2;\n\n\t\tlet start = 0;\n\t\tlet count = 0;\n\t\tlet i;\n\t\tlet stride;\n\n\t\tconst geometry = this.geometry;\n\t\tconst positionAttribute = geometry.attributes.position;\n\n\t\tgeometry.clearGroups();\n\n\t\t//\n\n\t\tfunction generateSegment( from, to, divisions, materialIndex ) {\n\n\t\t\tconst step = ( to - from ) / divisions;\n\n\t\t\tpositionAttribute.setXYZ( start, 0, 0, 0 );\n\t\t\tcount ++;\n\n\t\t\tfor ( i = from; i < to; i += step ) {\n\n\t\t\t\tstride = start + count;\n\n\t\t\t\tpositionAttribute.setXYZ( stride, Math.sin( i ) * range, 0, Math.cos( i ) * range );\n\t\t\t\tpositionAttribute.setXYZ( stride + 1, Math.sin( Math.min( i + step, to ) ) * range, 0, Math.cos( Math.min( i + step, to ) ) * range );\n\t\t\t\tpositionAttribute.setXYZ( stride + 2, 0, 0, 0 );\n\n\t\t\t\tcount += 3;\n\n\t\t\t}\n\n\t\t\tgeometry.addGroup( start, count, materialIndex );\n\n\t\t\tstart += count;\n\t\t\tcount = 0;\n\n\t\t}\n\n\t\t//\n\n\t\tgenerateSegment( - halfConeOuterAngle, - halfConeInnerAngle, divisionsOuterAngle, 0 );\n\t\tgenerateSegment( - halfConeInnerAngle, halfConeInnerAngle, divisionsInnerAngle, 1 );\n\t\tgenerateSegment( halfConeInnerAngle, halfConeOuterAngle, divisionsOuterAngle, 0 );\n\n\t\t//\n\n\t\tpositionAttribute.needsUpdate = true;\n\n\t\tif ( coneInnerAngle === coneOuterAngle ) this.material[ 0 ].visible = false;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material[ 0 ].dispose();\n\t\tthis.material[ 1 ].dispose();\n\n\t}\n\n}\n\n\nexport { PositionalAudioHelper };\n", "import {\n\tBackSide,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tLine,\n\tLineBasicMaterial,\n\tMesh,\n\tMeshBasicMaterial\n} from 'three';\n\n/**\n * This helper must be added as a child of the light\n */\n\nclass RectAreaLightHelper extends Line {\n\n\tconstructor( light, color ) {\n\n\t\tconst positions = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tconst material = new LineBasicMaterial( { fog: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.color = color; // optional hardwired color for the helper\n\t\tthis.type = 'RectAreaLightHelper';\n\n\t\t//\n\n\t\tconst positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { side: BackSide, fog: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld() {\n\n\t\tthis.scale.set( 0.5 * this.light.width, 0.5 * this.light.height, 1 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\t\t\tthis.children[ 0 ].material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\n\n\t\t\t// prevent hue shift\n\t\t\tconst c = this.material.color;\n\t\t\tconst max = Math.max( c.r, c.g, c.b );\n\t\t\tif ( max > 1 ) c.multiplyScalar( 1 / max );\n\n\t\t\tthis.children[ 0 ].material.color.copy( this.material.color );\n\n\t\t}\n\n\t\t// ignore world scale on light\n\t\tthis.matrixWorld.extractRotation( this.light.matrixWorld ).scale( this.scale ).copyPosition( this.light.matrixWorld );\n\n\t\tthis.children[ 0 ].matrixWorld.copy( this.matrixWorld );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n}\n\nexport { RectAreaLightHelper };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * @param {Array} geometries\n * @param {Boolean} useGroups\n * @return {BufferGeometry}\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * @param {Array} attributes\n * @return {BufferAttribute}\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferAttribute}\n * @return {BufferAttribute}\n */\nexport function deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * @param {Array} attributes\n * @return {Array}\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n// returns a new, non-interleaved version of the provided attribute\nexport function deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n// deinterleaves all attributes on the geometry\nexport function deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @return {number}\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} tolerance\n * @return {BufferGeometry}\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n * Helpful for Raytracing or Decals.\n * @param {Mesh | Line | Points} object An instance of Mesh, Line or Points.\n * @return {Object} An Object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry\n * @param {number} [creaseAngle]\n * @return {BufferGeometry}\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n", "import {\n\tBoxGeometry,\n\tBufferAttribute,\n\tDoubleSide,\n\tMesh,\n\tPlaneGeometry,\n\tShaderMaterial,\n\tVector3,\n} from 'three';\nimport { mergeGeometries } from '../utils/BufferGeometryUtils.js';\n\nclass TextureHelper extends Mesh {\n\n\tconstructor( texture, width = 1, height = 1, depth = 1 ) {\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\ttype: 'TextureHelperMaterial',\n\n\t\t\tside: DoubleSide,\n\t\t\ttransparent: true,\n\n\t\t\tuniforms: {\n\n\t\t\t\tmap: { value: texture },\n\t\t\t\talpha: { value: getAlpha( texture ) },\n\n\t\t\t},\n\n\t\t\tvertexShader: [\n\n\t\t\t\t'attribute vec3 uvw;',\n\n\t\t\t\t'varying vec3 vUvw;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvUvw = uvw;',\n\n\t\t\t\t'\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',\n\n\t\t\t\t'}',\n\n\t\t\t].join( '\\n' ),\n\n\t\t\tfragmentShader: [\n\n\t\t\t\t'precision highp float;',\n\n\t\t\t\t'precision highp sampler2DArray;',\n\n\t\t\t\t'precision highp sampler3D;',\n\n\t\t\t\t'uniform {samplerType} map;',\n\n\t\t\t\t'uniform float alpha;',\n\n\t\t\t\t'varying vec3 vUvw;',\n\n\t\t\t\t'vec4 textureHelper( in sampler2D map ) { return texture( map, vUvw.xy ); }',\n\n\t\t\t\t'vec4 textureHelper( in sampler2DArray map ) { return texture( map, vUvw ); }',\n\n\t\t\t\t'vec4 textureHelper( in sampler3D map ) { return texture( map, vUvw ); }',\n\n\t\t\t\t'vec4 textureHelper( in samplerCube map ) { return texture( map, vUvw ); }',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tgl_FragColor = linearToOutputTexel( vec4( textureHelper( map ).xyz, alpha ) );',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ).replace( '{samplerType}', getSamplerType( texture ) )\n\n\t\t} );\n\n\t\tconst geometry = texture.isCubeTexture\n\t\t\t? createCubeGeometry( width, height, depth )\n\t\t\t: createSliceGeometry( texture, width, height, depth );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.texture = texture;\n\t\tthis.type = 'TextureHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nfunction getSamplerType( texture ) {\n\n\tif ( texture.isCubeTexture ) {\n\n\t\treturn 'samplerCube';\n\n\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\treturn 'sampler2DArray';\n\n\t} else if ( texture.isData3DTexture || texture.isCompressed3DTexture ) {\n\n\t\treturn 'sampler3D';\n\n\t} else {\n\n\t\treturn 'sampler2D';\n\n\t}\n\n}\n\nfunction getImageCount( texture ) {\n\n\tif ( texture.isCubeTexture ) {\n\n\t\treturn 6;\n\n\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\treturn texture.image.depth;\n\n\t} else if ( texture.isData3DTexture || texture.isCompressed3DTexture ) {\n\n\t\treturn texture.image.depth;\n\n\t} else {\n\n\t\treturn 1;\n\n\t}\n\n}\n\nfunction getAlpha( texture ) {\n\n\tif ( texture.isCubeTexture ) {\n\n\t\treturn 1;\n\n\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\treturn Math.max( 1 / texture.image.depth, 0.25 );\n\n\t} else if ( texture.isData3DTexture || texture.isCompressed3DTexture ) {\n\n\t\treturn Math.max( 1 / texture.image.depth, 0.25 );\n\n\t} else {\n\n\t\treturn 1;\n\n\t}\n\n}\n\nfunction createCubeGeometry( width, height, depth ) {\n\n\tconst geometry = new BoxGeometry( width, height, depth );\n\n\tconst position = geometry.attributes.position;\n\tconst uv = geometry.attributes.uv;\n\tconst uvw = new BufferAttribute( new Float32Array( uv.count * 3 ), 3 );\n\n\tconst _direction = new Vector3();\n\n\tfor ( let j = 0, jl = uv.count; j < jl; ++ j ) {\n\n\t\t_direction.fromBufferAttribute( position, j ).normalize();\n\n\t\tconst u = _direction.x;\n\t\tconst v = _direction.y;\n\t\tconst w = _direction.z;\n\n\t\tuvw.setXYZ( j, u, v, w );\n\n\t}\n\n\tgeometry.deleteAttribute( 'uv' );\n\tgeometry.setAttribute( 'uvw', uvw );\n\n\treturn geometry;\n\n}\n\nfunction createSliceGeometry( texture, width, height, depth ) {\n\n\tconst sliceCount = getImageCount( texture );\n\n\tconst geometries = [];\n\n\tfor ( let i = 0; i < sliceCount; ++ i ) {\n\n\t\tconst geometry = new PlaneGeometry( width, height );\n\n\t\tif ( sliceCount > 1 ) {\n\n\t\t\tgeometry.translate( 0, 0, depth * ( i / ( sliceCount - 1 ) - 0.5 ) );\n\n\t\t}\n\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uvw = new BufferAttribute( new Float32Array( uv.count * 3 ), 3 );\n\n\t\tfor ( let j = 0, jl = uv.count; j < jl; ++ j ) {\n\n\t\t\tconst u = uv.getX( j );\n\t\t\tconst v = texture.flipY ? uv.getY( j ) : 1 - uv.getY( j );\n\t\t\tconst w = sliceCount === 1\n\t\t\t\t? 1\n\t\t\t\t: texture.isDataArrayTexture || texture.isCompressedArrayTexture\n\t\t\t\t\t? i\n\t\t\t\t\t: i / ( sliceCount - 1 );\n\n\t\t\tuvw.setXYZ( j, u, v, w );\n\n\t\t}\n\n\t\tgeometry.deleteAttribute( 'uv' );\n\t\tgeometry.setAttribute( 'uvw', uvw );\n\n\t\tgeometries.push( geometry );\n\n\t}\n\n\treturn mergeGeometries( geometries );\n\n}\n\nexport { TextureHelper };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tLineSegments,\n\tLineBasicMaterial,\n\tMatrix3,\n\tVector3\n} from 'three';\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\nconst _normalMatrix = new Matrix3();\n\nclass VertexNormalsHelper extends LineSegments {\n\n\tconstructor( object, size = 1, color = 0xff0000 ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst nNormals = object.geometry.attributes.normal.count;\n\t\tconst positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\t\tgeometry.setAttribute( 'position', positions );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.size = size;\n\t\tthis.type = 'VertexNormalsHelper';\n\n\t\t//\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\t_normalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tconst matrixWorld = this.object.matrixWorld;\n\n\t\tconst position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tconst objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry ) {\n\n\t\t\tconst objPos = objGeometry.attributes.position;\n\n\t\t\tconst objNorm = objGeometry.attributes.normal;\n\n\t\t\tlet idx = 0;\n\n\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\tfor ( let j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\t_v1.fromBufferAttribute( objPos, j ).applyMatrix4( matrixWorld );\n\n\t\t\t\t_v2.fromBufferAttribute( objNorm, j );\n\n\t\t\t\t_v2.applyMatrix3( _normalMatrix ).normalize().multiplyScalar( this.size ).add( _v1 );\n\n\t\t\t\tposition.setXYZ( idx, _v1.x, _v1.y, _v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, _v2.x, _v2.y, _v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nexport { VertexNormalsHelper };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tLineSegments,\n\tLineBasicMaterial,\n\tVector3\n} from 'three';\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\n\nclass VertexTangentsHelper extends LineSegments {\n\n\tconstructor( object, size = 1, color = 0x00ffff ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst nTangents = object.geometry.attributes.tangent.count;\n\t\tconst positions = new Float32BufferAttribute( nTangents * 2 * 3, 3 );\n\n\t\tgeometry.setAttribute( 'position', positions );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.size = size;\n\t\tthis.type = 'VertexTangentsHelper';\n\n\t\t//\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tconst matrixWorld = this.object.matrixWorld;\n\n\t\tconst position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tconst objGeometry = this.object.geometry;\n\n\t\tconst objPos = objGeometry.attributes.position;\n\n\t\tconst objTan = objGeometry.attributes.tangent;\n\n\t\tlet idx = 0;\n\n\t\t// for simplicity, ignore index and drawcalls, and render every tangent\n\n\t\tfor ( let j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t_v1.fromBufferAttribute( objPos, j ).applyMatrix4( matrixWorld );\n\n\t\t\t_v2.fromBufferAttribute( objTan, j );\n\n\t\t\t_v2.transformDirection( matrixWorld ).multiplyScalar( this.size ).add( _v1 );\n\n\t\t\tposition.setXYZ( idx, _v1.x, _v1.y, _v1.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t\tposition.setXYZ( idx, _v2.x, _v2.y, _v2.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nexport { VertexTangentsHelper };\n", "import {\n\tCylinderGeometry,\n\tCanvasTexture,\n\tColor,\n\tEuler,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tOrthographicCamera,\n\tQuaternion,\n\tRaycaster,\n\tSprite,\n\tSpriteMaterial,\n\tSRGBColorSpace,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\n\nclass ViewHelper extends Object3D {\n\n\tconstructor( camera, domElement ) {\n\n\t\tsuper();\n\n\t\tthis.isViewHelper = true;\n\n\t\tthis.animating = false;\n\t\tthis.center = new Vector3();\n\n\t\tconst color1 = new Color( '#ff4466' );\n\t\tconst color2 = new Color( '#88ff44' );\n\t\tconst color3 = new Color( '#4488ff' );\n\t\tconst color4 = new Color( '#000000' );\n\n\t\tconst options = {};\n\n\t\tconst interactiveObjects = [];\n\t\tconst raycaster = new Raycaster();\n\t\tconst mouse = new Vector2();\n\t\tconst dummy = new Object3D();\n\n\t\tconst orthoCamera = new OrthographicCamera( - 2, 2, 2, - 2, 0, 4 );\n\t\torthoCamera.position.set( 0, 0, 2 );\n\n\t\tconst geometry = new CylinderGeometry( 0.04, 0.04, 0.8, 5 ).rotateZ( - Math.PI / 2 ).translate( 0.4, 0, 0 );\n\n\t\tconst xAxis = new Mesh( geometry, getAxisMaterial( color1 ) );\n\t\tconst yAxis = new Mesh( geometry, getAxisMaterial( color2 ) );\n\t\tconst zAxis = new Mesh( geometry, getAxisMaterial( color3 ) );\n\n\t\tyAxis.rotation.z = Math.PI / 2;\n\t\tzAxis.rotation.y = - Math.PI / 2;\n\n\t\tthis.add( xAxis );\n\t\tthis.add( zAxis );\n\t\tthis.add( yAxis );\n\n\t\tconst spriteMaterial1 = getSpriteMaterial( color1 );\n\t\tconst spriteMaterial2 = getSpriteMaterial( color2 );\n\t\tconst spriteMaterial3 = getSpriteMaterial( color3 );\n\t\tconst spriteMaterial4 = getSpriteMaterial( color4 );\n\n\t\tconst posXAxisHelper = new Sprite( spriteMaterial1 );\n\t\tconst posYAxisHelper = new Sprite( spriteMaterial2 );\n\t\tconst posZAxisHelper = new Sprite( spriteMaterial3 );\n\t\tconst negXAxisHelper = new Sprite( spriteMaterial4 );\n\t\tconst negYAxisHelper = new Sprite( spriteMaterial4 );\n\t\tconst negZAxisHelper = new Sprite( spriteMaterial4 );\n\n\t\tposXAxisHelper.position.x = 1;\n\t\tposYAxisHelper.position.y = 1;\n\t\tposZAxisHelper.position.z = 1;\n\t\tnegXAxisHelper.position.x = - 1;\n\t\tnegYAxisHelper.position.y = - 1;\n\t\tnegZAxisHelper.position.z = - 1;\n\n\t\tnegXAxisHelper.material.opacity = 0.2;\n\t\tnegYAxisHelper.material.opacity = 0.2;\n\t\tnegZAxisHelper.material.opacity = 0.2;\n\n\t\tposXAxisHelper.userData.type = 'posX';\n\t\tposYAxisHelper.userData.type = 'posY';\n\t\tposZAxisHelper.userData.type = 'posZ';\n\t\tnegXAxisHelper.userData.type = 'negX';\n\t\tnegYAxisHelper.userData.type = 'negY';\n\t\tnegZAxisHelper.userData.type = 'negZ';\n\n\t\tthis.add( posXAxisHelper );\n\t\tthis.add( posYAxisHelper );\n\t\tthis.add( posZAxisHelper );\n\t\tthis.add( negXAxisHelper );\n\t\tthis.add( negYAxisHelper );\n\t\tthis.add( negZAxisHelper );\n\n\t\tinteractiveObjects.push( posXAxisHelper );\n\t\tinteractiveObjects.push( posYAxisHelper );\n\t\tinteractiveObjects.push( posZAxisHelper );\n\t\tinteractiveObjects.push( negXAxisHelper );\n\t\tinteractiveObjects.push( negYAxisHelper );\n\t\tinteractiveObjects.push( negZAxisHelper );\n\n\t\tconst point = new Vector3();\n\t\tconst dim = 128;\n\t\tconst turnRate = 2 * Math.PI; // turn rate in angles per second\n\n\t\tthis.render = function ( renderer ) {\n\n\t\t\tthis.quaternion.copy( camera.quaternion ).invert();\n\t\t\tthis.updateMatrixWorld();\n\n\t\t\tpoint.set( 0, 0, 1 );\n\t\t\tpoint.applyQuaternion( camera.quaternion );\n\n\t\t\t//\n\n\t\t\tconst x = domElement.offsetWidth - dim;\n\n\t\t\trenderer.clearDepth();\n\n\t\t\trenderer.getViewport( viewport );\n\t\t\trenderer.setViewport( x, 0, dim, dim );\n\n\t\t\trenderer.render( this, orthoCamera );\n\n\t\t\trenderer.setViewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\n\t\t};\n\n\t\tconst targetPosition = new Vector3();\n\t\tconst targetQuaternion = new Quaternion();\n\n\t\tconst q1 = new Quaternion();\n\t\tconst q2 = new Quaternion();\n\t\tconst viewport = new Vector4();\n\t\tlet radius = 0;\n\n\t\tthis.handleClick = function ( event ) {\n\n\t\t\tif ( this.animating === true ) return false;\n\n\t\t\tconst rect = domElement.getBoundingClientRect();\n\t\t\tconst offsetX = rect.left + ( domElement.offsetWidth - dim );\n\t\t\tconst offsetY = rect.top + ( domElement.offsetHeight - dim );\n\t\t\tmouse.x = ( ( event.clientX - offsetX ) / ( rect.right - offsetX ) ) * 2 - 1;\n\t\t\tmouse.y = - ( ( event.clientY - offsetY ) / ( rect.bottom - offsetY ) ) * 2 + 1;\n\n\t\t\traycaster.setFromCamera( mouse, orthoCamera );\n\n\t\t\tconst intersects = raycaster.intersectObjects( interactiveObjects );\n\n\t\t\tif ( intersects.length > 0 ) {\n\n\t\t\t\tconst intersection = intersects[ 0 ];\n\t\t\t\tconst object = intersection.object;\n\n\t\t\t\tprepareAnimationData( object, this.center );\n\n\t\t\t\tthis.animating = true;\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setLabels = function ( labelX, labelY, labelZ ) {\n\n\t\t\toptions.labelX = labelX;\n\t\t\toptions.labelY = labelY;\n\t\t\toptions.labelZ = labelZ;\n\n\t\t\tupdateLabels();\n\n\t\t};\n\n\t\tthis.setLabelStyle = function ( font, color, radius ) {\n\n\t\t\toptions.font = font;\n\t\t\toptions.color = color;\n\t\t\toptions.radius = radius;\n\n\t\t\tupdateLabels();\n\n\t\t};\n\n\t\tthis.update = function ( delta ) {\n\n\t\t\tconst step = delta * turnRate;\n\n\t\t\t// animate position by doing a slerp and then scaling the position on the unit sphere\n\n\t\t\tq1.rotateTowards( q2, step );\n\t\t\tcamera.position.set( 0, 0, 1 ).applyQuaternion( q1 ).multiplyScalar( radius ).add( this.center );\n\n\t\t\t// animate orientation\n\n\t\t\tcamera.quaternion.rotateTowards( targetQuaternion, step );\n\n\t\t\tif ( q1.angleTo( q2 ) === 0 ) {\n\n\t\t\t\tthis.animating = false;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tgeometry.dispose();\n\n\t\t\txAxis.material.dispose();\n\t\t\tyAxis.material.dispose();\n\t\t\tzAxis.material.dispose();\n\n\t\t\tposXAxisHelper.material.map.dispose();\n\t\t\tposYAxisHelper.material.map.dispose();\n\t\t\tposZAxisHelper.material.map.dispose();\n\t\t\tnegXAxisHelper.material.map.dispose();\n\t\t\tnegYAxisHelper.material.map.dispose();\n\t\t\tnegZAxisHelper.material.map.dispose();\n\n\t\t\tposXAxisHelper.material.dispose();\n\t\t\tposYAxisHelper.material.dispose();\n\t\t\tposZAxisHelper.material.dispose();\n\t\t\tnegXAxisHelper.material.dispose();\n\t\t\tnegYAxisHelper.material.dispose();\n\t\t\tnegZAxisHelper.material.dispose();\n\n\t\t};\n\n\t\tfunction prepareAnimationData( object, focusPoint ) {\n\n\t\t\tswitch ( object.userData.type ) {\n\n\t\t\t\tcase 'posX':\n\t\t\t\t\ttargetPosition.set( 1, 0, 0 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( 0, Math.PI * 0.5, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'posY':\n\t\t\t\t\ttargetPosition.set( 0, 1, 0 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( - Math.PI * 0.5, 0, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'posZ':\n\t\t\t\t\ttargetPosition.set( 0, 0, 1 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler() );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'negX':\n\t\t\t\t\ttargetPosition.set( - 1, 0, 0 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( 0, - Math.PI * 0.5, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'negY':\n\t\t\t\t\ttargetPosition.set( 0, - 1, 0 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( Math.PI * 0.5, 0, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'negZ':\n\t\t\t\t\ttargetPosition.set( 0, 0, - 1 );\n\t\t\t\t\ttargetQuaternion.setFromEuler( new Euler( 0, Math.PI, 0 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error( 'ViewHelper: Invalid axis.' );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tradius = camera.position.distanceTo( focusPoint );\n\t\t\ttargetPosition.multiplyScalar( radius ).add( focusPoint );\n\n\t\t\tdummy.position.copy( focusPoint );\n\n\t\t\tdummy.lookAt( camera.position );\n\t\t\tq1.copy( dummy.quaternion );\n\n\t\t\tdummy.lookAt( targetPosition );\n\t\t\tq2.copy( dummy.quaternion );\n\n\t\t}\n\n\t\tfunction getAxisMaterial( color ) {\n\n\t\t\treturn new MeshBasicMaterial( { color: color, toneMapped: false } );\n\n\t\t}\n\n\t\tfunction getSpriteMaterial( color, text ) {\n\n\t\t\tconst { font = '24px Arial', color: labelColor = '#000000', radius = 14 } = options;\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\tcanvas.width = 64;\n\t\t\tcanvas.height = 64;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc( 32, 32, radius, 0, 2 * Math.PI );\n\t\t\tcontext.closePath();\n\t\t\tcontext.fillStyle = color.getStyle();\n\t\t\tcontext.fill();\n\n\t\t\tif ( text ) {\n\n\t\t\t\tcontext.font = font;\n\t\t\t\tcontext.textAlign = 'center';\n\t\t\t\tcontext.fillStyle = labelColor;\n\t\t\t\tcontext.fillText( text, 32, 41 );\n\n\t\t\t}\n\n\t\t\tconst texture = new CanvasTexture( canvas );\n\t\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\t\treturn new SpriteMaterial( { map: texture, toneMapped: false } );\n\n\t\t}\n\n\t\tfunction updateLabels() {\n\n\t\t\tposXAxisHelper.material.map.dispose();\n\t\t\tposYAxisHelper.material.map.dispose();\n\t\t\tposZAxisHelper.material.map.dispose();\n\n\t\t\tposXAxisHelper.material.dispose();\n\t\t\tposYAxisHelper.material.dispose();\n\t\t\tposZAxisHelper.material.dispose();\n\n\t\t\tposXAxisHelper.material = getSpriteMaterial( color1, options.labelX );\n\t\t\tposYAxisHelper.material = getSpriteMaterial( color2, options.labelY );\n\t\t\tposZAxisHelper.material = getSpriteMaterial( color3, options.labelZ );\n\n\t\t}\n\n\t}\n\n}\n\nexport { ViewHelper };\n", "import {\n\tCanvasTexture,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tPlaneGeometry,\n\tSRGBColorSpace,\n\tColor\n} from 'three';\n\nclass HTMLMesh extends Mesh {\n\n\tconstructor( dom ) {\n\n\t\tconst texture = new HTMLTexture( dom );\n\n\t\tconst geometry = new PlaneGeometry( texture.image.width * 0.001, texture.image.height * 0.001 );\n\t\tconst material = new MeshBasicMaterial( { map: texture, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tfunction onEvent( event ) {\n\n\t\t\tmaterial.map.dispatchDOMEvent( event );\n\n\t\t}\n\n\t\tthis.addEventListener( 'mousedown', onEvent );\n\t\tthis.addEventListener( 'mousemove', onEvent );\n\t\tthis.addEventListener( 'mouseup', onEvent );\n\t\tthis.addEventListener( 'click', onEvent );\n\n\t\tthis.dispose = function () {\n\n\t\t\tgeometry.dispose();\n\t\t\tmaterial.dispose();\n\n\t\t\tmaterial.map.dispose();\n\n\t\t\tcanvases.delete( dom );\n\n\t\t\tthis.removeEventListener( 'mousedown', onEvent );\n\t\t\tthis.removeEventListener( 'mousemove', onEvent );\n\t\t\tthis.removeEventListener( 'mouseup', onEvent );\n\t\t\tthis.removeEventListener( 'click', onEvent );\n\n\t\t};\n\n\t}\n\n}\n\nclass HTMLTexture extends CanvasTexture {\n\n\tconstructor( dom ) {\n\n\t\tsuper( html2canvas( dom ) );\n\n\t\tthis.dom = dom;\n\n\t\tthis.anisotropy = 16;\n\t\tthis.colorSpace = SRGBColorSpace;\n\t\tthis.minFilter = LinearFilter;\n\t\tthis.magFilter = LinearFilter;\n\n\t\t// Create an observer on the DOM, and run html2canvas update in the next loop\n\t\tconst observer = new MutationObserver( () => {\n\n\t\t\tif ( ! this.scheduleUpdate ) {\n\n\t\t\t\t// ideally should use xr.requestAnimationFrame, here setTimeout to avoid passing the renderer\n\t\t\t\tthis.scheduleUpdate = setTimeout( () => this.update(), 16 );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst config = { attributes: true, childList: true, subtree: true, characterData: true };\n\t\tobserver.observe( dom, config );\n\n\t\tthis.observer = observer;\n\n\t}\n\n\tdispatchDOMEvent( event ) {\n\n\t\tif ( event.data ) {\n\n\t\t\thtmlevent( this.dom, event.type, event.data.x, event.data.y );\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tthis.image = html2canvas( this.dom );\n\t\tthis.needsUpdate = true;\n\n\t\tthis.scheduleUpdate = null;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.observer ) {\n\n\t\t\tthis.observer.disconnect();\n\n\t\t}\n\n\t\tthis.scheduleUpdate = clearTimeout( this.scheduleUpdate );\n\n\t\tsuper.dispose();\n\n\t}\n\n}\n\n\n//\n\nconst canvases = new WeakMap();\n\nfunction html2canvas( element ) {\n\n\tconst range = document.createRange();\n\tconst color = new Color();\n\n\tfunction Clipper( context ) {\n\n\t\tconst clips = [];\n\t\tlet isClipping = false;\n\n\t\tfunction doClip() {\n\n\t\t\tif ( isClipping ) {\n\n\t\t\t\tisClipping = false;\n\t\t\t\tcontext.restore();\n\n\t\t\t}\n\n\t\t\tif ( clips.length === 0 ) return;\n\n\t\t\tlet minX = - Infinity, minY = - Infinity;\n\t\t\tlet maxX = Infinity, maxY = Infinity;\n\n\t\t\tfor ( let i = 0; i < clips.length; i ++ ) {\n\n\t\t\t\tconst clip = clips[ i ];\n\n\t\t\t\tminX = Math.max( minX, clip.x );\n\t\t\t\tminY = Math.max( minY, clip.y );\n\t\t\t\tmaxX = Math.min( maxX, clip.x + clip.width );\n\t\t\t\tmaxY = Math.min( maxY, clip.y + clip.height );\n\n\t\t\t}\n\n\t\t\tcontext.save();\n\t\t\tcontext.beginPath();\n\t\t\tcontext.rect( minX, minY, maxX - minX, maxY - minY );\n\t\t\tcontext.clip();\n\n\t\t\tisClipping = true;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tadd: function ( clip ) {\n\n\t\t\t\tclips.push( clip );\n\t\t\t\tdoClip();\n\n\t\t\t},\n\n\t\t\tremove: function () {\n\n\t\t\t\tclips.pop();\n\t\t\t\tdoClip();\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction drawText( style, x, y, string ) {\n\n\t\tif ( string !== '' ) {\n\n\t\t\tif ( style.textTransform === 'uppercase' ) {\n\n\t\t\t\tstring = string.toUpperCase();\n\n\t\t\t}\n\n\t\t\tcontext.font = style.fontWeight + ' ' + style.fontSize + ' ' + style.fontFamily;\n\t\t\tcontext.textBaseline = 'top';\n\t\t\tcontext.fillStyle = style.color;\n\t\t\tcontext.fillText( string, x, y + parseFloat( style.fontSize ) * 0.1 );\n\n\t\t}\n\n\t}\n\n\tfunction buildRectPath( x, y, w, h, r ) {\n\n\t\tif ( w < 2 * r ) r = w / 2;\n\t\tif ( h < 2 * r ) r = h / 2;\n\n\t\tcontext.beginPath();\n\t\tcontext.moveTo( x + r, y );\n\t\tcontext.arcTo( x + w, y, x + w, y + h, r );\n\t\tcontext.arcTo( x + w, y + h, x, y + h, r );\n\t\tcontext.arcTo( x, y + h, x, y, r );\n\t\tcontext.arcTo( x, y, x + w, y, r );\n\t\tcontext.closePath();\n\n\t}\n\n\tfunction drawBorder( style, which, x, y, width, height ) {\n\n\t\tconst borderWidth = style[ which + 'Width' ];\n\t\tconst borderStyle = style[ which + 'Style' ];\n\t\tconst borderColor = style[ which + 'Color' ];\n\n\t\tif ( borderWidth !== '0px' && borderStyle !== 'none' && borderColor !== 'transparent' && borderColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\tcontext.strokeStyle = borderColor;\n\t\t\tcontext.lineWidth = parseFloat( borderWidth );\n\t\t\tcontext.beginPath();\n\t\t\tcontext.moveTo( x, y );\n\t\t\tcontext.lineTo( x + width, y + height );\n\t\t\tcontext.stroke();\n\n\t\t}\n\n\t}\n\n\tfunction drawElement( element, style ) {\n\n\t\t// Do not render invisible elements, comments and scripts.\n\t\tif ( element.nodeType === Node.COMMENT_NODE || element.nodeName === 'SCRIPT' || ( element.style && element.style.display === 'none' ) ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet x = 0, y = 0, width = 0, height = 0;\n\n\t\tif ( element.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t// text\n\n\t\t\trange.selectNode( element );\n\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tdrawText( style, x, y, element.nodeValue.trim() );\n\n\t\t} else if ( element instanceof HTMLCanvasElement ) {\n\n\t\t\t// Canvas element\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\n\t\t context.save();\n\t\t\tconst dpr = window.devicePixelRatio;\n\t\t\tcontext.scale( 1 / dpr, 1 / dpr );\n\t\t\tcontext.drawImage( element, x, y );\n\t\t\tcontext.restore();\n\n\t\t} else if ( element instanceof HTMLImageElement ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tcontext.drawImage( element, x, y, width, height );\n\n\t\t} else {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tstyle = window.getComputedStyle( element );\n\n\t\t\t// Get the border of the element used for fill and border\n\n\t\t\tbuildRectPath( x, y, width, height, parseFloat( style.borderRadius ) );\n\n\t\t\tconst backgroundColor = style.backgroundColor;\n\n\t\t\tif ( backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\tcontext.fillStyle = backgroundColor;\n\t\t\t\tcontext.fill();\n\n\t\t\t}\n\n\t\t\t// If all the borders match then stroke the round rectangle\n\n\t\t\tconst borders = [ 'borderTop', 'borderLeft', 'borderBottom', 'borderRight' ];\n\n\t\t\tlet match = true;\n\t\t\tlet prevBorder = null;\n\n\t\t\tfor ( const border of borders ) {\n\n\t\t\t\tif ( prevBorder !== null ) {\n\n\t\t\t\t\tmatch = ( style[ border + 'Width' ] === style[ prevBorder + 'Width' ] ) &&\n\t\t\t\t\t( style[ border + 'Color' ] === style[ prevBorder + 'Color' ] ) &&\n\t\t\t\t\t( style[ border + 'Style' ] === style[ prevBorder + 'Style' ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( match === false ) break;\n\n\t\t\t\tprevBorder = border;\n\n\t\t\t}\n\n\t\t\tif ( match === true ) {\n\n\t\t\t\t// They all match so stroke the rectangle from before allows for border-radius\n\n\t\t\t\tconst width = parseFloat( style.borderTopWidth );\n\n\t\t\t\tif ( style.borderTopWidth !== '0px' && style.borderTopStyle !== 'none' && style.borderTopColor !== 'transparent' && style.borderTopColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\t\tcontext.strokeStyle = style.borderTopColor;\n\t\t\t\t\tcontext.lineWidth = width;\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Otherwise draw individual borders\n\n\t\t\t\tdrawBorder( style, 'borderTop', x, y, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderLeft', x, y, 0, height );\n\t\t\t\tdrawBorder( style, 'borderBottom', x, y + height, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderRight', x + width, y, 0, height );\n\n\t\t\t}\n\n\t\t\tif ( element instanceof HTMLInputElement ) {\n\n\t\t\t\tlet accentColor = style.accentColor;\n\n\t\t\t\tif ( accentColor === undefined || accentColor === 'auto' ) accentColor = style.color;\n\n\t\t\t\tcolor.set( accentColor );\n\n\t\t\t\tconst luminance = Math.sqrt( 0.299 * ( color.r ** 2 ) + 0.587 * ( color.g ** 2 ) + 0.114 * ( color.b ** 2 ) );\n\t\t\t\tconst accentTextColor = luminance < 0.5 ? 'white' : '#111111';\n\n\t\t\t\tif ( element.type === 'radio' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, height );\n\n\t\t\t\t\tcontext.fillStyle = 'white';\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tbuildRectPath( x + 2, y + 2, width - 4, height - 4, height );\n\n\t\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\t\tcontext.strokeStyle = accentTextColor;\n\t\t\t\t\t\tcontext.lineWidth = 2;\n\t\t\t\t\t\tcontext.fill();\n\t\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'checkbox' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, 2 );\n\n\t\t\t\t\tcontext.fillStyle = element.checked ? accentColor : 'white';\n\t\t\t\t\tcontext.strokeStyle = element.checked ? accentTextColor : accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.stroke();\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tconst currentTextAlign = context.textAlign;\n\n\t\t\t\t\t\tcontext.textAlign = 'center';\n\n\t\t\t\t\t\tconst properties = {\n\t\t\t\t\t\t\tcolor: accentTextColor,\n\t\t\t\t\t\t\tfontFamily: style.fontFamily,\n\t\t\t\t\t\t\tfontSize: height + 'px',\n\t\t\t\t\t\t\tfontWeight: 'bold'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdrawText( properties, x + ( width / 2 ), y, '✔' );\n\n\t\t\t\t\t\tcontext.textAlign = currentTextAlign;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'range' ) {\n\n\t\t\t\t\tconst [ min, max, value ] = [ 'min', 'max', 'value' ].map( property => parseFloat( element[ property ] ) );\n\t\t\t\t\tconst position = ( ( value - min ) / ( max - min ) ) * ( width - height );\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), width, height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentTextColor;\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), position + ( height / 2 ), height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tbuildRectPath( x + position, y, height, height, height / 2 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'color' || element.type === 'text' || element.type === 'number' ) {\n\n\t\t\t\t\tclipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\t\t\t\tdrawText( style, x + parseInt( style.paddingLeft ), y + parseInt( style.paddingTop ), element.value );\n\n\t\t\t\t\tclipper.remove();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t// debug\n\t\tcontext.strokeStyle = '#' + Math.random().toString( 16 ).slice( - 3 );\n\t\tcontext.strokeRect( x - 0.5, y - 0.5, width + 1, height + 1 );\n\t\t*/\n\n\t\tconst isClipping = style.overflow === 'auto' || style.overflow === 'hidden';\n\n\t\tif ( isClipping ) clipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\tdrawElement( element.childNodes[ i ], style );\n\n\t\t}\n\n\t\tif ( isClipping ) clipper.remove();\n\n\t}\n\n\tconst offset = element.getBoundingClientRect();\n\n\tlet canvas = canvases.get( element );\n\n\tif ( canvas === undefined ) {\n\n\t\tcanvas = document.createElement( 'canvas' );\n\t\tcanvas.width = offset.width;\n\t\tcanvas.height = offset.height;\n\t\tcanvases.set( element, canvas );\n\n\t}\n\n\tconst context = canvas.getContext( '2d'/*, { alpha: false }*/ );\n\n\tconst clipper = new Clipper( context );\n\n\t// console.time( 'drawElement' );\n\n\tcontext.clearRect( 0, 0, canvas.width, canvas.height );\n\n\tdrawElement( element );\n\n\t// console.timeEnd( 'drawElement' );\n\n\treturn canvas;\n\n}\n\nfunction htmlevent( element, event, x, y ) {\n\n\tconst mouseEventInit = {\n\t\tclientX: ( x * element.offsetWidth ) + element.offsetLeft,\n\t\tclientY: ( y * element.offsetHeight ) + element.offsetTop,\n\t\tview: element.ownerDocument.defaultView\n\t};\n\n\twindow.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\tconst rect = element.getBoundingClientRect();\n\n\tx = x * rect.width + rect.left;\n\ty = y * rect.height + rect.top;\n\n\tfunction traverse( element ) {\n\n\t\tif ( element.nodeType !== Node.TEXT_NODE && element.nodeType !== Node.COMMENT_NODE ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tif ( x > rect.left && x < rect.right && y > rect.top && y < rect.bottom ) {\n\n\t\t\t\telement.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\t\t\t\tif ( element instanceof HTMLInputElement && element.type === 'range' && ( event === 'mousedown' || event === 'click' ) ) {\n\n\t\t\t\t\tconst [ min, max ] = [ 'min', 'max' ].map( property => parseFloat( element[ property ] ) );\n\n\t\t\t\t\tconst width = rect.width;\n\t\t\t\t\tconst offsetX = x - rect.x;\n\t\t\t\t\tconst proportion = offsetX / width;\n\t\t\t\t\telement.value = min + ( max - min ) * proportion;\n\t\t\t\t\telement.dispatchEvent( new InputEvent( 'input', { bubbles: true } ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\t\ttraverse( element.childNodes[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttraverse( element );\n\n}\n\nexport { HTMLMesh };\n", "import {\n\tGroup,\n\tRaycaster,\n\tVector2\n} from 'three';\n\nconst _pointer = new Vector2();\nconst _event = { type: '', data: _pointer };\n\nconst _raycaster = new Raycaster();\n\nclass InteractiveGroup extends Group {\n\n\tlistenToPointerEvents( renderer, camera ) {\n\n\t\tconst scope = this;\n\t\tconst raycaster = new Raycaster();\n\n\t\tconst element = renderer.domElement;\n\n\t\tfunction onPointerEvent( event ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tconst rect = renderer.domElement.getBoundingClientRect();\n\n\t\t\t_pointer.x = ( event.clientX - rect.left ) / rect.width * 2 - 1;\n\t\t\t_pointer.y = - ( event.clientY - rect.top ) / rect.height * 2 + 1;\n\n\t\t\traycaster.setFromCamera( _pointer, camera );\n\n\t\t\tconst intersects = raycaster.intersectObjects( scope.children, false );\n\n\t\t\tif ( intersects.length > 0 ) {\n\n\t\t\t\tconst intersection = intersects[ 0 ];\n\n\t\t\t\tconst object = intersection.object;\n\t\t\t\tconst uv = intersection.uv;\n\n\t\t\t\t_event.type = event.type;\n\t\t\t\t_event.data.set( uv.x, 1 - uv.y );\n\n\t\t\t\tobject.dispatchEvent( _event );\n\n\t\t\t}\n\n\t\t}\n\n\t\telement.addEventListener( 'pointerdown', onPointerEvent );\n\t\telement.addEventListener( 'pointerup', onPointerEvent );\n\t\telement.addEventListener( 'pointermove', onPointerEvent );\n\t\telement.addEventListener( 'mousedown', onPointerEvent );\n\t\telement.addEventListener( 'mouseup', onPointerEvent );\n\t\telement.addEventListener( 'mousemove', onPointerEvent );\n\t\telement.addEventListener( 'click', onPointerEvent );\n\n\t}\n\n\tlistenToXRControllerEvents( controller ) {\n\n\t\tconst scope = this;\n\n\t\t// TODO: Dispatch pointerevents too\n\n\t\tconst events = {\n\t\t\t'move': 'mousemove',\n\t\t\t'select': 'click',\n\t\t\t'selectstart': 'mousedown',\n\t\t\t'selectend': 'mouseup'\n\t\t};\n\n\t\tfunction onXRControllerEvent( event ) {\n\n\t\t\tconst controller = event.target;\n\n\t\t\t_raycaster.setFromXRController( controller );\n\n\t\t\tconst intersections = _raycaster.intersectObjects( scope.children, false );\n\n\t\t\tif ( intersections.length > 0 ) {\n\n\t\t\t\tconst intersection = intersections[ 0 ];\n\n\t\t\t\tconst object = intersection.object;\n\t\t\t\tconst uv = intersection.uv;\n\n\t\t\t\t_event.type = events[ event.type ];\n\t\t\t\t_event.data.set( uv.x, 1 - uv.y );\n\n\t\t\t\tobject.dispatchEvent( _event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tcontroller.addEventListener( 'move', onXRControllerEvent );\n\t\tcontroller.addEventListener( 'select', onXRControllerEvent );\n\t\tcontroller.addEventListener( 'selectstart', onXRControllerEvent );\n\t\tcontroller.addEventListener( 'selectend', onXRControllerEvent );\n\n\t}\n\n}\n\nexport { InteractiveGroup };\n", "import {\n\tFrustum,\n\tVector3,\n\tMatrix4,\n\tQuaternion,\n} from 'three';\n\n/**\n * This is a class to check whether objects are in a selection area in 3D space\n */\n\nconst _frustum = new Frustum();\nconst _center = new Vector3();\n\nconst _tmpPoint = new Vector3();\n\nconst _vecNear = new Vector3();\nconst _vecTopLeft = new Vector3();\nconst _vecTopRight = new Vector3();\nconst _vecDownRight = new Vector3();\nconst _vecDownLeft = new Vector3();\n\nconst _vecFarTopLeft = new Vector3();\nconst _vecFarTopRight = new Vector3();\nconst _vecFarDownRight = new Vector3();\nconst _vecFarDownLeft = new Vector3();\n\nconst _vectemp1 = new Vector3();\nconst _vectemp2 = new Vector3();\nconst _vectemp3 = new Vector3();\n\nconst _matrix = new Matrix4();\nconst _quaternion = new Quaternion();\nconst _scale = new Vector3();\n\nclass SelectionBox {\n\n\tconstructor( camera, scene, deep = Number.MAX_VALUE ) {\n\n\t\tthis.camera = camera;\n\t\tthis.scene = scene;\n\t\tthis.startPoint = new Vector3();\n\t\tthis.endPoint = new Vector3();\n\t\tthis.collection = [];\n\t\tthis.instances = {};\n\t\tthis.deep = deep;\n\n\t}\n\n\tselect( startPoint, endPoint ) {\n\n\t\tthis.startPoint = startPoint || this.startPoint;\n\t\tthis.endPoint = endPoint || this.endPoint;\n\t\tthis.collection = [];\n\n\t\tthis.updateFrustum( this.startPoint, this.endPoint );\n\t\tthis.searchChildInFrustum( _frustum, this.scene );\n\n\t\treturn this.collection;\n\n\t}\n\n\tupdateFrustum( startPoint, endPoint ) {\n\n\t\tstartPoint = startPoint || this.startPoint;\n\t\tendPoint = endPoint || this.endPoint;\n\n\t\t// Avoid invalid frustum\n\n\t\tif ( startPoint.x === endPoint.x ) {\n\n\t\t\tendPoint.x += Number.EPSILON;\n\n\t\t}\n\n\t\tif ( startPoint.y === endPoint.y ) {\n\n\t\t\tendPoint.y += Number.EPSILON;\n\n\t\t}\n\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.camera.updateMatrixWorld();\n\n\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t_tmpPoint.copy( startPoint );\n\t\t\t_tmpPoint.x = Math.min( startPoint.x, endPoint.x );\n\t\t\t_tmpPoint.y = Math.max( startPoint.y, endPoint.y );\n\t\t\tendPoint.x = Math.max( startPoint.x, endPoint.x );\n\t\t\tendPoint.y = Math.min( startPoint.y, endPoint.y );\n\n\t\t\t_vecNear.setFromMatrixPosition( this.camera.matrixWorld );\n\t\t\t_vecTopLeft.copy( _tmpPoint );\n\t\t\t_vecTopRight.set( endPoint.x, _tmpPoint.y, 0 );\n\t\t\t_vecDownRight.copy( endPoint );\n\t\t\t_vecDownLeft.set( _tmpPoint.x, endPoint.y, 0 );\n\n\t\t\t_vecTopLeft.unproject( this.camera );\n\t\t\t_vecTopRight.unproject( this.camera );\n\t\t\t_vecDownRight.unproject( this.camera );\n\t\t\t_vecDownLeft.unproject( this.camera );\n\n\t\t\t_vectemp1.copy( _vecTopLeft ).sub( _vecNear );\n\t\t\t_vectemp2.copy( _vecTopRight ).sub( _vecNear );\n\t\t\t_vectemp3.copy( _vecDownRight ).sub( _vecNear );\n\t\t\t_vectemp1.normalize();\n\t\t\t_vectemp2.normalize();\n\t\t\t_vectemp3.normalize();\n\n\t\t\t_vectemp1.multiplyScalar( this.deep );\n\t\t\t_vectemp2.multiplyScalar( this.deep );\n\t\t\t_vectemp3.multiplyScalar( this.deep );\n\t\t\t_vectemp1.add( _vecNear );\n\t\t\t_vectemp2.add( _vecNear );\n\t\t\t_vectemp3.add( _vecNear );\n\n\t\t\tconst planes = _frustum.planes;\n\n\t\t\tplanes[ 0 ].setFromCoplanarPoints( _vecNear, _vecTopLeft, _vecTopRight );\n\t\t\tplanes[ 1 ].setFromCoplanarPoints( _vecNear, _vecTopRight, _vecDownRight );\n\t\t\tplanes[ 2 ].setFromCoplanarPoints( _vecDownRight, _vecDownLeft, _vecNear );\n\t\t\tplanes[ 3 ].setFromCoplanarPoints( _vecDownLeft, _vecTopLeft, _vecNear );\n\t\t\tplanes[ 4 ].setFromCoplanarPoints( _vecTopRight, _vecDownRight, _vecDownLeft );\n\t\t\tplanes[ 5 ].setFromCoplanarPoints( _vectemp3, _vectemp2, _vectemp1 );\n\t\t\tplanes[ 5 ].normal.multiplyScalar( - 1 );\n\n\t\t} else if ( this.camera.isOrthographicCamera ) {\n\n\t\t\tconst left = Math.min( startPoint.x, endPoint.x );\n\t\t\tconst top = Math.max( startPoint.y, endPoint.y );\n\t\t\tconst right = Math.max( startPoint.x, endPoint.x );\n\t\t\tconst down = Math.min( startPoint.y, endPoint.y );\n\n\t\t\t_vecTopLeft.set( left, top, - 1 );\n\t\t\t_vecTopRight.set( right, top, - 1 );\n\t\t\t_vecDownRight.set( right, down, - 1 );\n\t\t\t_vecDownLeft.set( left, down, - 1 );\n\n\t\t\t_vecFarTopLeft.set( left, top, 1 );\n\t\t\t_vecFarTopRight.set( right, top, 1 );\n\t\t\t_vecFarDownRight.set( right, down, 1 );\n\t\t\t_vecFarDownLeft.set( left, down, 1 );\n\n\t\t\t_vecTopLeft.unproject( this.camera );\n\t\t\t_vecTopRight.unproject( this.camera );\n\t\t\t_vecDownRight.unproject( this.camera );\n\t\t\t_vecDownLeft.unproject( this.camera );\n\n\t\t\t_vecFarTopLeft.unproject( this.camera );\n\t\t\t_vecFarTopRight.unproject( this.camera );\n\t\t\t_vecFarDownRight.unproject( this.camera );\n\t\t\t_vecFarDownLeft.unproject( this.camera );\n\n\t\t\tconst planes = _frustum.planes;\n\n\t\t\tplanes[ 0 ].setFromCoplanarPoints( _vecTopLeft, _vecFarTopLeft, _vecFarTopRight );\n\t\t\tplanes[ 1 ].setFromCoplanarPoints( _vecTopRight, _vecFarTopRight, _vecFarDownRight );\n\t\t\tplanes[ 2 ].setFromCoplanarPoints( _vecFarDownRight, _vecFarDownLeft, _vecDownLeft );\n\t\t\tplanes[ 3 ].setFromCoplanarPoints( _vecFarDownLeft, _vecFarTopLeft, _vecTopLeft );\n\t\t\tplanes[ 4 ].setFromCoplanarPoints( _vecTopRight, _vecDownRight, _vecDownLeft );\n\t\t\tplanes[ 5 ].setFromCoplanarPoints( _vecFarDownRight, _vecFarTopRight, _vecFarTopLeft );\n\t\t\tplanes[ 5 ].normal.multiplyScalar( - 1 );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.SelectionBox: Unsupported camera type.' );\n\n\t\t}\n\n\t}\n\n\tsearchChildInFrustum( frustum, object ) {\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tif ( object.isInstancedMesh ) {\n\n\t\t\t\tthis.instances[ object.uuid ] = [];\n\n\t\t\t\tfor ( let instanceId = 0; instanceId < object.count; instanceId ++ ) {\n\n\t\t\t\t\tobject.getMatrixAt( instanceId, _matrix );\n\t\t\t\t\t_matrix.decompose( _center, _quaternion, _scale );\n\t\t\t\t\t_center.applyMatrix4( object.matrixWorld );\n\n\t\t\t\t\tif ( frustum.containsPoint( _center ) ) {\n\n\t\t\t\t\t\tthis.instances[ object.uuid ].push( instanceId );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( object.geometry.boundingSphere === null ) object.geometry.computeBoundingSphere();\n\n\t\t\t\t_center.copy( object.geometry.boundingSphere.center );\n\n\t\t\t\t_center.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tif ( frustum.containsPoint( _center ) ) {\n\n\t\t\t\t\tthis.collection.push( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tfor ( let x = 0; x < object.children.length; x ++ ) {\n\n\t\t\t\tthis.searchChildInFrustum( frustum, object.children[ x ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { SelectionBox };\n", "import { Vector2 } from 'three';\n\nclass SelectionHelper {\n\n\tconstructor( renderer, cssClassName ) {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.classList.add( cssClassName );\n\t\tthis.element.style.pointerEvents = 'none';\n\n\t\tthis.renderer = renderer;\n\n\t\tthis.startPoint = new Vector2();\n\t\tthis.pointTopLeft = new Vector2();\n\t\tthis.pointBottomRight = new Vector2();\n\n\t\tthis.isDown = false;\n\t\tthis.enabled = true;\n\n\t\tthis.onPointerDown = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tthis.isDown = true;\n\t\t\tthis.onSelectStart( event );\n\n\t\t}.bind( this );\n\n\t\tthis.onPointerMove = function ( event ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tif ( this.isDown ) {\n\n\t\t\t\tthis.onSelectMove( event );\n\n\t\t\t}\n\n\t\t}.bind( this );\n\n\t\tthis.onPointerUp = function ( ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\tthis.isDown = false;\n\t\t\tthis.onSelectOver();\n\n\t\t}.bind( this );\n\n\t\tthis.renderer.domElement.addEventListener( 'pointerdown', this.onPointerDown );\n\t\tthis.renderer.domElement.addEventListener( 'pointermove', this.onPointerMove );\n\t\tthis.renderer.domElement.addEventListener( 'pointerup', this.onPointerUp );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderer.domElement.removeEventListener( 'pointerdown', this.onPointerDown );\n\t\tthis.renderer.domElement.removeEventListener( 'pointermove', this.onPointerMove );\n\t\tthis.renderer.domElement.removeEventListener( 'pointerup', this.onPointerUp );\n\n\t}\n\n\tonSelectStart( event ) {\n\n\t\tthis.element.style.display = 'none';\n\n\t\tthis.renderer.domElement.parentElement.appendChild( this.element );\n\n\t\tthis.element.style.left = event.clientX + 'px';\n\t\tthis.element.style.top = event.clientY + 'px';\n\t\tthis.element.style.width = '0px';\n\t\tthis.element.style.height = '0px';\n\n\t\tthis.startPoint.x = event.clientX;\n\t\tthis.startPoint.y = event.clientY;\n\n\t}\n\n\tonSelectMove( event ) {\n\n\t\tthis.element.style.display = 'block';\n\n\t\tthis.pointBottomRight.x = Math.max( this.startPoint.x, event.clientX );\n\t\tthis.pointBottomRight.y = Math.max( this.startPoint.y, event.clientY );\n\t\tthis.pointTopLeft.x = Math.min( this.startPoint.x, event.clientX );\n\t\tthis.pointTopLeft.y = Math.min( this.startPoint.y, event.clientY );\n\n\t\tthis.element.style.left = this.pointTopLeft.x + 'px';\n\t\tthis.element.style.top = this.pointTopLeft.y + 'px';\n\t\tthis.element.style.width = ( this.pointBottomRight.x - this.pointTopLeft.x ) + 'px';\n\t\tthis.element.style.height = ( this.pointBottomRight.y - this.pointTopLeft.y ) + 'px';\n\n\t}\n\n\tonSelectOver() {\n\n\t\tthis.element.parentElement.removeChild( this.element );\n\n\t}\n\n}\n\nexport { SelectionHelper };\n", "import {\n\tColor,\n\tLightProbe,\n\tLinearSRGBColorSpace,\n\tSphericalHarmonics3,\n\tVector3,\n\tSRGBColorSpace,\n\tNoColorSpace,\n\tHalfFloatType,\n\tDataUtils\n} from 'three';\n\nclass LightProbeGenerator {\n\n\t// https://www.ppsloan.org/publications/StupidSH36.pdf\n\tstatic fromCubeTexture( cubeTexture ) {\n\n\t\tlet totalWeight = 0;\n\n\t\tconst coord = new Vector3();\n\n\t\tconst dir = new Vector3();\n\n\t\tconst color = new Color();\n\n\t\tconst shBasis = [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\n\t\tconst sh = new SphericalHarmonics3();\n\t\tconst shCoefficients = sh.coefficients;\n\n\t\tfor ( let faceIndex = 0; faceIndex < 6; faceIndex ++ ) {\n\n\t\t\tconst image = cubeTexture.image[ faceIndex ];\n\n\t\t\tconst width = image.width;\n\t\t\tconst height = image.height;\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\n\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, width, height );\n\n\t\t\tconst data = imageData.data;\n\n\t\t\tconst imageWidth = imageData.width; // assumed to be square\n\n\t\t\tconst pixelSize = 2 / imageWidth;\n\n\t\t\tfor ( let i = 0, il = data.length; i < il; i += 4 ) { // RGBA assumed\n\n\t\t\t\t// pixel color\n\t\t\t\tcolor.setRGB( data[ i ] / 255, data[ i + 1 ] / 255, data[ i + 2 ] / 255 );\n\n\t\t\t\t// convert to linear color space\n\t\t\t\tconvertColorToLinear( color, cubeTexture.colorSpace );\n\n\t\t\t\t// pixel coordinate on unit cube\n\n\t\t\t\tconst pixelIndex = i / 4;\n\n\t\t\t\tconst col = - 1 + ( pixelIndex % imageWidth + 0.5 ) * pixelSize;\n\n\t\t\t\tconst row = 1 - ( Math.floor( pixelIndex / imageWidth ) + 0.5 ) * pixelSize;\n\n\t\t\t\tswitch ( faceIndex ) {\n\n\t\t\t\t\tcase 0: coord.set( - 1, row, - col ); break;\n\n\t\t\t\t\tcase 1: coord.set( 1, row, col ); break;\n\n\t\t\t\t\tcase 2: coord.set( - col, 1, - row ); break;\n\n\t\t\t\t\tcase 3: coord.set( - col, - 1, row ); break;\n\n\t\t\t\t\tcase 4: coord.set( - col, row, 1 ); break;\n\n\t\t\t\t\tcase 5: coord.set( col, row, - 1 ); break;\n\n\t\t\t\t}\n\n\t\t\t\t// weight assigned to this pixel\n\n\t\t\t\tconst lengthSq = coord.lengthSq();\n\n\t\t\t\tconst weight = 4 / ( Math.sqrt( lengthSq ) * lengthSq );\n\n\t\t\t\ttotalWeight += weight;\n\n\t\t\t\t// direction vector to this pixel\n\t\t\t\tdir.copy( coord ).normalize();\n\n\t\t\t\t// evaluate SH basis functions in direction dir\n\t\t\t\tSphericalHarmonics3.getBasisAt( dir, shBasis );\n\n\t\t\t\t// accummuulate\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tshCoefficients[ j ].x += shBasis[ j ] * color.r * weight;\n\t\t\t\t\tshCoefficients[ j ].y += shBasis[ j ] * color.g * weight;\n\t\t\t\t\tshCoefficients[ j ].z += shBasis[ j ] * color.b * weight;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalize\n\t\tconst norm = ( 4 * Math.PI ) / totalWeight;\n\n\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\tshCoefficients[ j ].x *= norm;\n\t\t\tshCoefficients[ j ].y *= norm;\n\t\t\tshCoefficients[ j ].z *= norm;\n\n\t\t}\n\n\t\treturn new LightProbe( sh );\n\n\t}\n\n\tstatic fromCubeRenderTarget( renderer, cubeRenderTarget ) {\n\n\t\t// The renderTarget must be set to RGBA in order to make readRenderTargetPixels works\n\t\tlet totalWeight = 0;\n\n\t\tconst coord = new Vector3();\n\n\t\tconst dir = new Vector3();\n\n\t\tconst color = new Color();\n\n\t\tconst shBasis = [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\n\t\tconst sh = new SphericalHarmonics3();\n\t\tconst shCoefficients = sh.coefficients;\n\n\t\tconst dataType = cubeRenderTarget.texture.type;\n\n\t\tfor ( let faceIndex = 0; faceIndex < 6; faceIndex ++ ) {\n\n\t\t\tconst imageWidth = cubeRenderTarget.width; // assumed to be square\n\n\t\t\tlet data;\n\n\t\t\tif ( dataType === HalfFloatType ) {\n\n\t\t\t\tdata = new Uint16Array( imageWidth * imageWidth * 4 );\n\n\t\t\t} else {\n\n\t\t\t\t// assuming UnsignedByteType\n\n\t\t\t\tdata = new Uint8Array( imageWidth * imageWidth * 4 );\n\n\t\t\t}\n\n\t\t\trenderer.readRenderTargetPixels( cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex );\n\n\t\t\tconst pixelSize = 2 / imageWidth;\n\n\t\t\tfor ( let i = 0, il = data.length; i < il; i += 4 ) { // RGBA assumed\n\n\t\t\t\tlet r, g, b;\n\n\t\t\t\tif ( dataType === HalfFloatType ) {\n\n\t\t\t\t\tr = DataUtils.fromHalfFloat( data[ i ] );\n\t\t\t\t\tg = DataUtils.fromHalfFloat( data[ i + 1 ] );\n\t\t\t\t\tb = DataUtils.fromHalfFloat( data[ i + 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tr = data[ i ] / 255;\n\t\t\t\t\tg = data[ i + 1 ] / 255;\n\t\t\t\t\tb = data[ i + 2 ] / 255;\n\n\t\t\t\t}\n\n\t\t\t\t// pixel color\n\t\t\t\tcolor.setRGB( r, g, b );\n\n\t\t\t\t// convert to linear color space\n\t\t\t\tconvertColorToLinear( color, cubeRenderTarget.texture.colorSpace );\n\n\t\t\t\t// pixel coordinate on unit cube\n\n\t\t\t\tconst pixelIndex = i / 4;\n\n\t\t\t\tconst col = - 1 + ( pixelIndex % imageWidth + 0.5 ) * pixelSize;\n\n\t\t\t\tconst row = 1 - ( Math.floor( pixelIndex / imageWidth ) + 0.5 ) * pixelSize;\n\n\t\t\t\tswitch ( faceIndex ) {\n\n\t\t\t\t\tcase 0: coord.set( 1, row, - col ); break;\n\n\t\t\t\t\tcase 1: coord.set( - 1, row, col ); break;\n\n\t\t\t\t\tcase 2: coord.set( col, 1, - row ); break;\n\n\t\t\t\t\tcase 3: coord.set( col, - 1, row ); break;\n\n\t\t\t\t\tcase 4: coord.set( col, row, 1 ); break;\n\n\t\t\t\t\tcase 5: coord.set( - col, row, - 1 ); break;\n\n\t\t\t\t}\n\n\t\t\t\t// weight assigned to this pixel\n\n\t\t\t\tconst lengthSq = coord.lengthSq();\n\n\t\t\t\tconst weight = 4 / ( Math.sqrt( lengthSq ) * lengthSq );\n\n\t\t\t\ttotalWeight += weight;\n\n\t\t\t\t// direction vector to this pixel\n\t\t\t\tdir.copy( coord ).normalize();\n\n\t\t\t\t// evaluate SH basis functions in direction dir\n\t\t\t\tSphericalHarmonics3.getBasisAt( dir, shBasis );\n\n\t\t\t\t// accummuulate\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tshCoefficients[ j ].x += shBasis[ j ] * color.r * weight;\n\t\t\t\t\tshCoefficients[ j ].y += shBasis[ j ] * color.g * weight;\n\t\t\t\t\tshCoefficients[ j ].z += shBasis[ j ] * color.b * weight;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalize\n\t\tconst norm = ( 4 * Math.PI ) / totalWeight;\n\n\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\tshCoefficients[ j ].x *= norm;\n\t\t\tshCoefficients[ j ].y *= norm;\n\t\t\tshCoefficients[ j ].z *= norm;\n\n\t\t}\n\n\t\treturn new LightProbe( sh );\n\n\t}\n\n}\n\nfunction convertColorToLinear( color, colorSpace ) {\n\n\tswitch ( colorSpace ) {\n\n\t\tcase SRGBColorSpace:\n\n\t\t\tcolor.convertSRGBToLinear();\n\t\t\tbreak;\n\n\t\tcase LinearSRGBColorSpace:\n\t\tcase NoColorSpace:\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tconsole.warn( 'WARNING: LightProbeGenerator convertColorToLinear() encountered an unsupported color space.' );\n\t\t\tbreak;\n\n\t}\n\n\treturn color;\n\n}\n\nexport { LightProbeGenerator };\n", "import {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tNearestFilter,\n\tRGBAFormat,\n\tUVMapping\n} from 'three';\n\n/**\n * Uniforms library for RectAreaLight shared webgl shaders\n *\n * NOTE: This is a temporary location for the BRDF approximation texture data\n * based off of Eric Heitz's work (see citation below). BRDF data for\n * RectAreaLight is currently approximated using a precomputed texture\n * of roughly 80kb in size. The hope is to find a better way to include\n * the large texture data before including the full RectAreaLight implementation\n * in the main build files.\n *\n * TODO: figure out a way to compress the LTC BRDF data\n */\n\n// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\n// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt\n// code: https://github.com/selfshadow/ltc_code/\n\nclass RectAreaLightTexturesLib {\n\n\tstatic init() {\n\n\t\t// source: https://github.com/selfshadow/ltc_code/tree/master/fit/results/ltc.js\n\n\t\tconst LTC_MAT_1 = [ 1, 0, 0, 2e-05, 1, 0, 0, 0.000503905, 1, 0, 0, 0.00201562, 1, 0, 0, 0.00453516, 1, 0, 0, 0.00806253, 1, 0, 0, 0.0125978, 1, 0, 0, 0.018141, 1, 0, 0, 0.0246924, 1, 0, 0, 0.0322525, 1, 0, 0, 0.0408213, 1, 0, 0, 0.0503999, 1, 0, 0, 0.0609894, 1, 0, 0, 0.0725906, 1, 0, 0, 0.0852058, 1, 0, 0, 0.0988363, 1, 0, 0, 0.113484, 1, 0, 0, 0.129153, 1, 0, 0, 0.145839, 1, 0, 0, 0.163548, 1, 0, 0, 0.182266, 1, 0, 0, 0.201942, 1, 0, 0, 0.222314, 1, 0, 0, 0.241906, 1, 0, 0, 0.262314, 1, 0, 0, 0.285754, 1, 0, 0, 0.310159, 1, 0, 0, 0.335426, 1, 0, 0, 0.361341, 1, 0, 0, 0.387445, 1, 0, 0, 0.412784, 1, 0, 0, 0.438197, 1, 0, 0, 0.466966, 1, 0, 0, 0.49559, 1, 0, 0, 0.523448, 1, 0, 0, 0.549938, 1, 0, 0, 0.57979, 1, 0, 0, 0.608746, 1, 0, 0, 0.636185, 1, 0, 0, 0.664748, 1, 0, 0, 0.69313, 1, 0, 0, 0.71966, 1, 0, 0, 0.747662, 1, 0, 0, 0.774023, 1, 0, 0, 0.799775, 1, 0, 0, 0.825274, 1, 0, 0, 0.849156, 1, 0, 0, 0.873248, 1, 0, 0, 0.89532, 1, 0, 0, 0.917565, 1, 0, 0, 0.937863, 1, 0, 0, 0.958139, 1, 0, 0, 0.976563, 1, 0, 0, 0.994658, 1, 0, 0, 1.0112, 1, 0, 0, 1.02712, 1, 0, 0, 1.04189, 1, 0, 0, 1.05568, 1, 0, 0, 1.06877, 1, 0, 0, 1.08058, 1, 0, 0, 1.09194, 1, 0, 0, 1.10191, 1, 0, 0, 1.11161, 1, 0, 0, 1.1199, 1, 0, 0, 1.12813, 0.999547, - 4.48815e-07, 0.0224417, 1.99902e-05, 0.999495, - 1.13079e-05, 0.0224406, 0.000503651, 0.999496, - 4.52317e-05, 0.0224406, 0.00201461, 0.999496, - 0.000101772, 0.0224406, 0.00453287, 0.999495, - 0.000180928, 0.0224406, 0.00805845, 0.999497, - 0.000282702, 0.0224406, 0.0125914, 0.999496, - 0.000407096, 0.0224406, 0.0181319, 0.999498, - 0.000554114, 0.0224406, 0.02468, 0.999499, - 0.000723768, 0.0224406, 0.0322363, 0.999495, - 0.000916058, 0.0224405, 0.0408009, 0.999499, - 0.00113101, 0.0224408, 0.050375, 0.999494, - 0.00136863, 0.0224405, 0.0609586, 0.999489, - 0.00162896, 0.0224401, 0.0725537, 0.999489, - 0.00191201, 0.0224414, 0.0851619, 0.999498, - 0.00221787, 0.0224413, 0.0987867, 0.999492, - 0.00254642, 0.0224409, 0.113426, 0.999507, - 0.00289779, 0.0224417, 0.129088, 0.999494, - 0.0032716, 0.0224386, 0.145767, 0.999546, - 0.0036673, 0.0224424, 0.163472, 0.999543, - 0.00408166, 0.0224387, 0.182182, 0.999499, - 0.00450056, 0.0224338, 0.201843, 0.999503, - 0.00483661, 0.0224203, 0.222198, 0.999546, - 0.00452928, 0.022315, 0.241714, 0.999508, - 0.00587403, 0.0224329, 0.262184, 0.999509, - 0.00638806, 0.0224271, 0.285609, 0.999501, - 0.00691028, 0.0224166, 0.309998, 0.999539, - 0.00741979, 0.0223989, 0.335262, 0.999454, - 0.00786282, 0.0223675, 0.361154, 0.999529, - 0.00811928, 0.0222828, 0.387224, 0.999503, - 0.00799941, 0.0221063, 0.41252, 0.999561, - 0.00952753, 0.0223057, 0.438006, 0.999557, - 0.0099134, 0.0222065, 0.466735, 0.999541, - 0.0100935, 0.0220402, 0.495332, 0.999562, - 0.00996821, 0.0218067, 0.523197, 0.999556, - 0.0105031, 0.0217096, 0.550223, 0.999561, - 0.0114191, 0.0217215, 0.579498, 0.999588, - 0.0111818, 0.0213357, 0.608416, 0.999633, - 0.0107725, 0.0208689, 0.635965, 0.999527, - 0.0121671, 0.0210149, 0.664476, 0.999508, - 0.0116005, 0.020431, 0.692786, 0.999568, - 0.0115604, 0.0199791, 0.719709, 0.999671, - 0.0121117, 0.0197415, 0.74737, 0.999688, - 0.0110769, 0.0188846, 0.773692, 0.99962, - 0.0122368, 0.0188452, 0.799534, 0.999823, - 0.0110325, 0.0178001, 0.825046, 0.999599, - 0.0114923, 0.0174221, 0.849075, 0.999619, - 0.0105923, 0.0164345, 0.872999, 0.999613, - 0.0105988, 0.0158227, 0.895371, 0.99964, - 0.00979861, 0.0148131, 0.917364, 0.99977, - 0.00967238, 0.0140721, 0.938002, 0.999726, - 0.00869175, 0.0129543, 0.957917, 0.99973, - 0.00866872, 0.0122329, 0.976557, 0.999773, - 0.00731956, 0.0108958, 0.994459, 0.999811, - 0.00756027, 0.0102715, 1.01118, 0.999862, - 0.00583732, 0.00878781, 1.02701, 0.999835, - 0.00631438, 0.00827529, 1.04186, 0.999871, - 0.00450785, 0.00674583, 1.05569, 0.999867, - 0.00486079, 0.00621041, 1.06861, 0.999939, - 0.00322072, 0.00478301, 1.08064, 0.999918, - 0.00318199, 0.00406395, 1.09181, 1.00003, - 0.00193348, 0.00280682, 1.10207, 0.999928, - 0.00153729, 0.00198741, 1.11152, 0.999933, - 0.000623666, 0.000917714, 1.12009, 1, - 1.02387e-06, 9.07581e-07, 1.12813, 0.997866, - 8.96716e-07, 0.0448334, 1.99584e-05, 0.997987, - 2.25945e-05, 0.0448389, 0.000502891, 0.997987, - 9.03781e-05, 0.0448388, 0.00201156, 0.997985, - 0.000203351, 0.0448388, 0.00452602, 0.997986, - 0.000361514, 0.0448388, 0.00804629, 0.997987, - 0.00056487, 0.0448389, 0.0125724, 0.997988, - 0.000813423, 0.0448389, 0.0181045, 0.997984, - 0.00110718, 0.0448387, 0.0246427, 0.997985, - 0.00144616, 0.0448388, 0.0321875, 0.997987, - 0.00183038, 0.044839, 0.0407392, 0.997983, - 0.00225987, 0.0448387, 0.0502986, 0.997991, - 0.00273467, 0.0448389, 0.0608667, 0.997984, - 0.00325481, 0.0448384, 0.0724444, 0.998002, - 0.00382043, 0.044839, 0.0850348, 0.997997, - 0.00443145, 0.0448396, 0.0986372, 0.998007, - 0.00508796, 0.0448397, 0.113255, 0.998008, - 0.00578985, 0.04484, 0.128891, 0.998003, - 0.00653683, 0.0448384, 0.145548, 0.997983, - 0.00732713, 0.0448358, 0.163221, 0.997985, - 0.00815454, 0.0448358, 0.181899, 0.998005, - 0.00898985, 0.0448286, 0.201533, 0.998026, - 0.00964404, 0.0447934, 0.221821, 0.998055, - 0.00922677, 0.044611, 0.241282, 0.99804, - 0.0117361, 0.0448245, 0.261791, 0.998048, - 0.0127628, 0.0448159, 0.285181, 0.998088, - 0.0138055, 0.0447996, 0.30954, 0.998058, - 0.0148206, 0.0447669, 0.334751, 0.998099, - 0.0156998, 0.044697, 0.36061, 0.998116, - 0.0161976, 0.0445122, 0.386603, 0.998195, - 0.015945, 0.0441711, 0.411844, 0.998168, - 0.0183947, 0.0444255, 0.43773, 0.998184, - 0.0197913, 0.0443809, 0.466009, 0.998251, - 0.0201426, 0.0440689, 0.494574, 0.998305, - 0.0198847, 0.0435632, 0.522405, 0.998273, - 0.0210577, 0.043414, 0.549967, 0.998254, - 0.0227901, 0.0433943, 0.578655, 0.998349, - 0.0223108, 0.0426529, 0.60758, 0.99843, - 0.0223088, 0.042, 0.635524, 0.998373, - 0.0241141, 0.0418987, 0.663621, 0.998425, - 0.0231446, 0.0408118, 0.691906, 0.998504, - 0.0233684, 0.0400565, 0.719339, 0.998443, - 0.0241652, 0.0394634, 0.74643, 0.99848, - 0.0228715, 0.0380002, 0.773086, 0.998569, - 0.023519, 0.0372322, 0.798988, 0.998619, - 0.0223108, 0.0356468, 0.824249, 0.998594, - 0.0223105, 0.034523, 0.848808, 0.998622, - 0.0213426, 0.0328887, 0.87227, 0.998669, - 0.0207912, 0.0314374, 0.895157, 0.998705, - 0.0198416, 0.0296925, 0.916769, 0.998786, - 0.0189168, 0.0279634, 0.937773, 0.998888, - 0.0178811, 0.0261597, 0.957431, 0.99906, - 0.0166845, 0.0242159, 0.976495, 0.999038, - 0.0155464, 0.0222638, 0.994169, 0.999237, - 0.0141349, 0.0201967, 1.01112, 0.999378, - 0.0129324, 0.0181744, 1.02692, 0.999433, - 0.0113192, 0.0159898, 1.04174, 0.999439, - 0.0101244, 0.0140385, 1.05559, 0.999614, - 0.00837456, 0.0117826, 1.06852, 0.999722, - 0.00721769, 0.00983745, 1.08069, 0.999817, - 0.00554067, 0.00769002, 1.09176, 0.99983, - 0.00426961, 0.005782, 1.10211, 0.999964, - 0.00273904, 0.00374503, 1.11152, 1.00001, - 0.00136739, 0.00187176, 1.12031, 0.999946, 3.93227e-05, - 2.8919e-05, 1.12804, 0.995847, - 1.3435e-06, 0.0671785, 1.9916e-05, 0.995464, - 3.38387e-05, 0.0671527, 0.000501622, 0.99547, - 0.000135355, 0.0671531, 0.00200649, 0.995471, - 0.00030455, 0.0671532, 0.00451461, 0.99547, - 0.000541423, 0.0671531, 0.008026, 0.995471, - 0.00084598, 0.0671531, 0.0125407, 0.99547, - 0.00121823, 0.0671531, 0.0180589, 0.99547, - 0.00165817, 0.0671531, 0.0245806, 0.995463, - 0.00216583, 0.0671526, 0.0321062, 0.995468, - 0.00274127, 0.0671527, 0.0406366, 0.995474, - 0.00338447, 0.0671534, 0.0501717, 0.995473, - 0.00409554, 0.0671533, 0.0607131, 0.995478, - 0.00487451, 0.0671531, 0.0722618, 0.995476, - 0.00572148, 0.0671532, 0.0848191, 0.995477, - 0.00663658, 0.0671539, 0.0983882, 0.995498, - 0.00761986, 0.0671541, 0.112972, 0.995509, - 0.00867094, 0.0671542, 0.128568, 0.995509, - 0.00978951, 0.0671531, 0.145183, 0.995503, - 0.0109725, 0.0671491, 0.162808, 0.995501, - 0.012211, 0.0671465, 0.181441, 0.99553, - 0.0134565, 0.0671371, 0.201015, 0.99555, - 0.014391, 0.0670831, 0.221206, 0.99558, - 0.014351, 0.0668883, 0.240813, 0.995577, - 0.0173997, 0.0671055, 0.261257, 0.995602, - 0.0191111, 0.0671178, 0.284467, 0.995623, - 0.0206705, 0.0670946, 0.308765, 0.995658, - 0.022184, 0.0670472, 0.333905, 0.995705, - 0.0234832, 0.0669417, 0.359677, 0.995719, - 0.0241933, 0.0666714, 0.385554, 0.995786, - 0.0243539, 0.066266, 0.410951, 0.995887, - 0.0271866, 0.0664367, 0.437163, 0.995944, - 0.0296012, 0.0664931, 0.464842, 0.996004, - 0.0301045, 0.0660105, 0.49332, 0.996128, - 0.0298311, 0.0652694, 0.521131, 0.996253, - 0.0316426, 0.0650739, 0.549167, 0.996244, - 0.0339043, 0.0649433, 0.57737, 0.996309, - 0.033329, 0.0638926, 0.606073, 0.996417, - 0.0338935, 0.0630849, 0.634527, 0.996372, - 0.0353104, 0.0625083, 0.66256, 0.996542, - 0.0348942, 0.0611986, 0.690516, 0.996568, - 0.0351614, 0.060069, 0.718317, 0.996711, - 0.0354317, 0.0588522, 0.74528, 0.996671, - 0.0349513, 0.0571902, 0.772061, 0.996865, - 0.0345622, 0.0555321, 0.798089, 0.996802, - 0.0342566, 0.0537816, 0.823178, 0.996992, - 0.0330862, 0.0516095, 0.847949, 0.996944, - 0.0324666, 0.0495537, 0.871431, 0.997146, - 0.0309544, 0.0470302, 0.894357, 0.997189, - 0.0299372, 0.0446043, 0.916142, 0.997471, - 0.0281389, 0.0418812, 0.937193, 0.997515, - 0.0268702, 0.0391823, 0.957, 0.997812, - 0.0247166, 0.0361338, 0.975936, 0.998027, - 0.0233525, 0.0333945, 0.99391, 0.998233, - 0.0209839, 0.0301917, 1.01075, 0.998481, - 0.0194309, 0.027271, 1.02669, 0.998859, - 0.0169728, 0.0240162, 1.04173, 0.99894, - 0.0152322, 0.0210517, 1.05551, 0.999132, - 0.0127497, 0.0178632, 1.06856, 0.999369, - 0.0108282, 0.014787, 1.08054, 0.999549, - 0.00845886, 0.0116185, 1.09185, 0.999805, - 0.0063937, 0.00867209, 1.10207, 0.99985, - 0.00414582, 0.00566823, 1.1117, 0.999912, - 0.00207443, 0.00277562, 1.12022, 1.00001, 8.70226e-05, - 5.3766e-05, 1.12832, 0.991943, - 1.78672e-06, 0.0893382, 1.98384e-05, 0.991952, - 4.50183e-05, 0.089339, 0.000499849, 0.991956, - 0.000180074, 0.0893394, 0.0019994, 0.991955, - 0.000405167, 0.0893393, 0.00449867, 0.991953, - 0.000720298, 0.0893391, 0.00799764, 0.991955, - 0.00112548, 0.0893393, 0.0124964, 0.991957, - 0.0016207, 0.0893395, 0.0179951, 0.991958, - 0.00220601, 0.0893396, 0.0244939, 0.991947, - 0.00288137, 0.0893385, 0.0319929, 0.991962, - 0.00364693, 0.0893399, 0.0404933, 0.991965, - 0.00450264, 0.0893399, 0.049995, 0.99198, - 0.00544862, 0.0893411, 0.0604995, 0.99197, - 0.00648491, 0.0893397, 0.0720074, 0.991976, - 0.00761164, 0.089341, 0.0845207, 0.99198, - 0.00882891, 0.0893405, 0.0980413, 0.991982, - 0.0101367, 0.0893396, 0.112571, 0.992008, - 0.011535, 0.0893415, 0.128115, 0.992026, - 0.0130228, 0.0893414, 0.144672, 0.992064, - 0.0145966, 0.0893418, 0.162241, 0.992041, - 0.0162421, 0.0893359, 0.180801, 0.992086, - 0.0178888, 0.0893214, 0.200302, 0.992157, - 0.0190368, 0.0892401, 0.220332, 0.992181, - 0.0195584, 0.0890525, 0.240144, 0.992175, - 0.0227257, 0.0892153, 0.260728, 0.99221, - 0.0254195, 0.089304, 0.283473, 0.99222, - 0.0274883, 0.0892703, 0.307673, 0.992317, - 0.0294905, 0.0892027, 0.332729, 0.992374, - 0.0311861, 0.0890577, 0.358387, 0.992505, - 0.0320656, 0.0886994, 0.384102, 0.992568, - 0.0329715, 0.0883198, 0.409767, 0.992675, - 0.036006, 0.0883602, 0.436145, 0.992746, - 0.0392897, 0.0884591, 0.463217, 0.992873, - 0.0399337, 0.0878287, 0.491557, 0.992934, - 0.040231, 0.0870108, 0.519516, 0.993091, - 0.0422013, 0.0865857, 0.547741, 0.993259, - 0.0443503, 0.0861937, 0.575792, 0.993455, - 0.0446368, 0.0851187, 0.604233, 0.993497, - 0.0454299, 0.0840576, 0.632925, 0.993694, - 0.0463296, 0.0829671, 0.660985, 0.993718, - 0.0470619, 0.0817185, 0.688714, 0.993973, - 0.0468838, 0.0800294, 0.716743, 0.994207, - 0.046705, 0.0781286, 0.74377, 0.994168, - 0.0469698, 0.0763337, 0.77042, 0.9945, - 0.0456816, 0.0738184, 0.796659, 0.994356, - 0.0455518, 0.0715545, 0.821868, 0.994747, - 0.0439488, 0.0686085, 0.846572, 0.994937, - 0.0430056, 0.065869, 0.870435, 0.995142, - 0.0413414, 0.0626446, 0.893272, 0.995451, - 0.0396521, 0.05929, 0.915376, 0.995445, - 0.0378453, 0.0558503, 0.936196, 0.995967, - 0.0355219, 0.0520949, 0.956376, 0.996094, - 0.0335146, 0.048377, 0.975327, 0.996622, - 0.030682, 0.0442575, 0.993471, 0.996938, - 0.0285504, 0.0404693, 1.01052, 0.997383, - 0.0253399, 0.0360903, 1.02637, 0.997714, - 0.0231651, 0.0322176, 1.04139, 0.998249, - 0.0198138, 0.0278433, 1.05542, 0.998596, - 0.0174337, 0.0238759, 1.06846, 0.998946, - 0.0141349, 0.0195944, 1.08056, 0.99928, - 0.0115603, 0.0156279, 1.09181, 0.999507, - 0.00839065, 0.0114607, 1.10213, 0.999697, - 0.005666, 0.00763325, 1.11169, 0.999869, - 0.00269902, 0.00364946, 1.12042, 1.00001, 6.23836e-05, - 3.19288e-05, 1.12832, 0.987221, - 2.22675e-06, 0.111332, 1.97456e-05, 0.98739, - 5.61116e-05, 0.111351, 0.000497563, 0.987448, - 0.000224453, 0.111357, 0.00199031, 0.987441, - 0.000505019, 0.111357, 0.0044782, 0.987442, - 0.000897816, 0.111357, 0.00796129, 0.987442, - 0.00140284, 0.111357, 0.0124396, 0.987444, - 0.00202012, 0.111357, 0.0179132, 0.987442, - 0.00274964, 0.111357, 0.0243824, 0.987446, - 0.00359147, 0.111357, 0.0318474, 0.987435, - 0.00454562, 0.111356, 0.0403086, 0.987461, - 0.00561225, 0.111358, 0.0497678, 0.987458, - 0.00679125, 0.111358, 0.0602239, 0.987443, - 0.0080828, 0.111356, 0.0716792, 0.987476, - 0.0094872, 0.111358, 0.0841364, 0.98749, - 0.0110044, 0.111361, 0.097597, 0.987508, - 0.0126344, 0.111362, 0.112062, 0.987494, - 0.0143767, 0.111357, 0.127533, 0.987526, - 0.0162307, 0.111359, 0.144015, 0.987558, - 0.0181912, 0.111361, 0.161502, 0.987602, - 0.0202393, 0.111355, 0.179979, 0.987692, - 0.022273, 0.111346, 0.199386, 0.987702, - 0.0235306, 0.111215, 0.219183, 0.987789, - 0.0247628, 0.111061, 0.239202, 0.987776, - 0.0280668, 0.111171, 0.259957, 0.987856, - 0.0316751, 0.111327, 0.282198, 0.987912, - 0.0342468, 0.111282, 0.306294, 0.988, - 0.0367205, 0.111198, 0.331219, 0.988055, - 0.0387766, 0.110994, 0.356708, 0.988241, - 0.0397722, 0.110547, 0.382234, 0.988399, - 0.0416076, 0.110198, 0.408227, 0.988539, - 0.0448192, 0.110137, 0.434662, 0.988661, - 0.0483793, 0.110143, 0.461442, 0.988967, - 0.0495895, 0.109453, 0.489318, 0.989073, - 0.0506797, 0.108628, 0.517516, 0.989274, - 0.0526953, 0.108003, 0.545844, 0.989528, - 0.054578, 0.107255, 0.573823, 0.989709, - 0.0561503, 0.106294, 0.601944, 0.989991, - 0.056866, 0.104896, 0.630855, 0.990392, - 0.0572914, 0.103336, 0.658925, 0.990374, - 0.0586224, 0.10189, 0.686661, 0.990747, - 0.0584764, 0.099783, 0.714548, 0.991041, - 0.0582662, 0.0974309, 0.74186, 0.991236, - 0.0584118, 0.0951678, 0.768422, 0.991585, - 0.0573055, 0.0921581, 0.794817, 0.991984, - 0.0564241, 0.0891167, 0.820336, 0.9921, - 0.0553608, 0.085805, 0.84493, 0.992749, - 0.0533816, 0.0820354, 0.868961, 0.99288, - 0.0518661, 0.0782181, 0.891931, 0.993511, - 0.0492492, 0.0738935, 0.914186, 0.993617, - 0.0471956, 0.0696402, 0.93532, 0.99411, - 0.044216, 0.0649659, 0.95543, 0.994595, - 0.0416654, 0.0603177, 0.974685, 0.994976, - 0.0384314, 0.0553493, 0.992807, 0.995579, - 0.0353491, 0.0503942, 1.00996, 0.996069, - 0.0319787, 0.0452123, 1.02606, 0.996718, - 0.028472, 0.0400112, 1.04114, 0.997173, - 0.0250789, 0.0349456, 1.05517, 0.997818, - 0.0213326, 0.029653, 1.0683, 0.998318, - 0.0178509, 0.024549, 1.0805, 0.998853, - 0.0141118, 0.0194197, 1.09177, 0.999218, - 0.0105914, 0.0143869, 1.1022, 0.999594, - 0.00693474, 0.00943517, 1.11175, 0.99975, - 0.00340478, 0.00464051, 1.12056, 1.00001, 0.000109172, - 0.000112821, 1.12853, 0.983383, - 2.66524e-06, 0.133358, 1.96534e-05, 0.981942, - 6.71009e-05, 0.133162, 0.000494804, 0.981946, - 0.000268405, 0.133163, 0.00197923, 0.981944, - 0.000603912, 0.133163, 0.00445326, 0.981941, - 0.00107362, 0.133162, 0.00791693, 0.981946, - 0.00167755, 0.133163, 0.0123703, 0.981944, - 0.00241569, 0.133162, 0.0178135, 0.981945, - 0.00328807, 0.133163, 0.0242466, 0.981945, - 0.00429472, 0.133162, 0.03167, 0.981955, - 0.00543573, 0.133164, 0.0400846, 0.981951, - 0.00671105, 0.133163, 0.0494901, 0.981968, - 0.00812092, 0.133165, 0.0598886, 0.981979, - 0.00966541, 0.133166, 0.0712811, 0.981996, - 0.0113446, 0.133168, 0.083669, 0.982014, - 0.0131585, 0.133169, 0.0970533, 0.982011, - 0.0151073, 0.133167, 0.111438, 0.982062, - 0.0171906, 0.133172, 0.126826, 0.9821, - 0.0194067, 0.133175, 0.143215, 0.982149, - 0.0217502, 0.133176, 0.160609, 0.982163, - 0.0241945, 0.133173, 0.178981, 0.982247, - 0.0265907, 0.133148, 0.198249, 0.982291, - 0.027916, 0.132974, 0.217795, 0.982396, - 0.0299663, 0.132868, 0.238042, 0.982456, - 0.0334544, 0.132934, 0.258901, 0.982499, - 0.0378636, 0.133137, 0.280639, 0.982617, - 0.0409274, 0.133085, 0.304604, 0.98274, - 0.0438523, 0.132985, 0.329376, 0.982944, - 0.0462288, 0.132728, 0.354697, 0.98308, - 0.0475995, 0.132228, 0.380102, 0.983391, - 0.0501901, 0.131924, 0.406256, 0.983514, - 0.0535899, 0.131737, 0.432735, 0.98373, - 0.0571858, 0.131567, 0.459359, 0.984056, - 0.0592353, 0.130932, 0.486637, 0.984234, - 0.0610488, 0.130092, 0.51509, 0.984748, - 0.0630758, 0.12923, 0.543461, 0.985073, - 0.0647398, 0.128174, 0.571376, 0.985195, - 0.0671941, 0.127133, 0.599414, 0.985734, - 0.0681345, 0.125576, 0.628134, 0.986241, - 0.0686089, 0.123639, 0.656399, 0.986356, - 0.0698511, 0.121834, 0.684258, 0.986894, - 0.0700931, 0.119454, 0.711818, 0.987382, - 0.0698321, 0.116718, 0.739511, 0.988109, - 0.0693975, 0.113699, 0.766267, 0.988363, - 0.0689584, 0.110454, 0.792456, 0.989112, - 0.0672353, 0.106602, 0.81813, 0.989241, - 0.0662034, 0.10267, 0.842889, 0.990333, - 0.0638938, 0.0981381, 0.867204, 0.990591, - 0.0618534, 0.0935388, 0.89038, 0.991106, - 0.0593117, 0.088553, 0.912576, 0.991919, - 0.0562676, 0.0832187, 0.934118, 0.992111, - 0.0534085, 0.0778302, 0.954254, 0.992997, - 0.0495459, 0.0720453, 0.973722, 0.993317, - 0.0463707, 0.0663458, 0.991949, 0.994133, - 0.0421245, 0.0601883, 1.00936, 0.994705, - 0.0384977, 0.0542501, 1.02559, 0.995495, - 0.0340956, 0.0479862, 1.04083, 0.996206, - 0.030105, 0.041887, 1.05497, 0.996971, - 0.0256095, 0.0355355, 1.06824, 0.997796, - 0.0213932, 0.0293655, 1.08056, 0.998272, - 0.0169612, 0.0232926, 1.09182, 0.998857, - 0.0126756, 0.0172786, 1.10219, 0.99939, - 0.00832486, 0.0113156, 1.11192, 0.999752, - 0.00410826, 0.00557892, 1.12075, 1, 0.000150957, - 0.000119101, 1.12885, 0.975169, - 3.09397e-06, 0.154669, 1.95073e-05, 0.975439, - 7.79608e-05, 0.154712, 0.000491534, 0.975464, - 0.000311847, 0.154716, 0.00196617, 0.975464, - 0.000701656, 0.154716, 0.00442387, 0.975462, - 0.0012474, 0.154715, 0.0078647, 0.975461, - 0.00194906, 0.154715, 0.0122886, 0.975464, - 0.00280667, 0.154715, 0.0176959, 0.975468, - 0.00382025, 0.154716, 0.0240867, 0.975471, - 0.00498985, 0.154716, 0.0314612, 0.975472, - 0.00631541, 0.154717, 0.0398199, 0.975486, - 0.00779719, 0.154718, 0.0491639, 0.975489, - 0.00943505, 0.154718, 0.0594932, 0.975509, - 0.0112295, 0.154721, 0.0708113, 0.97554, - 0.0131802, 0.154724, 0.0831176, 0.975557, - 0.0152876, 0.154726, 0.096415, 0.975585, - 0.0175512, 0.154728, 0.110705, 0.975605, - 0.0199713, 0.154729, 0.125992, 0.975645, - 0.0225447, 0.154729, 0.142272, 0.975711, - 0.0252649, 0.154735, 0.159549, 0.975788, - 0.0280986, 0.154736, 0.177805, 0.975872, - 0.0308232, 0.154704, 0.196911, 0.975968, - 0.0324841, 0.154525, 0.216324, 0.976063, - 0.0351281, 0.154432, 0.236628, 0.976157, - 0.0388618, 0.15446, 0.257539, 0.976204, - 0.0437704, 0.154665, 0.278975, 0.976358, - 0.047514, 0.154652, 0.302606, 0.976571, - 0.0508638, 0.154535, 0.327204, 0.976725, - 0.0534995, 0.154221, 0.352276, 0.977013, - 0.0555547, 0.153737, 0.377696, 0.977294, - 0.0586728, 0.153403, 0.403855, 0.977602, - 0.0622715, 0.15312, 0.430333, 0.977932, - 0.0658166, 0.152755, 0.456855, 0.978241, - 0.0689877, 0.152233, 0.483668, 0.978602, - 0.0712805, 0.15132, 0.512097, 0.979234, - 0.0732775, 0.150235, 0.540455, 0.97977, - 0.075163, 0.148978, 0.568486, 0.979995, - 0.0778026, 0.147755, 0.596524, 0.98078, - 0.0791854, 0.146019, 0.624825, 0.981628, - 0.0799666, 0.143906, 0.653403, 0.982067, - 0.0808532, 0.141561, 0.681445, 0.98271, - 0.0816024, 0.139025, 0.708918, 0.983734, - 0.0812511, 0.135764, 0.736594, 0.98431, - 0.0806201, 0.132152, 0.763576, 0.985071, - 0.0801605, 0.12846, 0.789797, 0.98618, - 0.0784208, 0.124084, 0.815804, 0.986886, - 0.0766643, 0.1193, 0.840869, 0.987485, - 0.0747744, 0.114236, 0.864952, 0.988431, - 0.0716701, 0.108654, 0.888431, 0.988886, - 0.0691609, 0.102994, 0.910963, 0.990024, - 0.0654048, 0.0967278, 0.932629, 0.990401, - 0.0619765, 0.090384, 0.95313, 0.991093, - 0.0579296, 0.0837885, 0.972587, 0.992018, - 0.0536576, 0.0770171, 0.991184, 0.992536, - 0.0493719, 0.0701486, 1.00863, 0.993421, - 0.0444813, 0.062953, 1.02494, 0.993928, - 0.040008, 0.0560455, 1.04017, 0.994994, - 0.0347982, 0.04856, 1.05463, 0.995866, - 0.0301017, 0.0416152, 1.06807, 0.996916, - 0.0248225, 0.0342597, 1.08039, 0.997766, - 0.0199229, 0.0271668, 1.09177, 0.998479, - 0.0147422, 0.0201387, 1.10235, 0.99921, - 0.00980173, 0.0131944, 1.11206, 0.999652, - 0.0047426, 0.00640712, 1.12104, 0.999998, 8.91673e-05, - 0.00010379, 1.12906, 0.967868, - 3.51885e-06, 0.175947, 1.93569e-05, 0.968001, - 8.86733e-05, 0.175972, 0.000487782, 0.96801, - 0.000354697, 0.175973, 0.00195115, 0.968012, - 0.000798063, 0.175974, 0.00439006, 0.968011, - 0.00141879, 0.175973, 0.00780461, 0.968011, - 0.00221686, 0.175973, 0.0121948, 0.968016, - 0.00319231, 0.175974, 0.0175607, 0.968019, - 0.00434515, 0.175974, 0.0239027, 0.968018, - 0.00567538, 0.175974, 0.0312208, 0.968033, - 0.00718308, 0.175977, 0.0395158, 0.968049, - 0.00886836, 0.175979, 0.0487885, 0.968047, - 0.0107312, 0.175978, 0.0590394, 0.968072, - 0.0127719, 0.175981, 0.0702705, 0.968108, - 0.0149905, 0.175986, 0.0824836, 0.968112, - 0.0173866, 0.175985, 0.0956783, 0.968173, - 0.0199611, 0.175993, 0.109862, 0.96827, - 0.0227128, 0.176008, 0.125033, 0.968292, - 0.025639, 0.17601, 0.141193, 0.968339, - 0.0287299, 0.176007, 0.158336, 0.968389, - 0.0319399, 0.176001, 0.176441, 0.968501, - 0.034941, 0.175962, 0.195359, 0.968646, - 0.0370812, 0.175793, 0.214686, 0.968789, - 0.0402329, 0.175708, 0.234973, 0.96886, - 0.0442601, 0.1757, 0.255871, 0.969013, - 0.049398, 0.175876, 0.277238, 0.969242, - 0.0539932, 0.17594, 0.300326, 0.969419, - 0.0577299, 0.175781, 0.324702, 0.969763, - 0.0605643, 0.175432, 0.349527, 0.970093, - 0.0634488, 0.174992, 0.374976, 0.970361, - 0.0670589, 0.174611, 0.401097, 0.970825, - 0.0708246, 0.174226, 0.427496, 0.971214, - 0.0742871, 0.173684, 0.453858, 0.971622, - 0.0782608, 0.173186, 0.480637, 0.972175, - 0.0813151, 0.172288, 0.508655, 0.972944, - 0.0832678, 0.170979, 0.536973, 0.973595, - 0.0855964, 0.169573, 0.565138, 0.974345, - 0.0882163, 0.168152, 0.593222, 0.975233, - 0.0901671, 0.166314, 0.621201, 0.976239, - 0.0912111, 0.163931, 0.649919, 0.977289, - 0.0916959, 0.161106, 0.678011, 0.978076, - 0.0927061, 0.158272, 0.705717, 0.979533, - 0.0925562, 0.15475, 0.733228, 0.980335, - 0.0918159, 0.150638, 0.760454, 0.981808, - 0.0908508, 0.146201, 0.786918, 0.983061, - 0.0896172, 0.141386, 0.812953, 0.984148, - 0.0871588, 0.135837, 0.838281, 0.985047, - 0.0850624, 0.130135, 0.862594, 0.986219, - 0.0818541, 0.123882, 0.88633, 0.987043, - 0.0784523, 0.117126, 0.908952, 0.988107, - 0.0749601, 0.110341, 0.930744, 0.988955, - 0.0703548, 0.102885, 0.951728, 0.989426, - 0.0662798, 0.0954167, 0.971166, 0.990421, - 0.0610834, 0.0876331, 0.989984, 0.991032, - 0.0562936, 0.0797785, 1.00765, 0.992041, - 0.0508154, 0.0718166, 1.02434, 0.992794, - 0.0454045, 0.0637125, 1.03976, 0.993691, - 0.0398194, 0.0555338, 1.05418, 0.994778, - 0.0341482, 0.0473388, 1.06772, 0.995915, - 0.028428, 0.0391016, 1.08028, 0.997109, - 0.022642, 0.0309953, 1.09185, 0.998095, - 0.0168738, 0.0230288, 1.10247, 0.998985, - 0.0111274, 0.0150722, 1.11229, 0.999581, - 0.00543881, 0.00740605, 1.12131, 1.00003, 0.000162239, - 0.000105549, 1.12946, 0.959505, - 3.93734e-06, 0.196876, 1.91893e-05, 0.959599, - 9.92157e-05, 0.196895, 0.000483544, 0.959641, - 0.000396868, 0.196903, 0.0019342, 0.959599, - 0.000892948, 0.196895, 0.00435193, 0.959603, - 0.00158747, 0.196896, 0.0077368, 0.959604, - 0.00248042, 0.196896, 0.0120888, 0.959605, - 0.00357184, 0.196896, 0.0174082, 0.959605, - 0.00486169, 0.196896, 0.0236949, 0.959613, - 0.00635008, 0.196897, 0.0309497, 0.959619, - 0.00803696, 0.196898, 0.0391725, 0.959636, - 0.00992255, 0.196901, 0.0483649, 0.959634, - 0.0120067, 0.1969, 0.0585266, 0.959675, - 0.0142898, 0.196906, 0.0696609, 0.959712, - 0.0167717, 0.196911, 0.0817678, 0.959752, - 0.0194524, 0.196918, 0.0948494, 0.959807, - 0.0223321, 0.196925, 0.10891, 0.959828, - 0.0254091, 0.196924, 0.123947, 0.959906, - 0.0286815, 0.196934, 0.139968, 0.960005, - 0.0321371, 0.196944, 0.156968, 0.960071, - 0.0357114, 0.196936, 0.17491, 0.960237, - 0.0389064, 0.196882, 0.193597, 0.960367, - 0.041623, 0.196731, 0.21285, 0.960562, - 0.0452655, 0.196654, 0.233075, 0.960735, - 0.0496207, 0.196643, 0.253941, 0.960913, - 0.0549379, 0.196774, 0.275278, 0.961121, - 0.0603414, 0.196893, 0.297733, 0.96139, - 0.0644244, 0.196717, 0.321877, 0.961818, - 0.067556, 0.196314, 0.346476, 0.962175, - 0.0712709, 0.195917, 0.371907, 0.96255, - 0.0752848, 0.1955, 0.397916, 0.963164, - 0.0792073, 0.195026, 0.424229, 0.963782, - 0.0828225, 0.194424, 0.450637, 0.964306, - 0.0873119, 0.193831, 0.477288, 0.964923, - 0.0911051, 0.192973, 0.504716, 0.966048, - 0.093251, 0.19151, 0.533053, 0.967024, - 0.0958983, 0.190013, 0.561366, 0.968038, - 0.09835, 0.188253, 0.589464, 0.969152, - 0.100754, 0.186257, 0.617433, 0.970557, - 0.102239, 0.183775, 0.645801, 0.972104, - 0.102767, 0.180645, 0.674278, 0.973203, - 0.103492, 0.177242, 0.702004, 0.975123, - 0.103793, 0.17345, 0.729529, 0.97641, - 0.102839, 0.168886, 0.756712, 0.978313, - 0.101687, 0.163892, 0.783801, 0.980036, - 0.100314, 0.158439, 0.809671, 0.981339, - 0.097836, 0.152211, 0.835402, 0.982794, - 0.0950006, 0.145679, 0.860081, 0.984123, - 0.0920994, 0.138949, 0.883757, 0.984918, - 0.0878641, 0.131283, 0.90685, 0.985999, - 0.083939, 0.123464, 0.928786, 0.987151, - 0.0791234, 0.115324, 0.94983, 0.987827, - 0.0739332, 0.106854, 0.96962, 0.988806, - 0.0688088, 0.0982691, 0.98861, 0.989588, - 0.0628962, 0.0893456, 1.00667, 0.990438, - 0.0573146, 0.0805392, 1.02344, 0.991506, - 0.0509433, 0.0713725, 1.03933, 0.992492, - 0.0448724, 0.0623732, 1.05378, 0.993663, - 0.0383497, 0.0530838, 1.06747, 0.994956, - 0.0319593, 0.0439512, 1.08007, 0.99634, - 0.025401, 0.0347803, 1.09182, 0.99761, - 0.0189687, 0.0257954, 1.1025, 0.99863, - 0.0124441, 0.0169893, 1.11247, 0.99947, - 0.00614003, 0.00829498, 1.12151, 1.00008, 0.000216624, - 0.000146107, 1.12993, 0.950129, - 4.34955e-06, 0.217413, 1.90081e-05, 0.950264, - 0.00010957, 0.217444, 0.00047884, 0.9503, - 0.000438299, 0.217451, 0.00191543, 0.950246, - 0.000986124, 0.21744, 0.00430951, 0.950246, - 0.00175311, 0.21744, 0.00766137, 0.950245, - 0.00273923, 0.21744, 0.011971, 0.950253, - 0.00394453, 0.217441, 0.0172385, 0.950258, - 0.00536897, 0.217442, 0.0234641, 0.950267, - 0.00701262, 0.217444, 0.030648, 0.950277, - 0.00887551, 0.217446, 0.038791, 0.950284, - 0.0109576, 0.217446, 0.0478931, 0.950312, - 0.0132591, 0.217451, 0.0579568, 0.950334, - 0.01578, 0.217454, 0.0689821, 0.950378, - 0.0185204, 0.217462, 0.0809714, 0.950417, - 0.0214803, 0.217467, 0.0939265, 0.950488, - 0.0246594, 0.217479, 0.10785, 0.950534, - 0.0280565, 0.217483, 0.122743, 0.950633, - 0.0316685, 0.217498, 0.138611, 0.950698, - 0.0354787, 0.217499, 0.155442, 0.950844, - 0.0394003, 0.217507, 0.173208, 0.950999, - 0.0426812, 0.217419, 0.191605, 0.951221, - 0.0461302, 0.217317, 0.21084, 0.951412, - 0.0502131, 0.217238, 0.230945, 0.951623, - 0.0549183, 0.21722, 0.251745, 0.951867, - 0.0604493, 0.217306, 0.273001, 0.952069, - 0.0665189, 0.217466, 0.294874, 0.952459, - 0.0709179, 0.217266, 0.318732, 0.952996, - 0.0746112, 0.216891, 0.34318, 0.953425, - 0.0789252, 0.216503, 0.36849, 0.953885, - 0.0833293, 0.216042, 0.394373, 0.954617, - 0.087371, 0.215469, 0.420505, 0.955429, - 0.0914054, 0.214802, 0.446907, 0.956068, - 0.0961671, 0.214146, 0.473522, 0.957094, - 0.10048, 0.213286, 0.50052, 0.958372, - 0.103248, 0.211796, 0.528715, 0.959654, - 0.106033, 0.21016, 0.557065, 0.961305, - 0.108384, 0.208149, 0.585286, 0.962785, - 0.111122, 0.206024, 0.613334, 0.964848, - 0.112981, 0.203442, 0.641334, 0.966498, - 0.113717, 0.19996, 0.669955, 0.968678, - 0.114121, 0.196105, 0.698094, 0.970489, - 0.114524, 0.191906, 0.725643, 0.972903, - 0.113792, 0.186963, 0.752856, 0.974701, - 0.112406, 0.181343, 0.780013, 0.976718, - 0.110685, 0.175185, 0.806268, 0.978905, - 0.108468, 0.168535, 0.832073, 0.980267, - 0.105061, 0.161106, 0.857149, 0.981967, - 0.101675, 0.153387, 0.881145, 0.983063, - 0.0974492, 0.145199, 0.904255, 0.984432, - 0.0925815, 0.136527, 0.926686, 0.985734, - 0.0877983, 0.127584, 0.947901, 0.986228, - 0.081884, 0.118125, 0.968111, 0.98719, - 0.0761208, 0.108594, 0.98719, 0.988228, - 0.0698196, 0.0989996, 1.00559, 0.989046, - 0.0632739, 0.0890074, 1.02246, 0.990242, - 0.056522, 0.0790832, 1.03841, 0.991252, - 0.0495272, 0.0689182, 1.05347, 0.992542, - 0.0425373, 0.0588592, 1.06724, 0.994096, - 0.0353198, 0.0486833, 1.08009, 0.995593, - 0.028235, 0.0385977, 1.09177, 0.99711, - 0.0209511, 0.0286457, 1.10274, 0.998263, - 0.0139289, 0.0188497, 1.11262, 0.999254, - 0.0067359, 0.009208, 1.12191, 0.999967, 0.000141846, - 6.57764e-05, 1.13024, 0.935608, - 4.74692e-06, 0.236466, 1.87817e-05, 0.93996, - 0.00011971, 0.237568, 0.000473646, 0.939959, - 0.000478845, 0.237567, 0.0018946, 0.939954, - 0.0010774, 0.237566, 0.00426284, 0.939956, - 0.00191538, 0.237566, 0.00757842, 0.939954, - 0.00299277, 0.237566, 0.0118413, 0.93996, - 0.00430961, 0.237567, 0.0170518, 0.939969, - 0.00586589, 0.237569, 0.02321, 0.939982, - 0.00766166, 0.237572, 0.0303164, 0.939987, - 0.00969686, 0.237572, 0.0383711, 0.939997, - 0.0119715, 0.237574, 0.0473751, 0.940031, - 0.0144858, 0.237581, 0.0573298, 0.940073, - 0.0172399, 0.237589, 0.0682366, 0.94012, - 0.0202335, 0.237598, 0.080097, 0.940162, - 0.0234663, 0.237604, 0.0929116, 0.940237, - 0.0269387, 0.237615, 0.106686, 0.940328, - 0.0306489, 0.237632, 0.121421, 0.940419, - 0.0345917, 0.237645, 0.137115, 0.940522, - 0.0387481, 0.237654, 0.153766, 0.940702, - 0.0429906, 0.237661, 0.17133, 0.940871, - 0.0465089, 0.237561, 0.189502, 0.941103, - 0.050531, 0.23748, 0.208616, 0.941369, - 0.0550657, 0.237423, 0.228595, 0.941641, - 0.0601337, 0.237399, 0.249287, 0.941903, - 0.0658804, 0.237443, 0.270467, 0.942224, - 0.0722674, 0.237597, 0.292024, 0.942633, - 0.0771788, 0.237419, 0.315272, 0.943172, - 0.0815623, 0.237068, 0.339579, 0.943691, - 0.0863973, 0.236682, 0.364717, 0.944382, - 0.0911536, 0.236213, 0.390435, 0.945392, - 0.0952967, 0.235562, 0.416425, 0.946185, - 0.0998948, 0.234832, 0.442772, 0.947212, - 0.104796, 0.234114, 0.469347, 0.948778, - 0.10928, 0.233222, 0.496162, 0.950149, - 0.113081, 0.231845, 0.523978, 0.951989, - 0.115893, 0.230005, 0.552295, 0.953921, - 0.11846, 0.227862, 0.580569, 0.955624, - 0.12115, 0.225439, 0.608698, 0.958234, - 0.123373, 0.222635, 0.636696, 0.960593, - 0.124519, 0.219093, 0.665208, 0.963201, - 0.124736, 0.214749, 0.693557, 0.965642, - 0.125012, 0.210059, 0.721334, 0.968765, - 0.124661, 0.204935, 0.748613, 0.971753, - 0.122996, 0.198661, 0.776224, 0.973751, - 0.120998, 0.191823, 0.802461, 0.976709, - 0.118583, 0.184359, 0.828399, 0.977956, - 0.115102, 0.176437, 0.853693, 0.979672, - 0.111077, 0.167681, 0.877962, 0.981816, - 0.10688, 0.158872, 0.901564, 0.98238, - 0.101469, 0.149398, 0.924057, 0.983964, - 0.0960013, 0.139436, 0.945751, 0.984933, - 0.0899626, 0.12943, 0.966272, 0.985694, - 0.0832973, 0.11894, 0.985741, 0.986822, - 0.0767082, 0.108349, 1.00407, 0.987725, - 0.0693614, 0.0976026, 1.02154, 0.98877, - 0.06211, 0.086652, 1.03757, 0.990129, - 0.0544143, 0.0756182, 1.05296, 0.991337, - 0.046744, 0.0645753, 1.06683, 0.992978, - 0.0387931, 0.0534683, 1.0798, 0.994676, - 0.030973, 0.0424137, 1.09181, 0.99645, - 0.0230311, 0.0314035, 1.10286, 0.997967, - 0.0152065, 0.0206869, 1.11291, 0.99922, - 0.00744837, 0.010155, 1.12237, 1.00002, 0.000240209, - 7.52767e-05, 1.13089, 0.922948, - 5.15351e-06, 0.255626, 1.86069e-05, 0.928785, - 0.000129623, 0.257244, 0.000468009, 0.928761, - 0.00051849, 0.257237, 0.00187202, 0.928751, - 0.0011666, 0.257235, 0.00421204, 0.928751, - 0.00207395, 0.257234, 0.0074881, 0.928754, - 0.00324055, 0.257235, 0.0117002, 0.92876, - 0.00466639, 0.257236, 0.0168486, 0.928763, - 0.00635149, 0.257237, 0.0229334, 0.928774, - 0.00829584, 0.257239, 0.029955, 0.928791, - 0.0104995, 0.257243, 0.0379139, 0.928804, - 0.0129623, 0.257245, 0.0468108, 0.928847, - 0.0156846, 0.257255, 0.0566473, 0.92889, - 0.0186661, 0.257263, 0.0674246, 0.928924, - 0.0219067, 0.257268, 0.0791433, 0.928989, - 0.0254066, 0.257282, 0.0918076, 0.92909, - 0.0291651, 0.257301, 0.105419, 0.92918, - 0.0331801, 0.257316, 0.119978, 0.92929, - 0.0374469, 0.257332, 0.135491, 0.929453, - 0.041939, 0.257357, 0.151948, 0.929586, - 0.0464612, 0.257347, 0.169275, 0.929858, - 0.0503426, 0.257269, 0.187257, 0.930125, - 0.0548409, 0.257199, 0.206204, 0.930403, - 0.0598063, 0.257149, 0.22601, 0.930726, - 0.0652437, 0.257122, 0.246561, 0.931098, - 0.0712376, 0.257153, 0.267618, 0.931396, - 0.0777506, 0.257237, 0.288993, 0.931947, - 0.0832374, 0.257124, 0.311527, 0.932579, - 0.0883955, 0.25683, 0.335697, 0.933194, - 0.0937037, 0.256444, 0.360634, 0.934013, - 0.0987292, 0.255939, 0.386126, 0.935307, - 0.103215, 0.255282, 0.412018, 0.936374, - 0.108234, 0.254538, 0.438292, 0.93776, - 0.113234, 0.253728, 0.464805, 0.939599, - 0.118013, 0.25275, 0.491464, 0.941036, - 0.122661, 0.251404, 0.518751, 0.94337, - 0.125477, 0.249435, 0.547133, 0.945318, - 0.128374, 0.247113, 0.575456, 0.947995, - 0.130996, 0.244441, 0.60372, 0.950818, - 0.133438, 0.241352, 0.63174, 0.954378, - 0.135004, 0.237849, 0.659971, 0.957151, - 0.135313, 0.233188, 0.688478, 0.960743, - 0.13521, 0.228001, 0.716767, 0.964352, - 0.135007, 0.222249, 0.744349, 0.967273, - 0.133523, 0.21542, 0.771786, 0.969767, - 0.131155, 0.208039, 0.798639, 0.973195, - 0.128492, 0.200076, 0.824774, 0.975557, - 0.125094, 0.191451, 0.850222, 0.977692, - 0.120578, 0.18184, 0.874761, 0.98026, - 0.115882, 0.172102, 0.898497, 0.981394, - 0.110372, 0.161859, 0.921636, 0.982386, - 0.10415, 0.15108, 0.943467, 0.983783, - 0.0978128, 0.140407, 0.964045, 0.98422, - 0.0906171, 0.129058, 0.98398, 0.985447, - 0.0832921, 0.117614, 1.00276, 0.986682, - 0.0754412, 0.10585, 1.02047, 0.987326, - 0.0673885, 0.0940943, 1.03678, 0.988707, - 0.0592565, 0.0822093, 1.05218, 0.990185, - 0.050717, 0.070192, 1.06652, 0.991866, - 0.0423486, 0.0582081, 1.07965, 0.993897, - 0.0336118, 0.0460985, 1.09188, 0.995841, - 0.0252178, 0.0342737, 1.10307, 0.997605, - 0.0164893, 0.0224829, 1.11324, 0.999037, - 0.00817112, 0.0110647, 1.12262, 1.00003, 0.000291686, - 0.000168673, 1.13139, 0.915304, - 5.52675e-06, 0.275999, 1.83285e-05, 0.91668, - 0.000139285, 0.276414, 0.000461914, 0.916664, - 0.00055713, 0.276409, 0.00184763, 0.916653, - 0.00125354, 0.276406, 0.00415715, 0.916651, - 0.00222851, 0.276405, 0.00739053, 0.916655, - 0.00348205, 0.276406, 0.0115478, 0.916653, - 0.00501414, 0.276405, 0.0166291, 0.916667, - 0.00682478, 0.276409, 0.0226346, 0.91668, - 0.00891398, 0.276412, 0.0295648, 0.91669, - 0.0112817, 0.276413, 0.0374199, 0.916727, - 0.013928, 0.276422, 0.0462016, 0.916759, - 0.0168528, 0.276429, 0.0559101, 0.916793, - 0.0200558, 0.276436, 0.0665466, 0.916849, - 0.0235373, 0.276448, 0.0781139, 0.916964, - 0.0272973, 0.276474, 0.0906156, 0.917047, - 0.0313344, 0.276491, 0.104051, 0.917152, - 0.0356465, 0.276511, 0.118424, 0.917286, - 0.0402271, 0.276533, 0.133736, 0.917469, - 0.0450408, 0.276564, 0.149978, 0.917686, - 0.0497872, 0.276563, 0.167057, 0.917953, - 0.0540937, 0.276493, 0.184846, 0.918228, - 0.0590709, 0.276437, 0.203614, 0.918572, - 0.0644277, 0.276398, 0.223212, 0.918918, - 0.0702326, 0.276362, 0.243584, 0.919356, - 0.076484, 0.276383, 0.264465, 0.919842, - 0.0830808, 0.276434, 0.285701, 0.920451, - 0.0892972, 0.276407, 0.307559, 0.921113, - 0.095016, 0.276128, 0.331501, 0.921881, - 0.100771, 0.275754, 0.356207, 0.923027, - 0.106029, 0.275254, 0.381477, 0.924364, - 0.111029, 0.274595, 0.40722, 0.925818, - 0.116345, 0.273841, 0.433385, 0.92746, - 0.121424, 0.272913, 0.459848, 0.929167, - 0.12657, 0.271837, 0.486493, 0.931426, - 0.131581, 0.270575, 0.513432, 0.934001, - 0.135038, 0.268512, 0.541502, 0.936296, - 0.138039, 0.266135, 0.569658, 0.939985, - 0.140687, 0.263271, 0.598375, 0.943516, - 0.143247, 0.260058, 0.626563, 0.94782, - 0.145135, 0.256138, 0.654711, 0.951023, - 0.145733, 0.251154, 0.683285, 0.955338, - 0.145554, 0.245562, 0.711831, 0.959629, - 0.145008, 0.239265, 0.739573, 0.963123, - 0.144003, 0.232064, 0.767027, 0.966742, - 0.141289, 0.224036, 0.794359, 0.969991, - 0.138247, 0.215305, 0.820361, 0.973403, - 0.134786, 0.206051, 0.846548, 0.975317, - 0.129966, 0.195914, 0.871541, 0.977647, - 0.12471, 0.185184, 0.895313, 0.980137, - 0.119086, 0.174161, 0.918398, 0.981031, - 0.112297, 0.162792, 0.940679, 0.982037, - 0.105372, 0.150952, 0.961991, 0.983164, - 0.097821, 0.138921, 0.981913, 0.983757, - 0.0897245, 0.126611, 1.00109, 0.985036, - 0.0815974, 0.114228, 1.01902, 0.986289, - 0.0727725, 0.101389, 1.03604, 0.987329, - 0.0639323, 0.0886476, 1.05149, 0.989193, - 0.0548109, 0.0756837, 1.06619, 0.990716, - 0.045687, 0.0627581, 1.07948, 0.992769, - 0.0364315, 0.0498337, 1.09172, 0.99524, - 0.0271761, 0.0370305, 1.1033, 0.997154, - 0.0179609, 0.0243959, 1.11353, 0.998845, - 0.00878063, 0.0119567, 1.12319, 1.00002, 0.000259038, - 0.000108146, 1.13177, 0.903945, - 5.91681e-06, 0.295126, 1.81226e-05, 0.903668, - 0.000148672, 0.295037, 0.000455367, 0.903677, - 0.000594683, 0.29504, 0.00182145, 0.903673, - 0.00133805, 0.295039, 0.00409831, 0.903666, - 0.00237872, 0.295036, 0.00728584, 0.903668, - 0.00371676, 0.295037, 0.0113842, 0.903679, - 0.00535212, 0.29504, 0.0163936, 0.903684, - 0.00728479, 0.295041, 0.0223141, 0.903698, - 0.00951473, 0.295044, 0.0291462, 0.903718, - 0.0120419, 0.295049, 0.0368904, 0.903754, - 0.0148664, 0.295058, 0.0455477, 0.903801, - 0.017988, 0.29507, 0.0551194, 0.903851, - 0.0214064, 0.295082, 0.0656058, 0.903921, - 0.0251219, 0.295097, 0.0770109, 0.904002, - 0.0291337, 0.295116, 0.0893354, 0.904111, - 0.033441, 0.29514, 0.102583, 0.904246, - 0.0380415, 0.295169, 0.116755, 0.904408, - 0.0429258, 0.295202, 0.131853, 0.904637, - 0.0480468, 0.295245, 0.147869, 0.904821, - 0.0529208, 0.295214, 0.164658, 0.905163, - 0.0577748, 0.295185, 0.182274, 0.905469, - 0.0631763, 0.295143, 0.200828, 0.905851, - 0.068917, 0.295112, 0.2202, 0.906322, - 0.0750861, 0.295104, 0.240372, 0.906761, - 0.0815855, 0.295086, 0.261082, 0.90735, - 0.0882138, 0.295095, 0.282123, 0.908087, - 0.095082, 0.295139, 0.303563, 0.908826, - 0.101488, 0.29492, 0.327028, 0.909832, - 0.107577, 0.294577, 0.351464, 0.911393, - 0.113033, 0.294115, 0.376497, 0.912804, - 0.118629, 0.293446, 0.402115, 0.914081, - 0.124232, 0.292581, 0.428111, 0.91637, - 0.129399, 0.29166, 0.454442, 0.91814, - 0.134892, 0.290422, 0.481024, 0.921179, - 0.140069, 0.289194, 0.507924, 0.924544, - 0.144431, 0.287421, 0.535557, 0.927995, - 0.147498, 0.284867, 0.563984, 0.931556, - 0.150197, 0.281722, 0.5923, 0.935777, - 0.152711, 0.278207, 0.620832, 0.940869, - 0.154836, 0.274148, 0.649069, 0.945994, - 0.155912, 0.269057, 0.677746, 0.949634, - 0.155641, 0.262799, 0.706293, 0.955032, - 0.154809, 0.256097, 0.734278, 0.95917, - 0.153678, 0.248618, 0.761751, 0.962931, - 0.151253, 0.239794, 0.789032, 0.966045, - 0.147625, 0.230281, 0.815422, 0.96971, - 0.143964, 0.220382, 0.841787, 0.972747, - 0.139464, 0.209846, 0.867446, 0.975545, - 0.133459, 0.198189, 0.892004, 0.978381, - 0.127424, 0.186362, 0.915458, 0.979935, - 0.120506, 0.173964, 0.937948, 0.980948, - 0.11282, 0.161429, 0.959732, 0.982234, - 0.104941, 0.148557, 0.980118, 0.982767, - 0.0962905, 0.135508, 0.999463, 0.983544, - 0.0873625, 0.122338, 1.01756, 0.984965, - 0.0783447, 0.108669, 1.03492, 0.986233, - 0.0684798, 0.0949911, 1.05087, 0.987796, - 0.0590867, 0.0811386, 1.0656, 0.989885, - 0.0489145, 0.0673099, 1.0794, 0.991821, - 0.0391, 0.0535665, 1.09174, 0.99448, - 0.029087, 0.0397529, 1.10341, 0.996769, - 0.019114, 0.0261463, 1.11383, 0.998641, - 0.00947007, 0.0128731, 1.1237, 0.999978, 0.000446316, - 0.000169093, 1.13253, 0.888362, - 6.27064e-06, 0.312578, 1.78215e-05, 0.889988, - 0.000157791, 0.313148, 0.000448451, 0.889825, - 0.000631076, 0.313092, 0.00179356, 0.88984, - 0.00141994, 0.313097, 0.00403554, 0.889828, - 0.0025243, 0.313092, 0.00717429, 0.889831, - 0.00394421, 0.313093, 0.0112099, 0.889831, - 0.00567962, 0.313093, 0.0161425, 0.889844, - 0.00773051, 0.313096, 0.0219724, 0.889858, - 0.0100968, 0.3131, 0.0286999, 0.889882, - 0.0127786, 0.313106, 0.0363256, 0.889918, - 0.0157757, 0.313116, 0.0448509, 0.889967, - 0.0190878, 0.313129, 0.0542758, 0.89003, - 0.022715, 0.313145, 0.0646032, 0.890108, - 0.0266566, 0.313165, 0.0758339, 0.890218, - 0.0309131, 0.313193, 0.0879729, 0.890351, - 0.0354819, 0.313226, 0.101019, 0.89051, - 0.0403613, 0.313263, 0.114979, 0.890672, - 0.0455385, 0.313294, 0.129848, 0.890882, - 0.0509444, 0.313333, 0.145616, 0.891189, - 0.0559657, 0.313324, 0.162122, 0.891457, - 0.0613123, 0.313281, 0.179524, 0.891856, - 0.0671488, 0.313281, 0.197855, 0.892312, - 0.0732732, 0.313268, 0.216991, 0.892819, - 0.0797865, 0.313263, 0.236924, 0.893369, - 0.0865269, 0.313247, 0.257433, 0.894045, - 0.0931592, 0.313205, 0.278215, 0.894884, - 0.100532, 0.313276, 0.299467, 0.895832, - 0.107716, 0.313205, 0.322276, 0.897043, - 0.114099, 0.312873, 0.34642, 0.898515, - 0.119941, 0.312331, 0.371187, 0.900191, - 0.126044, 0.311731, 0.396656, 0.90188, - 0.131808, 0.310859, 0.422488, 0.904359, - 0.137289, 0.309857, 0.448744, 0.906923, - 0.142991, 0.308714, 0.475239, 0.910634, - 0.148253, 0.307465, 0.501983, 0.914502, - 0.153332, 0.305774, 0.529254, 0.919046, - 0.156646, 0.303156, 0.557709, 0.923194, - 0.159612, 0.299928, 0.586267, 0.928858, - 0.162027, 0.296245, 0.614925, 0.934464, - 0.164203, 0.291832, 0.643187, 0.939824, - 0.165602, 0.286565, 0.671601, 0.944582, - 0.165383, 0.280073, 0.700213, 0.949257, - 0.164439, 0.272891, 0.728432, 0.954389, - 0.162953, 0.264771, 0.756082, 0.958595, - 0.161007, 0.255927, 0.78369, 0.962138, - 0.157243, 0.245769, 0.810769, 0.966979, - 0.152872, 0.235127, 0.836999, 0.969566, - 0.148209, 0.22347, 0.862684, 0.972372, - 0.142211, 0.211147, 0.887847, 0.975916, - 0.135458, 0.198606, 0.911843, 0.978026, - 0.128398, 0.185498, 0.934795, 0.979686, - 0.120313, 0.17171, 0.956787, 0.980748, - 0.11166, 0.158159, 0.978046, 0.981622, - 0.103035, 0.144399, 0.997693, 0.982356, - 0.0930328, 0.13001, 1.01642, 0.983308, - 0.0834627, 0.115778, 1.03366, 0.985037, - 0.0732249, 0.101327, 1.05014, 0.986493, - 0.0628145, 0.086554, 1.06507, 0.988484, - 0.0526556, 0.0720413, 1.07907, 0.991051, - 0.0415744, 0.0571151, 1.09189, 0.993523, - 0.0314275, 0.0426643, 1.10369, 0.99628, - 0.0203603, 0.0279325, 1.11423, 0.998344, - 0.0102446, 0.0138182, 1.12421, 0.999997, 0.00042612, - 0.000193628, 1.1333, 0.871555, - 6.60007e-06, 0.329176, 1.74749e-05, 0.875255, - 0.000166579, 0.330571, 0.000441051, 0.875644, - 0.000666394, 0.330718, 0.00176441, 0.875159, - 0.00149903, 0.330536, 0.00396899, 0.87516, - 0.00266493, 0.330536, 0.007056, 0.875158, - 0.00416393, 0.330535, 0.0110251, 0.87516, - 0.00599598, 0.330535, 0.0158764, 0.875163, - 0.00816108, 0.330536, 0.0216101, 0.875174, - 0.0106591, 0.330538, 0.0282266, 0.875199, - 0.0134899, 0.330545, 0.0357266, 0.875257, - 0.0166538, 0.330563, 0.0441117, 0.875304, - 0.0201501, 0.330575, 0.0533821, 0.875373, - 0.0239785, 0.330595, 0.0635395, 0.875464, - 0.0281389, 0.330619, 0.0745872, 0.875565, - 0.0326301, 0.330645, 0.0865255, 0.875691, - 0.0374516, 0.330676, 0.0993599, 0.875897, - 0.0425993, 0.330733, 0.113093, 0.876091, - 0.0480576, 0.330776, 0.127722, 0.876353, - 0.0537216, 0.330826, 0.143227, 0.876649, - 0.0589807, 0.330809, 0.159462, 0.877034, - 0.0647865, 0.330819, 0.176642, 0.877443, - 0.0709789, 0.330817, 0.194702, 0.877956, - 0.0774782, 0.330832, 0.213577, 0.878499, - 0.0843175, 0.330822, 0.233246, 0.879144, - 0.0912714, 0.330804, 0.253512, 0.879982, - 0.0980824, 0.330766, 0.274137, 0.88097, - 0.105823, 0.330864, 0.295209, 0.882051, - 0.113671, 0.330896, 0.317226, 0.883397, - 0.120303, 0.330545, 0.341068, 0.884987, - 0.12667, 0.330068, 0.365613, 0.886789, - 0.133118, 0.329418, 0.390807, 0.889311, - 0.139024, 0.328683, 0.416494, 0.891995, - 0.144971, 0.327729, 0.442618, 0.895106, - 0.150747, 0.326521, 0.469131, 0.899527, - 0.156283, 0.325229, 0.495921, 0.90504, - 0.161707, 0.32378, 0.523162, 0.909875, - 0.165661, 0.32122, 0.55092, 0.91561, - 0.168755, 0.317942, 0.579928, 0.921225, - 0.171193, 0.313983, 0.608539, 0.927308, - 0.17319, 0.309636, 0.636854, 0.933077, - 0.174819, 0.304262, 0.66523, 0.938766, - 0.175002, 0.297563, 0.693609, 0.943667, - 0.173946, 0.289613, 0.722157, 0.949033, - 0.172221, 0.281227, 0.750021, 0.953765, - 0.169869, 0.271545, 0.777466, 0.95804, - 0.166578, 0.261034, 0.804853, 0.962302, - 0.161761, 0.249434, 0.831569, 0.966544, - 0.156636, 0.237484, 0.857779, 0.969372, - 0.150784, 0.224395, 0.883051, 0.972486, - 0.143672, 0.210786, 0.907864, 0.975853, - 0.135772, 0.196556, 0.931223, 0.977975, - 0.127942, 0.182307, 0.954061, 0.979122, - 0.118347, 0.167607, 0.97531, 0.980719, - 0.109112, 0.152739, 0.995666, 0.981223, - 0.0991789, 0.137932, 1.01475, 0.98216, - 0.0883553, 0.122692, 1.03253, 0.983379, - 0.0780825, 0.107493, 1.04917, 0.985434, - 0.0665646, 0.0917791, 1.06464, 0.987332, - 0.0557714, 0.0764949, 1.07896, 0.990004, - 0.0442805, 0.060721, 1.09199, 0.992975, - 0.0331676, 0.0452284, 1.10393, 0.995811, - 0.0219547, 0.0297934, 1.11476, 0.9982, - 0.0107613, 0.0146415, 1.12484, 1.00002, 0.000248678, - 0.00014555, 1.13413, 0.859519, - 6.93595e-06, 0.347264, 1.71673e-05, 0.859843, - 0.00017503, 0.347394, 0.000433219, 0.859656, - 0.000700076, 0.347319, 0.00173277, 0.859671, - 0.00157517, 0.347325, 0.00389875, 0.859669, - 0.00280028, 0.347324, 0.00693112, 0.85967, - 0.0043754, 0.347324, 0.01083, 0.859665, - 0.00630049, 0.347321, 0.0155954, 0.859685, - 0.0085755, 0.347328, 0.0212278, 0.859694, - 0.0112003, 0.347329, 0.0277273, 0.859718, - 0.0141747, 0.347336, 0.0350946, 0.85976, - 0.0174988, 0.347348, 0.0433314, 0.85982, - 0.0211722, 0.347366, 0.0524384, 0.859892, - 0.0251941, 0.347387, 0.0624168, 0.860006, - 0.0295649, 0.347422, 0.0732708, 0.860122, - 0.0342825, 0.347453, 0.0849999, 0.860282, - 0.0393462, 0.347499, 0.0976102, 0.860482, - 0.0447513, 0.347554, 0.111104, 0.860719, - 0.0504775, 0.347614, 0.125479, 0.860998, - 0.0563577, 0.347666, 0.140703, 0.861322, - 0.0619473, 0.347662, 0.156681, 0.861724, - 0.0681277, 0.347684, 0.173597, 0.862198, - 0.0746567, 0.347709, 0.191371, 0.862733, - 0.0815234, 0.347727, 0.209976, 0.863371, - 0.0886643, 0.347744, 0.229351, 0.86414, - 0.0957908, 0.347734, 0.24934, 0.865138, - 0.102912, 0.34772, 0.269797, 0.866182, - 0.110924, 0.3478, 0.290654, 0.867436, - 0.119223, 0.347911, 0.312074, 0.869087, - 0.126197, 0.347649, 0.335438, 0.870859, - 0.133145, 0.347222, 0.359732, 0.872997, - 0.139869, 0.346645, 0.38467, 0.875939, - 0.146089, 0.345935, 0.41019, 0.879012, - 0.152334, 0.345012, 0.436218, 0.883353, - 0.15821, 0.343924, 0.462641, 0.888362, - 0.164097, 0.342636, 0.489449, 0.895026, - 0.169528, 0.341351, 0.516629, 0.900753, - 0.174408, 0.339115, 0.544109, 0.906814, - 0.17751, 0.335809, 0.572857, 0.912855, - 0.180101, 0.331597, 0.601554, 0.919438, - 0.182116, 0.32698, 0.630198, 0.925962, - 0.183494, 0.321449, 0.658404, 0.931734, - 0.184159, 0.314595, 0.686625, 0.93762, - 0.18304, 0.306462, 0.71531, 0.943858, - 0.181323, 0.297514, 0.744272, 0.948662, - 0.178683, 0.287447, 0.771462, 0.953299, - 0.175379, 0.276166, 0.798593, 0.957346, - 0.170395, 0.263758, 0.8256, 0.962565, - 0.165042, 0.251019, 0.852575, 0.966075, - 0.158655, 0.237011, 0.878316, 0.969048, - 0.151707, 0.222518, 0.90329, 0.972423, - 0.143271, 0.207848, 0.927745, 0.975833, - 0.134824, 0.192463, 0.950859, 0.977629, - 0.125444, 0.1768, 0.972947, 0.978995, - 0.114949, 0.161033, 0.993263, 0.980533, - 0.104936, 0.145523, 1.01337, 0.980745, - 0.0935577, 0.129799, 1.03128, 0.981814, - 0.0822956, 0.113486, 1.04825, 0.983943, - 0.0710082, 0.0972925, 1.06405, 0.986141, - 0.0587931, 0.0808138, 1.0785, 0.988878, - 0.0472755, 0.0644915, 1.09204, 0.992132, - 0.0349128, 0.0478128, 1.10413, 0.9953, - 0.0232407, 0.031621, 1.11527, 0.998117, - 0.0112713, 0.0154935, 1.12551, 1.00003, 0.000339743, - 0.000195763, 1.13504, 0.845441, - 7.29126e-06, 0.364305, 1.69208e-05, 0.843588, - 0.000183164, 0.363506, 0.000425067, 0.843412, - 0.00073253, 0.36343, 0.00169999, 0.843401, - 0.00164818, 0.363426, 0.00382495, 0.843399, - 0.00293008, 0.363425, 0.00679993, 0.843401, - 0.00457822, 0.363425, 0.010625, 0.843394, - 0.00659249, 0.363421, 0.0153002, 0.843398, - 0.00897282, 0.363421, 0.0208258, 0.843415, - 0.0117191, 0.363426, 0.0272024, 0.843438, - 0.0148312, 0.363432, 0.0344305, 0.843483, - 0.018309, 0.363447, 0.0425116, 0.84356, - 0.0221521, 0.363472, 0.0514471, 0.843646, - 0.0263597, 0.363499, 0.061238, 0.843743, - 0.0309315, 0.363527, 0.0718873, 0.84388, - 0.0358658, 0.363569, 0.0833969, 0.844079, - 0.0411624, 0.363631, 0.0957742, 0.844279, - 0.0468128, 0.363688, 0.109015, 0.844549, - 0.0527923, 0.363761, 0.123124, 0.844858, - 0.0588204, 0.363817, 0.138044, 0.84522, - 0.0647573, 0.36383, 0.153755, 0.845669, - 0.0713181, 0.363879, 0.170394, 0.846155, - 0.0781697, 0.363908, 0.187861, 0.846789, - 0.0853913, 0.363969, 0.206176, 0.847502, - 0.0928086, 0.363999, 0.225244, 0.8484, - 0.10005, 0.363997, 0.244926, 0.849461, - 0.107615, 0.364008, 0.265188, 0.850562, - 0.115814, 0.364055, 0.28587, 0.851962, - 0.124334, 0.364179, 0.306926, 0.854326, - 0.131995, 0.364233, 0.329605, 0.856295, - 0.139338, 0.363856, 0.35359, 0.858857, - 0.146346, 0.363347, 0.37831, 0.862428, - 0.152994, 0.362807, 0.403722, 0.866203, - 0.159463, 0.361963, 0.429537, 0.871629, - 0.165623, 0.36112, 0.456, 0.877365, - 0.171649, 0.359917, 0.482773, 0.883744, - 0.177151, 0.35848, 0.509705, 0.890693, - 0.182381, 0.356523, 0.537215, 0.897278, - 0.186076, 0.3533, 0.565493, 0.903958, - 0.188602, 0.349095, 0.594293, 0.910908, - 0.190755, 0.344215, 0.623165, 0.918117, - 0.192063, 0.338606, 0.651573, 0.924644, - 0.192758, 0.331544, 0.679869, 0.931054, - 0.192238, 0.323163, 0.708668, 0.937303, - 0.190035, 0.313529, 0.737201, 0.943387, - 0.187162, 0.303152, 0.764977, 0.948494, - 0.183876, 0.29146, 0.792683, 0.952546, - 0.178901, 0.277917, 0.819228, 0.958077, - 0.173173, 0.264753, 0.846559, 0.962462, - 0.16645, 0.25002, 0.872962, 0.966569, - 0.159452, 0.234873, 0.898729, 0.969108, - 0.15074, 0.218752, 0.923126, 0.973072, - 0.141523, 0.202673, 0.947278, 0.975452, - 0.132075, 0.186326, 0.969938, 0.977784, - 0.121257, 0.169396, 0.991325, 0.97899, - 0.110182, 0.153044, 1.01123, 0.979777, - 0.0989634, 0.136485, 1.0299, 0.980865, - 0.0865894, 0.119343, 1.04727, 0.982432, - 0.0746115, 0.102452, 1.06341, 0.984935, - 0.0621822, 0.0852423, 1.07834, 0.987776, - 0.0495694, 0.0678546, 1.092, 0.99103, - 0.0372386, 0.0506917, 1.1043, 0.99474, - 0.0244353, 0.0333316, 1.11576, 0.997768, - 0.0121448, 0.0164348, 1.12617, 1.00003, 0.00031774, - 0.000169504, 1.13598, 0.825551, - 7.56799e-06, 0.378425, 1.65099e-05, 0.82664, - 0.000190922, 0.378923, 0.000416504, 0.826323, - 0.000763495, 0.378779, 0.0016656, 0.826359, - 0.00171789, 0.378795, 0.00374768, 0.82636, - 0.00305402, 0.378795, 0.00666259, 0.826368, - 0.00477185, 0.378798, 0.0104104, 0.826364, - 0.00687131, 0.378795, 0.0149912, 0.826368, - 0.00935232, 0.378795, 0.0204054, 0.826376, - 0.0122146, 0.378797, 0.0266532, 0.826399, - 0.0154581, 0.378803, 0.0337355, 0.82646, - 0.0190825, 0.378824, 0.0416537, 0.826525, - 0.0230873, 0.378846, 0.0504091, 0.826614, - 0.0274719, 0.378876, 0.0600032, 0.82674, - 0.0322355, 0.378917, 0.0704393, 0.826888, - 0.0373766, 0.378964, 0.0817195, 0.827078, - 0.0428936, 0.379024, 0.0938492, 0.827318, - 0.0487778, 0.379099, 0.106828, 0.82764, - 0.0549935, 0.379199, 0.120659, 0.827926, - 0.0611058, 0.379227, 0.13526, 0.828325, - 0.0675054, 0.379275, 0.150713, 0.828801, - 0.0743455, 0.379332, 0.167034, 0.8294, - 0.0815523, 0.379415, 0.184209, 0.830094, - 0.0890779, 0.379495, 0.202203, 0.8309, - 0.096736, 0.379555, 0.220945, 0.831943, - 0.104135, 0.379577, 0.240306, 0.833037, - 0.112106, 0.379604, 0.260317, 0.834278, - 0.120554, 0.379668, 0.2808, 0.836192, - 0.129128, 0.3799, 0.301654, 0.838671, - 0.137541, 0.380109, 0.323502, 0.840939, - 0.14523, 0.379809, 0.347176, 0.844575, - 0.15248, 0.379593, 0.371706, 0.848379, - 0.159607, 0.37909, 0.39688, 0.853616, - 0.166267, 0.378617, 0.422702, 0.858921, - 0.172698, 0.377746, 0.448919, 0.865324, - 0.178823, 0.376749, 0.475661, 0.872207, - 0.184542, 0.375363, 0.502599, 0.880018, - 0.189836, 0.373657, 0.529914, 0.88694, - 0.194294, 0.370673, 0.557683, 0.894779, - 0.197022, 0.36662, 0.586848, 0.902242, - 0.199108, 0.36138, 0.615831, 0.909914, - 0.200398, 0.355434, 0.644478, 0.917088, - 0.20094, 0.348173, 0.672905, 0.923888, - 0.200671, 0.339482, 0.701327, 0.930495, - 0.198773, 0.32956, 0.730101, 0.937247, - 0.195394, 0.318363, 0.758383, 0.943108, - 0.191956, 0.306323, 0.786539, 0.948296, - 0.187227, 0.292576, 0.813637, 0.953472, - 0.181165, 0.278234, 0.840793, 0.958485, - 0.174119, 0.263054, 0.867712, 0.962714, - 0.166564, 0.246756, 0.893635, 0.966185, - 0.158181, 0.229945, 0.919028, 0.970146, - 0.148275, 0.212633, 0.943413, 0.973491, - 0.138157, 0.195229, 0.966627, 0.975741, - 0.127574, 0.178048, 0.988817, 0.977238, - 0.11554, 0.160312, 1.00924, 0.978411, - 0.10364, 0.142857, 1.02845, 0.979811, - 0.0913122, 0.125317, 1.04648, 0.98116, - 0.0782558, 0.107627, 1.06284, 0.983543, - 0.0655957, 0.0895862, 1.07798, 0.986789, - 0.0520411, 0.0713756, 1.092, 0.990292, - 0.0389727, 0.053228, 1.10484, 0.994187, - 0.025808, 0.0351945, 1.11642, 0.997499, - 0.0126071, 0.0173198, 1.12703, 0.999999, 0.000275604, - 0.000148602, 1.13674, 0.81075, - 7.8735e-06, 0.394456, 1.61829e-05, 0.808692, - 0.000198293, 0.393453, 0.000407564, 0.80846, - 0.000792877, 0.39334, 0.00162965, 0.808595, - 0.00178416, 0.393407, 0.00366711, 0.808597, - 0.00317182, 0.393408, 0.00651934, 0.808598, - 0.00495589, 0.393408, 0.0101866, 0.808591, - 0.00713627, 0.393403, 0.0146689, 0.808592, - 0.00971285, 0.393402, 0.0199667, 0.80861, - 0.0126855, 0.393407, 0.0260803, 0.808633, - 0.0160538, 0.393413, 0.0330107, 0.80868, - 0.0198175, 0.393429, 0.0407589, 0.808748, - 0.0239758, 0.393453, 0.0493264, 0.808854, - 0.0285286, 0.39349, 0.0587161, 0.808992, - 0.0334748, 0.39354, 0.0689304, 0.809141, - 0.0388116, 0.393588, 0.0799707, 0.809352, - 0.0445375, 0.39366, 0.0918432, 0.809608, - 0.0506427, 0.393742, 0.104549, 0.809915, - 0.0570708, 0.393834, 0.118085, 0.810253, - 0.0633526, 0.393885, 0.132377, 0.810687, - 0.0700966, 0.393953, 0.147537, 0.811233, - 0.0772274, 0.394047, 0.163543, 0.811865, - 0.0847629, 0.394148, 0.180394, 0.812648, - 0.0925663, 0.394265, 0.198051, 0.813583, - 0.100416, 0.394363, 0.216443, 0.814683, - 0.108119, 0.394402, 0.235502, 0.815948, - 0.11644, 0.394489, 0.255242, 0.817278, - 0.125036, 0.394542, 0.275441, 0.819605, - 0.133655, 0.39486, 0.296094, 0.822256, - 0.142682, 0.395248, 0.317309, 0.825349, - 0.150756, 0.395241, 0.340516, 0.829605, - 0.158392, 0.395285, 0.364819, 0.83391, - 0.165801, 0.394922, 0.389736, 0.839808, - 0.172677, 0.394691, 0.415409, 0.845708, - 0.179448, 0.394006, 0.441546, 0.853025, - 0.185746, 0.393279, 0.46832, 0.859666, - 0.191684, 0.391655, 0.495302, 0.86789, - 0.197146, 0.390068, 0.52262, 0.875845, - 0.201904, 0.38727, 0.550336, 0.882634, - 0.205023, 0.382688, 0.578825, 0.891076, - 0.207098, 0.377543, 0.608103, 0.900589, - 0.208474, 0.371752, 0.63723, 0.90791, - 0.209068, 0.364016, 0.665769, 0.915971, - 0.208655, 0.355593, 0.694428, 0.923455, - 0.20729, 0.345439, 0.723224, 0.931514, - 0.203821, 0.334099, 0.751925, 0.937885, - 0.19986, 0.321069, 0.780249, 0.943136, - 0.194993, 0.306571, 0.8077, 0.948818, - 0.189132, 0.291556, 0.83497, 0.954433, - 0.181617, 0.275745, 0.86188, 0.959078, - 0.173595, 0.258695, 0.888562, 0.962705, - 0.164855, 0.240825, 0.914008, 0.966753, - 0.155129, 0.22268, 0.939145, 0.970704, - 0.144241, 0.204542, 0.963393, 0.973367, - 0.133188, 0.185927, 0.985983, 0.975984, - 0.121146, 0.167743, 1.00704, 0.976994, - 0.108366, 0.149218, 1.02715, 0.978485, - 0.0956746, 0.13131, 1.0455, 0.980074, - 0.0820733, 0.112513, 1.06221, 0.98225, - 0.0684061, 0.0938323, 1.07782, 0.98553, - 0.0549503, 0.0749508, 1.09199, 0.989529, - 0.0407857, 0.055848, 1.10508, 0.993536, - 0.0271978, 0.0368581, 1.11684, 0.997247, - 0.0132716, 0.0181845, 1.12789, 1, 0.000431817, - 0.000198809, 1.13792, 0.785886, - 8.12608e-06, 0.405036, 1.57669e-05, 0.790388, - 0.000205278, 0.407355, 0.000398297, 0.790145, - 0.000820824, 0.407231, 0.00159263, 0.790135, - 0.00184681, 0.407226, 0.00358336, 0.790119, - 0.00328316, 0.407218, 0.00637039, 0.790126, - 0.00512988, 0.40722, 0.0099539, 0.79013, - 0.00738684, 0.407221, 0.0143339, 0.790135, - 0.0100538, 0.407221, 0.0195107, 0.790134, - 0.0131306, 0.407217, 0.0254848, 0.79016, - 0.0166169, 0.407224, 0.0322572, 0.790197, - 0.020512, 0.407236, 0.0398284, 0.790273, - 0.0248157, 0.407263, 0.0482014, 0.790381, - 0.029527, 0.407304, 0.0573777, 0.790521, - 0.0346446, 0.407355, 0.0673602, 0.790704, - 0.0401665, 0.40742, 0.0781522, 0.790925, - 0.0460896, 0.407499, 0.0897582, 0.791195, - 0.0524017, 0.407589, 0.10218, 0.791522, - 0.0590121, 0.407691, 0.11541, 0.791878, - 0.0654876, 0.407748, 0.12939, 0.792361, - 0.0725207, 0.407849, 0.144237, 0.792942, - 0.0799844, 0.407963, 0.159924, 0.79362, - 0.0877896, 0.408087, 0.176425, 0.794529, - 0.0958451, 0.408259, 0.193733, 0.795521, - 0.103827, 0.408362, 0.211756, 0.796778, - 0.111937, 0.408482, 0.230524, 0.798027, - 0.120521, 0.408547, 0.249967, 0.799813, - 0.129242, 0.408721, 0.269926, 0.802387, - 0.138048, 0.409148, 0.290338, 0.805279, - 0.147301, 0.409641, 0.311193, 0.809251, - 0.155895, 0.410154, 0.333611, 0.813733, - 0.163942, 0.410297, 0.357615, 0.819081, - 0.171666, 0.410373, 0.382339, 0.825427, - 0.178905, 0.410348, 0.407828, 0.83172, - 0.185812, 0.409486, 0.434034, 0.83877, - 0.192318, 0.408776, 0.460493, 0.845817, - 0.198249, 0.407176, 0.487346, 0.854664, - 0.204034, 0.405719, 0.514832, 0.863495, - 0.208908, 0.403282, 0.542401, 0.871883, - 0.212765, 0.399293, 0.570683, 0.88065, - 0.214911, 0.393803, 0.599947, 0.89004, - 0.216214, 0.387536, 0.62932, 0.898476, - 0.216745, 0.379846, 0.658319, 0.906738, - 0.216387, 0.370625, 0.687138, 0.914844, - 0.215053, 0.360139, 0.71601, 0.923877, - 0.212007, 0.348849, 0.745124, 0.931925, - 0.207481, 0.335639, 0.773366, 0.938054, - 0.202418, 0.320798, 0.801636, 0.943895, - 0.196507, 0.304772, 0.829055, 0.949468, - 0.189009, 0.288033, 0.856097, 0.955152, - 0.180539, 0.270532, 0.88301, 0.959403, - 0.171437, 0.251639, 0.909296, 0.963309, - 0.161661, 0.232563, 0.934868, 0.967399, - 0.150425, 0.213231, 0.959662, 0.972009, - 0.138659, 0.194247, 0.98302, 0.97433, - 0.126595, 0.174718, 1.00517, 0.975823, - 0.113205, 0.155518, 1.02566, 0.976371, - 0.0996096, 0.136709, 1.04418, 0.978705, - 0.0860754, 0.117571, 1.06146, 0.981477, - 0.0714438, 0.0980046, 1.07777, 0.984263, - 0.0572304, 0.0782181, 1.09214, 0.988423, - 0.0428875, 0.0584052, 1.10553, 0.993, - 0.0282442, 0.038522, 1.11758, 0.99704, - 0.0140183, 0.0190148, 1.12864, 0.999913, 0.000369494, - 0.000145203, 1.13901, 0.777662, - 8.4153e-06, 0.423844, 1.54403e-05, 0.770458, - 0.000211714, 0.419915, 0.00038845, 0.770716, - 0.000846888, 0.420055, 0.00155386, 0.770982, - 0.00190567, 0.420202, 0.00349653, 0.770981, - 0.00338782, 0.420201, 0.00621606, 0.77098, - 0.00529338, 0.4202, 0.00971274, 0.770983, - 0.00762223, 0.4202, 0.0139867, 0.770985, - 0.0103741, 0.420198, 0.0190381, 0.770996, - 0.0135489, 0.4202, 0.0248677, 0.771029, - 0.0171461, 0.420212, 0.0314764, 0.771052, - 0.0211647, 0.420215, 0.0388648, 0.771131, - 0.0256048, 0.420245, 0.047036, 0.771235, - 0.0304647, 0.420284, 0.0559911, 0.771383, - 0.0357436, 0.420341, 0.0657346, 0.771591, - 0.0414392, 0.420423, 0.0762694, 0.771819, - 0.0475462, 0.420506, 0.0875984, 0.772123, - 0.0540506, 0.420617, 0.099727, 0.772464, - 0.060797, 0.42072, 0.112637, 0.772855, - 0.0675393, 0.420799, 0.126313, 0.773317, - 0.0748323, 0.420893, 0.140824, 0.773981, - 0.0825681, 0.421058, 0.15617, 0.774746, - 0.0906307, 0.421226, 0.172322, 0.77566, - 0.0988982, 0.421397, 0.189253, 0.776837, - 0.106994, 0.421569, 0.206912, 0.778097, - 0.115528, 0.421704, 0.225359, 0.779588, - 0.124317, 0.421849, 0.24447, 0.781574, - 0.133139, 0.422097, 0.264156, 0.784451, - 0.142179, 0.422615, 0.284318, 0.787682, - 0.15165, 0.423269, 0.304902, 0.792433, - 0.160771, 0.424396, 0.3265, 0.797359, - 0.169166, 0.424772, 0.35014, 0.803986, - 0.177149, 0.425475, 0.374768, 0.809504, - 0.184745, 0.424996, 0.399928, 0.815885, - 0.19173, 0.424247, 0.425796, 0.823513, - 0.198525, 0.423515, 0.452287, 0.832549, - 0.204709, 0.422787, 0.479321, 0.841653, - 0.210447, 0.421187, 0.506718, 0.850401, - 0.215501, 0.418519, 0.53432, 0.859854, - 0.219752, 0.414715, 0.56242, 0.869364, - 0.222305, 0.409462, 0.591558, 0.878837, - 0.223744, 0.402926, 0.621074, 0.888636, - 0.224065, 0.395043, 0.650538, 0.898132, - 0.223742, 0.38564, 0.679538, 0.907181, - 0.222308, 0.375378, 0.708674, 0.915621, - 0.219837, 0.363212, 0.737714, 0.9239, - 0.215233, 0.349313, 0.767014, 0.931644, - 0.209592, 0.334162, 0.795133, 0.938887, - 0.203644, 0.317943, 0.823228, 0.945282, - 0.196349, 0.300581, 0.850822, 0.950758, - 0.18742, 0.282195, 0.877594, 0.956146, - 0.177879, 0.262481, 0.904564, 0.960355, - 0.167643, 0.242487, 0.930741, 0.965256, - 0.156671, 0.222668, 0.955868, 0.968029, - 0.144123, 0.201907, 0.979869, 0.97251, - 0.131305, 0.18202, 1.00291, 0.974925, - 0.118335, 0.161909, 1.02392, 0.975402, - 0.103714, 0.142129, 1.0433, 0.976987, - 0.089415, 0.122447, 1.06089, 0.979677, - 0.0748858, 0.102248, 1.07713, 0.983184, - 0.0596086, 0.0814851, 1.09218, 0.987466, - 0.0447671, 0.0609484, 1.10585, 0.992348, - 0.0295217, 0.0401835, 1.11829, 0.996674, - 0.0143917, 0.0198163, 1.12966, 1.00003, 0.000321364, - 0.000149983, 1.1402, 0.757901, - 8.69074e-06, 0.436176, 1.51011e-05, 0.751195, - 0.000217848, 0.432317, 0.000378533, 0.751178, - 0.000871373, 0.432307, 0.0015141, 0.751195, - 0.00196061, 0.432317, 0.0034068, 0.751198, - 0.00348552, 0.432318, 0.00605659, 0.751195, - 0.00544599, 0.432315, 0.00946353, 0.751207, - 0.00784203, 0.43232, 0.013628, 0.751213, - 0.0106732, 0.43232, 0.0185499, 0.751221, - 0.0139393, 0.432319, 0.0242302, 0.751244, - 0.0176398, 0.432325, 0.0306694, 0.7513, - 0.0217743, 0.432348, 0.0378698, 0.751358, - 0.0263412, 0.432367, 0.0458321, 0.751458, - 0.0313396, 0.432404, 0.0545587, 0.751608, - 0.0367682, 0.432464, 0.0640543, 0.7518, - 0.0426246, 0.43254, 0.0743222, 0.752065, - 0.0489031, 0.432645, 0.0853668, 0.752376, - 0.0555828, 0.432762, 0.0971911, 0.752715, - 0.0623861, 0.432859, 0.109768, 0.753137, - 0.069415, 0.432958, 0.123126, 0.753676, - 0.0770039, 0.433099, 0.137308, 0.754345, - 0.084971, 0.433272, 0.15229, 0.755235, - 0.0932681, 0.433504, 0.168075, 0.756186, - 0.10171, 0.433693, 0.184625, 0.757363, - 0.110019, 0.433857, 0.201897, 0.75884, - 0.11887, 0.434102, 0.220014, 0.760467, - 0.127881, 0.434306, 0.238778, 0.762969, - 0.136766, 0.434751, 0.258172, 0.765823, - 0.14612, 0.43529, 0.278062, 0.769676, - 0.15566, 0.436236, 0.298437, 0.774909, - 0.165177, 0.437754, 0.319532, 0.77994, - 0.17402, 0.438343, 0.342505, 0.785757, - 0.182201, 0.438609, 0.366693, 0.792487, - 0.190104, 0.438762, 0.391668, 0.80038, - 0.197438, 0.438795, 0.417494, 0.808494, - 0.204365, 0.438226, 0.443933, 0.817695, - 0.210714, 0.437283, 0.470929, 0.828111, - 0.216651, 0.436087, 0.498569, 0.837901, - 0.221804, 0.433717, 0.526165, 0.847813, - 0.226318, 0.430133, 0.554155, 0.858314, - 0.229297, 0.425213, 0.582822, 0.868891, - 0.230999, 0.418576, 0.612847, 0.878941, - 0.231155, 0.410405, 0.642445, 0.888809, - 0.230935, 0.400544, 0.672024, 0.898089, - 0.229343, 0.389613, 0.701366, 0.908081, - 0.226886, 0.377197, 0.730763, 0.916819, - 0.222676, 0.363397, 0.759642, 0.924968, - 0.216835, 0.347437, 0.788775, 0.932906, - 0.210245, 0.32995, 0.817135, 0.940025, - 0.202992, 0.312262, 0.844912, 0.946101, - 0.19436, 0.293313, 0.872164, 0.952835, - 0.184125, 0.273638, 0.899443, 0.957347, - 0.173657, 0.252385, 0.926389, 0.961434, - 0.162204, 0.231038, 0.951947, 0.965522, - 0.14979, 0.209834, 0.976751, 0.969412, - 0.136307, 0.188821, 1.00022, 0.973902, - 0.122527, 0.168013, 1.02229, 0.974045, - 0.108213, 0.147634, 1.04199, 0.975775, - 0.0927397, 0.12705, 1.06019, 0.978383, - 0.0778212, 0.106309, 1.07711, 0.98211, - 0.0621216, 0.0849279, 1.09245, 0.986517, - 0.0463847, 0.0633519, 1.10651, 0.991696, - 0.0309353, 0.0419698, 1.11903, 0.996349, - 0.0150914, 0.0206272, 1.13073, 1.00003, 0.000442449, - 0.000231396, 1.14146, 0.727498, - 8.85074e-06, 0.441528, 1.45832e-05, 0.730897, - 0.000223525, 0.443589, 0.000368298, 0.730796, - 0.000893996, 0.443528, 0.00147303, 0.730805, - 0.00201149, 0.443533, 0.00331433, 0.730814, - 0.00357596, 0.443538, 0.00589222, 0.730815, - 0.00558734, 0.443538, 0.00920678, 0.730822, - 0.00804544, 0.44354, 0.0132582, 0.730836, - 0.0109501, 0.443545, 0.0180468, 0.730848, - 0.0143008, 0.443546, 0.0235732, 0.730871, - 0.0180969, 0.443552, 0.0298382, 0.730915, - 0.022338, 0.443567, 0.0368438, 0.730982, - 0.0270225, 0.443591, 0.044591, 0.731076, - 0.0321491, 0.443627, 0.0530831, 0.731245, - 0.0377166, 0.443699, 0.0623243, 0.73144, - 0.0437216, 0.443777, 0.0723181, 0.7317, - 0.0501576, 0.443881, 0.0830691, 0.732034, - 0.0569942, 0.444014, 0.0945809, 0.732388, - 0.0638756, 0.444113, 0.106825, 0.732853, - 0.071203, 0.444247, 0.119859, 0.733473, - 0.0790076, 0.444442, 0.13369, 0.734195, - 0.0871937, 0.444645, 0.148304, 0.735069, - 0.095696, 0.444877, 0.163702, 0.736169, - 0.10426, 0.445133, 0.179861, 0.73747, - 0.112853, 0.44537, 0.196778, 0.738991, - 0.12199, 0.445651, 0.214496, 0.740865, - 0.131153, 0.445958, 0.232913, 0.743637, - 0.140245, 0.446548, 0.251977, 0.746797, - 0.149722, 0.447246, 0.271551, 0.751517, - 0.159341, 0.448656, 0.291774, 0.756156, - 0.169106, 0.449866, 0.312455, 0.761519, - 0.178436, 0.450919, 0.334552, 0.768295, - 0.186904, 0.451776, 0.358491, 0.776613, - 0.195117, 0.452832, 0.383446, 0.783966, - 0.202695, 0.45249, 0.408945, 0.793542, - 0.20985, 0.452587, 0.435364, 0.803192, - 0.216403, 0.451852, 0.462336, 0.813892, - 0.22251, 0.450708, 0.48987, 0.824968, - 0.227676, 0.4486, 0.517697, 0.835859, - 0.232443, 0.445156, 0.545975, 0.846825, - 0.235775, 0.440351, 0.574483, 0.858085, - 0.237897, 0.433641, 0.604246, 0.868825, - 0.238074, 0.425354, 0.634101, 0.879638, - 0.237661, 0.415383, 0.664201, 0.889966, - 0.236186, 0.404136, 0.693918, 0.899479, - 0.233599, 0.390917, 0.723481, 0.908769, - 0.229737, 0.376352, 0.75258, 0.917966, - 0.223836, 0.360372, 0.781764, 0.926304, - 0.217067, 0.342551, 0.811139, 0.934626, - 0.209309, 0.324238, 0.839585, 0.941841, - 0.20071, 0.304484, 0.867044, 0.94789, - 0.190602, 0.283607, 0.894579, 0.954196, - 0.179253, 0.262205, 0.921743, 0.958383, - 0.167646, 0.239847, 0.948026, 0.963119, - 0.155073, 0.218078, 0.973296, 0.966941, - 0.141426, 0.195899, 0.998135, 0.970836, - 0.126849, 0.174121, 1.02021, 0.973301, - 0.112296, 0.153052, 1.04085, 0.97448, - 0.0964965, 0.131733, 1.05946, 0.977045, - 0.080489, 0.10997, 1.07693, 0.980751, - 0.064844, 0.0881657, 1.09254, 0.985475, - 0.0481938, 0.0657987, 1.10697, 0.991089, - 0.0319185, 0.0435215, 1.12004, 0.996122, - 0.0158088, 0.0214779, 1.13173, 1.00001, 0.000372455, - 0.000200295, 1.14291, 0.708622, - 9.07597e-06, 0.45304, 1.41962e-05, 0.711162, - 0.000228911, 0.454662, 0.000358052, 0.709812, - 0.000914446, 0.453797, 0.00143034, 0.709865, - 0.00205819, 0.453834, 0.00321935, 0.709864, - 0.00365894, 0.453833, 0.00572331, 0.709855, - 0.00571692, 0.453826, 0.00894278, 0.709862, - 0.00823201, 0.453828, 0.012878, 0.709875, - 0.011204, 0.453832, 0.0175295, 0.709896, - 0.0146323, 0.453839, 0.0228978, 0.709925, - 0.0185163, 0.453847, 0.0289839, 0.709974, - 0.0228551, 0.453866, 0.0357894, 0.710045, - 0.0276473, 0.453892, 0.0433161, 0.710133, - 0.032891, 0.453924, 0.0515665, 0.710292, - 0.0385851, 0.453992, 0.0605458, 0.710485, - 0.0447254, 0.45407, 0.0702574, 0.710769, - 0.0513051, 0.454192, 0.0807077, 0.711106, - 0.0582733, 0.454329, 0.091896, 0.711516, - 0.0652866, 0.45446, 0.103814, 0.712071, - 0.0728426, 0.454653, 0.116508, 0.712676, - 0.0808307, 0.45484, 0.129968, 0.713476, - 0.0892216, 0.455096, 0.144206, 0.714377, - 0.0979047, 0.455346, 0.159212, 0.715579, - 0.106531, 0.455647, 0.174973, 0.716977, - 0.115492, 0.455961, 0.191504, 0.71862, - 0.124821, 0.456315, 0.208835, 0.72084, - 0.134079, 0.4568, 0.226869, 0.723786, - 0.143427, 0.457521, 0.245582, 0.727464, - 0.153061, 0.458475, 0.264957, 0.732771, - 0.162768, 0.460239, 0.284948, 0.736515, - 0.172627, 0.460899, 0.30522, 0.743519, - 0.182487, 0.463225, 0.326717, 0.750041, - 0.191295, 0.464027, 0.350113, 0.758589, - 0.199746, 0.465227, 0.374782, 0.767703, - 0.207584, 0.465877, 0.400226, 0.777484, - 0.214973, 0.465996, 0.426442, 0.788792, - 0.221796, 0.466019, 0.453688, 0.800194, - 0.228038, 0.465083, 0.481246, 0.811234, - 0.233346, 0.462506, 0.509086, 0.822859, - 0.238073, 0.459257, 0.537338, 0.835082, - 0.241764, 0.454863, 0.566108, 0.846332, - 0.244241, 0.448163, 0.595126, 0.858355, - 0.244736, 0.439709, 0.625574, 0.87034, - 0.244278, 0.429837, 0.65617, 0.881027, - 0.24255, 0.418002, 0.686029, 0.891007, - 0.239912, 0.404325, 0.716039, 0.900874, - 0.236133, 0.389222, 0.745518, 0.911072, - 0.230672, 0.373269, 0.775026, 0.920359, - 0.22356, 0.355083, 0.804521, 0.928604, - 0.215591, 0.335533, 0.834045, 0.937175, - 0.206503, 0.315278, 0.861612, 0.942825, - 0.196684, 0.293653, 0.889131, 0.949805, - 0.185116, 0.271503, 0.916853, 0.955535, - 0.172703, 0.248821, 0.943541, 0.959843, - 0.159978, 0.225591, 0.970132, 0.964393, - 0.146375, 0.202719, 0.994709, 0.968008, - 0.131269, 0.179928, 1.0186, 0.971013, - 0.11569, 0.158007, 1.03928, 0.973334, - 0.1003, 0.13624, 1.05887, 0.975775, - 0.0833352, 0.1138, 1.07652, 0.979579, - 0.0668981, 0.0913141, 1.09297, 0.984323, - 0.0500902, 0.0683051, 1.10734, 0.990351, - 0.0332377, 0.0451771, 1.12084, 0.995823, - 0.0161491, 0.0221705, 1.13296, 1.0001, 0.000234083, - 0.000108712, 1.14441, 0.683895, - 9.24677e-06, 0.46015, 1.37429e-05, 0.68833, - 0.000233383, 0.463134, 0.000346865, 0.688368, - 0.000933547, 0.463159, 0.00138748, 0.688367, - 0.00210049, 0.463159, 0.00312187, 0.688369, - 0.00373415, 0.463159, 0.00555004, 0.688377, - 0.00583449, 0.463163, 0.00867216, 0.688386, - 0.00840128, 0.463166, 0.0124884, 0.688398, - 0.0114343, 0.463169, 0.0169993, 0.688418, - 0.0149329, 0.463175, 0.0222054, 0.688453, - 0.0188964, 0.463188, 0.028108, 0.688515, - 0.0233239, 0.463214, 0.0347085, 0.68857, - 0.0282136, 0.463231, 0.0420091, 0.688679, - 0.033564, 0.463276, 0.0500132, 0.688854, - 0.0393733, 0.463356, 0.0587255, 0.689038, - 0.0456354, 0.46343, 0.0681476, 0.689321, - 0.0523433, 0.463553, 0.0782897, 0.689662, - 0.059412, 0.463693, 0.0891501, 0.690188, - 0.0665736, 0.4639, 0.100735, 0.690755, - 0.0743106, 0.464107, 0.113074, 0.691405, - 0.0824722, 0.464329, 0.126161, 0.692198, - 0.0910484, 0.464585, 0.140007, 0.693196, - 0.0998778, 0.464893, 0.154612, 0.69454, - 0.108651, 0.465285, 0.169984, 0.695921, - 0.117855, 0.465596, 0.186106, 0.697749, - 0.12734, 0.466056, 0.203034, 0.700375, - 0.136714, 0.466771, 0.220703, 0.703395, - 0.146386, 0.467579, 0.239062, 0.707904, - 0.156096, 0.469067, 0.258188, 0.711673, - 0.165904, 0.469851, 0.277759, 0.717489, - 0.175812, 0.471815, 0.297935, 0.724051, - 0.185931, 0.47389, 0.318916, 0.731965, - 0.195238, 0.47587, 0.341591, 0.741151, - 0.204021, 0.477523, 0.366062, 0.751416, - 0.212113, 0.478881, 0.391396, 0.761848, - 0.21979, 0.479226, 0.417599, 0.771886, - 0.2267, 0.478495, 0.444401, 0.783998, - 0.232991, 0.477622, 0.472084, 0.796523, - 0.238645, 0.475833, 0.500193, 0.808851, - 0.243396, 0.472568, 0.52865, 0.821191, - 0.247226, 0.467857, 0.557362, 0.834261, - 0.250102, 0.461871, 0.586768, 0.846762, - 0.251056, 0.453543, 0.617085, 0.859867, - 0.250604, 0.443494, 0.647659, 0.871948, - 0.248783, 0.431711, 0.678119, 0.882967, - 0.245855, 0.417911, 0.708399, 0.892826, - 0.242168, 0.401993, 0.738256, 0.90332, - 0.237062, 0.385371, 0.767999, 0.913633, - 0.22997, 0.366837, 0.798191, 0.922774, - 0.221687, 0.346372, 0.827756, 0.931371, - 0.212345, 0.325682, 0.856425, 0.938929, - 0.20206, 0.303665, 0.884299, 0.944821, - 0.190981, 0.280786, 0.912023, 0.951792, - 0.178065, 0.2573, 0.939669, 0.957712, - 0.164634, 0.233448, 0.96655, 0.961912, - 0.150863, 0.209504, 0.992366, 0.966382, - 0.13577, 0.18597, 1.01633, 0.969588, - 0.119593, 0.162905, 1.03843, 0.971777, - 0.103203, 0.14053, 1.05841, 0.97433, - 0.0865888, 0.117909, 1.07632, 0.978686, - 0.0690829, 0.0944101, 1.09326, 0.983281, - 0.0516568, 0.0705671, 1.10796, 0.989562, - 0.034558, 0.0468592, 1.12182, 0.995465, - 0.0167808, 0.0229846, 1.1342, 0.999991, 0.000373016, - 0.000235606, 1.1459, 0.662251, - 9.39016e-06, 0.468575, 1.32714e-05, 0.666634, - 0.000237624, 0.471675, 0.000335842, 0.666411, - 0.000950385, 0.471516, 0.00134321, 0.666399, - 0.00213833, 0.471509, 0.00302221, 0.666386, - 0.0038014, 0.471499, 0.00537283, 0.666405, - 0.00593958, 0.471511, 0.00839533, 0.666406, - 0.00855253, 0.471508, 0.0120898, 0.666428, - 0.0116401, 0.471519, 0.0164569, 0.666444, - 0.0152015, 0.471522, 0.0214971, 0.66649, - 0.0192362, 0.471543, 0.027212, 0.666537, - 0.0237428, 0.471558, 0.033603, 0.666617, - 0.0287198, 0.471591, 0.0406728, 0.666718, - 0.0341647, 0.471631, 0.0484238, 0.666889, - 0.0400759, 0.47171, 0.0568621, 0.667104, - 0.0464479, 0.471805, 0.0659915, 0.667374, - 0.0532677, 0.471923, 0.0758178, 0.667772, - 0.0603805, 0.472098, 0.0863425, 0.668371, - 0.0677392, 0.472363, 0.0975917, 0.668971, - 0.0756028, 0.472596, 0.109567, 0.669696, - 0.0839293, 0.472869, 0.122272, 0.670481, - 0.0926683, 0.473126, 0.135718, 0.6715, - 0.1016, 0.473442, 0.149914, 0.672911, - 0.110566, 0.47389, 0.164882, 0.674512, - 0.119984, 0.474354, 0.180602, 0.67651, - 0.129574, 0.474922, 0.19711, 0.679292, - 0.139106, 0.475764, 0.214371, 0.682798, - 0.148993, 0.476886, 0.232405, 0.686955, - 0.158737, 0.478179, 0.251153, 0.691406, - 0.168754, 0.479432, 0.270436, 0.697438, - 0.178703, 0.481481, 0.290374, 0.704761, - 0.188955, 0.484143, 0.311044, 0.713599, - 0.198814, 0.487007, 0.333003, 0.723194, - 0.207869, 0.488962, 0.357144, 0.732601, - 0.216189, 0.489815, 0.382169, 0.744193, - 0.22398, 0.490888, 0.408227, 0.754907, - 0.231156, 0.490355, 0.434928, 0.767403, - 0.23747, 0.489548, 0.462599, 0.78107, - 0.243503, 0.488274, 0.490908, 0.793893, - 0.248114, 0.484843, 0.519421, 0.807296, - 0.25222, 0.4803, 0.548561, 0.820529, - 0.255265, 0.474097, 0.577772, 0.833716, - 0.256741, 0.466041, 0.607782, 0.848403, - 0.25637, 0.456547, 0.638807, 0.860755, - 0.254804, 0.443946, 0.670058, 0.874012, - 0.251834, 0.430852, 0.700749, 0.885619, - 0.247867, 0.414903, 0.731446, 0.896069, - 0.242634, 0.397276, 0.761191, 0.906266, - 0.236093, 0.378535, 0.791053, 0.916759, - 0.227543, 0.358038, 0.821298, 0.92523, - 0.21783, 0.335705, 0.850747, 0.93436, - 0.207534, 0.313797, 0.879258, 0.941631, - 0.195983, 0.289671, 0.907734, 0.947564, - 0.183567, 0.265319, 0.935206, 0.953681, - 0.169345, 0.240815, 0.962739, 0.960008, - 0.154909, 0.216119, 0.989227, 0.964145, - 0.140161, 0.192096, 1.01465, 0.968171, - 0.123411, 0.167855, 1.03737, 0.969859, - 0.106525, 0.144817, 1.05767, 0.972666, - 0.0891023, 0.12149, 1.0761, 0.977055, - 0.0718094, 0.0975306, 1.09336, 0.982527, - 0.0534213, 0.0730217, 1.10878, 0.989001, - 0.0355579, 0.0483366, 1.12285, 0.99512, - 0.0176383, 0.023938, 1.13548, 1.00007, 0.000368831, - 0.000211581, 1.14744, 0.651047, - 9.60845e-06, 0.484101, 1.2922e-05, 0.644145, - 0.000241347, 0.478968, 0.000324578, 0.64396, - 0.000965142, 0.478831, 0.00129798, 0.64396, - 0.00217154, 0.47883, 0.00292046, 0.643968, - 0.00386049, 0.478835, 0.00519202, 0.643974, - 0.00603186, 0.478838, 0.0081128, 0.643977, - 0.0086854, 0.478836, 0.011683, 0.643982, - 0.0118207, 0.478834, 0.0159031, 0.644024, - 0.0154374, 0.478856, 0.0207743, 0.644059, - 0.0195343, 0.478868, 0.0262975, 0.644122, - 0.0241103, 0.478896, 0.0324747, 0.644207, - 0.0291638, 0.478933, 0.039309, 0.64432, - 0.0346919, 0.478981, 0.0468029, 0.644481, - 0.0406919, 0.479053, 0.0549614, 0.644722, - 0.047159, 0.479169, 0.0637909, 0.645013, - 0.0540748, 0.479302, 0.0732974, 0.645503, - 0.0612001, 0.479541, 0.0834898, 0.646117, - 0.0687303, 0.479829, 0.0943873, 0.646707, - 0.0767846, 0.480061, 0.105991, 0.647431, - 0.0852465, 0.480343, 0.11831, 0.64831, - 0.0940719, 0.48066, 0.131348, 0.649486, - 0.103056, 0.481083, 0.14514, 0.650864, - 0.112261, 0.481528, 0.159676, 0.652604, - 0.121852, 0.482102, 0.174979, 0.654825, - 0.131505, 0.482813, 0.191079, 0.657876, - 0.141189, 0.483876, 0.207927, 0.661339, - 0.151239, 0.48499, 0.225586, 0.665463, - 0.161091, 0.486279, 0.243947, 0.670542, - 0.171235, 0.487968, 0.262957, 0.677361, - 0.181347, 0.49053, 0.282781, 0.685672, - 0.191679, 0.493862, 0.303311, 0.694551, - 0.201781, 0.49699, 0.324607, 0.703753, - 0.211164, 0.498884, 0.347916, 0.713703, - 0.219675, 0.500086, 0.372628, 0.725911, - 0.227836, 0.501554, 0.398694, 0.73862, - 0.23533, 0.502193, 0.425529, 0.752118, - 0.241786, 0.501811, 0.453209, 0.76579, - 0.247865, 0.500185, 0.481381, 0.779568, - 0.252696, 0.497159, 0.51011, 0.793991, - 0.256802, 0.492765, 0.539322, 0.808182, - 0.259942, 0.486827, 0.569078, 0.821698, - 0.261703, 0.478386, 0.598818, 0.836009, - 0.262006, 0.468772, 0.629762, 0.849824, - 0.260333, 0.456352, 0.661366, 0.863888, - 0.257398, 0.442533, 0.69295, 0.876585, - 0.253264, 0.426573, 0.723608, 0.888665, - 0.248026, 0.408964, 0.754378, 0.899537, - 0.241487, 0.389677, 0.784761, 0.9094, - 0.233463, 0.368516, 0.814688, 0.920166, - 0.223397, 0.346624, 0.845009, 0.928899, - 0.21255, 0.322717, 0.874431, 0.937156, - 0.200869, 0.298698, 0.902922, 0.943861, - 0.188387, 0.273491, 0.931356, 0.949557, - 0.174341, 0.247866, 0.958854, 0.955862, - 0.158994, 0.222496, 0.986098, 0.961721, - 0.143664, 0.197522, 1.01229, 0.965976, - 0.127412, 0.17302, 1.03571, 0.968652, - 0.109798, 0.148954, 1.05699, 0.971084, - 0.0916787, 0.125044, 1.07587, 0.975584, - 0.0739634, 0.100577, 1.09372, 0.98122, - 0.055322, 0.0753666, 1.10948, 0.988253, - 0.0366825, 0.0498899, 1.12394, 0.99482, - 0.0180389, 0.024611, 1.13694, 1.00001, 0.000229839, - 0.000188283, 1.14919, 0.613867, - 9.64198e-06, 0.479449, 1.23452e-05, 0.621485, - 0.000244534, 0.485399, 0.000313091, 0.621429, - 0.000978202, 0.485353, 0.00125245, 0.62112, - 0.00220004, 0.485114, 0.00281687, 0.621119, - 0.0039111, 0.485112, 0.00500783, 0.621122, - 0.00611091, 0.485112, 0.00782498, 0.621133, - 0.00879922, 0.485117, 0.0112687, 0.621152, - 0.0119756, 0.485125, 0.0153394, 0.621183, - 0.0156396, 0.485139, 0.0200382, 0.621227, - 0.0197898, 0.485158, 0.0253663, 0.621298, - 0.0244253, 0.485192, 0.0313261, 0.621388, - 0.0295441, 0.485233, 0.0379204, 0.621507, - 0.0351432, 0.485286, 0.0451523, 0.621693, - 0.0412198, 0.485378, 0.0530277, 0.621933, - 0.0477673, 0.485495, 0.0615522, 0.622232, - 0.0547574, 0.485635, 0.0707316, 0.622809, - 0.0619417, 0.485943, 0.0805883, 0.623407, - 0.069625, 0.486232, 0.0911267, 0.62406, - 0.077796, 0.486516, 0.102354, 0.624835, - 0.0863731, 0.486838, 0.114279, 0.625758, - 0.095251, 0.487188, 0.126902, 0.627043, - 0.104299, 0.487695, 0.140285, 0.628438, - 0.113724, 0.488163, 0.154397, 0.630325, - 0.123417, 0.488858, 0.169267, 0.632801, - 0.133137, 0.489754, 0.184941, 0.635784, - 0.143052, 0.490815, 0.20136, 0.639406, - 0.153132, 0.492048, 0.218643, 0.643872, - 0.163143, 0.49363, 0.236615, 0.6499, - 0.17333, 0.496009, 0.255449, 0.657201, - 0.183622, 0.498994, 0.275006, 0.666221, - 0.194019, 0.502888, 0.295354, 0.674419, - 0.204192, 0.505459, 0.316244, 0.683729, - 0.21406, 0.507771, 0.33849, 0.695584, - 0.222854, 0.510245, 0.363166, 0.708583, - 0.231315, 0.512293, 0.389071, 0.721233, - 0.238911, 0.512747, 0.415737, 0.735134, - 0.245657, 0.512482, 0.443331, 0.750179, - 0.251879, 0.511526, 0.471891, 0.765073, - 0.256911, 0.508935, 0.500892, 0.779794, - 0.261144, 0.504341, 0.530294, 0.794801, - 0.264316, 0.498515, 0.560144, 0.810339, - 0.266276, 0.491015, 0.590213, 0.824818, - 0.266981, 0.481126, 0.620865, 0.839375, - 0.265778, 0.468685, 0.652687, 0.853043, - 0.262748, 0.453925, 0.684759, 0.867335, - 0.258474, 0.437912, 0.716209, 0.88037, - 0.253187, 0.419648, 0.747508, 0.891711, - 0.246476, 0.39982, 0.77797, 0.902896, - 0.238735, 0.37879, 0.808586, 0.913601, - 0.22885, 0.355891, 0.838843, 0.923019, - 0.217656, 0.331773, 0.869014, 0.933432, - 0.205539, 0.307356, 0.898512, 0.939691, - 0.192595, 0.281321, 0.9269, 0.946938, - 0.178945, 0.255441, 0.955297, 0.952372, - 0.163587, 0.229013, 0.983231, 0.95909, - 0.147214, 0.203179, 1.00971, 0.963675, - 0.13064, 0.17792, 1.03438, 0.968247, - 0.113121, 0.152898, 1.05625, 0.97001, - 0.0945824, 0.128712, 1.07598, 0.974458, - 0.0755648, 0.103349, 1.094, 0.980168, - 0.0571998, 0.0776731, 1.1104, 0.987295, - 0.0377994, 0.0514445, 1.12491, 0.994432, - 0.0186417, 0.025429, 1.13851, 0.999975, 0.000542714, - 0.000282356, 1.15108, 0.592656, - 9.80249e-06, 0.486018, 1.19532e-05, 0.598467, - 0.000247275, 0.490781, 0.000301531, 0.597934, - 0.000988317, 0.490343, 0.00120517, 0.597903, - 0.00222366, 0.490319, 0.0027116, 0.597913, - 0.00395315, 0.490327, 0.00482077, 0.597919, - 0.00617653, 0.490329, 0.00753264, 0.597936, - 0.00889375, 0.490339, 0.0108478, 0.597956, - 0.0121043, 0.490347, 0.0147668, 0.597992, - 0.0158073, 0.490365, 0.0192905, 0.598032, - 0.0200017, 0.490382, 0.0244204, 0.598109, - 0.0246865, 0.49042, 0.0301593, 0.598215, - 0.0298594, 0.490474, 0.03651, 0.59833, - 0.0355167, 0.490524, 0.0434757, 0.598525, - 0.0416559, 0.490624, 0.0510629, 0.598778, - 0.0482692, 0.490753, 0.0592781, 0.599135, - 0.0553114, 0.49094, 0.0681304, 0.599802, - 0.062542, 0.491328, 0.0776467, 0.600361, - 0.0703638, 0.491598, 0.0878184, 0.60101, - 0.0786256, 0.491882, 0.0986573, 0.601811, - 0.0872962, 0.492232, 0.11018, 0.602861, - 0.0962284, 0.492684, 0.1224, 0.604167, - 0.10538, 0.493213, 0.135354, 0.605693, - 0.114896, 0.493799, 0.149034, 0.607682, - 0.124654, 0.494576, 0.163469, 0.610672, - 0.13456, 0.4959, 0.178747, 0.613313, - 0.144581, 0.496713, 0.194723, 0.617603, - 0.154703, 0.498499, 0.211617, 0.622174, - 0.16489, 0.500188, 0.229183, 0.628855, - 0.175164, 0.503072, 0.247786, 0.636963, - 0.185565, 0.506798, 0.267116, 0.644866, - 0.195911, 0.509719, 0.28702, 0.653741, - 0.206104, 0.512776, 0.307763, 0.664942, - 0.216447, 0.516812, 0.329631, 0.67633, - 0.22552, 0.519181, 0.353515, 0.690012, - 0.234316, 0.521681, 0.379226, 0.704243, - 0.242032, 0.523129, 0.405901, 0.719396, - 0.249172, 0.523768, 0.433585, 0.734471, - 0.255543, 0.522541, 0.462085, 0.750539, - 0.260697, 0.520217, 0.491233, 0.766365, - 0.26501, 0.516293, 0.521094, 0.781677, - 0.268409, 0.509708, 0.551014, 0.797132, - 0.270399, 0.501944, 0.581463, 0.812655, - 0.271247, 0.492025, 0.612402, 0.828592, - 0.270708, 0.480424, 0.643798, 0.844044, - 0.268085, 0.465955, 0.67682, 0.857305, - 0.263459, 0.448425, 0.708496, 0.87114, - 0.258151, 0.430243, 0.74046, 0.884936, - 0.251171, 0.410578, 0.771583, 0.895772, - 0.243305, 0.38862, 0.802234, 0.906961, - 0.234037, 0.365214, 0.833179, 0.917775, - 0.222714, 0.34116, 0.86353, 0.927883, - 0.210175, 0.31572, 0.893557, 0.936617, - 0.196925, 0.289159, 0.922976, 0.943384, - 0.182788, 0.261996, 0.951606, 0.949713, - 0.167965, 0.235324, 0.979958, 0.955818, - 0.151109, 0.208408, 1.00765, 0.961344, - 0.133834, 0.182591, 1.03329, 0.965469, - 0.115987, 0.156958, 1.0557, 0.968693, - 0.09746, 0.132239, 1.07583, 0.973165, - 0.0778514, 0.106195, 1.09451, 0.979387, - 0.0585067, 0.0797669, 1.11137, 0.98671, - 0.0390409, 0.0530263, 1.12643, 0.994093, - 0.019408, 0.0263163, 1.14016, 1.00002, 0.000540029, - 0.000194487, 1.15299, 0.574483, - 9.89066e-06, 0.494533, 1.14896e-05, 0.574478, - 0.000249127, 0.494528, 0.000289403, 0.574607, - 0.000996811, 0.494637, 0.00115797, 0.574396, - 0.00224241, 0.494458, 0.00260498, 0.574377, - 0.00398632, 0.49444, 0.00463102, 0.574386, - 0.00622836, 0.494445, 0.00723623, 0.574401, - 0.0089683, 0.494453, 0.010421, 0.574419, - 0.0122056, 0.49446, 0.0141859, 0.574459, - 0.0159396, 0.494481, 0.0185322, 0.574525, - 0.0201692, 0.49452, 0.0234617, 0.574587, - 0.0248924, 0.494547, 0.0289762, 0.574697, - 0.0301074, 0.494604, 0.0350797, 0.574853, - 0.0358114, 0.494688, 0.0417767, 0.575027, - 0.041999, 0.494772, 0.0490718, 0.575294, - 0.0486618, 0.494915, 0.0569728, 0.575733, - 0.0557148, 0.495173, 0.0654955, 0.576356, - 0.0630489, 0.495537, 0.0746612, 0.576944, - 0.0709285, 0.495836, 0.0844615, 0.57765, - 0.0792723, 0.496177, 0.0949142, 0.578491, - 0.0880167, 0.496563, 0.10603, 0.579639, - 0.0969462, 0.497096, 0.117841, 0.580989, - 0.10622, 0.497684, 0.130367, 0.582587, - 0.115861, 0.498337, 0.143609, 0.584951, - 0.125605, 0.499414, 0.157625, 0.587602, - 0.135608, 0.500518, 0.172413, 0.59076, - 0.145742, 0.501767, 0.187999, 0.594992, - 0.155934, 0.503542, 0.20445, 0.600656, - 0.166303, 0.506135, 0.221764, 0.607816, - 0.176681, 0.509542, 0.24002, 0.61522, - 0.187071, 0.51263, 0.258992, 0.623702, - 0.197465, 0.516021, 0.278773, 0.634192, - 0.207816, 0.520422, 0.299377, 0.644936, - 0.218183, 0.524073, 0.320802, 0.657888, - 0.2278, 0.528049, 0.34384, 0.670666, - 0.236747, 0.52986, 0.36916, 0.685626, - 0.24484, 0.531892, 0.395867, 0.701304, - 0.252071, 0.532727, 0.423488, 0.717727, - 0.258714, 0.532146, 0.452201, 0.733914, - 0.264211, 0.529883, 0.481579, 0.750529, - 0.26859, 0.5259, 0.511558, 0.76747, - 0.272046, 0.51999, 0.542042, 0.785189, - 0.274225, 0.513083, 0.572799, 0.800954, - 0.275189, 0.502936, 0.603816, 0.816962, - 0.274946, 0.490921, 0.635461, 0.83336, - 0.272695, 0.47684, 0.6676, 0.848143, - 0.268223, 0.459405, 0.70051, 0.861818, - 0.262768, 0.440319, 0.732902, 0.876828, - 0.255872, 0.420123, 0.765084, 0.889312, - 0.247703, 0.398379, 0.796391, 0.900412, - 0.238381, 0.374496, 0.827333, 0.912251, - 0.227783, 0.349874, 0.858385, 0.921792, - 0.214832, 0.323181, 0.888652, 0.931273, - 0.200949, 0.296624, 0.917763, 0.940295, - 0.186537, 0.269211, 0.947878, 0.946812, - 0.171538, 0.241447, 0.977016, 0.953588, - 0.155254, 0.213829, 1.00501, 0.958841, - 0.137156, 0.186807, 1.03179, 0.963746, - 0.118699, 0.160706, 1.05502, 0.966468, - 0.0998358, 0.135504, 1.07568, 0.971178, - 0.0805186, 0.109131, 1.09479, 0.97831, - 0.0599348, 0.0818293, 1.1123, 0.985886, - 0.0399661, 0.0545872, 1.12771, 0.994021, - 0.0198682, 0.0269405, 1.14186, 1.00009, 0.000271022, - 0.00012989, 1.15514, 0.538716, - 9.90918e-06, 0.486732, 1.09675e-05, 0.550656, - 0.000250642, 0.497518, 0.000277412, 0.55057, - 0.00100265, 0.497441, 0.00110974, 0.550903, - 0.00225672, 0.497733, 0.00249779, 0.550568, - 0.00401046, 0.497438, 0.00443906, 0.550574, - 0.00626613, 0.49744, 0.00693637, 0.550591, - 0.0090226, 0.497449, 0.00998921, 0.550623, - 0.0122795, 0.497469, 0.0135984, 0.550667, - 0.0160361, 0.497495, 0.0177654, 0.550724, - 0.0202908, 0.497526, 0.0224915, 0.550792, - 0.0250421, 0.497557, 0.0277795, 0.550918, - 0.0302878, 0.49763, 0.0336334, 0.551058, - 0.0360241, 0.497701, 0.0400573, 0.551276, - 0.0422473, 0.497824, 0.0470585, 0.551551, - 0.0489441, 0.497977, 0.0546433, 0.552074, - 0.0559596, 0.498312, 0.0628367, 0.552681, - 0.0633978, 0.498679, 0.071646, 0.553324, - 0.0713176, 0.499031, 0.0810746, 0.554011, - 0.0797268, 0.499365, 0.091129, 0.55488, - 0.0885238, 0.499779, 0.101837, 0.556171, - 0.0974417, 0.500444, 0.113239, 0.557498, - 0.106841, 0.501025, 0.125316, 0.559299, - 0.116533, 0.501864, 0.138128, 0.561647, - 0.126298, 0.502967, 0.151695, 0.564347, - 0.136388, 0.504129, 0.16604, 0.567863, - 0.146576, 0.505713, 0.181207, 0.572569, - 0.156832, 0.507953, 0.197259, 0.578919, - 0.167323, 0.511186, 0.214258, 0.585387, - 0.177712, 0.514042, 0.232038, 0.593134, - 0.188184, 0.517484, 0.250733, 0.603295, - 0.198717, 0.522345, 0.270454, 0.613854, - 0.209177, 0.526751, 0.290807, 0.626092, - 0.219644, 0.531595, 0.312202, 0.637868, - 0.229494, 0.534721, 0.334435, 0.652458, - 0.238718, 0.538304, 0.359184, 0.666985, - 0.247061, 0.539875, 0.385637, 0.683301, - 0.254652, 0.541042, 0.41328, 0.69998, - 0.261376, 0.540735, 0.441903, 0.717824, - 0.267085, 0.539139, 0.471609, 0.734617, - 0.271465, 0.534958, 0.501446, 0.753663, - 0.27528, 0.53032, 0.532571, 0.770512, - 0.277617, 0.522134, 0.563641, 0.787356, - 0.278525, 0.51206, 0.595067, 0.806252, - 0.278512, 0.50119, 0.627226, 0.822061, - 0.277023, 0.486791, 0.659402, 0.838959, - 0.273175, 0.470467, 0.692874, 0.85379, - 0.267238, 0.450688, 0.725702, 0.868268, - 0.260327, 0.429741, 0.75832, 0.881994, - 0.251946, 0.407223, 0.790189, 0.893885, - 0.242432, 0.383214, 0.821625, 0.905118, - 0.231904, 0.357297, 0.853011, 0.916045, - 0.219545, 0.330733, 0.883773, 0.927614, - 0.205378, 0.303916, 0.914435, 0.936005, - 0.190388, 0.275941, 0.944502, 0.944533, - 0.1749, 0.247493, 0.974439, 0.950758, - 0.158588, 0.218996, 1.00286, 0.957078, - 0.141027, 0.191559, 1.0304, 0.962448, - 0.121507, 0.164457, 1.05466, 0.964993, - 0.102068, 0.138636, 1.0761, 0.970017, - 0.0822598, 0.111861, 1.09541, 0.97661, - 0.062033, 0.0843438, 1.11317, 0.985073, - 0.0409832, 0.0558496, 1.12911, 0.993515, - 0.020146, 0.0275331, 1.1438, 1.00006, 0.00027329, - 0.000107883, 1.15736, 0.525324, - 9.99341e-06, 0.498153, 1.05385e-05, 0.526513, - 0.000251605, 0.499277, 0.000265329, 0.526517, - 0.00100641, 0.499282, 0.0010613, 0.526588, - 0.00226466, 0.499337, 0.00238823, 0.526539, - 0.0040255, 0.499302, 0.00424535, 0.526547, - 0.00628954, 0.499306, 0.00663364, 0.526561, - 0.00905628, 0.499313, 0.00955337, 0.526593, - 0.0123253, 0.499334, 0.0130054, 0.526642, - 0.0160957, 0.499365, 0.0169911, 0.5267, - 0.0203661, 0.499396, 0.0215122, 0.526792, - 0.0251347, 0.499451, 0.0265718, 0.526904, - 0.0303985, 0.499511, 0.0321732, 0.527079, - 0.0361554, 0.499617, 0.0383231, 0.527285, - 0.0423982, 0.499731, 0.045026, 0.527602, - 0.0491121, 0.499924, 0.0522936, 0.528166, - 0.0561127, 0.500306, 0.0601528, 0.52879, - 0.0635988, 0.5007, 0.0686059, 0.529421, - 0.071581, 0.501048, 0.0776518, 0.530144, - 0.0799854, 0.501421, 0.0873148, 0.531062, - 0.0888032, 0.501884, 0.0976084, 0.532374, - 0.0977643, 0.50259, 0.108588, 0.533828, - 0.107197, 0.50329, 0.120234, 0.53581, - 0.116887, 0.504312, 0.132602, 0.538063, - 0.126755, 0.505365, 0.145721, 0.5409, - 0.136819, 0.506668, 0.159617, 0.544882, - 0.147117, 0.508731, 0.174369, 0.550238, - 0.157446, 0.511601, 0.190028, 0.556038, - 0.167988, 0.514431, 0.206587, 0.563031, - 0.178364, 0.517808, 0.224046, 0.571543, - 0.189007, 0.521937, 0.242503, 0.582255, - 0.199546, 0.527415, 0.261977, 0.59272, - 0.210084, 0.531682, 0.282162, 0.605648, - 0.220448, 0.537123, 0.303426, 0.61785, - 0.230593, 0.540664, 0.325323, 0.632223, - 0.240238, 0.544467, 0.348993, 0.648819, - 0.24887, 0.547594, 0.375462, 0.665825, - 0.256657, 0.54912, 0.403024, 0.683389, - 0.263711, 0.549294, 0.431773, 0.701495, - 0.269666, 0.547649, 0.461494, 0.719197, - 0.274169, 0.543786, 0.491623, 0.737906, - 0.278124, 0.538644, 0.522994, 0.756652, - 0.280632, 0.531057, 0.554775, 0.775279, - 0.281741, 0.521972, 0.586441, 0.792688, - 0.281652, 0.509613, 0.618596, 0.811894, - 0.280345, 0.496497, 0.651462, 0.827938, - 0.277128, 0.47968, 0.684023, 0.844837, - 0.271646, 0.460688, 0.718024, 0.859239, - 0.264397, 0.438872, 0.751207, 0.874088, - 0.256144, 0.41577, 0.784232, 0.887693, - 0.246311, 0.391369, 0.816191, 0.899402, - 0.235497, 0.365872, 0.847828, 0.910973, - 0.223631, 0.338618, 0.87934, 0.92204, - 0.209874, 0.310803, 0.910325, 0.930987, - 0.194265, 0.281802, 0.940695, 0.94, - 0.178125, 0.252836, 0.970958, 0.948018, - 0.161479, 0.224239, 1.00078, 0.955141, - 0.144038, 0.195857, 1.0288, 0.960513, - 0.124915, 0.168487, 1.05371, 0.963964, - 0.104284, 0.141495, 1.07596, 0.968713, - 0.0838732, 0.114437, 1.09628, 0.975524, - 0.0635579, 0.0863105, 1.11448, 0.98431, - 0.042291, 0.0574774, 1.13069, 0.992916, - 0.0209131, 0.0284343, 1.14568, 0.999926, 0.000743097, - 0.000379265, 1.15955, 0.501042, - 9.98428e-06, 0.498726, 1.00306e-05, 0.502992, - 0.000252112, 0.500665, 0.000253283, 0.502417, - 0.00100791, 0.500092, 0.00101259, 0.502965, - 0.00226919, 0.500621, 0.00227978, 0.502318, - 0.00403109, 0.499994, 0.00405011, 0.502333, - 0.00629832, 0.500005, 0.00632868, 0.502362, - 0.00906907, 0.500027, 0.00911446, 0.502369, - 0.0123423, 0.500023, 0.0124078, 0.50243, - 0.0161178, 0.500066, 0.016211, 0.502493, - 0.0203937, 0.500103, 0.0205256, 0.502592, - 0.0251684, 0.500166, 0.0253548, 0.502707, - 0.0304389, 0.50023, 0.0307029, 0.502881, - 0.0362015, 0.500335, 0.0365753, 0.503124, - 0.0424507, 0.500488, 0.0429798, 0.503443, - 0.0491582, 0.500686, 0.0499268, 0.504083, - 0.0561476, 0.501155, 0.0574541, 0.504668, - 0.0636846, 0.501524, 0.0655408, 0.505319, - 0.0716834, 0.501904, 0.0742072, 0.50609, - 0.0800925, 0.502321, 0.0834699, 0.507122, - 0.0888425, 0.502896, 0.0933603, 0.508414, - 0.097855, 0.503603, 0.10391, 0.509955, - 0.107304, 0.504416, 0.115113, 0.512061, - 0.116921, 0.505565, 0.127054, 0.514419, - 0.12689, 0.506732, 0.139709, 0.517529, - 0.136934, 0.508338, 0.153173, 0.522085, - 0.147327, 0.510987, 0.167528, 0.526986, - 0.157612, 0.513527, 0.182708, 0.533122, - 0.168213, 0.516717, 0.198881, 0.540807, - 0.178688, 0.520832, 0.215986, 0.550687, - 0.189511, 0.52632, 0.234335, 0.560567, - 0.199998, 0.531009, 0.253375, 0.571698, - 0.210652, 0.535839, 0.273499, 0.584364, - 0.220917, 0.541091, 0.294355, 0.599066, - 0.23137, 0.546875, 0.316525, 0.614148, - 0.241206, 0.551306, 0.339671, 0.631157, - 0.250379, 0.555187, 0.36531, 0.647919, - 0.258397, 0.556595, 0.392767, 0.666112, - 0.265528, 0.556949, 0.421397, 0.686158, - 0.271827, 0.556617, 0.451433, 0.704838, - 0.27674, 0.552975, 0.482131, 0.723957, - 0.280733, 0.547814, 0.513458, 0.74262, - 0.283359, 0.53997, 0.545446, 0.762009, - 0.284541, 0.530422, 0.57775, 0.781314, - 0.284507, 0.518546, 0.610434, 0.799116, - 0.283309, 0.504178, 0.643178, 0.817604, - 0.280378, 0.48843, 0.676248, 0.83459, - 0.275619, 0.469457, 0.709698, 0.850974, - 0.26856, 0.447698, 0.744245, 0.866747, - 0.260094, 0.424791, 0.777695, 0.881412, - 0.249929, 0.399913, 0.810392, 0.8936, - 0.239137, 0.37308, 0.842872, 0.905943, - 0.226818, 0.345705, 0.874677, 0.916408, - 0.213699, 0.31706, 0.906257, 0.927215, - 0.198428, 0.288444, 0.936881, 0.935625, - 0.181643, 0.258329, 0.96795, 0.944076, - 0.164386, 0.228488, 0.998216, 0.951229, - 0.146339, 0.199763, 1.02689, 0.958793, - 0.127709, 0.172153, 1.0535, 0.963219, - 0.107244, 0.144989, 1.07646, 0.967562, - 0.0857764, 0.11685, 1.09675, 0.974866, - 0.0645377, 0.0880571, 1.11576, 0.983353, - 0.0431732, 0.0587352, 1.13227, 0.992503, - 0.0218356, 0.0294181, 1.1478, 1.00003, 0.000605203, - 0.000231013, 1.16207, 0.482935, - 1.01177e-05, 0.504695, 9.68142e-06, 0.477554, - 0.000251521, 0.499071, 0.000240676, 0.477904, - 0.00100683, 0.499436, 0.00096342, 0.478368, - 0.00226636, 0.499899, 0.0021687, 0.477977, - 0.00402719, 0.499513, 0.00385384, 0.477993, - 0.00629226, 0.499525, 0.0060221, 0.478011, - 0.00906011, 0.499536, 0.00867289, 0.478051, - 0.0123305, 0.499566, 0.0118074, 0.478089, - 0.016102, 0.499587, 0.0154269, 0.478171, - 0.0203736, 0.499645, 0.0195341, 0.478254, - 0.025143, 0.499692, 0.0241318, 0.47839, - 0.0304071, 0.499779, 0.0292247, 0.478588, - 0.0361631, 0.499911, 0.0348196, 0.478812, - 0.0424023, 0.500046, 0.0409231, 0.479208, - 0.0490724, 0.500326, 0.047552, 0.479841, - 0.0560722, 0.500805, 0.0547377, 0.480392, - 0.0636125, 0.501152, 0.0624607, 0.481068, - 0.0716134, 0.501561, 0.0707473, 0.481898, - 0.0800062, 0.502054, 0.0796118, 0.483022, - 0.0886568, 0.502728, 0.0890974, 0.484332, - 0.0977553, 0.503479, 0.0992099, 0.486126, - 0.107173, 0.504546, 0.10999, 0.488066, - 0.11677, 0.50557, 0.121476, 0.490521, - 0.126725, 0.506849, 0.133672, 0.494232, - 0.136793, 0.50911, 0.146731, 0.498302, - 0.147116, 0.511345, 0.160577, 0.503565, - 0.157446, 0.514344, 0.175335, 0.510902, - 0.168121, 0.518824, 0.191207, 0.519263, - 0.178799, 0.523666, 0.208058, 0.528204, - 0.189407, 0.528296, 0.225875, 0.538854, - 0.200145, 0.533724, 0.244782, 0.551278, - 0.210701, 0.539833, 0.264753, 0.565222, - 0.221303, 0.546131, 0.285745, 0.579403, - 0.231688, 0.551496, 0.307592, 0.595469, - 0.241718, 0.556809, 0.330582, 0.610929, - 0.250992, 0.559641, 0.354995, 0.629433, - 0.259602, 0.562379, 0.382471, 0.648504, - 0.267038, 0.563676, 0.411126, 0.66756, - 0.273388, 0.562092, 0.440924, 0.689143, - 0.278788, 0.560807, 0.472118, 0.709056, - 0.282783, 0.555701, 0.503774, 0.729855, - 0.285836, 0.548698, 0.536364, 0.748954, - 0.287078, 0.538544, 0.56895, 0.768373, - 0.287133, 0.526711, 0.601991, 0.78827, - 0.285839, 0.512511, 0.635403, 0.807465, - 0.283238, 0.496323, 0.668797, 0.825194, - 0.27906, 0.477638, 0.702584, 0.842203, - 0.272286, 0.456253, 0.736393, 0.857749, - 0.263854, 0.432412, 0.77096, 0.874799, - 0.253943, 0.407806, 0.80489, 0.887497, - 0.24237, 0.38033, 0.83771, 0.89966, - 0.230278, 0.352446, 0.870376, 0.911753, - 0.21646, 0.323268, 0.902256, 0.923011, - 0.202071, 0.294314, 0.933306, 0.932375, - 0.185519, 0.264104, 0.965177, 0.940537, - 0.167604, 0.234035, 0.996303, 0.948904, - 0.149068, 0.20412, 1.0261, 0.955263, - 0.129539, 0.175431, 1.05304, 0.960303, - 0.109932, 0.148116, 1.07617, 0.965512, - 0.0880572, 0.119693, 1.09742, 0.973466, - 0.0660548, 0.0901619, 1.11721, 0.98284, - 0.0439228, 0.0599875, 1.13436, 0.992216, - 0.0219588, 0.0298975, 1.15006, 0.999946, 0.000119402, - 2.08547e-05, 1.16471, 0.447827, - 1.00414e-05, 0.491543, 9.14833e-06, 0.454778, - 0.000251257, 0.499172, 0.00022891, 0.453519, - 0.00100342, 0.497787, 0.000914184, 0.45357, - 0.00225776, 0.497847, 0.00205701, 0.453578, - 0.00401371, 0.497855, 0.00365705, 0.45357, - 0.00627107, 0.497841, 0.00571453, 0.453598, - 0.00902968, 0.497864, 0.00823019, 0.453627, - 0.0122888, 0.497882, 0.0112049, 0.453684, - 0.0160475, 0.497923, 0.0146405, 0.453764, - 0.0203044, 0.49798, 0.0185394, 0.453866, - 0.0250576, 0.498049, 0.0229054, 0.453996, - 0.0303028, 0.49813, 0.0277424, 0.454196, - 0.0360379, 0.498267, 0.0330587, 0.454457, - 0.0422521, 0.498445, 0.0388613, 0.454926, - 0.0488393, 0.498812, 0.0451767, 0.455525, - 0.0558653, 0.499272, 0.0520153, 0.456074, - 0.0633772, 0.499625, 0.0593754, 0.456752, - 0.0713606, 0.500049, 0.0672751, 0.457648, - 0.07971, 0.500615, 0.0757447, 0.458849, - 0.0883032, 0.501399, 0.0848231, 0.46029, - 0.0974095, 0.502293, 0.0945135, 0.462, - 0.106729, 0.503301, 0.104848, 0.464121, - 0.116354, 0.504533, 0.115884, 0.466889, - 0.126214, 0.506172, 0.127652, 0.470744, - 0.136324, 0.508667, 0.14024, 0.47488, - 0.146595, 0.510995, 0.153673, 0.480845, - 0.157027, 0.514832, 0.168053, 0.488262, - 0.167658, 0.519506, 0.183508, 0.496547, - 0.178343, 0.524347, 0.199948, 0.506254, - 0.188916, 0.52983, 0.217503, 0.517961, - 0.199975, 0.536357, 0.236272, 0.531484, - 0.210624, 0.543641, 0.256096, 0.545496, - 0.221227, 0.550048, 0.277085, 0.559497, - 0.231568, 0.555076, 0.298615, 0.575752, - 0.241698, 0.560541, 0.321547, 0.591999, - 0.251172, 0.564156, 0.345602, 0.610654, - 0.260178, 0.567607, 0.371851, 0.630484, - 0.268094, 0.56923, 0.40076, 0.651807, - 0.274661, 0.569779, 0.430801, 0.67239, - 0.280331, 0.566791, 0.461939, 0.693024, - 0.284501, 0.562007, 0.493854, 0.715473, - 0.287852, 0.555791, 0.526992, 0.736323, - 0.28929, 0.546345, 0.560102, 0.755771, - 0.289405, 0.534, 0.593543, 0.775424, - 0.2881, 0.519114, 0.627256, 0.795447, - 0.285562, 0.502543, 0.661464, 0.815319, - 0.281416, 0.484773, 0.695206, 0.831769, - 0.275523, 0.463445, 0.729044, 0.849464, - 0.267516, 0.440269, 0.764069, 0.866775, - 0.257584, 0.415049, 0.799089, 0.881252, - 0.245817, 0.388049, 0.831948, 0.894209, - 0.233127, 0.35889, 0.865526, 0.906922, - 0.219579, 0.329915, 0.89818, 0.919686, - 0.204491, 0.300441, 0.930013, 0.929044, - 0.188962, 0.269445, 0.962061, 0.938393, - 0.171079, 0.238402, 0.994214, 0.94661, - 0.15199, 0.208204, 1.02533, 0.953095, - 0.131953, 0.178653, 1.0529, 0.958644, - 0.111233, 0.150684, 1.0771, 0.963925, - 0.0903098, 0.122359, 1.09855, 0.971995, - 0.0680505, 0.0923342, 1.11874, 0.981658, - 0.0448512, 0.0614195, 1.13635, 0.991649, - 0.0221931, 0.0303582, 1.15238, 0.999985, 0.000393403, - 0.000111086, 1.16772, 0.396806, - 9.71563e-06, 0.457671, 8.42355e-06, 0.429186, - 0.000249421, 0.495017, 0.00021625, 0.429324, - 0.000998052, 0.495173, 0.000865322, 0.429175, - 0.00224487, 0.494999, 0.00194637, 0.429129, - 0.00399041, 0.494952, 0.00346004, 0.429153, - 0.00623476, 0.494974, 0.00540684, 0.429168, - 0.0089773, 0.494983, 0.00778714, 0.429207, - 0.0122175, 0.495012, 0.0106022, 0.429257, - 0.0159542, 0.495047, 0.0138535, 0.429338, - 0.0201864, 0.495106, 0.0175443, 0.429431, - 0.0249104, 0.495165, 0.0216774, 0.429587, - 0.0301252, 0.495279, 0.0262594, 0.429796, - 0.0358249, 0.495432, 0.0312968, 0.430065, - 0.0419972, 0.495621, 0.0367985, 0.430588, - 0.0485144, 0.496061, 0.042798, 0.43113, - 0.0555028, 0.496472, 0.0492914, 0.431743, - 0.0629852, 0.496904, 0.0562907, 0.432448, - 0.0709256, 0.497369, 0.0638056, 0.433414, - 0.0791942, 0.498032, 0.071885, 0.434638, - 0.0877346, 0.498854, 0.0805517, 0.43611, - 0.0968056, 0.499812, 0.0898047, 0.437859, - 0.106002, 0.500891, 0.0997142, 0.440017, - 0.115648, 0.502198, 0.110289, 0.443236, - 0.125427, 0.504389, 0.121644, 0.44697, - 0.135492, 0.506809, 0.133769, 0.451689, - 0.145746, 0.509858, 0.146787, 0.45811, - 0.156219, 0.514247, 0.160793, 0.465305, - 0.166834, 0.518816, 0.175791, 0.474085, - 0.177546, 0.524331, 0.191906, 0.484808, - 0.188262, 0.53104, 0.209199, 0.49732, - 0.199346, 0.538511, 0.227825, 0.509693, - 0.209951, 0.544554, 0.247269, 0.524367, - 0.220533, 0.551616, 0.267978, 0.539228, - 0.231082, 0.557368, 0.289672, 0.55644, - 0.241342, 0.563782, 0.31268, 0.574204, - 0.250964, 0.568851, 0.33651, 0.593388, - 0.260306, 0.57312, 0.362219, 0.613358, - 0.268667, 0.574916, 0.390322, 0.634512, - 0.275591, 0.575053, 0.420478, 0.65563, - 0.281328, 0.572404, 0.451614, 0.678265, - 0.285948, 0.568893, 0.484112, 0.70011, - 0.289408, 0.561878, 0.517348, 0.723005, - 0.291328, 0.55359, 0.551355, 0.743744, - 0.291418, 0.541099, 0.585109, 0.763949, - 0.290252, 0.526489, 0.619487, 0.784186, - 0.287648, 0.509496, 0.65404, 0.804304, - 0.283782, 0.491484, 0.688649, 0.823629, - 0.278067, 0.470517, 0.723133, 0.84094, - 0.270588, 0.44705, 0.757163, 0.857852, - 0.261188, 0.421252, 0.792816, 0.874934, - 0.249313, 0.394191, 0.827248, 0.888709, - 0.236492, 0.365359, 0.861074, 0.902589, - 0.222185, 0.336016, 0.894417, 0.914201, - 0.207314, 0.30527, 0.926825, 0.925978, - 0.191146, 0.274532, 0.9595, 0.93512, - 0.174135, 0.243393, 0.991583, 0.943656, - 0.155231, 0.212414, 1.02356, 0.951719, - 0.134403, 0.182005, 1.05239, 0.957164, - 0.113023, 0.153043, 1.07754, 0.962656, - 0.0914493, 0.124186, 1.09984, 0.970695, - 0.0694179, 0.0941654, 1.12, 0.980749, - 0.0466199, 0.0629671, 1.13849, 0.991205, - 0.0227032, 0.0311146, 1.15494, 0.999884, 0.000632388, - 0.000254483, 1.1706, 0.379821, - 9.57289e-06, 0.460637, 7.89337e-06, 0.405188, - 0.000247483, 0.491396, 0.000204064, 0.404796, - 0.000989434, 0.490914, 0.000815853, 0.40483, - 0.00222607, 0.490949, 0.00183559, 0.40473, - 0.00395723, 0.49084, 0.00326332, 0.404731, - 0.00618287, 0.490836, 0.00509945, 0.404768, - 0.00890258, 0.490871, 0.00734463, 0.404791, - 0.0121156, 0.490883, 0.00999992, 0.404857, - 0.0158214, 0.490938, 0.0130676, 0.404943, - 0.0200178, 0.491004, 0.0165503, 0.405059, - 0.0247027, 0.491093, 0.0204521, 0.405213, - 0.0298729, 0.491205, 0.0247788, 0.405399, - 0.0355226, 0.491333, 0.0295373, 0.405731, - 0.0416352, 0.491604, 0.034741, 0.406303, - 0.0480807, 0.492116, 0.0404255, 0.406814, - 0.0550458, 0.492506, 0.0465732, 0.407404, - 0.0624652, 0.492926, 0.0532058, 0.408149, - 0.0702958, 0.493442, 0.0603442, 0.409128, - 0.0784623, 0.494136, 0.0680297, 0.410408, - 0.087007, 0.495054, 0.0762786, 0.411813, - 0.0959639, 0.495962, 0.0851046, 0.413735, - 0.105075, 0.497257, 0.0945878, 0.416137, - 0.114646, 0.498882, 0.104725, 0.41934, - 0.124394, 0.501132, 0.11563, 0.423326, - 0.134328, 0.503883, 0.127325, 0.428419, - 0.14458, 0.50747, 0.139911, 0.43484, - 0.154979, 0.511964, 0.153481, 0.442641, - 0.165628, 0.517328, 0.168114, 0.452511, - 0.176365, 0.524258, 0.183995, 0.463473, - 0.187298, 0.531248, 0.200953, 0.475564, - 0.198244, 0.538367, 0.219176, 0.488664, - 0.208938, 0.545175, 0.238514, 0.504073, - 0.219599, 0.553227, 0.259129, 0.520832, - 0.230378, 0.560653, 0.280997, 0.538455, - 0.240703, 0.567523, 0.303821, 0.55709, - 0.250548, 0.573287, 0.327948, 0.576646, - 0.259964, 0.577795, 0.353362, 0.596705, - 0.268721, 0.580077, 0.380336, 0.618053, - 0.276054, 0.58018, 0.4101, 0.640303, - 0.282176, 0.578747, 0.44161, 0.662365, - 0.286931, 0.574294, 0.474106, 0.684542, - 0.290521, 0.567035, 0.507549, 0.707984, - 0.292672, 0.558687, 0.541853, 0.730913, - 0.293189, 0.547606, 0.576581, 0.752948, - 0.292199, 0.533471, 0.61172, 0.773452, - 0.289508, 0.516395, 0.646339, 0.794715, - 0.285716, 0.497873, 0.682131, 0.814251, - 0.280051, 0.476845, 0.716396, 0.833057, - 0.272873, 0.453449, 0.751503, 0.84959, - 0.263982, 0.427857, 0.786085, 0.867022, - 0.252745, 0.400335, 0.821355, 0.882277, - 0.239655, 0.371304, 0.85646, 0.895375, - 0.225386, 0.340397, 0.890828, 0.909347, - 0.209587, 0.310005, 0.923532, 0.921885, - 0.193433, 0.2796, 0.956419, 0.932127, - 0.176135, 0.247276, 0.989445, 0.941869, - 0.157872, 0.216186, 1.02221, 0.949735, - 0.137577, 0.185602, 1.05195, 0.956617, - 0.115285, 0.155767, 1.07822, 0.961974, - 0.0928418, 0.126103, 1.10149, 0.96972, - 0.0700592, 0.0956758, 1.12207, 0.98012, - 0.0474671, 0.0643269, 1.1408, 0.990825, - 0.0238113, 0.0320863, 1.1577, 0.999876, 0.000381574, - 8.12203e-05, 1.17403, 0.367636, - 9.61342e-06, 0.469176, 7.53287e-06, 0.380377, - 0.000244772, 0.485434, 0.000191797, 0.380416, - 0.000978857, 0.485475, 0.000767015, 0.380376, - 0.00220165, 0.485435, 0.00172522, 0.380419, - 0.00391408, 0.485487, 0.00306734, 0.380438, - 0.00611549, 0.485505, 0.00479332, 0.380462, - 0.00880558, 0.485525, 0.00690391, 0.380496, - 0.0119837, 0.485551, 0.00940039, 0.38056, - 0.0156487, 0.485605, 0.0122848, 0.38064, - 0.0197988, 0.485666, 0.0155601, 0.380767, - 0.0244324, 0.48577, 0.0192313, 0.380909, - 0.0295444, 0.485871, 0.0233032, 0.381142, - 0.0351321, 0.48606, 0.0277861, 0.381472, - 0.0411535, 0.486336, 0.0326939, 0.382015, - 0.0475408, 0.486833, 0.0380565, 0.382523, - 0.0544395, 0.487231, 0.0438615, 0.383129, - 0.061784, 0.487683, 0.0501332, 0.383952, - 0.0695085, 0.488313, 0.0568996, 0.38498, - 0.0775819, 0.489077, 0.0641952, 0.386331, - 0.0860443, 0.490113, 0.0720324, 0.387788, - 0.0948406, 0.491099, 0.0804379, 0.389808, - 0.103899, 0.492566, 0.0894899, 0.39252, - 0.113313, 0.494601, 0.0992098, 0.395493, - 0.123007, 0.496619, 0.109641, 0.399826, - 0.132859, 0.499912, 0.120919, 0.405341, - 0.143077, 0.504061, 0.133107, 0.411932, - 0.153465, 0.508905, 0.146263, 0.420591, - 0.164108, 0.515482, 0.160544, 0.43101, - 0.174893, 0.523191, 0.176123, 0.441881, - 0.185839, 0.53026, 0.192757, 0.453919, - 0.196633, 0.537295, 0.210535, 0.468715, - 0.207611, 0.546156, 0.229886, 0.485182, - 0.218517, 0.555173, 0.250543, 0.501926, - 0.229249, 0.562728, 0.27221, 0.51785, - 0.239481, 0.567494, 0.294892, 0.536947, - 0.249395, 0.573889, 0.318987, 0.557115, - 0.259, 0.578831, 0.344348, 0.577966, - 0.268075, 0.582055, 0.371223, 0.599489, - 0.276115, 0.583307, 0.399834, 0.62479, - 0.282523, 0.583902, 0.431415, 0.647504, - 0.287663, 0.57953, 0.464301, 0.670601, - 0.291538, 0.573103, 0.498123, 0.693539, - 0.293842, 0.563731, 0.532662, 0.717385, - 0.294681, 0.553169, 0.567925, 0.741533, - 0.293717, 0.539908, 0.603502, 0.762142, - 0.291156, 0.521902, 0.639074, 0.783014, - 0.28719, 0.502815, 0.674439, 0.805158, - 0.281773, 0.482598, 0.710497, 0.823646, - 0.274682, 0.458949, 0.7456, 0.841879, - 0.266184, 0.433129, 0.781085, 0.859515, - 0.255682, 0.406064, 0.816, 0.875335, - 0.242849, 0.376509, 0.851074, 0.890147, - 0.228329, 0.345502, 0.886473, 0.903144, - 0.212491, 0.31428, 0.920751, 0.916618, - 0.195695, 0.282994, 0.954606, 0.927953, - 0.178267, 0.251091, 0.988402, 0.937414, - 0.159549, 0.219107, 1.02141, 0.946823, - 0.140022, 0.18896, 1.05167, 0.954651, - 0.118154, 0.158667, 1.07819, 0.959955, - 0.0946636, 0.128808, 1.1025, 0.96858, - 0.0711792, 0.0973787, 1.12391, 0.97938, - 0.0475046, 0.0650965, 1.14322, 0.990498, - 0.024059, 0.0326267, 1.16077, 0.999844, - 5.12408e-05, 0.000112444, 1.17727, 0.316912, - 9.34977e-06, 0.425996, 6.95559e-06, 0.356423, - 0.000241372, 0.479108, 0.000179562, 0.356272, - 0.000965292, 0.478897, 0.00071811, 0.356262, - 0.00217182, 0.478894, 0.00161574, 0.356265, - 0.00386092, 0.478895, 0.00287261, 0.356278, - 0.0060324, 0.478905, 0.00448907, 0.356293, - 0.00868565, 0.478914, 0.00646572, 0.356346, - 0.0118207, 0.478965, 0.00880438, 0.356395, - 0.0154355, 0.479001, 0.0115066, 0.356484, - 0.019529, 0.479075, 0.0145762, 0.356609, - 0.0240991, 0.47918, 0.018018, 0.356766, - 0.0291413, 0.479305, 0.0218379, 0.357009, - 0.0346498, 0.479512, 0.0260454, 0.357424, - 0.0405462, 0.479909, 0.0306657, 0.357899, - 0.0468825, 0.480337, 0.0357054, 0.358424, - 0.0536887, 0.480771, 0.0411728, 0.359041, - 0.0609416, 0.481242, 0.0470841, 0.359903, - 0.0685239, 0.481943, 0.0534831, 0.360932, - 0.0764883, 0.482741, 0.0603795, 0.362196, - 0.0848364, 0.483688, 0.0678028, 0.363847, - 0.0935002, 0.484947, 0.0758086, 0.365972, - 0.102471, 0.486588, 0.0844173, 0.368741, - 0.111751, 0.488787, 0.0937199, 0.372146, - 0.121334, 0.491405, 0.103732, 0.377114, - 0.131147, 0.495604, 0.114608, 0.38226, - 0.141213, 0.499436, 0.126345, 0.389609, - 0.151632, 0.505334, 0.139116, 0.397925, - 0.162073, 0.51168, 0.152995, 0.407824, - 0.172819, 0.518876, 0.168071, 0.420014, - 0.183929, 0.527639, 0.184495, 0.434266, - 0.195032, 0.537588, 0.20232, 0.447352, - 0.205792, 0.544379, 0.221189, 0.463726, - 0.216704, 0.553422, 0.241616, 0.481406, - 0.227531, 0.562074, 0.263298, 0.498707, - 0.238017, 0.568227, 0.286116, 0.518039, - 0.247936, 0.574473, 0.3101, 0.538277, - 0.257437, 0.579191, 0.335401, 0.561166, - 0.266829, 0.584807, 0.362246, 0.583189, - 0.275329, 0.586476, 0.390609, 0.606024, - 0.28234, 0.585578, 0.420998, 0.632419, - 0.287924, 0.584496, 0.454357, 0.656128, - 0.291972, 0.577766, 0.488233, 0.679953, - 0.29456, 0.56875, 0.523248, 0.704654, - 0.295816, 0.558388, 0.559168, 0.729016, - 0.295157, 0.544826, 0.595326, 0.752062, - 0.292779, 0.528273, 0.631864, 0.773138, - 0.288681, 0.508482, 0.667793, 0.794869, - 0.283358, 0.487341, 0.704035, 0.815101, - 0.27608, 0.46354, 0.739925, 0.834212, - 0.26767, 0.438672, 0.775539, 0.852368, - 0.257397, 0.411239, 0.810895, 0.870207, - 0.245689, 0.3829, 0.846472, 0.884063, - 0.231452, 0.351496, 0.881788, 0.898284, - 0.215561, 0.31895, 0.917438, 0.912964, - 0.198208, 0.287367, 0.952422, 0.924666, - 0.180426, 0.254487, 0.987551, 0.934429, - 0.161525, 0.222226, 1.02142, 0.943485, - 0.141197, 0.191143, 1.05218, 0.9521, - 0.120085, 0.161112, 1.07937, 0.957876, - 0.0975881, 0.130982, 1.10403, 0.966943, - 0.0726842, 0.0990553, 1.12616, 0.978313, - 0.0483705, 0.0662818, 1.14619, 0.990048, - 0.0239072, 0.0329243, 1.16413, 0.999984, 0.000461885, - 7.72859e-05, 1.18099, 0.321287, - 9.35049e-06, 0.455413, 6.59662e-06, 0.332595, - 0.000237513, 0.471437, 0.000167562, 0.332729, - 0.000949964, 0.471618, 0.000670192, 0.332305, - 0.00213618, 0.471028, 0.00150712, 0.332326, - 0.00379765, 0.471055, 0.00267959, 0.332344, - 0.00593353, 0.471072, 0.00418751, 0.332356, - 0.00854349, 0.471077, 0.00603172, 0.332403, - 0.0116268, 0.471121, 0.00821362, 0.332461, - 0.0151824, 0.47117, 0.0107357, 0.332552, - 0.0192088, 0.471251, 0.0136014, 0.332657, - 0.0237024, 0.47133, 0.0168152, 0.332835, - 0.0286615, 0.471487, 0.0203853, 0.333083, - 0.0340765, 0.471708, 0.0243212, 0.333547, - 0.0398563, 0.47219, 0.0286518, 0.333989, - 0.0460916, 0.472587, 0.0333763, 0.334532, - 0.0527897, 0.473054, 0.0385084, 0.335167, - 0.0599284, 0.473568, 0.0440638, 0.33608, - 0.0673514, 0.474362, 0.0500962, 0.337146, - 0.0752237, 0.475231, 0.0566022, 0.338462, - 0.083418, 0.476282, 0.0636272, 0.34014, - 0.0919382, 0.477615, 0.0712153, 0.342341, - 0.100741, 0.479404, 0.079417, 0.345088, - 0.109905, 0.481618, 0.0882631, 0.349049, - 0.119369, 0.485081, 0.0978851, 0.353939, - 0.129033, 0.489317, 0.108336, 0.359893, - 0.139038, 0.494309, 0.119698, 0.366945, - 0.149411, 0.499983, 0.132024, 0.375814, - 0.159843, 0.507185, 0.145558, 0.387112, - 0.170664, 0.516392, 0.160433, 0.40023, - 0.181897, 0.526519, 0.176648, 0.412555, - 0.192785, 0.53423, 0.193922, 0.427023, - 0.203663, 0.542741, 0.212662, 0.443685, - 0.214695, 0.552066, 0.232944, 0.461499, - 0.225561, 0.560762, 0.254495, 0.480975, - 0.236257, 0.569421, 0.277531, 0.501, - 0.24639, 0.576101, 0.301724, 0.521691, - 0.256101, 0.581493, 0.327112, 0.543478, - 0.265289, 0.585221, 0.353917, 0.566094, - 0.273938, 0.587614, 0.381941, 0.589578, - 0.281679, 0.587991, 0.41172, 0.614583, - 0.287655, 0.585928, 0.444148, 0.641813, - 0.292228, 0.582092, 0.478617, 0.666189, - 0.295172, 0.57398, 0.51397, 0.690475, - 0.29648, 0.561676, 0.550118, 0.715543, - 0.296203, 0.548758, 0.586933, 0.740405, - 0.293999, 0.532792, 0.62384, 0.762183, - 0.28998, 0.512735, 0.660723, 0.786069, - 0.28478, 0.492402, 0.69807, 0.806812, - 0.277568, 0.469058, 0.734422, 0.826987, - 0.268951, 0.443017, 0.770946, 0.844588, - 0.259049, 0.415501, 0.80699, 0.863725, - 0.2471, 0.387328, 0.842107, 0.879137, - 0.234157, 0.356108, 0.878078, 0.894634, - 0.218719, 0.324315, 0.914058, 0.909162, - 0.201293, 0.291813, 0.949922, 0.92072, - 0.18267, 0.258474, 0.985337, 0.93158, - 0.163212, 0.225593, 1.0205, 0.941238, - 0.142771, 0.193986, 1.05273, 0.949293, - 0.120956, 0.163392, 1.08075, 0.956226, - 0.0985743, 0.132934, 1.10559, 0.96546, - 0.075118, 0.101255, 1.12823, 0.977403, - 0.0497921, 0.0675441, 1.149, 0.989648, - 0.0241574, 0.0334681, 1.16765, 1.00001, 0.0005762, - 0.000184807, 1.18519, 0.303474, - 9.16603e-06, 0.4542, 6.1243e-06, 0.308894, - 0.000232869, 0.462306, 0.000155592, 0.309426, - 0.000931661, 0.463093, 0.000622499, 0.308643, - 0.0020949, 0.461933, 0.00139979, 0.308651, - 0.0037242, 0.461941, 0.00248874, 0.308662, - 0.00581873, 0.46195, 0.00388933, 0.308687, - 0.00837818, 0.461974, 0.00560247, 0.308728, - 0.0114016, 0.462011, 0.00762948, 0.308789, - 0.0148884, 0.462067, 0.00997326, 0.308882, - 0.0188369, 0.462151, 0.0126375, 0.309007, - 0.0232436, 0.462263, 0.0156271, 0.30918, - 0.0281054, 0.462417, 0.0189498, 0.309442, - 0.0334065, 0.462667, 0.0226167, 0.309901, - 0.0390589, 0.463162, 0.0266614, 0.310331, - 0.0452042, 0.463555, 0.0310715, 0.310858, - 0.0517735, 0.464019, 0.0358698, 0.311576, - 0.0587359, 0.464669, 0.0410848, 0.312436, - 0.0660383, 0.465406, 0.0467453, 0.313526, - 0.0737266, 0.466339, 0.0528718, 0.314903, - 0.0817574, 0.467504, 0.0595039, 0.316814, - 0.090167, 0.469226, 0.0666888, 0.318965, - 0.0987555, 0.470981, 0.0744658, 0.322077, - 0.107792, 0.473814, 0.082912, 0.325947, - 0.117098, 0.477241, 0.0920846, 0.331008, - 0.126602, 0.48184, 0.102137, 0.337893, - 0.136619, 0.488334, 0.113135, 0.345106, - 0.146838, 0.494415, 0.12511, 0.355111, - 0.157357, 0.503275, 0.138356, 0.365095, - 0.167955, 0.510966, 0.152686, 0.378344, - 0.179157, 0.521508, 0.16856, 0.391599, - 0.190143, 0.530455, 0.18561, 0.407786, - 0.20123, 0.541275, 0.204308, 0.425294, - 0.212456, 0.551784, 0.224623, 0.444021, - 0.223568, 0.561493, 0.246172, 0.463418, - 0.234154, 0.569886, 0.268979, 0.484077, - 0.244546, 0.577116, 0.293411, 0.505513, - 0.254301, 0.582914, 0.318936, 0.527672, - 0.263564, 0.587208, 0.345856, 0.550565, - 0.272332, 0.589277, 0.374054, 0.573656, - 0.280011, 0.588426, 0.403276, 0.59827, - 0.286924, 0.587504, 0.43474, 0.624731, - 0.291994, 0.583401, 0.468767, 0.652396, - 0.295159, 0.576997, 0.504411, 0.67732, - 0.296954, 0.565863, 0.54114, 0.703147, - 0.296877, 0.552316, 0.57816, 0.728715, - 0.295147, 0.536773, 0.616124, 0.752448, - 0.291275, 0.51771, 0.653885, 0.775169, - 0.285905, 0.496087, 0.691537, 0.799307, - 0.279064, 0.474232, 0.729251, 0.819482, - 0.270294, 0.447676, 0.766267, 0.837659, - 0.260032, 0.419656, 0.802616, 0.856903, - 0.248497, 0.391328, 0.838583, 0.873325, - 0.235252, 0.360285, 0.874711, 0.889788, - 0.221126, 0.329215, 0.91077, 0.904486, - 0.204304, 0.296392, 0.94653, 0.917711, - 0.185562, 0.262159, 0.983828, 0.928969, - 0.165635, 0.229142, 1.01955, 0.939707, - 0.14442, 0.19673, 1.05317, 0.948167, - 0.122147, 0.165095, 1.0823, 0.955222, - 0.099098, 0.13451, 1.10791, 0.964401, - 0.0755332, 0.102476, 1.1312, 0.976605, - 0.0513817, 0.0689667, 1.15218, 0.989085, - 0.0258499, 0.034506, 1.17129, 0.999908, 0.000617773, - 0.000271268, 1.18961, 0.285803, - 9.05752e-06, 0.452348, 5.72272e-06, 0.284689, - 0.00022732, 0.450581, 0.000143626, 0.285263, - 0.000910214, 0.451482, 0.000575099, 0.285302, - 0.00204784, 0.451553, 0.00129395, 0.285318, - 0.00364057, 0.451574, 0.0023006, 0.28533, - 0.00568813, 0.451585, 0.00359547, 0.285361, - 0.00819001, 0.451618, 0.00517934, 0.285397, - 0.0111458, 0.45165, 0.007054, 0.285447, - 0.0145536, 0.451688, 0.00922167, 0.285527, - 0.0184127, 0.451758, 0.0116869, 0.285688, - 0.0227207, 0.451929, 0.0144555, 0.28584, - 0.0274712, 0.452055, 0.0175341, 0.286136, - 0.0326278, 0.452369, 0.0209406, 0.286574, - 0.0381792, 0.452853, 0.0246965, 0.287012, - 0.0441879, 0.453272, 0.0287996, 0.287542, - 0.0506096, 0.453752, 0.033268, 0.288299, - 0.0573634, 0.454488, 0.0381504, 0.289186, - 0.0645458, 0.455294, 0.0434447, 0.290302, - 0.0720405, 0.456301, 0.0491973, 0.291776, - 0.0799046, 0.457648, 0.0554453, 0.29372, - 0.088117, 0.459483, 0.0622311, 0.296052, - 0.0965328, 0.461571, 0.0695992, 0.299563, - 0.105409, 0.465085, 0.077658, 0.30335, - 0.114553, 0.468506, 0.0864176, 0.309167, - 0.123917, 0.474423, 0.0961078, 0.31529, - 0.13381, 0.47995, 0.106643, 0.324163, - 0.144021, 0.488592, 0.118322, 0.333272, - 0.154382, 0.496461, 0.131133, 0.344224, - 0.165015, 0.50562, 0.145208, 0.357733, - 0.176168, 0.516719, 0.16073, 0.373046, - 0.187468, 0.528513, 0.177807, 0.38788, - 0.198488, 0.537713, 0.196072, 0.405133, - 0.209545, 0.547999, 0.21605, 0.423845, - 0.220724, 0.55759, 0.237484, 0.443777, - 0.231518, 0.566246, 0.26039, 0.464824, - 0.242035, 0.574326, 0.284835, 0.486635, - 0.251898, 0.58037, 0.310518, 0.51012, - 0.261304, 0.58568, 0.337678, 0.535301, - 0.270384, 0.590197, 0.366242, 0.559193, - 0.27841, 0.590569, 0.395873, 0.583544, - 0.285325, 0.588161, 0.426857, 0.608834, - 0.291113, 0.584249, 0.459477, 0.635753, - 0.294882, 0.57763, 0.494734, 0.664367, - 0.297088, 0.569479, 0.532023, 0.689688, - 0.297364, 0.555064, 0.569629, 0.715732, - 0.295949, 0.539522, 0.608124, 0.741307, - 0.292259, 0.521613, 0.646231, 0.764949, - 0.287063, 0.49969, 0.684938, 0.788599, - 0.28012, 0.476747, 0.723548, 0.81048, - 0.27153, 0.45116, 0.761135, 0.831372, - 0.261289, 0.424101, 0.798916, 0.850092, - 0.249559, 0.39443, 0.835952, 0.867777, - 0.236348, 0.363849, 0.871606, 0.884632, - 0.221569, 0.332477, 0.907843, 0.90047, - 0.20618, 0.300667, 0.944187, 0.914524, - 0.188771, 0.266552, 0.981371, 0.926892, - 0.168362, 0.232349, 1.01841, 0.937951, - 0.146761, 0.199359, 1.05308, 0.947236, - 0.123813, 0.1675, 1.0839, 0.954367, - 0.099984, 0.136166, 1.11047, 0.963907, - 0.0759278, 0.103808, 1.13414, 0.976218, - 0.0511367, 0.0697061, 1.15575, 0.988772, - 0.0267415, 0.0352529, 1.17531, 0.999888, - 0.000520778, 0.000289926, 1.19389, 0.263546, - 8.83274e-06, 0.441896, 5.26783e-06, 0.262352, - 0.000221849, 0.439889, 0.000132311, 0.262325, - 0.000886683, 0.439848, 0.000528824, 0.26228, - 0.00199476, 0.439765, 0.00118975, 0.262372, - 0.00354671, 0.439922, 0.00211568, 0.26239, - 0.00554141, 0.439941, 0.00330652, 0.262412, - 0.00797888, 0.439961, 0.00476346, 0.262453, - 0.0108584, 0.440002, 0.00648818, 0.262528, - 0.0141788, 0.440085, 0.0084835, 0.262615, - 0.017938, 0.440166, 0.0107533, 0.262744, - 0.0221346, 0.440291, 0.0133044, 0.262939, - 0.026762, 0.440493, 0.0161445, 0.263277, - 0.0317573, 0.440889, 0.0192974, 0.26368, - 0.0371832, 0.441338, 0.0227699, 0.264106, - 0.0430371, 0.441753, 0.0265698, 0.264624, - 0.0493035, 0.442227, 0.0307178, 0.265378, - 0.0558669, 0.442985, 0.0352616, 0.266253, - 0.0628718, 0.443795, 0.0401968, 0.267478, - 0.0701569, 0.445008, 0.04559, 0.269062, - 0.077845, 0.446599, 0.0514539, 0.270926, - 0.0857941, 0.448349, 0.0578382, 0.273693, - 0.0940773, 0.451221, 0.0648363, 0.276746, - 0.102704, 0.454097, 0.0724389, 0.281693, - 0.111735, 0.459517, 0.0808744, 0.287335, - 0.121004, 0.46531, 0.0901551, 0.29448, - 0.130734, 0.472605, 0.100371, 0.30257, - 0.140777, 0.480251, 0.111644, 0.312465, - 0.15111, 0.489444, 0.124111, 0.324856, - 0.16189, 0.500919, 0.137979, 0.33774, - 0.172946, 0.511317, 0.153163, 0.35255, - 0.184152, 0.522684, 0.169817, 0.367786, - 0.19522, 0.53248, 0.187886, 0.385474, - 0.20632, 0.543326, 0.207634, 0.404976, - 0.217744, 0.554109, 0.229165, 0.425203, - 0.228691, 0.563395, 0.252068, 0.446704, - 0.239299, 0.571565, 0.276471, 0.468951, - 0.249348, 0.577935, 0.302323, 0.493487, - 0.258933, 0.584309, 0.329882, 0.517861, - 0.268009, 0.58773, 0.358525, 0.543309, - 0.276238, 0.589612, 0.388585, 0.569704, - 0.28356, 0.589294, 0.419787, 0.594871, - 0.289497, 0.585137, 0.452114, 0.622555, - 0.294452, 0.580356, 0.486466, 0.651167, - 0.296918, 0.57185, 0.523079, 0.677332, - 0.297647, 0.558428, 0.5611, 0.703718, - 0.296321, 0.542232, 0.599592, 0.730262, - 0.293339, 0.524541, 0.639138, 0.754304, - 0.288036, 0.502691, 0.677978, 0.778051, - 0.281018, 0.479212, 0.716537, 0.801557, - 0.272414, 0.454071, 0.75586, 0.822559, - 0.262419, 0.425952, 0.794477, 0.843051, - 0.250702, 0.397313, 0.832664, 0.86232, - 0.237264, 0.366534, 0.869876, 0.879044, - 0.222716, 0.334816, 0.906973, 0.896362, - 0.206827, 0.303143, 0.943558, 0.910342, - 0.189659, 0.269699, 0.979759, 0.924119, - 0.171108, 0.236411, 1.01718, 0.935374, - 0.149579, 0.202224, 1.05289, 0.944295, - 0.126295, 0.16989, 1.08496, 0.952227, - 0.101511, 0.138089, 1.11256, 0.962041, - 0.0766392, 0.105053, 1.1375, 0.97528, - 0.0511967, 0.070329, 1.15983, 0.988476, - 0.025463, 0.0351268, 1.17987, 0.999962, 2.86808e-05, 1.45564e-05, 1.19901, 0.227089, - 8.41413e-06, 0.404216, 4.72707e-06, 0.239725, - 0.000215083, 0.426708, 0.000120833, 0.239904, - 0.000860718, 0.427028, 0.000483555, 0.239911, - 0.00193661, 0.427039, 0.00108806, 0.239914, - 0.00344276, 0.42704, 0.00193457, 0.239933, - 0.00537907, 0.427064, 0.00302363, 0.239944, - 0.00774482, 0.427065, 0.00435604, 0.239993, - 0.01054, 0.427122, 0.00593398, 0.240052, - 0.0137626, 0.427179, 0.00775987, 0.240148, - 0.0174115, 0.427279, 0.00983854, 0.240278, - 0.021484, 0.42741, 0.0121763, 0.240472, - 0.0259729, 0.427618, 0.0147827, 0.240839, - 0.0308131, 0.428086, 0.0176837, 0.241201, - 0.0360893, 0.428482, 0.0208775, 0.241626, - 0.0417723, 0.428907, 0.0243821, 0.242207, - 0.0478337, 0.42952, 0.0282228, 0.24298, - 0.0542199, 0.430332, 0.0324333, 0.243881, - 0.0610015, 0.431222, 0.0370252, 0.245123, - 0.0680874, 0.432512, 0.0420535, 0.24667, - 0.0755482, 0.434088, 0.0475414, 0.248779, - 0.0832873, 0.436323, 0.0535542, 0.251665, - 0.0913546, 0.439509, 0.0601716, 0.255305, - 0.0998489, 0.443478, 0.0674282, 0.260049, - 0.108576, 0.448713, 0.0754673, 0.266192, - 0.117754, 0.455524, 0.084339, 0.273158, - 0.127294, 0.4627, 0.0941683, 0.282131, - 0.137311, 0.472068, 0.10515, 0.293332, - 0.147736, 0.483565, 0.117402, 0.304667, - 0.158357, 0.493702, 0.130824, 0.317785, - 0.169274, 0.504708, 0.145724, 0.333245, - 0.180595, 0.517107, 0.16215, 0.349843, - 0.191892, 0.528849, 0.180149, 0.367944, - 0.203168, 0.540301, 0.199746, 0.387579, - 0.214443, 0.551514, 0.221047, 0.408247, - 0.225624, 0.560906, 0.243981, 0.43014, - 0.236422, 0.56959, 0.268513, 0.452669, - 0.24654, 0.576098, 0.294409, 0.476196, - 0.256157, 0.580925, 0.322002, 0.501157, - 0.265289, 0.584839, 0.351052, 0.527632, - 0.273671, 0.587614, 0.3812, 0.555754, - 0.281254, 0.589119, 0.412994, 0.581682, - 0.287448, 0.585204, 0.445498, 0.608196, - 0.292614, 0.579006, 0.479505, 0.635661, - 0.296068, 0.571297, 0.514643, 0.664999, - 0.297395, 0.560855, 0.552213, 0.691039, - 0.296645, 0.544525, 0.591365, 0.7179, - 0.293785, 0.526535, 0.630883, 0.744059, - 0.289089, 0.50545, 0.670932, 0.76863, - 0.282239, 0.482514, 0.710904, 0.793273, - 0.273688, 0.457246, 0.750259, 0.814731, - 0.26328, 0.428872, 0.78948, 0.835603, - 0.251526, 0.399384, 0.828597, 0.85489, - 0.238339, 0.368811, 0.866892, 0.872828, - 0.223607, 0.336617, 0.90563, 0.889462, - 0.207538, 0.303997, 0.943538, 0.904929, - 0.190297, 0.270812, 0.980591, 0.919101, - 0.172034, 0.237453, 1.01935, 0.930536, - 0.152058, 0.204431, 1.05498, 0.941223, - 0.129515, 0.172495, 1.08717, 0.94982, - 0.104263, 0.140175, 1.11551, 0.960592, - 0.0781944, 0.106465, 1.14098, 0.974629, - 0.051688, 0.0711592, 1.16418, 0.98811, - 0.0253929, 0.0354432, 1.18465, 1.00004, 0.000804378, - 0.000330876, 1.20462, 0.214668, - 8.21282e-06, 0.406619, 4.33582e-06, 0.218053, - 0.000208144, 0.413025, 0.000109887, 0.217987, - 0.000832212, 0.412901, 0.000439362, 0.217971, - 0.00187246, 0.412876, 0.000988623, 0.217968, - 0.00332855, 0.41286, 0.00175772, 0.217985, - 0.00520055, 0.412882, 0.00274729, 0.218014, - 0.00748814, 0.412916, 0.00395842, 0.218054, - 0.0101901, 0.412957, 0.00539274, 0.218106, - 0.0133057, 0.413005, 0.00705348, 0.218217, - 0.0168342, 0.413139, 0.00894581, 0.218338, - 0.0207707, 0.413258, 0.0110754, 0.21855, - 0.0251001, 0.413509, 0.0134551, 0.218913, - 0.0297861, 0.413992, 0.0161081, 0.219265, - 0.0348956, 0.414383, 0.0190307, 0.219696, - 0.0403909, 0.414839, 0.0222458, 0.220329, - 0.0462003, 0.415567, 0.025792, 0.220989, - 0.0524208, 0.41621, 0.0296637, 0.222027, - 0.058948, 0.417385, 0.0339323, 0.223301, - 0.0658208, 0.418779, 0.0386055, 0.224988, - 0.0730347, 0.420665, 0.0437355, 0.227211, - 0.0805274, 0.423198, 0.0493844, 0.230131, - 0.088395, 0.426566, 0.0556135, 0.233908, - 0.0966208, 0.43091, 0.0624829, 0.239092, - 0.105223, 0.437148, 0.0701636, 0.245315, - 0.11424, 0.444302, 0.0786949, 0.253166, - 0.12368, 0.453262, 0.0882382, 0.262374, - 0.133569, 0.463211, 0.0988682, 0.273145, - 0.143836, 0.474271, 0.110727, 0.285512, - 0.154577, 0.4863, 0.123945, 0.299512, - 0.165501, 0.498817, 0.138581, 0.314287, - 0.176698, 0.510341, 0.154676, 0.331083, - 0.188066, 0.522583, 0.172459, 0.349615, - 0.199597, 0.534879, 0.191979, 0.369318, - 0.210843, 0.546083, 0.21309, 0.390377, - 0.222068, 0.5562, 0.235998, 0.412411, - 0.233059, 0.564704, 0.260518, 0.435715, - 0.24357, 0.572314, 0.286795, 0.461196, - 0.253356, 0.579395, 0.314559, 0.485587, - 0.262362, 0.581985, 0.343581, 0.511908, - 0.270895, 0.584347, 0.374367, 0.539798, - 0.278452, 0.58505, 0.406015, 0.567974, - 0.284877, 0.583344, 0.439168, 0.594303, - 0.290124, 0.577348, 0.473005, 0.622951, - 0.294183, 0.570751, 0.508534, 0.652404, - 0.296389, 0.561541, 0.544764, 0.679291, - 0.296605, 0.546426, 0.582927, 0.706437, - 0.294095, 0.528599, 0.622681, 0.734485, - 0.28978, 0.508676, 0.663567, 0.758841, - 0.283363, 0.484768, 0.704092, 0.78537, - 0.275015, 0.460434, 0.745101, 0.807315, - 0.264689, 0.432166, 0.784712, 0.8271, - 0.252597, 0.401807, 0.824241, 0.849191, - 0.239154, 0.371458, 0.863803, 0.867046, - 0.224451, 0.338873, 0.903063, 0.8852, - 0.208342, 0.306175, 0.942763, 0.901771, - 0.190684, 0.272759, 0.981559, 0.915958, - 0.172105, 0.239306, 1.02048, 0.928046, - 0.152214, 0.206071, 1.05765, 0.939961, - 0.130247, 0.17367, 1.08999, 0.948711, - 0.10672, 0.142201, 1.11829, 0.959305, - 0.0808688, 0.108454, 1.14467, 0.973009, - 0.0539145, 0.0728109, 1.16839, 0.987631, - 0.0262947, 0.0360625, 1.19004, 0.999978, 0.00132758, - 0.000559424, 1.21058, 0.193925, - 7.93421e-06, 0.391974, 3.92537e-06, 0.196746, - 0.000200315, 0.397675, 9.91033e-05, 0.19667, - 0.000801099, 0.397521, 0.000396342, 0.196633, - 0.00180246, 0.397445, 0.000891829, 0.196654, - 0.00320443, 0.397482, 0.00158582, 0.196659, - 0.00500647, 0.39748, 0.00247867, 0.196683, - 0.0072086, 0.397506, 0.00357167, 0.196728, - 0.00981001, 0.397562, 0.00486675, 0.196792, - 0.0128096, 0.397633, 0.00636707, 0.19689, - 0.0162055, 0.397746, 0.00807752, 0.197017, - 0.0199943, 0.397884, 0.0100052, 0.19729, - 0.024139, 0.39827, 0.0121691, 0.197583, - 0.0286671, 0.398639, 0.0145755, 0.197927, - 0.0335858, 0.399034, 0.0172355, 0.198383, - 0.0388806, 0.399554, 0.0201718, 0.199002, - 0.0444736, 0.400289, 0.0234194, 0.199739, - 0.0504583, 0.401111, 0.026984, 0.200784, - 0.056729, 0.402349, 0.0309217, 0.202075, - 0.0633643, 0.403841, 0.0352496, 0.203898, - 0.0703247, 0.406076, 0.0400313, 0.206199, - 0.0775565, 0.408841, 0.0453282, 0.209252, - 0.085184, 0.41259, 0.0511794, 0.213638, - 0.0931994, 0.418288, 0.0577459, 0.21881, - 0.101617, 0.424681, 0.0650508, 0.225642, - 0.11052, 0.433429, 0.0732759, 0.233717, - 0.119772, 0.442897, 0.0824683, 0.242823, - 0.129505, 0.452888, 0.0927484, 0.254772, - 0.139906, 0.466407, 0.104417, 0.266603, - 0.150402, 0.477413, 0.117211, 0.28073, - 0.161395, 0.490519, 0.131598, 0.295399, - 0.172465, 0.50201, 0.147407, 0.312705, - 0.183982, 0.515311, 0.165031, 0.331335, - 0.195532, 0.52786, 0.184336, 0.351037, - 0.206971, 0.5392, 0.205361, 0.372175, - 0.218117, 0.54941, 0.228043, 0.394548, - 0.229327, 0.558642, 0.25267, 0.419598, - 0.240052, 0.567861, 0.279071, 0.443922, - 0.249937, 0.573332, 0.306882, 0.471495, - 0.259407, 0.58013, 0.33661, 0.496769, - 0.267749, 0.580564, 0.367328, 0.524951, - 0.275524, 0.581696, 0.399753, 0.55318, - 0.282148, 0.579885, 0.433134, 0.581577, - 0.287533, 0.575471, 0.467534, 0.609231, - 0.291612, 0.567445, 0.502943, 0.637478, - 0.293911, 0.557657, 0.53871, 0.667795, - 0.295096, 0.546535, 0.576568, 0.694272, - 0.294073, 0.529561, 0.614929, 0.722937, - 0.290386, 0.510561, 0.655909, 0.749682, - 0.284481, 0.487846, 0.697663, 0.774754, - 0.276188, 0.462487, 0.738515, 0.799301, - 0.266215, 0.43481, 0.779802, 0.820762, - 0.254116, 0.404879, 0.820045, 0.843231, - 0.240393, 0.374559, 0.860294, 0.861857, - 0.225503, 0.341582, 0.900965, 0.880815, - 0.209382, 0.308778, 0.941727, 0.89766, - 0.19155, 0.275232, 0.980916, 0.912926, - 0.172346, 0.240938, 1.02162, 0.926391, - 0.151799, 0.207223, 1.0597, 0.938429, - 0.129968, 0.17484, 1.09291, 0.947834, - 0.10651, 0.142984, 1.12248, 0.958432, - 0.0824098, 0.109902, 1.149, 0.972402, - 0.0565242, 0.0744454, 1.1733, 0.987191, - 0.028427, 0.0373794, 1.19538, 0.999975, 3.85685e-05, - 4.203e-05, 1.21676, 0.178114, - 7.66075e-06, 0.385418, 3.54027e-06, 0.176074, - 0.000191966, 0.381002, 8.87135e-05, 0.17601, - 0.000767549, 0.380861, 0.000354715, 0.17598, - 0.00172696, 0.380798, 0.000798168, 0.175994, - 0.00307012, 0.380824, 0.00141928, 0.176017, - 0.00479684, 0.380858, 0.00221859, 0.176019, - 0.00690648, 0.380839, 0.00319714, 0.176072, - 0.00939888, 0.380913, 0.0043572, 0.176131, - 0.0122726, 0.380979, 0.005702, 0.176239, - 0.0155264, 0.38112, 0.00723689, 0.176371, - 0.0191551, 0.381272, 0.00896907, 0.176638, - 0.023117, 0.381669, 0.0109194, 0.176912, - 0.0274633, 0.382015, 0.0130903, 0.177279, - 0.032173, 0.382476, 0.0154949, 0.17774, - 0.0372219, 0.383041, 0.0181669, 0.178344, - 0.0426132, 0.38378, 0.0211209, 0.179153, - 0.0483309, 0.384773, 0.0243899, 0.180197, - 0.0543447, 0.386076, 0.0280062, 0.181581, - 0.0607122, 0.387809, 0.032004, 0.18344, - 0.0673855, 0.390205, 0.036453, 0.186139, - 0.0743989, 0.393944, 0.0414162, 0.189432, - 0.0817731, 0.39832, 0.0469394, 0.193795, - 0.0895464, 0.404188, 0.0531442, 0.199641, - 0.0978264, 0.4121, 0.0601374, 0.206679, - 0.106499, 0.421425, 0.0680078, 0.214865, - 0.115654, 0.431504, 0.076919, 0.224406, - 0.125268, 0.442526, 0.0868835, 0.235876, - 0.135475, 0.455465, 0.0981875, 0.248335, - 0.146023, 0.4681, 0.110759, 0.262868, - 0.157016, 0.482069, 0.124885, 0.278962, - 0.168245, 0.496182, 0.140645, 0.295082, - 0.17958, 0.507401, 0.157838, 0.313738, - 0.191227, 0.520252, 0.17695, 0.333573, - 0.202718, 0.531708, 0.197817, 0.356433, - 0.214424, 0.544509, 0.220785, 0.378853, - 0.225492, 0.55373, 0.245306, 0.402717, - 0.236236, 0.561348, 0.271593, 0.428375, - 0.246568, 0.568538, 0.299776, 0.454724, - 0.255941, 0.573462, 0.329433, 0.482291, - 0.264511, 0.576356, 0.360598, 0.509706, - 0.272129, 0.576446, 0.393204, 0.538805, - 0.278979, 0.575298, 0.427227, 0.568919, - 0.284528, 0.572154, 0.462157, 0.596804, - 0.288801, 0.564691, 0.497997, 0.625987, - 0.291334, 0.555134, 0.534467, 0.656414, - 0.292722, 0.545051, 0.571736, 0.683916, - 0.292185, 0.528813, 0.610158, 0.711809, - 0.290043, 0.51106, 0.649061, 0.739547, - 0.285246, 0.490103, 0.690081, 0.766914, - 0.277647, 0.465523, 0.732554, 0.791375, - 0.267603, 0.437718, 0.773982, 0.814772, - 0.256109, 0.40882, 0.81609, 0.836691, - 0.242281, 0.377823, 0.856849, 0.856984, - 0.227155, 0.34496, 0.898363, 0.876332, - 0.210395, 0.311335, 0.939471, 0.894988, - 0.192612, 0.277703, 0.980799, 0.911113, - 0.173236, 0.243019, 1.02215, 0.924092, - 0.152258, 0.209037, 1.06139, 0.936828, - 0.129575, 0.175909, 1.09635, 0.946869, - 0.10594, 0.143852, 1.12707, 0.958284, - 0.081318, 0.110289, 1.15419, 0.972325, - 0.0556133, 0.0747232, 1.17909, 0.986878, - 0.0297899, 0.0383149, 1.20163, 0.999936, - 0.00197169, 0.000912402, 1.22338, 0.151174, - 7.20365e-06, 0.351531, 3.09789e-06, 0.155594, - 0.00018279, 0.361806, 7.8608e-05, 0.156099, - 0.000731569, 0.362982, 0.000314615, 0.156053, - 0.00164578, 0.362869, 0.000707845, 0.156093, - 0.0029261, 0.362961, 0.00125884, 0.156099, - 0.00457155, 0.362959, 0.00196783, 0.15612, - 0.00658224, 0.362982, 0.00283622, 0.156168, - 0.00895774, 0.363048, 0.00386625, 0.156221, - 0.0116962, 0.363101, 0.00506109, 0.156324, - 0.0147973, 0.363241, 0.00642675, 0.156476, - 0.0182503, 0.363448, 0.00797175, 0.156731, - 0.0220266, 0.36384, 0.00971484, 0.156994, - 0.026176, 0.364179, 0.0116575, 0.157341, - 0.0306701, 0.36462, 0.0138207, 0.157867, - 0.0354591, 0.365364, 0.0162356, 0.15846, - 0.0406141, 0.366111, 0.0189092, 0.159308, - 0.0460519, 0.367248, 0.021885, 0.160426, - 0.0518096, 0.368767, 0.0252004, 0.161877, - 0.0578906, 0.370745, 0.0288825, 0.163995, - 0.0642812, 0.373831, 0.0330139, 0.16655, - 0.0710067, 0.377366, 0.0376283, 0.170237, - 0.0781522, 0.382799, 0.0428493, 0.175096, - 0.0857172, 0.389915, 0.0487324, 0.181069, - 0.0938025, 0.398487, 0.0554214, 0.188487, - 0.102363, 0.408799, 0.0630189, 0.197029, - 0.111343, 0.419991, 0.071634, 0.206684, - 0.120812, 0.431455, 0.0812797, 0.218698, - 0.131033, 0.445746, 0.0923651, 0.230726, - 0.141373, 0.457471, 0.104545, 0.245516, - 0.152387, 0.472388, 0.118449, 0.261551, - 0.163628, 0.486671, 0.133923, 0.277437, - 0.174814, 0.49762, 0.150849, 0.296662, - 0.186713, 0.51162, 0.169924, 0.31795, - 0.198513, 0.525435, 0.190848, 0.339422, - 0.210119, 0.536267, 0.213504, 0.362143, - 0.221354, 0.545982, 0.237947, 0.387198, - 0.23224, 0.555364, 0.264427, 0.412349, - 0.24257, 0.561489, 0.292519, 0.439274, - 0.252284, 0.566903, 0.322561, 0.466779, - 0.261023, 0.569614, 0.353952, 0.496011, - 0.26899, 0.571589, 0.387278, 0.524964, - 0.275498, 0.570325, 0.421356, 0.556518, - 0.281449, 0.568792, 0.457314, 0.584363, - 0.285526, 0.560268, 0.493199, 0.614214, - 0.28844, 0.55205, 0.530276, 0.645684, - 0.289777, 0.541906, 0.56855, 0.673446, - 0.289722, 0.526464, 0.606927, 0.701924, - 0.287792, 0.509872, 0.645945, 0.73037, - 0.284315, 0.490649, 0.685564, 0.757405, - 0.278804, 0.467964, 0.726511, 0.784025, - 0.269543, 0.441468, 0.768601, 0.808255, - 0.258117, 0.41216, 0.811321, 0.830739, - 0.244728, 0.380606, 0.853496, 0.851914, - 0.229428, 0.348111, 0.895374, 0.872586, - 0.212508, 0.314732, 0.937674, 0.891581, - 0.194025, 0.280338, 0.979869, 0.907641, - 0.174711, 0.245203, 1.02253, 0.922233, - 0.153509, 0.21077, 1.06371, 0.935878, - 0.130418, 0.177399, 1.09972, 0.946338, - 0.105558, 0.144507, 1.13124, 0.957265, - 0.080059, 0.110508, 1.15973, 0.971668, - 0.0539766, 0.0742311, 1.18515, 0.9866, - 0.0277101, 0.0375224, 1.20858, 1.00021, - 0.000515531, 0.000135226, 1.23135, 0.137468, - 6.86011e-06, 0.345041, 2.73315e-06, 0.13703, - 0.000173378, 0.343936, 6.90761e-05, 0.136986, - 0.000693048, 0.34383, 0.000276126, 0.136964, - 0.00155931, 0.343761, 0.000621337, 0.137003, - 0.00277211, 0.343863, 0.00110494, 0.137012, - 0.00433103, 0.343868, 0.00172744, 0.137043, - 0.00623606, 0.343916, 0.00249022, 0.13709, - 0.0084868, 0.343986, 0.00339559, 0.137145, - 0.0110814, 0.344045, 0.00444687, 0.137242, - 0.0140187, 0.344177, 0.00565007, 0.137431, - 0.0172713, 0.344491, 0.00701868, 0.137644, - 0.0208605, 0.344805, 0.00856042, 0.13791, - 0.024792, 0.345172, 0.0102863, 0.138295, - 0.0290461, 0.345734, 0.0122185, 0.138764, - 0.0335957, 0.346371, 0.0143771, 0.139415, - 0.038467, 0.347298, 0.0167894, 0.140272, - 0.0436176, 0.348527, 0.0194895, 0.141457, - 0.0491016, 0.350276, 0.0225043, 0.14303, - 0.0548764, 0.352646, 0.0258962, 0.145289, - 0.0610096, 0.356206, 0.0297168, 0.148502, - 0.0674777, 0.361488, 0.0340562, 0.152188, - 0.074345, 0.367103, 0.0389534, 0.157359, - 0.0817442, 0.375247, 0.0445541, 0.16379, - 0.0896334, 0.385064, 0.0509535, 0.171376, - 0.098005, 0.396082, 0.0582611, 0.179901, - 0.106817, 0.407418, 0.06654, 0.189892, - 0.116239, 0.420031, 0.075994, 0.201838, - 0.12627, 0.434321, 0.0867239, 0.214311, - 0.136701, 0.447631, 0.0987517, 0.228902, - 0.147616, 0.462046, 0.112353, 0.245107, - 0.158871, 0.476942, 0.127605, 0.262292, - 0.170261, 0.490285, 0.144469, 0.281215, - 0.182017, 0.503783, 0.163282, 0.301058, - 0.193729, 0.515505, 0.183873, 0.322752, - 0.205512, 0.52682, 0.206466, 0.347547, - 0.217214, 0.539473, 0.231194, 0.370969, - 0.227966, 0.546625, 0.257288, 0.397533, - 0.238555, 0.55472, 0.285789, 0.42398, - 0.248278, 0.559468, 0.315746, 0.452928, - 0.257422, 0.564095, 0.347724, 0.482121, - 0.265306, 0.565426, 0.380922, 0.510438, - 0.272043, 0.563205, 0.415639, 0.541188, - 0.277614, 0.561087, 0.451702, 0.571667, - 0.281927, 0.554922, 0.48845, 0.602432, - 0.285015, 0.546838, 0.526442, 0.634126, - 0.286512, 0.537415, 0.564896, 0.662816, - 0.286388, 0.522906, 0.604037, 0.692411, - 0.284734, 0.507003, 0.643795, 0.720946, - 0.281297, 0.488398, 0.68298, 0.748293, - 0.276262, 0.466353, 0.723466, 0.776931, - 0.269978, 0.443573, 0.764565, 0.801065, - 0.260305, 0.415279, 0.805838, 0.825843, - 0.247426, 0.384773, 0.849985, 0.84807, - 0.232437, 0.352555, 0.893174, 0.869122, - 0.215806, 0.318642, 0.936564, 0.888963, - 0.197307, 0.28381, 0.980253, 0.905547, - 0.177203, 0.247888, 1.02463, 0.918554, - 0.155542, 0.212904, 1.06714, 0.931395, - 0.131948, 0.1787, 1.10451, 0.941749, - 0.106723, 0.145902, 1.13694, 0.954551, - 0.0804939, 0.111193, 1.1666, 0.970279, - 0.0534239, 0.0744697, 1.19249, 0.986117, - 0.0257452, 0.0368788, 1.21665, 0.999938, 0.00190634, - 0.0010291, 1.23981, 0.118493, - 6.47439e-06, 0.32272, 2.3772e-06, 0.118765, - 0.000163023, 0.323456, 5.98573e-05, 0.118772, - 0.00065212, 0.323477, 0.000239447, 0.118843, - 0.00146741, 0.323657, 0.000538881, 0.118804, - 0.00260846, 0.323553, 0.00095826, 0.118826, - 0.00407576, 0.323595, 0.00149845, 0.118846, - 0.00586826, 0.323617, 0.00216047, 0.118886, - 0.00798578, 0.32367, 0.00294679, 0.118947, - 0.0104273, 0.323753, 0.00386124, 0.119055, - 0.0131909, 0.323922, 0.00490999, 0.119241, - 0.0162444, 0.324251, 0.00610804, 0.11944, - 0.0196339, 0.324544, 0.00745805, 0.119739, - 0.0233378, 0.325026, 0.00897805, 0.12011, - 0.0273179, 0.325586, 0.0106895, 0.120571, - 0.0316143, 0.326231, 0.0126073, 0.12124, - 0.0361939, 0.327264, 0.0147654, 0.122162, - 0.0410511, 0.328733, 0.0172001, 0.123378, - 0.0462233, 0.330659, 0.0199375, 0.125183, - 0.0517109, 0.333754, 0.0230498, 0.127832, - 0.0575652, 0.338507, 0.026597, 0.130909, - 0.0637441, 0.343666, 0.0306345, 0.135221, - 0.0704302, 0.351063, 0.035273, 0.14082, - 0.0776364, 0.360604, 0.0406137, 0.146781, - 0.0852293, 0.369638, 0.0466788, 0.155121, - 0.0935351, 0.3827, 0.0537628, 0.16398, - 0.102234, 0.39522, 0.0617985, 0.173926, - 0.111465, 0.40793, 0.07097, 0.185137, - 0.121296, 0.42105, 0.0813426, 0.19826, - 0.13169, 0.435735, 0.0931596, 0.212938, - 0.142614, 0.450932, 0.106547, 0.229046, - 0.153884, 0.465726, 0.121575, 0.246246, - 0.165382, 0.479461, 0.138286, 0.264637, - 0.176806, 0.492106, 0.15666, 0.284959, - 0.188793, 0.504774, 0.17728, 0.308157, - 0.200763, 0.518805, 0.19988, 0.330951, - 0.21239, 0.528231, 0.224293, 0.3549, - 0.223521, 0.536376, 0.250541, 0.381502, - 0.234169, 0.544846, 0.278902, 0.409529, - 0.244077, 0.551717, 0.309227, 0.437523, - 0.253363, 0.55517, 0.341426, 0.467624, - 0.261659, 0.557772, 0.37518, 0.497268, - 0.268498, 0.556442, 0.41007, 0.528294, - 0.274018, 0.553915, 0.446445, 0.559053, - 0.278169, 0.549153, 0.483779, 0.589329, - 0.281229, 0.539878, 0.522249, 0.622503, - 0.282902, 0.53162, 0.561754, 0.652382, - 0.282815, 0.518119, 0.601544, 0.681847, - 0.281247, 0.502187, 0.641574, 0.712285, - 0.277986, 0.484824, 0.682633, 0.740094, - 0.273017, 0.463483, 0.723426, 0.768478, - 0.266692, 0.441299, 0.763747, 0.794556, - 0.258358, 0.415238, 0.805565, 0.819408, - 0.248807, 0.386912, 0.847254, 0.843411, - 0.236214, 0.356165, 0.891091, 0.862397, - 0.219794, 0.320562, 0.936174, 0.883113, - 0.201768, 0.285322, 0.982562, 0.90023, - 0.181672, 0.249713, 1.02862, 0.915192, - 0.159279, 0.214546, 1.07163, 0.928458, - 0.134725, 0.180285, 1.10995, 0.94069, - 0.10913, 0.147119, 1.14354, 0.953409, - 0.0821315, 0.112492, 1.17372, 0.969537, - 0.0542677, 0.0752014, 1.20043, 0.985612, - 0.0259096, 0.0370361, 1.22528, 0.999835, 0.00298198, - 0.00151801, 1.24959, 0.10097, - 6.02574e-06, 0.300277, 2.02619e-06, 0.101577, - 0.000152164, 0.302077, 5.11662e-05, 0.101572, - 0.000608889, 0.302066, 0.000204751, 0.101566, - 0.00136997, 0.302047, 0.000460753, 0.101592, - 0.00243557, 0.302114, 0.000819497, 0.101608, - 0.0038053, 0.30214, 0.00128154, 0.101627, - 0.00547906, 0.30216, 0.0018483, 0.101669, - 0.00745647, 0.302224, 0.00252223, 0.101732, - 0.00973615, 0.302318, 0.00330716, 0.101844, - 0.0123097, 0.302513, 0.00421061, 0.102025, - 0.0151681, 0.30285, 0.00524481, 0.102224, - 0.0183334, 0.303166, 0.0064154, 0.102515, - 0.0217819, 0.303654, 0.00774063, 0.102886, - 0.0255067, 0.304243, 0.0092398, 0.103395, - 0.029514, 0.305089, 0.0109339, 0.104109, - 0.0337912, 0.306301, 0.0128561, 0.105074, - 0.0383565, 0.30798, 0.0150338, 0.10654, - 0.0432132, 0.310726, 0.0175228, 0.108478, - 0.0484244, 0.314351, 0.0203648, 0.111015, - 0.0539339, 0.319032, 0.0236325, 0.114682, - 0.0598885, 0.32605, 0.0274188, 0.11911, - 0.0663375, 0.334109, 0.0317905, 0.124736, - 0.0733011, 0.344013, 0.0368502, 0.131479, - 0.0807744, 0.355358, 0.0427104, 0.139283, - 0.0888204, 0.367614, 0.0494788, 0.148054, - 0.0973394, 0.380072, 0.0572367, 0.159037, - 0.10665, 0.395678, 0.0662704, 0.169794, - 0.116221, 0.40795, 0.0763192, 0.18314, - 0.126632, 0.423546, 0.087956, 0.197515, - 0.137383, 0.438213, 0.101042, 0.213514, - 0.148641, 0.453248, 0.115827, 0.23065, - 0.160117, 0.46688, 0.132283, 0.249148, - 0.171807, 0.479962, 0.150644, 0.270219, - 0.183695, 0.494618, 0.171073, 0.292338, - 0.195574, 0.506937, 0.193378, 0.314999, - 0.207205, 0.516463, 0.217585, 0.340991, - 0.218955, 0.528123, 0.24428, 0.367982, - 0.229917, 0.537025, 0.272784, 0.39432, - 0.239737, 0.541627, 0.302742, 0.423364, - 0.249048, 0.546466, 0.335112, 0.453751, - 0.257329, 0.549466, 0.369032, 0.48416, - 0.264623, 0.549503, 0.404577, 0.515262, - 0.270411, 0.547008, 0.441337, 0.547036, - 0.274581, 0.542249, 0.479162, 0.576614, - 0.277266, 0.533015, 0.517904, 0.611143, - 0.279144, 0.525512, 0.558508, 0.640989, - 0.279001, 0.51154, 0.598995, 0.671182, - 0.277324, 0.495641, 0.639935, 0.700848, - 0.273908, 0.477526, 0.681017, 0.729862, - 0.269063, 0.457955, 0.722764, 0.758273, - 0.262282, 0.434846, 0.764349, 0.784121, - 0.254281, 0.409203, 0.806206, 0.809798, - 0.24505, 0.382694, 0.848617, 0.834953, - 0.233861, 0.354034, 0.892445, 0.856817, - 0.221308, 0.321764, 0.936263, 0.877609, - 0.205996, 0.288118, 0.982401, 0.897489, - 0.186702, 0.253277, 1.02975, 0.913792, - 0.164618, 0.217963, 1.07488, 0.92785, - 0.140023, 0.183221, 1.11487, 0.940378, - 0.11328, 0.149385, 1.14947, 0.95273, - 0.0853958, 0.114152, 1.1807, 0.969059, - 0.0568698, 0.0769845, 1.20912, 0.985574, - 0.0276502, 0.0381186, 1.23498, 0.999943, 0.00239052, - 0.00126861, 1.25987, 0.0852715, - 5.60067e-06, 0.279021, 1.71162e-06, 0.0854143, - 0.000140871, 0.279483, 4.30516e-05, 0.0854191, - 0.000563385, 0.2795, 0.000172184, 0.0854188, - 0.00126753, 0.279493, 0.000387464, 0.0854229, - 0.00225337, 0.279501, 0.00068918, 0.0854443, - 0.00352086, 0.279549, 0.00107803, 0.0854697, - 0.00506962, 0.279591, 0.00155536, 0.0855093, - 0.00689873, 0.279652, 0.00212354, 0.0855724, - 0.00900821, 0.279752, 0.00278703, 0.0856991, - 0.0113799, 0.280011, 0.0035551, 0.085855, - 0.0140314, 0.280297, 0.00443449, 0.0860682, - 0.016963, 0.280682, 0.00543636, 0.086344, - 0.0201438, 0.281159, 0.0065788, 0.0867426, - 0.0235999, 0.281886, 0.00787977, 0.087239, - 0.0273069, 0.282745, 0.0093606, 0.0879815, - 0.031269, 0.284139, 0.011056, 0.0891258, - 0.035531, 0.28647, 0.0130065, 0.0906909, - 0.0400947, 0.289708, 0.0152495, 0.0927624, - 0.0449638, 0.293904, 0.0178454, 0.0958376, - 0.0502427, 0.300471, 0.0208915, 0.0995827, - 0.0559514, 0.30806, 0.0244247, 0.104526, - 0.0622152, 0.317874, 0.0285721, 0.110532, - 0.0690046, 0.329332, 0.0334227, 0.117385, - 0.0763068, 0.341217, 0.0390466, 0.12522, - 0.084184, 0.353968, 0.0455786, 0.134037, - 0.0925248, 0.366797, 0.0530773, 0.144014, - 0.101487, 0.380209, 0.0617424, 0.156013, - 0.111273, 0.395956, 0.071777, 0.168872, - 0.121431, 0.41053, 0.0830905, 0.183089, - 0.132105, 0.425073, 0.0959341, 0.198763, - 0.143286, 0.439833, 0.110448, 0.216159, - 0.154841, 0.454507, 0.126769, 0.234859, - 0.166588, 0.468368, 0.14495, 0.255879, - 0.178626, 0.482846, 0.165233, 0.27677, - 0.190218, 0.493489, 0.187217, 0.301184, - 0.202227, 0.506549, 0.211659, 0.325852, - 0.213764, 0.5158, 0.237922, 0.352824, - 0.22487, 0.525442, 0.26632, 0.380882, - 0.235246, 0.532487, 0.296691, 0.410137, - 0.244847, 0.537703, 0.329179, 0.439787, - 0.253122, 0.540361, 0.363135, 0.472291, - 0.260517, 0.542734, 0.399222, 0.501856, - 0.266519, 0.538826, 0.436352, 0.534816, - 0.270905, 0.535152, 0.474505, 0.565069, - 0.273826, 0.525979, 0.513988, 0.597154, - 0.275333, 0.516394, 0.554852, 0.630473, - 0.275314, 0.506206, 0.596592, 0.660574, - 0.273323, 0.489769, 0.638117, 0.692015, - 0.270008, 0.472578, 0.680457, 0.720647, - 0.265001, 0.452134, 0.723008, 0.750528, - 0.258311, 0.430344, 0.765954, 0.777568, - 0.250046, 0.405624, 0.809012, 0.80387, - 0.240114, 0.378339, 0.852425, 0.828439, - 0.228737, 0.349877, 0.895346, 0.851472, - 0.216632, 0.318968, 0.940695, 0.873906, - 0.202782, 0.287489, 0.987235, 0.89467, - 0.187059, 0.254394, 1.03348, 0.912281, - 0.168818, 0.221294, 1.07812, 0.927358, - 0.146494, 0.18675, 1.11928, 0.940385, - 0.120009, 0.152322, 1.15609, 0.952672, - 0.0917183, 0.117514, 1.18875, 0.968496, - 0.0620321, 0.0797405, 1.21821, 0.985236, - 0.0314945, 0.0402383, 1.24523, 0.99998, - 0.000575153, 0.000110644, 1.27133, 0.0702429, - 5.12222e-06, 0.255273, 1.40947e-06, 0.0702981, - 0.000128826, 0.255469, 3.54488e-05, 0.0703691, - 0.000515562, 0.255727, 0.000141874, 0.0703805, - 0.00116, 0.255754, 0.00031929, 0.0703961, - 0.00206224, 0.255813, 0.000567999, 0.0704102, - 0.00322223, 0.255839, 0.00088871, 0.0704298, - 0.00463928, 0.255863, 0.00128272, 0.0704759, - 0.00631375, 0.255953, 0.00175283, 0.0705434, - 0.00824317, 0.256079, 0.00230342, 0.0706693, - 0.010412, 0.25636, 0.0029443, 0.0708189, - 0.0128439, 0.256647, 0.00368031, 0.0710364, - 0.0155177, 0.257084, 0.00452614, 0.0713223, - 0.0184374, 0.257637, 0.00549706, 0.0717182, - 0.0216002, 0.258416, 0.00661246, 0.072321, - 0.0249966, 0.259699, 0.00790147, 0.0731446, - 0.0286566, 0.261475, 0.0093884, 0.0743352, - 0.0325888, 0.264132, 0.0111186, 0.0760676, - 0.036843, 0.26815, 0.013145, 0.078454, - 0.0414292, 0.273636, 0.0155251, 0.0818618, - 0.0464634, 0.281653, 0.0183525, 0.0857382, - 0.0519478, 0.289992, 0.0216642, 0.0908131, - 0.0579836, 0.30066, 0.0255956, 0.0967512, - 0.0645124, 0.312204, 0.0301954, 0.103717, - 0.0716505, 0.325001, 0.0356017, 0.111596, - 0.0793232, 0.338129, 0.041896, 0.120933, - 0.087645, 0.352853, 0.0492447, 0.130787, - 0.096492, 0.366192, 0.0576749, 0.142311, - 0.105973, 0.380864, 0.0673969, 0.155344, - 0.116182, 0.396575, 0.0785899, 0.169535, - 0.126815, 0.411443, 0.0912377, 0.185173, - 0.138015, 0.426256, 0.105607, 0.201755, - 0.149325, 0.439607, 0.121551, 0.221334, - 0.161207, 0.455467, 0.139608, 0.241461, - 0.173162, 0.469096, 0.159591, 0.26294, - 0.18504, 0.481014, 0.18156, 0.286776, - 0.196881, 0.493291, 0.205781, 0.311596, - 0.208311, 0.503556, 0.231819, 0.338667, - 0.219671, 0.513268, 0.260274, 0.366021, - 0.230451, 0.519414, 0.290862, 0.395875, - 0.240131, 0.526766, 0.323196, 0.425564, - 0.248566, 0.52905, 0.357071, 0.457094, - 0.256195, 0.530796, 0.393262, 0.488286, - 0.262331, 0.528703, 0.430797, 0.522291, - 0.267141, 0.52727, 0.470231, 0.554172, - 0.270411, 0.519848, 0.510477, 0.586427, - 0.271986, 0.510307, 0.551594, 0.619638, - 0.27192, 0.499158, 0.593849, 0.650656, - 0.269817, 0.483852, 0.636314, 0.68284, - 0.266267, 0.467515, 0.679679, 0.714356, - 0.26113, 0.44931, 0.723884, 0.742717, - 0.254067, 0.425789, 0.767245, 0.770894, - 0.245652, 0.401144, 0.811819, 0.797358, - 0.235554, 0.374224, 0.856315, 0.823377, - 0.223896, 0.346167, 0.901077, 0.847456, - 0.210865, 0.316056, 0.946502, 0.870697, - 0.196574, 0.284503, 0.993711, 0.891068, - 0.180814, 0.251628, 1.04134, 0.909267, - 0.163314, 0.219065, 1.08609, 0.925653, - 0.143304, 0.186446, 1.12702, 0.940017, - 0.121322, 0.153416, 1.16371, 0.952398, - 0.0973872, 0.120334, 1.19712, 0.967568, - 0.0698785, 0.08352, 1.22791, 0.984772, - 0.0390031, 0.0439209, 1.25672, 1.00026, - 0.0070087, 0.00315668, 1.28428, 0.0556653, - 4.59654e-06, 0.227325, 1.12556e-06, 0.0565238, - 0.000116382, 0.230826, 2.84985e-05, 0.0565717, - 0.000465666, 0.231026, 0.000114036, 0.0565859, - 0.00104773, 0.231079, 0.000256656, 0.0565761, - 0.00186255, 0.231025, 0.00045663, 0.0565913, - 0.00291002, 0.231058, 0.000714664, 0.0566108, - 0.00418998, 0.231085, 0.00103224, 0.0566532, - 0.00570206, 0.231169, 0.00141202, 0.0567473, - 0.00743666, 0.231417, 0.00186018, 0.0568567, - 0.00940298, 0.231661, 0.00238264, 0.0569859, - 0.0115991, 0.231895, 0.00298699, 0.0572221, - 0.0140096, 0.232456, 0.00368957, 0.057519, - 0.0166508, 0.233096, 0.00450303, 0.0579534, - 0.01951, 0.234094, 0.00544945, 0.0585922, - 0.0225991, 0.235629, 0.00655564, 0.0595647, - 0.0259416, 0.238106, 0.00785724, 0.0609109, - 0.0295661, 0.241557, 0.00939127, 0.0628751, - 0.0335126, 0.246652, 0.0112198, 0.0656908, - 0.0378604, 0.254091, 0.0134168, 0.0691347, - 0.0426543, 0.262666, 0.0160374, 0.0732165, - 0.0478967, 0.272029, 0.0191514, 0.0782863, - 0.0536716, 0.283007, 0.0228597, 0.0843973, - 0.0600683, 0.295732, 0.0272829, 0.0913598, - 0.0670095, 0.308779, 0.032484, 0.0994407, - 0.0745516, 0.322886, 0.0385886, 0.108189, - 0.082712, 0.336408, 0.0457133, 0.118574, - 0.0914927, 0.351692, 0.0539832, 0.129989, - 0.100854, 0.366502, 0.0635162, 0.142722, - 0.110837, 0.381675, 0.0744386, 0.156654, - 0.121353, 0.3963, 0.0868483, 0.172151, - 0.132414, 0.411477, 0.100963, 0.188712, - 0.143809, 0.42508, 0.116795, 0.208093, - 0.155765, 0.441328, 0.134715, 0.227936, - 0.167608, 0.454328, 0.154396, 0.249495, - 0.179579, 0.467235, 0.176179, 0.27362, - 0.191488, 0.480248, 0.200193, 0.296371, - 0.202618, 0.487886, 0.225775, 0.324234, - 0.214133, 0.499632, 0.25441, 0.353049, - 0.225212, 0.509532, 0.285077, 0.381785, - 0.234875, 0.514265, 0.317047, 0.414038, - 0.244205, 0.521282, 0.351874, 0.445251, - 0.252145, 0.522931, 0.388279, 0.476819, - 0.258433, 0.520947, 0.425825, 0.509209, - 0.263411, 0.517669, 0.465104, 0.542759, - 0.266732, 0.512841, 0.505741, 0.574822, - 0.268263, 0.503317, 0.547611, 0.609324, - 0.268489, 0.493035, 0.590953, 0.641772, - 0.266941, 0.478816, 0.63488, 0.674049, - 0.263297, 0.462863, 0.679072, 0.705071, - 0.257618, 0.442931, 0.723487, 0.734709, - 0.250625, 0.421299, 0.768708, 0.763704, - 0.24179, 0.397085, 0.814375, 0.791818, - 0.231115, 0.370577, 0.859907, 0.817439, - 0.21922, 0.34232, 0.906715, 0.843202, - 0.205658, 0.312627, 0.953943, 0.866639, - 0.190563, 0.280933, 1.00185, 0.888129, - 0.173978, 0.248393, 1.05105, 0.907239, - 0.155485, 0.216007, 1.09704, 0.923893, - 0.134782, 0.183233, 1.13857, 0.938882, - 0.11249, 0.150376, 1.17539, 0.952464, - 0.0890706, 0.117177, 1.20924, 0.968529, - 0.0646523, 0.0813095, 1.24055, 0.984763, - 0.038606, 0.0439378, 1.27018, 1.00053, - 0.01238, 0.00598668, 1.29873, 0.0437928, - 4.09594e-06, 0.204012, 8.79224e-07, 0.0440166, - 0.000103395, 0.205049, 2.21946e-05, 0.0440529, - 0.000413633, 0.205225, 8.87981e-05, 0.0440493, - 0.000930594, 0.2052, 0.000199858, 0.0439884, - 0.00165352, 0.204901, 0.000355495, 0.0440716, - 0.0025849, 0.205255, 0.000556983, 0.0440968, - 0.00372222, 0.205311, 0.000805326, 0.0441359, - 0.00506478, 0.205391, 0.00110333, 0.0442231, - 0.00660384, 0.205638, 0.00145768, 0.0443254, - 0.00835246, 0.205877, 0.00187275, 0.0444832, - 0.0102992, 0.20627, 0.00235938, 0.0447001, - 0.0124449, 0.206796, 0.0029299, 0.0450168, - 0.0147935, 0.207593, 0.0036005, 0.0454816, - 0.017336, 0.208819, 0.00439246, 0.0462446, - 0.0201156, 0.211036, 0.00533864, 0.0473694, - 0.0231568, 0.214388, 0.00646984, 0.0490191, - 0.0264941, 0.219357, 0.00783856, 0.0512776, - 0.030184, 0.226061, 0.00950182, 0.0541279, - 0.0342661, 0.234094, 0.0115156, 0.0578989, - 0.0388539, 0.244297, 0.0139687, 0.0620835, - 0.0438735, 0.254457, 0.0169015, 0.0673497, - 0.04951, 0.266706, 0.0204554, 0.0731759, - 0.0556263, 0.278753, 0.0246606, 0.0803937, - 0.0624585, 0.29309, 0.0297126, 0.0879287, - 0.0697556, 0.305856, 0.0355868, 0.0970669, - 0.0778795, 0.321059, 0.0425768, 0.106508, - 0.0863541, 0.333873, 0.05056, 0.11776, - 0.0955935, 0.349008, 0.0598972, 0.130081, - 0.105438, 0.363776, 0.0706314, 0.144454, - 0.115899, 0.380112, 0.0828822, 0.1596, - 0.126827, 0.394843, 0.0967611, 0.176097, - 0.138161, 0.409033, 0.112381, 0.194726, - 0.149904, 0.424257, 0.129952, 0.213944, - 0.161675, 0.436945, 0.149333, 0.235516, - 0.173659, 0.450176, 0.170892, 0.260564, - 0.185963, 0.466305, 0.194984, 0.285183, - 0.197582, 0.477328, 0.220805, 0.311095, - 0.208697, 0.486566, 0.248694, 0.338924, - 0.219519, 0.494811, 0.279015, 0.369757, - 0.229766, 0.504065, 0.311725, 0.3996, - 0.238879, 0.507909, 0.345844, 0.430484, - 0.246802, 0.509805, 0.381749, 0.46413, - 0.253924, 0.511436, 0.420251, 0.497077, - 0.259319, 0.508787, 0.459957, 0.530434, - 0.263297, 0.50394, 0.501356, 0.565725, - 0.265619, 0.49804, 0.544252, 0.599254, - 0.265842, 0.487346, 0.587856, 0.631251, - 0.263978, 0.472975, 0.631969, 0.663972, - 0.26043, 0.457135, 0.677471, 0.697724, - 0.255358, 0.439844, 0.723744, 0.727725, - 0.248308, 0.417872, 0.770653, 0.756417, - 0.239181, 0.39273, 0.817357, 0.785419, - 0.22814, 0.367839, 0.864221, 0.81266, - 0.215681, 0.339449, 0.912701, 0.839391, - 0.201623, 0.309279, 0.962419, 0.86366, - 0.185624, 0.278029, 1.0122, 0.885028, - 0.16797, 0.245294, 1.06186, 0.904639, - 0.148336, 0.212689, 1.10934, 0.922048, - 0.12637, 0.179616, 1.15063, 0.936952, - 0.102928, 0.146749, 1.18885, 0.951895, - 0.0785268, 0.112733, 1.22352, 0.967198, - 0.0530153, 0.0760056, 1.25681, 0.984405, - 0.02649, 0.0383183, 1.28762, 1.00021, 0.00070019, - 0.00020039, 1.31656, 0.0325964, - 3.55447e-06, 0.176706, 6.55682e-07, 0.0329333, - 8.99174e-05, 0.178527, 1.65869e-05, 0.0329181, - 0.000359637, 0.178453, 6.63498e-05, 0.0329085, - 0.000808991, 0.178383, 0.000149332, 0.0329181, - 0.00143826, 0.178394, 0.000265873, 0.0329425, - 0.00224678, 0.178517, 0.000416597, 0.0329511, - 0.00323575, 0.17849, 0.000603299, 0.033011, - 0.00439875, 0.178695, 0.000829422, 0.0330733, - 0.00574059, 0.178843, 0.00109908, 0.0331857, - 0.00725896, 0.179176, 0.00141933, 0.0333445, - 0.00895289, 0.179618, 0.0017999, 0.0335674, - 0.0108219, 0.180238, 0.00225316, 0.033939, - 0.0128687, 0.181417, 0.00279765, 0.0345239, - 0.015114, 0.183395, 0.0034564, 0.0354458, - 0.017596, 0.186616, 0.00425864, 0.0368313, - 0.0203524, 0.191547, 0.00524936, 0.0386115, - 0.0234105, 0.197508, 0.00647033, 0.0410303, - 0.0268509, 0.205395, 0.00798121, 0.0442245, - 0.0307481, 0.215365, 0.0098557, 0.0478659, - 0.0350863, 0.225595, 0.0121417, 0.0522416, - 0.0399506, 0.236946, 0.0149385, 0.0574513, - 0.045357, 0.249442, 0.0183189, 0.0631208, - 0.0512863, 0.261222, 0.0223644, 0.0701124, - 0.0579273, 0.275418, 0.0272418, 0.0777331, - 0.0650652, 0.288989, 0.0329458, 0.0862709, - 0.0728813, 0.302546, 0.0396819, 0.096103, - 0.081363, 0.317164, 0.04757, 0.106976, - 0.0904463, 0.331733, 0.0567012, 0.119175, - 0.100105, 0.34661, 0.067202, 0.132919, - 0.110375, 0.362249, 0.0792588, 0.147727, - 0.121115, 0.376978, 0.0928672, 0.163618, - 0.132299, 0.390681, 0.108228, 0.182234, - 0.143887, 0.406571, 0.125502, 0.201809, - 0.155827, 0.42042, 0.144836, 0.225041, - 0.168357, 0.438411, 0.166706, 0.247621, - 0.18004, 0.450368, 0.189909, 0.27097, - 0.191536, 0.460083, 0.215251, 0.296658, - 0.203024, 0.469765, 0.243164, 0.325892, - 0.214056, 0.481837, 0.273388, 0.35406, - 0.224104, 0.487474, 0.305344, 0.384372, - 0.233489, 0.492773, 0.339741, 0.41749, - 0.241874, 0.498451, 0.376287, 0.45013, - 0.248834, 0.499632, 0.414195, 0.481285, - 0.254658, 0.495233, 0.454077, 0.519183, - 0.259367, 0.496401, 0.496352, 0.551544, - 0.261818, 0.487686, 0.538798, 0.587349, - 0.262964, 0.479453, 0.583626, 0.621679, - 0.262128, 0.467709, 0.629451, 0.654991, - 0.258998, 0.452123, 0.67566, 0.686873, - 0.254119, 0.433495, 0.723248, 0.719801, - 0.246946, 0.413657, 0.771156, 0.750355, - 0.237709, 0.390366, 0.81989, 0.780033, - 0.226549, 0.364947, 0.868601, 0.809254, - 0.214186, 0.337256, 0.920034, 0.836576, - 0.199639, 0.307395, 0.971706, 0.861774, - 0.183169, 0.275431, 1.02479, 0.885707, - 0.165111, 0.243431, 1.07837, 0.904742, - 0.144363, 0.210921, 1.12783, 0.915604, - 0.121305, 0.17647, 1.17254, 0.930959, - 0.0962119, 0.143106, 1.21012, 0.948404, - 0.069969, 0.108112, 1.24474, 0.967012, - 0.0427586, 0.0708478, 1.27718, 0.984183, - 0.0147043, 0.032335, 1.3083, 0.999577, 0.0142165, - 0.00726867, 1.3382, 0.0229227, - 2.99799e-06, 0.148623, 4.62391e-07, 0.0232194, - 7.58796e-05, 0.15054, 1.17033e-05, 0.0232315, - 0.000303636, 0.15063, 4.68397e-05, 0.0232354, - 0.000683189, 0.150624, 0.000105472, 0.0232092, - 0.0012136, 0.150445, 0.000187744, 0.0232523, - 0.00189765, 0.150679, 0.000294847, 0.0232828, - 0.00273247, 0.150789, 0.000428013, 0.0233371, - 0.00371287, 0.150995, 0.000591134, 0.0234015, - 0.00484794, 0.15118, 0.000787642, 0.023514, - 0.00612877, 0.151562, 0.00102547, 0.023679, - 0.00756125, 0.152116, 0.00131351, 0.0239559, - 0.00914651, 0.153162, 0.00166594, 0.0244334, - 0.010904, 0.155133, 0.00210182, 0.025139, - 0.0128615, 0.158035, 0.00264406, 0.0262598, - 0.0150628, 0.162751, 0.00332923, 0.0277875, - 0.0175532, 0.168944, 0.00419773, 0.0298472, - 0.0203981, 0.176835, 0.00530034, 0.0325444, - 0.023655, 0.186686, 0.00669777, 0.0355581, - 0.0272982, 0.196248, 0.00842661, 0.0392841, - 0.0314457, 0.207352, 0.0105854, 0.0436815, - 0.0361157, 0.219279, 0.0132458, 0.0485272, - 0.0412932, 0.230728, 0.0164736, 0.0541574, - 0.0470337, 0.242994, 0.0203715, 0.0609479, - 0.0535002, 0.257042, 0.0250953, 0.0685228, - 0.0605409, 0.27102, 0.0306856, 0.0768042, - 0.0680553, 0.28406, 0.037193, 0.0864844, - 0.0765011, 0.299186, 0.0449795, 0.0969415, - 0.0852674, 0.3132, 0.0538316, 0.108478, - 0.0947333, 0.327138, 0.0641149, 0.121705, - 0.10481, 0.342345, 0.0759185, 0.136743, - 0.115474, 0.358472, 0.0894116, 0.152986, - 0.126536, 0.374067, 0.104562, 0.170397, - 0.138061, 0.388267, 0.121632, 0.191392, - 0.150203, 0.406467, 0.140996, 0.211566, - 0.161751, 0.418641, 0.161696, 0.233567, - 0.173407, 0.430418, 0.184557, 0.257769, - 0.185397, 0.44277, 0.210092, 0.28531, - 0.197048, 0.457191, 0.237827, 0.311726, - 0.20784, 0.464712, 0.267253, 0.340537, - 0.218345, 0.472539, 0.299332, 0.372921, - 0.228306, 0.482331, 0.333988, 0.402924, - 0.236665, 0.484378, 0.369722, 0.434475, - 0.244097, 0.484717, 0.407836, 0.469736, - 0.250547, 0.487093, 0.448465, 0.505045, - 0.25511, 0.485575, 0.490263, 0.540262, - 0.258444, 0.481225, 0.534495, 0.576347, - 0.259903, 0.473481, 0.579451, 0.608656, - 0.259572, 0.4603, 0.625604, 0.646679, - 0.257908, 0.450341, 0.674511, 0.679902, - 0.253663, 0.431561, 0.723269, 0.714159, - 0.247419, 0.412684, 0.773263, 0.745345, - 0.239122, 0.389388, 0.824182, 0.778248, - 0.228837, 0.365361, 0.876634, 0.807208, - 0.216197, 0.337667, 0.92945, 0.835019, - 0.201772, 0.307197, 0.985261, 0.860261, - 0.185291, 0.274205, 1.04299, 0.877601, - 0.165809, 0.240178, 1.09816, 0.898211, - 0.143897, 0.207571, 1.14694, 0.915789, - 0.119513, 0.174904, 1.19008, 0.931831, - 0.0932919, 0.141423, 1.2297, 0.949244, - 0.0656528, 0.105603, 1.26553, 0.967527, - 0.0370262, 0.0679551, 1.29986, 0.984139, - 0.00730117, 0.0283133, 1.33252, 0.999713, 0.0234648, - 0.0121785, 1.36397, 0.0152135, - 2.45447e-06, 0.122795, 3.04092e-07, 0.0151652, - 6.15778e-05, 0.122399, 7.6292e-06, 0.0151181, - 0.000245948, 0.122023, 3.04802e-05, 0.0151203, - 0.000553394, 0.12203, 6.86634e-05, 0.015125, - 0.000983841, 0.122037, 0.000122463, 0.0151427, - 0.00153774, 0.12214, 0.000192706, 0.0151708, - 0.0022103, 0.122237, 0.000281219, 0.0152115, - 0.00300741, 0.12238, 0.000390804, 0.0152877, - 0.00392494, 0.1227, 0.000526317, 0.015412, - 0.00496597, 0.123244, 0.00069443, 0.0156201, - 0.00613314, 0.124228, 0.00090547, 0.0159658, - 0.00744113, 0.125945, 0.0011732, 0.0165674, - 0.00892546, 0.129098, 0.00151888, 0.017487, - 0.010627, 0.133865, 0.00197007, 0.018839, - 0.0126043, 0.140682, 0.0025637, 0.020554, - 0.0148814, 0.148534, 0.00333637, 0.0226727, - 0.0175123, 0.157381, 0.00433738, 0.0251879, - 0.0205266, 0.166685, 0.00561664, 0.0283635, - 0.0240319, 0.177796, 0.00725563, 0.0318694, - 0.0279432, 0.188251, 0.00928811, 0.0361044, - 0.0324313, 0.200038, 0.011835, 0.0406656, - 0.0373527, 0.210685, 0.0149146, 0.0463846, - 0.0430132, 0.224182, 0.0187254, 0.0525696, - 0.0491013, 0.23634, 0.0232283, 0.0598083, - 0.0559175, 0.250013, 0.0286521, 0.0679437, - 0.0633657, 0.263981, 0.0350634, 0.0771181, - 0.0714602, 0.278072, 0.0425882, 0.0881273, - 0.0803502, 0.29511, 0.0514487, 0.0996628, - 0.0896903, 0.309976, 0.0615766, 0.112702, - 0.099644, 0.325611, 0.0732139, 0.126488, - 0.109829, 0.339321, 0.0862324, 0.142625, - 0.120859, 0.35574, 0.101275, 0.15953, - 0.131956, 0.369845, 0.117892, 0.176991, - 0.143145, 0.38146, 0.136205, 0.199715, - 0.155292, 0.40052, 0.157252, 0.220787, - 0.167066, 0.412055, 0.179966, 0.243697, - 0.178396, 0.423133, 0.204418, 0.272106, - 0.190433, 0.439524, 0.232141, 0.297637, - 0.201265, 0.447041, 0.261109, 0.325273, - 0.211834, 0.454488, 0.292627, 0.357219, - 0.221889, 0.465004, 0.326669, 0.387362, - 0.230729, 0.468527, 0.362426, 0.423131, - 0.23924, 0.475836, 0.401533, 0.45543, - 0.246067, 0.475017, 0.441902, 0.493393, - 0.251557, 0.478017, 0.484239, 0.526253, - 0.255571, 0.4709, 0.528586, 0.560554, - 0.257752, 0.463167, 0.574346, 0.599306, - 0.258076, 0.456452, 0.621655, 0.634541, - 0.256471, 0.443725, 0.670492, 0.668907, - 0.253283, 0.428719, 0.721943, 0.705619, - 0.247562, 0.411348, 0.772477, 0.739034, - 0.240626, 0.388939, 0.8264, 0.771408, - 0.231493, 0.36425, 0.881702, 0.803312, - 0.220125, 0.337321, 0.9385, 0.828457, - 0.206645, 0.305364, 0.997437, 0.854819, - 0.190664, 0.273715, 1.05693, 0.878666, - 0.171429, 0.242218, 1.11251, 0.898404, - 0.149235, 0.209556, 1.16398, 0.917416, - 0.12435, 0.176863, 1.21014, 0.933133, - 0.0972703, 0.142775, 1.25178, 0.95066, - 0.0683607, 0.106735, 1.29028, 0.968589, - 0.0378724, 0.0681609, 1.32703, 0.984776, - 0.00605712, 0.0273966, 1.36158, 0.99994, 0.0263276, - 0.0138124, 1.3943, 0.00867437, - 1.86005e-06, 0.0928979, 1.73682e-07, 0.00864003, - 4.66389e-05, 0.0925237, 4.35505e-06, 0.00864593, - 0.000186594, 0.0925806, 1.74322e-05, 0.00864095, - 0.000419639, 0.0924903, 3.92862e-05, 0.00863851, - 0.000746272, 0.0924589, 7.02598e-05, 0.00868531, - 0.00116456, 0.0929, 0.000111188, 0.00869667, - 0.00167711, 0.0928529, 0.000163867, 0.00874332, - 0.00228051, 0.0930914, 0.00023104, 0.00882709, - 0.00297864, 0.0935679, 0.00031741, 0.00898874, - 0.00377557, 0.0946165, 0.000430186, 0.00929346, - 0.00469247, 0.0967406, 0.000580383, 0.00978271, - 0.00575491, 0.100084, 0.000783529, 0.0105746, - 0.00701514, 0.105447, 0.00106304, 0.0116949, - 0.00851797, 0.112494, 0.00144685, 0.0130419, - 0.0102757, 0.119876, 0.00196439, 0.0148375, - 0.012381, 0.129034, 0.00266433, 0.0168725, - 0.01482, 0.137812, 0.00358364, 0.0193689, - 0.0176563, 0.147696, 0.00478132, 0.0222691, - 0.0209211, 0.157795, 0.00631721, 0.0256891, - 0.0246655, 0.168431, 0.00826346, 0.0294686, - 0.0288597, 0.178587, 0.0106714, 0.0340412, - 0.0336441, 0.190251, 0.0136629, 0.0393918, - 0.039033, 0.202999, 0.0173272, 0.0453947, - 0.0450087, 0.215655, 0.0217448, 0.0521936, - 0.0515461, 0.228686, 0.0269941, 0.0600279, - 0.058817, 0.242838, 0.033272, 0.0692398, - 0.0667228, 0.258145, 0.0406457, 0.0793832, - 0.0752401, 0.273565, 0.0492239, 0.0902297, - 0.0841851, 0.287735, 0.0590105, 0.102014, - 0.0936479, 0.301161, 0.0702021, 0.116054, - 0.103967, 0.317438, 0.0832001, 0.13191, - 0.114622, 0.334166, 0.0977951, 0.148239, - 0.125452, 0.348192, 0.113985, 0.165809, - 0.136453, 0.361094, 0.131928, 0.184616, - 0.147648, 0.373534, 0.151811, 0.207491, - 0.159607, 0.39101, 0.174476, 0.230106, - 0.171119, 0.402504, 0.198798, 0.257036, - 0.182906, 0.418032, 0.225796, 0.281172, - 0.193605, 0.425468, 0.254027, 0.312034, - 0.204771, 0.440379, 0.285713, 0.340402, - 0.214988, 0.445406, 0.319196, 0.370231, - 0.224711, 0.44968, 0.35537, 0.407105, - 0.233516, 0.460747, 0.393838, 0.439037, - 0.240801, 0.460624, 0.433747, 0.47781, - 0.24762, 0.465957, 0.477234, 0.510655, - 0.251823, 0.460054, 0.52044, 0.550584, - 0.255552, 0.459172, 0.567853, 0.585872, - 0.257036, 0.450311, 0.615943, 0.620466, - 0.257535, 0.437763, 0.667693, 0.660496, - 0.255248, 0.426639, 0.718988, 0.695578, - 0.251141, 0.409185, 0.772503, 0.732176, - 0.244718, 0.39015, 0.827023, 0.760782, - 0.236782, 0.362594, 0.885651, 0.79422, - 0.225923, 0.33711, 0.943756, 0.824521, - 0.213855, 0.308272, 1.00874, 0.854964, - 0.197723, 0.278529, 1.06764, 0.878065, - 0.179209, 0.246208, 1.12836, 0.899834, - 0.157569, 0.21329, 1.18318, 0.918815, - 0.133206, 0.181038, 1.23161, 0.934934, - 0.106545, 0.146993, 1.27644, 0.952115, - 0.0780574, 0.111175, 1.31842, 0.96906, - 0.0478279, 0.0728553, 1.35839, 0.985178, - 0.0160014, 0.032579, 1.39697, 1.00039, 0.0173126, - 0.0095256, 1.43312, 0.00384146, - 1.24311e-06, 0.0613583, 7.78271e-08, 0.00390023, - 3.14043e-05, 0.0622919, 1.96626e-06, 0.00389971, - 0.000125622, 0.0622632, 7.87379e-06, 0.00389491, - 0.000282352, 0.0620659, 1.778e-05, 0.00391618, - 0.000502512, 0.0624687, 3.20918e-05, 0.00392662, - 0.000784458, 0.0625113, 5.15573e-05, 0.00396053, - 0.00112907, 0.0628175, 7.78668e-05, 0.00401911, - 0.00153821, 0.0633286, 0.000113811, 0.00414994, - 0.0020208, 0.0646443, 0.00016445, 0.00441223, - 0.00260007, 0.0673886, 0.000237734, 0.00484427, - 0.0033097, 0.0716528, 0.000345929, 0.00549109, - 0.00418966, 0.0774998, 0.000505987, 0.00636293, - 0.00527331, 0.0844758, 0.000739208, 0.00746566, - 0.00660428, 0.0921325, 0.00107347, 0.00876625, - 0.00818826, 0.0997067, 0.00153691, 0.0103125, - 0.0100811, 0.107433, 0.00217153, 0.0123309, - 0.0123643, 0.117088, 0.00303427, 0.0146274, - 0.0150007, 0.126438, 0.00416018, 0.0172295, - 0.0180531, 0.135672, 0.00561513, 0.0204248, - 0.0215962, 0.146244, 0.007478, 0.0241597, - 0.0256234, 0.157481, 0.00981046, 0.0284693, - 0.0302209, 0.169125, 0.0127148, 0.033445, - 0.0353333, 0.181659, 0.0162453, 0.0391251, - 0.0410845, 0.1944, 0.0205417, 0.0454721, - 0.0473451, 0.207082, 0.0256333, 0.0530983, - 0.0542858, 0.221656, 0.0317036, 0.0615356, - 0.0618384, 0.236036, 0.0388319, 0.0703363, - 0.0697631, 0.248398, 0.046974, 0.0810391, - 0.0784757, 0.263611, 0.0565246, 0.0920144, - 0.0873488, 0.275857, 0.0671724, 0.105584, - 0.0973652, 0.292555, 0.0798105, 0.119506, - 0.107271, 0.306333, 0.0935945, 0.134434, - 0.117608, 0.318888, 0.109106, 0.153399, - 0.128938, 0.337552, 0.127074, 0.171258, - 0.139944, 0.349955, 0.14643, 0.191059, - 0.151288, 0.361545, 0.168, 0.215069, - 0.163018, 0.378421, 0.192082, 0.237838, - 0.174226, 0.38879, 0.217838, 0.266965, - 0.186063, 0.405857, 0.246931, 0.292827, - 0.196909, 0.414146, 0.277505, 0.324352, - 0.207473, 0.426955, 0.310711, 0.354427, - 0.217713, 0.433429, 0.346794, 0.389854, - 0.227183, 0.443966, 0.385237, 0.420749, - 0.235131, 0.44471, 0.424955, 0.459597, - 0.242786, 0.451729, 0.468446, 0.495316, - 0.248767, 0.45072, 0.513422, 0.534903, - 0.253351, 0.450924, 0.560618, 0.572369, - 0.256277, 0.445266, 0.609677, 0.612383, - 0.2576, 0.438798, 0.660995, 0.644037, - 0.256931, 0.421693, 0.713807, 0.686749, - 0.254036, 0.4109, 0.767616, 0.719814, - 0.249785, 0.390151, 0.82533, 0.754719, - 0.244283, 0.367847, 0.888311, 0.792022, - 0.235076, 0.345013, 0.948177, 0.822404, - 0.225061, 0.316193, 1.01661, 0.853084, - 0.211113, 0.287013, 1.08075, 0.879871, - 0.19449, 0.255424, 1.14501, 0.901655, - 0.174023, 0.222879, 1.20203, 0.919957, - 0.1509, 0.18989, 1.25698, 0.938412, - 0.124923, 0.15606, 1.30588, 0.953471, - 0.0968139, 0.120512, 1.3529, 0.970451, - 0.066734, 0.0828515, 1.3986, 0.985522, - 0.034734, 0.0424458, 1.44148, 1.00099, - 0.00102222, 0.000678929, 1.48398, 0.000965494, - 6.27338e-07, 0.0306409, 1.97672e-08, 0.00099168, - 1.58573e-05, 0.0314638, 4.99803e-07, 0.000991068, - 6.34012e-05, 0.031363, 2.00682e-06, 0.000974567, - 0.00014144, 0.03036, 4.57312e-06, 0.000998079, - 0.000252812, 0.031496, 8.60131e-06, 0.00102243, - 0.000396506, 0.0319955, 1.48288e-05, 0.00107877, - 0.000577593, 0.0331376, 2.49141e-05, 0.00121622, - 0.000816816, 0.0359396, 4.23011e-05, 0.0014455, - 0.00113761, 0.0399652, 7.24613e-05, 0.00178791, - 0.00156959, 0.0450556, 0.000123929, 0.00225668, - 0.00214064, 0.0508025, 0.000208531, 0.00285627, - 0.00287655, 0.0568443, 0.000341969, 0.0035991, - 0.00380271, 0.0630892, 0.000544158, 0.00455524, - 0.00496264, 0.0702204, 0.000842423, 0.00569143, - 0.0063793, 0.0773426, 0.00126704, 0.00716928, - 0.00813531, 0.0860839, 0.00186642, 0.00885307, - 0.0101946, 0.0944079, 0.00267014, 0.0109316, - 0.0126386, 0.103951, 0.00374033, 0.0133704, - 0.0154876, 0.113786, 0.0051304, 0.0161525, - 0.0187317, 0.123477, 0.00688858, 0.0194267, - 0.0224652, 0.133986, 0.00910557, 0.0230967, - 0.0265976, 0.143979, 0.0118074, 0.0273627, - 0.0312848, 0.154645, 0.0151266, 0.0323898, - 0.0365949, 0.166765, 0.0191791, 0.0379225, - 0.0422914, 0.177932, 0.0239236, 0.0447501, - 0.0487469, 0.19167, 0.0296568, 0.0519391, - 0.0556398, 0.203224, 0.0362924, 0.0599464, - 0.0631646, 0.215652, 0.0440585, 0.0702427, - 0.0714308, 0.232089, 0.0531619, 0.0806902, - 0.0800605, 0.245258, 0.0634564, 0.0923194, - 0.0892815, 0.258609, 0.0752481, 0.106938, - 0.09931, 0.276654, 0.0888914, 0.121238, - 0.109575, 0.289847, 0.104055, 0.138817, - 0.120461, 0.307566, 0.121266, 0.15595, - 0.131209, 0.320117, 0.139944, 0.178418, - 0.143049, 0.339677, 0.161591, 0.197875, - 0.154074, 0.349886, 0.184303, 0.224368, - 0.166307, 0.369352, 0.210669, 0.252213, - 0.178051, 0.386242, 0.238895, 0.277321, - 0.189335, 0.395294, 0.269182, 0.310332, - 0.200683, 0.412148, 0.302508, 0.338809, - 0.210856, 0.418266, 0.337264, 0.372678, - 0.220655, 0.428723, 0.374881, 0.405632, - 0.230053, 0.433887, 0.415656, 0.442293, - 0.237993, 0.439911, 0.457982, 0.477256, - 0.244897, 0.440175, 0.502831, 0.515592, - 0.250657, 0.441079, 0.550277, 0.550969, - 0.255459, 0.435219, 0.601102, 0.592883, - 0.257696, 0.432882, 0.651785, 0.629092, - 0.259894, 0.421054, 0.708961, 0.672033, - 0.258592, 0.41177, 0.763806, 0.709147, - 0.256525, 0.395267, 0.824249, 0.745367, - 0.254677, 0.375013, 0.8951, 0.784715, - 0.247892, 0.353906, 0.959317, 0.818107, - 0.240162, 0.327801, 1.03153, 0.847895, - 0.229741, 0.298821, 1.10601, 0.879603, - 0.213084, 0.269115, 1.164, 0.902605, - 0.195242, 0.236606, 1.22854, 0.922788, - 0.174505, 0.203442, 1.29017, 0.944831, - 0.150169, 0.169594, 1.34157, 0.959656, - 0.124099, 0.135909, 1.3956, 0.972399, - 0.0960626, 0.0990563, 1.45128, 0.986549, - 0.0657097, 0.0602348, 1.50312, 1.00013, - 0.0333558, 0.0186694, 1.55364, 6.19747e-06, - 1e-07, 0.00778326, 7.96756e-11, 2.37499e-08, - 9.99999e-08, 2.82592e-05, 1.14596e-10, 1.00292e-06, - 1.66369e-06, 0.000250354, 6.77492e-09, 3.50752e-06, - 6.37769e-06, 0.000357289, 6.31655e-08, 8.26445e-06, - 1.74689e-05, 0.000516179, 3.1851e-07, 2.42481e-05, - 4.50868e-05, 0.0010223, 1.30577e-06, 4.55631e-05, - 8.9044e-05, 0.00144302, 3.74587e-06, 9.71222e-05, - 0.000178311, 0.00241912, 1.02584e-05, 0.000171403, - 0.000313976, 0.00354938, 2.36481e-05, 0.000292747, - 0.000520026, 0.00513765, 4.96014e-05, 0.000789827, - 0.00118187, 0.0238621, 0.000139056, 0.00114093, - 0.00171827, 0.0286691, 0.000244093, 0.00176119, - 0.00249667, 0.0368565, 0.000420623, 0.0022233, - 0.00333742, 0.0400469, 0.00065673, 0.00343382, - 0.00481976, 0.0535751, 0.00109323, 0.00427602, - 0.00600755, 0.057099, 0.00155268, 0.00461435, - 0.00737637, 0.0551084, 0.00215031, 0.00695698, - 0.00971401, 0.0715767, 0.00316529, 0.00867619, - 0.0120943, 0.0793314, 0.00436995, 0.0106694, - 0.0148202, 0.0869391, 0.0058959, 0.0140351, - 0.0183501, 0.101572, 0.00798757, 0.0168939, - 0.022006, 0.11018, 0.0104233, 0.020197, - 0.0261568, 0.119041, 0.0134167, 0.0254702, - 0.0312778, 0.135404, 0.0173009, 0.0298384, - 0.0362469, 0.1437, 0.0215428, 0.035159, - 0.042237, 0.15512, 0.0268882, 0.0427685, - 0.0488711, 0.17128, 0.033235, 0.0494848, - 0.0557997, 0.181813, 0.0404443, 0.0592394, - 0.0635578, 0.198745, 0.0490043, 0.0681463, - 0.071838, 0.210497, 0.0588239, 0.0804753, - 0.0809297, 0.228864, 0.0702835, 0.0942205, - 0.0906488, 0.247008, 0.0834012, 0.106777, - 0.100216, 0.258812, 0.0975952, 0.124471, - 0.110827, 0.278617, 0.114162, 0.138389, - 0.121193, 0.287049, 0.131983, 0.159543, - 0.13253, 0.307151, 0.152541, 0.176432, - 0.143611, 0.31564, 0.174673, 0.201723, - 0.15548, 0.33538, 0.199842, 0.229721, - 0.167166, 0.355256, 0.227097, 0.250206, - 0.178238, 0.360047, 0.256014, 0.282118, - 0.189905, 0.378761, 0.28855, 0.312821, - 0.201033, 0.39181, 0.323348, 0.341482, - 0.211584, 0.397716, 0.360564, 0.377368, - 0.221314, 0.410141, 0.400004, 0.418229, - 0.230474, 0.423485, 0.442371, 0.444881, - 0.239443, 0.418874, 0.488796, 0.488899, - 0.245987, 0.427545, 0.535012, 0.520317, - 0.253948, 0.422147, 0.589678, 0.568566, - 0.256616, 0.42719, 0.637683, 0.599607, - 0.26376, 0.415114, 0.703363, 0.64222, - 0.268687, 0.408715, 0.771363, 0.685698, - 0.2694, 0.399722, 0.83574, 0.732327, - 0.266642, 0.388651, 0.897764, 0.769873, - 0.267712, 0.369198, 0.983312, 0.806733, - 0.263479, 0.346802, 1.06222, 0.843466, - 0.254575, 0.321368, 1.13477, 0.873008, - 0.242749, 0.29211, 1.20712, 0.908438, - 0.22725, 0.262143, 1.27465, 0.936321, - 0.207621, 0.228876, 1.33203, 0.950353, - 0.187932, 0.19484, 1.40439, 0.96442, - 0.165154, 0.163178, 1.4732, 0.979856, - 0.139302, 0.127531, 1.53574, 0.982561, - 0.11134, 0.0903457, 1.59982, 0.996389, - 0.0808124, 0.0489007, 1.6577 ];\n\n\t\tconst LTC_MAT_2 = [ 1, 0, 0, 0, 1, 7.91421e-31, 0, 0, 1, 1.04392e-24, 0, 0, 1, 3.49405e-21, 0, 0, 1, 1.09923e-18, 0, 0, 1, 9.47414e-17, 0, 0, 1, 3.59627e-15, 0, 0, 1, 7.72053e-14, 0, 0, 1, 1.08799e-12, 0, 0, 1, 1.10655e-11, 0, 0, 1, 8.65818e-11, 0, 0, 0.999998, 5.45037e-10, 0, 0, 0.999994, 2.85095e-09, 0, 0, 0.999989, 1.26931e-08, 0, 0, 0.999973, 4.89938e-08, 0, 0, 0.999947, 1.66347e-07, 0, 0, 0.999894, 5.02694e-07, 0, 0, 0.999798, 1.36532e-06, 0, 0, 0.999617, 3.35898e-06, 0, 0, 0.999234, 7.52126e-06, 0, 0, 0.998258, 1.52586e-05, 0, 0, 0.99504, 2.66207e-05, 0, 0, 0.980816, 2.36802e-05, 0, 0, 0.967553, 2.07684e-06, 0, 0, 0.966877, 4.03733e-06, 0, 0, 0.965752, 7.41174e-06, 0, 0, 0.96382, 1.27746e-05, 0, 0, 0.960306, 2.02792e-05, 0, 0, 0.953619, 2.80232e-05, 0, 0, 0.941103, 2.78816e-05, 0, 0, 0.926619, 1.60221e-05, 0, 0, 0.920983, 2.35164e-05, 0, 0, 0.912293, 3.11924e-05, 0, 0.0158731, 0.899277, 3.48118e-05, 0, 0.0476191, 0.880884, 2.6041e-05, 0, 0.0793651, 0.870399, 3.38726e-05, 0, 0.111111, 0.856138, 3.92906e-05, 0, 0.142857, 0.837436, 3.72874e-05, 0, 0.174603, 0.820973, 3.92558e-05, 0, 0.206349, 0.803583, 4.34658e-05, 0, 0.238095, 0.782168, 4.0256e-05, 0, 0.269841, 0.764107, 4.48159e-05, 0, 0.301587, 0.743092, 4.57627e-05, 0, 0.333333, 0.721626, 4.55314e-05, 0, 0.365079, 0.700375, 4.77335e-05, 0, 0.396825, 0.677334, 4.61072e-05, 0, 0.428571, 0.655702, 4.84393e-05, 0, 0.460317, 0.632059, 4.64583e-05, 0, 0.492064, 0.610125, 4.83923e-05, 0, 0.52381, 0.58653, 4.64342e-05, 0, 0.555556, 0.564508, 4.77033e-05, 0, 0.587302, 0.541405, 4.59263e-05, 0, 0.619048, 0.519556, 4.6412e-05, 0, 0.650794, 0.497292, 4.48913e-05, 0, 0.68254, 0.475898, 4.45789e-05, 0, 0.714286, 0.454722, 4.33496e-05, 0, 0.746032, 0.434042, 4.23054e-05, 0, 0.777778, 0.414126, 4.13737e-05, 0, 0.809524, 0.394387, 3.97265e-05, 0, 0.84127, 0.375841, 3.90709e-05, 0, 0.873016, 0.357219, 3.69938e-05, 0, 0.904762, 0.340084, 3.65618e-05, 0, 0.936508, 0.322714, 3.42533e-05, 0, 0.968254, 0.306974, 3.39596e-05, 0, 1, 1, 1.01524e-18, 0, 0, 1, 1.0292e-18, 0, 0, 1, 1.30908e-18, 0, 0, 1, 4.73331e-18, 0, 0, 1, 6.25319e-17, 0, 0, 1, 1.07932e-15, 0, 0, 1, 1.63779e-14, 0, 0, 1, 2.03198e-13, 0, 0, 1, 2.04717e-12, 0, 0, 0.999999, 1.68995e-11, 0, 0, 0.999998, 1.15855e-10, 0, 0, 0.999996, 6.6947e-10, 0, 0, 0.999991, 3.30863e-09, 0, 0, 0.999983, 1.41737e-08, 0, 0, 0.999968, 5.32626e-08, 0, 0, 0.99994, 1.77431e-07, 0, 0, 0.999891, 5.28835e-07, 0, 0, 0.999797, 1.42169e-06, 0, 0, 0.999617, 3.47057e-06, 0, 0, 0.999227, 7.7231e-06, 0, 0, 0.998239, 1.55753e-05, 0, 0, 0.994937, 2.68495e-05, 0, 0, 0.980225, 2.13742e-05, 0, 0, 0.967549, 2.1631e-06, 0, 0, 0.966865, 4.17989e-06, 0, 0, 0.965739, 7.63341e-06, 0, 0, 0.963794, 1.30892e-05, 0, 0, 0.960244, 2.06456e-05, 0, 0, 0.953495, 2.82016e-05, 0, 0.000148105, 0.940876, 2.71581e-05, 0, 0.002454, 0.926569, 1.64159e-05, 0, 0.00867491, 0.920905, 2.39521e-05, 0, 0.01956, 0.912169, 3.15127e-05, 0, 0.035433, 0.899095, 3.46626e-05, 0, 0.056294, 0.882209, 2.90223e-05, 0, 0.0818191, 0.870272, 3.42992e-05, 0, 0.111259, 0.855977, 3.94164e-05, 0, 0.142857, 0.837431, 3.72343e-05, 0, 0.174603, 0.820826, 3.96691e-05, 0, 0.206349, 0.803408, 4.35395e-05, 0, 0.238095, 0.782838, 4.19579e-05, 0, 0.269841, 0.763941, 4.50953e-05, 0, 0.301587, 0.742904, 4.55847e-05, 0, 0.333333, 0.721463, 4.58833e-05, 0, 0.365079, 0.700197, 4.77159e-05, 0, 0.396825, 0.677501, 4.70641e-05, 0, 0.428571, 0.655527, 4.84732e-05, 0, 0.460317, 0.6324, 4.76834e-05, 0, 0.492064, 0.609964, 4.84213e-05, 0, 0.52381, 0.586839, 4.75541e-05, 0, 0.555556, 0.564353, 4.76951e-05, 0, 0.587302, 0.541589, 4.67611e-05, 0, 0.619048, 0.519413, 4.63493e-05, 0, 0.650794, 0.497337, 4.53994e-05, 0, 0.68254, 0.475797, 4.45308e-05, 0, 0.714286, 0.454659, 4.35787e-05, 0, 0.746032, 0.434065, 4.24839e-05, 0, 0.777778, 0.414018, 4.1436e-05, 0, 0.809524, 0.39455, 4.01902e-05, 0, 0.84127, 0.375742, 3.90813e-05, 0, 0.873016, 0.357501, 3.77116e-05, 0, 0.904762, 0.339996, 3.6535e-05, 0, 0.936508, 0.323069, 3.51265e-05, 0, 0.968254, 0.306897, 3.39112e-05, 0, 1, 1, 1.0396e-15, 0, 0, 1, 1.04326e-15, 0, 0, 1, 1.10153e-15, 0, 0, 1, 1.44668e-15, 0, 0, 1, 3.4528e-15, 0, 0, 1, 1.75958e-14, 0, 0, 1, 1.2627e-13, 0, 0, 1, 9.36074e-13, 0, 0, 1, 6.45742e-12, 0, 0, 0.999998, 4.01228e-11, 0, 0, 0.999997, 2.22338e-10, 0, 0, 0.999995, 1.0967e-09, 0, 0, 0.999991, 4.82132e-09, 0, 0, 0.999981, 1.89434e-08, 0, 0, 0.999967, 6.67716e-08, 0, 0, 0.999938, 2.12066e-07, 0, 0, 0.999886, 6.0977e-07, 0, 0, 0.999792, 1.59504e-06, 0, 0, 0.999608, 3.81191e-06, 0, 0, 0.999209, 8.33727e-06, 0, 0, 0.998179, 1.65288e-05, 0, 0, 0.994605, 2.74387e-05, 0, 0, 0.979468, 1.67316e-05, 0, 0, 0.967529, 2.42877e-06, 0, 0, 0.966836, 4.61696e-06, 0, 0, 0.96569, 8.30977e-06, 0, 0, 0.963706, 1.40427e-05, 0, 2.44659e-06, 0.960063, 2.17353e-05, 0, 0.000760774, 0.953113, 2.86606e-05, 0, 0.00367261, 0.940192, 2.47691e-05, 0, 0.00940263, 0.927731, 1.95814e-05, 0, 0.018333, 0.920669, 2.52531e-05, 0, 0.0306825, 0.911799, 3.24277e-05, 0, 0.0465556, 0.89857, 3.40982e-05, 0, 0.0659521, 0.883283, 3.19622e-05, 0, 0.0887677, 0.86989, 3.5548e-05, 0, 0.114784, 0.855483, 3.97143e-05, 0, 0.143618, 0.837987, 3.91665e-05, 0, 0.174606, 0.820546, 4.11306e-05, 0, 0.206349, 0.802878, 4.36753e-05, 0, 0.238095, 0.783402, 4.44e-05, 0, 0.269841, 0.763439, 4.58726e-05, 0, 0.301587, 0.742925, 4.67097e-05, 0, 0.333333, 0.721633, 4.78887e-05, 0, 0.365079, 0.69985, 4.81251e-05, 0, 0.396825, 0.67783, 4.91811e-05, 0, 0.428571, 0.655126, 4.88199e-05, 0, 0.460318, 0.632697, 4.96025e-05, 0, 0.492064, 0.609613, 4.8829e-05, 0, 0.52381, 0.587098, 4.92754e-05, 0, 0.555556, 0.564119, 4.82625e-05, 0, 0.587302, 0.541813, 4.82807e-05, 0, 0.619048, 0.519342, 4.71552e-05, 0, 0.650794, 0.497514, 4.66765e-05, 0, 0.68254, 0.475879, 4.55582e-05, 0, 0.714286, 0.454789, 4.46007e-05, 0, 0.746032, 0.434217, 4.35382e-05, 0, 0.777778, 0.414086, 4.21753e-05, 0, 0.809524, 0.394744, 4.12093e-05, 0, 0.84127, 0.375782, 3.96634e-05, 0, 0.873016, 0.357707, 3.86419e-05, 0, 0.904762, 0.340038, 3.70345e-05, 0, 0.936508, 0.323284, 3.59725e-05, 0, 0.968254, 0.306954, 3.436e-05, 0, 1, 1, 5.99567e-14, 0, 0, 1, 6.00497e-14, 0, 0, 1, 6.14839e-14, 0, 0, 1, 6.86641e-14, 0, 0, 1, 9.72658e-14, 0, 0, 1, 2.21271e-13, 0, 0, 1, 8.33195e-13, 0, 0, 1, 4.03601e-12, 0, 0, 0.999999, 2.06001e-11, 0, 0, 0.999998, 1.01739e-10, 0, 0, 0.999997, 4.70132e-10, 0, 0, 0.999993, 2.00436e-09, 0, 0, 0.999988, 7.83682e-09, 0, 0, 0.999979, 2.80338e-08, 0, 0, 0.999962, 9.17033e-08, 0, 0, 0.999933, 2.74514e-07, 0, 0, 0.999881, 7.53201e-07, 0, 0, 0.999783, 1.89826e-06, 0, 0, 0.999594, 4.40279e-06, 0, 0, 0.999178, 9.3898e-06, 0, 0, 0.998073, 1.81265e-05, 0, 0, 0.993993, 2.80487e-05, 0, 0, 0.979982, 1.49422e-05, 0, 0, 0.968145, 3.78481e-06, 0, 0, 0.966786, 5.3771e-06, 0, 0, 0.965611, 9.47508e-06, 0, 3.88934e-05, 0.963557, 1.56616e-05, 0, 0.0009693, 0.959752, 2.35144e-05, 0, 0.00370329, 0.952461, 2.91568e-05, 0, 0.00868428, 0.940193, 2.40102e-05, 0, 0.0161889, 0.929042, 2.31235e-05, 0, 0.0263948, 0.920266, 2.73968e-05, 0, 0.0394088, 0.911178, 3.37915e-05, 0, 0.0552818, 0.897873, 3.33629e-05, 0, 0.0740138, 0.884053, 3.51405e-05, 0, 0.0955539, 0.869455, 3.78034e-05, 0, 0.119795, 0.854655, 3.99378e-05, 0, 0.14656, 0.838347, 4.19108e-05, 0, 0.175573, 0.820693, 4.40831e-05, 0, 0.206388, 0.802277, 4.45599e-05, 0, 0.238095, 0.783634, 4.72691e-05, 0, 0.269841, 0.763159, 4.76984e-05, 0, 0.301587, 0.742914, 4.91487e-05, 0, 0.333333, 0.721662, 5.02312e-05, 0, 0.365079, 0.699668, 5.02817e-05, 0, 0.396825, 0.677839, 5.1406e-05, 0, 0.428571, 0.655091, 5.11095e-05, 0, 0.460317, 0.632665, 5.16067e-05, 0, 0.492064, 0.609734, 5.12255e-05, 0, 0.52381, 0.587043, 5.10263e-05, 0, 0.555556, 0.564298, 5.0565e-05, 0, 0.587302, 0.541769, 4.97951e-05, 0, 0.619048, 0.519529, 4.92698e-05, 0, 0.650794, 0.497574, 4.82066e-05, 0, 0.68254, 0.476028, 4.73689e-05, 0, 0.714286, 0.454961, 4.61941e-05, 0, 0.746032, 0.434341, 4.50618e-05, 0, 0.777778, 0.414364, 4.38355e-05, 0, 0.809524, 0.394832, 4.24196e-05, 0, 0.84127, 0.376109, 4.12563e-05, 0, 0.873016, 0.35779, 3.96226e-05, 0, 0.904762, 0.340379, 3.84886e-05, 0, 0.936508, 0.323385, 3.68214e-05, 0, 0.968254, 0.307295, 3.56636e-05, 0, 1, 1, 1.06465e-12, 0, 0, 1, 1.06555e-12, 0, 0, 1, 1.07966e-12, 0, 0, 1, 1.14601e-12, 0, 0, 1, 1.37123e-12, 0, 0, 1, 2.1243e-12, 0, 0, 0.999999, 4.89653e-12, 0, 0, 0.999999, 1.60283e-11, 0, 0, 0.999998, 6.2269e-11, 0, 0, 0.999997, 2.51859e-10, 0, 0, 0.999996, 9.96192e-10, 0, 0, 0.999992, 3.74531e-09, 0, 0, 0.999986, 1.32022e-08, 0, 0, 0.999975, 4.33315e-08, 0, 0, 0.999959, 1.31956e-07, 0, 0, 0.999927, 3.72249e-07, 0, 0, 0.999871, 9.72461e-07, 0, 0, 0.999771, 2.35343e-06, 0, 0, 0.999572, 5.2768e-06, 0, 0, 0.999133, 1.09237e-05, 0, 0, 0.997912, 2.03675e-05, 0, 0, 0.993008, 2.79396e-05, 0, 0, 0.980645, 1.39604e-05, 0, 0, 0.970057, 6.46596e-06, 0, 0, 0.966717, 6.5089e-06, 0, 4.74145e-05, 0.965497, 1.11863e-05, 0, 0.00089544, 0.96334, 1.79857e-05, 0, 0.0032647, 0.959294, 2.59045e-05, 0, 0.0075144, 0.951519, 2.92327e-05, 0, 0.0138734, 0.940517, 2.49769e-05, 0, 0.0224952, 0.93014, 2.6803e-05, 0, 0.0334828, 0.91972, 3.03656e-05, 0, 0.0468973, 0.910294, 3.53323e-05, 0, 0.0627703, 0.897701, 3.51002e-05, 0, 0.0811019, 0.884522, 3.88104e-05, 0, 0.10186, 0.869489, 4.12932e-05, 0, 0.124985, 0.853983, 4.15781e-05, 0, 0.150372, 0.838425, 4.54066e-05, 0, 0.177868, 0.820656, 4.71624e-05, 0, 0.207245, 0.801875, 4.75243e-05, 0, 0.238143, 0.783521, 5.05621e-05, 0, 0.269841, 0.763131, 5.0721e-05, 0, 0.301587, 0.74261, 5.23293e-05, 0, 0.333333, 0.72148, 5.28699e-05, 0, 0.365079, 0.699696, 5.38677e-05, 0, 0.396825, 0.677592, 5.39255e-05, 0, 0.428571, 0.65525, 5.46367e-05, 0, 0.460317, 0.632452, 5.41348e-05, 0, 0.492064, 0.609903, 5.44976e-05, 0, 0.52381, 0.586928, 5.36201e-05, 0, 0.555556, 0.564464, 5.35185e-05, 0, 0.587302, 0.541801, 5.24949e-05, 0, 0.619048, 0.519681, 5.1812e-05, 0, 0.650794, 0.497685, 5.07687e-05, 0, 0.68254, 0.47622, 4.96243e-05, 0, 0.714286, 0.455135, 4.85714e-05, 0, 0.746032, 0.4346, 4.71847e-05, 0, 0.777778, 0.414564, 4.59294e-05, 0, 0.809524, 0.395165, 4.44705e-05, 0, 0.84127, 0.376333, 4.30772e-05, 0, 0.873016, 0.358197, 4.16229e-05, 0, 0.904762, 0.34064, 4.01019e-05, 0, 0.936508, 0.323816, 3.86623e-05, 0, 0.968254, 0.307581, 3.70933e-05, 0, 1, 1, 9.91541e-12, 0, 0, 1, 9.92077e-12, 0, 0, 1, 1.00041e-11, 0, 0, 1, 1.0385e-11, 0, 0, 1, 1.15777e-11, 0, 0, 1, 1.50215e-11, 0, 0, 0.999999, 2.54738e-11, 0, 0, 0.999999, 5.98822e-11, 0, 0, 0.999998, 1.79597e-10, 0, 0, 0.999997, 6.02367e-10, 0, 0, 0.999994, 2.06835e-09, 0, 0, 0.99999, 6.94952e-09, 0, 0, 0.999984, 2.23363e-08, 0, 0, 0.999972, 6.78578e-08, 0, 0, 0.999952, 1.93571e-07, 0, 0, 0.999919, 5.16594e-07, 0, 0, 0.99986, 1.28739e-06, 0, 0, 0.999753, 2.99298e-06, 0, 0, 0.999546, 6.48258e-06, 0, 0, 0.999074, 1.29985e-05, 0, 0, 0.997671, 2.32176e-05, 0, 0, 0.991504, 2.56701e-05, 0, 0, 0.981148, 1.31141e-05, 0, 0, 0.971965, 8.69048e-06, 0, 2.80182e-05, 0.966624, 8.08301e-06, 0, 0.000695475, 0.965344, 1.35235e-05, 0, 0.00265522, 0.963048, 2.10592e-05, 0, 0.00622975, 0.958673, 2.87473e-05, 0, 0.0116234, 0.950262, 2.81379e-05, 0, 0.018976, 0.940836, 2.71089e-05, 0, 0.0283844, 0.930996, 3.0926e-05, 0, 0.0399151, 0.919848, 3.48359e-05, 0, 0.0536063, 0.909136, 3.66092e-05, 0, 0.0694793, 0.897554, 3.84162e-05, 0, 0.0875342, 0.884691, 4.30971e-05, 0, 0.107749, 0.869414, 4.47803e-05, 0, 0.130087, 0.853462, 4.52858e-05, 0, 0.154481, 0.838187, 4.95769e-05, 0, 0.180833, 0.820381, 5.02709e-05, 0, 0.209005, 0.801844, 5.22713e-05, 0, 0.238791, 0.783061, 5.41505e-05, 0, 0.269869, 0.763205, 5.53712e-05, 0, 0.301587, 0.742362, 5.64909e-05, 0, 0.333333, 0.721393, 5.72646e-05, 0, 0.365079, 0.699676, 5.81012e-05, 0, 0.396825, 0.677395, 5.8096e-05, 0, 0.428571, 0.655208, 5.85766e-05, 0, 0.460317, 0.632451, 5.83602e-05, 0, 0.492064, 0.609839, 5.80234e-05, 0, 0.52381, 0.587093, 5.77161e-05, 0, 0.555556, 0.564467, 5.68447e-05, 0, 0.587302, 0.542043, 5.63166e-05, 0, 0.619048, 0.519826, 5.5156e-05, 0, 0.650794, 0.497952, 5.41682e-05, 0, 0.68254, 0.476477, 5.28971e-05, 0, 0.714286, 0.455412, 5.14952e-05, 0, 0.746032, 0.434926, 5.02222e-05, 0, 0.777778, 0.4149, 4.85779e-05, 0, 0.809524, 0.395552, 4.72242e-05, 0, 0.84127, 0.376712, 4.54891e-05, 0, 0.873016, 0.358622, 4.40924e-05, 0, 0.904762, 0.341048, 4.22984e-05, 0, 0.936508, 0.324262, 4.08582e-05, 0, 0.968254, 0.308013, 3.90839e-05, 0, 1, 1, 6.13913e-11, 0, 0, 1, 6.14145e-11, 0, 0, 1, 6.17708e-11, 0, 0, 1, 6.33717e-11, 0, 0, 1, 6.81648e-11, 0, 0, 1, 8.08291e-11, 0, 0, 1, 1.14608e-10, 0, 0, 0.999998, 2.10507e-10, 0, 0, 0.999997, 4.99595e-10, 0, 0, 0.999995, 1.39897e-09, 0, 0, 0.999994, 4.19818e-09, 0, 0, 0.999988, 1.27042e-08, 0, 0, 0.999979, 3.75153e-08, 0, 0, 0.999965, 1.06206e-07, 0, 0, 0.999945, 2.85381e-07, 0, 0, 0.999908, 7.23611e-07, 0, 0, 0.999846, 1.7255e-06, 0, 0, 0.999733, 3.86104e-06, 0, 0, 0.999511, 8.08493e-06, 0, 0, 0.998993, 1.56884e-05, 0, 0, 0.997326, 2.65538e-05, 0, 0, 0.989706, 2.06466e-05, 0, 0, 0.981713, 1.30756e-05, 0, 7.0005e-06, 0.973636, 1.06473e-05, 0, 0.000464797, 0.966509, 1.0194e-05, 0, 0.00201743, 0.965149, 1.65881e-05, 0, 0.00497549, 0.962669, 2.49147e-05, 0, 0.00953262, 0.95786, 3.17449e-05, 0, 0.0158211, 0.949334, 2.81045e-05, 0, 0.0239343, 0.941041, 3.03263e-05, 0, 0.0339372, 0.931575, 3.56754e-05, 0, 0.0458738, 0.920102, 3.97075e-05, 0, 0.059772, 0.908002, 3.84886e-05, 0, 0.075645, 0.897269, 4.3027e-05, 0, 0.0934929, 0.884559, 4.79925e-05, 0, 0.113302, 0.869161, 4.8246e-05, 0, 0.135045, 0.853342, 5.09505e-05, 0, 0.158678, 0.837633, 5.42846e-05, 0, 0.184136, 0.820252, 5.54139e-05, 0, 0.211325, 0.801872, 5.81412e-05, 0, 0.240113, 0.782418, 5.85535e-05, 0, 0.270306, 0.7631, 6.10923e-05, 0, 0.301594, 0.742183, 6.13678e-05, 0, 0.333333, 0.721098, 6.27275e-05, 0, 0.365079, 0.699512, 6.29413e-05, 0, 0.396825, 0.677372, 6.36351e-05, 0, 0.428571, 0.655059, 6.33555e-05, 0, 0.460317, 0.632567, 6.36513e-05, 0, 0.492064, 0.609784, 6.28965e-05, 0, 0.52381, 0.587237, 6.25546e-05, 0, 0.555556, 0.564525, 6.15825e-05, 0, 0.587302, 0.542181, 6.05048e-05, 0, 0.619048, 0.520017, 5.96329e-05, 0, 0.650794, 0.498204, 5.81516e-05, 0, 0.68254, 0.476742, 5.69186e-05, 0, 0.714286, 0.455803, 5.53833e-05, 0, 0.746032, 0.435251, 5.37807e-05, 0, 0.777778, 0.415374, 5.22025e-05, 0, 0.809524, 0.395921, 5.03421e-05, 0, 0.84127, 0.377253, 4.88211e-05, 0, 0.873016, 0.359021, 4.68234e-05, 0, 0.904762, 0.341637, 4.53269e-05, 0, 0.936508, 0.3247, 4.33014e-05, 0, 0.968254, 0.308625, 4.18007e-05, 0, 1, 1, 2.86798e-10, 0, 0, 1, 2.86877e-10, 0, 0, 1, 2.88094e-10, 0, 0, 1, 2.93506e-10, 0, 0, 1, 3.09262e-10, 0, 0, 0.999999, 3.48593e-10, 0, 0, 0.999999, 4.44582e-10, 0, 0, 0.999998, 6.88591e-10, 0, 0, 0.999996, 1.34391e-09, 0, 0, 0.999993, 3.17438e-09, 0, 0, 0.999989, 8.35609e-09, 0, 0, 0.999983, 2.28677e-08, 0, 0, 0.999974, 6.23361e-08, 0, 0, 0.999959, 1.65225e-07, 0, 0, 0.999936, 4.19983e-07, 0, 0, 0.999896, 1.01546e-06, 0, 0, 0.99983, 2.32376e-06, 0, 0, 0.999709, 5.0156e-06, 0, 0, 0.999469, 1.0167e-05, 0, 0, 0.998886, 1.90775e-05, 0, 0, 0.996819, 3.00511e-05, 0, 0, 0.988837, 1.85092e-05, 0, 1.68222e-07, 0.982178, 1.34622e-05, 0, 0.000259622, 0.975017, 1.25961e-05, 0, 0.00142595, 0.967101, 1.3507e-05, 0, 0.00382273, 0.964905, 2.05003e-05, 0, 0.00764164, 0.96218, 2.9546e-05, 0, 0.0130121, 0.956821, 3.43738e-05, 0, 0.0200253, 0.948829, 3.05063e-05, 0, 0.0287452, 0.941092, 3.46487e-05, 0, 0.039218, 0.931883, 4.12061e-05, 0, 0.0514748, 0.920211, 4.44651e-05, 0, 0.0655351, 0.907307, 4.31252e-05, 0, 0.0814082, 0.89684, 4.90382e-05, 0, 0.0990939, 0.884119, 5.3334e-05, 0, 0.118583, 0.869148, 5.4114e-05, 0, 0.139856, 0.853377, 5.78536e-05, 0, 0.162882, 0.836753, 5.92285e-05, 0, 0.187615, 0.820063, 6.22787e-05, 0, 0.213991, 0.801694, 6.45492e-05, 0, 0.241918, 0.782116, 6.5353e-05, 0, 0.271267, 0.762673, 6.74344e-05, 0, 0.301847, 0.742133, 6.82788e-05, 0, 0.333333, 0.720779, 6.91959e-05, 0, 0.365079, 0.699386, 6.96817e-05, 0, 0.396826, 0.67732, 6.99583e-05, 0, 0.428572, 0.654888, 6.98447e-05, 0, 0.460318, 0.632499, 6.94063e-05, 0, 0.492064, 0.609825, 6.91612e-05, 0, 0.52381, 0.587287, 6.81576e-05, 0, 0.555556, 0.564743, 6.74138e-05, 0, 0.587302, 0.542409, 6.61617e-05, 0, 0.619048, 0.520282, 6.47785e-05, 0, 0.650794, 0.498506, 6.33836e-05, 0, 0.68254, 0.477102, 6.15905e-05, 0, 0.714286, 0.456167, 6.01013e-05, 0, 0.746032, 0.435728, 5.81457e-05, 0, 0.777778, 0.415809, 5.64215e-05, 0, 0.809524, 0.396517, 5.44997e-05, 0, 0.84127, 0.377737, 5.25061e-05, 0, 0.873016, 0.359698, 5.06831e-05, 0, 0.904762, 0.342164, 4.8568e-05, 0, 0.936508, 0.325417, 4.67826e-05, 0, 0.968254, 0.309186, 4.46736e-05, 0, 1, 1, 1.09018e-09, 0, 0, 1, 1.0904e-09, 0, 0, 1, 1.09393e-09, 0, 0, 1, 1.1095e-09, 0, 0, 1, 1.154e-09, 0, 0, 1, 1.26089e-09, 0, 0, 0.999999, 1.5059e-09, 0, 0, 0.999997, 2.07899e-09, 0, 0, 0.999994, 3.48164e-09, 0, 0, 0.999993, 7.05728e-09, 0, 0, 0.999987, 1.63692e-08, 0, 0, 0.999981, 4.06033e-08, 0, 0, 0.999969, 1.0245e-07, 0, 0, 0.999953, 2.55023e-07, 0, 0, 0.999925, 6.1511e-07, 0, 0, 0.999881, 1.42218e-06, 0, 0, 0.99981, 3.13086e-06, 0, 0, 0.99968, 6.53119e-06, 0, 0, 0.999418, 1.2832e-05, 0, 0, 0.998748, 2.32497e-05, 0, 0, 0.996066, 3.29522e-05, 0, 0, 0.988379, 1.79613e-05, 0, 0.000108799, 0.982567, 1.43715e-05, 0, 0.000921302, 0.976097, 1.48096e-05, 0, 0.00280738, 0.968475, 1.78905e-05, 0, 0.00596622, 0.964606, 2.53921e-05, 0, 0.0105284, 0.961564, 3.48623e-05, 0, 0.0165848, 0.955517, 3.57612e-05, 0, 0.0242, 0.948381, 3.43493e-05, 0, 0.03342, 0.941095, 4.05849e-05, 0, 0.0442777, 0.931923, 4.75394e-05, 0, 0.0567958, 0.91996, 4.84328e-05, 0, 0.0709879, 0.907419, 5.02146e-05, 0, 0.086861, 0.89618, 5.61654e-05, 0, 0.104415, 0.88337, 5.87612e-05, 0, 0.123643, 0.869046, 6.18057e-05, 0, 0.144531, 0.853278, 6.57392e-05, 0, 0.167057, 0.836091, 6.6303e-05, 0, 0.191188, 0.819644, 7.04445e-05, 0, 0.216878, 0.801246, 7.14071e-05, 0, 0.244062, 0.782031, 7.40093e-05, 0, 0.272649, 0.762066, 7.4685e-05, 0, 0.302509, 0.741964, 7.66647e-05, 0, 0.333442, 0.720554, 7.66328e-05, 0, 0.365079, 0.699098, 7.77857e-05, 0, 0.396826, 0.677189, 7.74633e-05, 0, 0.428572, 0.65484, 7.76235e-05, 0, 0.460318, 0.632496, 7.70316e-05, 0, 0.492064, 0.609908, 7.62669e-05, 0, 0.52381, 0.587312, 7.53972e-05, 0, 0.555556, 0.564938, 7.39994e-05, 0, 0.587302, 0.542577, 7.28382e-05, 0, 0.619048, 0.52062, 7.1112e-05, 0, 0.650794, 0.498819, 6.94004e-05, 0, 0.68254, 0.477555, 6.75575e-05, 0, 0.714286, 0.456568, 6.53449e-05, 0, 0.746032, 0.436278, 6.36068e-05, 0, 0.777778, 0.41637, 6.13466e-05, 0, 0.809524, 0.397144, 5.94177e-05, 0, 0.84127, 0.378412, 5.70987e-05, 0, 0.873016, 0.360376, 5.50419e-05, 0, 0.904762, 0.342906, 5.27422e-05, 0, 0.936508, 0.326136, 5.06544e-05, 0, 0.968254, 0.30997, 4.84307e-05, 0, 1, 1, 3.54014e-09, 0, 0, 1, 3.54073e-09, 0, 0, 1, 3.54972e-09, 0, 0, 1, 3.58929e-09, 0, 0, 1, 3.70093e-09, 0, 0, 0.999999, 3.96194e-09, 0, 0, 0.999998, 4.53352e-09, 0, 0, 0.999997, 5.78828e-09, 0, 0, 0.999994, 8.63812e-09, 0, 0, 0.999991, 1.53622e-08, 0, 0, 0.999985, 3.16356e-08, 0, 0, 0.999977, 7.12781e-08, 0, 0, 0.999964, 1.66725e-07, 0, 0, 0.999945, 3.90501e-07, 0, 0, 0.999912, 8.95622e-07, 0, 0, 0.999866, 1.98428e-06, 0, 0, 0.999786, 4.21038e-06, 0, 0, 0.999647, 8.50239e-06, 0, 0, 0.999356, 1.62059e-05, 0, 0, 0.998563, 2.82652e-05, 0, 0, 0.994928, 3.36309e-05, 0, 2.44244e-05, 0.987999, 1.78458e-05, 0, 0.000523891, 0.982893, 1.59162e-05, 0, 0.00194729, 0.977044, 1.78056e-05, 0, 0.00451099, 0.969972, 2.30624e-05, 0, 0.00835132, 0.964237, 3.13922e-05, 0, 0.013561, 0.960791, 4.06145e-05, 0, 0.0202056, 0.954292, 3.72796e-05, 0, 0.0283321, 0.948052, 4.03199e-05, 0, 0.0379739, 0.940938, 4.79537e-05, 0, 0.0491551, 0.931689, 5.45292e-05, 0, 0.0618918, 0.91987, 5.4038e-05, 0, 0.0761941, 0.907665, 5.89909e-05, 0, 0.0920672, 0.895281, 6.42651e-05, 0, 0.109511, 0.882621, 6.59707e-05, 0, 0.12852, 0.86873, 7.09973e-05, 0, 0.149085, 0.853008, 7.42221e-05, 0, 0.171189, 0.835944, 7.61754e-05, 0, 0.194809, 0.818949, 7.97052e-05, 0, 0.21991, 0.800951, 8.12434e-05, 0, 0.246447, 0.781847, 8.38075e-05, 0, 0.274352, 0.761649, 8.4501e-05, 0, 0.303535, 0.74152, 8.60258e-05, 0, 0.333857, 0.720495, 8.66233e-05, 0, 0.365104, 0.698742, 8.68326e-05, 0, 0.396826, 0.677096, 8.7133e-05, 0, 0.428572, 0.654782, 8.63497e-05, 0, 0.460318, 0.632335, 8.60206e-05, 0, 0.492064, 0.610031, 8.49337e-05, 0, 0.52381, 0.587457, 8.38279e-05, 0, 0.555556, 0.56513, 8.2309e-05, 0, 0.587302, 0.542877, 8.03542e-05, 0, 0.619048, 0.5209, 7.86928e-05, 0, 0.650794, 0.499291, 7.65171e-05, 0, 0.68254, 0.477971, 7.44753e-05, 0, 0.714286, 0.457221, 7.2209e-05, 0, 0.746032, 0.436803, 6.97448e-05, 0, 0.777778, 0.417083, 6.75333e-05, 0, 0.809524, 0.397749, 6.48058e-05, 0, 0.84127, 0.379177, 6.25759e-05, 0, 0.873016, 0.361061, 5.98584e-05, 0, 0.904762, 0.343713, 5.75797e-05, 0, 0.936508, 0.326894, 5.49999e-05, 0, 0.968254, 0.310816, 5.27482e-05, 0, 1, 1, 1.0153e-08, 0, 0, 1, 1.01544e-08, 0, 0, 1, 1.01751e-08, 0, 0, 1, 1.02662e-08, 0, 0, 1, 1.0521e-08, 0, 0, 0.999999, 1.11049e-08, 0, 0, 0.999999, 1.23408e-08, 0, 0, 0.999996, 1.4924e-08, 0, 0, 0.999992, 2.04471e-08, 0, 0, 0.999989, 3.26539e-08, 0, 0, 0.99998, 6.03559e-08, 0, 0, 0.999971, 1.23936e-07, 0, 0, 0.999955, 2.69058e-07, 0, 0, 0.999933, 5.93604e-07, 0, 0, 0.999901, 1.29633e-06, 0, 0, 0.999847, 2.75621e-06, 0, 0, 0.999761, 5.64494e-06, 0, 0, 0.999607, 1.10485e-05, 0, 0, 0.999282, 2.04388e-05, 0, 0, 0.99831, 3.41084e-05, 0, 2.2038e-07, 0.993288, 2.94949e-05, 0, 0.000242388, 0.987855, 1.92736e-05, 0, 0.0012503, 0.983167, 1.82383e-05, 0, 0.0032745, 0.977908, 2.18633e-05, 0, 0.00646321, 0.971194, 2.90662e-05, 0, 0.0109133, 0.963867, 3.86401e-05, 0, 0.0166927, 0.95982, 4.62827e-05, 0, 0.0238494, 0.953497, 4.20705e-05, 0, 0.0324178, 0.947621, 4.77743e-05, 0, 0.0424225, 0.940611, 5.68258e-05, 0, 0.0538808, 0.931174, 6.18061e-05, 0, 0.0668047, 0.919919, 6.27098e-05, 0, 0.0812014, 0.907856, 6.94714e-05, 0, 0.0970745, 0.894509, 7.35008e-05, 0, 0.114424, 0.881954, 7.63369e-05, 0, 0.133246, 0.868309, 8.21896e-05, 0, 0.153534, 0.852511, 8.3769e-05, 0, 0.175275, 0.835821, 8.81615e-05, 0, 0.198453, 0.817981, 8.96368e-05, 0, 0.223042, 0.800504, 9.30906e-05, 0, 0.249009, 0.78141, 9.45056e-05, 0, 0.276304, 0.761427, 9.63605e-05, 0, 0.304862, 0.74094, 9.68088e-05, 0, 0.334584, 0.720233, 9.81481e-05, 0, 0.365322, 0.698592, 9.79122e-05, 0, 0.396826, 0.676763, 9.81057e-05, 0, 0.428571, 0.654808, 9.73956e-05, 0, 0.460318, 0.632326, 9.62619e-05, 0, 0.492064, 0.610049, 9.52996e-05, 0, 0.52381, 0.58763, 9.33334e-05, 0, 0.555556, 0.565261, 9.17573e-05, 0, 0.587302, 0.543244, 8.96636e-05, 0, 0.619048, 0.521273, 8.73304e-05, 0, 0.650794, 0.499818, 8.52648e-05, 0, 0.68254, 0.478536, 8.23961e-05, 0, 0.714286, 0.457826, 7.9939e-05, 0, 0.746032, 0.437549, 7.7126e-05, 0, 0.777778, 0.41776, 7.43043e-05, 0, 0.809524, 0.39863, 7.16426e-05, 0, 0.84127, 0.379954, 6.86456e-05, 0, 0.873016, 0.362025, 6.60514e-05, 0, 0.904762, 0.344581, 6.30755e-05, 0, 0.936508, 0.327909, 6.05439e-05, 0, 0.968254, 0.311736, 5.76345e-05, 0, 1, 1, 2.63344e-08, 0, 0, 1, 2.63373e-08, 0, 0, 1, 2.63815e-08, 0, 0, 1, 2.65753e-08, 0, 0, 1, 2.71132e-08, 0, 0, 0.999999, 2.83279e-08, 0, 0, 0.999997, 3.0833e-08, 0, 0, 0.999995, 3.58711e-08, 0, 0, 0.999992, 4.61266e-08, 0, 0, 0.999985, 6.7574e-08, 0, 0, 0.999977, 1.1358e-07, 0, 0, 0.999966, 2.13657e-07, 0, 0, 0.999948, 4.31151e-07, 0, 0, 0.999923, 8.96656e-07, 0, 0, 0.999884, 1.86603e-06, 0, 0, 0.999826, 3.81115e-06, 0, 0, 0.999732, 7.54184e-06, 0, 0, 0.999561, 1.43192e-05, 0, 0, 0.999191, 2.57061e-05, 0, 0, 0.997955, 4.05724e-05, 0, 7.44132e-05, 0.992228, 2.76537e-05, 0, 0.000716477, 0.987638, 2.08885e-05, 0, 0.0022524, 0.983395, 2.15226e-05, 0, 0.00484816, 0.978614, 2.70795e-05, 0, 0.00860962, 0.972389, 3.65282e-05, 0, 0.0136083, 0.964392, 4.74747e-05, 0, 0.0198941, 0.95861, 5.09141e-05, 0, 0.0275023, 0.952806, 4.8963e-05, 0, 0.0364584, 0.94712, 5.71119e-05, 0, 0.04678, 0.940104, 6.71704e-05, 0, 0.0584799, 0.930398, 6.87586e-05, 0, 0.0715665, 0.919866, 7.38161e-05, 0, 0.086045, 0.907853, 8.13235e-05, 0, 0.101918, 0.894078, 8.34582e-05, 0, 0.119186, 0.881177, 8.92093e-05, 0, 0.137845, 0.867575, 9.44548e-05, 0, 0.157891, 0.852107, 9.69607e-05, 0, 0.179316, 0.835502, 0.000101456, 0, 0.202106, 0.81756, 0.000103256, 0, 0.226243, 0.79984, 0.000106954, 0, 0.251704, 0.780998, 0.000108066, 0, 0.278451, 0.761132, 0.000110111, 0, 0.306436, 0.740429, 0.000110459, 0, 0.335586, 0.719836, 0.000111219, 0, 0.365796, 0.698467, 0.00011145, 0, 0.3969, 0.676446, 0.000110393, 0, 0.428571, 0.654635, 0.000110035, 0, 0.460318, 0.632411, 0.000108548, 0, 0.492064, 0.609986, 0.000106963, 0, 0.52381, 0.587872, 0.000105238, 0, 0.555556, 0.565528, 0.000102665, 0, 0.587302, 0.543563, 0.000100543, 0, 0.619048, 0.52176, 9.76182e-05, 0, 0.650794, 0.500188, 9.47099e-05, 0, 0.68254, 0.479204, 9.19929e-05, 0, 0.714286, 0.458413, 8.86139e-05, 0, 0.746032, 0.438314, 8.57839e-05, 0, 0.777778, 0.418573, 8.2411e-05, 0, 0.809524, 0.39947, 7.92211e-05, 0, 0.84127, 0.380892, 7.59546e-05, 0, 0.873016, 0.362953, 7.27571e-05, 0, 0.904762, 0.345601, 6.95738e-05, 0, 0.936508, 0.328895, 6.64907e-05, 0, 0.968254, 0.312808, 6.34277e-05, 0, 1, 1, 6.28647e-08, 0, 0, 1, 6.28705e-08, 0, 0, 1, 6.29587e-08, 0, 0, 1, 6.33441e-08, 0, 0, 0.999999, 6.44087e-08, 0, 0, 0.999998, 6.67856e-08, 0, 0, 0.999997, 7.15889e-08, 0, 0, 0.999995, 8.09577e-08, 0, 0, 0.999989, 9.92764e-08, 0, 0, 0.999983, 1.35834e-07, 0, 0, 0.999974, 2.10482e-07, 0, 0, 0.999959, 3.65215e-07, 0, 0, 0.999939, 6.86693e-07, 0, 0, 0.999911, 1.3472e-06, 0, 0, 0.999868, 2.6731e-06, 0, 0, 0.999804, 5.24756e-06, 0, 0, 0.9997, 1.00403e-05, 0, 0, 0.99951, 1.85019e-05, 0, 0, 0.999078, 3.22036e-05, 0, 6.20676e-06, 0.997428, 4.70002e-05, 0, 0.000341552, 0.99162, 2.87123e-05, 0, 0.00143727, 0.987479, 2.34706e-05, 0, 0.00349201, 0.983582, 2.60083e-05, 0, 0.0066242, 0.979186, 3.37927e-05, 0, 0.0109113, 0.97325, 4.54689e-05, 0, 0.0164064, 0.965221, 5.73759e-05, 0, 0.0231463, 0.957262, 5.44114e-05, 0, 0.0311571, 0.952211, 5.87006e-05, 0, 0.0404572, 0.946631, 6.92256e-05, 0, 0.0510592, 0.939391, 7.87819e-05, 0, 0.0629723, 0.929795, 7.92368e-05, 0, 0.0762025, 0.91965, 8.75075e-05, 0, 0.090753, 0.907737, 9.50903e-05, 0, 0.106626, 0.893899, 9.72963e-05, 0, 0.123822, 0.880239, 0.00010459, 0, 0.142337, 0.866562, 0.000107689, 0, 0.16217, 0.85164, 0.000113081, 0, 0.183314, 0.835021, 0.000116636, 0, 0.20576, 0.817311, 0.000120074, 0, 0.229496, 0.798845, 0.000121921, 0, 0.254502, 0.780479, 0.00012475, 0, 0.280753, 0.760694, 0.000125255, 0, 0.308212, 0.740142, 0.000126719, 0, 0.336825, 0.719248, 0.00012636, 0, 0.366517, 0.698209, 0.000126712, 0, 0.397167, 0.676398, 0.000125769, 0, 0.428578, 0.654378, 0.000124432, 0, 0.460318, 0.632484, 0.000123272, 0, 0.492064, 0.610113, 0.00012085, 0, 0.52381, 0.587931, 0.000118411, 0, 0.555556, 0.565872, 0.00011569, 0, 0.587302, 0.543814, 0.000112521, 0, 0.619048, 0.522265, 0.000109737, 0, 0.650794, 0.500835, 0.000106228, 0, 0.68254, 0.479818, 0.000102591, 0, 0.714286, 0.459258, 9.91288e-05, 0, 0.746032, 0.439061, 9.52325e-05, 0, 0.777778, 0.419552, 9.1895e-05, 0, 0.809524, 0.400399, 8.79051e-05, 0, 0.84127, 0.381976, 8.44775e-05, 0, 0.873016, 0.364009, 8.06316e-05, 0, 0.904762, 0.346761, 7.71848e-05, 0, 0.936508, 0.330049, 7.35429e-05, 0, 0.968254, 0.314018, 7.02103e-05, 0, 1, 1, 1.39968e-07, 0, 0, 1, 1.39979e-07, 0, 0, 1, 1.40145e-07, 0, 0, 1, 1.4087e-07, 0, 0, 0.999999, 1.42865e-07, 0, 0, 0.999998, 1.47279e-07, 0, 0, 0.999997, 1.56057e-07, 0, 0, 0.999992, 1.7276e-07, 0, 0, 0.999989, 2.04352e-07, 0, 0, 0.99998, 2.6494e-07, 0, 0, 0.999969, 3.83435e-07, 0, 0, 0.999953, 6.18641e-07, 0, 0, 0.999929, 1.08755e-06, 0, 0, 0.999898, 2.01497e-06, 0, 0, 0.999849, 3.81346e-06, 0, 0, 0.999778, 7.19815e-06, 0, 0, 0.999661, 1.33215e-05, 0, 0, 0.999451, 2.38313e-05, 0, 0, 0.998936, 4.01343e-05, 0, 0.000113724, 0.99662, 5.17346e-05, 0, 0.000820171, 0.991094, 3.04323e-05, 0, 0.00238143, 0.987487, 2.81757e-05, 0, 0.00493527, 0.983731, 3.20048e-05, 0, 0.00856859, 0.979647, 4.23905e-05, 0, 0.0133393, 0.973837, 5.62935e-05, 0, 0.0192863, 0.96584, 6.77442e-05, 0, 0.0264369, 0.956309, 6.23073e-05, 0, 0.03481, 0.951523, 7.04131e-05, 0, 0.0444184, 0.946003, 8.36594e-05, 0, 0.0552713, 0.938454, 9.11736e-05, 0, 0.0673749, 0.929279, 9.38264e-05, 0, 0.0807329, 0.919239, 0.000103754, 0, 0.0953479, 0.907293, 0.000109928, 0, 0.111221, 0.893936, 0.000115257, 0, 0.128352, 0.879674, 0.000122265, 0, 0.14674, 0.865668, 0.000125733, 0, 0.166382, 0.850998, 0.000132305, 0, 0.187276, 0.834498, 0.000134844, 0, 0.209413, 0.816903, 0.000139276, 0, 0.232786, 0.798235, 0.000140984, 0, 0.257382, 0.779724, 0.00014378, 0, 0.283181, 0.760251, 0.000144623, 0, 0.310156, 0.739808, 0.000145228, 0, 0.338269, 0.718762, 0.00014539, 0, 0.367461, 0.697815, 0.000144432, 0, 0.397646, 0.67631, 0.000143893, 0, 0.428685, 0.654278, 0.000141846, 0, 0.460318, 0.632347, 0.00013935, 0, 0.492064, 0.610296, 0.000137138, 0, 0.52381, 0.588039, 0.000133806, 0, 0.555556, 0.566218, 0.000130755, 0, 0.587302, 0.544346, 0.000127128, 0, 0.619048, 0.522701, 0.000123002, 0, 0.650794, 0.501542, 0.000119443, 0, 0.68254, 0.480508, 0.000115055, 0, 0.714286, 0.460092, 0.000111032, 0, 0.746032, 0.440021, 0.000106635, 0, 0.777778, 0.420446, 0.000102162, 0, 0.809524, 0.401512, 9.8184e-05, 0, 0.84127, 0.38299, 9.36497e-05, 0, 0.873016, 0.365232, 8.9813e-05, 0, 0.904762, 0.347865, 8.53073e-05, 0, 0.936508, 0.331342, 8.17068e-05, 0, 0.968254, 0.315202, 7.73818e-05, 0, 1, 1, 2.9368e-07, 0, 0, 1, 2.937e-07, 0, 0, 1, 2.93998e-07, 0, 0, 1, 2.95298e-07, 0, 0, 0.999999, 2.98865e-07, 0, 0, 0.999998, 3.067e-07, 0, 0, 0.999995, 3.22082e-07, 0, 0, 0.999992, 3.50767e-07, 0, 0, 0.999986, 4.03538e-07, 0, 0, 0.999976, 5.01372e-07, 0, 0, 0.999964, 6.8562e-07, 0, 0, 0.999945, 1.0374e-06, 0, 0, 0.999919, 1.71269e-06, 0, 0, 0.999882, 3.00175e-06, 0, 0, 0.999829, 5.42144e-06, 0, 0, 0.999749, 9.84182e-06, 0, 0, 0.99962, 1.76213e-05, 0, 0, 0.999382, 3.05995e-05, 0, 1.38418e-05, 0.998751, 4.96686e-05, 0, 0.000389844, 0.995344, 5.10733e-05, 0, 0.00150343, 0.990768, 3.45829e-05, 0, 0.00352451, 0.987464, 3.42841e-05, 0, 0.00655379, 0.983846, 3.99072e-05, 0, 0.0106554, 0.980007, 5.33219e-05, 0, 0.0158723, 0.974494, 6.96992e-05, 0, 0.0222333, 0.96622, 7.76754e-05, 0, 0.029758, 0.956273, 7.47718e-05, 0, 0.0384596, 0.950952, 8.64611e-05, 0, 0.0483473, 0.945215, 0.000100464, 0, 0.0594266, 0.937287, 0.000103729, 0, 0.0717019, 0.928649, 0.000111665, 0, 0.0851752, 0.918791, 0.00012353, 0, 0.0998479, 0.906685, 0.000127115, 0, 0.115721, 0.893706, 0.00013628, 0, 0.132794, 0.879248, 0.000142427, 0, 0.151067, 0.864685, 0.000148091, 0, 0.170538, 0.850032, 0.000153517, 0, 0.191204, 0.833853, 0.000157322, 0, 0.213063, 0.816353, 0.000161086, 0, 0.236107, 0.797834, 0.000164111, 0, 0.260329, 0.778831, 0.000165446, 0, 0.285714, 0.759756, 0.000167492, 0, 0.312243, 0.739419, 0.000166928, 0, 0.339887, 0.718491, 0.000167, 0, 0.368604, 0.697392, 0.000165674, 0, 0.398329, 0.676102, 0.000163815, 0, 0.428961, 0.654243, 0.000162003, 0, 0.460331, 0.632176, 0.000158831, 0, 0.492064, 0.610407, 0.000155463, 0, 0.52381, 0.588394, 0.000152062, 0, 0.555556, 0.56645, 0.000147665, 0, 0.587302, 0.5449, 0.00014375, 0, 0.619048, 0.523276, 0.000138905, 0, 0.650794, 0.502179, 0.000134189, 0, 0.68254, 0.481359, 0.000129392, 0, 0.714286, 0.46092, 0.000124556, 0, 0.746032, 0.441084, 0.00011957, 0, 0.777778, 0.421517, 0.000114652, 0, 0.809524, 0.402721, 0.000109688, 0, 0.84127, 0.384222, 0.000104667, 0, 0.873016, 0.366534, 9.99633e-05, 0, 0.904762, 0.349205, 9.50177e-05, 0, 0.936508, 0.332702, 9.07301e-05, 0, 0.968254, 0.316599, 8.59769e-05, 0, 1, 1, 5.85473e-07, 0, 0, 1, 5.85507e-07, 0, 0, 1, 5.8602e-07, 0, 0, 0.999999, 5.88259e-07, 0, 0, 0.999999, 5.94381e-07, 0, 0, 0.999998, 6.07754e-07, 0, 0, 0.999995, 6.33729e-07, 0, 0, 0.99999, 6.8137e-07, 0, 0, 0.999984, 7.67003e-07, 0, 0, 0.999973, 9.21212e-07, 0, 0, 0.999959, 1.20218e-06, 0, 0, 0.999936, 1.72024e-06, 0, 0, 0.999907, 2.68088e-06, 0, 0, 0.999866, 4.45512e-06, 0, 0, 0.999806, 7.68481e-06, 0, 0, 0.999716, 1.342e-05, 0, 0, 0.999576, 2.32473e-05, 0, 0, 0.9993, 3.91694e-05, 0, 0.000129917, 0.998498, 6.08429e-05, 0, 0.000845035, 0.994132, 4.89743e-05, 0, 0.00237616, 0.99031, 3.84644e-05, 0, 0.00484456, 0.987409, 4.21768e-05, 0, 0.00832472, 0.983981, 5.04854e-05, 0, 0.0128643, 0.980268, 6.71028e-05, 0, 0.0184947, 0.974875, 8.52749e-05, 0, 0.025237, 0.966063, 8.5531e-05, 0, 0.0331046, 0.956779, 9.00588e-05, 0, 0.0421067, 0.950259, 0.00010577, 0, 0.0522487, 0.944239, 0.000119458, 0, 0.0635343, 0.936341, 0.000122164, 0, 0.0759654, 0.928047, 0.000134929, 0, 0.0895434, 0.918065, 0.000145544, 0, 0.104269, 0.906267, 0.000150531, 0, 0.120142, 0.893419, 0.000161652, 0, 0.137163, 0.878758, 0.00016593, 0, 0.15533, 0.863699, 0.000174014, 0, 0.174645, 0.848876, 0.000177877, 0, 0.195106, 0.833032, 0.000184049, 0, 0.21671, 0.815557, 0.000186088, 0, 0.239454, 0.797323, 0.00019054, 0, 0.263332, 0.778124, 0.000191765, 0, 0.288336, 0.758929, 0.000192535, 0, 0.314451, 0.738979, 0.000192688, 0, 0.341658, 0.718213, 0.000191522, 0, 0.369924, 0.696947, 0.000190491, 0, 0.399202, 0.675807, 0.000187913, 0, 0.429416, 0.654147, 0.000184451, 0, 0.460447, 0.63229, 0.000181442, 0, 0.492064, 0.610499, 0.000177139, 0, 0.523809, 0.588747, 0.000172596, 0, 0.555555, 0.566783, 0.000167457, 0, 0.587301, 0.545359, 0.000162518, 0, 0.619048, 0.523984, 0.000156818, 0, 0.650794, 0.502917, 0.000151884, 0, 0.68254, 0.482294, 0.000145514, 0, 0.714286, 0.461945, 0.000140199, 0, 0.746032, 0.442133, 0.000134101, 0, 0.777778, 0.422705, 0.000128374, 0, 0.809524, 0.403916, 0.000122996, 0, 0.84127, 0.38554, 0.000116808, 0, 0.873016, 0.367909, 0.000111973, 0, 0.904762, 0.350651, 0.000105938, 0, 0.936508, 0.334208, 0.000101355, 0, 0.968254, 0.318123, 9.57629e-05, 0, 1, 1, 1.11633e-06, 0, 0, 1, 1.11639e-06, 0, 0, 1, 1.11725e-06, 0, 0, 1, 1.12096e-06, 0, 0, 0.999999, 1.1311e-06, 0, 0, 0.999997, 1.15315e-06, 0, 0, 0.999995, 1.1956e-06, 0, 0, 0.999989, 1.27239e-06, 0, 0, 0.999981, 1.40772e-06, 0, 0, 0.999969, 1.64541e-06, 0, 0, 0.999952, 2.06607e-06, 0, 0, 0.999928, 2.81783e-06, 0, 0, 0.999895, 4.16835e-06, 0, 0, 0.999848, 6.58728e-06, 0, 0, 0.999781, 1.08648e-05, 0, 0, 0.999682, 1.82579e-05, 0, 0, 0.999523, 3.06003e-05, 0, 1.59122e-05, 0.999205, 4.99862e-05, 0, 0.000391184, 0.998131, 7.3306e-05, 0, 0.00147534, 0.993334, 5.13229e-05, 0, 0.0034227, 0.99016, 4.67783e-05, 0, 0.00632232, 0.987321, 5.23413e-05, 0, 0.0102295, 0.984099, 6.4267e-05, 0, 0.0151794, 0.980432, 8.43042e-05, 0, 0.0211947, 0.974976, 0.000102819, 0, 0.0282899, 0.966429, 9.96234e-05, 0, 0.0364739, 0.957633, 0.000111074, 0, 0.0457522, 0.949422, 0.000128644, 0, 0.0561278, 0.943045, 0.000140076, 0, 0.0676023, 0.935448, 0.000146349, 0, 0.0801762, 0.927225, 0.000161854, 0, 0.0938499, 0.917033, 0.000169135, 0, 0.108623, 0.905762, 0.000179987, 0, 0.124496, 0.892879, 0.000189832, 0, 0.141469, 0.878435, 0.000195881, 0, 0.159541, 0.863114, 0.00020466, 0, 0.178713, 0.84776, 0.000209473, 0, 0.198985, 0.832084, 0.000214861, 0, 0.220355, 0.814915, 0.000217695, 0, 0.242823, 0.796711, 0.000220313, 0, 0.266385, 0.777603, 0.00022313, 0, 0.291036, 0.757991, 0.000222471, 0, 0.316767, 0.738371, 0.000222869, 0, 0.343563, 0.717872, 0.000221243, 0, 0.371402, 0.696619, 0.000218089, 0, 0.400248, 0.675379, 0.00021562, 0, 0.430047, 0.65411, 0.00021169, 0, 0.460709, 0.63241, 0.000206947, 0, 0.492079, 0.61046, 0.000201709, 0, 0.52381, 0.58903, 0.000196753, 0, 0.555556, 0.567267, 0.000189637, 0, 0.587302, 0.545886, 0.000184735, 0, 0.619048, 0.524714, 0.000177257, 0, 0.650794, 0.503789, 0.000171424, 0, 0.68254, 0.483204, 0.000164688, 0, 0.714286, 0.462976, 0.000157172, 0, 0.746032, 0.443294, 0.000151341, 0, 0.777778, 0.423988, 0.000143737, 0, 0.809524, 0.405325, 0.000138098, 0, 0.84127, 0.386981, 0.000130698, 0, 0.873016, 0.369436, 0.000125276, 0, 0.904762, 0.35219, 0.000118349, 0, 0.936508, 0.335804, 0.00011312, 0, 0.968254, 0.319749, 0.000106687, 0, 1, 1, 2.04685e-06, 0, 0, 1, 2.04694e-06, 0, 0, 1, 2.04831e-06, 0, 0, 0.999999, 2.05428e-06, 0, 0, 0.999999, 2.07056e-06, 0, 0, 0.999997, 2.10581e-06, 0, 0, 0.999993, 2.1732e-06, 0, 0, 0.999987, 2.29365e-06, 0, 0, 0.999979, 2.50243e-06, 0, 0, 0.999965, 2.86127e-06, 0, 0, 0.999947, 3.48028e-06, 0, 0, 0.999918, 4.55588e-06, 0, 0, 0.999881, 6.43303e-06, 0, 0, 0.999828, 9.70064e-06, 0, 0, 0.999753, 1.53233e-05, 0, 0, 0.999642, 2.4793e-05, 0, 0, 0.999464, 4.02032e-05, 0, 0.000122947, 0.999089, 6.35852e-05, 0, 0.000807414, 0.997567, 8.57026e-05, 0, 0.00227206, 0.992903, 5.94912e-05, 0, 0.00462812, 0.990011, 5.78515e-05, 0, 0.00794162, 0.987192, 6.5399e-05, 0, 0.0122534, 0.98418, 8.19675e-05, 0, 0.0175888, 0.980491, 0.000105514, 0, 0.0239635, 0.974779, 0.000121532, 0, 0.031387, 0.96675, 0.000119144, 0, 0.0398644, 0.958248, 0.000136125, 0, 0.0493982, 0.948884, 0.000155408, 0, 0.0599896, 0.941673, 0.000162281, 0, 0.0716382, 0.934521, 0.000176754, 0, 0.0843437, 0.926205, 0.000192873, 0, 0.0981056, 0.916089, 0.000200038, 0, 0.112923, 0.904963, 0.000213624, 0, 0.128796, 0.892089, 0.000221834, 0, 0.145725, 0.878028, 0.000232619, 0, 0.163709, 0.86249, 0.000238632, 0, 0.182749, 0.846587, 0.000247002, 0, 0.202847, 0.830988, 0.000250702, 0, 0.224001, 0.814165, 0.000255562, 0, 0.246214, 0.796135, 0.000257505, 0, 0.269482, 0.777052, 0.000258625, 0, 0.293805, 0.757201, 0.000258398, 0, 0.319176, 0.737655, 0.000256714, 0, 0.345587, 0.717477, 0.000255187, 0, 0.373021, 0.696433, 0.000251792, 0, 0.401454, 0.675084, 0.000247223, 0, 0.430844, 0.653907, 0.000242213, 0, 0.461125, 0.632561, 0.000237397, 0, 0.492187, 0.610658, 0.000229313, 0, 0.52381, 0.589322, 0.000224402, 0, 0.555556, 0.567857, 0.000216116, 0, 0.587302, 0.54652, 0.000209124, 0, 0.619048, 0.525433, 0.000201601, 0, 0.650794, 0.504679, 0.000192957, 0, 0.68254, 0.484203, 0.000186052, 0, 0.714286, 0.464203, 0.000177672, 0, 0.746032, 0.444549, 0.000170005, 0, 0.777778, 0.425346, 0.000162401, 0, 0.809524, 0.406706, 0.0001544, 0, 0.84127, 0.388576, 0.000147437, 0, 0.873016, 0.37094, 0.000139493, 0, 0.904762, 0.353996, 0.000133219, 0, 0.936508, 0.337391, 0.000125573, 0, 0.968254, 0.321648, 0.000119867, 0, 1, 1, 3.62511e-06, 0, 0, 1, 3.62525e-06, 0, 0, 1, 3.62739e-06, 0, 0, 0.999999, 3.63673e-06, 0, 0, 0.999998, 3.66214e-06, 0, 0, 0.999996, 3.71698e-06, 0, 0, 0.999992, 3.82116e-06, 0, 0, 0.999986, 4.00554e-06, 0, 0, 0.999976, 4.32058e-06, 0, 0, 0.999961, 4.85194e-06, 0, 0, 0.999938, 5.74808e-06, 0, 0, 0.999908, 7.26643e-06, 0, 0, 0.999865, 9.84707e-06, 0, 0, 0.999807, 1.42217e-05, 0, 0, 0.999723, 2.15581e-05, 0, 0, 0.999602, 3.36114e-05, 0, 1.19113e-05, 0.999398, 5.27353e-05, 0, 0.000355813, 0.998946, 8.05809e-05, 0, 0.00137768, 0.996647, 9.42908e-05, 0, 0.00322469, 0.992298, 6.68733e-05, 0, 0.00597897, 0.989802, 7.16564e-05, 0, 0.00968903, 0.987019, 8.21355e-05, 0, 0.0143845, 0.984219, 0.000104555, 0, 0.0200831, 0.980425, 0.000131245, 0, 0.0267948, 0.974241, 0.000139613, 0, 0.034525, 0.967006, 0.000145931, 0, 0.0432757, 0.95893, 0.000167153, 0, 0.0530471, 0.949157, 0.000188146, 0, 0.0638386, 0.94062, 0.000194625, 0, 0.0756487, 0.933509, 0.000213721, 0, 0.0884762, 0.925088, 0.000229616, 0, 0.10232, 0.915178, 0.000239638, 0, 0.117178, 0.904093, 0.000254814, 0, 0.133051, 0.891337, 0.000263685, 0, 0.149939, 0.877326, 0.000274789, 0, 0.167841, 0.861794, 0.000280534, 0, 0.18676, 0.845758, 0.000289534, 0, 0.206696, 0.829792, 0.000294446, 0, 0.22765, 0.813037, 0.000296877, 0, 0.249625, 0.795285, 0.000300217, 0, 0.27262, 0.776323, 0.000299826, 0, 0.296636, 0.756673, 0.000299787, 0, 0.321671, 0.736856, 0.000297867, 0, 0.347718, 0.716883, 0.000294052, 0, 0.374768, 0.696089, 0.000289462, 0, 0.402804, 0.67505, 0.000285212, 0, 0.431796, 0.653509, 0.00027653, 0, 0.461695, 0.63258, 0.000271759, 0, 0.49242, 0.61104, 0.000262811, 0, 0.523822, 0.589567, 0.000255151, 0, 0.555556, 0.568322, 0.000246434, 0, 0.587302, 0.547235, 0.000237061, 0, 0.619048, 0.52616, 0.000228343, 0, 0.650794, 0.505716, 0.000219236, 0, 0.68254, 0.485274, 0.000209595, 0, 0.714286, 0.465411, 0.000201011, 0, 0.746032, 0.445854, 0.00019109, 0, 0.777778, 0.426911, 0.000182897, 0, 0.809524, 0.408222, 0.000173569, 0, 0.84127, 0.390307, 0.000165496, 0, 0.873016, 0.372624, 0.000156799, 0, 0.904762, 0.355804, 0.00014917, 0, 0.936508, 0.33924, 0.000140907, 0, 0.968254, 0.323534, 0.000134062, 0, 1, 1, 6.22487e-06, 0, 0, 1, 6.2251e-06, 0, 0, 1, 6.22837e-06, 0, 0, 0.999999, 6.24259e-06, 0, 0, 0.999998, 6.28127e-06, 0, 0, 0.999996, 6.36451e-06, 0, 0, 0.999991, 6.5218e-06, 0, 0, 0.999984, 6.79782e-06, 0, 0, 0.999973, 7.26361e-06, 0, 0, 0.999955, 8.03644e-06, 0, 0, 0.999931, 9.31397e-06, 0, 0, 0.999896, 1.14299e-05, 0, 0, 0.999847, 1.49402e-05, 0, 0, 0.999784, 2.07461e-05, 0, 0, 0.999692, 3.02493e-05, 0, 0, 0.999554, 4.54957e-05, 0, 9.97275e-05, 0.999326, 6.90762e-05, 0, 0.000724813, 0.998757, 0.000101605, 0, 0.0020972, 0.995367, 9.58745e-05, 0, 0.00432324, 0.99209, 8.32808e-05, 0, 0.00746347, 0.989517, 8.87601e-05, 0, 0.0115534, 0.987008, 0.00010564, 0, 0.0166134, 0.98421, 0.000133179, 0, 0.0226552, 0.98021, 0.000161746, 0, 0.0296838, 0.973676, 0.000161821, 0, 0.0377016, 0.967052, 0.000178635, 0, 0.0467079, 0.959385, 0.000206765, 0, 0.0567013, 0.949461, 0.00022476, 0, 0.0676796, 0.939578, 0.00023574, 0, 0.0796403, 0.932416, 0.00025893, 0, 0.0925812, 0.923759, 0.000271228, 0, 0.106501, 0.914223, 0.000289165, 0, 0.121397, 0.902942, 0.000301156, 0, 0.13727, 0.890419, 0.000313852, 0, 0.15412, 0.876639, 0.000324408, 0, 0.171946, 0.861316, 0.00033249, 0, 0.190751, 0.84496, 0.000338497, 0, 0.210537, 0.828427, 0.000345861, 0, 0.231305, 0.811871, 0.000347863, 0, 0.253057, 0.794397, 0.000350225, 0, 0.275797, 0.775726, 0.000349915, 0, 0.299525, 0.75617, 0.000347297, 0, 0.324242, 0.736091, 0.000344232, 0, 0.349947, 0.716213, 0.000340835, 0, 0.376633, 0.695736, 0.000332369, 0, 0.404289, 0.674961, 0.000327943, 0, 0.432895, 0.653518, 0.000318533, 0, 0.462415, 0.632574, 0.000310391, 0, 0.492788, 0.61134, 0.000300755, 0, 0.523909, 0.590017, 0.000290506, 0, 0.555556, 0.568752, 0.000280446, 0, 0.587302, 0.548061, 0.000269902, 0, 0.619048, 0.52711, 0.000258815, 0, 0.650794, 0.506682, 0.000248481, 0, 0.68254, 0.486524, 0.000237141, 0, 0.714286, 0.466812, 0.000226872, 0, 0.746032, 0.44732, 0.000216037, 0, 0.777778, 0.428473, 0.000205629, 0, 0.809524, 0.409921, 0.000195691, 0, 0.84127, 0.392028, 0.000185457, 0, 0.873016, 0.374606, 0.000176436, 0, 0.904762, 0.357601, 0.000166508, 0, 0.936508, 0.341348, 0.000158385, 0, 0.968254, 0.32542, 0.000149203, 0, 1, 1, 1.03967e-05, 0, 0, 1, 1.0397e-05, 0, 0, 1, 1.04019e-05, 0, 0, 0.999999, 1.04231e-05, 0, 0, 0.999998, 1.04806e-05, 0, 0, 0.999995, 1.06042e-05, 0, 0, 0.999991, 1.08366e-05, 0, 0, 0.999982, 1.12415e-05, 0, 0, 0.999968, 1.19174e-05, 0, 0, 0.99995, 1.30227e-05, 0, 0, 0.999922, 1.48176e-05, 0, 0, 0.999884, 1.77303e-05, 0, 0, 0.99983, 2.24564e-05, 0, 0, 0.999758, 3.00966e-05, 0, 0, 0.999654, 4.23193e-05, 0, 5.49083e-06, 0.999503, 6.14848e-05, 0, 0.000296087, 0.999237, 9.03576e-05, 0, 0.00123144, 0.998491, 0.0001271, 0, 0.00295954, 0.994594, 0.000107754, 0, 0.00555829, 0.99178, 0.000103025, 0, 0.00907209, 0.989265, 0.00011154, 0, 0.0135257, 0.986998, 0.000136296, 0, 0.0189327, 0.984137, 0.000169154, 0, 0.0252993, 0.979798, 0.000196671, 0, 0.0326272, 0.97337, 0.000196678, 0, 0.0409157, 0.967239, 0.000223121, 0, 0.0501623, 0.959543, 0.000253809, 0, 0.0603638, 0.949466, 0.000265972, 0, 0.0715171, 0.939074, 0.000288372, 0, 0.0836187, 0.931118, 0.000310983, 0, 0.0966657, 0.922525, 0.000325561, 0, 0.110656, 0.912983, 0.000345725, 0, 0.125588, 0.901617, 0.0003556, 0, 0.141461, 0.889487, 0.000374012, 0, 0.158275, 0.875787, 0.000383445, 0, 0.176031, 0.860654, 0.000393972, 0, 0.19473, 0.844417, 0.000400311, 0, 0.214374, 0.82741, 0.000405004, 0, 0.234967, 0.810545, 0.000407378, 0, 0.256512, 0.793312, 0.000407351, 0, 0.279011, 0.774847, 0.000406563, 0, 0.302468, 0.755621, 0.000404903, 0, 0.326887, 0.735511, 0.000397486, 0, 0.352266, 0.715435, 0.00039357, 0, 0.378605, 0.695403, 0.000384739, 0, 0.405897, 0.674681, 0.000376108, 0, 0.43413, 0.65359, 0.000365997, 0, 0.463277, 0.632471, 0.000354957, 0, 0.493295, 0.61151, 0.000343593, 0, 0.524106, 0.59064, 0.000331841, 0, 0.555561, 0.569386, 0.000318891, 0, 0.587302, 0.548785, 0.0003072, 0, 0.619048, 0.528146, 0.00029361, 0, 0.650794, 0.507872, 0.000281709, 0, 0.68254, 0.487805, 0.000268627, 0, 0.714286, 0.468196, 0.000255887, 0, 0.746032, 0.448922, 0.000243997, 0, 0.777778, 0.430093, 0.000231662, 0, 0.809524, 0.411845, 0.000220339, 0, 0.84127, 0.393808, 0.000208694, 0, 0.873016, 0.376615, 0.000198045, 0, 0.904762, 0.359655, 0.000187375, 0, 0.936508, 0.343452, 0.000177371, 0, 0.968254, 0.32765, 0.000167525, 0, 1, 1, 1.69351e-05, 0, 0, 1, 1.69356e-05, 0, 0, 1, 1.69427e-05, 0, 0, 0.999999, 1.69736e-05, 0, 0, 0.999998, 1.70575e-05, 0, 0, 0.999995, 1.72372e-05, 0, 0, 0.99999, 1.75739e-05, 0, 0, 0.999979, 1.81568e-05, 0, 0, 0.999966, 1.91206e-05, 0, 0, 0.999944, 2.0677e-05, 0, 0, 0.999912, 2.31644e-05, 0, 0, 0.999869, 2.71268e-05, 0, 0, 0.999811, 3.34272e-05, 0, 0, 0.99973, 4.33979e-05, 0, 0, 0.999617, 5.90083e-05, 0, 6.80315e-05, 0.999445, 8.29497e-05, 0, 0.000612796, 0.999138, 0.000118019, 0, 0.00187408, 0.998095, 0.000156712, 0, 0.00395791, 0.993919, 0.000125054, 0, 0.00692144, 0.991333, 0.000126091, 0, 0.0107962, 0.989226, 0.000144912, 0, 0.0155986, 0.986954, 0.000175737, 0, 0.0213364, 0.983982, 0.000213883, 0, 0.0280114, 0.979128, 0.000234526, 0, 0.0356226, 0.973327, 0.000243725, 0, 0.0441668, 0.967416, 0.0002773, 0, 0.0536399, 0.959729, 0.000308799, 0, 0.0640376, 0.949758, 0.000322447, 0, 0.0753554, 0.939173, 0.000350021, 0, 0.0875893, 0.9296, 0.000370089, 0, 0.100736, 0.921181, 0.000391365, 0, 0.114793, 0.91164, 0.000413636, 0, 0.129759, 0.900435, 0.000427068, 0, 0.145632, 0.888183, 0.000441046, 0, 0.162412, 0.874772, 0.000454968, 0, 0.180101, 0.859566, 0.000461882, 0, 0.1987, 0.843579, 0.000471556, 0, 0.218213, 0.826453, 0.000474335, 0, 0.238641, 0.809164, 0.000477078, 0, 0.259989, 0.792179, 0.00047755, 0, 0.282262, 0.773866, 0.000472573, 0, 0.305464, 0.754944, 0.000469765, 0, 0.329599, 0.735133, 0.000462371, 0, 0.35467, 0.714858, 0.000453674, 0, 0.380678, 0.694829, 0.000443888, 0, 0.407622, 0.674453, 0.000432052, 0, 0.435493, 0.653685, 0.000420315, 0, 0.464275, 0.632666, 0.000406829, 0, 0.493938, 0.611676, 0.000392234, 0, 0.524422, 0.591193, 0.000379208, 0, 0.555624, 0.570145, 0.00036319, 0, 0.587302, 0.549566, 0.000349111, 0, 0.619048, 0.529278, 0.000334166, 0, 0.650794, 0.509026, 0.000318456, 0, 0.68254, 0.489186, 0.00030449, 0, 0.714286, 0.469662, 0.000289051, 0, 0.746032, 0.450691, 0.000275494, 0, 0.777778, 0.431841, 0.000261437, 0, 0.809524, 0.413752, 0.000247846, 0, 0.84127, 0.395951, 0.000235085, 0, 0.873016, 0.378633, 0.000222245, 0, 0.904762, 0.36194, 0.000210533, 0, 0.936508, 0.345599, 0.000198494, 0, 0.968254, 0.329999, 0.000188133, 0, 1, 1, 2.69663e-05, 0, 0, 1, 2.6967e-05, 0, 0, 1, 2.69772e-05, 0, 0, 0.999999, 2.70214e-05, 0, 0, 0.999998, 2.71415e-05, 0, 0, 0.999994, 2.7398e-05, 0, 0, 0.999988, 2.78771e-05, 0, 0, 0.999977, 2.87019e-05, 0, 0, 0.999961, 3.00544e-05, 0, 0, 0.999937, 3.22138e-05, 0, 0, 0.999904, 3.56163e-05, 0, 0, 0.999854, 4.09465e-05, 0, 0, 0.99979, 4.92651e-05, 0, 0, 0.999699, 6.21722e-05, 0, 8.8288e-07, 0.999572, 8.19715e-05, 0, 0.000223369, 0.999381, 0.000111689, 0, 0.00105414, 0.999016, 0.000153862, 0, 0.0026493, 0.997437, 0.000187667, 0, 0.00508608, 0.993545, 0.000155672, 0, 0.00840554, 0.991135, 0.000161455, 0, 0.012629, 0.989157, 0.000188241, 0, 0.0177661, 0.986874, 0.000226229, 0, 0.0238198, 0.983714, 0.000268668, 0, 0.0307887, 0.978301, 0.000277109, 0, 0.0386688, 0.973227, 0.000303446, 0, 0.0474554, 0.967317, 0.000341851, 0, 0.0571428, 0.959477, 0.000370885, 0, 0.0677256, 0.950012, 0.000392753, 0, 0.0791988, 0.939484, 0.00042781, 0, 0.0915576, 0.928135, 0.000443866, 0, 0.104798, 0.919819, 0.000472959, 0, 0.118918, 0.910049, 0.000491551, 0, 0.133915, 0.899181, 0.000512616, 0, 0.149788, 0.886881, 0.000523563, 0, 0.166537, 0.87359, 0.000540183, 0, 0.184164, 0.858613, 0.000547386, 0, 0.202669, 0.842809, 0.000554809, 0, 0.222056, 0.825727, 0.000558316, 0, 0.242329, 0.808086, 0.000557824, 0, 0.263492, 0.790728, 0.000556346, 0, 0.285551, 0.772987, 0.000552672, 0, 0.30851, 0.7541, 0.000543738, 0, 0.332376, 0.734669, 0.000536107, 0, 0.357153, 0.714411, 0.000523342, 0, 0.382845, 0.694196, 0.000512238, 0, 0.409454, 0.674252, 0.000497465, 0, 0.436977, 0.65357, 0.000481096, 0, 0.465404, 0.632999, 0.000467054, 0, 0.494713, 0.611994, 0.000448771, 0, 0.524864, 0.591604, 0.000431889, 0, 0.555779, 0.571134, 0.000415238, 0, 0.587302, 0.550528, 0.000396369, 0, 0.619048, 0.530292, 0.000379477, 0, 0.650794, 0.510364, 0.000361488, 0, 0.68254, 0.490749, 0.000343787, 0, 0.714286, 0.471266, 0.000327822, 0, 0.746032, 0.452462, 0.000310626, 0, 0.777778, 0.433907, 0.000295352, 0, 0.809524, 0.415659, 0.000279179, 0, 0.84127, 0.398138, 0.000264685, 0, 0.873016, 0.380833, 0.000249905, 0, 0.904762, 0.364247, 0.000236282, 0, 0.936508, 0.348041, 0.000222905, 0, 0.968254, 0.332389, 0.000210522, 0, 1, 1, 4.20604e-05, 0, 0, 1, 4.20614e-05, 0, 0, 1, 4.20757e-05, 0, 0, 0.999999, 4.2138e-05, 0, 0, 0.999997, 4.23067e-05, 0, 0, 0.999993, 4.26668e-05, 0, 0, 0.999986, 4.33372e-05, 0, 0, 0.999974, 4.44857e-05, 0, 0, 0.999956, 4.63554e-05, 0, 0, 0.99993, 4.93105e-05, 0, 0, 0.999892, 5.39077e-05, 0, 0, 0.999838, 6.10005e-05, 0, 0, 0.999767, 7.18822e-05, 0, 0, 0.999666, 8.84581e-05, 0, 3.65471e-05, 0.999525, 0.000113398, 0, 0.000485623, 0.999311, 0.000150043, 0, 0.00162096, 0.998865, 0.000200063, 0, 0.00355319, 0.996278, 0.000211014, 0, 0.00633818, 0.992956, 0.000189672, 0, 0.0100043, 0.991017, 0.000210262, 0, 0.0145648, 0.989055, 0.000244292, 0, 0.0200237, 0.986741, 0.000290481, 0, 0.0263798, 0.983288, 0.000334303, 0, 0.033629, 0.977784, 0.000340307, 0, 0.0417652, 0.973037, 0.000377864, 0, 0.0507821, 0.967181, 0.0004239, 0, 0.060673, 0.958971, 0.000443854, 0, 0.0714314, 0.950093, 0.000483039, 0, 0.0830518, 0.939552, 0.000517934, 0, 0.0955288, 0.927678, 0.000539449, 0, 0.108859, 0.918278, 0.000568604, 0, 0.123038, 0.908449, 0.000588505, 0, 0.138065, 0.897713, 0.000612473, 0, 0.153938, 0.885533, 0.000625575, 0, 0.170657, 0.872131, 0.00063854, 0, 0.188224, 0.857517, 0.000647034, 0, 0.20664, 0.841796, 0.00065209, 0, 0.225909, 0.824726, 0.0006544, 0, 0.246035, 0.807297, 0.000655744, 0, 0.267022, 0.789058, 0.000646716, 0, 0.288878, 0.77189, 0.000643898, 0, 0.311607, 0.753082, 0.000629973, 0, 0.335216, 0.7341, 0.000621564, 0, 0.359713, 0.714094, 0.000605171, 0, 0.385103, 0.693839, 0.000588752, 0, 0.41139, 0.673891, 0.000573294, 0, 0.438576, 0.653565, 0.000552682, 0, 0.466656, 0.633326, 0.000533446, 0, 0.495617, 0.612582, 0.000514635, 0, 0.525431, 0.59205, 0.00049303, 0, 0.556041, 0.571918, 0.000471842, 0, 0.587338, 0.551572, 0.000451713, 0, 0.619048, 0.531553, 0.000430049, 0, 0.650794, 0.51175, 0.000410445, 0, 0.68254, 0.49238, 0.000390098, 0, 0.714286, 0.473143, 0.000370033, 0, 0.746032, 0.45423, 0.000351205, 0, 0.777778, 0.435963, 0.000332049, 0, 0.809524, 0.41787, 0.000315021, 0, 0.84127, 0.400387, 0.000297315, 0, 0.873016, 0.383332, 0.000281385, 0, 0.904762, 0.366665, 0.000265397, 0, 0.936508, 0.350633, 0.000250601, 0, 0.968254, 0.334964, 0.00023589, 0, 1, 1, 6.43736e-05, 0, 0, 1, 6.4375e-05, 0, 0, 1, 6.43947e-05, 0, 0, 0.999999, 6.4481e-05, 0, 0, 0.999997, 6.47143e-05, 0, 0, 0.999994, 6.52119e-05, 0, 0, 0.999985, 6.61359e-05, 0, 0, 0.999972, 6.77116e-05, 0, 0, 0.999952, 7.02599e-05, 0, 0, 0.999922, 7.42517e-05, 0, 0, 0.99988, 8.03906e-05, 0, 0, 0.99982, 8.97315e-05, 0, 0, 0.999741, 0.000103838, 0, 0, 0.999629, 0.00012496, 0, 0.000149024, 0.999474, 0.000156161, 0, 0.000861027, 0.999229, 0.000201034, 0, 0.00231198, 0.998662, 0.000259069, 0, 0.00458147, 0.995299, 0.000245439, 0, 0.00770895, 0.992732, 0.00024498, 0, 0.0117126, 0.990847, 0.000273211, 0, 0.0165989, 0.988911, 0.000316492, 0, 0.0223674, 0.98654, 0.00037161, 0, 0.0290135, 0.982636, 0.000410352, 0, 0.0365309, 0.977346, 0.000421756, 0, 0.0449117, 0.972909, 0.000475578, 0, 0.0541481, 0.966821, 0.000522482, 0, 0.0642326, 0.958686, 0.000545008, 0, 0.075158, 0.949754, 0.000589286, 0, 0.0869181, 0.939184, 0.000619995, 0, 0.0995074, 0.927505, 0.000654266, 0, 0.112922, 0.916606, 0.000682362, 0, 0.127157, 0.906707, 0.000704286, 0, 0.142212, 0.895937, 0.000725909, 0, 0.158085, 0.883913, 0.000743939, 0, 0.174776, 0.870642, 0.000755157, 0, 0.192287, 0.856241, 0.000764387, 0, 0.210619, 0.84069, 0.000771032, 0, 0.229775, 0.823728, 0.000765906, 0, 0.249761, 0.806481, 0.000767604, 0, 0.270582, 0.787924, 0.000754385, 0, 0.292243, 0.770588, 0.000749668, 0, 0.314753, 0.751991, 0.000731613, 0, 0.338118, 0.733407, 0.000717655, 0, 0.362347, 0.713688, 0.000700604, 0, 0.387447, 0.693595, 0.000678765, 0, 0.413424, 0.673426, 0.000657042, 0, 0.440284, 0.65359, 0.000635892, 0, 0.468027, 0.633576, 0.000611569, 0, 0.496645, 0.613144, 0.000586011, 0, 0.526122, 0.592711, 0.000563111, 0, 0.556417, 0.572722, 0.000537699, 0, 0.587451, 0.552762, 0.000512556, 0, 0.619048, 0.532985, 0.000489757, 0, 0.650794, 0.513219, 0.000464139, 0, 0.68254, 0.493992, 0.000442193, 0, 0.714286, 0.47509, 0.000418629, 0, 0.746032, 0.456287, 0.000397045, 0, 0.777778, 0.438152, 0.000375504, 0, 0.809524, 0.420294, 0.00035492, 0, 0.84127, 0.402749, 0.000335327, 0, 0.873016, 0.385879, 0.000316422, 0, 0.904762, 0.369352, 0.000298333, 0, 0.936508, 0.353301, 0.000281417, 0, 0.968254, 0.337781, 0.000265203, 0, 1, 1, 9.68267e-05, 0, 0, 1, 9.68284e-05, 0, 0, 1, 9.68556e-05, 0, 0, 0.999999, 9.69733e-05, 0, 0, 0.999997, 9.72913e-05, 0, 0, 0.999993, 9.79688e-05, 0, 0, 0.999984, 9.92239e-05, 0, 0, 0.999969, 0.000101356, 0, 0, 0.999946, 0.000104784, 0, 0, 0.999913, 0.000110111, 0, 0, 0.999868, 0.000118217, 0, 0, 0.999801, 0.000130396, 0, 0, 0.999712, 0.000148523, 0, 1.24907e-05, 0.999589, 0.000175233, 0, 0.000355405, 0.999416, 0.000213999, 0, 0.0013528, 0.999136, 0.000268529, 0, 0.00312557, 0.998367, 0.000333088, 0, 0.00573045, 0.994701, 0.000304757, 0, 0.00919397, 0.992497, 0.000318031, 0, 0.0135261, 0.990608, 0.000353863, 0, 0.0187278, 0.988715, 0.000409044, 0, 0.0247947, 0.986241, 0.000472967, 0, 0.0317196, 0.981696, 0.000495104, 0, 0.039494, 0.977097, 0.000532873, 0, 0.0481087, 0.972583, 0.000594447, 0, 0.0575549, 0.966142, 0.000636867, 0, 0.0678242, 0.95823, 0.000669899, 0, 0.0789089, 0.949677, 0.000719499, 0, 0.0908023, 0.939226, 0.000750584, 0, 0.103499, 0.927501, 0.000793183, 0, 0.116993, 0.915199, 0.00081995, 0, 0.131282, 0.90498, 0.000847654, 0, 0.146364, 0.894243, 0.000868929, 0, 0.162237, 0.882154, 0.000884278, 0, 0.178902, 0.869161, 0.000898108, 0, 0.196358, 0.854751, 0.000901254, 0, 0.21461, 0.839368, 0.00090679, 0, 0.23366, 0.822874, 0.000901541, 0, 0.253512, 0.805514, 0.000897297, 0, 0.274174, 0.78716, 0.000881856, 0, 0.29565, 0.769061, 0.000870032, 0, 0.31795, 0.751, 0.000851719, 0, 0.341081, 0.732614, 0.000830671, 0, 0.365053, 0.713171, 0.000806569, 0, 0.389874, 0.693472, 0.00078338, 0, 0.415553, 0.673528, 0.000756404, 0, 0.442098, 0.653397, 0.000726872, 0, 0.469512, 0.633781, 0.000700494, 0, 0.497794, 0.613877, 0.00067105, 0, 0.526935, 0.593506, 0.000640361, 0, 0.556908, 0.573667, 0.000613502, 0, 0.587657, 0.553932, 0.000583177, 0, 0.61906, 0.534345, 0.000554375, 0, 0.650794, 0.515042, 0.000527811, 0, 0.68254, 0.495674, 0.000499367, 0, 0.714286, 0.477132, 0.00047429, 0, 0.746032, 0.458609, 0.000447726, 0, 0.777778, 0.440354, 0.000424205, 0, 0.809524, 0.422765, 0.000399549, 0, 0.84127, 0.405472, 0.000378315, 0, 0.873016, 0.388482, 0.000355327, 0, 0.904762, 0.372191, 0.000336122, 0, 0.936508, 0.356099, 0.000315247, 0, 0.968254, 0.340737, 0.00029794, 0, 1, 1, 0.000143327, 0, 0, 1, 0.00014333, 0, 0, 1, 0.000143366, 0, 0, 0.999999, 0.000143524, 0, 0, 0.999996, 0.000143952, 0, 0, 0.999991, 0.000144862, 0, 0, 0.999981, 0.000146544, 0, 0, 0.999966, 0.000149391, 0, 0, 0.999941, 0.000153946, 0, 0, 0.999905, 0.000160971, 0, 0, 0.999852, 0.000171562, 0, 0, 0.99978, 0.00018729, 0, 0, 0.999681, 0.000210386, 0, 8.26239e-05, 0.999546, 0.000243906, 0, 0.000664807, 0.999352, 0.000291739, 0, 0.00196192, 0.999027, 0.000357419, 0, 0.00405941, 0.997886, 0.000422349, 0, 0.00699664, 0.99419, 0.000385008, 0, 0.0107896, 0.99214, 0.000409775, 0, 0.0154415, 0.990274, 0.000456418, 0, 0.0209488, 0.988455, 0.000527008, 0, 0.0273037, 0.985804, 0.000597685, 0, 0.0344969, 0.98103, 0.000613124, 0, 0.0425183, 0.976674, 0.000668321, 0, 0.0513575, 0.972021, 0.000736985, 0, 0.0610046, 0.965274, 0.000773789, 0, 0.0714508, 0.958046, 0.000830852, 0, 0.0826877, 0.949333, 0.000875766, 0, 0.0947085, 0.939135, 0.000917088, 0, 0.107507, 0.927119, 0.000952244, 0, 0.121078, 0.91469, 0.000990626, 0, 0.135419, 0.903006, 0.00101304, 0, 0.150526, 0.892368, 0.00103834, 0, 0.166399, 0.880231, 0.00105002, 0, 0.183038, 0.867432, 0.00106331, 0, 0.200443, 0.853208, 0.00106783, 0, 0.218618, 0.837956, 0.00106458, 0, 0.237566, 0.821772, 0.00105945, 0, 0.257291, 0.804328, 0.00104685, 0, 0.2778, 0.786465, 0.00103178, 0, 0.2991, 0.768004, 0.00101077, 0, 0.321199, 0.74972, 0.000985504, 0, 0.344106, 0.731682, 0.000962893, 0, 0.36783, 0.712813, 0.000932146, 0, 0.392383, 0.693139, 0.00089871, 0, 0.417774, 0.673566, 0.000869678, 0, 0.444013, 0.653483, 0.000835525, 0, 0.471107, 0.633891, 0.000799853, 0, 0.49906, 0.614433, 0.000766838, 0, 0.527869, 0.594586, 0.000732227, 0, 0.557517, 0.574769, 0.000696442, 0, 0.587966, 0.555149, 0.000663935, 0, 0.61913, 0.535898, 0.000629826, 0, 0.650794, 0.516753, 0.000596486, 0, 0.68254, 0.497816, 0.000567078, 0, 0.714286, 0.479034, 0.000534399, 0, 0.746032, 0.460975, 0.000507013, 0, 0.777778, 0.442935, 0.000477421, 0, 0.809524, 0.425263, 0.000451101, 0, 0.84127, 0.408248, 0.000424964, 0, 0.873016, 0.391339, 0.00039993, 0, 0.904762, 0.37513, 0.000377619, 0, 0.936508, 0.359172, 0.000354418, 0, 0.968254, 0.343876, 0.000334823, 0, 1, 1, 0.000209042, 0, 0, 1, 0.000209045, 0, 0, 1, 0.000209093, 0, 0, 0.999999, 0.000209304, 0, 0, 0.999996, 0.000209871, 0, 0, 0.999991, 0.000211078, 0, 0, 0.999979, 0.000213304, 0, 0, 0.999963, 0.000217061, 0, 0, 0.999933, 0.000223042, 0, 0, 0.999894, 0.000232206, 0, 0, 0.999837, 0.000245901, 0, 0, 0.999756, 0.000266023, 0, 1.02927e-06, 0.999648, 0.000295204, 0, 0.000233468, 0.999499, 0.000336958, 0, 0.00108237, 0.999283, 0.000395563, 0, 0.00268832, 0.998896, 0.000473785, 0, 0.00511138, 0.997006, 0.000520008, 0, 0.00837705, 0.993819, 0.000497261, 0, 0.0124928, 0.991632, 0.000523722, 0, 0.0174561, 0.989875, 0.000587258, 0, 0.0232596, 0.988109, 0.000676329, 0, 0.0298932, 0.985155, 0.000747701, 0, 0.0373453, 0.980479, 0.000768803, 0, 0.0456045, 0.976271, 0.000841054, 0, 0.0546593, 0.971347, 0.000911469, 0, 0.0644994, 0.964528, 0.000953057, 0, 0.0751152, 0.957632, 0.00102221, 0, 0.0864981, 0.948681, 0.00106122, 0, 0.0986407, 0.938716, 0.00111857, 0, 0.111537, 0.926629, 0.00114762, 0, 0.125182, 0.914025, 0.00118995, 0, 0.139571, 0.901026, 0.00121228, 0, 0.154703, 0.890358, 0.00123946, 0, 0.170576, 0.878283, 0.0012527, 0, 0.18719, 0.865459, 0.00125536, 0, 0.204547, 0.851407, 0.00126134, 0, 0.222648, 0.836276, 0.00124759, 0, 0.241498, 0.820436, 0.00124443, 0, 0.261101, 0.803253, 0.00122071, 0, 0.281465, 0.785562, 0.00120107, 0, 0.302595, 0.76718, 0.00117762, 0, 0.324501, 0.748551, 0.00114289, 0, 0.347192, 0.730564, 0.00110872, 0, 0.370679, 0.712253, 0.00107636, 0, 0.394973, 0.692867, 0.00103646, 0, 0.420085, 0.673695, 0.000996793, 0, 0.446027, 0.653912, 0.00095675, 0, 0.47281, 0.634129, 0.000916739, 0, 0.500441, 0.615004, 0.000874401, 0, 0.528921, 0.595587, 0.000833411, 0, 0.558244, 0.575965, 0.000794556, 0, 0.588384, 0.5566, 0.00075196, 0, 0.619281, 0.537428, 0.000716381, 0, 0.650795, 0.518623, 0.000676558, 0, 0.68254, 0.499964, 0.00064074, 0, 0.714286, 0.481356, 0.000605984, 0, 0.746032, 0.463279, 0.000570256, 0, 0.777778, 0.445673, 0.000540138, 0, 0.809524, 0.428032, 0.000507299, 0, 0.84127, 0.411112, 0.000479553, 0, 0.873016, 0.394444, 0.000450737, 0, 0.904762, 0.378247, 0.000424269, 0, 0.936508, 0.362415, 0.000399111, 0, 0.968254, 0.347103, 0.000375274, 0, 1, 1, 0.000300729, 0, 0, 1, 0.000300733, 0, 0, 1, 0.000300797, 0, 0, 0.999998, 0.000301072, 0, 0, 0.999996, 0.000301817, 0, 0, 0.999989, 0.000303398, 0, 0, 0.999977, 0.000306309, 0, 0, 0.999958, 0.000311209, 0, 0, 0.999927, 0.000318975, 0, 0, 0.999884, 0.000330804, 0, 0, 0.99982, 0.00034834, 0, 0, 0.999733, 0.000373854, 0, 3.26995e-05, 0.999613, 0.000410424, 0, 0.000477174, 0.999447, 0.000462047, 0, 0.00161099, 0.999204, 0.000533322, 0, 0.00353153, 0.998725, 0.000624964, 0, 0.00627965, 0.995871, 0.000631786, 0, 0.0098693, 0.993194, 0.000632017, 0, 0.0143011, 0.991541, 0.00068923, 0, 0.019568, 0.989773, 0.000766892, 0, 0.0256593, 0.987647, 0.000863668, 0, 0.0325625, 0.984193, 0.000922089, 0, 0.0402647, 0.980016, 0.000970749, 0, 0.0487532, 0.975859, 0.00106027, 0, 0.058016, 0.970514, 0.00112239, 0, 0.0680419, 0.963625, 0.00117212, 0, 0.0788208, 0.956959, 0.00125211, 0, 0.0903439, 0.947956, 0.00129411, 0, 0.102604, 0.93809, 0.00135879, 0, 0.115594, 0.92659, 0.00139309, 0, 0.129309, 0.913829, 0.00143253, 0, 0.143745, 0.90005, 0.00145809, 0, 0.158901, 0.888129, 0.0014748, 0, 0.174774, 0.87607, 0.00148756, 0, 0.191365, 0.863461, 0.00148714, 0, 0.208674, 0.849594, 0.00148892, 0, 0.226705, 0.834531, 0.00146496, 0, 0.245461, 0.81903, 0.0014579, 0, 0.264947, 0.802122, 0.00143039, 0, 0.28517, 0.78445, 0.00139717, 0, 0.306137, 0.766434, 0.00136312, 0, 0.327857, 0.747816, 0.00132597, 0, 0.350341, 0.729519, 0.00128323, 0, 0.373598, 0.711454, 0.00123803, 0, 0.397642, 0.692699, 0.00119097, 0, 0.422485, 0.673723, 0.00114565, 0, 0.448139, 0.654386, 0.00109552, 0, 0.474619, 0.634673, 0.00104553, 0, 0.501933, 0.615554, 0.00099985, 0, 0.530089, 0.596462, 0.000948207, 0, 0.559087, 0.577385, 0.000902299, 0, 0.588913, 0.558257, 0.000856448, 0, 0.619525, 0.5392, 0.000810395, 0, 0.650826, 0.520543, 0.000768558, 0, 0.68254, 0.502206, 0.0007239, 0, 0.714286, 0.48402, 0.000685794, 0, 0.746032, 0.465779, 0.00064471, 0, 0.777778, 0.448455, 0.000609583, 0, 0.809524, 0.431091, 0.00057227, 0, 0.84127, 0.414147, 0.00054042, 0, 0.873016, 0.39765, 0.000506545, 0, 0.904762, 0.381576, 0.000477635, 0, 0.936508, 0.365881, 0.000448446, 0, 0.968254, 0.350582, 0.000421424, 0, 1, 1, 0.000427144, 0, 0, 1, 0.000427151, 0, 0, 1, 0.000427232, 0, 0, 0.999998, 0.00042759, 0, 0, 0.999995, 0.000428555, 0, 0, 0.999988, 0.000430603, 0, 0, 0.999976, 0.000434368, 0, 0, 0.999952, 0.000440688, 0, 0, 0.999919, 0.000450667, 0, 0, 0.999871, 0.00046578, 0, 0, 0.999801, 0.000488024, 0, 0, 0.999704, 0.000520092, 0, 0.000129791, 0.999572, 0.000565553, 0, 0.000821056, 0.999389, 0.000628906, 0, 0.00225241, 0.999114, 0.000714911, 0, 0.00449109, 0.998488, 0.000819218, 0, 0.00756249, 0.995234, 0.00080415, 0, 0.0114716, 0.993021, 0.000830181, 0, 0.0162131, 0.991407, 0.000902645, 0, 0.021776, 0.989625, 0.000996934, 0, 0.0281471, 0.987064, 0.00109707, 0, 0.0353118, 0.983265, 0.00114353, 0, 0.0432562, 0.979535, 0.0012272, 0, 0.0519665, 0.975224, 0.00132642, 0, 0.0614298, 0.969574, 0.00138092, 0, 0.0716348, 0.963021, 0.00145896, 0, 0.0825709, 0.956046, 0.00152834, 0, 0.094229, 0.947136, 0.00158217, 0, 0.106602, 0.937313, 0.0016347, 0, 0.119682, 0.926073, 0.00168383, 0, 0.133465, 0.913121, 0.00171627, 0, 0.147947, 0.899165, 0.00174229, 0, 0.163125, 0.885891, 0.00176137, 0, 0.178998, 0.873783, 0.00176406, 0, 0.195566, 0.861331, 0.00176156, 0, 0.21283, 0.847569, 0.00175346, 0, 0.230793, 0.832785, 0.00172753, 0, 0.249459, 0.817442, 0.00170204, 0, 0.268832, 0.800613, 0.00166576, 0, 0.28892, 0.783597, 0.00162909, 0, 0.30973, 0.76571, 0.0015826, 0, 0.331271, 0.747021, 0.00153106, 0, 0.353554, 0.728593, 0.00148036, 0, 0.37659, 0.710661, 0.00142808, 0, 0.400391, 0.692426, 0.00136906, 0, 0.424973, 0.673623, 0.00131066, 0, 0.450347, 0.65494, 0.00125569, 0, 0.476531, 0.635448, 0.00119517, 0, 0.503535, 0.616221, 0.00113828, 0, 0.531372, 0.597531, 0.0010816, 0, 0.560047, 0.578795, 0.00102673, 0, 0.589554, 0.559892, 0.000970985, 0, 0.619869, 0.541307, 0.000919773, 0, 0.650923, 0.522608, 0.000868479, 0, 0.68254, 0.504484, 0.00082137, 0, 0.714286, 0.486603, 0.000772916, 0, 0.746032, 0.468802, 0.000730353, 0, 0.777778, 0.451172, 0.000684955, 0, 0.809524, 0.434348, 0.000647565, 0, 0.84127, 0.417445, 0.000605863, 0, 0.873016, 0.401077, 0.000571885, 0, 0.904762, 0.385039, 0.000536034, 0, 0.936508, 0.369483, 0.000504227, 0, 0.968254, 0.354272, 0.000473165, 0, 1, 1, 0.000599525, 0, 0, 1, 0.000599533, 0, 0, 1, 0.000599639, 0, 0, 0.999998, 0.000600097, 0, 0, 0.999994, 0.000601336, 0, 0, 0.999987, 0.000603958, 0, 0, 0.999972, 0.000608775, 0, 0, 0.999949, 0.000616842, 0, 0, 0.999912, 0.000629534, 0, 0, 0.999857, 0.000648658, 0, 0, 0.999781, 0.000676615, 0, 5.38873e-06, 0.999674, 0.000716574, 0, 0.000308602, 0.999528, 0.000772641, 0, 0.00127003, 0.999326, 0.000849806, 0, 0.00300783, 0.999009, 0.000952682, 0, 0.00556637, 0.998112, 0.00106394, 0, 0.00895889, 0.994496, 0.00102228, 0, 0.0131827, 0.992806, 0.00108586, 0, 0.0182277, 0.991211, 0.0011759, 0, 0.0240795, 0.989415, 0.00128955, 0, 0.030723, 0.986499, 0.00139038, 0, 0.0381418, 0.982679, 0.00144539, 0, 0.046321, 0.978839, 0.00153954, 0, 0.0552459, 0.974295, 0.00164417, 0, 0.0649034, 0.968784, 0.00171517, 0, 0.0752814, 0.962324, 0.00180282, 0, 0.0863693, 0.954956, 0.00186387, 0, 0.0981578, 0.94624, 0.00193817, 0, 0.110639, 0.936517, 0.00198156, 0, 0.123806, 0.925186, 0.00203042, 0, 0.137655, 0.91252, 0.0020664, 0, 0.15218, 0.898441, 0.00207822, 0, 0.16738, 0.884394, 0.0020992, 0, 0.183253, 0.871273, 0.00208748, 0, 0.199799, 0.859057, 0.00208686, 0, 0.21702, 0.845243, 0.00205519, 0, 0.234918, 0.830723, 0.00202868, 0, 0.253496, 0.815801, 0.00199501, 0, 0.272761, 0.79914, 0.00194193, 0, 0.292719, 0.782372, 0.00188824, 0, 0.313377, 0.76482, 0.00183695, 0, 0.334745, 0.746586, 0.00177418, 0, 0.356833, 0.7281, 0.00170628, 0, 0.379654, 0.709842, 0.00164063, 0, 0.403221, 0.692019, 0.00157355, 0, 0.427548, 0.67364, 0.00150262, 0, 0.452651, 0.655277, 0.00143473, 0, 0.478545, 0.636438, 0.00136371, 0, 0.505246, 0.617364, 0.00129911, 0, 0.532768, 0.598603, 0.00123014, 0, 0.561122, 0.580195, 0.00116587, 0, 0.590309, 0.561786, 0.00110398, 0, 0.620318, 0.543377, 0.00104148, 0, 0.651102, 0.525093, 0.000983984, 0, 0.682545, 0.506791, 0.00092667, 0, 0.714286, 0.489291, 0.000874326, 0, 0.746032, 0.471811, 0.000821734, 0, 0.777778, 0.454435, 0.000774698, 0, 0.809524, 0.437493, 0.000727302, 0, 0.84127, 0.420977, 0.000684039, 0, 0.873016, 0.404729, 0.00064373, 0, 0.904762, 0.388756, 0.00060285, 0, 0.936508, 0.373344, 0.00056765, 0, 0.968254, 0.358191, 0.000531929, 0, 1, 1, 0.000832169, 0, 0, 1, 0.000832178, 0, 0, 1, 0.00083231, 0, 0, 0.999998, 0.000832893, 0, 0, 0.999995, 0.000834465, 0, 0, 0.999985, 0.000837791, 0, 0, 0.999969, 0.000843893, 0, 0, 0.999944, 0.000854086, 0, 0, 0.999903, 0.000870071, 0, 0, 0.999843, 0.000894042, 0, 0, 0.999759, 0.000928865, 0, 5.31805e-05, 0.999643, 0.000978242, 0, 0.000579365, 0.99948, 0.00104684, 0, 0.00182774, 0.999255, 0.00114012, 0, 0.00387804, 0.998885, 0.00126188, 0, 0.00675709, 0.997405, 0.00135888, 0, 0.010468, 0.99424, 0.00133626, 0, 0.0150018, 0.992458, 0.00140905, 0, 0.0203443, 0.990929, 0.00152305, 0, 0.0264786, 0.989116, 0.00165882, 0, 0.0333875, 0.985624, 0.00174128, 0, 0.0410536, 0.982003, 0.00182108, 0, 0.0494609, 0.978336, 0.00194498, 0, 0.0585941, 0.973184, 0.00202708, 0, 0.0684396, 0.9678, 0.00212166, 0, 0.0789851, 0.961348, 0.00221366, 0, 0.0902199, 0.953841, 0.00228219, 0, 0.102134, 0.94534, 0.00235662, 0, 0.114721, 0.935552, 0.00240572, 0, 0.127972, 0.924064, 0.00244405, 0, 0.141884, 0.911827, 0.00247557, 0, 0.156451, 0.897731, 0.00248374, 0, 0.171672, 0.883409, 0.00249863, 0, 0.187545, 0.868625, 0.00246688, 0, 0.20407, 0.856529, 0.00246523, 0, 0.221249, 0.842999, 0.00242368, 0, 0.239083, 0.828505, 0.00237354, 0, 0.257578, 0.813825, 0.00232588, 0, 0.276738, 0.797813, 0.00226731, 0, 0.296569, 0.781097, 0.00219704, 0, 0.31708, 0.764038, 0.00212394, 0, 0.338281, 0.746067, 0.00204786, 0, 0.360181, 0.727687, 0.00196728, 0, 0.382794, 0.709571, 0.00188779, 0, 0.406133, 0.691503, 0.00180532, 0, 0.430213, 0.673673, 0.00171849, 0, 0.45505, 0.655732, 0.00164147, 0, 0.480662, 0.637399, 0.00155858, 0, 0.507065, 0.618616, 0.00147641, 0, 0.534278, 0.60005, 0.00140125, 0, 0.562313, 0.581713, 0.00132441, 0, 0.59118, 0.563546, 0.00125014, 0, 0.620875, 0.545605, 0.00118249, 0, 0.651373, 0.527559, 0.0011116, 0, 0.682593, 0.509764, 0.00104979, 0, 0.714286, 0.49193, 0.000985977, 0, 0.746032, 0.475011, 0.000928592, 0, 0.777778, 0.457878, 0.000873466, 0, 0.809524, 0.440979, 0.000819585, 0, 0.84127, 0.424613, 0.000772365, 0, 0.873016, 0.408549, 0.000722195, 0, 0.904762, 0.392771, 0.000680014, 0, 0.936508, 0.377317, 0.000636797, 0, 0.968254, 0.362352, 0.000598318, 0, 1, 1, 0.00114313, 0, 0, 1, 0.00114314, 0, 0, 0.999999, 0.00114331, 0, 0, 0.999998, 0.00114404, 0, 0, 0.999994, 0.00114601, 0, 0, 0.999984, 0.00115019, 0, 0, 0.999967, 0.00115784, 0, 0, 0.999937, 0.0011706, 0, 0, 0.999894, 0.00119054, 0, 0, 0.999828, 0.00122031, 0, 0, 0.999735, 0.00126331, 0, 0.000169263, 0.999606, 0.00132382, 0, 0.000949167, 0.999426, 0.0014071, 0, 0.00249668, 0.999173, 0.00151895, 0, 0.00486392, 0.99873, 0.00166102, 0, 0.00806323, 0.996243, 0.0017023, 0, 0.0120895, 0.993779, 0.00172782, 0, 0.0169288, 0.9919, 0.0018108, 0, 0.0225633, 0.990524, 0.00196028, 0, 0.028974, 0.98868, 0.00212014, 0, 0.036142, 0.984663, 0.00217598, 0, 0.044049, 0.981457, 0.00230563, 0, 0.0526781, 0.977608, 0.00243966, 0, 0.0620137, 0.972215, 0.00251336, 0, 0.0720418, 0.966798, 0.0026285, 0, 0.0827499, 0.960241, 0.00271409, 0, 0.0941271, 0.952489, 0.00278381, 0, 0.106164, 0.944127, 0.00285399, 0, 0.118852, 0.934282, 0.00290994, 0, 0.132185, 0.923271, 0.00294558, 0, 0.146157, 0.910803, 0.00296269, 0, 0.160766, 0.896705, 0.00296803, 0, 0.176007, 0.88238, 0.00296637, 0, 0.19188, 0.867116, 0.00293163, 0, 0.208385, 0.853636, 0.00289418, 0, 0.225523, 0.840469, 0.00284663, 0, 0.243296, 0.82639, 0.00278594, 0, 0.261709, 0.811759, 0.00271618, 0, 0.280767, 0.796113, 0.00263187, 0, 0.300476, 0.779518, 0.00254589, 0, 0.320845, 0.763142, 0.00246003, 0, 0.341883, 0.745464, 0.00236529, 0, 0.363601, 0.727491, 0.00226536, 0, 0.386011, 0.709414, 0.00216375, 0, 0.409128, 0.691396, 0.00207127, 0, 0.432967, 0.67368, 0.00197106, 0, 0.457545, 0.656049, 0.00187022, 0, 0.482881, 0.638188, 0.00177605, 0, 0.508992, 0.620177, 0.00168482, 0, 0.535899, 0.601506, 0.00158909, 0, 0.563619, 0.58362, 0.00150583, 0, 0.592165, 0.565496, 0.00141791, 0, 0.621544, 0.54789, 0.00133693, 0, 0.651743, 0.530323, 0.00126038, 0, 0.682709, 0.512795, 0.00118556, 0, 0.714286, 0.495199, 0.00111527, 0, 0.746032, 0.478101, 0.0010489, 0, 0.777778, 0.461511, 0.000984264, 0, 0.809524, 0.444879, 0.00092591, 0, 0.84127, 0.428424, 0.000866582, 0, 0.873016, 0.412495, 0.000814463, 0, 0.904762, 0.396975, 0.000764498, 0, 0.936508, 0.381614, 0.000715967, 0, 0.968254, 0.366732, 0.000672483, 0, 1, 1, 0.00155501, 0, 0, 1, 0.00155503, 0, 0, 1, 0.00155524, 0, 0, 0.999998, 0.00155615, 0, 0, 0.999994, 0.0015586, 0, 0, 0.999983, 0.00156379, 0, 0, 0.999963, 0.0015733, 0, 0, 0.999932, 0.00158911, 0, 0, 0.999882, 0.00161376, 0, 0, 0.99981, 0.00165041, 0, 1.00875e-05, 0.999708, 0.00170304, 0, 0.000367658, 0.999565, 0.00177658, 0, 0.0014234, 0.999368, 0.00187688, 0, 0.00327939, 0.999081, 0.00200989, 0, 0.00596629, 0.99852, 0.00217177, 0, 0.0094852, 0.99549, 0.0021745, 0, 0.013824, 0.993252, 0.00222357, 0, 0.0189642, 0.991727, 0.00235022, 0, 0.0248856, 0.989951, 0.00250561, 0, 0.0315669, 0.988029, 0.00268829, 0, 0.0389882, 0.984029, 0.0027496, 0, 0.0471302, 0.980683, 0.00289793, 0, 0.0559754, 0.976554, 0.00303315, 0, 0.0655081, 0.97139, 0.00313257, 0, 0.0757138, 0.965544, 0.00323656, 0, 0.08658, 0.95912, 0.00333432, 0, 0.0980954, 0.951183, 0.0034039, 0, 0.110251, 0.942974, 0.00347515, 0, 0.123038, 0.932642, 0.00350381, 0, 0.13645, 0.922158, 0.00354519, 0, 0.150482, 0.909404, 0.00353851, 0, 0.165129, 0.896071, 0.0035435, 0, 0.18039, 0.881206, 0.00349936, 0, 0.196263, 0.866077, 0.00347256, 0, 0.212748, 0.85093, 0.003415, 0, 0.229847, 0.837703, 0.00333367, 0, 0.247561, 0.823878, 0.003249, 0, 0.265895, 0.809449, 0.00316347, 0, 0.284854, 0.794379, 0.00306351, 0, 0.304445, 0.778138, 0.0029499, 0, 0.324675, 0.761997, 0.00284099, 0, 0.345555, 0.744938, 0.00272104, 0, 0.367095, 0.727212, 0.00260715, 0, 0.389309, 0.709549, 0.00248855, 0, 0.41221, 0.691704, 0.00236783, 0, 0.435814, 0.673689, 0.00225178, 0, 0.460138, 0.656453, 0.00213765, 0, 0.485203, 0.639128, 0.00202178, 0, 0.511028, 0.621512, 0.00191443, 0, 0.537634, 0.603598, 0.00180977, 0, 0.565041, 0.58559, 0.00170456, 0, 0.593268, 0.567852, 0.00160927, 0, 0.622327, 0.5503, 0.00151395, 0, 0.652217, 0.533033, 0.00142499, 0, 0.682907, 0.515942, 0.00133955, 0, 0.714296, 0.498814, 0.0012602, 0, 0.746032, 0.481595, 0.00118188, 0, 0.777778, 0.465117, 0.00111171, 0, 0.809524, 0.448865, 0.00104091, 0, 0.84127, 0.432711, 0.000976618, 0, 0.873016, 0.416822, 0.00091859, 0, 0.904762, 0.401272, 0.000857704, 0, 0.936508, 0.386226, 0.000807172, 0, 0.968254, 0.371321, 0.00075464, 0, 1, 1, 0.00209596, 0, 0, 1, 0.00209598, 0, 0, 1, 0.00209624, 0, 0, 0.999997, 0.00209736, 0, 0, 0.999991, 0.00210039, 0, 0, 0.999979, 0.00210678, 0, 0, 0.999959, 0.00211847, 0, 0, 0.999925, 0.0021379, 0, 0, 0.99987, 0.00216809, 0, 0, 0.999791, 0.00221281, 0, 6.81487e-05, 0.999677, 0.00227669, 0, 0.000658161, 0.999521, 0.00236533, 0, 0.00200635, 0.999301, 0.00248514, 0, 0.0041779, 0.998977, 0.00264185, 0, 0.00718648, 0.998191, 0.00281695, 0, 0.0110239, 0.994801, 0.00278518, 0, 0.015672, 0.993091, 0.00288774, 0, 0.0211091, 0.991571, 0.00303931, 0, 0.0273123, 0.9897, 0.00321643, 0, 0.034259, 0.987023, 0.00337332, 0, 0.0419282, 0.983289, 0.00346146, 0, 0.0502998, 0.979892, 0.00363704, 0, 0.0593562, 0.975111, 0.00373601, 0, 0.069081, 0.970351, 0.0038842, 0, 0.0794598, 0.964131, 0.00397053, 0, 0.0904798, 0.957747, 0.00408078, 0, 0.10213, 0.949536, 0.00413533, 0, 0.1144, 0.941372, 0.00420305, 0, 0.127284, 0.931049, 0.00422815, 0, 0.140772, 0.920647, 0.00425048, 0, 0.154862, 0.908033, 0.0042281, 0, 0.169548, 0.895028, 0.00422026, 0, 0.184828, 0.879968, 0.00415042, 0, 0.200701, 0.864875, 0.00408821, 0, 0.217167, 0.84918, 0.00400909, 0, 0.234227, 0.834934, 0.00391178, 0, 0.251884, 0.821397, 0.00380066, 0, 0.270141, 0.807135, 0.00367974, 0, 0.289004, 0.792363, 0.00355172, 0, 0.308479, 0.776661, 0.003411, 0, 0.328575, 0.760705, 0.00328123, 0, 0.349301, 0.744408, 0.00314003, 0, 0.370668, 0.726994, 0.0029906, 0, 0.392689, 0.709598, 0.00285034, 0, 0.415379, 0.692112, 0.00271179, 0, 0.438754, 0.674435, 0.00257185, 0, 0.46283, 0.65676, 0.00243425, 0, 0.48763, 0.639982, 0.00230351, 0, 0.513173, 0.622983, 0.0021777, 0, 0.539482, 0.605471, 0.00204991, 0, 0.566579, 0.58796, 0.00193759, 0, 0.594488, 0.570463, 0.00181976, 0, 0.623226, 0.553058, 0.00171497, 0, 0.6528, 0.535894, 0.00161109, 0, 0.683198, 0.519089, 0.00151394, 0, 0.714354, 0.502454, 0.00142122, 0, 0.746032, 0.485681, 0.00133488, 0, 0.777778, 0.468935, 0.00124975, 0, 0.809524, 0.452951, 0.00117309, 0, 0.84127, 0.437139, 0.00110155, 0, 0.873016, 0.421446, 0.00103124, 0, 0.904762, 0.405951, 0.000966387, 0, 0.936508, 0.391003, 0.000908119, 0, 0.968254, 0.376198, 0.000848057, 0, 1, 1, 0.00280076, 0, 0, 1, 0.00280078, 0, 0, 0.999999, 0.00280109, 0, 0, 0.999997, 0.00280246, 0, 0, 0.999992, 0.00280616, 0, 0, 0.999979, 0.00281396, 0, 0, 0.999956, 0.00282822, 0, 0, 0.999916, 0.00285186, 0, 0, 0.999857, 0.0028885, 0, 0, 0.999768, 0.00294259, 0, 0.000196026, 0.999645, 0.00301946, 0, 0.00104842, 0.99947, 0.00312541, 0, 0.00270199, 0.999229, 0.00326733, 0, 0.00519449, 0.998852, 0.00344992, 0, 0.00852602, 0.997558, 0.00361052, 0, 0.0126804, 0.994417, 0.0035898, 0, 0.017635, 0.992824, 0.00372393, 0, 0.023365, 0.991344, 0.00390695, 0, 0.0298456, 0.989337, 0.00410392, 0, 0.0370529, 0.985811, 0.00420987, 0, 0.0449651, 0.982772, 0.00437488, 0, 0.0535615, 0.979001, 0.00455069, 0, 0.0628243, 0.974102, 0.00464462, 0, 0.0727368, 0.969197, 0.00480577, 0, 0.0832844, 0.962759, 0.00487818, 0, 0.0944545, 0.956207, 0.00498176, 0, 0.106236, 0.947909, 0.00503392, 0, 0.118619, 0.939596, 0.00507474, 0, 0.131595, 0.929642, 0.00509798, 0, 0.145159, 0.918807, 0.00508476, 0, 0.159305, 0.906921, 0.00505634, 0, 0.174028, 0.893312, 0.00498845, 0, 0.189327, 0.878933, 0.0049133, 0, 0.2052, 0.863986, 0.0048259, 0, 0.221647, 0.847936, 0.00470848, 0, 0.23867, 0.832253, 0.00456889, 0, 0.25627, 0.818619, 0.00442726, 0, 0.274453, 0.804788, 0.00427677, 0, 0.293222, 0.790241, 0.00411906, 0, 0.312585, 0.775162, 0.00394833, 0, 0.33255, 0.759463, 0.00377366, 0, 0.353126, 0.743598, 0.00361026, 0, 0.374324, 0.72697, 0.00343627, 0, 0.396158, 0.709646, 0.00326422, 0, 0.418641, 0.69277, 0.00309717, 0, 0.44179, 0.675371, 0.0029356, 0, 0.465624, 0.657863, 0.00277712, 0, 0.490163, 0.640772, 0.00261738, 0, 0.515429, 0.624441, 0.0024737, 0, 0.541445, 0.607497, 0.00233125, 0, 0.568236, 0.590438, 0.00218994, 0, 0.595828, 0.573224, 0.0020664, 0, 0.624242, 0.556168, 0.00193526, 0, 0.653496, 0.539232, 0.00182463, 0, 0.683588, 0.522352, 0.00170735, 0, 0.714482, 0.506172, 0.00160555, 0, 0.746032, 0.489842, 0.00150451, 0, 0.777778, 0.473463, 0.00140938, 0, 0.809524, 0.457266, 0.00132568, 0, 0.84127, 0.441609, 0.0012376, 0, 0.873016, 0.426348, 0.00116265, 0, 0.904762, 0.411002, 0.00108935, 0, 0.936508, 0.396045, 0.00101946, 0, 0.968254, 0.381448, 0.000955665, 0, 1, 1, 0.0037121, 0, 0, 1, 0.00371213, 0, 0, 1, 0.00371251, 0, 0, 0.999997, 0.00371417, 0, 0, 0.99999, 0.00371863, 0, 0, 0.999977, 0.00372807, 0, 0, 0.99995, 0.00374529, 0, 0, 0.999908, 0.0037738, 0, 0, 0.999843, 0.00381789, 0, 1.23596e-05, 0.999745, 0.00388273, 0, 0.000407442, 0.999608, 0.00397443, 0, 0.0015447, 0.999415, 0.00409998, 0, 0.00351385, 0.999143, 0.00426662, 0, 0.0063316, 0.9987, 0.00447625, 0, 0.00998679, 0.996363, 0.00455323, 0, 0.0144569, 0.994021, 0.00461052, 0, 0.0197151, 0.992372, 0.00476359, 0, 0.0257344, 0.991007, 0.00499101, 0, 0.0324882, 0.988767, 0.0051972, 0, 0.0399517, 0.984872, 0.00528407, 0, 0.0481022, 0.982004, 0.00548926, 0, 0.0569191, 0.977714, 0.00564385, 0, 0.0663839, 0.973076, 0.0057693, 0, 0.0764801, 0.967565, 0.0058924, 0, 0.0871928, 0.961384, 0.00599629, 0, 0.0985095, 0.954435, 0.00605998, 0, 0.110419, 0.946303, 0.0061133, 0, 0.122912, 0.937662, 0.00612028, 0, 0.13598, 0.927867, 0.00612209, 0, 0.149617, 0.916475, 0.00604813, 0, 0.163817, 0.90541, 0.00603088, 0, 0.178577, 0.891591, 0.00592218, 0, 0.193894, 0.877573, 0.00578854, 0, 0.209767, 0.862511, 0.00566648, 0, 0.226196, 0.846861, 0.00551481, 0, 0.243182, 0.83068, 0.00533754, 0, 0.260728, 0.815725, 0.00515487, 0, 0.278837, 0.802321, 0.0049655, 0, 0.297515, 0.787826, 0.00475421, 0, 0.316768, 0.773454, 0.00456002, 0, 0.336605, 0.758224, 0.00434727, 0, 0.357034, 0.74265, 0.00414444, 0, 0.378067, 0.726729, 0.00393738, 0, 0.399717, 0.710155, 0.00373575, 0, 0.421998, 0.693312, 0.00353736, 0, 0.444928, 0.67653, 0.00334368, 0, 0.468523, 0.659444, 0.00315981, 0, 0.492806, 0.642051, 0.00297809, 0, 0.517798, 0.625758, 0.00280592, 0, 0.543525, 0.609615, 0.00264254, 0, 0.570012, 0.592919, 0.00248459, 0, 0.597288, 0.576298, 0.00233327, 0, 0.625379, 0.559489, 0.00219519, 0, 0.654307, 0.542891, 0.00205441, 0, 0.684084, 0.526255, 0.00193385, 0, 0.714693, 0.509853, 0.00180745, 0, 0.746044, 0.494131, 0.00169817, 0, 0.777778, 0.478114, 0.0015913, 0, 0.809524, 0.462274, 0.00148981, 0, 0.84127, 0.446412, 0.00139537, 0, 0.873016, 0.431274, 0.00130984, 0, 0.904762, 0.41635, 0.00122403, 0, 0.936508, 0.401476, 0.00114809, 0, 0.968254, 0.386993, 0.00107563, 0, 1, 1, 0.00488216, 0, 0, 1, 0.0048822, 0, 0, 1, 0.00488265, 0, 0, 0.999997, 0.00488463, 0, 0, 0.999988, 0.00488999, 0, 0, 0.999974, 0.00490129, 0, 0, 0.999946, 0.00492191, 0, 0, 0.999897, 0.00495598, 0, 0, 0.999825, 0.00500855, 0, 7.44791e-05, 0.999718, 0.00508559, 0, 0.000712744, 0.999565, 0.005194, 0, 0.00215249, 0.999352, 0.00534147, 0, 0.00444576, 0.999046, 0.00553523, 0, 0.00759218, 0.998492, 0.00577016, 0, 0.0115714, 0.995564, 0.00578487, 0, 0.0163557, 0.993339, 0.00586414, 0, 0.021915, 0.991834, 0.00606002, 0, 0.0282201, 0.990496, 0.00633312, 0, 0.0352433, 0.987826, 0.00651941, 0, 0.042959, 0.98383, 0.00660842, 0, 0.0513439, 0.98109, 0.00685523, 0, 0.0603772, 0.976131, 0.00695778, 0, 0.0700402, 0.971922, 0.00714236, 0, 0.0803163, 0.965901, 0.00721437, 0, 0.0911908, 0.959606, 0.00732017, 0, 0.102651, 0.952504, 0.00735788, 0, 0.114686, 0.944365, 0.00738493, 0, 0.127286, 0.935652, 0.00737969, 0, 0.140443, 0.925813, 0.00733612, 0, 0.154151, 0.914397, 0.00723094, 0, 0.168405, 0.903257, 0.00714002, 0, 0.183201, 0.890015, 0.00700149, 0, 0.198536, 0.876014, 0.00682813, 0, 0.214409, 0.861436, 0.00665567, 0, 0.23082, 0.845752, 0.00644526, 0, 0.24777, 0.829169, 0.00621635, 0, 0.265263, 0.813435, 0.00597789, 0, 0.283301, 0.799701, 0.00575694, 0, 0.301889, 0.785726, 0.00549866, 0, 0.321035, 0.77152, 0.0052503, 0, 0.340746, 0.75683, 0.00499619, 0, 0.361032, 0.741951, 0.0047543, 0, 0.381904, 0.726367, 0.0045084, 0, 0.403374, 0.710537, 0.00426784, 0, 0.425457, 0.693965, 0.00403487, 0, 0.448169, 0.677724, 0.0038075, 0, 0.47153, 0.66117, 0.00359431, 0, 0.495561, 0.644274, 0.00338354, 0, 0.520284, 0.627449, 0.00318163, 0, 0.545725, 0.611645, 0.00299672, 0, 0.571911, 0.595614, 0.00281016, 0, 0.598873, 0.579426, 0.00264252, 0, 0.62664, 0.563016, 0.00247509, 0, 0.655239, 0.546728, 0.00232647, 0, 0.684692, 0.530539, 0.00217803, 0, 0.714999, 0.514164, 0.00204216, 0, 0.746106, 0.498344, 0.00191403, 0, 0.777778, 0.482957, 0.00179203, 0, 0.809524, 0.467336, 0.00167695, 0, 0.84127, 0.451994, 0.00157567, 0, 0.873016, 0.436514, 0.00147113, 0, 0.904762, 0.42178, 0.00138034, 0, 0.936508, 0.407271, 0.00129219, 0, 0.968254, 0.392822, 0.0012098, 0, 1, 1, 0.00637427, 0, 0, 1, 0.00637431, 0, 0, 0.999999, 0.00637485, 0, 0, 0.999996, 0.00637721, 0, 0, 0.999987, 0.00638357, 0, 0, 0.999971, 0.006397, 0, 0, 0.999939, 0.00642142, 0, 0, 0.999888, 0.00646177, 0, 0, 0.999807, 0.00652387, 0, 0.000207916, 0.999689, 0.00661454, 0, 0.00112051, 0.99952, 0.00674155, 0, 0.00287719, 0.999283, 0.00691313, 0, 0.00550145, 0.998936, 0.00713598, 0, 0.00897928, 0.998165, 0.00738501, 0, 0.0132829, 0.994847, 0.00734388, 0, 0.01838, 0.993182, 0.00749991, 0, 0.0242381, 0.991665, 0.0077246, 0, 0.030826, 0.989708, 0.00797579, 0, 0.0381152, 0.986663, 0.00813011, 0, 0.0460794, 0.983288, 0.00830365, 0, 0.0546951, 0.980104, 0.00853496, 0, 0.0639411, 0.974855, 0.00861045, 0, 0.0737988, 0.97045, 0.00879133, 0, 0.0842516, 0.964509, 0.00886377, 0, 0.0952848, 0.957594, 0.00890346, 0, 0.106886, 0.950546, 0.00893289, 0, 0.119044, 0.942225, 0.00890074, 0, 0.131749, 0.933365, 0.00886826, 0, 0.144994, 0.923202, 0.0087316, 0, 0.158772, 0.912605, 0.00863082, 0, 0.173078, 0.901099, 0.00847403, 0, 0.187908, 0.888177, 0.00825838, 0, 0.203261, 0.873955, 0.00801834, 0, 0.219134, 0.860091, 0.00779026, 0, 0.235527, 0.84434, 0.00752478, 0, 0.252443, 0.828517, 0.00724074, 0, 0.269883, 0.81239, 0.00693769, 0, 0.287851, 0.79721, 0.00664817, 0, 0.306352, 0.783489, 0.00634763, 0, 0.325393, 0.769514, 0.00604221, 0, 0.344981, 0.755419, 0.00573568, 0, 0.365126, 0.741083, 0.00544359, 0, 0.385839, 0.726059, 0.00515515, 0, 0.407132, 0.710809, 0.00487139, 0, 0.42902, 0.695052, 0.00459846, 0, 0.45152, 0.678886, 0.00433412, 0, 0.474651, 0.663042, 0.00407981, 0, 0.498433, 0.646634, 0.00384264, 0, 0.52289, 0.630117, 0.00360897, 0, 0.548048, 0.613804, 0.00338863, 0, 0.573936, 0.598338, 0.00318486, 0, 0.600584, 0.582687, 0.00298377, 0, 0.628027, 0.566809, 0.00280082, 0, 0.656295, 0.550817, 0.00262255, 0, 0.685417, 0.534937, 0.00245835, 0, 0.715406, 0.519151, 0.00230574, 0, 0.74624, 0.503118, 0.0021549, 0, 0.777778, 0.487723, 0.00202008, 0, 0.809524, 0.472725, 0.00189355, 0, 0.84127, 0.457599, 0.00177108, 0, 0.873016, 0.442558, 0.00165843, 0, 0.904762, 0.427624, 0.00155494, 0, 0.936508, 0.413171, 0.00145273, 0, 0.968254, 0.399122, 0.00136454, 0, 1, 1, 0.00826496, 0, 0, 1, 0.00826499, 0, 0, 1, 0.00826564, 0, 0, 0.999996, 0.00826842, 0, 0, 0.999987, 0.00827589, 0, 0, 0.999967, 0.00829167, 0, 0, 0.999933, 0.00832037, 0, 0, 0.999876, 0.00836768, 0, 1.09338e-05, 0.999786, 0.00844031, 0, 0.000427145, 0.999655, 0.00854603, 0, 0.0016384, 0.999468, 0.00869337, 0, 0.00372392, 0.999203, 0.008891, 0, 0.00668513, 0.998803, 0.00914387, 0, 0.0104968, 0.99748, 0.00935838, 0, 0.015125, 0.994446, 0.00933309, 0, 0.0205338, 0.99292, 0.00953084, 0, 0.0266884, 0.991414, 0.0097893, 0, 0.0335565, 0.989049, 0.0100228, 0, 0.0411086, 0.98582, 0.0101664, 0, 0.0493181, 0.982441, 0.0103582, 0, 0.0581613, 0.978595, 0.0105292, 0, 0.0676169, 0.973495, 0.0106274, 0, 0.0776661, 0.968405, 0.0107261, 0, 0.0882926, 0.962717, 0.0108234, 0, 0.0994817, 0.955478, 0.0108102, 0, 0.111221, 0.948275, 0.0107914, 0, 0.123499, 0.940006, 0.0107161, 0, 0.136308, 0.930831, 0.0106309, 0, 0.149639, 0.920648, 0.0104083, 0, 0.163485, 0.910205, 0.0102312, 0, 0.177843, 0.898445, 0.0100051, 0, 0.192707, 0.885986, 0.00971928, 0, 0.208077, 0.872204, 0.00940747, 0, 0.22395, 0.858436, 0.0091085, 0, 0.240326, 0.843454, 0.00876595, 0, 0.257208, 0.827437, 0.00839794, 0, 0.274596, 0.811488, 0.00803692, 0, 0.292496, 0.796039, 0.00767352, 0, 0.310911, 0.781083, 0.0073097, 0, 0.329849, 0.767642, 0.00694032, 0, 0.349316, 0.753901, 0.00657476, 0, 0.369323, 0.740131, 0.00622699, 0, 0.38988, 0.725845, 0.0058838, 0, 0.410999, 0.710991, 0.00555586, 0, 0.432696, 0.696002, 0.00523089, 0, 0.454987, 0.680461, 0.00492494, 0, 0.47789, 0.664875, 0.00463464, 0, 0.501426, 0.649273, 0.00435422, 0, 0.52562, 0.63302, 0.0040875, 0, 0.550498, 0.61705, 0.00384075, 0, 0.576089, 0.601154, 0.00359557, 0, 0.602427, 0.586008, 0.00337636, 0, 0.629544, 0.570699, 0.00316019, 0, 0.657479, 0.555166, 0.00296033, 0, 0.686264, 0.539645, 0.00277552, 0, 0.715924, 0.524159, 0.00259499, 0, 0.746459, 0.508682, 0.00243257, 0, 0.777789, 0.493163, 0.00227851, 0, 0.809524, 0.478004, 0.00213083, 0, 0.84127, 0.46347, 0.00199502, 0, 0.873016, 0.448778, 0.00186967, 0, 0.904762, 0.434105, 0.00174732, 0, 0.936508, 0.419576, 0.00163861, 0, 0.968254, 0.405541, 0.00153341, 0, 1, 1, 0.0106462, 0, 0, 1, 0.0106462, 0, 0, 0.999999, 0.010647, 0, 0, 0.999995, 0.0106502, 0, 0, 0.999985, 0.0106589, 0, 0, 0.999964, 0.0106773, 0, 0, 0.999925, 0.0107106, 0, 0, 0.999861, 0.0107655, 0, 7.12986e-05, 0.999763, 0.0108497, 0, 0.000743959, 0.999616, 0.0109716, 0, 0.00227361, 0.999408, 0.0111408, 0, 0.0046983, 0.999112, 0.0113659, 0, 0.00800158, 0.998637, 0.0116475, 0, 0.0121493, 0.996223, 0.0117231, 0, 0.0171023, 0.994006, 0.0118064, 0, 0.0228218, 0.992444, 0.0120254, 0, 0.0292711, 0.991028, 0.0123314, 0, 0.036417, 0.98803, 0.0124954, 0, 0.0442295, 0.984816, 0.0126538, 0, 0.0526815, 0.981399, 0.0128537, 0, 0.0617492, 0.977085, 0.0129694, 0, 0.0714114, 0.972154, 0.013091, 0, 0.0816495, 0.966617, 0.0131166, 0, 0.0924472, 0.960628, 0.0131583, 0, 0.10379, 0.953295, 0.0131094, 0, 0.115665, 0.94575, 0.0129966, 0, 0.128062, 0.937654, 0.0128796, 0, 0.140972, 0.927716, 0.0126477, 0, 0.154387, 0.917932, 0.0123889, 0, 0.168301, 0.907719, 0.012131, 0, 0.182709, 0.89584, 0.0118013, 0, 0.197608, 0.883526, 0.0114145, 0, 0.212994, 0.870301, 0.0110075, 0, 0.228867, 0.856272, 0.0106019, 0, 0.245227, 0.842251, 0.0101938, 0, 0.262074, 0.826466, 0.00973254, 0, 0.279412, 0.810859, 0.0092846, 0, 0.297244, 0.795051, 0.00883304, 0, 0.315575, 0.780053, 0.00840272, 0, 0.334412, 0.76575, 0.00796438, 0, 0.35376, 0.752298, 0.00752526, 0, 0.373631, 0.739153, 0.00711486, 0, 0.394034, 0.725514, 0.00670361, 0, 0.414983, 0.711473, 0.00632656, 0, 0.436491, 0.696936, 0.00595206, 0, 0.458575, 0.682126, 0.00559191, 0, 0.481253, 0.667027, 0.00525362, 0, 0.504547, 0.651875, 0.00493805, 0, 0.528481, 0.636463, 0.00462848, 0, 0.553081, 0.620641, 0.00433936, 0, 0.578377, 0.604931, 0.00407, 0, 0.604404, 0.589549, 0.00380864, 0, 0.631197, 0.574712, 0.00357049, 0, 0.658795, 0.559775, 0.00334466, 0, 0.687238, 0.544514, 0.00312505, 0, 0.716559, 0.529555, 0.00293199, 0, 0.746776, 0.514402, 0.00274204, 0, 0.777849, 0.499302, 0.00256647, 0, 0.809524, 0.484114, 0.00239901, 0, 0.84127, 0.469308, 0.00225148, 0, 0.873016, 0.455133, 0.00210178, 0, 0.904762, 0.440939, 0.0019727, 0, 0.936508, 0.426627, 0.00184382, 0, 0.968254, 0.412509, 0.00172548, 0, 1, 1, 0.013628, 0, 0, 1, 0.0136281, 0, 0, 0.999999, 0.0136289, 0, 0, 0.999995, 0.0136327, 0, 0, 0.999983, 0.0136427, 0, 0, 0.99996, 0.0136638, 0, 0, 0.999917, 0.0137022, 0, 0, 0.999846, 0.0137652, 0, 0.000204597, 0.999736, 0.0138615, 0, 0.00116837, 0.999573, 0.0140007, 0, 0.00303325, 0.99934, 0.0141927, 0, 0.00580613, 0.999004, 0.0144457, 0, 0.00945626, 0.998407, 0.0147489, 0, 0.0139421, 0.995464, 0.014731, 0, 0.0192202, 0.993328, 0.0148283, 0, 0.0252495, 0.991799, 0.0150797, 0, 0.0319921, 0.990397, 0.0154316, 0, 0.0394138, 0.986835, 0.0155005, 0, 0.0474843, 0.983938, 0.0157308, 0, 0.0561763, 0.980154, 0.0158753, 0, 0.0654661, 0.975659, 0.0159581, 0, 0.0753326, 0.970171, 0.0159832, 0, 0.0857571, 0.964803, 0.0160084, 0, 0.0967236, 0.958366, 0.0159484, 0, 0.108218, 0.950613, 0.0158001, 0, 0.120227, 0.942874, 0.0155845, 0, 0.132741, 0.935005, 0.0154292, 0, 0.145751, 0.924991, 0.0150742, 0, 0.159249, 0.914814, 0.0146757, 0, 0.17323, 0.904743, 0.0143097, 0, 0.187687, 0.893216, 0.0138695, 0, 0.202619, 0.880769, 0.0133706, 0, 0.218021, 0.868136, 0.0128606, 0, 0.233894, 0.85469, 0.0123403, 0, 0.250238, 0.840593, 0.0118091, 0, 0.267052, 0.825808, 0.011253, 0, 0.284341, 0.81009, 0.0107099, 0, 0.302106, 0.79504, 0.0101636, 0, 0.320354, 0.779757, 0.00964041, 0, 0.33909, 0.764697, 0.00911896, 0, 0.358322, 0.750913, 0.00859533, 0, 0.378059, 0.738175, 0.00811592, 0, 0.398311, 0.725242, 0.00764504, 0, 0.41909, 0.711864, 0.00718885, 0, 0.440412, 0.698009, 0.00675843, 0, 0.462292, 0.683841, 0.00634984, 0, 0.484748, 0.669391, 0.00595502, 0, 0.507802, 0.654731, 0.00558671, 0, 0.531477, 0.639805, 0.00523578, 0, 0.555802, 0.624789, 0.00490834, 0, 0.580805, 0.609325, 0.00459448, 0, 0.606522, 0.593975, 0.00430342, 0, 0.63299, 0.578983, 0.00403019, 0, 0.66025, 0.564442, 0.0037707, 0, 0.688346, 0.549835, 0.0035316, 0, 0.717319, 0.535039, 0.00330255, 0, 0.7472, 0.520403, 0.00308932, 0, 0.777982, 0.505687, 0.00289335, 0, 0.809524, 0.490939, 0.00270818, 0, 0.84127, 0.476233, 0.0025343, 0, 0.873016, 0.461624, 0.00237097, 0, 0.904762, 0.447833, 0.00222065, 0, 0.936508, 0.433992, 0.00207561, 0, 0.968254, 0.420147, 0.00194955, 0, 1, 1, 0.0173415, 0, 0, 1, 0.0173416, 0, 0, 0.999999, 0.0173426, 0, 0, 0.999995, 0.0173468, 0, 0, 0.999983, 0.0173582, 0, 0, 0.999954, 0.0173822, 0, 0, 0.999908, 0.0174258, 0, 6.69501e-06, 0.999828, 0.0174973, 0, 0.000427399, 0.999705, 0.0176063, 0, 0.00171019, 0.999524, 0.0177631, 0, 0.0039248, 0.999263, 0.0179781, 0, 0.00705382, 0.998878, 0.018258, 0, 0.0110552, 0.998012, 0.0185551, 0, 0.0158812, 0.994614, 0.0184264, 0, 0.0214852, 0.993132, 0.0186385, 0, 0.0278239, 0.991563, 0.0189067, 0, 0.0348585, 0.989298, 0.0191577, 0, 0.0425544, 0.986036, 0.0192522, 0, 0.050881, 0.982558, 0.0194063, 0, 0.059811, 0.978531, 0.019486, 0, 0.0693209, 0.974198, 0.0195847, 0, 0.0793895, 0.968148, 0.0194749, 0, 0.0899984, 0.962565, 0.0194277, 0, 0.101132, 0.956041, 0.0192991, 0, 0.112775, 0.947749, 0.0189893, 0, 0.124917, 0.94018, 0.018704, 0, 0.137547, 0.93165, 0.0183458, 0, 0.150655, 0.921798, 0.0178775, 0, 0.164236, 0.911573, 0.0173618, 0, 0.178281, 0.901569, 0.0168482, 0, 0.192788, 0.890341, 0.016265, 0, 0.207752, 0.877835, 0.0156199, 0, 0.223171, 0.865472, 0.0149516, 0, 0.239044, 0.852905, 0.0143274, 0, 0.255371, 0.838906, 0.0136643, 0, 0.272153, 0.824888, 0.0129903, 0, 0.289393, 0.809977, 0.0123218, 0, 0.307093, 0.794697, 0.0116572, 0, 0.325259, 0.780028, 0.0110307, 0, 0.343896, 0.765124, 0.0104236, 0, 0.363012, 0.750411, 0.0098219, 0, 0.382617, 0.737264, 0.00924397, 0, 0.402719, 0.724799, 0.00868719, 0, 0.423332, 0.712253, 0.00816476, 0, 0.444469, 0.699267, 0.00767262, 0, 0.466146, 0.685618, 0.00719746, 0, 0.488383, 0.671736, 0.00673916, 0, 0.511199, 0.657777, 0.00631937, 0, 0.534618, 0.643497, 0.00592411, 0, 0.558668, 0.62889, 0.00553928, 0, 0.58338, 0.614299, 0.0051934, 0, 0.608787, 0.599197, 0.00485985, 0, 0.634929, 0.584175, 0.00454357, 0, 0.661849, 0.569541, 0.00425787, 0, 0.689594, 0.555193, 0.00397905, 0, 0.718211, 0.540947, 0.00372364, 0, 0.747742, 0.526593, 0.00348599, 0, 0.778205, 0.512335, 0.00326103, 0, 0.80953, 0.498017, 0.00305137, 0, 0.84127, 0.483609, 0.00285485, 0, 0.873016, 0.469368, 0.00267472, 0, 0.904762, 0.455037, 0.00249945, 0, 0.936508, 0.441493, 0.00234792, 0, 0.968254, 0.428147, 0.00219936, 0, 1, 1, 0.0219422, 0, 0, 1, 0.0219423, 0, 0, 0.999998, 0.0219434, 0, 0, 0.999993, 0.0219481, 0, 0, 0.999981, 0.021961, 0, 0, 0.999949, 0.0219879, 0, 0, 0.999896, 0.0220367, 0, 5.93194e-05, 0.999808, 0.0221167, 0, 0.00075364, 0.99967, 0.0222383, 0, 0.00237884, 0.999466, 0.0224125, 0, 0.00495612, 0.999174, 0.0226495, 0, 0.00844887, 0.998725, 0.0229525, 0, 0.0128058, 0.996979, 0.0231123, 0, 0.0179742, 0.994317, 0.0230742, 0, 0.0239047, 0.992781, 0.0232895, 0, 0.0305526, 0.991191, 0.0235734, 0, 0.0378786, 0.987787, 0.0236152, 0, 0.0458475, 0.985092, 0.0237994, 0, 0.0544287, 0.981121, 0.0238553, 0, 0.0635952, 0.976924, 0.0238706, 0, 0.0733233, 0.97218, 0.0238704, 0, 0.0835922, 0.965956, 0.0236598, 0, 0.0943839, 0.959998, 0.0234735, 0, 0.105682, 0.953245, 0.0232277, 0, 0.117474, 0.944445, 0.0226973, 0, 0.129747, 0.937087, 0.0223527, 0, 0.142491, 0.928341, 0.0218144, 0, 0.155697, 0.9184, 0.0211516, 0, 0.169358, 0.907959, 0.0204553, 0, 0.183469, 0.89808, 0.0197673, 0, 0.198024, 0.887047, 0.0189915, 0, 0.21302, 0.875221, 0.0182082, 0, 0.228455, 0.86269, 0.0173584, 0, 0.244329, 0.850735, 0.0165718, 0, 0.260639, 0.837545, 0.0157524, 0, 0.277389, 0.823639, 0.0149482, 0, 0.29458, 0.809699, 0.0141431, 0, 0.312216, 0.794797, 0.0133527, 0, 0.3303, 0.780578, 0.0126193, 0, 0.34884, 0.766019, 0.0118914, 0, 0.367842, 0.751447, 0.0111839, 0, 0.387315, 0.737275, 0.010514, 0, 0.40727, 0.724545, 0.00987277, 0, 0.427717, 0.712644, 0.00926569, 0, 0.448671, 0.700432, 0.00869029, 0, 0.470149, 0.687664, 0.00814691, 0, 0.492167, 0.674288, 0.00763012, 0, 0.514746, 0.660966, 0.00714437, 0, 0.537911, 0.647264, 0.00668457, 0, 0.561688, 0.633431, 0.00626581, 0, 0.586108, 0.619133, 0.00585593, 0, 0.611206, 0.604935, 0.00548188, 0, 0.637022, 0.590236, 0.00513288, 0, 0.663599, 0.575473, 0.0047906, 0, 0.690989, 0.561228, 0.00448895, 0, 0.719242, 0.547054, 0.00420233, 0, 0.748411, 0.533175, 0.00392869, 0, 0.778531, 0.519163, 0.00367445, 0, 0.809583, 0.505328, 0.00344097, 0, 0.84127, 0.491446, 0.00322003, 0, 0.873016, 0.477356, 0.00301283, 0, 0.904762, 0.46356, 0.00282592, 0, 0.936508, 0.449623, 0.00264956, 0, 0.968254, 0.436068, 0.00246956, 0, 1, 1, 0.0276135, 0, 0, 1, 0.0276136, 0, 0, 0.999998, 0.0276148, 0, 0, 0.999993, 0.0276201, 0, 0, 0.999976, 0.0276342, 0, 0, 0.999945, 0.027664, 0, 0, 0.999884, 0.0277179, 0, 0.00018679, 0.999784, 0.027806, 0, 0.00119607, 0.99963, 0.0279394, 0, 0.00318407, 0.999401, 0.0281295, 0, 0.00613601, 0.999066, 0.0283858, 0, 0.00999963, 0.998524, 0.0287027, 0, 0.0147164, 0.995702, 0.0286256, 0, 0.0202295, 0.993593, 0.0286733, 0, 0.0264876, 0.992067, 0.0288989, 0, 0.0334452, 0.990548, 0.0292135, 0, 0.0410621, 0.986775, 0.0291296, 0, 0.0493032, 0.984054, 0.0293099, 0, 0.0581381, 0.979481, 0.0291881, 0, 0.0675397, 0.975297, 0.0291598, 0, 0.0774848, 0.96981, 0.028954, 0, 0.0879528, 0.963524, 0.028628, 0, 0.0989258, 0.957398, 0.0283135, 0, 0.110388, 0.950088, 0.0278469, 0, 0.122327, 0.941538, 0.0271798, 0, 0.134729, 0.933332, 0.0265388, 0, 0.147587, 0.924392, 0.0257776, 0, 0.160889, 0.914581, 0.024916, 0, 0.174631, 0.904347, 0.0240242, 0, 0.188806, 0.894324, 0.0231229, 0, 0.203409, 0.883724, 0.022153, 0, 0.218437, 0.872207, 0.0211355, 0, 0.233888, 0.859927, 0.0201048, 0, 0.249761, 0.848373, 0.0191263, 0, 0.266056, 0.836023, 0.0181306, 0, 0.282774, 0.82289, 0.0171718, 0, 0.299917, 0.809324, 0.0162196, 0, 0.317488, 0.795361, 0.0152622, 0, 0.335493, 0.781253, 0.01439, 0, 0.353936, 0.767338, 0.013533, 0, 0.372825, 0.753156, 0.0127244, 0, 0.392168, 0.739122, 0.0119454, 0, 0.411976, 0.725358, 0.0112054, 0, 0.432259, 0.712949, 0.010487, 0, 0.453032, 0.701621, 0.00984032, 0, 0.47431, 0.689703, 0.00921495, 0, 0.496111, 0.677216, 0.00862492, 0, 0.518456, 0.664217, 0.00806882, 0, 0.541367, 0.65137, 0.00755922, 0, 0.564872, 0.638, 0.00705705, 0, 0.589001, 0.62453, 0.00661266, 0, 0.613789, 0.610601, 0.00618432, 0, 0.639277, 0.59676, 0.00578033, 0, 0.66551, 0.582433, 0.00540927, 0, 0.692539, 0.568026, 0.00506104, 0, 0.720422, 0.55414, 0.0047353, 0, 0.749216, 0.540178, 0.00442889, 0, 0.778974, 0.526513, 0.00414363, 0, 0.809711, 0.512954, 0.00388237, 0, 0.84127, 0.499403, 0.00362875, 0, 0.873016, 0.486026, 0.00340827, 0, 0.904762, 0.472345, 0.00318598, 0, 0.936508, 0.458828, 0.00297635, 0, 0.968254, 0.445379, 0.00279447, 0, 1, 1, 0.0345716, 0, 0, 1, 0.0345717, 0, 0, 0.999999, 0.034573, 0, 0, 0.999991, 0.0345787, 0, 0, 0.999974, 0.0345941, 0, 0, 0.999937, 0.0346263, 0, 1.88589e-06, 0.999869, 0.0346847, 0, 0.000409238, 0.999757, 0.0347798, 0, 0.0017674, 0.999582, 0.0349233, 0, 0.00413658, 0.999322, 0.0351265, 0, 0.00747408, 0.998939, 0.0353967, 0, 0.0117157, 0.998219, 0.0357018, 0, 0.0167966, 0.994974, 0.0354726, 0, 0.0226572, 0.993201, 0.0355621, 0, 0.0292445, 0.991573, 0.0357641, 0, 0.0365123, 0.989301, 0.0359252, 0, 0.0444203, 0.985712, 0.0358017, 0, 0.0529334, 0.982411, 0.0358353, 0, 0.0620214, 0.977827, 0.035617, 0, 0.0716574, 0.973278, 0.0354398, 0, 0.0818186, 0.967397, 0.0350483, 0, 0.0924846, 0.960696, 0.0344795, 0, 0.103638, 0.954349, 0.0339861, 0, 0.115263, 0.946066, 0.0331323, 0, 0.127348, 0.938012, 0.032359, 0, 0.13988, 0.929413, 0.0314413, 0, 0.152849, 0.920355, 0.0304103, 0, 0.166248, 0.910586, 0.0292785, 0, 0.18007, 0.900609, 0.0281391, 0, 0.194308, 0.890093, 0.0269103, 0, 0.208958, 0.880013, 0.0257269, 0, 0.224018, 0.869001, 0.0244671, 0, 0.239485, 0.85751, 0.0232252, 0, 0.255359, 0.84582, 0.0220117, 0, 0.271638, 0.834383, 0.0208274, 0, 0.288324, 0.822158, 0.0196628, 0, 0.305419, 0.809056, 0.0185306, 0, 0.322927, 0.795832, 0.0174174, 0, 0.340851, 0.782547, 0.0163758, 0, 0.359199, 0.7689, 0.015391, 0, 0.377975, 0.755526, 0.0144488, 0, 0.397189, 0.741681, 0.0135372, 0, 0.416851, 0.728178, 0.0126957, 0, 0.436971, 0.714642, 0.0118812, 0, 0.457564, 0.702756, 0.0111165, 0, 0.478644, 0.69175, 0.0104145, 0, 0.500229, 0.680159, 0.00974439, 0, 0.522339, 0.668073, 0.00911926, 0, 0.544997, 0.655405, 0.00851393, 0, 0.56823, 0.642921, 0.00797637, 0, 0.592068, 0.629993, 0.00745119, 0, 0.616546, 0.616828, 0.00696972, 0, 0.641705, 0.603305, 0.00652425, 0, 0.66759, 0.589833, 0.00610188, 0, 0.694255, 0.575945, 0.00570834, 0, 0.72176, 0.561745, 0.00533384, 0, 0.750168, 0.548277, 0.00500001, 0, 0.779545, 0.534467, 0.00467582, 0, 0.809933, 0.521032, 0.00438092, 0, 0.841272, 0.507877, 0.00410348, 0, 0.873016, 0.494654, 0.00383618, 0, 0.904762, 0.481592, 0.00358699, 0, 0.936508, 0.468509, 0.00337281, 0, 0.968254, 0.455293, 0.00316196, 0, 1, 1, 0.0430698, 0, 0, 1, 0.0430699, 0, 0, 0.999998, 0.0430713, 0, 0, 0.999991, 0.0430773, 0, 0, 0.99997, 0.0430936, 0, 0, 0.999928, 0.0431277, 0, 4.06396e-05, 0.999852, 0.0431893, 0, 0.000744376, 0.999724, 0.0432895, 0, 0.0024806, 0.999527, 0.0434397, 0, 0.00524779, 0.99923, 0.0436507, 0, 0.00898164, 0.998783, 0.0439255, 0, 0.0136083, 0.997507, 0.0441104, 0, 0.0190582, 0.994418, 0.0438225, 0, 0.0252694, 0.992864, 0.0439396, 0, 0.0321879, 0.991127, 0.0440962, 0, 0.039767, 0.987331, 0.0438408, 0, 0.0479667, 0.984819, 0.0438991, 0, 0.056752, 0.980384, 0.0435906, 0, 0.0660929, 0.975846, 0.0432543, 0, 0.075963, 0.970748, 0.0428293, 0, 0.0863398, 0.964303, 0.042153, 0, 0.0972035, 0.95772, 0.0414111, 0, 0.108537, 0.950747, 0.0405893, 0, 0.120325, 0.942533, 0.0394887, 0, 0.132554, 0.934045, 0.0383544, 0, 0.145215, 0.924942, 0.037057, 0, 0.158296, 0.915811, 0.0356993, 0, 0.17179, 0.90612, 0.0342401, 0, 0.185691, 0.896434, 0.0328078, 0, 0.199993, 0.886021, 0.031288, 0, 0.214691, 0.876081, 0.0297776, 0, 0.229782, 0.865608, 0.0282334, 0, 0.245265, 0.854924, 0.026749, 0, 0.261138, 0.843607, 0.02526, 0, 0.277401, 0.832456, 0.0238214, 0, 0.294056, 0.821342, 0.0224682, 0, 0.311104, 0.809303, 0.0211297, 0, 0.328548, 0.796468, 0.0198387, 0, 0.346394, 0.784046, 0.0186227, 0, 0.364645, 0.771262, 0.0174561, 0, 0.38331, 0.758118, 0.0163806, 0, 0.402396, 0.745075, 0.0153287, 0, 0.421912, 0.731926, 0.0143647, 0, 0.44187, 0.71863, 0.0134363, 0, 0.462283, 0.705414, 0.0125603, 0, 0.483165, 0.693792, 0.0117508, 0, 0.504535, 0.683108, 0.0110016, 0, 0.52641, 0.67183, 0.0102757, 0, 0.548816, 0.66015, 0.00962044, 0, 0.571776, 0.647907, 0.00898031, 0, 0.595323, 0.635734, 0.00840811, 0, 0.619489, 0.623208, 0.00786211, 0, 0.644317, 0.610438, 0.00734953, 0, 0.669852, 0.597345, 0.00687688, 0, 0.696148, 0.584138, 0.00643469, 0, 0.723267, 0.5707, 0.00602236, 0, 0.75128, 0.556966, 0.0056324, 0, 0.780258, 0.543607, 0.00528277, 0, 0.810268, 0.530213, 0.00493999, 0, 0.841311, 0.516912, 0.00462265, 0, 0.873016, 0.503916, 0.0043307, 0, 0.904762, 0.491146, 0.00406858, 0, 0.936508, 0.478439, 0.00381436, 0, 0.968254, 0.465834, 0.00358003, 0, 1, 1, 0.0534039, 0, 0, 1, 0.053404, 0, 0, 0.999998, 0.0534055, 0, 0, 0.999989, 0.0534116, 0, 0, 0.999968, 0.0534283, 0, 0, 0.999918, 0.0534633, 0, 0.000155895, 0.99983, 0.0535262, 0, 0.00120914, 0.999685, 0.0536281, 0, 0.00334944, 0.999461, 0.0537799, 0, 0.00653077, 0.999119, 0.0539902, 0, 0.0106718, 0.998582, 0.0542524, 0, 0.0156907, 0.995919, 0.0540318, 0, 0.0215147, 0.993735, 0.0538914, 0, 0.0280801, 0.992126, 0.0539557, 0, 0.0353323, 0.990266, 0.0540401, 0, 0.0432247, 0.986317, 0.0536064, 0, 0.0517172, 0.983213, 0.0534425, 0, 0.0607754, 0.978303, 0.0528622, 0, 0.0703698, 0.973665, 0.0523363, 0, 0.0804742, 0.968091, 0.0516165, 0, 0.0910667, 0.961026, 0.0505434, 0, 0.102128, 0.954333, 0.049523, 0, 0.113641, 0.946372, 0.0481698, 0, 0.125591, 0.938254, 0.0467674, 0, 0.137965, 0.929516, 0.0452341, 0, 0.150754, 0.920106, 0.0435083, 0, 0.163947, 0.910899, 0.0417399, 0, 0.177537, 0.901532, 0.0399389, 0, 0.191516, 0.891919, 0.0380901, 0, 0.205881, 0.882006, 0.0362341, 0, 0.220626, 0.871965, 0.0343444, 0, 0.235749, 0.862145, 0.0324832, 0, 0.251248, 0.852058, 0.0306681, 0, 0.267121, 0.84161, 0.0289097, 0, 0.283368, 0.830806, 0.0272079, 0, 0.299992, 0.820476, 0.0256089, 0, 0.316992, 0.809514, 0.0240394, 0, 0.334374, 0.797865, 0.0225379, 0, 0.35214, 0.785621, 0.0211235, 0, 0.370296, 0.773765, 0.0197908, 0, 0.388849, 0.761629, 0.0185235, 0, 0.407807, 0.748891, 0.0173358, 0, 0.427178, 0.736437, 0.0162305, 0, 0.446974, 0.723707, 0.0151778, 0, 0.467207, 0.710606, 0.0141791, 0, 0.487892, 0.698019, 0.0132592, 0, 0.509046, 0.686203, 0.0123887, 0, 0.530687, 0.675692, 0.0115976, 0, 0.552839, 0.664826, 0.0108325, 0, 0.575527, 0.65349, 0.0101348, 0, 0.59878, 0.641774, 0.00947756, 0, 0.622634, 0.629794, 0.00886058, 0, 0.647128, 0.617647, 0.00828526, 0, 0.672308, 0.60534, 0.00775312, 0, 0.698231, 0.592718, 0.00726033, 0, 0.724958, 0.579746, 0.00679731, 0, 0.752563, 0.566763, 0.00636111, 0, 0.781127, 0.553515, 0.00595228, 0, 0.810733, 0.540118, 0.00556876, 0, 0.841426, 0.527325, 0.00523051, 0, 0.873016, 0.514265, 0.00490712, 0, 0.904762, 0.501406, 0.00460297, 0, 0.936508, 0.488922, 0.00431247, 0, 0.968254, 0.476541, 0.0040472, 0, 1, 1, 0.0659184, 0, 0, 1, 0.0659185, 0, 0, 0.999998, 0.06592, 0, 0, 0.999988, 0.0659259, 0, 0, 0.999963, 0.0659423, 0, 0, 0.999907, 0.0659764, 0, 0.000374198, 0.999806, 0.0660376, 0, 0.00182071, 0.999639, 0.0661361, 0, 0.0043894, 0.999378, 0.0662814, 0, 0.00800055, 0.998985, 0.0664779, 0, 0.0125594, 0.998285, 0.0666914, 0, 0.0179786, 0.995071, 0.0661989, 0, 0.0241822, 0.993172, 0.0660454, 0, 0.031106, 0.991438, 0.0660105, 0, 0.0386952, 0.988428, 0.0656875, 0, 0.0469032, 0.985218, 0.0652913, 0, 0.0556905, 0.981128, 0.0647107, 0, 0.065023, 0.976015, 0.0638491, 0, 0.0748717, 0.97097, 0.062993, 0, 0.0852112, 0.964582, 0.0617927, 0, 0.0960199, 0.957383, 0.0603626, 0, 0.107279, 0.949969, 0.0588128, 0, 0.118971, 0.941843, 0.0570274, 0, 0.131084, 0.933624, 0.0551885, 0, 0.143604, 0.924543, 0.053122, 0, 0.156521, 0.914919, 0.0508897, 0, 0.169825, 0.905773, 0.0486418, 0, 0.18351, 0.896434, 0.0463364, 0, 0.197569, 0.887195, 0.0440623, 0, 0.211997, 0.877706, 0.0417799, 0, 0.226789, 0.867719, 0.03945, 0, 0.241944, 0.858587, 0.037243, 0, 0.257458, 0.849317, 0.0350956, 0, 0.273331, 0.839585, 0.0329852, 0, 0.289563, 0.829856, 0.0310028, 0, 0.306154, 0.819589, 0.0290953, 0, 0.323108, 0.809714, 0.0272738, 0, 0.340426, 0.79934, 0.0255631, 0, 0.358113, 0.788224, 0.0239175, 0, 0.376175, 0.776619, 0.0223831, 0, 0.394616, 0.76521, 0.0209298, 0, 0.413445, 0.753716, 0.0195786, 0, 0.432671, 0.741564, 0.0183001, 0, 0.452305, 0.729413, 0.0171259, 0, 0.472358, 0.717146, 0.0159933, 0, 0.492845, 0.70436, 0.0149495, 0, 0.513783, 0.69219, 0.0139681, 0, 0.535189, 0.680289, 0.0130577, 0, 0.557087, 0.669611, 0.0122198, 0, 0.5795, 0.659113, 0.0114174, 0, 0.602459, 0.648148, 0.0106729, 0, 0.625997, 0.636905, 0.00998997, 0, 0.650154, 0.625154, 0.00934313, 0, 0.674976, 0.613481, 0.00874839, 0, 0.700518, 0.60154, 0.00818265, 0, 0.726845, 0.58943, 0.00766889, 0, 0.754032, 0.576828, 0.00717153, 0, 0.782167, 0.564194, 0.00672696, 0, 0.811344, 0.551501, 0.00630863, 0, 0.841644, 0.538635, 0.00592177, 0, 0.873016, 0.525724, 0.00554888, 0, 0.904762, 0.513209, 0.00520225, 0, 0.936508, 0.500457, 0.00488231, 0, 0.968254, 0.48799, 0.00457153, 0, 1, 1, 0.0810131, 0, 0, 1, 0.0810133, 0, 0, 0.999997, 0.0810145, 0, 0, 0.999985, 0.08102, 0, 0, 0.999956, 0.0810347, 0, 1.95026e-05, 0.999893, 0.0810656, 0, 0.000719316, 0.999777, 0.0811205, 0, 0.00259774, 0.999583, 0.081208, 0, 0.00561807, 0.999281, 0.0813343, 0, 0.00967472, 0.998813, 0.0814969, 0, 0.0146627, 0.997597, 0.0815217, 0, 0.0204902, 0.994379, 0.0808502, 0, 0.0270802, 0.992744, 0.0806792, 0, 0.0343674, 0.990745, 0.0804589, 0, 0.0422974, 0.986646, 0.0796107, 0, 0.0508242, 0.983611, 0.0790913, 0, 0.0599087, 0.978869, 0.0780746, 0, 0.0695175, 0.973475, 0.0768218, 0, 0.0796223, 0.967845, 0.0754926, 0, 0.0901983, 0.960778, 0.0737063, 0, 0.101224, 0.953333, 0.0718052, 0, 0.112682, 0.945274, 0.0695946, 0, 0.124555, 0.936955, 0.0672492, 0, 0.136831, 0.928319, 0.0647732, 0, 0.149496, 0.919075, 0.0620947, 0, 0.162542, 0.909114, 0.0591816, 0, 0.175958, 0.900137, 0.0563917, 0, 0.189739, 0.891069, 0.0535392, 0, 0.203877, 0.882262, 0.0507642, 0, 0.218368, 0.873232, 0.0479793, 0, 0.233208, 0.864042, 0.045226, 0, 0.248393, 0.855002, 0.0425413, 0, 0.263923, 0.846569, 0.0400126, 0, 0.279796, 0.837714, 0.0375269, 0, 0.296012, 0.828918, 0.0352027, 0, 0.312573, 0.819783, 0.0330011, 0, 0.329479, 0.810129, 0.0308908, 0, 0.346734, 0.800866, 0.0289112, 0, 0.364342, 0.79093, 0.0270255, 0, 0.382307, 0.780593, 0.0252758, 0, 0.400637, 0.769511, 0.0236178, 0, 0.419337, 0.758558, 0.0220652, 0, 0.438418, 0.747632, 0.0206289, 0, 0.457889, 0.736146, 0.0192873, 0, 0.477761, 0.724093, 0.0180333, 0, 0.49805, 0.71234, 0.0168264, 0, 0.51877, 0.700201, 0.015746, 0, 0.53994, 0.687949, 0.0147027, 0, 0.561581, 0.676163, 0.0137512, 0, 0.583718, 0.665001, 0.0128655, 0, 0.60638, 0.65472, 0.0120366, 0, 0.629599, 0.644213, 0.0112604, 0, 0.653415, 0.633382, 0.0105413, 0, 0.677874, 0.62212, 0.00986498, 0, 0.70303, 0.610631, 0.00923308, 0, 0.728948, 0.599078, 0.00864206, 0, 0.755706, 0.587519, 0.00811784, 0, 0.783396, 0.575505, 0.00761237, 0, 0.812121, 0.563148, 0.00713949, 0, 0.841989, 0.550828, 0.00668379, 0, 0.873035, 0.538458, 0.00627715, 0, 0.904762, 0.525905, 0.00588336, 0, 0.936508, 0.513517, 0.00552687, 0, 0.968254, 0.501395, 0.00519681, 0, 1, 1, 0.0991506, 0, 0, 1, 0.0991504, 0, 0, 0.999996, 0.0991515, 0, 0, 0.999984, 0.0991558, 0, 0, 0.999947, 0.0991672, 0, 0.000114389, 0.999874, 0.0991912, 0, 0.00121503, 0.999739, 0.0992331, 0, 0.00356108, 0.999514, 0.0992983, 0, 0.00705578, 0.999159, 0.0993877, 0, 0.011574, 0.998586, 0.0994837, 0, 0.017003, 0.995731, 0.0988425, 0, 0.0232484, 0.993384, 0.098276, 0, 0.0302318, 0.991615, 0.0979269, 0, 0.0378884, 0.989029, 0.0973432, 0, 0.0461641, 0.985373, 0.0963539, 0, 0.0550136, 0.981278, 0.0952306, 0, 0.0643988, 0.975777, 0.0936233, 0, 0.0742868, 0.970526, 0.0920219, 0, 0.0846501, 0.963755, 0.0898912, 0, 0.0954644, 0.956676, 0.0876064, 0, 0.106709, 0.948099, 0.0847751, 0, 0.118367, 0.939718, 0.0818638, 0, 0.130423, 0.931305, 0.078857, 0, 0.142862, 0.922342, 0.0756127, 0, 0.155674, 0.912842, 0.0721473, 0, 0.168849, 0.903304, 0.0686195, 0, 0.182378, 0.89411, 0.0650589, 0, 0.196255, 0.885512, 0.0616022, 0, 0.210473, 0.877193, 0.0582434, 0, 0.225027, 0.86877, 0.0548979, 0, 0.239915, 0.860267, 0.0516095, 0, 0.255132, 0.851915, 0.048468, 0, 0.270678, 0.843912, 0.0454447, 0, 0.286551, 0.83604, 0.0425612, 0, 0.302751, 0.828245, 0.0398752, 0, 0.31928, 0.820159, 0.0373198, 0, 0.336138, 0.81167, 0.034916, 0, 0.35333, 0.802659, 0.0326402, 0, 0.370858, 0.793921, 0.0304901, 0, 0.388728, 0.784713, 0.0284857, 0, 0.406944, 0.774946, 0.0266186, 0, 0.425515, 0.76448, 0.0248593, 0, 0.444449, 0.753793, 0.0232114, 0, 0.463756, 0.743506, 0.0217039, 0, 0.483447, 0.732555, 0.0202841, 0, 0.503535, 0.720965, 0.0189648, 0, 0.524036, 0.709422, 0.0177189, 0, 0.544968, 0.697756, 0.0165626, 0, 0.56635, 0.685565, 0.015483, 0, 0.588208, 0.673987, 0.0144892, 0, 0.610569, 0.66244, 0.0135607, 0, 0.633466, 0.651675, 0.0126956, 0, 0.656936, 0.641598, 0.0118788, 0, 0.681025, 0.63121, 0.0111261, 0, 0.705788, 0.620514, 0.010437, 0, 0.731289, 0.609366, 0.00978747, 0, 0.757606, 0.598137, 0.00917257, 0, 0.784834, 0.586966, 0.00859778, 0, 0.813085, 0.575549, 0.00806803, 0, 0.842485, 0.563797, 0.00757294, 0, 0.87313, 0.551758, 0.00710592, 0, 0.904762, 0.539894, 0.0066841, 0, 0.936508, 0.527901, 0.00627901, 0, 0.968254, 0.515819, 0.00590506, 0, 1, 1, 0.120864, 0, 0, 1, 0.120864, 0, 0, 0.999996, 0.120864, 0, 0, 0.99998, 0.120867, 0, 0, 0.99994, 0.120872, 0, 0.000323781, 0.999852, 0.120884, 0, 0.00188693, 0.999693, 0.120903, 0, 0.00473489, 0.999426, 0.120929, 0, 0.00872704, 0.999002, 0.120955, 0, 0.0137237, 0.998235, 0.120918, 0, 0.0196068, 0.994608, 0.119764, 0, 0.0262803, 0.992997, 0.119265, 0, 0.0336657, 0.990968, 0.11863, 0, 0.0416987, 0.987002, 0.117261, 0, 0.0503261, 0.983524, 0.116009, 0, 0.0595035, 0.97875, 0.114252, 0, 0.0691935, 0.972652, 0.11193, 0, 0.0793645, 0.966613, 0.109555, 0, 0.0899894, 0.959275, 0.106612, 0, 0.101045, 0.951272, 0.103375, 0, 0.112512, 0.942323, 0.0996594, 0, 0.124372, 0.933679, 0.0958841, 0, 0.136611, 0.924822, 0.0919265, 0, 0.149216, 0.915742, 0.0878061, 0, 0.162176, 0.906348, 0.0834894, 0, 0.175482, 0.896883, 0.079085, 0, 0.189125, 0.88774, 0.0746745, 0, 0.203098, 0.87986, 0.0705773, 0, 0.217396, 0.871998, 0.0665005, 0, 0.232015, 0.864325, 0.0625413, 0, 0.24695, 0.856685, 0.0586781, 0, 0.2622, 0.84925, 0.0550063, 0, 0.277761, 0.841719, 0.0514727, 0, 0.293634, 0.834755, 0.0481398, 0, 0.309819, 0.827853, 0.0450172, 0, 0.326315, 0.820888, 0.0420969, 0, 0.343126, 0.813616, 0.0393702, 0, 0.360254, 0.805767, 0.0367771, 0, 0.377701, 0.797338, 0.0343274, 0, 0.395474, 0.789122, 0.0320529, 0, 0.413577, 0.780601, 0.0299485, 0, 0.432018, 0.771424, 0.0279812, 0, 0.450804, 0.761502, 0.0261054, 0, 0.469944, 0.751166, 0.0243942, 0, 0.489451, 0.741276, 0.0228087, 0, 0.509337, 0.730898, 0.0213265, 0, 0.529617, 0.719878, 0.0199307, 0, 0.550307, 0.708379, 0.0186574, 0, 0.571428, 0.697165, 0.0174446, 0, 0.593003, 0.685554, 0.0163144, 0, 0.615059, 0.673631, 0.015276, 0, 0.637628, 0.662385, 0.0143003, 0, 0.660746, 0.651059, 0.0134112, 0, 0.68446, 0.640451, 0.0125794, 0, 0.70882, 0.630536, 0.011793, 0, 0.733893, 0.620316, 0.0110547, 0, 0.759756, 0.609722, 0.0103668, 0, 0.786505, 0.598804, 0.00973009, 0, 0.814259, 0.587871, 0.00912812, 0, 0.843157, 0.577121, 0.00858916, 0, 0.87334, 0.566019, 0.00807333, 0, 0.904762, 0.554664, 0.00759687, 0, 0.936508, 0.543101, 0.00714759, 0, 0.968254, 0.531558, 0.00673418, 0, 1, 1, 0.146767, 0, 0, 1, 0.146767, 0, 0, 0.999997, 0.146767, 0, 0, 0.999977, 0.146765, 0, 3.20658e-06, 0.999929, 0.146762, 0, 0.000682576, 0.999823, 0.146753, 0, 0.00276402, 0.999633, 0.146735, 0, 0.00614771, 0.999314, 0.146699, 0, 0.0106613, 0.998796, 0.14662, 0, 0.0161546, 0.997124, 0.146107, 0, 0.0225063, 0.994062, 0.144857, 0, 0.0296198, 0.992154, 0.144011, 0, 0.037417, 0.989186, 0.142712, 0, 0.0458348, 0.985279, 0.140926, 0, 0.0548211, 0.980826, 0.13885, 0, 0.0643326, 0.975056, 0.136168, 0, 0.074333, 0.969005, 0.133217, 0, 0.0847917, 0.961554, 0.12959, 0, 0.0956828, 0.954206, 0.125886, 0, 0.106984, 0.945046, 0.121335, 0, 0.118675, 0.935678, 0.116492, 0, 0.130741, 0.926748, 0.111635, 0, 0.143166, 0.917764, 0.106625, 0, 0.155939, 0.908358, 0.101325, 0, 0.169049, 0.899219, 0.0960249, 0, 0.182487, 0.890089, 0.0906527, 0, 0.196245, 0.881488, 0.0853905, 0, 0.210317, 0.874031, 0.0804177, 0, 0.224697, 0.866932, 0.0756005, 0, 0.23938, 0.859976, 0.0709019, 0, 0.254364, 0.853375, 0.0664391, 0, 0.269646, 0.846971, 0.0622012, 0, 0.285223, 0.840483, 0.058129, 0, 0.301096, 0.833969, 0.0542762, 0, 0.317265, 0.82806, 0.0507042, 0, 0.333729, 0.822128, 0.047368, 0, 0.350491, 0.815989, 0.044272, 0, 0.367554, 0.809336, 0.0413444, 0, 0.38492, 0.802177, 0.038601, 0, 0.402594, 0.79441, 0.0360227, 0, 0.420582, 0.786573, 0.0336383, 0, 0.438891, 0.778619, 0.0314321, 0, 0.457527, 0.77, 0.029362, 0, 0.476499, 0.760698, 0.0274102, 0, 0.49582, 0.750932, 0.0256146, 0, 0.5155, 0.740993, 0.023974, 0, 0.535555, 0.731159, 0.0224182, 0, 0.556, 0.720836, 0.0209889, 0, 0.576855, 0.709913, 0.0196411, 0, 0.598143, 0.698415, 0.0183824, 0, 0.619888, 0.68745, 0.0172222, 0, 0.642123, 0.676154, 0.0161509, 0, 0.664883, 0.664383, 0.0151397, 0, 0.688211, 0.6533, 0.0141873, 0, 0.71216, 0.642072, 0.0133105, 0, 0.736792, 0.631412, 0.0124932, 0, 0.762186, 0.621622, 0.0117408, 0, 0.788439, 0.611681, 0.0110358, 0, 0.815672, 0.60142, 0.0103775, 0, 0.844034, 0.59083, 0.00975623, 0, 0.873699, 0.580254, 0.00918084, 0, 0.904765, 0.569841, 0.00864721, 0, 0.936508, 0.559224, 0.00815731, 0, 0.968254, 0.548315, 0.00767924, 0, 1, 1, 0.177563, 0, 0, 1, 0.177563, 0, 0, 0.999994, 0.177562, 0, 0, 0.999972, 0.177555, 0, 6.64171e-05, 0.999914, 0.177536, 0, 0.0012276, 0.999787, 0.177496, 0, 0.00388025, 0.999556, 0.17742, 0, 0.00783463, 0.999165, 0.177285, 0, 0.0128953, 0.9985, 0.177037, 0, 0.0189053, 0.995388, 0.175634, 0, 0.025742, 0.993102, 0.174375, 0, 0.033309, 0.990992, 0.173121, 0, 0.0415298, 0.986932, 0.170896, 0, 0.0503425, 0.982786, 0.16847, 0, 0.0596964, 0.977592, 0.165455, 0, 0.0695498, 0.971075, 0.161676, 0, 0.0798676, 0.963967, 0.157458, 0, 0.0906201, 0.956397, 0.152836, 0, 0.101783, 0.947489, 0.147467, 0, 0.113333, 0.937564, 0.14145, 0, 0.125254, 0.928182, 0.135383, 0, 0.137529, 0.919027, 0.129212, 0, 0.150144, 0.909618, 0.12276, 0, 0.163088, 0.900492, 0.116273, 0, 0.176351, 0.891671, 0.1098, 0, 0.189924, 0.883146, 0.103362, 0, 0.203799, 0.875151, 0.0970799, 0, 0.21797, 0.868338, 0.0911732, 0, 0.232433, 0.862033, 0.0854966, 0, 0.247182, 0.856107, 0.0800691, 0, 0.262216, 0.850644, 0.0749618, 0, 0.27753, 0.845261, 0.070079, 0, 0.293124, 0.839885, 0.0654321, 0, 0.308997, 0.834609, 0.0610975, 0, 0.325149, 0.829083, 0.0569741, 0, 0.341581, 0.82404, 0.0531736, 0, 0.358294, 0.818968, 0.049665, 0, 0.37529, 0.813496, 0.0463856, 0, 0.392573, 0.807533, 0.0433217, 0, 0.410148, 0.80099, 0.0404402, 0, 0.428019, 0.793891, 0.0377578, 0, 0.446192, 0.786281, 0.0352616, 0, 0.464676, 0.778773, 0.0329577, 0, 0.483478, 0.770737, 0.030808, 0, 0.502608, 0.762094, 0.0287964, 0, 0.522079, 0.752898, 0.0269254, 0, 0.541905, 0.743306, 0.0251926, 0, 0.5621, 0.733416, 0.023595, 0, 0.582684, 0.723742, 0.0221155, 0, 0.603677, 0.713542, 0.0207435, 0, 0.625106, 0.702755, 0.019434, 0, 0.646998, 0.691484, 0.0182046, 0, 0.66939, 0.680531, 0.0170771, 0, 0.692324, 0.66953, 0.0160339, 0, 0.715849, 0.658126, 0.0150677, 0, 0.740028, 0.646933, 0.0141551, 0, 0.764937, 0.636107, 0.0133179, 0, 0.790673, 0.625271, 0.0125284, 0, 0.817358, 0.615225, 0.0117937, 0, 0.84515, 0.605678, 0.0111181, 0, 0.874244, 0.59583, 0.0104759, 0, 0.904828, 0.585704, 0.00986672, 0, 0.936508, 0.575413, 0.00929712, 0, 0.968254, 0.565373, 0.00876713, 0, 1, 1, 0.214058, 0, 0, 0.999999, 0.214058, 0, 0, 0.999994, 0.214055, 0, 0, 0.999966, 0.214039, 0, 0.000259642, 0.999893, 0.213998, 0, 0.00200075, 0.999737, 0.21391, 0, 0.00527775, 0.999449, 0.213745, 0, 0.00983959, 0.99896, 0.213458, 0, 0.0154755, 0.9979, 0.212855, 0, 0.0220249, 0.994278, 0.210779, 0, 0.0293654, 0.992254, 0.20926, 0, 0.0374021, 0.98881, 0.206908, 0, 0.0460604, 0.984715, 0.204009, 0, 0.0552802, 0.979738, 0.200471, 0, 0.0650127, 0.972884, 0.195813, 0, 0.0752175, 0.965996, 0.190856, 0, 0.0858612, 0.957974, 0.185077, 0, 0.0969155, 0.949155, 0.17868, 0, 0.108356, 0.939288, 0.171513, 0, 0.120163, 0.928996, 0.163838, 0, 0.132319, 0.919563, 0.156246, 0, 0.144808, 0.910004, 0.148359, 0, 0.157618, 0.900791, 0.140417, 0, 0.170737, 0.892135, 0.132569, 0, 0.184155, 0.883803, 0.124741, 0, 0.197866, 0.876034, 0.117091, 0, 0.211861, 0.869219, 0.109835, 0, 0.226134, 0.863062, 0.102859, 0, 0.240682, 0.857795, 0.0962928, 0, 0.255499, 0.853009, 0.0900725, 0, 0.270583, 0.848603, 0.0842101, 0, 0.285931, 0.844335, 0.0786527, 0, 0.301542, 0.840208, 0.0734397, 0, 0.317415, 0.836035, 0.0685334, 0, 0.33355, 0.83172, 0.0639275, 0, 0.349948, 0.827135, 0.0595909, 0, 0.36661, 0.822797, 0.0556204, 0, 0.383539, 0.818387, 0.0519394, 0, 0.400738, 0.813565, 0.0485317, 0, 0.41821, 0.808142, 0.0453138, 0, 0.435961, 0.802212, 0.0423354, 0, 0.453997, 0.79573, 0.0395553, 0, 0.472324, 0.788741, 0.036988, 0, 0.490951, 0.781093, 0.0345688, 0, 0.509887, 0.773597, 0.0323297, 0, 0.529144, 0.765622, 0.0302719, 0, 0.548735, 0.757083, 0.0283477, 0, 0.568674, 0.747992, 0.0265562, 0, 0.588979, 0.738591, 0.0248844, 0, 0.609671, 0.728719, 0.0233342, 0, 0.630773, 0.719146, 0.0219081, 0, 0.652314, 0.709165, 0.0205711, 0, 0.674328, 0.69875, 0.0193248, 0, 0.696854, 0.687884, 0.0181582, 0, 0.719942, 0.676818, 0.0170746, 0, 0.743651, 0.666247, 0.0160718, 0, 0.768057, 0.655284, 0.0151262, 0, 0.793253, 0.64401, 0.0142561, 0, 0.819363, 0.633353, 0.0134327, 0, 0.846547, 0.622674, 0.012653, 0, 0.875017, 0.612265, 0.0119354, 0, 0.905021, 0.602455, 0.0112533, 0, 0.936508, 0.593147, 0.0106234, 0, 0.968254, 0.583592, 0.0100213, 0, 1, 1, 0.25717, 0, 0, 1, 0.25717, 0, 0, 0.999992, 0.257164, 0, 0, 0.999958, 0.257135, 0, 0.000641715, 0.999864, 0.25706, 0, 0.00305314, 0.999666, 0.256897, 0, 0.00700975, 0.999302, 0.256596, 0, 0.0122194, 0.998663, 0.25607, 0, 0.0184622, 0.995607, 0.254123, 0, 0.0255773, 0.993094, 0.252081, 0, 0.0334439, 0.9907, 0.249867, 0, 0.0419696, 0.98594, 0.246118, 0, 0.0510823, 0.981214, 0.242049, 0, 0.0607242, 0.974966, 0.236869, 0, 0.0708486, 0.967589, 0.230724, 0, 0.081417, 0.95915, 0.223635, 0, 0.0923974, 0.950257, 0.21596, 0, 0.103763, 0.940165, 0.207296, 0, 0.115491, 0.929396, 0.197901, 0, 0.127562, 0.919288, 0.188437, 0, 0.13996, 0.909428, 0.178762, 0, 0.15267, 0.900105, 0.169072, 0, 0.165679, 0.891418, 0.159478, 0, 0.178979, 0.883347, 0.15002, 0, 0.192558, 0.875992, 0.140813, 0, 0.20641, 0.869466, 0.13196, 0, 0.220529, 0.863699, 0.123501, 0, 0.234907, 0.858553, 0.115436, 0, 0.249542, 0.854379, 0.107901, 0, 0.264428, 0.850894, 0.10088, 0, 0.279564, 0.847632, 0.0942296, 0, 0.294947, 0.844571, 0.0879861, 0, 0.310575, 0.84163, 0.0821534, 0, 0.326448, 0.838542, 0.0766409, 0, 0.342566, 0.835412, 0.0715322, 0, 0.358929, 0.831899, 0.0666883, 0, 0.37554, 0.828177, 0.0622175, 0, 0.392399, 0.82416, 0.0580452, 0, 0.409511, 0.820393, 0.054267, 0, 0.426878, 0.816068, 0.0507172, 0, 0.444506, 0.811201, 0.0474041, 0, 0.4624, 0.805785, 0.0443174, 0, 0.480566, 0.799878, 0.0414562, 0, 0.499013, 0.793469, 0.0388147, 0, 0.517749, 0.786473, 0.0363453, 0, 0.536785, 0.778874, 0.0340225, 0, 0.556134, 0.771277, 0.0318599, 0, 0.575809, 0.763426, 0.0298859, 0, 0.595827, 0.755044, 0.0280357, 0, 0.616207, 0.746161, 0.0262979, 0, 0.636973, 0.737124, 0.0247295, 0, 0.65815, 0.72761, 0.0232514, 0, 0.679772, 0.717822, 0.0218755, 0, 0.701876, 0.708279, 0.0205942, 0, 0.724509, 0.698333, 0.0193947, 0, 0.74773, 0.68802, 0.0182717, 0, 0.771609, 0.677321, 0.0172044, 0, 0.79624, 0.666504, 0.0162122, 0, 0.821743, 0.656184, 0.0152924, 0, 0.84828, 0.64556, 0.0144326, 0, 0.876069, 0.634636, 0.0136157, 0, 0.905404, 0.624124, 0.0128612, 0, 0.936508, 0.613914, 0.0121435, 0, 0.968254, 0.603589, 0.0114887, 0, 1, 1, 0.307946, 0, 0, 0.999999, 0.307945, 0, 0, 0.999988, 0.307934, 0, 2.04479e-05, 0.999944, 0.307886, 0, 0.00127833, 0.999824, 0.307756, 0, 0.00445047, 0.999565, 0.30748, 0, 0.00914673, 0.999085, 0.306966, 0, 0.0150498, 0.998103, 0.306004, 0, 0.0219367, 0.994249, 0.303028, 0, 0.0296485, 0.991807, 0.300435, 0, 0.038068, 0.987773, 0.296554, 0, 0.0471062, 0.982673, 0.2916, 0, 0.0566942, 0.976623, 0.285641, 0, 0.0667768, 0.968757, 0.27815, 0, 0.0773099, 0.959849, 0.269529, 0, 0.088257, 0.950663, 0.260248, 0, 0.0995879, 0.940129, 0.249704, 0, 0.111277, 0.92895, 0.238291, 0, 0.123304, 0.917996, 0.226501, 0, 0.13565, 0.907813, 0.214669, 0, 0.148299, 0.898305, 0.202835, 0, 0.161237, 0.889626, 0.191158, 0, 0.174455, 0.88175, 0.179695, 0, 0.187941, 0.874715, 0.168548, 0, 0.201687, 0.868746, 0.15792, 0, 0.215687, 0.863703, 0.147807, 0, 0.229933, 0.859315, 0.138149, 0, 0.24442, 0.855538, 0.128993, 0, 0.259145, 0.852428, 0.120414, 0, 0.274103, 0.850168, 0.112498, 0, 0.289293, 0.848132, 0.105054, 0, 0.304711, 0.846291, 0.0981087, 0, 0.320357, 0.844431, 0.0915942, 0, 0.33623, 0.842493, 0.0855056, 0, 0.35233, 0.840368, 0.0798204, 0, 0.368658, 0.83798, 0.0745097, 0, 0.385214, 0.83523, 0.0695424, 0, 0.402002, 0.832091, 0.0649092, 0, 0.419023, 0.828667, 0.0606291, 0, 0.436282, 0.824805, 0.0566523, 0, 0.453782, 0.820988, 0.0530229, 0, 0.471529, 0.816635, 0.0496364, 0, 0.489528, 0.811725, 0.0464658, 0, 0.507788, 0.806316, 0.0435082, 0, 0.526317, 0.800469, 0.0407873, 0, 0.545124, 0.794107, 0.038255, 0, 0.564221, 0.787218, 0.0358825, 0, 0.583621, 0.779872, 0.0336785, 0, 0.603341, 0.772097, 0.0316379, 0, 0.623397, 0.764484, 0.0297379, 0, 0.643812, 0.756428, 0.0279581, 0, 0.664611, 0.748022, 0.0263153, 0, 0.685824, 0.739268, 0.0247799, 0, 0.707488, 0.73024, 0.0233385, 0, 0.729646, 0.720893, 0.0220035, 0, 0.752354, 0.71119, 0.0207555, 0, 0.77568, 0.701791, 0.0195843, 0, 0.799715, 0.692184, 0.0184891, 0, 0.824574, 0.682258, 0.0174541, 0, 0.850417, 0.67206, 0.0164873, 0, 0.877466, 0.661717, 0.0155959, 0, 0.90604, 0.651462, 0.0147519, 0, 0.936528, 0.641467, 0.0139727, 0, 0.968254, 0.631229, 0.0132363, 0, 1, 1, 0.367573, 0, 0, 0.999999, 0.367571, 0, 0, 0.999984, 0.367553, 0, 0.000183382, 0.999925, 0.367473, 0, 0.00225254, 0.999759, 0.367259, 0, 0.00628165, 0.99941, 0.366801, 0, 0.0117858, 0.998739, 0.365946, 0, 0.0184359, 0.995529, 0.363191, 0, 0.0260114, 0.992875, 0.360171, 0, 0.0343581, 0.989135, 0.355981, 0, 0.0433637, 0.984166, 0.350401, 0, 0.0529438, 0.977871, 0.343348, 0, 0.0630334, 0.96951, 0.334341, 0, 0.0735805, 0.959964, 0.323862, 0, 0.0845437, 0.950162, 0.312521, 0, 0.095889, 0.938882, 0.299577, 0, 0.107588, 0.926992, 0.285573, 0, 0.119617, 0.915589, 0.271212, 0, 0.131957, 0.904791, 0.256611, 0, 0.144591, 0.895177, 0.242224, 0, 0.157503, 0.886403, 0.227952, 0, 0.170682, 0.878957, 0.214192, 0, 0.184117, 0.872418, 0.200795, 0, 0.197799, 0.867029, 0.188015, 0, 0.21172, 0.862835, 0.175975, 0, 0.225873, 0.859411, 0.164526, 0, 0.240253, 0.856655, 0.153693, 0, 0.254854, 0.854519, 0.14352, 0, 0.269673, 0.852828, 0.13397, 0, 0.284707, 0.851412, 0.124984, 0, 0.299953, 0.850609, 0.116748, 0, 0.315408, 0.849855, 0.10905, 0, 0.331073, 0.849017, 0.101839, 0, 0.346946, 0.848079, 0.0951359, 0, 0.363028, 0.846911, 0.0888774, 0, 0.379318, 0.845445, 0.0830375, 0, 0.395818, 0.84362, 0.0775844, 0, 0.41253, 0.841411, 0.0725054, 0, 0.429457, 0.838768, 0.0677691, 0, 0.446602, 0.835801, 0.0634016, 0, 0.463968, 0.832341, 0.0593095, 0, 0.481561, 0.828424, 0.0555121, 0, 0.499386, 0.824312, 0.052024, 0, 0.51745, 0.819918, 0.0487865, 0, 0.535761, 0.815072, 0.0457801, 0, 0.554328, 0.809863, 0.0430184, 0, 0.573162, 0.804164, 0.0404245, 0, 0.592275, 0.798034, 0.0380146, 0, 0.611681, 0.791436, 0.0357436, 0, 0.631398, 0.784498, 0.0336475, 0, 0.651445, 0.777125, 0.0316666, 0, 0.671845, 0.769365, 0.0298122, 0, 0.692628, 0.761579, 0.0281001, 0, 0.713827, 0.753746, 0.0265049, 0, 0.735484, 0.745573, 0.0250067, 0, 0.75765, 0.737083, 0.0236026, 0, 0.78039, 0.728545, 0.0223302, 0, 0.803789, 0.719691, 0.0211243, 0, 0.82796, 0.710569, 0.0199983, 0, 0.853056, 0.701216, 0.0189569, 0, 0.879298, 0.692094, 0.0179702, 0, 0.907014, 0.682909, 0.0170418, 0, 0.936691, 0.673509, 0.0161732, 0, 0.968254, 0.663863, 0.0153406, 0, 1, 1, 0.437395, 0, 0, 0.999998, 0.437394, 0, 0, 0.99998, 0.437363, 0, 0.000616704, 0.999891, 0.437232, 0, 0.00367925, 0.999656, 0.436877, 0, 0.00867446, 0.999148, 0.436121, 0, 0.0150679, 0.997959, 0.434564, 0, 0.022531, 0.993464, 0.430134, 0, 0.0308507, 0.990606, 0.426077, 0, 0.0398805, 0.985027, 0.419397, 0, 0.0495148, 0.978491, 0.41118, 0, 0.0596749, 0.969643, 0.40048, 0, 0.0703001, 0.959189, 0.38769, 0, 0.0813427, 0.948223, 0.373575, 0, 0.0927641, 0.935955, 0.357622, 0, 0.104533, 0.923237, 0.34043, 0, 0.116624, 0.911074, 0.322735, 0, 0.129015, 0.899724, 0.30479, 0, 0.141687, 0.890189, 0.287392, 0, 0.154626, 0.881796, 0.270248, 0, 0.167818, 0.874781, 0.253659, 0, 0.181252, 0.869166, 0.237786, 0, 0.194918, 0.864725, 0.222618, 0, 0.208807, 0.861565, 0.208356, 0, 0.222913, 0.859284, 0.194867, 0, 0.237229, 0.857677, 0.18212, 0, 0.25175, 0.856714, 0.17018, 0, 0.266473, 0.856155, 0.158969, 0, 0.281392, 0.8558, 0.148413, 0, 0.296505, 0.855672, 0.138578, 0, 0.311811, 0.855538, 0.129345, 0, 0.327306, 0.855689, 0.120861, 0, 0.342991, 0.855767, 0.112969, 0, 0.358864, 0.855618, 0.105593, 0, 0.374925, 0.85525, 0.0987451, 0, 0.391176, 0.854583, 0.0923727, 0, 0.407616, 0.853534, 0.0864143, 0, 0.424249, 0.852061, 0.0808338, 0, 0.441076, 0.850253, 0.0756771, 0, 0.4581, 0.848004, 0.0708612, 0, 0.475324, 0.845333, 0.0663784, 0, 0.492754, 0.842376, 0.0622631, 0, 0.510394, 0.838956, 0.0584112, 0, 0.528251, 0.835121, 0.0548328, 0, 0.546331, 0.830842, 0.0514838, 0, 0.564644, 0.826212, 0.048355, 0, 0.583198, 0.821522, 0.0454714, 0, 0.602005, 0.816551, 0.0428263, 0, 0.621078, 0.811211, 0.0403612, 0, 0.640434, 0.805479, 0.038039, 0, 0.660089, 0.799409, 0.0358739, 0, 0.680066, 0.79306, 0.0338727, 0, 0.70039, 0.786395, 0.0319985, 0, 0.721094, 0.779416, 0.030241, 0, 0.742215, 0.77214, 0.0285951, 0, 0.7638, 0.764636, 0.0270747, 0, 0.785912, 0.756836, 0.0256354, 0, 0.808628, 0.749315, 0.0243027, 0, 0.832055, 0.741561, 0.0230497, 0, 0.856338, 0.733589, 0.0218801, 0, 0.88169, 0.725479, 0.020784, 0, 0.908441, 0.717255, 0.0197702, 0, 0.937125, 0.708829, 0.0188168, 0, 0.968254, 0.700191, 0.0179113, 0, 1, 1, 0.518937, 0, 0, 0.999998, 0.518933, 0, 0, 0.999967, 0.518883, 0, 0.00147741, 0.999832, 0.51866, 0, 0.00573221, 0.999466, 0.518057, 0, 0.011826, 0.998644, 0.516752, 0, 0.0192116, 0.994458, 0.512347, 0, 0.027573, 0.991223, 0.507675, 0, 0.0367099, 0.985515, 0.500188, 0, 0.046487, 0.978308, 0.490408, 0, 0.0568071, 0.968359, 0.477357, 0, 0.0675984, 0.95682, 0.461752, 0, 0.0788059, 0.943929, 0.443796, 0, 0.090386, 0.930224, 0.423893, 0, 0.102304, 0.916514, 0.402682, 0, 0.114532, 0.903653, 0.380914, 0, 0.127047, 0.892315, 0.359212, 0, 0.139828, 0.882942, 0.338102, 0, 0.152861, 0.875438, 0.31773, 0, 0.16613, 0.869642, 0.298186, 0, 0.179624, 0.865304, 0.279491, 0, 0.193332, 0.862382, 0.261804, 0, 0.207247, 0.860666, 0.245146, 0, 0.22136, 0.859788, 0.229406, 0, 0.235666, 0.859608, 0.214605, 0, 0.250158, 0.859912, 0.200691, 0, 0.264832, 0.86053, 0.187623, 0, 0.279684, 0.861368, 0.17539, 0, 0.294711, 0.862237, 0.163901, 0, 0.309911, 0.863127, 0.153175, 0, 0.32528, 0.863923, 0.143147, 0, 0.340819, 0.864567, 0.133781, 0, 0.356524, 0.865013, 0.125042, 0, 0.372397, 0.86539, 0.116952, 0, 0.388438, 0.865591, 0.109476, 0, 0.404645, 0.865517, 0.102542, 0, 0.421022, 0.865084, 0.0960688, 0, 0.437569, 0.864309, 0.0900499, 0, 0.454287, 0.863151, 0.0844328, 0, 0.471181, 0.861649, 0.0792218, 0, 0.488253, 0.859742, 0.0743482, 0, 0.505507, 0.857446, 0.0697963, 0, 0.522947, 0.854757, 0.0655364, 0, 0.54058, 0.851783, 0.061608, 0, 0.558412, 0.848516, 0.0579701, 0, 0.576449, 0.844897, 0.0545742, 0, 0.594701, 0.840956, 0.0514167, 0, 0.613178, 0.836676, 0.0484598, 0, 0.631892, 0.832075, 0.0456934, 0, 0.650856, 0.827191, 0.0431178, 0, 0.670088, 0.822295, 0.0407718, 0, 0.689606, 0.817294, 0.0386032, 0, 0.709434, 0.812013, 0.0365675, 0, 0.7296, 0.806465, 0.0346547, 0, 0.750138, 0.800691, 0.0328717, 0, 0.771093, 0.794709, 0.031211, 0, 0.792519, 0.788493, 0.0296504, 0, 0.814488, 0.782049, 0.0281782, 0, 0.837097, 0.775403, 0.0267965, 0, 0.860481, 0.76857, 0.0255002, 0, 0.884842, 0.761536, 0.0242759, 0, 0.910494, 0.754303, 0.0231142, 0, 0.937985, 0.74692, 0.0220305, 0, 0.968254, 0.739745, 0.0210192, 0, 1, 1, 0.613914, 0, 0, 0.999996, 0.613907, 0, 9.63597e-05, 0.999942, 0.613814, 0, 0.00301247, 0.999704, 0.613407, 0, 0.00870385, 0.999046, 0.612302, 0, 0.0160714, 0.995516, 0.608266, 0, 0.0245899, 0.991726, 0.602863, 0, 0.0339681, 0.985157, 0.593956, 0, 0.0440254, 0.97642, 0.581748, 0, 0.0546409, 0.964404, 0.565183, 0, 0.0657284, 0.950601, 0.545273, 0, 0.0772246, 0.935158, 0.522129, 0, 0.0890812, 0.919364, 0.496782, 0, 0.10126, 0.904754, 0.470571, 0, 0.113731, 0.89176, 0.444037, 0, 0.126469, 0.881492, 0.418322, 0, 0.139454, 0.873656, 0.393522, 0, 0.15267, 0.868053, 0.369795, 0, 0.166101, 0.864336, 0.347171, 0, 0.179736, 0.862259, 0.325737, 0, 0.193565, 0.861556, 0.305532, 0, 0.207578, 0.861776, 0.286416, 0, 0.221769, 0.862661, 0.268355, 0, 0.23613, 0.864015, 0.251334, 0, 0.250656, 0.865711, 0.235352, 0, 0.265343, 0.867519, 0.220302, 0, 0.280187, 0.869351, 0.206161, 0, 0.295183, 0.871144, 0.192908, 0, 0.31033, 0.872839, 0.180505, 0, 0.325624, 0.874307, 0.168848, 0, 0.341065, 0.875667, 0.158021, 0, 0.35665, 0.876758, 0.147877, 0, 0.37238, 0.87764, 0.138441, 0, 0.388253, 0.878237, 0.129627, 0, 0.404269, 0.878563, 0.121415, 0, 0.42043, 0.878572, 0.113741, 0, 0.436735, 0.87842, 0.106652, 0, 0.453187, 0.878057, 0.100097, 0, 0.469786, 0.877413, 0.0940128, 0, 0.486536, 0.87646, 0.0883462, 0, 0.503439, 0.875233, 0.0830924, 0, 0.520498, 0.8737, 0.0781975, 0, 0.537717, 0.871873, 0.07364, 0, 0.555102, 0.86978, 0.0694103, 0, 0.572657, 0.867405, 0.0654696, 0, 0.59039, 0.864751, 0.0617914, 0, 0.608307, 0.861818, 0.0583491, 0, 0.626419, 0.858645, 0.0551443, 0, 0.644733, 0.855307, 0.0521894, 0, 0.663264, 0.851736, 0.0494334, 0, 0.682025, 0.847927, 0.0468504, 0, 0.701032, 0.843888, 0.0444261, 0, 0.720308, 0.839629, 0.0421497, 0, 0.739875, 0.835158, 0.0400082, 0, 0.759764, 0.830509, 0.0380076, 0, 0.780014, 0.825714, 0.0361488, 0, 0.800673, 0.820729, 0.0343956, 0, 0.821803, 0.815751, 0.0327781, 0, 0.843492, 0.810752, 0.031275, 0, 0.86586, 0.805587, 0.0298542, 0, 0.889087, 0.800317, 0.0285397, 0, 0.913466, 0.79489, 0.0272948, 0, 0.93952, 0.789314, 0.0261139, 0, 0.96835, 0.783593, 0.0249938, 0, 1, 1, 0.724258, 0, 0, 0.999992, 0.724243, 0, 0.000726889, 0.99987, 0.724044, 0, 0.00569574, 0.999336, 0.72317, 0, 0.0131702, 0.996271, 0.719432, 0, 0.0220738, 0.991159, 0.712576, 0, 0.0319405, 0.982465, 0.700927, 0, 0.0425202, 0.97049, 0.684297, 0, 0.0536599, 0.953973, 0.661244, 0, 0.065258, 0.935546, 0.633804, 0, 0.0772427, 0.916596, 0.603071, 0, 0.0895616, 0.899353, 0.57105, 0, 0.102175, 0.885216, 0.539206, 0, 0.11505, 0.875076, 0.508714, 0, 0.128164, 0.868334, 0.479571, 0, 0.141495, 0.864414, 0.451796, 0, 0.155026, 0.862678, 0.425328, 0, 0.168745, 0.862835, 0.400352, 0, 0.182639, 0.864067, 0.376532, 0, 0.196699, 0.866086, 0.35391, 0, 0.210915, 0.868557, 0.332424, 0, 0.225282, 0.871271, 0.312053, 0, 0.239792, 0.874058, 0.292764, 0, 0.25444, 0.8768, 0.27453, 0, 0.269223, 0.87939, 0.257297, 0, 0.284135, 0.8819, 0.24114, 0, 0.299174, 0.884187, 0.225934, 0, 0.314337, 0.886262, 0.211669, 0, 0.329622, 0.888119, 0.198311, 0, 0.345026, 0.889709, 0.185783, 0, 0.360549, 0.891054, 0.174063, 0, 0.376189, 0.892196, 0.163143, 0, 0.391946, 0.893101, 0.152952, 0, 0.407819, 0.893803, 0.143475, 0, 0.423808, 0.894277, 0.134647, 0, 0.439914, 0.894532, 0.126434, 0, 0.456137, 0.894576, 0.1188, 0, 0.472479, 0.894393, 0.111694, 0, 0.48894, 0.893976, 0.105069, 0, 0.505523, 0.893346, 0.0989077, 0, 0.52223, 0.892502, 0.0931724, 0, 0.539064, 0.891441, 0.0878276, 0, 0.556028, 0.890276, 0.082903, 0, 0.573125, 0.888972, 0.0783505, 0, 0.590361, 0.887469, 0.0741083, 0, 0.607741, 0.885785, 0.0701633, 0, 0.62527, 0.883914, 0.0664835, 0, 0.642957, 0.881872, 0.0630567, 0, 0.660809, 0.879651, 0.0598527, 0, 0.678836, 0.877267, 0.0568615, 0, 0.69705, 0.874717, 0.05406, 0, 0.715465, 0.872012, 0.0514378, 0, 0.734098, 0.869157, 0.0489805, 0, 0.752968, 0.866155, 0.0466727, 0, 0.772101, 0.863014, 0.0445056, 0, 0.791529, 0.859748, 0.0424733, 0, 0.81129, 0.856416, 0.0405957, 0, 0.831438, 0.852958, 0.0388273, 0, 0.852044, 0.849382, 0.0371619, 0, 0.87321, 0.845694, 0.0355959, 0, 0.89509, 0.841893, 0.0341155, 0, 0.917932, 0.837981, 0.0327141, 0, 0.942204, 0.833963, 0.0313856, 0, 0.968981, 0.829847, 0.0301275, 0, 1, 1, 0.85214, 0, 0, 0.999969, 0.852095, 0, 0.00279627, 0.999483, 0.851408, 0, 0.0107635, 0.994545, 0.84579, 0, 0.0206454, 0.986188, 0.835231, 0, 0.0315756, 0.969847, 0.814687, 0, 0.0432021, 0.945951, 0.783735, 0, 0.0553396, 0.91917, 0.746074, 0, 0.0678766, 0.895488, 0.706938, 0, 0.0807395, 0.878232, 0.669534, 0, 0.0938767, 0.868252, 0.635168, 0, 0.10725, 0.863873, 0.603069, 0, 0.120832, 0.863369, 0.572514, 0, 0.134598, 0.86545, 0.543169, 0, 0.148533, 0.868803, 0.514578, 0, 0.16262, 0.872794, 0.486762, 0, 0.176849, 0.87702, 0.459811, 0, 0.19121, 0.881054, 0.433654, 0, 0.205694, 0.884974, 0.408574, 0, 0.220294, 0.888587, 0.384525, 0, 0.235005, 0.891877, 0.36156, 0, 0.24982, 0.894793, 0.339661, 0, 0.264737, 0.89743, 0.318913, 0, 0.279751, 0.899796, 0.299302, 0, 0.294859, 0.901943, 0.280843, 0, 0.310058, 0.903858, 0.263481, 0, 0.325346, 0.905574, 0.247197, 0, 0.340721, 0.907069, 0.231915, 0, 0.356181, 0.908379, 0.217614, 0, 0.371725, 0.90952, 0.20425, 0, 0.387353, 0.910483, 0.191758, 0, 0.403063, 0.91128, 0.180092, 0, 0.418854, 0.911936, 0.169222, 0, 0.434727, 0.912454, 0.159098, 0, 0.450682, 0.912835, 0.149668, 0, 0.466718, 0.913078, 0.140884, 0, 0.482837, 0.913192, 0.132709, 0, 0.499038, 0.913175, 0.125095, 0, 0.515324, 0.91304, 0.118012, 0, 0.531695, 0.912781, 0.111417, 0, 0.548153, 0.91241, 0.105281, 0, 0.5647, 0.911924, 0.0995691, 0, 0.581338, 0.911331, 0.0942531, 0, 0.59807, 0.910637, 0.0893076, 0, 0.6149, 0.90984, 0.0846998, 0, 0.63183, 0.908941, 0.0804044, 0, 0.648865, 0.907944, 0.0763984, 0, 0.666011, 0.906857, 0.0726638, 0, 0.683273, 0.90568, 0.0691783, 0, 0.700659, 0.904416, 0.0659222, 0, 0.718176, 0.903067, 0.0628782, 0, 0.735834, 0.901637, 0.0600307, 0, 0.753646, 0.900128, 0.0573647, 0, 0.771625, 0.898544, 0.0548668, 0, 0.78979, 0.89689, 0.052527, 0, 0.808162, 0.895165, 0.0503306, 0, 0.826771, 0.893371, 0.0482668, 0, 0.845654, 0.891572, 0.0463605, 0, 0.864863, 0.889763, 0.0445998, 0, 0.884472, 0.887894, 0.0429451, 0, 0.904592, 0.885967, 0.0413884, 0, 0.925407, 0.883984, 0.0399225, 0, 0.947271, 0.881945, 0.0385405, 0, 0.97105, 0.879854, 0.0372362, 0, 1, 0.999804, 0.995833, 0, 0, 0.938155, 0.933611, 0, 0.0158731, 0.864755, 0.854311, 0, 0.0317461, 0.888594, 0.865264, 0, 0.0476191, 0.905575, 0.863922, 0, 0.0634921, 0.915125, 0.850558, 0, 0.0793651, 0.920665, 0.829254, 0, 0.0952381, 0.924073, 0.802578, 0, 0.111111, 0.926304, 0.772211, 0, 0.126984, 0.927829, 0.739366, 0, 0.142857, 0.928924, 0.705033, 0, 0.15873, 0.92973, 0.670019, 0, 0.174603, 0.930339, 0.634993, 0, 0.190476, 0.930811, 0.600485, 0, 0.206349, 0.931191, 0.566897, 0, 0.222222, 0.93149, 0.534485, 0, 0.238095, 0.931737, 0.503429, 0, 0.253968, 0.931939, 0.473811, 0, 0.269841, 0.932108, 0.445668, 0, 0.285714, 0.93225, 0.418993, 0, 0.301587, 0.932371, 0.393762, 0, 0.31746, 0.932474, 0.369939, 0, 0.333333, 0.932562, 0.347479, 0, 0.349206, 0.932638, 0.326336, 0, 0.365079, 0.932703, 0.306462, 0, 0.380952, 0.93276, 0.287805, 0, 0.396825, 0.932809, 0.270313, 0, 0.412698, 0.932851, 0.253933, 0, 0.428571, 0.932887, 0.23861, 0, 0.444444, 0.932917, 0.224289, 0, 0.460317, 0.932943, 0.210917, 0, 0.47619, 0.932965, 0.19844, 0, 0.492063, 0.932982, 0.186807, 0, 0.507937, 0.932995, 0.175966, 0, 0.52381, 0.933005, 0.165869, 0, 0.539683, 0.933011, 0.156468, 0, 0.555556, 0.933013, 0.147719, 0, 0.571429, 0.933013, 0.139579, 0, 0.587302, 0.93301, 0.132007, 0, 0.603175, 0.933004, 0.124965, 0, 0.619048, 0.932994, 0.118416, 0, 0.634921, 0.932982, 0.112326, 0, 0.650794, 0.932968, 0.106663, 0, 0.666667, 0.93295, 0.101397, 0, 0.68254, 0.932931, 0.0964993, 0, 0.698413, 0.932908, 0.0919438, 0, 0.714286, 0.932883, 0.0877057, 0, 0.730159, 0.932856, 0.0837623, 0, 0.746032, 0.932827, 0.0800921, 0, 0.761905, 0.932796, 0.0766754, 0, 0.777778, 0.932762, 0.0734936, 0, 0.793651, 0.932727, 0.0705296, 0, 0.809524, 0.932689, 0.0677676, 0, 0.825397, 0.93265, 0.0651929, 0, 0.84127, 0.932609, 0.0627917, 0, 0.857143, 0.932565, 0.0605515, 0, 0.873016, 0.932521, 0.0584606, 0, 0.888889, 0.932474, 0.0565082, 0, 0.904762, 0.932427, 0.0546841, 0, 0.920635, 0.932377, 0.0529793, 0, 0.936508, 0.932326, 0.0513851, 0, 0.952381, 0.932274, 0.0498936, 0, 0.968254, 0.93222, 0.0484975, 0, 0.984127, 0.932164, 0.0471899, 0, 1 ];\n\n\t\t// data textures\n\n\t\tconst ltc_float_1 = new Float32Array( LTC_MAT_1 );\n\t\tconst ltc_float_2 = new Float32Array( LTC_MAT_2 );\n\n\t\tconst LTC_FLOAT_1 = new DataTexture( ltc_float_1, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\t\tconst LTC_FLOAT_2 = new DataTexture( ltc_float_2, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\n\t\tLTC_FLOAT_1.needsUpdate = true;\n\t\tLTC_FLOAT_2.needsUpdate = true;\n\n\t\tconst ltc_half_1 = new Uint16Array( LTC_MAT_1.length );\n\n\t\tLTC_MAT_1.forEach( function ( x, index ) {\n\n\t\t\tltc_half_1[ index ] = DataUtils.toHalfFloat( x );\n\n\t\t} );\n\n\t\tconst ltc_half_2 = new Uint16Array( LTC_MAT_2.length );\n\n\t\tLTC_MAT_2.forEach( function ( x, index ) {\n\n\t\t\tltc_half_2[ index ] = DataUtils.toHalfFloat( x );\n\n\t\t} );\n\n\t\tconst LTC_HALF_1 = new DataTexture( ltc_half_1, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\t\tconst LTC_HALF_2 = new DataTexture( ltc_half_2, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\n\t\tLTC_HALF_1.needsUpdate = true;\n\t\tLTC_HALF_2.needsUpdate = true;\n\n\t\tthis.LTC_HALF_1 = LTC_HALF_1;\n\t\tthis.LTC_HALF_1 = LTC_HALF_2;\n\n\t\tthis.LTC_FLOAT_1 = LTC_FLOAT_1;\n\t\tthis.LTC_FLOAT_2 = LTC_FLOAT_2;\n\n\t\treturn this;\n\n\t}\n\n}\n\nRectAreaLightTexturesLib.LTC_HALF_1 = null;\nRectAreaLightTexturesLib.LTC_HALF_1 = null;\n\nRectAreaLightTexturesLib.LTC_FLOAT_1 = null;\nRectAreaLightTexturesLib.LTC_FLOAT_2 = null;\n\nexport { RectAreaLightTexturesLib };\n", "import { UniformsLib } from 'three';\nimport { RectAreaLightTexturesLib } from './RectAreaLightTexturesLib.js';\n\nclass RectAreaLightUniformsLib {\n\n\tstatic init() {\n\n\t\tRectAreaLightTexturesLib.init();\n\n\t\tconst { LTC_FLOAT_1, LTC_FLOAT_2, LTC_HALF_1, LTC_HALF_2 } = RectAreaLightTexturesLib;\n\n\t\t// data textures\n\n\t\tUniformsLib.LTC_FLOAT_1 = LTC_FLOAT_1;\n\t\tUniformsLib.LTC_FLOAT_2 = LTC_FLOAT_2;\n\n\t\tUniformsLib.LTC_HALF_1 = LTC_HALF_1;\n\t\tUniformsLib.LTC_HALF_2 = LTC_HALF_2;\n\n\t}\n\n}\n\nexport { RectAreaLightUniformsLib };\n", "import {\n\tBox3,\n\tFloat32BufferAttribute,\n\tInstancedBufferGeometry,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tSphere,\n\tVector3,\n\tWireframeGeometry\n} from 'three';\n\nconst _box = new Box3();\nconst _vector = new Vector3();\n\nclass LineSegmentsGeometry extends InstancedBufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isLineSegmentsGeometry = true;\n\n\t\tthis.type = 'LineSegmentsGeometry';\n\n\t\tconst positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\t\tconst uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\n\t\tconst index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\n\n\t\tthis.setIndex( index );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined ) {\n\n\t\t\tstart.applyMatrix4( matrix );\n\n\t\t\tend.applyMatrix4( matrix );\n\n\t\t\tstart.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetPositions( array ) {\n\n\t\tlet lineSegments;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tlineSegments = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tlineSegments = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\n\n\t\tthis.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\n\t\tthis.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\n\n\t\t//\n\n\t\tthis.computeBoundingBox();\n\t\tthis.computeBoundingSphere();\n\n\t\treturn this;\n\n\t}\n\n\tsetColors( array ) {\n\n\t\tlet colors;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tcolors = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tcolors = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\n\n\t\tthis.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\n\t\tthis.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\n\n\t\treturn this;\n\n\t}\n\n\tfromWireframeGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromEdgesGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromMesh( mesh ) {\n\n\t\tthis.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) );\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tfromLineSegments( lineSegments ) {\n\n\t\tconst geometry = lineSegments.geometry;\n\n\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( start );\n\n\t\t\t_box.setFromBufferAttribute( end );\n\n\t\t\tthis.boundingBox.union( _box );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\tthis.boundingBox.getCenter( center );\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = start.count; i < il; i ++ ) {\n\n\t\t\t\t_vector.fromBufferAttribute( start, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t\t_vector.fromBufferAttribute( end, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\t// todo\n\n\t}\n\n\tapplyMatrix( matrix ) {\n\n\t\tconsole.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' );\n\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n}\n\nexport { LineSegmentsGeometry };\n", "import {\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2,\n} from 'three';\n\nUniformsLib.line = {\n\n\tworldUnits: { value: 1 },\n\tlinewidth: { value: 1 },\n\tresolution: { value: new Vector2( 1, 1 ) },\n\tdashOffset: { value: 0 },\n\tdashScale: { value: 1 },\n\tdashSize: { value: 1 },\n\tgapSize: { value: 1 } // todo FIX - maybe change to totalSize\n\n};\n\nShaderLib[ 'line' ] = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.line\n\t] ),\n\n\tvertexShader:\n\t/* glsl */`\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tworldStart = start.xyz;\n\t\t\t\tworldEnd = end.xyz;\n\n\t\t\t#else\n\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\t\tvec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );\n\t\t\t\tvec3 worldUp = normalize( cross( worldDir, tmpFwd ) );\n\t\t\t\tvec3 worldFwd = cross( worldDir, worldUp );\n\t\t\t\tworldPos = position.y < 0.5 ? start: end;\n\n\t\t\t\t// height offset\n\t\t\t\tfloat hw = linewidth * 0.5;\n\t\t\t\tworldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp;\n\n\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t// won't be rendering the endcaps\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t// cap extension\n\t\t\t\t\tworldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir;\n\n\t\t\t\t\t// add width to the box\n\t\t\t\t\tworldPos.xyz += worldFwd * hw;\n\n\t\t\t\t\t// endcaps\n\t\t\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\t\t\tworldPos.xyz -= worldFwd * 2.0 * hw;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t\t// project the worldpos\n\t\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t// segments overlap neatly\n\t\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\t#else\n\n\t\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\tdir.x /= aspect;\n\t\t\t\toffset.x /= aspect;\n\n\t\t\t\t// sign flip\n\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t// endcaps\n\t\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\t\toffset += - dir;\n\n\t\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\t\toffset += dir;\n\n\t\t\t\t}\n\n\t\t\t\t// adjust for linewidth\n\t\t\t\toffset *= linewidth;\n\n\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\toffset /= resolution.y;\n\n\t\t\t\t// select end\n\t\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t\t// back to clip space\n\t\t\t\toffset *= clip.w;\n\n\t\t\t\tclip.xy += offset;\n\n\t\t\t#endif\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}\n\t\t`,\n\n\tfragmentShader:\n\t/* glsl */`\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\t\tuniform float linewidth;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float dashSize;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\tfloat mua;\n\t\t\tfloat mub;\n\n\t\t\tvec3 p13 = p1 - p3;\n\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\tmua = numer / denom;\n\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\treturn vec2( mua, mub );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tfloat alpha = opacity;\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\t\tvec3 delta = p1 - p2;\n\t\t\t\tfloat len = length( delta );\n\t\t\t\tfloat norm = len / linewidth;\n\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\tfloat dnorm = fwidth( norm );\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tif ( norm > 0.5 ) {\n\n\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#endif\n\n\t\t\t#else\n\n\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\tfloat len2 = a * a + b * b;\n\t\t\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t#else\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, alpha );\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}\n\t\t`\n};\n\nclass LineMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( {\n\n\t\t\ttype: 'LineMaterial',\n\n\t\t\tuniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ),\n\n\t\t\tvertexShader: ShaderLib[ 'line' ].vertexShader,\n\t\t\tfragmentShader: ShaderLib[ 'line' ].fragmentShader,\n\n\t\t\tclipping: true // required for clipping support\n\n\t\t} );\n\n\t\tthis.isLineMaterial = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget color() {\n\n\t\treturn this.uniforms.diffuse.value;\n\n\t}\n\n\tset color( value ) {\n\n\t\tthis.uniforms.diffuse.value = value;\n\n\t}\n\n\tget worldUnits() {\n\n\t\treturn 'WORLD_UNITS' in this.defines;\n\n\t}\n\n\tset worldUnits( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.WORLD_UNITS = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.WORLD_UNITS;\n\n\t\t}\n\n\t}\n\n\tget linewidth() {\n\n\t\treturn this.uniforms.linewidth.value;\n\n\t}\n\n\tset linewidth( value ) {\n\n\t\tif ( ! this.uniforms.linewidth ) return;\n\t\tthis.uniforms.linewidth.value = value;\n\n\t}\n\n\tget dashed() {\n\n\t\treturn 'USE_DASH' in this.defines;\n\n\t}\n\n\tset dashed( value ) {\n\n\t\tif ( ( value === true ) !== this.dashed ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_DASH = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_DASH;\n\n\t\t}\n\n\t}\n\n\tget dashScale() {\n\n\t\treturn this.uniforms.dashScale.value;\n\n\t}\n\n\tset dashScale( value ) {\n\n\t\tthis.uniforms.dashScale.value = value;\n\n\t}\n\n\tget dashSize() {\n\n\t\treturn this.uniforms.dashSize.value;\n\n\t}\n\n\tset dashSize( value ) {\n\n\t\tthis.uniforms.dashSize.value = value;\n\n\t}\n\n\tget dashOffset() {\n\n\t\treturn this.uniforms.dashOffset.value;\n\n\t}\n\n\tset dashOffset( value ) {\n\n\t\tthis.uniforms.dashOffset.value = value;\n\n\t}\n\n\tget gapSize() {\n\n\t\treturn this.uniforms.gapSize.value;\n\n\t}\n\n\tset gapSize( value ) {\n\n\t\tthis.uniforms.gapSize.value = value;\n\n\t}\n\n\tget opacity() {\n\n\t\treturn this.uniforms.opacity.value;\n\n\t}\n\n\tset opacity( value ) {\n\n\t\tif ( ! this.uniforms ) return;\n\t\tthis.uniforms.opacity.value = value;\n\n\t}\n\n\tget resolution() {\n\n\t\treturn this.uniforms.resolution.value;\n\n\t}\n\n\tset resolution( value ) {\n\n\t\tthis.uniforms.resolution.value.copy( value );\n\n\t}\n\n\tget alphaToCoverage() {\n\n\t\treturn 'USE_ALPHA_TO_COVERAGE' in this.defines;\n\n\t}\n\n\tset alphaToCoverage( value ) {\n\n\t\tif ( ! this.defines ) return;\n\n\t\tif ( ( value === true ) !== this.alphaToCoverage ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_ALPHA_TO_COVERAGE = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_ALPHA_TO_COVERAGE;\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineMaterial };\n", "import {\n\tBox3,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tLine3,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tSphere,\n\tVector3,\n\tVector4\n} from 'three';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nconst _viewport = new Vector4();\n\nconst _start = new Vector3();\nconst _end = new Vector3();\n\nconst _start4 = new Vector4();\nconst _end4 = new Vector4();\n\nconst _ssOrigin = new Vector4();\nconst _ssOrigin3 = new Vector3();\nconst _mvMatrix = new Matrix4();\nconst _line = new Line3();\nconst _closestPoint = new Vector3();\n\nconst _box = new Box3();\nconst _sphere = new Sphere();\nconst _clipToWorldVector = new Vector4();\n\nlet _ray, _lineWidth;\n\n// Returns the margin required to expand by in world space given the distance from the camera,\n// line width, resolution, and camera projection\nfunction getWorldSpaceHalfWidth( camera, distance, resolution ) {\n\n\t// transform into clip space, adjust the x and y values by the pixel width offset, then\n\t// transform back into world space to get world offset. Note clip space is [-1, 1] so full\n\t// width does not need to be halved.\n\t_clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\t_clipToWorldVector.x = _lineWidth / resolution.width;\n\t_clipToWorldVector.y = _lineWidth / resolution.height;\n\t_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\n\treturn Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );\n\n}\n\nfunction raycastWorldUnits( lineSegments, intersects ) {\n\n\tconst matrixWorld = lineSegments.matrixWorld;\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t_line.applyMatrix4( matrixWorld );\n\n\t\tconst pointOnLine = new Vector3();\n\t\tconst point = new Vector3();\n\n\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\t\tconst isInside = point.distanceTo( pointOnLine ) < _lineWidth * 0.5;\n\n\t\tif ( isInside ) {\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint,\n\t\t\t\tpointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nfunction raycastScreenSpace( lineSegments, camera, intersects ) {\n\n\tconst projectionMatrix = camera.projectionMatrix;\n\tconst material = lineSegments.material;\n\tconst resolution = material.resolution;\n\tconst matrixWorld = lineSegments.matrixWorld;\n\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tconst near = - camera.near;\n\n\t//\n\n\t// pick a point 1 unit out along the ray to avoid the ray origin\n\t// sitting at the camera origin which will cause \"w\" to be 0 when\n\t// applying the projection matrix.\n\t_ray.at( 1, _ssOrigin );\n\n\t// ndc space [ - 1.0, 1.0 ]\n\t_ssOrigin.w = 1;\n\t_ssOrigin.applyMatrix4( camera.matrixWorldInverse );\n\t_ssOrigin.applyMatrix4( projectionMatrix );\n\t_ssOrigin.multiplyScalar( 1 / _ssOrigin.w );\n\n\t// screen space\n\t_ssOrigin.x *= resolution.x / 2;\n\t_ssOrigin.y *= resolution.y / 2;\n\t_ssOrigin.z = 0;\n\n\t_ssOrigin3.copy( _ssOrigin );\n\n\t_mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_start4.fromBufferAttribute( instanceStart, i );\n\t\t_end4.fromBufferAttribute( instanceEnd, i );\n\n\t\t_start4.w = 1;\n\t\t_end4.w = 1;\n\n\t\t// camera space\n\t\t_start4.applyMatrix4( _mvMatrix );\n\t\t_end4.applyMatrix4( _mvMatrix );\n\n\t\t// skip the segment if it's entirely behind the camera\n\t\tconst isBehindCameraNear = _start4.z > near && _end4.z > near;\n\t\tif ( isBehindCameraNear ) {\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\t// trim the segment if it extends behind camera near\n\t\tif ( _start4.z > near ) {\n\n\t\t\tconst deltaDist = _start4.z - _end4.z;\n\t\t\tconst t = ( _start4.z - near ) / deltaDist;\n\t\t\t_start4.lerp( _end4, t );\n\n\t\t} else if ( _end4.z > near ) {\n\n\t\t\tconst deltaDist = _end4.z - _start4.z;\n\t\t\tconst t = ( _end4.z - near ) / deltaDist;\n\t\t\t_end4.lerp( _start4, t );\n\n\t\t}\n\n\t\t// clip space\n\t\t_start4.applyMatrix4( projectionMatrix );\n\t\t_end4.applyMatrix4( projectionMatrix );\n\n\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t_start4.multiplyScalar( 1 / _start4.w );\n\t\t_end4.multiplyScalar( 1 / _end4.w );\n\n\t\t// screen space\n\t\t_start4.x *= resolution.x / 2;\n\t\t_start4.y *= resolution.y / 2;\n\n\t\t_end4.x *= resolution.x / 2;\n\t\t_end4.y *= resolution.y / 2;\n\n\t\t// create 2d segment\n\t\t_line.start.copy( _start4 );\n\t\t_line.start.z = 0;\n\n\t\t_line.end.copy( _end4 );\n\t\t_line.end.z = 0;\n\n\t\t// get closest point on ray to segment\n\t\tconst param = _line.closestPointToPointParameter( _ssOrigin3, true );\n\t\t_line.at( param, _closestPoint );\n\n\t\t// check if the intersection point is within clip space\n\t\tconst zPos = MathUtils.lerp( _start4.z, _end4.z, param );\n\t\tconst isInClipSpace = zPos >= - 1 && zPos <= 1;\n\n\t\tconst isInside = _ssOrigin3.distanceTo( _closestPoint ) < _lineWidth * 0.5;\n\n\t\tif ( isInClipSpace && isInside ) {\n\n\t\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t_line.start.applyMatrix4( matrixWorld );\n\t\t\t_line.end.applyMatrix4( matrixWorld );\n\n\t\t\tconst pointOnLine = new Vector3();\n\t\t\tconst point = new Vector3();\n\n\t\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint: point,\n\t\t\t\tpointOnLine: pointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nclass LineSegments2 extends Mesh {\n\n\tconstructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments2 = true;\n\n\t\tthis.type = 'LineSegments2';\n\n\t}\n\n\t// for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst instanceStart = geometry.attributes.instanceStart;\n\t\tconst instanceEnd = geometry.attributes.instanceEnd;\n\t\tconst lineDistances = new Float32Array( 2 * instanceStart.count );\n\n\t\tfor ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {\n\n\t\t\t_start.fromBufferAttribute( instanceStart, i );\n\t\t\t_end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );\n\n\t\t}\n\n\t\tconst instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst worldUnits = this.material.worldUnits;\n\t\tconst camera = raycaster.camera;\n\n\t\tif ( camera === null && ! worldUnits ) {\n\n\t\t\tconsole.error( 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.' );\n\n\t\t}\n\n\t\tconst threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;\n\n\t\t_ray = raycaster.ray;\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\t_lineWidth = material.linewidth + threshold;\n\n\t\t// check if we intersect the sphere bounds\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\t_sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );\n\n\t\t// increase the sphere bounds by the worst case line screen space width\n\t\tlet sphereMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tsphereMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) );\n\t\t\tsphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, material.resolution );\n\n\t\t}\n\n\t\t_sphere.radius += sphereMargin;\n\n\t\tif ( _ray.intersectsSphere( _sphere ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// check if we intersect the box bounds\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\t_box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );\n\n\t\t// increase the box bounds by the worst case line width\n\t\tlet boxMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tboxMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) );\n\t\t\tboxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, material.resolution );\n\n\t\t}\n\n\t\t_box.expandByScalar( boxMargin );\n\n\t\tif ( _ray.intersectsBox( _box ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( worldUnits ) {\n\n\t\t\traycastWorldUnits( this, intersects );\n\n\t\t} else {\n\n\t\t\traycastScreenSpace( this, camera, intersects );\n\n\t\t}\n\n\t}\n\n\tonBeforeRender( renderer ) {\n\n\t\tconst uniforms = this.material.uniforms;\n\n\t\tif ( uniforms && uniforms.resolution ) {\n\n\t\t\trenderer.getViewport( _viewport );\n\t\t\tthis.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineSegments2 };\n", "import { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\n\nclass LineGeometry extends LineSegmentsGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isLineGeometry = true;\n\n\t\tthis.type = 'LineGeometry';\n\n\t}\n\n\tsetPositions( array ) {\n\n\t\t// converts [ x1, y1, z1, x2, y2, z2, ... ] to pairs format\n\n\t\tconst length = array.length - 3;\n\t\tconst points = new Float32Array( 2 * length );\n\n\t\tfor ( let i = 0; i < length; i += 3 ) {\n\n\t\t\tpoints[ 2 * i ] = array[ i ];\n\t\t\tpoints[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tpoints[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tpoints[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tpoints[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tpoints[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tsuper.setPositions( points );\n\n\t\treturn this;\n\n\t}\n\n\tsetColors( array ) {\n\n\t\t// converts [ r1, g1, b1, r2, g2, b2, ... ] to pairs format\n\n\t\tconst length = array.length - 3;\n\t\tconst colors = new Float32Array( 2 * length );\n\n\t\tfor ( let i = 0; i < length; i += 3 ) {\n\n\t\t\tcolors[ 2 * i ] = array[ i ];\n\t\t\tcolors[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tcolors[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tcolors[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tcolors[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tcolors[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tsuper.setColors( colors );\n\n\t\treturn this;\n\n\t}\n\n\tfromLine( line ) {\n\n\t\tconst geometry = line.geometry;\n\n\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { LineGeometry };\n", "import { LineSegments2 } from '../lines/LineSegments2.js';\nimport { LineGeometry } from '../lines/LineGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nclass Line2 extends LineSegments2 {\n\n\tconstructor( geometry = new LineGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLine2 = true;\n\n\t\tthis.type = 'Line2';\n\n\t}\n\n}\n\nexport { Line2 };\n", "import {\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tMesh,\n\tVector3,\n\tVector4\n} from 'three';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nconst _start = new Vector3();\nconst _end = new Vector3();\nconst _viewport = new Vector4();\n\nclass Wireframe extends Mesh {\n\n\tconstructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isWireframe = true;\n\n\t\tthis.type = 'Wireframe';\n\n\t}\n\n\t// for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst instanceStart = geometry.attributes.instanceStart;\n\t\tconst instanceEnd = geometry.attributes.instanceEnd;\n\t\tconst lineDistances = new Float32Array( 2 * instanceStart.count );\n\n\t\tfor ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {\n\n\t\t\t_start.fromBufferAttribute( instanceStart, i );\n\t\t\t_end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );\n\n\t\t}\n\n\t\tconst instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\treturn this;\n\n\t}\n\n\tonBeforeRender( renderer ) {\n\n\t\tconst uniforms = this.material.uniforms;\n\n\t\tif ( uniforms && uniforms.resolution ) {\n\n\t\t\trenderer.getViewport( _viewport );\n\t\t\tthis.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );\n\n\t\t}\n\n\t}\n\n}\n\nexport { Wireframe };\n", "import {\n\tWireframeGeometry\n} from 'three';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\n\nclass WireframeGeometry2 extends LineSegmentsGeometry {\n\n\tconstructor( geometry ) {\n\n\t\tsuper();\n\n\t\tthis.isWireframeGeometry2 = true;\n\n\t\tthis.type = 'WireframeGeometry2';\n\n\t\tthis.fromWireframeGeometry( new WireframeGeometry( geometry ) );\n\n\t\t// set colors, maybe\n\n\t}\n\n}\n\nexport { WireframeGeometry2 };\n", "import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tNoColorSpace,\n\tLinearFilter,\n\tLinearSRGBColorSpace,\n\tRedFormat,\n\tRGBAFormat\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\n/**\n * OpenEXR loader currently supports uncompressed, ZIP(S), RLE, PIZ and DWA/B compression.\n * Supports reading as UnsignedByte, HalfFloat and Float type data texture.\n *\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation, so I have preserved their copyright notices.\n */\n\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n\n// // End of OpenEXR license -------------------------------------------------\n\nclass EXRLoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst USHORT_RANGE = ( 1 << 16 );\n\t\tconst BITMAP_SIZE = ( USHORT_RANGE >> 3 );\n\n\t\tconst HUF_ENCBITS = 16; // literal (value) bit length\n\t\tconst HUF_DECBITS = 14; // decoding bit size (>= 8)\n\n\t\tconst HUF_ENCSIZE = ( 1 << HUF_ENCBITS ) + 1; // encoding table size\n\t\tconst HUF_DECSIZE = 1 << HUF_DECBITS; // decoding table size\n\t\tconst HUF_DECMASK = HUF_DECSIZE - 1;\n\n\t\tconst NBITS = 16;\n\t\tconst A_OFFSET = 1 << ( NBITS - 1 );\n\t\tconst MOD_MASK = ( 1 << NBITS ) - 1;\n\n\t\tconst SHORT_ZEROCODE_RUN = 59;\n\t\tconst LONG_ZEROCODE_RUN = 63;\n\t\tconst SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;\n\n\t\tconst ULONG_SIZE = 8;\n\t\tconst FLOAT32_SIZE = 4;\n\t\tconst INT32_SIZE = 4;\n\t\tconst INT16_SIZE = 2;\n\t\tconst INT8_SIZE = 1;\n\n\t\tconst STATIC_HUFFMAN = 0;\n\t\tconst DEFLATE = 1;\n\n\t\tconst UNKNOWN = 0;\n\t\tconst LOSSY_DCT = 1;\n\t\tconst RLE = 2;\n\n\t\tconst logBase = Math.pow( 2.7182818, 2.2 );\n\n\t\tfunction reverseLutFromBitmap( bitmap, lut ) {\n\n\t\t\tlet k = 0;\n\n\t\t\tfor ( let i = 0; i < USHORT_RANGE; ++ i ) {\n\n\t\t\t\tif ( ( i == 0 ) || ( bitmap[ i >> 3 ] & ( 1 << ( i & 7 ) ) ) ) {\n\n\t\t\t\t\tlut[ k ++ ] = i;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst n = k - 1;\n\n\t\t\twhile ( k < USHORT_RANGE ) lut[ k ++ ] = 0;\n\n\t\t\treturn n;\n\n\t\t}\n\n\t\tfunction hufClearDecTable( hdec ) {\n\n\t\t\tfor ( let i = 0; i < HUF_DECSIZE; i ++ ) {\n\n\t\t\t\thdec[ i ] = {};\n\t\t\t\thdec[ i ].len = 0;\n\t\t\t\thdec[ i ].lit = 0;\n\t\t\t\thdec[ i ].p = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst getBitsReturn = { l: 0, c: 0, lc: 0 };\n\n\t\tfunction getBits( nBits, c, lc, uInt8Array, inOffset ) {\n\n\t\t\twhile ( lc < nBits ) {\n\n\t\t\t\tc = ( c << 8 ) | parseUint8Array( uInt8Array, inOffset );\n\t\t\t\tlc += 8;\n\n\t\t\t}\n\n\t\t\tlc -= nBits;\n\n\t\t\tgetBitsReturn.l = ( c >> lc ) & ( ( 1 << nBits ) - 1 );\n\t\t\tgetBitsReturn.c = c;\n\t\t\tgetBitsReturn.lc = lc;\n\n\t\t}\n\n\t\tconst hufTableBuffer = new Array( 59 );\n\n\t\tfunction hufCanonicalCodeTable( hcode ) {\n\n\t\t\tfor ( let i = 0; i <= 58; ++ i ) hufTableBuffer[ i ] = 0;\n\t\t\tfor ( let i = 0; i < HUF_ENCSIZE; ++ i ) hufTableBuffer[ hcode[ i ] ] += 1;\n\n\t\t\tlet c = 0;\n\n\t\t\tfor ( let i = 58; i > 0; -- i ) {\n\n\t\t\t\tconst nc = ( ( c + hufTableBuffer[ i ] ) >> 1 );\n\t\t\t\thufTableBuffer[ i ] = c;\n\t\t\t\tc = nc;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < HUF_ENCSIZE; ++ i ) {\n\n\t\t\t\tconst l = hcode[ i ];\n\t\t\t\tif ( l > 0 ) hcode[ i ] = l | ( hufTableBuffer[ l ] ++ << 6 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction hufUnpackEncTable( uInt8Array, inOffset, ni, im, iM, hcode ) {\n\n\t\t\tconst p = inOffset;\n\t\t\tlet c = 0;\n\t\t\tlet lc = 0;\n\n\t\t\tfor ( ; im <= iM; im ++ ) {\n\n\t\t\t\tif ( p.value - inOffset.value > ni ) return false;\n\n\t\t\t\tgetBits( 6, c, lc, uInt8Array, p );\n\n\t\t\t\tconst l = getBitsReturn.l;\n\t\t\t\tc = getBitsReturn.c;\n\t\t\t\tlc = getBitsReturn.lc;\n\n\t\t\t\thcode[ im ] = l;\n\n\t\t\t\tif ( l == LONG_ZEROCODE_RUN ) {\n\n\t\t\t\t\tif ( p.value - inOffset.value > ni ) {\n\n\t\t\t\t\t\tthrow new Error( 'Something wrong with hufUnpackEncTable' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgetBits( 8, c, lc, uInt8Array, p );\n\n\t\t\t\t\tlet zerun = getBitsReturn.l + SHORTEST_LONG_RUN;\n\t\t\t\t\tc = getBitsReturn.c;\n\t\t\t\t\tlc = getBitsReturn.lc;\n\n\t\t\t\t\tif ( im + zerun > iM + 1 ) {\n\n\t\t\t\t\t\tthrow new Error( 'Something wrong with hufUnpackEncTable' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( zerun -- ) hcode[ im ++ ] = 0;\n\n\t\t\t\t\tim --;\n\n\t\t\t\t} else if ( l >= SHORT_ZEROCODE_RUN ) {\n\n\t\t\t\t\tlet zerun = l - SHORT_ZEROCODE_RUN + 2;\n\n\t\t\t\t\tif ( im + zerun > iM + 1 ) {\n\n\t\t\t\t\t\tthrow new Error( 'Something wrong with hufUnpackEncTable' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( zerun -- ) hcode[ im ++ ] = 0;\n\n\t\t\t\t\tim --;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thufCanonicalCodeTable( hcode );\n\n\t\t}\n\n\t\tfunction hufLength( code ) {\n\n\t\t\treturn code & 63;\n\n\t\t}\n\n\t\tfunction hufCode( code ) {\n\n\t\t\treturn code >> 6;\n\n\t\t}\n\n\t\tfunction hufBuildDecTable( hcode, im, iM, hdecod ) {\n\n\t\t\tfor ( ; im <= iM; im ++ ) {\n\n\t\t\t\tconst c = hufCode( hcode[ im ] );\n\t\t\t\tconst l = hufLength( hcode[ im ] );\n\n\t\t\t\tif ( c >> l ) {\n\n\t\t\t\t\tthrow new Error( 'Invalid table entry' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( l > HUF_DECBITS ) {\n\n\t\t\t\t\tconst pl = hdecod[ ( c >> ( l - HUF_DECBITS ) ) ];\n\n\t\t\t\t\tif ( pl.len ) {\n\n\t\t\t\t\t\tthrow new Error( 'Invalid table entry' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpl.lit ++;\n\n\t\t\t\t\tif ( pl.p ) {\n\n\t\t\t\t\t\tconst p = pl.p;\n\t\t\t\t\t\tpl.p = new Array( pl.lit );\n\n\t\t\t\t\t\tfor ( let i = 0; i < pl.lit - 1; ++ i ) {\n\n\t\t\t\t\t\t\tpl.p[ i ] = p[ i ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpl.p = new Array( 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpl.p[ pl.lit - 1 ] = im;\n\n\t\t\t\t} else if ( l ) {\n\n\t\t\t\t\tlet plOffset = 0;\n\n\t\t\t\t\tfor ( let i = 1 << ( HUF_DECBITS - l ); i > 0; i -- ) {\n\n\t\t\t\t\t\tconst pl = hdecod[ ( c << ( HUF_DECBITS - l ) ) + plOffset ];\n\n\t\t\t\t\t\tif ( pl.len || pl.p ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'Invalid table entry' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpl.len = l;\n\t\t\t\t\t\tpl.lit = im;\n\n\t\t\t\t\t\tplOffset ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst getCharReturn = { c: 0, lc: 0 };\n\n\t\tfunction getChar( c, lc, uInt8Array, inOffset ) {\n\n\t\t\tc = ( c << 8 ) | parseUint8Array( uInt8Array, inOffset );\n\t\t\tlc += 8;\n\n\t\t\tgetCharReturn.c = c;\n\t\t\tgetCharReturn.lc = lc;\n\n\t\t}\n\n\t\tconst getCodeReturn = { c: 0, lc: 0 };\n\n\t\tfunction getCode( po, rlc, c, lc, uInt8Array, inOffset, outBuffer, outBufferOffset, outBufferEndOffset ) {\n\n\t\t\tif ( po == rlc ) {\n\n\t\t\t\tif ( lc < 8 ) {\n\n\t\t\t\t\tgetChar( c, lc, uInt8Array, inOffset );\n\t\t\t\t\tc = getCharReturn.c;\n\t\t\t\t\tlc = getCharReturn.lc;\n\n\t\t\t\t}\n\n\t\t\t\tlc -= 8;\n\n\t\t\t\tlet cs = ( c >> lc );\n\t\t\t\tcs = new Uint8Array( [ cs ] )[ 0 ];\n\n\t\t\t\tif ( outBufferOffset.value + cs > outBufferEndOffset ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t\tconst s = outBuffer[ outBufferOffset.value - 1 ];\n\n\t\t\t\twhile ( cs -- > 0 ) {\n\n\t\t\t\t\toutBuffer[ outBufferOffset.value ++ ] = s;\n\n\t\t\t\t}\n\n\t\t\t} else if ( outBufferOffset.value < outBufferEndOffset ) {\n\n\t\t\t\toutBuffer[ outBufferOffset.value ++ ] = po;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\tgetCodeReturn.c = c;\n\t\t\tgetCodeReturn.lc = lc;\n\n\t\t}\n\n\t\tfunction UInt16( value ) {\n\n\t\t\treturn ( value & 0xFFFF );\n\n\t\t}\n\n\t\tfunction Int16( value ) {\n\n\t\t\tconst ref = UInt16( value );\n\t\t\treturn ( ref > 0x7FFF ) ? ref - 0x10000 : ref;\n\n\t\t}\n\n\t\tconst wdec14Return = { a: 0, b: 0 };\n\n\t\tfunction wdec14( l, h ) {\n\n\t\t\tconst ls = Int16( l );\n\t\t\tconst hs = Int16( h );\n\n\t\t\tconst hi = hs;\n\t\t\tconst ai = ls + ( hi & 1 ) + ( hi >> 1 );\n\n\t\t\tconst as = ai;\n\t\t\tconst bs = ai - hi;\n\n\t\t\twdec14Return.a = as;\n\t\t\twdec14Return.b = bs;\n\n\t\t}\n\n\t\tfunction wdec16( l, h ) {\n\n\t\t\tconst m = UInt16( l );\n\t\t\tconst d = UInt16( h );\n\n\t\t\tconst bb = ( m - ( d >> 1 ) ) & MOD_MASK;\n\t\t\tconst aa = ( d + bb - A_OFFSET ) & MOD_MASK;\n\n\t\t\twdec14Return.a = aa;\n\t\t\twdec14Return.b = bb;\n\n\t\t}\n\n\t\tfunction wav2Decode( buffer, j, nx, ox, ny, oy, mx ) {\n\n\t\t\tconst w14 = mx < ( 1 << 14 );\n\t\t\tconst n = ( nx > ny ) ? ny : nx;\n\t\t\tlet p = 1;\n\t\t\tlet p2;\n\t\t\tlet py;\n\n\t\t\twhile ( p <= n ) p <<= 1;\n\n\t\t\tp >>= 1;\n\t\t\tp2 = p;\n\t\t\tp >>= 1;\n\n\t\t\twhile ( p >= 1 ) {\n\n\t\t\t\tpy = 0;\n\t\t\t\tconst ey = py + oy * ( ny - p2 );\n\t\t\t\tconst oy1 = oy * p;\n\t\t\t\tconst oy2 = oy * p2;\n\t\t\t\tconst ox1 = ox * p;\n\t\t\t\tconst ox2 = ox * p2;\n\t\t\t\tlet i00, i01, i10, i11;\n\n\t\t\t\tfor ( ; py <= ey; py += oy2 ) {\n\n\t\t\t\t\tlet px = py;\n\t\t\t\t\tconst ex = py + ox * ( nx - p2 );\n\n\t\t\t\t\tfor ( ; px <= ex; px += ox2 ) {\n\n\t\t\t\t\t\tconst p01 = px + ox1;\n\t\t\t\t\t\tconst p10 = px + oy1;\n\t\t\t\t\t\tconst p11 = p10 + ox1;\n\n\t\t\t\t\t\tif ( w14 ) {\n\n\t\t\t\t\t\t\twdec14( buffer[ px + j ], buffer[ p10 + j ] );\n\n\t\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\t\ti10 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec14( buffer[ p01 + j ], buffer[ p11 + j ] );\n\n\t\t\t\t\t\t\ti01 = wdec14Return.a;\n\t\t\t\t\t\t\ti11 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec14( i00, i01 );\n\n\t\t\t\t\t\t\tbuffer[ px + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p01 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec14( i10, i11 );\n\n\t\t\t\t\t\t\tbuffer[ p10 + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p11 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\twdec16( buffer[ px + j ], buffer[ p10 + j ] );\n\n\t\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\t\ti10 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec16( buffer[ p01 + j ], buffer[ p11 + j ] );\n\n\t\t\t\t\t\t\ti01 = wdec14Return.a;\n\t\t\t\t\t\t\ti11 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec16( i00, i01 );\n\n\t\t\t\t\t\t\tbuffer[ px + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p01 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec16( i10, i11 );\n\n\t\t\t\t\t\t\tbuffer[ p10 + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p11 + j ] = wdec14Return.b;\n\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( nx & p ) {\n\n\t\t\t\t\t\tconst p10 = px + oy1;\n\n\t\t\t\t\t\tif ( w14 )\n\t\t\t\t\t\t\twdec14( buffer[ px + j ], buffer[ p10 + j ] );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twdec16( buffer[ px + j ], buffer[ p10 + j ] );\n\n\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\tbuffer[ p10 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\tbuffer[ px + j ] = i00;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ny & p ) {\n\n\t\t\t\t\tlet px = py;\n\t\t\t\t\tconst ex = py + ox * ( nx - p2 );\n\n\t\t\t\t\tfor ( ; px <= ex; px += ox2 ) {\n\n\t\t\t\t\t\tconst p01 = px + ox1;\n\n\t\t\t\t\t\tif ( w14 )\n\t\t\t\t\t\t\twdec14( buffer[ px + j ], buffer[ p01 + j ] );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twdec16( buffer[ px + j ], buffer[ p01 + j ] );\n\n\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\tbuffer[ p01 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\tbuffer[ px + j ] = i00;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tp2 = p;\n\t\t\t\tp >>= 1;\n\n\t\t\t}\n\n\t\t\treturn py;\n\n\t\t}\n\n\t\tfunction hufDecode( encodingTable, decodingTable, uInt8Array, inOffset, ni, rlc, no, outBuffer, outOffset ) {\n\n\t\t\tlet c = 0;\n\t\t\tlet lc = 0;\n\t\t\tconst outBufferEndOffset = no;\n\t\t\tconst inOffsetEnd = Math.trunc( inOffset.value + ( ni + 7 ) / 8 );\n\n\t\t\twhile ( inOffset.value < inOffsetEnd ) {\n\n\t\t\t\tgetChar( c, lc, uInt8Array, inOffset );\n\n\t\t\t\tc = getCharReturn.c;\n\t\t\t\tlc = getCharReturn.lc;\n\n\t\t\t\twhile ( lc >= HUF_DECBITS ) {\n\n\t\t\t\t\tconst index = ( c >> ( lc - HUF_DECBITS ) ) & HUF_DECMASK;\n\t\t\t\t\tconst pl = decodingTable[ index ];\n\n\t\t\t\t\tif ( pl.len ) {\n\n\t\t\t\t\t\tlc -= pl.len;\n\n\t\t\t\t\t\tgetCode( pl.lit, rlc, c, lc, uInt8Array, inOffset, outBuffer, outOffset, outBufferEndOffset );\n\n\t\t\t\t\t\tc = getCodeReturn.c;\n\t\t\t\t\t\tlc = getCodeReturn.lc;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ! pl.p ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'hufDecode issues' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet j;\n\n\t\t\t\t\t\tfor ( j = 0; j < pl.lit; j ++ ) {\n\n\t\t\t\t\t\t\tconst l = hufLength( encodingTable[ pl.p[ j ] ] );\n\n\t\t\t\t\t\t\twhile ( lc < l && inOffset.value < inOffsetEnd ) {\n\n\t\t\t\t\t\t\t\tgetChar( c, lc, uInt8Array, inOffset );\n\n\t\t\t\t\t\t\t\tc = getCharReturn.c;\n\t\t\t\t\t\t\t\tlc = getCharReturn.lc;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( lc >= l ) {\n\n\t\t\t\t\t\t\t\tif ( hufCode( encodingTable[ pl.p[ j ] ] ) == ( ( c >> ( lc - l ) ) & ( ( 1 << l ) - 1 ) ) ) {\n\n\t\t\t\t\t\t\t\t\tlc -= l;\n\n\t\t\t\t\t\t\t\t\tgetCode( pl.p[ j ], rlc, c, lc, uInt8Array, inOffset, outBuffer, outOffset, outBufferEndOffset );\n\n\t\t\t\t\t\t\t\t\tc = getCodeReturn.c;\n\t\t\t\t\t\t\t\t\tlc = getCodeReturn.lc;\n\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( j == pl.lit ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'hufDecode issues' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst i = ( 8 - ni ) & 7;\n\n\t\t\tc >>= i;\n\t\t\tlc -= i;\n\n\t\t\twhile ( lc > 0 ) {\n\n\t\t\t\tconst pl = decodingTable[ ( c << ( HUF_DECBITS - lc ) ) & HUF_DECMASK ];\n\n\t\t\t\tif ( pl.len ) {\n\n\t\t\t\t\tlc -= pl.len;\n\n\t\t\t\t\tgetCode( pl.lit, rlc, c, lc, uInt8Array, inOffset, outBuffer, outOffset, outBufferEndOffset );\n\n\t\t\t\t\tc = getCodeReturn.c;\n\t\t\t\t\tlc = getCodeReturn.lc;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'hufDecode issues' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction hufUncompress( uInt8Array, inDataView, inOffset, nCompressed, outBuffer, nRaw ) {\n\n\t\t\tconst outOffset = { value: 0 };\n\t\t\tconst initialInOffset = inOffset.value;\n\n\t\t\tconst im = parseUint32( inDataView, inOffset );\n\t\t\tconst iM = parseUint32( inDataView, inOffset );\n\n\t\t\tinOffset.value += 4;\n\n\t\t\tconst nBits = parseUint32( inDataView, inOffset );\n\n\t\t\tinOffset.value += 4;\n\n\t\t\tif ( im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE ) {\n\n\t\t\t\tthrow new Error( 'Something wrong with HUF_ENCSIZE' );\n\n\t\t\t}\n\n\t\t\tconst freq = new Array( HUF_ENCSIZE );\n\t\t\tconst hdec = new Array( HUF_DECSIZE );\n\n\t\t\thufClearDecTable( hdec );\n\n\t\t\tconst ni = nCompressed - ( inOffset.value - initialInOffset );\n\n\t\t\thufUnpackEncTable( uInt8Array, inOffset, ni, im, iM, freq );\n\n\t\t\tif ( nBits > 8 * ( nCompressed - ( inOffset.value - initialInOffset ) ) ) {\n\n\t\t\t\tthrow new Error( 'Something wrong with hufUncompress' );\n\n\t\t\t}\n\n\t\t\thufBuildDecTable( freq, im, iM, hdec );\n\n\t\t\thufDecode( freq, hdec, uInt8Array, inOffset, nBits, iM, nRaw, outBuffer, outOffset );\n\n\t\t}\n\n\t\tfunction applyLut( lut, data, nData ) {\n\n\t\t\tfor ( let i = 0; i < nData; ++ i ) {\n\n\t\t\t\tdata[ i ] = lut[ data[ i ] ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction predictor( source ) {\n\n\t\t\tfor ( let t = 1; t < source.length; t ++ ) {\n\n\t\t\t\tconst d = source[ t - 1 ] + source[ t ] - 128;\n\t\t\t\tsource[ t ] = d;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction interleaveScalar( source, out ) {\n\n\t\t\tlet t1 = 0;\n\t\t\tlet t2 = Math.floor( ( source.length + 1 ) / 2 );\n\t\t\tlet s = 0;\n\t\t\tconst stop = source.length - 1;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tif ( s > stop ) break;\n\t\t\t\tout[ s ++ ] = source[ t1 ++ ];\n\n\t\t\t\tif ( s > stop ) break;\n\t\t\t\tout[ s ++ ] = source[ t2 ++ ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction decodeRunLength( source ) {\n\n\t\t\tlet size = source.byteLength;\n\t\t\tconst out = new Array();\n\t\t\tlet p = 0;\n\n\t\t\tconst reader = new DataView( source );\n\n\t\t\twhile ( size > 0 ) {\n\n\t\t\t\tconst l = reader.getInt8( p ++ );\n\n\t\t\t\tif ( l < 0 ) {\n\n\t\t\t\t\tconst count = - l;\n\t\t\t\t\tsize -= count + 1;\n\n\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\tout.push( reader.getUint8( p ++ ) );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst count = l;\n\t\t\t\t\tsize -= 2;\n\n\t\t\t\t\tconst value = reader.getUint8( p ++ );\n\n\t\t\t\t\tfor ( let i = 0; i < count + 1; i ++ ) {\n\n\t\t\t\t\t\tout.push( value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn out;\n\n\t\t}\n\n\t\tfunction lossyDctDecode( cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer ) {\n\n\t\t\tlet dataView = new DataView( outBuffer.buffer );\n\n\t\t\tconst width = channelData[ cscSet.idx[ 0 ] ].width;\n\t\t\tconst height = channelData[ cscSet.idx[ 0 ] ].height;\n\n\t\t\tconst numComp = 3;\n\n\t\t\tconst numFullBlocksX = Math.floor( width / 8.0 );\n\t\t\tconst numBlocksX = Math.ceil( width / 8.0 );\n\t\t\tconst numBlocksY = Math.ceil( height / 8.0 );\n\t\t\tconst leftoverX = width - ( numBlocksX - 1 ) * 8;\n\t\t\tconst leftoverY = height - ( numBlocksY - 1 ) * 8;\n\n\t\t\tconst currAcComp = { value: 0 };\n\t\t\tconst currDcComp = new Array( numComp );\n\t\t\tconst dctData = new Array( numComp );\n\t\t\tconst halfZigBlock = new Array( numComp );\n\t\t\tconst rowBlock = new Array( numComp );\n\t\t\tconst rowOffsets = new Array( numComp );\n\n\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\trowOffsets[ comp ] = rowPtrs[ cscSet.idx[ comp ] ];\n\t\t\t\tcurrDcComp[ comp ] = ( comp < 1 ) ? 0 : currDcComp[ comp - 1 ] + numBlocksX * numBlocksY;\n\t\t\t\tdctData[ comp ] = new Float32Array( 64 );\n\t\t\t\thalfZigBlock[ comp ] = new Uint16Array( 64 );\n\t\t\t\trowBlock[ comp ] = new Uint16Array( numBlocksX * 64 );\n\n\t\t\t}\n\n\t\t\tfor ( let blocky = 0; blocky < numBlocksY; ++ blocky ) {\n\n\t\t\t\tlet maxY = 8;\n\n\t\t\t\tif ( blocky == numBlocksY - 1 )\n\t\t\t\t\tmaxY = leftoverY;\n\n\t\t\t\tlet maxX = 8;\n\n\t\t\t\tfor ( let blockx = 0; blockx < numBlocksX; ++ blockx ) {\n\n\t\t\t\t\tif ( blockx == numBlocksX - 1 )\n\t\t\t\t\t\tmaxX = leftoverX;\n\n\t\t\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\t\t\thalfZigBlock[ comp ].fill( 0 );\n\n\t\t\t\t\t\t// set block DC component\n\t\t\t\t\t\thalfZigBlock[ comp ][ 0 ] = dcBuffer[ currDcComp[ comp ] ++ ];\n\t\t\t\t\t\t// set block AC components\n\t\t\t\t\t\tunRleAC( currAcComp, acBuffer, halfZigBlock[ comp ] );\n\n\t\t\t\t\t\t// UnZigZag block to float\n\t\t\t\t\t\tunZigZag( halfZigBlock[ comp ], dctData[ comp ] );\n\t\t\t\t\t\t// decode float dct\n\t\t\t\t\t\tdctInverse( dctData[ comp ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( numComp == 3 ) {\n\n\t\t\t\t\t\tcsc709Inverse( dctData );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\t\t\tconvertToHalf( dctData[ comp ], rowBlock[ comp ], blockx * 64 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} // blockx\n\n\t\t\t\tlet offset = 0;\n\n\t\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\t\tconst type = channelData[ cscSet.idx[ comp ] ].type;\n\n\t\t\t\t\tfor ( let y = 8 * blocky; y < 8 * blocky + maxY; ++ y ) {\n\n\t\t\t\t\t\toffset = rowOffsets[ comp ][ y ];\n\n\t\t\t\t\t\tfor ( let blockx = 0; blockx < numFullBlocksX; ++ blockx ) {\n\n\t\t\t\t\t\t\tconst src = blockx * 64 + ( ( y & 0x7 ) * 8 );\n\n\t\t\t\t\t\t\tdataView.setUint16( offset + 0 * INT16_SIZE * type, rowBlock[ comp ][ src + 0 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 1 * INT16_SIZE * type, rowBlock[ comp ][ src + 1 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 2 * INT16_SIZE * type, rowBlock[ comp ][ src + 2 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 3 * INT16_SIZE * type, rowBlock[ comp ][ src + 3 ], true );\n\n\t\t\t\t\t\t\tdataView.setUint16( offset + 4 * INT16_SIZE * type, rowBlock[ comp ][ src + 4 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 5 * INT16_SIZE * type, rowBlock[ comp ][ src + 5 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 6 * INT16_SIZE * type, rowBlock[ comp ][ src + 6 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 7 * INT16_SIZE * type, rowBlock[ comp ][ src + 7 ], true );\n\n\t\t\t\t\t\t\toffset += 8 * INT16_SIZE * type;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// handle partial X blocks\n\t\t\t\t\tif ( numFullBlocksX != numBlocksX ) {\n\n\t\t\t\t\t\tfor ( let y = 8 * blocky; y < 8 * blocky + maxY; ++ y ) {\n\n\t\t\t\t\t\t\tconst offset = rowOffsets[ comp ][ y ] + 8 * numFullBlocksX * INT16_SIZE * type;\n\t\t\t\t\t\t\tconst src = numFullBlocksX * 64 + ( ( y & 0x7 ) * 8 );\n\n\t\t\t\t\t\t\tfor ( let x = 0; x < maxX; ++ x ) {\n\n\t\t\t\t\t\t\t\tdataView.setUint16( offset + x * INT16_SIZE * type, rowBlock[ comp ][ src + x ], true );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} // comp\n\n\t\t\t} // blocky\n\n\t\t\tconst halfRow = new Uint16Array( width );\n\t\t\tdataView = new DataView( outBuffer.buffer );\n\n\t\t\t// convert channels back to float, if needed\n\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\tchannelData[ cscSet.idx[ comp ] ].decoded = true;\n\t\t\t\tconst type = channelData[ cscSet.idx[ comp ] ].type;\n\n\t\t\t\tif ( channelData[ comp ].type != 2 ) continue;\n\n\t\t\t\tfor ( let y = 0; y < height; ++ y ) {\n\n\t\t\t\t\tconst offset = rowOffsets[ comp ][ y ];\n\n\t\t\t\t\tfor ( let x = 0; x < width; ++ x ) {\n\n\t\t\t\t\t\thalfRow[ x ] = dataView.getUint16( offset + x * INT16_SIZE * type, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let x = 0; x < width; ++ x ) {\n\n\t\t\t\t\t\tdataView.setFloat32( offset + x * INT16_SIZE * type, decodeFloat16( halfRow[ x ] ), true );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction unRleAC( currAcComp, acBuffer, halfZigBlock ) {\n\n\t\t\tlet acValue;\n\t\t\tlet dctComp = 1;\n\n\t\t\twhile ( dctComp < 64 ) {\n\n\t\t\t\tacValue = acBuffer[ currAcComp.value ];\n\n\t\t\t\tif ( acValue == 0xff00 ) {\n\n\t\t\t\t\tdctComp = 64;\n\n\t\t\t\t} else if ( acValue >> 8 == 0xff ) {\n\n\t\t\t\t\tdctComp += acValue & 0xff;\n\n\t\t\t\t} else {\n\n\t\t\t\t\thalfZigBlock[ dctComp ] = acValue;\n\t\t\t\t\tdctComp ++;\n\n\t\t\t\t}\n\n\t\t\t\tcurrAcComp.value ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction unZigZag( src, dst ) {\n\n\t\t\tdst[ 0 ] = decodeFloat16( src[ 0 ] );\n\t\t\tdst[ 1 ] = decodeFloat16( src[ 1 ] );\n\t\t\tdst[ 2 ] = decodeFloat16( src[ 5 ] );\n\t\t\tdst[ 3 ] = decodeFloat16( src[ 6 ] );\n\t\t\tdst[ 4 ] = decodeFloat16( src[ 14 ] );\n\t\t\tdst[ 5 ] = decodeFloat16( src[ 15 ] );\n\t\t\tdst[ 6 ] = decodeFloat16( src[ 27 ] );\n\t\t\tdst[ 7 ] = decodeFloat16( src[ 28 ] );\n\t\t\tdst[ 8 ] = decodeFloat16( src[ 2 ] );\n\t\t\tdst[ 9 ] = decodeFloat16( src[ 4 ] );\n\n\t\t\tdst[ 10 ] = decodeFloat16( src[ 7 ] );\n\t\t\tdst[ 11 ] = decodeFloat16( src[ 13 ] );\n\t\t\tdst[ 12 ] = decodeFloat16( src[ 16 ] );\n\t\t\tdst[ 13 ] = decodeFloat16( src[ 26 ] );\n\t\t\tdst[ 14 ] = decodeFloat16( src[ 29 ] );\n\t\t\tdst[ 15 ] = decodeFloat16( src[ 42 ] );\n\t\t\tdst[ 16 ] = decodeFloat16( src[ 3 ] );\n\t\t\tdst[ 17 ] = decodeFloat16( src[ 8 ] );\n\t\t\tdst[ 18 ] = decodeFloat16( src[ 12 ] );\n\t\t\tdst[ 19 ] = decodeFloat16( src[ 17 ] );\n\n\t\t\tdst[ 20 ] = decodeFloat16( src[ 25 ] );\n\t\t\tdst[ 21 ] = decodeFloat16( src[ 30 ] );\n\t\t\tdst[ 22 ] = decodeFloat16( src[ 41 ] );\n\t\t\tdst[ 23 ] = decodeFloat16( src[ 43 ] );\n\t\t\tdst[ 24 ] = decodeFloat16( src[ 9 ] );\n\t\t\tdst[ 25 ] = decodeFloat16( src[ 11 ] );\n\t\t\tdst[ 26 ] = decodeFloat16( src[ 18 ] );\n\t\t\tdst[ 27 ] = decodeFloat16( src[ 24 ] );\n\t\t\tdst[ 28 ] = decodeFloat16( src[ 31 ] );\n\t\t\tdst[ 29 ] = decodeFloat16( src[ 40 ] );\n\n\t\t\tdst[ 30 ] = decodeFloat16( src[ 44 ] );\n\t\t\tdst[ 31 ] = decodeFloat16( src[ 53 ] );\n\t\t\tdst[ 32 ] = decodeFloat16( src[ 10 ] );\n\t\t\tdst[ 33 ] = decodeFloat16( src[ 19 ] );\n\t\t\tdst[ 34 ] = decodeFloat16( src[ 23 ] );\n\t\t\tdst[ 35 ] = decodeFloat16( src[ 32 ] );\n\t\t\tdst[ 36 ] = decodeFloat16( src[ 39 ] );\n\t\t\tdst[ 37 ] = decodeFloat16( src[ 45 ] );\n\t\t\tdst[ 38 ] = decodeFloat16( src[ 52 ] );\n\t\t\tdst[ 39 ] = decodeFloat16( src[ 54 ] );\n\n\t\t\tdst[ 40 ] = decodeFloat16( src[ 20 ] );\n\t\t\tdst[ 41 ] = decodeFloat16( src[ 22 ] );\n\t\t\tdst[ 42 ] = decodeFloat16( src[ 33 ] );\n\t\t\tdst[ 43 ] = decodeFloat16( src[ 38 ] );\n\t\t\tdst[ 44 ] = decodeFloat16( src[ 46 ] );\n\t\t\tdst[ 45 ] = decodeFloat16( src[ 51 ] );\n\t\t\tdst[ 46 ] = decodeFloat16( src[ 55 ] );\n\t\t\tdst[ 47 ] = decodeFloat16( src[ 60 ] );\n\t\t\tdst[ 48 ] = decodeFloat16( src[ 21 ] );\n\t\t\tdst[ 49 ] = decodeFloat16( src[ 34 ] );\n\n\t\t\tdst[ 50 ] = decodeFloat16( src[ 37 ] );\n\t\t\tdst[ 51 ] = decodeFloat16( src[ 47 ] );\n\t\t\tdst[ 52 ] = decodeFloat16( src[ 50 ] );\n\t\t\tdst[ 53 ] = decodeFloat16( src[ 56 ] );\n\t\t\tdst[ 54 ] = decodeFloat16( src[ 59 ] );\n\t\t\tdst[ 55 ] = decodeFloat16( src[ 61 ] );\n\t\t\tdst[ 56 ] = decodeFloat16( src[ 35 ] );\n\t\t\tdst[ 57 ] = decodeFloat16( src[ 36 ] );\n\t\t\tdst[ 58 ] = decodeFloat16( src[ 48 ] );\n\t\t\tdst[ 59 ] = decodeFloat16( src[ 49 ] );\n\n\t\t\tdst[ 60 ] = decodeFloat16( src[ 57 ] );\n\t\t\tdst[ 61 ] = decodeFloat16( src[ 58 ] );\n\t\t\tdst[ 62 ] = decodeFloat16( src[ 62 ] );\n\t\t\tdst[ 63 ] = decodeFloat16( src[ 63 ] );\n\n\t\t}\n\n\t\tfunction dctInverse( data ) {\n\n\t\t\tconst a = 0.5 * Math.cos( 3.14159 / 4.0 );\n\t\t\tconst b = 0.5 * Math.cos( 3.14159 / 16.0 );\n\t\t\tconst c = 0.5 * Math.cos( 3.14159 / 8.0 );\n\t\t\tconst d = 0.5 * Math.cos( 3.0 * 3.14159 / 16.0 );\n\t\t\tconst e = 0.5 * Math.cos( 5.0 * 3.14159 / 16.0 );\n\t\t\tconst f = 0.5 * Math.cos( 3.0 * 3.14159 / 8.0 );\n\t\t\tconst g = 0.5 * Math.cos( 7.0 * 3.14159 / 16.0 );\n\n\t\t\tconst alpha = new Array( 4 );\n\t\t\tconst beta = new Array( 4 );\n\t\t\tconst theta = new Array( 4 );\n\t\t\tconst gamma = new Array( 4 );\n\n\t\t\tfor ( let row = 0; row < 8; ++ row ) {\n\n\t\t\t\tconst rowPtr = row * 8;\n\n\t\t\t\talpha[ 0 ] = c * data[ rowPtr + 2 ];\n\t\t\t\talpha[ 1 ] = f * data[ rowPtr + 2 ];\n\t\t\t\talpha[ 2 ] = c * data[ rowPtr + 6 ];\n\t\t\t\talpha[ 3 ] = f * data[ rowPtr + 6 ];\n\n\t\t\t\tbeta[ 0 ] = b * data[ rowPtr + 1 ] + d * data[ rowPtr + 3 ] + e * data[ rowPtr + 5 ] + g * data[ rowPtr + 7 ];\n\t\t\t\tbeta[ 1 ] = d * data[ rowPtr + 1 ] - g * data[ rowPtr + 3 ] - b * data[ rowPtr + 5 ] - e * data[ rowPtr + 7 ];\n\t\t\t\tbeta[ 2 ] = e * data[ rowPtr + 1 ] - b * data[ rowPtr + 3 ] + g * data[ rowPtr + 5 ] + d * data[ rowPtr + 7 ];\n\t\t\t\tbeta[ 3 ] = g * data[ rowPtr + 1 ] - e * data[ rowPtr + 3 ] + d * data[ rowPtr + 5 ] - b * data[ rowPtr + 7 ];\n\n\t\t\t\ttheta[ 0 ] = a * ( data[ rowPtr + 0 ] + data[ rowPtr + 4 ] );\n\t\t\t\ttheta[ 3 ] = a * ( data[ rowPtr + 0 ] - data[ rowPtr + 4 ] );\n\t\t\t\ttheta[ 1 ] = alpha[ 0 ] + alpha[ 3 ];\n\t\t\t\ttheta[ 2 ] = alpha[ 1 ] - alpha[ 2 ];\n\n\t\t\t\tgamma[ 0 ] = theta[ 0 ] + theta[ 1 ];\n\t\t\t\tgamma[ 1 ] = theta[ 3 ] + theta[ 2 ];\n\t\t\t\tgamma[ 2 ] = theta[ 3 ] - theta[ 2 ];\n\t\t\t\tgamma[ 3 ] = theta[ 0 ] - theta[ 1 ];\n\n\t\t\t\tdata[ rowPtr + 0 ] = gamma[ 0 ] + beta[ 0 ];\n\t\t\t\tdata[ rowPtr + 1 ] = gamma[ 1 ] + beta[ 1 ];\n\t\t\t\tdata[ rowPtr + 2 ] = gamma[ 2 ] + beta[ 2 ];\n\t\t\t\tdata[ rowPtr + 3 ] = gamma[ 3 ] + beta[ 3 ];\n\n\t\t\t\tdata[ rowPtr + 4 ] = gamma[ 3 ] - beta[ 3 ];\n\t\t\t\tdata[ rowPtr + 5 ] = gamma[ 2 ] - beta[ 2 ];\n\t\t\t\tdata[ rowPtr + 6 ] = gamma[ 1 ] - beta[ 1 ];\n\t\t\t\tdata[ rowPtr + 7 ] = gamma[ 0 ] - beta[ 0 ];\n\n\t\t\t}\n\n\t\t\tfor ( let column = 0; column < 8; ++ column ) {\n\n\t\t\t\talpha[ 0 ] = c * data[ 16 + column ];\n\t\t\t\talpha[ 1 ] = f * data[ 16 + column ];\n\t\t\t\talpha[ 2 ] = c * data[ 48 + column ];\n\t\t\t\talpha[ 3 ] = f * data[ 48 + column ];\n\n\t\t\t\tbeta[ 0 ] = b * data[ 8 + column ] + d * data[ 24 + column ] + e * data[ 40 + column ] + g * data[ 56 + column ];\n\t\t\t\tbeta[ 1 ] = d * data[ 8 + column ] - g * data[ 24 + column ] - b * data[ 40 + column ] - e * data[ 56 + column ];\n\t\t\t\tbeta[ 2 ] = e * data[ 8 + column ] - b * data[ 24 + column ] + g * data[ 40 + column ] + d * data[ 56 + column ];\n\t\t\t\tbeta[ 3 ] = g * data[ 8 + column ] - e * data[ 24 + column ] + d * data[ 40 + column ] - b * data[ 56 + column ];\n\n\t\t\t\ttheta[ 0 ] = a * ( data[ column ] + data[ 32 + column ] );\n\t\t\t\ttheta[ 3 ] = a * ( data[ column ] - data[ 32 + column ] );\n\n\t\t\t\ttheta[ 1 ] = alpha[ 0 ] + alpha[ 3 ];\n\t\t\t\ttheta[ 2 ] = alpha[ 1 ] - alpha[ 2 ];\n\n\t\t\t\tgamma[ 0 ] = theta[ 0 ] + theta[ 1 ];\n\t\t\t\tgamma[ 1 ] = theta[ 3 ] + theta[ 2 ];\n\t\t\t\tgamma[ 2 ] = theta[ 3 ] - theta[ 2 ];\n\t\t\t\tgamma[ 3 ] = theta[ 0 ] - theta[ 1 ];\n\n\t\t\t\tdata[ 0 + column ] = gamma[ 0 ] + beta[ 0 ];\n\t\t\t\tdata[ 8 + column ] = gamma[ 1 ] + beta[ 1 ];\n\t\t\t\tdata[ 16 + column ] = gamma[ 2 ] + beta[ 2 ];\n\t\t\t\tdata[ 24 + column ] = gamma[ 3 ] + beta[ 3 ];\n\n\t\t\t\tdata[ 32 + column ] = gamma[ 3 ] - beta[ 3 ];\n\t\t\t\tdata[ 40 + column ] = gamma[ 2 ] - beta[ 2 ];\n\t\t\t\tdata[ 48 + column ] = gamma[ 1 ] - beta[ 1 ];\n\t\t\t\tdata[ 56 + column ] = gamma[ 0 ] - beta[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction csc709Inverse( data ) {\n\n\t\t\tfor ( let i = 0; i < 64; ++ i ) {\n\n\t\t\t\tconst y = data[ 0 ][ i ];\n\t\t\t\tconst cb = data[ 1 ][ i ];\n\t\t\t\tconst cr = data[ 2 ][ i ];\n\n\t\t\t\tdata[ 0 ][ i ] = y + 1.5747 * cr;\n\t\t\t\tdata[ 1 ][ i ] = y - 0.1873 * cb - 0.4682 * cr;\n\t\t\t\tdata[ 2 ][ i ] = y + 1.8556 * cb;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction convertToHalf( src, dst, idx ) {\n\n\t\t\tfor ( let i = 0; i < 64; ++ i ) {\n\n\t\t\t\tdst[ idx + i ] = DataUtils.toHalfFloat( toLinear( src[ i ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction toLinear( float ) {\n\n\t\t\tif ( float <= 1 ) {\n\n\t\t\t\treturn Math.sign( float ) * Math.pow( Math.abs( float ), 2.2 );\n\n\t\t\t} else {\n\n\t\t\t\treturn Math.sign( float ) * Math.pow( logBase, Math.abs( float ) - 1.0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction uncompressRAW( info ) {\n\n\t\t\treturn new DataView( info.array.buffer, info.offset.value, info.size );\n\n\t\t}\n\n\t\tfunction uncompressRLE( info ) {\n\n\t\t\tconst compressed = info.viewer.buffer.slice( info.offset.value, info.offset.value + info.size );\n\n\t\t\tconst rawBuffer = new Uint8Array( decodeRunLength( compressed ) );\n\t\t\tconst tmpBuffer = new Uint8Array( rawBuffer.length );\n\n\t\t\tpredictor( rawBuffer ); // revert predictor\n\n\t\t\tinterleaveScalar( rawBuffer, tmpBuffer ); // interleave pixels\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressZIP( info ) {\n\n\t\t\tconst compressed = info.array.slice( info.offset.value, info.offset.value + info.size );\n\n\t\t\tconst rawBuffer = fflate.unzlibSync( compressed );\n\t\t\tconst tmpBuffer = new Uint8Array( rawBuffer.length );\n\n\t\t\tpredictor( rawBuffer ); // revert predictor\n\n\t\t\tinterleaveScalar( rawBuffer, tmpBuffer ); // interleave pixels\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressPIZ( info ) {\n\n\t\t\tconst inDataView = info.viewer;\n\t\t\tconst inOffset = { value: info.offset.value };\n\n\t\t\tconst outBuffer = new Uint16Array( info.columns * info.lines * ( info.inputChannels.length * info.type ) );\n\t\t\tconst bitmap = new Uint8Array( BITMAP_SIZE );\n\n\t\t\t// Setup channel info\n\t\t\tlet outBufferEnd = 0;\n\t\t\tconst pizChannelData = new Array( info.inputChannels.length );\n\t\t\tfor ( let i = 0, il = info.inputChannels.length; i < il; i ++ ) {\n\n\t\t\t\tpizChannelData[ i ] = {};\n\t\t\t\tpizChannelData[ i ][ 'start' ] = outBufferEnd;\n\t\t\t\tpizChannelData[ i ][ 'end' ] = pizChannelData[ i ][ 'start' ];\n\t\t\t\tpizChannelData[ i ][ 'nx' ] = info.columns;\n\t\t\t\tpizChannelData[ i ][ 'ny' ] = info.lines;\n\t\t\t\tpizChannelData[ i ][ 'size' ] = info.type;\n\n\t\t\t\toutBufferEnd += pizChannelData[ i ].nx * pizChannelData[ i ].ny * pizChannelData[ i ].size;\n\n\t\t\t}\n\n\t\t\t// Read range compression data\n\n\t\t\tconst minNonZero = parseUint16( inDataView, inOffset );\n\t\t\tconst maxNonZero = parseUint16( inDataView, inOffset );\n\n\t\t\tif ( maxNonZero >= BITMAP_SIZE ) {\n\n\t\t\t\tthrow new Error( 'Something is wrong with PIZ_COMPRESSION BITMAP_SIZE' );\n\n\t\t\t}\n\n\t\t\tif ( minNonZero <= maxNonZero ) {\n\n\t\t\t\tfor ( let i = 0; i < maxNonZero - minNonZero + 1; i ++ ) {\n\n\t\t\t\t\tbitmap[ i + minNonZero ] = parseUint8( inDataView, inOffset );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Reverse LUT\n\t\t\tconst lut = new Uint16Array( USHORT_RANGE );\n\t\t\tconst maxValue = reverseLutFromBitmap( bitmap, lut );\n\n\t\t\tconst length = parseUint32( inDataView, inOffset );\n\n\t\t\t// Huffman decoding\n\t\t\thufUncompress( info.array, inDataView, inOffset, length, outBuffer, outBufferEnd );\n\n\t\t\t// Wavelet decoding\n\t\t\tfor ( let i = 0; i < info.inputChannels.length; ++ i ) {\n\n\t\t\t\tconst cd = pizChannelData[ i ];\n\n\t\t\t\tfor ( let j = 0; j < pizChannelData[ i ].size; ++ j ) {\n\n\t\t\t\t\twav2Decode(\n\t\t\t\t\t\toutBuffer,\n\t\t\t\t\t\tcd.start + j,\n\t\t\t\t\t\tcd.nx,\n\t\t\t\t\t\tcd.size,\n\t\t\t\t\t\tcd.ny,\n\t\t\t\t\t\tcd.nx * cd.size,\n\t\t\t\t\t\tmaxValue\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Expand the pixel data to their original range\n\t\t\tapplyLut( lut, outBuffer, outBufferEnd );\n\n\t\t\t// Rearrange the pixel data into the format expected by the caller.\n\t\t\tlet tmpOffset = 0;\n\t\t\tconst tmpBuffer = new Uint8Array( outBuffer.buffer.byteLength );\n\t\t\tfor ( let y = 0; y < info.lines; y ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < info.inputChannels.length; c ++ ) {\n\n\t\t\t\t\tconst cd = pizChannelData[ c ];\n\n\t\t\t\t\tconst n = cd.nx * cd.size;\n\t\t\t\t\tconst cp = new Uint8Array( outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE );\n\n\t\t\t\t\ttmpBuffer.set( cp, tmpOffset );\n\t\t\t\t\ttmpOffset += n * INT16_SIZE;\n\t\t\t\t\tcd.end += n;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressPXR( info ) {\n\n\t\t\tconst compressed = info.array.slice( info.offset.value, info.offset.value + info.size );\n\n\t\t\tconst rawBuffer = fflate.unzlibSync( compressed );\n\n\t\t\tconst byteSize = info.inputChannels.length * info.lines * info.columns * info.totalBytes;\n\t\t\tconst tmpBuffer = new ArrayBuffer( byteSize );\n\t\t\tconst viewer = new DataView( tmpBuffer );\n\n\t\t\tlet tmpBufferEnd = 0;\n\t\t\tlet writePtr = 0;\n\t\t\tconst ptr = new Array( 4 );\n\n\t\t\tfor ( let y = 0; y < info.lines; y ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < info.inputChannels.length; c ++ ) {\n\n\t\t\t\t\tlet pixel = 0;\n\n\t\t\t\t\tconst type = info.inputChannels[ c ].pixelType;\n\t\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t\tcase 1:\n\n\t\t\t\t\t\t\tptr[ 0 ] = tmpBufferEnd;\n\t\t\t\t\t\t\tptr[ 1 ] = ptr[ 0 ] + info.columns;\n\t\t\t\t\t\t\ttmpBufferEnd = ptr[ 1 ] + info.columns;\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < info.columns; ++ j ) {\n\n\t\t\t\t\t\t\t\tconst diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 8 ) | rawBuffer[ ptr[ 1 ] ++ ];\n\n\t\t\t\t\t\t\t\tpixel += diff;\n\n\t\t\t\t\t\t\t\tviewer.setUint16( writePtr, pixel, true );\n\t\t\t\t\t\t\t\twritePtr += 2;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 2:\n\n\t\t\t\t\t\t\tptr[ 0 ] = tmpBufferEnd;\n\t\t\t\t\t\t\tptr[ 1 ] = ptr[ 0 ] + info.columns;\n\t\t\t\t\t\t\tptr[ 2 ] = ptr[ 1 ] + info.columns;\n\t\t\t\t\t\t\ttmpBufferEnd = ptr[ 2 ] + info.columns;\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < info.columns; ++ j ) {\n\n\t\t\t\t\t\t\t\tconst diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 24 ) | ( rawBuffer[ ptr[ 1 ] ++ ] << 16 ) | ( rawBuffer[ ptr[ 2 ] ++ ] << 8 );\n\n\t\t\t\t\t\t\t\tpixel += diff;\n\n\t\t\t\t\t\t\t\tviewer.setUint32( writePtr, pixel, true );\n\t\t\t\t\t\t\t\twritePtr += 4;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn viewer;\n\n\t\t}\n\n\t\tfunction uncompressDWA( info ) {\n\n\t\t\tconst inDataView = info.viewer;\n\t\t\tconst inOffset = { value: info.offset.value };\n\t\t\tconst outBuffer = new Uint8Array( info.columns * info.lines * ( info.inputChannels.length * info.type * INT16_SIZE ) );\n\n\t\t\t// Read compression header information\n\t\t\tconst dwaHeader = {\n\n\t\t\t\tversion: parseInt64( inDataView, inOffset ),\n\t\t\t\tunknownUncompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\tunknownCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\tacCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\tdcCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\trleCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\trleUncompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\trleRawSize: parseInt64( inDataView, inOffset ),\n\t\t\t\ttotalAcUncompressedCount: parseInt64( inDataView, inOffset ),\n\t\t\t\ttotalDcUncompressedCount: parseInt64( inDataView, inOffset ),\n\t\t\t\tacCompression: parseInt64( inDataView, inOffset )\n\n\t\t\t};\n\n\t\t\tif ( dwaHeader.version < 2 )\n\t\t\t\tthrow new Error( 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported' );\n\n\t\t\t// Read channel ruleset information\n\t\t\tconst channelRules = new Array();\n\t\t\tlet ruleSize = parseUint16( inDataView, inOffset ) - INT16_SIZE;\n\n\t\t\twhile ( ruleSize > 0 ) {\n\n\t\t\t\tconst name = parseNullTerminatedString( inDataView.buffer, inOffset );\n\t\t\t\tconst value = parseUint8( inDataView, inOffset );\n\t\t\t\tconst compression = ( value >> 2 ) & 3;\n\t\t\t\tconst csc = ( value >> 4 ) - 1;\n\t\t\t\tconst index = new Int8Array( [ csc ] )[ 0 ];\n\t\t\t\tconst type = parseUint8( inDataView, inOffset );\n\n\t\t\t\tchannelRules.push( {\n\t\t\t\t\tname: name,\n\t\t\t\t\tindex: index,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tcompression: compression,\n\t\t\t\t} );\n\n\t\t\t\truleSize -= name.length + 3;\n\n\t\t\t}\n\n\t\t\t// Classify channels\n\t\t\tconst channels = EXRHeader.channels;\n\t\t\tconst channelData = new Array( info.inputChannels.length );\n\n\t\t\tfor ( let i = 0; i < info.inputChannels.length; ++ i ) {\n\n\t\t\t\tconst cd = channelData[ i ] = {};\n\t\t\t\tconst channel = channels[ i ];\n\n\t\t\t\tcd.name = channel.name;\n\t\t\t\tcd.compression = UNKNOWN;\n\t\t\t\tcd.decoded = false;\n\t\t\t\tcd.type = channel.pixelType;\n\t\t\t\tcd.pLinear = channel.pLinear;\n\t\t\t\tcd.width = info.columns;\n\t\t\t\tcd.height = info.lines;\n\n\t\t\t}\n\n\t\t\tconst cscSet = {\n\t\t\t\tidx: new Array( 3 )\n\t\t\t};\n\n\t\t\tfor ( let offset = 0; offset < info.inputChannels.length; ++ offset ) {\n\n\t\t\t\tconst cd = channelData[ offset ];\n\n\t\t\t\tfor ( let i = 0; i < channelRules.length; ++ i ) {\n\n\t\t\t\t\tconst rule = channelRules[ i ];\n\n\t\t\t\t\tif ( cd.name == rule.name ) {\n\n\t\t\t\t\t\tcd.compression = rule.compression;\n\n\t\t\t\t\t\tif ( rule.index >= 0 ) {\n\n\t\t\t\t\t\t\tcscSet.idx[ rule.index ] = offset;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcd.offset = offset;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet acBuffer, dcBuffer, rleBuffer;\n\n\t\t\t// Read DCT - AC component data\n\t\t\tif ( dwaHeader.acCompressedSize > 0 ) {\n\n\t\t\t\tswitch ( dwaHeader.acCompression ) {\n\n\t\t\t\t\tcase STATIC_HUFFMAN:\n\n\t\t\t\t\t\tacBuffer = new Uint16Array( dwaHeader.totalAcUncompressedCount );\n\t\t\t\t\t\thufUncompress( info.array, inDataView, inOffset, dwaHeader.acCompressedSize, acBuffer, dwaHeader.totalAcUncompressedCount );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase DEFLATE:\n\n\t\t\t\t\t\tconst compressed = info.array.slice( inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount );\n\t\t\t\t\t\tconst data = fflate.unzlibSync( compressed );\n\t\t\t\t\t\tacBuffer = new Uint16Array( data.buffer );\n\t\t\t\t\t\tinOffset.value += dwaHeader.totalAcUncompressedCount;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\t// Read DCT - DC component data\n\t\t\tif ( dwaHeader.dcCompressedSize > 0 ) {\n\n\t\t\t\tconst zlibInfo = {\n\t\t\t\t\tarray: info.array,\n\t\t\t\t\toffset: inOffset,\n\t\t\t\t\tsize: dwaHeader.dcCompressedSize\n\t\t\t\t};\n\t\t\t\tdcBuffer = new Uint16Array( uncompressZIP( zlibInfo ).buffer );\n\t\t\t\tinOffset.value += dwaHeader.dcCompressedSize;\n\n\t\t\t}\n\n\t\t\t// Read RLE compressed data\n\t\t\tif ( dwaHeader.rleRawSize > 0 ) {\n\n\t\t\t\tconst compressed = info.array.slice( inOffset.value, inOffset.value + dwaHeader.rleCompressedSize );\n\t\t\t\tconst data = fflate.unzlibSync( compressed );\n\t\t\t\trleBuffer = decodeRunLength( data.buffer );\n\n\t\t\t\tinOffset.value += dwaHeader.rleCompressedSize;\n\n\t\t\t}\n\n\t\t\t// Prepare outbuffer data offset\n\t\t\tlet outBufferEnd = 0;\n\t\t\tconst rowOffsets = new Array( channelData.length );\n\t\t\tfor ( let i = 0; i < rowOffsets.length; ++ i ) {\n\n\t\t\t\trowOffsets[ i ] = new Array();\n\n\t\t\t}\n\n\t\t\tfor ( let y = 0; y < info.lines; ++ y ) {\n\n\t\t\t\tfor ( let chan = 0; chan < channelData.length; ++ chan ) {\n\n\t\t\t\t\trowOffsets[ chan ].push( outBufferEnd );\n\t\t\t\t\toutBufferEnd += channelData[ chan ].width * info.type * INT16_SIZE;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Lossy DCT decode RGB channels\n\t\t\tlossyDctDecode( cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer );\n\n\t\t\t// Decode other channels\n\t\t\tfor ( let i = 0; i < channelData.length; ++ i ) {\n\n\t\t\t\tconst cd = channelData[ i ];\n\n\t\t\t\tif ( cd.decoded ) continue;\n\n\t\t\t\tswitch ( cd.compression ) {\n\n\t\t\t\t\tcase RLE:\n\n\t\t\t\t\t\tlet row = 0;\n\t\t\t\t\t\tlet rleOffset = 0;\n\n\t\t\t\t\t\tfor ( let y = 0; y < info.lines; ++ y ) {\n\n\t\t\t\t\t\t\tlet rowOffsetBytes = rowOffsets[ i ][ row ];\n\n\t\t\t\t\t\t\tfor ( let x = 0; x < cd.width; ++ x ) {\n\n\t\t\t\t\t\t\t\tfor ( let byte = 0; byte < INT16_SIZE * cd.type; ++ byte ) {\n\n\t\t\t\t\t\t\t\t\toutBuffer[ rowOffsetBytes ++ ] = rleBuffer[ rleOffset + byte * cd.width * cd.height ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\trleOffset ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\trow ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LOSSY_DCT: // skip\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'EXRLoader.parse: unsupported channel compression' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new DataView( outBuffer.buffer );\n\n\t\t}\n\n\t\tfunction parseNullTerminatedString( buffer, offset ) {\n\n\t\t\tconst uintBuffer = new Uint8Array( buffer );\n\t\t\tlet endOffset = 0;\n\n\t\t\twhile ( uintBuffer[ offset.value + endOffset ] != 0 ) {\n\n\t\t\t\tendOffset += 1;\n\n\t\t\t}\n\n\t\t\tconst stringValue = new TextDecoder().decode(\n\t\t\t\tuintBuffer.slice( offset.value, offset.value + endOffset )\n\t\t\t);\n\n\t\t\toffset.value = offset.value + endOffset + 1;\n\n\t\t\treturn stringValue;\n\n\t\t}\n\n\t\tfunction parseFixedLengthString( buffer, offset, size ) {\n\n\t\t\tconst stringValue = new TextDecoder().decode(\n\t\t\t\tnew Uint8Array( buffer ).slice( offset.value, offset.value + size )\n\t\t\t);\n\n\t\t\toffset.value = offset.value + size;\n\n\t\t\treturn stringValue;\n\n\t\t}\n\n\t\tfunction parseRational( dataView, offset ) {\n\n\t\t\tconst x = parseInt32( dataView, offset );\n\t\t\tconst y = parseUint32( dataView, offset );\n\n\t\t\treturn [ x, y ];\n\n\t\t}\n\n\t\tfunction parseTimecode( dataView, offset ) {\n\n\t\t\tconst x = parseUint32( dataView, offset );\n\t\t\tconst y = parseUint32( dataView, offset );\n\n\t\t\treturn [ x, y ];\n\n\t\t}\n\n\t\tfunction parseInt32( dataView, offset ) {\n\n\t\t\tconst Int32 = dataView.getInt32( offset.value, true );\n\n\t\t\toffset.value = offset.value + INT32_SIZE;\n\n\t\t\treturn Int32;\n\n\t\t}\n\n\t\tfunction parseUint32( dataView, offset ) {\n\n\t\t\tconst Uint32 = dataView.getUint32( offset.value, true );\n\n\t\t\toffset.value = offset.value + INT32_SIZE;\n\n\t\t\treturn Uint32;\n\n\t\t}\n\n\t\tfunction parseUint8Array( uInt8Array, offset ) {\n\n\t\t\tconst Uint8 = uInt8Array[ offset.value ];\n\n\t\t\toffset.value = offset.value + INT8_SIZE;\n\n\t\t\treturn Uint8;\n\n\t\t}\n\n\t\tfunction parseUint8( dataView, offset ) {\n\n\t\t\tconst Uint8 = dataView.getUint8( offset.value );\n\n\t\t\toffset.value = offset.value + INT8_SIZE;\n\n\t\t\treturn Uint8;\n\n\t\t}\n\n\t\tconst parseInt64 = function ( dataView, offset ) {\n\n\t\t\tlet int;\n\n\t\t\tif ( 'getBigInt64' in DataView.prototype ) {\n\n\t\t\t\tint = Number( dataView.getBigInt64( offset.value, true ) );\n\n\t\t\t} else {\n\n\t\t\t\tint = dataView.getUint32( offset.value + 4, true ) + Number( dataView.getUint32( offset.value, true ) << 32 );\n\n\t\t\t}\n\n\t\t\toffset.value += ULONG_SIZE;\n\n\t\t\treturn int;\n\n\t\t};\n\n\t\tfunction parseFloat32( dataView, offset ) {\n\n\t\t\tconst float = dataView.getFloat32( offset.value, true );\n\n\t\t\toffset.value += FLOAT32_SIZE;\n\n\t\t\treturn float;\n\n\t\t}\n\n\t\tfunction decodeFloat32( dataView, offset ) {\n\n\t\t\treturn DataUtils.toHalfFloat( parseFloat32( dataView, offset ) );\n\n\t\t}\n\n\t\t// https://stackoverflow.com/questions/5678432/decompressing-half-precision-floats-in-javascript\n\t\tfunction decodeFloat16( binary ) {\n\n\t\t\tconst exponent = ( binary & 0x7C00 ) >> 10,\n\t\t\t\tfraction = binary & 0x03FF;\n\n\t\t\treturn ( binary >> 15 ? - 1 : 1 ) * (\n\t\t\t\texponent ?\n\t\t\t\t\t(\n\t\t\t\t\t\texponent === 0x1F ?\n\t\t\t\t\t\t\tfraction ? NaN : Infinity :\n\t\t\t\t\t\t\tMath.pow( 2, exponent - 15 ) * ( 1 + fraction / 0x400 )\n\t\t\t\t\t) :\n\t\t\t\t\t6.103515625e-5 * ( fraction / 0x400 )\n\t\t\t);\n\n\t\t}\n\n\t\tfunction parseUint16( dataView, offset ) {\n\n\t\t\tconst Uint16 = dataView.getUint16( offset.value, true );\n\n\t\t\toffset.value += INT16_SIZE;\n\n\t\t\treturn Uint16;\n\n\t\t}\n\n\t\tfunction parseFloat16( buffer, offset ) {\n\n\t\t\treturn decodeFloat16( parseUint16( buffer, offset ) );\n\n\t\t}\n\n\t\tfunction parseChlist( dataView, buffer, offset, size ) {\n\n\t\t\tconst startOffset = offset.value;\n\t\t\tconst channels = [];\n\n\t\t\twhile ( offset.value < ( startOffset + size - 1 ) ) {\n\n\t\t\t\tconst name = parseNullTerminatedString( buffer, offset );\n\t\t\t\tconst pixelType = parseInt32( dataView, offset );\n\t\t\t\tconst pLinear = parseUint8( dataView, offset );\n\t\t\t\toffset.value += 3; // reserved, three chars\n\t\t\t\tconst xSampling = parseInt32( dataView, offset );\n\t\t\t\tconst ySampling = parseInt32( dataView, offset );\n\n\t\t\t\tchannels.push( {\n\t\t\t\t\tname: name,\n\t\t\t\t\tpixelType: pixelType,\n\t\t\t\t\tpLinear: pLinear,\n\t\t\t\t\txSampling: xSampling,\n\t\t\t\t\tySampling: ySampling\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\toffset.value += 1;\n\n\t\t\treturn channels;\n\n\t\t}\n\n\t\tfunction parseChromaticities( dataView, offset ) {\n\n\t\t\tconst redX = parseFloat32( dataView, offset );\n\t\t\tconst redY = parseFloat32( dataView, offset );\n\t\t\tconst greenX = parseFloat32( dataView, offset );\n\t\t\tconst greenY = parseFloat32( dataView, offset );\n\t\t\tconst blueX = parseFloat32( dataView, offset );\n\t\t\tconst blueY = parseFloat32( dataView, offset );\n\t\t\tconst whiteX = parseFloat32( dataView, offset );\n\t\t\tconst whiteY = parseFloat32( dataView, offset );\n\n\t\t\treturn { redX: redX, redY: redY, greenX: greenX, greenY: greenY, blueX: blueX, blueY: blueY, whiteX: whiteX, whiteY: whiteY };\n\n\t\t}\n\n\t\tfunction parseCompression( dataView, offset ) {\n\n\t\t\tconst compressionCodes = [\n\t\t\t\t'NO_COMPRESSION',\n\t\t\t\t'RLE_COMPRESSION',\n\t\t\t\t'ZIPS_COMPRESSION',\n\t\t\t\t'ZIP_COMPRESSION',\n\t\t\t\t'PIZ_COMPRESSION',\n\t\t\t\t'PXR24_COMPRESSION',\n\t\t\t\t'B44_COMPRESSION',\n\t\t\t\t'B44A_COMPRESSION',\n\t\t\t\t'DWAA_COMPRESSION',\n\t\t\t\t'DWAB_COMPRESSION'\n\t\t\t];\n\n\t\t\tconst compression = parseUint8( dataView, offset );\n\n\t\t\treturn compressionCodes[ compression ];\n\n\t\t}\n\n\t\tfunction parseBox2i( dataView, offset ) {\n\n\t\t\tconst xMin = parseInt32( dataView, offset );\n\t\t\tconst yMin = parseInt32( dataView, offset );\n\t\t\tconst xMax = parseInt32( dataView, offset );\n\t\t\tconst yMax = parseInt32( dataView, offset );\n\n\t\t\treturn { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };\n\n\t\t}\n\n\t\tfunction parseLineOrder( dataView, offset ) {\n\n\t\t\tconst lineOrders = [\n\t\t\t\t'INCREASING_Y',\n\t\t\t\t'DECREASING_Y',\n\t\t\t\t'RANDOM_Y',\n\t\t\t];\n\n\t\t\tconst lineOrder = parseUint8( dataView, offset );\n\n\t\t\treturn lineOrders[ lineOrder ];\n\n\t\t}\n\n\t\tfunction parseEnvmap( dataView, offset ) {\n\n\t\t\tconst envmaps = [\n\t\t\t\t'ENVMAP_LATLONG',\n\t\t\t\t'ENVMAP_CUBE'\n\t\t\t];\n\n\t\t\tconst envmap = parseUint8( dataView, offset );\n\n\t\t\treturn envmaps[ envmap ];\n\n\t\t}\n\n\t\tfunction parseTiledesc( dataView, offset ) {\n\n\t\t\tconst levelModes = [\n\t\t\t\t'ONE_LEVEL',\n\t\t\t\t'MIPMAP_LEVELS',\n\t\t\t\t'RIPMAP_LEVELS',\n\t\t\t];\n\n\t\t\tconst roundingModes = [\n\t\t\t\t'ROUND_DOWN',\n\t\t\t\t'ROUND_UP',\n\t\t\t];\n\n\t\t\tconst xSize = parseUint32( dataView, offset );\n\t\t\tconst ySize = parseUint32( dataView, offset );\n\t\t\tconst modes = parseUint8( dataView, offset );\n\n\t\t\treturn {\n\t\t\t\txSize: xSize,\n\t\t\t\tySize: ySize,\n\t\t\t\tlevelMode: levelModes[ modes & 0xf ],\n\t\t\t\troundingMode: roundingModes[ modes >> 4 ]\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseV2f( dataView, offset ) {\n\n\t\t\tconst x = parseFloat32( dataView, offset );\n\t\t\tconst y = parseFloat32( dataView, offset );\n\n\t\t\treturn [ x, y ];\n\n\t\t}\n\n\t\tfunction parseV3f( dataView, offset ) {\n\n\t\t\tconst x = parseFloat32( dataView, offset );\n\t\t\tconst y = parseFloat32( dataView, offset );\n\t\t\tconst z = parseFloat32( dataView, offset );\n\n\t\t\treturn [ x, y, z ];\n\n\t\t}\n\n\t\tfunction parseValue( dataView, buffer, offset, type, size ) {\n\n\t\t\tif ( type === 'string' || type === 'stringvector' || type === 'iccProfile' ) {\n\n\t\t\t\treturn parseFixedLengthString( buffer, offset, size );\n\n\t\t\t} else if ( type === 'chlist' ) {\n\n\t\t\t\treturn parseChlist( dataView, buffer, offset, size );\n\n\t\t\t} else if ( type === 'chromaticities' ) {\n\n\t\t\t\treturn parseChromaticities( dataView, offset );\n\n\t\t\t} else if ( type === 'compression' ) {\n\n\t\t\t\treturn parseCompression( dataView, offset );\n\n\t\t\t} else if ( type === 'box2i' ) {\n\n\t\t\t\treturn parseBox2i( dataView, offset );\n\n\t\t\t} else if ( type === 'envmap' ) {\n\n\t\t\t\treturn parseEnvmap( dataView, offset );\n\n\t\t\t} else if ( type === 'tiledesc' ) {\n\n\t\t\t\treturn parseTiledesc( dataView, offset );\n\n\t\t\t} else if ( type === 'lineOrder' ) {\n\n\t\t\t\treturn parseLineOrder( dataView, offset );\n\n\t\t\t} else if ( type === 'float' ) {\n\n\t\t\t\treturn parseFloat32( dataView, offset );\n\n\t\t\t} else if ( type === 'v2f' ) {\n\n\t\t\t\treturn parseV2f( dataView, offset );\n\n\t\t\t} else if ( type === 'v3f' ) {\n\n\t\t\t\treturn parseV3f( dataView, offset );\n\n\t\t\t} else if ( type === 'int' ) {\n\n\t\t\t\treturn parseInt32( dataView, offset );\n\n\t\t\t} else if ( type === 'rational' ) {\n\n\t\t\t\treturn parseRational( dataView, offset );\n\n\t\t\t} else if ( type === 'timecode' ) {\n\n\t\t\t\treturn parseTimecode( dataView, offset );\n\n\t\t\t} else if ( type === 'preview' ) {\n\n\t\t\t\toffset.value += size;\n\t\t\t\treturn 'skipped';\n\n\t\t\t} else {\n\n\t\t\t\toffset.value += size;\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction roundLog2( x, mode ) {\n\n\t\t\tconst log2 = Math.log2( x );\n\t\t\treturn mode == 'ROUND_DOWN' ? Math.floor( log2 ) : Math.ceil( log2 );\n\n\t\t}\n\n\t\tfunction calculateTileLevels( tiledesc, w, h ) {\n\n\t\t\tlet num = 0;\n\n\t\t\tswitch ( tiledesc.levelMode ) {\n\n\t\t\t\tcase 'ONE_LEVEL':\n\t\t\t\t\tnum = 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'MIPMAP_LEVELS':\n\t\t\t\t\tnum = roundLog2( Math.max( w, h ), tiledesc.roundingMode ) + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RIPMAP_LEVELS':\n\t\t\t\t\tthrow new Error( 'THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.' );\n\n\t\t\t}\n\n\t\t\treturn num;\n\n\t\t}\n\n\t\tfunction calculateTiles( count, dataSize, size, roundingMode ) {\n\n\t\t\tconst tiles = new Array( count );\n\n\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\tconst b = ( 1 << i );\n\t\t\t\tlet s = ( dataSize / b ) | 0;\n\n\t\t\t\tif ( roundingMode == 'ROUND_UP' && s * b < dataSize ) s += 1;\n\n\t\t\t\tconst l = Math.max( s, 1 );\n\n\t\t\t\ttiles[ i ] = ( ( l + size - 1 ) / size ) | 0;\n\n\t\t\t}\n\n\t\t\treturn tiles;\n\n\t\t}\n\n\t\tfunction parseTiles() {\n\n\t\t\tconst EXRDecoder = this;\n\t\t\tconst offset = EXRDecoder.offset;\n\t\t\tconst tmpOffset = { value: 0 };\n\n\t\t\tfor ( let tile = 0; tile < EXRDecoder.tileCount; tile ++ ) {\n\n\t\t\t\tconst tileX = parseInt32( EXRDecoder.viewer, offset );\n\t\t\t\tconst tileY = parseInt32( EXRDecoder.viewer, offset );\n\t\t\t\toffset.value += 8; // skip levels - only parsing top-level\n\t\t\t\tEXRDecoder.size = parseUint32( EXRDecoder.viewer, offset );\n\n\t\t\t\tconst startX = tileX * EXRDecoder.blockWidth;\n\t\t\t\tconst startY = tileY * EXRDecoder.blockHeight;\n\t\t\t\tEXRDecoder.columns = ( startX + EXRDecoder.blockWidth > EXRDecoder.width ) ? EXRDecoder.width - startX : EXRDecoder.blockWidth;\n\t\t\t\tEXRDecoder.lines = ( startY + EXRDecoder.blockHeight > EXRDecoder.height ) ? EXRDecoder.height - startY : EXRDecoder.blockHeight;\n\n\t\t\t\tconst bytesBlockLine = EXRDecoder.columns * EXRDecoder.totalBytes;\n\t\t\t\tconst isCompressed = EXRDecoder.size < EXRDecoder.lines * bytesBlockLine;\n\t\t\t\tconst viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );\n\n\t\t\t\toffset.value += EXRDecoder.size;\n\n\t\t\t\tfor ( let line = 0; line < EXRDecoder.lines; line ++ ) {\n\n\t\t\t\t\tconst lineOffset = line * EXRDecoder.columns * EXRDecoder.totalBytes;\n\n\t\t\t\t\tfor ( let channelID = 0; channelID < EXRDecoder.inputChannels.length; channelID ++ ) {\n\n\t\t\t\t\t\tconst name = EXRHeader.channels[ channelID ].name;\n\t\t\t\t\t\tconst lOff = EXRDecoder.channelByteOffsets[ name ] * EXRDecoder.columns;\n\t\t\t\t\t\tconst cOff = EXRDecoder.decodeChannels[ name ];\n\n\t\t\t\t\t\tif ( cOff === undefined ) continue;\n\n\t\t\t\t\t\ttmpOffset.value = lineOffset + lOff;\n\t\t\t\t\t\tconst outLineOffset = ( EXRDecoder.height - ( 1 + startY + line ) ) * EXRDecoder.outLineWidth;\n\n\t\t\t\t\t\tfor ( let x = 0; x < EXRDecoder.columns; x ++ ) {\n\n\t\t\t\t\t\t\tconst outIndex = outLineOffset + ( x + startX ) * EXRDecoder.outputChannels + cOff;\n\t\t\t\t\t\t\tEXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseScanline() {\n\n\t\t\tconst EXRDecoder = this;\n\t\t\tconst offset = EXRDecoder.offset;\n\t\t\tconst tmpOffset = { value: 0 };\n\n\t\t\tfor ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.blockHeight; scanlineBlockIdx ++ ) {\n\n\t\t\t\tconst line = parseInt32( EXRDecoder.viewer, offset ) - EXRHeader.dataWindow.yMin; // line_no\n\t\t\t\tEXRDecoder.size = parseUint32( EXRDecoder.viewer, offset ); // data_len\n\t\t\t\tEXRDecoder.lines = ( ( line + EXRDecoder.blockHeight > EXRDecoder.height ) ? ( EXRDecoder.height - line ) : EXRDecoder.blockHeight );\n\n\t\t\t\tconst bytesPerLine = EXRDecoder.columns * EXRDecoder.totalBytes;\n\t\t\t\tconst isCompressed = EXRDecoder.size < EXRDecoder.lines * bytesPerLine;\n\t\t\t\tconst viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );\n\n\t\t\t\toffset.value += EXRDecoder.size;\n\n\t\t\t\tfor ( let line_y = 0; line_y < EXRDecoder.blockHeight; line_y ++ ) {\n\n\t\t\t\t\tconst scan_y = scanlineBlockIdx * EXRDecoder.blockHeight;\n\t\t\t\t\tconst true_y = line_y + EXRDecoder.scanOrder( scan_y );\n\t\t\t\t\tif ( true_y >= EXRDecoder.height ) continue;\n\n\t\t\t\t\tconst lineOffset = line_y * bytesPerLine;\n\t\t\t\t\tconst outLineOffset = ( EXRDecoder.height - 1 - true_y ) * EXRDecoder.outLineWidth;\n\n\t\t\t\t\tfor ( let channelID = 0; channelID < EXRDecoder.inputChannels.length; channelID ++ ) {\n\n\t\t\t\t\t\tconst name = EXRHeader.channels[ channelID ].name;\n\t\t\t\t\t\tconst lOff = EXRDecoder.channelByteOffsets[ name ] * EXRDecoder.columns;\n\t\t\t\t\t\tconst cOff = EXRDecoder.decodeChannels[ name ];\n\n\t\t\t\t\t\tif ( cOff === undefined ) continue;\n\n\t\t\t\t\t\ttmpOffset.value = lineOffset + lOff;\n\n\t\t\t\t\t\tfor ( let x = 0; x < EXRDecoder.columns; x ++ ) {\n\n\t\t\t\t\t\t\tconst outIndex = outLineOffset + x * EXRDecoder.outputChannels + cOff;\n\t\t\t\t\t\t\tEXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseHeader( dataView, buffer, offset ) {\n\n\t\t\tconst EXRHeader = {};\n\n\t\t\tif ( dataView.getUint32( 0, true ) != 20000630 ) { // magic\n\n\t\t\t\tthrow new Error( 'THREE.EXRLoader: Provided file doesn\\'t appear to be in OpenEXR format.' );\n\n\t\t\t}\n\n\t\t\tEXRHeader.version = dataView.getUint8( 4 );\n\n\t\t\tconst spec = dataView.getUint8( 5 ); // fullMask\n\n\t\t\tEXRHeader.spec = {\n\t\t\t\tsingleTile: !! ( spec & 2 ),\n\t\t\t\tlongName: !! ( spec & 4 ),\n\t\t\t\tdeepFormat: !! ( spec & 8 ),\n\t\t\t\tmultiPart: !! ( spec & 16 ),\n\t\t\t};\n\n\t\t\t// start of header\n\n\t\t\toffset.value = 8; // start at 8 - after pre-amble\n\n\t\t\tlet keepReading = true;\n\n\t\t\twhile ( keepReading ) {\n\n\t\t\t\tconst attributeName = parseNullTerminatedString( buffer, offset );\n\n\t\t\t\tif ( attributeName == 0 ) {\n\n\t\t\t\t\tkeepReading = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst attributeType = parseNullTerminatedString( buffer, offset );\n\t\t\t\t\tconst attributeSize = parseUint32( dataView, offset );\n\t\t\t\t\tconst attributeValue = parseValue( dataView, buffer, offset, attributeType, attributeSize );\n\n\t\t\t\t\tif ( attributeValue === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( `THREE.EXRLoader: Skipped unknown header attribute type \\'${attributeType}\\'.` );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tEXRHeader[ attributeName ] = attributeValue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( spec & ~ 0x06 ) != 0 ) { // unsupported deep-image, multi-part\n\n\t\t\t\tconsole.error( 'THREE.EXRHeader:', EXRHeader );\n\t\t\t\tthrow new Error( 'THREE.EXRLoader: Provided file is currently unsupported.' );\n\n\t\t\t}\n\n\t\t\treturn EXRHeader;\n\n\t\t}\n\n\t\tfunction setupDecoder( EXRHeader, dataView, uInt8Array, offset, outputType ) {\n\n\t\t\tconst EXRDecoder = {\n\t\t\t\tsize: 0,\n\t\t\t\tviewer: dataView,\n\t\t\t\tarray: uInt8Array,\n\t\t\t\toffset: offset,\n\t\t\t\twidth: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,\n\t\t\t\theight: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,\n\t\t\t\tinputChannels: EXRHeader.channels,\n\t\t\t\tchannelByteOffsets: {},\n\t\t\t\tscanOrder: null,\n\t\t\t\ttotalBytes: null,\n\t\t\t\tcolumns: null,\n\t\t\t\tlines: null,\n\t\t\t\ttype: null,\n\t\t\t\tuncompress: null,\n\t\t\t\tgetter: null,\n\t\t\t\tformat: null,\n\t\t\t\tcolorSpace: LinearSRGBColorSpace,\n\t\t\t};\n\n\t\t\tswitch ( EXRHeader.compression ) {\n\n\t\t\t\tcase 'NO_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 1;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressRAW;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RLE_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 1;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressRLE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZIPS_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 1;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressZIP;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZIP_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 16;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressZIP;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PIZ_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 32;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressPIZ;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PXR24_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 16;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressPXR;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DWAA_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 32;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressDWA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DWAB_COMPRESSION':\n\t\t\t\t\tEXRDecoder.blockHeight = 256;\n\t\t\t\t\tEXRDecoder.uncompress = uncompressDWA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported' );\n\n\t\t\t}\n\n\t\t\tconst channels = {};\n\t\t\tfor ( const channel of EXRHeader.channels ) {\n\n\t\t\t\tswitch ( channel.name ) {\n\n\t\t\t\t\tcase 'Y':\n\t\t\t\t\tcase 'R':\n\t\t\t\t\tcase 'G':\n\t\t\t\t\tcase 'B':\n\t\t\t\t\tcase 'A':\n\t\t\t\t\t\tchannels[ channel.name ] = true;\n\t\t\t\t\t\tEXRDecoder.type = channel.pixelType;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// RGB images will be converted to RGBA format, preventing software emulation in select devices.\n\t\t\tlet fillAlpha = false;\n\n\t\t\tif ( channels.R && channels.G && channels.B ) {\n\n\t\t\t\tfillAlpha = ! channels.A;\n\t\t\t\tEXRDecoder.outputChannels = 4;\n\t\t\t\tEXRDecoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };\n\n\t\t\t} else if ( channels.Y ) {\n\n\t\t\t\tEXRDecoder.outputChannels = 1;\n\t\t\t\tEXRDecoder.decodeChannels = { Y: 0 };\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'EXRLoader.parse: file contains unsupported data channels.' );\n\n\t\t\t}\n\n\t\t\tif ( EXRDecoder.type == 1 ) {\n\n\t\t\t\t// half\n\t\t\t\tswitch ( outputType ) {\n\n\t\t\t\t\tcase FloatType:\n\t\t\t\t\t\tEXRDecoder.getter = parseFloat16;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\t\t\t\t\t\tEXRDecoder.getter = parseUint16;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( EXRDecoder.type == 2 ) {\n\n\t\t\t\t// float\n\t\t\t\tswitch ( outputType ) {\n\n\t\t\t\t\tcase FloatType:\n\t\t\t\t\t\tEXRDecoder.getter = parseFloat32;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\t\t\t\t\t\tEXRDecoder.getter = decodeFloat32;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'EXRLoader.parse: unsupported pixelType ' + EXRDecoder.type + ' for ' + EXRHeader.compression + '.' );\n\n\t\t\t}\n\n\t\t\tEXRDecoder.columns = EXRDecoder.width;\n\t\t\tconst size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;\n\n\t\t\tswitch ( outputType ) {\n\n\t\t\t\tcase FloatType:\n\t\t\t\t\tEXRDecoder.byteArray = new Float32Array( size );\n\n\t\t\t\t\t// Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten\n\t\t\t\t\tif ( fillAlpha )\n\t\t\t\t\t\tEXRDecoder.byteArray.fill( 1, 0, size );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase HalfFloatType:\n\t\t\t\t\tEXRDecoder.byteArray = new Uint16Array( size );\n\n\t\t\t\t\tif ( fillAlpha )\n\t\t\t\t\t\tEXRDecoder.byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error( 'THREE.EXRLoader: unsupported type: ', outputType );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlet byteOffset = 0;\n\t\t\tfor ( const channel of EXRHeader.channels ) {\n\n\t\t\t\tif ( EXRDecoder.decodeChannels[ channel.name ] !== undefined ) {\n\n\t\t\t\t\tEXRDecoder.channelByteOffsets[ channel.name ] = byteOffset;\n\n\t\t\t\t}\n\n\t\t\t\tbyteOffset += channel.pixelType * 2;\n\n\t\t\t}\n\n\t\t\tEXRDecoder.totalBytes = byteOffset;\n\t\t\tEXRDecoder.outLineWidth = EXRDecoder.width * EXRDecoder.outputChannels;\n\n\t\t\tif ( EXRHeader.lineOrder === 'INCREASING_Y' ) {\n\n\t\t\t\tEXRDecoder.scanOrder = ( y ) => y;\n\n\t\t\t} else {\n\n\t\t\t\tEXRDecoder.scanOrder = ( y ) => EXRDecoder.height - 1 - y;\n\n\t\t\t}\n\n\t\t\tif ( EXRDecoder.outputChannels == 4 ) {\n\n\t\t\t\tEXRDecoder.format = RGBAFormat;\n\t\t\t\tEXRDecoder.colorSpace = LinearSRGBColorSpace;\n\n\t\t\t} else {\n\n\t\t\t\tEXRDecoder.format = RedFormat;\n\t\t\t\tEXRDecoder.colorSpace = NoColorSpace;\n\n\t\t\t}\n\n\t\t\tif ( EXRHeader.spec.singleTile ) {\n\n\t\t\t\tEXRDecoder.blockHeight = EXRHeader.tiles.ySize;\n\t\t\t\tEXRDecoder.blockWidth = EXRHeader.tiles.xSize;\n\n\t\t\t\tconst numXLevels = calculateTileLevels( EXRHeader.tiles, EXRDecoder.width, EXRDecoder.height );\n\t\t\t\t// const numYLevels = calculateTileLevels( EXRHeader.tiles, EXRDecoder.width, EXRDecoder.height );\n\n\t\t\t\tconst numXTiles = calculateTiles( numXLevels, EXRDecoder.width, EXRHeader.tiles.xSize, EXRHeader.tiles.roundingMode );\n\t\t\t\tconst numYTiles = calculateTiles( numXLevels, EXRDecoder.height, EXRHeader.tiles.ySize, EXRHeader.tiles.roundingMode );\n\n\t\t\t\tEXRDecoder.tileCount = numXTiles[ 0 ] * numYTiles[ 0 ];\n\n\t\t\t\tfor ( let l = 0; l < numXLevels; l ++ )\n\t\t\t\t\tfor ( let y = 0; y < numYTiles[ l ]; y ++ )\n\t\t\t\t\t\tfor ( let x = 0; x < numXTiles[ l ]; x ++ )\n\t\t\t\t\t\t\tparseInt64( dataView, offset ); // tileOffset\n\n\t\t\t\tEXRDecoder.decode = parseTiles.bind( EXRDecoder );\n\n\t\t\t} else {\n\n\t\t\t\tEXRDecoder.blockWidth = EXRDecoder.width;\n\t\t\t\tconst blockCount = Math.ceil( EXRDecoder.height / EXRDecoder.blockHeight );\n\n\t\t\t\tfor ( let i = 0; i < blockCount; i ++ )\n\t\t\t\t\tparseInt64( dataView, offset ); // scanlineOffset\n\n\t\t\t\tEXRDecoder.decode = parseScanline.bind( EXRDecoder );\n\n\t\t\t}\n\n\t\t\treturn EXRDecoder;\n\n\t\t}\n\n\t\t// start parsing file [START]\n\t\tconst offset = { value: 0 };\n\t\tconst bufferDataView = new DataView( buffer );\n\t\tconst uInt8Array = new Uint8Array( buffer );\n\n\t\t// get header information and validate format.\n\t\tconst EXRHeader = parseHeader( bufferDataView, buffer, offset );\n\n\t\t// get input compression information and prepare decoding.\n\t\tconst EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );\n\n\t\t// parse input data\n\t\tEXRDecoder.decode();\n\n\t\treturn {\n\t\t\theader: EXRHeader,\n\t\t\twidth: EXRDecoder.width,\n\t\t\theight: EXRDecoder.height,\n\t\t\tdata: EXRDecoder.byteArray,\n\t\t\tformat: EXRDecoder.format,\n\t\t\tcolorSpace: EXRDecoder.colorSpace,\n\t\t\ttype: this.type,\n\t\t};\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\ttexture.colorSpace = texData.colorSpace;\n\t\t\ttexture.minFilter = LinearFilter;\n\t\t\ttexture.magFilter = LinearFilter;\n\t\t\ttexture.generateMipmaps = false;\n\t\t\ttexture.flipY = false;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn super.load( url, onLoadCallback, onProgress, onError );\n\n\t}\n\n}\n\nexport { EXRLoader };\n", "import {\n\tBufferGeometryLoader,\n\tCanvasTexture,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tLinearFilter,\n\tLine,\n\tLineBasicMaterial,\n\tLoader,\n\tMatrix4,\n\tMesh,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tObject3D,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tRectAreaLight,\n\tRepeatWrapping,\n\tSpotLight,\n\tSprite,\n\tSpriteMaterial,\n\tTextureLoader\n} from 'three';\n\nimport { EXRLoader } from '../loaders/EXRLoader.js';\n\nconst _taskCache = new WeakMap();\n\nclass Rhino3dmLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.libraryPath = '';\n\t\tthis.libraryPending = null;\n\t\tthis.libraryBinary = null;\n\t\tthis.libraryConfig = {};\n\n\t\tthis.url = '';\n\n\t\tthis.workerLimit = 4;\n\t\tthis.workerPool = [];\n\t\tthis.workerNextTaskID = 1;\n\t\tthis.workerSourceURL = '';\n\t\tthis.workerConfig = {};\n\n\t\tthis.materials = [];\n\t\tthis.warnings = [];\n\n\t}\n\n\tsetLibraryPath( path ) {\n\n\t\tthis.libraryPath = path;\n\n\t\treturn this;\n\n\t}\n\n\tsetWorkerLimit( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\n\t\tthis.url = url;\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t\t// again from this thread.\n\t\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\t\treturn cachedTask.promise.then( onLoad ).catch( onError );\n\n\t\t\t}\n\n\t\t\tthis.decodeObjects( buffer, url )\n\t\t\t\t.then( result => {\n\n\t\t\t\t\tresult.userData.warnings = this.warnings;\n\t\t\t\t\tonLoad( result );\n\n\t\t\t\t } )\n\t\t\t\t.catch( e => onError( e ) );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tdebug() {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t}\n\n\tdecodeObjects( buffer, url ) {\n\n\t\tlet worker;\n\t\tlet taskID;\n\n\t\tconst taskCost = buffer.byteLength;\n\n\t\tconst objectPending = this._getWorker( taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\t\t\t\ttaskID = this.workerNextTaskID ++;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, buffer }, [ buffer ] );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.data ) )\n\t\t\t.catch( e => {\n\n\t\t\t\tthrow e;\n\n\t\t\t} );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tobjectPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t//this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffer, {\n\n\t\t\turl: url,\n\t\t\tpromise: objectPending\n\n\t\t} );\n\n\t\treturn objectPending;\n\n\t}\n\n\tparse( data, onLoad, onError ) {\n\n\t\tthis.decodeObjects( data, '' )\n\t\t\t.then( result => {\n\n\t\t\t\tresult.userData.warnings = this.warnings;\n\t\t\t\tonLoad( result );\n\n\t\t\t} )\n\t\t\t.catch( e => onError( e ) );\n\n\t}\n\n\t_compareMaterials( material ) {\n\n\t\tconst mat = {};\n\t\tmat.name = material.name;\n\t\tmat.color = {};\n\t\tmat.color.r = material.color.r;\n\t\tmat.color.g = material.color.g;\n\t\tmat.color.b = material.color.b;\n\t\tmat.type = material.type;\n\t\tmat.vertexColors = material.vertexColors;\n\n\t\tconst json = JSON.stringify( mat );\n\n\t\tfor ( let i = 0; i < this.materials.length; i ++ ) {\n\n\t\t\tconst m = this.materials[ i ];\n\t\t\tconst _mat = {};\n\t\t\t_mat.name = m.name;\n\t\t\t_mat.color = {};\n\t\t\t_mat.color.r = m.color.r;\n\t\t\t_mat.color.g = m.color.g;\n\t\t\t_mat.color.b = m.color.b;\n\t\t\t_mat.type = m.type;\n\t\t\t_mat.vertexColors = m.vertexColors;\n\n\t\t\tif ( JSON.stringify( _mat ) === json ) {\n\n\t\t\t\treturn m;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials.push( material );\n\n\t\treturn material;\n\n\t}\n\n\t_createMaterial( material, renderEnvironment ) {\n\n\t\tif ( material === undefined ) {\n\n\t\t\treturn new MeshStandardMaterial( {\n\t\t\t\tcolor: new Color( 1, 1, 1 ),\n\t\t\t\tmetalness: 0.8,\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tside: DoubleSide\n\t\t\t} );\n\n\t\t}\n\n\t\t//console.log(material)\n\n\t\tconst mat = new MeshPhysicalMaterial( {\n\n\t\t\tcolor: new Color( material.diffuseColor.r / 255.0, material.diffuseColor.g / 255.0, material.diffuseColor.b / 255.0 ),\n\t\t\temissive: new Color( material.emissionColor.r, material.emissionColor.g, material.emissionColor.b ),\n\t\t\tflatShading: material.disableLighting,\n\t\t\tior: material.indexOfRefraction,\n\t\t\tname: material.name,\n\t\t\treflectivity: material.reflectivity,\n\t\t\topacity: 1.0 - material.transparency,\n\t\t\tside: DoubleSide,\n\t\t\tspecularColor: material.specularColor,\n\t\t\ttransparent: material.transparency > 0 ? true : false\n\n\t\t} );\n\n\t\tmat.userData.id = material.id;\n\n\t\tif ( material.pbrSupported ) {\n\n\t\t\tconst pbr = material.pbr;\n\n\t\t\tmat.anisotropy = pbr.anisotropic;\n\t\t\tmat.anisotropyRotation = pbr.anisotropicRotation;\n\t\t\tmat.color = new Color( pbr.baseColor.r, pbr.baseColor.g, pbr.baseColor.b );\n\t\t\tmat.clearcoat = pbr.clearcoat;\n\t\t\tmat.clearcoatRoughness = pbr.clearcoatRoughness;\n\t\t\tmat.metalness = pbr.metallic;\n\t\t\tmat.transmission = 1 - pbr.opacity;\n\t\t\tmat.roughness = pbr.roughness;\n\t\t\tmat.sheen = pbr.sheen;\n\t\t\tmat.specularIntensity = pbr.specular;\n\t\t\tmat.thickness = pbr.subsurface;\n\n\t\t}\n\n\t\tif ( material.pbrSupported && material.pbr.opacity === 0 && material.transparency === 1 ) {\n\n\t\t\t//some compromises\n\n\t\t\tmat.opacity = 0.2;\n\t\t\tmat.transmission = 1.00;\n\n\t\t}\n\n\t\tconst textureLoader = new TextureLoader();\n\n\t\tfor ( let i = 0; i < material.textures.length; i ++ ) {\n\n\t\t\tconst texture = material.textures[ i ];\n\n\t\t\tif ( texture.image !== null ) {\n\n\t\t\t\tconst map = textureLoader.load( texture.image );\n\n\t\t\t\t//console.log(texture.type )\n\n\t\t\t\tswitch ( texture.type ) {\n\n\t\t\t\t\tcase 'Bump':\n\n\t\t\t\t\t\tmat.bumpMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Diffuse':\n\n\t\t\t\t\t\tmat.map = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Emap':\n\n\t\t\t\t\t\tmat.envMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Opacity':\n\n\t\t\t\t\t\tmat.transmissionMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Transparency':\n\n\t\t\t\t\t\tmat.alphaMap = map;\n\t\t\t\t\t\tmat.transparent = true;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Alpha':\n\n\t\t\t\t\t\tmat.alphaMap = map;\n\t\t\t\t\t\tmat.transparent = true;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_AmbientOcclusion':\n\n\t\t\t\t\t\tmat.aoMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Anisotropic':\n\n\t\t\t\t\t\tmat.anisotropyMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_BaseColor':\n\n\t\t\t\t\t\tmat.map = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Clearcoat':\n\n\t\t\t\t\t\tmat.clearcoatMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_ClearcoatBump':\n\n\t\t\t\t\t\tmat.clearcoatNormalMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_ClearcoatRoughness':\n\n\t\t\t\t\t\tmat.clearcoatRoughnessMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Displacement':\n\n\t\t\t\t\t\tmat.displacementMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Emission':\n\n\t\t\t\t\t\tmat.emissiveMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Metallic':\n\n\t\t\t\t\t\tmat.metalnessMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Roughness':\n\n\t\t\t\t\t\tmat.roughnessMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Sheen':\n\n\t\t\t\t\t\tmat.sheenColorMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Specular':\n\n\t\t\t\t\t\tmat.specularColorMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PBR_Subsurface':\n\n\t\t\t\t\t\tmat.thicknessMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tthis.warnings.push( {\n\t\t\t\t\t\t\tmessage: `THREE.3DMLoader: No conversion exists for 3dm ${texture.type}.`,\n\t\t\t\t\t\t\ttype: 'no conversion'\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tmap.wrapS = texture.wrapU === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\t\t\t\tmap.wrapT = texture.wrapV === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\t\t\tif ( texture.repeat ) {\n\n\t\t\t\t\tmap.repeat.set( texture.repeat[ 0 ], texture.repeat[ 1 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( renderEnvironment ) {\n\n\t\t\tnew EXRLoader().load( renderEnvironment.image, function ( texture ) {\n\n\t\t\t\ttexture.mapping = THREE.EquirectangularReflectionMapping;\n\t\t\t\tmat.envMap = texture;\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn mat;\n\n\t}\n\n\t_createGeometry( data ) {\n\n\t\tconst object = new Object3D();\n\t\tconst instanceDefinitionObjects = [];\n\t\tconst instanceDefinitions = [];\n\t\tconst instanceReferences = [];\n\n\t\tobject.userData[ 'layers' ] = data.layers;\n\t\tobject.userData[ 'groups' ] = data.groups;\n\t\tobject.userData[ 'settings' ] = data.settings;\n\t\tobject.userData.settings[ 'renderSettings' ] = data.renderSettings;\n\t\tobject.userData[ 'objectType' ] = 'File3dm';\n\t\tobject.userData[ 'materials' ] = null;\n\n\t\tobject.name = this.url;\n\n\t\tlet objects = data.objects;\n\t\tconst materials = data.materials;\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\tconst obj = objects[ i ];\n\t\t\tconst attributes = obj.attributes;\n\n\t\t\tswitch ( obj.objectType ) {\n\n\t\t\t\tcase 'InstanceDefinition':\n\n\t\t\t\t\tinstanceDefinitions.push( obj );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'InstanceReference':\n\n\t\t\t\t\tinstanceReferences.push( obj );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tlet matId = null;\n\n\t\t\t\t\tswitch ( attributes.materialSource.name ) {\n\n\t\t\t\t\t\tcase 'ObjectMaterialSource_MaterialFromLayer':\n\t\t\t\t\t\t\t//check layer index\n\t\t\t\t\t\t\tif ( attributes.layerIndex >= 0 ) {\n\n\t\t\t\t\t\t\t\tmatId = data.layers[ attributes.layerIndex ].renderMaterialIndex;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ObjectMaterialSource_MaterialFromObject':\n\n\t\t\t\t\t\t\tif ( attributes.materialIndex >= 0 ) {\n\n\t\t\t\t\t\t\t\tmatId = attributes.materialIndex;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet material = null;\n\n\t\t\t\t\tif ( matId >= 0 ) {\n\n\t\t\t\t\t\tconst rMaterial = materials[ matId ];\n\t\t\t\t\t\tmaterial = this._createMaterial( rMaterial, data.renderEnvironment );\n\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst _object = this._createObject( obj, material );\n\n\t\t\t\t\tif ( _object === undefined ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst layer = data.layers[ attributes.layerIndex ];\n\n\t\t\t\t\t_object.visible = layer ? data.layers[ attributes.layerIndex ].visible : true;\n\n\t\t\t\t\tif ( attributes.isInstanceDefinitionObject ) {\n\n\t\t\t\t\t\tinstanceDefinitionObjects.push( _object );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.add( _object );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < instanceDefinitions.length; i ++ ) {\n\n\t\t\tconst iDef = instanceDefinitions[ i ];\n\n\t\t\tobjects = [];\n\n\t\t\tfor ( let j = 0; j < iDef.attributes.objectIds.length; j ++ ) {\n\n\t\t\t\tconst objId = iDef.attributes.objectIds[ j ];\n\n\t\t\t\tfor ( let p = 0; p < instanceDefinitionObjects.length; p ++ ) {\n\n\t\t\t\t\tconst idoId = instanceDefinitionObjects[ p ].userData.attributes.id;\n\n\t\t\t\t\tif ( objId === idoId ) {\n\n\t\t\t\t\t\tobjects.push( instanceDefinitionObjects[ p ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Currently clones geometry and does not take advantage of instancing\n\n\t\t\tfor ( let j = 0; j < instanceReferences.length; j ++ ) {\n\n\t\t\t\tconst iRef = instanceReferences[ j ];\n\n\t\t\t\tif ( iRef.geometry.parentIdefId === iDef.attributes.id ) {\n\n\t\t\t\t\tconst iRefObject = new Object3D();\n\t\t\t\t\tconst xf = iRef.geometry.xform.array;\n\n\t\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\t\tmatrix.set( ...xf );\n\n\t\t\t\t\tiRefObject.applyMatrix4( matrix );\n\n\t\t\t\t\tfor ( let p = 0; p < objects.length; p ++ ) {\n\n\t\t\t\t\t\tiRefObject.add( objects[ p ].clone( true ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.add( iRefObject );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tobject.userData[ 'materials' ] = this.materials;\n\t\tobject.name = '';\n\t\treturn object;\n\n\t}\n\n\t_createObject( obj, mat ) {\n\n\t\tconst loader = new BufferGeometryLoader();\n\n\t\tconst attributes = obj.attributes;\n\n\t\tlet geometry, material, _color, color;\n\n\t\tswitch ( obj.objectType ) {\n\n\t\t\tcase 'Point':\n\t\t\tcase 'PointSet':\n\n\t\t\t\tgeometry = loader.parse( obj.geometry );\n\n\t\t\t\tif ( geometry.attributes.hasOwnProperty( 'color' ) ) {\n\n\t\t\t\t\tmaterial = new PointsMaterial( { vertexColors: true, sizeAttenuation: false, size: 2 } );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_color = attributes.drawColor;\n\t\t\t\t\tcolor = new Color( _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 );\n\t\t\t\t\tmaterial = new PointsMaterial( { color: color, sizeAttenuation: false, size: 2 } );\n\n\t\t\t\t}\n\n\t\t\t\tmaterial = this._compareMaterials( material );\n\n\t\t\t\tconst points = new Points( geometry, material );\n\t\t\t\tpoints.userData[ 'attributes' ] = attributes;\n\t\t\t\tpoints.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tpoints.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn points;\n\n\t\t\tcase 'Mesh':\n\t\t\tcase 'Extrusion':\n\t\t\tcase 'SubD':\n\t\t\tcase 'Brep':\n\n\t\t\t\tif ( obj.geometry === null ) return;\n\n\t\t\t\tgeometry = loader.parse( obj.geometry );\n\n\n\t\t\t\tif ( mat === null ) {\n\n\t\t\t\t\tmat = this._createMaterial();\n\n\t\t\t\t}\n\n\n\t\t\t\tif ( geometry.attributes.hasOwnProperty( 'color' ) ) {\n\n\t\t\t\t\tmat.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tmat = this._compareMaterials( mat );\n\n\t\t\t\tconst mesh = new Mesh( geometry, mat );\n\t\t\t\tmesh.castShadow = attributes.castsShadows;\n\t\t\t\tmesh.receiveShadow = attributes.receivesShadows;\n\t\t\t\tmesh.userData[ 'attributes' ] = attributes;\n\t\t\t\tmesh.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tmesh.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn mesh;\n\n\t\t\tcase 'Curve':\n\n\t\t\t\tgeometry = loader.parse( obj.geometry );\n\n\t\t\t\t_color = attributes.drawColor;\n\t\t\t\tcolor = new Color( _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 );\n\n\t\t\t\tmaterial = new LineBasicMaterial( { color: color } );\n\t\t\t\tmaterial = this._compareMaterials( material );\n\n\t\t\t\tconst lines = new Line( geometry, material );\n\t\t\t\tlines.userData[ 'attributes' ] = attributes;\n\t\t\t\tlines.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tlines.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn lines;\n\n\t\t\tcase 'TextDot':\n\n\t\t\t\tgeometry = obj.geometry;\n\n\t\t\t\tconst ctx = document.createElement( 'canvas' ).getContext( '2d' );\n\t\t\t\tconst font = `${geometry.fontHeight}px ${geometry.fontFace}`;\n\t\t\t\tctx.font = font;\n\t\t\t\tconst width = ctx.measureText( geometry.text ).width + 10;\n\t\t\t\tconst height = geometry.fontHeight + 10;\n\n\t\t\t\tconst r = window.devicePixelRatio;\n\n\t\t\t\tctx.canvas.width = width * r;\n\t\t\t\tctx.canvas.height = height * r;\n\t\t\t\tctx.canvas.style.width = width + 'px';\n\t\t\t\tctx.canvas.style.height = height + 'px';\n\t\t\t\tctx.setTransform( r, 0, 0, r, 0, 0 );\n\n\t\t\t\tctx.font = font;\n\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\tctx.textAlign = 'center';\n\t\t\t\tcolor = attributes.drawColor;\n\t\t\t\tctx.fillStyle = `rgba(${color.r},${color.g},${color.b},${color.a})`;\n\t\t\t\tctx.fillRect( 0, 0, width, height );\n\t\t\t\tctx.fillStyle = 'white';\n\t\t\t\tctx.fillText( geometry.text, width / 2, height / 2 );\n\n\t\t\t\tconst texture = new CanvasTexture( ctx.canvas );\n\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\t\t\ttexture.wrapT = ClampToEdgeWrapping;\n\n\t\t\t\tmaterial = new SpriteMaterial( { map: texture, depthTest: false } );\n\t\t\t\tconst sprite = new Sprite( material );\n\t\t\t\tsprite.position.set( geometry.point[ 0 ], geometry.point[ 1 ], geometry.point[ 2 ] );\n\t\t\t\tsprite.scale.set( width / 10, height / 10, 1.0 );\n\n\t\t\t\tsprite.userData[ 'attributes' ] = attributes;\n\t\t\t\tsprite.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tsprite.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn sprite;\n\n\t\t\tcase 'Light':\n\n\t\t\t\tgeometry = obj.geometry;\n\n\t\t\t\tlet light;\n\n\t\t\t\tswitch ( geometry.lightStyle.name ) {\n\n\t\t\t\t\tcase 'LightStyle_WorldPoint':\n\n\t\t\t\t\t\tlight = new PointLight();\n\t\t\t\t\t\tlight.castShadow = attributes.castsShadows;\n\t\t\t\t\t\tlight.position.set( geometry.location[ 0 ], geometry.location[ 1 ], geometry.location[ 2 ] );\n\t\t\t\t\t\tlight.shadow.normalBias = 0.1;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LightStyle_WorldSpot':\n\n\t\t\t\t\t\tlight = new SpotLight();\n\t\t\t\t\t\tlight.castShadow = attributes.castsShadows;\n\t\t\t\t\t\tlight.position.set( geometry.location[ 0 ], geometry.location[ 1 ], geometry.location[ 2 ] );\n\t\t\t\t\t\tlight.target.position.set( geometry.direction[ 0 ], geometry.direction[ 1 ], geometry.direction[ 2 ] );\n\t\t\t\t\t\tlight.angle = geometry.spotAngleRadians;\n\t\t\t\t\t\tlight.shadow.normalBias = 0.1;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LightStyle_WorldRectangular':\n\n\t\t\t\t\t\tlight = new RectAreaLight();\n\t\t\t\t\t\tconst width = Math.abs( geometry.width[ 2 ] );\n\t\t\t\t\t\tconst height = Math.abs( geometry.length[ 0 ] );\n\t\t\t\t\t\tlight.position.set( geometry.location[ 0 ] - ( height / 2 ), geometry.location[ 1 ], geometry.location[ 2 ] - ( width / 2 ) );\n\t\t\t\t\t\tlight.height = height;\n\t\t\t\t\t\tlight.width = width;\n\t\t\t\t\t\tlight.lookAt( geometry.direction[ 0 ], geometry.direction[ 1 ], geometry.direction[ 2 ] );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LightStyle_WorldDirectional':\n\n\t\t\t\t\t\tlight = new DirectionalLight();\n\t\t\t\t\t\tlight.castShadow = attributes.castsShadows;\n\t\t\t\t\t\tlight.position.set( geometry.location[ 0 ], geometry.location[ 1 ], geometry.location[ 2 ] );\n\t\t\t\t\t\tlight.target.position.set( geometry.direction[ 0 ], geometry.direction[ 1 ], geometry.direction[ 2 ] );\n\t\t\t\t\t\tlight.shadow.normalBias = 0.1;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LightStyle_WorldLinear':\n\t\t\t\t\t\t// no conversion exists, warning has already been printed to the console\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( light ) {\n\n\t\t\t\t\tlight.intensity = geometry.intensity;\n\t\t\t\t\t_color = geometry.diffuse;\n\t\t\t\t\tcolor = new Color( _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 );\n\t\t\t\t\tlight.color = color;\n\t\t\t\t\tlight.userData[ 'attributes' ] = attributes;\n\t\t\t\t\tlight.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\t}\n\n\t\t\t\treturn light;\n\n\t\t}\n\n\t}\n\n\t_initLibrary() {\n\n\t\tif ( ! this.libraryPending ) {\n\n\t\t\t// Load rhino3dm wrapper.\n\t\t\tconst jsLoader = new FileLoader( this.manager );\n\t\t\tjsLoader.setPath( this.libraryPath );\n\t\t\tconst jsContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tjsLoader.load( 'rhino3dm.js', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\t// Load rhino3dm WASM binary.\n\t\t\tconst binaryLoader = new FileLoader( this.manager );\n\t\t\tbinaryLoader.setPath( this.libraryPath );\n\t\t\tbinaryLoader.setResponseType( 'arraybuffer' );\n\t\t\tconst binaryContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tbinaryLoader.load( 'rhino3dm.wasm', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\tthis.libraryPending = Promise.all( [ jsContent, binaryContent ] )\n\t\t\t\t.then( ( [ jsContent, binaryContent ] ) => {\n\n\t\t\t\t\t//this.libraryBinary = binaryContent;\n\t\t\t\t\tthis.libraryConfig.wasmBinary = binaryContent;\n\n\t\t\t\t\tconst fn = Rhino3dmWorker.toString();\n\n\t\t\t\t\tconst body = [\n\t\t\t\t\t\t'/* rhino3dm.js */',\n\t\t\t\t\t\tjsContent,\n\t\t\t\t\t\t'/* worker */',\n\t\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t\t].join( '\\n' );\n\n\t\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\treturn this.libraryPending;\n\n\t}\n\n\t_getWorker( taskCost ) {\n\n\t\treturn this._initLibrary().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( {\n\t\t\t\t\ttype: 'init',\n\t\t\t\t\tlibraryConfig: this.libraryConfig\n\t\t\t\t} );\n\n\t\t\t\tworker.onmessage = e => {\n\n\t\t\t\t\tconst message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'warning':\n\t\t\t\t\t\t\tthis.warnings.push( message.data );\n\t\t\t\t\t\t\tconsole.warn( message.data );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.Rhino3dmLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst worker = this.workerPool[ this.workerPool.length - 1 ];\n\n\t\t\tworker._taskLoad += taskCost;\n\n\t\t\treturn worker;\n\n\t\t} );\n\n\t}\n\n\t_releaseTask( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* WEB WORKER */\n\nfunction Rhino3dmWorker() {\n\n\tlet libraryPending;\n\tlet libraryConfig;\n\tlet rhino;\n\tlet taskID;\n\n\tonmessage = function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\n\t\t\t\tlibraryConfig = message.libraryConfig;\n\t\t\t\tconst wasmBinary = libraryConfig.wasmBinary;\n\t\t\t\tlet RhinoModule;\n\t\t\t\tlibraryPending = new Promise( function ( resolve ) {\n\n\t\t\t\t\t/* Like Basis Loader */\n\t\t\t\t\tRhinoModule = { wasmBinary, onRuntimeInitialized: resolve };\n\n\t\t\t\t\trhino3dm( RhinoModule ); // eslint-disable-line no-undef\n\n\t\t\t\t } ).then( () => {\n\n\t\t\t\t\trhino = RhinoModule;\n\n\t\t\t\t } );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\n\t\t\t\ttaskID = message.id;\n\t\t\t\tconst buffer = message.buffer;\n\t\t\t\tlibraryPending.then( () => {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst data = decodeObjects( rhino, buffer );\n\t\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, data } );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error } );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeObjects( rhino, buffer ) {\n\n\t\tconst arr = new Uint8Array( buffer );\n\t\tconst doc = rhino.File3dm.fromByteArray( arr );\n\n\t\tconst objects = [];\n\t\tconst materials = [];\n\t\tconst layers = [];\n\t\tconst views = [];\n\t\tconst namedViews = [];\n\t\tconst groups = [];\n\t\tconst strings = [];\n\n\t\t//Handle objects\n\n\t\tconst objs = doc.objects();\n\t\tconst cnt = objs.count;\n\n\t\tfor ( let i = 0; i < cnt; i ++ ) {\n\n\t\t\tconst _object = objs.get( i );\n\n\t\t\tconst object = extractObjectData( _object, doc );\n\n\t\t\t_object.delete();\n\n\t\t\tif ( object ) {\n\n\t\t\t\tobjects.push( object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Handle instance definitions\n\t\t// console.log( `Instance Definitions Count: ${doc.instanceDefinitions().count()}` );\n\n\t\tfor ( let i = 0; i < doc.instanceDefinitions().count; i ++ ) {\n\n\t\t\tconst idef = doc.instanceDefinitions().get( i );\n\t\t\tconst idefAttributes = extractProperties( idef );\n\t\t\tidefAttributes.objectIds = idef.getObjectIds();\n\n\t\t\tobjects.push( { geometry: null, attributes: idefAttributes, objectType: 'InstanceDefinition' } );\n\n\t\t}\n\n\t\t// Handle materials\n\n\t\tconst textureTypes = [\n\t\t\t// rhino.TextureType.Bitmap,\n\t\t\trhino.TextureType.Diffuse,\n\t\t\trhino.TextureType.Bump,\n\t\t\trhino.TextureType.Transparency,\n\t\t\trhino.TextureType.Opacity,\n\t\t\trhino.TextureType.Emap\n\t\t];\n\n\t\tconst pbrTextureTypes = [\n\t\t\trhino.TextureType.PBR_BaseColor,\n\t\t\trhino.TextureType.PBR_Subsurface,\n\t\t\trhino.TextureType.PBR_SubsurfaceScattering,\n\t\t\trhino.TextureType.PBR_SubsurfaceScatteringRadius,\n\t\t\trhino.TextureType.PBR_Metallic,\n\t\t\trhino.TextureType.PBR_Specular,\n\t\t\trhino.TextureType.PBR_SpecularTint,\n\t\t\trhino.TextureType.PBR_Roughness,\n\t\t\trhino.TextureType.PBR_Anisotropic,\n\t\t\trhino.TextureType.PBR_Anisotropic_Rotation,\n\t\t\trhino.TextureType.PBR_Sheen,\n\t\t\trhino.TextureType.PBR_SheenTint,\n\t\t\trhino.TextureType.PBR_Clearcoat,\n\t\t\trhino.TextureType.PBR_ClearcoatBump,\n\t\t\trhino.TextureType.PBR_ClearcoatRoughness,\n\t\t\trhino.TextureType.PBR_OpacityIor,\n\t\t\trhino.TextureType.PBR_OpacityRoughness,\n\t\t\trhino.TextureType.PBR_Emission,\n\t\t\trhino.TextureType.PBR_AmbientOcclusion,\n\t\t\trhino.TextureType.PBR_Displacement\n\t\t];\n\n\t\tfor ( let i = 0; i < doc.materials().count; i ++ ) {\n\n\t\t\tconst _material = doc.materials().get( i );\n\n\t\t\tconst material = extractProperties( _material );\n\n\t\t\tconst textures = [];\n\n\t\t\ttextures.push( ...extractTextures( _material, textureTypes, doc ) );\n\n\t\t\tmaterial.pbrSupported = _material.physicallyBased().supported;\n\n\t\t\tif ( material.pbrSupported ) {\n\n\t\t\t\ttextures.push( ...extractTextures( _material, pbrTextureTypes, doc ) );\n\t\t\t\tmaterial.pbr = extractProperties( _material.physicallyBased() );\n\n\t\t\t}\n\n\t\t\tmaterial.textures = textures;\n\n\t\t\tmaterials.push( material );\n\n\t\t\t_material.delete();\n\n\t\t}\n\n\t\t// Handle layers\n\n\t\tfor ( let i = 0; i < doc.layers().count; i ++ ) {\n\n\t\t\tconst _layer = doc.layers().get( i );\n\t\t\tconst layer = extractProperties( _layer );\n\n\t\t\tlayers.push( layer );\n\n\t\t\t_layer.delete();\n\n\t\t}\n\n\t\t// Handle views\n\n\t\tfor ( let i = 0; i < doc.views().count; i ++ ) {\n\n\t\t\tconst _view = doc.views().get( i );\n\t\t\tconst view = extractProperties( _view );\n\n\t\t\tviews.push( view );\n\n\t\t\t_view.delete();\n\n\t\t}\n\n\t\t// Handle named views\n\n\t\tfor ( let i = 0; i < doc.namedViews().count; i ++ ) {\n\n\t\t\tconst _namedView = doc.namedViews().get( i );\n\t\t\tconst namedView = extractProperties( _namedView );\n\n\t\t\tnamedViews.push( namedView );\n\n\t\t\t_namedView.delete();\n\n\t\t}\n\n\t\t// Handle groups\n\n\t\tfor ( let i = 0; i < doc.groups().count; i ++ ) {\n\n\t\t\tconst _group = doc.groups().get( i );\n\t\t\tconst group = extractProperties( _group );\n\n\t\t\tgroups.push( group );\n\n\t\t\t_group.delete();\n\n\t\t}\n\n\t\t// Handle settings\n\n\t\tconst settings = extractProperties( doc.settings() );\n\n\t\t//TODO: Handle other document stuff like dimstyles, instance definitions, bitmaps etc.\n\n\t\t// Handle dimstyles\n\t\t// console.log( `Dimstyle Count: ${doc.dimstyles().count()}` );\n\n\t\t// Handle bitmaps\n\t\t// console.log( `Bitmap Count: ${doc.bitmaps().count()}` );\n\n\t\t// Handle strings\n\t\t// console.log( `Document Strings Count: ${doc.strings().count()}` );\n\t\t// Note: doc.strings().documentUserTextCount() counts any doc.strings defined in a section\n\t\t// console.log( `Document User Text Count: ${doc.strings().documentUserTextCount()}` );\n\n\t\tconst strings_count = doc.strings().count;\n\n\t\tfor ( let i = 0; i < strings_count; i ++ ) {\n\n\t\t\tstrings.push( doc.strings().get( i ) );\n\n\t\t}\n\n\t\t// Handle Render Environments for Material Environment\n\n\t\t// get the id of the active render environment skylight, which we'll use for environment texture\n\t\tconst reflectionId = doc.settings().renderSettings().renderEnvironments.reflectionId;\n\n\t\tconst rc = doc.renderContent();\n\n\t\tlet renderEnvironment = null;\n\n\t\tfor ( let i = 0; i < rc.count; i ++ ) {\n\n\t\t\tconst content = rc.get( i );\n\n\t\t\tswitch ( content.kind ) {\n\n\t\t\t\tcase 'environment':\n\n\t\t\t\t\tconst id = content.id;\n\n\t\t\t\t\t// there could be multiple render environments in a 3dm file\n\t\t\t\t\tif ( id !== reflectionId ) break;\n\n\t\t\t\t\tconst renderTexture = content.findChild( 'texture' );\n\t\t\t\t\tconst fileName = renderTexture.fileName;\n\n\t\t\t\t\tfor ( let j = 0; j < doc.embeddedFiles().count; j ++ ) {\n\n\t\t\t\t\t\tconst _fileName = doc.embeddedFiles().get( j ).fileName;\n\n\t\t\t\t\t\tif ( fileName === _fileName ) {\n\n\t\t\t\t\t\t\tconst background = doc.getEmbeddedFileAsBase64( fileName );\n\t\t\t\t\t\t\tconst backgroundImage = 'data:image/png;base64,' + background;\n\t\t\t\t\t\t\trenderEnvironment = { type: 'renderEnvironment', image: backgroundImage, name: fileName };\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Handle Render Settings\n\n\t\tconst renderSettings = {\n\t\t\tambientLight: doc.settings().renderSettings().ambientLight,\n\t\t\tbackgroundColorTop: doc.settings().renderSettings().backgroundColorTop,\n\t\t\tbackgroundColorBottom: doc.settings().renderSettings().backgroundColorBottom,\n\t\t\tuseHiddenLights: doc.settings().renderSettings().useHiddenLights,\n\t\t\tdepthCue: doc.settings().renderSettings().depthCue,\n\t\t\tflatShade: doc.settings().renderSettings().flatShade,\n\t\t\trenderBackFaces: doc.settings().renderSettings().renderBackFaces,\n\t\t\trenderPoints: doc.settings().renderSettings().renderPoints,\n\t\t\trenderCurves: doc.settings().renderSettings().renderCurves,\n\t\t\trenderIsoParams: doc.settings().renderSettings().renderIsoParams,\n\t\t\trenderMeshEdges: doc.settings().renderSettings().renderMeshEdges,\n\t\t\trenderAnnotations: doc.settings().renderSettings().renderAnnotations,\n\t\t\tuseViewportSize: doc.settings().renderSettings().useViewportSize,\n\t\t\tscaleBackgroundToFit: doc.settings().renderSettings().scaleBackgroundToFit,\n\t\t\ttransparentBackground: doc.settings().renderSettings().transparentBackground,\n\t\t\timageDpi: doc.settings().renderSettings().imageDpi,\n\t\t\tshadowMapLevel: doc.settings().renderSettings().shadowMapLevel,\n\t\t\tnamedView: doc.settings().renderSettings().namedView,\n\t\t\tsnapShot: doc.settings().renderSettings().snapShot,\n\t\t\tspecificViewport: doc.settings().renderSettings().specificViewport,\n\t\t\tgroundPlane: extractProperties( doc.settings().renderSettings().groundPlane ),\n\t\t\tsafeFrame: extractProperties( doc.settings().renderSettings().safeFrame ),\n\t\t\tdithering: extractProperties( doc.settings().renderSettings().dithering ),\n\t\t\tskylight: extractProperties( doc.settings().renderSettings().skylight ),\n\t\t\tlinearWorkflow: extractProperties( doc.settings().renderSettings().linearWorkflow ),\n\t\t\trenderChannels: extractProperties( doc.settings().renderSettings().renderChannels ),\n\t\t\tsun: extractProperties( doc.settings().renderSettings().sun ),\n\t\t\trenderEnvironments: extractProperties( doc.settings().renderSettings().renderEnvironments ),\n\t\t\tpostEffects: extractProperties( doc.settings().renderSettings().postEffects ),\n\n\t\t};\n\n\t\tdoc.delete();\n\n\t\treturn { objects, materials, layers, views, namedViews, groups, strings, settings, renderSettings, renderEnvironment };\n\n\t}\n\n\tfunction extractTextures( m, tTypes, d ) {\n\n\t\tconst textures = [];\n\n\t\tfor ( let i = 0; i < tTypes.length; i ++ ) {\n\n\t\t\tconst _texture = m.getTexture( tTypes[ i ] );\n\t\t\tif ( _texture ) {\n\n\t\t\t\tlet textureType = tTypes[ i ].constructor.name;\n\t\t\t\ttextureType = textureType.substring( 12, textureType.length );\n\t\t\t\tconst texture = extractTextureData( _texture, textureType, d );\n\t\t\t\ttextures.push( texture );\n\t\t\t\t_texture.delete();\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tfunction extractTextureData( t, tType, d ) {\n\n\t\tconst texture = { type: tType };\n\n\t\tconst image = d.getEmbeddedFileAsBase64( t.fileName );\n\n\t\ttexture.wrapU = t.wrapU;\n\t\ttexture.wrapV = t.wrapV;\n\t\ttexture.wrapW = t.wrapW;\n\t\tconst uvw = t.uvwTransform.toFloatArray( true );\n\n\t\ttexture.repeat = [ uvw[ 0 ], uvw[ 5 ] ];\n\n\t\tif ( image ) {\n\n\t\t\ttexture.image = 'data:image/png;base64,' + image;\n\n\t\t} else {\n\n\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\tmessage: `THREE.3DMLoader: Image for ${tType} texture not embedded in file.`,\n\t\t\t\ttype: 'missing resource'\n\t\t\t}\n\n\t\t\t} );\n\n\t\t\ttexture.image = null;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction extractObjectData( object, doc ) {\n\n\t\tconst _geometry = object.geometry();\n\t\tconst _attributes = object.attributes();\n\t\tlet objectType = _geometry.objectType;\n\t\tlet geometry, attributes, position, data, mesh;\n\n\t\t// skip instance definition objects\n\t\t//if( _attributes.isInstanceDefinitionObject ) { continue; }\n\n\t\t// TODO: handle other geometry types\n\t\tswitch ( objectType ) {\n\n\t\t\tcase rhino.ObjectType.Curve:\n\n\t\t\t\tconst pts = curveToPoints( _geometry, 100 );\n\n\t\t\t\tposition = {};\n\t\t\t\tattributes = {};\n\t\t\t\tdata = {};\n\n\t\t\t\tposition.itemSize = 3;\n\t\t\t\tposition.type = 'Float32Array';\n\t\t\t\tposition.array = [];\n\n\t\t\t\tfor ( let j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\t\tposition.array.push( pts[ j ][ 0 ] );\n\t\t\t\t\tposition.array.push( pts[ j ][ 1 ] );\n\t\t\t\t\tposition.array.push( pts[ j ][ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\tattributes.position = position;\n\t\t\t\tdata.attributes = attributes;\n\n\t\t\t\tgeometry = { data };\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Point:\n\n\t\t\t\tconst pt = _geometry.location;\n\n\t\t\t\tposition = {};\n\t\t\t\tconst color = {};\n\t\t\t\tattributes = {};\n\t\t\t\tdata = {};\n\n\t\t\t\tposition.itemSize = 3;\n\t\t\t\tposition.type = 'Float32Array';\n\t\t\t\tposition.array = [ pt[ 0 ], pt[ 1 ], pt[ 2 ] ];\n\n\t\t\t\tconst _color = _attributes.drawColor( doc );\n\n\t\t\t\tcolor.itemSize = 3;\n\t\t\t\tcolor.type = 'Float32Array';\n\t\t\t\tcolor.array = [ _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 ];\n\n\t\t\t\tattributes.position = position;\n\t\t\t\tattributes.color = color;\n\t\t\t\tdata.attributes = attributes;\n\n\t\t\t\tgeometry = { data };\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.PointSet:\n\t\t\tcase rhino.ObjectType.Mesh:\n\n\t\t\t\tgeometry = _geometry.toThreejsJSON();\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Brep:\n\n\t\t\t\tconst faces = _geometry.faces();\n\t\t\t\tmesh = new rhino.Mesh();\n\n\t\t\t\tfor ( let faceIndex = 0; faceIndex < faces.count; faceIndex ++ ) {\n\n\t\t\t\t\tconst face = faces.get( faceIndex );\n\t\t\t\t\tconst _mesh = face.getMesh( rhino.MeshType.Any );\n\n\t\t\t\t\tif ( _mesh ) {\n\n\t\t\t\t\t\tmesh.append( _mesh );\n\t\t\t\t\t\t_mesh.delete();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tface.delete();\n\n\t\t\t\t}\n\n\t\t\t\tif ( mesh.faces().count > 0 ) {\n\n\t\t\t\t\tmesh.compact();\n\t\t\t\t\tgeometry = mesh.toThreejsJSON();\n\t\t\t\t\tfaces.delete();\n\n\t\t\t\t}\n\n\t\t\t\tmesh.delete();\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Extrusion:\n\n\t\t\t\tmesh = _geometry.getMesh( rhino.MeshType.Any );\n\n\t\t\t\tif ( mesh ) {\n\n\t\t\t\t\tgeometry = mesh.toThreejsJSON();\n\t\t\t\t\tmesh.delete();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.TextDot:\n\n\t\t\t\tgeometry = extractProperties( _geometry );\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Light:\n\n\t\t\t\tgeometry = extractProperties( _geometry );\n\n\t\t\t\tif ( geometry.lightStyle.name === 'LightStyle_WorldLinear' ) {\n\n\t\t\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\t\t\tmessage: `THREE.3DMLoader: No conversion exists for ${objectType.constructor.name} ${geometry.lightStyle.name}`,\n\t\t\t\t\t\ttype: 'no conversion',\n\t\t\t\t\t\tguid: _attributes.id\n\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.InstanceReference:\n\n\t\t\t\tgeometry = extractProperties( _geometry );\n\t\t\t\tgeometry.xform = extractProperties( _geometry.xform );\n\t\t\t\tgeometry.xform.array = _geometry.xform.toFloatArray( true );\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.SubD:\n\n\t\t\t\t// TODO: precalculate resulting vertices and faces and warn on excessive results\n\t\t\t\t_geometry.subdivide( 3 );\n\t\t\t\tmesh = rhino.Mesh.createFromSubDControlNet( _geometry, false );\n\t\t\t\tif ( mesh ) {\n\n\t\t\t\t\tgeometry = mesh.toThreejsJSON();\n\t\t\t\t\tmesh.delete();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t\t/*\n\t\t\t\tcase rhino.ObjectType.Annotation:\n\t\t\t\tcase rhino.ObjectType.Hatch:\n\t\t\t\tcase rhino.ObjectType.ClipPlane:\n\t\t\t\t*/\n\n\t\t\tdefault:\n\n\t\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\t\tmessage: `THREE.3DMLoader: Conversion not implemented for ${objectType.constructor.name}`,\n\t\t\t\t\ttype: 'not implemented',\n\t\t\t\t\tguid: _attributes.id\n\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( geometry ) {\n\n\t\t\tattributes = extractProperties( _attributes );\n\t\t\tattributes.geometry = extractProperties( _geometry );\n\n\t\t\tif ( _attributes.groupCount > 0 ) {\n\n\t\t\t\tattributes.groupIds = _attributes.getGroupList();\n\n\t\t\t}\n\n\t\t\tif ( _attributes.userStringCount > 0 ) {\n\n\t\t\t\tattributes.userStrings = _attributes.getUserStrings();\n\n\t\t\t}\n\n\t\t\tif ( _geometry.userStringCount > 0 ) {\n\n\t\t\t\tattributes.geometry.userStrings = _geometry.getUserStrings();\n\n\t\t\t}\n\n\t\t\tif ( _attributes.decals().count > 0 ) {\n\n\t\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\t\tmessage: 'THREE.3DMLoader: No conversion exists for the decals associated with this object.',\n\t\t\t\t\ttype: 'no conversion',\n\t\t\t\t\tguid: _attributes.id\n\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tattributes.drawColor = _attributes.drawColor( doc );\n\n\t\t\tobjectType = objectType.constructor.name;\n\t\t\tobjectType = objectType.substring( 11, objectType.length );\n\n\t\t\treturn { geometry, attributes, objectType };\n\n\t\t} else {\n\n\t\t\tself.postMessage( { type: 'warning', id: taskID, data: {\n\t\t\t\tmessage: `THREE.3DMLoader: ${objectType.constructor.name} has no associated mesh geometry.`,\n\t\t\t\ttype: 'missing mesh',\n\t\t\t\tguid: _attributes.id\n\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tfunction extractProperties( object ) {\n\n\t\tconst result = {};\n\n\t\tfor ( const property in object ) {\n\n\t\t\tconst value = object[ property ];\n\n\t\t\tif ( typeof value !== 'function' ) {\n\n\t\t\t\tif ( typeof value === 'object' && value !== null && value.hasOwnProperty( 'constructor' ) ) {\n\n\t\t\t\t\tresult[ property ] = { name: value.constructor.name, value: value.value };\n\n\t\t\t\t} else if ( typeof value === 'object' && value !== null ) {\n\n\t\t\t\t\tresult[ property ] = extractProperties( value );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresult[ property ] = value;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// these are functions that could be called to extract more data.\n\t\t\t\t//console.log( `${property}: ${object[ property ].constructor.name}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction curveToPoints( curve, pointLimit ) {\n\n\t\tlet pointCount = pointLimit;\n\t\tlet rc = [];\n\t\tconst ts = [];\n\n\t\tif ( curve instanceof rhino.LineCurve ) {\n\n\t\t\treturn [ curve.pointAtStart, curve.pointAtEnd ];\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.PolylineCurve ) {\n\n\t\t\tpointCount = curve.pointCount;\n\t\t\tfor ( let i = 0; i < pointCount; i ++ ) {\n\n\t\t\t\trc.push( curve.point( i ) );\n\n\t\t\t}\n\n\t\t\treturn rc;\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.PolyCurve ) {\n\n\t\t\tconst segmentCount = curve.segmentCount;\n\n\t\t\tfor ( let i = 0; i < segmentCount; i ++ ) {\n\n\t\t\t\tconst segment = curve.segmentCurve( i );\n\t\t\t\tconst segmentArray = curveToPoints( segment, pointCount );\n\t\t\t\trc = rc.concat( segmentArray );\n\t\t\t\tsegment.delete();\n\n\t\t\t}\n\n\t\t\treturn rc;\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.ArcCurve ) {\n\n\t\t\tpointCount = Math.floor( curve.angleDegrees / 5 );\n\t\t\tpointCount = pointCount < 2 ? 2 : pointCount;\n\t\t\t// alternative to this hardcoded version: https://stackoverflow.com/a/18499923/2179399\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.NurbsCurve && curve.degree === 1 ) {\n\n\t\t\tconst pLine = curve.tryGetPolyline();\n\n\t\t\tfor ( let i = 0; i < pLine.count; i ++ ) {\n\n\t\t\t\trc.push( pLine.get( i ) );\n\n\t\t\t}\n\n\t\t\tpLine.delete();\n\n\t\t\treturn rc;\n\n\t\t}\n\n\t\tconst domain = curve.domain;\n\t\tconst divisions = pointCount - 1.0;\n\n\t\tfor ( let j = 0; j < pointCount; j ++ ) {\n\n\t\t\tconst t = domain[ 0 ] + ( j / divisions ) * ( domain[ 1 ] - domain[ 0 ] );\n\n\t\t\tif ( t === domain[ 0 ] || t === domain[ 1 ] ) {\n\n\t\t\t\tts.push( t );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst tan = curve.tangentAt( t );\n\t\t\tconst prevTan = curve.tangentAt( ts.slice( - 1 )[ 0 ] );\n\n\t\t\t// Duplicated from THREE.Vector3\n\t\t\t// How to pass imports to worker?\n\n\t\t\tconst tS = tan[ 0 ] * tan[ 0 ] + tan[ 1 ] * tan[ 1 ] + tan[ 2 ] * tan[ 2 ];\n\t\t\tconst ptS = prevTan[ 0 ] * prevTan[ 0 ] + prevTan[ 1 ] * prevTan[ 1 ] + prevTan[ 2 ] * prevTan[ 2 ];\n\n\t\t\tconst denominator = Math.sqrt( tS * ptS );\n\n\t\t\tlet angle;\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\tangle = Math.PI / 2;\n\n\t\t\t} else {\n\n\t\t\t\tconst theta = ( tan.x * prevTan.x + tan.y * prevTan.y + tan.z * prevTan.z ) / denominator;\n\t\t\t\tangle = Math.acos( Math.max( - 1, Math.min( 1, theta ) ) );\n\n\t\t\t}\n\n\t\t\tif ( angle < 0.1 ) continue;\n\n\t\t\tts.push( t );\n\n\t\t}\n\n\t\trc = ts.map( t => curve.pointAt( t ) );\n\t\treturn rc;\n\n\t}\n\n}\n\nexport { Rhino3dmLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLoader,\n\tMatrix4,\n\tMesh,\n\tMeshPhongMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tRepeatWrapping,\n\tTextureLoader,\n\tSRGBColorSpace\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\nconst COLOR_SPACE_3MF = SRGBColorSpace;\n\n/**\n *\n * 3D Manufacturing Format (3MF) specification: https://3mf.io/specification/\n *\n * The following features from the core specification are supported:\n *\n * - 3D Models\n * - Object Resources (Meshes and Components)\n * - Material Resources (Base Materials)\n *\n * 3MF Materials and Properties Extension are only partially supported.\n *\n * - Texture 2D\n * - Texture 2D Groups\n * - Color Groups (Vertex Colors)\n * - Metallic Display Properties (PBR)\n */\n\nclass ThreeMFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.availableExtensions = [];\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tconst scope = this;\n\t\tconst textureLoader = new TextureLoader( this.manager );\n\n\t\tfunction loadDocument( data ) {\n\n\t\t\tlet zip = null;\n\t\t\tlet file = null;\n\n\t\t\tlet relsName;\n\t\t\tlet modelRelsName;\n\t\t\tconst modelPartNames = [];\n\t\t\tconst texturesPartNames = [];\n\n\t\t\tlet modelRels;\n\t\t\tconst modelParts = {};\n\t\t\tconst printTicketParts = {};\n\t\t\tconst texturesParts = {};\n\n\t\t\tconst textDecoder = new TextDecoder();\n\n\t\t\ttry {\n\n\t\t\t\tzip = fflate.unzipSync( new Uint8Array( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( e instanceof ReferenceError ) {\n\n\t\t\t\t\tconsole.error( 'THREE.3MFLoader: fflate missing and file is compressed.' );\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( file in zip ) {\n\n\t\t\t\tif ( file.match( /\\_rels\\/.rels$/ ) ) {\n\n\t\t\t\t\trelsName = file;\n\n\t\t\t\t} else if ( file.match( /3D\\/_rels\\/.*\\.model\\.rels$/ ) ) {\n\n\t\t\t\t\tmodelRelsName = file;\n\n\t\t\t\t} else if ( file.match( /^3D\\/.*\\.model$/ ) ) {\n\n\t\t\t\t\tmodelPartNames.push( file );\n\n\t\t\t\t} else if ( file.match( /^3D\\/Textures?\\/.*/ ) ) {\n\n\t\t\t\t\ttexturesPartNames.push( file );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( relsName === undefined ) throw new Error( 'THREE.ThreeMFLoader: Cannot find relationship file `rels` in 3MF archive.' );\n\n\t\t\t//\n\n\t\t\tconst relsView = zip[ relsName ];\n\t\t\tconst relsFileText = textDecoder.decode( relsView );\n\t\t\tconst rels = parseRelsXml( relsFileText );\n\n\t\t\t//\n\n\t\t\tif ( modelRelsName ) {\n\n\t\t\t\tconst relsView = zip[ modelRelsName ];\n\t\t\t\tconst relsFileText = textDecoder.decode( relsView );\n\t\t\t\tmodelRels = parseRelsXml( relsFileText );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < modelPartNames.length; i ++ ) {\n\n\t\t\t\tconst modelPart = modelPartNames[ i ];\n\t\t\t\tconst view = zip[ modelPart ];\n\n\t\t\t\tconst fileText = textDecoder.decode( view );\n\t\t\t\tconst xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );\n\n\t\t\t\tif ( xmlData.documentElement.nodeName.toLowerCase() !== 'model' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.3MFLoader: Error loading 3MF - no 3MF document found: ', modelPart );\n\n\t\t\t\t}\n\n\t\t\t\tconst modelNode = xmlData.querySelector( 'model' );\n\t\t\t\tconst extensions = {};\n\n\t\t\t\tfor ( let i = 0; i < modelNode.attributes.length; i ++ ) {\n\n\t\t\t\t\tconst attr = modelNode.attributes[ i ];\n\t\t\t\t\tif ( attr.name.match( /^xmlns:(.+)$/ ) ) {\n\n\t\t\t\t\t\textensions[ attr.value ] = RegExp.$1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst modelData = parseModelNode( modelNode );\n\t\t\t\tmodelData[ 'xml' ] = modelNode;\n\n\t\t\t\tif ( 0 < Object.keys( extensions ).length ) {\n\n\t\t\t\t\tmodelData[ 'extensions' ] = extensions;\n\n\t\t\t\t}\n\n\t\t\t\tmodelParts[ modelPart ] = modelData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < texturesPartNames.length; i ++ ) {\n\n\t\t\t\tconst texturesPartName = texturesPartNames[ i ];\n\t\t\t\ttexturesParts[ texturesPartName ] = zip[ texturesPartName ].buffer;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\trels: rels,\n\t\t\t\tmodelRels: modelRels,\n\t\t\t\tmodel: modelParts,\n\t\t\t\tprintTicket: printTicketParts,\n\t\t\t\ttexture: texturesParts\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseRelsXml( relsFileText ) {\n\n\t\t\tconst relationships = [];\n\n\t\t\tconst relsXmlData = new DOMParser().parseFromString( relsFileText, 'application/xml' );\n\n\t\t\tconst relsNodes = relsXmlData.querySelectorAll( 'Relationship' );\n\n\t\t\tfor ( let i = 0; i < relsNodes.length; i ++ ) {\n\n\t\t\t\tconst relsNode = relsNodes[ i ];\n\n\t\t\t\tconst relationship = {\n\t\t\t\t\ttarget: relsNode.getAttribute( 'Target' ), //required\n\t\t\t\t\tid: relsNode.getAttribute( 'Id' ), //required\n\t\t\t\t\ttype: relsNode.getAttribute( 'Type' ) //required\n\t\t\t\t};\n\n\t\t\t\trelationships.push( relationship );\n\n\t\t\t}\n\n\t\t\treturn relationships;\n\n\t\t}\n\n\t\tfunction parseMetadataNodes( metadataNodes ) {\n\n\t\t\tconst metadataData = {};\n\n\t\t\tfor ( let i = 0; i < metadataNodes.length; i ++ ) {\n\n\t\t\t\tconst metadataNode = metadataNodes[ i ];\n\t\t\t\tconst name = metadataNode.getAttribute( 'name' );\n\t\t\t\tconst validNames = [\n\t\t\t\t\t'Title',\n\t\t\t\t\t'Designer',\n\t\t\t\t\t'Description',\n\t\t\t\t\t'Copyright',\n\t\t\t\t\t'LicenseTerms',\n\t\t\t\t\t'Rating',\n\t\t\t\t\t'CreationDate',\n\t\t\t\t\t'ModificationDate'\n\t\t\t\t];\n\n\t\t\t\tif ( 0 <= validNames.indexOf( name ) ) {\n\n\t\t\t\t\tmetadataData[ name ] = metadataNode.textContent;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn metadataData;\n\n\t\t}\n\n\t\tfunction parseBasematerialsNode( basematerialsNode ) {\n\n\t\t\tconst basematerialsData = {\n\t\t\t\tid: basematerialsNode.getAttribute( 'id' ), // required\n\t\t\t\tbasematerials: []\n\t\t\t};\n\n\t\t\tconst basematerialNodes = basematerialsNode.querySelectorAll( 'base' );\n\n\t\t\tfor ( let i = 0; i < basematerialNodes.length; i ++ ) {\n\n\t\t\t\tconst basematerialNode = basematerialNodes[ i ];\n\t\t\t\tconst basematerialData = parseBasematerialNode( basematerialNode );\n\t\t\t\tbasematerialData.index = i; // the order and count of the material nodes form an implicit 0-based index\n\t\t\t\tbasematerialsData.basematerials.push( basematerialData );\n\n\t\t\t}\n\n\t\t\treturn basematerialsData;\n\n\t\t}\n\n\t\tfunction parseTexture2DNode( texture2DNode ) {\n\n\t\t\tconst texture2dData = {\n\t\t\t\tid: texture2DNode.getAttribute( 'id' ), // required\n\t\t\t\tpath: texture2DNode.getAttribute( 'path' ), // required\n\t\t\t\tcontenttype: texture2DNode.getAttribute( 'contenttype' ), // required\n\t\t\t\ttilestyleu: texture2DNode.getAttribute( 'tilestyleu' ),\n\t\t\t\ttilestylev: texture2DNode.getAttribute( 'tilestylev' ),\n\t\t\t\tfilter: texture2DNode.getAttribute( 'filter' ),\n\t\t\t};\n\n\t\t\treturn texture2dData;\n\n\t\t}\n\n\t\tfunction parseTextures2DGroupNode( texture2DGroupNode ) {\n\n\t\t\tconst texture2DGroupData = {\n\t\t\t\tid: texture2DGroupNode.getAttribute( 'id' ), // required\n\t\t\t\ttexid: texture2DGroupNode.getAttribute( 'texid' ), // required\n\t\t\t\tdisplaypropertiesid: texture2DGroupNode.getAttribute( 'displaypropertiesid' )\n\t\t\t};\n\n\t\t\tconst tex2coordNodes = texture2DGroupNode.querySelectorAll( 'tex2coord' );\n\n\t\t\tconst uvs = [];\n\n\t\t\tfor ( let i = 0; i < tex2coordNodes.length; i ++ ) {\n\n\t\t\t\tconst tex2coordNode = tex2coordNodes[ i ];\n\t\t\t\tconst u = tex2coordNode.getAttribute( 'u' );\n\t\t\t\tconst v = tex2coordNode.getAttribute( 'v' );\n\n\t\t\t\tuvs.push( parseFloat( u ), parseFloat( v ) );\n\n\t\t\t}\n\n\t\t\ttexture2DGroupData[ 'uvs' ] = new Float32Array( uvs );\n\n\t\t\treturn texture2DGroupData;\n\n\t\t}\n\n\t\tfunction parseColorGroupNode( colorGroupNode ) {\n\n\t\t\tconst colorGroupData = {\n\t\t\t\tid: colorGroupNode.getAttribute( 'id' ), // required\n\t\t\t\tdisplaypropertiesid: colorGroupNode.getAttribute( 'displaypropertiesid' )\n\t\t\t};\n\n\t\t\tconst colorNodes = colorGroupNode.querySelectorAll( 'color' );\n\n\t\t\tconst colors = [];\n\t\t\tconst colorObject = new Color();\n\n\t\t\tfor ( let i = 0; i < colorNodes.length; i ++ ) {\n\n\t\t\t\tconst colorNode = colorNodes[ i ];\n\t\t\t\tconst color = colorNode.getAttribute( 'color' );\n\n\t\t\t\tcolorObject.setStyle( color.substring( 0, 7 ), COLOR_SPACE_3MF );\n\n\t\t\t\tcolors.push( colorObject.r, colorObject.g, colorObject.b );\n\n\t\t\t}\n\n\t\t\tcolorGroupData[ 'colors' ] = new Float32Array( colors );\n\n\t\t\treturn colorGroupData;\n\n\t\t}\n\n\t\tfunction parseMetallicDisplaypropertiesNode( metallicDisplaypropetiesNode ) {\n\n\t\t\tconst metallicDisplaypropertiesData = {\n\t\t\t\tid: metallicDisplaypropetiesNode.getAttribute( 'id' ) // required\n\t\t\t};\n\n\t\t\tconst metallicNodes = metallicDisplaypropetiesNode.querySelectorAll( 'pbmetallic' );\n\n\t\t\tconst metallicData = [];\n\n\t\t\tfor ( let i = 0; i < metallicNodes.length; i ++ ) {\n\n\t\t\t\tconst metallicNode = metallicNodes[ i ];\n\n\t\t\t\tmetallicData.push( {\n\t\t\t\t\tname: metallicNode.getAttribute( 'name' ), // required\n\t\t\t\t\tmetallicness: parseFloat( metallicNode.getAttribute( 'metallicness' ) ), // required\n\t\t\t\t\troughness: parseFloat( metallicNode.getAttribute( 'roughness' ) ) // required\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tmetallicDisplaypropertiesData.data = metallicData;\n\n\t\t\treturn metallicDisplaypropertiesData;\n\n\t\t}\n\n\t\tfunction parseBasematerialNode( basematerialNode ) {\n\n\t\t\tconst basematerialData = {};\n\n\t\t\tbasematerialData[ 'name' ] = basematerialNode.getAttribute( 'name' ); // required\n\t\t\tbasematerialData[ 'displaycolor' ] = basematerialNode.getAttribute( 'displaycolor' ); // required\n\t\t\tbasematerialData[ 'displaypropertiesid' ] = basematerialNode.getAttribute( 'displaypropertiesid' );\n\n\t\t\treturn basematerialData;\n\n\t\t}\n\n\t\tfunction parseMeshNode( meshNode ) {\n\n\t\t\tconst meshData = {};\n\n\t\t\tconst vertices = [];\n\t\t\tconst vertexNodes = meshNode.querySelectorAll( 'vertices vertex' );\n\n\t\t\tfor ( let i = 0; i < vertexNodes.length; i ++ ) {\n\n\t\t\t\tconst vertexNode = vertexNodes[ i ];\n\t\t\t\tconst x = vertexNode.getAttribute( 'x' );\n\t\t\t\tconst y = vertexNode.getAttribute( 'y' );\n\t\t\t\tconst z = vertexNode.getAttribute( 'z' );\n\n\t\t\t\tvertices.push( parseFloat( x ), parseFloat( y ), parseFloat( z ) );\n\n\t\t\t}\n\n\t\t\tmeshData[ 'vertices' ] = new Float32Array( vertices );\n\n\t\t\tconst triangleProperties = [];\n\t\t\tconst triangles = [];\n\t\t\tconst triangleNodes = meshNode.querySelectorAll( 'triangles triangle' );\n\n\t\t\tfor ( let i = 0; i < triangleNodes.length; i ++ ) {\n\n\t\t\t\tconst triangleNode = triangleNodes[ i ];\n\t\t\t\tconst v1 = triangleNode.getAttribute( 'v1' );\n\t\t\t\tconst v2 = triangleNode.getAttribute( 'v2' );\n\t\t\t\tconst v3 = triangleNode.getAttribute( 'v3' );\n\t\t\t\tconst p1 = triangleNode.getAttribute( 'p1' );\n\t\t\t\tconst p2 = triangleNode.getAttribute( 'p2' );\n\t\t\t\tconst p3 = triangleNode.getAttribute( 'p3' );\n\t\t\t\tconst pid = triangleNode.getAttribute( 'pid' );\n\n\t\t\t\tconst triangleProperty = {};\n\n\t\t\t\ttriangleProperty[ 'v1' ] = parseInt( v1, 10 );\n\t\t\t\ttriangleProperty[ 'v2' ] = parseInt( v2, 10 );\n\t\t\t\ttriangleProperty[ 'v3' ] = parseInt( v3, 10 );\n\n\t\t\t\ttriangles.push( triangleProperty[ 'v1' ], triangleProperty[ 'v2' ], triangleProperty[ 'v3' ] );\n\n\t\t\t\t// optional\n\n\t\t\t\tif ( p1 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p1' ] = parseInt( p1, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( p2 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p2' ] = parseInt( p2, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( p3 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p3' ] = parseInt( p3, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( pid ) {\n\n\t\t\t\t\ttriangleProperty[ 'pid' ] = pid;\n\n\t\t\t\t}\n\n\t\t\t\tif ( 0 < Object.keys( triangleProperty ).length ) {\n\n\t\t\t\t\ttriangleProperties.push( triangleProperty );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmeshData[ 'triangleProperties' ] = triangleProperties;\n\t\t\tmeshData[ 'triangles' ] = new Uint32Array( triangles );\n\n\t\t\treturn meshData;\n\n\t\t}\n\n\t\tfunction parseComponentsNode( componentsNode ) {\n\n\t\t\tconst components = [];\n\n\t\t\tconst componentNodes = componentsNode.querySelectorAll( 'component' );\n\n\t\t\tfor ( let i = 0; i < componentNodes.length; i ++ ) {\n\n\t\t\t\tconst componentNode = componentNodes[ i ];\n\t\t\t\tconst componentData = parseComponentNode( componentNode );\n\t\t\t\tcomponents.push( componentData );\n\n\t\t\t}\n\n\t\t\treturn components;\n\n\t\t}\n\n\t\tfunction parseComponentNode( componentNode ) {\n\n\t\t\tconst componentData = {};\n\n\t\t\tcomponentData[ 'objectId' ] = componentNode.getAttribute( 'objectid' ); // required\n\n\t\t\tconst transform = componentNode.getAttribute( 'transform' );\n\n\t\t\tif ( transform ) {\n\n\t\t\t\tcomponentData[ 'transform' ] = parseTransform( transform );\n\n\t\t\t}\n\n\t\t\treturn componentData;\n\n\t\t}\n\n\t\tfunction parseTransform( transform ) {\n\n\t\t\tconst t = [];\n\t\t\ttransform.split( ' ' ).forEach( function ( s ) {\n\n\t\t\t\tt.push( parseFloat( s ) );\n\n\t\t\t} );\n\n\t\t\tconst matrix = new Matrix4();\n\t\t\tmatrix.set(\n\t\t\t\tt[ 0 ], t[ 3 ], t[ 6 ], t[ 9 ],\n\t\t\t\tt[ 1 ], t[ 4 ], t[ 7 ], t[ 10 ],\n\t\t\t\tt[ 2 ], t[ 5 ], t[ 8 ], t[ 11 ],\n\t\t\t\t 0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\treturn matrix;\n\n\t\t}\n\n\t\tfunction parseObjectNode( objectNode ) {\n\n\t\t\tconst objectData = {\n\t\t\t\ttype: objectNode.getAttribute( 'type' )\n\t\t\t};\n\n\t\t\tconst id = objectNode.getAttribute( 'id' );\n\n\t\t\tif ( id ) {\n\n\t\t\t\tobjectData[ 'id' ] = id;\n\n\t\t\t}\n\n\t\t\tconst pid = objectNode.getAttribute( 'pid' );\n\n\t\t\tif ( pid ) {\n\n\t\t\t\tobjectData[ 'pid' ] = pid;\n\n\t\t\t}\n\n\t\t\tconst pindex = objectNode.getAttribute( 'pindex' );\n\n\t\t\tif ( pindex ) {\n\n\t\t\t\tobjectData[ 'pindex' ] = pindex;\n\n\t\t\t}\n\n\t\t\tconst thumbnail = objectNode.getAttribute( 'thumbnail' );\n\n\t\t\tif ( thumbnail ) {\n\n\t\t\t\tobjectData[ 'thumbnail' ] = thumbnail;\n\n\t\t\t}\n\n\t\t\tconst partnumber = objectNode.getAttribute( 'partnumber' );\n\n\t\t\tif ( partnumber ) {\n\n\t\t\t\tobjectData[ 'partnumber' ] = partnumber;\n\n\t\t\t}\n\n\t\t\tconst name = objectNode.getAttribute( 'name' );\n\n\t\t\tif ( name ) {\n\n\t\t\t\tobjectData[ 'name' ] = name;\n\n\t\t\t}\n\n\t\t\tconst meshNode = objectNode.querySelector( 'mesh' );\n\n\t\t\tif ( meshNode ) {\n\n\t\t\t\tobjectData[ 'mesh' ] = parseMeshNode( meshNode );\n\n\t\t\t}\n\n\t\t\tconst componentsNode = objectNode.querySelector( 'components' );\n\n\t\t\tif ( componentsNode ) {\n\n\t\t\t\tobjectData[ 'components' ] = parseComponentsNode( componentsNode );\n\n\t\t\t}\n\n\t\t\treturn objectData;\n\n\t\t}\n\n\t\tfunction parseResourcesNode( resourcesNode ) {\n\n\t\t\tconst resourcesData = {};\n\n\t\t\tresourcesData[ 'basematerials' ] = {};\n\t\t\tconst basematerialsNodes = resourcesNode.querySelectorAll( 'basematerials' );\n\n\t\t\tfor ( let i = 0; i < basematerialsNodes.length; i ++ ) {\n\n\t\t\t\tconst basematerialsNode = basematerialsNodes[ i ];\n\t\t\t\tconst basematerialsData = parseBasematerialsNode( basematerialsNode );\n\t\t\t\tresourcesData[ 'basematerials' ][ basematerialsData[ 'id' ] ] = basematerialsData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'texture2d' ] = {};\n\t\t\tconst textures2DNodes = resourcesNode.querySelectorAll( 'texture2d' );\n\n\t\t\tfor ( let i = 0; i < textures2DNodes.length; i ++ ) {\n\n\t\t\t\tconst textures2DNode = textures2DNodes[ i ];\n\t\t\t\tconst texture2DData = parseTexture2DNode( textures2DNode );\n\t\t\t\tresourcesData[ 'texture2d' ][ texture2DData[ 'id' ] ] = texture2DData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'colorgroup' ] = {};\n\t\t\tconst colorGroupNodes = resourcesNode.querySelectorAll( 'colorgroup' );\n\n\t\t\tfor ( let i = 0; i < colorGroupNodes.length; i ++ ) {\n\n\t\t\t\tconst colorGroupNode = colorGroupNodes[ i ];\n\t\t\t\tconst colorGroupData = parseColorGroupNode( colorGroupNode );\n\t\t\t\tresourcesData[ 'colorgroup' ][ colorGroupData[ 'id' ] ] = colorGroupData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'pbmetallicdisplayproperties' ] = {};\n\t\t\tconst pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll( 'pbmetallicdisplayproperties' );\n\n\t\t\tfor ( let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i ++ ) {\n\n\t\t\t\tconst pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[ i ];\n\t\t\t\tconst pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode( pbmetallicdisplaypropertiesNode );\n\t\t\t\tresourcesData[ 'pbmetallicdisplayproperties' ][ pbmetallicdisplaypropertiesData[ 'id' ] ] = pbmetallicdisplaypropertiesData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'texture2dgroup' ] = {};\n\t\t\tconst textures2DGroupNodes = resourcesNode.querySelectorAll( 'texture2dgroup' );\n\n\t\t\tfor ( let i = 0; i < textures2DGroupNodes.length; i ++ ) {\n\n\t\t\t\tconst textures2DGroupNode = textures2DGroupNodes[ i ];\n\t\t\t\tconst textures2DGroupData = parseTextures2DGroupNode( textures2DGroupNode );\n\t\t\t\tresourcesData[ 'texture2dgroup' ][ textures2DGroupData[ 'id' ] ] = textures2DGroupData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'object' ] = {};\n\t\t\tconst objectNodes = resourcesNode.querySelectorAll( 'object' );\n\n\t\t\tfor ( let i = 0; i < objectNodes.length; i ++ ) {\n\n\t\t\t\tconst objectNode = objectNodes[ i ];\n\t\t\t\tconst objectData = parseObjectNode( objectNode );\n\t\t\t\tresourcesData[ 'object' ][ objectData[ 'id' ] ] = objectData;\n\n\t\t\t}\n\n\t\t\treturn resourcesData;\n\n\t\t}\n\n\t\tfunction parseBuildNode( buildNode ) {\n\n\t\t\tconst buildData = [];\n\t\t\tconst itemNodes = buildNode.querySelectorAll( 'item' );\n\n\t\t\tfor ( let i = 0; i < itemNodes.length; i ++ ) {\n\n\t\t\t\tconst itemNode = itemNodes[ i ];\n\t\t\t\tconst buildItem = {\n\t\t\t\t\tobjectId: itemNode.getAttribute( 'objectid' )\n\t\t\t\t};\n\t\t\t\tconst transform = itemNode.getAttribute( 'transform' );\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tbuildItem[ 'transform' ] = parseTransform( transform );\n\n\t\t\t\t}\n\n\t\t\t\tbuildData.push( buildItem );\n\n\t\t\t}\n\n\t\t\treturn buildData;\n\n\t\t}\n\n\t\tfunction parseModelNode( modelNode ) {\n\n\t\t\tconst modelData = { unit: modelNode.getAttribute( 'unit' ) || 'millimeter' };\n\t\t\tconst metadataNodes = modelNode.querySelectorAll( 'metadata' );\n\n\t\t\tif ( metadataNodes ) {\n\n\t\t\t\tmodelData[ 'metadata' ] = parseMetadataNodes( metadataNodes );\n\n\t\t\t}\n\n\t\t\tconst resourcesNode = modelNode.querySelector( 'resources' );\n\n\t\t\tif ( resourcesNode ) {\n\n\t\t\t\tmodelData[ 'resources' ] = parseResourcesNode( resourcesNode );\n\n\t\t\t}\n\n\t\t\tconst buildNode = modelNode.querySelector( 'build' );\n\n\t\t\tif ( buildNode ) {\n\n\t\t\t\tmodelData[ 'build' ] = parseBuildNode( buildNode );\n\n\t\t\t}\n\n\t\t\treturn modelData;\n\n\t\t}\n\n\t\tfunction buildTexture( texture2dgroup, objects, modelData, textureData ) {\n\n\t\t\tconst texid = texture2dgroup.texid;\n\t\t\tconst texture2ds = modelData.resources.texture2d;\n\t\t\tconst texture2d = texture2ds[ texid ];\n\n\t\t\tif ( texture2d ) {\n\n\t\t\t\tconst data = textureData[ texture2d.path ];\n\t\t\t\tconst type = texture2d.contenttype;\n\n\t\t\t\tconst blob = new Blob( [ data ], { type: type } );\n\t\t\t\tconst sourceURI = URL.createObjectURL( blob );\n\n\t\t\t\tconst texture = textureLoader.load( sourceURI, function () {\n\n\t\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t\t} );\n\n\t\t\t\ttexture.colorSpace = COLOR_SPACE_3MF;\n\n\t\t\t\t// texture parameters\n\n\t\t\t\tswitch ( texture2d.tilestyleu ) {\n\n\t\t\t\t\tcase 'wrap':\n\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mirror':\n\t\t\t\t\t\ttexture.wrapS = MirroredRepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'clamp':\n\t\t\t\t\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( texture2d.tilestylev ) {\n\n\t\t\t\t\tcase 'wrap':\n\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mirror':\n\t\t\t\t\t\ttexture.wrapT = MirroredRepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'clamp':\n\t\t\t\t\t\ttexture.wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( texture2d.filter ) {\n\n\t\t\t\t\tcase 'auto':\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'linear':\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'nearest':\n\t\t\t\t\t\ttexture.magFilter = NearestFilter;\n\t\t\t\t\t\ttexture.minFilter = NearestFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\treturn texture;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildBasematerialsMeshes( basematerials, triangleProperties, meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tconst objectPindex = objectData.pindex;\n\n\t\t\tconst materialMap = {};\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\t\t\t\tconst pindex = ( triangleProperty.p1 !== undefined ) ? triangleProperty.p1 : objectPindex;\n\n\t\t\t\tif ( materialMap[ pindex ] === undefined ) materialMap[ pindex ] = [];\n\n\t\t\t\tmaterialMap[ pindex ].push( triangleProperty );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst keys = Object.keys( materialMap );\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, l = keys.length; i < l; i ++ ) {\n\n\t\t\t\tconst materialIndex = keys[ i ];\n\t\t\t\tconst trianglePropertiesProps = materialMap[ materialIndex ];\n\t\t\t\tconst basematerialData = basematerials.basematerials[ materialIndex ];\n\t\t\t\tconst material = getBuild( basematerialData, objects, modelData, textureData, objectData, buildBasematerial );\n\n\t\t\t\t//\n\n\t\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\t\tconst positionData = [];\n\n\t\t\t\tconst vertices = meshData.vertices;\n\n\t\t\t\tfor ( let j = 0, jl = trianglePropertiesProps.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst triangleProperty = trianglePropertiesProps[ j ];\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 2 ] );\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 2 ] );\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 2 ] );\n\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\n\t\t\t\t//\n\n\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\treturn meshes;\n\n\t\t}\n\n\t\tfunction buildTexturedMesh( texture2dgroup, triangleProperties, meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\t// geometry\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positionData = [];\n\t\t\tconst uvData = [];\n\n\t\t\tconst vertices = meshData.vertices;\n\t\t\tconst uvs = texture2dgroup.uvs;\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 2 ] );\n\n\t\t\t\t//\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p1 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p1 * 2 ) + 1 ] );\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p2 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p2 * 2 ) + 1 ] );\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p3 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p3 * 2 ) + 1 ] );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvData, 2 ) );\n\n\t\t\t// material\n\n\t\t\tconst texture = getBuild( texture2dgroup, objects, modelData, textureData, objectData, buildTexture );\n\n\t\t\tconst material = new MeshPhongMaterial( { map: texture, flatShading: true } );\n\n\t\t\t// mesh\n\n\t\t\tconst mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildVertexColorMesh( colorgroup, triangleProperties, meshData, objectData ) {\n\n\t\t\t// geometry\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positionData = [];\n\t\t\tconst colorData = [];\n\n\t\t\tconst vertices = meshData.vertices;\n\t\t\tconst colors = colorgroup.colors;\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\n\t\t\t\tconst v1 = triangleProperty.v1;\n\t\t\t\tconst v2 = triangleProperty.v2;\n\t\t\t\tconst v3 = triangleProperty.v3;\n\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 2 ] );\n\n\t\t\t\t//\n\n\t\t\t\tconst p1 = ( triangleProperty.p1 !== undefined ) ? triangleProperty.p1 : objectData.pindex;\n\t\t\t\tconst p2 = ( triangleProperty.p2 !== undefined ) ? triangleProperty.p2 : p1;\n\t\t\t\tconst p3 = ( triangleProperty.p3 !== undefined ) ? triangleProperty.p3 : p1;\n\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 2 ] );\n\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 2 ] );\n\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 2 ] );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colorData, 3 ) );\n\n\t\t\t// material\n\n\t\t\tconst material = new MeshPhongMaterial( { vertexColors: true, flatShading: true } );\n\n\t\t\t// mesh\n\n\t\t\tconst mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildDefaultMesh( meshData ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( new BufferAttribute( meshData[ 'triangles' ], 1 ) );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( meshData[ 'vertices' ], 3 ) );\n\n\t\t\tconst material = new MeshPhongMaterial( {\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tcolor: 0xffffff,\n\t\t\t\tflatShading: true\n\t\t\t} );\n\n\t\t\tconst mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tconst keys = Object.keys( resourceMap );\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\tconst resourceId = keys[ i ];\n\t\t\t\tconst triangleProperties = resourceMap[ resourceId ];\n\t\t\t\tconst resourceType = getResourceType( resourceId, modelData );\n\n\t\t\t\tswitch ( resourceType ) {\n\n\t\t\t\t\tcase 'material':\n\t\t\t\t\t\tconst basematerials = modelData.resources.basematerials[ resourceId ];\n\t\t\t\t\t\tconst newMeshes = buildBasematerialsMeshes( basematerials, triangleProperties, meshData, objects, modelData, textureData, objectData );\n\n\t\t\t\t\t\tfor ( let j = 0, jl = newMeshes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmeshes.push( newMeshes[ j ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tconst texture2dgroup = modelData.resources.texture2dgroup[ resourceId ];\n\t\t\t\t\t\tmeshes.push( buildTexturedMesh( texture2dgroup, triangleProperties, meshData, objects, modelData, textureData, objectData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tconst colorgroup = modelData.resources.colorgroup[ resourceId ];\n\t\t\t\t\t\tmeshes.push( buildVertexColorMesh( colorgroup, triangleProperties, meshData, objectData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'default':\n\t\t\t\t\t\tmeshes.push( buildDefaultMesh( meshData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.3MFLoader: Unsupported resource type.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( objectData.name ) {\n\n\t\t\t\tfor ( let i = 0; i < meshes.length; i ++ ) {\n\n\t\t\t\t\tmeshes[ i ].name = objectData.name;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn meshes;\n\n\t\t}\n\n\t\tfunction getResourceType( pid, modelData ) {\n\n\t\t\tif ( modelData.resources.texture2dgroup[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'texture';\n\n\t\t\t} else if ( modelData.resources.basematerials[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'material';\n\n\t\t\t} else if ( modelData.resources.colorgroup[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'vertexColors';\n\n\t\t\t} else if ( pid === 'default' ) {\n\n\t\t\t\treturn 'default';\n\n\t\t\t} else {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction analyzeObject( meshData, objectData ) {\n\n\t\t\tconst resourceMap = {};\n\n\t\t\tconst triangleProperties = meshData[ 'triangleProperties' ];\n\n\t\t\tconst objectPid = objectData.pid;\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\t\t\t\tlet pid = ( triangleProperty.pid !== undefined ) ? triangleProperty.pid : objectPid;\n\n\t\t\t\tif ( pid === undefined ) pid = 'default';\n\n\t\t\t\tif ( resourceMap[ pid ] === undefined ) resourceMap[ pid ] = [];\n\n\t\t\t\tresourceMap[ pid ].push( triangleProperty );\n\n\t\t\t}\n\n\t\t\treturn resourceMap;\n\n\t\t}\n\n\t\tfunction buildGroup( meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tconst group = new Group();\n\n\t\t\tconst resourceMap = analyzeObject( meshData, objectData );\n\t\t\tconst meshes = buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData );\n\n\t\t\tfor ( let i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction applyExtensions( extensions, meshData, modelXml ) {\n\n\t\t\tif ( ! extensions ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst availableExtensions = [];\n\t\t\tconst keys = Object.keys( extensions );\n\n\t\t\tfor ( let i = 0; i < keys.length; i ++ ) {\n\n\t\t\t\tconst ns = keys[ i ];\n\n\t\t\t\tfor ( let j = 0; j < scope.availableExtensions.length; j ++ ) {\n\n\t\t\t\t\tconst extension = scope.availableExtensions[ j ];\n\n\t\t\t\t\tif ( extension.ns === ns ) {\n\n\t\t\t\t\t\tavailableExtensions.push( extension );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < availableExtensions.length; i ++ ) {\n\n\t\t\t\tconst extension = availableExtensions[ i ];\n\t\t\t\textension.apply( modelXml, extensions[ extension[ 'ns' ] ], meshData );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getBuild( data, objects, modelData, textureData, objectData, builder ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\tdata.build = builder( data, objects, modelData, textureData, objectData );\n\n\t\t\treturn data.build;\n\n\t\t}\n\n\t\tfunction buildBasematerial( materialData, objects, modelData ) {\n\n\t\t\tlet material;\n\n\t\t\tconst displaypropertiesid = materialData.displaypropertiesid;\n\t\t\tconst pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties;\n\n\t\t\tif ( displaypropertiesid !== null && pbmetallicdisplayproperties[ displaypropertiesid ] !== undefined ) {\n\n\t\t\t\t// metallic display property, use StandardMaterial\n\n\t\t\t\tconst pbmetallicdisplayproperty = pbmetallicdisplayproperties[ displaypropertiesid ];\n\t\t\t\tconst metallicData = pbmetallicdisplayproperty.data[ materialData.index ];\n\n\t\t\t\tmaterial = new MeshStandardMaterial( { flatShading: true, roughness: metallicData.roughness, metalness: metallicData.metallicness } );\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise use PhongMaterial\n\n\t\t\t\tmaterial = new MeshPhongMaterial( { flatShading: true } );\n\n\t\t\t}\n\n\t\t\tmaterial.name = materialData.name;\n\n\t\t\t// displaycolor MUST be specified with a value of a 6 or 8 digit hexadecimal number, e.g. \"#RRGGBB\" or \"#RRGGBBAA\"\n\n\t\t\tconst displaycolor = materialData.displaycolor;\n\n\t\t\tconst color = displaycolor.substring( 0, 7 );\n\t\t\tmaterial.color.setStyle( color, COLOR_SPACE_3MF );\n\n\t\t\t// process alpha if set\n\n\t\t\tif ( displaycolor.length === 9 ) {\n\n\t\t\t\tmaterial.opacity = parseInt( displaycolor.charAt( 7 ) + displaycolor.charAt( 8 ), 16 ) / 255;\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction buildComposite( compositeData, objects, modelData, textureData ) {\n\n\t\t\tconst composite = new Group();\n\n\t\t\tfor ( let j = 0; j < compositeData.length; j ++ ) {\n\n\t\t\t\tconst component = compositeData[ j ];\n\t\t\t\tlet build = objects[ component.objectId ];\n\n\t\t\t\tif ( build === undefined ) {\n\n\t\t\t\t\tbuildObject( component.objectId, objects, modelData, textureData );\n\t\t\t\t\tbuild = objects[ component.objectId ];\n\n\t\t\t\t}\n\n\t\t\t\tconst object3D = build.clone();\n\n\t\t\t\t// apply component transform\n\n\t\t\t\tconst transform = component.transform;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tobject3D.applyMatrix4( transform );\n\n\t\t\t\t}\n\n\t\t\t\tcomposite.add( object3D );\n\n\t\t\t}\n\n\t\t\treturn composite;\n\n\t\t}\n\n\t\tfunction buildObject( objectId, objects, modelData, textureData ) {\n\n\t\t\tconst objectData = modelData[ 'resources' ][ 'object' ][ objectId ];\n\n\t\t\tif ( objectData[ 'mesh' ] ) {\n\n\t\t\t\tconst meshData = objectData[ 'mesh' ];\n\n\t\t\t\tconst extensions = modelData[ 'extensions' ];\n\t\t\t\tconst modelXml = modelData[ 'xml' ];\n\n\t\t\t\tapplyExtensions( extensions, meshData, modelXml );\n\n\t\t\t\tobjects[ objectData.id ] = getBuild( meshData, objects, modelData, textureData, objectData, buildGroup );\n\n\t\t\t} else {\n\n\t\t\t\tconst compositeData = objectData[ 'components' ];\n\n\t\t\t\tobjects[ objectData.id ] = getBuild( compositeData, objects, modelData, textureData, objectData, buildComposite );\n\n\t\t\t}\n\n\t\t\tif ( objectData.name ) {\n\n\t\t\t\tobjects[ objectData.id ].name = objectData.name;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildObjects( data3mf ) {\n\n\t\t\tconst modelsData = data3mf.model;\n\t\t\tconst modelRels = data3mf.modelRels;\n\t\t\tconst objects = {};\n\t\t\tconst modelsKeys = Object.keys( modelsData );\n\t\t\tconst textureData = {};\n\n\t\t\t// evaluate model relationships to textures\n\n\t\t\tif ( modelRels ) {\n\n\t\t\t\tfor ( let i = 0, l = modelRels.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst modelRel = modelRels[ i ];\n\t\t\t\t\tconst textureKey = modelRel.target.substring( 1 );\n\n\t\t\t\t\tif ( data3mf.texture[ textureKey ] ) {\n\n\t\t\t\t\t\ttextureData[ modelRel.target ] = data3mf.texture[ textureKey ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// start build\n\n\t\t\tfor ( let i = 0; i < modelsKeys.length; i ++ ) {\n\n\t\t\t\tconst modelsKey = modelsKeys[ i ];\n\t\t\t\tconst modelData = modelsData[ modelsKey ];\n\n\t\t\t\tconst objectIds = Object.keys( modelData[ 'resources' ][ 'object' ] );\n\n\t\t\t\tfor ( let j = 0; j < objectIds.length; j ++ ) {\n\n\t\t\t\t\tconst objectId = objectIds[ j ];\n\n\t\t\t\t\tbuildObject( objectId, objects, modelData, textureData );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn objects;\n\n\t\t}\n\n\t\tfunction fetch3DModelPart( rels ) {\n\n\t\t\tfor ( let i = 0; i < rels.length; i ++ ) {\n\n\t\t\t\tconst rel = rels[ i ];\n\t\t\t\tconst extension = rel.target.split( '.' ).pop();\n\n\t\t\t\tif ( extension.toLowerCase() === 'model' ) return rel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction build( objects, data3mf ) {\n\n\t\t\tconst group = new Group();\n\n\t\t\tconst relationship = fetch3DModelPart( data3mf[ 'rels' ] );\n\t\t\tconst buildData = data3mf.model[ relationship[ 'target' ].substring( 1 ) ][ 'build' ];\n\n\t\t\tfor ( let i = 0; i < buildData.length; i ++ ) {\n\n\t\t\t\tconst buildItem = buildData[ i ];\n\t\t\t\tconst object3D = objects[ buildItem[ 'objectId' ] ].clone();\n\n\t\t\t\t// apply transform\n\n\t\t\t\tconst transform = buildItem[ 'transform' ];\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tobject3D.applyMatrix4( transform );\n\n\t\t\t\t}\n\n\t\t\t\tgroup.add( object3D );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tconst data3mf = loadDocument( data );\n\t\tconst objects = buildObjects( data3mf );\n\n\t\treturn build( objects, data3mf );\n\n\t}\n\n\taddExtension( extension ) {\n\n\t\tthis.availableExtensions.push( extension );\n\n\t}\n\n}\n\nexport { ThreeMFLoader };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLoader,\n\tMesh,\n\tMeshPhongMaterial\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\n/**\n * Description: Early release of an AMF Loader following the pattern of the\n * example loaders in the three.js project.\n *\n * Usage:\n *\tconst loader = new AMFLoader();\n *\tloader.load('/path/to/project.amf', function(objecttree) {\n *\t\tscene.add(objecttree);\n *\t});\n *\n * Materials now supported, material colors supported\n * Zip support, requires fflate\n * No constellation support (yet)!\n *\n */\n\nclass AMFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction loadDocument( data ) {\n\n\t\t\tlet view = new DataView( data );\n\t\t\tconst magic = String.fromCharCode( view.getUint8( 0 ), view.getUint8( 1 ) );\n\n\t\t\tif ( magic === 'PK' ) {\n\n\t\t\t\tlet zip = null;\n\t\t\t\tlet file = null;\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Loading Zip' );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tzip = fflate.unzipSync( new Uint8Array( data ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( e instanceof ReferenceError ) {\n\n\t\t\t\t\t\tconsole.log( 'THREE.AMFLoader: fflate missing and file is compressed.' );\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( file in zip ) {\n\n\t\t\t\t\tif ( file.toLowerCase().slice( - 4 ) === '.amf' ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Trying to load file asset: ' + file );\n\t\t\t\tview = new DataView( zip[ file ].buffer );\n\n\t\t\t}\n\n\t\t\tconst fileText = new TextDecoder().decode( view );\n\t\t\tconst xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );\n\n\t\t\tif ( xmlData.documentElement.nodeName.toLowerCase() !== 'amf' ) {\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Error loading AMF - no AMF document found.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn xmlData;\n\n\t\t}\n\n\t\tfunction loadDocumentScale( node ) {\n\n\t\t\tlet scale = 1.0;\n\t\t\tlet unit = 'millimeter';\n\n\t\t\tif ( node.documentElement.attributes.unit !== undefined ) {\n\n\t\t\t\tunit = node.documentElement.attributes.unit.value.toLowerCase();\n\n\t\t\t}\n\n\t\t\tconst scaleUnits = {\n\t\t\t\tmillimeter: 1.0,\n\t\t\t\tinch: 25.4,\n\t\t\t\tfeet: 304.8,\n\t\t\t\tmeter: 1000.0,\n\t\t\t\tmicron: 0.001\n\t\t\t};\n\n\t\t\tif ( scaleUnits[ unit ] !== undefined ) {\n\n\t\t\t\tscale = scaleUnits[ unit ];\n\n\t\t\t}\n\n\t\t\tconsole.log( 'THREE.AMFLoader: Unit scale: ' + scale );\n\t\t\treturn scale;\n\n\t\t}\n\n\t\tfunction loadMaterials( node ) {\n\n\t\t\tlet matName = 'AMF Material';\n\t\t\tconst matId = node.attributes.id.textContent;\n\t\t\tlet color = { r: 1.0, g: 1.0, b: 1.0, a: 1.0 };\n\n\t\t\tlet loadedMaterial = null;\n\n\t\t\tfor ( let i = 0; i < node.childNodes.length; i ++ ) {\n\n\t\t\t\tconst matChildEl = node.childNodes[ i ];\n\n\t\t\t\tif ( matChildEl.nodeName === 'metadata' && matChildEl.attributes.type !== undefined ) {\n\n\t\t\t\t\tif ( matChildEl.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\tmatName = matChildEl.textContent;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( matChildEl.nodeName === 'color' ) {\n\n\t\t\t\t\tcolor = loadColor( matChildEl );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tloadedMaterial = new MeshPhongMaterial( {\n\t\t\t\tflatShading: true,\n\t\t\t\tcolor: new Color( color.r, color.g, color.b ),\n\t\t\t\tname: matName\n\t\t\t} );\n\n\t\t\tif ( color.a !== 1.0 ) {\n\n\t\t\t\tloadedMaterial.transparent = true;\n\t\t\t\tloadedMaterial.opacity = color.a;\n\n\t\t\t}\n\n\t\t\treturn { id: matId, material: loadedMaterial };\n\n\t\t}\n\n\t\tfunction loadColor( node ) {\n\n\t\t\tconst color = { r: 1.0, g: 1.0, b: 1.0, a: 1.0 };\n\n\t\t\tfor ( let i = 0; i < node.childNodes.length; i ++ ) {\n\n\t\t\t\tconst matColor = node.childNodes[ i ];\n\n\t\t\t\tif ( matColor.nodeName === 'r' ) {\n\n\t\t\t\t\tcolor.r = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'g' ) {\n\n\t\t\t\t\tcolor.g = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'b' ) {\n\n\t\t\t\t\tcolor.b = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'a' ) {\n\n\t\t\t\t\tcolor.a = matColor.textContent;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tfunction loadMeshVolume( node ) {\n\n\t\t\tconst volume = { name: '', triangles: [], materialid: null };\n\n\t\t\tlet currVolumeNode = node.firstElementChild;\n\n\t\t\tif ( node.attributes.materialid !== undefined ) {\n\n\t\t\t\tvolume.materialId = node.attributes.materialid.nodeValue;\n\n\t\t\t}\n\n\t\t\twhile ( currVolumeNode ) {\n\n\t\t\t\tif ( currVolumeNode.nodeName === 'metadata' ) {\n\n\t\t\t\t\tif ( currVolumeNode.attributes.type !== undefined ) {\n\n\t\t\t\t\t\tif ( currVolumeNode.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\t\tvolume.name = currVolumeNode.textContent;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( currVolumeNode.nodeName === 'triangle' ) {\n\n\t\t\t\t\tconst v1 = currVolumeNode.getElementsByTagName( 'v1' )[ 0 ].textContent;\n\t\t\t\t\tconst v2 = currVolumeNode.getElementsByTagName( 'v2' )[ 0 ].textContent;\n\t\t\t\t\tconst v3 = currVolumeNode.getElementsByTagName( 'v3' )[ 0 ].textContent;\n\n\t\t\t\t\tvolume.triangles.push( v1, v2, v3 );\n\n\t\t\t\t}\n\n\t\t\t\tcurrVolumeNode = currVolumeNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn volume;\n\n\t\t}\n\n\t\tfunction loadMeshVertices( node ) {\n\n\t\t\tconst vertArray = [];\n\t\t\tconst normalArray = [];\n\t\t\tlet currVerticesNode = node.firstElementChild;\n\n\t\t\twhile ( currVerticesNode ) {\n\n\t\t\t\tif ( currVerticesNode.nodeName === 'vertex' ) {\n\n\t\t\t\t\tlet vNode = currVerticesNode.firstElementChild;\n\n\t\t\t\t\twhile ( vNode ) {\n\n\t\t\t\t\t\tif ( vNode.nodeName === 'coordinates' ) {\n\n\t\t\t\t\t\t\tconst x = vNode.getElementsByTagName( 'x' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst y = vNode.getElementsByTagName( 'y' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst z = vNode.getElementsByTagName( 'z' )[ 0 ].textContent;\n\n\t\t\t\t\t\t\tvertArray.push( x, y, z );\n\n\t\t\t\t\t\t} else if ( vNode.nodeName === 'normal' ) {\n\n\t\t\t\t\t\t\tconst nx = vNode.getElementsByTagName( 'nx' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst ny = vNode.getElementsByTagName( 'ny' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst nz = vNode.getElementsByTagName( 'nz' )[ 0 ].textContent;\n\n\t\t\t\t\t\t\tnormalArray.push( nx, ny, nz );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvNode = vNode.nextElementSibling;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrVerticesNode = currVerticesNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn { 'vertices': vertArray, 'normals': normalArray };\n\n\t\t}\n\n\t\tfunction loadObject( node ) {\n\n\t\t\tconst objId = node.attributes.id.textContent;\n\t\t\tconst loadedObject = { name: 'amfobject', meshes: [] };\n\t\t\tlet currColor = null;\n\t\t\tlet currObjNode = node.firstElementChild;\n\n\t\t\twhile ( currObjNode ) {\n\n\t\t\t\tif ( currObjNode.nodeName === 'metadata' ) {\n\n\t\t\t\t\tif ( currObjNode.attributes.type !== undefined ) {\n\n\t\t\t\t\t\tif ( currObjNode.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\t\tloadedObject.name = currObjNode.textContent;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( currObjNode.nodeName === 'color' ) {\n\n\t\t\t\t\tcurrColor = loadColor( currObjNode );\n\n\t\t\t\t} else if ( currObjNode.nodeName === 'mesh' ) {\n\n\t\t\t\t\tlet currMeshNode = currObjNode.firstElementChild;\n\t\t\t\t\tconst mesh = { vertices: [], normals: [], volumes: [], color: currColor };\n\n\t\t\t\t\twhile ( currMeshNode ) {\n\n\t\t\t\t\t\tif ( currMeshNode.nodeName === 'vertices' ) {\n\n\t\t\t\t\t\t\tconst loadedVertices = loadMeshVertices( currMeshNode );\n\n\t\t\t\t\t\t\tmesh.normals = mesh.normals.concat( loadedVertices.normals );\n\t\t\t\t\t\t\tmesh.vertices = mesh.vertices.concat( loadedVertices.vertices );\n\n\t\t\t\t\t\t} else if ( currMeshNode.nodeName === 'volume' ) {\n\n\t\t\t\t\t\t\tmesh.volumes.push( loadMeshVolume( currMeshNode ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrMeshNode = currMeshNode.nextElementSibling;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tloadedObject.meshes.push( mesh );\n\n\t\t\t\t}\n\n\t\t\t\tcurrObjNode = currObjNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn { 'id': objId, 'obj': loadedObject };\n\n\t\t}\n\n\t\tconst xmlData = loadDocument( data );\n\t\tlet amfName = '';\n\t\tlet amfAuthor = '';\n\t\tconst amfScale = loadDocumentScale( xmlData );\n\t\tconst amfMaterials = {};\n\t\tconst amfObjects = {};\n\t\tconst childNodes = xmlData.documentElement.childNodes;\n\n\t\tlet i, j;\n\n\t\tfor ( i = 0; i < childNodes.length; i ++ ) {\n\n\t\t\tconst child = childNodes[ i ];\n\n\t\t\tif ( child.nodeName === 'metadata' ) {\n\n\t\t\t\tif ( child.attributes.type !== undefined ) {\n\n\t\t\t\t\tif ( child.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\tamfName = child.textContent;\n\n\t\t\t\t\t} else if ( child.attributes.type.value === 'author' ) {\n\n\t\t\t\t\t\tamfAuthor = child.textContent;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( child.nodeName === 'material' ) {\n\n\t\t\t\tconst loadedMaterial = loadMaterials( child );\n\n\t\t\t\tamfMaterials[ loadedMaterial.id ] = loadedMaterial.material;\n\n\t\t\t} else if ( child.nodeName === 'object' ) {\n\n\t\t\t\tconst loadedObject = loadObject( child );\n\n\t\t\t\tamfObjects[ loadedObject.id ] = loadedObject.obj;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst sceneObject = new Group();\n\t\tconst defaultMaterial = new MeshPhongMaterial( {\n\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\tcolor: 0xaaaaff,\n\t\t\tflatShading: true\n\t\t} );\n\n\t\tsceneObject.name = amfName;\n\t\tsceneObject.userData.author = amfAuthor;\n\t\tsceneObject.userData.loader = 'AMF';\n\n\t\tfor ( const id in amfObjects ) {\n\n\t\t\tconst part = amfObjects[ id ];\n\t\t\tconst meshes = part.meshes;\n\t\t\tconst newObject = new Group();\n\t\t\tnewObject.name = part.name || '';\n\n\t\t\tfor ( i = 0; i < meshes.length; i ++ ) {\n\n\t\t\t\tlet objDefaultMaterial = defaultMaterial;\n\t\t\t\tconst mesh = meshes[ i ];\n\t\t\t\tconst vertices = new Float32BufferAttribute( mesh.vertices, 3 );\n\t\t\t\tlet normals = null;\n\n\t\t\t\tif ( mesh.normals.length ) {\n\n\t\t\t\t\tnormals = new Float32BufferAttribute( mesh.normals, 3 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( mesh.color ) {\n\n\t\t\t\t\tconst color = mesh.color;\n\n\t\t\t\t\tobjDefaultMaterial = defaultMaterial.clone();\n\t\t\t\t\tobjDefaultMaterial.color = new Color( color.r, color.g, color.b );\n\n\t\t\t\t\tif ( color.a !== 1.0 ) {\n\n\t\t\t\t\t\tobjDefaultMaterial.transparent = true;\n\t\t\t\t\t\tobjDefaultMaterial.opacity = color.a;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst volumes = mesh.volumes;\n\n\t\t\t\tfor ( j = 0; j < volumes.length; j ++ ) {\n\n\t\t\t\t\tconst volume = volumes[ j ];\n\t\t\t\t\tconst newGeometry = new BufferGeometry();\n\t\t\t\t\tlet material = objDefaultMaterial;\n\n\t\t\t\t\tnewGeometry.setIndex( volume.triangles );\n\t\t\t\t\tnewGeometry.setAttribute( 'position', vertices.clone() );\n\n\t\t\t\t\tif ( normals ) {\n\n\t\t\t\t\t\tnewGeometry.setAttribute( 'normal', normals.clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( amfMaterials[ volume.materialId ] !== undefined ) {\n\n\t\t\t\t\t\tmaterial = amfMaterials[ volume.materialId ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnewGeometry.scale( amfScale, amfScale, amfScale );\n\t\t\t\t\tnewObject.add( new Mesh( newGeometry, material.clone() ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tsceneObject.add( newObject );\n\n\t\t}\n\n\t\treturn sceneObject;\n\n\t}\n\n}\n\nexport { AMFLoader };\n", "import {\n\tAnimationClip,\n\tBone,\n\tFileLoader,\n\tLoader,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tSkeleton,\n\tVector3,\n\tVectorKeyframeTrack\n} from 'three';\n\n/**\n * Description: reads BVH files and outputs a single Skeleton and an AnimationClip\n *\n * Currently only supports bvh files containing a single root.\n *\n */\n\nclass BVHLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.animateBonePositions = true;\n\t\tthis.animateBoneRotations = true;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\t/*\n\t\t\treads a string array (lines) from a BVH file\n\t\t\tand outputs a skeleton structure including motion data\n\n\t\t\treturns thee root node:\n\t\t\t{ name: '', channels: [], children: [] }\n\t\t*/\n\t\tfunction readBvh( lines ) {\n\n\t\t\t// read model structure\n\n\t\t\tif ( nextLine( lines ) !== 'HIERARCHY' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: HIERARCHY expected.' );\n\n\t\t\t}\n\n\t\t\tconst list = []; // collects flat array of all bones\n\t\t\tconst root = readNode( lines, nextLine( lines ), list );\n\n\t\t\t// read motion data\n\n\t\t\tif ( nextLine( lines ) !== 'MOTION' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: MOTION expected.' );\n\n\t\t\t}\n\n\t\t\t// number of frames\n\n\t\t\tlet tokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\tconst numFrames = parseInt( tokens[ 1 ] );\n\n\t\t\tif ( isNaN( numFrames ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Failed to read number of frames.' );\n\n\t\t\t}\n\n\t\t\t// frame time\n\n\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\tconst frameTime = parseFloat( tokens[ 2 ] );\n\n\t\t\tif ( isNaN( frameTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Failed to read frame time.' );\n\n\t\t\t}\n\n\t\t\t// read frame data line by line\n\n\t\t\tfor ( let i = 0; i < numFrames; i ++ ) {\n\n\t\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\t\treadFrameData( tokens, i * frameTime, root );\n\n\t\t\t}\n\n\t\t\treturn list;\n\n\t\t}\n\n\t\t/*\n\t\t\tRecursively reads data from a single frame into the bone hierarchy.\n\t\t\tThe passed bone hierarchy has to be structured in the same order as the BVH file.\n\t\t\tkeyframe data is stored in bone.frames.\n\n\t\t\t- data: splitted string array (frame values), values are shift()ed so\n\t\t\tthis should be empty after parsing the whole hierarchy.\n\t\t\t- frameTime: playback time for this keyframe.\n\t\t\t- bone: the bone to read frame data from.\n\t\t*/\n\t\tfunction readFrameData( data, frameTime, bone ) {\n\n\t\t\t// end sites have no motion data\n\n\t\t\tif ( bone.type === 'ENDSITE' ) return;\n\n\t\t\t// add keyframe\n\n\t\t\tconst keyframe = {\n\t\t\t\ttime: frameTime,\n\t\t\t\tposition: new Vector3(),\n\t\t\t\trotation: new Quaternion()\n\t\t\t};\n\n\t\t\tbone.frames.push( keyframe );\n\n\t\t\tconst quat = new Quaternion();\n\n\t\t\tconst vx = new Vector3( 1, 0, 0 );\n\t\t\tconst vy = new Vector3( 0, 1, 0 );\n\t\t\tconst vz = new Vector3( 0, 0, 1 );\n\n\t\t\t// parse values for each channel in node\n\n\t\t\tfor ( let i = 0; i < bone.channels.length; i ++ ) {\n\n\t\t\t\tswitch ( bone.channels[ i ] ) {\n\n\t\t\t\t\tcase 'Xposition':\n\t\t\t\t\t\tkeyframe.position.x = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Yposition':\n\t\t\t\t\t\tkeyframe.position.y = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Zposition':\n\t\t\t\t\t\tkeyframe.position.z = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Xrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vx, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Yrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vy, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Zrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vz, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.BVHLoader: Invalid channel type.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// parse child nodes\n\n\t\t\tfor ( let i = 0; i < bone.children.length; i ++ ) {\n\n\t\t\t\treadFrameData( data, frameTime, bone.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t Recursively parses the HIERACHY section of the BVH file\n\n\t\t - lines: all lines of the file. lines are consumed as we go along.\n\t\t - firstline: line containing the node type and name e.g. 'JOINT hip'\n\t\t - list: collects a flat list of nodes\n\n\t\t returns: a BVH node including children\n\t\t*/\n\t\tfunction readNode( lines, firstline, list ) {\n\n\t\t\tconst node = { name: '', type: '', frames: [] };\n\t\t\tlist.push( node );\n\n\t\t\t// parse node type and name\n\n\t\t\tlet tokens = firstline.split( /[\\s]+/ );\n\n\t\t\tif ( tokens[ 0 ].toUpperCase() === 'END' && tokens[ 1 ].toUpperCase() === 'SITE' ) {\n\n\t\t\t\tnode.type = 'ENDSITE';\n\t\t\t\tnode.name = 'ENDSITE'; // bvh end sites have no name\n\n\t\t\t} else {\n\n\t\t\t\tnode.name = tokens[ 1 ];\n\t\t\t\tnode.type = tokens[ 0 ].toUpperCase();\n\n\t\t\t}\n\n\t\t\tif ( nextLine( lines ) !== '{' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected opening { after type & name' );\n\n\t\t\t}\n\n\t\t\t// parse OFFSET\n\n\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\n\t\t\tif ( tokens[ 0 ] !== 'OFFSET' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected OFFSET but got: ' + tokens[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( tokens.length !== 4 ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Invalid number of values for OFFSET.' );\n\n\t\t\t}\n\n\t\t\tconst offset = new Vector3(\n\t\t\t\tparseFloat( tokens[ 1 ] ),\n\t\t\t\tparseFloat( tokens[ 2 ] ),\n\t\t\t\tparseFloat( tokens[ 3 ] )\n\t\t\t);\n\n\t\t\tif ( isNaN( offset.x ) || isNaN( offset.y ) || isNaN( offset.z ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Invalid values of OFFSET.' );\n\n\t\t\t}\n\n\t\t\tnode.offset = offset;\n\n\t\t\t// parse CHANNELS definitions\n\n\t\t\tif ( node.type !== 'ENDSITE' ) {\n\n\t\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\n\t\t\t\tif ( tokens[ 0 ] !== 'CHANNELS' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected CHANNELS definition.' );\n\n\t\t\t\t}\n\n\t\t\t\tconst numChannels = parseInt( tokens[ 1 ] );\n\t\t\t\tnode.channels = tokens.splice( 2, numChannels );\n\t\t\t\tnode.children = [];\n\n\t\t\t}\n\n\t\t\t// read children\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tconst line = nextLine( lines );\n\n\t\t\t\tif ( line === '}' ) {\n\n\t\t\t\t\treturn node;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnode.children.push( readNode( lines, line, list ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t\trecursively converts the internal bvh node structure to a Bone hierarchy\n\n\t\t\tsource: the bvh root node\n\t\t\tlist: pass an empty array, collects a flat list of all converted THREE.Bones\n\n\t\t\treturns the root Bone\n\t\t*/\n\t\tfunction toTHREEBone( source, list ) {\n\n\t\t\tconst bone = new Bone();\n\t\t\tlist.push( bone );\n\n\t\t\tbone.position.add( source.offset );\n\t\t\tbone.name = source.name;\n\n\t\t\tif ( source.type !== 'ENDSITE' ) {\n\n\t\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\t\tbone.add( toTHREEBone( source.children[ i ], list ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bone;\n\n\t\t}\n\n\t\t/*\n\t\t\tbuilds a AnimationClip from the keyframe data saved in each bone.\n\n\t\t\tbone: bvh root node\n\n\t\t\treturns: a AnimationClip containing position and quaternion tracks\n\t\t*/\n\t\tfunction toTHREEAnimation( bones ) {\n\n\t\t\tconst tracks = [];\n\n\t\t\t// create a position and quaternion animation track for each node\n\n\t\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\t\tconst bone = bones[ i ];\n\n\t\t\t\tif ( bone.type === 'ENDSITE' )\n\t\t\t\t\tcontinue;\n\n\t\t\t\t// track data\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst positions = [];\n\t\t\t\tconst rotations = [];\n\n\t\t\t\tfor ( let j = 0; j < bone.frames.length; j ++ ) {\n\n\t\t\t\t\tconst frame = bone.frames[ j ];\n\n\t\t\t\t\ttimes.push( frame.time );\n\n\t\t\t\t\t// the animation system animates the position property,\n\t\t\t\t\t// so we have to add the joint offset to all values\n\n\t\t\t\t\tpositions.push( frame.position.x + bone.offset.x );\n\t\t\t\t\tpositions.push( frame.position.y + bone.offset.y );\n\t\t\t\t\tpositions.push( frame.position.z + bone.offset.z );\n\n\t\t\t\t\trotations.push( frame.rotation.x );\n\t\t\t\t\trotations.push( frame.rotation.y );\n\t\t\t\t\trotations.push( frame.rotation.z );\n\t\t\t\t\trotations.push( frame.rotation.w );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.animateBonePositions ) {\n\n\t\t\t\t\ttracks.push( new VectorKeyframeTrack( bone.name + '.position', times, positions ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.animateBoneRotations ) {\n\n\t\t\t\t\ttracks.push( new QuaternionKeyframeTrack( bone.name + '.quaternion', times, rotations ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( 'animation', - 1, tracks );\n\n\t\t}\n\n\t\t/*\n\t\t\treturns the next non-empty line in lines\n\t\t*/\n\t\tfunction nextLine( lines ) {\n\n\t\t\tlet line;\n\t\t\t// skip empty lines\n\t\t\twhile ( ( line = lines.shift().trim() ).length === 0 ) { }\n\n\t\t\treturn line;\n\n\t\t}\n\n\t\tconst scope = this;\n\n\t\tconst lines = text.split( /[\\r\\n]+/g );\n\n\t\tconst bones = readBvh( lines );\n\n\t\tconst threeBones = [];\n\t\ttoTHREEBone( bones[ 0 ], threeBones );\n\n\t\tconst threeClip = toTHREEAnimation( bones );\n\n\t\treturn {\n\t\t\tskeleton: new Skeleton( threeBones ),\n\t\t\tclip: threeClip\n\t\t};\n\n\t}\n\n}\n\nexport { BVHLoader };\n", "import {\n\tDataTextureLoader,\n\tLinearMipmapLinearFilter\n} from 'three';\n\nclass TGALoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\t// reference from vthibault, https://github.com/vthibault/roBrowser/blob/master/src/Loaders/Targa.js\n\n\t\tfunction tgaCheckHeader( header ) {\n\n\t\t\tswitch ( header.image_type ) {\n\n\t\t\t\t// check indexed type\n\n\t\t\t\tcase TGA_TYPE_INDEXED:\n\t\t\t\tcase TGA_TYPE_RLE_INDEXED:\n\t\t\t\t\tif ( header.colormap_length > 256 || header.colormap_size !== 24 || header.colormap_type !== 1 ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid type colormap data for indexed type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// check colormap type\n\n\t\t\t\tcase TGA_TYPE_RGB:\n\t\t\t\tcase TGA_TYPE_GREY:\n\t\t\t\tcase TGA_TYPE_RLE_RGB:\n\t\t\t\tcase TGA_TYPE_RLE_GREY:\n\t\t\t\t\tif ( header.colormap_type ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid type colormap data for colormap type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// What the need of a file without data ?\n\n\t\t\t\tcase TGA_TYPE_NO_DATA:\n\t\t\t\t\tthrow new Error( 'THREE.TGALoader: No data.' );\n\n\t\t\t\t\t// Invalid type ?\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid type ' + header.image_type );\n\n\t\t\t}\n\n\t\t\t// check image width and height\n\n\t\t\tif ( header.width <= 0 || header.height <= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid image size.' );\n\n\t\t\t}\n\n\t\t\t// check image pixel size\n\n\t\t\tif ( header.pixel_size !== 8 && header.pixel_size !== 16 &&\n\t\t\t\theader.pixel_size !== 24 && header.pixel_size !== 32 ) {\n\n\t\t\t\tthrow new Error( 'THREE.TGALoader: Invalid pixel size ' + header.pixel_size );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse tga image buffer\n\n\t\tfunction tgaParse( use_rle, use_pal, header, offset, data ) {\n\n\t\t\tlet pixel_data,\n\t\t\t\tpalettes;\n\n\t\t\tconst pixel_size = header.pixel_size >> 3;\n\t\t\tconst pixel_total = header.width * header.height * pixel_size;\n\n\t\t\t // read palettes\n\n\t\t\t if ( use_pal ) {\n\n\t\t\t\t palettes = data.subarray( offset, offset += header.colormap_length * ( header.colormap_size >> 3 ) );\n\n\t\t\t }\n\n\t\t\t // read RLE\n\n\t\t\t if ( use_rle ) {\n\n\t\t\t\t pixel_data = new Uint8Array( pixel_total );\n\n\t\t\t\tlet c, count, i;\n\t\t\t\tlet shift = 0;\n\t\t\t\tconst pixels = new Uint8Array( pixel_size );\n\n\t\t\t\twhile ( shift < pixel_total ) {\n\n\t\t\t\t\tc = data[ offset ++ ];\n\t\t\t\t\tcount = ( c & 0x7f ) + 1;\n\n\t\t\t\t\t// RLE pixels\n\n\t\t\t\t\tif ( c & 0x80 ) {\n\n\t\t\t\t\t\t// bind pixel tmp array\n\n\t\t\t\t\t\tfor ( i = 0; i < pixel_size; ++ i ) {\n\n\t\t\t\t\t\t\tpixels[ i ] = data[ offset ++ ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// copy pixel array\n\n\t\t\t\t\t\tfor ( i = 0; i < count; ++ i ) {\n\n\t\t\t\t\t\t\tpixel_data.set( pixels, shift + i * pixel_size );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tshift += pixel_size * count;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// raw pixels\n\n\t\t\t\t\t\tcount *= pixel_size;\n\n\t\t\t\t\t\tfor ( i = 0; i < count; ++ i ) {\n\n\t\t\t\t\t\t\tpixel_data[ shift + i ] = data[ offset ++ ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tshift += count;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t } else {\n\n\t\t\t\t// raw pixels\n\n\t\t\t\tpixel_data = data.subarray(\n\t\t\t\t\t offset, offset += ( use_pal ? header.width * header.height : pixel_total )\n\t\t\t\t);\n\n\t\t\t }\n\n\t\t\t return {\n\t\t\t\tpixel_data: pixel_data,\n\t\t\t\tpalettes: palettes\n\t\t\t };\n\n\t\t}\n\n\t\tfunction tgaGetImageData8bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image, palettes ) {\n\n\t\t\tconst colormap = palettes;\n\t\t\tlet color, i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i ++ ) {\n\n\t\t\t\t\tcolor = image[ i ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = colormap[ ( color * 3 ) + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = colormap[ ( color * 3 ) + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = colormap[ ( color * 3 ) + 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData16bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet color, i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 2 ) {\n\n\t\t\t\t\tcolor = image[ i + 0 ] + ( image[ i + 1 ] << 8 );\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = ( color & 0x7C00 ) >> 7;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = ( color & 0x03E0 ) >> 2;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = ( color & 0x001F ) << 3;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = ( color & 0x8000 ) ? 0 : 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData24bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 3 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData32bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 4 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 2 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = image[ i + 3 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageDataGrey8bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet color, i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i ++ ) {\n\n\t\t\t\t\tcolor = image[ i ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageDataGrey16bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 2 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = image[ i + 1 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction getTgaRGBA( data, width, height, image, palette ) {\n\n\t\t\tlet x_start,\n\t\t\t\ty_start,\n\t\t\t\tx_step,\n\t\t\t\ty_step,\n\t\t\t\tx_end,\n\t\t\t\ty_end;\n\n\t\t\tswitch ( ( header.flags & TGA_ORIGIN_MASK ) >> TGA_ORIGIN_SHIFT ) {\n\n\t\t\t\tdefault:\n\t\t\t\tcase TGA_ORIGIN_UL:\n\t\t\t\t\tx_start = 0;\n\t\t\t\t\tx_step = 1;\n\t\t\t\t\tx_end = width;\n\t\t\t\t\ty_start = 0;\n\t\t\t\t\ty_step = 1;\n\t\t\t\t\ty_end = height;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_BL:\n\t\t\t\t\tx_start = 0;\n\t\t\t\t\tx_step = 1;\n\t\t\t\t\tx_end = width;\n\t\t\t\t\ty_start = height - 1;\n\t\t\t\t\ty_step = - 1;\n\t\t\t\t\ty_end = - 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_UR:\n\t\t\t\t\tx_start = width - 1;\n\t\t\t\t\tx_step = - 1;\n\t\t\t\t\tx_end = - 1;\n\t\t\t\t\ty_start = 0;\n\t\t\t\t\ty_step = 1;\n\t\t\t\t\ty_end = height;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_BR:\n\t\t\t\t\tx_start = width - 1;\n\t\t\t\t\tx_step = - 1;\n\t\t\t\t\tx_end = - 1;\n\t\t\t\t\ty_start = height - 1;\n\t\t\t\t\ty_step = - 1;\n\t\t\t\t\ty_end = - 1;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( use_grey ) {\n\n\t\t\t\tswitch ( header.pixel_size ) {\n\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\ttgaGetImageDataGrey8bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 16:\n\t\t\t\t\t\ttgaGetImageDataGrey16bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Format not supported.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( header.pixel_size ) {\n\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\ttgaGetImageData8bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image, palette );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 16:\n\t\t\t\t\t\ttgaGetImageData16bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 24:\n\t\t\t\t\t\ttgaGetImageData24bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 32:\n\t\t\t\t\t\ttgaGetImageData32bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'THREE.TGALoader: Format not supported.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Load image data according to specific method\n\t\t\t// let func = 'tgaGetImageData' + (use_grey ? 'Grey' : '') + (header.pixel_size) + 'bits';\n\t\t\t// func(data, y_start, y_step, y_end, x_start, x_step, x_end, width, image, palette );\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// TGA constants\n\n\t\tconst TGA_TYPE_NO_DATA = 0,\n\t\t\tTGA_TYPE_INDEXED = 1,\n\t\t\tTGA_TYPE_RGB = 2,\n\t\t\tTGA_TYPE_GREY = 3,\n\t\t\tTGA_TYPE_RLE_INDEXED = 9,\n\t\t\tTGA_TYPE_RLE_RGB = 10,\n\t\t\tTGA_TYPE_RLE_GREY = 11,\n\n\t\t\tTGA_ORIGIN_MASK = 0x30,\n\t\t\tTGA_ORIGIN_SHIFT = 0x04,\n\t\t\tTGA_ORIGIN_BL = 0x00,\n\t\t\tTGA_ORIGIN_BR = 0x01,\n\t\t\tTGA_ORIGIN_UL = 0x02,\n\t\t\tTGA_ORIGIN_UR = 0x03;\n\n\t\tif ( buffer.length < 19 ) throw new Error( 'THREE.TGALoader: Not enough data to contain header.' );\n\n\t\tlet offset = 0;\n\n\t\tconst content = new Uint8Array( buffer ),\n\t\t\theader = {\n\t\t\t\tid_length: content[ offset ++ ],\n\t\t\t\tcolormap_type: content[ offset ++ ],\n\t\t\t\timage_type: content[ offset ++ ],\n\t\t\t\tcolormap_index: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tcolormap_length: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tcolormap_size: content[ offset ++ ],\n\t\t\t\torigin: [\n\t\t\t\t\tcontent[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\t\tcontent[ offset ++ ] | content[ offset ++ ] << 8\n\t\t\t\t],\n\t\t\t\twidth: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\theight: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tpixel_size: content[ offset ++ ],\n\t\t\t\tflags: content[ offset ++ ]\n\t\t\t};\n\n\t\t// check tga if it is valid format\n\n\t\ttgaCheckHeader( header );\n\n\t\tif ( header.id_length + offset > buffer.length ) {\n\n\t\t\tthrow new Error( 'THREE.TGALoader: No data.' );\n\n\t\t}\n\n\t\t// skip the needn't data\n\n\t\toffset += header.id_length;\n\n\t\t// get targa information about RLE compression and palette\n\n\t\tlet use_rle = false,\n\t\t\tuse_pal = false,\n\t\t\tuse_grey = false;\n\n\t\tswitch ( header.image_type ) {\n\n\t\t\tcase TGA_TYPE_RLE_INDEXED:\n\t\t\t\tuse_rle = true;\n\t\t\t\tuse_pal = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_INDEXED:\n\t\t\t\tuse_pal = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RLE_RGB:\n\t\t\t\tuse_rle = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RGB:\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RLE_GREY:\n\t\t\t\tuse_rle = true;\n\t\t\t\tuse_grey = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_GREY:\n\t\t\t\tuse_grey = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t//\n\n\t\tconst imageData = new Uint8Array( header.width * header.height * 4 );\n\t\tconst result = tgaParse( use_rle, use_pal, header, offset, content );\n\t\tgetTgaRGBA( imageData, header.width, header.height, result.pixel_data, result.palettes );\n\n\t\treturn {\n\n\t\t\tdata: imageData,\n\t\t\twidth: header.width,\n\t\t\theight: header.height,\n\t\t\tflipY: true,\n\t\t\tgenerateMipmaps: true,\n\t\t\tminFilter: LinearMipmapLinearFilter,\n\n\t\t};\n\n\t}\n\n}\n\nexport { TGALoader };\n", "import {\n\tAmbientLight,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tLoaderUtils,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tScene,\n\tSkeleton,\n\tSkinnedMesh,\n\tSpotLight,\n\tTextureLoader,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace\n} from 'three';\nimport { TGALoader } from '../loaders/TGALoader.js';\n\nclass ColladaLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text, path ) {\n\n\t\tfunction getElementsByTagName( xml, name ) {\n\n\t\t\t// Non recursive xml.getElementsByTagName() ...\n\n\t\t\tconst array = [];\n\t\t\tconst childNodes = xml.childNodes;\n\n\t\t\tfor ( let i = 0, l = childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = childNodes[ i ];\n\n\t\t\t\tif ( child.nodeName === name ) {\n\n\t\t\t\t\tarray.push( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseStrings( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tconst parts = text.trim().split( /\\s+/ );\n\t\t\tconst array = new Array( parts.length );\n\n\t\t\tfor ( let i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parts[ i ];\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseFloats( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tconst parts = text.trim().split( /\\s+/ );\n\t\t\tconst array = new Array( parts.length );\n\n\t\t\tfor ( let i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseFloat( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseInts( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tconst parts = text.trim().split( /\\s+/ );\n\t\t\tconst array = new Array( parts.length );\n\n\t\t\tfor ( let i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseInt( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseId( text ) {\n\n\t\t\treturn text.substring( 1 );\n\n\t\t}\n\n\t\tfunction generateId() {\n\n\t\t\treturn 'three_default_' + ( count ++ );\n\n\t\t}\n\n\t\tfunction isEmpty( object ) {\n\n\t\t\treturn Object.keys( object ).length === 0;\n\n\t\t}\n\n\t\t// asset\n\n\t\tfunction parseAsset( xml ) {\n\n\t\t\treturn {\n\t\t\t\tunit: parseAssetUnit( getElementsByTagName( xml, 'unit' )[ 0 ] ),\n\t\t\t\tupAxis: parseAssetUpAxis( getElementsByTagName( xml, 'up_axis' )[ 0 ] )\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseAssetUnit( xml ) {\n\n\t\t\tif ( ( xml !== undefined ) && ( xml.hasAttribute( 'meter' ) === true ) ) {\n\n\t\t\t\treturn parseFloat( xml.getAttribute( 'meter' ) );\n\n\t\t\t} else {\n\n\t\t\t\treturn 1; // default 1 meter\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAssetUpAxis( xml ) {\n\n\t\t\treturn xml !== undefined ? xml.textContent : 'Y_UP';\n\n\t\t}\n\n\t\t// library\n\n\t\tfunction parseLibrary( xml, libraryName, nodeName, parser ) {\n\n\t\t\tconst library = getElementsByTagName( xml, libraryName )[ 0 ];\n\n\t\t\tif ( library !== undefined ) {\n\n\t\t\t\tconst elements = getElementsByTagName( library, nodeName );\n\n\t\t\t\tfor ( let i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\t\tparser( elements[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildLibrary( data, builder ) {\n\n\t\t\tfor ( const name in data ) {\n\n\t\t\t\tconst object = data[ name ];\n\t\t\t\tobject.build = builder( data[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// get\n\n\t\tfunction getBuild( data, builder ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\tdata.build = builder( data );\n\n\t\t\treturn data.build;\n\n\t\t}\n\n\t\t// animation\n\n\t\tfunction parseAnimation( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsources: {},\n\t\t\t\tsamplers: {},\n\t\t\t\tchannels: {}\n\t\t\t};\n\n\t\t\tlet hasChildren = false;\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tlet id;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.samplers[ id ] = parseAnimationSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'channel':\n\t\t\t\t\t\tid = child.getAttribute( 'target' );\n\t\t\t\t\t\tdata.channels[ id ] = parseAnimationChannel( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'animation':\n\t\t\t\t\t\t// hierarchy of related animations\n\t\t\t\t\t\tparseAnimation( child );\n\t\t\t\t\t\thasChildren = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasChildren === false ) {\n\n\t\t\t\t// since 'id' attributes can be optional, it's necessary to generate a UUID for unqiue assignment\n\n\t\t\t\tlibrary.animations[ xml.getAttribute( 'id' ) || MathUtils.generateUUID() ] = data;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimationSampler( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinputs: {},\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseAnimationChannel( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tconst target = xml.getAttribute( 'target' );\n\n\t\t\t// parsing SID Addressing Syntax\n\n\t\t\tlet parts = target.split( '/' );\n\n\t\t\tconst id = parts.shift();\n\t\t\tlet sid = parts.shift();\n\n\t\t\t// check selection syntax\n\n\t\t\tconst arraySyntax = ( sid.indexOf( '(' ) !== - 1 );\n\t\t\tconst memberSyntax = ( sid.indexOf( '.' ) !== - 1 );\n\n\t\t\tif ( memberSyntax ) {\n\n\t\t\t\t// member selection access\n\n\t\t\t\tparts = sid.split( '.' );\n\t\t\t\tsid = parts.shift();\n\t\t\t\tdata.member = parts.shift();\n\n\t\t\t} else if ( arraySyntax ) {\n\n\t\t\t\t// array-access syntax. can be used to express fields in one-dimensional vectors or two-dimensional matrices.\n\n\t\t\t\tconst indices = sid.split( '(' );\n\t\t\t\tsid = indices.shift();\n\n\t\t\t\tfor ( let i = 0; i < indices.length; i ++ ) {\n\n\t\t\t\t\tindices[ i ] = parseInt( indices[ i ].replace( /\\)/, '' ) );\n\n\t\t\t\t}\n\n\t\t\t\tdata.indices = indices;\n\n\t\t\t}\n\n\t\t\tdata.id = id;\n\t\t\tdata.sid = sid;\n\n\t\t\tdata.arraySyntax = arraySyntax;\n\t\t\tdata.memberSyntax = memberSyntax;\n\n\t\t\tdata.sampler = parseId( xml.getAttribute( 'source' ) );\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildAnimation( data ) {\n\n\t\t\tconst tracks = [];\n\n\t\t\tconst channels = data.channels;\n\t\t\tconst samplers = data.samplers;\n\t\t\tconst sources = data.sources;\n\n\t\t\tfor ( const target in channels ) {\n\n\t\t\t\tif ( channels.hasOwnProperty( target ) ) {\n\n\t\t\t\t\tconst channel = channels[ target ];\n\t\t\t\t\tconst sampler = samplers[ channel.sampler ];\n\n\t\t\t\t\tconst inputId = sampler.inputs.INPUT;\n\t\t\t\t\tconst outputId = sampler.inputs.OUTPUT;\n\n\t\t\t\t\tconst inputSource = sources[ inputId ];\n\t\t\t\t\tconst outputSource = sources[ outputId ];\n\n\t\t\t\t\tconst animation = buildAnimationChannel( channel, inputSource, outputSource );\n\n\t\t\t\t\tcreateKeyframeTracks( animation, tracks );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction getAnimation( id ) {\n\n\t\t\treturn getBuild( library.animations[ id ], buildAnimation );\n\n\t\t}\n\n\t\tfunction buildAnimationChannel( channel, inputSource, outputSource ) {\n\n\t\t\tconst node = library.nodes[ channel.id ];\n\t\t\tconst object3D = getNode( node.id );\n\n\t\t\tconst transform = node.transforms[ channel.sid ];\n\t\t\tconst defaultMatrix = node.matrix.clone().transpose();\n\n\t\t\tlet time, stride;\n\t\t\tlet i, il, j, jl;\n\n\t\t\tconst data = {};\n\n\t\t\t// the collada spec allows the animation of data in various ways.\n\t\t\t// depending on the transform type (matrix, translate, rotate, scale), we execute different logic\n\n\t\t\tswitch ( transform ) {\n\n\t\t\t\tcase 'matrix':\n\n\t\t\t\t\tfor ( i = 0, il = inputSource.array.length; i < il; i ++ ) {\n\n\t\t\t\t\t\ttime = inputSource.array[ i ];\n\t\t\t\t\t\tstride = i * outputSource.stride;\n\n\t\t\t\t\t\tif ( data[ time ] === undefined ) data[ time ] = {};\n\n\t\t\t\t\t\tif ( channel.arraySyntax === true ) {\n\n\t\t\t\t\t\t\tconst value = outputSource.array[ stride ];\n\t\t\t\t\t\t\tconst index = channel.indices[ 0 ] + 4 * channel.indices[ 1 ];\n\n\t\t\t\t\t\t\tdata[ time ][ index ] = value;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( j = 0, jl = outputSource.stride; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tdata[ time ][ j ] = outputSource.array[ stride + j ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'scale':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tconst keyframes = prepareAnimationData( data, defaultMatrix );\n\n\t\t\tconst animation = {\n\t\t\t\tname: object3D.uuid,\n\t\t\t\tkeyframes: keyframes\n\t\t\t};\n\n\t\t\treturn animation;\n\n\t\t}\n\n\t\tfunction prepareAnimationData( data, defaultMatrix ) {\n\n\t\t\tconst keyframes = [];\n\n\t\t\t// transfer data into a sortable array\n\n\t\t\tfor ( const time in data ) {\n\n\t\t\t\tkeyframes.push( { time: parseFloat( time ), value: data[ time ] } );\n\n\t\t\t}\n\n\t\t\t// ensure keyframes are sorted by time\n\n\t\t\tkeyframes.sort( ascending );\n\n\t\t\t// now we clean up all animation data, so we can use them for keyframe tracks\n\n\t\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\t\ttransformAnimationData( keyframes, i, defaultMatrix.elements[ i ] );\n\n\t\t\t}\n\n\t\t\treturn keyframes;\n\n\t\t\t// array sort function\n\n\t\t\tfunction ascending( a, b ) {\n\n\t\t\t\treturn a.time - b.time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst position = new Vector3();\n\t\tconst scale = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\n\t\tfunction createKeyframeTracks( animation, tracks ) {\n\n\t\t\tconst keyframes = animation.keyframes;\n\t\t\tconst name = animation.name;\n\n\t\t\tconst times = [];\n\t\t\tconst positionData = [];\n\t\t\tconst quaternionData = [];\n\t\t\tconst scaleData = [];\n\n\t\t\tfor ( let i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tconst time = keyframe.time;\n\t\t\t\tconst value = keyframe.value;\n\n\t\t\t\tmatrix.fromArray( value ).transpose();\n\t\t\t\tmatrix.decompose( position, quaternion, scale );\n\n\t\t\t\ttimes.push( time );\n\t\t\t\tpositionData.push( position.x, position.y, position.z );\n\t\t\t\tquaternionData.push( quaternion.x, quaternion.y, quaternion.z, quaternion.w );\n\t\t\t\tscaleData.push( scale.x, scale.y, scale.z );\n\n\t\t\t}\n\n\t\t\tif ( positionData.length > 0 ) tracks.push( new VectorKeyframeTrack( name + '.position', times, positionData ) );\n\t\t\tif ( quaternionData.length > 0 ) tracks.push( new QuaternionKeyframeTrack( name + '.quaternion', times, quaternionData ) );\n\t\t\tif ( scaleData.length > 0 ) tracks.push( new VectorKeyframeTrack( name + '.scale', times, scaleData ) );\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction transformAnimationData( keyframes, property, defaultValue ) {\n\n\t\t\tlet keyframe;\n\n\t\t\tlet empty = true;\n\t\t\tlet i, l;\n\n\t\t\t// check, if values of a property are missing in our keyframes\n\n\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === undefined ) {\n\n\t\t\t\t\tkeyframe.value[ property ] = null; // mark as missing\n\n\t\t\t\t} else {\n\n\t\t\t\t\tempty = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( empty === true ) {\n\n\t\t\t\t// no values at all, so we set a default value\n\n\t\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\t\tkeyframe.value[ property ] = defaultValue;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// filling gaps\n\n\t\t\t\tcreateMissingKeyframes( keyframes, property );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction createMissingKeyframes( keyframes, property ) {\n\n\t\t\tlet prev, next;\n\n\t\t\tfor ( let i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === null ) {\n\n\t\t\t\t\tprev = getPrev( keyframes, i, property );\n\t\t\t\t\tnext = getNext( keyframes, i, property );\n\n\t\t\t\t\tif ( prev === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = next.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( next === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = prev.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinterpolate( keyframe, prev, next, property );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getPrev( keyframes, i, property ) {\n\n\t\t\twhile ( i >= 0 ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti --;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction getNext( keyframes, i, property ) {\n\n\t\t\twhile ( i < keyframes.length ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction interpolate( key, prev, next, property ) {\n\n\t\t\tif ( ( next.time - prev.time ) === 0 ) {\n\n\t\t\t\tkey.value[ property ] = prev.value[ property ];\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tkey.value[ property ] = ( ( key.time - prev.time ) * ( next.value[ property ] - prev.value[ property ] ) / ( next.time - prev.time ) ) + prev.value[ property ];\n\n\t\t}\n\n\t\t// animation clips\n\n\t\tfunction parseAnimationClip( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'id' ) || 'default',\n\t\t\t\tstart: parseFloat( xml.getAttribute( 'start' ) || 0 ),\n\t\t\t\tend: parseFloat( xml.getAttribute( 'end' ) || 0 ),\n\t\t\t\tanimations: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_animation':\n\t\t\t\t\t\tdata.animations.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.clips[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildAnimationClip( data ) {\n\n\t\t\tconst tracks = [];\n\n\t\t\tconst name = data.name;\n\t\t\tconst duration = ( data.end - data.start ) || - 1;\n\t\t\tconst animations = data.animations;\n\n\t\t\tfor ( let i = 0, il = animations.length; i < il; i ++ ) {\n\n\t\t\t\tconst animationTracks = getAnimation( animations[ i ] );\n\n\t\t\t\tfor ( let j = 0, jl = animationTracks.length; j < jl; j ++ ) {\n\n\t\t\t\t\ttracks.push( animationTracks[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( name, duration, tracks );\n\n\t\t}\n\n\t\tfunction getAnimationClip( id ) {\n\n\t\t\treturn getBuild( library.clips[ id ], buildAnimationClip );\n\n\t\t}\n\n\t\t// controller\n\n\t\tfunction parseController( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'skin':\n\t\t\t\t\t\t// there is exactly one skin per controller\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.skin = parseSkin( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'morph':\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Morph target animation not supported yet.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.controllers[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSkin( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsources: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_shape_matrix':\n\t\t\t\t\t\tdata.bindShapeMatrix = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tconst id = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'joints':\n\t\t\t\t\t\tdata.joints = parseJoints( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertex_weights':\n\t\t\t\t\t\tdata.vertexWeights = parseVertexWeights( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseJoints( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseVertexWeights( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconst offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = { id: id, offset: offset };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tdata.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tdata.v = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildController( data ) {\n\n\t\t\tconst build = {\n\t\t\t\tid: data.id\n\t\t\t};\n\n\t\t\tconst geometry = library.geometries[ build.id ];\n\n\t\t\tif ( data.skin !== undefined ) {\n\n\t\t\t\tbuild.skin = buildSkin( data.skin );\n\n\t\t\t\t// we enhance the 'sources' property of the corresponding geometry with our skin data\n\n\t\t\t\tgeometry.sources.skinIndices = build.skin.indices;\n\t\t\t\tgeometry.sources.skinWeights = build.skin.weights;\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildSkin( data ) {\n\n\t\t\tconst BONE_LIMIT = 4;\n\n\t\t\tconst build = {\n\t\t\t\tjoints: [], // this must be an array to preserve the joint order\n\t\t\t\tindices: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t},\n\t\t\t\tweights: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst sources = data.sources;\n\t\t\tconst vertexWeights = data.vertexWeights;\n\n\t\t\tconst vcount = vertexWeights.vcount;\n\t\t\tconst v = vertexWeights.v;\n\t\t\tconst jointOffset = vertexWeights.inputs.JOINT.offset;\n\t\t\tconst weightOffset = vertexWeights.inputs.WEIGHT.offset;\n\n\t\t\tconst jointSource = data.sources[ data.joints.inputs.JOINT ];\n\t\t\tconst inverseSource = data.sources[ data.joints.inputs.INV_BIND_MATRIX ];\n\n\t\t\tconst weights = sources[ vertexWeights.inputs.WEIGHT.id ].array;\n\t\t\tlet stride = 0;\n\n\t\t\tlet i, j, l;\n\n\t\t\t// process skin data for each vertex\n\n\t\t\tfor ( i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\tconst jointCount = vcount[ i ]; // this is the amount of joints that affect a single vertex\n\t\t\t\tconst vertexSkinData = [];\n\n\t\t\t\tfor ( j = 0; j < jointCount; j ++ ) {\n\n\t\t\t\t\tconst skinIndex = v[ stride + jointOffset ];\n\t\t\t\t\tconst weightId = v[ stride + weightOffset ];\n\t\t\t\t\tconst skinWeight = weights[ weightId ];\n\n\t\t\t\t\tvertexSkinData.push( { index: skinIndex, weight: skinWeight } );\n\n\t\t\t\t\tstride += 2;\n\n\t\t\t\t}\n\n\t\t\t\t// we sort the joints in descending order based on the weights.\n\t\t\t\t// this ensures, we only procced the most important joints of the vertex\n\n\t\t\t\tvertexSkinData.sort( descending );\n\n\t\t\t\t// now we provide for each vertex a set of four index and weight values.\n\t\t\t\t// the order of the skin data matches the order of vertices\n\n\t\t\t\tfor ( j = 0; j < BONE_LIMIT; j ++ ) {\n\n\t\t\t\t\tconst d = vertexSkinData[ j ];\n\n\t\t\t\t\tif ( d !== undefined ) {\n\n\t\t\t\t\t\tbuild.indices.array.push( d.index );\n\t\t\t\t\t\tbuild.weights.array.push( d.weight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbuild.indices.array.push( 0 );\n\t\t\t\t\t\tbuild.weights.array.push( 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup bind matrix\n\n\t\t\tif ( data.bindShapeMatrix ) {\n\n\t\t\t\tbuild.bindMatrix = new Matrix4().fromArray( data.bindShapeMatrix ).transpose();\n\n\t\t\t} else {\n\n\t\t\t\tbuild.bindMatrix = new Matrix4().identity();\n\n\t\t\t}\n\n\t\t\t// process bones and inverse bind matrix data\n\n\t\t\tfor ( i = 0, l = jointSource.array.length; i < l; i ++ ) {\n\n\t\t\t\tconst name = jointSource.array[ i ];\n\t\t\t\tconst boneInverse = new Matrix4().fromArray( inverseSource.array, i * inverseSource.stride ).transpose();\n\n\t\t\t\tbuild.joints.push( { name: name, boneInverse: boneInverse } );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t\t// array sort function\n\n\t\t\tfunction descending( a, b ) {\n\n\t\t\t\treturn b.weight - a.weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getController( id ) {\n\n\t\t\treturn getBuild( library.controllers[ id ], buildController );\n\n\t\t}\n\n\t\t// image\n\n\t\tfunction parseImage( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinit_from: getElementsByTagName( xml, 'init_from' )[ 0 ].textContent\n\t\t\t};\n\n\t\t\tlibrary.images[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildImage( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data.init_from;\n\n\t\t}\n\n\t\tfunction getImage( id ) {\n\n\t\t\tconst data = library.images[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildImage );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find image with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// effect\n\n\t\tfunction parseEffect( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'profile_COMMON':\n\t\t\t\t\t\tdata.profile = parseEffectProfileCOMMON( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.effects[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseEffectProfileCOMMON( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsurfaces: {},\n\t\t\t\tsamplers: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'newparam':\n\t\t\t\t\t\tparseEffectNewparam( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tdata.technique = parseEffectTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tdata.extra = parseEffectExtra( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectNewparam( xml, data ) {\n\n\t\t\tconst sid = xml.getAttribute( 'sid' );\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'surface':\n\t\t\t\t\t\tdata.surfaces[ sid ] = parseEffectSurface( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler2D':\n\t\t\t\t\t\tdata.samplers[ sid ] = parseEffectSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectSurface( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'init_from':\n\t\t\t\t\t\tdata.init_from = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectSampler( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.source = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'constant':\n\t\t\t\t\tcase 'lambert':\n\t\t\t\t\tcase 'blinn':\n\t\t\t\t\tcase 'phong':\n\t\t\t\t\t\tdata.type = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseEffectParameters( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tdata.extra = parseEffectExtra( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameters( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\tcase 'ambient':\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectParameter( child );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\t\tdata[ child.nodeName ] = {\n\t\t\t\t\t\t\topaque: child.hasAttribute( 'opaque' ) ? child.getAttribute( 'opaque' ) : 'A_ONE',\n\t\t\t\t\t\t\tdata: parseEffectParameter( child )\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameter( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'float':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tdata[ child.nodeName ] = { id: child.getAttribute( 'texture' ), extra: parseEffectParameterTexture( child ) };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTexture( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\ttechnique: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tparseEffectParameterTextureExtra( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtra( xml, data ) {\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tparseEffectParameterTextureExtraTechnique( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtraTechnique( xml, data ) {\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'repeatU':\n\t\t\t\t\tcase 'repeatV':\n\t\t\t\t\tcase 'offsetU':\n\t\t\t\t\tcase 'offsetV':\n\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'wrapU':\n\t\t\t\t\tcase 'wrapV':\n\n\t\t\t\t\t\t// some files have values for wrapU/wrapV which become NaN via parseInt\n\n\t\t\t\t\t\tif ( child.textContent.toUpperCase() === 'TRUE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 1;\n\n\t\t\t\t\t\t} else if ( child.textContent.toUpperCase() === 'FALSE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseInt( child.textContent );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectExtraTechniqueBump( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectExtra( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tdata.technique = parseEffectExtraTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectExtraTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'double_sided':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseInt( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectExtraTechniqueBump( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectExtraTechniqueBump( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tdata[ child.nodeName ] = { id: child.getAttribute( 'texture' ), texcoord: child.getAttribute( 'texcoord' ), extra: parseEffectParameterTexture( child ) };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildEffect( data ) {\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getEffect( id ) {\n\n\t\t\treturn getBuild( library.effects[ id ], buildEffect );\n\n\t\t}\n\n\t\t// material\n\n\t\tfunction parseMaterial( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_effect':\n\t\t\t\t\t\tdata.url = parseId( child.getAttribute( 'url' ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.materials[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction getTextureLoader( image ) {\n\n\t\t\tlet loader;\n\n\t\t\tlet extension = image.slice( ( image.lastIndexOf( '.' ) - 1 >>> 0 ) + 2 ); // http://www.jstips.co/en/javascript/get-file-extension/\n\t\t\textension = extension.toLowerCase();\n\n\t\t\tswitch ( extension ) {\n\n\t\t\t\tcase 'tga':\n\t\t\t\t\tloader = tgaLoader;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tloader = textureLoader;\n\n\t\t\t}\n\n\t\t\treturn loader;\n\n\t\t}\n\n\t\tfunction buildMaterial( data ) {\n\n\t\t\tconst effect = getEffect( data.url );\n\t\t\tconst technique = effect.profile.technique;\n\n\t\t\tlet material;\n\n\t\t\tswitch ( technique.type ) {\n\n\t\t\t\tcase 'phong':\n\t\t\t\tcase 'blinn':\n\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'lambert':\n\t\t\t\t\tmaterial = new MeshLambertMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tmaterial = new MeshBasicMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tmaterial.name = data.name || '';\n\n\t\t\tfunction getTexture( textureObject, colorSpace = null ) {\n\n\t\t\t\tconst sampler = effect.profile.samplers[ textureObject.id ];\n\t\t\t\tlet image = null;\n\n\t\t\t\t// get image\n\n\t\t\t\tif ( sampler !== undefined ) {\n\n\t\t\t\t\tconst surface = effect.profile.surfaces[ sampler.source ];\n\t\t\t\t\timage = getImage( surface.init_from );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530).' );\n\t\t\t\t\timage = getImage( textureObject.id );\n\n\t\t\t\t}\n\n\t\t\t\t// create texture if image is avaiable\n\n\t\t\t\tif ( image !== null ) {\n\n\t\t\t\t\tconst loader = getTextureLoader( image );\n\n\t\t\t\t\tif ( loader !== undefined ) {\n\n\t\t\t\t\t\tconst texture = loader.load( image );\n\n\t\t\t\t\t\tconst extra = textureObject.extra;\n\n\t\t\t\t\t\tif ( extra !== undefined && extra.technique !== undefined && isEmpty( extra.technique ) === false ) {\n\n\t\t\t\t\t\t\tconst technique = extra.technique;\n\n\t\t\t\t\t\t\ttexture.wrapS = technique.wrapU ? RepeatWrapping : ClampToEdgeWrapping;\n\t\t\t\t\t\t\ttexture.wrapT = technique.wrapV ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\t\t\t\t\t\ttexture.offset.set( technique.offsetU || 0, technique.offsetV || 0 );\n\t\t\t\t\t\t\ttexture.repeat.set( technique.repeatU || 1, technique.repeatV || 1 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\t\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( colorSpace !== null ) {\n\n\t\t\t\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Loader for texture %s not found.', image );\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t create texture with ID:', textureObject.id );\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst parameters = technique.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tconst parameter = parameters[ key ];\n\n\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\t\tif ( parameter.color ) material.color.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.map = getTexture( parameter.texture, SRGBColorSpace );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\t\tif ( parameter.color && material.specular ) material.specular.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.specularMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tif ( parameter.texture ) material.normalMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'ambient':\n\t\t\t\t\t\tif ( parameter.texture ) material.lightMap = getTexture( parameter.texture, SRGBColorSpace );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\t\tif ( parameter.float && material.shininess ) material.shininess = parameter.float;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\t\tif ( parameter.color && material.emissive ) material.emissive.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.emissiveMap = getTexture( parameter.texture, SRGBColorSpace );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmaterial.color.convertSRGBToLinear();\n\t\t\tif ( material.specular ) material.specular.convertSRGBToLinear();\n\t\t\tif ( material.emissive ) material.emissive.convertSRGBToLinear();\n\n\t\t\t//\n\n\t\t\tlet transparent = parameters[ 'transparent' ];\n\t\t\tlet transparency = parameters[ 'transparency' ];\n\n\t\t\t// does not exist but \n\n\t\t\tif ( transparency === undefined && transparent ) {\n\n\t\t\t\ttransparency = {\n\t\t\t\t\tfloat: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\t// does not exist but \n\n\t\t\tif ( transparent === undefined && transparency ) {\n\n\t\t\t\ttransparent = {\n\t\t\t\t\topaque: 'A_ONE',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcolor: [ 1, 1, 1, 1 ]\n\t\t\t\t\t} };\n\n\t\t\t}\n\n\t\t\tif ( transparent && transparency ) {\n\n\t\t\t\t// handle case if a texture exists but no color\n\n\t\t\t\tif ( transparent.data.texture ) {\n\n\t\t\t\t\t// we do not set an alpha map (see #13792)\n\n\t\t\t\t\tmaterial.transparent = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst color = transparent.data.color;\n\n\t\t\t\t\tswitch ( transparent.opaque ) {\n\n\t\t\t\t\t\tcase 'A_ONE':\n\t\t\t\t\t\t\tmaterial.opacity = color[ 3 ] * transparency.float;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'RGB_ZERO':\n\t\t\t\t\t\t\tmaterial.opacity = 1 - ( color[ 0 ] * transparency.float );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'A_ZERO':\n\t\t\t\t\t\t\tmaterial.opacity = 1 - ( color[ 3 ] * transparency.float );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'RGB_ONE':\n\t\t\t\t\t\t\tmaterial.opacity = color[ 0 ] * transparency.float;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Invalid opaque type \"%s\" of transparent tag.', transparent.opaque );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material.opacity < 1 ) material.transparent = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\n\t\t\tif ( technique.extra !== undefined && technique.extra.technique !== undefined ) {\n\n\t\t\t\tconst techniques = technique.extra.technique;\n\n\t\t\t\tfor ( const k in techniques ) {\n\n\t\t\t\t\tconst v = techniques[ k ];\n\n\t\t\t\t\tswitch ( k ) {\n\n\t\t\t\t\t\tcase 'double_sided':\n\t\t\t\t\t\t\tmaterial.side = ( v === 1 ? DoubleSide : FrontSide );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\t\tmaterial.normalMap = getTexture( v.texture );\n\t\t\t\t\t\t\tmaterial.normalScale = new Vector2( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction getMaterial( id ) {\n\n\t\t\treturn getBuild( library.materials[ id ], buildMaterial );\n\n\t\t}\n\n\t\t// camera\n\n\t\tfunction parseCamera( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'optics':\n\t\t\t\t\t\tdata.optics = parseCameraOptics( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.cameras[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseCameraOptics( xml ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\treturn parseCameraTechnique( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {};\n\n\t\t}\n\n\t\tfunction parseCameraTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'perspective':\n\t\t\t\t\tcase 'orthographic':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseCameraParameters( child );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseCameraParameters( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'xfov':\n\t\t\t\t\tcase 'yfov':\n\t\t\t\t\tcase 'xmag':\n\t\t\t\t\tcase 'ymag':\n\t\t\t\t\tcase 'znear':\n\t\t\t\t\tcase 'zfar':\n\t\t\t\t\tcase 'aspect_ratio':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildCamera( data ) {\n\n\t\t\tlet camera;\n\n\t\t\tswitch ( data.optics.technique ) {\n\n\t\t\t\tcase 'perspective':\n\t\t\t\t\tcamera = new PerspectiveCamera(\n\t\t\t\t\t\tdata.optics.parameters.yfov,\n\t\t\t\t\t\tdata.optics.parameters.aspect_ratio,\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'orthographic':\n\t\t\t\t\tlet ymag = data.optics.parameters.ymag;\n\t\t\t\t\tlet xmag = data.optics.parameters.xmag;\n\t\t\t\t\tconst aspectRatio = data.optics.parameters.aspect_ratio;\n\n\t\t\t\t\txmag = ( xmag === undefined ) ? ( ymag * aspectRatio ) : xmag;\n\t\t\t\t\tymag = ( ymag === undefined ) ? ( xmag / aspectRatio ) : ymag;\n\n\t\t\t\t\txmag *= 0.5;\n\t\t\t\t\tymag *= 0.5;\n\n\t\t\t\t\tcamera = new OrthographicCamera(\n\t\t\t\t\t\t- xmag, xmag, ymag, - ymag, // left, right, top, bottom\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcamera.name = data.name || '';\n\n\t\t\treturn camera;\n\n\t\t}\n\n\t\tfunction getCamera( id ) {\n\n\t\t\tconst data = library.cameras[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildCamera );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find camera with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// light\n\n\t\tfunction parseLight( xml ) {\n\n\t\t\tlet data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tdata = parseLightTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.lights[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseLightTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'directional':\n\t\t\t\t\tcase 'point':\n\t\t\t\t\tcase 'spot':\n\t\t\t\t\tcase 'ambient':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseLightParameters( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseLightParameters( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.color = new Color().fromArray( array ).convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'falloff_angle':\n\t\t\t\t\t\tdata.falloffAngle = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'quadratic_attenuation':\n\t\t\t\t\t\tconst f = parseFloat( child.textContent );\n\t\t\t\t\t\tdata.distance = f ? Math.sqrt( 1 / f ) : 0;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildLight( data ) {\n\n\t\t\tlet light;\n\n\t\t\tswitch ( data.technique ) {\n\n\t\t\t\tcase 'directional':\n\t\t\t\t\tlight = new DirectionalLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'point':\n\t\t\t\t\tlight = new PointLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'spot':\n\t\t\t\t\tlight = new SpotLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ambient':\n\t\t\t\t\tlight = new AmbientLight();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( data.parameters.color ) light.color.copy( data.parameters.color );\n\t\t\tif ( data.parameters.distance ) light.distance = data.parameters.distance;\n\n\t\t\treturn light;\n\n\t\t}\n\n\t\tfunction getLight( id ) {\n\n\t\t\tconst data = library.lights[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildLight );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find light with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// geometry\n\n\t\tfunction parseGeometry( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tsources: {},\n\t\t\t\tvertices: {},\n\t\t\t\tprimitives: []\n\t\t\t};\n\n\t\t\tconst mesh = getElementsByTagName( xml, 'mesh' )[ 0 ];\n\n\t\t\t// the following tags inside geometry are not supported yet (see https://github.com/mrdoob/three.js/pull/12606): convex_mesh, spline, brep\n\t\t\tif ( mesh === undefined ) return;\n\n\t\t\tfor ( let i = 0; i < mesh.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = mesh.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tconst id = child.getAttribute( 'id' );\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertices':\n\t\t\t\t\t\t// data.sources[ id ] = data.sources[ parseId( getElementsByTagName( child, 'input' )[ 0 ].getAttribute( 'source' ) ) ];\n\t\t\t\t\t\tdata.vertices = parseGeometryVertices( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'polygons':\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unsupported primitive type: ', child.nodeName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\t\tdata.primitives.push( parseGeometryPrimitive( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.geometries[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSource( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tarray: [],\n\t\t\t\tstride: 3\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'float_array':\n\t\t\t\t\t\tdata.array = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Name_array':\n\t\t\t\t\t\tdata.array = parseStrings( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tconst accessor = getElementsByTagName( child, 'accessor' )[ 0 ];\n\n\t\t\t\t\t\tif ( accessor !== undefined ) {\n\n\t\t\t\t\t\t\tdata.stride = parseInt( accessor.getAttribute( 'stride' ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryVertices( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tdata[ child.getAttribute( 'semantic' ) ] = parseId( child.getAttribute( 'source' ) );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryPrimitive( xml ) {\n\n\t\t\tconst primitive = {\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tmaterial: xml.getAttribute( 'material' ),\n\t\t\t\tcount: parseInt( xml.getAttribute( 'count' ) ),\n\t\t\t\tinputs: {},\n\t\t\t\tstride: 0,\n\t\t\t\thasUV: false\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tconst offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tconst set = parseInt( child.getAttribute( 'set' ) );\n\t\t\t\t\t\tconst inputname = ( set > 0 ? semantic + set : semantic );\n\t\t\t\t\t\tprimitive.inputs[ inputname ] = { id: id, offset: offset };\n\t\t\t\t\t\tprimitive.stride = Math.max( primitive.stride, offset + 1 );\n\t\t\t\t\t\tif ( semantic === 'TEXCOORD' ) primitive.hasUV = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tprimitive.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'p':\n\t\t\t\t\t\tprimitive.p = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn primitive;\n\n\t\t}\n\n\t\tfunction groupPrimitives( primitives ) {\n\n\t\t\tconst build = {};\n\n\t\t\tfor ( let i = 0; i < primitives.length; i ++ ) {\n\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\tif ( build[ primitive.type ] === undefined ) build[ primitive.type ] = [];\n\n\t\t\t\tbuild[ primitive.type ].push( primitive );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction checkUVCoordinates( primitives ) {\n\n\t\t\tlet count = 0;\n\n\t\t\tfor ( let i = 0, l = primitives.length; i < l; i ++ ) {\n\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\tif ( primitive.hasUV === true ) {\n\n\t\t\t\t\tcount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( count > 0 && count < primitives.length ) {\n\n\t\t\t\tprimitives.uvsNeedsFix = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildGeometry( data ) {\n\n\t\t\tconst build = {};\n\n\t\t\tconst sources = data.sources;\n\t\t\tconst vertices = data.vertices;\n\t\t\tconst primitives = data.primitives;\n\n\t\t\tif ( primitives.length === 0 ) return {};\n\n\t\t\t// our goal is to create one buffer geometry for a single type of primitives\n\t\t\t// first, we group all primitives by their type\n\n\t\t\tconst groupedPrimitives = groupPrimitives( primitives );\n\n\t\t\tfor ( const type in groupedPrimitives ) {\n\n\t\t\t\tconst primitiveType = groupedPrimitives[ type ];\n\n\t\t\t\t// second, ensure consistent uv coordinates for each type of primitives (polylist,triangles or lines)\n\n\t\t\t\tcheckUVCoordinates( primitiveType );\n\n\t\t\t\t// third, create a buffer geometry for each type of primitives\n\n\t\t\t\tbuild[ type ] = buildGeometryType( primitiveType, sources, vertices );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryType( primitives, sources, vertices ) {\n\n\t\t\tconst build = {};\n\n\t\t\tconst position = { array: [], stride: 0 };\n\t\t\tconst normal = { array: [], stride: 0 };\n\t\t\tconst uv = { array: [], stride: 0 };\n\t\t\tconst uv1 = { array: [], stride: 0 };\n\t\t\tconst color = { array: [], stride: 0 };\n\n\t\t\tconst skinIndex = { array: [], stride: 4 };\n\t\t\tconst skinWeight = { array: [], stride: 4 };\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst materialKeys = [];\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let p = 0; p < primitives.length; p ++ ) {\n\n\t\t\t\tconst primitive = primitives[ p ];\n\t\t\t\tconst inputs = primitive.inputs;\n\n\t\t\t\t// groups\n\n\t\t\t\tlet count = 0;\n\n\t\t\t\tswitch ( primitive.type ) {\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\t\tcount = primitive.count * 2;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\t\tcount = primitive.count * 3;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'polylist':\n\n\t\t\t\t\t\tfor ( let g = 0; g < primitive.count; g ++ ) {\n\n\t\t\t\t\t\t\tconst vc = primitive.vcount[ g ];\n\n\t\t\t\t\t\t\tswitch ( vc ) {\n\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\tcount += 3; // single triangle\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t\tcount += 6; // quad, subdivided into two triangles\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tcount += ( vc - 2 ) * 3; // polylist with more than four vertices\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unknow primitive type:', primitive.type );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addGroup( start, count, p );\n\t\t\t\tstart += count;\n\n\t\t\t\t// material\n\n\t\t\t\tif ( primitive.material ) {\n\n\t\t\t\t\tmaterialKeys.push( primitive.material );\n\n\t\t\t\t}\n\n\t\t\t\t// geometry data\n\n\t\t\t\tfor ( const name in inputs ) {\n\n\t\t\t\t\tconst input = inputs[ name ];\n\n\t\t\t\t\tswitch ( name )\t{\n\n\t\t\t\t\t\tcase 'VERTEX':\n\t\t\t\t\t\t\tfor ( const key in vertices ) {\n\n\t\t\t\t\t\t\t\tconst id = vertices[ key ];\n\n\t\t\t\t\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\t\t\t\t\tcase 'POSITION':\n\t\t\t\t\t\t\t\t\t\tconst prevLength = position.array.length;\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, position.array );\n\t\t\t\t\t\t\t\t\t\tposition.stride = sources[ id ].stride;\n\n\t\t\t\t\t\t\t\t\t\tif ( sources.skinWeights && sources.skinIndices ) {\n\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinIndices, input.offset, skinIndex.array );\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinWeights, input.offset, skinWeight.array );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// see #3803\n\n\t\t\t\t\t\t\t\t\t\tif ( primitive.hasUV === false && primitives.uvsNeedsFix === true ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst count = ( position.array.length - prevLength ) / position.stride;\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// fill missing uv coordinates\n\n\t\t\t\t\t\t\t\t\t\t\t\tuv.array.push( 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, normal.array );\n\t\t\t\t\t\t\t\t\t\tnormal.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, color.array );\n\t\t\t\t\t\t\t\t\t\tcolor.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, uv.array );\n\t\t\t\t\t\t\t\t\t\tuv.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'TEXCOORD1':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, uv1.array );\n\t\t\t\t\t\t\t\t\t\tuv.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Semantic \"%s\" not handled in geometry build process.', key );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, normal.array );\n\t\t\t\t\t\t\tnormal.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, color.array, true );\n\t\t\t\t\t\t\tcolor.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, uv.array );\n\t\t\t\t\t\t\tuv.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD1':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, uv1.array );\n\t\t\t\t\t\t\tuv1.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tif ( position.array.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position.array, position.stride ) );\n\t\t\tif ( normal.array.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal.array, normal.stride ) );\n\t\t\tif ( color.array.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color.array, color.stride ) );\n\t\t\tif ( uv.array.length > 0 ) geometry.setAttribute( 'uv', new Float32BufferAttribute( uv.array, uv.stride ) );\n\t\t\tif ( uv1.array.length > 0 ) geometry.setAttribute( 'uv1', new Float32BufferAttribute( uv1.array, uv1.stride ) );\n\n\t\t\tif ( skinIndex.array.length > 0 ) geometry.setAttribute( 'skinIndex', new Float32BufferAttribute( skinIndex.array, skinIndex.stride ) );\n\t\t\tif ( skinWeight.array.length > 0 ) geometry.setAttribute( 'skinWeight', new Float32BufferAttribute( skinWeight.array, skinWeight.stride ) );\n\n\t\t\tbuild.data = geometry;\n\t\t\tbuild.type = primitives[ 0 ].type;\n\t\t\tbuild.materialKeys = materialKeys;\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryData( primitive, source, offset, array, isColor = false ) {\n\n\t\t\tconst indices = primitive.p;\n\t\t\tconst stride = primitive.stride;\n\t\t\tconst vcount = primitive.vcount;\n\n\t\t\tfunction pushVector( i ) {\n\n\t\t\t\tlet index = indices[ i + offset ] * sourceStride;\n\t\t\t\tconst length = index + sourceStride;\n\n\t\t\t\tfor ( ; index < length; index ++ ) {\n\n\t\t\t\t\tarray.push( sourceArray[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( isColor ) {\n\n\t\t\t\t\t// convert the vertex colors from srgb to linear if present\n\t\t\t\t\tconst startIndex = array.length - sourceStride - 1;\n\t\t\t\t\ttempColor.setRGB(\n\t\t\t\t\t\tarray[ startIndex + 0 ],\n\t\t\t\t\t\tarray[ startIndex + 1 ],\n\t\t\t\t\t\tarray[ startIndex + 2 ]\n\t\t\t\t\t).convertSRGBToLinear();\n\n\t\t\t\t\tarray[ startIndex + 0 ] = tempColor.r;\n\t\t\t\t\tarray[ startIndex + 1 ] = tempColor.g;\n\t\t\t\t\tarray[ startIndex + 2 ] = tempColor.b;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst sourceArray = source.array;\n\t\t\tconst sourceStride = source.stride;\n\n\t\t\tif ( primitive.vcount !== undefined ) {\n\n\t\t\t\tlet index = 0;\n\n\t\t\t\tfor ( let i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst count = vcount[ i ];\n\n\t\t\t\t\tif ( count === 4 ) {\n\n\t\t\t\t\t\tconst a = index + stride * 0;\n\t\t\t\t\t\tconst b = index + stride * 1;\n\t\t\t\t\t\tconst c = index + stride * 2;\n\t\t\t\t\t\tconst d = index + stride * 3;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( d );\n\t\t\t\t\t\tpushVector( b ); pushVector( c ); pushVector( d );\n\n\t\t\t\t\t} else if ( count === 3 ) {\n\n\t\t\t\t\t\tconst a = index + stride * 0;\n\t\t\t\t\t\tconst b = index + stride * 1;\n\t\t\t\t\t\tconst c = index + stride * 2;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( c );\n\n\t\t\t\t\t} else if ( count > 4 ) {\n\n\t\t\t\t\t\tfor ( let k = 1, kl = ( count - 2 ); k <= kl; k ++ ) {\n\n\t\t\t\t\t\t\tconst a = index + stride * 0;\n\t\t\t\t\t\t\tconst b = index + stride * k;\n\t\t\t\t\t\t\tconst c = index + stride * ( k + 1 );\n\n\t\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( c );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tindex += stride * count;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += stride ) {\n\n\t\t\t\t\tpushVector( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getGeometry( id ) {\n\n\t\t\treturn getBuild( library.geometries[ id ], buildGeometry );\n\n\t\t}\n\n\t\t// kinematics\n\n\t\tfunction parseKinematicsModel( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tjoints: {},\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tparseKinematicsTechniqueCommon( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsModels[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildKinematicsModel( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsModel( id ) {\n\n\t\t\treturn getBuild( library.kinematicsModels[ id ], buildKinematicsModel );\n\n\t\t}\n\n\t\tfunction parseKinematicsTechniqueCommon( xml, data ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'joint':\n\t\t\t\t\t\tdata.joints[ child.getAttribute( 'sid' ) ] = parseKinematicsJoint( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseKinematicsJoint( xml ) {\n\n\t\t\tlet data;\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\tdata = parseKinematicsJointParameter( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsJointParameter( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\taxis: new Vector3(),\n\t\t\t\tlimits: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 0\n\t\t\t\t},\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tstatic: false,\n\t\t\t\tzeroPosition: 0,\n\t\t\t\tmiddlePosition: 0\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tconst array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.axis.fromArray( array );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'limits':\n\t\t\t\t\t\tconst max = child.getElementsByTagName( 'max' )[ 0 ];\n\t\t\t\t\t\tconst min = child.getElementsByTagName( 'min' )[ 0 ];\n\n\t\t\t\t\t\tdata.limits.max = parseFloat( max.textContent );\n\t\t\t\t\t\tdata.limits.min = parseFloat( min.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// if min is equal to or greater than max, consider the joint static\n\n\t\t\tif ( data.limits.min >= data.limits.max ) {\n\n\t\t\t\tdata.static = true;\n\n\t\t\t}\n\n\t\t\t// calculate middle position\n\n\t\t\tdata.middlePosition = ( data.limits.min + data.limits.max ) / 2.0;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsLink( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tattachments: [],\n\t\t\t\ttransforms: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'attachment_full':\n\t\t\t\t\t\tdata.attachments.push( parseKinematicsAttachment( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsAttachment( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tjoint: xml.getAttribute( 'joint' ).split( '/' ).pop(),\n\t\t\t\ttransforms: [],\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsTransform( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\ttype: xml.nodeName\n\t\t\t};\n\n\t\t\tconst array = parseFloats( xml.textContent );\n\n\t\t\tswitch ( data.type ) {\n\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tdata.obj = new Matrix4();\n\t\t\t\t\tdata.obj.fromArray( array ).transpose();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tdata.obj = new Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tdata.obj = new Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tdata.angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// physics\n\n\t\tfunction parsePhysicsModel( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\trigidBodies: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'rigid_body':\n\t\t\t\t\t\tdata.rigidBodies[ child.getAttribute( 'name' ) ] = {};\n\t\t\t\t\t\tparsePhysicsRigidBody( child, data.rigidBodies[ child.getAttribute( 'name' ) ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.physicsModels[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parsePhysicsRigidBody( xml, data ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tparsePhysicsTechniqueCommon( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parsePhysicsTechniqueCommon( xml, data ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'inertia':\n\t\t\t\t\t\tdata.inertia = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mass':\n\t\t\t\t\t\tdata.mass = parseFloats( child.textContent )[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// scene\n\n\t\tfunction parseKinematicsScene( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tbindJointAxis: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_joint_axis':\n\t\t\t\t\t\tdata.bindJointAxis.push( parseKinematicsBindJointAxis( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsScenes[ parseId( xml.getAttribute( 'url' ) ) ] = data;\n\n\t\t}\n\n\t\tfunction parseKinematicsBindJointAxis( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\ttarget: xml.getAttribute( 'target' ).split( '/' ).pop()\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tconst param = child.getElementsByTagName( 'param' )[ 0 ];\n\t\t\t\t\t\tdata.axis = param.textContent;\n\t\t\t\t\t\tconst tmpJointIndex = data.axis.split( 'inst_' ).pop().split( 'axis' )[ 0 ];\n\t\t\t\t\t\tdata.jointIndex = tmpJointIndex.substring( 0, tmpJointIndex.length - 1 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildKinematicsScene( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsScene( id ) {\n\n\t\t\treturn getBuild( library.kinematicsScenes[ id ], buildKinematicsScene );\n\n\t\t}\n\n\t\tfunction setupKinematics() {\n\n\t\t\tconst kinematicsModelId = Object.keys( library.kinematicsModels )[ 0 ];\n\t\t\tconst kinematicsSceneId = Object.keys( library.kinematicsScenes )[ 0 ];\n\t\t\tconst visualSceneId = Object.keys( library.visualScenes )[ 0 ];\n\n\t\t\tif ( kinematicsModelId === undefined || kinematicsSceneId === undefined ) return;\n\n\t\t\tconst kinematicsModel = getKinematicsModel( kinematicsModelId );\n\t\t\tconst kinematicsScene = getKinematicsScene( kinematicsSceneId );\n\t\t\tconst visualScene = getVisualScene( visualSceneId );\n\n\t\t\tconst bindJointAxis = kinematicsScene.bindJointAxis;\n\t\t\tconst jointMap = {};\n\n\t\t\tfor ( let i = 0, l = bindJointAxis.length; i < l; i ++ ) {\n\n\t\t\t\tconst axis = bindJointAxis[ i ];\n\n\t\t\t\t// the result of the following query is an element of type 'translate', 'rotate','scale' or 'matrix'\n\n\t\t\t\tconst targetElement = collada.querySelector( '[sid=\"' + axis.target + '\"]' );\n\n\t\t\t\tif ( targetElement ) {\n\n\t\t\t\t\t// get the parent of the transform element\n\n\t\t\t\t\tconst parentVisualElement = targetElement.parentElement;\n\n\t\t\t\t\t// connect the joint of the kinematics model with the element in the visual scene\n\n\t\t\t\t\tconnect( axis.jointIndex, parentVisualElement );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction connect( jointIndex, visualElement ) {\n\n\t\t\t\tconst visualElementName = visualElement.getAttribute( 'name' );\n\t\t\t\tconst joint = kinematicsModel.joints[ jointIndex ];\n\n\t\t\t\tvisualScene.traverse( function ( object ) {\n\n\t\t\t\t\tif ( object.name === visualElementName ) {\n\n\t\t\t\t\t\tjointMap[ jointIndex ] = {\n\t\t\t\t\t\t\tobject: object,\n\t\t\t\t\t\t\ttransforms: buildTransformList( visualElement ),\n\t\t\t\t\t\t\tjoint: joint,\n\t\t\t\t\t\t\tposition: joint.zeroPosition\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst m0 = new Matrix4();\n\n\t\t\tkinematics = {\n\n\t\t\t\tjoints: kinematicsModel && kinematicsModel.joints,\n\n\t\t\t\tgetJointValue: function ( jointIndex ) {\n\n\t\t\t\t\tconst jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\treturn jointData.position;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' doesn\\'t exist.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetJointValue: function ( jointIndex, value ) {\n\n\t\t\t\t\tconst jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\tconst joint = jointData.joint;\n\n\t\t\t\t\t\tif ( value > joint.limits.max || value < joint.limits.min ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' value ' + value + ' outside of limits (min: ' + joint.limits.min + ', max: ' + joint.limits.max + ').' );\n\n\t\t\t\t\t\t} else if ( joint.static ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' is static.' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconst object = jointData.object;\n\t\t\t\t\t\t\tconst axis = joint.axis;\n\t\t\t\t\t\t\tconst transforms = jointData.transforms;\n\n\t\t\t\t\t\t\tmatrix.identity();\n\n\t\t\t\t\t\t\t// each update, we have to apply all transforms in the correct order\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < transforms.length; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst transform = transforms[ i ];\n\n\t\t\t\t\t\t\t\t// if there is a connection of the transform node with a joint, apply the joint value\n\n\t\t\t\t\t\t\t\tif ( transform.sid && transform.sid.indexOf( jointIndex ) !== - 1 ) {\n\n\t\t\t\t\t\t\t\t\tswitch ( joint.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( axis, MathUtils.degToRad( value ) ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( axis.x * value, axis.y * value, axis.z * value ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unknown joint type: ' + joint.type );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tswitch ( transform.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( transform.obj.x, transform.obj.y, transform.obj.z ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.scale( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( transform.obj, transform.angle ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tobject.matrix.copy( matrix );\n\t\t\t\t\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\t\t\t\t\tjointMap[ jointIndex ].position = value;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.log( 'THREE.ColladaLoader: ' + jointIndex + ' does not exist.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction buildTransformList( node ) {\n\n\t\t\tconst transforms = [];\n\n\t\t\tconst xml = collada.querySelector( '[id=\"' + node.id + '\"]' );\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tlet array, vector;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tconst matrix = new Matrix4().fromArray( array ).transpose();\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: matrix\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tvector = new Vector3().fromArray( array );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tvector = new Vector3().fromArray( array );\n\t\t\t\t\t\tconst angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector,\n\t\t\t\t\t\t\tangle: angle\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn transforms;\n\n\t\t}\n\n\t\t// nodes\n\n\t\tfunction prepareNodes( xml ) {\n\n\t\t\tconst elements = xml.getElementsByTagName( 'node' );\n\n\t\t\t// ensure all node elements have id attributes\n\n\t\t\tfor ( let i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tconst element = elements[ i ];\n\n\t\t\t\tif ( element.hasAttribute( 'id' ) === false ) {\n\n\t\t\t\t\telement.setAttribute( 'id', generateId() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst matrix = new Matrix4();\n\t\tconst vector = new Vector3();\n\n\t\tfunction parseNode( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\ttype: xml.getAttribute( 'type' ),\n\t\t\t\tid: xml.getAttribute( 'id' ),\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tmatrix: new Matrix4(),\n\t\t\t\tnodes: [],\n\t\t\t\tinstanceCameras: [],\n\t\t\t\tinstanceControllers: [],\n\t\t\t\tinstanceLights: [],\n\t\t\t\tinstanceGeometries: [],\n\t\t\t\tinstanceNodes: [],\n\t\t\t\ttransforms: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tlet array;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'node':\n\t\t\t\t\t\tdata.nodes.push( child.getAttribute( 'id' ) );\n\t\t\t\t\t\tparseNode( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_camera':\n\t\t\t\t\t\tdata.instanceCameras.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_controller':\n\t\t\t\t\t\tdata.instanceControllers.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_light':\n\t\t\t\t\t\tdata.instanceLights.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_geometry':\n\t\t\t\t\t\tdata.instanceGeometries.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_node':\n\t\t\t\t\t\tdata.instanceNodes.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.fromArray( array ).transpose() );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tvector.fromArray( array );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeTranslation( vector.x, vector.y, vector.z ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tconst angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeRotationAxis( vector.fromArray( array ), angle ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.scale( vector.fromArray( array ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasNode( data.id ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.', data.id );\n\n\t\t\t} else {\n\n\t\t\t\tlibrary.nodes[ data.id ] = data;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseNodeInstance( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tid: parseId( xml.getAttribute( 'url' ) ),\n\t\t\t\tmaterials: {},\n\t\t\t\tskeletons: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_material':\n\t\t\t\t\t\tconst instances = child.getElementsByTagName( 'instance_material' );\n\n\t\t\t\t\t\tfor ( let j = 0; j < instances.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst instance = instances[ j ];\n\t\t\t\t\t\t\tconst symbol = instance.getAttribute( 'symbol' );\n\t\t\t\t\t\t\tconst target = instance.getAttribute( 'target' );\n\n\t\t\t\t\t\t\tdata.materials[ symbol ] = parseId( target );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skeleton':\n\t\t\t\t\t\tdata.skeletons.push( parseId( child.textContent ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildSkeleton( skeletons, joints ) {\n\n\t\t\tconst boneData = [];\n\t\t\tconst sortedBoneData = [];\n\n\t\t\tlet i, j, data;\n\n\t\t\t// a skeleton can have multiple root bones. collada expresses this\n\t\t\t// situtation with multiple \"skeleton\" tags per controller instance\n\n\t\t\tfor ( i = 0; i < skeletons.length; i ++ ) {\n\n\t\t\t\tconst skeleton = skeletons[ i ];\n\n\t\t\t\tlet root;\n\n\t\t\t\tif ( hasNode( skeleton ) ) {\n\n\t\t\t\t\troot = getNode( skeleton );\n\t\t\t\t\tbuildBoneHierarchy( root, joints, boneData );\n\n\t\t\t\t} else if ( hasVisualScene( skeleton ) ) {\n\n\t\t\t\t\t// handle case where the skeleton refers to the visual scene (#13335)\n\n\t\t\t\t\tconst visualScene = library.visualScenes[ skeleton ];\n\t\t\t\t\tconst children = visualScene.children;\n\n\t\t\t\t\tfor ( let j = 0; j < children.length; j ++ ) {\n\n\t\t\t\t\t\tconst child = children[ j ];\n\n\t\t\t\t\t\tif ( child.type === 'JOINT' ) {\n\n\t\t\t\t\t\t\tconst root = getNode( child.id );\n\t\t\t\t\t\t\tbuildBoneHierarchy( root, joints, boneData );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.ColladaLoader: Unable to find root bone of skeleton with ID:', skeleton );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// sort bone data (the order is defined in the corresponding controller)\n\n\t\t\tfor ( i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < boneData.length; j ++ ) {\n\n\t\t\t\t\tdata = boneData[ j ];\n\n\t\t\t\t\tif ( data.bone.name === joints[ i ].name ) {\n\n\t\t\t\t\t\tsortedBoneData[ i ] = data;\n\t\t\t\t\t\tdata.processed = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add unprocessed bone data at the end of the list\n\n\t\t\tfor ( i = 0; i < boneData.length; i ++ ) {\n\n\t\t\t\tdata = boneData[ i ];\n\n\t\t\t\tif ( data.processed === false ) {\n\n\t\t\t\t\tsortedBoneData.push( data );\n\t\t\t\t\tdata.processed = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup arrays for skeleton creation\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( i = 0; i < sortedBoneData.length; i ++ ) {\n\n\t\t\t\tdata = sortedBoneData[ i ];\n\n\t\t\t\tbones.push( data.bone );\n\t\t\t\tboneInverses.push( data.boneInverse );\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t}\n\n\t\tfunction buildBoneHierarchy( root, joints, boneData ) {\n\n\t\t\t// setup bone data from visual scene\n\n\t\t\troot.traverse( function ( object ) {\n\n\t\t\t\tif ( object.isBone === true ) {\n\n\t\t\t\t\tlet boneInverse;\n\n\t\t\t\t\t// retrieve the boneInverse from the controller data\n\n\t\t\t\t\tfor ( let i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\t\t\tconst joint = joints[ i ];\n\n\t\t\t\t\t\tif ( joint.name === object.name ) {\n\n\t\t\t\t\t\t\tboneInverse = joint.boneInverse;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( boneInverse === undefined ) {\n\n\t\t\t\t\t\t// Unfortunately, there can be joints in the visual scene that are not part of the\n\t\t\t\t\t\t// corresponding controller. In this case, we have to create a dummy boneInverse matrix\n\t\t\t\t\t\t// for the respective bone. This bone won't affect any vertices, because there are no skin indices\n\t\t\t\t\t\t// and weights defined for it. But we still have to add the bone to the sorted bone list in order to\n\t\t\t\t\t\t// ensure a correct animation of the model.\n\n\t\t\t\t\t\tboneInverse = new Matrix4();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.push( { bone: object, boneInverse: boneInverse, processed: false } );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction buildNode( data ) {\n\n\t\t\tconst objects = [];\n\n\t\t\tconst matrix = data.matrix;\n\t\t\tconst nodes = data.nodes;\n\t\t\tconst type = data.type;\n\t\t\tconst instanceCameras = data.instanceCameras;\n\t\t\tconst instanceControllers = data.instanceControllers;\n\t\t\tconst instanceLights = data.instanceLights;\n\t\t\tconst instanceGeometries = data.instanceGeometries;\n\t\t\tconst instanceNodes = data.instanceNodes;\n\n\t\t\t// nodes\n\n\t\t\tfor ( let i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( nodes[ i ] ) );\n\n\t\t\t}\n\n\t\t\t// instance cameras\n\n\t\t\tfor ( let i = 0, l = instanceCameras.length; i < l; i ++ ) {\n\n\t\t\t\tconst instanceCamera = getCamera( instanceCameras[ i ] );\n\n\t\t\t\tif ( instanceCamera !== null ) {\n\n\t\t\t\t\tobjects.push( instanceCamera.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance controllers\n\n\t\t\tfor ( let i = 0, l = instanceControllers.length; i < l; i ++ ) {\n\n\t\t\t\tconst instance = instanceControllers[ i ];\n\t\t\t\tconst controller = getController( instance.id );\n\t\t\t\tconst geometries = getGeometry( controller.id );\n\t\t\t\tconst newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tconst skeletons = instance.skeletons;\n\t\t\t\tconst joints = controller.skin.joints;\n\n\t\t\t\tconst skeleton = buildSkeleton( skeletons, joints );\n\n\t\t\t\tfor ( let j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst object = newObjects[ j ];\n\n\t\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t\tobject.bind( skeleton, controller.skin.bindMatrix );\n\t\t\t\t\t\tobject.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects.push( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance lights\n\n\t\t\tfor ( let i = 0, l = instanceLights.length; i < l; i ++ ) {\n\n\t\t\t\tconst instanceLight = getLight( instanceLights[ i ] );\n\n\t\t\t\tif ( instanceLight !== null ) {\n\n\t\t\t\t\tobjects.push( instanceLight.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance geometries\n\n\t\t\tfor ( let i = 0, l = instanceGeometries.length; i < l; i ++ ) {\n\n\t\t\t\tconst instance = instanceGeometries[ i ];\n\n\t\t\t\t// a single geometry instance in collada can lead to multiple object3Ds.\n\t\t\t\t// this is the case when primitives are combined like triangles and lines\n\n\t\t\t\tconst geometries = getGeometry( instance.id );\n\t\t\t\tconst newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tfor ( let j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tobjects.push( newObjects[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance nodes\n\n\t\t\tfor ( let i = 0, l = instanceNodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( instanceNodes[ i ] ).clone() );\n\n\t\t\t}\n\n\t\t\tlet object;\n\n\t\t\tif ( nodes.length === 0 && objects.length === 1 ) {\n\n\t\t\t\tobject = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tobject = ( type === 'JOINT' ) ? new Bone() : new Group();\n\n\t\t\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t\t\tobject.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tobject.name = ( type === 'JOINT' ) ? data.sid : data.name;\n\t\t\tobject.matrix.copy( matrix );\n\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tconst fallbackMaterial = new MeshBasicMaterial( {\n\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\tcolor: 0xff00ff\n\t\t} );\n\n\t\tfunction resolveMaterialBinding( keys, instanceMaterials ) {\n\n\t\t\tconst materials = [];\n\n\t\t\tfor ( let i = 0, l = keys.length; i < l; i ++ ) {\n\n\t\t\t\tconst id = instanceMaterials[ keys[ i ] ];\n\n\t\t\t\tif ( id === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Material with key %s not found. Apply fallback material.', keys[ i ] );\n\t\t\t\t\tmaterials.push( fallbackMaterial );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials.push( getMaterial( id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materials;\n\n\t\t}\n\n\t\tfunction buildObjects( geometries, instanceMaterials ) {\n\n\t\t\tconst objects = [];\n\n\t\t\tfor ( const type in geometries ) {\n\n\t\t\t\tconst geometry = geometries[ type ];\n\n\t\t\t\tconst materials = resolveMaterialBinding( geometry.materialKeys, instanceMaterials );\n\n\t\t\t\t// handle case if no materials are defined\n\n\t\t\t\tif ( materials.length === 0 ) {\n\n\t\t\t\t\tif ( type === 'lines' || type === 'linestrips' ) {\n\n\t\t\t\t\t\tmaterials.push( new LineBasicMaterial() );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials.push( new MeshPhongMaterial() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Collada allows to use phong and lambert materials with lines. Replacing these cases with LineBasicMaterial.\n\n\t\t\t\tif ( type === 'lines' || type === 'linestrips' ) {\n\n\t\t\t\t\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\t\t\tif ( material.isMeshPhongMaterial === true || material.isMeshLambertMaterial === true ) {\n\n\t\t\t\t\t\t\tconst lineMaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t\t// copy compatible properties\n\n\t\t\t\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\t\t\t\tlineMaterial.opacity = material.opacity;\n\t\t\t\t\t\t\tlineMaterial.transparent = material.transparent;\n\n\t\t\t\t\t\t\t// replace material\n\n\t\t\t\t\t\t\tmaterials[ i ] = lineMaterial;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// regard skinning\n\n\t\t\t\tconst skinning = ( geometry.data.attributes.skinIndex !== undefined );\n\n\t\t\t\t// choose between a single or multi materials (material array)\n\n\t\t\t\tconst material = ( materials.length === 1 ) ? materials[ 0 ] : materials;\n\n\t\t\t\t// now create a specific 3D object\n\n\t\t\t\tlet object;\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\t\tobject = new LineSegments( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\t\tobject = new Line( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\t\tif ( skinning ) {\n\n\t\t\t\t\t\t\tobject = new SkinnedMesh( geometry.data, material );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tobject = new Mesh( geometry.data, material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tobjects.push( object );\n\n\t\t\t}\n\n\t\t\treturn objects;\n\n\t\t}\n\n\t\tfunction hasNode( id ) {\n\n\t\t\treturn library.nodes[ id ] !== undefined;\n\n\t\t}\n\n\t\tfunction getNode( id ) {\n\n\t\t\treturn getBuild( library.nodes[ id ], buildNode );\n\n\t\t}\n\n\t\t// visual scenes\n\n\t\tfunction parseVisualScene( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tchildren: []\n\t\t\t};\n\n\t\t\tprepareNodes( xml );\n\n\t\t\tconst elements = getElementsByTagName( xml, 'node' );\n\n\t\t\tfor ( let i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tdata.children.push( parseNode( elements[ i ] ) );\n\n\t\t\t}\n\n\t\t\tlibrary.visualScenes[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildVisualScene( data ) {\n\n\t\t\tconst group = new Group();\n\t\t\tgroup.name = data.name;\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tgroup.add( getNode( child.id ) );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction hasVisualScene( id ) {\n\n\t\t\treturn library.visualScenes[ id ] !== undefined;\n\n\t\t}\n\n\t\tfunction getVisualScene( id ) {\n\n\t\t\treturn getBuild( library.visualScenes[ id ], buildVisualScene );\n\n\t\t}\n\n\t\t// scenes\n\n\t\tfunction parseScene( xml ) {\n\n\t\t\tconst instance = getElementsByTagName( xml, 'instance_visual_scene' )[ 0 ];\n\t\t\treturn getVisualScene( parseId( instance.getAttribute( 'url' ) ) );\n\n\t\t}\n\n\t\tfunction setupAnimations() {\n\n\t\t\tconst clips = library.clips;\n\n\t\t\tif ( isEmpty( clips ) === true ) {\n\n\t\t\t\tif ( isEmpty( library.animations ) === false ) {\n\n\t\t\t\t\t// if there are animations but no clips, we create a default clip for playback\n\n\t\t\t\t\tconst tracks = [];\n\n\t\t\t\t\tfor ( const id in library.animations ) {\n\n\t\t\t\t\t\tconst animationTracks = getAnimation( id );\n\n\t\t\t\t\t\tfor ( let i = 0, l = animationTracks.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\ttracks.push( animationTracks[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tanimations.push( new AnimationClip( 'default', - 1, tracks ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( const id in clips ) {\n\n\t\t\t\t\tanimations.push( getAnimationClip( id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// convert the parser error element into text with each child elements text\n\t\t// separated by new lines.\n\n\t\tfunction parserErrorToText( parserError ) {\n\n\t\t\tlet result = '';\n\t\t\tconst stack = [ parserError ];\n\n\t\t\twhile ( stack.length ) {\n\n\t\t\t\tconst node = stack.shift();\n\n\t\t\t\tif ( node.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t\t\tresult += node.textContent;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresult += '\\n';\n\t\t\t\t\tstack.push.apply( stack, node.childNodes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result.trim();\n\n\t\t}\n\n\t\tif ( text.length === 0 ) {\n\n\t\t\treturn { scene: new Scene() };\n\n\t\t}\n\n\t\tconst xml = new DOMParser().parseFromString( text, 'application/xml' );\n\n\t\tconst collada = getElementsByTagName( xml, 'COLLADA' )[ 0 ];\n\n\t\tconst parserError = xml.getElementsByTagName( 'parsererror' )[ 0 ];\n\t\tif ( parserError !== undefined ) {\n\n\t\t\t// Chrome will return parser error with a div in it\n\n\t\t\tconst errorElement = getElementsByTagName( parserError, 'div' )[ 0 ];\n\t\t\tlet errorText;\n\n\t\t\tif ( errorElement ) {\n\n\t\t\t\terrorText = errorElement.textContent;\n\n\t\t\t} else {\n\n\t\t\t\terrorText = parserErrorToText( parserError );\n\n\t\t\t}\n\n\t\t\tconsole.error( 'THREE.ColladaLoader: Failed to parse collada file.\\n', errorText );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// metadata\n\n\t\tconst version = collada.getAttribute( 'version' );\n\t\tconsole.debug( 'THREE.ColladaLoader: File version', version );\n\n\t\tconst asset = parseAsset( getElementsByTagName( collada, 'asset' )[ 0 ] );\n\t\tconst textureLoader = new TextureLoader( this.manager );\n\t\ttextureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\tlet tgaLoader;\n\n\t\tif ( TGALoader ) {\n\n\t\t\ttgaLoader = new TGALoader( this.manager );\n\t\t\ttgaLoader.setPath( this.resourcePath || path );\n\n\t\t}\n\n\t\t//\n\n\t\tconst tempColor = new Color();\n\t\tconst animations = [];\n\t\tlet kinematics = {};\n\t\tlet count = 0;\n\n\t\t//\n\n\t\tconst library = {\n\t\t\tanimations: {},\n\t\t\tclips: {},\n\t\t\tcontrollers: {},\n\t\t\timages: {},\n\t\t\teffects: {},\n\t\t\tmaterials: {},\n\t\t\tcameras: {},\n\t\t\tlights: {},\n\t\t\tgeometries: {},\n\t\t\tnodes: {},\n\t\t\tvisualScenes: {},\n\t\t\tkinematicsModels: {},\n\t\t\tphysicsModels: {},\n\t\t\tkinematicsScenes: {}\n\t\t};\n\n\t\tparseLibrary( collada, 'library_animations', 'animation', parseAnimation );\n\t\tparseLibrary( collada, 'library_animation_clips', 'animation_clip', parseAnimationClip );\n\t\tparseLibrary( collada, 'library_controllers', 'controller', parseController );\n\t\tparseLibrary( collada, 'library_images', 'image', parseImage );\n\t\tparseLibrary( collada, 'library_effects', 'effect', parseEffect );\n\t\tparseLibrary( collada, 'library_materials', 'material', parseMaterial );\n\t\tparseLibrary( collada, 'library_cameras', 'camera', parseCamera );\n\t\tparseLibrary( collada, 'library_lights', 'light', parseLight );\n\t\tparseLibrary( collada, 'library_geometries', 'geometry', parseGeometry );\n\t\tparseLibrary( collada, 'library_nodes', 'node', parseNode );\n\t\tparseLibrary( collada, 'library_visual_scenes', 'visual_scene', parseVisualScene );\n\t\tparseLibrary( collada, 'library_kinematics_models', 'kinematics_model', parseKinematicsModel );\n\t\tparseLibrary( collada, 'library_physics_models', 'physics_model', parsePhysicsModel );\n\t\tparseLibrary( collada, 'scene', 'instance_kinematics_scene', parseKinematicsScene );\n\n\t\tbuildLibrary( library.animations, buildAnimation );\n\t\tbuildLibrary( library.clips, buildAnimationClip );\n\t\tbuildLibrary( library.controllers, buildController );\n\t\tbuildLibrary( library.images, buildImage );\n\t\tbuildLibrary( library.effects, buildEffect );\n\t\tbuildLibrary( library.materials, buildMaterial );\n\t\tbuildLibrary( library.cameras, buildCamera );\n\t\tbuildLibrary( library.lights, buildLight );\n\t\tbuildLibrary( library.geometries, buildGeometry );\n\t\tbuildLibrary( library.visualScenes, buildVisualScene );\n\n\t\tsetupAnimations();\n\t\tsetupKinematics();\n\n\t\tconst scene = parseScene( getElementsByTagName( collada, 'scene' )[ 0 ] );\n\t\tscene.animations = animations;\n\n\t\tif ( asset.upAxis === 'Z_UP' ) {\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: You are loading an asset with a Z-UP coordinate system. The loader just rotates the asset to transform it into Y-UP. The vertex data are not converted, see #24289.' );\n\t\t\tscene.rotation.set( - Math.PI / 2, 0, 0 );\n\n\t\t}\n\n\t\tscene.scale.multiplyScalar( asset.unit );\n\n\t\treturn {\n\t\t\tget animations() {\n\n\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Please access animations over scene.animations now.' );\n\t\t\t\treturn animations;\n\n\t\t\t},\n\t\t\tkinematics: kinematics,\n\t\t\tlibrary: library,\n\t\t\tscene: scene\n\t\t};\n\n\t}\n\n}\n\nexport { ColladaLoader };\n", "import {\n\tCompressedTextureLoader,\n\tRGBAFormat,\n\tRGBA_S3TC_DXT3_Format,\n\tRGBA_S3TC_DXT5_Format,\n\tRGB_ETC1_Format,\n\tRGB_S3TC_DXT1_Format,\n\tRGB_BPTC_SIGNED_Format,\n\tRGB_BPTC_UNSIGNED_Format\n} from 'three';\n\nclass DDSLoader extends CompressedTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tparse( buffer, loadMipmaps ) {\n\n\t\tconst dds = { mipmaps: [], width: 0, height: 0, format: null, mipmapCount: 1 };\n\n\t\t// Adapted from @toji's DDS utils\n\t\t// https://github.com/toji/webgl-texture-utils/blob/master/texture-util/dds.js\n\n\t\t// All values and structures referenced from:\n\t\t// http://msdn.microsoft.com/en-us/library/bb943991.aspx/\n\n\t\tconst DDS_MAGIC = 0x20534444;\n\n\t\t// const DDSD_CAPS = 0x1;\n\t\t// const DDSD_HEIGHT = 0x2;\n\t\t// const DDSD_WIDTH = 0x4;\n\t\t// const DDSD_PITCH = 0x8;\n\t\t// const DDSD_PIXELFORMAT = 0x1000;\n\t\tconst DDSD_MIPMAPCOUNT = 0x20000;\n\t\t// const DDSD_LINEARSIZE = 0x80000;\n\t\t// const DDSD_DEPTH = 0x800000;\n\n\t\t// const DDSCAPS_COMPLEX = 0x8;\n\t\t// const DDSCAPS_MIPMAP = 0x400000;\n\t\t// const DDSCAPS_TEXTURE = 0x1000;\n\n\t\tconst DDSCAPS2_CUBEMAP = 0x200;\n\t\tconst DDSCAPS2_CUBEMAP_POSITIVEX = 0x400;\n\t\tconst DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800;\n\t\tconst DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000;\n\t\tconst DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000;\n\t\tconst DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000;\n\t\tconst DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000;\n\t\t// const DDSCAPS2_VOLUME = 0x200000;\n\n\t\t// const DDPF_ALPHAPIXELS = 0x1;\n\t\t// const DDPF_ALPHA = 0x2;\n\t\t// const DDPF_FOURCC = 0x4;\n\t\t// const DDPF_RGB = 0x40;\n\t\t// const DDPF_YUV = 0x200;\n\t\t// const DDPF_LUMINANCE = 0x20000;\n\n\t\tconst DXGI_FORMAT_BC6H_UF16 = 95;\n\t\tconst DXGI_FORMAT_BC6H_SF16 = 96;\n\n\t\tfunction fourCCToInt32( value ) {\n\n\t\t\treturn value.charCodeAt( 0 ) +\n\t\t\t\t( value.charCodeAt( 1 ) << 8 ) +\n\t\t\t\t( value.charCodeAt( 2 ) << 16 ) +\n\t\t\t\t( value.charCodeAt( 3 ) << 24 );\n\n\t\t}\n\n\t\tfunction int32ToFourCC( value ) {\n\n\t\t\treturn String.fromCharCode(\n\t\t\t\tvalue & 0xff,\n\t\t\t\t( value >> 8 ) & 0xff,\n\t\t\t\t( value >> 16 ) & 0xff,\n\t\t\t\t( value >> 24 ) & 0xff\n\t\t\t);\n\n\t\t}\n\n\t\tfunction loadARGBMip( buffer, dataOffset, width, height ) {\n\n\t\t\tconst dataLength = width * height * 4;\n\t\t\tconst srcBuffer = new Uint8Array( buffer, dataOffset, dataLength );\n\t\t\tconst byteArray = new Uint8Array( dataLength );\n\t\t\tlet dst = 0;\n\t\t\tlet src = 0;\n\t\t\tfor ( let y = 0; y < height; y ++ ) {\n\n\t\t\t\tfor ( let x = 0; x < width; x ++ ) {\n\n\t\t\t\t\tconst b = srcBuffer[ src ]; src ++;\n\t\t\t\t\tconst g = srcBuffer[ src ]; src ++;\n\t\t\t\t\tconst r = srcBuffer[ src ]; src ++;\n\t\t\t\t\tconst a = srcBuffer[ src ]; src ++;\n\t\t\t\t\tbyteArray[ dst ] = r; dst ++;\t//r\n\t\t\t\t\tbyteArray[ dst ] = g; dst ++;\t//g\n\t\t\t\t\tbyteArray[ dst ] = b; dst ++;\t//b\n\t\t\t\t\tbyteArray[ dst ] = a; dst ++;\t//a\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn byteArray;\n\n\t\t}\n\n\t\tconst FOURCC_DXT1 = fourCCToInt32( 'DXT1' );\n\t\tconst FOURCC_DXT3 = fourCCToInt32( 'DXT3' );\n\t\tconst FOURCC_DXT5 = fourCCToInt32( 'DXT5' );\n\t\tconst FOURCC_ETC1 = fourCCToInt32( 'ETC1' );\n\t\tconst FOURCC_DX10 = fourCCToInt32( 'DX10' );\n\n\t\tconst headerLengthInt = 31; // The header length in 32 bit ints\n\t\tconst extendedHeaderLengthInt = 5; // The extended header length in 32 bit ints\n\n\t\t// Offsets into the header array\n\n\t\tconst off_magic = 0;\n\n\t\tconst off_size = 1;\n\t\tconst off_flags = 2;\n\t\tconst off_height = 3;\n\t\tconst off_width = 4;\n\n\t\tconst off_mipmapCount = 7;\n\n\t\t// const off_pfFlags = 20;\n\t\tconst off_pfFourCC = 21;\n\t\tconst off_RGBBitCount = 22;\n\t\tconst off_RBitMask = 23;\n\t\tconst off_GBitMask = 24;\n\t\tconst off_BBitMask = 25;\n\t\tconst off_ABitMask = 26;\n\n\t\t// const off_caps = 27;\n\t\tconst off_caps2 = 28;\n\t\t// const off_caps3 = 29;\n\t\t// const off_caps4 = 30;\n\n\t\t// If fourCC = DX10, the extended header starts after 32\n\t\tconst off_dxgiFormat = 0;\n\n\t\t// Parse header\n\n\t\tconst header = new Int32Array( buffer, 0, headerLengthInt );\n\n\t\tif ( header[ off_magic ] !== DDS_MAGIC ) {\n\n\t\t\tconsole.error( 'THREE.DDSLoader.parse: Invalid magic number in DDS header.' );\n\t\t\treturn dds;\n\n\t\t}\n\n\t\tlet blockBytes;\n\n\t\tconst fourCC = header[ off_pfFourCC ];\n\n\t\tlet isRGBAUncompressed = false;\n\n\t\tlet dataOffset = header[ off_size ] + 4;\n\n\t\tswitch ( fourCC ) {\n\n\t\t\tcase FOURCC_DXT1:\n\n\t\t\t\tblockBytes = 8;\n\t\t\t\tdds.format = RGB_S3TC_DXT1_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_DXT3:\n\n\t\t\t\tblockBytes = 16;\n\t\t\t\tdds.format = RGBA_S3TC_DXT3_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_DXT5:\n\n\t\t\t\tblockBytes = 16;\n\t\t\t\tdds.format = RGBA_S3TC_DXT5_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_ETC1:\n\n\t\t\t\tblockBytes = 8;\n\t\t\t\tdds.format = RGB_ETC1_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_DX10:\n\n\t\t\t\tdataOffset += extendedHeaderLengthInt * 4;\n\t\t\t\tconst extendedHeader = new Int32Array( buffer, ( headerLengthInt + 1 ) * 4, extendedHeaderLengthInt );\n\t\t\t\tconst dxgiFormat = extendedHeader[ off_dxgiFormat ];\n\t\t\t\tswitch ( dxgiFormat ) {\n\n\t\t\t\t\tcase DXGI_FORMAT_BC6H_SF16: {\n\n\t\t\t\t\t\tblockBytes = 16;\n\t\t\t\t\t\tdds.format = RGB_BPTC_SIGNED_Format;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcase DXGI_FORMAT_BC6H_UF16: {\n\n\t\t\t\t\t\tblockBytes = 16;\n\t\t\t\t\t\tdds.format = RGB_BPTC_UNSIGNED_Format;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault: {\n\n\t\t\t\t\t\tconsole.error( 'THREE.DDSLoader.parse: Unsupported DXGI_FORMAT code ', dxgiFormat );\n\t\t\t\t\t\treturn dds;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tif ( header[ off_RGBBitCount ] === 32\n\t\t\t\t\t&& header[ off_RBitMask ] & 0xff0000\n\t\t\t\t\t&& header[ off_GBitMask ] & 0xff00\n\t\t\t\t\t&& header[ off_BBitMask ] & 0xff\n\t\t\t\t\t&& header[ off_ABitMask ] & 0xff000000 ) {\n\n\t\t\t\t\tisRGBAUncompressed = true;\n\t\t\t\t\tblockBytes = 64;\n\t\t\t\t\tdds.format = RGBAFormat;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.DDSLoader.parse: Unsupported FourCC code ', int32ToFourCC( fourCC ) );\n\t\t\t\t\treturn dds;\n\n\t\t\t\t}\n\n\t\t}\n\n\t\tdds.mipmapCount = 1;\n\n\t\tif ( header[ off_flags ] & DDSD_MIPMAPCOUNT && loadMipmaps !== false ) {\n\n\t\t\tdds.mipmapCount = Math.max( 1, header[ off_mipmapCount ] );\n\n\t\t}\n\n\t\tconst caps2 = header[ off_caps2 ];\n\t\tdds.isCubemap = caps2 & DDSCAPS2_CUBEMAP ? true : false;\n\t\tif ( dds.isCubemap && (\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEX ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEY ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ )\n\t\t) ) {\n\n\t\t\tconsole.error( 'THREE.DDSLoader.parse: Incomplete cubemap faces' );\n\t\t\treturn dds;\n\n\t\t}\n\n\t\tdds.width = header[ off_width ];\n\t\tdds.height = header[ off_height ];\n\n\t\t// Extract mipmaps buffers\n\n\t\tconst faces = dds.isCubemap ? 6 : 1;\n\n\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\tlet width = dds.width;\n\t\t\tlet height = dds.height;\n\n\t\t\tfor ( let i = 0; i < dds.mipmapCount; i ++ ) {\n\n\t\t\t\tlet byteArray, dataLength;\n\n\t\t\t\tif ( isRGBAUncompressed ) {\n\n\t\t\t\t\tbyteArray = loadARGBMip( buffer, dataOffset, width, height );\n\t\t\t\t\tdataLength = byteArray.length;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdataLength = Math.max( 4, width ) / 4 * Math.max( 4, height ) / 4 * blockBytes;\n\t\t\t\t\tbyteArray = new Uint8Array( buffer, dataOffset, dataLength );\n\n\t\t\t\t}\n\n\t\t\t\tconst mipmap = { 'data': byteArray, 'width': width, 'height': height };\n\t\t\t\tdds.mipmaps.push( mipmap );\n\n\t\t\t\tdataOffset += dataLength;\n\n\t\t\t\twidth = Math.max( width >> 1, 1 );\n\t\t\t\theight = Math.max( height >> 1, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn dds;\n\n\t}\n\n}\n\nexport { DDSLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tLoader,\n\tLinearSRGBColorSpace,\n\tSRGBColorSpace\n} from 'three';\n\nconst _taskCache = new WeakMap();\n\nclass DRACOLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.decoderPath = '';\n\t\tthis.decoderConfig = {};\n\t\tthis.decoderBinary = null;\n\t\tthis.decoderPending = null;\n\n\t\tthis.workerLimit = 4;\n\t\tthis.workerPool = [];\n\t\tthis.workerNextTaskID = 1;\n\t\tthis.workerSourceURL = '';\n\n\t\tthis.defaultAttributeIDs = {\n\t\t\tposition: 'POSITION',\n\t\t\tnormal: 'NORMAL',\n\t\t\tcolor: 'COLOR',\n\t\t\tuv: 'TEX_COORD'\n\t\t};\n\t\tthis.defaultAttributeTypes = {\n\t\t\tposition: 'Float32Array',\n\t\t\tnormal: 'Float32Array',\n\t\t\tcolor: 'Float32Array',\n\t\t\tuv: 'Float32Array'\n\t\t};\n\n\t}\n\n\tsetDecoderPath( path ) {\n\n\t\tthis.decoderPath = path;\n\n\t\treturn this;\n\n\t}\n\n\tsetDecoderConfig( config ) {\n\n\t\tthis.decoderConfig = config;\n\n\t\treturn this;\n\n\t}\n\n\tsetWorkerLimit( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\tthis.parse( buffer, onLoad, onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\n\tparse( buffer, onLoad, onError = ()=>{} ) {\n\n\t\tthis.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace, onError ).catch( onError );\n\n\t}\n\n\tdecodeDracoFile( buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace, onError = () => {} ) {\n\n\t\tconst taskConfig = {\n\t\t\tattributeIDs: attributeIDs || this.defaultAttributeIDs,\n\t\t\tattributeTypes: attributeTypes || this.defaultAttributeTypes,\n\t\t\tuseUniqueIDs: !! attributeIDs,\n\t\t\tvertexColorSpace: vertexColorSpace,\n\t\t};\n\n\t\treturn this.decodeGeometry( buffer, taskConfig ).then( callback ).catch( onError );\n\n\t}\n\n\tdecodeGeometry( buffer, taskConfig ) {\n\n\t\tconst taskKey = JSON.stringify( taskConfig );\n\n\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t// again from this thread.\n\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\tif ( cachedTask.key === taskKey ) {\n\n\t\t\t\treturn cachedTask.promise;\n\n\t\t\t} else if ( buffer.byteLength === 0 ) {\n\n\t\t\t\t// Technically, it would be possible to wait for the previous task to complete,\n\t\t\t\t// transfer the buffer back, and decode again with the second configuration. That\n\t\t\t\t// is complex, and I don't know of any reason to decode a Draco buffer twice in\n\t\t\t\t// different ways, so this is left unimplemented.\n\t\t\t\tthrow new Error(\n\n\t\t\t\t\t'THREE.DRACOLoader: Unable to re-decode a buffer with different ' +\n\t\t\t\t\t'settings. Buffer has already been transferred.'\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet worker;\n\t\tconst taskID = this.workerNextTaskID ++;\n\t\tconst taskCost = buffer.byteLength;\n\n\t\t// Obtain a worker and assign a task, and construct a geometry instance\n\t\t// when the task completes.\n\t\tconst geometryPending = this._getWorker( taskID, taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, taskConfig, buffer }, [ buffer ] );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.geometry ) );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tgeometryPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffer, {\n\n\t\t\tkey: taskKey,\n\t\t\tpromise: geometryPending\n\n\t\t} );\n\n\t\treturn geometryPending;\n\n\t}\n\n\t_createGeometry( geometryData ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( geometryData.index ) {\n\n\t\t\tgeometry.setIndex( new BufferAttribute( geometryData.index.array, 1 ) );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < geometryData.attributes.length; i ++ ) {\n\n\t\t\tconst result = geometryData.attributes[ i ];\n\t\t\tconst name = result.name;\n\t\t\tconst array = result.array;\n\t\t\tconst itemSize = result.itemSize;\n\n\t\t\tconst attribute = new BufferAttribute( array, itemSize );\n\n\t\t\tif ( name === 'color' ) {\n\n\t\t\t\tthis._assignVertexColorSpace( attribute, result.vertexColorSpace );\n\n\t\t\t\tattribute.normalized = ( array instanceof Float32Array ) === false;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( name, attribute );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n\t_assignVertexColorSpace( attribute, inputColorSpace ) {\n\n\t\t// While .drc files do not specify colorspace, the only 'official' tooling\n\t\t// is PLY and OBJ converters, which use sRGB. We'll assume sRGB when a .drc\n\t\t// file is passed into .load() or .parse(). GLTFLoader uses internal APIs\n\t\t// to decode geometry, and vertex colors are already Linear-sRGB in there.\n\n\t\tif ( inputColorSpace !== SRGBColorSpace ) return;\n\n\t\tconst _color = new Color();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\t_color.fromBufferAttribute( attribute, i ).convertSRGBToLinear();\n\t\t\tattribute.setXYZ( i, _color.r, _color.g, _color.b );\n\n\t\t}\n\n\t}\n\n\t_loadLibrary( url, responseType ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.decoderPath );\n\t\tloader.setResponseType( responseType );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tloader.load( url, resolve, undefined, reject );\n\n\t\t} );\n\n\t}\n\n\tpreload() {\n\n\t\tthis._initDecoder();\n\n\t\treturn this;\n\n\t}\n\n\t_initDecoder() {\n\n\t\tif ( this.decoderPending ) return this.decoderPending;\n\n\t\tconst useJS = typeof WebAssembly !== 'object' || this.decoderConfig.type === 'js';\n\t\tconst librariesPending = [];\n\n\t\tif ( useJS ) {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.js', 'text' ) );\n\n\t\t} else {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_wasm_wrapper.js', 'text' ) );\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.wasm', 'arraybuffer' ) );\n\n\t\t}\n\n\t\tthis.decoderPending = Promise.all( librariesPending )\n\t\t\t.then( ( libraries ) => {\n\n\t\t\t\tconst jsContent = libraries[ 0 ];\n\n\t\t\t\tif ( ! useJS ) {\n\n\t\t\t\t\tthis.decoderConfig.wasmBinary = libraries[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tconst fn = DRACOWorker.toString();\n\n\t\t\t\tconst body = [\n\t\t\t\t\t'/* draco decoder */',\n\t\t\t\t\tjsContent,\n\t\t\t\t\t'',\n\t\t\t\t\t'/* worker */',\n\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t} );\n\n\t\treturn this.decoderPending;\n\n\t}\n\n\t_getWorker( taskID, taskCost ) {\n\n\t\treturn this._initDecoder().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( { type: 'init', decoderConfig: this.decoderConfig } );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tconst message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.DRACOLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst worker = this.workerPool[ this.workerPool.length - 1 ];\n\t\t\tworker._taskCosts[ taskID ] = taskCost;\n\t\t\tworker._taskLoad += taskCost;\n\t\t\treturn worker;\n\n\t\t} );\n\n\t}\n\n\t_releaseTask( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t}\n\n\tdebug() {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\tif ( this.workerSourceURL !== '' ) {\n\n\t\t\tURL.revokeObjectURL( this.workerSourceURL );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* WEB WORKER */\n\nfunction DRACOWorker() {\n\n\tlet decoderConfig;\n\tlet decoderPending;\n\n\tonmessage = function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tdecoderConfig = message.decoderConfig;\n\t\t\t\tdecoderPending = new Promise( function ( resolve/*, reject*/ ) {\n\n\t\t\t\t\tdecoderConfig.onModuleLoaded = function ( draco ) {\n\n\t\t\t\t\t\t// Module is Promise-like. Wrap before resolving to avoid loop.\n\t\t\t\t\t\tresolve( { draco: draco } );\n\n\t\t\t\t\t};\n\n\t\t\t\t\tDracoDecoderModule( decoderConfig ); // eslint-disable-line no-undef\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\t\t\t\tconst buffer = message.buffer;\n\t\t\t\tconst taskConfig = message.taskConfig;\n\t\t\t\tdecoderPending.then( ( module ) => {\n\n\t\t\t\t\tconst draco = module.draco;\n\t\t\t\t\tconst decoder = new draco.Decoder();\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst geometry = decodeGeometry( draco, decoder, new Int8Array( buffer ), taskConfig );\n\n\t\t\t\t\t\tconst buffers = geometry.attributes.map( ( attr ) => attr.array.buffer );\n\n\t\t\t\t\t\tif ( geometry.index ) buffers.push( geometry.index.array.buffer );\n\n\t\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, geometry }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t} finally {\n\n\t\t\t\t\t\tdraco.destroy( decoder );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeGeometry( draco, decoder, array, taskConfig ) {\n\n\t\tconst attributeIDs = taskConfig.attributeIDs;\n\t\tconst attributeTypes = taskConfig.attributeTypes;\n\n\t\tlet dracoGeometry;\n\t\tlet decodingStatus;\n\n\t\tconst geometryType = decoder.GetEncodedGeometryType( array );\n\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tdracoGeometry = new draco.Mesh();\n\t\t\tdecodingStatus = decoder.DecodeArrayToMesh( array, array.byteLength, dracoGeometry );\n\n\t\t} else if ( geometryType === draco.POINT_CLOUD ) {\n\n\t\t\tdracoGeometry = new draco.PointCloud();\n\t\t\tdecodingStatus = decoder.DecodeArrayToPointCloud( array, array.byteLength, dracoGeometry );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Unexpected geometry type.' );\n\n\t\t}\n\n\t\tif ( ! decodingStatus.ok() || dracoGeometry.ptr === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Decoding failed: ' + decodingStatus.error_msg() );\n\n\t\t}\n\n\t\tconst geometry = { index: null, attributes: [] };\n\n\t\t// Gather all vertex attributes.\n\t\tfor ( const attributeName in attributeIDs ) {\n\n\t\t\tconst attributeType = self[ attributeTypes[ attributeName ] ];\n\n\t\t\tlet attribute;\n\t\t\tlet attributeID;\n\n\t\t\t// A Draco file may be created with default vertex attributes, whose attribute IDs\n\t\t\t// are mapped 1:1 from their semantic name (POSITION, NORMAL, ...). Alternatively,\n\t\t\t// a Draco file may contain a custom set of attributes, identified by known unique\n\t\t\t// IDs. glTF files always do the latter, and `.drc` files typically do the former.\n\t\t\tif ( taskConfig.useUniqueIDs ) {\n\n\t\t\t\tattributeID = attributeIDs[ attributeName ];\n\t\t\t\tattribute = decoder.GetAttributeByUniqueId( dracoGeometry, attributeID );\n\n\t\t\t} else {\n\n\t\t\t\tattributeID = decoder.GetAttributeId( dracoGeometry, draco[ attributeIDs[ attributeName ] ] );\n\n\t\t\t\tif ( attributeID === - 1 ) continue;\n\n\t\t\t\tattribute = decoder.GetAttribute( dracoGeometry, attributeID );\n\n\t\t\t}\n\n\t\t\tconst attributeResult = decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute );\n\n\t\t\tif ( attributeName === 'color' ) {\n\n\t\t\t\tattributeResult.vertexColorSpace = taskConfig.vertexColorSpace;\n\n\t\t\t}\n\n\t\t\tgeometry.attributes.push( attributeResult );\n\n\t\t}\n\n\t\t// Add index.\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tgeometry.index = decodeIndex( draco, decoder, dracoGeometry );\n\n\t\t}\n\n\t\tdraco.destroy( dracoGeometry );\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction decodeIndex( draco, decoder, dracoGeometry ) {\n\n\t\tconst numFaces = dracoGeometry.num_faces();\n\t\tconst numIndices = numFaces * 3;\n\t\tconst byteLength = numIndices * 4;\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetTrianglesUInt32Array( dracoGeometry, byteLength, ptr );\n\t\tconst index = new Uint32Array( draco.HEAPF32.buffer, ptr, numIndices ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn { array: index, itemSize: 1 };\n\n\t}\n\n\tfunction decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) {\n\n\t\tconst numComponents = attribute.num_components();\n\t\tconst numPoints = dracoGeometry.num_points();\n\t\tconst numValues = numPoints * numComponents;\n\t\tconst byteLength = numValues * attributeType.BYTES_PER_ELEMENT;\n\t\tconst dataType = getDracoDataType( draco, attributeType );\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetAttributeDataArrayForAllPoints( dracoGeometry, attribute, dataType, byteLength, ptr );\n\t\tconst array = new attributeType( draco.HEAPF32.buffer, ptr, numValues ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn {\n\t\t\tname: attributeName,\n\t\t\tarray: array,\n\t\t\titemSize: numComponents\n\t\t};\n\n\t}\n\n\tfunction getDracoDataType( draco, attributeType ) {\n\n\t\tswitch ( attributeType ) {\n\n\t\t\tcase Float32Array: return draco.DT_FLOAT32;\n\t\t\tcase Int8Array: return draco.DT_INT8;\n\t\t\tcase Int16Array: return draco.DT_INT16;\n\t\t\tcase Int32Array: return draco.DT_INT32;\n\t\t\tcase Uint8Array: return draco.DT_UINT8;\n\t\t\tcase Uint16Array: return draco.DT_UINT16;\n\t\t\tcase Uint32Array: return draco.DT_UINT32;\n\n\t\t}\n\n\t}\n\n}\n\nexport { DRACOLoader };\n", "import {\n\tAmbientLight,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tEquirectangularReflectionMapping,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLoader,\n\tLoaderUtils,\n\tMathUtils,\n\tMatrix3,\n\tMatrix4,\n\tMesh,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tUint16BufferAttribute,\n\tVector2,\n\tVector3,\n\tVector4,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tShapeUtils\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\nimport { NURBSCurve } from '../curves/NURBSCurve.js';\n\n/**\n * Loader loads FBX file and generates Group representing FBX scene.\n * Requires FBX file to be >= 7.0 and in ASCII or >= 6400 in Binary format\n * Versions lower than this may load but will probably have errors\n *\n * Needs Support:\n * Morph normals / blend shape normals\n *\n * FBX format references:\n * \thttps://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html (C++ SDK reference)\n *\n * Binary format specification:\n *\thttps://code.blender.org/2013/08/fbx-binary-file-format-specification/\n */\n\n\nlet fbxTree;\nlet connections;\nlet sceneGraph;\n\nclass FBXLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( FBXBuffer, path ) {\n\n\t\tif ( isFbxFormatBinary( FBXBuffer ) ) {\n\n\t\t\tfbxTree = new BinaryParser().parse( FBXBuffer );\n\n\t\t} else {\n\n\t\t\tconst FBXText = convertArrayBufferToString( FBXBuffer );\n\n\t\t\tif ( ! isFbxFormatASCII( FBXText ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown format.' );\n\n\t\t\t}\n\n\t\t\tif ( getFbxVersion( FBXText ) < 7000 ) {\n\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + getFbxVersion( FBXText ) );\n\n\t\t\t}\n\n\t\t\tfbxTree = new TextParser().parse( FBXText );\n\n\t\t}\n\n\t\t// console.log( fbxTree );\n\n\t\tconst textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\treturn new FBXTreeParser( textureLoader, this.manager ).parse( fbxTree );\n\n\t}\n\n}\n\n// Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group\nclass FBXTreeParser {\n\n\tconstructor( textureLoader, manager ) {\n\n\t\tthis.textureLoader = textureLoader;\n\t\tthis.manager = manager;\n\n\t}\n\n\tparse() {\n\n\t\tconnections = this.parseConnections();\n\n\t\tconst images = this.parseImages();\n\t\tconst textures = this.parseTextures( images );\n\t\tconst materials = this.parseMaterials( textures );\n\t\tconst deformers = this.parseDeformers();\n\t\tconst geometryMap = new GeometryParser().parse( deformers );\n\n\t\tthis.parseScene( deformers, geometryMap, materials );\n\n\t\treturn sceneGraph;\n\n\t}\n\n\t// Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry )\n\t// and details the connection type\n\tparseConnections() {\n\n\t\tconst connectionMap = new Map();\n\n\t\tif ( 'Connections' in fbxTree ) {\n\n\t\t\tconst rawConnections = fbxTree.Connections.connections;\n\n\t\t\trawConnections.forEach( function ( rawConnection ) {\n\n\t\t\t\tconst fromID = rawConnection[ 0 ];\n\t\t\t\tconst toID = rawConnection[ 1 ];\n\t\t\t\tconst relationship = rawConnection[ 2 ];\n\n\t\t\t\tif ( ! connectionMap.has( fromID ) ) {\n\n\t\t\t\t\tconnectionMap.set( fromID, {\n\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tconst parentRelationship = { ID: toID, relationship: relationship };\n\t\t\t\tconnectionMap.get( fromID ).parents.push( parentRelationship );\n\n\t\t\t\tif ( ! connectionMap.has( toID ) ) {\n\n\t\t\t\t\tconnectionMap.set( toID, {\n\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tconst childRelationship = { ID: fromID, relationship: relationship };\n\t\t\t\tconnectionMap.get( toID ).children.push( childRelationship );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn connectionMap;\n\n\t}\n\n\t// Parse FBXTree.Objects.Video for embedded image data\n\t// These images are connected to textures in FBXTree.Objects.Textures\n\t// via FBXTree.Connections.\n\tparseImages() {\n\n\t\tconst images = {};\n\t\tconst blobs = {};\n\n\t\tif ( 'Video' in fbxTree.Objects ) {\n\n\t\t\tconst videoNodes = fbxTree.Objects.Video;\n\n\t\t\tfor ( const nodeID in videoNodes ) {\n\n\t\t\t\tconst videoNode = videoNodes[ nodeID ];\n\n\t\t\t\tconst id = parseInt( nodeID );\n\n\t\t\t\timages[ id ] = videoNode.RelativeFilename || videoNode.Filename;\n\n\t\t\t\t// raw image data is in videoNode.Content\n\t\t\t\tif ( 'Content' in videoNode ) {\n\n\t\t\t\t\tconst arrayBufferContent = ( videoNode.Content instanceof ArrayBuffer ) && ( videoNode.Content.byteLength > 0 );\n\t\t\t\t\tconst base64Content = ( typeof videoNode.Content === 'string' ) && ( videoNode.Content !== '' );\n\n\t\t\t\t\tif ( arrayBufferContent || base64Content ) {\n\n\t\t\t\t\t\tconst image = this.parseImage( videoNodes[ nodeID ] );\n\n\t\t\t\t\t\tblobs[ videoNode.RelativeFilename || videoNode.Filename ] = image;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const id in images ) {\n\n\t\t\tconst filename = images[ id ];\n\n\t\t\tif ( blobs[ filename ] !== undefined ) images[ id ] = blobs[ filename ];\n\t\t\telse images[ id ] = images[ id ].split( '\\\\' ).pop();\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\t// Parse embedded image data in FBXTree.Video.Content\n\tparseImage( videoNode ) {\n\n\t\tconst content = videoNode.Content;\n\t\tconst fileName = videoNode.RelativeFilename || videoNode.Filename;\n\t\tconst extension = fileName.slice( fileName.lastIndexOf( '.' ) + 1 ).toLowerCase();\n\n\t\tlet type;\n\n\t\tswitch ( extension ) {\n\n\t\t\tcase 'bmp':\n\n\t\t\t\ttype = 'image/bmp';\n\t\t\t\tbreak;\n\n\t\t\tcase 'jpg':\n\t\t\tcase 'jpeg':\n\n\t\t\t\ttype = 'image/jpeg';\n\t\t\t\tbreak;\n\n\t\t\tcase 'png':\n\n\t\t\t\ttype = 'image/png';\n\t\t\t\tbreak;\n\n\t\t\tcase 'tif':\n\n\t\t\t\ttype = 'image/tiff';\n\t\t\t\tbreak;\n\n\t\t\tcase 'tga':\n\n\t\t\t\tif ( this.manager.getHandler( '.tga' ) === null ) {\n\n\t\t\t\t\tconsole.warn( 'FBXLoader: TGA loader not found, skipping ', fileName );\n\n\t\t\t\t}\n\n\t\t\t\ttype = 'image/tga';\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'FBXLoader: Image type \"' + extension + '\" is not supported.' );\n\t\t\t\treturn;\n\n\t\t}\n\n\t\tif ( typeof content === 'string' ) { // ASCII format\n\n\t\t\treturn 'data:' + type + ';base64,' + content;\n\n\t\t} else { // Binary Format\n\n\t\t\tconst array = new Uint8Array( content );\n\t\t\treturn window.URL.createObjectURL( new Blob( [ array ], { type: type } ) );\n\n\t\t}\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Texture\n\t// These contain details such as UV scaling, cropping, rotation etc and are connected\n\t// to images in FBXTree.Objects.Video\n\tparseTextures( images ) {\n\n\t\tconst textureMap = new Map();\n\n\t\tif ( 'Texture' in fbxTree.Objects ) {\n\n\t\t\tconst textureNodes = fbxTree.Objects.Texture;\n\t\t\tfor ( const nodeID in textureNodes ) {\n\n\t\t\t\tconst texture = this.parseTexture( textureNodes[ nodeID ], images );\n\t\t\t\ttextureMap.set( parseInt( nodeID ), texture );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textureMap;\n\n\t}\n\n\t// Parse individual node in FBXTree.Objects.Texture\n\tparseTexture( textureNode, images ) {\n\n\t\tconst texture = this.loadTexture( textureNode, images );\n\n\t\ttexture.ID = textureNode.id;\n\n\t\ttexture.name = textureNode.attrName;\n\n\t\tconst wrapModeU = textureNode.WrapModeU;\n\t\tconst wrapModeV = textureNode.WrapModeV;\n\n\t\tconst valueU = wrapModeU !== undefined ? wrapModeU.value : 0;\n\t\tconst valueV = wrapModeV !== undefined ? wrapModeV.value : 0;\n\n\t\t// http://download.autodesk.com/us/fbx/SDKdocs/FBX_SDK_Help/files/fbxsdkref/class_k_fbx_texture.html#889640e63e2e681259ea81061b85143a\n\t\t// 0: repeat(default), 1: clamp\n\n\t\ttexture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\t\ttexture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\tif ( 'Scaling' in textureNode ) {\n\n\t\t\tconst values = textureNode.Scaling.value;\n\n\t\t\ttexture.repeat.x = values[ 0 ];\n\t\t\ttexture.repeat.y = values[ 1 ];\n\n\t\t}\n\n\t\tif ( 'Translation' in textureNode ) {\n\n\t\t\tconst values = textureNode.Translation.value;\n\n\t\t\ttexture.offset.x = values[ 0 ];\n\t\t\ttexture.offset.y = values[ 1 ];\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t// load a texture specified as a blob or data URI, or via an external URL using TextureLoader\n\tloadTexture( textureNode, images ) {\n\n\t\tconst nonNativeExtensions = new Set( [ 'tga', 'tif', 'tiff', 'exr', 'dds', 'hdr', 'ktx2' ] );\n\n\t\tconst extension = textureNode.FileName.split( '.' ).pop().toLowerCase();\n\n\t\tconst loader = nonNativeExtensions.has( extension ) ? this.manager.getHandler( `.${extension}` ) : this.textureLoader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tconsole.warn(\n\t\t\t\t`FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`,\n\t\t\t\ttextureNode.RelativeFilename\n\t\t\t);\n\t\t\treturn new Texture();\n\n\t\t}\n\n\t\tconst loaderPath = loader.path;\n\n\t\tif ( ! loaderPath ) {\n\n\t\t\tloader.setPath( this.textureLoader.path );\n\n\t\t}\n\n\t\tconst children = connections.get( textureNode.id ).children;\n\n\t\tlet fileName;\n\n\t\tif ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {\n\n\t\t\tfileName = images[ children[ 0 ].ID ];\n\n\t\t\tif ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {\n\n\t\t\t\tloader.setPath( undefined );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst texture = loader.load( fileName );\n\n\t\t// revert to initial path\n\t\tloader.setPath( loaderPath );\n\n\t\treturn texture;\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Material\n\tparseMaterials( textureMap ) {\n\n\t\tconst materialMap = new Map();\n\n\t\tif ( 'Material' in fbxTree.Objects ) {\n\n\t\t\tconst materialNodes = fbxTree.Objects.Material;\n\n\t\t\tfor ( const nodeID in materialNodes ) {\n\n\t\t\t\tconst material = this.parseMaterial( materialNodes[ nodeID ], textureMap );\n\n\t\t\t\tif ( material !== null ) materialMap.set( parseInt( nodeID ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materialMap;\n\n\t}\n\n\t// Parse single node in FBXTree.Objects.Material\n\t// Materials are connected to texture maps in FBXTree.Objects.Textures\n\t// FBX format currently only supports Lambert and Phong shading models\n\tparseMaterial( materialNode, textureMap ) {\n\n\t\tconst ID = materialNode.id;\n\t\tconst name = materialNode.attrName;\n\t\tlet type = materialNode.ShadingModel;\n\n\t\t// Case where FBX wraps shading model in property object.\n\t\tif ( typeof type === 'object' ) {\n\n\t\t\ttype = type.value;\n\n\t\t}\n\n\t\t// Ignore unused materials which don't have any connections.\n\t\tif ( ! connections.has( ID ) ) return null;\n\n\t\tconst parameters = this.parseParameters( materialNode, textureMap, ID );\n\n\t\tlet material;\n\n\t\tswitch ( type.toLowerCase() ) {\n\n\t\t\tcase 'phong':\n\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\tbreak;\n\t\t\tcase 'lambert':\n\t\t\t\tmaterial = new MeshLambertMaterial();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: unknown material type \"%s\". Defaulting to MeshPhongMaterial.', type );\n\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tmaterial.setValues( parameters );\n\t\tmaterial.name = name;\n\n\t\treturn material;\n\n\t}\n\n\t// Parse FBX material and return parameters suitable for a three.js material\n\t// Also parse the texture map and return any textures associated with the material\n\tparseParameters( materialNode, textureMap, ID ) {\n\n\t\tconst parameters = {};\n\n\t\tif ( materialNode.BumpFactor ) {\n\n\t\t\tparameters.bumpScale = materialNode.BumpFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Diffuse ) {\n\n\t\t\tparameters.color = new Color().fromArray( materialNode.Diffuse.value ).convertSRGBToLinear();\n\n\t\t} else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) {\n\n\t\t\t// The blender exporter exports diffuse here instead of in materialNode.Diffuse\n\t\t\tparameters.color = new Color().fromArray( materialNode.DiffuseColor.value ).convertSRGBToLinear();\n\n\t\t}\n\n\t\tif ( materialNode.DisplacementFactor ) {\n\n\t\t\tparameters.displacementScale = materialNode.DisplacementFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Emissive ) {\n\n\t\t\tparameters.emissive = new Color().fromArray( materialNode.Emissive.value ).convertSRGBToLinear();\n\n\t\t} else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) {\n\n\t\t\t// The blender exporter exports emissive color here instead of in materialNode.Emissive\n\t\t\tparameters.emissive = new Color().fromArray( materialNode.EmissiveColor.value ).convertSRGBToLinear();\n\n\t\t}\n\n\t\tif ( materialNode.EmissiveFactor ) {\n\n\t\t\tparameters.emissiveIntensity = parseFloat( materialNode.EmissiveFactor.value );\n\n\t\t}\n\n\t\tif ( materialNode.Opacity ) {\n\n\t\t\tparameters.opacity = parseFloat( materialNode.Opacity.value );\n\n\t\t}\n\n\t\tif ( parameters.opacity < 1.0 ) {\n\n\t\t\tparameters.transparent = true;\n\n\t\t}\n\n\t\tif ( materialNode.ReflectionFactor ) {\n\n\t\t\tparameters.reflectivity = materialNode.ReflectionFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Shininess ) {\n\n\t\t\tparameters.shininess = materialNode.Shininess.value;\n\n\t\t}\n\n\t\tif ( materialNode.Specular ) {\n\n\t\t\tparameters.specular = new Color().fromArray( materialNode.Specular.value ).convertSRGBToLinear();\n\n\t\t} else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) {\n\n\t\t\t// The blender exporter exports specular color here instead of in materialNode.Specular\n\t\t\tparameters.specular = new Color().fromArray( materialNode.SpecularColor.value ).convertSRGBToLinear();\n\n\t\t}\n\n\t\tconst scope = this;\n\t\tconnections.get( ID ).children.forEach( function ( child ) {\n\n\t\t\tconst type = child.relationship;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'Bump':\n\t\t\t\t\tparameters.bumpMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Maya|TEX_ao_map':\n\t\t\t\t\tparameters.aoMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DiffuseColor':\n\t\t\t\tcase 'Maya|TEX_color_map':\n\t\t\t\t\tparameters.map = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.map !== undefined ) {\n\n\t\t\t\t\t\tparameters.map.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DisplacementColor':\n\t\t\t\t\tparameters.displacementMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EmissiveColor':\n\t\t\t\t\tparameters.emissiveMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.emissiveMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.emissiveMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'NormalMap':\n\t\t\t\tcase 'Maya|TEX_normal_map':\n\t\t\t\t\tparameters.normalMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ReflectionColor':\n\t\t\t\t\tparameters.envMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.envMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.envMap.mapping = EquirectangularReflectionMapping;\n\t\t\t\t\t\tparameters.envMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpecularColor':\n\t\t\t\t\tparameters.specularMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.specularMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.specularMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'TransparentColor':\n\t\t\t\tcase 'TransparencyFactor':\n\t\t\t\t\tparameters.alphaMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tparameters.transparent = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'AmbientColor':\n\t\t\t\tcase 'ShininessExponent': // AKA glossiness map\n\t\t\t\tcase 'SpecularFactor': // AKA specularLevel\n\t\t\t\tcase 'VectorDisplacementColor': // NOTE: Seems to be a copy of DisplacementColor\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: %s map is not supported in three.js, skipping texture.', type );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn parameters;\n\n\t}\n\n\t// get a texture from the textureMap for use by a material.\n\tgetTexture( textureMap, id ) {\n\n\t\t// if the texture is a layered texture, just use the first layer and issue a warning\n\t\tif ( 'LayeredTexture' in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture ) {\n\n\t\t\tconsole.warn( 'THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.' );\n\t\t\tid = connections.get( id ).children[ 0 ].ID;\n\n\t\t}\n\n\t\treturn textureMap.get( id );\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Deformer\n\t// Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here\n\t// Generates map of Skeleton-like objects for use later when generating and binding skeletons.\n\tparseDeformers() {\n\n\t\tconst skeletons = {};\n\t\tconst morphTargets = {};\n\n\t\tif ( 'Deformer' in fbxTree.Objects ) {\n\n\t\t\tconst DeformerNodes = fbxTree.Objects.Deformer;\n\n\t\t\tfor ( const nodeID in DeformerNodes ) {\n\n\t\t\t\tconst deformerNode = DeformerNodes[ nodeID ];\n\n\t\t\t\tconst relationships = connections.get( parseInt( nodeID ) );\n\n\t\t\t\tif ( deformerNode.attrType === 'Skin' ) {\n\n\t\t\t\t\tconst skeleton = this.parseSkeleton( relationships, DeformerNodes );\n\t\t\t\t\tskeleton.ID = nodeID;\n\n\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: skeleton attached to more than one geometry is not supported.' );\n\t\t\t\t\tskeleton.geometryID = relationships.parents[ 0 ].ID;\n\n\t\t\t\t\tskeletons[ nodeID ] = skeleton;\n\n\t\t\t\t} else if ( deformerNode.attrType === 'BlendShape' ) {\n\n\t\t\t\t\tconst morphTarget = {\n\t\t\t\t\t\tid: nodeID,\n\t\t\t\t\t};\n\n\t\t\t\t\tmorphTarget.rawTargets = this.parseMorphTargets( relationships, DeformerNodes );\n\t\t\t\t\tmorphTarget.id = nodeID;\n\n\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: morph target attached to more than one geometry is not supported.' );\n\n\t\t\t\t\tmorphTargets[ nodeID ] = morphTarget;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tskeletons: skeletons,\n\t\t\tmorphTargets: morphTargets,\n\n\t\t};\n\n\t}\n\n\t// Parse single nodes in FBXTree.Objects.Deformer\n\t// The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster'\n\t// Each skin node represents a skeleton and each cluster node represents a bone\n\tparseSkeleton( relationships, deformerNodes ) {\n\n\t\tconst rawBones = [];\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst boneNode = deformerNodes[ child.ID ];\n\n\t\t\tif ( boneNode.attrType !== 'Cluster' ) return;\n\n\t\t\tconst rawBone = {\n\n\t\t\t\tID: child.ID,\n\t\t\t\tindices: [],\n\t\t\t\tweights: [],\n\t\t\t\ttransformLink: new Matrix4().fromArray( boneNode.TransformLink.a ),\n\t\t\t\t// transform: new Matrix4().fromArray( boneNode.Transform.a ),\n\t\t\t\t// linkMode: boneNode.Mode,\n\n\t\t\t};\n\n\t\t\tif ( 'Indexes' in boneNode ) {\n\n\t\t\t\trawBone.indices = boneNode.Indexes.a;\n\t\t\t\trawBone.weights = boneNode.Weights.a;\n\n\t\t\t}\n\n\t\t\trawBones.push( rawBone );\n\n\t\t} );\n\n\t\treturn {\n\n\t\t\trawBones: rawBones,\n\t\t\tbones: []\n\n\t\t};\n\n\t}\n\n\t// The top level morph deformer node has type \"BlendShape\" and sub nodes have type \"BlendShapeChannel\"\n\tparseMorphTargets( relationships, deformerNodes ) {\n\n\t\tconst rawMorphTargets = [];\n\n\t\tfor ( let i = 0; i < relationships.children.length; i ++ ) {\n\n\t\t\tconst child = relationships.children[ i ];\n\n\t\t\tconst morphTargetNode = deformerNodes[ child.ID ];\n\n\t\t\tconst rawMorphTarget = {\n\n\t\t\t\tname: morphTargetNode.attrName,\n\t\t\t\tinitialWeight: morphTargetNode.DeformPercent,\n\t\t\t\tid: morphTargetNode.id,\n\t\t\t\tfullWeights: morphTargetNode.FullWeights.a\n\n\t\t\t};\n\n\t\t\tif ( morphTargetNode.attrType !== 'BlendShapeChannel' ) return;\n\n\t\t\trawMorphTarget.geoID = connections.get( parseInt( child.ID ) ).children.filter( function ( child ) {\n\n\t\t\t\treturn child.relationship === undefined;\n\n\t\t\t} )[ 0 ].ID;\n\n\t\t\trawMorphTargets.push( rawMorphTarget );\n\n\t\t}\n\n\t\treturn rawMorphTargets;\n\n\t}\n\n\t// create the main Group() to be returned by the loader\n\tparseScene( deformers, geometryMap, materialMap ) {\n\n\t\tsceneGraph = new Group();\n\n\t\tconst modelMap = this.parseModels( deformers.skeletons, geometryMap, materialMap );\n\n\t\tconst modelNodes = fbxTree.Objects.Model;\n\n\t\tconst scope = this;\n\t\tmodelMap.forEach( function ( model ) {\n\n\t\t\tconst modelNode = modelNodes[ model.ID ];\n\t\t\tscope.setLookAtProperties( model, modelNode );\n\n\t\t\tconst parentConnections = connections.get( model.ID ).parents;\n\n\t\t\tparentConnections.forEach( function ( connection ) {\n\n\t\t\t\tconst parent = modelMap.get( connection.ID );\n\t\t\t\tif ( parent !== undefined ) parent.add( model );\n\n\t\t\t} );\n\n\t\t\tif ( model.parent === null ) {\n\n\t\t\t\tsceneGraph.add( model );\n\n\t\t\t}\n\n\n\t\t} );\n\n\t\tthis.bindSkeleton( deformers.skeletons, geometryMap, modelMap );\n\n\t\tthis.addGlobalSceneSettings();\n\n\t\tsceneGraph.traverse( function ( node ) {\n\n\t\t\tif ( node.userData.transformData ) {\n\n\t\t\t\tif ( node.parent ) {\n\n\t\t\t\t\tnode.userData.transformData.parentMatrix = node.parent.matrix;\n\t\t\t\t\tnode.userData.transformData.parentMatrixWorld = node.parent.matrixWorld;\n\n\t\t\t\t}\n\n\t\t\t\tconst transform = generateTransform( node.userData.transformData );\n\n\t\t\t\tnode.applyMatrix4( transform );\n\t\t\t\tnode.updateWorldMatrix();\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst animations = new AnimationParser().parse();\n\n\t\t// if all the models where already combined in a single group, just return that\n\t\tif ( sceneGraph.children.length === 1 && sceneGraph.children[ 0 ].isGroup ) {\n\n\t\t\tsceneGraph.children[ 0 ].animations = animations;\n\t\t\tsceneGraph = sceneGraph.children[ 0 ];\n\n\t\t}\n\n\t\tsceneGraph.animations = animations;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.Model\n\tparseModels( skeletons, geometryMap, materialMap ) {\n\n\t\tconst modelMap = new Map();\n\t\tconst modelNodes = fbxTree.Objects.Model;\n\n\t\tfor ( const nodeID in modelNodes ) {\n\n\t\t\tconst id = parseInt( nodeID );\n\t\t\tconst node = modelNodes[ nodeID ];\n\t\t\tconst relationships = connections.get( id );\n\n\t\t\tlet model = this.buildSkeleton( relationships, skeletons, id, node.attrName );\n\n\t\t\tif ( ! model ) {\n\n\t\t\t\tswitch ( node.attrType ) {\n\n\t\t\t\t\tcase 'Camera':\n\t\t\t\t\t\tmodel = this.createCamera( relationships );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Light':\n\t\t\t\t\t\tmodel = this.createLight( relationships );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Mesh':\n\t\t\t\t\t\tmodel = this.createMesh( relationships, geometryMap, materialMap );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'NurbsCurve':\n\t\t\t\t\t\tmodel = this.createCurve( relationships, geometryMap );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'LimbNode':\n\t\t\t\t\tcase 'Root':\n\t\t\t\t\t\tmodel = new Bone();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Null':\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmodel = new Group();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tmodel.name = node.attrName ? PropertyBinding.sanitizeNodeName( node.attrName ) : '';\n\t\t\t\tmodel.userData.originalName = node.attrName;\n\n\t\t\t\tmodel.ID = id;\n\n\t\t\t}\n\n\t\t\tthis.getTransformData( model, node );\n\t\t\tmodelMap.set( id, model );\n\n\t\t}\n\n\t\treturn modelMap;\n\n\t}\n\n\tbuildSkeleton( relationships, skeletons, id, name ) {\n\n\t\tlet bone = null;\n\n\t\trelationships.parents.forEach( function ( parent ) {\n\n\t\t\tfor ( const ID in skeletons ) {\n\n\t\t\t\tconst skeleton = skeletons[ ID ];\n\n\t\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t\tif ( rawBone.ID === parent.ID ) {\n\n\t\t\t\t\t\tconst subBone = bone;\n\t\t\t\t\t\tbone = new Bone();\n\n\t\t\t\t\t\tbone.matrixWorld.copy( rawBone.transformLink );\n\n\t\t\t\t\t\t// set name and id here - otherwise in cases where \"subBone\" is created it will not have a name / id\n\n\t\t\t\t\t\tbone.name = name ? PropertyBinding.sanitizeNodeName( name ) : '';\n\t\t\t\t\t\tbone.userData.originalName = name;\n\t\t\t\t\t\tbone.ID = id;\n\n\t\t\t\t\t\tskeleton.bones[ i ] = bone;\n\n\t\t\t\t\t\t// In cases where a bone is shared between multiple meshes\n\t\t\t\t\t\t// duplicate the bone here and and it as a child of the first bone\n\t\t\t\t\t\tif ( subBone !== null ) {\n\n\t\t\t\t\t\t\tbone.add( subBone );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn bone;\n\n\t}\n\n\t// create a PerspectiveCamera or OrthographicCamera\n\tcreateCamera( relationships ) {\n\n\t\tlet model;\n\t\tlet cameraAttribute;\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\tcameraAttribute = attr;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( cameraAttribute === undefined ) {\n\n\t\t\tmodel = new Object3D();\n\n\t\t} else {\n\n\t\t\tlet type = 0;\n\t\t\tif ( cameraAttribute.CameraProjectionType !== undefined && cameraAttribute.CameraProjectionType.value === 1 ) {\n\n\t\t\t\ttype = 1;\n\n\t\t\t}\n\n\t\t\tlet nearClippingPlane = 1;\n\t\t\tif ( cameraAttribute.NearPlane !== undefined ) {\n\n\t\t\t\tnearClippingPlane = cameraAttribute.NearPlane.value / 1000;\n\n\t\t\t}\n\n\t\t\tlet farClippingPlane = 1000;\n\t\t\tif ( cameraAttribute.FarPlane !== undefined ) {\n\n\t\t\t\tfarClippingPlane = cameraAttribute.FarPlane.value / 1000;\n\n\t\t\t}\n\n\n\t\t\tlet width = window.innerWidth;\n\t\t\tlet height = window.innerHeight;\n\n\t\t\tif ( cameraAttribute.AspectWidth !== undefined && cameraAttribute.AspectHeight !== undefined ) {\n\n\t\t\t\twidth = cameraAttribute.AspectWidth.value;\n\t\t\t\theight = cameraAttribute.AspectHeight.value;\n\n\t\t\t}\n\n\t\t\tconst aspect = width / height;\n\n\t\t\tlet fov = 45;\n\t\t\tif ( cameraAttribute.FieldOfView !== undefined ) {\n\n\t\t\t\tfov = cameraAttribute.FieldOfView.value;\n\n\t\t\t}\n\n\t\t\tconst focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 0: // Perspective\n\t\t\t\t\tmodel = new PerspectiveCamera( fov, aspect, nearClippingPlane, farClippingPlane );\n\t\t\t\t\tif ( focalLength !== null ) model.setFocalLength( focalLength );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // Orthographic\n\t\t\t\t\tmodel = new OrthographicCamera( - width / 2, width / 2, height / 2, - height / 2, nearClippingPlane, farClippingPlane );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown camera type ' + type + '.' );\n\t\t\t\t\tmodel = new Object3D();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\t// Create a DirectionalLight, PointLight or SpotLight\n\tcreateLight( relationships ) {\n\n\t\tlet model;\n\t\tlet lightAttribute;\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\tlightAttribute = attr;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( lightAttribute === undefined ) {\n\n\t\t\tmodel = new Object3D();\n\n\t\t} else {\n\n\t\t\tlet type;\n\n\t\t\t// LightType can be undefined for Point lights\n\t\t\tif ( lightAttribute.LightType === undefined ) {\n\n\t\t\t\ttype = 0;\n\n\t\t\t} else {\n\n\t\t\t\ttype = lightAttribute.LightType.value;\n\n\t\t\t}\n\n\t\t\tlet color = 0xffffff;\n\n\t\t\tif ( lightAttribute.Color !== undefined ) {\n\n\t\t\t\tcolor = new Color().fromArray( lightAttribute.Color.value ).convertSRGBToLinear();\n\n\t\t\t}\n\n\t\t\tlet intensity = ( lightAttribute.Intensity === undefined ) ? 1 : lightAttribute.Intensity.value / 100;\n\n\t\t\t// light disabled\n\t\t\tif ( lightAttribute.CastLightOnObject !== undefined && lightAttribute.CastLightOnObject.value === 0 ) {\n\n\t\t\t\tintensity = 0;\n\n\t\t\t}\n\n\t\t\tlet distance = 0;\n\t\t\tif ( lightAttribute.FarAttenuationEnd !== undefined ) {\n\n\t\t\t\tif ( lightAttribute.EnableFarAttenuation !== undefined && lightAttribute.EnableFarAttenuation.value === 0 ) {\n\n\t\t\t\t\tdistance = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdistance = lightAttribute.FarAttenuationEnd.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// TODO: could this be calculated linearly from FarAttenuationStart to FarAttenuationEnd?\n\t\t\tconst decay = 1;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 0: // Point\n\t\t\t\t\tmodel = new PointLight( color, intensity, distance, decay );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // Directional\n\t\t\t\t\tmodel = new DirectionalLight( color, intensity );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2: // Spot\n\t\t\t\t\tlet angle = Math.PI / 3;\n\n\t\t\t\t\tif ( lightAttribute.InnerAngle !== undefined ) {\n\n\t\t\t\t\t\tangle = MathUtils.degToRad( lightAttribute.InnerAngle.value );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet penumbra = 0;\n\t\t\t\t\tif ( lightAttribute.OuterAngle !== undefined ) {\n\n\t\t\t\t\t\t// TODO: this is not correct - FBX calculates outer and inner angle in degrees\n\t\t\t\t\t\t// with OuterAngle > InnerAngle && OuterAngle <= Math.PI\n\t\t\t\t\t\t// while three.js uses a penumbra between (0, 1) to attenuate the inner angle\n\t\t\t\t\t\tpenumbra = MathUtils.degToRad( lightAttribute.OuterAngle.value );\n\t\t\t\t\t\tpenumbra = Math.max( penumbra, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmodel = new SpotLight( color, intensity, distance, angle, penumbra, decay );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown light type ' + lightAttribute.LightType.value + ', defaulting to a PointLight.' );\n\t\t\t\t\tmodel = new PointLight( color, intensity );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( lightAttribute.CastShadows !== undefined && lightAttribute.CastShadows.value === 1 ) {\n\n\t\t\t\tmodel.castShadow = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\tcreateMesh( relationships, geometryMap, materialMap ) {\n\n\t\tlet model;\n\t\tlet geometry = null;\n\t\tlet material = null;\n\t\tconst materials = [];\n\n\t\t// get geometry and materials(s) from connections\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tif ( geometryMap.has( child.ID ) ) {\n\n\t\t\t\tgeometry = geometryMap.get( child.ID );\n\n\t\t\t}\n\n\t\t\tif ( materialMap.has( child.ID ) ) {\n\n\t\t\t\tmaterials.push( materialMap.get( child.ID ) );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( materials.length > 1 ) {\n\n\t\t\tmaterial = materials;\n\n\t\t} else if ( materials.length > 0 ) {\n\n\t\t\tmaterial = materials[ 0 ];\n\n\t\t} else {\n\n\t\t\tmaterial = new MeshPhongMaterial( {\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tcolor: 0xcccccc\n\t\t\t} );\n\t\t\tmaterials.push( material );\n\n\t\t}\n\n\t\tif ( 'color' in geometry.attributes ) {\n\n\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( geometry.FBX_Deformer ) {\n\n\t\t\tmodel = new SkinnedMesh( geometry, material );\n\t\t\tmodel.normalizeSkinWeights();\n\n\t\t} else {\n\n\t\t\tmodel = new Mesh( geometry, material );\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\tcreateCurve( relationships, geometryMap ) {\n\n\t\tconst geometry = relationships.children.reduce( function ( geo, child ) {\n\n\t\t\tif ( geometryMap.has( child.ID ) ) geo = geometryMap.get( child.ID );\n\n\t\t\treturn geo;\n\n\t\t}, null );\n\n\t\t// FBX does not list materials for Nurbs lines, so we'll just put our own in here.\n\t\tconst material = new LineBasicMaterial( {\n\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\tcolor: 0x3300ff,\n\t\t\tlinewidth: 1\n\t\t} );\n\t\treturn new Line( geometry, material );\n\n\t}\n\n\t// parse the model node for transform data\n\tgetTransformData( model, modelNode ) {\n\n\t\tconst transformData = {};\n\n\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\telse transformData.eulerOrder = 'ZYX';\n\n\t\tif ( 'Lcl_Translation' in modelNode ) transformData.translation = modelNode.Lcl_Translation.value;\n\n\t\tif ( 'PreRotation' in modelNode ) transformData.preRotation = modelNode.PreRotation.value;\n\t\tif ( 'Lcl_Rotation' in modelNode ) transformData.rotation = modelNode.Lcl_Rotation.value;\n\t\tif ( 'PostRotation' in modelNode ) transformData.postRotation = modelNode.PostRotation.value;\n\n\t\tif ( 'Lcl_Scaling' in modelNode ) transformData.scale = modelNode.Lcl_Scaling.value;\n\n\t\tif ( 'ScalingOffset' in modelNode ) transformData.scalingOffset = modelNode.ScalingOffset.value;\n\t\tif ( 'ScalingPivot' in modelNode ) transformData.scalingPivot = modelNode.ScalingPivot.value;\n\n\t\tif ( 'RotationOffset' in modelNode ) transformData.rotationOffset = modelNode.RotationOffset.value;\n\t\tif ( 'RotationPivot' in modelNode ) transformData.rotationPivot = modelNode.RotationPivot.value;\n\n\t\tmodel.userData.transformData = transformData;\n\n\t}\n\n\tsetLookAtProperties( model, modelNode ) {\n\n\t\tif ( 'LookAtProperty' in modelNode ) {\n\n\t\t\tconst children = connections.get( model.ID ).children;\n\n\t\t\tchildren.forEach( function ( child ) {\n\n\t\t\t\tif ( child.relationship === 'LookAtProperty' ) {\n\n\t\t\t\t\tconst lookAtTarget = fbxTree.Objects.Model[ child.ID ];\n\n\t\t\t\t\tif ( 'Lcl_Translation' in lookAtTarget ) {\n\n\t\t\t\t\t\tconst pos = lookAtTarget.Lcl_Translation.value;\n\n\t\t\t\t\t\t// DirectionalLight, SpotLight\n\t\t\t\t\t\tif ( model.target !== undefined ) {\n\n\t\t\t\t\t\t\tmodel.target.position.fromArray( pos );\n\t\t\t\t\t\t\tsceneGraph.add( model.target );\n\n\t\t\t\t\t\t} else { // Cameras and other Object3Ds\n\n\t\t\t\t\t\t\tmodel.lookAt( new Vector3().fromArray( pos ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tbindSkeleton( skeletons, geometryMap, modelMap ) {\n\n\t\tconst bindMatrices = this.parsePoseNodes();\n\n\t\tfor ( const ID in skeletons ) {\n\n\t\t\tconst skeleton = skeletons[ ID ];\n\n\t\t\tconst parents = connections.get( parseInt( skeleton.ID ) ).parents;\n\n\t\t\tparents.forEach( function ( parent ) {\n\n\t\t\t\tif ( geometryMap.has( parent.ID ) ) {\n\n\t\t\t\t\tconst geoID = parent.ID;\n\t\t\t\t\tconst geoRelationships = connections.get( geoID );\n\n\t\t\t\t\tgeoRelationships.parents.forEach( function ( geoConnParent ) {\n\n\t\t\t\t\t\tif ( modelMap.has( geoConnParent.ID ) ) {\n\n\t\t\t\t\t\t\tconst model = modelMap.get( geoConnParent.ID );\n\n\t\t\t\t\t\t\tmodel.bind( new Skeleton( skeleton.bones ), bindMatrices[ geoConnParent.ID ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tparsePoseNodes() {\n\n\t\tconst bindMatrices = {};\n\n\t\tif ( 'Pose' in fbxTree.Objects ) {\n\n\t\t\tconst BindPoseNode = fbxTree.Objects.Pose;\n\n\t\t\tfor ( const nodeID in BindPoseNode ) {\n\n\t\t\t\tif ( BindPoseNode[ nodeID ].attrType === 'BindPose' && BindPoseNode[ nodeID ].NbPoseNodes > 0 ) {\n\n\t\t\t\t\tconst poseNodes = BindPoseNode[ nodeID ].PoseNode;\n\n\t\t\t\t\tif ( Array.isArray( poseNodes ) ) {\n\n\t\t\t\t\t\tposeNodes.forEach( function ( poseNode ) {\n\n\t\t\t\t\t\t\tbindMatrices[ poseNode.Node ] = new Matrix4().fromArray( poseNode.Matrix.a );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbindMatrices[ poseNodes.Node ] = new Matrix4().fromArray( poseNodes.Matrix.a );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bindMatrices;\n\n\t}\n\n\taddGlobalSceneSettings() {\n\n\t\tif ( 'GlobalSettings' in fbxTree ) {\n\n\t\t\tif ( 'AmbientColor' in fbxTree.GlobalSettings ) {\n\n\t\t\t\t// Parse ambient color - if it's not set to black (default), create an ambient light\n\n\t\t\t\tconst ambientColor = fbxTree.GlobalSettings.AmbientColor.value;\n\t\t\t\tconst r = ambientColor[ 0 ];\n\t\t\t\tconst g = ambientColor[ 1 ];\n\t\t\t\tconst b = ambientColor[ 2 ];\n\n\t\t\t\tif ( r !== 0 || g !== 0 || b !== 0 ) {\n\n\t\t\t\t\tconst color = new Color( r, g, b ).convertSRGBToLinear();\n\t\t\t\t\tsceneGraph.add( new AmbientLight( color, 1 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( 'UnitScaleFactor' in fbxTree.GlobalSettings ) {\n\n\t\t\t\tsceneGraph.userData.unitScaleFactor = fbxTree.GlobalSettings.UnitScaleFactor.value;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n// parse Geometry data from FBXTree and return map of BufferGeometries\nclass GeometryParser {\n\n\tconstructor() {\n\n\t\tthis.negativeMaterialIndices = false;\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Geometry\n\tparse( deformers ) {\n\n\t\tconst geometryMap = new Map();\n\n\t\tif ( 'Geometry' in fbxTree.Objects ) {\n\n\t\t\tconst geoNodes = fbxTree.Objects.Geometry;\n\n\t\t\tfor ( const nodeID in geoNodes ) {\n\n\t\t\t\tconst relationships = connections.get( parseInt( nodeID ) );\n\t\t\t\tconst geo = this.parseGeometry( relationships, geoNodes[ nodeID ], deformers );\n\n\t\t\t\tgeometryMap.set( parseInt( nodeID ), geo );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// report warnings\n\n\t\tif ( this.negativeMaterialIndices === true ) {\n\n\t\t\tconsole.warn( 'THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected.' );\n\n\t\t}\n\n\t\treturn geometryMap;\n\n\t}\n\n\t// Parse single node in FBXTree.Objects.Geometry\n\tparseGeometry( relationships, geoNode, deformers ) {\n\n\t\tswitch ( geoNode.attrType ) {\n\n\t\t\tcase 'Mesh':\n\t\t\t\treturn this.parseMeshGeometry( relationships, geoNode, deformers );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NurbsCurve':\n\t\t\t\treturn this.parseNurbsGeometry( geoNode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t// Parse single node mesh geometry in FBXTree.Objects.Geometry\n\tparseMeshGeometry( relationships, geoNode, deformers ) {\n\n\t\tconst skeletons = deformers.skeletons;\n\t\tconst morphTargets = [];\n\n\t\tconst modelNodes = relationships.parents.map( function ( parent ) {\n\n\t\t\treturn fbxTree.Objects.Model[ parent.ID ];\n\n\t\t} );\n\n\t\t// don't create geometry if it is not associated with any models\n\t\tif ( modelNodes.length === 0 ) return;\n\n\t\tconst skeleton = relationships.children.reduce( function ( skeleton, child ) {\n\n\t\t\tif ( skeletons[ child.ID ] !== undefined ) skeleton = skeletons[ child.ID ];\n\n\t\t\treturn skeleton;\n\n\t\t}, null );\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tif ( deformers.morphTargets[ child.ID ] !== undefined ) {\n\n\t\t\t\tmorphTargets.push( deformers.morphTargets[ child.ID ] );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Assume one model and get the preRotation from that\n\t\t// if there is more than one model associated with the geometry this may cause problems\n\t\tconst modelNode = modelNodes[ 0 ];\n\n\t\tconst transformData = {};\n\n\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\tif ( 'GeometricTranslation' in modelNode ) transformData.translation = modelNode.GeometricTranslation.value;\n\t\tif ( 'GeometricRotation' in modelNode ) transformData.rotation = modelNode.GeometricRotation.value;\n\t\tif ( 'GeometricScaling' in modelNode ) transformData.scale = modelNode.GeometricScaling.value;\n\n\t\tconst transform = generateTransform( transformData );\n\n\t\treturn this.genGeometry( geoNode, skeleton, morphTargets, transform );\n\n\t}\n\n\t// Generate a BufferGeometry from a node in FBXTree.Objects.Geometry\n\tgenGeometry( geoNode, skeleton, morphTargets, preTransform ) {\n\n\t\tconst geo = new BufferGeometry();\n\t\tif ( geoNode.attrName ) geo.name = geoNode.attrName;\n\n\t\tconst geoInfo = this.parseGeoNode( geoNode, skeleton );\n\t\tconst buffers = this.genBuffers( geoInfo );\n\n\t\tconst positionAttribute = new Float32BufferAttribute( buffers.vertex, 3 );\n\n\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\tgeo.setAttribute( 'position', positionAttribute );\n\n\t\tif ( buffers.colors.length > 0 ) {\n\n\t\t\tgeo.setAttribute( 'color', new Float32BufferAttribute( buffers.colors, 3 ) );\n\n\t\t}\n\n\t\tif ( skeleton ) {\n\n\t\t\tgeo.setAttribute( 'skinIndex', new Uint16BufferAttribute( buffers.weightsIndices, 4 ) );\n\n\t\t\tgeo.setAttribute( 'skinWeight', new Float32BufferAttribute( buffers.vertexWeights, 4 ) );\n\n\t\t\t// used later to bind the skeleton to the model\n\t\t\tgeo.FBX_Deformer = skeleton;\n\n\t\t}\n\n\t\tif ( buffers.normal.length > 0 ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( preTransform );\n\n\t\t\tconst normalAttribute = new Float32BufferAttribute( buffers.normal, 3 );\n\t\t\tnormalAttribute.applyNormalMatrix( normalMatrix );\n\n\t\t\tgeo.setAttribute( 'normal', normalAttribute );\n\n\t\t}\n\n\t\tbuffers.uvs.forEach( function ( uvBuffer, i ) {\n\n\t\t\tconst name = i === 0 ? 'uv' : `uv${ i }`;\n\n\t\t\tgeo.setAttribute( name, new Float32BufferAttribute( buffers.uvs[ i ], 2 ) );\n\n\t\t} );\n\n\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t// Convert the material indices of each vertex into rendering groups on the geometry.\n\t\t\tlet prevMaterialIndex = buffers.materialIndex[ 0 ];\n\t\t\tlet startIndex = 0;\n\n\t\t\tbuffers.materialIndex.forEach( function ( currentIndex, i ) {\n\n\t\t\t\tif ( currentIndex !== prevMaterialIndex ) {\n\n\t\t\t\t\tgeo.addGroup( startIndex, i - startIndex, prevMaterialIndex );\n\n\t\t\t\t\tprevMaterialIndex = currentIndex;\n\t\t\t\t\tstartIndex = i;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// the loop above doesn't add the last group, do that here.\n\t\t\tif ( geo.groups.length > 0 ) {\n\n\t\t\t\tconst lastGroup = geo.groups[ geo.groups.length - 1 ];\n\t\t\t\tconst lastIndex = lastGroup.start + lastGroup.count;\n\n\t\t\t\tif ( lastIndex !== buffers.materialIndex.length ) {\n\n\t\t\t\t\tgeo.addGroup( lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// case where there are multiple materials but the whole geometry is only\n\t\t\t// using one of them\n\t\t\tif ( geo.groups.length === 0 ) {\n\n\t\t\t\tgeo.addGroup( 0, buffers.materialIndex.length, buffers.materialIndex[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.addMorphTargets( geo, geoNode, morphTargets, preTransform );\n\n\t\treturn geo;\n\n\t}\n\n\tparseGeoNode( geoNode, skeleton ) {\n\n\t\tconst geoInfo = {};\n\n\t\tgeoInfo.vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : [];\n\t\tgeoInfo.vertexIndices = ( geoNode.PolygonVertexIndex !== undefined ) ? geoNode.PolygonVertexIndex.a : [];\n\n\t\tif ( geoNode.LayerElementColor ) {\n\n\t\t\tgeoInfo.color = this.parseVertexColors( geoNode.LayerElementColor[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementMaterial ) {\n\n\t\t\tgeoInfo.material = this.parseMaterialIndices( geoNode.LayerElementMaterial[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementNormal ) {\n\n\t\t\tgeoInfo.normal = this.parseNormals( geoNode.LayerElementNormal[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementUV ) {\n\n\t\t\tgeoInfo.uv = [];\n\n\t\t\tlet i = 0;\n\t\t\twhile ( geoNode.LayerElementUV[ i ] ) {\n\n\t\t\t\tif ( geoNode.LayerElementUV[ i ].UV ) {\n\n\t\t\t\t\tgeoInfo.uv.push( this.parseUVs( geoNode.LayerElementUV[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeoInfo.weightTable = {};\n\n\t\tif ( skeleton !== null ) {\n\n\t\t\tgeoInfo.skeleton = skeleton;\n\n\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t// loop over the bone's vertex indices and weights\n\t\t\t\trawBone.indices.forEach( function ( index, j ) {\n\n\t\t\t\t\tif ( geoInfo.weightTable[ index ] === undefined ) geoInfo.weightTable[ index ] = [];\n\n\t\t\t\t\tgeoInfo.weightTable[ index ].push( {\n\n\t\t\t\t\t\tid: i,\n\t\t\t\t\t\tweight: rawBone.weights[ j ],\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn geoInfo;\n\n\t}\n\n\tgenBuffers( geoInfo ) {\n\n\t\tconst buffers = {\n\t\t\tvertex: [],\n\t\t\tnormal: [],\n\t\t\tcolors: [],\n\t\t\tuvs: [],\n\t\t\tmaterialIndex: [],\n\t\t\tvertexWeights: [],\n\t\t\tweightsIndices: [],\n\t\t};\n\n\t\tlet polygonIndex = 0;\n\t\tlet faceLength = 0;\n\t\tlet displayedWeightsWarning = false;\n\n\t\t// these will hold data for a single face\n\t\tlet facePositionIndexes = [];\n\t\tlet faceNormals = [];\n\t\tlet faceColors = [];\n\t\tlet faceUVs = [];\n\t\tlet faceWeights = [];\n\t\tlet faceWeightIndices = [];\n\n\t\tconst scope = this;\n\t\tgeoInfo.vertexIndices.forEach( function ( vertexIndex, polygonVertexIndex ) {\n\n\t\t\tlet materialIndex;\n\t\t\tlet endOfFace = false;\n\n\t\t\t// Face index and vertex index arrays are combined in a single array\n\t\t\t// A cube with quad faces looks like this:\n\t\t\t// PolygonVertexIndex: *24 {\n\t\t\t// a: 0, 1, 3, -3, 2, 3, 5, -5, 4, 5, 7, -7, 6, 7, 1, -1, 1, 7, 5, -4, 6, 0, 2, -5\n\t\t\t// }\n\t\t\t// Negative numbers mark the end of a face - first face here is 0, 1, 3, -3\n\t\t\t// to find index of last vertex bit shift the index: ^ - 1\n\t\t\tif ( vertexIndex < 0 ) {\n\n\t\t\t\tvertexIndex = vertexIndex ^ - 1; // equivalent to ( x * -1 ) - 1\n\t\t\t\tendOfFace = true;\n\n\t\t\t}\n\n\t\t\tlet weightIndices = [];\n\t\t\tlet weights = [];\n\n\t\t\tfacePositionIndexes.push( vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2 );\n\n\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color );\n\n\t\t\t\tfaceColors.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\tif ( geoInfo.weightTable[ vertexIndex ] !== undefined ) {\n\n\t\t\t\t\tgeoInfo.weightTable[ vertexIndex ].forEach( function ( wt ) {\n\n\t\t\t\t\t\tweights.push( wt.weight );\n\t\t\t\t\t\tweightIndices.push( wt.id );\n\n\t\t\t\t\t} );\n\n\n\t\t\t\t}\n\n\t\t\t\tif ( weights.length > 4 ) {\n\n\t\t\t\t\tif ( ! displayedWeightsWarning ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.' );\n\t\t\t\t\t\tdisplayedWeightsWarning = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst wIndex = [ 0, 0, 0, 0 ];\n\t\t\t\t\tconst Weight = [ 0, 0, 0, 0 ];\n\n\t\t\t\t\tweights.forEach( function ( weight, weightIndex ) {\n\n\t\t\t\t\t\tlet currentWeight = weight;\n\t\t\t\t\t\tlet currentIndex = weightIndices[ weightIndex ];\n\n\t\t\t\t\t\tWeight.forEach( function ( comparedWeight, comparedWeightIndex, comparedWeightArray ) {\n\n\t\t\t\t\t\t\tif ( currentWeight > comparedWeight ) {\n\n\t\t\t\t\t\t\t\tcomparedWeightArray[ comparedWeightIndex ] = currentWeight;\n\t\t\t\t\t\t\t\tcurrentWeight = comparedWeight;\n\n\t\t\t\t\t\t\t\tconst tmp = wIndex[ comparedWeightIndex ];\n\t\t\t\t\t\t\t\twIndex[ comparedWeightIndex ] = currentIndex;\n\t\t\t\t\t\t\t\tcurrentIndex = tmp;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tweightIndices = wIndex;\n\t\t\t\t\tweights = Weight;\n\n\t\t\t\t}\n\n\t\t\t\t// if the weight array is shorter than 4 pad with 0s\n\t\t\t\twhile ( weights.length < 4 ) {\n\n\t\t\t\t\tweights.push( 0 );\n\t\t\t\t\tweightIndices.push( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 4; ++ i ) {\n\n\t\t\t\t\tfaceWeights.push( weights[ i ] );\n\t\t\t\t\tfaceWeightIndices.push( weightIndices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal );\n\n\t\t\t\tfaceNormals.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\tmaterialIndex = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material )[ 0 ];\n\n\t\t\t\tif ( materialIndex < 0 ) {\n\n\t\t\t\t\tscope.negativeMaterialIndices = true;\n\t\t\t\t\tmaterialIndex = 0; // fallback\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\tgeoInfo.uv.forEach( function ( uv, i ) {\n\n\t\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, uv );\n\n\t\t\t\t\tif ( faceUVs[ i ] === undefined ) {\n\n\t\t\t\t\t\tfaceUVs[ i ] = [];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceUVs[ i ].push( data[ 0 ] );\n\t\t\t\t\tfaceUVs[ i ].push( data[ 1 ] );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfaceLength ++;\n\n\t\t\tif ( endOfFace ) {\n\n\t\t\t\tscope.genFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength );\n\n\t\t\t\tpolygonIndex ++;\n\t\t\t\tfaceLength = 0;\n\n\t\t\t\t// reset arrays for the next face\n\t\t\t\tfacePositionIndexes = [];\n\t\t\t\tfaceNormals = [];\n\t\t\t\tfaceColors = [];\n\t\t\t\tfaceUVs = [];\n\t\t\t\tfaceWeights = [];\n\t\t\t\tfaceWeightIndices = [];\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn buffers;\n\n\t}\n\n\t// See https://www.khronos.org/opengl/wiki/Calculating_a_Surface_Normal\n\tgetNormalNewell( vertices ) {\n\n\t\tconst normal = new Vector3( 0.0, 0.0, 0.0 );\n\n\t\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\t\tconst current = vertices[ i ];\n\t\t\tconst next = vertices[ ( i + 1 ) % vertices.length ];\n\n\t\t\tnormal.x += ( current.y - next.y ) * ( current.z + next.z );\n\t\t\tnormal.y += ( current.z - next.z ) * ( current.x + next.x );\n\t\t\tnormal.z += ( current.x - next.x ) * ( current.y + next.y );\n\n\t\t}\n\n\t\tnormal.normalize();\n\n\t\treturn normal;\n\n\t}\n\n\tgetNormalTangentAndBitangent( vertices ) {\n\n\t\tconst normalVector = this.getNormalNewell( vertices );\n\t\t// Avoid up being equal or almost equal to normalVector\n\t\tconst up = Math.abs( normalVector.z ) > 0.5 ? new Vector3( 0.0, 1.0, 0.0 ) : new Vector3( 0.0, 0.0, 1.0 );\n\t\tconst tangent = up.cross( normalVector ).normalize();\n\t\tconst bitangent = normalVector.clone().cross( tangent ).normalize();\n\n\t\treturn {\n\t\t\tnormal: normalVector,\n\t\t\ttangent: tangent,\n\t\t\tbitangent: bitangent\n\t\t};\n\n\t}\n\n\tflattenVertex( vertex, normalTangent, normalBitangent ) {\n\n\t\treturn new Vector2(\n\t\t\tvertex.dot( normalTangent ),\n\t\t\tvertex.dot( normalBitangent )\n\t\t);\n\n\t}\n\n\t// Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris\n\tgenFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength ) {\n\n\t\tlet triangles;\n\n\t\tif ( faceLength > 3 ) {\n\n\t\t\t// Triangulate n-gon using earcut\n\n\t\t\tconst vertices = [];\n\t\t\t// in morphing scenario vertexPositions represent morphPositions\n\t\t\t// while baseVertexPositions represent the original geometry's positions\n\t\t\tconst positions = geoInfo.baseVertexPositions || geoInfo.vertexPositions;\n\t\t\tfor ( let i = 0; i < facePositionIndexes.length; i += 3 ) {\n\n\t\t\t\tvertices.push(\n\t\t\t\t\tnew Vector3(\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i ] ],\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i + 1 ] ],\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i + 2 ] ]\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tconst { tangent, bitangent } = this.getNormalTangentAndBitangent( vertices );\n\t\t\tconst triangulationInput = [];\n\n\t\t\tfor ( const vertex of vertices ) {\n\n\t\t\t\ttriangulationInput.push( this.flattenVertex( vertex, tangent, bitangent ) );\n\n\t\t\t}\n\n\t\t\t// When vertices is an array of [0,0,0] elements (which is the case for vertices not participating in morph)\n\t\t\t// the triangulationInput will be an array of [0,0] elements\n\t\t\t// resulting in an array of 0 triangles being returned from ShapeUtils.triangulateShape\n\t\t\t// leading to not pushing into buffers.vertex the redundant vertices (the vertices that are not morphed).\n\t\t\t// That's why, in order to support morphing scenario, \"positions\" is looking first for baseVertexPositions,\n\t\t\t// so that we don't end up with an array of 0 triangles for the faces not participating in morph.\n\t\t\ttriangles = ShapeUtils.triangulateShape( triangulationInput, [] );\n\n\t\t} else {\n\n\t\t\t// Regular triangle, skip earcut triangulation step\n\t\t\ttriangles = [[ 0, 1, 2 ]];\n\n\t\t}\n\n\t\tfor ( const [ i0, i1, i2 ] of triangles ) {\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 + 2 ] ] );\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 + 2 ] ] );\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 + 2 ] ] );\n\n\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 3 ] );\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 3 ] );\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 3 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 + 2 ] );\n\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 + 2 ] );\n\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 + 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 + 2 ] );\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 + 2 ] );\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 + 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\tgeoInfo.uv.forEach( function ( uv, j ) {\n\n\t\t\t\t\tif ( buffers.uvs[ j ] === undefined ) buffers.uvs[ j ] = [];\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i0 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i0 * 2 + 1 ] );\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i1 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i1 * 2 + 1 ] );\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i2 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i2 * 2 + 1 ] );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\taddMorphTargets( parentGeo, parentGeoNode, morphTargets, preTransform ) {\n\n\t\tif ( morphTargets.length === 0 ) return;\n\n\t\tparentGeo.morphTargetsRelative = true;\n\n\t\tparentGeo.morphAttributes.position = [];\n\t\t// parentGeo.morphAttributes.normal = []; // not implemented\n\n\t\tconst scope = this;\n\t\tmorphTargets.forEach( function ( morphTarget ) {\n\n\t\t\tmorphTarget.rawTargets.forEach( function ( rawTarget ) {\n\n\t\t\t\tconst morphGeoNode = fbxTree.Objects.Geometry[ rawTarget.geoID ];\n\n\t\t\t\tif ( morphGeoNode !== undefined ) {\n\n\t\t\t\t\tscope.genMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t// a morph geometry node is similar to a standard node, and the node is also contained\n\t// in FBXTree.Objects.Geometry, however it can only have attributes for position, normal\n\t// and a special attribute Index defining which vertices of the original geometry are affected\n\t// Normal and position attributes only have data for the vertices that are affected by the morph\n\tgenMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, name ) {\n\n\t\tconst basePositions = parentGeoNode.Vertices !== undefined ? parentGeoNode.Vertices.a : [];\n\t\tconst baseIndices = parentGeoNode.PolygonVertexIndex !== undefined ? parentGeoNode.PolygonVertexIndex.a : [];\n\n\t\tconst morphPositionsSparse = morphGeoNode.Vertices !== undefined ? morphGeoNode.Vertices.a : [];\n\t\tconst morphIndices = morphGeoNode.Indexes !== undefined ? morphGeoNode.Indexes.a : [];\n\n\t\tconst length = parentGeo.attributes.position.count * 3;\n\t\tconst morphPositions = new Float32Array( length );\n\n\t\tfor ( let i = 0; i < morphIndices.length; i ++ ) {\n\n\t\t\tconst morphIndex = morphIndices[ i ] * 3;\n\n\t\t\tmorphPositions[ morphIndex ] = morphPositionsSparse[ i * 3 ];\n\t\t\tmorphPositions[ morphIndex + 1 ] = morphPositionsSparse[ i * 3 + 1 ];\n\t\t\tmorphPositions[ morphIndex + 2 ] = morphPositionsSparse[ i * 3 + 2 ];\n\n\t\t}\n\n\t\t// TODO: add morph normal support\n\t\tconst morphGeoInfo = {\n\t\t\tvertexIndices: baseIndices,\n\t\t\tvertexPositions: morphPositions,\n\t\t\tbaseVertexPositions: basePositions\n\t\t};\n\n\t\tconst morphBuffers = this.genBuffers( morphGeoInfo );\n\n\t\tconst positionAttribute = new Float32BufferAttribute( morphBuffers.vertex, 3 );\n\t\tpositionAttribute.name = name || morphGeoNode.attrName;\n\n\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\tparentGeo.morphAttributes.position.push( positionAttribute );\n\n\t}\n\n\t// Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists\n\tparseNormals( NormalNode ) {\n\n\t\tconst mappingType = NormalNode.MappingInformationType;\n\t\tconst referenceType = NormalNode.ReferenceInformationType;\n\t\tconst buffer = NormalNode.Normals.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tif ( 'NormalIndex' in NormalNode ) {\n\n\t\t\t\tindexBuffer = NormalNode.NormalIndex.a;\n\n\t\t\t} else if ( 'NormalsIndex' in NormalNode ) {\n\n\t\t\t\tindexBuffer = NormalNode.NormalsIndex.a;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 3,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists\n\tparseUVs( UVNode ) {\n\n\t\tconst mappingType = UVNode.MappingInformationType;\n\t\tconst referenceType = UVNode.ReferenceInformationType;\n\t\tconst buffer = UVNode.UV.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tindexBuffer = UVNode.UVIndex.a;\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 2,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists\n\tparseVertexColors( ColorNode ) {\n\n\t\tconst mappingType = ColorNode.MappingInformationType;\n\t\tconst referenceType = ColorNode.ReferenceInformationType;\n\t\tconst buffer = ColorNode.Colors.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tindexBuffer = ColorNode.ColorIndex.a;\n\n\t\t}\n\n\t\tfor ( let i = 0, c = new Color(); i < buffer.length; i += 4 ) {\n\n\t\t\tc.fromArray( buffer, i ).convertSRGBToLinear().toArray( buffer, i );\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 4,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists\n\tparseMaterialIndices( MaterialNode ) {\n\n\t\tconst mappingType = MaterialNode.MappingInformationType;\n\t\tconst referenceType = MaterialNode.ReferenceInformationType;\n\n\t\tif ( mappingType === 'NoMappingInformation' ) {\n\n\t\t\treturn {\n\t\t\t\tdataSize: 1,\n\t\t\t\tbuffer: [ 0 ],\n\t\t\t\tindices: [ 0 ],\n\t\t\t\tmappingType: 'AllSame',\n\t\t\t\treferenceType: referenceType\n\t\t\t};\n\n\t\t}\n\n\t\tconst materialIndexBuffer = MaterialNode.Materials.a;\n\n\t\t// Since materials are stored as indices, there's a bit of a mismatch between FBX and what\n\t\t// we expect.So we create an intermediate buffer that points to the index in the buffer,\n\t\t// for conforming with the other functions we've written for other data.\n\t\tconst materialIndices = [];\n\n\t\tfor ( let i = 0; i < materialIndexBuffer.length; ++ i ) {\n\n\t\t\tmaterialIndices.push( i );\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 1,\n\t\t\tbuffer: materialIndexBuffer,\n\t\t\tindices: materialIndices,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Generate a NurbGeometry from a node in FBXTree.Objects.Geometry\n\tparseNurbsGeometry( geoNode ) {\n\n\t\tconst order = parseInt( geoNode.Order );\n\n\t\tif ( isNaN( order ) ) {\n\n\t\t\tconsole.error( 'THREE.FBXLoader: Invalid Order %s given for geometry ID: %s', geoNode.Order, geoNode.id );\n\t\t\treturn new BufferGeometry();\n\n\t\t}\n\n\t\tconst degree = order - 1;\n\n\t\tconst knots = geoNode.KnotVector.a;\n\t\tconst controlPoints = [];\n\t\tconst pointsValues = geoNode.Points.a;\n\n\t\tfor ( let i = 0, l = pointsValues.length; i < l; i += 4 ) {\n\n\t\t\tcontrolPoints.push( new Vector4().fromArray( pointsValues, i ) );\n\n\t\t}\n\n\t\tlet startKnot, endKnot;\n\n\t\tif ( geoNode.Form === 'Closed' ) {\n\n\t\t\tcontrolPoints.push( controlPoints[ 0 ] );\n\n\t\t} else if ( geoNode.Form === 'Periodic' ) {\n\n\t\t\tstartKnot = degree;\n\t\t\tendKnot = knots.length - 1 - startKnot;\n\n\t\t\tfor ( let i = 0; i < degree; ++ i ) {\n\n\t\t\t\tcontrolPoints.push( controlPoints[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst curve = new NURBSCurve( degree, knots, controlPoints, startKnot, endKnot );\n\t\tconst points = curve.getPoints( controlPoints.length * 12 );\n\n\t\treturn new BufferGeometry().setFromPoints( points );\n\n\t}\n\n}\n\n// parse animation data from FBXTree\nclass AnimationParser {\n\n\t// take raw animation clips and turn them into three.js animation clips\n\tparse() {\n\n\t\tconst animationClips = [];\n\n\t\tconst rawClips = this.parseClips();\n\n\t\tif ( rawClips !== undefined ) {\n\n\t\t\tfor ( const key in rawClips ) {\n\n\t\t\t\tconst rawClip = rawClips[ key ];\n\n\t\t\t\tconst clip = this.addClip( rawClip );\n\n\t\t\t\tanimationClips.push( clip );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animationClips;\n\n\t}\n\n\tparseClips() {\n\n\t\t// since the actual transformation data is stored in FBXTree.Objects.AnimationCurve,\n\t\t// if this is undefined we can safely assume there are no animations\n\t\tif ( fbxTree.Objects.AnimationCurve === undefined ) return undefined;\n\n\t\tconst curveNodesMap = this.parseAnimationCurveNodes();\n\n\t\tthis.parseAnimationCurves( curveNodesMap );\n\n\t\tconst layersMap = this.parseAnimationLayers( curveNodesMap );\n\t\tconst rawClips = this.parseAnimStacks( layersMap );\n\n\t\treturn rawClips;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationCurveNode\n\t// each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation )\n\t// and is referenced by an AnimationLayer\n\tparseAnimationCurveNodes() {\n\n\t\tconst rawCurveNodes = fbxTree.Objects.AnimationCurveNode;\n\n\t\tconst curveNodesMap = new Map();\n\n\t\tfor ( const nodeID in rawCurveNodes ) {\n\n\t\t\tconst rawCurveNode = rawCurveNodes[ nodeID ];\n\n\t\t\tif ( rawCurveNode.attrName.match( /S|R|T|DeformPercent/ ) !== null ) {\n\n\t\t\t\tconst curveNode = {\n\n\t\t\t\t\tid: rawCurveNode.id,\n\t\t\t\t\tattr: rawCurveNode.attrName,\n\t\t\t\t\tcurves: {},\n\n\t\t\t\t};\n\n\t\t\t\tcurveNodesMap.set( curveNode.id, curveNode );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn curveNodesMap;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationCurve and connect them up to\n\t// previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated\n\t// axis ( e.g. times and values of x rotation)\n\tparseAnimationCurves( curveNodesMap ) {\n\n\t\tconst rawCurves = fbxTree.Objects.AnimationCurve;\n\n\t\t// TODO: Many values are identical up to roundoff error, but won't be optimised\n\t\t// e.g. position times: [0, 0.4, 0. 8]\n\t\t// position values: [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.235384487103147e-7, 93.67520904541016, -0.9982695579528809]\n\t\t// clearly, this should be optimised to\n\t\t// times: [0], positions [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809]\n\t\t// this shows up in nearly every FBX file, and generally time array is length > 100\n\n\t\tfor ( const nodeID in rawCurves ) {\n\n\t\t\tconst animationCurve = {\n\n\t\t\t\tid: rawCurves[ nodeID ].id,\n\t\t\t\ttimes: rawCurves[ nodeID ].KeyTime.a.map( convertFBXTimeToSeconds ),\n\t\t\t\tvalues: rawCurves[ nodeID ].KeyValueFloat.a,\n\n\t\t\t};\n\n\t\t\tconst relationships = connections.get( animationCurve.id );\n\n\t\t\tif ( relationships !== undefined ) {\n\n\t\t\t\tconst animationCurveID = relationships.parents[ 0 ].ID;\n\t\t\t\tconst animationCurveRelationship = relationships.parents[ 0 ].relationship;\n\n\t\t\t\tif ( animationCurveRelationship.match( /X/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'x' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /Y/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'y' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /Z/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'z' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /DeformPercent/ ) && curveNodesMap.has( animationCurveID ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'morph' ] = animationCurve;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references\n\t// to various AnimationCurveNodes and is referenced by an AnimationStack node\n\t// note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack\n\tparseAnimationLayers( curveNodesMap ) {\n\n\t\tconst rawLayers = fbxTree.Objects.AnimationLayer;\n\n\t\tconst layersMap = new Map();\n\n\t\tfor ( const nodeID in rawLayers ) {\n\n\t\t\tconst layerCurveNodes = [];\n\n\t\t\tconst connection = connections.get( parseInt( nodeID ) );\n\n\t\t\tif ( connection !== undefined ) {\n\n\t\t\t\t// all the animationCurveNodes used in the layer\n\t\t\t\tconst children = connection.children;\n\n\t\t\t\tchildren.forEach( function ( child, i ) {\n\n\t\t\t\t\tif ( curveNodesMap.has( child.ID ) ) {\n\n\t\t\t\t\t\tconst curveNode = curveNodesMap.get( child.ID );\n\n\t\t\t\t\t\t// check that the curves are defined for at least one axis, otherwise ignore the curveNode\n\t\t\t\t\t\tif ( curveNode.curves.x !== undefined || curveNode.curves.y !== undefined || curveNode.curves.z !== undefined ) {\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconst modelID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tif ( modelID !== undefined ) {\n\n\t\t\t\t\t\t\t\t\tconst rawModel = fbxTree.Objects.Model[ modelID.toString() ];\n\n\t\t\t\t\t\t\t\t\tif ( rawModel === undefined ) {\n\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered a unused curve.', child );\n\t\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst node = {\n\n\t\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\t\tID: rawModel.id,\n\t\t\t\t\t\t\t\t\t\tinitialPosition: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\tinitialRotation: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\tinitialScale: [ 1, 1, 1 ],\n\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tsceneGraph.traverse( function ( child ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( child.ID === rawModel.id ) {\n\n\t\t\t\t\t\t\t\t\t\t\tnode.transform = child.matrix;\n\n\t\t\t\t\t\t\t\t\t\t\tif ( child.userData.transformData ) node.eulerOrder = child.userData.transformData.eulerOrder;\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t\tif ( ! node.transform ) node.transform = new Matrix4();\n\n\t\t\t\t\t\t\t\t\t// if the animated model is pre rotated, we'll have to apply the pre rotations to every\n\t\t\t\t\t\t\t\t\t// animation value as well\n\t\t\t\t\t\t\t\t\tif ( 'PreRotation' in rawModel ) node.preRotation = rawModel.PreRotation.value;\n\t\t\t\t\t\t\t\t\tif ( 'PostRotation' in rawModel ) node.postRotation = rawModel.PostRotation.value;\n\n\t\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] ) layerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t} else if ( curveNode.curves.morph !== undefined ) {\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconst deformerID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tconst morpherID = connections.get( deformerID ).parents[ 0 ].ID;\n\t\t\t\t\t\t\t\tconst geoID = connections.get( morpherID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\t// assuming geometry is not used in more than one model\n\t\t\t\t\t\t\t\tconst modelID = connections.get( geoID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tconst rawModel = fbxTree.Objects.Model[ modelID ];\n\n\t\t\t\t\t\t\t\tconst node = {\n\n\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\tmorphName: fbxTree.Objects.Deformer[ deformerID ].attrName,\n\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlayerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tlayersMap.set( parseInt( nodeID ), layerCurveNodes );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn layersMap;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation\n\t// hierarchy. Each Stack node will be used to create a AnimationClip\n\tparseAnimStacks( layersMap ) {\n\n\t\tconst rawStacks = fbxTree.Objects.AnimationStack;\n\n\t\t// connect the stacks (clips) up to the layers\n\t\tconst rawClips = {};\n\n\t\tfor ( const nodeID in rawStacks ) {\n\n\t\t\tconst children = connections.get( parseInt( nodeID ) ).children;\n\n\t\t\tif ( children.length > 1 ) {\n\n\t\t\t\t// it seems like stacks will always be associated with a single layer. But just in case there are files\n\t\t\t\t// where there are multiple layers per stack, we'll display a warning\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.' );\n\n\t\t\t}\n\n\t\t\tconst layer = layersMap.get( children[ 0 ].ID );\n\n\t\t\trawClips[ nodeID ] = {\n\n\t\t\t\tname: rawStacks[ nodeID ].attrName,\n\t\t\t\tlayer: layer,\n\n\t\t\t};\n\n\t\t}\n\n\t\treturn rawClips;\n\n\t}\n\n\taddClip( rawClip ) {\n\n\t\tlet tracks = [];\n\n\t\tconst scope = this;\n\t\trawClip.layer.forEach( function ( rawTracks ) {\n\n\t\t\ttracks = tracks.concat( scope.generateTracks( rawTracks ) );\n\n\t\t} );\n\n\t\treturn new AnimationClip( rawClip.name, - 1, tracks );\n\n\t}\n\n\tgenerateTracks( rawTracks ) {\n\n\t\tconst tracks = [];\n\n\t\tlet initialPosition = new Vector3();\n\t\tlet initialScale = new Vector3();\n\n\t\tif ( rawTracks.transform ) rawTracks.transform.decompose( initialPosition, new Quaternion(), initialScale );\n\n\t\tinitialPosition = initialPosition.toArray();\n\t\tinitialScale = initialScale.toArray();\n\n\t\tif ( rawTracks.T !== undefined && Object.keys( rawTracks.T.curves ).length > 0 ) {\n\n\t\t\tconst positionTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.T.curves, initialPosition, 'position' );\n\t\t\tif ( positionTrack !== undefined ) tracks.push( positionTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.R !== undefined && Object.keys( rawTracks.R.curves ).length > 0 ) {\n\n\t\t\tconst rotationTrack = this.generateRotationTrack( rawTracks.modelName, rawTracks.R.curves, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder );\n\t\t\tif ( rotationTrack !== undefined ) tracks.push( rotationTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.S !== undefined && Object.keys( rawTracks.S.curves ).length > 0 ) {\n\n\t\t\tconst scaleTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.S.curves, initialScale, 'scale' );\n\t\t\tif ( scaleTrack !== undefined ) tracks.push( scaleTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.DeformPercent !== undefined ) {\n\n\t\t\tconst morphTrack = this.generateMorphTrack( rawTracks );\n\t\t\tif ( morphTrack !== undefined ) tracks.push( morphTrack );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\tgenerateVectorTrack( modelName, curves, initialValue, type ) {\n\n\t\tconst times = this.getTimesForAllAxes( curves );\n\t\tconst values = this.getKeyframeTrackValues( times, curves, initialValue );\n\n\t\treturn new VectorKeyframeTrack( modelName + '.' + type, times, values );\n\n\t}\n\n\tgenerateRotationTrack( modelName, curves, preRotation, postRotation, eulerOrder ) {\n\n\t\tlet times;\n\t\tlet values;\n\n\t\tif ( curves.x !== undefined && curves.y !== undefined && curves.z !== undefined ) {\n\n\t\t\tconst result = this.interpolateRotations( curves.x, curves.y, curves.z, eulerOrder );\n\n\t\t\ttimes = result[ 0 ];\n\t\t\tvalues = result[ 1 ];\n\n\t\t}\n\n\t\tif ( preRotation !== undefined ) {\n\n\t\t\tpreRotation = preRotation.map( MathUtils.degToRad );\n\t\t\tpreRotation.push( eulerOrder );\n\n\t\t\tpreRotation = new Euler().fromArray( preRotation );\n\t\t\tpreRotation = new Quaternion().setFromEuler( preRotation );\n\n\t\t}\n\n\t\tif ( postRotation !== undefined ) {\n\n\t\t\tpostRotation = postRotation.map( MathUtils.degToRad );\n\t\t\tpostRotation.push( eulerOrder );\n\n\t\t\tpostRotation = new Euler().fromArray( postRotation );\n\t\t\tpostRotation = new Quaternion().setFromEuler( postRotation ).invert();\n\n\t\t}\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst euler = new Euler();\n\n\t\tconst quaternionValues = [];\n\n\t\tif ( ! values || ! times ) return new QuaternionKeyframeTrack( modelName + '.quaternion', [ 0 ], [ 0 ] );\n\n\t\tfor ( let i = 0; i < values.length; i += 3 ) {\n\n\t\t\teuler.set( values[ i ], values[ i + 1 ], values[ i + 2 ], eulerOrder );\n\t\t\tquaternion.setFromEuler( euler );\n\n\t\t\tif ( preRotation !== undefined ) quaternion.premultiply( preRotation );\n\t\t\tif ( postRotation !== undefined ) quaternion.multiply( postRotation );\n\n\t\t\t// Check unroll\n\t\t\tif ( i > 2 ) {\n\n\t\t\t\tconst prevQuat = new Quaternion().fromArray(\n\t\t\t\t\tquaternionValues,\n\t\t\t\t\t( ( i - 3 ) / 3 ) * 4\n\t\t\t\t);\n\n\t\t\t\tif ( prevQuat.dot( quaternion ) < 0 ) {\n\n\t\t\t\t\tquaternion.set( - quaternion.x, - quaternion.y, - quaternion.z, - quaternion.w );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tquaternion.toArray( quaternionValues, ( i / 3 ) * 4 );\n\n\t\t}\n\n\t\treturn new QuaternionKeyframeTrack( modelName + '.quaternion', times, quaternionValues );\n\n\t}\n\n\tgenerateMorphTrack( rawTracks ) {\n\n\t\tconst curves = rawTracks.DeformPercent.curves.morph;\n\t\tconst values = curves.values.map( function ( val ) {\n\n\t\t\treturn val / 100;\n\n\t\t} );\n\n\t\tconst morphNum = sceneGraph.getObjectByName( rawTracks.modelName ).morphTargetDictionary[ rawTracks.morphName ];\n\n\t\treturn new NumberKeyframeTrack( rawTracks.modelName + '.morphTargetInfluences[' + morphNum + ']', curves.times, values );\n\n\t}\n\n\t// For all animated objects, times are defined separately for each axis\n\t// Here we'll combine the times into one sorted array without duplicates\n\tgetTimesForAllAxes( curves ) {\n\n\t\tlet times = [];\n\n\t\t// first join together the times for each axis, if defined\n\t\tif ( curves.x !== undefined ) times = times.concat( curves.x.times );\n\t\tif ( curves.y !== undefined ) times = times.concat( curves.y.times );\n\t\tif ( curves.z !== undefined ) times = times.concat( curves.z.times );\n\n\t\t// then sort them\n\t\ttimes = times.sort( function ( a, b ) {\n\n\t\t\treturn a - b;\n\n\t\t} );\n\n\t\t// and remove duplicates\n\t\tif ( times.length > 1 ) {\n\n\t\t\tlet targetIndex = 1;\n\t\t\tlet lastValue = times[ 0 ];\n\t\t\tfor ( let i = 1; i < times.length; i ++ ) {\n\n\t\t\t\tconst currentValue = times[ i ];\n\t\t\t\tif ( currentValue !== lastValue ) {\n\n\t\t\t\t\ttimes[ targetIndex ] = currentValue;\n\t\t\t\t\tlastValue = currentValue;\n\t\t\t\t\ttargetIndex ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttimes = times.slice( 0, targetIndex );\n\n\t\t}\n\n\t\treturn times;\n\n\t}\n\n\tgetKeyframeTrackValues( times, curves, initialValue ) {\n\n\t\tconst prevValue = initialValue;\n\n\t\tconst values = [];\n\n\t\tlet xIndex = - 1;\n\t\tlet yIndex = - 1;\n\t\tlet zIndex = - 1;\n\n\t\ttimes.forEach( function ( time ) {\n\n\t\t\tif ( curves.x ) xIndex = curves.x.times.indexOf( time );\n\t\t\tif ( curves.y ) yIndex = curves.y.times.indexOf( time );\n\t\t\tif ( curves.z ) zIndex = curves.z.times.indexOf( time );\n\n\t\t\t// if there is an x value defined for this frame, use that\n\t\t\tif ( xIndex !== - 1 ) {\n\n\t\t\t\tconst xValue = curves.x.values[ xIndex ];\n\t\t\t\tvalues.push( xValue );\n\t\t\t\tprevValue[ 0 ] = xValue;\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise use the x value from the previous frame\n\t\t\t\tvalues.push( prevValue[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( yIndex !== - 1 ) {\n\n\t\t\t\tconst yValue = curves.y.values[ yIndex ];\n\t\t\t\tvalues.push( yValue );\n\t\t\t\tprevValue[ 1 ] = yValue;\n\n\t\t\t} else {\n\n\t\t\t\tvalues.push( prevValue[ 1 ] );\n\n\t\t\t}\n\n\t\t\tif ( zIndex !== - 1 ) {\n\n\t\t\t\tconst zValue = curves.z.values[ zIndex ];\n\t\t\t\tvalues.push( zValue );\n\t\t\t\tprevValue[ 2 ] = zValue;\n\n\t\t\t} else {\n\n\t\t\t\tvalues.push( prevValue[ 2 ] );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn values;\n\n\t}\n\n\t// Rotations are defined as Euler angles which can have values of any size\n\t// These will be converted to quaternions which don't support values greater than\n\t// PI, so we'll interpolate large rotations\n\tinterpolateRotations( curvex, curvey, curvez, eulerOrder ) {\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\t// Add first frame\n\t\ttimes.push( curvex.times[ 0 ] );\n\t\tvalues.push( MathUtils.degToRad( curvex.values[ 0 ] ) );\n\t\tvalues.push( MathUtils.degToRad( curvey.values[ 0 ] ) );\n\t\tvalues.push( MathUtils.degToRad( curvez.values[ 0 ] ) );\n\n\t\tfor ( let i = 1; i < curvex.values.length; i ++ ) {\n\n\t\t\tconst initialValue = [\n\t\t\t\tcurvex.values[ i - 1 ],\n\t\t\t\tcurvey.values[ i - 1 ],\n\t\t\t\tcurvez.values[ i - 1 ],\n\t\t\t];\n\n\t\t\tif ( isNaN( initialValue[ 0 ] ) || isNaN( initialValue[ 1 ] ) || isNaN( initialValue[ 2 ] ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst initialValueRad = initialValue.map( MathUtils.degToRad );\n\n\t\t\tconst currentValue = [\n\t\t\t\tcurvex.values[ i ],\n\t\t\t\tcurvey.values[ i ],\n\t\t\t\tcurvez.values[ i ],\n\t\t\t];\n\n\t\t\tif ( isNaN( currentValue[ 0 ] ) || isNaN( currentValue[ 1 ] ) || isNaN( currentValue[ 2 ] ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValueRad = currentValue.map( MathUtils.degToRad );\n\n\t\t\tconst valuesSpan = [\n\t\t\t\tcurrentValue[ 0 ] - initialValue[ 0 ],\n\t\t\t\tcurrentValue[ 1 ] - initialValue[ 1 ],\n\t\t\t\tcurrentValue[ 2 ] - initialValue[ 2 ],\n\t\t\t];\n\n\t\t\tconst absoluteSpan = [\n\t\t\t\tMath.abs( valuesSpan[ 0 ] ),\n\t\t\t\tMath.abs( valuesSpan[ 1 ] ),\n\t\t\t\tMath.abs( valuesSpan[ 2 ] ),\n\t\t\t];\n\n\t\t\tif ( absoluteSpan[ 0 ] >= 180 || absoluteSpan[ 1 ] >= 180 || absoluteSpan[ 2 ] >= 180 ) {\n\n\t\t\t\tconst maxAbsSpan = Math.max( ...absoluteSpan );\n\n\t\t\t\tconst numSubIntervals = maxAbsSpan / 180;\n\n\t\t\t\tconst E1 = new Euler( ...initialValueRad, eulerOrder );\n\t\t\t\tconst E2 = new Euler( ...currentValueRad, eulerOrder );\n\n\t\t\t\tconst Q1 = new Quaternion().setFromEuler( E1 );\n\t\t\t\tconst Q2 = new Quaternion().setFromEuler( E2 );\n\n\t\t\t\t// Check unroll\n\t\t\t\tif ( Q1.dot( Q2 ) ) {\n\n\t\t\t\t\tQ2.set( - Q2.x, - Q2.y, - Q2.z, - Q2.w );\n\n\t\t\t\t}\n\n\t\t\t\t// Interpolate\n\t\t\t\tconst initialTime = curvex.times[ i - 1 ];\n\t\t\t\tconst timeSpan = curvex.times[ i ] - initialTime;\n\n\t\t\t\tconst Q = new Quaternion();\n\t\t\t\tconst E = new Euler();\n\t\t\t\tfor ( let t = 0; t < 1; t += 1 / numSubIntervals ) {\n\n\t\t\t\t\tQ.copy( Q1.clone().slerp( Q2.clone(), t ) );\n\n\t\t\t\t\ttimes.push( initialTime + t * timeSpan );\n\t\t\t\t\tE.setFromQuaternion( Q, eulerOrder );\n\n\t\t\t\t\tvalues.push( E.x );\n\t\t\t\t\tvalues.push( E.y );\n\t\t\t\t\tvalues.push( E.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttimes.push( curvex.times[ i ] );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvex.values[ i ] ) );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvey.values[ i ] ) );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvez.values[ i ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn [ times, values ];\n\n\t}\n\n}\n\n// parse an FBX file in ASCII format\nclass TextParser {\n\n\tgetPrevNode() {\n\n\t\treturn this.nodeStack[ this.currentIndent - 2 ];\n\n\t}\n\n\tgetCurrentNode() {\n\n\t\treturn this.nodeStack[ this.currentIndent - 1 ];\n\n\t}\n\n\tgetCurrentProp() {\n\n\t\treturn this.currentProp;\n\n\t}\n\n\tpushStack( node ) {\n\n\t\tthis.nodeStack.push( node );\n\t\tthis.currentIndent += 1;\n\n\t}\n\n\tpopStack() {\n\n\t\tthis.nodeStack.pop();\n\t\tthis.currentIndent -= 1;\n\n\t}\n\n\tsetCurrentProp( val, name ) {\n\n\t\tthis.currentProp = val;\n\t\tthis.currentPropName = name;\n\n\t}\n\n\tparse( text ) {\n\n\t\tthis.currentIndent = 0;\n\n\t\tthis.allNodes = new FBXTree();\n\t\tthis.nodeStack = [];\n\t\tthis.currentProp = [];\n\t\tthis.currentPropName = '';\n\n\t\tconst scope = this;\n\n\t\tconst split = text.split( /[\\r\\n]+/ );\n\n\t\tsplit.forEach( function ( line, i ) {\n\n\t\t\tconst matchComment = line.match( /^[\\s\\t]*;/ );\n\t\t\tconst matchEmpty = line.match( /^[\\s\\t]*$/ );\n\n\t\t\tif ( matchComment || matchEmpty ) return;\n\n\t\t\tconst matchBeginning = line.match( '^\\\\t{' + scope.currentIndent + '}(\\\\w+):(.*){', '' );\n\t\t\tconst matchProperty = line.match( '^\\\\t{' + ( scope.currentIndent ) + '}(\\\\w+):[\\\\s\\\\t\\\\r\\\\n](.*)' );\n\t\t\tconst matchEnd = line.match( '^\\\\t{' + ( scope.currentIndent - 1 ) + '}}' );\n\n\t\t\tif ( matchBeginning ) {\n\n\t\t\t\tscope.parseNodeBegin( line, matchBeginning );\n\n\t\t\t} else if ( matchProperty ) {\n\n\t\t\t\tscope.parseNodeProperty( line, matchProperty, split[ ++ i ] );\n\n\t\t\t} else if ( matchEnd ) {\n\n\t\t\t\tscope.popStack();\n\n\t\t\t} else if ( line.match( /^[^\\s\\t}]/ ) ) {\n\n\t\t\t\t// large arrays are split over multiple lines terminated with a ',' character\n\t\t\t\t// if this is encountered the line needs to be joined to the previous line\n\t\t\t\tscope.parseNodePropertyContinued( line );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this.allNodes;\n\n\t}\n\n\tparseNodeBegin( line, property ) {\n\n\t\tconst nodeName = property[ 1 ].trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\tconst nodeAttrs = property[ 2 ].split( ',' ).map( function ( attr ) {\n\n\t\t\treturn attr.trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\t} );\n\n\t\tconst node = { name: nodeName };\n\t\tconst attrs = this.parseNodeAttr( nodeAttrs );\n\n\t\tconst currentNode = this.getCurrentNode();\n\n\t\t// a top node\n\t\tif ( this.currentIndent === 0 ) {\n\n\t\t\tthis.allNodes.add( nodeName, node );\n\n\t\t} else { // a subnode\n\n\t\t\t// if the subnode already exists, append it\n\t\t\tif ( nodeName in currentNode ) {\n\n\t\t\t\t// special case Pose needs PoseNodes as an array\n\t\t\t\tif ( nodeName === 'PoseNode' ) {\n\n\t\t\t\t\tcurrentNode.PoseNode.push( node );\n\n\t\t\t\t} else if ( currentNode[ nodeName ].id !== undefined ) {\n\n\t\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\t\tcurrentNode[ nodeName ][ currentNode[ nodeName ].id ] = currentNode[ nodeName ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( attrs.id !== '' ) currentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t} else if ( typeof attrs.id === 'number' ) {\n\n\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\tcurrentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t} else if ( nodeName !== 'Properties70' ) {\n\n\t\t\t\tif ( nodeName === 'PoseNode' )\tcurrentNode[ nodeName ] = [ node ];\n\t\t\t\telse currentNode[ nodeName ] = node;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( typeof attrs.id === 'number' ) node.id = attrs.id;\n\t\tif ( attrs.name !== '' ) node.attrName = attrs.name;\n\t\tif ( attrs.type !== '' ) node.attrType = attrs.type;\n\n\t\tthis.pushStack( node );\n\n\t}\n\n\tparseNodeAttr( attrs ) {\n\n\t\tlet id = attrs[ 0 ];\n\n\t\tif ( attrs[ 0 ] !== '' ) {\n\n\t\t\tid = parseInt( attrs[ 0 ] );\n\n\t\t\tif ( isNaN( id ) ) {\n\n\t\t\t\tid = attrs[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet name = '', type = '';\n\n\t\tif ( attrs.length > 1 ) {\n\n\t\t\tname = attrs[ 1 ].replace( /^(\\w+)::/, '' );\n\t\t\ttype = attrs[ 2 ];\n\n\t\t}\n\n\t\treturn { id: id, name: name, type: type };\n\n\t}\n\n\tparseNodeProperty( line, property, contentLine ) {\n\n\t\tlet propName = property[ 1 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\t\tlet propValue = property[ 2 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\n\t\t// for special case: base64 image data follows \"Content: ,\" line\n\t\t//\tContent: ,\n\t\t//\t \"/9j/4RDaRXhpZgAATU0A...\"\n\t\tif ( propName === 'Content' && propValue === ',' ) {\n\n\t\t\tpropValue = contentLine.replace( /\"/g, '' ).replace( /,$/, '' ).trim();\n\n\t\t}\n\n\t\tconst currentNode = this.getCurrentNode();\n\t\tconst parentName = currentNode.name;\n\n\t\tif ( parentName === 'Properties70' ) {\n\n\t\t\tthis.parseNodeSpecialProperty( line, propName, propValue );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Connections\n\t\tif ( propName === 'C' ) {\n\n\t\t\tconst connProps = propValue.split( ',' ).slice( 1 );\n\t\t\tconst from = parseInt( connProps[ 0 ] );\n\t\t\tconst to = parseInt( connProps[ 1 ] );\n\n\t\t\tlet rest = propValue.split( ',' ).slice( 3 );\n\n\t\t\trest = rest.map( function ( elem ) {\n\n\t\t\t\treturn elem.trim().replace( /^\"/, '' );\n\n\t\t\t} );\n\n\t\t\tpropName = 'connections';\n\t\t\tpropValue = [ from, to ];\n\t\t\tappend( propValue, rest );\n\n\t\t\tif ( currentNode[ propName ] === undefined ) {\n\n\t\t\t\tcurrentNode[ propName ] = [];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Node\n\t\tif ( propName === 'Node' ) currentNode.id = propValue;\n\n\t\t// connections\n\t\tif ( propName in currentNode && Array.isArray( currentNode[ propName ] ) ) {\n\n\t\t\tcurrentNode[ propName ].push( propValue );\n\n\t\t} else {\n\n\t\t\tif ( propName !== 'a' ) currentNode[ propName ] = propValue;\n\t\t\telse currentNode.a = propValue;\n\n\t\t}\n\n\t\tthis.setCurrentProp( currentNode, propName );\n\n\t\t// convert string to array, unless it ends in ',' in which case more will be added to it\n\t\tif ( propName === 'a' && propValue.slice( - 1 ) !== ',' ) {\n\n\t\t\tcurrentNode.a = parseNumberArray( propValue );\n\n\t\t}\n\n\t}\n\n\tparseNodePropertyContinued( line ) {\n\n\t\tconst currentNode = this.getCurrentNode();\n\n\t\tcurrentNode.a += line;\n\n\t\t// if the line doesn't end in ',' we have reached the end of the property value\n\t\t// so convert the string to an array\n\t\tif ( line.slice( - 1 ) !== ',' ) {\n\n\t\t\tcurrentNode.a = parseNumberArray( currentNode.a );\n\n\t\t}\n\n\t}\n\n\t// parse \"Property70\"\n\tparseNodeSpecialProperty( line, propName, propValue ) {\n\n\t\t// split this\n\t\t// P: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\",1,1,1\n\t\t// into array like below\n\t\t// [\"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\", \"1,1,1\" ]\n\t\tconst props = propValue.split( '\",' ).map( function ( prop ) {\n\n\t\t\treturn prop.trim().replace( /^\\\"/, '' ).replace( /\\s/, '_' );\n\n\t\t} );\n\n\t\tconst innerPropName = props[ 0 ];\n\t\tconst innerPropType1 = props[ 1 ];\n\t\tconst innerPropType2 = props[ 2 ];\n\t\tconst innerPropFlag = props[ 3 ];\n\t\tlet innerPropValue = props[ 4 ];\n\n\t\t// cast values where needed, otherwise leave as strings\n\t\tswitch ( innerPropType1 ) {\n\n\t\t\tcase 'int':\n\t\t\tcase 'enum':\n\t\t\tcase 'bool':\n\t\t\tcase 'ULongLong':\n\t\t\tcase 'double':\n\t\t\tcase 'Number':\n\t\t\tcase 'FieldOfView':\n\t\t\t\tinnerPropValue = parseFloat( innerPropValue );\n\t\t\t\tbreak;\n\n\t\t\tcase 'Color':\n\t\t\tcase 'ColorRGB':\n\t\t\tcase 'Vector3D':\n\t\t\tcase 'Lcl_Translation':\n\t\t\tcase 'Lcl_Rotation':\n\t\t\tcase 'Lcl_Scaling':\n\t\t\t\tinnerPropValue = parseNumberArray( innerPropValue );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// CAUTION: these props must append to parent's parent\n\t\tthis.getPrevNode()[ innerPropName ] = {\n\n\t\t\t'type': innerPropType1,\n\t\t\t'type2': innerPropType2,\n\t\t\t'flag': innerPropFlag,\n\t\t\t'value': innerPropValue\n\n\t\t};\n\n\t\tthis.setCurrentProp( this.getPrevNode(), innerPropName );\n\n\t}\n\n}\n\n// Parse an FBX file in Binary format\nclass BinaryParser {\n\n\tparse( buffer ) {\n\n\t\tconst reader = new BinaryReader( buffer );\n\t\treader.skip( 23 ); // skip magic 23 bytes\n\n\t\tconst version = reader.getUint32();\n\n\t\tif ( version < 6400 ) {\n\n\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + version );\n\n\t\t}\n\n\t\tconst allNodes = new FBXTree();\n\n\t\twhile ( ! this.endOfContent( reader ) ) {\n\n\t\t\tconst node = this.parseNode( reader, version );\n\t\t\tif ( node !== null ) allNodes.add( node.name, node );\n\n\t\t}\n\n\t\treturn allNodes;\n\n\t}\n\n\t// Check if reader has reached the end of content.\n\tendOfContent( reader ) {\n\n\t\t// footer size: 160bytes + 16-byte alignment padding\n\t\t// - 16bytes: magic\n\t\t// - padding til 16-byte alignment (at least 1byte?)\n\t\t//\t(seems like some exporters embed fixed 15 or 16bytes?)\n\t\t// - 4bytes: magic\n\t\t// - 4bytes: version\n\t\t// - 120bytes: zero\n\t\t// - 16bytes: magic\n\t\tif ( reader.size() % 16 === 0 ) {\n\n\t\t\treturn ( ( reader.getOffset() + 160 + 16 ) & ~ 0xf ) >= reader.size();\n\n\t\t} else {\n\n\t\t\treturn reader.getOffset() + 160 + 16 >= reader.size();\n\n\t\t}\n\n\t}\n\n\t// recursively parse nodes until the end of the file is reached\n\tparseNode( reader, version ) {\n\n\t\tconst node = {};\n\n\t\t// The first three data sizes depends on version.\n\t\tconst endOffset = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\t\tconst numProperties = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\n\t\t( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); // the returned propertyListLen is not used\n\n\t\tconst nameLen = reader.getUint8();\n\t\tconst name = reader.getString( nameLen );\n\n\t\t// Regards this node as NULL-record if endOffset is zero\n\t\tif ( endOffset === 0 ) return null;\n\n\t\tconst propertyList = [];\n\n\t\tfor ( let i = 0; i < numProperties; i ++ ) {\n\n\t\t\tpropertyList.push( this.parseProperty( reader ) );\n\n\t\t}\n\n\t\t// Regards the first three elements in propertyList as id, attrName, and attrType\n\t\tconst id = propertyList.length > 0 ? propertyList[ 0 ] : '';\n\t\tconst attrName = propertyList.length > 1 ? propertyList[ 1 ] : '';\n\t\tconst attrType = propertyList.length > 2 ? propertyList[ 2 ] : '';\n\n\t\t// check if this node represents just a single property\n\t\t// like (name, 0) set or (name2, [0, 1, 2]) set of {name: 0, name2: [0, 1, 2]}\n\t\tnode.singleProperty = ( numProperties === 1 && reader.getOffset() === endOffset ) ? true : false;\n\n\t\twhile ( endOffset > reader.getOffset() ) {\n\n\t\t\tconst subNode = this.parseNode( reader, version );\n\n\t\t\tif ( subNode !== null ) this.parseSubNode( name, node, subNode );\n\n\t\t}\n\n\t\tnode.propertyList = propertyList; // raw property list used by parent\n\n\t\tif ( typeof id === 'number' ) node.id = id;\n\t\tif ( attrName !== '' ) node.attrName = attrName;\n\t\tif ( attrType !== '' ) node.attrType = attrType;\n\t\tif ( name !== '' ) node.name = name;\n\n\t\treturn node;\n\n\t}\n\n\tparseSubNode( name, node, subNode ) {\n\n\t\t// special case: child node is single property\n\t\tif ( subNode.singleProperty === true ) {\n\n\t\t\tconst value = subNode.propertyList[ 0 ];\n\n\t\t\tif ( Array.isArray( value ) ) {\n\n\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t\tsubNode.a = value;\n\n\t\t\t} else {\n\n\t\t\t\tnode[ subNode.name ] = value;\n\n\t\t\t}\n\n\t\t} else if ( name === 'Connections' && subNode.name === 'C' ) {\n\n\t\t\tconst array = [];\n\n\t\t\tsubNode.propertyList.forEach( function ( property, i ) {\n\n\t\t\t\t// first Connection is FBX type (OO, OP, etc.). We'll discard these\n\t\t\t\tif ( i !== 0 ) array.push( property );\n\n\t\t\t} );\n\n\t\t\tif ( node.connections === undefined ) {\n\n\t\t\t\tnode.connections = [];\n\n\t\t\t}\n\n\t\t\tnode.connections.push( array );\n\n\t\t} else if ( subNode.name === 'Properties70' ) {\n\n\t\t\tconst keys = Object.keys( subNode );\n\n\t\t\tkeys.forEach( function ( key ) {\n\n\t\t\t\tnode[ key ] = subNode[ key ];\n\n\t\t\t} );\n\n\t\t} else if ( name === 'Properties70' && subNode.name === 'P' ) {\n\n\t\t\tlet innerPropName = subNode.propertyList[ 0 ];\n\t\t\tlet innerPropType1 = subNode.propertyList[ 1 ];\n\t\t\tconst innerPropType2 = subNode.propertyList[ 2 ];\n\t\t\tconst innerPropFlag = subNode.propertyList[ 3 ];\n\t\t\tlet innerPropValue;\n\n\t\t\tif ( innerPropName.indexOf( 'Lcl ' ) === 0 ) innerPropName = innerPropName.replace( 'Lcl ', 'Lcl_' );\n\t\t\tif ( innerPropType1.indexOf( 'Lcl ' ) === 0 ) innerPropType1 = innerPropType1.replace( 'Lcl ', 'Lcl_' );\n\n\t\t\tif ( innerPropType1 === 'Color' || innerPropType1 === 'ColorRGB' || innerPropType1 === 'Vector' || innerPropType1 === 'Vector3D' || innerPropType1.indexOf( 'Lcl_' ) === 0 ) {\n\n\t\t\t\tinnerPropValue = [\n\t\t\t\t\tsubNode.propertyList[ 4 ],\n\t\t\t\t\tsubNode.propertyList[ 5 ],\n\t\t\t\t\tsubNode.propertyList[ 6 ]\n\t\t\t\t];\n\n\t\t\t} else {\n\n\t\t\t\tinnerPropValue = subNode.propertyList[ 4 ];\n\n\t\t\t}\n\n\t\t\t// this will be copied to parent, see above\n\t\t\tnode[ innerPropName ] = {\n\n\t\t\t\t'type': innerPropType1,\n\t\t\t\t'type2': innerPropType2,\n\t\t\t\t'flag': innerPropFlag,\n\t\t\t\t'value': innerPropValue\n\n\t\t\t};\n\n\t\t} else if ( node[ subNode.name ] === undefined ) {\n\n\t\t\tif ( typeof subNode.id === 'number' ) {\n\n\t\t\t\tnode[ subNode.name ] = {};\n\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t} else {\n\n\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( subNode.name === 'PoseNode' ) {\n\n\t\t\t\tif ( ! Array.isArray( node[ subNode.name ] ) ) {\n\n\t\t\t\t\tnode[ subNode.name ] = [ node[ subNode.name ] ];\n\n\t\t\t\t}\n\n\t\t\t\tnode[ subNode.name ].push( subNode );\n\n\t\t\t} else if ( node[ subNode.name ][ subNode.id ] === undefined ) {\n\n\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tparseProperty( reader ) {\n\n\t\tconst type = reader.getString( 1 );\n\t\tlet length;\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'C':\n\t\t\t\treturn reader.getBoolean();\n\n\t\t\tcase 'D':\n\t\t\t\treturn reader.getFloat64();\n\n\t\t\tcase 'F':\n\t\t\t\treturn reader.getFloat32();\n\n\t\t\tcase 'I':\n\t\t\t\treturn reader.getInt32();\n\n\t\t\tcase 'L':\n\t\t\t\treturn reader.getInt64();\n\n\t\t\tcase 'R':\n\t\t\t\tlength = reader.getUint32();\n\t\t\t\treturn reader.getArrayBuffer( length );\n\n\t\t\tcase 'S':\n\t\t\t\tlength = reader.getUint32();\n\t\t\t\treturn reader.getString( length );\n\n\t\t\tcase 'Y':\n\t\t\t\treturn reader.getInt16();\n\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'f':\n\t\t\tcase 'i':\n\t\t\tcase 'l':\n\n\t\t\t\tconst arrayLength = reader.getUint32();\n\t\t\t\tconst encoding = reader.getUint32(); // 0: non-compressed, 1: compressed\n\t\t\t\tconst compressedLength = reader.getUint32();\n\n\t\t\t\tif ( encoding === 0 ) {\n\n\t\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t\treturn reader.getBooleanArray( arrayLength );\n\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\treturn reader.getFloat64Array( arrayLength );\n\n\t\t\t\t\t\tcase 'f':\n\t\t\t\t\t\t\treturn reader.getFloat32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'i':\n\t\t\t\t\t\t\treturn reader.getInt32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\treturn reader.getInt64Array( arrayLength );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst data = fflate.unzlibSync( new Uint8Array( reader.getArrayBuffer( compressedLength ) ) );\n\t\t\t\tconst reader2 = new BinaryReader( data.buffer );\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'b':\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\treturn reader2.getBooleanArray( arrayLength );\n\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\treturn reader2.getFloat64Array( arrayLength );\n\n\t\t\t\t\tcase 'f':\n\t\t\t\t\t\treturn reader2.getFloat32Array( arrayLength );\n\n\t\t\t\t\tcase 'i':\n\t\t\t\t\t\treturn reader2.getInt32Array( arrayLength );\n\n\t\t\t\t\tcase 'l':\n\t\t\t\t\t\treturn reader2.getInt64Array( arrayLength );\n\n\t\t\t\t}\n\n\t\t\t\tbreak; // cannot happen but is required by the DeepScan\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown property type ' + type );\n\n\t\t}\n\n\t}\n\n}\n\nclass BinaryReader {\n\n\tconstructor( buffer, littleEndian ) {\n\n\t\tthis.dv = new DataView( buffer );\n\t\tthis.offset = 0;\n\t\tthis.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true;\n\t\tthis._textDecoder = new TextDecoder();\n\n\t}\n\n\tgetOffset() {\n\n\t\treturn this.offset;\n\n\t}\n\n\tsize() {\n\n\t\treturn this.dv.buffer.byteLength;\n\n\t}\n\n\tskip( length ) {\n\n\t\tthis.offset += length;\n\n\t}\n\n\t// seems like true/false representation depends on exporter.\n\t// true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54)\n\t// then sees LSB.\n\tgetBoolean() {\n\n\t\treturn ( this.getUint8() & 1 ) === 1;\n\n\t}\n\n\tgetBooleanArray( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getBoolean() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetUint8() {\n\n\t\tconst value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t}\n\n\tgetInt16() {\n\n\t\tconst value = this.dv.getInt16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t}\n\n\tgetInt32() {\n\n\t\tconst value = this.dv.getInt32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetInt32Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetUint32() {\n\n\t\tconst value = this.dv.getUint32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\t// JavaScript doesn't support 64-bit integer so calculate this here\n\t// 1 << 32 will return 1 so using multiply operation instead here.\n\t// There's a possibility that this method returns wrong value if the value\n\t// is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.\n\t// TODO: safely handle 64-bit integer\n\tgetInt64() {\n\n\t\tlet low, high;\n\n\t\tif ( this.littleEndian ) {\n\n\t\t\tlow = this.getUint32();\n\t\t\thigh = this.getUint32();\n\n\t\t} else {\n\n\t\t\thigh = this.getUint32();\n\t\t\tlow = this.getUint32();\n\n\t\t}\n\n\t\t// calculate negative value\n\t\tif ( high & 0x80000000 ) {\n\n\t\t\thigh = ~ high & 0xFFFFFFFF;\n\t\t\tlow = ~ low & 0xFFFFFFFF;\n\n\t\t\tif ( low === 0xFFFFFFFF ) high = ( high + 1 ) & 0xFFFFFFFF;\n\n\t\t\tlow = ( low + 1 ) & 0xFFFFFFFF;\n\n\t\t\treturn - ( high * 0x100000000 + low );\n\n\t\t}\n\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetInt64Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\t// Note: see getInt64() comment\n\tgetUint64() {\n\n\t\tlet low, high;\n\n\t\tif ( this.littleEndian ) {\n\n\t\t\tlow = this.getUint32();\n\t\t\thigh = this.getUint32();\n\n\t\t} else {\n\n\t\t\thigh = this.getUint32();\n\t\t\tlow = this.getUint32();\n\n\t\t}\n\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetFloat32() {\n\n\t\tconst value = this.dv.getFloat32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetFloat32Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetFloat64() {\n\n\t\tconst value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t}\n\n\tgetFloat64Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetArrayBuffer( size ) {\n\n\t\tconst value = this.dv.buffer.slice( this.offset, this.offset + size );\n\t\tthis.offset += size;\n\t\treturn value;\n\n\t}\n\n\tgetString( size ) {\n\n\t\tconst start = this.offset;\n\t\tlet a = new Uint8Array( this.dv.buffer, start, size );\n\n\t\tthis.skip( size );\n\n\t\tconst nullByte = a.indexOf( 0 );\n\t\tif ( nullByte >= 0 ) a = new Uint8Array( this.dv.buffer, start, nullByte );\n\n\t\treturn this._textDecoder.decode( a );\n\n\t}\n\n}\n\n// FBXTree holds a representation of the FBX data, returned by the TextParser ( FBX ASCII format)\n// and BinaryParser( FBX Binary format)\nclass FBXTree {\n\n\tadd( key, val ) {\n\n\t\tthis[ key ] = val;\n\n\t}\n\n}\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction isFbxFormatBinary( buffer ) {\n\n\tconst CORRECT = 'Kaydara\\u0020FBX\\u0020Binary\\u0020\\u0020\\0';\n\n\treturn buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString( buffer, 0, CORRECT.length );\n\n}\n\nfunction isFbxFormatASCII( text ) {\n\n\tconst CORRECT = [ 'K', 'a', 'y', 'd', 'a', 'r', 'a', '\\\\', 'F', 'B', 'X', '\\\\', 'B', 'i', 'n', 'a', 'r', 'y', '\\\\', '\\\\' ];\n\n\tlet cursor = 0;\n\n\tfunction read( offset ) {\n\n\t\tconst result = text[ offset - 1 ];\n\t\ttext = text.slice( cursor + offset );\n\t\tcursor ++;\n\t\treturn result;\n\n\t}\n\n\tfor ( let i = 0; i < CORRECT.length; ++ i ) {\n\n\t\tconst num = read( 1 );\n\t\tif ( num === CORRECT[ i ] ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nfunction getFbxVersion( text ) {\n\n\tconst versionRegExp = /FBXVersion: (\\d+)/;\n\tconst match = text.match( versionRegExp );\n\n\tif ( match ) {\n\n\t\tconst version = parseInt( match[ 1 ] );\n\t\treturn version;\n\n\t}\n\n\tthrow new Error( 'THREE.FBXLoader: Cannot find the version number for the file given.' );\n\n}\n\n// Converts FBX ticks into real time seconds.\nfunction convertFBXTimeToSeconds( time ) {\n\n\treturn time / 46186158000;\n\n}\n\nconst dataArray = [];\n\n// extracts the data from the correct position in the FBX array based on indexing type\nfunction getData( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {\n\n\tlet index;\n\n\tswitch ( infoObject.mappingType ) {\n\n\t\tcase 'ByPolygonVertex' :\n\t\t\tindex = polygonVertexIndex;\n\t\t\tbreak;\n\t\tcase 'ByPolygon' :\n\t\t\tindex = polygonIndex;\n\t\t\tbreak;\n\t\tcase 'ByVertice' :\n\t\t\tindex = vertexIndex;\n\t\t\tbreak;\n\t\tcase 'AllSame' :\n\t\t\tindex = infoObject.indices[ 0 ];\n\t\t\tbreak;\n\t\tdefault :\n\t\t\tconsole.warn( 'THREE.FBXLoader: unknown attribute mapping type ' + infoObject.mappingType );\n\n\t}\n\n\tif ( infoObject.referenceType === 'IndexToDirect' ) index = infoObject.indices[ index ];\n\n\tconst from = index * infoObject.dataSize;\n\tconst to = from + infoObject.dataSize;\n\n\treturn slice( dataArray, infoObject.buffer, from, to );\n\n}\n\nconst tempEuler = new Euler();\nconst tempVec = new Vector3();\n\n// generate transformation from FBX transform data\n// ref: https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_10CDD63C_79C1_4F2D_BB28_AD2BE65A02ED_htm\n// ref: http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/index.html?url=cpp_ref/_transformations_2main_8cxx-example.html,topicNumber=cpp_ref__transformations_2main_8cxx_example_htmlfc10a1e1-b18d-4e72-9dc0-70d0f1959f5e\nfunction generateTransform( transformData ) {\n\n\tconst lTranslationM = new Matrix4();\n\tconst lPreRotationM = new Matrix4();\n\tconst lRotationM = new Matrix4();\n\tconst lPostRotationM = new Matrix4();\n\n\tconst lScalingM = new Matrix4();\n\tconst lScalingPivotM = new Matrix4();\n\tconst lScalingOffsetM = new Matrix4();\n\tconst lRotationOffsetM = new Matrix4();\n\tconst lRotationPivotM = new Matrix4();\n\n\tconst lParentGX = new Matrix4();\n\tconst lParentLX = new Matrix4();\n\tconst lGlobalT = new Matrix4();\n\n\tconst inheritType = ( transformData.inheritType ) ? transformData.inheritType : 0;\n\n\tif ( transformData.translation ) lTranslationM.setPosition( tempVec.fromArray( transformData.translation ) );\n\n\tif ( transformData.preRotation ) {\n\n\t\tconst array = transformData.preRotation.map( MathUtils.degToRad );\n\t\tarray.push( transformData.eulerOrder || Euler.DEFAULT_ORDER );\n\t\tlPreRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t}\n\n\tif ( transformData.rotation ) {\n\n\t\tconst array = transformData.rotation.map( MathUtils.degToRad );\n\t\tarray.push( transformData.eulerOrder || Euler.DEFAULT_ORDER );\n\t\tlRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t}\n\n\tif ( transformData.postRotation ) {\n\n\t\tconst array = transformData.postRotation.map( MathUtils.degToRad );\n\t\tarray.push( transformData.eulerOrder || Euler.DEFAULT_ORDER );\n\t\tlPostRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\t\tlPostRotationM.invert();\n\n\t}\n\n\tif ( transformData.scale ) lScalingM.scale( tempVec.fromArray( transformData.scale ) );\n\n\t// Pivots and offsets\n\tif ( transformData.scalingOffset ) lScalingOffsetM.setPosition( tempVec.fromArray( transformData.scalingOffset ) );\n\tif ( transformData.scalingPivot ) lScalingPivotM.setPosition( tempVec.fromArray( transformData.scalingPivot ) );\n\tif ( transformData.rotationOffset ) lRotationOffsetM.setPosition( tempVec.fromArray( transformData.rotationOffset ) );\n\tif ( transformData.rotationPivot ) lRotationPivotM.setPosition( tempVec.fromArray( transformData.rotationPivot ) );\n\n\t// parent transform\n\tif ( transformData.parentMatrixWorld ) {\n\n\t\tlParentLX.copy( transformData.parentMatrix );\n\t\tlParentGX.copy( transformData.parentMatrixWorld );\n\n\t}\n\n\tconst lLRM = lPreRotationM.clone().multiply( lRotationM ).multiply( lPostRotationM );\n\t// Global Rotation\n\tconst lParentGRM = new Matrix4();\n\tlParentGRM.extractRotation( lParentGX );\n\n\t// Global Shear*Scaling\n\tconst lParentTM = new Matrix4();\n\tlParentTM.copyPosition( lParentGX );\n\n\tconst lParentGRSM = lParentTM.clone().invert().multiply( lParentGX );\n\tconst lParentGSM = lParentGRM.clone().invert().multiply( lParentGRSM );\n\tconst lLSM = lScalingM;\n\n\tconst lGlobalRS = new Matrix4();\n\n\tif ( inheritType === 0 ) {\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM );\n\n\t} else if ( inheritType === 1 ) {\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM );\n\n\t} else {\n\n\t\tconst lParentLSM = new Matrix4().scale( new Vector3().setFromMatrixScale( lParentLX ) );\n\t\tconst lParentLSM_inv = lParentLSM.clone().invert();\n\t\tconst lParentGSM_noLocal = lParentGSM.clone().multiply( lParentLSM_inv );\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lLSM );\n\n\t}\n\n\tconst lRotationPivotM_inv = lRotationPivotM.clone().invert();\n\tconst lScalingPivotM_inv = lScalingPivotM.clone().invert();\n\t// Calculate the local transform matrix\n\tlet lTransform = lTranslationM.clone().multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv );\n\n\tconst lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition( lTransform );\n\n\tconst lGlobalTranslation = lParentGX.clone().multiply( lLocalTWithAllPivotAndOffsetInfo );\n\tlGlobalT.copyPosition( lGlobalTranslation );\n\n\tlTransform = lGlobalT.clone().multiply( lGlobalRS );\n\n\t// from global to local\n\tlTransform.premultiply( lParentGX.invert() );\n\n\treturn lTransform;\n\n}\n\n// Returns the three.js intrinsic Euler order corresponding to FBX extrinsic Euler order\n// ref: http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_class_fbx_euler_html\nfunction getEulerOrder( order ) {\n\n\torder = order || 0;\n\n\tconst enums = [\n\t\t'ZYX', // -> XYZ extrinsic\n\t\t'YZX', // -> XZY extrinsic\n\t\t'XZY', // -> YZX extrinsic\n\t\t'ZXY', // -> YXZ extrinsic\n\t\t'YXZ', // -> ZXY extrinsic\n\t\t'XYZ', // -> ZYX extrinsic\n\t\t//'SphericXYZ', // not possible to support\n\t];\n\n\tif ( order === 6 ) {\n\n\t\tconsole.warn( 'THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.' );\n\t\treturn enums[ 0 ];\n\n\t}\n\n\treturn enums[ order ];\n\n}\n\n// Parses comma separated list of numbers and returns them an array.\n// Used internally by the TextParser\nfunction parseNumberArray( value ) {\n\n\tconst array = value.split( ',' ).map( function ( val ) {\n\n\t\treturn parseFloat( val );\n\n\t} );\n\n\treturn array;\n\n}\n\nfunction convertArrayBufferToString( buffer, from, to ) {\n\n\tif ( from === undefined ) from = 0;\n\tif ( to === undefined ) to = buffer.byteLength;\n\n\treturn new TextDecoder().decode( new Uint8Array( buffer, from, to ) );\n\n}\n\nfunction append( a, b ) {\n\n\tfor ( let i = 0, j = a.length, l = b.length; i < l; i ++, j ++ ) {\n\n\t\ta[ j ] = b[ i ];\n\n\t}\n\n}\n\nfunction slice( a, b, from, to ) {\n\n\tfor ( let i = from, j = 0; i < to; i ++, j ++ ) {\n\n\t\ta[ j ] = b[ i ];\n\n\t}\n\n\treturn a;\n\n}\n\n\nexport { FBXLoader };\n", "import {\n\tFileLoader,\n\tLoader,\n\tShapePath\n} from 'three';\n\nclass FontLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tconst font = scope.parse( JSON.parse( text ) );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\treturn new Font( json );\n\n\t}\n\n}\n\n//\n\nclass Font {\n\n\tconstructor( data ) {\n\n\t\tthis.isFont = true;\n\n\t\tthis.type = 'Font';\n\n\t\tthis.data = data;\n\n\t}\n\n\tgenerateShapes( text, size = 100 ) {\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data );\n\n\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tshapes.push( ...paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nfunction createPaths( text, size, data ) {\n\n\tconst chars = Array.from( text );\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\nexport { FontLoader, Font };\n", "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader\n} from 'three';\n\n/**\n * GCodeLoader is used to load gcode files usually used for 3D printing or CNC applications.\n *\n * Gcode files are composed by commands used by machines to create objects.\n *\n * @class GCodeLoader\n * @param {Manager} manager Loading manager.\n */\n\nclass GCodeLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.splitLayer = false;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tlet state = { x: 0, y: 0, z: 0, e: 0, f: 0, extruding: false, relative: false };\n\t\tconst layers = [];\n\n\t\tlet currentLayer = undefined;\n\n\t\tconst pathMaterial = new LineBasicMaterial( { color: 0xFF0000 } );\n\t\tpathMaterial.name = 'path';\n\n\t\tconst extrudingMaterial = new LineBasicMaterial( { color: 0x00FF00 } );\n\t\textrudingMaterial.name = 'extruded';\n\n\t\tfunction newLayer( line ) {\n\n\t\t\tcurrentLayer = { vertex: [], pathVertex: [], z: line.z };\n\t\t\tlayers.push( currentLayer );\n\n\t\t}\n\n\t\t//Create lie segment between p1 and p2\n\t\tfunction addSegment( p1, p2 ) {\n\n\t\t\tif ( currentLayer === undefined ) {\n\n\t\t\t\tnewLayer( p1 );\n\n\t\t\t}\n\n\t\t\tif ( state.extruding ) {\n\n\t\t\t\tcurrentLayer.vertex.push( p1.x, p1.y, p1.z );\n\t\t\t\tcurrentLayer.vertex.push( p2.x, p2.y, p2.z );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentLayer.pathVertex.push( p1.x, p1.y, p1.z );\n\t\t\t\tcurrentLayer.pathVertex.push( p2.x, p2.y, p2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction delta( v1, v2 ) {\n\n\t\t\treturn state.relative ? v2 : v2 - v1;\n\n\t\t}\n\n\t\tfunction absolute( v1, v2 ) {\n\n\t\t\treturn state.relative ? v1 + v2 : v2;\n\n\t\t}\n\n\t\tconst lines = data.replace( /;.+/g, '' ).split( '\\n' );\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tconst tokens = lines[ i ].split( ' ' );\n\t\t\tconst cmd = tokens[ 0 ].toUpperCase();\n\n\t\t\t//Argumments\n\t\t\tconst args = {};\n\t\t\ttokens.splice( 1 ).forEach( function ( token ) {\n\n\t\t\t\tif ( token[ 0 ] !== undefined ) {\n\n\t\t\t\t\tconst key = token[ 0 ].toLowerCase();\n\t\t\t\t\tconst value = parseFloat( token.substring( 1 ) );\n\t\t\t\t\targs[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t//Process commands\n\t\t\t//G0/G1 – Linear Movement\n\t\t\tif ( cmd === 'G0' || cmd === 'G1' ) {\n\n\t\t\t\tconst line = {\n\t\t\t\t\tx: args.x !== undefined ? absolute( state.x, args.x ) : state.x,\n\t\t\t\t\ty: args.y !== undefined ? absolute( state.y, args.y ) : state.y,\n\t\t\t\t\tz: args.z !== undefined ? absolute( state.z, args.z ) : state.z,\n\t\t\t\t\te: args.e !== undefined ? absolute( state.e, args.e ) : state.e,\n\t\t\t\t\tf: args.f !== undefined ? absolute( state.f, args.f ) : state.f,\n\t\t\t\t};\n\n\t\t\t\t//Layer change detection is or made by watching Z, it's made by watching when we extrude at a new Z position\n\t\t\t\tif ( delta( state.e, line.e ) > 0 ) {\n\n\t\t\t\t\tstate.extruding = delta( state.e, line.e ) > 0;\n\n\t\t\t\t\tif ( currentLayer == undefined || line.z != currentLayer.z ) {\n\n\t\t\t\t\t\tnewLayer( line );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\taddSegment( state, line );\n\t\t\t\tstate = line;\n\n\t\t\t} else if ( cmd === 'G2' || cmd === 'G3' ) {\n\n\t\t\t\t//G2/G3 - Arc Movement ( G2 clock wise and G3 counter clock wise )\n\t\t\t\t//console.warn( 'THREE.GCodeLoader: Arc command not supported' );\n\n\t\t\t} else if ( cmd === 'G90' ) {\n\n\t\t\t\t//G90: Set to Absolute Positioning\n\t\t\t\tstate.relative = false;\n\n\t\t\t} else if ( cmd === 'G91' ) {\n\n\t\t\t\t//G91: Set to state.relative Positioning\n\t\t\t\tstate.relative = true;\n\n\t\t\t} else if ( cmd === 'G92' ) {\n\n\t\t\t\t//G92: Set Position\n\t\t\t\tconst line = state;\n\t\t\t\tline.x = args.x !== undefined ? args.x : line.x;\n\t\t\t\tline.y = args.y !== undefined ? args.y : line.y;\n\t\t\t\tline.z = args.z !== undefined ? args.z : line.z;\n\t\t\t\tline.e = args.e !== undefined ? args.e : line.e;\n\n\t\t\t} else {\n\n\t\t\t\t//console.warn( 'THREE.GCodeLoader: Command not supported:' + cmd );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addObject( vertex, extruding, i ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertex, 3 ) );\n\t\t\tconst segments = new LineSegments( geometry, extruding ? extrudingMaterial : pathMaterial );\n\t\t\tsegments.name = 'layer' + i;\n\t\t\tobject.add( segments );\n\n\t\t}\n\n\t\tconst object = new Group();\n\t\tobject.name = 'gcode';\n\n\t\tif ( this.splitLayer ) {\n\n\t\t\tfor ( let i = 0; i < layers.length; i ++ ) {\n\n\t\t\t\tconst layer = layers[ i ];\n\t\t\t\taddObject( layer.vertex, true, i );\n\t\t\t\taddObject( layer.pathVertex, false, i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst vertex = [],\n\t\t\t\tpathVertex = [];\n\n\t\t\tfor ( let i = 0; i < layers.length; i ++ ) {\n\n\t\t\t\tconst layer = layers[ i ];\n\t\t\t\tconst layerVertex = layer.vertex;\n\t\t\t\tconst layerPathVertex = layer.pathVertex;\n\n\t\t\t\tfor ( let j = 0; j < layerVertex.length; j ++ ) {\n\n\t\t\t\t\tvertex.push( layerVertex[ j ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < layerPathVertex.length; j ++ ) {\n\n\t\t\t\t\tpathVertex.push( layerPathVertex[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\taddObject( vertex, true, layers.length );\n\t\t\taddObject( pathVertex, false, layers.length );\n\n\t\t}\n\n\t\tobject.rotation.set( - Math.PI / 2, 0, 0 );\n\n\t\treturn object;\n\n\t}\n\n}\n\nexport { GCodeLoader };\n", "import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tInstancedBufferAttribute\n} from 'three';\nimport { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureAVIFExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\t// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file\n\t\t\t// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'\n\t\t\t// resourcePath = 'https://my-cnd-server.com/assets/models/'\n\t\t\t// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'\n\t\t\t// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'\n\t\t\tconst relativeUrl = LoaderUtils.extractUrlBase( url );\n\t\t\tresourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetDDSLoader() {\n\n\t\tthrow new Error(\n\n\t\t\t'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n\n\t\t);\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( textDecoder.decode( data ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\n\t\t\tif ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );\n\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_DISPERSION: 'KHR_materials_dispersion',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_MATERIALS_BUMP: 'EXT_materials_bump',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_TEXTURE_AVIF: 'EXT_texture_avif',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tassignExtrasToUserData( lightNode, lightDef );\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tgetDependency( type, index ) {\n\n\t\tif ( type !== 'light' ) return;\n\n\t\treturn this._loadLight( index );\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tconst colorFactor = extension.sheenColorFactor;\n\t\t\tmaterialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;\n\n\t\tif ( extension.bumpTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials anisotropy Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.anisotropyStrength !== undefined ) {\n\n\t\t\tmaterialParams.anisotropy = extension.anisotropyStrength;\n\n\t\t}\n\n\t\tif ( extension.anisotropyRotation !== undefined ) {\n\n\t\t\tmaterialParams.anisotropyRotation = extension.anisotropyRotation;\n\n\t\t}\n\n\t\tif ( extension.anisotropyTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * AVIF Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n */\nclass GLTFTextureAVIFExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image.\n\t\t\t\timage.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName === '_COLOR_0' ) {\n\n\t\t\t\t\t\tconst attr = attributes[ attributeName ];\n\t\t\t\t\t\tinstancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );\n\n\t\t\t\t\t} else if ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tthis.header = {\n\t\t\tmagic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = textDecoder.decode( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )\n\t\t\t&& transform.offset === undefined\n\t\t\t&& transform.rotation === undefined\n\t\t\t&& transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\ttexture.channel = transform.texCoord;\n\n\t\t}\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_q.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv1',\n\tTEXCOORD_2: 'uv2',\n\tTEXCOORD_3: 'uv3',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D|Material|BufferGeometry} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @param {BufferGeometry} geometry\n * @param {Array} targets\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tlet geometryKey;\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\tif ( primitiveDef.targets !== undefined ) {\n\n\t\tfor ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {\n\n\t\t\tgeometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );\n\n\t\t}\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\n\treturn 'image/png';\n\n}\n\nconst _identityMatrix = new Matrix4();\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Node cache\n\t\tthis.nodeCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tlet isSafari = false;\n\t\tlet safariVersion = - 1;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tconst userAgent = navigator.userAgent;\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;\n\t\t\tconst safariMatch = userAgent.match( /Version\\/(\\d+)/ );\n\t\t\tsafariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;\n\n\t\t\tisFirefox = userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\t\tthis.nodeCache = {};\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\treturn Promise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tfor ( const scene of result.scenes ) {\n\n\t\t\t\t\tscene.updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadNode && ext.loadNode( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext != this && ext.getDependency && ext.getDependency( type, index );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( ! dependency ) {\n\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\t\t\tconst normalized = accessorDef.normalized === true;\n\n\t\t\tconst array = new TypedArray( accessorDef.count * itemSize );\n\t\t\treturn Promise.resolve( new BufferAttribute( array, itemSize, normalized ) );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tif ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {\n\n\t\t\t\ttexture.name = sourceDef.uri;\n\n\t\t\t}\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( texture, sourceDef );\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, colorSpace ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\tif ( ! texture ) return null;\n\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {\n\n\t\t\t\ttexture = texture.clone();\n\t\t\t\ttexture.channel = mapDef.texCoord;\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\tlineMaterial.map = material.map;\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tconst emissiveFactor = materialDef.emissiveFactor;\n\t\t\tmaterialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tconst material = new materialType( materialParams );\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tif ( sanitizedName in this.nodeNamesUsed ) {\n\n\t\t\treturn sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );\n\n\t\t} else {\n\n\t\t\tthis.nodeNamesUsed[ sanitizedName ] = 0;\n\n\t\t\treturn sanitizedName;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array} primitives\n\t * @return {Promise>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true ) {\n\n\t\t\t\t\t\t// normalize skin weights to fix malformed assets (see #15319)\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {\n\n\t\t\tpending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );\n\n\t\t}\n\n\t\tif ( skinDef.inverseBindMatrices !== undefined ) {\n\n\t\t\tpending.push( this.getDependency( 'accessor', skinDef.inverseBindMatrices ) );\n\n\t\t} else {\n\n\t\t\tpending.push( null );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst inverseBindMatrices = results.pop();\n\t\t\tconst jointNodes = results;\n\n\t\t\t// Note that bones (joint nodes) may or may not be in the\n\t\t\t// scene graph at this time.\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( let i = 0, il = jointNodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst jointNode = jointNodes[ i ];\n\n\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\tif ( inverseBindMatrices !== null ) {\n\n\t\t\t\t\t\tmat.fromArray( inverseBindMatrices.array, i * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\t\tconst animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tif ( target.node === undefined ) continue;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tif ( node.updateMatrix ) {\n\n\t\t\t\t\tnode.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tconst createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );\n\n\t\t\t\tif ( createdTracks ) {\n\n\t\t\t\t\tfor ( let k = 0; k < createdTracks.length; k ++ ) {\n\n\t\t\t\t\t\ttracks.push( createdTracks[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( animationName, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tconst nodePending = parser._loadNodeShallow( nodeIndex );\n\n\t\tconst childPending = [];\n\t\tconst childrenDef = nodeDef.children || [];\n\n\t\tfor ( let i = 0, il = childrenDef.length; i < il; i ++ ) {\n\n\t\t\tchildPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );\n\n\t\t}\n\n\t\tconst skeletonPending = nodeDef.skin === undefined\n\t\t\t? Promise.resolve( null )\n\t\t\t: parser.getDependency( 'skin', nodeDef.skin );\n\n\t\treturn Promise.all( [\n\t\t\tnodePending,\n\t\t\tPromise.all( childPending ),\n\t\t\tskeletonPending\n\t\t] ).then( function ( results ) {\n\n\t\t\tconst node = results[ 0 ];\n\t\t\tconst children = results[ 1 ];\n\t\t\tconst skeleton = results[ 2 ];\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\t// This full traverse should be fine because\n\t\t\t\t// child glTF nodes have not been added to this node yet.\n\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\tif ( ! mesh.isSkinnedMesh ) return;\n\n\t\t\t\t\tmesh.bind( skeleton, _identityMatrix );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tnode.add( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t// ._loadNodeShallow() parses a single node.\n\t// skin and child nodes are created and added in .loadNode() (no '_' prefix).\n\t_loadNodeShallow( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\t// This method is called from .loadNode() and .loadSkin().\n\t\t// Cache a node to avoid duplication.\n\n\t\tif ( this.nodeCache[ nodeIndex ] !== undefined ) {\n\n\t\t\treturn this.nodeCache[ nodeIndex ];\n\n\t\t}\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\tconst pending = [];\n\n\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t} );\n\n\t\tif ( meshPromise ) {\n\n\t\t\tpending.push( meshPromise );\n\n\t\t}\n\n\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t} ).forEach( function ( promise ) {\n\n\t\t\tpending.push( promise );\n\n\t\t} );\n\n\t\tthis.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t\treturn this.nodeCache[ nodeIndex ];\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( parser.getDependency( 'node', nodeIds[ i ] ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( nodes ) {\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tscene.add( nodes[ i ] );\n\n\t\t\t}\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n\t_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {\n\n\t\tconst tracks = [];\n\n\t\tconst targetName = node.name ? node.name : node.uuid;\n\t\tconst targetNames = [];\n\n\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\ttargetNames.push( targetName );\n\n\t\t}\n\n\t\tlet TypedKeyframeTrack;\n\n\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.position:\n\t\t\tcase PATH_PROPERTIES.scale:\n\n\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tswitch ( outputAccessor.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 3:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\n\t\tconst outputArray = this._getArrayFromAccessor( outputAccessor );\n\n\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\tinputAccessor.array,\n\t\t\t\toutputArray,\n\t\t\t\tinterpolation\n\t\t\t);\n\n\t\t\t// Override interpolation with custom factory method.\n\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\tthis._createCubicSplineTrackInterpolant( track );\n\n\t\t\t}\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\t_getArrayFromAccessor( accessor ) {\n\n\t\tlet outputArray = accessor.array;\n\n\t\tif ( accessor.normalized ) {\n\n\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t}\n\n\t\t\toutputArray = scaled;\n\n\t\t}\n\n\t\treturn outputArray;\n\n\t}\n\n\t_createCubicSplineTrackInterpolant( track ) {\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t};\n\n\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tif ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {\n\n\t\tconsole.warn( `THREE.GLTFLoader: Converting vertex colors from \"srgb-linear\" to \"${ColorManagement.workingColorSpace}\" not supported.` );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\nexport { GLTFLoader };\n", "import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tLinearSRGBColorSpace\n} from 'three';\n\n// https://github.com/mrdoob/three.js/issues/5552\n// http://en.wikipedia.org/wiki/RGBE_image_format\n\nclass RGBELoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\t// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n\tparse( buffer ) {\n\n\t\tconst\n\t\t\t/* default error routine. change this to change error handling */\n\t\t\trgbe_read_error = 1,\n\t\t\trgbe_write_error = 2,\n\t\t\trgbe_format_error = 3,\n\t\t\trgbe_memory_error = 4,\n\t\t\trgbe_error = function ( rgbe_error_code, msg ) {\n\n\t\t\t\tswitch ( rgbe_error_code ) {\n\n\t\t\t\t\tcase rgbe_read_error: throw new Error( 'THREE.RGBELoader: Read Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_write_error: throw new Error( 'THREE.RGBELoader: Write Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_format_error: throw new Error( 'THREE.RGBELoader: Bad File Format: ' + ( msg || '' ) );\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase rgbe_memory_error: throw new Error( 'THREE.RGBELoader: Memory Error: ' + ( msg || '' ) );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/* offsets to red, green, and blue components in a data (float) pixel */\n\t\t\t//RGBE_DATA_RED = 0,\n\t\t\t//RGBE_DATA_GREEN = 1,\n\t\t\t//RGBE_DATA_BLUE = 2,\n\n\t\t\t/* number of floats per pixel, use 4 since stored in rgba image format */\n\t\t\t//RGBE_DATA_SIZE = 4,\n\n\t\t\t/* flags indicating which fields in an rgbe_header_info are valid */\n\t\t\tRGBE_VALID_PROGRAMTYPE = 1,\n\t\t\tRGBE_VALID_FORMAT = 2,\n\t\t\tRGBE_VALID_DIMENSIONS = 4,\n\n\t\t\tNEWLINE = '\\n',\n\n\t\t\tfgets = function ( buffer, lineLimit, consume ) {\n\n\t\t\t\tconst chunkSize = 128;\n\n\t\t\t\tlineLimit = ! lineLimit ? 1024 : lineLimit;\n\t\t\t\tlet p = buffer.pos,\n\t\t\t\t\ti = - 1, len = 0, s = '',\n\t\t\t\t\tchunk = String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\twhile ( ( 0 > ( i = chunk.indexOf( NEWLINE ) ) ) && ( len < lineLimit ) && ( p < buffer.byteLength ) ) {\n\n\t\t\t\t\ts += chunk; len += chunk.length;\n\t\t\t\t\tp += chunkSize;\n\t\t\t\t\tchunk += String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( - 1 < i ) {\n\n\t\t\t\t\t/*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n\t\t\t\t\tif ( false !== consume ) buffer.pos += len + i + 1;\n\t\t\t\t\treturn s + chunk.slice( 0, i );\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/* minimal header reading. modify if you want to parse more information */\n\t\t\tRGBE_ReadHeader = function ( buffer ) {\n\n\n\t\t\t\t// regexes to parse header info fields\n\t\t\t\tconst magic_token_re = /^#\\?(\\S+)/,\n\t\t\t\t\tgamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\texposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\tformat_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n\t\t\t\t\tdimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n\n\t\t\t\t\t// RGBE format header struct\n\t\t\t\t\theader = {\n\n\t\t\t\t\t\tvalid: 0, /* indicate which fields are valid */\n\n\t\t\t\t\t\tstring: '', /* the actual header string */\n\n\t\t\t\t\t\tcomments: '', /* comments found in header */\n\n\t\t\t\t\t\tprogramtype: 'RGBE', /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */\n\n\t\t\t\t\t\tformat: '', /* RGBE format, default 32-bit_rle_rgbe */\n\n\t\t\t\t\t\tgamma: 1.0, /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */\n\n\t\t\t\t\t\texposure: 1.0, /* a value of 1.0 in an image corresponds to watts/steradian/m^2. defaults to 1.0 */\n\n\t\t\t\t\t\twidth: 0, height: 0 /* image dimensions, width/height */\n\n\t\t\t\t\t};\n\n\t\t\t\tlet line, match;\n\n\t\t\t\tif ( buffer.pos >= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_read_error, 'no header found' );\n\n\t\t\t\t}\n\n\t\t\t\t/* if you want to require the magic token then uncomment the next line */\n\t\t\t\tif ( ! ( match = line.match( magic_token_re ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'bad initial token' );\n\n\t\t\t\t}\n\n\t\t\t\theader.valid |= RGBE_VALID_PROGRAMTYPE;\n\t\t\t\theader.programtype = match[ 1 ];\n\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tline = fgets( buffer );\n\t\t\t\t\tif ( false === line ) break;\n\t\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\t\tif ( '#' === line.charAt( 0 ) ) {\n\n\t\t\t\t\t\theader.comments += line + '\\n';\n\t\t\t\t\t\tcontinue; // comment line\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( gamma_re ) ) {\n\n\t\t\t\t\t\theader.gamma = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( exposure_re ) ) {\n\n\t\t\t\t\t\theader.exposure = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( format_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_FORMAT;\n\t\t\t\t\t\theader.format = match[ 1 ];//'32-bit_rle_rgbe';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( dimensions_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_DIMENSIONS;\n\t\t\t\t\t\theader.height = parseInt( match[ 1 ], 10 );\n\t\t\t\t\t\theader.width = parseInt( match[ 2 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( header.valid & RGBE_VALID_FORMAT ) && ( header.valid & RGBE_VALID_DIMENSIONS ) ) break;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_FORMAT ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing format specifier' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_DIMENSIONS ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing image size specifier' );\n\n\t\t\t\t}\n\n\t\t\t\treturn header;\n\n\t\t\t},\n\n\t\t\tRGBE_ReadPixels_RLE = function ( buffer, w, h ) {\n\n\t\t\t\tconst scanline_width = w;\n\n\t\t\t\tif (\n\t\t\t\t\t// run length encoding is not allowed so read flat\n\t\t\t\t\t( ( scanline_width < 8 ) || ( scanline_width > 0x7fff ) ) ||\n\t\t\t\t\t// this file is not run length encoded\n\t\t\t\t\t( ( 2 !== buffer[ 0 ] ) || ( 2 !== buffer[ 1 ] ) || ( buffer[ 2 ] & 0x80 ) )\n\t\t\t\t) {\n\n\t\t\t\t\t// return the flat buffer\n\t\t\t\t\treturn new Uint8Array( buffer );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scanline_width !== ( ( buffer[ 2 ] << 8 ) | buffer[ 3 ] ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'wrong scanline width' );\n\n\t\t\t\t}\n\n\t\t\t\tconst data_rgba = new Uint8Array( 4 * w * h );\n\n\t\t\t\tif ( ! data_rgba.length ) {\n\n\t\t\t\t\trgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );\n\n\t\t\t\t}\n\n\t\t\t\tlet offset = 0, pos = 0;\n\n\t\t\t\tconst ptr_end = 4 * scanline_width;\n\t\t\t\tconst rgbeStart = new Uint8Array( 4 );\n\t\t\t\tconst scanline_buffer = new Uint8Array( ptr_end );\n\t\t\t\tlet num_scanlines = h;\n\n\t\t\t\t// read in each successive scanline\n\t\t\t\twhile ( ( num_scanlines > 0 ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\tif ( pos + 4 > buffer.byteLength ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_read_error );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trgbeStart[ 0 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 1 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 2 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 3 ] = buffer[ pos ++ ];\n\n\t\t\t\t\tif ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] << 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad rgbe scanline format' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// read each of the four channels for the scanline into the buffer\n\t\t\t\t\t// first red, then green, then blue, then exponent\n\t\t\t\t\tlet ptr = 0, count;\n\n\t\t\t\t\twhile ( ( ptr < ptr_end ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\t\tcount = buffer[ pos ++ ];\n\t\t\t\t\t\tconst isEncodedRun = count > 128;\n\t\t\t\t\t\tif ( isEncodedRun ) count -= 128;\n\n\t\t\t\t\t\tif ( ( 0 === count ) || ( ptr + count > ptr_end ) ) {\n\n\t\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad scanline data' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( isEncodedRun ) {\n\n\t\t\t\t\t\t\t// a (encoded) run of the same value\n\t\t\t\t\t\t\tconst byteValue = buffer[ pos ++ ];\n\t\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\tscanline_buffer[ ptr ++ ] = byteValue;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//ptr += count;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// a literal-run\n\t\t\t\t\t\t\tscanline_buffer.set( buffer.subarray( pos, pos + count ), ptr );\n\t\t\t\t\t\t\tptr += count; pos += count;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// now convert data from buffer into rgba\n\t\t\t\t\t// first red, then green, then blue, then exponent (alpha)\n\t\t\t\t\tconst l = scanline_width; //scanline_buffer.byteLength;\n\t\t\t\t\tfor ( let i = 0; i < l; i ++ ) {\n\n\t\t\t\t\t\tlet off = 0;\n\t\t\t\t\t\tdata_rgba[ offset ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 1 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 2 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 3 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnum_scanlines --;\n\n\t\t\t\t}\n\n\t\t\t\treturn data_rgba;\n\n\t\t\t};\n\n\t\tconst RGBEByteToRGBFloat = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;\n\t\t\tdestArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;\n\t\t\tdestArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;\n\t\t\tdestArray[ destOffset + 3 ] = 1;\n\n\t\t};\n\n\t\tconst RGBEByteToRGBHalf = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\t// clamping to 65504, the maximum representable value in float16\n\t\t\tdestArray[ destOffset + 0 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 0 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 1 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 1 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 2 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 2 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\t\t};\n\n\t\tconst byteArray = new Uint8Array( buffer );\n\t\tbyteArray.pos = 0;\n\t\tconst rgbe_header_info = RGBE_ReadHeader( byteArray );\n\n\t\tconst w = rgbe_header_info.width,\n\t\t\th = rgbe_header_info.height,\n\t\t\timage_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );\n\n\n\t\tlet data, type;\n\t\tlet numElements;\n\n\t\tswitch ( this.type ) {\n\n\t\t\tcase FloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst floatArray = new Float32Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = floatArray;\n\t\t\t\ttype = FloatType;\n\t\t\t\tbreak;\n\n\t\t\tcase HalfFloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst halfArray = new Uint16Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = halfArray;\n\t\t\t\ttype = HalfFloatType;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tthrow new Error( 'THREE.RGBELoader: Unsupported type: ' + this.type );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\treturn {\n\t\t\twidth: w, height: h,\n\t\t\tdata: data,\n\t\t\theader: rgbe_header_info.string,\n\t\t\tgamma: rgbe_header_info.gamma,\n\t\t\texposure: rgbe_header_info.exposure,\n\t\t\ttype: type\n\t\t};\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\tswitch ( texture.type ) {\n\n\t\t\t\tcase FloatType:\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn super.load( url, onLoadCallback, onProgress, onError );\n\n\t}\n\n}\n\nexport { RGBELoader };\n", "import {\n\tCubeTexture,\n\tDataTexture,\n\tFileLoader,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tLinearSRGBColorSpace,\n\tLoader\n} from 'three';\nimport { RGBELoader } from '../loaders/RGBELoader.js';\n\nclass HDRCubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.hdrLoader = new RGBELoader();\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\ttexture.type = this.type;\n\n\t\tswitch ( texture.type ) {\n\n\t\t\tcase FloatType:\n\n\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\tbreak;\n\n\t\t\tcase HalfFloatType:\n\n\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst scope = this;\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadHDRData( i, onLoad, onProgress, onError ) {\n\n\t\t\tnew FileLoader( scope.manager )\n\t\t\t\t.setPath( scope.path )\n\t\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t\t.setWithCredentials( scope.withCredentials )\n\t\t\t\t.load( urls[ i ], function ( buffer ) {\n\n\t\t\t\t\tloaded ++;\n\n\t\t\t\t\tconst texData = scope.hdrLoader.parse( buffer );\n\n\t\t\t\t\tif ( ! texData ) return;\n\n\t\t\t\t\tif ( texData.data !== undefined ) {\n\n\t\t\t\t\t\tconst dataTexture = new DataTexture( texData.data, texData.width, texData.height );\n\n\t\t\t\t\t\tdataTexture.type = texture.type;\n\t\t\t\t\t\tdataTexture.colorSpace = texture.colorSpace;\n\t\t\t\t\t\tdataTexture.format = texture.format;\n\t\t\t\t\t\tdataTexture.minFilter = texture.minFilter;\n\t\t\t\t\t\tdataTexture.magFilter = texture.magFilter;\n\t\t\t\t\t\tdataTexture.generateMipmaps = texture.generateMipmaps;\n\n\t\t\t\t\t\ttexture.images[ i ] = dataTexture;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; i ++ ) {\n\n\t\t\tloadHDRData( i, onLoad, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\tthis.hdrLoader.setDataType( value );\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { HDRCubeTextureLoader };\n", "import {\n\tDataTexture,\n\tFileLoader,\n\tFloatType,\n\tRedFormat,\n\tMathUtils,\n\tLoader,\n\tUnsignedByteType,\n\tLinearFilter,\n\tHalfFloatType,\n\tDataUtils\n} from 'three';\n\nclass IESLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\t_getIESValues( iesLamp, type ) {\n\n\t\tconst width = 360;\n\t\tconst height = 180;\n\t\tconst size = width * height;\n\n\t\tconst data = new Array( size );\n\n\t\tfunction interpolateCandelaValues( phi, theta ) {\n\n\t\t\tlet phiIndex = 0, thetaIndex = 0;\n\t\t\tlet startTheta = 0, endTheta = 0, startPhi = 0, endPhi = 0;\n\n\t\t\tfor ( let i = 0; i < iesLamp.numHorAngles - 1; ++ i ) { // numHorAngles = horAngles.length-1 because of extra padding, so this wont cause an out of bounds error\n\n\t\t\t\tif ( theta < iesLamp.horAngles[ i + 1 ] || i == iesLamp.numHorAngles - 2 ) {\n\n\t\t\t\t\tthetaIndex = i;\n\t\t\t\t\tstartTheta = iesLamp.horAngles[ i ];\n\t\t\t\t\tendTheta = iesLamp.horAngles[ i + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < iesLamp.numVerAngles - 1; ++ i ) {\n\n\t\t\t\tif ( phi < iesLamp.verAngles[ i + 1 ] || i == iesLamp.numVerAngles - 2 ) {\n\n\t\t\t\t\tphiIndex = i;\n\t\t\t\t\tstartPhi = iesLamp.verAngles[ i ];\n\t\t\t\t\tendPhi = iesLamp.verAngles[ i + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst deltaTheta = endTheta - startTheta;\n\t\t\tconst deltaPhi = endPhi - startPhi;\n\n\t\t\tif ( deltaPhi === 0 ) // Outside range\n\t\t\t\treturn 0;\n\n\t\t\tconst t1 = deltaTheta === 0 ? 0 : ( theta - startTheta ) / deltaTheta;\n\t\t\tconst t2 = ( phi - startPhi ) / deltaPhi;\n\n\t\t\tconst nextThetaIndex = deltaTheta === 0 ? thetaIndex : thetaIndex + 1;\n\n\t\t\tconst v1 = MathUtils.lerp( iesLamp.candelaValues[ thetaIndex ][ phiIndex ], iesLamp.candelaValues[ nextThetaIndex ][ phiIndex ], t1 );\n\t\t\tconst v2 = MathUtils.lerp( iesLamp.candelaValues[ thetaIndex ][ phiIndex + 1 ], iesLamp.candelaValues[ nextThetaIndex ][ phiIndex + 1 ], t1 );\n\t\t\tconst v = MathUtils.lerp( v1, v2, t2 );\n\n\t\t\treturn v;\n\n\t\t}\n\n\t\tconst startTheta = iesLamp.horAngles[ 0 ], endTheta = iesLamp.horAngles[ iesLamp.numHorAngles - 1 ];\n\n\t\tfor ( let i = 0; i < size; ++ i ) {\n\n\t\t\tlet theta = i % width;\n\t\t\tconst phi = Math.floor( i / width );\n\n\t\t\tif ( endTheta - startTheta !== 0 && ( theta < startTheta || theta >= endTheta ) ) { // Handle symmetry for hor angles\n\n\t\t\t\ttheta %= endTheta * 2;\n\n\t\t\t\tif ( theta > endTheta )\n\t\t\t\t\ttheta = endTheta * 2 - theta;\n\n\t\t\t}\n\n\t\t\tdata[ phi + theta * height ] = interpolateCandelaValues( phi, theta );\n\n\t\t}\n\n\t\tlet result = null;\n\n\t\tif ( type === UnsignedByteType ) result = Uint8Array.from( data.map( v => Math.min( v * 0xFF, 0xFF ) ) );\n\t\telse if ( type === HalfFloatType ) result = Uint16Array.from( data.map( v => DataUtils.toHalfFloat( v ) ) );\n\t\telse if ( type === FloatType ) result = Float32Array.from( data );\n\t\telse console.error( 'IESLoader: Unsupported type:', type );\n\n\t\treturn result;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'text' );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\n\t\tloader.load( url, text => {\n\n\t\t\tonLoad( this.parse( text ) );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst type = this.type;\n\n\t\tconst iesLamp = new IESLamp( text );\n\t\tconst data = this._getIESValues( iesLamp, type );\n\n\t\tconst texture = new DataTexture( data, 180, 1, RedFormat, type );\n\t\ttexture.minFilter = LinearFilter;\n\t\ttexture.magFilter = LinearFilter;\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n\nfunction IESLamp( text ) {\n\n\tconst _self = this;\n\n\tconst textArray = text.split( '\\n' );\n\n\tlet lineNumber = 0;\n\tlet line;\n\n\t_self.verAngles = [ ];\n\t_self.horAngles = [ ];\n\n\t_self.candelaValues = [ ];\n\n\t_self.tiltData = { };\n\t_self.tiltData.angles = [ ];\n\t_self.tiltData.mulFactors = [ ];\n\n\tfunction textToArray( text ) {\n\n\t\ttext = text.replace( /^\\s+|\\s+$/g, '' ); // remove leading or trailing spaces\n\t\ttext = text.replace( /,/g, ' ' ); // replace commas with spaces\n\t\ttext = text.replace( /\\s\\s+/g, ' ' ); // replace white space/tabs etc by single whitespace\n\n\t\tconst array = text.split( ' ' );\n\n\t\treturn array;\n\n\t}\n\n\tfunction readArray( count, array ) {\n\n\t\twhile ( true ) {\n\n\t\t\tconst line = textArray[ lineNumber ++ ];\n\t\t\tconst lineData = textToArray( line );\n\n\t\t\tfor ( let i = 0; i < lineData.length; ++ i ) {\n\n\t\t\t\tarray.push( Number( lineData[ i ] ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length === count )\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction readTilt() {\n\n\t\tlet line = textArray[ lineNumber ++ ];\n\t\tlet lineData = textToArray( line );\n\n\t\t_self.tiltData.lampToLumGeometry = Number( lineData[ 0 ] );\n\n\t\tline = textArray[ lineNumber ++ ];\n\t\tlineData = textToArray( line );\n\n\t\t_self.tiltData.numAngles = Number( lineData[ 0 ] );\n\n\t\treadArray( _self.tiltData.numAngles, _self.tiltData.angles );\n\t\treadArray( _self.tiltData.numAngles, _self.tiltData.mulFactors );\n\n\t}\n\n\tfunction readLampValues() {\n\n\t\tconst values = [ ];\n\t\treadArray( 10, values );\n\n\t\t_self.count = Number( values[ 0 ] );\n\t\t_self.lumens = Number( values[ 1 ] );\n\t\t_self.multiplier = Number( values[ 2 ] );\n\t\t_self.numVerAngles = Number( values[ 3 ] );\n\t\t_self.numHorAngles = Number( values[ 4 ] );\n\t\t_self.gonioType = Number( values[ 5 ] );\n\t\t_self.units = Number( values[ 6 ] );\n\t\t_self.width = Number( values[ 7 ] );\n\t\t_self.length = Number( values[ 8 ] );\n\t\t_self.height = Number( values[ 9 ] );\n\n\t}\n\n\tfunction readLampFactors() {\n\n\t\tconst values = [ ];\n\t\treadArray( 3, values );\n\n\t\t_self.ballFactor = Number( values[ 0 ] );\n\t\t_self.blpFactor = Number( values[ 1 ] );\n\t\t_self.inputWatts = Number( values[ 2 ] );\n\n\t}\n\n\twhile ( true ) {\n\n\t\tline = textArray[ lineNumber ++ ];\n\n\t\tif ( line.includes( 'TILT' ) ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tif ( ! line.includes( 'NONE' ) ) {\n\n\t\tif ( line.includes( 'INCLUDE' ) ) {\n\n\t\t\treadTilt();\n\n\t\t} else {\n\n\t\t\t// TODO:: Read tilt data from a file\n\n\t\t}\n\n\t}\n\n\treadLampValues();\n\n\treadLampFactors();\n\n\t// Initialize candela value array\n\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\t_self.candelaValues.push( [ ] );\n\n\t}\n\n\t// Parse Angles\n\treadArray( _self.numVerAngles, _self.verAngles );\n\treadArray( _self.numHorAngles, _self.horAngles );\n\n\t// Parse Candela values\n\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\treadArray( _self.numVerAngles, _self.candelaValues[ i ] );\n\n\t}\n\n\t// Calculate actual candela values, and normalize.\n\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\tfor ( let j = 0; j < _self.numVerAngles; ++ j ) {\n\n\t\t\t_self.candelaValues[ i ][ j ] *= _self.candelaValues[ i ][ j ] * _self.multiplier\n\t\t\t\t* _self.ballFactor * _self.blpFactor;\n\n\t\t}\n\n\t}\n\n\tlet maxVal = - 1;\n\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\tfor ( let j = 0; j < _self.numVerAngles; ++ j ) {\n\n\t\t\tconst value = _self.candelaValues[ i ][ j ];\n\t\t\tmaxVal = maxVal < value ? value : maxVal;\n\n\t\t}\n\n\t}\n\n\tconst bNormalize = true;\n\tif ( bNormalize && maxVal > 0 ) {\n\n\t\tfor ( let i = 0; i < _self.numHorAngles; ++ i ) {\n\n\t\t\tfor ( let j = 0; j < _self.numVerAngles; ++ j ) {\n\n\t\t\t\t_self.candelaValues[ i ][ j ] /= maxVal;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n\nexport { IESLoader };\n", "import {\n\tFileLoader,\n\tGroup,\n\tLoader,\n\tLoadingManager\n} from 'three';\nimport { ColladaLoader } from '../loaders/ColladaLoader.js';\nimport * as fflate from '../libs/fflate.module.js';\n\nclass KMZLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction findFile( url ) {\n\n\t\t\tfor ( const path in zip ) {\n\n\t\t\t\tif ( path.slice( - url.length ) === url ) {\n\n\t\t\t\t\treturn zip[ path ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst manager = new LoadingManager();\n\t\tmanager.setURLModifier( function ( url ) {\n\n\t\t\tconst image = findFile( url );\n\n\t\t\tif ( image ) {\n\n\t\t\t\tconsole.log( 'Loading', url );\n\n\t\t\t\tconst blob = new Blob( [ image.buffer ], { type: 'application/octet-stream' } );\n\t\t\t\treturn URL.createObjectURL( blob );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t} );\n\n\t\t//\n\n\t\tconst zip = fflate.unzipSync( new Uint8Array( data ) );\n\n\t\tif ( zip[ 'doc.kml' ] ) {\n\n\t\t\tconst xml = new DOMParser().parseFromString( fflate.strFromU8( zip[ 'doc.kml' ] ), 'application/xml' );\n\n\t\t\tconst model = xml.querySelector( 'Placemark Model Link href' );\n\n\t\t\tif ( model ) {\n\n\t\t\t\tconst loader = new ColladaLoader( manager );\n\t\t\t\treturn loader.parse( fflate.strFromU8( zip[ model.textContent ] ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'KMZLoader: Missing doc.kml file.' );\n\n\t\t\tfor ( const path in zip ) {\n\n\t\t\t\tconst extension = path.split( '.' ).pop().toLowerCase();\n\n\t\t\t\tif ( extension === 'dae' ) {\n\n\t\t\t\t\tconst loader = new ColladaLoader( manager );\n\t\t\t\t\treturn loader.parse( fflate.strFromU8( zip[ path ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'KMZLoader: Couldn\\'t find .dae file.' );\n\t\treturn { scene: new Group() };\n\n\t}\n\n}\n\nexport { KMZLoader };\n", "/**\n * @author Deepkolos / https://github.com/deepkolos\n */\n\nexport class WorkerPool {\n\n\tconstructor( pool = 4 ) {\n\n\t\tthis.pool = pool;\n\t\tthis.queue = [];\n\t\tthis.workers = [];\n\t\tthis.workersResolve = [];\n\t\tthis.workerStatus = 0;\n\n\t}\n\n\t_initWorker( workerId ) {\n\n\t\tif ( ! this.workers[ workerId ] ) {\n\n\t\t\tconst worker = this.workerCreator();\n\t\t\tworker.addEventListener( 'message', this._onMessage.bind( this, workerId ) );\n\t\t\tthis.workers[ workerId ] = worker;\n\n\t\t}\n\n\t}\n\n\t_getIdleWorker() {\n\n\t\tfor ( let i = 0; i < this.pool; i ++ )\n\t\t\tif ( ! ( this.workerStatus & ( 1 << i ) ) ) return i;\n\n\t\treturn - 1;\n\n\t}\n\n\t_onMessage( workerId, msg ) {\n\n\t\tconst resolve = this.workersResolve[ workerId ];\n\t\tresolve && resolve( msg );\n\n\t\tif ( this.queue.length ) {\n\n\t\t\tconst { resolve, msg, transfer } = this.queue.shift();\n\t\t\tthis.workersResolve[ workerId ] = resolve;\n\t\t\tthis.workers[ workerId ].postMessage( msg, transfer );\n\n\t\t} else {\n\n\t\t\tthis.workerStatus ^= 1 << workerId;\n\n\t\t}\n\n\t}\n\n\tsetWorkerCreator( workerCreator ) {\n\n\t\tthis.workerCreator = workerCreator;\n\n\t}\n\n\tsetWorkerLimit( pool ) {\n\n\t\tthis.pool = pool;\n\n\t}\n\n\tpostMessage( msg, transfer ) {\n\n\t\treturn new Promise( ( resolve ) => {\n\n\t\t\tconst workerId = this._getIdleWorker();\n\n\t\t\tif ( workerId !== - 1 ) {\n\n\t\t\t\tthis._initWorker( workerId );\n\t\t\t\tthis.workerStatus |= 1 << workerId;\n\t\t\t\tthis.workersResolve[ workerId ] = resolve;\n\t\t\t\tthis.workers[ workerId ].postMessage( msg, transfer );\n\n\t\t\t} else {\n\n\t\t\t\tthis.queue.push( { resolve, msg, transfer } );\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.workers.forEach( ( worker ) => worker.terminate() );\n\t\tthis.workersResolve.length = 0;\n\t\tthis.workers.length = 0;\n\t\tthis.queue.length = 0;\n\t\tthis.workerStatus = 0;\n\n\t}\n\n}\n", "let A,I,B;const g={env:{emscripten_notify_memory_growth:function(A){B=new Uint8Array(I.exports.memory.buffer)}}};class Q{init(){return A||(A=\"undefined\"!=typeof fetch?fetch(\"data:application/wasm;base64,\"+C).then(A=>A.arrayBuffer()).then(A=>WebAssembly.instantiate(A,g)).then(this._init):WebAssembly.instantiate(Buffer.from(C,\"base64\"),g).then(this._init),A)}_init(A){I=A.instance,g.env.emscripten_notify_memory_growth(0)}decode(A,g=0){if(!I)throw new Error(\"ZSTDDecoder: Await .init() before decoding.\");const Q=A.byteLength,C=I.exports.malloc(Q);B.set(A,C),g=g||Number(I.exports.ZSTD_findDecompressedSize(C,Q));const E=I.exports.malloc(g),i=I.exports.ZSTD_decompress(E,g,C,Q),D=B.slice(E,E+i);return I.exports.free(C),I.exports.free(E),D}}const C=\"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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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\";export{Q as ZSTDDecoder};\n", "/**\n * Loader for KTX 2.0 GPU Texture containers.\n *\n * KTX 2.0 is a container format for various GPU texture formats. The loader\n * supports Basis Universal GPU textures, which can be quickly transcoded to\n * a wide variety of GPU texture compression formats, as well as some\n * uncompressed DataTexture and Data3DTexture formats.\n *\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n */\n\nimport {\n\tCompressedTexture,\n\tCompressedArrayTexture,\n\tCompressedCubeTexture,\n\tData3DTexture,\n\tDataTexture,\n\tDisplayP3ColorSpace,\n\tFileLoader,\n\tFloatType,\n\tHalfFloatType,\n\tNoColorSpace,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearDisplayP3ColorSpace,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tRedFormat,\n\tRGB_ETC1_Format,\n\tRGB_ETC2_Format,\n\tRGB_PVRTC_4BPPV1_Format,\n\tRGBA_ASTC_4x4_Format,\n\tRGBA_ASTC_6x6_Format,\n\tRGBA_BPTC_Format,\n\tRGBA_ETC2_EAC_Format,\n\tRGBA_PVRTC_4BPPV1_Format,\n\tRGBA_S3TC_DXT5_Format,\n\tRGBA_S3TC_DXT1_Format,\n\tRGBAFormat,\n\tRGFormat,\n\tSRGBColorSpace,\n\tUnsignedByteType,\n} from 'three';\nimport { WorkerPool } from '../utils/WorkerPool.js';\nimport {\n\tread,\n\tKHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n\tKHR_DF_TRANSFER_SRGB,\n\tKHR_SUPERCOMPRESSION_NONE,\n\tKHR_SUPERCOMPRESSION_ZSTD,\n\tVK_FORMAT_UNDEFINED,\n\tVK_FORMAT_R16_SFLOAT,\n\tVK_FORMAT_R16G16_SFLOAT,\n\tVK_FORMAT_R16G16B16A16_SFLOAT,\n\tVK_FORMAT_R32_SFLOAT,\n\tVK_FORMAT_R32G32_SFLOAT,\n\tVK_FORMAT_R32G32B32A32_SFLOAT,\n\tVK_FORMAT_R8_SRGB,\n\tVK_FORMAT_R8_UNORM,\n\tVK_FORMAT_R8G8_SRGB,\n\tVK_FORMAT_R8G8_UNORM,\n\tVK_FORMAT_R8G8B8A8_SRGB,\n\tVK_FORMAT_R8G8B8A8_UNORM,\n\tVK_FORMAT_ASTC_6x6_SRGB_BLOCK,\n\tVK_FORMAT_ASTC_6x6_UNORM_BLOCK,\n\tKHR_DF_PRIMARIES_UNSPECIFIED,\n\tKHR_DF_PRIMARIES_BT709,\n\tKHR_DF_PRIMARIES_DISPLAYP3\n} from '../libs/ktx-parse.module.js';\nimport { ZSTDDecoder } from '../libs/zstddec.module.js';\n\nconst _taskCache = new WeakMap();\n\nlet _activeLoaders = 0;\n\nlet _zstd;\n\nclass KTX2Loader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.transcoderPath = '';\n\t\tthis.transcoderBinary = null;\n\t\tthis.transcoderPending = null;\n\n\t\tthis.workerPool = new WorkerPool();\n\t\tthis.workerSourceURL = '';\n\t\tthis.workerConfig = null;\n\n\t\tif ( typeof MSC_TRANSCODER !== 'undefined' ) {\n\n\t\t\tconsole.warn(\n\n\t\t\t\t'THREE.KTX2Loader: Please update to latest \"basis_transcoder\".'\n\t\t\t\t+ ' \"msc_basis_transcoder\" is no longer supported in three.js r125+.'\n\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\tsetTranscoderPath( path ) {\n\n\t\tthis.transcoderPath = path;\n\n\t\treturn this;\n\n\t}\n\n\tsetWorkerLimit( num ) {\n\n\t\tthis.workerPool.setWorkerLimit( num );\n\n\t\treturn this;\n\n\t}\n\n\tasync detectSupportAsync( renderer ) {\n\n\t\tthis.workerConfig = {\n\t\t\tastcSupported: await renderer.hasFeatureAsync( 'texture-compression-astc' ),\n\t\t\tetc1Supported: await renderer.hasFeatureAsync( 'texture-compression-etc1' ),\n\t\t\tetc2Supported: await renderer.hasFeatureAsync( 'texture-compression-etc2' ),\n\t\t\tdxtSupported: await renderer.hasFeatureAsync( 'texture-compression-bc' ),\n\t\t\tbptcSupported: await renderer.hasFeatureAsync( 'texture-compression-bptc' ),\n\t\t\tpvrtcSupported: await renderer.hasFeatureAsync( 'texture-compression-pvrtc' )\n\t\t};\n\n\t\treturn this;\n\n\t}\n\n\tdetectSupport( renderer ) {\n\n\t\tif ( renderer.isWebGPURenderer === true ) {\n\n\t\t\tthis.workerConfig = {\n\t\t\t\tastcSupported: renderer.hasFeature( 'texture-compression-astc' ),\n\t\t\t\tetc1Supported: renderer.hasFeature( 'texture-compression-etc1' ),\n\t\t\t\tetc2Supported: renderer.hasFeature( 'texture-compression-etc2' ),\n\t\t\t\tdxtSupported: renderer.hasFeature( 'texture-compression-bc' ),\n\t\t\t\tbptcSupported: renderer.hasFeature( 'texture-compression-bptc' ),\n\t\t\t\tpvrtcSupported: renderer.hasFeature( 'texture-compression-pvrtc' )\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tthis.workerConfig = {\n\t\t\t\tastcSupported: renderer.extensions.has( 'WEBGL_compressed_texture_astc' ),\n\t\t\t\tetc1Supported: renderer.extensions.has( 'WEBGL_compressed_texture_etc1' ),\n\t\t\t\tetc2Supported: renderer.extensions.has( 'WEBGL_compressed_texture_etc' ),\n\t\t\t\tdxtSupported: renderer.extensions.has( 'WEBGL_compressed_texture_s3tc' ),\n\t\t\t\tbptcSupported: renderer.extensions.has( 'EXT_texture_compression_bptc' ),\n\t\t\t\tpvrtcSupported: renderer.extensions.has( 'WEBGL_compressed_texture_pvrtc' )\n\t\t\t\t\t|| renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )\n\t\t\t};\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinit() {\n\n\t\tif ( ! this.transcoderPending ) {\n\n\t\t\t// Load transcoder wrapper.\n\t\t\tconst jsLoader = new FileLoader( this.manager );\n\t\t\tjsLoader.setPath( this.transcoderPath );\n\t\t\tjsLoader.setWithCredentials( this.withCredentials );\n\t\t\tconst jsContent = jsLoader.loadAsync( 'basis_transcoder.js' );\n\n\t\t\t// Load transcoder WASM binary.\n\t\t\tconst binaryLoader = new FileLoader( this.manager );\n\t\t\tbinaryLoader.setPath( this.transcoderPath );\n\t\t\tbinaryLoader.setResponseType( 'arraybuffer' );\n\t\t\tbinaryLoader.setWithCredentials( this.withCredentials );\n\t\t\tconst binaryContent = binaryLoader.loadAsync( 'basis_transcoder.wasm' );\n\n\t\t\tthis.transcoderPending = Promise.all( [ jsContent, binaryContent ] )\n\t\t\t\t.then( ( [ jsContent, binaryContent ] ) => {\n\n\t\t\t\t\tconst fn = KTX2Loader.BasisWorker.toString();\n\n\t\t\t\t\tconst body = [\n\t\t\t\t\t\t'/* constants */',\n\t\t\t\t\t\t'let _EngineFormat = ' + JSON.stringify( KTX2Loader.EngineFormat ),\n\t\t\t\t\t\t'let _TranscoderFormat = ' + JSON.stringify( KTX2Loader.TranscoderFormat ),\n\t\t\t\t\t\t'let _BasisFormat = ' + JSON.stringify( KTX2Loader.BasisFormat ),\n\t\t\t\t\t\t'/* basis_transcoder.js */',\n\t\t\t\t\t\tjsContent,\n\t\t\t\t\t\t'/* worker */',\n\t\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t\t].join( '\\n' );\n\n\t\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\t\t\t\t\tthis.transcoderBinary = binaryContent;\n\n\t\t\t\t\tthis.workerPool.setWorkerCreator( () => {\n\n\t\t\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\t\t\t\t\t\tconst transcoderBinary = this.transcoderBinary.slice( 0 );\n\n\t\t\t\t\t\tworker.postMessage( { type: 'init', config: this.workerConfig, transcoderBinary }, [ transcoderBinary ] );\n\n\t\t\t\t\t\treturn worker;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\tif ( _activeLoaders > 0 ) {\n\n\t\t\t\t// Each instance loads a transcoder and allocates workers, increasing network and memory cost.\n\n\t\t\t\tconsole.warn(\n\n\t\t\t\t\t'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.'\n\t\t\t\t\t+ ' Use a single KTX2Loader instance, or call .dispose() on old instances.'\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\t_activeLoaders ++;\n\n\t\t}\n\n\t\treturn this.transcoderPending;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.workerConfig === null ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.' );\n\n\t\t}\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t\t// again from this thread.\n\t\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\t\treturn cachedTask.promise.then( onLoad ).catch( onError );\n\n\t\t\t}\n\n\t\t\tthis._createTexture( buffer )\n\t\t\t\t.then( ( texture ) => onLoad ? onLoad( texture ) : null )\n\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t_createTextureFrom( transcodeResult, container ) {\n\n\t\tconst { faces, width, height, format, type, error, dfdFlags } = transcodeResult;\n\n\t\tif ( type === 'error' ) return Promise.reject( error );\n\n\t\tlet texture;\n\n\t\tif ( container.faceCount === 6 ) {\n\n\t\t\ttexture = new CompressedCubeTexture( faces, format, UnsignedByteType );\n\n\t\t} else {\n\n\t\t\tconst mipmaps = faces[ 0 ].mipmaps;\n\n\t\t\ttexture = container.layerCount > 1\n\t\t\t\t? new CompressedArrayTexture( mipmaps, width, height, container.layerCount, format, UnsignedByteType )\n\t\t\t\t: new CompressedTexture( mipmaps, width, height, format, UnsignedByteType );\n\n\t\t}\n\n\t\ttexture.minFilter = faces[ 0 ].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;\n\t\ttexture.magFilter = LinearFilter;\n\t\ttexture.generateMipmaps = false;\n\n\t\ttexture.needsUpdate = true;\n\t\ttexture.colorSpace = parseColorSpace( container );\n\t\ttexture.premultiplyAlpha = !! ( dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED );\n\n\t\treturn texture;\n\n\t}\n\n\t/**\n\t * @param {ArrayBuffer} buffer\n\t * @param {object?} config\n\t * @return {Promise}\n\t */\n\tasync _createTexture( buffer, config = {} ) {\n\n\t\tconst container = read( new Uint8Array( buffer ) );\n\n\t\tif ( container.vkFormat !== VK_FORMAT_UNDEFINED ) {\n\n\t\t\treturn createRawTexture( container );\n\n\t\t}\n\n\t\t//\n\t\tconst taskConfig = config;\n\t\tconst texturePending = this.init().then( () => {\n\n\t\t\treturn this.workerPool.postMessage( { type: 'transcode', buffer, taskConfig: taskConfig }, [ buffer ] );\n\n\t\t} ).then( ( e ) => this._createTextureFrom( e.data, container ) );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffer, { promise: texturePending } );\n\n\t\treturn texturePending;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.workerPool.dispose();\n\t\tif ( this.workerSourceURL ) URL.revokeObjectURL( this.workerSourceURL );\n\n\t\t_activeLoaders --;\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n/* CONSTANTS */\n\nKTX2Loader.BasisFormat = {\n\tETC1S: 0,\n\tUASTC_4x4: 1,\n};\n\nKTX2Loader.TranscoderFormat = {\n\tETC1: 0,\n\tETC2: 1,\n\tBC1: 2,\n\tBC3: 3,\n\tBC4: 4,\n\tBC5: 5,\n\tBC7_M6_OPAQUE_ONLY: 6,\n\tBC7_M5: 7,\n\tPVRTC1_4_RGB: 8,\n\tPVRTC1_4_RGBA: 9,\n\tASTC_4x4: 10,\n\tATC_RGB: 11,\n\tATC_RGBA_INTERPOLATED_ALPHA: 12,\n\tRGBA32: 13,\n\tRGB565: 14,\n\tBGR565: 15,\n\tRGBA4444: 16,\n};\n\nKTX2Loader.EngineFormat = {\n\tRGBAFormat: RGBAFormat,\n\tRGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,\n\tRGBA_BPTC_Format: RGBA_BPTC_Format,\n\tRGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,\n\tRGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,\n\tRGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,\n\tRGB_ETC1_Format: RGB_ETC1_Format,\n\tRGB_ETC2_Format: RGB_ETC2_Format,\n\tRGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,\n\tRGBA_S3TC_DXT1_Format: RGBA_S3TC_DXT1_Format,\n};\n\n\n/* WEB WORKER */\n\nKTX2Loader.BasisWorker = function () {\n\n\tlet config;\n\tlet transcoderPending;\n\tlet BasisModule;\n\n\tconst EngineFormat = _EngineFormat; // eslint-disable-line no-undef\n\tconst TranscoderFormat = _TranscoderFormat; // eslint-disable-line no-undef\n\tconst BasisFormat = _BasisFormat; // eslint-disable-line no-undef\n\n\tself.addEventListener( 'message', function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tconfig = message.config;\n\t\t\t\tinit( message.transcoderBinary );\n\t\t\t\tbreak;\n\n\t\t\tcase 'transcode':\n\t\t\t\ttranscoderPending.then( () => {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode( message.buffer );\n\n\t\t\t\t\t\tself.postMessage( { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdFlags }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t} );\n\n\tfunction init( wasmBinary ) {\n\n\t\ttranscoderPending = new Promise( ( resolve ) => {\n\n\t\t\tBasisModule = { wasmBinary, onRuntimeInitialized: resolve };\n\t\t\tBASIS( BasisModule ); // eslint-disable-line no-undef\n\n\t\t} ).then( () => {\n\n\t\t\tBasisModule.initializeBasis();\n\n\t\t\tif ( BasisModule.KTX2File === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.KTX2Loader: Please update Basis Universal transcoder.' );\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tfunction transcode( buffer ) {\n\n\t\tconst ktx2File = new BasisModule.KTX2File( new Uint8Array( buffer ) );\n\n\t\tfunction cleanup() {\n\n\t\t\tktx2File.close();\n\t\t\tktx2File.delete();\n\n\t\t}\n\n\t\tif ( ! ktx2File.isValid() ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file' );\n\n\t\t}\n\n\t\tconst basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;\n\t\tconst width = ktx2File.getWidth();\n\t\tconst height = ktx2File.getHeight();\n\t\tconst layerCount = ktx2File.getLayers() || 1;\n\t\tconst levelCount = ktx2File.getLevels();\n\t\tconst faceCount = ktx2File.getFaces();\n\t\tconst hasAlpha = ktx2File.getHasAlpha();\n\t\tconst dfdFlags = ktx2File.getDFDFlags();\n\n\t\tconst { transcoderFormat, engineFormat } = getTranscoderFormat( basisFormat, width, height, hasAlpha );\n\n\t\tif ( ! width || ! height || ! levelCount ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.KTX2Loader:\tInvalid texture' );\n\n\t\t}\n\n\t\tif ( ! ktx2File.startTranscoding() ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.KTX2Loader: .startTranscoding failed' );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst buffers = [];\n\n\t\tfor ( let face = 0; face < faceCount; face ++ ) {\n\n\t\t\tconst mipmaps = [];\n\n\t\t\tfor ( let mip = 0; mip < levelCount; mip ++ ) {\n\n\t\t\t\tconst layerMips = [];\n\n\t\t\t\tlet mipWidth, mipHeight;\n\n\t\t\t\tfor ( let layer = 0; layer < layerCount; layer ++ ) {\n\n\t\t\t\t\tconst levelInfo = ktx2File.getImageLevelInfo( mip, layer, face );\n\n\t\t\t\t\tif ( face === 0 && mip === 0 && layer === 0 && ( levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0 ) ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( levelCount > 1 ) {\n\n\t\t\t\t\t\tmipWidth = levelInfo.origWidth;\n\t\t\t\t\t\tmipHeight = levelInfo.origHeight;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Handles non-multiple-of-four dimensions in textures without mipmaps. Textures with\n\t\t\t\t\t\t// mipmaps must use multiple-of-four dimensions, for some texture formats and APIs.\n\t\t\t\t\t\t// See mrdoob/three.js#25908.\n\t\t\t\t\t\tmipWidth = levelInfo.width;\n\t\t\t\t\t\tmipHeight = levelInfo.height;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst dst = new Uint8Array( ktx2File.getImageTranscodedSizeInBytes( mip, layer, 0, transcoderFormat ) );\n\t\t\t\t\tconst status = ktx2File.transcodeImage( dst, mip, layer, face, transcoderFormat, 0, - 1, - 1 );\n\n\t\t\t\t\tif ( ! status ) {\n\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\tthrow new Error( 'THREE.KTX2Loader: .transcodeImage failed.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayerMips.push( dst );\n\n\t\t\t\t}\n\n\t\t\t\tconst mipData = concat( layerMips );\n\n\t\t\t\tmipmaps.push( { data: mipData, width: mipWidth, height: mipHeight } );\n\t\t\t\tbuffers.push( mipData.buffer );\n\n\t\t\t}\n\n\t\t\tfaces.push( { mipmaps, width, height, format: engineFormat } );\n\n\t\t}\n\n\t\tcleanup();\n\n\t\treturn { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags };\n\n\t}\n\n\t//\n\n\t// Optimal choice of a transcoder target format depends on the Basis format (ETC1S or UASTC),\n\t// device capabilities, and texture dimensions. The list below ranks the formats separately\n\t// for ETC1S and UASTC.\n\t//\n\t// In some cases, transcoding UASTC to RGBA32 might be preferred for higher quality (at\n\t// significant memory cost) compared to ETC1/2, BC1/3, and PVRTC. The transcoder currently\n\t// chooses RGBA32 only as a last resort and does not expose that option to the caller.\n\tconst FORMAT_OPTIONS = [\n\t\t{\n\t\t\tif: 'astcSupported',\n\t\t\tbasisFormat: [ BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4 ],\n\t\t\tengineFormat: [ EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format ],\n\t\t\tpriorityETC1S: Infinity,\n\t\t\tpriorityUASTC: 1,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'bptcSupported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5 ],\n\t\t\tengineFormat: [ EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format ],\n\t\t\tpriorityETC1S: 3,\n\t\t\tpriorityUASTC: 2,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'dxtSupported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.BC1, TranscoderFormat.BC3 ],\n\t\t\tengineFormat: [ EngineFormat.RGBA_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format ],\n\t\t\tpriorityETC1S: 4,\n\t\t\tpriorityUASTC: 5,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'etc2Supported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.ETC1, TranscoderFormat.ETC2 ],\n\t\t\tengineFormat: [ EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format ],\n\t\t\tpriorityETC1S: 1,\n\t\t\tpriorityUASTC: 3,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'etc1Supported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.ETC1 ],\n\t\t\tengineFormat: [ EngineFormat.RGB_ETC1_Format ],\n\t\t\tpriorityETC1S: 2,\n\t\t\tpriorityUASTC: 4,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'pvrtcSupported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA ],\n\t\t\tengineFormat: [ EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format ],\n\t\t\tpriorityETC1S: 5,\n\t\t\tpriorityUASTC: 6,\n\t\t\tneedsPowerOfTwo: true,\n\t\t},\n\t];\n\n\tconst ETC1S_OPTIONS = FORMAT_OPTIONS.sort( function ( a, b ) {\n\n\t\treturn a.priorityETC1S - b.priorityETC1S;\n\n\t} );\n\tconst UASTC_OPTIONS = FORMAT_OPTIONS.sort( function ( a, b ) {\n\n\t\treturn a.priorityUASTC - b.priorityUASTC;\n\n\t} );\n\n\tfunction getTranscoderFormat( basisFormat, width, height, hasAlpha ) {\n\n\t\tlet transcoderFormat;\n\t\tlet engineFormat;\n\n\t\tconst options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS;\n\n\t\tfor ( let i = 0; i < options.length; i ++ ) {\n\n\t\t\tconst opt = options[ i ];\n\n\t\t\tif ( ! config[ opt.if ] ) continue;\n\t\t\tif ( ! opt.basisFormat.includes( basisFormat ) ) continue;\n\t\t\tif ( hasAlpha && opt.transcoderFormat.length < 2 ) continue;\n\t\t\tif ( opt.needsPowerOfTwo && ! ( isPowerOfTwo( width ) && isPowerOfTwo( height ) ) ) continue;\n\n\t\t\ttranscoderFormat = opt.transcoderFormat[ hasAlpha ? 1 : 0 ];\n\t\t\tengineFormat = opt.engineFormat[ hasAlpha ? 1 : 0 ];\n\n\t\t\treturn { transcoderFormat, engineFormat };\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.' );\n\n\t\ttranscoderFormat = TranscoderFormat.RGBA32;\n\t\tengineFormat = EngineFormat.RGBAFormat;\n\n\t\treturn { transcoderFormat, engineFormat };\n\n\t}\n\n\tfunction isPowerOfTwo( value ) {\n\n\t\tif ( value <= 2 ) return true;\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t}\n\n\t/** Concatenates N byte arrays. */\n\tfunction concat( arrays ) {\n\n\t\tif ( arrays.length === 1 ) return arrays[ 0 ];\n\n\t\tlet totalByteLength = 0;\n\n\t\tfor ( let i = 0; i < arrays.length; i ++ ) {\n\n\t\t\tconst array = arrays[ i ];\n\t\t\ttotalByteLength += array.byteLength;\n\n\t\t}\n\n\t\tconst result = new Uint8Array( totalByteLength );\n\n\t\tlet byteOffset = 0;\n\n\t\tfor ( let i = 0; i < arrays.length; i ++ ) {\n\n\t\t\tconst array = arrays[ i ];\n\t\t\tresult.set( array, byteOffset );\n\n\t\t\tbyteOffset += array.byteLength;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n};\n\n//\n// Parsing for non-Basis textures. These textures are may have supercompression\n// like Zstd, but they do not require transcoding.\n\nconst UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGFormat, RedFormat ] );\n\nconst FORMAT_MAP = {\n\n\t[ VK_FORMAT_R32G32B32A32_SFLOAT ]: RGBAFormat,\n\t[ VK_FORMAT_R16G16B16A16_SFLOAT ]: RGBAFormat,\n\t[ VK_FORMAT_R8G8B8A8_UNORM ]: RGBAFormat,\n\t[ VK_FORMAT_R8G8B8A8_SRGB ]: RGBAFormat,\n\n\t[ VK_FORMAT_R32G32_SFLOAT ]: RGFormat,\n\t[ VK_FORMAT_R16G16_SFLOAT ]: RGFormat,\n\t[ VK_FORMAT_R8G8_UNORM ]: RGFormat,\n\t[ VK_FORMAT_R8G8_SRGB ]: RGFormat,\n\n\t[ VK_FORMAT_R32_SFLOAT ]: RedFormat,\n\t[ VK_FORMAT_R16_SFLOAT ]: RedFormat,\n\t[ VK_FORMAT_R8_SRGB ]: RedFormat,\n\t[ VK_FORMAT_R8_UNORM ]: RedFormat,\n\n\t[ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: RGBA_ASTC_6x6_Format,\n\t[ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: RGBA_ASTC_6x6_Format,\n\n};\n\nconst TYPE_MAP = {\n\n\t[ VK_FORMAT_R32G32B32A32_SFLOAT ]: FloatType,\n\t[ VK_FORMAT_R16G16B16A16_SFLOAT ]: HalfFloatType,\n\t[ VK_FORMAT_R8G8B8A8_UNORM ]: UnsignedByteType,\n\t[ VK_FORMAT_R8G8B8A8_SRGB ]: UnsignedByteType,\n\n\t[ VK_FORMAT_R32G32_SFLOAT ]: FloatType,\n\t[ VK_FORMAT_R16G16_SFLOAT ]: HalfFloatType,\n\t[ VK_FORMAT_R8G8_UNORM ]: UnsignedByteType,\n\t[ VK_FORMAT_R8G8_SRGB ]: UnsignedByteType,\n\n\t[ VK_FORMAT_R32_SFLOAT ]: FloatType,\n\t[ VK_FORMAT_R16_SFLOAT ]: HalfFloatType,\n\t[ VK_FORMAT_R8_SRGB ]: UnsignedByteType,\n\t[ VK_FORMAT_R8_UNORM ]: UnsignedByteType,\n\n\t[ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: UnsignedByteType,\n\t[ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: UnsignedByteType,\n\n};\n\nasync function createRawTexture( container ) {\n\n\tconst { vkFormat } = container;\n\n\tif ( FORMAT_MAP[ vkFormat ] === undefined ) {\n\n\t\tthrow new Error( 'THREE.KTX2Loader: Unsupported vkFormat.' );\n\n\t}\n\n\t//\n\n\tlet zstd;\n\n\tif ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD ) {\n\n\t\tif ( ! _zstd ) {\n\n\t\t\t_zstd = new Promise( async ( resolve ) => {\n\n\t\t\t\tconst zstd = new ZSTDDecoder();\n\t\t\t\tawait zstd.init();\n\t\t\t\tresolve( zstd );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tzstd = await _zstd;\n\n\t}\n\n\t//\n\n\tconst mipmaps = [];\n\n\n\tfor ( let levelIndex = 0; levelIndex < container.levels.length; levelIndex ++ ) {\n\n\t\tconst levelWidth = Math.max( 1, container.pixelWidth >> levelIndex );\n\t\tconst levelHeight = Math.max( 1, container.pixelHeight >> levelIndex );\n\t\tconst levelDepth = container.pixelDepth ? Math.max( 1, container.pixelDepth >> levelIndex ) : 0;\n\n\t\tconst level = container.levels[ levelIndex ];\n\n\t\tlet levelData;\n\n\t\tif ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE ) {\n\n\t\t\tlevelData = level.levelData;\n\n\t\t} else if ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD ) {\n\n\t\t\tlevelData = zstd.decode( level.levelData, level.uncompressedByteLength );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Unsupported supercompressionScheme.' );\n\n\t\t}\n\n\t\tlet data;\n\n\t\tif ( TYPE_MAP[ vkFormat ] === FloatType ) {\n\n\t\t\tdata = new Float32Array(\n\n\t\t\t\tlevelData.buffer,\n\t\t\t\tlevelData.byteOffset,\n\t\t\t\tlevelData.byteLength / Float32Array.BYTES_PER_ELEMENT\n\n\t\t\t);\n\n\t\t} else if ( TYPE_MAP[ vkFormat ] === HalfFloatType ) {\n\n\t\t\tdata = new Uint16Array(\n\n\t\t\t\tlevelData.buffer,\n\t\t\t\tlevelData.byteOffset,\n\t\t\t\tlevelData.byteLength / Uint16Array.BYTES_PER_ELEMENT\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tdata = levelData;\n\n\t\t}\n\n\t\tmipmaps.push( {\n\n\t\t\tdata: data,\n\t\t\twidth: levelWidth,\n\t\t\theight: levelHeight,\n\t\t\tdepth: levelDepth,\n\n\t\t} );\n\n\t}\n\n\tlet texture;\n\n\tif ( UNCOMPRESSED_FORMATS.has( FORMAT_MAP[ vkFormat ] ) ) {\n\n\t\ttexture = container.pixelDepth === 0\n\t\t\t? new DataTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight )\n\t\t\t: new Data3DTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight, container.pixelDepth );\n\n\t} else {\n\n\t\tif ( container.pixelDepth > 0 ) throw new Error( 'THREE.KTX2Loader: Unsupported pixelDepth.' );\n\n\t\ttexture = new CompressedTexture( mipmaps, container.pixelWidth, container.pixelHeight );\n\n\t}\n\n\ttexture.mipmaps = mipmaps;\n\n\ttexture.type = TYPE_MAP[ vkFormat ];\n\ttexture.format = FORMAT_MAP[ vkFormat ];\n\ttexture.colorSpace = parseColorSpace( container );\n\ttexture.needsUpdate = true;\n\n\t//\n\n\treturn Promise.resolve( texture );\n\n}\n\nfunction parseColorSpace( container ) {\n\n\tconst dfd = container.dataFormatDescriptor[ 0 ];\n\n\tif ( dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709 ) {\n\n\t\treturn dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace;\n\n\t} else if ( dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3 ) {\n\n\t\treturn dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace;\n\n\t} else if ( dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED ) {\n\n\t\treturn NoColorSpace;\n\n\t} else {\n\n\t\tconsole.warn( `THREE.KTX2Loader: Unsupported color primaries, \"${ dfd.colorPrimaries }\"` );\n\t\treturn NoColorSpace;\n\n\t}\n\n}\n\nexport { KTX2Loader };\n", "import {\n\tCompressedTextureLoader\n} from 'three';\n\n/**\n * for description see https://www.khronos.org/opengles/sdk/tools/KTX/\n * for file layout see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/\n *\n * ported from https://github.com/BabylonJS/Babylon.js/blob/master/src/Misc/khronosTextureContainer.ts\n */\n\n\nclass KTXLoader extends CompressedTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tparse( buffer, loadMipmaps ) {\n\n\t\tconst ktx = new KhronosTextureContainer( buffer, 1 );\n\n\t\treturn {\n\t\t\tmipmaps: ktx.mipmaps( loadMipmaps ),\n\t\t\twidth: ktx.pixelWidth,\n\t\t\theight: ktx.pixelHeight,\n\t\t\tformat: ktx.glInternalFormat,\n\t\t\tisCubemap: ktx.numberOfFaces === 6,\n\t\t\tmipmapCount: ktx.numberOfMipmapLevels\n\t\t};\n\n\t}\n\n}\n\n\nconst HEADER_LEN = 12 + ( 13 * 4 ); // identifier + header elements (not including key value meta-data pairs)\n// load types\nconst COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()\n//const COMPRESSED_3D = 1; // uses a gl.compressedTexImage3D()\n//const TEX_2D = 2; // uses a gl.texImage2D()\n//const TEX_3D = 3; // uses a gl.texImage3D()\n\nclass KhronosTextureContainer {\n\n\t/**\n\t * @param {ArrayBuffer} arrayBuffer- contents of the KTX container file\n\t * @param {number} facesExpected- should be either 1 or 6, based whether a cube texture or or\n\t * @param {boolean} threeDExpected- provision for indicating that data should be a 3D texture, not implemented\n\t * @param {boolean} textureArrayExpected- provision for indicating that data should be a texture array, not implemented\n\t */\n\tconstructor( arrayBuffer, facesExpected /*, threeDExpected, textureArrayExpected */ ) {\n\n\t\tthis.arrayBuffer = arrayBuffer;\n\n\t\t// Test that it is a ktx formatted file, based on the first 12 bytes, character representation is:\n\t\t// '´', 'K', 'T', 'X', ' ', '1', '1', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n\t\t// 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A\n\t\tconst identifier = new Uint8Array( this.arrayBuffer, 0, 12 );\n\t\tif ( identifier[ 0 ] !== 0xAB ||\n\t\t\tidentifier[ 1 ] !== 0x4B ||\n\t\t\tidentifier[ 2 ] !== 0x54 ||\n\t\t\tidentifier[ 3 ] !== 0x58 ||\n\t\t\tidentifier[ 4 ] !== 0x20 ||\n\t\t\tidentifier[ 5 ] !== 0x31 ||\n\t\t\tidentifier[ 6 ] !== 0x31 ||\n\t\t\tidentifier[ 7 ] !== 0xBB ||\n\t\t\tidentifier[ 8 ] !== 0x0D ||\n\t\t\tidentifier[ 9 ] !== 0x0A ||\n\t\t\tidentifier[ 10 ] !== 0x1A ||\n\t\t\tidentifier[ 11 ] !== 0x0A ) {\n\n\t\t\tconsole.error( 'texture missing KTX identifier' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// load the reset of the header in native 32 bit uint\n\t\tconst dataSize = Uint32Array.BYTES_PER_ELEMENT;\n\t\tconst headerDataView = new DataView( this.arrayBuffer, 12, 13 * dataSize );\n\t\tconst endianness = headerDataView.getUint32( 0, true );\n\t\tconst littleEndian = endianness === 0x04030201;\n\n\t\tthis.glType = headerDataView.getUint32( 1 * dataSize, littleEndian ); // must be 0 for compressed textures\n\t\tthis.glTypeSize = headerDataView.getUint32( 2 * dataSize, littleEndian ); // must be 1 for compressed textures\n\t\tthis.glFormat = headerDataView.getUint32( 3 * dataSize, littleEndian ); // must be 0 for compressed textures\n\t\tthis.glInternalFormat = headerDataView.getUint32( 4 * dataSize, littleEndian ); // the value of arg passed to gl.compressedTexImage2D(,,x,,,,)\n\t\tthis.glBaseInternalFormat = headerDataView.getUint32( 5 * dataSize, littleEndian ); // specify GL_RGB, GL_RGBA, GL_ALPHA, etc (un-compressed only)\n\t\tthis.pixelWidth = headerDataView.getUint32( 6 * dataSize, littleEndian ); // level 0 value of arg passed to gl.compressedTexImage2D(,,,x,,,)\n\t\tthis.pixelHeight = headerDataView.getUint32( 7 * dataSize, littleEndian ); // level 0 value of arg passed to gl.compressedTexImage2D(,,,,x,,)\n\t\tthis.pixelDepth = headerDataView.getUint32( 8 * dataSize, littleEndian ); // level 0 value of arg passed to gl.compressedTexImage3D(,,,,,x,,)\n\t\tthis.numberOfArrayElements = headerDataView.getUint32( 9 * dataSize, littleEndian ); // used for texture arrays\n\t\tthis.numberOfFaces = headerDataView.getUint32( 10 * dataSize, littleEndian ); // used for cubemap textures, should either be 1 or 6\n\t\tthis.numberOfMipmapLevels = headerDataView.getUint32( 11 * dataSize, littleEndian ); // number of levels; disregard possibility of 0 for compressed textures\n\t\tthis.bytesOfKeyValueData = headerDataView.getUint32( 12 * dataSize, littleEndian ); // the amount of space after the header for meta-data\n\n\t\t// Make sure we have a compressed type. Not only reduces work, but probably better to let dev know they are not compressing.\n\t\tif ( this.glType !== 0 ) {\n\n\t\t\tconsole.warn( 'only compressed formats currently supported' );\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// value of zero is an indication to generate mipmaps @ runtime. Not usually allowed for compressed, so disregard.\n\t\t\tthis.numberOfMipmapLevels = Math.max( 1, this.numberOfMipmapLevels );\n\n\t\t}\n\n\t\tif ( this.pixelHeight === 0 || this.pixelDepth !== 0 ) {\n\n\t\t\tconsole.warn( 'only 2D textures currently supported' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.numberOfArrayElements !== 0 ) {\n\n\t\t\tconsole.warn( 'texture arrays not currently supported' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.numberOfFaces !== facesExpected ) {\n\n\t\t\tconsole.warn( 'number of faces expected' + facesExpected + ', but found ' + this.numberOfFaces );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// we now have a completely validated file, so could use existence of loadType as success\n\t\t// would need to make this more elaborate & adjust checks above to support more than one load type\n\t\tthis.loadType = COMPRESSED_2D;\n\n\t}\n\n\tmipmaps( loadMipmaps ) {\n\n\t\tconst mipmaps = [];\n\n\t\t// initialize width & height for level 1\n\t\tlet dataOffset = HEADER_LEN + this.bytesOfKeyValueData;\n\t\tlet width = this.pixelWidth;\n\t\tlet height = this.pixelHeight;\n\t\tconst mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1;\n\n\t\tfor ( let level = 0; level < mipmapCount; level ++ ) {\n\n\t\t\tconst imageSize = new Int32Array( this.arrayBuffer, dataOffset, 1 )[ 0 ]; // size per face, since not supporting array cubemaps\n\t\t\tdataOffset += 4; // size of the image + 4 for the imageSize field\n\n\t\t\tfor ( let face = 0; face < this.numberOfFaces; face ++ ) {\n\n\t\t\t\tconst byteArray = new Uint8Array( this.arrayBuffer, dataOffset, imageSize );\n\n\t\t\t\tmipmaps.push( { 'data': byteArray, 'width': width, 'height': height } );\n\n\t\t\t\tdataOffset += imageSize;\n\t\t\t\tdataOffset += 3 - ( ( imageSize + 3 ) % 4 ); // add padding for odd sized image\n\n\t\t\t}\n\n\t\t\twidth = Math.max( 1.0, width * 0.5 );\n\t\t\theight = Math.max( 1.0, height * 0.5 );\n\n\t\t}\n\n\t\treturn mipmaps;\n\n\t}\n\n}\n\nexport { KTXLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMatrix4,\n\tMesh,\n\tMeshStandardMaterial,\n\tShaderMaterial,\n\tSRGBColorSpace,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector3,\n\tRay\n} from 'three';\n\n// Special surface finish tag types.\n// Note: \"MATERIAL\" tag (e.g. GLITTER, SPECKLE) is not implemented\nconst FINISH_TYPE_DEFAULT = 0;\nconst FINISH_TYPE_CHROME = 1;\nconst FINISH_TYPE_PEARLESCENT = 2;\nconst FINISH_TYPE_RUBBER = 3;\nconst FINISH_TYPE_MATTE_METALLIC = 4;\nconst FINISH_TYPE_METAL = 5;\n\n// State machine to search a subobject path.\n// The LDraw standard establishes these various possible subfolders.\nconst FILE_LOCATION_TRY_PARTS = 0;\nconst FILE_LOCATION_TRY_P = 1;\nconst FILE_LOCATION_TRY_MODELS = 2;\nconst FILE_LOCATION_AS_IS = 3;\nconst FILE_LOCATION_TRY_RELATIVE = 4;\nconst FILE_LOCATION_TRY_ABSOLUTE = 5;\nconst FILE_LOCATION_NOT_FOUND = 6;\n\nconst MAIN_COLOUR_CODE = '16';\nconst MAIN_EDGE_COLOUR_CODE = '24';\n\nconst COLOR_SPACE_LDRAW = SRGBColorSpace;\n\nconst _tempVec0 = new Vector3();\nconst _tempVec1 = new Vector3();\n\nclass LDrawConditionalLineMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tdiffuse: {\n\t\t\t\t\t\tvalue: new Color()\n\t\t\t\t\t},\n\t\t\t\t\topacity: {\n\t\t\t\t\t\tvalue: 1.0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: /* glsl */`\n\t\t\t\tattribute vec3 control0;\n\t\t\t\tattribute vec3 control1;\n\t\t\t\tattribute vec3 direction;\n\t\t\t\tvarying float discardFlag;\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\tvoid main() {\n\t\t\t\t\t#include \n\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t\t// Transform the line segment ends and control points into camera clip space\n\t\t\t\t\tvec4 c0 = projectionMatrix * modelViewMatrix * vec4( control0, 1.0 );\n\t\t\t\t\tvec4 c1 = projectionMatrix * modelViewMatrix * vec4( control1, 1.0 );\n\t\t\t\t\tvec4 p0 = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tvec4 p1 = projectionMatrix * modelViewMatrix * vec4( position + direction, 1.0 );\n\n\t\t\t\t\tc0.xy /= c0.w;\n\t\t\t\t\tc1.xy /= c1.w;\n\t\t\t\t\tp0.xy /= p0.w;\n\t\t\t\t\tp1.xy /= p1.w;\n\n\t\t\t\t\t// Get the direction of the segment and an orthogonal vector\n\t\t\t\t\tvec2 dir = p1.xy - p0.xy;\n\t\t\t\t\tvec2 norm = vec2( -dir.y, dir.x );\n\n\t\t\t\t\t// Get control point directions from the line\n\t\t\t\t\tvec2 c0dir = c0.xy - p1.xy;\n\t\t\t\t\tvec2 c1dir = c1.xy - p1.xy;\n\n\t\t\t\t\t// If the vectors to the controls points are pointed in different directions away\n\t\t\t\t\t// from the line segment then the line should not be drawn.\n\t\t\t\t\tfloat d0 = dot( normalize( norm ), normalize( c0dir ) );\n\t\t\t\t\tfloat d1 = dot( normalize( norm ), normalize( c1dir ) );\n\t\t\t\t\tdiscardFlag = float( sign( d0 ) != sign( d1 ) );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\t\t\tuniform vec3 diffuse;\n\t\t\tuniform float opacity;\n\t\t\tvarying float discardFlag;\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\tvoid main() {\n\n\t\t\t\tif ( discardFlag > 0.5 ) discard;\n\n\t\t\t\t#include \n\t\t\t\tvec3 outgoingLight = vec3( 0.0 );\n\t\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\toutgoingLight = diffuseColor.rgb; // simple shader\n\t\t\t\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t}\n\t\t\t`,\n\n\t\t} );\n\n\t\tObject.defineProperties( this, {\n\n\t\t\topacity: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.opacity.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.opacity.value = value;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcolor: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.diffuse.value;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.setValues( parameters );\n\t\tthis.isLDrawConditionalLineMaterial = true;\n\n\t}\n\n}\n\nclass ConditionalLineSegments extends LineSegments {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\t\tthis.isConditionalLine = true;\n\n\t}\n\n}\n\nfunction generateFaceNormals( faces ) {\n\n\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tconst face = faces[ i ];\n\t\tconst vertices = face.vertices;\n\t\tconst v0 = vertices[ 0 ];\n\t\tconst v1 = vertices[ 1 ];\n\t\tconst v2 = vertices[ 2 ];\n\n\t\t_tempVec0.subVectors( v1, v0 );\n\t\t_tempVec1.subVectors( v2, v1 );\n\t\tface.faceNormal = new Vector3()\n\t\t\t.crossVectors( _tempVec0, _tempVec1 )\n\t\t\t.normalize();\n\n\t}\n\n}\n\nconst _ray = new Ray();\nfunction smoothNormals( faces, lineSegments, checkSubSegments = false ) {\n\n\t// NOTE: 1e2 is pretty coarse but was chosen to quantize the resulting value because\n\t// it allows edges to be smoothed as expected (see minifig arms).\n\t// --\n\t// And the vector values are initialize multiplied by 1 + 1e-10 to account for floating\n\t// point errors on vertices along quantization boundaries. Ie after matrix multiplication\n\t// vertices that should be merged might be set to \"1.7\" and \"1.6999...\" meaning they won't\n\t// get merged. This added epsilon attempts to push these error values to the same quantized\n\t// value for the sake of hashing. See \"AT-ST mini\" dishes. See mrdoob/three#23169.\n\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\n\t\treturn `${ x },${ y },${ z }`;\n\n\t}\n\n\tfunction hashEdge( v0, v1 ) {\n\n\t\treturn `${ hashVertex( v0 ) }_${ hashVertex( v1 ) }`;\n\n\t}\n\n\t// converts the two vertices to a ray with a normalized direction and origin of 0, 0, 0 projected\n\t// onto the original line.\n\tfunction toNormalizedRay( v0, v1, targetRay ) {\n\n\t\ttargetRay.direction.subVectors( v1, v0 ).normalize();\n\n\t\tconst scalar = v0.dot( targetRay.direction );\n\t\ttargetRay.origin.copy( v0 ).addScaledVector( targetRay.direction, - scalar );\n\n\t\treturn targetRay;\n\n\t}\n\n\tfunction hashRay( ray ) {\n\n\t\treturn hashEdge( ray.origin, ray.direction );\n\n\t}\n\n\tconst hardEdges = new Set();\n\tconst hardEdgeRays = new Map();\n\tconst halfEdgeList = {};\n\tconst normals = [];\n\n\t// Save the list of hard edges by hash\n\tfor ( let i = 0, l = lineSegments.length; i < l; i ++ ) {\n\n\t\tconst ls = lineSegments[ i ];\n\t\tconst vertices = ls.vertices;\n\t\tconst v0 = vertices[ 0 ];\n\t\tconst v1 = vertices[ 1 ];\n\t\thardEdges.add( hashEdge( v0, v1 ) );\n\t\thardEdges.add( hashEdge( v1, v0 ) );\n\n\t\t// only generate the hard edge ray map if we're checking subsegments because it's more expensive to check\n\t\t// and requires more memory.\n\t\tif ( checkSubSegments ) {\n\n\t\t\t// add both ray directions to the map\n\t\t\tconst ray = toNormalizedRay( v0, v1, new Ray() );\n\t\t\tconst rh1 = hashRay( ray );\n\t\t\tif ( ! hardEdgeRays.has( rh1 ) ) {\n\n\t\t\t\ttoNormalizedRay( v1, v0, ray );\n\t\t\t\tconst rh2 = hashRay( ray );\n\n\t\t\t\tconst info = {\n\t\t\t\t\tray,\n\t\t\t\t\tdistances: [],\n\t\t\t\t};\n\n\t\t\t\thardEdgeRays.set( rh1, info );\n\t\t\t\thardEdgeRays.set( rh2, info );\n\n\t\t\t}\n\n\t\t\t// store both segments ends in min, max order in the distances array to check if a face edge is a\n\t\t\t// subsegment later.\n\t\t\tconst info = hardEdgeRays.get( rh1 );\n\t\t\tlet d0 = info.ray.direction.dot( v0 );\n\t\t\tlet d1 = info.ray.direction.dot( v1 );\n\t\t\tif ( d0 > d1 ) {\n\n\t\t\t\t[ d0, d1 ] = [ d1, d0 ];\n\n\t\t\t}\n\n\t\t\tinfo.distances.push( d0, d1 );\n\n\t\t}\n\n\t}\n\n\t// track the half edges associated with each triangle\n\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tconst tri = faces[ i ];\n\t\tconst vertices = tri.vertices;\n\t\tconst vertCount = vertices.length;\n\t\tfor ( let i2 = 0; i2 < vertCount; i2 ++ ) {\n\n\t\t\tconst index = i2;\n\t\t\tconst next = ( i2 + 1 ) % vertCount;\n\t\t\tconst v0 = vertices[ index ];\n\t\t\tconst v1 = vertices[ next ];\n\t\t\tconst hash = hashEdge( v0, v1 );\n\n\t\t\t// don't add the triangle if the edge is supposed to be hard\n\t\t\tif ( hardEdges.has( hash ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// if checking subsegments then check to see if this edge lies on a hard edge ray and whether its within any ray bounds\n\t\t\tif ( checkSubSegments ) {\n\n\t\t\t\ttoNormalizedRay( v0, v1, _ray );\n\n\t\t\t\tconst rayHash = hashRay( _ray );\n\t\t\t\tif ( hardEdgeRays.has( rayHash ) ) {\n\n\t\t\t\t\tconst info = hardEdgeRays.get( rayHash );\n\t\t\t\t\tconst { ray, distances } = info;\n\t\t\t\t\tlet d0 = ray.direction.dot( v0 );\n\t\t\t\t\tlet d1 = ray.direction.dot( v1 );\n\n\t\t\t\t\tif ( d0 > d1 ) {\n\n\t\t\t\t\t\t[ d0, d1 ] = [ d1, d0 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// return early if the face edge is found to be a subsegment of a line edge meaning the edge will have \"hard\" normals\n\t\t\t\t\tlet found = false;\n\t\t\t\t\tfor ( let i = 0, l = distances.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\tif ( d0 >= distances[ i ] && d1 <= distances[ i + 1 ] ) {\n\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( found ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst info = {\n\t\t\t\tindex: index,\n\t\t\t\ttri: tri\n\t\t\t};\n\t\t\thalfEdgeList[ hash ] = info;\n\n\t\t}\n\n\t}\n\n\t// Iterate until we've tried to connect all faces to share normals\n\twhile ( true ) {\n\n\t\t// Stop if there are no more faces left\n\t\tlet halfEdge = null;\n\t\tfor ( const key in halfEdgeList ) {\n\n\t\t\thalfEdge = halfEdgeList[ key ];\n\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( halfEdge === null ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t\t// Exhaustively find all connected faces\n\t\tconst queue = [ halfEdge ];\n\t\twhile ( queue.length > 0 ) {\n\n\t\t\t// initialize all vertex normals in this triangle\n\t\t\tconst tri = queue.pop().tri;\n\t\t\tconst vertices = tri.vertices;\n\t\t\tconst vertNormals = tri.normals;\n\t\t\tconst faceNormal = tri.faceNormal;\n\n\t\t\t// Check if any edge is connected to another triangle edge\n\t\t\tconst vertCount = vertices.length;\n\t\t\tfor ( let i2 = 0; i2 < vertCount; i2 ++ ) {\n\n\t\t\t\tconst index = i2;\n\t\t\t\tconst next = ( i2 + 1 ) % vertCount;\n\t\t\t\tconst v0 = vertices[ index ];\n\t\t\t\tconst v1 = vertices[ next ];\n\n\t\t\t\t// delete this triangle from the list so it won't be found again\n\t\t\t\tconst hash = hashEdge( v0, v1 );\n\t\t\t\tdelete halfEdgeList[ hash ];\n\n\t\t\t\tconst reverseHash = hashEdge( v1, v0 );\n\t\t\t\tconst otherInfo = halfEdgeList[ reverseHash ];\n\t\t\t\tif ( otherInfo ) {\n\n\t\t\t\t\tconst otherTri = otherInfo.tri;\n\t\t\t\t\tconst otherIndex = otherInfo.index;\n\t\t\t\t\tconst otherNormals = otherTri.normals;\n\t\t\t\t\tconst otherVertCount = otherNormals.length;\n\t\t\t\t\tconst otherFaceNormal = otherTri.faceNormal;\n\n\t\t\t\t\t// NOTE: If the angle between faces is > 67.5 degrees then assume it's\n\t\t\t\t\t// hard edge. There are some cases where the line segments do not line up exactly\n\t\t\t\t\t// with or span multiple triangle edges (see Lunar Vehicle wheels).\n\t\t\t\t\tif ( Math.abs( otherTri.faceNormal.dot( tri.faceNormal ) ) < 0.25 ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if this triangle has already been traversed then it won't be in\n\t\t\t\t\t// the halfEdgeList. If it has not then add it to the queue and delete\n\t\t\t\t\t// it so it won't be found again.\n\t\t\t\t\tif ( reverseHash in halfEdgeList ) {\n\n\t\t\t\t\t\tqueue.push( otherInfo );\n\t\t\t\t\t\tdelete halfEdgeList[ reverseHash ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// share the first normal\n\t\t\t\t\tconst otherNext = ( otherIndex + 1 ) % otherVertCount;\n\t\t\t\t\tif (\n\t\t\t\t\t\tvertNormals[ index ] && otherNormals[ otherNext ] &&\n\t\t\t\t\t\tvertNormals[ index ] !== otherNormals[ otherNext ]\n\t\t\t\t\t) {\n\n\t\t\t\t\t\totherNormals[ otherNext ].norm.add( vertNormals[ index ].norm );\n\t\t\t\t\t\tvertNormals[ index ].norm = otherNormals[ otherNext ].norm;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet sharedNormal1 = vertNormals[ index ] || otherNormals[ otherNext ];\n\t\t\t\t\tif ( sharedNormal1 === null ) {\n\n\t\t\t\t\t\t// it's possible to encounter an edge of a triangle that has already been traversed meaning\n\t\t\t\t\t\t// both edges already have different normals defined and shared. To work around this we create\n\t\t\t\t\t\t// a wrapper object so when those edges are merged the normals can be updated everywhere.\n\t\t\t\t\t\tsharedNormal1 = { norm: new Vector3() };\n\t\t\t\t\t\tnormals.push( sharedNormal1.norm );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( vertNormals[ index ] === null ) {\n\n\t\t\t\t\t\tvertNormals[ index ] = sharedNormal1;\n\t\t\t\t\t\tsharedNormal1.norm.add( faceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( otherNormals[ otherNext ] === null ) {\n\n\t\t\t\t\t\totherNormals[ otherNext ] = sharedNormal1;\n\t\t\t\t\t\tsharedNormal1.norm.add( otherFaceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// share the second normal\n\t\t\t\t\tif (\n\t\t\t\t\t\tvertNormals[ next ] && otherNormals[ otherIndex ] &&\n\t\t\t\t\t\tvertNormals[ next ] !== otherNormals[ otherIndex ]\n\t\t\t\t\t) {\n\n\t\t\t\t\t\totherNormals[ otherIndex ].norm.add( vertNormals[ next ].norm );\n\t\t\t\t\t\tvertNormals[ next ].norm = otherNormals[ otherIndex ].norm;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet sharedNormal2 = vertNormals[ next ] || otherNormals[ otherIndex ];\n\t\t\t\t\tif ( sharedNormal2 === null ) {\n\n\t\t\t\t\t\tsharedNormal2 = { norm: new Vector3() };\n\t\t\t\t\t\tnormals.push( sharedNormal2.norm );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( vertNormals[ next ] === null ) {\n\n\t\t\t\t\t\tvertNormals[ next ] = sharedNormal2;\n\t\t\t\t\t\tsharedNormal2.norm.add( faceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( otherNormals[ otherIndex ] === null ) {\n\n\t\t\t\t\t\totherNormals[ otherIndex ] = sharedNormal2;\n\t\t\t\t\t\tsharedNormal2.norm.add( otherFaceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// The normals of each face have been added up so now we average them by normalizing the vector.\n\tfor ( let i = 0, l = normals.length; i < l; i ++ ) {\n\n\t\tnormals[ i ].normalize();\n\n\t}\n\n}\n\nfunction isPartType( type ) {\n\n\treturn type === 'Part' || type === 'Unofficial_Part';\n\n}\n\nfunction isPrimitiveType( type ) {\n\n\treturn /primitive/i.test( type ) || type === 'Subpart';\n\n}\n\nclass LineParser {\n\n\tconstructor( line, lineNumber ) {\n\n\t\tthis.line = line;\n\t\tthis.lineLength = line.length;\n\t\tthis.currentCharIndex = 0;\n\t\tthis.currentChar = ' ';\n\t\tthis.lineNumber = lineNumber;\n\n\t}\n\n\tseekNonSpace() {\n\n\t\twhile ( this.currentCharIndex < this.lineLength ) {\n\n\t\t\tthis.currentChar = this.line.charAt( this.currentCharIndex );\n\n\t\t\tif ( this.currentChar !== ' ' && this.currentChar !== '\\t' ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.currentCharIndex ++;\n\n\t\t}\n\n\t}\n\n\tgetToken() {\n\n\t\tconst pos0 = this.currentCharIndex ++;\n\n\t\t// Seek space\n\t\twhile ( this.currentCharIndex < this.lineLength ) {\n\n\t\t\tthis.currentChar = this.line.charAt( this.currentCharIndex );\n\n\t\t\tif ( this.currentChar === ' ' || this.currentChar === '\\t' ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.currentCharIndex ++;\n\n\t\t}\n\n\t\tconst pos1 = this.currentCharIndex;\n\n\t\tthis.seekNonSpace();\n\n\t\treturn this.line.substring( pos0, pos1 );\n\n\t}\n\n\tgetVector() {\n\n\t\treturn new Vector3( parseFloat( this.getToken() ), parseFloat( this.getToken() ), parseFloat( this.getToken() ) );\n\n\t}\n\n\tgetRemainingString() {\n\n\t\treturn this.line.substring( this.currentCharIndex, this.lineLength );\n\n\t}\n\n\tisAtTheEnd() {\n\n\t\treturn this.currentCharIndex >= this.lineLength;\n\n\t}\n\n\tsetToEnd() {\n\n\t\tthis.currentCharIndex = this.lineLength;\n\n\t}\n\n\tgetLineNumberString() {\n\n\t\treturn this.lineNumber >= 0 ? ' at line ' + this.lineNumber : '';\n\n\t}\n\n}\n\n// Fetches and parses an intermediate representation of LDraw parts files.\nclass LDrawParsedCache {\n\n\tconstructor( loader ) {\n\n\t\tthis.loader = loader;\n\t\tthis._cache = {};\n\n\t}\n\n\tcloneResult( original ) {\n\n\t\tconst result = {};\n\n\t\t// vertices are transformed and normals computed before being converted to geometry\n\t\t// so these pieces must be cloned.\n\t\tresult.faces = original.faces.map( face => {\n\n\t\t\treturn {\n\t\t\t\tcolorCode: face.colorCode,\n\t\t\t\tmaterial: face.material,\n\t\t\t\tvertices: face.vertices.map( v => v.clone() ),\n\t\t\t\tnormals: face.normals.map( () => null ),\n\t\t\t\tfaceNormal: null\n\t\t\t};\n\n\t\t} );\n\n\t\tresult.conditionalSegments = original.conditionalSegments.map( face => {\n\n\t\t\treturn {\n\t\t\t\tcolorCode: face.colorCode,\n\t\t\t\tmaterial: face.material,\n\t\t\t\tvertices: face.vertices.map( v => v.clone() ),\n\t\t\t\tcontrolPoints: face.controlPoints.map( v => v.clone() )\n\t\t\t};\n\n\t\t} );\n\n\t\tresult.lineSegments = original.lineSegments.map( face => {\n\n\t\t\treturn {\n\t\t\t\tcolorCode: face.colorCode,\n\t\t\t\tmaterial: face.material,\n\t\t\t\tvertices: face.vertices.map( v => v.clone() )\n\t\t\t};\n\n\t\t} );\n\n\t\t// none if this is subsequently modified\n\t\tresult.type = original.type;\n\t\tresult.category = original.category;\n\t\tresult.keywords = original.keywords;\n\t\tresult.author = original.author;\n\t\tresult.subobjects = original.subobjects;\n\t\tresult.fileName = original.fileName;\n\t\tresult.totalFaces = original.totalFaces;\n\t\tresult.startingBuildingStep = original.startingBuildingStep;\n\t\tresult.materials = original.materials;\n\t\tresult.group = null;\n\t\treturn result;\n\n\t}\n\n\tasync fetchData( fileName ) {\n\n\t\tlet triedLowerCase = false;\n\t\tlet locationState = FILE_LOCATION_TRY_PARTS;\n\t\twhile ( locationState !== FILE_LOCATION_NOT_FOUND ) {\n\n\t\t\tlet subobjectURL = fileName;\n\t\t\tswitch ( locationState ) {\n\n\t\t\t\tcase FILE_LOCATION_AS_IS:\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_PARTS:\n\t\t\t\t\tsubobjectURL = 'parts/' + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_P:\n\t\t\t\t\tsubobjectURL = 'p/' + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_MODELS:\n\t\t\t\t\tsubobjectURL = 'models/' + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_RELATIVE:\n\t\t\t\t\tsubobjectURL = fileName.substring( 0, fileName.lastIndexOf( '/' ) + 1 ) + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_ABSOLUTE:\n\n\t\t\t\t\tif ( triedLowerCase ) {\n\n\t\t\t\t\t\t// Try absolute path\n\t\t\t\t\t\tlocationState = FILE_LOCATION_NOT_FOUND;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Next attempt is lower case\n\t\t\t\t\t\tfileName = fileName.toLowerCase();\n\t\t\t\t\t\tsubobjectURL = fileName;\n\t\t\t\t\t\ttriedLowerCase = true;\n\t\t\t\t\t\tlocationState = FILE_LOCATION_TRY_PARTS;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tconst loader = this.loader;\n\t\t\tconst fileLoader = new FileLoader( loader.manager );\n\t\t\tfileLoader.setPath( loader.partsLibraryPath );\n\t\t\tfileLoader.setRequestHeader( loader.requestHeader );\n\t\t\tfileLoader.setWithCredentials( loader.withCredentials );\n\n\t\t\ttry {\n\n\t\t\t\tconst text = await fileLoader.loadAsync( subobjectURL );\n\t\t\t\treturn text;\n\n\t\t\t} catch ( _ ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthrow new Error( 'LDrawLoader: Subobject \"' + fileName + '\" could not be loaded.' );\n\n\t}\n\n\tparse( text, fileName = null ) {\n\n\t\tconst loader = this.loader;\n\n\t\t// final results\n\t\tconst faces = [];\n\t\tconst lineSegments = [];\n\t\tconst conditionalSegments = [];\n\t\tconst subobjects = [];\n\t\tconst materials = {};\n\n\t\tconst getLocalMaterial = colorCode => {\n\n\t\t\treturn materials[ colorCode ] || null;\n\n\t\t};\n\n\t\tlet type = 'Model';\n\t\tlet category = null;\n\t\tlet keywords = null;\n\t\tlet author = null;\n\t\tlet totalFaces = 0;\n\n\t\t// split into lines\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tconst numLines = lines.length;\n\n\t\tlet parsingEmbeddedFiles = false;\n\t\tlet currentEmbeddedFileName = null;\n\t\tlet currentEmbeddedText = null;\n\n\t\tlet bfcCertified = false;\n\t\tlet bfcCCW = true;\n\t\tlet bfcInverted = false;\n\t\tlet bfcCull = true;\n\n\t\tlet startingBuildingStep = false;\n\n\t\t// Parse all line commands\n\t\tfor ( let lineIndex = 0; lineIndex < numLines; lineIndex ++ ) {\n\n\t\t\tconst line = lines[ lineIndex ];\n\n\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\tif ( parsingEmbeddedFiles ) {\n\n\t\t\t\tif ( line.startsWith( '0 FILE ' ) ) {\n\n\t\t\t\t\t// Save previous embedded file in the cache\n\t\t\t\t\tthis.setData( currentEmbeddedFileName, currentEmbeddedText );\n\n\t\t\t\t\t// New embedded text file\n\t\t\t\t\tcurrentEmbeddedFileName = line.substring( 7 );\n\t\t\t\t\tcurrentEmbeddedText = '';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentEmbeddedText += line + '\\n';\n\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst lp = new LineParser( line, lineIndex + 1 );\n\t\t\tlp.seekNonSpace();\n\n\t\t\tif ( lp.isAtTheEnd() ) {\n\n\t\t\t\t// Empty line\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// Parse the line type\n\t\t\tconst lineType = lp.getToken();\n\n\t\t\tlet material;\n\t\t\tlet colorCode;\n\t\t\tlet segment;\n\t\t\tlet ccw;\n\t\t\tlet doubleSided;\n\t\t\tlet v0, v1, v2, v3, c0, c1;\n\n\t\t\tswitch ( lineType ) {\n\n\t\t\t\t// Line type 0: Comment or META\n\t\t\t\tcase '0':\n\n\t\t\t\t\t// Parse meta directive\n\t\t\t\t\tconst meta = lp.getToken();\n\n\t\t\t\t\tif ( meta ) {\n\n\t\t\t\t\t\tswitch ( meta ) {\n\n\t\t\t\t\t\t\tcase '!LDRAW_ORG':\n\n\t\t\t\t\t\t\t\ttype = lp.getToken();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '!COLOUR':\n\n\t\t\t\t\t\t\t\tmaterial = loader.parseColorMetaDirective( lp );\n\t\t\t\t\t\t\t\tif ( material ) {\n\n\t\t\t\t\t\t\t\t\tmaterials[ material.userData.code ] = material;\n\n\t\t\t\t\t\t\t\t}\telse {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'LDrawLoader: Error parsing material' + lp.getLineNumberString() );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '!CATEGORY':\n\n\t\t\t\t\t\t\t\tcategory = lp.getToken();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '!KEYWORDS':\n\n\t\t\t\t\t\t\t\tconst newKeywords = lp.getRemainingString().split( ',' );\n\t\t\t\t\t\t\t\tif ( newKeywords.length > 0 ) {\n\n\t\t\t\t\t\t\t\t\tif ( ! keywords ) {\n\n\t\t\t\t\t\t\t\t\t\tkeywords = [];\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tnewKeywords.forEach( function ( keyword ) {\n\n\t\t\t\t\t\t\t\t\t\tkeywords.push( keyword.trim() );\n\n\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'FILE':\n\n\t\t\t\t\t\t\t\tif ( lineIndex > 0 ) {\n\n\t\t\t\t\t\t\t\t\t// Start embedded text files parsing\n\t\t\t\t\t\t\t\t\tparsingEmbeddedFiles = true;\n\t\t\t\t\t\t\t\t\tcurrentEmbeddedFileName = lp.getRemainingString();\n\t\t\t\t\t\t\t\t\tcurrentEmbeddedText = '';\n\n\t\t\t\t\t\t\t\t\tbfcCertified = false;\n\t\t\t\t\t\t\t\t\tbfcCCW = true;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'BFC':\n\n\t\t\t\t\t\t\t\t// Changes to the backface culling state\n\t\t\t\t\t\t\t\twhile ( ! lp.isAtTheEnd() ) {\n\n\t\t\t\t\t\t\t\t\tconst token = lp.getToken();\n\n\t\t\t\t\t\t\t\t\tswitch ( token ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'CERTIFY':\n\t\t\t\t\t\t\t\t\t\tcase 'NOCERTIFY':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcCertified = token === 'CERTIFY';\n\t\t\t\t\t\t\t\t\t\t\tbfcCCW = true;\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'CW':\n\t\t\t\t\t\t\t\t\t\tcase 'CCW':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcCCW = token === 'CCW';\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'INVERTNEXT':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcInverted = true;\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'CLIP':\n\t\t\t\t\t\t\t\t\t\tcase 'NOCLIP':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcCull = token === 'CLIP';\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.LDrawLoader: BFC directive \"' + token + '\" is unknown.' );\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'STEP':\n\n\t\t\t\t\t\t\t\tstartingBuildingStep = true;\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'Author:':\n\n\t\t\t\t\t\t\t\tauthor = lp.getToken();\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t// Other meta directives are not implemented\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 1: Sub-object file\n\t\t\t\tcase '1':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\n\t\t\t\t\tconst posX = parseFloat( lp.getToken() );\n\t\t\t\t\tconst posY = parseFloat( lp.getToken() );\n\t\t\t\t\tconst posZ = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m0 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m1 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m2 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m3 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m4 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m5 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m6 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m7 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m8 = parseFloat( lp.getToken() );\n\n\t\t\t\t\tconst matrix = new Matrix4().set(\n\t\t\t\t\t\tm0, m1, m2, posX,\n\t\t\t\t\t\tm3, m4, m5, posY,\n\t\t\t\t\t\tm6, m7, m8, posZ,\n\t\t\t\t\t\t0, 0, 0, 1\n\t\t\t\t\t);\n\n\t\t\t\t\tlet fileName = lp.getRemainingString().trim().replace( /\\\\/g, '/' );\n\n\t\t\t\t\tif ( loader.fileMap[ fileName ] ) {\n\n\t\t\t\t\t\t// Found the subobject path in the preloaded file path map\n\t\t\t\t\t\tfileName = loader.fileMap[ fileName ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Standardized subfolders\n\t\t\t\t\t\tif ( fileName.startsWith( 's/' ) ) {\n\n\t\t\t\t\t\t\tfileName = 'parts/' + fileName;\n\n\t\t\t\t\t\t} else if ( fileName.startsWith( '48/' ) ) {\n\n\t\t\t\t\t\t\tfileName = 'p/' + fileName;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tsubobjects.push( {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tmatrix: matrix,\n\t\t\t\t\t\tfileName: fileName,\n\t\t\t\t\t\tinverted: bfcInverted,\n\t\t\t\t\t\tstartingBuildingStep: startingBuildingStep\n\t\t\t\t\t} );\n\n\t\t\t\t\tstartingBuildingStep = false;\n\t\t\t\t\tbfcInverted = false;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 2: Line segment\n\t\t\t\tcase '2':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\tv1 = lp.getVector();\n\n\t\t\t\t\tsegment = {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tvertices: [ v0, v1 ],\n\t\t\t\t\t};\n\n\t\t\t\t\tlineSegments.push( segment );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 5: Conditional Line segment\n\t\t\t\tcase '5':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\tc0 = lp.getVector();\n\t\t\t\t\tc1 = lp.getVector();\n\n\t\t\t\t\tsegment = {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tvertices: [ v0, v1 ],\n\t\t\t\t\t\tcontrolPoints: [ c0, c1 ],\n\t\t\t\t\t};\n\n\t\t\t\t\tconditionalSegments.push( segment );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 3: Triangle\n\t\t\t\tcase '3':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tccw = bfcCCW;\n\t\t\t\t\tdoubleSided = ! bfcCertified || ! bfcCull;\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv2 = lp.getVector();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv2 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv0 = lp.getVector();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\tvertices: [ v0, v1, v2 ],\n\t\t\t\t\t\tnormals: [ null, null, null ],\n\t\t\t\t\t} );\n\t\t\t\t\ttotalFaces ++;\n\n\t\t\t\t\tif ( doubleSided === true ) {\n\n\t\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\t\tvertices: [ v2, v1, v0 ],\n\t\t\t\t\t\t\tnormals: [ null, null, null ],\n\t\t\t\t\t\t} );\n\t\t\t\t\t\ttotalFaces ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 4: Quadrilateral\n\t\t\t\tcase '4':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tccw = bfcCCW;\n\t\t\t\t\tdoubleSided = ! bfcCertified || ! bfcCull;\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv2 = lp.getVector();\n\t\t\t\t\t\tv3 = lp.getVector();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv3 = lp.getVector();\n\t\t\t\t\t\tv2 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv0 = lp.getVector();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// specifically place the triangle diagonal in the v0 and v1 slots so we can\n\t\t\t\t\t// account for the doubling of vertices later when smoothing normals.\n\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\tvertices: [ v0, v1, v2, v3 ],\n\t\t\t\t\t\tnormals: [ null, null, null, null ],\n\t\t\t\t\t} );\n\t\t\t\t\ttotalFaces += 2;\n\n\t\t\t\t\tif ( doubleSided === true ) {\n\n\t\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\t\tvertices: [ v3, v2, v1, v0 ],\n\t\t\t\t\t\t\tnormals: [ null, null, null, null ],\n\t\t\t\t\t\t} );\n\t\t\t\t\t\ttotalFaces += 2;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'LDrawLoader: Unknown line type \"' + lineType + '\"' + lp.getLineNumberString() + '.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parsingEmbeddedFiles ) {\n\n\t\t\tthis.setData( currentEmbeddedFileName, currentEmbeddedText );\n\n\t\t}\n\n\t\treturn {\n\t\t\tfaces,\n\t\t\tconditionalSegments,\n\t\t\tlineSegments,\n\t\t\ttype,\n\t\t\tcategory,\n\t\t\tkeywords,\n\t\t\tauthor,\n\t\t\tsubobjects,\n\t\t\ttotalFaces,\n\t\t\tstartingBuildingStep,\n\t\t\tmaterials,\n\t\t\tfileName,\n\t\t\tgroup: null\n\t\t};\n\n\t}\n\n\t// returns an (optionally cloned) instance of the data\n\tgetData( fileName, clone = true ) {\n\n\t\tconst key = fileName.toLowerCase();\n\t\tconst result = this._cache[ key ];\n\t\tif ( result === null || result instanceof Promise ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( clone ) {\n\n\t\t\treturn this.cloneResult( result );\n\n\t\t} else {\n\n\t\t\treturn result;\n\n\t\t}\n\n\t}\n\n\t// kicks off a fetch and parse of the requested data if it hasn't already been loaded. Returns when\n\t// the data is ready to use and can be retrieved synchronously with \"getData\".\n\tasync ensureDataLoaded( fileName ) {\n\n\t\tconst key = fileName.toLowerCase();\n\t\tif ( ! ( key in this._cache ) ) {\n\n\t\t\t// replace the promise with a copy of the parsed data for immediate processing\n\t\t\tthis._cache[ key ] = this.fetchData( fileName ).then( text => {\n\n\t\t\t\tconst info = this.parse( text, fileName );\n\t\t\t\tthis._cache[ key ] = info;\n\t\t\t\treturn info;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tawait this._cache[ key ];\n\n\t}\n\n\t// sets the data in the cache from parsed data\n\tsetData( fileName, text ) {\n\n\t\tconst key = fileName.toLowerCase();\n\t\tthis._cache[ key ] = this.parse( text, fileName );\n\n\t}\n\n}\n\n// returns the material for an associated color code. If the color code is 16 for a face or 24 for\n// an edge then the passthroughColorCode is used.\nfunction getMaterialFromCode( colorCode, parentColorCode, materialHierarchy, forEdge ) {\n\n\tconst isPassthrough = ! forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;\n\tif ( isPassthrough ) {\n\n\t\tcolorCode = parentColorCode;\n\n\t}\n\n\treturn materialHierarchy[ colorCode ] || null;\n\n}\n\n// Class used to parse and build LDraw parts as three.js objects and cache them if they're a \"Part\" type.\nclass LDrawPartsGeometryCache {\n\n\tconstructor( loader ) {\n\n\t\tthis.loader = loader;\n\t\tthis.parseCache = new LDrawParsedCache( loader );\n\t\tthis._cache = {};\n\n\t}\n\n\t// Convert the given file information into a mesh by processing subobjects.\n\tasync processIntoMesh( info ) {\n\n\t\tconst loader = this.loader;\n\t\tconst parseCache = this.parseCache;\n\t\tconst faceMaterials = new Set();\n\n\t\t// Processes the part subobject information to load child parts and merge geometry onto part\n\t\t// piece object.\n\t\tconst processInfoSubobjects = async ( info, subobject = null ) => {\n\n\t\t\tconst subobjects = info.subobjects;\n\t\t\tconst promises = [];\n\n\t\t\t// Trigger load of all subobjects. If a subobject isn't a primitive then load it as a separate\n\t\t\t// group which lets instruction steps apply correctly.\n\t\t\tfor ( let i = 0, l = subobjects.length; i < l; i ++ ) {\n\n\t\t\t\tconst subobject = subobjects[ i ];\n\t\t\t\tconst promise = parseCache.ensureDataLoaded( subobject.fileName ).then( () => {\n\n\t\t\t\t\tconst subobjectInfo = parseCache.getData( subobject.fileName, false );\n\t\t\t\t\tif ( ! isPrimitiveType( subobjectInfo.type ) ) {\n\n\t\t\t\t\t\treturn this.loadModel( subobject.fileName ).catch( error => {\n\n\t\t\t\t\t\t\tconsole.warn( error );\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn processInfoSubobjects( parseCache.getData( subobject.fileName ), subobject );\n\n\t\t\t\t} );\n\n\t\t\t\tpromises.push( promise );\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\t\t\tgroup.userData.category = info.category;\n\t\t\tgroup.userData.keywords = info.keywords;\n\t\t\tgroup.userData.author = info.author;\n\t\t\tgroup.userData.type = info.type;\n\t\t\tgroup.userData.fileName = info.fileName;\n\t\t\tinfo.group = group;\n\n\t\t\tconst subobjectInfos = await Promise.all( promises );\n\t\t\tfor ( let i = 0, l = subobjectInfos.length; i < l; i ++ ) {\n\n\t\t\t\tconst subobject = info.subobjects[ i ];\n\t\t\t\tconst subobjectInfo = subobjectInfos[ i ];\n\n\t\t\t\tif ( subobjectInfo === null ) {\n\n\t\t\t\t\t// the subobject failed to load\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// if the subobject was loaded as a separate group then apply the parent scopes materials\n\t\t\t\tif ( subobjectInfo.isGroup ) {\n\n\t\t\t\t\tconst subobjectGroup = subobjectInfo;\n\t\t\t\t\tsubobject.matrix.decompose( subobjectGroup.position, subobjectGroup.quaternion, subobjectGroup.scale );\n\t\t\t\t\tsubobjectGroup.userData.startingBuildingStep = subobject.startingBuildingStep;\n\t\t\t\t\tsubobjectGroup.name = subobject.fileName;\n\n\t\t\t\t\tloader.applyMaterialsToMesh( subobjectGroup, subobject.colorCode, info.materials );\n\t\t\t\t\tsubobjectGroup.userData.colorCode = subobject.colorCode;\n\n\t\t\t\t\tgroup.add( subobjectGroup );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// add the subobject group if it has children in case it has both children and primitives\n\t\t\t\tif ( subobjectInfo.group.children.length ) {\n\n\t\t\t\t\tgroup.add( subobjectInfo.group );\n\n\t\t\t\t}\n\n\t\t\t\t// transform the primitives into the local space of the parent piece and append them to\n\t\t\t\t// to the parent primitives list.\n\t\t\t\tconst parentLineSegments = info.lineSegments;\n\t\t\t\tconst parentConditionalSegments = info.conditionalSegments;\n\t\t\t\tconst parentFaces = info.faces;\n\n\t\t\t\tconst lineSegments = subobjectInfo.lineSegments;\n\t\t\t\tconst conditionalSegments = subobjectInfo.conditionalSegments;\n\n\t\t\t\tconst faces = subobjectInfo.faces;\n\t\t\t\tconst matrix = subobject.matrix;\n\t\t\t\tconst inverted = subobject.inverted;\n\t\t\t\tconst matrixScaleInverted = matrix.determinant() < 0;\n\t\t\t\tconst colorCode = subobject.colorCode;\n\n\t\t\t\tconst lineColorCode = colorCode === MAIN_COLOUR_CODE ? MAIN_EDGE_COLOUR_CODE : colorCode;\n\t\t\t\tfor ( let i = 0, l = lineSegments.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst ls = lineSegments[ i ];\n\t\t\t\t\tconst vertices = ls.vertices;\n\t\t\t\t\tvertices[ 0 ].applyMatrix4( matrix );\n\t\t\t\t\tvertices[ 1 ].applyMatrix4( matrix );\n\t\t\t\t\tls.colorCode = ls.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : ls.colorCode;\n\t\t\t\t\tls.material = ls.material || getMaterialFromCode( ls.colorCode, ls.colorCode, info.materials, true );\n\n\t\t\t\t\tparentLineSegments.push( ls );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, l = conditionalSegments.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst os = conditionalSegments[ i ];\n\t\t\t\t\tconst vertices = os.vertices;\n\t\t\t\t\tconst controlPoints = os.controlPoints;\n\t\t\t\t\tvertices[ 0 ].applyMatrix4( matrix );\n\t\t\t\t\tvertices[ 1 ].applyMatrix4( matrix );\n\t\t\t\t\tcontrolPoints[ 0 ].applyMatrix4( matrix );\n\t\t\t\t\tcontrolPoints[ 1 ].applyMatrix4( matrix );\n\t\t\t\t\tos.colorCode = os.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : os.colorCode;\n\t\t\t\t\tos.material = os.material || getMaterialFromCode( os.colorCode, os.colorCode, info.materials, true );\n\n\t\t\t\t\tparentConditionalSegments.push( os );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst tri = faces[ i ];\n\t\t\t\t\tconst vertices = tri.vertices;\n\t\t\t\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvertices[ i ].applyMatrix4( matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttri.colorCode = tri.colorCode === MAIN_COLOUR_CODE ? colorCode : tri.colorCode;\n\t\t\t\t\ttri.material = tri.material || getMaterialFromCode( tri.colorCode, colorCode, info.materials, false );\n\t\t\t\t\tfaceMaterials.add( tri.colorCode );\n\n\t\t\t\t\t// If the scale of the object is negated then the triangle winding order\n\t\t\t\t\t// needs to be flipped.\n\t\t\t\t\tif ( matrixScaleInverted !== inverted ) {\n\n\t\t\t\t\t\tvertices.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tparentFaces.push( tri );\n\n\t\t\t\t}\n\n\t\t\t\tinfo.totalFaces += subobjectInfo.totalFaces;\n\n\t\t\t}\n\n\t\t\t// Apply the parent subobjects pass through material code to this object. This is done several times due\n\t\t\t// to material scoping.\n\t\t\tif ( subobject ) {\n\n\t\t\t\tloader.applyMaterialsToMesh( group, subobject.colorCode, info.materials );\n\t\t\t\tgroup.userData.colorCode = subobject.colorCode;\n\n\t\t\t}\n\n\t\t\treturn info;\n\n\t\t};\n\n\t\t// Track material use to see if we need to use the normal smooth slow path for hard edges.\n\t\tfor ( let i = 0, l = info.faces; i < l; i ++ ) {\n\n\t\t\tfaceMaterials.add( info.faces[ i ].colorCode );\n\n\t\t}\n\n\t\tawait processInfoSubobjects( info );\n\n\t\tif ( loader.smoothNormals ) {\n\n\t\t\tconst checkSubSegments = faceMaterials.size > 1;\n\t\t\tgenerateFaceNormals( info.faces );\n\t\t\tsmoothNormals( info.faces, info.lineSegments, checkSubSegments );\n\n\t\t}\n\n\t\t// Add the primitive objects and metadata.\n\t\tconst group = info.group;\n\t\tif ( info.faces.length > 0 ) {\n\n\t\t\tgroup.add( createObject( this.loader, info.faces, 3, false, info.totalFaces ) );\n\n\t\t}\n\n\t\tif ( info.lineSegments.length > 0 ) {\n\n\t\t\tgroup.add( createObject( this.loader, info.lineSegments, 2 ) );\n\n\t\t}\n\n\t\tif ( info.conditionalSegments.length > 0 ) {\n\n\t\t\tgroup.add( createObject( this.loader, info.conditionalSegments, 2, true ) );\n\n\t\t}\n\n\t\treturn group;\n\n\t}\n\n\thasCachedModel( fileName ) {\n\n\t\treturn fileName !== null && fileName.toLowerCase() in this._cache;\n\n\t}\n\n\tasync getCachedModel( fileName ) {\n\n\t\tif ( fileName !== null && this.hasCachedModel( fileName ) ) {\n\n\t\t\tconst key = fileName.toLowerCase();\n\t\t\tconst group = await this._cache[ key ];\n\t\t\treturn group.clone();\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\t// Loads and parses the model with the given file name. Returns a cached copy if available.\n\tasync loadModel( fileName ) {\n\n\t\tconst parseCache = this.parseCache;\n\t\tconst key = fileName.toLowerCase();\n\t\tif ( this.hasCachedModel( fileName ) ) {\n\n\t\t\t// Return cached model if available.\n\t\t\treturn this.getCachedModel( fileName );\n\n\t\t} else {\n\n\t\t\t// Otherwise parse a new model.\n\t\t\t// Ensure the file data is loaded and pre parsed.\n\t\t\tawait parseCache.ensureDataLoaded( fileName );\n\n\t\t\tconst info = parseCache.getData( fileName );\n\t\t\tconst promise = this.processIntoMesh( info );\n\n\t\t\t// Now that the file has loaded it's possible that another part parse has been waiting in parallel\n\t\t\t// so check the cache again to see if it's been added since the last async operation so we don't\n\t\t\t// do unnecessary work.\n\t\t\tif ( this.hasCachedModel( fileName ) ) {\n\n\t\t\t\treturn this.getCachedModel( fileName );\n\n\t\t\t}\n\n\t\t\t// Cache object if it's a part so it can be reused later.\n\t\t\tif ( isPartType( info.type ) ) {\n\n\t\t\t\tthis._cache[ key ] = promise;\n\n\t\t\t}\n\n\t\t\t// return a copy\n\t\t\tconst group = await promise;\n\t\t\treturn group.clone();\n\n\t\t}\n\n\t}\n\n\t// parses the given model text into a renderable object. Returns cached copy if available.\n\tasync parseModel( text ) {\n\n\t\tconst parseCache = this.parseCache;\n\t\tconst info = parseCache.parse( text );\n\t\tif ( isPartType( info.type ) && this.hasCachedModel( info.fileName ) ) {\n\n\t\t\treturn this.getCachedModel( info.fileName );\n\n\t\t}\n\n\t\treturn this.processIntoMesh( info );\n\n\t}\n\n}\n\nfunction sortByMaterial( a, b ) {\n\n\tif ( a.colorCode === b.colorCode ) {\n\n\t\treturn 0;\n\n\t}\n\n\tif ( a.colorCode < b.colorCode ) {\n\n\t\treturn - 1;\n\n\t}\n\n\treturn 1;\n\n}\n\nfunction createObject( loader, elements, elementSize, isConditionalSegments = false, totalElements = null ) {\n\n\t// Creates a LineSegments (elementSize = 2) or a Mesh (elementSize = 3 )\n\t// With per face / segment material, implemented with mesh groups and materials array\n\n\t// Sort the faces or line segments by color code to make later the mesh groups\n\telements.sort( sortByMaterial );\n\n\tif ( totalElements === null ) {\n\n\t\ttotalElements = elements.length;\n\n\t}\n\n\tconst positions = new Float32Array( elementSize * totalElements * 3 );\n\tconst normals = elementSize === 3 ? new Float32Array( elementSize * totalElements * 3 ) : null;\n\tconst materials = [];\n\n\tconst quadArray = new Array( 6 );\n\tconst bufferGeometry = new BufferGeometry();\n\tlet prevMaterial = null;\n\tlet index0 = 0;\n\tlet numGroupVerts = 0;\n\tlet offset = 0;\n\n\tfor ( let iElem = 0, nElem = elements.length; iElem < nElem; iElem ++ ) {\n\n\t\tconst elem = elements[ iElem ];\n\t\tlet vertices = elem.vertices;\n\t\tif ( vertices.length === 4 ) {\n\n\t\t\tquadArray[ 0 ] = vertices[ 0 ];\n\t\t\tquadArray[ 1 ] = vertices[ 1 ];\n\t\t\tquadArray[ 2 ] = vertices[ 2 ];\n\t\t\tquadArray[ 3 ] = vertices[ 0 ];\n\t\t\tquadArray[ 4 ] = vertices[ 2 ];\n\t\t\tquadArray[ 5 ] = vertices[ 3 ];\n\t\t\tvertices = quadArray;\n\n\t\t}\n\n\t\tfor ( let j = 0, l = vertices.length; j < l; j ++ ) {\n\n\t\t\tconst v = vertices[ j ];\n\t\t\tconst index = offset + j * 3;\n\t\t\tpositions[ index + 0 ] = v.x;\n\t\t\tpositions[ index + 1 ] = v.y;\n\t\t\tpositions[ index + 2 ] = v.z;\n\n\t\t}\n\n\t\t// create the normals array if this is a set of faces\n\t\tif ( elementSize === 3 ) {\n\n\t\t\tif ( ! elem.faceNormal ) {\n\n\t\t\t\tconst v0 = vertices[ 0 ];\n\t\t\t\tconst v1 = vertices[ 1 ];\n\t\t\t\tconst v2 = vertices[ 2 ];\n\t\t\t\t_tempVec0.subVectors( v1, v0 );\n\t\t\t\t_tempVec1.subVectors( v2, v1 );\n\t\t\t\telem.faceNormal = new Vector3()\n\t\t\t\t\t.crossVectors( _tempVec0, _tempVec1 )\n\t\t\t\t\t.normalize();\n\n\t\t\t}\n\n\t\t\tlet elemNormals = elem.normals;\n\t\t\tif ( elemNormals.length === 4 ) {\n\n\t\t\t\tquadArray[ 0 ] = elemNormals[ 0 ];\n\t\t\t\tquadArray[ 1 ] = elemNormals[ 1 ];\n\t\t\t\tquadArray[ 2 ] = elemNormals[ 2 ];\n\t\t\t\tquadArray[ 3 ] = elemNormals[ 0 ];\n\t\t\t\tquadArray[ 4 ] = elemNormals[ 2 ];\n\t\t\t\tquadArray[ 5 ] = elemNormals[ 3 ];\n\t\t\t\telemNormals = quadArray;\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, l = elemNormals.length; j < l; j ++ ) {\n\n\t\t\t\t// use face normal if a vertex normal is not provided\n\t\t\t\tlet n = elem.faceNormal;\n\t\t\t\tif ( elemNormals[ j ] ) {\n\n\t\t\t\t\tn = elemNormals[ j ].norm;\n\n\t\t\t\t}\n\n\t\t\t\tconst index = offset + j * 3;\n\t\t\t\tnormals[ index + 0 ] = n.x;\n\t\t\t\tnormals[ index + 1 ] = n.y;\n\t\t\t\tnormals[ index + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( prevMaterial !== elem.colorCode ) {\n\n\t\t\tif ( prevMaterial !== null ) {\n\n\t\t\t\tbufferGeometry.addGroup( index0, numGroupVerts, materials.length - 1 );\n\n\t\t\t}\n\n\t\t\tconst material = elem.material;\n\n\t\t\tif ( material !== null ) {\n\n\t\t\t\tif ( elementSize === 3 ) {\n\n\t\t\t\t\tmaterials.push( material );\n\n\t\t\t\t} else if ( elementSize === 2 ) {\n\n\t\t\t\t\tif ( isConditionalSegments ) {\n\n\t\t\t\t\t\tconst edgeMaterial = loader.edgeMaterialCache.get( material );\n\n\t\t\t\t\t\tmaterials.push( loader.conditionalEdgeMaterialCache.get( edgeMaterial ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials.push( loader.edgeMaterialCache.get( material ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a material has not been made available yet then keep the color code string in the material array\n\t\t\t\t// to save the spot for the material once a parent scopes materials are being applied to the object.\n\t\t\t\tmaterials.push( elem.colorCode );\n\n\t\t\t}\n\n\t\t\tprevMaterial = elem.colorCode;\n\t\t\tindex0 = offset / 3;\n\t\t\tnumGroupVerts = vertices.length;\n\n\t\t} else {\n\n\t\t\tnumGroupVerts += vertices.length;\n\n\t\t}\n\n\t\toffset += 3 * vertices.length;\n\n\t}\n\n\tif ( numGroupVerts > 0 ) {\n\n\t\tbufferGeometry.addGroup( index0, Infinity, materials.length - 1 );\n\n\t}\n\n\tbufferGeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tif ( normals !== null ) {\n\n\t\tbufferGeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tlet object3d = null;\n\n\tif ( elementSize === 2 ) {\n\n\t\tif ( isConditionalSegments ) {\n\n\t\t\tobject3d = new ConditionalLineSegments( bufferGeometry, materials.length === 1 ? materials[ 0 ] : materials );\n\n\t\t} else {\n\n\t\t\tobject3d = new LineSegments( bufferGeometry, materials.length === 1 ? materials[ 0 ] : materials );\n\n\t\t}\n\n\t} else if ( elementSize === 3 ) {\n\n\t\tobject3d = new Mesh( bufferGeometry, materials.length === 1 ? materials[ 0 ] : materials );\n\n\t}\n\n\tif ( isConditionalSegments ) {\n\n\t\tobject3d.isConditionalLine = true;\n\n\t\tconst controlArray0 = new Float32Array( elements.length * 3 * 2 );\n\t\tconst controlArray1 = new Float32Array( elements.length * 3 * 2 );\n\t\tconst directionArray = new Float32Array( elements.length * 3 * 2 );\n\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\tconst os = elements[ i ];\n\t\t\tconst vertices = os.vertices;\n\t\t\tconst controlPoints = os.controlPoints;\n\t\t\tconst c0 = controlPoints[ 0 ];\n\t\t\tconst c1 = controlPoints[ 1 ];\n\t\t\tconst v0 = vertices[ 0 ];\n\t\t\tconst v1 = vertices[ 1 ];\n\t\t\tconst index = i * 3 * 2;\n\t\t\tcontrolArray0[ index + 0 ] = c0.x;\n\t\t\tcontrolArray0[ index + 1 ] = c0.y;\n\t\t\tcontrolArray0[ index + 2 ] = c0.z;\n\t\t\tcontrolArray0[ index + 3 ] = c0.x;\n\t\t\tcontrolArray0[ index + 4 ] = c0.y;\n\t\t\tcontrolArray0[ index + 5 ] = c0.z;\n\n\t\t\tcontrolArray1[ index + 0 ] = c1.x;\n\t\t\tcontrolArray1[ index + 1 ] = c1.y;\n\t\t\tcontrolArray1[ index + 2 ] = c1.z;\n\t\t\tcontrolArray1[ index + 3 ] = c1.x;\n\t\t\tcontrolArray1[ index + 4 ] = c1.y;\n\t\t\tcontrolArray1[ index + 5 ] = c1.z;\n\n\t\t\tdirectionArray[ index + 0 ] = v1.x - v0.x;\n\t\t\tdirectionArray[ index + 1 ] = v1.y - v0.y;\n\t\t\tdirectionArray[ index + 2 ] = v1.z - v0.z;\n\t\t\tdirectionArray[ index + 3 ] = v1.x - v0.x;\n\t\t\tdirectionArray[ index + 4 ] = v1.y - v0.y;\n\t\t\tdirectionArray[ index + 5 ] = v1.z - v0.z;\n\n\t\t}\n\n\t\tbufferGeometry.setAttribute( 'control0', new BufferAttribute( controlArray0, 3, false ) );\n\t\tbufferGeometry.setAttribute( 'control1', new BufferAttribute( controlArray1, 3, false ) );\n\t\tbufferGeometry.setAttribute( 'direction', new BufferAttribute( directionArray, 3, false ) );\n\n\t}\n\n\treturn object3d;\n\n}\n\n//\n\nclass LDrawLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t// Array of THREE.Material\n\t\tthis.materials = [];\n\t\tthis.materialLibrary = {};\n\t\tthis.edgeMaterialCache = new WeakMap();\n\t\tthis.conditionalEdgeMaterialCache = new WeakMap();\n\n\t\t// This also allows to handle the embedded text files (\"0 FILE\" lines)\n\t\tthis.partsCache = new LDrawPartsGeometryCache( this );\n\n\t\t// This object is a map from file names to paths. It agilizes the paths search. If it is not set then files will be searched by trial and error.\n\t\tthis.fileMap = {};\n\n\t\t// Initializes the materials library with default materials\n\t\tthis.setMaterials( [] );\n\n\t\t// If this flag is set to true the vertex normals will be smoothed.\n\t\tthis.smoothNormals = true;\n\n\t\t// The path to load parts from the LDraw parts library from.\n\t\tthis.partsLibraryPath = '';\n\n\t\t// Material assigned to not available colors for meshes and edges\n\t\tthis.missingColorMaterial = new MeshStandardMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, color: 0xFF00FF, roughness: 0.3, metalness: 0 } );\n\t\tthis.missingEdgeColorMaterial = new LineBasicMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, color: 0xFF00FF } );\n\t\tthis.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, fog: true, color: 0xFF00FF } );\n\t\tthis.edgeMaterialCache.set( this.missingColorMaterial, this.missingEdgeColorMaterial );\n\t\tthis.conditionalEdgeMaterialCache.set( this.missingEdgeColorMaterial, this.missingConditionalEdgeColorMaterial );\n\n\t}\n\n\tsetPartsLibraryPath( path ) {\n\n\t\tthis.partsLibraryPath = path;\n\t\treturn this;\n\n\t}\n\n\tasync preloadMaterials( url ) {\n\n\t\tconst fileLoader = new FileLoader( this.manager );\n\t\tfileLoader.setPath( this.path );\n\t\tfileLoader.setRequestHeader( this.requestHeader );\n\t\tfileLoader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await fileLoader.loadAsync( url );\n\t\tconst colorLineRegex = /^0 !COLOUR/;\n\t\tconst lines = text.split( /[\\n\\r]/g );\n\t\tconst materials = [];\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ];\n\t\t\tif ( colorLineRegex.test( line ) ) {\n\n\t\t\t\tconst directive = line.replace( colorLineRegex, '' );\n\t\t\t\tconst material = this.parseColorMetaDirective( new LineParser( directive ) );\n\t\t\t\tmaterials.push( material );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setMaterials( materials );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst fileLoader = new FileLoader( this.manager );\n\t\tfileLoader.setPath( this.path );\n\t\tfileLoader.setRequestHeader( this.requestHeader );\n\t\tfileLoader.setWithCredentials( this.withCredentials );\n\t\tfileLoader.load( url, text => {\n\n\t\t\tthis.partsCache\n\t\t\t\t.parseModel( text, this.materialLibrary )\n\t\t\t\t.then( group => {\n\n\t\t\t\t\tthis.applyMaterialsToMesh( group, MAIN_COLOUR_CODE, this.materialLibrary, true );\n\t\t\t\t\tthis.computeBuildingSteps( group );\n\t\t\t\t\tgroup.userData.fileName = url;\n\t\t\t\t\tonLoad( group );\n\n\t\t\t\t} )\n\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text, onLoad, onError ) {\n\n\t\tthis.partsCache\n\t\t\t.parseModel( text, this.materialLibrary )\n\t\t\t.then( group => {\n\n\t\t\t\tthis.applyMaterialsToMesh( group, MAIN_COLOUR_CODE, this.materialLibrary, true );\n\t\t\t\tthis.computeBuildingSteps( group );\n\t\t\t\tgroup.userData.fileName = '';\n\t\t\t\tonLoad( group );\n\n\t\t\t} )\n\t\t\t.catch( onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materialLibrary = {};\n\t\tthis.materials = [];\n\t\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\tthis.addMaterial( materials[ i ] );\n\n\t\t}\n\n\t\t// Add default main triangle and line edge materials (used in pieces that can be colored with a main color)\n\t\tthis.addMaterial( this.parseColorMetaDirective( new LineParser( 'Main_Colour CODE 16 VALUE #FF8080 EDGE #333333' ) ) );\n\t\tthis.addMaterial( this.parseColorMetaDirective( new LineParser( 'Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333' ) ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFileMap( fileMap ) {\n\n\t\tthis.fileMap = fileMap;\n\n\t\treturn this;\n\n\t}\n\n\taddMaterial( material ) {\n\n\t\t// Adds a material to the material library which is on top of the parse scopes stack. And also to the materials array\n\n\t\tconst matLib = this.materialLibrary;\n\t\tif ( ! matLib[ material.userData.code ] ) {\n\n\t\t\tthis.materials.push( material );\n\t\t\tmatLib[ material.userData.code ] = material;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetMaterial( colorCode ) {\n\n\t\tif ( colorCode.startsWith( '0x2' ) ) {\n\n\t\t\t// Special 'direct' material value (RGB color)\n\t\t\tconst color = colorCode.substring( 3 );\n\n\t\t\treturn this.parseColorMetaDirective( new LineParser( 'Direct_Color_' + color + ' CODE -1 VALUE #' + color + ' EDGE #' + color + '' ) );\n\n\t\t}\n\n\t\treturn this.materialLibrary[ colorCode ] || null;\n\n\t}\n\n\t// Applies the appropriate materials to a prebuilt hierarchy of geometry. Assumes that color codes are present\n\t// in the material array if they need to be filled in.\n\tapplyMaterialsToMesh( group, parentColorCode, materialHierarchy, finalMaterialPass = false ) {\n\n\t\t// find any missing materials as indicated by a color code string and replace it with a material from the current material lib\n\t\tconst loader = this;\n\t\tconst parentIsPassthrough = parentColorCode === MAIN_COLOUR_CODE;\n\t\tgroup.traverse( c => {\n\n\t\t\tif ( c.isMesh || c.isLineSegments ) {\n\n\t\t\t\tif ( Array.isArray( c.material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = c.material.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tif ( ! c.material[ i ].isMaterial ) {\n\n\t\t\t\t\t\t\tc.material[ i ] = getMaterial( c, c.material[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( ! c.material.isMaterial ) {\n\n\t\t\t\t\tc.material = getMaterial( c, c.material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\n\t\t// Returns the appropriate material for the object (line or face) given color code. If the code is \"pass through\"\n\t\t// (24 for lines, 16 for edges) then the pass through color code is used. If that is also pass through then it's\n\t\t// simply returned for the subsequent material application.\n\t\tfunction getMaterial( c, colorCode ) {\n\n\t\t\t// if our parent is a passthrough color code and we don't have the current material color available then\n\t\t\t// return early.\n\t\t\tif ( parentIsPassthrough && ! ( colorCode in materialHierarchy ) && ! finalMaterialPass ) {\n\n\t\t\t\treturn colorCode;\n\n\t\t\t}\n\n\t\t\tconst forEdge = c.isLineSegments || c.isConditionalLine;\n\t\t\tconst isPassthrough = ! forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;\n\t\t\tif ( isPassthrough ) {\n\n\t\t\t\tcolorCode = parentColorCode;\n\n\t\t\t}\n\n\t\t\tlet material = null;\n\t\t\tif ( colorCode in materialHierarchy ) {\n\n\t\t\t\tmaterial = materialHierarchy[ colorCode ];\n\n\t\t\t} else if ( finalMaterialPass ) {\n\n\t\t\t\t// see if we can get the final material from from the \"getMaterial\" function which will attempt to\n\t\t\t\t// parse the \"direct\" colors\n\t\t\t\tmaterial = loader.getMaterial( colorCode );\n\t\t\t\tif ( material === null ) {\n\n\t\t\t\t\t// otherwise throw a warning if this is final opportunity to set the material\n\t\t\t\t\tconsole.warn( `LDrawLoader: Material properties for code ${ colorCode } not available.` );\n\n\t\t\t\t\t// And return the 'missing color' material\n\t\t\t\t\tmaterial = loader.missingColorMaterial;\n\n\t\t\t\t}\n\n\n\t\t\t} else {\n\n\t\t\t\treturn colorCode;\n\n\t\t\t}\n\n\t\t\tif ( c.isLineSegments ) {\n\n\t\t\t\tmaterial = loader.edgeMaterialCache.get( material );\n\n\t\t\t\tif ( c.isConditionalLine ) {\n\n\t\t\t\t\tmaterial = loader.conditionalEdgeMaterialCache.get( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t}\n\n\tgetMainMaterial() {\n\n\t\treturn this.getMaterial( MAIN_COLOUR_CODE );\n\n\t}\n\n\tgetMainEdgeMaterial() {\n\n\t\tconst mat = this.getMaterial( MAIN_EDGE_COLOUR_CODE );\n\t\treturn mat ? this.edgeMaterialCache.get( mat ) : null;\n\n\t}\n\n\tparseColorMetaDirective( lineParser ) {\n\n\t\t// Parses a color definition and returns a THREE.Material\n\n\t\tlet code = null;\n\n\t\t// Triangle and line colors\n\t\tlet fillColor = '#FF00FF';\n\t\tlet edgeColor = '#FF00FF';\n\n\t\t// Transparency\n\t\tlet alpha = 1;\n\t\tlet isTransparent = false;\n\t\t// Self-illumination:\n\t\tlet luminance = 0;\n\n\t\tlet finishType = FINISH_TYPE_DEFAULT;\n\n\t\tlet edgeMaterial = null;\n\n\t\tconst name = lineParser.getToken();\n\t\tif ( ! name ) {\n\n\t\t\tthrow new Error( 'LDrawLoader: Material name was expected after \"!COLOUR tag' + lineParser.getLineNumberString() + '.' );\n\n\t\t}\n\n\t\t// Parse tag tokens and their parameters\n\t\tlet token = null;\n\t\twhile ( true ) {\n\n\t\t\ttoken = lineParser.getToken();\n\n\t\t\tif ( ! token ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( ! parseLuminance( token ) ) {\n\n\t\t\t\tswitch ( token.toUpperCase() ) {\n\n\t\t\t\t\tcase 'CODE':\n\n\t\t\t\t\t\tcode = lineParser.getToken();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'VALUE':\n\n\t\t\t\t\t\tfillColor = lineParser.getToken();\n\t\t\t\t\t\tif ( fillColor.startsWith( '0x' ) ) {\n\n\t\t\t\t\t\t\tfillColor = '#' + fillColor.substring( 2 );\n\n\t\t\t\t\t\t} else if ( ! fillColor.startsWith( '#' ) ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid color while parsing material' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'EDGE':\n\n\t\t\t\t\t\tedgeColor = lineParser.getToken();\n\t\t\t\t\t\tif ( edgeColor.startsWith( '0x' ) ) {\n\n\t\t\t\t\t\t\tedgeColor = '#' + edgeColor.substring( 2 );\n\n\t\t\t\t\t\t} else if ( ! edgeColor.startsWith( '#' ) ) {\n\n\t\t\t\t\t\t\t// Try to see if edge color is a color code\n\t\t\t\t\t\t\tedgeMaterial = this.getMaterial( edgeColor );\n\t\t\t\t\t\t\tif ( ! edgeMaterial ) {\n\n\t\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid edge color while parsing material' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Get the edge material for this triangle material\n\t\t\t\t\t\t\tedgeMaterial = this.edgeMaterialCache.get( edgeMaterial );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ALPHA':\n\n\t\t\t\t\t\talpha = parseInt( lineParser.getToken() );\n\n\t\t\t\t\t\tif ( isNaN( alpha ) ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid alpha value in material definition' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\talpha = Math.max( 0, Math.min( 1, alpha / 255 ) );\n\n\t\t\t\t\t\tif ( alpha < 1 ) {\n\n\t\t\t\t\t\t\tisTransparent = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LUMINANCE':\n\n\t\t\t\t\t\tif ( ! parseLuminance( lineParser.getToken() ) ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid luminance value in material definition' + LineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CHROME':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_CHROME;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PEARLESCENT':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_PEARLESCENT;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RUBBER':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_RUBBER;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'MATTE_METALLIC':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_MATTE_METALLIC;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'METAL':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_METAL;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'MATERIAL':\n\t\t\t\t\t\t// Not implemented\n\t\t\t\t\t\tlineParser.setToEnd();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Unknown token \"' + token + '\" while parsing material' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet material = null;\n\n\t\tswitch ( finishType ) {\n\n\t\t\tcase FINISH_TYPE_DEFAULT:\n\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.3, metalness: 0 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_PEARLESCENT:\n\n\t\t\t\t// Try to imitate pearlescency by making the surface glossy\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.3, metalness: 0.25 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_CHROME:\n\n\t\t\t\t// Mirror finish surface\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0, metalness: 1 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_RUBBER:\n\n\t\t\t\t// Rubber finish\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.9, metalness: 0 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_MATTE_METALLIC:\n\n\t\t\t\t// Brushed metal finish\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.8, metalness: 0.4 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_METAL:\n\n\t\t\t\t// Average metal finish\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.2, metalness: 0.85 } );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// Should not happen\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tmaterial.color.setStyle( fillColor, COLOR_SPACE_LDRAW );\n\t\tmaterial.transparent = isTransparent;\n\t\tmaterial.premultipliedAlpha = true;\n\t\tmaterial.opacity = alpha;\n\t\tmaterial.depthWrite = ! isTransparent;\n\n\t\tmaterial.polygonOffset = true;\n\t\tmaterial.polygonOffsetFactor = 1;\n\n\t\tif ( luminance !== 0 ) {\n\n\t\t\tmaterial.emissive.setStyle( fillColor, COLOR_SPACE_LDRAW ).multiplyScalar( luminance );\n\n\t\t}\n\n\t\tif ( ! edgeMaterial ) {\n\n\t\t\t// This is the material used for edges\n\t\t\tedgeMaterial = new LineBasicMaterial( {\n\t\t\t\tcolor: new Color().setStyle( edgeColor, COLOR_SPACE_LDRAW ),\n\t\t\t\ttransparent: isTransparent,\n\t\t\t\topacity: alpha,\n\t\t\t\tdepthWrite: ! isTransparent\n\t\t\t} );\n\t\t\tedgeMaterial.color;\n\t\t\tedgeMaterial.userData.code = code;\n\t\t\tedgeMaterial.name = name + ' - Edge';\n\n\t\t\t// This is the material used for conditional edges\n\t\t\tconst conditionalEdgeMaterial = new LDrawConditionalLineMaterial( {\n\n\t\t\t\tfog: true,\n\t\t\t\ttransparent: isTransparent,\n\t\t\t\tdepthWrite: ! isTransparent,\n\t\t\t\tcolor: new Color().setStyle( edgeColor, COLOR_SPACE_LDRAW ),\n\t\t\t\topacity: alpha,\n\n\t\t\t} );\n\t\t\tconditionalEdgeMaterial.userData.code = code;\n\t\t\tconditionalEdgeMaterial.name = name + ' - Conditional Edge';\n\n\t\t\tthis.conditionalEdgeMaterialCache.set( edgeMaterial, conditionalEdgeMaterial );\n\n\t\t}\n\n\t\tmaterial.userData.code = code;\n\t\tmaterial.name = name;\n\n\t\tthis.edgeMaterialCache.set( material, edgeMaterial );\n\n\t\tthis.addMaterial( material );\n\n\t\treturn material;\n\n\t\tfunction parseLuminance( token ) {\n\n\t\t\t// Returns success\n\n\t\t\tlet lum;\n\n\t\t\tif ( token.startsWith( 'LUMINANCE' ) ) {\n\n\t\t\t\tlum = parseInt( token.substring( 9 ) );\n\n\t\t\t} else {\n\n\t\t\t\tlum = parseInt( token );\n\n\t\t\t}\n\n\t\t\tif ( isNaN( lum ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\tluminance = Math.max( 0, Math.min( 1, lum / 255 ) );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\tcomputeBuildingSteps( model ) {\n\n\t\t// Sets userdata.buildingStep number in Group objects and userData.numBuildingSteps number in the root Group object.\n\n\t\tlet stepNumber = 0;\n\n\t\tmodel.traverse( c => {\n\n\t\t\tif ( c.isGroup ) {\n\n\t\t\t\tif ( c.userData.startingBuildingStep ) {\n\n\t\t\t\t\tstepNumber ++;\n\n\t\t\t\t}\n\n\t\t\t\tc.userData.buildingStep = stepNumber;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tmodel.userData.numBuildingSteps = stepNumber + 1;\n\n\t}\n\n}\n\nexport { LDrawLoader };\n", "// http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492\n// https://community.foundry.com/discuss/topic/103636/format-spec-for-3dl?mode=Post&postID=895258\n\nimport {\n\tClampToEdgeWrapping,\n\tData3DTexture,\n\tFileLoader,\n\tFloatType,\n\tLinearFilter,\n\tLoader,\n\tRGBAFormat,\n\tUnsignedByteType,\n} from 'three';\n\nexport class LUT3dlLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = UnsignedByteType;\n\n\t}\n\n\tsetType( type ) {\n\n\t\tif ( type !== UnsignedByteType && type !== FloatType ) {\n\n\t\t\tthrow new Error( 'LUT3dlLoader: Unsupported type' );\n\n\t\t}\n\n\t\tthis.type = type;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'text' );\n\t\tloader.load( url, text => {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( this.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( input ) {\n\n\t\tconst regExpGridInfo = /^[\\d ]+$/m;\n\t\tconst regExpDataPoints = /^([\\d.e+-]+) +([\\d.e+-]+) +([\\d.e+-]+) *$/gm;\n\n\t\t// The first line describes the positions of values on the LUT grid.\n\t\tlet result = regExpGridInfo.exec( input );\n\n\t\tif ( result === null ) {\n\n\t\t\tthrow new Error( 'LUT3dlLoader: Missing grid information' );\n\n\t\t}\n\n\t\tconst gridLines = result[ 0 ].trim().split( /\\s+/g ).map( Number );\n\t\tconst gridStep = gridLines[ 1 ] - gridLines[ 0 ];\n\t\tconst size = gridLines.length;\n\t\tconst sizeSq = size ** 2;\n\n\t\tfor ( let i = 1, l = gridLines.length; i < l; ++ i ) {\n\n\t\t\tif ( gridStep !== ( gridLines[ i ] - gridLines[ i - 1 ] ) ) {\n\n\t\t\t\tthrow new Error( 'LUT3dlLoader: Inconsistent grid size' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst dataFloat = new Float32Array( size ** 3 * 4 );\n\t\tlet maxValue = 0.0;\n\t\tlet index = 0;\n\n\t\twhile ( ( result = regExpDataPoints.exec( input ) ) !== null ) {\n\n\t\t\tconst r = Number( result[ 1 ] );\n\t\t\tconst g = Number( result[ 2 ] );\n\t\t\tconst b = Number( result[ 3 ] );\n\n\t\t\tmaxValue = Math.max( maxValue, r, g, b );\n\n\t\t\tconst bLayer = index % size;\n\t\t\tconst gLayer = Math.floor( index / size ) % size;\n\t\t\tconst rLayer = Math.floor( index / ( sizeSq ) ) % size;\n\n\t\t\t// b grows first, then g, then r.\n\t\t\tconst d4 = ( bLayer * sizeSq + gLayer * size + rLayer ) * 4;\n\t\t\tdataFloat[ d4 + 0 ] = r;\n\t\t\tdataFloat[ d4 + 1 ] = g;\n\t\t\tdataFloat[ d4 + 2 ] = b;\n\n\t\t\t++ index;\n\n\t\t}\n\n\t\t// Determine the bit depth to scale the values to [0.0, 1.0].\n\t\tconst bits = Math.ceil( Math.log2( maxValue ) );\n\t\tconst maxBitValue = Math.pow( 2, bits );\n\n\t\tconst data = this.type === UnsignedByteType ? new Uint8Array( dataFloat.length ) : dataFloat;\n\t\tconst scale = this.type === UnsignedByteType ? 255 : 1;\n\n\t\tfor ( let i = 0, l = data.length; i < l; i += 4 ) {\n\n\t\t\tconst i1 = i + 1;\n\t\t\tconst i2 = i + 2;\n\t\t\tconst i3 = i + 3;\n\n\t\t\t// Note: data is dataFloat when type is FloatType.\n\t\t\tdata[ i ] = dataFloat[ i ] / maxBitValue * scale;\n\t\t\tdata[ i1 ] = dataFloat[ i1 ] / maxBitValue * scale;\n\t\t\tdata[ i2 ] = dataFloat[ i2 ] / maxBitValue * scale;\n\t\t\tdata[ i3 ] = scale;\n\n\t\t}\n\n\t\tconst texture3D = new Data3DTexture();\n\t\ttexture3D.image.data = data;\n\t\ttexture3D.image.width = size;\n\t\ttexture3D.image.height = size;\n\t\ttexture3D.image.depth = size;\n\t\ttexture3D.format = RGBAFormat;\n\t\ttexture3D.type = this.type;\n\t\ttexture3D.magFilter = LinearFilter;\n\t\ttexture3D.minFilter = LinearFilter;\n\t\ttexture3D.wrapS = ClampToEdgeWrapping;\n\t\ttexture3D.wrapT = ClampToEdgeWrapping;\n\t\ttexture3D.wrapR = ClampToEdgeWrapping;\n\t\ttexture3D.generateMipmaps = false;\n\t\ttexture3D.needsUpdate = true;\n\n\t\treturn {\n\t\t\tsize,\n\t\t\ttexture3D,\n\t\t};\n\n\t}\n\n}\n", "// https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf\n\nimport {\n\tClampToEdgeWrapping,\n\tData3DTexture,\n\tFileLoader,\n\tFloatType,\n\tLinearFilter,\n\tLoader,\n\tUnsignedByteType,\n\tVector3,\n} from 'three';\n\nexport class LUTCubeLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = UnsignedByteType;\n\n\t}\n\n\tsetType( type ) {\n\n\t\tif ( type !== UnsignedByteType && type !== FloatType ) {\n\n\t\t\tthrow new Error( 'LUTCubeLoader: Unsupported type' );\n\n\t\t}\n\n\t\tthis.type = type;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'text' );\n\t\tloader.load( url, text => {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( this.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( input ) {\n\n\t\tconst regExpTitle = /TITLE +\"([^\"]*)\"/;\n\t\tconst regExpSize = /LUT_3D_SIZE +(\\d+)/;\n\t\tconst regExpDomainMin = /DOMAIN_MIN +([\\d.]+) +([\\d.]+) +([\\d.]+)/;\n\t\tconst regExpDomainMax = /DOMAIN_MAX +([\\d.]+) +([\\d.]+) +([\\d.]+)/;\n\t\tconst regExpDataPoints = /^([\\d.e+-]+) +([\\d.e+-]+) +([\\d.e+-]+) *$/gm;\n\n\t\tlet result = regExpTitle.exec( input );\n\t\tconst title = ( result !== null ) ? result[ 1 ] : null;\n\n\t\tresult = regExpSize.exec( input );\n\n\t\tif ( result === null ) {\n\n\t\t\tthrow new Error( 'LUTCubeLoader: Missing LUT_3D_SIZE information' );\n\n\t\t}\n\n\t\tconst size = Number( result[ 1 ] );\n\t\tconst length = size ** 3 * 4;\n\t\tconst data = this.type === UnsignedByteType ? new Uint8Array( length ) : new Float32Array( length );\n\n\t\tconst domainMin = new Vector3( 0, 0, 0 );\n\t\tconst domainMax = new Vector3( 1, 1, 1 );\n\n\t\tresult = regExpDomainMin.exec( input );\n\n\t\tif ( result !== null ) {\n\n\t\t\tdomainMin.set( Number( result[ 1 ] ), Number( result[ 2 ] ), Number( result[ 3 ] ) );\n\n\t\t}\n\n\t\tresult = regExpDomainMax.exec( input );\n\n\t\tif ( result !== null ) {\n\n\t\t\tdomainMax.set( Number( result[ 1 ] ), Number( result[ 2 ] ), Number( result[ 3 ] ) );\n\n\t\t}\n\n\t\tif ( domainMin.x > domainMax.x || domainMin.y > domainMax.y || domainMin.z > domainMax.z ) {\n\n\t\t\tthrow new Error( 'LUTCubeLoader: Invalid input domain' );\n\n\t\t}\n\n\t\tconst scale = this.type === UnsignedByteType ? 255 : 1;\n\t\tlet i = 0;\n\n\t\twhile ( ( result = regExpDataPoints.exec( input ) ) !== null ) {\n\n\t\t\tdata[ i ++ ] = Number( result[ 1 ] ) * scale;\n\t\t\tdata[ i ++ ] = Number( result[ 2 ] ) * scale;\n\t\t\tdata[ i ++ ] = Number( result[ 3 ] ) * scale;\n\t\t\tdata[ i ++ ] = scale;\n\n\t\t}\n\n\t\tconst texture3D = new Data3DTexture();\n\t\ttexture3D.image.data = data;\n\t\ttexture3D.image.width = size;\n\t\ttexture3D.image.height = size;\n\t\ttexture3D.image.depth = size;\n\t\ttexture3D.type = this.type;\n\t\ttexture3D.magFilter = LinearFilter;\n\t\ttexture3D.minFilter = LinearFilter;\n\t\ttexture3D.wrapS = ClampToEdgeWrapping;\n\t\ttexture3D.wrapT = ClampToEdgeWrapping;\n\t\ttexture3D.wrapR = ClampToEdgeWrapping;\n\t\ttexture3D.generateMipmaps = false;\n\t\ttexture3D.needsUpdate = true;\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tsize,\n\t\t\tdomainMin,\n\t\t\tdomainMax,\n\t\t\ttexture3D,\n\t\t};\n\n\t}\n\n}\n", "class LWO2Parser {\n\n\tconstructor( IFFParser ) {\n\n\t\tthis.IFF = IFFParser;\n\n\t}\n\n\tparseBlock() {\n\n\t\tthis.IFF.debugger.offset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.closeForms();\n\n\t\tconst blockID = this.IFF.reader.getIDTag();\n\t\tlet length = this.IFF.reader.getUint32(); // size of data in bytes\n\t\tif ( length > this.IFF.reader.dv.byteLength - this.IFF.reader.offset ) {\n\n\t\t\tthis.IFF.reader.offset -= 4;\n\t\t\tlength = this.IFF.reader.getUint16();\n\n\t\t}\n\n\t\tthis.IFF.debugger.dataOffset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.length = length;\n\n\t\t// Data types may be found in either LWO2 OR LWO3 spec\n\t\tswitch ( blockID ) {\n\n\t\t\tcase 'FORM': // form blocks may consist of sub -chunks or sub-forms\n\t\t\t\tthis.IFF.parseForm( length );\n\t\t\t\tbreak;\n\n\t\t\t// SKIPPED CHUNKS\n\t\t\t// if break; is called directly, the position in the lwoTree is not created\n\t\t\t// any sub chunks and forms are added to the parent form instead\n\t\t\t// MISC skipped\n\t\t\tcase 'ICON': // Thumbnail Icon Image\n\t\t\tcase 'VMPA': // Vertex Map Parameter\n\t\t\tcase 'BBOX': // bounding box\n\t\t\t// case 'VMMD':\n\t\t\t// case 'VTYP':\n\n\t\t\t// normal maps can be specified, normally on models imported from other applications. Currently ignored\n\t\t\tcase 'NORM':\n\n\t\t\t// ENVL FORM skipped\n\t\t\tcase 'PRE ':\n\t\t\tcase 'POST':\n\t\t\tcase 'KEY ':\n\t\t\tcase 'SPAN':\n\n\t\t\t// CLIP FORM skipped\n\t\t\tcase 'TIME':\n\t\t\tcase 'CLRS':\n\t\t\tcase 'CLRA':\n\t\t\tcase 'FILT':\n\t\t\tcase 'DITH':\n\t\t\tcase 'CONT':\n\t\t\tcase 'BRIT':\n\t\t\tcase 'SATR':\n\t\t\tcase 'HUE ':\n\t\t\tcase 'GAMM':\n\t\t\tcase 'NEGA':\n\t\t\tcase 'IFLT':\n\t\t\tcase 'PFLT':\n\n\t\t\t// Image Map Layer skipped\n\t\t\tcase 'PROJ':\n\t\t\tcase 'AXIS':\n\t\t\tcase 'AAST':\n\t\t\tcase 'PIXB':\n\t\t\tcase 'AUVO':\n\t\t\tcase 'STCK':\n\n\t\t\t// Procedural Textures skipped\n\t\t\tcase 'PROC':\n\t\t\tcase 'VALU':\n\t\t\tcase 'FUNC':\n\n\t\t\t// Gradient Textures skipped\n\t\t\tcase 'PNAM':\n\t\t\tcase 'INAM':\n\t\t\tcase 'GRST':\n\t\t\tcase 'GREN':\n\t\t\tcase 'GRPT':\n\t\t\tcase 'FKEY':\n\t\t\tcase 'IKEY':\n\n\t\t\t// Texture Mapping Form skipped\n\t\t\tcase 'CSYS':\n\n\t\t\t// Surface CHUNKs skipped\n\t\t\tcase 'OPAQ': // top level 'opacity' checkbox\n\t\t\tcase 'CMAP': // clip map\n\n\t\t\t// Surface node CHUNKS skipped\n\t\t\t// These mainly specify the node editor setup in LW\n\t\t\tcase 'NLOC':\n\t\t\tcase 'NZOM':\n\t\t\tcase 'NVER':\n\t\t\tcase 'NSRV':\n\t\t\tcase 'NVSK': // unknown\n\t\t\tcase 'NCRD':\n\t\t\tcase 'WRPW': // image wrap w ( for cylindrical and spherical projections)\n\t\t\tcase 'WRPH': // image wrap h\n\t\t\tcase 'NMOD':\n\t\t\tcase 'NSEL':\n\t\t\tcase 'NPRW':\n\t\t\tcase 'NPLA':\n\t\t\tcase 'NODS':\n\t\t\tcase 'VERS':\n\t\t\tcase 'ENUM':\n\t\t\tcase 'TAG ':\n\t\t\tcase 'OPAC':\n\n\t\t\t// Car Material CHUNKS\n\t\t\tcase 'CGMD':\n\t\t\tcase 'CGTY':\n\t\t\tcase 'CGST':\n\t\t\tcase 'CGEN':\n\t\t\tcase 'CGTS':\n\t\t\tcase 'CGTE':\n\t\t\tcase 'OSMP':\n\t\t\tcase 'OMDE':\n\t\t\tcase 'OUTR':\n\t\t\tcase 'FLAG':\n\n\t\t\tcase 'TRNL':\n\t\t\tcase 'GLOW':\n\t\t\tcase 'GVAL': // glow intensity\n\t\t\tcase 'SHRP':\n\t\t\tcase 'RFOP':\n\t\t\tcase 'RSAN':\n\t\t\tcase 'TROP':\n\t\t\tcase 'RBLR':\n\t\t\tcase 'TBLR':\n\t\t\tcase 'CLRH':\n\t\t\tcase 'CLRF':\n\t\t\tcase 'ADTR':\n\t\t\tcase 'LINE':\n\t\t\tcase 'ALPH':\n\t\t\tcase 'VCOL':\n\t\t\tcase 'ENAB':\n\t\t\t\tthis.IFF.debugger.skipped = true;\n\t\t\t\tthis.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SURF':\n\t\t\t\tthis.IFF.parseSurfaceLwo2( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'CLIP':\n\t\t\t\tthis.IFF.parseClipLwo2( length );\n\t\t\t\tbreak;\n\n\t\t\t// Texture node chunks (not in spec)\n\t\t\tcase 'IPIX': // usePixelBlending\n\t\t\tcase 'IMIP': // useMipMaps\n\t\t\tcase 'IMOD': // imageBlendingMode\n\t\t\tcase 'AMOD': // unknown\n\t\t\tcase 'IINV': // imageInvertAlpha\n\t\t\tcase 'INCR': // imageInvertColor\n\t\t\tcase 'IAXS': // imageAxis ( for non-UV maps)\n\t\t\tcase 'IFOT': // imageFallofType\n\t\t\tcase 'ITIM': // timing for animated textures\n\t\t\tcase 'IWRL':\n\t\t\tcase 'IUTI':\n\t\t\tcase 'IINX':\n\t\t\tcase 'IINY':\n\t\t\tcase 'IINZ':\n\t\t\tcase 'IREF': // possibly a VX for reused texture nodes\n\t\t\t\tif ( length === 4 ) this.IFF.currentNode[ blockID ] = this.IFF.reader.getInt32();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'OTAG':\n\t\t\t\tthis.IFF.parseObjectTag();\n\t\t\t\tbreak;\n\n\t\t\tcase 'LAYR':\n\t\t\t\tthis.IFF.parseLayer( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PNTS':\n\t\t\t\tthis.IFF.parsePoints( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAP':\n\t\t\t\tthis.IFF.parseVertexMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'AUVU':\n\t\t\tcase 'AUVN':\n\t\t\t\tthis.IFF.reader.skip( length - 1 );\n\t\t\t\tthis.IFF.reader.getVariableLengthIndex(); // VX\n\t\t\t\tbreak;\n\n\t\t\tcase 'POLS':\n\t\t\t\tthis.IFF.parsePolygonList( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TAGS':\n\t\t\t\tthis.IFF.parseTagStrings( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PTAG':\n\t\t\t\tthis.IFF.parsePolygonTagMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAD':\n\t\t\t\tthis.IFF.parseVertexMapping( length, true );\n\t\t\t\tbreak;\n\n\t\t\t// Misc CHUNKS\n\t\t\tcase 'DESC': // Description Line\n\t\t\t\tthis.IFF.currentForm.description = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'TEXT':\n\t\t\tcase 'CMNT':\n\t\t\tcase 'NCOM':\n\t\t\t\tthis.IFF.currentForm.comment = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Envelope Form\n\t\t\tcase 'NAME':\n\t\t\t\tthis.IFF.currentForm.channelName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Image Map Layer\n\t\t\tcase 'WRAP':\n\t\t\t\tthis.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAG':\n\t\t\t\tconst index = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tthis.IFF.currentForm.imageIndex = index;\n\t\t\t\tbreak;\n\n\t\t\t// Texture Mapping Form\n\t\t\tcase 'OREF':\n\t\t\t\tthis.IFF.currentForm.referenceObject = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROID':\n\t\t\t\tthis.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\t// Surface Blocks\n\t\t\tcase 'SSHN':\n\t\t\t\tthis.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'AOVN':\n\t\t\t\tthis.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks\n\t\t\tcase 'NSTA':\n\t\t\t\tthis.IFF.currentForm.disabled = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NRNM':\n\t\t\t\tthis.IFF.currentForm.realName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NNME':\n\t\t\t\tthis.IFF.currentForm.refName = this.IFF.reader.getString();\n\t\t\t\tthis.IFF.currentSurface.nodes[ this.IFF.currentForm.refName ] = this.IFF.currentForm;\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks : connections\n\t\t\tcase 'INME':\n\t\t\t\tif ( ! this.IFF.currentForm.nodeName ) this.IFF.currentForm.nodeName = [];\n\t\t\t\tthis.IFF.currentForm.nodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINN':\n\t\t\t\tif ( ! this.IFF.currentForm.inputNodeName ) this.IFF.currentForm.inputNodeName = [];\n\t\t\t\tthis.IFF.currentForm.inputNodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputName ) this.IFF.currentForm.inputName = [];\n\t\t\t\tthis.IFF.currentForm.inputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IONM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputOutputName ) this.IFF.currentForm.inputOutputName = [];\n\t\t\t\tthis.IFF.currentForm.inputOutputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'FNAM':\n\t\t\t\tthis.IFF.currentForm.fileName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'CHAN': // NOTE: ENVL Forms may also have CHAN chunk, however ENVL is currently ignored\n\t\t\t\tif ( length === 4 ) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\t// LWO2 Spec chunks: these are needed since the SURF FORMs are often in LWO2 format\n\t\t\tcase 'SMAN':\n\t\t\t\tconst maxSmoothingAngle = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.currentSurface.attributes.smooth = ( maxSmoothingAngle < 0 ) ? false : true;\n\t\t\t\tbreak;\n\n\t\t\t// LWO2: Basic Surface Parameters\n\t\t\tcase 'COLR':\n\t\t\t\tthis.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array( 3 ) };\n\t\t\t\tthis.IFF.reader.skip( 2 ); // VX: envelope\n\t\t\t\tbreak;\n\n\t\t\tcase 'LUMI':\n\t\t\t\tthis.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SPEC':\n\t\t\t\tthis.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'DIFF':\n\t\t\t\tthis.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'REFL':\n\t\t\t\tthis.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'GLOS':\n\t\t\t\tthis.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TRAN':\n\t\t\t\tthis.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'BUMP':\n\t\t\t\tthis.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SIDE':\n\t\t\t\tthis.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIND':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAP':\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TMAP':\n\t\t\t\tthis.IFF.debugger.skipped = true;\n\t\t\t\tthis.IFF.reader.skip( length ); // needs implementing\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUVI': // uv channel name\n\t\t\t\tthis.IFF.currentNode.UVChannel = this.IFF.reader.getString( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUTL': // widthWrappingMode: 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n\t\t\t\tthis.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\t\t\tcase 'IVTL': // heightWrappingMode\n\t\t\t\tthis.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\t// LWO2 USE\n\t\t\tcase 'BLOK':\n\t\t\t\t// skip\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.IFF.parseUnknownCHUNK( blockID, length );\n\n\t\t}\n\n\t\tif ( blockID != 'FORM' ) {\n\n\t\t\tthis.IFF.debugger.node = 1;\n\t\t\tthis.IFF.debugger.nodeID = blockID;\n\t\t\tthis.IFF.debugger.log();\n\n\t\t}\n\n\t\tif ( this.IFF.reader.offset >= this.IFF.currentFormEnd ) {\n\n\t\t\tthis.IFF.currentForm = this.IFF.parentForm;\n\n\t\t}\n\n\t}\n\n}\n\nexport { LWO2Parser };\n", "class LWO3Parser {\n\n\tconstructor( IFFParser ) {\n\n\t\tthis.IFF = IFFParser;\n\n\t}\n\n\tparseBlock() {\n\n\t\tthis.IFF.debugger.offset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.closeForms();\n\n\t\tconst blockID = this.IFF.reader.getIDTag();\n\t\tconst length = this.IFF.reader.getUint32(); // size of data in bytes\n\n\t\tthis.IFF.debugger.dataOffset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.length = length;\n\n\t\t// Data types may be found in either LWO2 OR LWO3 spec\n\t\tswitch ( blockID ) {\n\n\t\t\tcase 'FORM': // form blocks may consist of sub -chunks or sub-forms\n\t\t\t\tthis.IFF.parseForm( length );\n\t\t\t\tbreak;\n\n\t\t\t// SKIPPED CHUNKS\n\t\t\t// MISC skipped\n\t\t\tcase 'ICON': // Thumbnail Icon Image\n\t\t\tcase 'VMPA': // Vertex Map Parameter\n\t\t\tcase 'BBOX': // bounding box\n\t\t\t// case 'VMMD':\n\t\t\t// case 'VTYP':\n\n\t\t\t// normal maps can be specified, normally on models imported from other applications. Currently ignored\n\t\t\tcase 'NORM':\n\n\t\t\t// ENVL FORM skipped\n\t\t\tcase 'PRE ': // Pre-loop behavior for the keyframe\n\t\t\tcase 'POST': // Post-loop behavior for the keyframe\n\t\t\tcase 'KEY ':\n\t\t\tcase 'SPAN':\n\n\t\t\t// CLIP FORM skipped\n\t\t\tcase 'TIME':\n\t\t\tcase 'CLRS':\n\t\t\tcase 'CLRA':\n\t\t\tcase 'FILT':\n\t\t\tcase 'DITH':\n\t\t\tcase 'CONT':\n\t\t\tcase 'BRIT':\n\t\t\tcase 'SATR':\n\t\t\tcase 'HUE ':\n\t\t\tcase 'GAMM':\n\t\t\tcase 'NEGA':\n\t\t\tcase 'IFLT':\n\t\t\tcase 'PFLT':\n\n\t\t\t// Image Map Layer skipped\n\t\t\tcase 'PROJ':\n\t\t\tcase 'AXIS':\n\t\t\tcase 'AAST':\n\t\t\tcase 'PIXB':\n\t\t\tcase 'STCK':\n\n\t\t\t// Procedural Textures skipped\n\t\t\tcase 'VALU':\n\n\t\t\t// Gradient Textures skipped\n\t\t\tcase 'PNAM':\n\t\t\tcase 'INAM':\n\t\t\tcase 'GRST':\n\t\t\tcase 'GREN':\n\t\t\tcase 'GRPT':\n\t\t\tcase 'FKEY':\n\t\t\tcase 'IKEY':\n\n\t\t\t// Texture Mapping Form skipped\n\t\t\tcase 'CSYS':\n\n\t\t\t\t// Surface CHUNKs skipped\n\t\t\tcase 'OPAQ': // top level 'opacity' checkbox\n\t\t\tcase 'CMAP': // clip map\n\n\t\t\t// Surface node CHUNKS skipped\n\t\t\t// These mainly specify the node editor setup in LW\n\t\t\tcase 'NLOC':\n\t\t\tcase 'NZOM':\n\t\t\tcase 'NVER':\n\t\t\tcase 'NSRV':\n\t\t\tcase 'NCRD':\n\t\t\tcase 'NMOD':\n\t\t\tcase 'NSEL':\n\t\t\tcase 'NPRW':\n\t\t\tcase 'NPLA':\n\t\t\tcase 'VERS':\n\t\t\tcase 'ENUM':\n\t\t\tcase 'TAG ':\n\n\t\t\t// Car Material CHUNKS\n\t\t\tcase 'CGMD':\n\t\t\tcase 'CGTY':\n\t\t\tcase 'CGST':\n\t\t\tcase 'CGEN':\n\t\t\tcase 'CGTS':\n\t\t\tcase 'CGTE':\n\t\t\tcase 'OSMP':\n\t\t\tcase 'OMDE':\n\t\t\tcase 'OUTR':\n\t\t\tcase 'FLAG':\n\n\t\t\tcase 'TRNL':\n\t\t\tcase 'SHRP':\n\t\t\tcase 'RFOP':\n\t\t\tcase 'RSAN':\n\t\t\tcase 'TROP':\n\t\t\tcase 'RBLR':\n\t\t\tcase 'TBLR':\n\t\t\tcase 'CLRH':\n\t\t\tcase 'CLRF':\n\t\t\tcase 'ADTR':\n\t\t\tcase 'GLOW':\n\t\t\tcase 'LINE':\n\t\t\tcase 'ALPH':\n\t\t\tcase 'VCOL':\n\t\t\tcase 'ENAB':\n\t\t\t\tthis.IFF.debugger.skipped = true;\n\t\t\t\tthis.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\t// Texture node chunks (not in spec)\n\t\t\tcase 'IPIX': // usePixelBlending\n\t\t\tcase 'IMIP': // useMipMaps\n\t\t\tcase 'IMOD': // imageBlendingMode\n\t\t\tcase 'AMOD': // unknown\n\t\t\tcase 'IINV': // imageInvertAlpha\n\t\t\tcase 'INCR': // imageInvertColor\n\t\t\tcase 'IAXS': // imageAxis ( for non-UV maps)\n\t\t\tcase 'IFOT': // imageFallofType\n\t\t\tcase 'ITIM': // timing for animated textures\n\t\t\tcase 'IWRL':\n\t\t\tcase 'IUTI':\n\t\t\tcase 'IINX':\n\t\t\tcase 'IINY':\n\t\t\tcase 'IINZ':\n\t\t\tcase 'IREF': // possibly a VX for reused texture nodes\n\t\t\t\tif ( length === 4 ) this.IFF.currentNode[ blockID ] = this.IFF.reader.getInt32();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'OTAG':\n\t\t\t\tthis.IFF.parseObjectTag();\n\t\t\t\tbreak;\n\n\t\t\tcase 'LAYR':\n\t\t\t\tthis.IFF.parseLayer( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PNTS':\n\t\t\t\tthis.IFF.parsePoints( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAP':\n\t\t\t\tthis.IFF.parseVertexMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'POLS':\n\t\t\t\tthis.IFF.parsePolygonList( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TAGS':\n\t\t\t\tthis.IFF.parseTagStrings( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PTAG':\n\t\t\t\tthis.IFF.parsePolygonTagMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAD':\n\t\t\t\tthis.IFF.parseVertexMapping( length, true );\n\t\t\t\tbreak;\n\n\t\t\t// Misc CHUNKS\n\t\t\tcase 'DESC': // Description Line\n\t\t\t\tthis.IFF.currentForm.description = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'TEXT':\n\t\t\tcase 'CMNT':\n\t\t\tcase 'NCOM':\n\t\t\t\tthis.IFF.currentForm.comment = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Envelope Form\n\t\t\tcase 'NAME':\n\t\t\t\tthis.IFF.currentForm.channelName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Image Map Layer\n\t\t\tcase 'WRAP':\n\t\t\t\tthis.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAG':\n\t\t\t\tconst index = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tthis.IFF.currentForm.imageIndex = index;\n\t\t\t\tbreak;\n\n\t\t\t// Texture Mapping Form\n\t\t\tcase 'OREF':\n\t\t\t\tthis.IFF.currentForm.referenceObject = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROID':\n\t\t\t\tthis.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\t// Surface Blocks\n\t\t\tcase 'SSHN':\n\t\t\t\tthis.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'AOVN':\n\t\t\t\tthis.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks\n\t\t\tcase 'NSTA':\n\t\t\t\tthis.IFF.currentForm.disabled = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NRNM':\n\t\t\t\tthis.IFF.currentForm.realName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NNME':\n\t\t\t\tthis.IFF.currentForm.refName = this.IFF.reader.getString();\n\t\t\t\tthis.IFF.currentSurface.nodes[ this.IFF.currentForm.refName ] = this.IFF.currentForm;\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks : connections\n\t\t\tcase 'INME':\n\t\t\t\tif ( ! this.IFF.currentForm.nodeName ) this.IFF.currentForm.nodeName = [];\n\t\t\t\tthis.IFF.currentForm.nodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINN':\n\t\t\t\tif ( ! this.IFF.currentForm.inputNodeName ) this.IFF.currentForm.inputNodeName = [];\n\t\t\t\tthis.IFF.currentForm.inputNodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputName ) this.IFF.currentForm.inputName = [];\n\t\t\t\tthis.IFF.currentForm.inputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IONM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputOutputName ) this.IFF.currentForm.inputOutputName = [];\n\t\t\t\tthis.IFF.currentForm.inputOutputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'FNAM':\n\t\t\t\tthis.IFF.currentForm.fileName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'CHAN': // NOTE: ENVL Forms may also have CHAN chunk, however ENVL is currently ignored\n\t\t\t\tif ( length === 4 ) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\t// LWO2 Spec chunks: these are needed since the SURF FORMs are often in LWO2 format\n\t\t\tcase 'SMAN':\n\t\t\t\tconst maxSmoothingAngle = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.currentSurface.attributes.smooth = ( maxSmoothingAngle < 0 ) ? false : true;\n\t\t\t\tbreak;\n\n\t\t\t// LWO2: Basic Surface Parameters\n\t\t\tcase 'COLR':\n\t\t\t\tthis.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array( 3 ) };\n\t\t\t\tthis.IFF.reader.skip( 2 ); // VX: envelope\n\t\t\t\tbreak;\n\n\t\t\tcase 'LUMI':\n\t\t\t\tthis.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SPEC':\n\t\t\t\tthis.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'DIFF':\n\t\t\t\tthis.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'REFL':\n\t\t\t\tthis.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'GLOS':\n\t\t\t\tthis.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TRAN':\n\t\t\t\tthis.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'BUMP':\n\t\t\t\tthis.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SIDE':\n\t\t\t\tthis.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIND':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAP':\n\t\t\t\tthis.IFF.currentSurface.attributes.imageMapIndex = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUVI': // uv channel name\n\t\t\t\tthis.IFF.currentNode.UVChannel = this.IFF.reader.getString( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUTL': // widthWrappingMode: 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n\t\t\t\tthis.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\t\t\tcase 'IVTL': // heightWrappingMode\n\t\t\t\tthis.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.IFF.parseUnknownCHUNK( blockID, length );\n\n\t\t}\n\n\t\tif ( blockID != 'FORM' ) {\n\n\t\t\tthis.IFF.debugger.node = 1;\n\t\t\tthis.IFF.debugger.nodeID = blockID;\n\t\t\tthis.IFF.debugger.log();\n\n\t\t}\n\n\t\tif ( this.IFF.reader.offset >= this.IFF.currentFormEnd ) {\n\n\t\t\tthis.IFF.currentForm = this.IFF.parentForm;\n\n\t\t}\n\n\t}\n\n}\n\nexport { LWO3Parser };\n", "/**\n * === IFFParser ===\n * - Parses data from the IFF buffer.\n * - LWO3 files are in IFF format and can contain the following data types, referred to by shorthand codes\n *\n * ATOMIC DATA TYPES\n * ID Tag - 4x 7 bit uppercase ASCII chars: ID4\n * signed integer, 1, 2, or 4 byte length: I1, I2, I4\n * unsigned integer, 1, 2, or 4 byte length: U1, U2, U4\n * float, 4 byte length: F4\n * string, series of ASCII chars followed by null byte (If the length of the string including the null terminating byte is odd, an extra null is added so that the data that follows will begin on an even byte boundary): S0\n *\n * COMPOUND DATA TYPES\n * Variable-length Index (index into an array or collection): U2 or U4 : VX\n * Color (RGB): F4 + F4 + F4: COL12\n * Coordinate (x, y, z): F4 + F4 + F4: VEC12\n * Percentage F4 data type from 0->1 with 1 = 100%: FP4\n * Angle in radian F4: ANG4\n * Filename (string) S0: FNAM0\n * XValue F4 + index (VX) + optional envelope( ENVL ): XVAL\n * XValue vector VEC12 + index (VX) + optional envelope( ENVL ): XVAL3\n *\n * The IFF file is arranged in chunks:\n * CHUNK = ID4 + length (U4) + length X bytes of data + optional 0 pad byte\n * optional 0 pad byte is there to ensure chunk ends on even boundary, not counted in size\n *\n * COMPOUND DATA TYPES\n * - Chunks are combined in Forms (collections of chunks)\n * - FORM = string 'FORM' (ID4) + length (U4) + type (ID4) + optional ( CHUNK | FORM )\n * - CHUNKS and FORMS are collectively referred to as blocks\n * - The entire file is contained in one top level FORM\n *\n **/\n\nimport { LWO2Parser } from './LWO2Parser.js';\nimport { LWO3Parser } from './LWO3Parser.js';\n\nclass IFFParser {\n\n\tconstructor() {\n\n\t\tthis.debugger = new Debugger();\n\t\t// this.debugger.enable(); // un-comment to log IFF hierarchy.\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tthis.reader = new DataViewReader( buffer );\n\n\t\tthis.tree = {\n\t\t\tmaterials: {},\n\t\t\tlayers: [],\n\t\t\ttags: [],\n\t\t\ttextures: [],\n\t\t};\n\n\t\t// start out at the top level to add any data before first layer is encountered\n\t\tthis.currentLayer = this.tree;\n\t\tthis.currentForm = this.tree;\n\n\t\tthis.parseTopForm();\n\n\t\tif ( this.tree.format === undefined ) return;\n\n\t\tif ( this.tree.format === 'LWO2' ) {\n\n\t\t\tthis.parser = new LWO2Parser( this );\n\t\t\twhile ( ! this.reader.endOfFile() ) this.parser.parseBlock();\n\n\t\t} else if ( this.tree.format === 'LWO3' ) {\n\n\t\t\tthis.parser = new LWO3Parser( this );\n\t\t\twhile ( ! this.reader.endOfFile() ) this.parser.parseBlock();\n\n\t\t}\n\n\t\tthis.debugger.offset = this.reader.offset;\n\t\tthis.debugger.closeForms();\n\n\t\treturn this.tree;\n\n\t}\n\n\tparseTopForm() {\n\n\t\tthis.debugger.offset = this.reader.offset;\n\n\t\tvar topForm = this.reader.getIDTag();\n\n\t\tif ( topForm !== 'FORM' ) {\n\n\t\t\tconsole.warn( 'LWOLoader: Top-level FORM missing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar length = this.reader.getUint32();\n\n\t\tthis.debugger.dataOffset = this.reader.offset;\n\t\tthis.debugger.length = length;\n\n\t\tvar type = this.reader.getIDTag();\n\n\t\tif ( type === 'LWO2' ) {\n\n\t\t\tthis.tree.format = type;\n\n\t\t} else if ( type === 'LWO3' ) {\n\n\t\t\tthis.tree.format = type;\n\n\t\t}\n\n\t\tthis.debugger.node = 0;\n\t\tthis.debugger.nodeID = type;\n\t\tthis.debugger.log();\n\n\t\treturn;\n\n\t}\n\n\n\t///\n\t// FORM PARSING METHODS\n\t///\n\n\t// Forms are organisational and can contain any number of sub chunks and sub forms\n\t// FORM ::= 'FORM'[ID4], length[U4], type[ID4], ( chunk[CHUNK] | form[FORM] ) * }\n\tparseForm( length ) {\n\n\t\tvar type = this.reader.getIDTag();\n\n\t\tswitch ( type ) {\n\n\t\t\t// SKIPPED FORMS\n\t\t\t// if skipForm( length ) is called, the entire form and any sub forms and chunks are skipped\n\n\t\t\tcase 'ISEQ': // Image sequence\n\t\t\tcase 'ANIM': // plug in animation\n\t\t\tcase 'STCC': // Color-cycling Still\n\t\t\tcase 'VPVL':\n\t\t\tcase 'VPRM':\n\t\t\tcase 'NROT':\n\t\t\tcase 'WRPW': // image wrap w ( for cylindrical and spherical projections)\n\t\t\tcase 'WRPH': // image wrap h\n\t\t\tcase 'FUNC':\n\t\t\tcase 'FALL':\n\t\t\tcase 'OPAC':\n\t\t\tcase 'GRAD': // gradient texture\n\t\t\tcase 'ENVS':\n\t\t\tcase 'VMOP':\n\t\t\tcase 'VMBG':\n\n\t\t\t// Car Material FORMS\n\t\t\tcase 'OMAX':\n\t\t\tcase 'STEX':\n\t\t\tcase 'CKBG':\n\t\t\tcase 'CKEY':\n\t\t\tcase 'VMLA':\n\t\t\tcase 'VMLB':\n\t\t\t\tthis.debugger.skipped = true;\n\t\t\t\tthis.skipForm( length ); // not currently supported\n\t\t\t\tbreak;\n\n\t\t\t// if break; is called directly, the position in the lwoTree is not created\n\t\t\t// any sub chunks and forms are added to the parent form instead\n\t\t\tcase 'META':\n\t\t\tcase 'NNDS':\n\t\t\tcase 'NODS':\n\t\t\tcase 'NDTA':\n\t\t\tcase 'ADAT':\n\t\t\tcase 'AOVS':\n\t\t\tcase 'BLOK':\n\n\t\t\t// used by texture nodes\n\t\t\tcase 'IBGC': // imageBackgroundColor\n\t\t\tcase 'IOPC': // imageOpacity\n\t\t\tcase 'IIMG': // hold reference to image path\n\t\t\tcase 'TXTR':\n\t\t\t\t// this.setupForm( type, length );\n\t\t\t\tthis.debugger.length = 4;\n\t\t\t\tthis.debugger.skipped = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 'IFAL': // imageFallof\n\t\t\tcase 'ISCL': // imageScale\n\t\t\tcase 'IPOS': // imagePosition\n\t\t\tcase 'IROT': // imageRotation\n\t\t\tcase 'IBMP':\n\t\t\tcase 'IUTD':\n\t\t\tcase 'IVTD':\n\t\t\t\tthis.parseTextureNodeAttribute( type );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ENVL':\n\t\t\t\tthis.parseEnvelope( length );\n\t\t\t\tbreak;\n\n\t\t\t\t// CLIP FORM AND SUB FORMS\n\n\t\t\tcase 'CLIP':\n\t\t\t\tif ( this.tree.format === 'LWO2' ) {\n\n\t\t\t\t\tthis.parseForm( length );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.parseClip( length );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'STIL':\n\t\t\t\tthis.parseImage();\n\t\t\t\tbreak;\n\n\t\t\tcase 'XREF': // clone of another STIL\n\t\t\t\tthis.reader.skip( 8 ); // unknown\n\t\t\t\tthis.currentForm.referenceTexture = {\n\t\t\t\t\tindex: this.reader.getUint32(),\n\t\t\t\t\trefName: this.reader.getString() // internal unique ref\n\t\t\t\t};\n\t\t\t\tbreak;\n\n\t\t\t\t// Not in spec, used by texture nodes\n\n\t\t\tcase 'IMST':\n\t\t\t\tthis.parseImageStateForm( length );\n\t\t\t\tbreak;\n\n\t\t\t\t// SURF FORM AND SUB FORMS\n\n\t\t\tcase 'SURF':\n\t\t\t\tthis.parseSurfaceForm( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VALU': // Not in spec\n\t\t\t\tthis.parseValueForm( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NTAG':\n\t\t\t\tthis.parseSubNode( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ATTR': // BSDF Node Attributes\n\t\t\tcase 'SATR': // Standard Node Attributes\n\t\t\t\tthis.setupForm( 'attributes', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NCON':\n\t\t\t\tthis.parseConnections( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SSHA':\n\t\t\t\tthis.parentForm = this.currentForm;\n\t\t\t\tthis.currentForm = this.currentSurface;\n\t\t\t\tthis.setupForm( 'surfaceShader', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SSHD':\n\t\t\t\tthis.setupForm( 'surfaceShaderData', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ENTR': // Not in spec\n\t\t\t\tthis.parseEntryForm( length );\n\t\t\t\tbreak;\n\n\t\t\t\t// Image Map Layer\n\n\t\t\tcase 'IMAP':\n\t\t\t\tthis.parseImageMap( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TAMP':\n\t\t\t\tthis.parseXVAL( 'amplitude', length );\n\t\t\t\tbreak;\n\n\t\t\t\t//Texture Mapping Form\n\n\t\t\tcase 'TMAP':\n\t\t\t\tthis.setupForm( 'textureMap', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'CNTR':\n\t\t\t\tthis.parseXVAL3( 'center', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SIZE':\n\t\t\t\tthis.parseXVAL3( 'scale', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROTA':\n\t\t\t\tthis.parseXVAL3( 'rotation', length );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.parseUnknownForm( type, length );\n\n\t\t}\n\n\t\tthis.debugger.node = 0;\n\t\tthis.debugger.nodeID = type;\n\t\tthis.debugger.log();\n\n\t}\n\n\tsetupForm( type, length ) {\n\n\t\tif ( ! this.currentForm ) this.currentForm = this.currentNode;\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tif ( ! this.currentForm[ type ] ) {\n\n\t\t\tthis.currentForm[ type ] = {};\n\t\t\tthis.currentForm = this.currentForm[ type ];\n\n\n\t\t} else {\n\n\t\t\t// should never see this unless there's a bug in the reader\n\t\t\tconsole.warn( 'LWOLoader: form already exists on parent: ', type, this.currentForm );\n\n\t\t\tthis.currentForm = this.currentForm[ type ];\n\n\t\t}\n\n\n\t}\n\n\tskipForm( length ) {\n\n\t\tthis.reader.skip( length - 4 );\n\n\t}\n\n\tparseUnknownForm( type, length ) {\n\n\t\tconsole.warn( 'LWOLoader: unknown FORM encountered: ' + type, length );\n\n\t\tprintBuffer( this.reader.dv.buffer, this.reader.offset, length - 4 );\n\t\tthis.reader.skip( length - 4 );\n\n\t}\n\n\tparseSurfaceForm( length ) {\n\n\t\tthis.reader.skip( 8 ); // unknown Uint32 x2\n\n\t\tvar name = this.reader.getString();\n\n\t\tvar surface = {\n\t\t\tattributes: {}, // LWO2 style non-node attributes will go here\n\t\t\tconnections: {},\n\t\t\tname: name,\n\t\t\tinputName: name,\n\t\t\tnodes: {},\n\t\t\tsource: this.reader.getString(),\n\t\t};\n\n\t\tthis.tree.materials[ name ] = surface;\n\t\tthis.currentSurface = surface;\n\n\t\tthis.parentForm = this.tree.materials;\n\t\tthis.currentForm = surface;\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\n\t}\n\n\tparseSurfaceLwo2( length ) {\n\n\t\tvar name = this.reader.getString();\n\n\t\tvar surface = {\n\t\t\tattributes: {}, // LWO2 style non-node attributes will go here\n\t\t\tconnections: {},\n\t\t\tname: name,\n\t\t\tnodes: {},\n\t\t\tsource: this.reader.getString(),\n\t\t};\n\n\t\tthis.tree.materials[ name ] = surface;\n\t\tthis.currentSurface = surface;\n\n\t\tthis.parentForm = this.tree.materials;\n\t\tthis.currentForm = surface;\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\n\t}\n\n\tparseSubNode( length ) {\n\n\t\t// parse the NRNM CHUNK of the subnode FORM to get\n\t\t// a meaningful name for the subNode\n\t\t// some subnodes can be renamed, but Input and Surface cannot\n\n\t\tthis.reader.skip( 8 ); // NRNM + length\n\t\tvar name = this.reader.getString();\n\n\t\tvar node = {\n\t\t\tname: name\n\t\t};\n\t\tthis.currentForm = node;\n\t\tthis.currentNode = node;\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\n\n\t}\n\n\t// collect attributes from all nodes at the top level of a surface\n\tparseConnections( length ) {\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tthis.currentForm = this.currentSurface.connections;\n\n\t}\n\n\t// surface node attribute data, e.g. specular, roughness etc\n\tparseEntryForm( length ) {\n\n\t\tthis.reader.skip( 8 ); // NAME + length\n\t\tvar name = this.reader.getString();\n\t\tthis.currentForm = this.currentNode.attributes;\n\n\t\tthis.setupForm( name, length );\n\n\t}\n\n\t// parse values from material - doesn't match up to other LWO3 data types\n\t// sub form of entry form\n\tparseValueForm() {\n\n\t\tthis.reader.skip( 8 ); // unknown + length\n\n\t\tvar valueType = this.reader.getString();\n\n\t\tif ( valueType === 'double' ) {\n\n\t\t\tthis.currentForm.value = this.reader.getUint64();\n\n\t\t} else if ( valueType === 'int' ) {\n\n\t\t\tthis.currentForm.value = this.reader.getUint32();\n\n\t\t} else if ( valueType === 'vparam' ) {\n\n\t\t\tthis.reader.skip( 24 );\n\t\t\tthis.currentForm.value = this.reader.getFloat64();\n\n\t\t} else if ( valueType === 'vparam3' ) {\n\n\t\t\tthis.reader.skip( 24 );\n\t\t\tthis.currentForm.value = this.reader.getFloat64Array( 3 );\n\n\t\t}\n\n\t}\n\n\t// holds various data about texture node image state\n\t// Data other thanmipMapLevel unknown\n\tparseImageStateForm() {\n\n\t\tthis.reader.skip( 8 ); // unknown\n\n\t\tthis.currentForm.mipMapLevel = this.reader.getFloat32();\n\n\t}\n\n\t// LWO2 style image data node OR LWO3 textures defined at top level in editor (not as SURF node)\n\tparseImageMap( length ) {\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tif ( ! this.currentForm.maps ) this.currentForm.maps = [];\n\n\t\tvar map = {};\n\t\tthis.currentForm.maps.push( map );\n\t\tthis.currentForm = map;\n\n\t\tthis.reader.skip( 10 ); // unknown, could be an issue if it contains a VX\n\n\t}\n\n\tparseTextureNodeAttribute( type ) {\n\n\t\tthis.reader.skip( 28 ); // FORM + length + VPRM + unknown + Uint32 x2 + float32\n\n\t\tthis.reader.skip( 20 ); // FORM + length + VPVL + float32 + Uint32\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'ISCL':\n\t\t\t\tthis.currentNode.scale = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\t\t\tcase 'IPOS':\n\t\t\t\tthis.currentNode.position = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\t\t\tcase 'IROT':\n\t\t\t\tthis.currentNode.rotation = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\t\t\tcase 'IFAL':\n\t\t\t\tthis.currentNode.falloff = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IBMP':\n\t\t\t\tthis.currentNode.amplitude = this.reader.getFloat32();\n\t\t\t\tbreak;\n\t\t\tcase 'IUTD':\n\t\t\t\tthis.currentNode.uTiles = this.reader.getFloat32();\n\t\t\t\tbreak;\n\t\t\tcase 'IVTD':\n\t\t\t\tthis.currentNode.vTiles = this.reader.getFloat32();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tthis.reader.skip( 2 ); // unknown\n\n\n\t}\n\n\t// ENVL forms are currently ignored\n\tparseEnvelope( length ) {\n\n\t\tthis.reader.skip( length - 4 ); // skipping entirely for now\n\n\t}\n\n\t///\n\t// CHUNK PARSING METHODS\n\t///\n\n\t// clips can either be defined inside a surface node, or at the top\n\t// level and they have a different format in each case\n\tparseClip( length ) {\n\n\t\tvar tag = this.reader.getIDTag();\n\n\t\t// inside surface node\n\t\tif ( tag === 'FORM' ) {\n\n\t\t\tthis.reader.skip( 16 );\n\n\t\t\tthis.currentNode.fileName = this.reader.getString();\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// otherwise top level\n\t\tthis.reader.setOffset( this.reader.offset - 4 );\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tthis.reader.skip( 8 ); // unknown\n\n\t\tvar texture = {\n\t\t\tindex: this.reader.getUint32()\n\t\t};\n\t\tthis.tree.textures.push( texture );\n\t\tthis.currentForm = texture;\n\n\t}\n\n\tparseClipLwo2( length ) {\n\n\t\tvar texture = {\n\t\t\tindex: this.reader.getUint32(),\n\t\t\tfileName: ''\n\t\t};\n\n\t\t// seach STIL block\n\t\twhile ( true ) {\n\n\t\t\tvar tag = this.reader.getIDTag();\n\t\t\tvar n_length = this.reader.getUint16();\n\t\t\tif ( tag === 'STIL' ) {\n\n\t\t\t\ttexture.fileName = this.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( n_length >= length ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.tree.textures.push( texture );\n\t\tthis.currentForm = texture;\n\n\t}\n\n\tparseImage() {\n\n\t\tthis.reader.skip( 8 ); // unknown\n\t\tthis.currentForm.fileName = this.reader.getString();\n\n\t}\n\n\tparseXVAL( type, length ) {\n\n\t\tvar endOffset = this.reader.offset + length - 4;\n\t\tthis.reader.skip( 8 );\n\n\t\tthis.currentForm[ type ] = this.reader.getFloat32();\n\n\t\tthis.reader.setOffset( endOffset ); // set end offset directly to skip optional envelope\n\n\t}\n\n\tparseXVAL3( type, length ) {\n\n\t\tvar endOffset = this.reader.offset + length - 4;\n\t\tthis.reader.skip( 8 );\n\n\t\tthis.currentForm[ type ] = {\n\t\t\tx: this.reader.getFloat32(),\n\t\t\ty: this.reader.getFloat32(),\n\t\t\tz: this.reader.getFloat32(),\n\t\t};\n\n\t\tthis.reader.setOffset( endOffset );\n\n\t}\n\n\t// Tags associated with an object\n\t// OTAG { type[ID4], tag-string[S0] }\n\tparseObjectTag() {\n\n\t\tif ( ! this.tree.objectTags ) this.tree.objectTags = {};\n\n\t\tthis.tree.objectTags[ this.reader.getIDTag() ] = {\n\t\t\ttagString: this.reader.getString()\n\t\t};\n\n\t}\n\n\t// Signals the start of a new layer. All the data chunks which follow will be included in this layer until another layer chunk is encountered.\n\t// LAYR: number[U2], flags[U2], pivot[VEC12], name[S0], parent[U2]\n\tparseLayer( length ) {\n\n\t\tvar number = this.reader.getUint16();\n\t\tvar flags = this.reader.getUint16(); // If the least significant bit of flags is set, the layer is hidden.\n\t\tvar pivot = this.reader.getFloat32Array( 3 ); // Note: this seems to be superflous, as the geometry is translated when pivot is present\n\t\tvar layer = {\n\t\t\tnumber: number,\n\t\t\tflags: flags, // If the least significant bit of flags is set, the layer is hidden.\n\t\t\tpivot: [ - pivot[ 0 ], pivot[ 1 ], pivot[ 2 ] ], // Note: this seems to be superflous, as the geometry is translated when pivot is present\n\t\t\tname: this.reader.getString(),\n\t\t};\n\n\t\tthis.tree.layers.push( layer );\n\t\tthis.currentLayer = layer;\n\n\t\tvar parsedLength = 16 + stringOffset( this.currentLayer.name ); // index ( 2 ) + flags( 2 ) + pivot( 12 ) + stringlength\n\n\t\t// if we have not reached then end of the layer block, there must be a parent defined\n\t\tthis.currentLayer.parent = ( parsedLength < length ) ? this.reader.getUint16() : - 1; // omitted or -1 for no parent\n\n\t}\n\n\t// VEC12 * ( F4 + F4 + F4 ) array of x,y,z vectors\n\t// Converting from left to right handed coordinate system:\n\t// x -> -x and switch material FrontSide -> BackSide\n\tparsePoints( length ) {\n\n\t\tthis.currentPoints = [];\n\t\tfor ( var i = 0; i < length / 4; i += 3 ) {\n\n\t\t\t// x -> -x to match three.js right handed coords\n\t\t\tthis.currentPoints.push( - this.reader.getFloat32(), this.reader.getFloat32(), this.reader.getFloat32() );\n\n\t\t}\n\n\t}\n\n\t// parse VMAP or VMAD\n\t// Associates a set of floating-point vectors with a set of points.\n\t// VMAP: { type[ID4], dimension[U2], name[S0], ( vert[VX], value[F4] # dimension ) * }\n\n\t// VMAD Associates a set of floating-point vectors with the vertices of specific polygons.\n\t// Similar to VMAP UVs, but associates with polygon vertices rather than points\n\t// to solve to problem of UV seams: VMAD chunks are paired with VMAPs of the same name,\n\t// if they exist. The vector values in the VMAD will then replace those in the\n\t// corresponding VMAP, but only for calculations involving the specified polygons.\n\t// VMAD { type[ID4], dimension[U2], name[S0], ( vert[VX], poly[VX], value[F4] # dimension ) * }\n\tparseVertexMapping( length, discontinuous ) {\n\n\t\tvar finalOffset = this.reader.offset + length;\n\n\t\tvar channelName = this.reader.getString();\n\n\t\tif ( this.reader.offset === finalOffset ) {\n\n\t\t\t// then we are in a texture node and the VMAP chunk is just a reference to a UV channel name\n\t\t\tthis.currentForm.UVChannel = channelName;\n\t\t\treturn;\n\n\t\t}\n\n\t\t// otherwise reset to initial length and parse normal VMAP CHUNK\n\t\tthis.reader.setOffset( this.reader.offset - stringOffset( channelName ) );\n\n\t\tvar type = this.reader.getIDTag();\n\n\t\tthis.reader.getUint16(); // dimension\n\t\tvar name = this.reader.getString();\n\n\t\tvar remainingLength = length - 6 - stringOffset( name );\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'TXUV':\n\t\t\t\tthis.parseUVMapping( name, finalOffset, discontinuous );\n\t\t\t\tbreak;\n\t\t\tcase 'MORF':\n\t\t\tcase 'SPOT':\n\t\t\t\tthis.parseMorphTargets( name, finalOffset, type ); // can't be discontinuous\n\t\t\t\tbreak;\n\t\t\t// unsupported VMAPs\n\t\t\tcase 'APSL':\n\t\t\tcase 'NORM':\n\t\t\tcase 'WGHT':\n\t\t\tcase 'MNVW':\n\t\t\tcase 'PICK':\n\t\t\tcase 'RGB ':\n\t\t\tcase 'RGBA':\n\t\t\t\tthis.reader.skip( remainingLength );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'LWOLoader: unknown vertex map type: ' + type );\n\t\t\t\tthis.reader.skip( remainingLength );\n\n\t\t}\n\n\t}\n\n\tparseUVMapping( name, finalOffset, discontinuous ) {\n\n\t\tvar uvIndices = [];\n\t\tvar polyIndices = [];\n\t\tvar uvs = [];\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tuvIndices.push( this.reader.getVariableLengthIndex() );\n\n\t\t\tif ( discontinuous ) polyIndices.push( this.reader.getVariableLengthIndex() );\n\n\t\t\tuvs.push( this.reader.getFloat32(), this.reader.getFloat32() );\n\n\t\t}\n\n\t\tif ( discontinuous ) {\n\n\t\t\tif ( ! this.currentLayer.discontinuousUVs ) this.currentLayer.discontinuousUVs = {};\n\n\t\t\tthis.currentLayer.discontinuousUVs[ name ] = {\n\t\t\t\tuvIndices: uvIndices,\n\t\t\t\tpolyIndices: polyIndices,\n\t\t\t\tuvs: uvs,\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tif ( ! this.currentLayer.uvs ) this.currentLayer.uvs = {};\n\n\t\t\tthis.currentLayer.uvs[ name ] = {\n\t\t\t\tuvIndices: uvIndices,\n\t\t\t\tuvs: uvs,\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tparseMorphTargets( name, finalOffset, type ) {\n\n\t\tvar indices = [];\n\t\tvar points = [];\n\n\t\ttype = ( type === 'MORF' ) ? 'relative' : 'absolute';\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tindices.push( this.reader.getVariableLengthIndex() );\n\t\t\t// z -> -z to match three.js right handed coords\n\t\t\tpoints.push( this.reader.getFloat32(), this.reader.getFloat32(), - this.reader.getFloat32() );\n\n\t\t}\n\n\t\tif ( ! this.currentLayer.morphTargets ) this.currentLayer.morphTargets = {};\n\n\t\tthis.currentLayer.morphTargets[ name ] = {\n\t\t\tindices: indices,\n\t\t\tpoints: points,\n\t\t\ttype: type,\n\t\t};\n\n\t}\n\n\t// A list of polygons for the current layer.\n\t// POLS { type[ID4], ( numvert+flags[U2], vert[VX] # numvert ) * }\n\tparsePolygonList( length ) {\n\n\t\tvar finalOffset = this.reader.offset + length;\n\t\tvar type = this.reader.getIDTag();\n\n\t\tvar indices = [];\n\n\t\t// hold a list of polygon sizes, to be split up later\n\t\tvar polygonDimensions = [];\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tvar numverts = this.reader.getUint16();\n\n\t\t\t//var flags = numverts & 64512; // 6 high order bits are flags - ignoring for now\n\t\t\tnumverts = numverts & 1023; // remaining ten low order bits are vertex num\n\t\t\tpolygonDimensions.push( numverts );\n\n\t\t\tfor ( var j = 0; j < numverts; j ++ ) indices.push( this.reader.getVariableLengthIndex() );\n\n\t\t}\n\n\t\tvar geometryData = {\n\t\t\ttype: type,\n\t\t\tvertexIndices: indices,\n\t\t\tpolygonDimensions: polygonDimensions,\n\t\t\tpoints: this.currentPoints\n\t\t};\n\n\t\t// Note: assuming that all polys will be lines or points if the first is\n\t\tif ( polygonDimensions[ 0 ] === 1 ) geometryData.type = 'points';\n\t\telse if ( polygonDimensions[ 0 ] === 2 ) geometryData.type = 'lines';\n\n\t\tthis.currentLayer.geometry = geometryData;\n\n\t}\n\n\t// Lists the tag strings that can be associated with polygons by the PTAG chunk.\n\t// TAGS { tag-string[S0] * }\n\tparseTagStrings( length ) {\n\n\t\tthis.tree.tags = this.reader.getStringArray( length );\n\n\t}\n\n\t// Associates tags of a given type with polygons in the most recent POLS chunk.\n\t// PTAG { type[ID4], ( poly[VX], tag[U2] ) * }\n\tparsePolygonTagMapping( length ) {\n\n\t\tvar finalOffset = this.reader.offset + length;\n\t\tvar type = this.reader.getIDTag();\n\t\tif ( type === 'SURF' ) this.parseMaterialIndices( finalOffset );\n\t\telse { //PART, SMGP, COLR not supported\n\n\t\t\tthis.reader.skip( length - 4 );\n\n\t\t}\n\n\t}\n\n\tparseMaterialIndices( finalOffset ) {\n\n\t\t// array holds polygon index followed by material index\n\t\tthis.currentLayer.geometry.materialIndices = [];\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tvar polygonIndex = this.reader.getVariableLengthIndex();\n\t\t\tvar materialIndex = this.reader.getUint16();\n\n\t\t\tthis.currentLayer.geometry.materialIndices.push( polygonIndex, materialIndex );\n\n\t\t}\n\n\t}\n\n\tparseUnknownCHUNK( blockID, length ) {\n\n\t\tconsole.warn( 'LWOLoader: unknown chunk type: ' + blockID + ' length: ' + length );\n\n\t\t// print the chunk plus some bytes padding either side\n\t\t// printBuffer( this.reader.dv.buffer, this.reader.offset - 20, length + 40 );\n\n\t\tvar data = this.reader.getString( length );\n\n\t\tthis.currentForm[ blockID ] = data;\n\n\t}\n\n}\n\n\nclass DataViewReader {\n\n\tconstructor( buffer ) {\n\n\t\tthis.dv = new DataView( buffer );\n\t\tthis.offset = 0;\n\t\tthis._textDecoder = new TextDecoder();\n\t\tthis._bytes = new Uint8Array( buffer );\n\n\t}\n\n\tsize() {\n\n\t\treturn this.dv.buffer.byteLength;\n\n\t}\n\n\tsetOffset( offset ) {\n\n\t\tif ( offset > 0 && offset < this.dv.buffer.byteLength ) {\n\n\t\t\tthis.offset = offset;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'LWOLoader: invalid buffer offset' );\n\n\t\t}\n\n\t}\n\n\tendOfFile() {\n\n\t\tif ( this.offset >= this.size() ) return true;\n\t\treturn false;\n\n\t}\n\n\tskip( length ) {\n\n\t\tthis.offset += length;\n\n\t}\n\n\tgetUint8() {\n\n\t\tvar value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t}\n\n\tgetUint16() {\n\n\t\tvar value = this.dv.getUint16( this.offset );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t}\n\n\tgetInt32() {\n\n\t\tvar value = this.dv.getInt32( this.offset, false );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetUint32() {\n\n\t\tvar value = this.dv.getUint32( this.offset, false );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetUint64() {\n\n\t\tvar low, high;\n\n\t\thigh = this.getUint32();\n\t\tlow = this.getUint32();\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetFloat32() {\n\n\t\tvar value = this.dv.getFloat32( this.offset, false );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetFloat32Array( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetFloat64() {\n\n\t\tvar value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t}\n\n\tgetFloat64Array( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\t// get variable-length index data type\n\t// VX ::= index[U2] | (index + 0xFF000000)[U4]\n\t// If the index value is less than 65,280 (0xFF00),then VX === U2\n\t// otherwise VX === U4 with bits 24-31 set\n\t// When reading an index, if the first byte encountered is 255 (0xFF), then\n\t// the four-byte form is being used and the first byte should be discarded or masked out.\n\tgetVariableLengthIndex() {\n\n\t\tvar firstByte = this.getUint8();\n\n\t\tif ( firstByte === 255 ) {\n\n\t\t\treturn this.getUint8() * 65536 + this.getUint8() * 256 + this.getUint8();\n\n\t\t}\n\n\t\treturn firstByte * 256 + this.getUint8();\n\n\t}\n\n\t// An ID tag is a sequence of 4 bytes containing 7-bit ASCII values\n\tgetIDTag() {\n\n\t\treturn this.getString( 4 );\n\n\t}\n\n\tgetString( size ) {\n\n\t\tif ( size === 0 ) return;\n\n\t\tconst start = this.offset;\n\n\t\tlet result;\n\t\tlet length;\n\n\t\tif ( size ) {\n\n\t\t\tlength = size;\n\t\t\tresult = this._textDecoder.decode( new Uint8Array( this.dv.buffer, start, size ) );\n\n\t\t} else {\n\n\t\t\t// use 1:1 mapping of buffer to avoid redundant new array creation.\n\t\t\tlength = this._bytes.indexOf( 0, start ) - start;\n\n\t\t\tresult = this._textDecoder.decode( new Uint8Array( this.dv.buffer, start, length ) );\n\n\t\t\t// account for null byte in length\n\t\t\tlength ++;\n\n\t\t\t// if string with terminating nullbyte is uneven, extra nullbyte is added, skip that too\n\t\t\tlength += length % 2;\n\n\t\t}\n\n\t\tthis.skip( length );\n\n\t\treturn result;\n\n\t}\n\n\tgetStringArray( size ) {\n\n\t\tvar a = this.getString( size );\n\t\ta = a.split( '\\0' );\n\n\t\treturn a.filter( Boolean ); // return array with any empty strings removed\n\n\t}\n\n}\n\n\n// ************** DEBUGGER **************\n\nclass Debugger {\n\n\tconstructor() {\n\n\t\tthis.active = false;\n\t\tthis.depth = 0;\n\t\tthis.formList = [];\n\n\t}\n\n\tenable() {\n\n\t\tthis.active = true;\n\n\t}\n\n\tlog() {\n\n\t\tif ( ! this.active ) return;\n\n\t\tvar nodeType;\n\n\t\tswitch ( this.node ) {\n\n\t\t\tcase 0:\n\t\t\t\tnodeType = 'FORM';\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\tnodeType = 'CHK';\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\tnodeType = 'S-CHK';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconsole.log(\n\t\t\t'| '.repeat( this.depth ) +\n\t\t\tnodeType,\n\t\t\tthis.nodeID,\n\t\t\t`( ${this.offset} ) -> ( ${this.dataOffset + this.length} )`,\n\t\t\t( ( this.node == 0 ) ? ' {' : '' ),\n\t\t\t( ( this.skipped ) ? 'SKIPPED' : '' ),\n\t\t\t( ( this.node == 0 && this.skipped ) ? '}' : '' )\n\t\t);\n\n\t\tif ( this.node == 0 && ! this.skipped ) {\n\n\t\t\tthis.depth += 1;\n\t\t\tthis.formList.push( this.dataOffset + this.length );\n\n\t\t}\n\n\t\tthis.skipped = false;\n\n\t}\n\n\tcloseForms() {\n\n\t\tif ( ! this.active ) return;\n\n\t\tfor ( var i = this.formList.length - 1; i >= 0; i -- ) {\n\n\t\t\tif ( this.offset >= this.formList[ i ] ) {\n\n\t\t\t\tthis.depth -= 1;\n\t\t\t\tconsole.log( '| '.repeat( this.depth ) + '}' );\n\t\t\t\tthis.formList.splice( - 1, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction isEven( num ) {\n\n\treturn num % 2;\n\n}\n\n// calculate the length of the string in the buffer\n// this will be string.length + nullbyte + optional padbyte to make the length even\nfunction stringOffset( string ) {\n\n\treturn string.length + 1 + ( isEven( string.length + 1 ) ? 1 : 0 );\n\n}\n\n// for testing purposes, dump buffer to console\n// printBuffer( this.reader.dv.buffer, this.reader.offset, length );\nfunction printBuffer( buffer, from, to ) {\n\n\tconsole.log( new TextDecoder().decode( new Uint8Array( buffer, from, to ) ) );\n\n}\n\nexport { IFFParser };\n", "/**\n * @version 1.1.1\n *\n * @desc Load files in LWO3 and LWO2 format on Three.js\n *\n * LWO3 format specification:\n * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html\n *\n * LWO2 format specification:\n * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html\n *\n **/\n\nimport {\n\tAddOperation,\n\tBackSide,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDoubleSide,\n\tEquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMesh,\n\tMeshPhongMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tPoints,\n\tPointsMaterial,\n\tRepeatWrapping,\n\tSRGBColorSpace,\n\tTextureLoader,\n\tVector2\n} from 'three';\n\nimport { IFFParser } from './lwo/IFFParser.js';\n\nlet _lwoTree;\n\nclass LWOLoader extends Loader {\n\n\tconstructor( manager, parameters = {} ) {\n\n\t\tsuper( manager );\n\n\t\tthis.resourcePath = ( parameters.resourcePath !== undefined ) ? parameters.resourcePath : '';\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? extractParentUrl( url, 'Objects' ) : scope.path;\n\n\t\t// give the mesh a default name based on the filename\n\t\tconst modelName = url.split( path ).pop().split( '.' )[ 0 ];\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t// console.time( 'Total parsing: ' );\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer, path, modelName ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t\t// console.timeEnd( 'Total parsing: ' );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( iffBuffer, path, modelName ) {\n\n\t\t_lwoTree = new IFFParser().parse( iffBuffer );\n\n\t\t// console.log( 'lwoTree', lwoTree );\n\n\t\tconst textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\treturn new LWOTreeParser( textureLoader ).parse( modelName );\n\n\t}\n\n}\n\n// Parse the lwoTree object\nclass LWOTreeParser {\n\n\tconstructor( textureLoader ) {\n\n\t\tthis.textureLoader = textureLoader;\n\n\t}\n\n\tparse( modelName ) {\n\n\t\tthis.materials = new MaterialParser( this.textureLoader ).parse();\n\t\tthis.defaultLayerName = modelName;\n\n\t\tthis.meshes = this.parseLayers();\n\n\t\treturn {\n\t\t\tmaterials: this.materials,\n\t\t\tmeshes: this.meshes,\n\t\t};\n\n\t}\n\n\tparseLayers() {\n\n\t\t// array of all meshes for building hierarchy\n\t\tconst meshes = [];\n\n\t\t// final array containing meshes with scene graph hierarchy set up\n\t\tconst finalMeshes = [];\n\n\t\tconst geometryParser = new GeometryParser();\n\n\t\tconst scope = this;\n\t\t_lwoTree.layers.forEach( function ( layer ) {\n\n\t\t\tconst geometry = geometryParser.parse( layer.geometry, layer );\n\n\t\t\tconst mesh = scope.parseMesh( geometry, layer );\n\n\t\t\tmeshes[ layer.number ] = mesh;\n\n\t\t\tif ( layer.parent === - 1 ) finalMeshes.push( mesh );\n\t\t\telse meshes[ layer.parent ].add( mesh );\n\n\n\t\t} );\n\n\t\tthis.applyPivots( finalMeshes );\n\n\t\treturn finalMeshes;\n\n\t}\n\n\tparseMesh( geometry, layer ) {\n\n\t\tlet mesh;\n\n\t\tconst materials = this.getMaterials( geometry.userData.matNames, layer.geometry.type );\n\n\t\tif ( layer.geometry.type === 'points' ) mesh = new Points( geometry, materials );\n\t\telse if ( layer.geometry.type === 'lines' ) mesh = new LineSegments( geometry, materials );\n\t\telse mesh = new Mesh( geometry, materials );\n\n\t\tif ( layer.name ) mesh.name = layer.name;\n\t\telse mesh.name = this.defaultLayerName + '_layer_' + layer.number;\n\n\t\tmesh.userData.pivot = layer.pivot;\n\n\t\treturn mesh;\n\n\t}\n\n\t// TODO: may need to be reversed in z to convert LWO to three.js coordinates\n\tapplyPivots( meshes ) {\n\n\t\tmeshes.forEach( function ( mesh ) {\n\n\t\t\tmesh.traverse( function ( child ) {\n\n\t\t\t\tconst pivot = child.userData.pivot;\n\n\t\t\t\tchild.position.x += pivot[ 0 ];\n\t\t\t\tchild.position.y += pivot[ 1 ];\n\t\t\t\tchild.position.z += pivot[ 2 ];\n\n\t\t\t\tif ( child.parent ) {\n\n\t\t\t\t\tconst parentPivot = child.parent.userData.pivot;\n\n\t\t\t\t\tchild.position.x -= parentPivot[ 0 ];\n\t\t\t\t\tchild.position.y -= parentPivot[ 1 ];\n\t\t\t\t\tchild.position.z -= parentPivot[ 2 ];\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tgetMaterials( namesArray, type ) {\n\n\t\tconst materials = [];\n\n\t\tconst scope = this;\n\n\t\tnamesArray.forEach( function ( name, i ) {\n\n\t\t\tmaterials[ i ] = scope.getMaterialByName( name );\n\n\t\t} );\n\n\t\t// convert materials to line or point mats if required\n\t\tif ( type === 'points' || type === 'lines' ) {\n\n\t\t\tmaterials.forEach( function ( mat, i ) {\n\n\t\t\t\tconst spec = {\n\t\t\t\t\tcolor: mat.color,\n\t\t\t\t};\n\n\t\t\t\tif ( type === 'points' ) {\n\n\t\t\t\t\tspec.size = 0.1;\n\t\t\t\t\tspec.map = mat.map;\n\t\t\t\t\tmaterials[ i ] = new PointsMaterial( spec );\n\n\t\t\t\t} else if ( type === 'lines' ) {\n\n\t\t\t\t\tmaterials[ i ] = new LineBasicMaterial( spec );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// if there is only one material, return that directly instead of array\n\t\tconst filtered = materials.filter( Boolean );\n\t\tif ( filtered.length === 1 ) return filtered[ 0 ];\n\n\t\treturn materials;\n\n\t}\n\n\tgetMaterialByName( name ) {\n\n\t\treturn this.materials.filter( function ( m ) {\n\n\t\t\treturn m.name === name;\n\n\t\t} )[ 0 ];\n\n\t}\n\n}\n\nclass MaterialParser {\n\n\tconstructor( textureLoader ) {\n\n\t\tthis.textureLoader = textureLoader;\n\n\t}\n\n\tparse() {\n\n\t\tconst materials = [];\n\t\tthis.textures = {};\n\n\t\tfor ( const name in _lwoTree.materials ) {\n\n\t\t\tif ( _lwoTree.format === 'LWO3' ) {\n\n\t\t\t\tmaterials.push( this.parseMaterial( _lwoTree.materials[ name ], name, _lwoTree.textures ) );\n\n\t\t\t} else if ( _lwoTree.format === 'LWO2' ) {\n\n\t\t\t\tmaterials.push( this.parseMaterialLwo2( _lwoTree.materials[ name ], name, _lwoTree.textures ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseMaterial( materialData, name, textures ) {\n\n\t\tlet params = {\n\t\t\tname: name,\n\t\t\tside: this.getSide( materialData.attributes ),\n\t\t\tflatShading: this.getSmooth( materialData.attributes ),\n\t\t};\n\n\t\tconst connections = this.parseConnections( materialData.connections, materialData.nodes );\n\n\t\tconst maps = this.parseTextureNodes( connections.maps );\n\n\t\tthis.parseAttributeImageMaps( connections.attributes, textures, maps, materialData.maps );\n\n\t\tconst attributes = this.parseAttributes( connections.attributes, maps );\n\n\t\tthis.parseEnvMap( connections, maps, attributes );\n\n\t\tparams = Object.assign( maps, params );\n\t\tparams = Object.assign( params, attributes );\n\n\t\tconst materialType = this.getMaterialType( connections.attributes );\n\n\t\tif ( materialType !== MeshPhongMaterial ) delete params.refractionRatio; // PBR materials do not support \"refractionRatio\"\n\n\t\treturn new materialType( params );\n\n\t}\n\n\tparseMaterialLwo2( materialData, name/*, textures*/ ) {\n\n\t\tlet params = {\n\t\t\tname: name,\n\t\t\tside: this.getSide( materialData.attributes ),\n\t\t\tflatShading: this.getSmooth( materialData.attributes ),\n\t\t};\n\n\t\tconst attributes = this.parseAttributes( materialData.attributes, {} );\n\t\tparams = Object.assign( params, attributes );\n\t\treturn new MeshPhongMaterial( params );\n\n\t}\n\n\t// Note: converting from left to right handed coords by switching x -> -x in vertices, and\n\t// then switching mat FrontSide -> BackSide\n\t// NB: this means that FrontSide and BackSide have been switched!\n\tgetSide( attributes ) {\n\n\t\tif ( ! attributes.side ) return BackSide;\n\n\t\tswitch ( attributes.side ) {\n\n\t\t\tcase 0:\n\t\t\tcase 1:\n\t\t\t\treturn BackSide;\n\t\t\tcase 2: return FrontSide;\n\t\t\tcase 3: return DoubleSide;\n\n\t\t}\n\n\t}\n\n\tgetSmooth( attributes ) {\n\n\t\tif ( ! attributes.smooth ) return true;\n\t\treturn ! attributes.smooth;\n\n\t}\n\n\tparseConnections( connections, nodes ) {\n\n\t\tconst materialConnections = {\n\t\t\tmaps: {}\n\t\t};\n\n\t\tconst inputName = connections.inputName;\n\t\tconst inputNodeName = connections.inputNodeName;\n\t\tconst nodeName = connections.nodeName;\n\n\t\tconst scope = this;\n\t\tinputName.forEach( function ( name, index ) {\n\n\t\t\tif ( name === 'Material' ) {\n\n\t\t\t\tconst matNode = scope.getNodeByRefName( inputNodeName[ index ], nodes );\n\t\t\t\tmaterialConnections.attributes = matNode.attributes;\n\t\t\t\tmaterialConnections.envMap = matNode.fileName;\n\t\t\t\tmaterialConnections.name = inputNodeName[ index ];\n\n\t\t\t}\n\n\t\t} );\n\n\t\tnodeName.forEach( function ( name, index ) {\n\n\t\t\tif ( name === materialConnections.name ) {\n\n\t\t\t\tmaterialConnections.maps[ inputName[ index ] ] = scope.getNodeByRefName( inputNodeName[ index ], nodes );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn materialConnections;\n\n\t}\n\n\tgetNodeByRefName( refName, nodes ) {\n\n\t\tfor ( const name in nodes ) {\n\n\t\t\tif ( nodes[ name ].refName === refName ) return nodes[ name ];\n\n\t\t}\n\n\t}\n\n\tparseTextureNodes( textureNodes ) {\n\n\t\tconst maps = {};\n\n\t\tfor ( const name in textureNodes ) {\n\n\t\t\tconst node = textureNodes[ name ];\n\t\t\tconst path = node.fileName;\n\n\t\t\tif ( ! path ) return;\n\n\t\t\tconst texture = this.loadTexture( path );\n\n\t\t\tif ( node.widthWrappingMode !== undefined ) texture.wrapS = this.getWrappingType( node.widthWrappingMode );\n\t\t\tif ( node.heightWrappingMode !== undefined ) texture.wrapT = this.getWrappingType( node.heightWrappingMode );\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'Color':\n\t\t\t\t\tmaps.map = texture;\n\t\t\t\t\tmaps.map.colorSpace = SRGBColorSpace;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Roughness':\n\t\t\t\t\tmaps.roughnessMap = texture;\n\t\t\t\t\tmaps.roughness = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Specular':\n\t\t\t\t\tmaps.specularMap = texture;\n\t\t\t\t\tmaps.specularMap.colorSpace = SRGBColorSpace;\n\t\t\t\t\tmaps.specular = 0xffffff;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Luminous':\n\t\t\t\t\tmaps.emissiveMap = texture;\n\t\t\t\t\tmaps.emissiveMap.colorSpace = SRGBColorSpace;\n\t\t\t\t\tmaps.emissive = 0x808080;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Luminous Color':\n\t\t\t\t\tmaps.emissive = 0x808080;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Metallic':\n\t\t\t\t\tmaps.metalnessMap = texture;\n\t\t\t\t\tmaps.metalness = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Transparency':\n\t\t\t\tcase 'Alpha':\n\t\t\t\t\tmaps.alphaMap = texture;\n\t\t\t\t\tmaps.transparent = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Normal':\n\t\t\t\t\tmaps.normalMap = texture;\n\t\t\t\t\tif ( node.amplitude !== undefined ) maps.normalScale = new Vector2( node.amplitude, node.amplitude );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Bump':\n\t\t\t\t\tmaps.bumpMap = texture;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// LWO BSDF materials can have both spec and rough, but this is not valid in three\n\t\tif ( maps.roughnessMap && maps.specularMap ) delete maps.specularMap;\n\n\t\treturn maps;\n\n\t}\n\n\t// maps can also be defined on individual material attributes, parse those here\n\t// This occurs on Standard (Phong) surfaces\n\tparseAttributeImageMaps( attributes, textures, maps ) {\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tif ( attribute.maps ) {\n\n\t\t\t\tconst mapData = attribute.maps[ 0 ];\n\n\t\t\t\tconst path = this.getTexturePathByIndex( mapData.imageIndex, textures );\n\t\t\t\tif ( ! path ) return;\n\n\t\t\t\tconst texture = this.loadTexture( path );\n\n\t\t\t\tif ( mapData.wrap !== undefined ) texture.wrapS = this.getWrappingType( mapData.wrap.w );\n\t\t\t\tif ( mapData.wrap !== undefined ) texture.wrapT = this.getWrappingType( mapData.wrap.h );\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'Color':\n\t\t\t\t\t\tmaps.map = texture;\n\t\t\t\t\t\tmaps.map.colorSpace = SRGBColorSpace;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Diffuse':\n\t\t\t\t\t\tmaps.aoMap = texture;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Roughness':\n\t\t\t\t\t\tmaps.roughnessMap = texture;\n\t\t\t\t\t\tmaps.roughness = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Specular':\n\t\t\t\t\t\tmaps.specularMap = texture;\n\t\t\t\t\t\tmaps.specularMap.colorSpace = SRGBColorSpace;\n\t\t\t\t\t\tmaps.specular = 0xffffff;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Luminosity':\n\t\t\t\t\t\tmaps.emissiveMap = texture;\n\t\t\t\t\t\tmaps.emissiveMap.colorSpace = SRGBColorSpace;\n\t\t\t\t\t\tmaps.emissive = 0x808080;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Metallic':\n\t\t\t\t\t\tmaps.metalnessMap = texture;\n\t\t\t\t\t\tmaps.metalness = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Transparency':\n\t\t\t\t\tcase 'Alpha':\n\t\t\t\t\t\tmaps.alphaMap = texture;\n\t\t\t\t\t\tmaps.transparent = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Normal':\n\t\t\t\t\t\tmaps.normalMap = texture;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Bump':\n\t\t\t\t\t\tmaps.bumpMap = texture;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tparseAttributes( attributes, maps ) {\n\n\t\tconst params = {};\n\n\t\t// don't use color data if color map is present\n\t\tif ( attributes.Color && ! maps.map ) {\n\n\t\t\tparams.color = new Color().fromArray( attributes.Color.value );\n\n\t\t} else {\n\n\t\t\tparams.color = new Color();\n\n\t\t}\n\n\n\t\tif ( attributes.Transparency && attributes.Transparency.value !== 0 ) {\n\n\t\t\tparams.opacity = 1 - attributes.Transparency.value;\n\t\t\tparams.transparent = true;\n\n\t\t}\n\n\t\tif ( attributes[ 'Bump Height' ] ) params.bumpScale = attributes[ 'Bump Height' ].value * 0.1;\n\n\t\tthis.parsePhysicalAttributes( params, attributes, maps );\n\t\tthis.parseStandardAttributes( params, attributes, maps );\n\t\tthis.parsePhongAttributes( params, attributes, maps );\n\n\t\treturn params;\n\n\t}\n\n\tparsePhysicalAttributes( params, attributes/*, maps*/ ) {\n\n\t\tif ( attributes.Clearcoat && attributes.Clearcoat.value > 0 ) {\n\n\t\t\tparams.clearcoat = attributes.Clearcoat.value;\n\n\t\t\tif ( attributes[ 'Clearcoat Gloss' ] ) {\n\n\t\t\t\tparams.clearcoatRoughness = 0.5 * ( 1 - attributes[ 'Clearcoat Gloss' ].value );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tparseStandardAttributes( params, attributes, maps ) {\n\n\n\t\tif ( attributes.Luminous ) {\n\n\t\t\tparams.emissiveIntensity = attributes.Luminous.value;\n\n\t\t\tif ( attributes[ 'Luminous Color' ] && ! maps.emissive ) {\n\n\t\t\t\tparams.emissive = new Color().fromArray( attributes[ 'Luminous Color' ].value );\n\n\t\t\t} else {\n\n\t\t\t\tparams.emissive = new Color( 0x808080 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( attributes.Roughness && ! maps.roughnessMap ) params.roughness = attributes.Roughness.value;\n\t\tif ( attributes.Metallic && ! maps.metalnessMap ) params.metalness = attributes.Metallic.value;\n\n\t}\n\n\tparsePhongAttributes( params, attributes, maps ) {\n\n\t\tif ( attributes[ 'Refraction Index' ] ) params.refractionRatio = 0.98 / attributes[ 'Refraction Index' ].value;\n\n\t\tif ( attributes.Diffuse ) params.color.multiplyScalar( attributes.Diffuse.value );\n\n\t\tif ( attributes.Reflection ) {\n\n\t\t\tparams.reflectivity = attributes.Reflection.value;\n\t\t\tparams.combine = AddOperation;\n\n\t\t}\n\n\t\tif ( attributes.Luminosity ) {\n\n\t\t\tparams.emissiveIntensity = attributes.Luminosity.value;\n\n\t\t\tif ( ! maps.emissiveMap && ! maps.map ) {\n\n\t\t\t\tparams.emissive = params.color;\n\n\t\t\t} else {\n\n\t\t\t\tparams.emissive = new Color( 0x808080 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse specular if there is no roughness - we will interpret the material as 'Phong' in this case\n\t\tif ( ! attributes.Roughness && attributes.Specular && ! maps.specularMap ) {\n\n\t\t\tif ( attributes[ 'Color Highlight' ] ) {\n\n\t\t\t\tparams.specular = new Color().setScalar( attributes.Specular.value ).lerp( params.color.clone().multiplyScalar( attributes.Specular.value ), attributes[ 'Color Highlight' ].value );\n\n\t\t\t} else {\n\n\t\t\t\tparams.specular = new Color().setScalar( attributes.Specular.value );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( params.specular && attributes.Glossiness ) params.shininess = 7 + Math.pow( 2, attributes.Glossiness.value * 12 + 2 );\n\n\t}\n\n\tparseEnvMap( connections, maps, attributes ) {\n\n\t\tif ( connections.envMap ) {\n\n\t\t\tconst envMap = this.loadTexture( connections.envMap );\n\n\t\t\tif ( attributes.transparent && attributes.opacity < 0.999 ) {\n\n\t\t\t\tenvMap.mapping = EquirectangularRefractionMapping;\n\n\t\t\t\t// Reflectivity and refraction mapping don't work well together in Phong materials\n\t\t\t\tif ( attributes.reflectivity !== undefined ) {\n\n\t\t\t\t\tdelete attributes.reflectivity;\n\t\t\t\t\tdelete attributes.combine;\n\n\t\t\t\t}\n\n\t\t\t\tif ( attributes.metalness !== undefined ) {\n\n\t\t\t\t\tattributes.metalness = 1; // For most transparent materials metalness should be set to 1 if not otherwise defined. If set to 0 no refraction will be visible\n\n\t\t\t\t}\n\n\t\t\t\tattributes.opacity = 1; // transparency fades out refraction, forcing opacity to 1 ensures a closer visual match to the material in Lightwave.\n\n\t\t\t} else envMap.mapping = EquirectangularReflectionMapping;\n\n\t\t\tmaps.envMap = envMap;\n\n\t\t}\n\n\t}\n\n\t// get texture defined at top level by its index\n\tgetTexturePathByIndex( index ) {\n\n\t\tlet fileName = '';\n\n\t\tif ( ! _lwoTree.textures ) return fileName;\n\n\t\t_lwoTree.textures.forEach( function ( texture ) {\n\n\t\t\tif ( texture.index === index ) fileName = texture.fileName;\n\n\t\t} );\n\n\t\treturn fileName;\n\n\t}\n\n\tloadTexture( path ) {\n\n\t\tif ( ! path ) return null;\n\n\t\tconst texture = this.textureLoader.load(\n\t\t\tpath,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfunction () {\n\n\t\t\t\tconsole.warn( 'LWOLoader: non-standard resource hierarchy. Use \\`resourcePath\\` parameter to specify root content directory.' );\n\n\t\t\t}\n\t\t);\n\n\t\treturn texture;\n\n\t}\n\n\t// 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n\tgetWrappingType( num ) {\n\n\t\tswitch ( num ) {\n\n\t\t\tcase 0:\n\t\t\t\tconsole.warn( 'LWOLoader: \"Reset\" texture wrapping type is not supported in three.js' );\n\t\t\t\treturn ClampToEdgeWrapping;\n\t\t\tcase 1: return RepeatWrapping;\n\t\t\tcase 2: return MirroredRepeatWrapping;\n\t\t\tcase 3: return ClampToEdgeWrapping;\n\n\t\t}\n\n\t}\n\n\tgetMaterialType( nodeData ) {\n\n\t\tif ( nodeData.Clearcoat && nodeData.Clearcoat.value > 0 ) return MeshPhysicalMaterial;\n\t\tif ( nodeData.Roughness ) return MeshStandardMaterial;\n\t\treturn MeshPhongMaterial;\n\n\t}\n\n}\n\nclass GeometryParser {\n\n\tparse( geoData, layer ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( geoData.points, 3 ) );\n\n\t\tconst indices = this.splitIndices( geoData.vertexIndices, geoData.polygonDimensions );\n\t\tgeometry.setIndex( indices );\n\n\t\tthis.parseGroups( geometry, geoData );\n\n\t\tgeometry.computeVertexNormals();\n\n\t\tthis.parseUVs( geometry, layer, indices );\n\t\tthis.parseMorphTargets( geometry, layer, indices );\n\n\t\t// TODO: z may need to be reversed to account for coordinate system change\n\t\tgeometry.translate( - layer.pivot[ 0 ], - layer.pivot[ 1 ], - layer.pivot[ 2 ] );\n\n\t\t// let userData = geometry.userData;\n\t\t// geometry = geometry.toNonIndexed()\n\t\t// geometry.userData = userData;\n\n\t\treturn geometry;\n\n\t}\n\n\t// split quads into tris\n\tsplitIndices( indices, polygonDimensions ) {\n\n\t\tconst remappedIndices = [];\n\n\t\tlet i = 0;\n\t\tpolygonDimensions.forEach( function ( dim ) {\n\n\t\t\tif ( dim < 4 ) {\n\n\t\t\t\tfor ( let k = 0; k < dim; k ++ ) remappedIndices.push( indices[ i + k ] );\n\n\t\t\t} else if ( dim === 4 ) {\n\n\t\t\t\tremappedIndices.push(\n\t\t\t\t\tindices[ i ],\n\t\t\t\t\tindices[ i + 1 ],\n\t\t\t\t\tindices[ i + 2 ],\n\n\t\t\t\t\tindices[ i ],\n\t\t\t\t\tindices[ i + 2 ],\n\t\t\t\t\tindices[ i + 3 ]\n\n\t\t\t\t);\n\n\t\t\t} else if ( dim > 4 ) {\n\n\t\t\t\tfor ( let k = 1; k < dim - 1; k ++ ) {\n\n\t\t\t\t\tremappedIndices.push( indices[ i ], indices[ i + k ], indices[ i + k + 1 ] );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'LWOLoader: polygons with greater than 4 sides are not supported' );\n\n\t\t\t}\n\n\t\t\ti += dim;\n\n\t\t} );\n\n\t\treturn remappedIndices;\n\n\t}\n\n\t// NOTE: currently ignoring poly indices and assuming that they are intelligently ordered\n\tparseGroups( geometry, geoData ) {\n\n\t\tconst tags = _lwoTree.tags;\n\t\tconst matNames = [];\n\n\t\tlet elemSize = 3;\n\t\tif ( geoData.type === 'lines' ) elemSize = 2;\n\t\tif ( geoData.type === 'points' ) elemSize = 1;\n\n\t\tconst remappedIndices = this.splitMaterialIndices( geoData.polygonDimensions, geoData.materialIndices );\n\n\t\tlet indexNum = 0; // create new indices in numerical order\n\t\tconst indexPairs = {}; // original indices mapped to numerical indices\n\n\t\tlet prevMaterialIndex;\n\t\tlet materialIndex;\n\n\t\tlet prevStart = 0;\n\t\tlet currentCount = 0;\n\n\t\tfor ( let i = 0; i < remappedIndices.length; i += 2 ) {\n\n\t\t\tmaterialIndex = remappedIndices[ i + 1 ];\n\n\t\t\tif ( i === 0 ) matNames[ indexNum ] = tags[ materialIndex ];\n\n\t\t\tif ( prevMaterialIndex === undefined ) prevMaterialIndex = materialIndex;\n\n\t\t\tif ( materialIndex !== prevMaterialIndex ) {\n\n\t\t\t\tlet currentIndex;\n\t\t\t\tif ( indexPairs[ tags[ prevMaterialIndex ] ] ) {\n\n\t\t\t\t\tcurrentIndex = indexPairs[ tags[ prevMaterialIndex ] ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentIndex = indexNum;\n\t\t\t\t\tindexPairs[ tags[ prevMaterialIndex ] ] = indexNum;\n\t\t\t\t\tmatNames[ indexNum ] = tags[ prevMaterialIndex ];\n\t\t\t\t\tindexNum ++;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addGroup( prevStart, currentCount, currentIndex );\n\n\t\t\t\tprevStart += currentCount;\n\n\t\t\t\tprevMaterialIndex = materialIndex;\n\t\t\t\tcurrentCount = 0;\n\n\t\t\t}\n\n\t\t\tcurrentCount += elemSize;\n\n\t\t}\n\n\t\t// the loop above doesn't add the last group, do that here.\n\t\tif ( geometry.groups.length > 0 ) {\n\n\t\t\tlet currentIndex;\n\t\t\tif ( indexPairs[ tags[ materialIndex ] ] ) {\n\n\t\t\t\tcurrentIndex = indexPairs[ tags[ materialIndex ] ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentIndex = indexNum;\n\t\t\t\tindexPairs[ tags[ materialIndex ] ] = indexNum;\n\t\t\t\tmatNames[ indexNum ] = tags[ materialIndex ];\n\n\t\t\t}\n\n\t\t\tgeometry.addGroup( prevStart, currentCount, currentIndex );\n\n\t\t}\n\n\t\t// Mat names from TAGS chunk, used to build up an array of materials for this geometry\n\t\tgeometry.userData.matNames = matNames;\n\n\t}\n\n\tsplitMaterialIndices( polygonDimensions, indices ) {\n\n\t\tconst remappedIndices = [];\n\n\t\tpolygonDimensions.forEach( function ( dim, i ) {\n\n\t\t\tif ( dim <= 3 ) {\n\n\t\t\t\tremappedIndices.push( indices[ i * 2 ], indices[ i * 2 + 1 ] );\n\n\t\t\t} else if ( dim === 4 ) {\n\n\t\t\t\tremappedIndices.push( indices[ i * 2 ], indices[ i * 2 + 1 ], indices[ i * 2 ], indices[ i * 2 + 1 ] );\n\n\t\t\t} else {\n\n\t\t\t\t // ignore > 4 for now\n\t\t\t\tfor ( let k = 0; k < dim - 2; k ++ ) {\n\n\t\t\t\t\tremappedIndices.push( indices[ i * 2 ], indices[ i * 2 + 1 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn remappedIndices;\n\n\t}\n\n\t// UV maps:\n\t// 1: are defined via index into an array of points, not into a geometry\n\t// - the geometry is also defined by an index into this array, but the indexes may not match\n\t// 2: there can be any number of UV maps for a single geometry. Here these are combined,\n\t// \twith preference given to the first map encountered\n\t// 3: UV maps can be partial - that is, defined for only a part of the geometry\n\t// 4: UV maps can be VMAP or VMAD (discontinuous, to allow for seams). In practice, most\n\t// UV maps are defined as partially VMAP and partially VMAD\n\t// VMADs are currently not supported\n\tparseUVs( geometry, layer ) {\n\n\t\t// start by creating a UV map set to zero for the whole geometry\n\t\tconst remappedUVs = Array.from( Array( geometry.attributes.position.count * 2 ), function () {\n\n\t\t\treturn 0;\n\n\t\t} );\n\n\t\tfor ( const name in layer.uvs ) {\n\n\t\t\tconst uvs = layer.uvs[ name ].uvs;\n\t\t\tconst uvIndices = layer.uvs[ name ].uvIndices;\n\n\t\t\tuvIndices.forEach( function ( i, j ) {\n\n\t\t\t\tremappedUVs[ i * 2 ] = uvs[ j * 2 ];\n\t\t\t\tremappedUVs[ i * 2 + 1 ] = uvs[ j * 2 + 1 ];\n\n\t\t\t} );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( remappedUVs, 2 ) );\n\n\t}\n\n\tparseMorphTargets( geometry, layer ) {\n\n\t\tlet num = 0;\n\t\tfor ( const name in layer.morphTargets ) {\n\n\t\t\tconst remappedPoints = geometry.attributes.position.array.slice();\n\n\t\t\tif ( ! geometry.morphAttributes.position ) geometry.morphAttributes.position = [];\n\n\t\t\tconst morphPoints = layer.morphTargets[ name ].points;\n\t\t\tconst morphIndices = layer.morphTargets[ name ].indices;\n\t\t\tconst type = layer.morphTargets[ name ].type;\n\n\t\t\tmorphIndices.forEach( function ( i, j ) {\n\n\t\t\t\tif ( type === 'relative' ) {\n\n\t\t\t\t\tremappedPoints[ i * 3 ] += morphPoints[ j * 3 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 1 ] += morphPoints[ j * 3 + 1 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 2 ] += morphPoints[ j * 3 + 2 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tremappedPoints[ i * 3 ] = morphPoints[ j * 3 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 1 ] = morphPoints[ j * 3 + 1 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 2 ] = morphPoints[ j * 3 + 2 ];\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tgeometry.morphAttributes.position[ num ] = new Float32BufferAttribute( remappedPoints, 3 );\n\t\t\tgeometry.morphAttributes.position[ num ].name = name;\n\n\t\t\tnum ++;\n\n\t\t}\n\n\t\tgeometry.morphTargetsRelative = false;\n\n\t}\n\n}\n\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction extractParentUrl( url, dir ) {\n\n\tconst index = url.indexOf( dir );\n\n\tif ( index === - 1 ) return './';\n\n\treturn url.slice( 0, index );\n\n}\n\nexport { LWOLoader };\n", "import {\n\tDataUtils,\n\tDataTextureLoader,\n\tFloatType,\n\tHalfFloatType,\n\tRGBAFormat\n} from 'three';\n\nclass LogLuvLoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst ifds = UTIF.decode( buffer );\n\t\tUTIF.decodeImage( buffer, ifds[ 0 ] );\n\t\tconst rgba = UTIF.toRGBA( ifds[ 0 ], this.type );\n\n\t\treturn {\n\t\t\twidth: ifds[ 0 ].width,\n\t\t\theight: ifds[ 0 ].height,\n\t\t\tdata: rgba,\n\t\t\tformat: RGBAFormat,\n\t\t\ttype: this.type,\n\t\t\tflipY: true\n\t\t};\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n}\n\n// from https://github.com/photopea/UTIF.js (MIT License)\n\nconst UTIF = {};\n\nUTIF.decode = function ( buff, prm ) {\n\n\tif ( prm == null ) prm = { parseMN: true, debug: false }; // read MakerNote, debug\n\tvar data = new Uint8Array( buff ), offset = 0;\n\n\tvar id = UTIF._binBE.readASCII( data, offset, 2 ); offset += 2;\n\tvar bin = id == 'II' ? UTIF._binLE : UTIF._binBE;\n\tbin.readUshort( data, offset ); offset += 2;\n\n\tvar ifdo = bin.readUint( data, offset );\n\tvar ifds = [];\n\twhile ( true ) {\n\n\t\tvar cnt = bin.readUshort( data, ifdo ), typ = bin.readUshort( data, ifdo + 4 ); if ( cnt != 0 ) if ( typ < 1 || 13 < typ ) {\n\n\t\t\tconsole.log( 'error in TIFF' ); break;\n\n\t\t}\n\n\n\t\tUTIF._readIFD( bin, data, ifdo, ifds, 0, prm );\n\n\t\tifdo = bin.readUint( data, ifdo + 2 + cnt * 12 );\n\t\tif ( ifdo == 0 ) break;\n\n\t}\n\n\treturn ifds;\n\n};\n\nUTIF.decodeImage = function ( buff, img, ifds ) {\n\n\tif ( img.data ) return;\n\tvar data = new Uint8Array( buff );\n\tvar id = UTIF._binBE.readASCII( data, 0, 2 );\n\n\tif ( img[ 't256' ] == null ) return;\t// No width => probably not an image\n\timg.isLE = id == 'II';\n\timg.width = img[ 't256' ][ 0 ]; //delete img[\"t256\"];\n\timg.height = img[ 't257' ][ 0 ]; //delete img[\"t257\"];\n\n\tvar cmpr = img[ 't259' ] ? img[ 't259' ][ 0 ] : 1; //delete img[\"t259\"];\n\tvar fo = img[ 't266' ] ? img[ 't266' ][ 0 ] : 1; //delete img[\"t266\"];\n\tif ( img[ 't284' ] && img[ 't284' ][ 0 ] == 2 ) console.log( 'PlanarConfiguration 2 should not be used!' );\n\tif ( cmpr == 7 && img[ 't258' ] && img[ 't258' ].length > 3 ) img[ 't258' ] = img[ 't258' ].slice( 0, 3 );\n\n\tvar bipp; // bits per pixel\n\tif ( img[ 't258' ] ) bipp = Math.min( 32, img[ 't258' ][ 0 ] ) * img[ 't258' ].length;\n\telse bipp = ( img[ 't277' ] ? img[ 't277' ][ 0 ] : 1 );\n\t// Some .NEF files have t258==14, even though they use 16 bits per pixel\n\tif ( cmpr == 1 && img[ 't279' ] != null && img[ 't278' ] && img[ 't262' ][ 0 ] == 32803 ) {\n\n\t\tbipp = Math.round( ( img[ 't279' ][ 0 ] * 8 ) / ( img.width * img[ 't278' ][ 0 ] ) );\n\n\t}\n\n\tvar bipl = Math.ceil( img.width * bipp / 8 ) * 8;\n\tvar soff = img[ 't273' ]; if ( soff == null ) soff = img[ 't324' ];\n\tvar bcnt = img[ 't279' ]; if ( cmpr == 1 && soff.length == 1 ) bcnt = [ img.height * ( bipl >>> 3 ) ]; if ( bcnt == null ) bcnt = img[ 't325' ];\n\t//bcnt[0] = Math.min(bcnt[0], data.length); // Hasselblad, \"RAW_HASSELBLAD_H3D39II.3FR\"\n\tvar bytes = new Uint8Array( img.height * ( bipl >>> 3 ) ), bilen = 0;\n\n\tif ( img[ 't322' ] != null ) {\n\n\t\tvar tw = img[ 't322' ][ 0 ], th = img[ 't323' ][ 0 ];\n\t\tvar tx = Math.floor( ( img.width + tw - 1 ) / tw );\n\t\tvar ty = Math.floor( ( img.height + th - 1 ) / th );\n\t\tvar tbuff = new Uint8Array( Math.ceil( tw * th * bipp / 8 ) | 0 );\n\t\tfor ( var y = 0; y < ty; y ++ )\n\t\t\tfor ( var x = 0; x < tx; x ++ ) {\n\n\t\t\t\tvar i = y * tx + x; for ( var j = 0; j < tbuff.length; j ++ ) tbuff[ j ] = 0;\n\t\t\t\tUTIF.decode._decompress( img, ifds, data, soff[ i ], bcnt[ i ], cmpr, tbuff, 0, fo );\n\t\t\t\t// Might be required for 7 too. Need to check\n\t\t\t\tif ( cmpr == 6 ) bytes = tbuff;\n\t\t\t\telse UTIF._copyTile( tbuff, Math.ceil( tw * bipp / 8 ) | 0, th, bytes, Math.ceil( img.width * bipp / 8 ) | 0, img.height, Math.ceil( x * tw * bipp / 8 ) | 0, y * th );\n\n\t\t\t}\n\n\t\tbilen = bytes.length * 8;\n\n\t} else {\n\n\t\tvar rps = img[ 't278' ] ? img[ 't278' ][ 0 ] : img.height; rps = Math.min( rps, img.height );\n\t\tfor ( var i = 0; i < soff.length; i ++ ) {\n\n\t\t\tUTIF.decode._decompress( img, ifds, data, soff[ i ], bcnt[ i ], cmpr, bytes, Math.ceil( bilen / 8 ) | 0, fo );\n\t\t\tbilen += bipl * rps;\n\n\t\t}\n\n\t\tbilen = Math.min( bilen, bytes.length * 8 );\n\n\t}\n\n\timg.data = new Uint8Array( bytes.buffer, 0, Math.ceil( bilen / 8 ) | 0 );\n\n};\n\nUTIF.decode._decompress = function ( img, ifds, data, off, len, cmpr, tgt, toff ) {\n\n\t//console.log(\"compression\", cmpr);\n\t//var time = Date.now();\n\tif ( cmpr == 34676 ) UTIF.decode._decodeLogLuv32( img, data, off, len, tgt, toff );\n\telse console.log( 'Unsupported compression', cmpr );\n\n\t//console.log(Date.now()-time);\n\n\tvar bps = ( img[ 't258' ] ? Math.min( 32, img[ 't258' ][ 0 ] ) : 1 );\n\tvar noc = ( img[ 't277' ] ? img[ 't277' ][ 0 ] : 1 ), bpp = ( bps * noc ) >>> 3, h = ( img[ 't278' ] ? img[ 't278' ][ 0 ] : img.height ), bpl = Math.ceil( bps * noc * img.width / 8 );\n\n\t// convert to Little Endian /*\n\tif ( bps == 16 && ! img.isLE && img[ 't33422' ] == null ) // not DNG\n\t\tfor ( var y = 0; y < h; y ++ ) {\n\n\t\t\t//console.log(\"fixing endianity\");\n\t\t\tvar roff = toff + y * bpl;\n\t\t\tfor ( var x = 1; x < bpl; x += 2 ) {\n\n\t\t\t\tvar t = tgt[ roff + x ]; tgt[ roff + x ] = tgt[ roff + x - 1 ]; tgt[ roff + x - 1 ] = t;\n\n\t\t\t}\n\n\t\t} //*/\n\n\tif ( img[ 't317' ] && img[ 't317' ][ 0 ] == 2 ) {\n\n\t\tfor ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar ntoff = toff + y * bpl;\n\t\t\tif ( bps == 16 ) for ( var j = bpp; j < bpl; j += 2 ) {\n\n\t\t\t\tvar nv = ( ( tgt[ ntoff + j + 1 ] << 8 ) | tgt[ ntoff + j ] ) + ( ( tgt[ ntoff + j - bpp + 1 ] << 8 ) | tgt[ ntoff + j - bpp ] );\n\t\t\t\ttgt[ ntoff + j ] = nv & 255; tgt[ ntoff + j + 1 ] = ( nv >>> 8 ) & 255;\n\n\t\t\t}\n\t\t\telse if ( noc == 3 ) for ( var j = 3; j < bpl; j += 3 ) {\n\n\t\t\t\ttgt[ ntoff + j ] = ( tgt[ ntoff + j ] + tgt[ ntoff + j - 3 ] ) & 255;\n\t\t\t\ttgt[ ntoff + j + 1 ] = ( tgt[ ntoff + j + 1 ] + tgt[ ntoff + j - 2 ] ) & 255;\n\t\t\t\ttgt[ ntoff + j + 2 ] = ( tgt[ ntoff + j + 2 ] + tgt[ ntoff + j - 1 ] ) & 255;\n\n\t\t\t}\n\t\t\telse for ( var j = bpp; j < bpl; j ++ ) tgt[ ntoff + j ] = ( tgt[ ntoff + j ] + tgt[ ntoff + j - bpp ] ) & 255;\n\n\t\t}\n\n\t}\n\n};\n\nUTIF.decode._decodeLogLuv32 = function ( img, data, off, len, tgt, toff ) {\n\n\tvar w = img.width, qw = w * 4;\n\tvar io = 0, out = new Uint8Array( qw );\n\n\twhile ( io < len ) {\n\n\t\tvar oo = 0;\n\t\twhile ( oo < qw ) {\n\n\t\t\tvar c = data[ off + io ]; io ++;\n\t\t\tif ( c < 128 ) {\n\n\t\t\t\tfor ( var j = 0; j < c; j ++ ) out[ oo + j ] = data[ off + io + j ]; oo += c; io += c;\n\n\t\t\t} else {\n\n\t\t\t\tc = c - 126; for ( var j = 0; j < c; j ++ ) out[ oo + j ] = data[ off + io ]; oo += c; io ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var x = 0; x < w; x ++ ) {\n\n\t\t\ttgt[ toff + 0 ] = out[ x ];\n\t\t\ttgt[ toff + 1 ] = out[ x + w ];\n\t\t\ttgt[ toff + 2 ] = out[ x + w * 2 ];\n\t\t\ttgt[ toff + 4 ] = out[ x + w * 3 ];\n\t\t\ttoff += 6;\n\n\t\t}\n\n\t}\n\n};\n\nUTIF.tags = {};\n//UTIF.ttypes = { 256:3,257:3,258:3, 259:3, 262:3, 273:4, 274:3, 277:3,278:4,279:4, 282:5, 283:5, 284:3, 286:5,287:5, 296:3, 305:2, 306:2, 338:3, 513:4, 514:4, 34665:4 };\n// start at tag 250\nUTIF._types = function () {\n\n\tvar main = new Array( 250 ); main.fill( 0 );\n\tmain = main.concat( [ 0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 2, 2, 2, 2, 4, 3, 0, 0, 3, 4, 4, 3, 3, 5, 5, 3, 2, 5, 5, 0, 0, 0, 0, 4, 4, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 5, 5, 3, 0, 3, 3, 4, 4, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] );\n\tvar rest = { 33432: 2, 33434: 5, 33437: 5, 34665: 4, 34850: 3, 34853: 4, 34855: 3, 34864: 3, 34866: 4, 36864: 7, 36867: 2, 36868: 2, 37121: 7, 37377: 10, 37378: 5, 37380: 10, 37381: 5, 37383: 3, 37384: 3, 37385: 3, 37386: 5, 37510: 7, 37520: 2, 37521: 2, 37522: 2, 40960: 7, 40961: 3, 40962: 4, 40963: 4, 40965: 4, 41486: 5, 41487: 5, 41488: 3, 41985: 3, 41986: 3, 41987: 3, 41988: 5, 41989: 3, 41990: 3, 41993: 3, 41994: 3, 41995: 7, 41996: 3, 42032: 2, 42033: 2, 42034: 5, 42036: 2, 42037: 2, 59932: 7 };\n\treturn {\n\t\tbasic: {\n\t\t\tmain: main,\n\t\t\trest: rest\n\t\t},\n\t\tgps: {\n\t\t\tmain: [ 1, 2, 5, 2, 5, 1, 5, 5, 0, 9 ],\n\t\t\trest: { 18: 2, 29: 2 }\n\t\t}\n\t};\n\n}();\n\nUTIF._readIFD = function ( bin, data, offset, ifds, depth, prm ) {\n\n\tvar cnt = bin.readUshort( data, offset ); offset += 2;\n\tvar ifd = {};\n\n\tif ( prm.debug ) console.log( ' '.repeat( depth ), ifds.length - 1, '>>>----------------' );\n\tfor ( var i = 0; i < cnt; i ++ ) {\n\n\t\tvar tag = bin.readUshort( data, offset ); offset += 2;\n\t\tvar type = bin.readUshort( data, offset ); offset += 2;\n\t\tvar num = bin.readUint( data, offset ); offset += 4;\n\t\tvar voff = bin.readUint( data, offset ); offset += 4;\n\n\t\tvar arr = [];\n\t\t//ifd[\"t\"+tag+\"-\"+UTIF.tags[tag]] = arr;\n\t\tif ( type == 1 || type == 7 ) {\n\n\t\t\tarr = new Uint8Array( data.buffer, ( num < 5 ? offset - 4 : voff ), num );\n\n\t\t}\n\n\t\tif ( type == 2 ) {\n\n\t\t\tvar o0 = ( num < 5 ? offset - 4 : voff ), c = data[ o0 ], len = Math.max( 0, Math.min( num - 1, data.length - o0 ) );\n\t\t\tif ( c < 128 || len == 0 ) arr.push( bin.readASCII( data, o0, len ) );\n\t\t\telse arr = new Uint8Array( data.buffer, o0, len );\n\n\t\t}\n\n\t\tif ( type == 3 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readUshort( data, ( num < 3 ? offset - 4 : voff ) + 2 * j ) );\n\n\t\t}\n\n\t\tif ( type == 4\n\t\t|| type == 13 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readUint( data, ( num < 2 ? offset - 4 : voff ) + 4 * j ) );\n\n\t\t}\n\n\t\tif ( type == 5 || type == 10 ) {\n\n\t\t\tvar ri = type == 5 ? bin.readUint : bin.readInt;\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( [ ri( data, voff + j * 8 ), ri( data, voff + j * 8 + 4 ) ] );\n\n\t\t}\n\n\t\tif ( type == 8 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readShort( data, ( num < 3 ? offset - 4 : voff ) + 2 * j ) );\n\n\t\t}\n\n\t\tif ( type == 9 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readInt( data, ( num < 2 ? offset - 4 : voff ) + 4 * j ) );\n\n\t\t}\n\n\t\tif ( type == 11 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readFloat( data, voff + j * 4 ) );\n\n\t\t}\n\n\t\tif ( type == 12 ) {\n\n\t\t\tfor ( var j = 0; j < num; j ++ ) arr.push( bin.readDouble( data, voff + j * 8 ) );\n\n\t\t}\n\n\t\tif ( num != 0 && arr.length == 0 ) {\n\n\t\t\tconsole.log( tag, 'unknown TIFF tag type: ', type, 'num:', num ); if ( i == 0 ) return; continue;\n\n\t\t}\n\n\t\tif ( prm.debug ) console.log( ' '.repeat( depth ), tag, type, UTIF.tags[ tag ], arr );\n\n\t\tifd[ 't' + tag ] = arr;\n\n\t\tif ( tag == 330 || tag == 34665 || tag == 34853 || ( tag == 50740 && bin.readUshort( data, bin.readUint( arr, 0 ) ) < 300 ) || tag == 61440 ) {\n\n\t\t\tvar oarr = tag == 50740 ? [ bin.readUint( arr, 0 ) ] : arr;\n\t\t\tvar subfd = [];\n\t\t\tfor ( var j = 0; j < oarr.length; j ++ ) UTIF._readIFD( bin, data, oarr[ j ], subfd, depth + 1, prm );\n\t\t\tif ( tag == 330 ) ifd.subIFD = subfd;\n\t\t\tif ( tag == 34665 ) ifd.exifIFD = subfd[ 0 ];\n\t\t\tif ( tag == 34853 ) ifd.gpsiIFD = subfd[ 0 ]; //console.log(\"gps\", subfd[0]); }\n\t\t\tif ( tag == 50740 ) ifd.dngPrvt = subfd[ 0 ];\n\t\t\tif ( tag == 61440 ) ifd.fujiIFD = subfd[ 0 ];\n\n\t\t}\n\n\t\tif ( tag == 37500 && prm.parseMN ) {\n\n\t\t\tvar mn = arr;\n\t\t\t//console.log(bin.readASCII(mn,0,mn.length), mn);\n\t\t\tif ( bin.readASCII( mn, 0, 5 ) == 'Nikon' ) ifd.makerNote = UTIF[ 'decode' ]( mn.slice( 10 ).buffer )[ 0 ];\n\t\t\telse if ( bin.readUshort( data, voff ) < 300 && bin.readUshort( data, voff + 4 ) <= 12 ) {\n\n\t\t\t\tvar subsub = []; UTIF._readIFD( bin, data, voff, subsub, depth + 1, prm );\n\t\t\t\tifd.makerNote = subsub[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tifds.push( ifd );\n\tif ( prm.debug ) console.log( ' '.repeat( depth ), '<<<---------------' );\n\treturn offset;\n\n};\n\nUTIF.toRGBA = function ( out, type ) {\n\n\tconst w = out.width, h = out.height, area = w * h, data = out.data;\n\n\tlet img;\n\n\tswitch ( type ) {\n\n\t\tcase HalfFloatType:\n\n\t\t\timg = new Uint16Array( area * 4 );\n\t\t\tbreak;\n\n\t\tcase FloatType:\n\n\t\t\timg = new Float32Array( area * 4 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.LogLuvLoader: Unsupported texture data type: ' + type );\n\n\t}\n\n\tlet intp = out[ 't262' ] ? out[ 't262' ][ 0 ] : 2;\n\tconst bps = out[ 't258' ] ? Math.min( 32, out[ 't258' ][ 0 ] ) : 1;\n\n\tif ( out[ 't262' ] == null && bps == 1 ) intp = 0;\n\n\tif ( intp == 32845 ) {\n\n\t\tfor ( let y = 0; y < h; y ++ ) {\n\n\t\t\tfor ( let x = 0; x < w; x ++ ) {\n\n\t\t\t\tconst si = ( y * w + x ) * 6, qi = ( y * w + x ) * 4;\n\t\t\t\tlet L = ( data[ si + 1 ] << 8 ) | data[ si ];\n\n\t\t\t\tL = Math.pow( 2, ( L + 0.5 ) / 256 - 64 );\n\t\t\t\tconst u = ( data[ si + 3 ] + 0.5 ) / 410;\n\t\t\t\tconst v = ( data[ si + 5 ] + 0.5 ) / 410;\n\n\t\t\t\t// Luv to xyY\n\t\t\t\tconst sX = ( 9 * u ) / ( 6 * u - 16 * v + 12 );\n\t\t\t\tconst sY = ( 4 * v ) / ( 6 * u - 16 * v + 12 );\n\t\t\t\tconst bY = L;\n\n\t\t\t\t// xyY to XYZ\n\t\t\t\tconst X = ( sX * bY ) / sY, Y = bY, Z = ( 1 - sX - sY ) * bY / sY;\n\n\t\t\t\t// XYZ to linear RGB\n\t\t\t\tconst r = 2.690 * X - 1.276 * Y - 0.414 * Z;\n\t\t\t\tconst g = - 1.022 * X + 1.978 * Y + 0.044 * Z;\n\t\t\t\tconst b = 0.061 * X - 0.224 * Y + 1.163 * Z;\n\n\t\t\t\tif ( type === HalfFloatType ) {\n\n\t\t\t\t\timg[ qi ] = DataUtils.toHalfFloat( Math.min( r, 65504 ) );\n\t\t\t\t\timg[ qi + 1 ] = DataUtils.toHalfFloat( Math.min( g, 65504 ) );\n\t\t\t\t\timg[ qi + 2 ] = DataUtils.toHalfFloat( Math.min( b, 65504 ) );\n\t\t\t\t\timg[ qi + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\timg[ qi ] = r;\n\t\t\t\t\timg[ qi + 1 ] = g;\n\t\t\t\t\timg[ qi + 2 ] = b;\n\t\t\t\t\timg[ qi + 3 ] = 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\tthrow new Error( 'THREE.LogLuvLoader: Unsupported Photometric interpretation: ' + intp );\n\n\t}\n\n\treturn img;\n\n};\n\nUTIF._binBE =\n{\n\tnextZero: function ( data, o ) {\n\n\t\twhile ( data[ o ] != 0 ) o ++; return o;\n\n\t},\n\treadUshort: function ( buff, p ) {\n\n\t\treturn ( buff[ p ] << 8 ) | buff[ p + 1 ];\n\n\t},\n\treadShort: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 1 ]; a[ 1 ] = buff[ p + 0 ]; return UTIF._binBE.i16[ 0 ];\n\n\t},\n\treadInt: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 3 ]; a[ 1 ] = buff[ p + 2 ]; a[ 2 ] = buff[ p + 1 ]; a[ 3 ] = buff[ p + 0 ]; return UTIF._binBE.i32[ 0 ];\n\n\t},\n\treadUint: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 3 ]; a[ 1 ] = buff[ p + 2 ]; a[ 2 ] = buff[ p + 1 ]; a[ 3 ] = buff[ p + 0 ]; return UTIF._binBE.ui32[ 0 ];\n\n\t},\n\treadASCII: function ( buff, p, l ) {\n\n\t\tvar s = ''; for ( var i = 0; i < l; i ++ ) s += String.fromCharCode( buff[ p + i ] ); return s;\n\n\t},\n\treadFloat: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; for ( var i = 0; i < 4; i ++ ) a[ i ] = buff[ p + 3 - i ]; return UTIF._binBE.fl32[ 0 ];\n\n\t},\n\treadDouble: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; for ( var i = 0; i < 8; i ++ ) a[ i ] = buff[ p + 7 - i ]; return UTIF._binBE.fl64[ 0 ];\n\n\t},\n\n\twriteUshort: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >> 8 ) & 255; buff[ p + 1 ] = n & 255;\n\n\t},\n\twriteInt: function ( buff, p, n ) {\n\n\t\tvar a = UTIF._binBE.ui8; UTIF._binBE.i32[ 0 ] = n; buff[ p + 3 ] = a[ 0 ]; buff[ p + 2 ] = a[ 1 ]; buff[ p + 1 ] = a[ 2 ]; buff[ p + 0 ] = a[ 3 ];\n\n\t},\n\twriteUint: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >> 24 ) & 255; buff[ p + 1 ] = ( n >> 16 ) & 255; buff[ p + 2 ] = ( n >> 8 ) & 255; buff[ p + 3 ] = ( n >> 0 ) & 255;\n\n\t},\n\twriteASCII: function ( buff, p, s ) {\n\n\t\tfor ( var i = 0; i < s.length; i ++ ) buff[ p + i ] = s.charCodeAt( i );\n\n\t},\n\twriteDouble: function ( buff, p, n ) {\n\n\t\tUTIF._binBE.fl64[ 0 ] = n;\n\t\tfor ( var i = 0; i < 8; i ++ ) buff[ p + i ] = UTIF._binBE.ui8[ 7 - i ];\n\n\t}\n};\nUTIF._binBE.ui8 = new Uint8Array( 8 );\nUTIF._binBE.i16 = new Int16Array( UTIF._binBE.ui8.buffer );\nUTIF._binBE.i32 = new Int32Array( UTIF._binBE.ui8.buffer );\nUTIF._binBE.ui32 = new Uint32Array( UTIF._binBE.ui8.buffer );\nUTIF._binBE.fl32 = new Float32Array( UTIF._binBE.ui8.buffer );\nUTIF._binBE.fl64 = new Float64Array( UTIF._binBE.ui8.buffer );\n\nUTIF._binLE =\n{\n\tnextZero: UTIF._binBE.nextZero,\n\treadUshort: function ( buff, p ) {\n\n\t\treturn ( buff[ p + 1 ] << 8 ) | buff[ p ];\n\n\t},\n\treadShort: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 0 ]; a[ 1 ] = buff[ p + 1 ]; return UTIF._binBE.i16[ 0 ];\n\n\t},\n\treadInt: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 0 ]; a[ 1 ] = buff[ p + 1 ]; a[ 2 ] = buff[ p + 2 ]; a[ 3 ] = buff[ p + 3 ]; return UTIF._binBE.i32[ 0 ];\n\n\t},\n\treadUint: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 0 ]; a[ 1 ] = buff[ p + 1 ]; a[ 2 ] = buff[ p + 2 ]; a[ 3 ] = buff[ p + 3 ]; return UTIF._binBE.ui32[ 0 ];\n\n\t},\n\treadASCII: UTIF._binBE.readASCII,\n\treadFloat: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; for ( var i = 0; i < 4; i ++ ) a[ i ] = buff[ p + i ]; return UTIF._binBE.fl32[ 0 ];\n\n\t},\n\treadDouble: function ( buff, p ) {\n\n\t\tvar a = UTIF._binBE.ui8; for ( var i = 0; i < 8; i ++ ) a[ i ] = buff[ p + i ]; return UTIF._binBE.fl64[ 0 ];\n\n\t},\n\n\twriteUshort: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n ) & 255; buff[ p + 1 ] = ( n >> 8 ) & 255;\n\n\t},\n\twriteInt: function ( buff, p, n ) {\n\n\t\tvar a = UTIF._binBE.ui8; UTIF._binBE.i32[ 0 ] = n; buff[ p + 0 ] = a[ 0 ]; buff[ p + 1 ] = a[ 1 ]; buff[ p + 2 ] = a[ 2 ]; buff[ p + 3 ] = a[ 3 ];\n\n\t},\n\twriteUint: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >>> 0 ) & 255; buff[ p + 1 ] = ( n >>> 8 ) & 255; buff[ p + 2 ] = ( n >>> 16 ) & 255; buff[ p + 3 ] = ( n >>> 24 ) & 255;\n\n\t},\n\twriteASCII: UTIF._binBE.writeASCII\n};\nUTIF._copyTile = function ( tb, tw, th, b, w, h, xoff, yoff ) {\n\n\t//log(\"copyTile\", tw, th, w, h, xoff, yoff);\n\tvar xlim = Math.min( tw, w - xoff );\n\tvar ylim = Math.min( th, h - yoff );\n\tfor ( var y = 0; y < ylim; y ++ ) {\n\n\t\tvar tof = ( yoff + y ) * w + xoff;\n\t\tvar sof = y * tw;\n\t\tfor ( var x = 0; x < xlim; x ++ ) b[ tof + x ] = tb[ sof + x ];\n\n\t}\n\n};\n\nexport { LogLuvLoader };\n", "const lottie = {};\n\nif (typeof document !== 'undefined') {\n\nconst svgNS = 'http://www.w3.org/2000/svg';\n\nlet locationHref = '';\nlet _useWebWorker = false;\n\nconst initialDefaultFrame = -999999;\n\nconst setWebWorker = (flag) => { _useWebWorker = !!flag; };\nconst getWebWorker = () => _useWebWorker;\n\nconst setLocationHref = (value) => { locationHref = value; };\nconst getLocationHref = () => locationHref;\n\nfunction createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n}\n\nfunction extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n}\n\nfunction getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n}\n\nfunction createProxyFunction(prototype) {\n function ProxyFunction() {}\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n}\n\n// import Howl from '../../3rd_party/howler';\n\nconst audioControllerFactory = (function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n\n AudioController.prototype = {\n addAudio: function (audio) {\n this.audios.push(audio);\n },\n pause: function () {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function () {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function (rateValue) {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function (assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n } if (window.Howl) {\n return new window.Howl({\n src: [assetPath],\n });\n }\n return {\n isPlaying: false,\n play: function () { this.isPlaying = true; },\n seek: function () { this.isPlaying = false; },\n playing: function () {},\n rate: function () {},\n setVolume: function () {},\n };\n },\n setAudioFactory: function (audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function (value) {\n this._volume = value;\n this._updateVolume();\n },\n mute: function () {\n this._isMuted = true;\n this._updateVolume();\n },\n unmute: function () {\n this._isMuted = false;\n this._updateVolume();\n },\n getVolume: function () {\n return this._volume;\n },\n _updateVolume: function () {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n },\n };\n\n return function () {\n return new AudioController();\n };\n}());\n\nconst createTypedArray = (function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n default:\n value = 1.1;\n break;\n }\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n return arr;\n }\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n } if (type === 'int16') {\n return new Int16Array(len);\n } if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n return createRegularArray(type, len);\n }\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n return createRegularArray;\n}());\n\nfunction createSizedArray(len) {\n return Array.apply(null, { length: len });\n}\n\nlet subframeEnabled = true;\nlet expressionsPlugin = null;\nlet idPrefix$1 = '';\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nlet _shouldRoundValues = false;\nconst bmPow = Math.pow;\nconst bmSqrt = Math.sqrt;\nconst bmFloor = Math.floor;\nconst bmMax = Math.max;\nconst bmMin = Math.min;\n\nconst BMMath = {};\n(function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n}());\n\nfunction ProjectInterface$1() { return {}; }\nBMMath.random = Math.random;\nBMMath.abs = function (val) {\n var tOfVal = typeof val;\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n return absArr;\n }\n return Math.abs(val);\n};\nlet defaultCurveSegments = 150;\nconst degToRads = Math.PI / 180;\nconst roundCorner = 0.5519;\n\nfunction roundValues(flag) {\n _shouldRoundValues = !!flag;\n}\n\nfunction bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n return value;\n}\n\nfunction styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n}\n\nfunction BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n}\n\nfunction BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n}\n\nfunction BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n}\n\nfunction BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n}\n\nfunction BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n}\n\nfunction BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n}\n\nfunction BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n}\n\nfunction BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n}\n\nconst createElementID = (function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n}());\n\nfunction HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n return [r,\n g,\n b];\n}\n\nfunction RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = (max === 0 ? 0 : d / max);\n var v = max / 255;\n\n switch (max) {\n case min: h = 0; break;\n case r: h = (g - b) + d * (g < b ? 6 : 0); h /= 6 * d; break;\n case g: h = (b - r) + d * 2; h /= 6 * d; break;\n case b: h = (r - g) + d * 4; h /= 6 * d; break;\n default: break;\n }\n\n return [\n h,\n s,\n v,\n ];\n}\n\nfunction addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n}\n\nfunction addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n}\n\nfunction addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n}\n\nconst rgbToHex = (function () {\n var colorMap = [];\n var i;\n var hex;\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n if (g < 0) {\n g = 0;\n }\n if (b < 0) {\n b = 0;\n }\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n}());\n\nconst setSubframeEnabled = (flag) => { subframeEnabled = !!flag; };\nconst getSubframeEnabled = () => subframeEnabled;\nconst setExpressionsPlugin = (value) => { expressionsPlugin = value; };\nconst getExpressionsPlugin = () => expressionsPlugin;\nconst setDefaultCurveSegments = (value) => { defaultCurveSegments = value; };\nconst getDefaultCurveSegments = () => defaultCurveSegments;\nconst setIdPrefix = (value) => { idPrefix$1 = value; };\nconst getIdPrefix = () => idPrefix$1;\n\nfunction createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n}\n\nconst dataManager = (function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function () {\n\n },\n postMessage: function (path) {\n workerFn({\n data: path,\n });\n },\n };\n var _workerSelf = {\n postMessage: function (data) {\n workerProxy.onmessage({\n data: data,\n });\n },\n };\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (('ks' in layerData) && !layerData.completed) {\n layerData.completed = true;\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets);\n // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n i += 1;\n }\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n return JSON.parse(JSON.stringify(comp.layers));\n }\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n if (minimum[0] > animVersion[0]) {\n return true;\n } if (animVersion[0] > minimum[0]) {\n return false;\n }\n if (minimum[1] > animVersion[1]) {\n return true;\n } if (animVersion[1] > minimum[1]) {\n return false;\n }\n if (minimum[2] > animVersion[2]) {\n return true;\n } if (animVersion[2] > minimum[2]) {\n return false;\n }\n return null;\n }\n\n var checkText = (function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [\n {\n s: documentData,\n t: 0,\n },\n ],\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }());\n\n var checkChars = (function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: { k: [0, 0], a: 0 },\n s: { k: [100, 100], a: 0 },\n a: { k: [0, 0], a: 0 },\n r: { k: 0, a: 0 },\n o: { k: 100, a: 0 },\n };\n if (!animationData.chars[i].t) {\n charData.data.shapes.push(\n {\n ty: 'no',\n }\n );\n charData.data.shapes[0].it.push(\n {\n p: { k: [0, 0], a: 0 },\n s: { k: [100, 100], a: 0 },\n a: { k: [0, 0], a: 0 },\n r: { k: 0, a: 0 },\n o: { k: 100, a: 0 },\n sk: { k: 0, a: 0 },\n sa: { k: 0, a: 0 },\n ty: 'tr',\n }\n );\n }\n }\n }\n }\n };\n }());\n\n var checkPathProperties = (function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a,\n };\n }\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p,\n };\n }\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r,\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }());\n\n var checkColors = (function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }());\n\n var checkShapes = (function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }());\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\n // data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n\n return moduleOb;\n }\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = (function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n if (xhr.response && typeof xhr.response === 'object') {\n return xhr.response;\n } if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n } if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n // set responseType after calling open or IE will break.\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n try {\n xhr.open('GET', path, true);\n } catch (error) {\n xhr.open('GET', fullPath + '/' + path, true);\n }\n xhr.send();\n }\n return {\n load: loadAsset,\n };\n }());\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(\n e.data.path,\n e.data.fullPath,\n function (data) {\n _workerSelf.dataManager.completeData(data);\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success',\n });\n },\n function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error',\n });\n }\n );\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n _workerSelf.dataManager.completeData(animation);\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success',\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(\n e.data.path,\n e.data.fullPath,\n function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success',\n });\n },\n function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error',\n });\n }\n );\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError,\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId,\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId,\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId,\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation,\n };\n}());\n\nconst ImagePreloader = (function () {\n var proxyImage = (function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }());\n\n function imageLoaded() {\n this.loadedAssets += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n if (box.width || _count > 500) {\n this._imageLoaded();\n clearInterval(intervalId);\n }\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n var ob = {\n img: img,\n assetData: assetData,\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData,\n };\n return ob;\n }\n\n function createFootageData(data) {\n var ob = {\n assetData: data,\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n i += 1;\n }\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType,\n };\n\n return ImagePreloaderFactory;\n}());\n\nfunction BaseEvent() {}\nBaseEvent.prototype = {\n triggerEvent: function (eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function (eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function (eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n i -= 1;\n len -= 1;\n }\n i += 1;\n }\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n },\n};\n\nconst markerParser = (\n\n function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n if (keysCount === 0) {\n throw new Error();\n }\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr,\n };\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm,\n };\n }\n }\n markers.push(markerData);\n }\n return markers;\n };\n }());\n\nconst ProjectInterface = (function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n return this.compositions[i].compInterface;\n }\n i += 1;\n }\n return null;\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n\n _thisProjectFunction.registerComposition = registerComposition;\n\n return _thisProjectFunction;\n };\n}());\n\nconst renderers = {};\n\nconst registerRenderer = (key, value) => {\n renderers[key] = value;\n};\n\nfunction getRenderer(key) {\n return renderers[key];\n}\n\nconst AnimationItem = function () {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n};\n\nextendPrototype([BaseEvent], AnimationItem);\n\nAnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n var animType = 'svg';\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n const RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n if (params.loop === ''\n || params.loop === null\n || params.loop === undefined\n || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(\n params.path,\n this.configAnimation,\n this.onSetupError\n );\n }\n};\n\nAnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n};\n\nAnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(\n data,\n this.configAnimation\n );\n};\n\nAnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (typeof animationData !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n var params = {\n wrapper: wrapper,\n animationData: animationData,\n };\n var wrapperAttributes = wrapper.attributes;\n\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value\n : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value\n : wrapperAttributes.getNamedItem('bm-path')\n ? wrapperAttributes.getNamedItem('bm-path').value\n : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value\n : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value\n : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value\n : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value\n : wrapperAttributes.getNamedItem('bm-renderer')\n ? wrapperAttributes.getNamedItem('bm-renderer').value\n : 'canvas';\n\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value\n : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value\n : wrapperAttributes.getNamedItem('bm-loop')\n ? wrapperAttributes.getNamedItem('bm-loop').value\n : '';\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value\n : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value\n : wrapperAttributes.getNamedItem('bm-autoplay')\n ? wrapperAttributes.getNamedItem('bm-autoplay').value\n : true;\n params.autoplay = autoplay !== 'false';\n\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value\n : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value\n : wrapperAttributes.getNamedItem('bm-name')\n ? wrapperAttributes.getNamedItem('bm-name').value\n : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value\n : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value\n : wrapperAttributes.getNamedItem('bm-prerender')\n ? wrapperAttributes.getNamedItem('bm-prerender').value\n : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n this.setParams(params);\n};\n\nAnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n i += 1;\n }\n }\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n if (data.assets) {\n len = data.assets.length;\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n this.animationData.__complete = false;\n dataManager.completeAnimation(\n this.animationData,\n this.onSegmentComplete\n );\n};\n\nAnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.loadNextSegment();\n};\n\nAnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n};\n\nAnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n this.loadNextSegment();\n};\n\nAnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n};\n\nAnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n};\n\nAnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n try {\n this.animationData = animData;\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n this.renderer.configAnimation(animData);\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n};\n\nAnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n};\n\nAnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded\n && this.renderer.globalData.fontManager.isLoaded\n && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas')\n && (this.imagePreloader.loadedFootages())\n ) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n if (this.autoplay) {\n this.play();\n }\n }\n};\n\nAnimationItem.prototype.resize = function () {\n this.renderer.updateContainerSize();\n};\n\nAnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n};\n\nAnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n};\n\nAnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n try {\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n};\n\nAnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_pause');\n this.audioController.resume();\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n};\n\nAnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_play');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n};\n\nAnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n};\n\nAnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n};\n\nAnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n return null;\n};\n\nAnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n this.pause();\n};\n\nAnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n this.play();\n};\n\nAnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false;\n // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + (nextValue % this.totalFrames));\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n};\n\nAnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n this.trigger('segmentStart');\n};\nAnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n};\n\nAnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n if (typeof arr[0] === 'object') {\n var i;\n var len = arr.length;\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n if (this.isPaused) {\n this.play();\n }\n};\n\nAnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n if (forceFlag) {\n this.checkSegments(0);\n }\n};\nAnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n return false;\n};\n\nAnimationItem.prototype.destroy = function (name) {\n if ((name && this.name !== name) || !this.renderer) {\n return;\n }\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.renderer = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n};\n\nAnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n};\n\nAnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n};\n\nAnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n};\n\nAnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.setVolume(val);\n};\n\nAnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n};\n\nAnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.mute();\n};\n\nAnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.unmute();\n};\n\nAnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n};\n\nAnimationItem.prototype.getPath = function () {\n return this.path;\n};\n\nAnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n};\n\nAnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n i += 1;\n }\n return null;\n};\n\nAnimationItem.prototype.hide = function () {\n this.renderer.hide();\n};\n\nAnimationItem.prototype.show = function () {\n this.renderer.show();\n};\n\nAnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n};\n\nAnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {\n // TODO: decide how to handle catch case\n }\n};\n\nAnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n default:\n this.triggerEvent(name);\n }\n }\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n};\n\nAnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n};\n\nAnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n};\n\nconst animationManager = (function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n var i = 0;\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n i += 1;\n }\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({ elem: element, animation: animItem });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n initTime = nowTime;\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n for (i = (len - 1); i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')),\n [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n registerAnimation(animElements[i], animationData);\n }\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize;\n // moduleOb.start = start;\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n}());\n\n/* eslint-disable */\nconst BezierFactory = (function () {\n /**\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n *\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\n * Usage:\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\n *\n */\n\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n if (beziers[str]) {\n return beziers[str];\n }\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n }\n\n // These values are established by empiricism with tests (tradeoff: performance VS precision)\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\n function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\n function C(aA1) { return 3.0 * aA1; }\n\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n /**\n * points is an array of [ mX1, mY1, mX2, mY2 ]\n */\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n\n get: function (x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n\n // Private part\n\n _precompute: function () {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n if (mX1 !== mY1 || mX2 !== mY2) { this._calcSampleValues(); }\n },\n\n _calcSampleValues: function () {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\n */\n _getTForX: function (aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } if (initialSlope === 0.0) {\n return guessForT;\n }\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n },\n };\n\n return ob;\n}());\n\nconst pooling = (function () {\n function double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n double: double,\n };\n}());\n\nconst poolFactory = (function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n\n var ob = {\n newElement: newElement,\n release: release,\n };\n\n function newElement() {\n var element;\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength *= 2;\n }\n if (_release) {\n _release(element);\n }\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n}());\n\nconst bezierLengthPool = (function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments()),\n };\n }\n return poolFactory(8, create);\n}());\n\nconst segmentsLengthPool = (function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0,\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n}());\n\nfunction bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = (x1 * y2) + (y1 * x3) + (x2 * y3) - (x3 * y2) - (y3 * x1) - (x2 * y1);\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = (function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n lastPoint[i] = point[i];\n }\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }());\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = (function () {\n var storedData = {};\n\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n return storedData[bezierName];\n };\n }());\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n flag = false;\n }\n }\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n var t0t0t0 = t0 * t0 * t0;\n //\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n var t0t0t1 = t0 * t0 * t1;\n //\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n var t0t1t1 = t0 * t1 * t1;\n //\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n var t1t1t1 = t1 * t1 * t1;\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D,\n };\n}\n\nconst bez = bezFunction();\n\nconst PropertyFactory = (function () {\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n iterationIndex = 0;\n break;\n }\n if ((nextKeyData.t - offsetTime) > frameNum) {\n iterationIndex = i;\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n keyframeMetadata = this.keyframesMetadata[i] || {};\n\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n var bezierData = keyframeMetadata.bezierData;\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n }\n // caching._lastKeyframeIndex = -1;\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n\n var segmentPerc;\n var addedLength = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastAddedLength : 0;\n j = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n break;\n }\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n caching.lastIndex = iterationIndex;\n return newValue;\n }\n\n // based on @Toji's https://github.com/toji/gl-matrix/\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n if ((1.0 - cosom) > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n if (!(frameNum === this._caching.lastFrame || (this._caching.lastFrame !== initFrame && ((this._caching.lastFrame >= endTime && frameNum >= endTime) || (this._caching.lastFrame < initTime && frameNum < initTime))))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame, lastIndex: 0, value: 0, _lastKeyframeIndex: -1,\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n if ((s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1])) || (s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2]))) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || (s[2] === e[2] && to[2] === 0 && ti[2] === 0)) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n this._caching = { lastFrame: initFrame, lastIndex: 0, value: createTypedArray('float32', arrLen) };\n this.addEffect = addEffect;\n }\n\n function getProp(elem, data, type, mult, container) {\n var p;\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof (data.k[0]) === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n default:\n break;\n }\n }\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n return p;\n }\n\n var ob = {\n getProp: getProp,\n };\n return ob;\n}());\n\nfunction DynamicPropertyContainer() {}\nDynamicPropertyContainer.prototype = {\n addDynamicProperty: function (prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function () {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function (container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n },\n};\n\nconst pointPool = (function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n return poolFactory(8, create);\n}());\n\nfunction ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n}\n\nShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n};\n\nShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n this._length = len;\n};\n\nShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n};\n\nShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n case 'i':\n arr = this.i;\n break;\n case 'o':\n arr = this.o;\n break;\n default:\n arr = [];\n break;\n }\n if (!arr[pos] || (arr[pos] && !replace)) {\n arr[pos] = pointPool.newElement();\n }\n arr[pos][0] = x;\n arr[pos][1] = y;\n};\n\nShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n};\n\nShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n var cnt = this._length - 1;\n var len = this._length;\n\n var i;\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n return newPath;\n};\n\nconst shapePool = (function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n\n return factory;\n}());\n\nfunction ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n}\n\nShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n this.shapes[this._length] = shapeData;\n this._length += 1;\n};\n\nShapeCollection.prototype.releaseShapes = function () {\n var i;\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n this._length = 0;\n};\n\nconst shapeCollectionPool = (function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release,\n };\n\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength *= 2;\n }\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n}());\n\nconst ShapePropertyFactory = (function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\n keyPropS = kf[kf.length - 1].s[0];\n }else{\n keyPropS = kf[kf.length - 2].e[0];\n } */\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n if ((nextKeyData.t - this.offsetTime) > frameNum) {\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / ((nextKeyData.t - this.offsetTime) - (keyData.t - this.offsetTime)));\n }\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n keyPropS = keyData.s[0];\n }\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n if (!(lastFrame !== initFrame && ((lastFrame < initTime && frameNum < initTime) || (lastFrame > endTime && frameNum > endTime)))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching);\n /// /\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n var i;\n var len = shape1._length;\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0]\n || shape1.v[i][1] !== shape2.v[i][1]\n || shape1.o[i][0] !== shape2.o[i][0]\n || shape1.o[i][1] !== shape2.o[i][1]\n || shape1.i[i][0] !== shape2.i[i][0]\n || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n } if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var finalValue;\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n var i;\n var len = this.effectsSequence.length;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = { lastFrame: initFrame, lastIndex: 0 };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = (function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function () {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n var _cw = this.d !== 3;\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n },\n };\n\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n\n return EllShapePropertyFactory;\n }());\n\n var StarShapeProperty = (function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function () {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = (Math.PI * 2) / numPts;\n /* this.v.v.length = numPts;\n this.v.i.length = numPts;\n this.v.o.length = numPts; */\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = (2 * Math.PI * longRad) / (numPts * 2);\n var shortPerimSegment = (2 * Math.PI * shortRad) / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n\n /* this.v.v[i] = [x,y];\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\n this.v._length = numPts; */\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function () {\n var numPts = Math.floor(this.pt.v);\n var angle = (Math.PI * 2) / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = (2 * Math.PI * rad) / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n this.paths.length = 0;\n this.paths[0] = this.v;\n },\n\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n\n return StarShapePropertyFactory;\n }());\n\n var RectShapeProperty = (function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function () {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape,\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n\n return RectShapePropertyFactory;\n }());\n\n function getShapeProp(elem, data, type) {\n var prop;\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n}());\n\n/*!\n Transformation Matrix v2.0\n (c) Epistemex 2014-2015\n www.epistemex.com\n By Ken Fyrstenberg\n Contributions by leeoniya.\n License: MIT, header required.\n */\n\n/**\n * 2D transformation matrix object initialized with identity matrix.\n *\n * The matrix can synchronize a canvas context by supplying the context\n * as an argument, or later apply current absolute transform to an\n * existing context.\n *\n * All values are handled as floating point values.\n *\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\n * @prop {number} a - scale x\n * @prop {number} b - shear y\n * @prop {number} c - shear x\n * @prop {number} d - scale y\n * @prop {number} e - translate x\n * @prop {number} f - translate y\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\n * @constructor\n */\n\nconst Matrix = (function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\n ._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\n ._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2;\n // }\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n\n /* matrix order (canvas compatible):\n * ace\n * bdf\n * 001\n */\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n\n this._identityCalculated = false;\n return this;\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n i += 1;\n }\n return true;\n }\n\n function clone(matr) {\n var i;\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14],\n };\n /* return {\n x: x * me.a + y * me.c + me.e,\n y: x * me.b + y * me.d + me.f\n }; */\n }\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [\n x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14],\n ];\n }\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n /* if(this.isIdentity()) {\n return '';\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n if ((val < 0.000001 && val > 0) || (val > -0.000001 && val < 0)) {\n return _rnd(val * v) / v;\n }\n return val;\n }\n\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n /* if(this.isIdentity()) {\n return '';\n } */\n var props = this.props;\n var _a = roundMatrixProperty(props[0]);\n var _b = roundMatrixProperty(props[1]);\n var _c = roundMatrixProperty(props[4]);\n var _d = roundMatrixProperty(props[5]);\n var _e = roundMatrixProperty(props[12]);\n var _f = roundMatrixProperty(props[13]);\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n}());\n\nvar standalone = '__[STANDALONE]__';\nvar animationData = '__[ANIMATIONDATA]__';\nvar renderer = '';\n\nfunction setLocation(href) {\n setLocationHref(href);\n}\n\nfunction searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n}\n\nfunction setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n}\n\nfunction setPrefix(prefix) {\n setIdPrefix(prefix);\n}\n\nfunction loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n return animationManager.loadAnimation(params);\n}\n\nfunction setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n}\n\nfunction inBrowser() {\n return typeof navigator !== 'undefined';\n}\n\nfunction installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n}\n\nfunction getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n case 'matrix':\n return Matrix;\n default:\n return null;\n }\n}\n\nlottie.play = animationManager.play;\nlottie.pause = animationManager.pause;\nlottie.setLocationHref = setLocation;\nlottie.togglePause = animationManager.togglePause;\nlottie.setSpeed = animationManager.setSpeed;\nlottie.setDirection = animationManager.setDirection;\nlottie.stop = animationManager.stop;\nlottie.searchAnimations = searchAnimations;\nlottie.registerAnimation = animationManager.registerAnimation;\nlottie.loadAnimation = loadAnimation;\nlottie.setSubframeRendering = setSubframeRendering;\nlottie.resize = animationManager.resize;\n// lottie.start = start;\nlottie.goToAndStop = animationManager.goToAndStop;\nlottie.destroy = animationManager.destroy;\nlottie.setQuality = setQuality;\nlottie.inBrowser = inBrowser;\nlottie.installPlugin = installPlugin;\nlottie.freeze = animationManager.freeze;\nlottie.unfreeze = animationManager.unfreeze;\nlottie.setVolume = animationManager.setVolume;\nlottie.mute = animationManager.mute;\nlottie.unmute = animationManager.unmute;\nlottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\nlottie.useWebWorker = setWebWorker;\nlottie.setIDPrefix = setPrefix;\nlottie.__getFactory = getFactory;\nlottie.version = '[[BM_VERSION]]';\n\nfunction checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n}\n\nfunction getQueryVariable(variable) {\n var vars = queryString.split('&');\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n if (decodeURIComponent(pair[0]) == variable) { // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n return null;\n}\nvar queryString = '';\nif (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: '',\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n renderer = getQueryVariable('renderer');\n}\nvar readyStateCheckInterval = setInterval(checkReady, 100);\n\n// this adds bodymovin to the window object for backwards compatibility\ntry {\n if (!(typeof exports === 'object' && typeof module !== 'undefined')\n && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n} catch (err) {\n //\n}\n\nconst ShapeModifiers = (function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n}());\n\nfunction ShapeModifier() {}\nShapeModifier.prototype.initModifierProperties = function () {};\nShapeModifier.prototype.addShapeToModifier = function () {};\nShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = { shape: data.sh, data: data, localShapeCollection: shapeCollectionPool.newShapeCollection() };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n};\nShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n};\nShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n};\n\nextendPrototype([DynamicPropertyContainer], ShapeModifier);\n\nfunction TrimModifier() {\n}\nextendPrototype([ShapeModifier], TrimModifier);\nTrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n};\n\nTrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n};\n\nTrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n if (e <= 1) {\n segments.push({\n s: s,\n e: e,\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1,\n });\n } else {\n segments.push({\n s: s,\n e: 1,\n });\n segments.push({\n s: 0,\n e: e - 1,\n });\n }\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = ((segmentOb.e * totalModifierLength - addedLength) / shapeLength);\n }\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n return shapeSegments;\n};\n\nTrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n pathsData.length = 0;\n return pathsData;\n};\n\nTrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n if (this._mdf || _isFirstFrame) {\n var o = (this.o.v % 360) / 360;\n if (o < 0) {\n o += 1;\n }\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!((e === 1 && s === 0) || (e === 0 && s === 1))) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes();\n // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n jLen = edges.length;\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE,\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1),\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength,\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1),\n });\n }\n var newShapesData = this.addShapes(shapeData, segments[0]);\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n};\n\nTrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n};\n\nTrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n};\n\nTrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n};\n\nTrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n shapes.push(shapePath);\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n if (addedLength > shapeSegment.e) {\n break;\n }\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n return shapes;\n};\n\nfunction PuckerAndBloatModifier() {}\nextendPrototype([ShapeModifier], PuckerAndBloatModifier);\nPuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n};\n\nPuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n return clonedPath;\n};\n\nPuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n};\n\nconst TransformPropertyFactory = (function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\n .rotateY(this.or.v[1])\n .rotateX(this.or.v[0]);\n }\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\n .rotateY(this.or.v[1])\n .rotateX(this.or.v[0]);\n }\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t / frameRate), 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[0].t) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[0].t) / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t / frameRate), 0);\n v1[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t / frameRate), 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n if (!this.a.k) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\n .rotateY(this.or.v[1])\n .rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {\n //\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix();\n // Precalculated matrix with non animated properties\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || { k: [0, 0, 0] }, 1, 0, this);\n }\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\n // sh Indicates it needs to be capped between -180 and 180\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this);\n }\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n this.a = PropertyFactory.getProp(elem, data.a || { k: [0, 0, 0] }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || { k: [100, 100, 100] }, 1, 0.01, this);\n // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = { _mdf: false, v: 1 };\n }\n this._isDirty = true;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient,\n };\n\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty,\n };\n}());\n\nfunction RepeaterModifier() {}\nextendPrototype([ShapeModifier], RepeaterModifier);\n\nRepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n};\n\nRepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n};\n\nRepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n while (pos > 0) {\n pos -= 1;\n // this._elements.unshift(arr.splice(pos,1)[0]);\n this._elements.unshift(arr[pos]);\n }\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n};\n\nRepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n};\n\nRepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n};\n\nRepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n};\n\nRepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr',\n };\n group.it.push({\n a: { a: 0, ix: 1, k: [0, 0] }, nm: 'Transform', o: { a: 0, ix: 7, k: 100 }, p: { a: 0, ix: 2, k: [0, 0] }, r: { a: 1, ix: 6, k: [{ s: 0, e: 0, t: 0 }, { s: 0, e: 0, t: 1 }] }, s: { a: 0, ix: 3, k: [100, 100] }, sa: { a: 0, ix: 5, k: 0 }, sk: { a: 0, ix: 4, k: 0 }, ty: 'tr',\n });\n\n this.arr.splice(0, 0, group);\n this._groups.splice(0, 0, group);\n this._currentCopies += 1;\n }\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n cont = 0;\n var renderFlag;\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n cont += 1;\n }\n\n this._currentCopies = copies;\n /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1\n ? this.so.v\n : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if ((i !== 0 && dir === 1) || (i !== this._currentCopies - 1 && dir === -1)) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n this.matrix.reset();\n } else {\n this.matrix.reset();\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n return hasReloaded;\n};\n\nRepeaterModifier.prototype.addShape = function () {};\n\nfunction RoundCornersModifier() {}\nextendPrototype([ShapeModifier], RoundCornersModifier);\nRoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n};\n\nRoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\n clonedPath.o[index] = currentO;\n clonedPath.i[index] = currentI; */\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n return clonedPath;\n};\n\nRoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n};\n\nfunction getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n\n var fWeight = 'normal'; var\n fStyle = 'normal';\n var len = styles.length;\n var styleName;\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n case 'bold':\n fWeight = '700';\n break;\n case 'black':\n fWeight = '900';\n break;\n case 'medium':\n fWeight = '500';\n break;\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight,\n };\n}\n\nconst FontManager = (function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: [],\n },\n };\n var combinedCharacters = [];\n // Hindi characters\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366,\n 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379,\n 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n\n var surrogateModifiers = [\n 'd83cdffb',\n 'd83cdffc',\n 'd83cdffd',\n 'd83cdffe',\n 'd83cdfff',\n ];\n\n var zeroWidthJoiner = [65039, 8205];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span');\n // Node is invisible to screen readers.\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span');\n // Characters that vary significantly among different fonts\n node.innerText = 'giItT1WQy@!-/#';\n // Visible - so we can measure it - but not on the screen\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px';\n // Large font size makes even subtle changes obvious\n parentNode.style.fontSize = '300px';\n // Reset any font properties\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode);\n\n // Remember width with no applied web font\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return { node: node, w: width, parent: parentNode };\n }\n\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(fontData, def) {\n var engine = (document.body && def) ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px';\n // tHelper.style.fontFamily = fontData.fFamily;\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n return helper.measureText(text).width;\n }\n return {\n measureText: measure,\n };\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach((data) => {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n if (!this.chars) {\n this.chars = [];\n }\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n j += 1;\n }\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(char, style, font) {\n var i = 0;\n var len = this.chars.length;\n while (i < len) {\n if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n i += 1;\n }\n if (((typeof char === 'string' && char.charCodeAt(0) !== 13) || !char)\n && console\n && console.warn // eslint-disable-line no-console\n && !this._warned\n ) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', char, style, font); // eslint-disable-line no-console\n }\n return emptyChar;\n }\n\n function measureText(char, fontName, size) {\n var fontData = this.getFontByName(fontName);\n var index = char.charCodeAt(0);\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper;\n if (char === ' ') {\n var doubleSize = tHelper.measureText('|' + char + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index + 1] = tHelper.measureText(char) / 100;\n }\n }\n return fontData.cache[index + 1] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n i += 1;\n }\n return this.fonts[0];\n }\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n if (!secondCharCode) {\n return firstCharCode === zeroWidthJoiner[1];\n }\n return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\n }\n\n function isCombinedCharacter(char) {\n return combinedCharacters.indexOf(char) !== -1;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function () {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isCombinedCharacter = isCombinedCharacter;\n\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded,\n };\n\n Font.prototype = fontPrototype;\n\n return Font;\n}());\n\nfunction RenderableElement() {\n\n}\n\nRenderableElement.prototype = {\n initRenderable: function () {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false;\n // layer's display state\n this.hidden = false;\n // If layer's transparency equals 0, it can be hidden\n this.isTransparent = false;\n // list of animated components\n this.renderableComponents = [];\n },\n addRenderableComponent: function (component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function (component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function (num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function () {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n /**\n * @function\n * Initializes frame related properties.\n *\n * @param {number} num\n * current frame number in Layer's time\n *\n */\n checkLayerLimits: function (num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function () {\n var i;\n var len = this.renderableComponents.length;\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n },\n sourceRectAtTime: function () {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100,\n };\n },\n getLayerSize: function () {\n if (this.data.ty === 5) {\n return { w: this.data.textData.width, h: this.data.textData.height };\n }\n return { w: this.data.width, h: this.data.height };\n },\n};\n\nconst MaskManagerInterface = (function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function () {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n return this._mask.prop;\n },\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function () {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n return this._mask.op.v * 100;\n },\n });\n\n var MaskManager = function (maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n var i;\n var len = maskManager.viewData.length;\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function (name) {\n i = 0;\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n i += 1;\n }\n return null;\n };\n return maskFunction;\n };\n return MaskManager;\n}());\n\nconst ExpressionPropertyInterface = (function () {\n var defaultUnidimensionalValue = { pv: 0, v: 0, mult: 1 };\n var defaultMultidimensionalValue = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function () {\n return property.getVelocityAtTime(property.comp.currentFrame);\n },\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n var value = '';\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n\n return function () {\n if (property.k) {\n property.getValue();\n }\n val = property.v * mult;\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n var mult = 1 / property.mult;\n var len = (property.data && property.data.l) || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n\n return function () {\n if (property.k) {\n property.getValue();\n }\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n return expressionValue;\n };\n }\n\n // TODO: try to avoid using this getter\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n } if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n return MultidimensionalPropertyInterface(property);\n };\n}());\n\nconst TransformExpressionInterface = (function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n default:\n return null;\n }\n }\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz),\n });\n\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r),\n });\n\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx),\n });\n\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry),\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s),\n });\n var _px;\n var _py;\n var _pz;\n var _transformFactory;\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n Object.defineProperty(_thisFunction, 'position', {\n get: function () {\n if (transform.p) {\n return _transformFactory();\n }\n return [\n _px(),\n _py(),\n _pz ? _pz() : 0];\n },\n });\n\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px),\n });\n\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py),\n });\n\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz),\n });\n\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a),\n });\n\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o),\n });\n\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk),\n });\n\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa),\n });\n\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or),\n });\n\n return _thisFunction;\n };\n}());\n\nconst LayerExpressionInterface = (function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n return toWorldMat;\n }\n\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n return toWorldMat.inversePoint(arr);\n }\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n default:\n return null;\n }\n }\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function () {\n return elem.hierarchy.length;\n },\n },\n parent: {\n get: function () {\n return elem.hierarchy[0].layerInterface;\n },\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function () {\n return transformInterface;\n },\n },\n active: {\n get: function () {\n return elem.isInRange;\n },\n },\n });\n\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n}());\n\nconst propertyGroupFactory = (function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n }\n return parentPropertyGroup(val - 1);\n };\n };\n}());\n\nconst PropertyInterface = (function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName,\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n }\n return propertyGroup(val - 1);\n }\n\n return _propertyGroup;\n };\n}());\n\nconst EffectsExpressionInterface = (function () {\n var ob = {\n createEffectsInterface: createEffectsInterface,\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n var groupInterface = function (name) {\n i = 0;\n len = effects.length;\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n i += 1;\n }\n return null;\n };\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function () {\n return effects.length;\n },\n });\n return groupInterface;\n }\n return null;\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n return effectElements[i]();\n }\n i += 1;\n }\n throw new Error();\n }\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i;\n var len = data.ef.length;\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function () {\n return effectElements[0]();\n },\n });\n }\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function () {\n return data.np;\n },\n },\n _name: { value: data.nm },\n propertyGroup: { value: _propertyGroup },\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n}());\n\nconst CompExpressionInterface = (function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n i += 1;\n }\n return null;\n // return {active:false};\n }\n Object.defineProperty(_thisLayerFunction, '_name', { value: comp.data.nm });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n}());\n\nconst ShapePathInterface = (\n\n function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function () {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n },\n },\n shape: {\n get: function () {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n },\n },\n _name: { value: shape.nm },\n ix: { value: shape.ix },\n propertyIndex: { value: shape.ix },\n mn: { value: shape.mn },\n propertyGroup: { value: propertyGroup },\n });\n return interfaceFunction;\n };\n }()\n);\n\nconst ShapeExpressionInterface = (function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {\n // arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n i += 1;\n }\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n return null;\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n default:\n return interfaceFunction.transform;\n }\n };\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function () {\n return shape.nm;\n },\n });\n // interfaceFunction.content = interfaceFunction;\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n } if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c),\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o),\n },\n _name: { value: shape.nm },\n mn: { value: shape.mn },\n });\n\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s),\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e),\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o),\n },\n type: {\n get: function () {\n return 'a';\n },\n },\n _name: { value: shape.nm },\n mn: { value: shape.mn },\n });\n\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p),\n });\n }\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n } if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n } if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c),\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o),\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w),\n },\n dash: {\n get: function () {\n return dashOb;\n },\n },\n _name: { value: shape.nm },\n mn: { value: shape.mn },\n });\n\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s),\n },\n end: {\n get: ExpressionPropertyInterface(view.e),\n },\n offset: {\n get: ExpressionPropertyInterface(view.o),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n if ((shape.sk && shape.sk.ix === value) || value === 'Skew') {\n return interfaceFunction.skew;\n }\n if ((shape.sa && shape.sa.ix === value) || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o),\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p),\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a),\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s),\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r),\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk),\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s),\n },\n position: {\n get: ExpressionPropertyInterface(prop.p),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p),\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r),\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt),\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or),\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os),\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir),\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p),\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r),\n },\n size: {\n get: ExpressionPropertyInterface(prop.s),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n } if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c),\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o),\n },\n _name: { value: shape.nm },\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n if (value === 0) {\n return propertyGroup;\n }\n return interfaces[value - 1];\n }\n var i = 0;\n var len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n i += 1;\n }\n return null;\n }\n function parentGroupWrapper() {\n return propertyGroup;\n }\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n}());\n\nconst TextExpressionInterface = (function () {\n return function (elem) {\n var _prevValue;\n var _sourceText;\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n default:\n return null;\n }\n }\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function () {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n if (stringValue !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n }\n return _sourceText;\n },\n });\n return _thisLayerFunction;\n };\n}());\n\nconst getBlendMode = (function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity',\n };\n\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n}());\n\nfunction SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n}\nfunction PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n}\nfunction LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n}\nfunction NoValueEffect() {\n this.p = {};\n}\n\nfunction EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n}\n\nfunction GroupEffect(data, element) {\n this.init(data, element);\n}\n\nextendPrototype([DynamicPropertyContainer], GroupEffect);\n\nGroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\nGroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n for (i = 0; i < len; i += 1) {\n eff = null;\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n};\n\nfunction BaseElement() {\n}\n\nBaseElement.prototype = {\n checkMasks: function () {\n if (!this.data.hasMask) {\n return false;\n }\n var i = 0;\n var len = this.data.masksProperties.length;\n while (i < len) {\n if ((this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false)) {\n return true;\n }\n i += 1;\n }\n return false;\n },\n initExpressions: function () {\n this.layerInterface = LayerExpressionInterface(this);\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function () {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function (data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID();\n\n // Stretch factor for old animations missing this property.\n if (!this.data.sr) {\n this.data.sr = 1;\n }\n // effects manager\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function () {\n return this.type;\n },\n sourceRectAtTime: function () {},\n};\n\n/**\n * @file\n * Handles element's layer frame update.\n * Checks layer in point and out point\n *\n */\n\nfunction FrameElement() {}\n\nFrameElement.prototype = {\n /**\n * @function\n * Initializes frame related properties.\n *\n */\n initFrame: function () {\n // set to true when inpoint is rendered\n this._isFirstFrame = false;\n // list of animated properties\n this.dynamicProperties = [];\n // If layer has been modified in current tick this will be true\n this._mdf = false;\n },\n /**\n * @function\n * Calculates all dynamic values\n *\n * @param {number} num\n * current frame number in Layer's time\n * @param {boolean} isVisible\n * if layers is currently in range\n *\n */\n prepareProperties: function (num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n if (isVisible || (this._isParent && this.dynamicProperties[i].propType === 'transform')) {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function (prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n },\n};\n\nconst FootageInterface = (function () {\n var outlineInterfaceFactory = (function (elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n if (typeof currentProperty === 'object') {\n return searchProperty;\n }\n return currentProperty;\n }\n var propertyNameIndex = value.indexOf(currentPropertyName);\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n if (typeof currentProperty === 'object') {\n return searchProperty;\n }\n return currentProperty;\n }\n return '';\n }\n return init;\n });\n\n var dataInterfaceFactory = function (elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n return null;\n }\n\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n return null;\n }\n\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n}());\n\nfunction FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n}\n\nFootageElement.prototype.prepareFrame = function () {\n};\n\nextendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\nFootageElement.prototype.getBaseElement = function () {\n return null;\n};\n\nFootageElement.prototype.renderFrame = function () {\n};\n\nFootageElement.prototype.destroy = function () {\n};\n\nFootageElement.prototype.initExpressions = function () {\n this.layerInterface = FootageInterface(this);\n};\n\nFootageElement.prototype.getFootageData = function () {\n return this.footageData;\n};\n\nfunction AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : { k: [100] }, 1, 0.01, this);\n}\n\nAudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n};\n\nextendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\nAudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing()\n || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1\n ) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n};\n\nAudioElement.prototype.show = function () {\n // this.audio.play()\n};\n\nAudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n};\n\nAudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n};\n\nAudioElement.prototype.resume = function () {\n this._canPlay = true;\n};\n\nAudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n};\n\nAudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n};\n\nAudioElement.prototype.getBaseElement = function () {\n return null;\n};\n\nAudioElement.prototype.destroy = function () {\n};\n\nAudioElement.prototype.sourceRectAtTime = function () {\n};\n\nAudioElement.prototype.initExpressions = function () {\n};\n\nfunction BaseRenderer() {}\nBaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n if (data.ip - data.st <= (num - this.layers[i].st) && data.op - data.st > (num - this.layers[i].st)) {\n this.buildItem(i);\n }\n }\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n this.checkPendingElements();\n};\n\nBaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n case 0:\n return this.createComp(layer);\n case 1:\n return this.createSolid(layer);\n case 3:\n return this.createNull(layer);\n case 4:\n return this.createShape(layer);\n case 5:\n return this.createText(layer);\n case 6:\n return this.createAudio(layer);\n case 13:\n return this.createCamera(layer);\n case 15:\n return this.createFootage(layer);\n default:\n return this.createNull(layer);\n }\n};\n\nBaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n};\n\nBaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n};\n\nBaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n};\n\nBaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n this.checkPendingElements();\n};\n\nBaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n for (i = 0; i < len; i += 1) {\n j = 0;\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n j += 1;\n }\n }\n};\n\nBaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n};\n\nBaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n};\nBaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n while (i < len) {\n if (layers[i].ind == parentName) { // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n i += 1;\n }\n};\n\nBaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n};\n\nBaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n};\n\nBaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n if (path.length === 0) {\n return element;\n }\n return element.getElementByPath(path);\n};\n\nBaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h,\n };\n};\n\nfunction TransformElement() {}\n\nTransformElement.prototype = {\n initTransform: function () {\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 },\n _matMdf: false,\n _opMdf: false,\n mat: new Matrix(),\n };\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n }\n\n // TODO: check TYPE 11: Guided elements\n if (this.data.ty !== 11) {\n // this.createElements();\n }\n },\n renderTransform: function () {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length;\n // Checking if any of the transformation matrices in the hierarchy chain has changed.\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n }\n }\n },\n globalToLocal: function (pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n var i;\n var len = transforms.length;\n var ptNew;\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\n // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n return pt;\n },\n mHelper: new Matrix(),\n};\n\nfunction MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n for (i = 0; i < len; i += 1) {\n if ((properties[i].mode !== 'a' && properties[i].mode !== 'n') || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: '',\n };\n defs.appendChild(path);\n } else {\n count += 1;\n\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n }\n\n // TODO move this to a factory or to a constructor\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0,\n };\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n }\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect,\n };\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n\n len = currentMasks.length;\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n}\n\nMaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n};\n\nMaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n};\n\nMaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n};\n\nMaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n};\n\nMaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n }\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n }\n // pathNodes.__renderedString = pathString;\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n viewData.lastPath = pathString;\n }\n};\n\nMaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n};\n\nconst filtersFactory = (function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n}());\n\nconst featureSupport = (function () {\n var ob = {\n maskType: true,\n };\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n return ob;\n}());\n\nvar registeredEffects = {};\nvar idPrefix = 'filter_result_';\n\nfunction SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n if (registeredEffects[type].countsAsEffect) {\n count += 1;\n }\n }\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n}\n\nSVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n};\n\nfunction registerEffect(id, effect, countsAsEffect) {\n registeredEffects[id] = {\n effect,\n countsAsEffect,\n };\n}\n\nfunction SVGBaseElement() {\n}\n\nSVGBaseElement.prototype = {\n initRendererElement: function () {\n this.layerElement = createNS('g');\n },\n createContainerElements: function () {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null;\n // If this layer acts as a mask for the following layer\n var filId;\n var fil;\n var gg;\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) { // eslint-disable-line eqeqeq\n var masker = createNS('mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker);\n // This is only for IE and Edge when mask if of type alpha\n if (!featureSupport.maskType && this.data.td == 1) { // eslint-disable-line eqeqeq\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (this.data.td == 2) { // eslint-disable-line eqeqeq\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', this.layerId);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n /// /\n\n // This solution doesn't work on Android when meta tag with viewport attribute is set\n /* var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\n fil.appendChild(feColorMatrix); */\n /// /\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc);\n /// /\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n maskGrouper.appendChild(this.layerElement);\n layerElementParent = maskGrouper;\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n this.globalData.defs.appendChild(maskGroup);\n }\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function () {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n }\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\n }\n },\n destroyBaseElement: function () {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function () {\n if (this.data.hd) {\n return null;\n }\n return this.baseElement;\n },\n createRenderableComponents: function () {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n },\n setMatte: function (id) {\n if (!this.matteElement) {\n return;\n }\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n },\n};\n\n/**\n * @file\n * Handles AE's layer parenting property.\n *\n */\n\nfunction HierarchyElement() {}\n\nHierarchyElement.prototype = {\n /**\n * @function\n * Initializes hierarchy properties\n *\n */\n initHierarchy: function () {\n // element's parent list\n this.hierarchy = [];\n // if element is parent of another layer _isParent will be true\n this._isParent = false;\n this.checkParenting();\n },\n /**\n * @function\n * Sets layer's hierarchy.\n * @param {array} hierarch\n * layer's parent list\n *\n */\n setHierarchy: function (hierarchy) {\n this.hierarchy = hierarchy;\n },\n /**\n * @function\n * Sets layer as parent.\n *\n */\n setAsParent: function () {\n this._isParent = true;\n },\n /**\n * @function\n * Searches layer's parenting chain\n *\n */\n checkParenting: function () {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n },\n};\n\nfunction RenderableDOMElement() {}\n\n(function () {\n var _prototype = {\n initElement: function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function () {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function () {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function () {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function () {},\n prepareFrame: function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function () {\n this.innerElem = null;\n this.destroyBaseElement();\n },\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n}());\n\nfunction IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0, left: 0, width: this.assetData.w, height: this.assetData.h,\n };\n}\n\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\nIImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n\n this.layerElement.appendChild(this.innerElem);\n};\n\nIImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n};\n\nfunction ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n}\n\nfunction IShapeElement() {\n}\n\nIShapeElement.prototype = {\n addShapeToModifiers: function (data) {\n var i;\n var len = this.shapeModifiers.length;\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function (data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n return false;\n },\n renderModifiers: function () {\n if (!this.shapeModifiers.length) {\n return;\n }\n var i;\n var len = this.shapes.length;\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);\n // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n\n searchProcessedElement: function (elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n i += 1;\n }\n return 0;\n },\n addProcessedElement: function (elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n while (i) {\n i -= 1;\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function (num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n },\n};\n\nconst lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square',\n};\n\nconst lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel',\n};\n\nfunction SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level;\n // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n this._isAnimated = !!shape.k;\n // TODO: commenting this for now since all shapes are animated\n var i = 0;\n var len = transformers.length;\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n i += 1;\n }\n}\n\nSVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n};\n\nfunction SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n}\n\nSVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n};\n\nfunction DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = { n: data[i].n, p: prop };\n }\n if (!this.k) {\n this.getValue(true);\n }\n this._isAnimated = this.k;\n}\n\nDashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n};\nextendPrototype([DynamicPropertyContainer], DashProperty);\n\nfunction SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n}\n\nextendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\nfunction SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n}\n\nextendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\nfunction SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n}\n\nextendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\nfunction GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? (data.k.k[0].s.length - data.p * 4) : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n}\n\nGradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n if (diff > 0.01) {\n return false;\n }\n i += 1;\n }\n return true;\n};\n\nGradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n return true;\n};\n\nGradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n if (this.o.length) {\n len = this.prop.v.length;\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n this._mdf = !forceRender;\n }\n};\n\nextendPrototype([DynamicPropertyContainer], GradientProperty);\n\nfunction SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n}\n\nSVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || { k: 0 }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || { k: 0 }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n};\n\nSVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n};\n\nSVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n};\n\nextendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\nfunction SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n}\n\nextendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\nfunction ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n}\n\nfunction SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container,\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n}\n\nconst buildShapeString = function (pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n return shapeString;\n};\n\nconst SVGElementsRenderer = (function () {\n var _identityMatrix = new Matrix();\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction,\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n case 'gf':\n return renderGradient;\n case 'gs':\n return renderGradientStroke;\n case 'st':\n return renderStroke;\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n case 'tr':\n return renderContentTransform;\n case 'no':\n return renderNoop;\n default:\n return null;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderNoop() {\n\n }\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var props;\n var iterations;\n var k;\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (iterations > 0) {\n props = itemData.transformers[k].mProps.v.props;\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n paths = itemData.sh.paths;\n jLen = paths._length;\n if (redraw) {\n pathStringTransformed = '';\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n var stops;\n var i;\n var len;\n var stop;\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n\n var percent = itemData.h.v;\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n }\n // gfill.setAttribute('fy','200');\n }\n }\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n}());\n\nfunction SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = [];\n // Full shape data\n this.shapesData = data.shapes;\n // List of styles that will be applied to shapes\n this.stylesList = [];\n // List of modifiers that will be applied to shapes\n this.shapeModifiers = [];\n // List of items in shape tree\n this.itemsData = [];\n // List of items in previous shape tree\n this.processedElements = [];\n // List of animated components\n this.animatedContents = [];\n this.initElement(data, globalData, comp);\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n this.prevViewData = [];\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n}\n\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\nSVGShapeElement.prototype.initSecondaryElement = function () {\n};\n\nSVGShapeElement.prototype.identityMatrix = new Matrix();\n\nSVGShapeElement.prototype.buildExpressionInterface = function () {};\n\nSVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n};\n\n/*\nThis method searches for multiple shapes that affect a single element and one of them is animated\n*/\nSVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n};\n\nSVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n};\n\nSVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n\n var pathElement = styleOb.pElem;\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n};\n\nSVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n return elementData;\n};\n\nSVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n};\n\nSVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n};\n\nSVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n i += 1;\n }\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data,\n });\n};\n\nSVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n};\n\nSVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n};\n\nSVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n len = ownStyles.length;\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n};\n\nSVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n this.renderShape();\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);\n // Adding M0 0 fixes same mask bug on all browsers\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n};\n\nSVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n};\n\nSVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n};\n\nfunction LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true,\n };\n}\n\nLetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n return updated;\n};\n\nfunction TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false,\n\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n}\n\nTextProperty.prototype.defaultBoxWidth = [0, 0];\n\nTextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n return obj;\n};\n\nTextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n};\n\nTextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n};\n\nTextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n return this.kf;\n};\n\nTextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n};\n\nTextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var i; var\n len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n};\n\nTextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0; var\n len = textKeys.length;\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n i += 1;\n }\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n return this.data.d.k[this.keysIndex].s;\n};\n\nTextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n while (i < len) {\n charCode = text.charCodeAt(i);\n if (FontManager.isCombinedCharacter(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n shouldCombine = false;\n } else {\n charactersArray.push(text.substr(i, 2));\n }\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n shouldCombine = true;\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n shouldCombine = true;\n } else {\n charactersArray.push(text.charAt(i));\n }\n i += 1;\n }\n return charactersArray;\n};\n\nTextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i; var\n len;\n var newLineFlag; var index = 0; var\n val;\n var anchorGrouping = data.m.g;\n var currentSize = 0; var currentPos = 0; var currentLine = 0; var\n lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j; var\n jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData; var\n cLength = 0;\n\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = (documentData.tr / 1000) * documentData.finalSize;\n var charCode;\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight; var\n finalText;\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = (documentData.tr / 1000) * documentData.finalSize;\n var lastSpaceIndex = -1;\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : (charData.w * documentData.finalSize) / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r');\n // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n currentHeight += (fontData.ascent * documentData.finalSize) / 100;\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = (documentData.finalSize * documentData.lh) / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : (charData.w * documentData.finalSize) / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n }\n\n //\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n letters.push({\n l: cLength, an: cLength, add: currentSize, n: newLineFlag, anIndexes: [], val: val, line: currentLine, animatorJustifyOffset: 0,\n });\n if (anchorGrouping == 2) { // eslint-disable-line eqeqeq\n currentSize += cLength;\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) { // eslint-disable-line eqeqeq\n currentSize += cLength;\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n default:\n documentData.justifyOffset = 0;\n }\n }\n documentData.lineWidths = lineWidths;\n\n var animators = data.a; var animatorData; var\n letterData;\n jLen = animators.length;\n var based; var ind; var\n indexes = [];\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n ind = 0;\n based = animatorData.s.b;\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n if ((based == 1 && letterData.val !== '') || (based == 2 && letterData.val !== '' && letterData.val !== ' ') || (based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1)) || (based == 4 && (letterData.n || i == len - 1))) { // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n ind += 1;\n }\n }\n data.a[j].s.totalChars = ind;\n var currentInd = -1; var\n newInd;\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n if (currentInd != letterData.anIndexes[j]) { // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = (fontData.ascent * documentData.finalSize) / 100;\n};\n\nTextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.elem.addDynamicProperty(this);\n};\n\nTextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n};\n\nTextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n};\n\nTextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n};\n\nconst TextSelectorProp = (function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || { k: 0 }, 0, 0, this);\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = { v: 100 };\n }\n this.o = PropertyFactory.getProp(elem, data.o || { k: 0 }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || { k: 0 }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || { k: 0 }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || { k: 100 }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function (ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - (x * x) / (a * a));\n }\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + (Math.cos((Math.PI + Math.PI * 2 * (ind) / (e - s))))) / 2; // eslint-disable-line\n }\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n mult = easer(mult);\n }\n // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n var threshold = 0.5 - smoothness * 0.5;\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n return mult * this.a.v;\n },\n getValue: function (newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = (this.e.v / divisor) + o;\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n this.finalS = s;\n this.finalE = e;\n },\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp,\n };\n}());\n\nfunction TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = { propType: false };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData,\n };\n\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n}\n\nfunction TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {},\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n}\n\nTextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m),\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n};\n\nTextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n if (this._pathData.r.v) {\n paths = paths.reverse();\n }\n // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n pathInfo = {\n tLength: 0,\n segments: [],\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i],\n paths.v[i + 1],\n [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n i = len;\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i],\n paths.v[0],\n [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n this._pathData.pi = pathInfo;\n }\n pathInfo = this._pathData.pi;\n\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n\n jLen = animators.length;\n\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO;\n\n //\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n isNewLine = false;\n }\n }\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n }\n //\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n default:\n break;\n }\n currentLine = letters[i].line;\n }\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n currentLength += (alignment[0] * letters[i].an) * 0.005;\n var animatorOffset = 0;\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n flag = true;\n // Force alignment only works with a single line for now\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + ((totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind) / (len - 1);\n currentLength += this._pathData.f.v;\n }\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate((-alignment[0] * letters[i].an) * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n\n // Grouping alignment\n matrixHelper.translate((-alignment[0] * letters[i].an) * 0.005, (-alignment[1] * yOff) * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult[0]), 1 + ((animatorProps.s.v[1] - 1) * mult[1]), 1);\n } else {\n matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult), 1 + ((animatorProps.s.v[1] - 1) * mult), 1);\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += ((animatorProps.o.v) * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += ((animatorProps.o.v) * mult - elemOpacity) * mult;\n }\n }\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n\n matrixHelper.translate(0, (alignment[1] * yOff) * 0.01 + yPos, 0);\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = (Math.atan(tanAngle) * 180) / Math.PI;\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n matrixHelper.rotate((-rot * Math.PI) / 180);\n }\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= (alignment[0] * letters[i].an) * 0.005;\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += (documentData.tr * 0.001) * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n default:\n break;\n }\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate((alignment[0] * letters[i].an) * 0.005, (alignment[1] * yOff) * 0.01, 0);\n xPos += letters[i].l + (documentData.tr * 0.001) * documentData.finalSize;\n }\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n};\n\nTextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n};\n\nTextAnimatorProperty.prototype.mHelper = new Matrix();\nTextAnimatorProperty.prototype.defaultPropsArray = [];\nextendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\nfunction ITextElement() {\n}\n\nITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n};\n\nITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n};\n\nITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n return shapeStr;\n};\n\nITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n};\n\nITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n};\n\nITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n};\n\nITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n matrixHelper.translate(0, -documentData.ls, 0);\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n default:\n break;\n }\n matrixHelper.translate(xPos, yPos, 0);\n};\n\nITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n};\n\nITextElement.prototype.emptyProp = new LetterProps();\n\nITextElement.prototype.destroy = function () {\n\n};\n\nvar emptyShapeData = {\n shapes: [],\n};\n\nfunction SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n}\n\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\nSVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n};\n\nSVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n i += 1;\n }\n textContents.push(currentTextContent);\n return textContents;\n};\n\nSVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n return data;\n};\n\nSVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n this.layerElement.setAttribute('aria-label', documentData.t);\n\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n case 2:\n justify = 'middle';\n break;\n default:\n justify = 'start';\n break;\n }\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null,\n };\n }\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null,\n };\n }\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0;\n // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n xPos += trackingOffset;\n }\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(\n documentData.finalText[i],\n fontData.fStyle,\n this.globalData.fontManager.getFontByName(documentData.f).fFamily\n );\n var glyphElement;\n // t === 1 means the character has been replaced with an animated shaped\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement);\n // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n }\n //\n }\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n};\n\nSVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height,\n };\n }\n return this.bbox;\n};\n\nSVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n};\n\nSVGTextLottieElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n\n var letters = this.textProperty.currentData.l;\n\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n};\n\nfunction ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n}\nextendPrototype([IImageElement], ISolidElement);\n\nISolidElement.prototype.createContent = function () {\n var rect = createNS('rect');\n /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n};\n\nfunction NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n}\n\nNullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n};\n\nNullElement.prototype.renderFrame = function () {\n};\n\nNullElement.prototype.getBaseElement = function () {\n return null;\n};\n\nNullElement.prototype.destroy = function () {\n};\n\nNullElement.prototype.sourceRectAtTime = function () {\n};\n\nNullElement.prototype.hide = function () {\n};\n\nextendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\nfunction SVGRendererBase() {\n}\n\nextendPrototype([BaseRenderer], SVGRendererBase);\n\nSVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n};\n\nSVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);\n // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n this.animationItem.wrapper.appendChild(this.svgElement);\n // Mask animation\n var defs = this.globalData.defs;\n\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n};\n\nSVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n};\n\nSVGRendererBase.prototype.updateContainerSize = function () {\n};\n\nSVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n\n elements[pos] = element;\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n element.initExpressions();\n }\n this.appendElementInPos(element, pos);\n if (this.layers[pos].tt) {\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n};\n\nSVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n i += 1;\n }\n }\n }\n};\n\nSVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n }\n // console.log('-------');\n // console.log('FRAME ',num);\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n};\n\nSVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n if (!newElement) {\n return;\n }\n var i = 0;\n var nextElement;\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n i += 1;\n }\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n};\n\nSVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n};\n\nSVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n};\n\nfunction ICompElement() {}\n\nextendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\nICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n this.hide();\n};\n\n/* ICompElement.prototype.hide = function(){\n if(!this.hidden){\n this.hideElement();\n var i,len = this.elements.length;\n for( i = 0; i < len; i+=1 ){\n if(this.elements[i]){\n this.elements[i].hide();\n }\n }\n }\n}; */\n\nICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n var i;\n var len = this.elements.length;\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n }\n // This iteration needs to be backwards because of how expressions connect between each other\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n};\n\nICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n};\n\nICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n};\n\nICompElement.prototype.getElements = function () {\n return this.elements;\n};\n\nICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n};\n\nICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n};\n\nfunction SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\n}\n\nextendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\nSVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n};\n\nfunction SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\n imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\n contentVisibility: (config && config.contentVisibility) || 'visible',\n progressiveLoad: (config && config.progressiveLoad) || false,\n hideOnTransparent: !((config && config.hideOnTransparent === false)),\n viewBoxOnly: (config && config.viewBoxOnly) || false,\n viewBoxSize: (config && config.viewBoxSize) || false,\n className: (config && config.className) || '',\n id: (config && config.id) || '',\n focusable: config && config.focusable,\n filterSize: {\n width: (config && config.filterSize && config.filterSize.width) || '100%',\n height: (config && config.filterSize && config.filterSize.height) || '100%',\n x: (config && config.filterSize && config.filterSize.x) || '0%',\n y: (config && config.filterSize && config.filterSize.y) || '0%',\n },\n width: (config && config.width),\n height: (config && config.height),\n };\n\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig,\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n}\n\nextendPrototype([SVGRendererBase], SVGRenderer);\n\nSVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n};\n\nfunction CVContextData() {\n this.saved = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n this.cO = 1;\n var i;\n var len = 15;\n this.savedOp = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n this._length = len;\n}\n\nCVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var currentSavedOp = this.savedOp;\n this.savedOp = createTypedArray('float32', newLength);\n this.savedOp.set(currentSavedOp);\n var i = 0;\n for (i = this._length; i < newLength; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n this._length = newLength;\n};\n\nCVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.cO = 1;\n};\n\nfunction ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n}\n\nShapeTransformManager.prototype = {\n addTransformSequence: function (transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n var sequence = this.sequences[key];\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false,\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n return sequence;\n },\n processSequence: function (sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n i += 1;\n }\n if (_mdf) {\n var props;\n sequence.finalTransform.reset();\n for (i = len - 1; i >= 0; i -= 1) {\n props = sequence.transforms[i].transform.mProps.v.props;\n sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n }\n }\n sequence._mdf = _mdf;\n },\n processSequences: function (isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function () {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n },\n};\n\nfunction CVEffects() {\n\n}\nCVEffects.prototype.renderFrame = function () {};\n\nfunction CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n this.hasMasks = hasMasks;\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n}\n\nCVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n this.element.globalData.renderer.save(true);\n ctx.clip();\n};\n\nCVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\nCVMaskElement.prototype.destroy = function () {\n this.element = null;\n};\n\nfunction CVBaseElement() {\n}\n\nCVBaseElement.prototype = {\n createElements: function () {},\n initRendererElement: function () {},\n createContainerElements: function () {\n this.canvasContext = this.globalData.canvasContext;\n this.renderableEffectsManager = new CVEffects(this);\n },\n createContent: function () {},\n setBlendMode: function () {\n var globalData = this.globalData;\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function () {\n this.maskManager = new CVMaskElement(this.data, this);\n },\n hideElement: function () {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function () {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n renderFrame: function () {\n if (this.hidden || this.data.hd) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function () {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix(),\n};\nCVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\nCVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\nfunction CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: [],\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n}\n\nCVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\nfunction CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n}\n\nextendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n\nCVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n\nCVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: false };\n\nCVShapeElement.prototype.dashResetter = [];\n\nCVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n};\n\nCVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true,\n };\n var elementData = {};\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || { k: 0 }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || { k: 0 }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n if (data.lj == 1) { // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem.do = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n};\n\nCVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: [],\n };\n return elementData;\n};\n\nCVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this),\n },\n };\n return elementData;\n};\n\nCVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n};\n\nCVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n};\n\nCVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n};\n\nCVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n};\n\nCVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n};\n\nCVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n};\n\nCVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n};\n\nCVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n};\n\nCVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type;\n\n // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n if (!(((type === 'st' || type === 'gs') && currentStyle.wi === 0) || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n if (type === 'st' || type === 'gs') {\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n ctx.lineWidth = currentStyle.wi;\n ctx.lineCap = currentStyle.lc;\n ctx.lineJoin = currentStyle.lj;\n ctx.miterLimit = currentStyle.ml || 0;\n } else {\n ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n renderer.ctxOpacity(currentStyle.coOp);\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle.do;\n }\n }\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n if (type === 'st' || type === 'gs') {\n ctx.stroke();\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n if (type !== 'st' && type !== 'gs') {\n ctx.fill(currentStyle.r);\n }\n renderer.restore();\n }\n }\n};\n\nCVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {\n //\n }\n }\n if (isMain) {\n this.drawLayer();\n }\n};\n\nCVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n });\n }\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]),\n });\n }\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n });\n }\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]),\n });\n shapeNodes.push({\n t: 'z',\n });\n }\n }\n }\n styledShape.trNodes = shapeNodes;\n }\n};\n\nCVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n};\n\nCVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb('\n + bmFloor(itemData.c.v[0]) + ','\n + bmFloor(itemData.c.v[1]) + ','\n + bmFloor(itemData.c.v[2]) + ')';\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n};\n\nCVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || (styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf))) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n\n var percent = itemData.h.v;\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n styleElem.grd = grd;\n }\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n};\n\nCVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem.do = d.dashoffset[0];\n }\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n};\n\nCVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n};\n\nfunction CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: '',\n };\n this.initElement(data, globalData, comp);\n}\nextendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n\nCVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\nCVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n\n var hasFill = false;\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n this.fill = hasFill;\n var hasStroke = false;\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length;\n // this.tHelper.font = this.values.fValue;\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = (charData && charData.data) || {};\n matrixHelper.reset();\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = { elem: commands };\n }\n cnt += 1;\n }\n};\n\nCVTextElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n\n var letters = this.textProperty.currentData.l;\n\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\n }\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n lastFill = renderedLetter.fc;\n ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n ctx.fillStyle = this.values.fill;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.fill();\n /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n ctx.lineWidth = this.values.sWidth;\n }\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n ctx.strokeStyle = this.values.stroke;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.stroke();\n /// ctx.strokeText(letters[i].val,0,0);\n }\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n};\n\nfunction CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n}\nextendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n\nCVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\nCVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\nCVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n if ((imgRel > canvasRel && par === 'xMidYMid slice') || (imgRel < canvasRel && par !== 'xMidYMid slice')) {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n};\n\nCVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n};\n\nCVImageElement.prototype.destroy = function () {\n this.img = null;\n};\n\nfunction CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n}\nextendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n\nCVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\nCVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\nCVSolidElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n};\n\nfunction CanvasRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: (config && config.clearCanvas !== undefined) ? config.clearCanvas : true,\n context: (config && config.context) || null,\n progressiveLoad: (config && config.progressiveLoad) || false,\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\n imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\n contentVisibility: (config && config.contentVisibility) || 'visible',\n className: (config && config.className) || '',\n id: (config && config.id) || '',\n };\n this.renderConfig.dpr = (config && config.dpr) || 1;\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1;\n }\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1,\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n}\nextendPrototype([BaseRenderer], CanvasRendererBase);\n\nCanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n};\n\nCanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n};\n\nCanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n};\n\nCanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n};\n\nCanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\nCanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n this.transformMat.cloneFromProps(props);\n var cProps = this.contextData.cTr.props;\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]);\n // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\n var trProps = this.contextData.cTr.props;\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n};\n\nCanvasRendererBase.prototype.ctxOpacity = function (op) {\n /* if(op === 1){\n return;\n } */\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n return;\n }\n this.contextData.cO *= op < 0 ? 0 : op;\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n this.canvasContext.globalAlpha = this.contextData.cO;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n }\n};\n\nCanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n this.contextData.reset();\n};\n\nCanvasRendererBase.prototype.save = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n if (actionFlag) {\n this.canvasContext.save();\n }\n var props = this.contextData.cTr.props;\n if (this.contextData._length <= this.contextData.cArrPos) {\n this.contextData.duplicate();\n }\n var i;\n var arr = this.contextData.saved[this.contextData.cArrPos];\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n};\n\nCanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n if (actionFlag) {\n this.canvasContext.restore();\n this.globalData.blendMode = 'source-over';\n }\n this.contextData.cArrPos -= 1;\n var popped = this.contextData.saved[this.contextData.cArrPos];\n var i;\n var arr = this.contextData.cTr.props;\n for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\n }\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n popped = this.contextData.savedOp[this.contextData.cArrPos];\n this.contextData.cO = popped;\n if (this.globalData.currentGlobalAlpha !== popped) {\n this.canvasContext.globalAlpha = popped;\n this.globalData.currentGlobalAlpha = popped;\n }\n};\n\nCanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0,\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n\n this.updateContainerSize();\n};\n\nCanvasRendererBase.prototype.updateContainerSize = function () {\n this.reset();\n var elementWidth;\n var elementHeight;\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n } else {\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n }\n var elementRel;\n var animationRel;\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n if ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))) {\n this.transformCanvas.tx = ((elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2) * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n if (yPos === 'YMid' && ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))) {\n this.transformCanvas.ty = ((elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2) * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))) {\n this.transformCanvas.ty = ((elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w))) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n};\n\nCanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if ((this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender) || this.destroyed || num === -1) {\n return;\n }\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num;\n\n // console.log('--------');\n // console.log('NEW: ',num);\n var i;\n var len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n};\n\nCanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\n element.resize(this.globalData.transformCanvas);\n } */\n};\n\nCanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n};\n\nCanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n};\n\nCanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n};\n\nfunction CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\n}\n\nextendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\nCVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n};\n\nCVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.layers = null;\n this.elements = null;\n};\n\nCVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n};\n\nfunction CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: (config && config.clearCanvas !== undefined) ? config.clearCanvas : true,\n context: (config && config.context) || null,\n progressiveLoad: (config && config.progressiveLoad) || false,\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\n imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\n contentVisibility: (config && config.contentVisibility) || 'visible',\n className: (config && config.className) || '',\n id: (config && config.id) || '',\n };\n this.renderConfig.dpr = (config && config.dpr) || 1;\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1;\n }\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1,\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n}\nextendPrototype([CanvasRendererBase], CanvasRenderer);\n\nCanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n};\n\n// Registering renderers\nregisterRenderer('canvas', CanvasRenderer);\n\n// Registering shape modifiers\nShapeModifiers.registerModifier('tm', TrimModifier);\nShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\nShapeModifiers.registerModifier('rp', RepeaterModifier);\nShapeModifiers.registerModifier('rd', RoundCornersModifier);\n\nconst Expressions = (function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i;\n var len = registers.length;\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n return ob;\n}());\n\n/* eslint-disable */\n/*\n Copyright 2014 David Bau.\n\n Permission is hereby granted, free of charge, to any person obtaining\n a copy of this software and associated documentation files (the\n \"Software\"), to deal in the Software without restriction, including\n without limitation the rights to use, copy, modify, merge, publish,\n distribute, sublicense, and/or sell copies of the Software, and to\n permit persons to whom the Software is furnished to do so, subject to\n the following conditions:\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n */\n\nfunction seedRandom(pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n var global = this,\n width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\n function seedrandom(seed, options, callback) {\n var key = [];\n options = (options === true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed === null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; };\n prng.quick = function() { return arc4.g(4) / 0x100000000; };\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); };\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n }\n math['seed' + rngname] = seedrandom;\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\n function ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n }\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n }\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\n function flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n }\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\n function mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n }\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\n function autoseed() {\n try {\n if (nodecrypto) { return tostring(nodecrypto.randomBytes(width)); }\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n }\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n }\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\n mixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\n\n// End anonymous scope, and pass initial values.\n};\n\nfunction initialize$2(BMMath) {\n seedRandom([], BMMath);\n}\n\nvar propTypes = {\n SHAPE: 'shape',\n};\n\n/* eslint-disable camelcase */\n\nconst ExpressionManager = (function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n initialize$2(BMMath);\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n }\n\n function $bm_neg(a) {\n var tOfA = typeof a;\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n return -a;\n }\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n return retArr;\n }\n if (a.propType) {\n return a.v;\n }\n return -a;\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n if (tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a + b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n i += 1;\n }\n return retArr;\n }\n return 0;\n }\n var add = sum;\n\n function sub(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n return a - b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n i += 1;\n }\n return retArr;\n }\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n return arr;\n }\n return 0;\n }\n\n function div(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n return arr;\n }\n return 0;\n }\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n return a % b;\n }\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n var degrees_to_radians = radiansToDegrees;\n\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0]; var g = val[1]; var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = 0; // achromatic\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n\n var r;\n var g;\n var b;\n\n if (s === 0) {\n r = l; // achromatic\n b = l; // achromatic\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n if (t <= tMin) {\n return value1;\n } if (t >= tMax) {\n return value2;\n }\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n return arr;\n }\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n if (max.length) {\n var i;\n var len = max.length;\n if (!min) {\n min = createTypedArray('float32', len);\n }\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n return arr;\n }\n if (min === undefined) {\n min = 0;\n }\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n for (i = 0; i < len; i += 1) {\n inVertexPoint = (inTangents && inTangents[i]) ? inTangents[i] : arrPlaceholder;\n outVertexPoint = (outTangents && outTangents[i]) ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n var _needsRandom = val.indexOf('random') !== -1;\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function () {\n return thisProperty.v;\n },\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n\n var scoped_bm_rt;\n // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n var numKeys = property.kf ? data.k.length : 0;\n\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random();\n // addedAmps[j] += -amp + amp*2*rnd;\n }\n iWiggle += 1;\n }\n // var rnd2 = BMMath.random();\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc;\n // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n return arr;\n }\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n var mult = fn(t);\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n return arr;\n }\n return (val2 - val1) * mult + val1;\n }\n\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n if (!data.k.length || typeof (data.k[0]) === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n break;\n }\n }\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n if (!data.k.length || typeof (data.k[0]) === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: [],\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n\n lenKey = arr.length;\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n return obKey;\n }\n\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return fr / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n return value.substring(init, end);\n }\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n return value.substr(init, end);\n }\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\n rotation = transform.rotation;\n scale = transform.scale; */\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n if (!effect) {\n effect = thisLayer(4);\n }\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n expression_function();\n this.frameExpressionId = elem.globalData.frameId;\n\n // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE\n ? scoped_bm_rt.v\n : scoped_bm_rt;\n return scoped_bm_rt;\n }\n // Bundlers will see these as dead code and unless we reference them\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath];\n return ob;\n}());\n\nconst expressionHelpers = (function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n if (v1.length) {\n var i;\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n var delta = -0.001;\n // frameNum += this.elem.data.st;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty,\n };\n}());\n\nfunction addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var firstKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (iterations % 2 !== 0) {\n return this.getValueAtTime(((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n return ret;\n }\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n return ret;\n }\n return lastValue + (lastValue - nextLastValue) * (((currentFrame - lastKeyFrame)) / 0.001);\n }\n return this.getValueAtTime((((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var lastKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n if (iterations % 2 === 0) {\n return this.getValueAtTime((((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration) + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n return ret;\n }\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + ((firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame)) / 0.001;\n }\n return ret;\n }\n return firstValue + ((firstValue - nextFirstValue) * (firstKeyFrame - currentFrame)) / 0.001;\n }\n return this.getValueAtTime(((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame))) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n if (samples <= 1) {\n return this.pv;\n }\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n var sampleValue;\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n i += 1;\n }\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n return value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix(),\n };\n }\n /// /\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(\n -anchor[0] * this.a.mult,\n -anchor[1] * this.a.mult,\n anchor[2] * this.a.mult\n );\n }\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(\n scale[0] * this.s.mult,\n scale[1] * this.s.mult,\n scale[2] * this.s.mult\n );\n }\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult)\n .rotateY(rotationY * this.ry.mult)\n .rotateX(rotationX * this.rx.mult)\n .rotateZ(-orientation[2] * this.or.mult)\n .rotateY(orientation[1] * this.or.mult)\n .rotateX(orientation[0] * this.or.mult);\n }\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(\n positionX * this.px.mult,\n positionY * this.py.mult,\n -positionZ * this.pz.mult\n );\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(\n position[0] * this.p.mult,\n position[1] * this.p.mult,\n -position[2] * this.p.mult\n );\n }\n return matrix;\n /// /\n }\n\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container);\n // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value,\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame,\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n ShapeExpressions.prototype = {\n vertices: function (prop, time) {\n if (this.k) {\n this.getValue();\n }\n var shapePath = this.v;\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n return arr;\n },\n points: function (time) {\n return this.vertices('v', time);\n },\n inTangents: function (time) {\n return this.vertices('i', time);\n },\n outTangents: function (time) {\n return this.vertices('o', time);\n },\n isClosed: function () {\n return this.v.c;\n },\n pointOnPath: function (perc, time) {\n var shapePath = this.v;\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = (shapePath.c && i === len - 1) ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n i += 1;\n }\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n return pt;\n },\n vectorOnPath: function (perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) { // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) { // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n if (magnitude === 0) {\n return [0, 0];\n }\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function (perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function (perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime,\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n };\n}\n\nfunction initialize$1() {\n addPropertyDecorator();\n}\n\nfunction addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n return null;\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n}\n\nfunction initialize() {\n addDecorator();\n}\n\n// Registering expression plugin\nsetExpressionsPlugin(Expressions);\ninitialize$1();\ninitialize();\n\n}\n\nexport { lottie as default };\n", "import {\n\tFileLoader,\n\tLoader,\n\tCanvasTexture,\n\tNearestFilter,\n\tSRGBColorSpace\n} from 'three';\n\nimport lottie from '../libs/lottie_canvas.module.js';\n\nclass LottieLoader extends Loader {\n\n\tsetQuality( value ) {\n\n\t\tthis._quality = value;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst quality = this._quality || 1;\n\n\t\tconst texture = new CanvasTexture();\n\t\ttexture.minFilter = NearestFilter;\n\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tconst data = JSON.parse( text );\n\n\t\t\t// lottie uses container.offetWidth and offsetHeight\n\t\t\t// to define width/height\n\n\t\t\tconst container = document.createElement( 'div' );\n\t\t\tcontainer.style.width = data.w + 'px';\n\t\t\tcontainer.style.height = data.h + 'px';\n\t\t\tdocument.body.appendChild( container );\n\n\t\t\tconst animation = lottie.loadAnimation( {\n\t\t\t\tcontainer: container,\n\t\t\t\tanimType: 'canvas',\n\t\t\t\tloop: true,\n\t\t\t\tautoplay: true,\n\t\t\t\tanimationData: data,\n\t\t\t\trendererSettings: { dpr: quality }\n\t\t\t} );\n\n\t\t\ttexture.animation = animation;\n\t\t\ttexture.image = animation.container;\n\n\t\t\tanimation.addEventListener( 'enterFrame', function () {\n\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t} );\n\n\t\t\tcontainer.style.display = 'none';\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nexport { LottieLoader };\n", "import {\n\tAnimationClip,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tVector3\n} from 'three';\n\nconst _normalData = [\n\t[ - 0.525731, 0.000000, 0.850651 ], [ - 0.442863, 0.238856, 0.864188 ],\n\t[ - 0.295242, 0.000000, 0.955423 ], [ - 0.309017, 0.500000, 0.809017 ],\n\t[ - 0.162460, 0.262866, 0.951056 ], [ 0.000000, 0.000000, 1.000000 ],\n\t[ 0.000000, 0.850651, 0.525731 ], [ - 0.147621, 0.716567, 0.681718 ],\n\t[ 0.147621, 0.716567, 0.681718 ], [ 0.000000, 0.525731, 0.850651 ],\n\t[ 0.309017, 0.500000, 0.809017 ], [ 0.525731, 0.000000, 0.850651 ],\n\t[ 0.295242, 0.000000, 0.955423 ], [ 0.442863, 0.238856, 0.864188 ],\n\t[ 0.162460, 0.262866, 0.951056 ], [ - 0.681718, 0.147621, 0.716567 ],\n\t[ - 0.809017, 0.309017, 0.500000 ], [ - 0.587785, 0.425325, 0.688191 ],\n\t[ - 0.850651, 0.525731, 0.000000 ], [ - 0.864188, 0.442863, 0.238856 ],\n\t[ - 0.716567, 0.681718, 0.147621 ], [ - 0.688191, 0.587785, 0.425325 ],\n\t[ - 0.500000, 0.809017, 0.309017 ], [ - 0.238856, 0.864188, 0.442863 ],\n\t[ - 0.425325, 0.688191, 0.587785 ], [ - 0.716567, 0.681718, - 0.147621 ],\n\t[ - 0.500000, 0.809017, - 0.309017 ], [ - 0.525731, 0.850651, 0.000000 ],\n\t[ 0.000000, 0.850651, - 0.525731 ], [ - 0.238856, 0.864188, - 0.442863 ],\n\t[ 0.000000, 0.955423, - 0.295242 ], [ - 0.262866, 0.951056, - 0.162460 ],\n\t[ 0.000000, 1.000000, 0.000000 ], [ 0.000000, 0.955423, 0.295242 ],\n\t[ - 0.262866, 0.951056, 0.162460 ], [ 0.238856, 0.864188, 0.442863 ],\n\t[ 0.262866, 0.951056, 0.162460 ], [ 0.500000, 0.809017, 0.309017 ],\n\t[ 0.238856, 0.864188, - 0.442863 ], [ 0.262866, 0.951056, - 0.162460 ],\n\t[ 0.500000, 0.809017, - 0.309017 ], [ 0.850651, 0.525731, 0.000000 ],\n\t[ 0.716567, 0.681718, 0.147621 ], [ 0.716567, 0.681718, - 0.147621 ],\n\t[ 0.525731, 0.850651, 0.000000 ], [ 0.425325, 0.688191, 0.587785 ],\n\t[ 0.864188, 0.442863, 0.238856 ], [ 0.688191, 0.587785, 0.425325 ],\n\t[ 0.809017, 0.309017, 0.500000 ], [ 0.681718, 0.147621, 0.716567 ],\n\t[ 0.587785, 0.425325, 0.688191 ], [ 0.955423, 0.295242, 0.000000 ],\n\t[ 1.000000, 0.000000, 0.000000 ], [ 0.951056, 0.162460, 0.262866 ],\n\t[ 0.850651, - 0.525731, 0.000000 ], [ 0.955423, - 0.295242, 0.000000 ],\n\t[ 0.864188, - 0.442863, 0.238856 ], [ 0.951056, - 0.162460, 0.262866 ],\n\t[ 0.809017, - 0.309017, 0.500000 ], [ 0.681718, - 0.147621, 0.716567 ],\n\t[ 0.850651, 0.000000, 0.525731 ], [ 0.864188, 0.442863, - 0.238856 ],\n\t[ 0.809017, 0.309017, - 0.500000 ], [ 0.951056, 0.162460, - 0.262866 ],\n\t[ 0.525731, 0.000000, - 0.850651 ], [ 0.681718, 0.147621, - 0.716567 ],\n\t[ 0.681718, - 0.147621, - 0.716567 ], [ 0.850651, 0.000000, - 0.525731 ],\n\t[ 0.809017, - 0.309017, - 0.500000 ], [ 0.864188, - 0.442863, - 0.238856 ],\n\t[ 0.951056, - 0.162460, - 0.262866 ], [ 0.147621, 0.716567, - 0.681718 ],\n\t[ 0.309017, 0.500000, - 0.809017 ], [ 0.425325, 0.688191, - 0.587785 ],\n\t[ 0.442863, 0.238856, - 0.864188 ], [ 0.587785, 0.425325, - 0.688191 ],\n\t[ 0.688191, 0.587785, - 0.425325 ], [ - 0.147621, 0.716567, - 0.681718 ],\n\t[ - 0.309017, 0.500000, - 0.809017 ], [ 0.000000, 0.525731, - 0.850651 ],\n\t[ - 0.525731, 0.000000, - 0.850651 ], [ - 0.442863, 0.238856, - 0.864188 ],\n\t[ - 0.295242, 0.000000, - 0.955423 ], [ - 0.162460, 0.262866, - 0.951056 ],\n\t[ 0.000000, 0.000000, - 1.000000 ], [ 0.295242, 0.000000, - 0.955423 ],\n\t[ 0.162460, 0.262866, - 0.951056 ], [ - 0.442863, - 0.238856, - 0.864188 ],\n\t[ - 0.309017, - 0.500000, - 0.809017 ], [ - 0.162460, - 0.262866, - 0.951056 ],\n\t[ 0.000000, - 0.850651, - 0.525731 ], [ - 0.147621, - 0.716567, - 0.681718 ],\n\t[ 0.147621, - 0.716567, - 0.681718 ], [ 0.000000, - 0.525731, - 0.850651 ],\n\t[ 0.309017, - 0.500000, - 0.809017 ], [ 0.442863, - 0.238856, - 0.864188 ],\n\t[ 0.162460, - 0.262866, - 0.951056 ], [ 0.238856, - 0.864188, - 0.442863 ],\n\t[ 0.500000, - 0.809017, - 0.309017 ], [ 0.425325, - 0.688191, - 0.587785 ],\n\t[ 0.716567, - 0.681718, - 0.147621 ], [ 0.688191, - 0.587785, - 0.425325 ],\n\t[ 0.587785, - 0.425325, - 0.688191 ], [ 0.000000, - 0.955423, - 0.295242 ],\n\t[ 0.000000, - 1.000000, 0.000000 ], [ 0.262866, - 0.951056, - 0.162460 ],\n\t[ 0.000000, - 0.850651, 0.525731 ], [ 0.000000, - 0.955423, 0.295242 ],\n\t[ 0.238856, - 0.864188, 0.442863 ], [ 0.262866, - 0.951056, 0.162460 ],\n\t[ 0.500000, - 0.809017, 0.309017 ], [ 0.716567, - 0.681718, 0.147621 ],\n\t[ 0.525731, - 0.850651, 0.000000 ], [ - 0.238856, - 0.864188, - 0.442863 ],\n\t[ - 0.500000, - 0.809017, - 0.309017 ], [ - 0.262866, - 0.951056, - 0.162460 ],\n\t[ - 0.850651, - 0.525731, 0.000000 ], [ - 0.716567, - 0.681718, - 0.147621 ],\n\t[ - 0.716567, - 0.681718, 0.147621 ], [ - 0.525731, - 0.850651, 0.000000 ],\n\t[ - 0.500000, - 0.809017, 0.309017 ], [ - 0.238856, - 0.864188, 0.442863 ],\n\t[ - 0.262866, - 0.951056, 0.162460 ], [ - 0.864188, - 0.442863, 0.238856 ],\n\t[ - 0.809017, - 0.309017, 0.500000 ], [ - 0.688191, - 0.587785, 0.425325 ],\n\t[ - 0.681718, - 0.147621, 0.716567 ], [ - 0.442863, - 0.238856, 0.864188 ],\n\t[ - 0.587785, - 0.425325, 0.688191 ], [ - 0.309017, - 0.500000, 0.809017 ],\n\t[ - 0.147621, - 0.716567, 0.681718 ], [ - 0.425325, - 0.688191, 0.587785 ],\n\t[ - 0.162460, - 0.262866, 0.951056 ], [ 0.442863, - 0.238856, 0.864188 ],\n\t[ 0.162460, - 0.262866, 0.951056 ], [ 0.309017, - 0.500000, 0.809017 ],\n\t[ 0.147621, - 0.716567, 0.681718 ], [ 0.000000, - 0.525731, 0.850651 ],\n\t[ 0.425325, - 0.688191, 0.587785 ], [ 0.587785, - 0.425325, 0.688191 ],\n\t[ 0.688191, - 0.587785, 0.425325 ], [ - 0.955423, 0.295242, 0.000000 ],\n\t[ - 0.951056, 0.162460, 0.262866 ], [ - 1.000000, 0.000000, 0.000000 ],\n\t[ - 0.850651, 0.000000, 0.525731 ], [ - 0.955423, - 0.295242, 0.000000 ],\n\t[ - 0.951056, - 0.162460, 0.262866 ], [ - 0.864188, 0.442863, - 0.238856 ],\n\t[ - 0.951056, 0.162460, - 0.262866 ], [ - 0.809017, 0.309017, - 0.500000 ],\n\t[ - 0.864188, - 0.442863, - 0.238856 ], [ - 0.951056, - 0.162460, - 0.262866 ],\n\t[ - 0.809017, - 0.309017, - 0.500000 ], [ - 0.681718, 0.147621, - 0.716567 ],\n\t[ - 0.681718, - 0.147621, - 0.716567 ], [ - 0.850651, 0.000000, - 0.525731 ],\n\t[ - 0.688191, 0.587785, - 0.425325 ], [ - 0.587785, 0.425325, - 0.688191 ],\n\t[ - 0.425325, 0.688191, - 0.587785 ], [ - 0.425325, - 0.688191, - 0.587785 ],\n\t[ - 0.587785, - 0.425325, - 0.688191 ], [ - 0.688191, - 0.587785, - 0.425325 ]\n];\n\nclass MD2Loader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst data = new DataView( buffer );\n\n\t\t// http://tfc.duke.free.fr/coding/md2-specs-en.html\n\n\t\tconst header = {};\n\t\tconst headerNames = [\n\t\t\t'ident', 'version',\n\t\t\t'skinwidth', 'skinheight',\n\t\t\t'framesize',\n\t\t\t'num_skins', 'num_vertices', 'num_st', 'num_tris', 'num_glcmds', 'num_frames',\n\t\t\t'offset_skins', 'offset_st', 'offset_tris', 'offset_frames', 'offset_glcmds', 'offset_end'\n\t\t];\n\n\t\tfor ( let i = 0; i < headerNames.length; i ++ ) {\n\n\t\t\theader[ headerNames[ i ] ] = data.getInt32( i * 4, true );\n\n\t\t}\n\n\t\tif ( header.ident !== 844121161 || header.version !== 8 ) {\n\n\t\t\tconsole.error( 'Not a valid MD2 file' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( header.offset_end !== data.byteLength ) {\n\n\t\t\tconsole.error( 'Corrupted MD2 file' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\t// uvs\n\n\t\tconst uvsTemp = [];\n\t\tlet offset = header.offset_st;\n\n\t\tfor ( let i = 0, l = header.num_st; i < l; i ++ ) {\n\n\t\t\tconst u = data.getInt16( offset + 0, true );\n\t\t\tconst v = data.getInt16( offset + 2, true );\n\n\t\t\tuvsTemp.push( u / header.skinwidth, 1 - ( v / header.skinheight ) );\n\n\t\t\toffset += 4;\n\n\t\t}\n\n\t\t// triangles\n\n\t\toffset = header.offset_tris;\n\n\t\tconst vertexIndices = [];\n\t\tconst uvIndices = [];\n\n\t\tfor ( let i = 0, l = header.num_tris; i < l; i ++ ) {\n\n\t\t\tvertexIndices.push(\n\t\t\t\tdata.getUint16( offset + 0, true ),\n\t\t\t\tdata.getUint16( offset + 2, true ),\n\t\t\t\tdata.getUint16( offset + 4, true )\n\t\t\t);\n\n\t\t\tuvIndices.push(\n\t\t\t\tdata.getUint16( offset + 6, true ),\n\t\t\t\tdata.getUint16( offset + 8, true ),\n\t\t\t\tdata.getUint16( offset + 10, true )\n\t\t\t);\n\n\t\t\toffset += 12;\n\n\t\t}\n\n\t\t// frames\n\n\t\tconst translation = new Vector3();\n\t\tconst scale = new Vector3();\n\n\t\tconst frames = [];\n\n\t\toffset = header.offset_frames;\n\n\t\tfor ( let i = 0, l = header.num_frames; i < l; i ++ ) {\n\n\t\t\tscale.set(\n\t\t\t\tdata.getFloat32( offset + 0, true ),\n\t\t\t\tdata.getFloat32( offset + 4, true ),\n\t\t\t\tdata.getFloat32( offset + 8, true )\n\t\t\t);\n\n\t\t\ttranslation.set(\n\t\t\t\tdata.getFloat32( offset + 12, true ),\n\t\t\t\tdata.getFloat32( offset + 16, true ),\n\t\t\t\tdata.getFloat32( offset + 20, true )\n\t\t\t);\n\n\t\t\toffset += 24;\n\n\t\t\tconst string = [];\n\n\t\t\tfor ( let j = 0; j < 16; j ++ ) {\n\n\t\t\t\tconst character = data.getUint8( offset + j );\n\t\t\t\tif ( character === 0 ) break;\n\n\t\t\t\tstring[ j ] = character;\n\n\t\t\t}\n\n\t\t\tconst frame = {\n\t\t\t\tname: String.fromCharCode.apply( null, string ),\n\t\t\t\tvertices: [],\n\t\t\t\tnormals: []\n\t\t\t};\n\n\t\t\toffset += 16;\n\n\t\t\tfor ( let j = 0; j < header.num_vertices; j ++ ) {\n\n\t\t\t\tlet x = data.getUint8( offset ++ );\n\t\t\t\tlet y = data.getUint8( offset ++ );\n\t\t\t\tlet z = data.getUint8( offset ++ );\n\t\t\t\tconst n = _normalData[ data.getUint8( offset ++ ) ];\n\n\t\t\t\tx = x * scale.x + translation.x;\n\t\t\t\ty = y * scale.y + translation.y;\n\t\t\t\tz = z * scale.z + translation.z;\n\n\t\t\t\tframe.vertices.push( x, z, y ); // convert to Y-up\n\t\t\t\tframe.normals.push( n[ 0 ], n[ 2 ], n[ 1 ] ); // convert to Y-up\n\n\t\t\t}\n\n\t\t\tframes.push( frame );\n\n\t\t}\n\n\t\t// static\n\n\t\tconst positions = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tconst verticesTemp = frames[ 0 ].vertices;\n\t\tconst normalsTemp = frames[ 0 ].normals;\n\n\t\tfor ( let i = 0, l = vertexIndices.length; i < l; i ++ ) {\n\n\t\t\tconst vertexIndex = vertexIndices[ i ];\n\t\t\tlet stride = vertexIndex * 3;\n\n\t\t\t//\n\n\t\t\tconst x = verticesTemp[ stride ];\n\t\t\tconst y = verticesTemp[ stride + 1 ];\n\t\t\tconst z = verticesTemp[ stride + 2 ];\n\n\t\t\tpositions.push( x, y, z );\n\n\t\t\t//\n\n\t\t\tconst nx = normalsTemp[ stride ];\n\t\t\tconst ny = normalsTemp[ stride + 1 ];\n\t\t\tconst nz = normalsTemp[ stride + 2 ];\n\n\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t//\n\n\t\t\tconst uvIndex = uvIndices[ i ];\n\t\t\tstride = uvIndex * 2;\n\n\t\t\tconst u = uvsTemp[ stride ];\n\t\t\tconst v = uvsTemp[ stride + 1 ];\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// animation\n\n\t\tconst morphPositions = [];\n\t\tconst morphNormals = [];\n\n\t\tfor ( let i = 0, l = frames.length; i < l; i ++ ) {\n\n\t\t\tconst frame = frames[ i ];\n\t\t\tconst attributeName = frame.name;\n\n\t\t\tif ( frame.vertices.length > 0 ) {\n\n\t\t\t\tconst positions = [];\n\n\t\t\t\tfor ( let j = 0, jl = vertexIndices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertexIndex = vertexIndices[ j ];\n\t\t\t\t\tconst stride = vertexIndex * 3;\n\n\t\t\t\t\tconst x = frame.vertices[ stride ];\n\t\t\t\t\tconst y = frame.vertices[ stride + 1 ];\n\t\t\t\t\tconst z = frame.vertices[ stride + 2 ];\n\n\t\t\t\t\tpositions.push( x, y, z );\n\n\t\t\t\t}\n\n\t\t\t\tconst positionAttribute = new Float32BufferAttribute( positions, 3 );\n\t\t\t\tpositionAttribute.name = attributeName;\n\n\t\t\t\tmorphPositions.push( positionAttribute );\n\n\t\t\t}\n\n\t\t\tif ( frame.normals.length > 0 ) {\n\n\t\t\t\tconst normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = vertexIndices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertexIndex = vertexIndices[ j ];\n\t\t\t\t\tconst stride = vertexIndex * 3;\n\n\t\t\t\t\tconst nx = frame.normals[ stride ];\n\t\t\t\t\tconst ny = frame.normals[ stride + 1 ];\n\t\t\t\t\tconst nz = frame.normals[ stride + 2 ];\n\n\t\t\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t\t}\n\n\t\t\t\tconst normalAttribute = new Float32BufferAttribute( normals, 3 );\n\t\t\t\tnormalAttribute.name = attributeName;\n\n\t\t\t\tmorphNormals.push( normalAttribute );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.morphAttributes.position = morphPositions;\n\t\tgeometry.morphAttributes.normal = morphNormals;\n\t\tgeometry.morphTargetsRelative = false;\n\n\t\tgeometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences( frames, 10 );\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nexport { MD2Loader };\n", "/**\n * MDD is a special format that stores a position for every vertex in a model for every frame in an animation.\n * Similar to BVH, it can be used to transfer animation data between different 3D applications or engines.\n *\n * MDD stores its data in binary format (big endian) in the following way:\n *\n * number of frames (a single uint32)\n * number of vertices (a single uint32)\n * time values for each frame (sequence of float32)\n * vertex data for each frame (sequence of float32)\n */\n\nimport {\n\tAnimationClip,\n\tBufferAttribute,\n\tFileLoader,\n\tLoader,\n\tNumberKeyframeTrack\n} from 'three';\n\nclass MDDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\tonLoad( scope.parse( data ) );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tconst view = new DataView( data );\n\n\t\tconst totalFrames = view.getUint32( 0 );\n\t\tconst totalPoints = view.getUint32( 4 );\n\n\t\tlet offset = 8;\n\n\t\t// animation clip\n\n\t\tconst times = new Float32Array( totalFrames );\n\t\tconst values = new Float32Array( totalFrames * totalFrames ).fill( 0 );\n\n\t\tfor ( let i = 0; i < totalFrames; i ++ ) {\n\n\t\t\ttimes[ i ] = view.getFloat32( offset ); offset += 4;\n\t\t\tvalues[ ( totalFrames * i ) + i ] = 1;\n\n\t\t}\n\n\t\tconst track = new NumberKeyframeTrack( '.morphTargetInfluences', times, values );\n\t\tconst clip = new AnimationClip( 'default', times[ times.length - 1 ], [ track ] );\n\n\t\t// morph targets\n\n\t\tconst morphTargets = [];\n\n\t\tfor ( let i = 0; i < totalFrames; i ++ ) {\n\n\t\t\tconst morphTarget = new Float32Array( totalPoints * 3 );\n\n\t\t\tfor ( let j = 0; j < totalPoints; j ++ ) {\n\n\t\t\t\tconst stride = ( j * 3 );\n\n\t\t\t\tmorphTarget[ stride + 0 ] = view.getFloat32( offset ); offset += 4; // x\n\t\t\t\tmorphTarget[ stride + 1 ] = view.getFloat32( offset ); offset += 4; // y\n\t\t\t\tmorphTarget[ stride + 2 ] = view.getFloat32( offset ); offset += 4; // z\n\n\t\t\t}\n\n\t\t\tconst attribute = new BufferAttribute( morphTarget, 3 );\n\t\t\tattribute.name = 'morph_' + i;\n\n\t\t\tmorphTargets.push( attribute );\n\n\t\t}\n\n\t\treturn {\n\t\t\tmorphTargets: morphTargets,\n\t\t\tclip: clip\n\t\t};\n\n\t}\n\n}\n\nexport { MDDLoader };\n", "/**\n * MMD Toon Shader\n *\n * This shader is extended from MeshPhongMaterial, and merged algorithms with\n * MeshToonMaterial and MeshMetcapMaterial.\n * Ideas came from https://github.com/mrdoob/three.js/issues/19609\n *\n * Combining steps:\n * * Declare matcap uniform.\n * * Add gradientmap_pars_fragment.\n * * Use gradient irradiances instead of dotNL irradiance from MeshPhongMaterial.\n * (Replace lights_phong_pars_fragment with lights_mmd_toon_pars_fragment)\n * * Add mmd_toon_matcap_fragment.\n */\n\nimport { UniformsUtils, ShaderLib } from 'three';\n\nconst lights_mmd_toon_pars_fragment = /* glsl */`\nvarying vec3 vViewPosition;\n\nstruct BlinnPhongMaterial {\n\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n\n};\n\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n\n}\n\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n`;\n\nconst mmd_toon_matcap_fragment = /* glsl */`\n#ifdef USE_MATCAP\n\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; // 0.495 to remove artifacts caused by undersized matcap disks\n\tvec4 matcapColor = texture2D( matcap, uv );\n\n\t#ifdef MATCAP_BLENDING_MULTIPLY\n\n\t\toutgoingLight *= matcapColor.rgb;\n\n\t#elif defined( MATCAP_BLENDING_ADD )\n\n\t\toutgoingLight += matcapColor.rgb;\n\n\t#endif\n\n#endif\n`;\n\nconst MMDToonShader = {\n\n\tname: 'MMDToonShader',\n\n\tdefines: {\n\t\tTOON: true,\n\t\tMATCAP: true,\n\t\tMATCAP_BLENDING_ADD: true,\n\t},\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib.toon.uniforms,\n\t\tShaderLib.phong.uniforms,\n\t\tShaderLib.matcap.uniforms,\n\t] ),\n\n\tvertexShader:\n\t\tShaderLib.phong.vertexShader\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t''\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t''\n\t\t\t),\n\n\tfragmentShader:\n\t\tShaderLib.phong.fragmentShader\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t`\n\t\t\t\t\t#ifdef USE_MATCAP\n\t\t\t\t\t\tuniform sampler2D matcap;\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#include \n\t\t\t\t`\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t`\n\t\t\t\t\t#include \n\t\t\t\t`\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t''\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\tlights_mmd_toon_pars_fragment\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t'#include ',\n\t\t\t\t`\n\t\t\t\t\t${mmd_toon_matcap_fragment}\n\t\t\t\t`\n\t\t\t)\n\n};\n\nexport { MMDToonShader };\n", "import {\n\tAddOperation,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tColor,\n\tCustomBlending,\n\tTangentSpaceNormalMap,\n\tDoubleSide,\n\tDstAlphaFactor,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tInterpolant,\n\tLoader,\n\tLoaderUtils,\n\tUniformsUtils,\n\tShaderMaterial,\n\tMultiplyOperation,\n\tNearestFilter,\n\tNumberKeyframeTrack,\n\tOneMinusSrcAlphaFactor,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSrcAlphaFactor,\n\tSRGBColorSpace,\n\tTextureLoader,\n\tUint16BufferAttribute,\n\tVector3,\n\tVectorKeyframeTrack,\n\tRGB_S3TC_DXT1_Format,\n\tRGB_PVRTC_4BPPV1_Format,\n\tRGB_PVRTC_2BPPV1_Format,\n\tRGB_ETC1_Format,\n\tRGB_ETC2_Format\n} from 'three';\nimport { MMDToonShader } from '../shaders/MMDToonShader.js';\nimport { TGALoader } from '../loaders/TGALoader.js';\nimport { MMDParser } from '../libs/mmdparser.module.js';\n\n/**\n * Dependencies\n * - mmd-parser https://github.com/takahirox/mmd-parser\n * - TGALoader\n * - OutlineEffect\n *\n * MMDLoader creates Three.js Objects from MMD resources as\n * PMD, PMX, VMD, and VPD files.\n *\n * PMD/PMX is a model data format, VMD is a motion data format\n * VPD is a posing data format used in MMD(Miku Miku Dance).\n *\n * MMD official site\n * - https://sites.google.com/view/evpvp/\n *\n * PMD, VMD format (in Japanese)\n * - http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4\n *\n * PMX format\n * - https://gist.github.com/felixjones/f8a06bd48f9da9a4539f\n *\n * TODO\n * - light motion in vmd support.\n * - SDEF support.\n * - uv/material/bone morphing support.\n * - more precise grant skinning support.\n * - shadow support.\n */\n\n/**\n * @param {THREE.LoadingManager} manager\n */\nclass MMDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.loader = new FileLoader( this.manager );\n\n\t\tthis.parser = null; // lazy generation\n\t\tthis.meshBuilder = new MeshBuilder( this.manager );\n\t\tthis.animationBuilder = new AnimationBuilder();\n\n\t}\n\n\t/**\n\t * @param {string} animationPath\n\t * @return {MMDLoader}\n\t */\n\tsetAnimationPath( animationPath ) {\n\n\t\tthis.animationPath = animationPath;\n\t\treturn this;\n\n\t}\n\n\t// Load MMD assets as Three.js Object\n\n\t/**\n\t * Loads Model file (.pmd or .pmx) as a SkinnedMesh.\n\t *\n\t * @param {string} url - url to Model(.pmd or .pmx) file\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst builder = this.meshBuilder.setCrossOrigin( this.crossOrigin );\n\n\t\t// resource path\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\tresourcePath = this.path;\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\tconst parser = this._getParser();\n\t\tconst extractModelExtension = this._extractModelExtension;\n\n\t\tthis.loader\n\t\t\t.setMimeType( undefined )\n\t\t\t.setPath( this.path )\n\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t.load( url, function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst modelExtension = extractModelExtension( buffer );\n\n\t\t\t\t\tif ( modelExtension !== 'pmd' && modelExtension !== 'pmx' ) {\n\n\t\t\t\t\t\tif ( onError ) onError( new Error( 'THREE.MMDLoader: Unknown model file extension .' + modelExtension + '.' ) );\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst data = modelExtension === 'pmd' ? parser.parsePmd( buffer, true ) : parser.parsePmx( buffer, true );\n\n\t\t\t\t\tonLoad( builder.build( data, resourcePath, onProgress, onError ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Loads Motion file(s) (.vmd) as a AnimationClip.\n\t * If two or more files are specified, they'll be merged.\n\t *\n\t * @param {string|Array} url - url(s) to animation(.vmd) file(s)\n\t * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadAnimation( url, object, onLoad, onProgress, onError ) {\n\n\t\tconst builder = this.animationBuilder;\n\n\t\tthis.loadVMD( url, function ( vmd ) {\n\n\t\t\tonLoad( object.isCamera\n\t\t\t\t? builder.buildCameraAnimation( vmd )\n\t\t\t\t: builder.build( vmd, object ) );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Loads mode file and motion file(s) as an object containing\n\t * a SkinnedMesh and a AnimationClip.\n\t * Tracks of AnimationClip are fitting to the model.\n\t *\n\t * @param {string} modelUrl - url to Model(.pmd or .pmx) file\n\t * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadWithAnimation( modelUrl, vmdUrl, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tthis.load( modelUrl, function ( mesh ) {\n\n\t\t\tscope.loadAnimation( vmdUrl, mesh, function ( animation ) {\n\n\t\t\t\tonLoad( {\n\t\t\t\t\tmesh: mesh,\n\t\t\t\t\tanimation: animation\n\t\t\t\t} );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t// Load MMD assets as Object data parsed by MMDParser\n\n\t/**\n\t * Loads .pmd file as an Object.\n\t *\n\t * @param {string} url - url to .pmd file\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadPMD( url, onLoad, onProgress, onError ) {\n\n\t\tconst parser = this._getParser();\n\n\t\tthis.loader\n\t\t\t.setMimeType( undefined )\n\t\t\t.setPath( this.path )\n\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t.load( url, function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( parser.parsePmd( buffer, true ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Loads .pmx file as an Object.\n\t *\n\t * @param {string} url - url to .pmx file\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadPMX( url, onLoad, onProgress, onError ) {\n\n\t\tconst parser = this._getParser();\n\n\t\tthis.loader\n\t\t\t.setMimeType( undefined )\n\t\t\t.setPath( this.path )\n\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t.load( url, function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( parser.parsePmx( buffer, true ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Loads .vmd file as an Object. If two or more files are specified\n\t * they'll be merged.\n\t *\n\t * @param {string|Array} url - url(s) to .vmd file(s)\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadVMD( url, onLoad, onProgress, onError ) {\n\n\t\tconst urls = Array.isArray( url ) ? url : [ url ];\n\n\t\tconst vmds = [];\n\t\tconst vmdNum = urls.length;\n\n\t\tconst parser = this._getParser();\n\n\t\tthis.loader\n\t\t\t.setMimeType( undefined )\n\t\t\t.setPath( this.animationPath )\n\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials );\n\n\t\tfor ( let i = 0, il = urls.length; i < il; i ++ ) {\n\n\t\t\tthis.loader.load( urls[ i ], function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tvmds.push( parser.parseVmd( buffer, true ) );\n\n\t\t\t\t\tif ( vmds.length === vmdNum ) onLoad( parser.mergeVmds( vmds ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Loads .vpd file as an Object.\n\t *\n\t * @param {string} url - url to .vpd file\n\t * @param {boolean} isUnicode\n\t * @param {function} onLoad\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t */\n\tloadVPD( url, isUnicode, onLoad, onProgress, onError ) {\n\n\t\tconst parser = this._getParser();\n\n\t\tthis.loader\n\t\t\t.setMimeType( isUnicode ? undefined : 'text/plain; charset=shift_jis' )\n\t\t\t.setPath( this.animationPath )\n\t\t\t.setResponseType( 'text' )\n\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t.load( url, function ( text ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( parser.parseVpd( text, true ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t}\n\n\t// private methods\n\n\t_extractModelExtension( buffer ) {\n\n\t\tconst decoder = new TextDecoder( 'utf-8' );\n\t\tconst bytes = new Uint8Array( buffer, 0, 3 );\n\t\treturn decoder.decode( bytes ).toLowerCase();\n\n\t}\n\n\t_getParser() {\n\n\t\tif ( this.parser === null ) {\n\n\t\t\tthis.parser = new MMDParser.Parser();\n\n\t\t}\n\n\t\treturn this.parser;\n\n\t}\n\n}\n\n// Utilities\n\n/*\n\t * base64 encoded defalut toon textures toon00.bmp - toon10.bmp.\n\t * We don't need to request external toon image files.\n\t */\nconst DEFAULT_TOON_TEXTURES = [\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACMElEQVRYR+2Xv4pTQRTGf2dubhLdICiii2KnYKHVolhauKWPoGAnNr6BD6CvIVaihYuI2i1ia0BY0MZGRHQXjZj/mSPnnskfNWiWZUlzJ5k7M2cm833nO5Mziej2DWWJRUoCpQKlAntSQCqgw39/iUWAGmh37jrRnVsKlgpiqmkoGVABA7E57fvY+pJDdgKqF6HzFCSADkDq+F6AHABtQ+UMVE5D7zXod7fFNhTEckTbj5XQgHzNN+5tQvc5NG7C6BNkp6D3EmpXHDR+dQAjFLchW3VS9rlw3JBh+B7ys5Cf9z0GW1C/7P32AyBAOAz1q4jGliIH3YPuBnSfQX4OGreTIgEYQb/pBDtPnEQ4CivXYPAWBk13oHrB54yA9QuSn2H4AcKRpEILDt0BUzj+RLR1V5EqjD66NPRBVpLcQwjHoHYJOhsQv6U4mnzmrIXJCFr4LDwm/xBUoboG9XX4cc9VKdYoSA2yk5NQLJaKDUjTBoveG3Z2TElTxwjNK4M3LEZgUdDdruvcXzKBpStgp2NPiWi3ks9ZXxIoFVi+AvHLdc9TqtjL3/aYjpPlrzOcEnK62Szhimdd7xX232zFDTgtxezOu3WNMRLjiKgjtOhHVMd1loynVHvOgjuIIJMaELEqhJAV/RCSLbWTcfPFakFgFlALTRRvx+ok6Hlp/Q+v3fmx90bMyUzaEAhmM3KvHlXTL5DxnbGf/1M8RNNACLL5MNtPxP/mypJAqcDSFfgFhpYqWUzhTEAAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII='\n];\n\nconst NON_ALPHA_CHANNEL_FORMATS = [\n\tRGB_S3TC_DXT1_Format,\n\tRGB_PVRTC_4BPPV1_Format,\n\tRGB_PVRTC_2BPPV1_Format,\n\tRGB_ETC1_Format,\n\tRGB_ETC2_Format\n];\n\n// Builders. They build Three.js object from Object data parsed by MMDParser.\n\n/**\n * @param {THREE.LoadingManager} manager\n */\nclass MeshBuilder {\n\n\tconstructor( manager ) {\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.geometryBuilder = new GeometryBuilder();\n\t\tthis.materialBuilder = new MaterialBuilder( manager );\n\n\t}\n\n\t/**\n\t * @param {string} crossOrigin\n\t * @return {MeshBuilder}\n\t */\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @param {Object} data - parsed PMD/PMX data\n\t * @param {string} resourcePath\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t * @return {SkinnedMesh}\n\t */\n\tbuild( data, resourcePath, onProgress, onError ) {\n\n\t\tconst geometry = this.geometryBuilder.build( data );\n\t\tconst material = this.materialBuilder\n\t\t\t.setCrossOrigin( this.crossOrigin )\n\t\t\t.setResourcePath( resourcePath )\n\t\t\t.build( data, geometry, onProgress, onError );\n\n\t\tconst mesh = new SkinnedMesh( geometry, material );\n\n\t\tconst skeleton = new Skeleton( initBones( mesh ) );\n\t\tmesh.bind( skeleton );\n\n\t\t// console.log( mesh ); // for console debug\n\n\t\treturn mesh;\n\n\t}\n\n}\n\n// TODO: Try to remove this function\n\nfunction initBones( mesh ) {\n\n\tconst geometry = mesh.geometry;\n\n\tconst bones = [];\n\n\tif ( geometry && geometry.bones !== undefined ) {\n\n\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\tfor ( let i = 0, il = geometry.bones.length; i < il; i ++ ) {\n\n\t\t\tconst gbone = geometry.bones[ i ];\n\n\t\t\t// create new 'Bone' object\n\n\t\t\tconst bone = new Bone();\n\t\t\tbones.push( bone );\n\n\t\t\t// apply values\n\n\t\t\tbone.name = gbone.name;\n\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t}\n\n\t\t// second, create bone hierarchy\n\n\t\tfor ( let i = 0, il = geometry.bones.length; i < il; i ++ ) {\n\n\t\t\tconst gbone = geometry.bones[ i ];\n\n\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\tmesh.add( bones[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t// let's update the corresponding matrices\n\n\tmesh.updateMatrixWorld( true );\n\n\treturn bones;\n\n}\n\n//\n\nclass GeometryBuilder {\n\n\t/**\n\t * @param {Object} data - parsed PMD/PMX data\n\t * @return {BufferGeometry}\n\t */\n\tbuild( data ) {\n\n\t\t// for geometry\n\t\tconst positions = [];\n\t\tconst uvs = [];\n\t\tconst normals = [];\n\n\t\tconst indices = [];\n\n\t\tconst groups = [];\n\n\t\tconst bones = [];\n\t\tconst skinIndices = [];\n\t\tconst skinWeights = [];\n\n\t\tconst morphTargets = [];\n\t\tconst morphPositions = [];\n\n\t\tconst iks = [];\n\t\tconst grants = [];\n\n\t\tconst rigidBodies = [];\n\t\tconst constraints = [];\n\n\t\t// for work\n\t\tlet offset = 0;\n\t\tconst boneTypeTable = {};\n\n\t\t// positions, normals, uvs, skinIndices, skinWeights\n\n\t\tfor ( let i = 0; i < data.metadata.vertexCount; i ++ ) {\n\n\t\t\tconst v = data.vertices[ i ];\n\n\t\t\tfor ( let j = 0, jl = v.position.length; j < jl; j ++ ) {\n\n\t\t\t\tpositions.push( v.position[ j ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = v.normal.length; j < jl; j ++ ) {\n\n\t\t\t\tnormals.push( v.normal[ j ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = v.uv.length; j < jl; j ++ ) {\n\n\t\t\t\tuvs.push( v.uv[ j ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\tskinIndices.push( v.skinIndices.length - 1 >= j ? v.skinIndices[ j ] : 0.0 );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\tskinWeights.push( v.skinWeights.length - 1 >= j ? v.skinWeights[ j ] : 0.0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < data.metadata.faceCount; i ++ ) {\n\n\t\t\tconst face = data.faces[ i ];\n\n\t\t\tfor ( let j = 0, jl = face.indices.length; j < jl; j ++ ) {\n\n\t\t\t\tindices.push( face.indices[ j ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// groups\n\n\t\tfor ( let i = 0; i < data.metadata.materialCount; i ++ ) {\n\n\t\t\tconst material = data.materials[ i ];\n\n\t\t\tgroups.push( {\n\t\t\t\toffset: offset * 3,\n\t\t\t\tcount: material.faceCount * 3\n\t\t\t} );\n\n\t\t\toffset += material.faceCount;\n\n\t\t}\n\n\t\t// bones\n\n\t\tfor ( let i = 0; i < data.metadata.rigidBodyCount; i ++ ) {\n\n\t\t\tconst body = data.rigidBodies[ i ];\n\t\t\tlet value = boneTypeTable[ body.boneIndex ];\n\n\t\t\t// keeps greater number if already value is set without any special reasons\n\t\t\tvalue = value === undefined ? body.type : Math.max( body.type, value );\n\n\t\t\tboneTypeTable[ body.boneIndex ] = value;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < data.metadata.boneCount; i ++ ) {\n\n\t\t\tconst boneData = data.bones[ i ];\n\n\t\t\tconst bone = {\n\t\t\t\tindex: i,\n\t\t\t\ttransformationClass: boneData.transformationClass,\n\t\t\t\tparent: boneData.parentIndex,\n\t\t\t\tname: boneData.name,\n\t\t\t\tpos: boneData.position.slice( 0, 3 ),\n\t\t\t\trotq: [ 0, 0, 0, 1 ],\n\t\t\t\tscl: [ 1, 1, 1 ],\n\t\t\t\trigidBodyType: boneTypeTable[ i ] !== undefined ? boneTypeTable[ i ] : - 1\n\t\t\t};\n\n\t\t\tif ( bone.parent !== - 1 ) {\n\n\t\t\t\tbone.pos[ 0 ] -= data.bones[ bone.parent ].position[ 0 ];\n\t\t\t\tbone.pos[ 1 ] -= data.bones[ bone.parent ].position[ 1 ];\n\t\t\t\tbone.pos[ 2 ] -= data.bones[ bone.parent ].position[ 2 ];\n\n\t\t\t}\n\n\t\t\tbones.push( bone );\n\n\t\t}\n\n\t\t// iks\n\n\t\t// TODO: remove duplicated codes between PMD and PMX\n\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\tfor ( let i = 0; i < data.metadata.ikCount; i ++ ) {\n\n\t\t\t\tconst ik = data.iks[ i ];\n\n\t\t\t\tconst param = {\n\t\t\t\t\ttarget: ik.target,\n\t\t\t\t\teffector: ik.effector,\n\t\t\t\t\titeration: ik.iteration,\n\t\t\t\t\tmaxAngle: ik.maxAngle * 4,\n\t\t\t\t\tlinks: []\n\t\t\t\t};\n\n\t\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst link = {};\n\t\t\t\t\tlink.index = ik.links[ j ].index;\n\t\t\t\t\tlink.enabled = true;\n\n\t\t\t\t\tif ( data.bones[ link.index ].name.indexOf( 'ひざ' ) >= 0 ) {\n\n\t\t\t\t\t\tlink.limitation = new Vector3( 1.0, 0.0, 0.0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tparam.links.push( link );\n\n\t\t\t\t}\n\n\t\t\t\tiks.push( param );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < data.metadata.boneCount; i ++ ) {\n\n\t\t\t\tconst ik = data.bones[ i ].ik;\n\n\t\t\t\tif ( ik === undefined ) continue;\n\n\t\t\t\tconst param = {\n\t\t\t\t\ttarget: i,\n\t\t\t\t\teffector: ik.effector,\n\t\t\t\t\titeration: ik.iteration,\n\t\t\t\t\tmaxAngle: ik.maxAngle,\n\t\t\t\t\tlinks: []\n\t\t\t\t};\n\n\t\t\t\tfor ( let j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst link = {};\n\t\t\t\t\tlink.index = ik.links[ j ].index;\n\t\t\t\t\tlink.enabled = true;\n\n\t\t\t\t\tif ( ik.links[ j ].angleLimitation === 1 ) {\n\n\t\t\t\t\t\t// Revert if rotationMin/Max doesn't work well\n\t\t\t\t\t\t// link.limitation = new Vector3( 1.0, 0.0, 0.0 );\n\n\t\t\t\t\t\tconst rotationMin = ik.links[ j ].lowerLimitationAngle;\n\t\t\t\t\t\tconst rotationMax = ik.links[ j ].upperLimitationAngle;\n\n\t\t\t\t\t\t// Convert Left to Right coordinate by myself because\n\t\t\t\t\t\t// MMDParser doesn't convert. It's a MMDParser's bug\n\n\t\t\t\t\t\tconst tmp1 = - rotationMax[ 0 ];\n\t\t\t\t\t\tconst tmp2 = - rotationMax[ 1 ];\n\t\t\t\t\t\trotationMax[ 0 ] = - rotationMin[ 0 ];\n\t\t\t\t\t\trotationMax[ 1 ] = - rotationMin[ 1 ];\n\t\t\t\t\t\trotationMin[ 0 ] = tmp1;\n\t\t\t\t\t\trotationMin[ 1 ] = tmp2;\n\n\t\t\t\t\t\tlink.rotationMin = new Vector3().fromArray( rotationMin );\n\t\t\t\t\t\tlink.rotationMax = new Vector3().fromArray( rotationMax );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tparam.links.push( link );\n\n\t\t\t\t}\n\n\t\t\t\tiks.push( param );\n\n\t\t\t\t// Save the reference even from bone data for efficiently\n\t\t\t\t// simulating PMX animation system\n\t\t\t\tbones[ i ].ik = param;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// grants\n\n\t\tif ( data.metadata.format === 'pmx' ) {\n\n\t\t\t// bone index -> grant entry map\n\t\t\tconst grantEntryMap = {};\n\n\t\t\tfor ( let i = 0; i < data.metadata.boneCount; i ++ ) {\n\n\t\t\t\tconst boneData = data.bones[ i ];\n\t\t\t\tconst grant = boneData.grant;\n\n\t\t\t\tif ( grant === undefined ) continue;\n\n\t\t\t\tconst param = {\n\t\t\t\t\tindex: i,\n\t\t\t\t\tparentIndex: grant.parentIndex,\n\t\t\t\t\tratio: grant.ratio,\n\t\t\t\t\tisLocal: grant.isLocal,\n\t\t\t\t\taffectRotation: grant.affectRotation,\n\t\t\t\t\taffectPosition: grant.affectPosition,\n\t\t\t\t\ttransformationClass: boneData.transformationClass\n\t\t\t\t};\n\n\t\t\t\tgrantEntryMap[ i ] = { parent: null, children: [], param: param, visited: false };\n\n\t\t\t}\n\n\t\t\tconst rootEntry = { parent: null, children: [], param: null, visited: false };\n\n\t\t\t// Build a tree representing grant hierarchy\n\n\t\t\tfor ( const boneIndex in grantEntryMap ) {\n\n\t\t\t\tconst grantEntry = grantEntryMap[ boneIndex ];\n\t\t\t\tconst parentGrantEntry = grantEntryMap[ grantEntry.parentIndex ] || rootEntry;\n\n\t\t\t\tgrantEntry.parent = parentGrantEntry;\n\t\t\t\tparentGrantEntry.children.push( grantEntry );\n\n\t\t\t}\n\n\t\t\t// Sort grant parameters from parents to children because\n\t\t\t// grant uses parent's transform that parent's grant is already applied\n\t\t\t// so grant should be applied in order from parents to children\n\n\t\t\tfunction traverse( entry ) {\n\n\t\t\t\tif ( entry.param ) {\n\n\t\t\t\t\tgrants.push( entry.param );\n\n\t\t\t\t\t// Save the reference even from bone data for efficiently\n\t\t\t\t\t// simulating PMX animation system\n\t\t\t\t\tbones[ entry.param.index ].grant = entry.param;\n\n\t\t\t\t}\n\n\t\t\t\tentry.visited = true;\n\n\t\t\t\tfor ( let i = 0, il = entry.children.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst child = entry.children[ i ];\n\n\t\t\t\t\t// Cut off a loop if exists. (Is a grant loop invalid?)\n\t\t\t\t\tif ( ! child.visited ) traverse( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttraverse( rootEntry );\n\n\t\t}\n\n\t\t// morph\n\n\t\tfunction updateAttributes( attribute, morph, ratio ) {\n\n\t\t\tfor ( let i = 0; i < morph.elementCount; i ++ ) {\n\n\t\t\t\tconst element = morph.elements[ i ];\n\n\t\t\t\tlet index;\n\n\t\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\t\tindex = data.morphs[ 0 ].elements[ element.index ].index;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = element.index;\n\n\t\t\t\t}\n\n\t\t\t\tattribute.array[ index * 3 + 0 ] += element.position[ 0 ] * ratio;\n\t\t\t\tattribute.array[ index * 3 + 1 ] += element.position[ 1 ] * ratio;\n\t\t\t\tattribute.array[ index * 3 + 2 ] += element.position[ 2 ] * ratio;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < data.metadata.morphCount; i ++ ) {\n\n\t\t\tconst morph = data.morphs[ i ];\n\t\t\tconst params = { name: morph.name };\n\n\t\t\tconst attribute = new Float32BufferAttribute( data.metadata.vertexCount * 3, 3 );\n\t\t\tattribute.name = morph.name;\n\n\t\t\tfor ( let j = 0; j < data.metadata.vertexCount * 3; j ++ ) {\n\n\t\t\t\tattribute.array[ j ] = positions[ j ];\n\n\t\t\t}\n\n\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\tif ( i !== 0 ) {\n\n\t\t\t\t\tupdateAttributes( attribute, morph, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( morph.type === 0 ) { // group\n\n\t\t\t\t\tfor ( let j = 0; j < morph.elementCount; j ++ ) {\n\n\t\t\t\t\t\tconst morph2 = data.morphs[ morph.elements[ j ].index ];\n\t\t\t\t\t\tconst ratio = morph.elements[ j ].ratio;\n\n\t\t\t\t\t\tif ( morph2.type === 1 ) {\n\n\t\t\t\t\t\t\tupdateAttributes( attribute, morph2, ratio );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( morph.type === 1 ) { // vertex\n\n\t\t\t\t\tupdateAttributes( attribute, morph, 1.0 );\n\n\t\t\t\t} else if ( morph.type === 2 ) { // bone\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 3 ) { // uv\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 4 ) { // additional uv1\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 5 ) { // additional uv2\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 6 ) { // additional uv3\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 7 ) { // additional uv4\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( morph.type === 8 ) { // material\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmorphTargets.push( params );\n\t\t\tmorphPositions.push( attribute );\n\n\t\t}\n\n\t\t// rigid bodies from rigidBodies field.\n\n\t\tfor ( let i = 0; i < data.metadata.rigidBodyCount; i ++ ) {\n\n\t\t\tconst rigidBody = data.rigidBodies[ i ];\n\t\t\tconst params = {};\n\n\t\t\tfor ( const key in rigidBody ) {\n\n\t\t\t\tparams[ key ] = rigidBody[ key ];\n\n\t\t\t}\n\n\t\t\t/*\n\t\t\t\t * RigidBody position parameter in PMX seems global position\n\t\t\t\t * while the one in PMD seems offset from corresponding bone.\n\t\t\t\t * So unify being offset.\n\t\t\t\t */\n\t\t\tif ( data.metadata.format === 'pmx' ) {\n\n\t\t\t\tif ( params.boneIndex !== - 1 ) {\n\n\t\t\t\t\tconst bone = data.bones[ params.boneIndex ];\n\t\t\t\t\tparams.position[ 0 ] -= bone.position[ 0 ];\n\t\t\t\t\tparams.position[ 1 ] -= bone.position[ 1 ];\n\t\t\t\t\tparams.position[ 2 ] -= bone.position[ 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\trigidBodies.push( params );\n\n\t\t}\n\n\t\t// constraints from constraints field.\n\n\t\tfor ( let i = 0; i < data.metadata.constraintCount; i ++ ) {\n\n\t\t\tconst constraint = data.constraints[ i ];\n\t\t\tconst params = {};\n\n\t\t\tfor ( const key in constraint ) {\n\n\t\t\t\tparams[ key ] = constraint[ key ];\n\n\t\t\t}\n\n\t\t\tconst bodyA = rigidBodies[ params.rigidBodyIndex1 ];\n\t\t\tconst bodyB = rigidBodies[ params.rigidBodyIndex2 ];\n\n\t\t\t// Refer to http://www20.atpages.jp/katwat/wp/?p=4135\n\t\t\tif ( bodyA.type !== 0 && bodyB.type === 2 ) {\n\n\t\t\t\tif ( bodyA.boneIndex !== - 1 && bodyB.boneIndex !== - 1 &&\n\t\t\t\t\t data.bones[ bodyB.boneIndex ].parentIndex === bodyA.boneIndex ) {\n\n\t\t\t\t\tbodyB.type = 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconstraints.push( params );\n\n\t\t}\n\n\t\t// build BufferGeometry.\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tgeometry.setAttribute( 'skinIndex', new Uint16BufferAttribute( skinIndices, 4 ) );\n\t\tgeometry.setAttribute( 'skinWeight', new Float32BufferAttribute( skinWeights, 4 ) );\n\t\tgeometry.setIndex( indices );\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tgeometry.addGroup( groups[ i ].offset, groups[ i ].count, i );\n\n\t\t}\n\n\t\tgeometry.bones = bones;\n\n\t\tgeometry.morphTargets = morphTargets;\n\t\tgeometry.morphAttributes.position = morphPositions;\n\t\tgeometry.morphTargetsRelative = false;\n\n\t\tgeometry.userData.MMD = {\n\t\t\tbones: bones,\n\t\t\tiks: iks,\n\t\t\tgrants: grants,\n\t\t\trigidBodies: rigidBodies,\n\t\t\tconstraints: constraints,\n\t\t\tformat: data.metadata.format\n\t\t};\n\n\t\tgeometry.computeBoundingSphere();\n\n\t\treturn geometry;\n\n\t}\n\n}\n\n//\n\n/**\n * @param {THREE.LoadingManager} manager\n */\nclass MaterialBuilder {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = manager;\n\n\t\tthis.textureLoader = new TextureLoader( this.manager );\n\t\tthis.tgaLoader = null; // lazy generation\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.resourcePath = undefined;\n\n\t}\n\n\t/**\n\t * @param {string} crossOrigin\n\t * @return {MaterialBuilder}\n\t */\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @param {string} resourcePath\n\t * @return {MaterialBuilder}\n\t */\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @param {Object} data - parsed PMD/PMX data\n\t * @param {BufferGeometry} geometry - some properties are dependend on geometry\n\t * @param {function} onProgress\n\t * @param {function} onError\n\t * @return {Array}\n\t */\n\tbuild( data, geometry /*, onProgress, onError */ ) {\n\n\t\tconst materials = [];\n\n\t\tconst textures = {};\n\n\t\tthis.textureLoader.setCrossOrigin( this.crossOrigin );\n\n\t\t// materials\n\n\t\tfor ( let i = 0; i < data.metadata.materialCount; i ++ ) {\n\n\t\t\tconst material = data.materials[ i ];\n\n\t\t\tconst params = { userData: { MMD: {} } };\n\n\t\t\tif ( material.name !== undefined ) params.name = material.name;\n\n\t\t\t/*\n\t\t\t\t * Color\n\t\t\t\t *\n\t\t\t\t * MMD MMDToonMaterial\n\t\t\t\t * ambient - emissive * a\n\t\t\t\t * (a = 1.0 without map texture or 0.2 with map texture)\n\t\t\t\t *\n\t\t\t\t * MMDToonMaterial doesn't have ambient. Set it to emissive instead.\n\t\t\t\t * It'll be too bright if material has map texture so using coef 0.2.\n\t\t\t\t */\n\t\t\tparams.diffuse = new Color().setRGB(\n\t\t\t\tmaterial.diffuse[ 0 ],\n\t\t\t\tmaterial.diffuse[ 1 ],\n\t\t\t\tmaterial.diffuse[ 2 ],\n\t\t\t\tSRGBColorSpace\n\t\t\t);\n\t\t\tparams.opacity = material.diffuse[ 3 ];\n\t\t\tparams.specular = new Color().setRGB( ...material.specular, SRGBColorSpace );\n\t\t\tparams.shininess = material.shininess;\n\t\t\tparams.emissive = new Color().setRGB( ...material.ambient, SRGBColorSpace );\n\t\t\tparams.transparent = params.opacity !== 1.0;\n\n\t\t\t//\n\n\t\t\tparams.fog = true;\n\n\t\t\t// blend\n\n\t\t\tparams.blending = CustomBlending;\n\t\t\tparams.blendSrc = SrcAlphaFactor;\n\t\t\tparams.blendDst = OneMinusSrcAlphaFactor;\n\t\t\tparams.blendSrcAlpha = SrcAlphaFactor;\n\t\t\tparams.blendDstAlpha = DstAlphaFactor;\n\n\t\t\t// side\n\n\t\t\tif ( data.metadata.format === 'pmx' && ( material.flag & 0x1 ) === 1 ) {\n\n\t\t\t\tparams.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tparams.side = params.opacity === 1.0 ? FrontSide : DoubleSide;\n\n\t\t\t}\n\n\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\t// map, matcap\n\n\t\t\t\tif ( material.fileName ) {\n\n\t\t\t\t\tconst fileName = material.fileName;\n\t\t\t\t\tconst fileNames = fileName.split( '*' );\n\n\t\t\t\t\t// fileNames[ 0 ]: mapFileName\n\t\t\t\t\t// fileNames[ 1 ]: matcapFileName( optional )\n\n\t\t\t\t\tparams.map = this._loadTexture( fileNames[ 0 ], textures );\n\n\t\t\t\t\tif ( fileNames.length > 1 ) {\n\n\t\t\t\t\t\tconst extension = fileNames[ 1 ].slice( - 4 ).toLowerCase();\n\n\t\t\t\t\t\tparams.matcap = this._loadTexture(\n\t\t\t\t\t\t\tfileNames[ 1 ],\n\t\t\t\t\t\t\ttextures\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tparams.matcapCombine = extension === '.sph'\n\t\t\t\t\t\t\t? MultiplyOperation\n\t\t\t\t\t\t\t: AddOperation;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// gradientMap\n\n\t\t\t\tconst toonFileName = ( material.toonIndex === - 1 )\n\t\t\t\t\t? 'toon00.bmp'\n\t\t\t\t\t: data.toonTextures[ material.toonIndex ].fileName;\n\n\t\t\t\tparams.gradientMap = this._loadTexture(\n\t\t\t\t\ttoonFileName,\n\t\t\t\t\ttextures,\n\t\t\t\t\t{\n\t\t\t\t\t\tisToonTexture: true,\n\t\t\t\t\t\tisDefaultToonTexture: this._isDefaultToonTexture( toonFileName )\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// parameters for OutlineEffect\n\n\t\t\t\tparams.userData.outlineParameters = {\n\t\t\t\t\tthickness: material.edgeFlag === 1 ? 0.003 : 0.0,\n\t\t\t\t\tcolor: [ 0, 0, 0 ],\n\t\t\t\t\talpha: 1.0,\n\t\t\t\t\tvisible: material.edgeFlag === 1\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\t// map\n\n\t\t\t\tif ( material.textureIndex !== - 1 ) {\n\n\t\t\t\t\tparams.map = this._loadTexture( data.textures[ material.textureIndex ], textures );\n\n\t\t\t\t\t// Since PMX spec don't have standard to list map files except color map and env map,\n\t\t\t\t\t// we need to save file name for further mapping, like matching normal map file names after model loaded.\n\t\t\t\t\t// ref: https://gist.github.com/felixjones/f8a06bd48f9da9a4539f#texture\n\t\t\t\t\tparams.userData.MMD.mapFileName = data.textures[ material.textureIndex ];\n\n\t\t\t\t}\n\n\t\t\t\t// matcap TODO: support m.envFlag === 3\n\n\t\t\t\tif ( material.envTextureIndex !== - 1 && ( material.envFlag === 1 || material.envFlag == 2 ) ) {\n\n\t\t\t\t\tparams.matcap = this._loadTexture(\n\t\t\t\t\t\tdata.textures[ material.envTextureIndex ],\n\t\t\t\t\t\ttextures\n\t\t\t\t\t);\n\n\t\t\t\t\t// Same as color map above, keep file name in userData for further usage.\n\t\t\t\t\tparams.userData.MMD.matcapFileName = data.textures[ material.envTextureIndex ];\n\n\t\t\t\t\tparams.matcapCombine = material.envFlag === 1\n\t\t\t\t\t\t? MultiplyOperation\n\t\t\t\t\t\t: AddOperation;\n\n\t\t\t\t}\n\n\t\t\t\t// gradientMap\n\n\t\t\t\tlet toonFileName, isDefaultToon;\n\n\t\t\t\tif ( material.toonIndex === - 1 || material.toonFlag !== 0 ) {\n\n\t\t\t\t\ttoonFileName = 'toon' + ( '0' + ( material.toonIndex + 1 ) ).slice( - 2 ) + '.bmp';\n\t\t\t\t\tisDefaultToon = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttoonFileName = data.textures[ material.toonIndex ];\n\t\t\t\t\tisDefaultToon = false;\n\n\t\t\t\t}\n\n\t\t\t\tparams.gradientMap = this._loadTexture(\n\t\t\t\t\ttoonFileName,\n\t\t\t\t\ttextures,\n\t\t\t\t\t{\n\t\t\t\t\t\tisToonTexture: true,\n\t\t\t\t\t\tisDefaultToonTexture: isDefaultToon\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// parameters for OutlineEffect\n\t\t\t\tparams.userData.outlineParameters = {\n\t\t\t\t\tthickness: material.edgeSize / 300, // TODO: better calculation?\n\t\t\t\t\tcolor: material.edgeColor.slice( 0, 3 ),\n\t\t\t\t\talpha: material.edgeColor[ 3 ],\n\t\t\t\t\tvisible: ( material.flag & 0x10 ) !== 0 && material.edgeSize > 0.0\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tif ( params.map !== undefined ) {\n\n\t\t\t\tif ( ! params.transparent ) {\n\n\t\t\t\t\tthis._checkImageTransparency( params.map, geometry, i );\n\n\t\t\t\t}\n\n\t\t\t\tparams.emissive.multiplyScalar( 0.2 );\n\n\t\t\t}\n\n\t\t\tmaterials.push( new MMDToonMaterial( params ) );\n\n\t\t}\n\n\t\tif ( data.metadata.format === 'pmx' ) {\n\n\t\t\t// set transparent true if alpha morph is defined.\n\n\t\t\tfunction checkAlphaMorph( elements, materials ) {\n\n\t\t\t\tfor ( let i = 0, il = elements.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst element = elements[ i ];\n\n\t\t\t\t\tif ( element.index === - 1 ) continue;\n\n\t\t\t\t\tconst material = materials[ element.index ];\n\n\t\t\t\t\tif ( material.opacity !== element.diffuse[ 3 ] ) {\n\n\t\t\t\t\t\tmaterial.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = data.morphs.length; i < il; i ++ ) {\n\n\t\t\t\tconst morph = data.morphs[ i ];\n\t\t\t\tconst elements = morph.elements;\n\n\t\t\t\tif ( morph.type === 0 ) {\n\n\t\t\t\t\tfor ( let j = 0, jl = elements.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst morph2 = data.morphs[ elements[ j ].index ];\n\n\t\t\t\t\t\tif ( morph2.type !== 8 ) continue;\n\n\t\t\t\t\t\tcheckAlphaMorph( morph2.elements, materials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( morph.type === 8 ) {\n\n\t\t\t\t\tcheckAlphaMorph( elements, materials );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\t// private methods\n\n\t_getTGALoader() {\n\n\t\tif ( this.tgaLoader === null ) {\n\n\t\t\tif ( TGALoader === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.MMDLoader: Import TGALoader' );\n\n\t\t\t}\n\n\t\t\tthis.tgaLoader = new TGALoader( this.manager );\n\n\t\t}\n\n\t\treturn this.tgaLoader;\n\n\t}\n\n\t_isDefaultToonTexture( name ) {\n\n\t\tif ( name.length !== 10 ) return false;\n\n\t\treturn /toon(10|0[0-9])\\.bmp/.test( name );\n\n\t}\n\n\t_loadTexture( filePath, textures, params, onProgress, onError ) {\n\n\t\tparams = params || {};\n\n\t\tconst scope = this;\n\n\t\tlet fullPath;\n\n\t\tif ( params.isDefaultToonTexture === true ) {\n\n\t\t\tlet index;\n\n\t\t\ttry {\n\n\t\t\t\tindex = parseInt( filePath.match( /toon([0-9]{2})\\.bmp$/ )[ 1 ] );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.MMDLoader: ' + filePath + ' seems like a '\n\t\t\t\t\t\t+ 'not right default texture path. Using toon00.bmp instead.' );\n\n\t\t\t\tindex = 0;\n\n\t\t\t}\n\n\t\t\tfullPath = DEFAULT_TOON_TEXTURES[ index ];\n\n\t\t} else {\n\n\t\t\tfullPath = this.resourcePath + filePath;\n\n\t\t}\n\n\t\tif ( textures[ fullPath ] !== undefined ) return textures[ fullPath ];\n\n\t\tlet loader = this.manager.getHandler( fullPath );\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = ( filePath.slice( - 4 ).toLowerCase() === '.tga' )\n\t\t\t\t? this._getTGALoader()\n\t\t\t\t: this.textureLoader;\n\n\t\t}\n\n\t\tconst texture = loader.load( fullPath, function ( t ) {\n\n\t\t\t// MMD toon texture is Axis-Y oriented\n\t\t\t// but Three.js gradient map is Axis-X oriented.\n\t\t\t// So here replaces the toon texture image with the rotated one.\n\t\t\tif ( params.isToonTexture === true ) {\n\n\t\t\t\tt.image = scope._getRotatedImage( t.image );\n\n\t\t\t\tt.magFilter = NearestFilter;\n\t\t\t\tt.minFilter = NearestFilter;\n\n\t\t\t}\n\n\t\t\tt.flipY = false;\n\t\t\tt.wrapS = RepeatWrapping;\n\t\t\tt.wrapT = RepeatWrapping;\n\t\t\tt.colorSpace = SRGBColorSpace;\n\n\t\t\tfor ( let i = 0; i < texture.readyCallbacks.length; i ++ ) {\n\n\t\t\t\ttexture.readyCallbacks[ i ]( texture );\n\n\t\t\t}\n\n\t\t\tdelete texture.readyCallbacks;\n\n\t\t}, onProgress, onError );\n\n\t\ttexture.readyCallbacks = [];\n\n\t\ttextures[ fullPath ] = texture;\n\n\t\treturn texture;\n\n\t}\n\n\t_getRotatedImage( image ) {\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tconst context = canvas.getContext( '2d' );\n\n\t\tconst width = image.width;\n\t\tconst height = image.height;\n\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tcontext.clearRect( 0, 0, width, height );\n\t\tcontext.translate( width / 2.0, height / 2.0 );\n\t\tcontext.rotate( 0.5 * Math.PI ); // 90.0 * Math.PI / 180.0\n\t\tcontext.translate( - width / 2.0, - height / 2.0 );\n\t\tcontext.drawImage( image, 0, 0 );\n\n\t\treturn context.getImageData( 0, 0, width, height );\n\n\t}\n\n\t// Check if the partial image area used by the texture is transparent.\n\t_checkImageTransparency( map, geometry, groupIndex ) {\n\n\t\tmap.readyCallbacks.push( function ( texture ) {\n\n\t\t\t// Is there any efficient ways?\n\t\t\tfunction createImageData( image ) {\n\n\t\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\t\tcanvas.width = image.width;\n\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0 );\n\n\t\t\t\treturn context.getImageData( 0, 0, canvas.width, canvas.height );\n\n\t\t\t}\n\n\t\t\tfunction detectImageTransparency( image, uvs, indices ) {\n\n\t\t\t\tconst width = image.width;\n\t\t\t\tconst height = image.height;\n\t\t\t\tconst data = image.data;\n\t\t\t\tconst threshold = 253;\n\n\t\t\t\tif ( data.length / ( width * height ) !== 4 ) return false;\n\n\t\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\tconst centerUV = { x: 0.0, y: 0.0 };\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tconst index = indices[ i * 3 + j ];\n\t\t\t\t\t\tconst uv = { x: uvs[ index * 2 + 0 ], y: uvs[ index * 2 + 1 ] };\n\n\t\t\t\t\t\tif ( getAlphaByUv( image, uv ) < threshold ) return true;\n\n\t\t\t\t\t\tcenterUV.x += uv.x;\n\t\t\t\t\t\tcenterUV.y += uv.y;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcenterUV.x /= 3;\n\t\t\t\t\tcenterUV.y /= 3;\n\n\t\t\t\t\tif ( getAlphaByUv( image, centerUV ) < threshold ) return true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t/*\n\t\t\t\t * This method expects\n\t\t\t\t * texture.flipY = false\n\t\t\t\t * texture.wrapS = RepeatWrapping\n\t\t\t\t * texture.wrapT = RepeatWrapping\n\t\t\t\t * TODO: more precise\n\t\t\t\t */\n\t\t\tfunction getAlphaByUv( image, uv ) {\n\n\t\t\t\tconst width = image.width;\n\t\t\t\tconst height = image.height;\n\n\t\t\t\tlet x = Math.round( uv.x * width ) % width;\n\t\t\t\tlet y = Math.round( uv.y * height ) % height;\n\n\t\t\t\tif ( x < 0 ) x += width;\n\t\t\t\tif ( y < 0 ) y += height;\n\n\t\t\t\tconst index = y * width + x;\n\n\t\t\t\treturn image.data[ index * 4 + 3 ];\n\n\t\t\t}\n\n\t\t\tif ( texture.isCompressedTexture === true ) {\n\n\t\t\t\tif ( NON_ALPHA_CHANNEL_FORMATS.includes( texture.format ) ) {\n\n\t\t\t\t\tmap.transparent = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// any other way to check transparency of CompressedTexture?\n\t\t\t\t\tmap.transparent = true;\n\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst imageData = texture.image.data !== undefined\n\t\t\t\t? texture.image\n\t\t\t\t: createImageData( texture.image );\n\n\t\t\tconst group = geometry.groups[ groupIndex ];\n\n\t\t\tif ( detectImageTransparency(\n\t\t\t\timageData,\n\t\t\t\tgeometry.attributes.uv.array,\n\t\t\t\tgeometry.index.array.slice( group.start, group.start + group.count ) ) ) {\n\n\t\t\t\tmap.transparent = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\n//\n\nclass AnimationBuilder {\n\n\t/**\n\t * @param {Object} vmd - parsed VMD data\n\t * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n\t * @return {AnimationClip}\n\t */\n\tbuild( vmd, mesh ) {\n\n\t\t// combine skeletal and morph animations\n\n\t\tconst tracks = this.buildSkeletalAnimation( vmd, mesh ).tracks;\n\t\tconst tracks2 = this.buildMorphAnimation( vmd, mesh ).tracks;\n\n\t\tfor ( let i = 0, il = tracks2.length; i < il; i ++ ) {\n\n\t\t\ttracks.push( tracks2[ i ] );\n\n\t\t}\n\n\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t}\n\n\t/**\n\t * @param {Object} vmd - parsed VMD data\n\t * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n\t * @return {AnimationClip}\n\t */\n\tbuildSkeletalAnimation( vmd, mesh ) {\n\n\t\tfunction pushInterpolation( array, interpolation, index ) {\n\n\t\t\tarray.push( interpolation[ index + 0 ] / 127 ); // x1\n\t\t\tarray.push( interpolation[ index + 8 ] / 127 ); // x2\n\t\t\tarray.push( interpolation[ index + 4 ] / 127 ); // y1\n\t\t\tarray.push( interpolation[ index + 12 ] / 127 ); // y2\n\n\t\t}\n\n\t\tconst tracks = [];\n\n\t\tconst motions = {};\n\t\tconst bones = mesh.skeleton.bones;\n\t\tconst boneNameDictionary = {};\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\tboneNameDictionary[ bones[ i ].name ] = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < vmd.metadata.motionCount; i ++ ) {\n\n\t\t\tconst motion = vmd.motions[ i ];\n\t\t\tconst boneName = motion.boneName;\n\n\t\t\tif ( boneNameDictionary[ boneName ] === undefined ) continue;\n\n\t\t\tmotions[ boneName ] = motions[ boneName ] || [];\n\t\t\tmotions[ boneName ].push( motion );\n\n\t\t}\n\n\t\tfor ( const key in motions ) {\n\n\t\t\tconst array = motions[ key ];\n\n\t\t\tarray.sort( function ( a, b ) {\n\n\t\t\t\treturn a.frameNum - b.frameNum;\n\n\t\t\t} );\n\n\t\t\tconst times = [];\n\t\t\tconst positions = [];\n\t\t\tconst rotations = [];\n\t\t\tconst pInterpolations = [];\n\t\t\tconst rInterpolations = [];\n\n\t\t\tconst basePosition = mesh.skeleton.getBoneByName( key ).position.toArray();\n\n\t\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\tconst time = array[ i ].frameNum / 30;\n\t\t\t\tconst position = array[ i ].position;\n\t\t\t\tconst rotation = array[ i ].rotation;\n\t\t\t\tconst interpolation = array[ i ].interpolation;\n\n\t\t\t\ttimes.push( time );\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) positions.push( basePosition[ j ] + position[ j ] );\n\t\t\t\tfor ( let j = 0; j < 4; j ++ ) rotations.push( rotation[ j ] );\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) pushInterpolation( pInterpolations, interpolation, j );\n\n\t\t\t\tpushInterpolation( rInterpolations, interpolation, 3 );\n\n\t\t\t}\n\n\t\t\tconst targetName = '.bones[' + key + ']';\n\n\t\t\ttracks.push( this._createTrack( targetName + '.position', VectorKeyframeTrack, times, positions, pInterpolations ) );\n\t\t\ttracks.push( this._createTrack( targetName + '.quaternion', QuaternionKeyframeTrack, times, rotations, rInterpolations ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t}\n\n\t/**\n\t * @param {Object} vmd - parsed VMD data\n\t * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n\t * @return {AnimationClip}\n\t */\n\tbuildMorphAnimation( vmd, mesh ) {\n\n\t\tconst tracks = [];\n\n\t\tconst morphs = {};\n\t\tconst morphTargetDictionary = mesh.morphTargetDictionary;\n\n\t\tfor ( let i = 0; i < vmd.metadata.morphCount; i ++ ) {\n\n\t\t\tconst morph = vmd.morphs[ i ];\n\t\t\tconst morphName = morph.morphName;\n\n\t\t\tif ( morphTargetDictionary[ morphName ] === undefined ) continue;\n\n\t\t\tmorphs[ morphName ] = morphs[ morphName ] || [];\n\t\t\tmorphs[ morphName ].push( morph );\n\n\t\t}\n\n\t\tfor ( const key in morphs ) {\n\n\t\t\tconst array = morphs[ key ];\n\n\t\t\tarray.sort( function ( a, b ) {\n\n\t\t\t\treturn a.frameNum - b.frameNum;\n\n\t\t\t} );\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\ttimes.push( array[ i ].frameNum / 30 );\n\t\t\t\tvalues.push( array[ i ].weight );\n\n\t\t\t}\n\n\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluences[' + morphTargetDictionary[ key ] + ']', times, values ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t}\n\n\t/**\n\t * @param {Object} vmd - parsed VMD data\n\t * @return {AnimationClip}\n\t */\n\tbuildCameraAnimation( vmd ) {\n\n\t\tfunction pushVector3( array, vec ) {\n\n\t\t\tarray.push( vec.x );\n\t\t\tarray.push( vec.y );\n\t\t\tarray.push( vec.z );\n\n\t\t}\n\n\t\tfunction pushQuaternion( array, q ) {\n\n\t\t\tarray.push( q.x );\n\t\t\tarray.push( q.y );\n\t\t\tarray.push( q.z );\n\t\t\tarray.push( q.w );\n\n\t\t}\n\n\t\tfunction pushInterpolation( array, interpolation, index ) {\n\n\t\t\tarray.push( interpolation[ index * 4 + 0 ] / 127 ); // x1\n\t\t\tarray.push( interpolation[ index * 4 + 1 ] / 127 ); // x2\n\t\t\tarray.push( interpolation[ index * 4 + 2 ] / 127 ); // y1\n\t\t\tarray.push( interpolation[ index * 4 + 3 ] / 127 ); // y2\n\n\t\t}\n\n\t\tconst cameras = vmd.cameras === undefined ? [] : vmd.cameras.slice();\n\n\t\tcameras.sort( function ( a, b ) {\n\n\t\t\treturn a.frameNum - b.frameNum;\n\n\t\t} );\n\n\t\tconst times = [];\n\t\tconst centers = [];\n\t\tconst quaternions = [];\n\t\tconst positions = [];\n\t\tconst fovs = [];\n\n\t\tconst cInterpolations = [];\n\t\tconst qInterpolations = [];\n\t\tconst pInterpolations = [];\n\t\tconst fInterpolations = [];\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst euler = new Euler();\n\t\tconst position = new Vector3();\n\t\tconst center = new Vector3();\n\n\t\tfor ( let i = 0, il = cameras.length; i < il; i ++ ) {\n\n\t\t\tconst motion = cameras[ i ];\n\n\t\t\tconst time = motion.frameNum / 30;\n\t\t\tconst pos = motion.position;\n\t\t\tconst rot = motion.rotation;\n\t\t\tconst distance = motion.distance;\n\t\t\tconst fov = motion.fov;\n\t\t\tconst interpolation = motion.interpolation;\n\n\t\t\ttimes.push( time );\n\n\t\t\tposition.set( 0, 0, - distance );\n\t\t\tcenter.set( pos[ 0 ], pos[ 1 ], pos[ 2 ] );\n\n\t\t\teuler.set( - rot[ 0 ], - rot[ 1 ], - rot[ 2 ] );\n\t\t\tquaternion.setFromEuler( euler );\n\n\t\t\tposition.add( center );\n\t\t\tposition.applyQuaternion( quaternion );\n\n\t\t\tpushVector3( centers, center );\n\t\t\tpushQuaternion( quaternions, quaternion );\n\t\t\tpushVector3( positions, position );\n\n\t\t\tfovs.push( fov );\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tpushInterpolation( cInterpolations, interpolation, j );\n\n\t\t\t}\n\n\t\t\tpushInterpolation( qInterpolations, interpolation, 3 );\n\n\t\t\t// use the same parameter for x, y, z axis.\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tpushInterpolation( pInterpolations, interpolation, 4 );\n\n\t\t\t}\n\n\t\t\tpushInterpolation( fInterpolations, interpolation, 5 );\n\n\t\t}\n\n\t\tconst tracks = [];\n\n\t\t// I expect an object whose name 'target' exists under THREE.Camera\n\t\ttracks.push( this._createTrack( 'target.position', VectorKeyframeTrack, times, centers, cInterpolations ) );\n\n\t\ttracks.push( this._createTrack( '.quaternion', QuaternionKeyframeTrack, times, quaternions, qInterpolations ) );\n\t\ttracks.push( this._createTrack( '.position', VectorKeyframeTrack, times, positions, pInterpolations ) );\n\t\ttracks.push( this._createTrack( '.fov', NumberKeyframeTrack, times, fovs, fInterpolations ) );\n\n\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t}\n\n\t// private method\n\n\t_createTrack( node, typedKeyframeTrack, times, values, interpolations ) {\n\n\t\t/*\n\t\t\t * optimizes here not to let KeyframeTrackPrototype optimize\n\t\t\t * because KeyframeTrackPrototype optimizes times and values but\n\t\t\t * doesn't optimize interpolations.\n\t\t\t */\n\t\tif ( times.length > 2 ) {\n\n\t\t\ttimes = times.slice();\n\t\t\tvalues = values.slice();\n\t\t\tinterpolations = interpolations.slice();\n\n\t\t\tconst stride = values.length / times.length;\n\t\t\tconst interpolateStride = interpolations.length / times.length;\n\n\t\t\tlet index = 1;\n\n\t\t\tfor ( let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < stride; i ++ ) {\n\n\t\t\t\t\tif ( values[ index * stride + i ] !== values[ ( index - 1 ) * stride + i ] ||\n\t\t\t\t\t\t\tvalues[ index * stride + i ] !== values[ aheadIndex * stride + i ] ) {\n\n\t\t\t\t\t\tindex ++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( aheadIndex > index ) {\n\n\t\t\t\t\ttimes[ index ] = times[ aheadIndex ];\n\n\t\t\t\t\tfor ( let i = 0; i < stride; i ++ ) {\n\n\t\t\t\t\t\tvalues[ index * stride + i ] = values[ aheadIndex * stride + i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0; i < interpolateStride; i ++ ) {\n\n\t\t\t\t\t\tinterpolations[ index * interpolateStride + i ] = interpolations[ aheadIndex * interpolateStride + i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttimes.length = index + 1;\n\t\t\tvalues.length = ( index + 1 ) * stride;\n\t\t\tinterpolations.length = ( index + 1 ) * interpolateStride;\n\n\t\t}\n\n\t\tconst track = new typedKeyframeTrack( node, times, values );\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodCubicBezier( result ) {\n\n\t\t\treturn new CubicBezierInterpolation( this.times, this.values, this.getValueSize(), result, new Float32Array( interpolations ) );\n\n\t\t};\n\n\t\treturn track;\n\n\t}\n\n}\n\n// interpolation\n\nclass CubicBezierInterpolation extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer, params ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis.interpolationParams = params;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\t\tconst params = this.interpolationParams;\n\n\t\tconst offset1 = i1 * stride;\n\t\tconst offset0 = offset1 - stride;\n\n\t\t// No interpolation if next key frame is in one frame in 30fps.\n\t\t// This is from MMD animation spec.\n\t\t// '1.5' is for precision loss. times are Float32 in Three.js Animation system.\n\t\tconst weight1 = ( ( t1 - t0 ) < 1 / 30 * 1.5 ) ? 0.0 : ( t - t0 ) / ( t1 - t0 );\n\n\t\tif ( stride === 4 ) { // Quaternion\n\n\t\t\tconst x1 = params[ i1 * 4 + 0 ];\n\t\t\tconst x2 = params[ i1 * 4 + 1 ];\n\t\t\tconst y1 = params[ i1 * 4 + 2 ];\n\t\t\tconst y2 = params[ i1 * 4 + 3 ];\n\n\t\t\tconst ratio = this._calculate( x1, x2, y1, y2, weight1 );\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset0, values, offset1, ratio );\n\n\t\t} else if ( stride === 3 ) { // Vector3\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tconst x1 = params[ i1 * 12 + i * 4 + 0 ];\n\t\t\t\tconst x2 = params[ i1 * 12 + i * 4 + 1 ];\n\t\t\t\tconst y1 = params[ i1 * 12 + i * 4 + 2 ];\n\t\t\t\tconst y2 = params[ i1 * 12 + i * 4 + 3 ];\n\n\t\t\t\tconst ratio = this._calculate( x1, x2, y1, y2, weight1 );\n\n\t\t\t\tresult[ i ] = values[ offset0 + i ] * ( 1 - ratio ) + values[ offset1 + i ] * ratio;\n\n\t\t\t}\n\n\t\t} else { // Number\n\n\t\t\tconst x1 = params[ i1 * 4 + 0 ];\n\t\t\tconst x2 = params[ i1 * 4 + 1 ];\n\t\t\tconst y1 = params[ i1 * 4 + 2 ];\n\t\t\tconst y2 = params[ i1 * 4 + 3 ];\n\n\t\t\tconst ratio = this._calculate( x1, x2, y1, y2, weight1 );\n\n\t\t\tresult[ 0 ] = values[ offset0 ] * ( 1 - ratio ) + values[ offset1 ] * ratio;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t_calculate( x1, x2, y1, y2, x ) {\n\n\t\t/*\n\t\t\t * Cubic Bezier curves\n\t\t\t * https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Cubic_B.C3.A9zier_curves\n\t\t\t *\n\t\t\t * B(t) = ( 1 - t ) ^ 3 * P0\n\t\t\t * + 3 * ( 1 - t ) ^ 2 * t * P1\n\t\t\t * + 3 * ( 1 - t ) * t^2 * P2\n\t\t\t * + t ^ 3 * P3\n\t\t\t * ( 0 <= t <= 1 )\n\t\t\t *\n\t\t\t * MMD uses Cubic Bezier curves for bone and camera animation interpolation.\n\t\t\t * http://d.hatena.ne.jp/edvakf/20111016/1318716097\n\t\t\t *\n\t\t\t * x = ( 1 - t ) ^ 3 * x0\n\t\t\t * + 3 * ( 1 - t ) ^ 2 * t * x1\n\t\t\t * + 3 * ( 1 - t ) * t^2 * x2\n\t\t\t * + t ^ 3 * x3\n\t\t\t * y = ( 1 - t ) ^ 3 * y0\n\t\t\t * + 3 * ( 1 - t ) ^ 2 * t * y1\n\t\t\t * + 3 * ( 1 - t ) * t^2 * y2\n\t\t\t * + t ^ 3 * y3\n\t\t\t * ( x0 = 0, y0 = 0 )\n\t\t\t * ( x3 = 1, y3 = 1 )\n\t\t\t * ( 0 <= t, x1, x2, y1, y2 <= 1 )\n\t\t\t *\n\t\t\t * Here solves this equation with Bisection method,\n\t\t\t * https://en.wikipedia.org/wiki/Bisection_method\n\t\t\t * gets t, and then calculate y.\n\t\t\t *\n\t\t\t * f(t) = 3 * ( 1 - t ) ^ 2 * t * x1\n\t\t\t * + 3 * ( 1 - t ) * t^2 * x2\n\t\t\t * + t ^ 3 - x = 0\n\t\t\t *\n\t\t\t * (Another option: Newton's method\n\t\t\t * https://en.wikipedia.org/wiki/Newton%27s_method)\n\t\t\t */\n\n\t\tlet c = 0.5;\n\t\tlet t = c;\n\t\tlet s = 1.0 - t;\n\t\tconst loop = 15;\n\t\tconst eps = 1e-5;\n\t\tconst math = Math;\n\n\t\tlet sst3, stt3, ttt;\n\n\t\tfor ( let i = 0; i < loop; i ++ ) {\n\n\t\t\tsst3 = 3.0 * s * s * t;\n\t\t\tstt3 = 3.0 * s * t * t;\n\t\t\tttt = t * t * t;\n\n\t\t\tconst ft = ( sst3 * x1 ) + ( stt3 * x2 ) + ( ttt ) - x;\n\n\t\t\tif ( math.abs( ft ) < eps ) break;\n\n\t\t\tc /= 2.0;\n\n\t\t\tt += ( ft < 0 ) ? c : - c;\n\t\t\ts = 1.0 - t;\n\n\t\t}\n\n\t\treturn ( sst3 * y1 ) + ( stt3 * y2 ) + ttt;\n\n\t}\n\n}\n\nclass MMDToonMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMMDToonMaterial = true;\n\n\t\tthis.type = 'MMDToonMaterial';\n\n\t\tthis._matcapCombine = AddOperation;\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\n\t\tthis.combine = MultiplyOperation;\n\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.lights = true;\n\n\t\tthis.vertexShader = MMDToonShader.vertexShader;\n\t\tthis.fragmentShader = MMDToonShader.fragmentShader;\n\n\t\tthis.defines = Object.assign( {}, MMDToonShader.defines );\n\t\tObject.defineProperty( this, 'matcapCombine', {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._matcapCombine;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._matcapCombine = value;\n\n\t\t\t\tswitch ( value ) {\n\n\t\t\t\t\tcase MultiplyOperation:\n\t\t\t\t\t\tthis.defines.MATCAP_BLENDING_MULTIPLY = true;\n\t\t\t\t\t\tdelete this.defines.MATCAP_BLENDING_ADD;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase AddOperation:\n\t\t\t\t\t\tthis.defines.MATCAP_BLENDING_ADD = true;\n\t\t\t\t\t\tdelete this.defines.MATCAP_BLENDING_MULTIPLY;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t} );\n\n\t\tthis.uniforms = UniformsUtils.clone( MMDToonShader.uniforms );\n\n\t\t// merged from MeshToon/Phong/MatcapMaterial\n\t\tconst exposePropertyNames = [\n\t\t\t'specular',\n\t\t\t'opacity',\n\t\t\t'diffuse',\n\n\t\t\t'map',\n\t\t\t'matcap',\n\t\t\t'gradientMap',\n\n\t\t\t'lightMap',\n\t\t\t'lightMapIntensity',\n\n\t\t\t'aoMap',\n\t\t\t'aoMapIntensity',\n\n\t\t\t'emissive',\n\t\t\t'emissiveMap',\n\n\t\t\t'bumpMap',\n\t\t\t'bumpScale',\n\n\t\t\t'normalMap',\n\t\t\t'normalScale',\n\n\t\t\t'displacemantBias',\n\t\t\t'displacemantMap',\n\t\t\t'displacemantScale',\n\n\t\t\t'specularMap',\n\n\t\t\t'alphaMap',\n\n\t\t\t'reflectivity',\n\t\t\t'refractionRatio',\n\t\t];\n\t\tfor ( const propertyName of exposePropertyNames ) {\n\n\t\t\tObject.defineProperty( this, propertyName, {\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms[ propertyName ].value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms[ propertyName ].value = value;\n\n\t\t\t\t},\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// Special path for shininess to handle zero shininess properly\n\t\tthis._shininess = 30;\n\t\tObject.defineProperty( this, 'shininess', {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._shininess;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._shininess = value;\n\t\t\t\tthis.uniforms.shininess.value = Math.max( this._shininess, 1e-4 ); // To prevent pow( 0.0, 0.0 )\n\n\t\t\t},\n\n\t\t} );\n\n\t\tObject.defineProperty(\n\t\t\tthis,\n\t\t\t'color',\n\t\t\tObject.getOwnPropertyDescriptor( this, 'diffuse' )\n\t\t);\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.matcapCombine = source.matcapCombine;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\t\tthis.normalMapType = source.normalMapType;\n\n\t\tthis.combine = source.combine;\n\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MMDLoader };\n", "import {\n\tColor,\n\tDefaultLoadingManager,\n\tFileLoader,\n\tFrontSide,\n\tLoader,\n\tLoaderUtils,\n\tMeshPhongMaterial,\n\tRepeatWrapping,\n\tTextureLoader,\n\tVector2,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * Loads a Wavefront .mtl file specifying materials\n */\n\nclass MTLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Loads and parses a MTL asset from a URL.\n\t *\n\t * @param {String} url - URL to the MTL file.\n\t * @param {Function} [onLoad] - Callback invoked with the loaded object.\n\t * @param {Function} [onProgress] - Callback for download progress.\n\t * @param {Function} [onError] - Callback for download errors.\n\t *\n\t * @see setPath setResourcePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setResourcePath() explicitly prior to load.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterialOptions( value ) {\n\n\t\tthis.materialOptions = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parses a MTL file.\n\t *\n\t * @param {String} text - Content of MTL file\n\t * @return {MaterialCreator}\n\t *\n\t * @see setPath setResourcePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setResourcePath() explicitly prior to parse.\n\t */\n\tparse( text, path ) {\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet info = {};\n\t\tconst delimiter_pattern = /\\s+/;\n\t\tconst materialsInfo = {};\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tlet line = lines[ i ];\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.length === 0 || line.charAt( 0 ) === '#' ) {\n\n\t\t\t\t// Blank line or comment ignore\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst pos = line.indexOf( ' ' );\n\n\t\t\tlet key = ( pos >= 0 ) ? line.substring( 0, pos ) : line;\n\t\t\tkey = key.toLowerCase();\n\n\t\t\tlet value = ( pos >= 0 ) ? line.substring( pos + 1 ) : '';\n\t\t\tvalue = value.trim();\n\n\t\t\tif ( key === 'newmtl' ) {\n\n\t\t\t\t// New material\n\n\t\t\t\tinfo = { name: value };\n\t\t\t\tmaterialsInfo[ value ] = info;\n\n\t\t\t} else {\n\n\t\t\t\tif ( key === 'ka' || key === 'kd' || key === 'ks' || key === 'ke' ) {\n\n\t\t\t\t\tconst ss = value.split( delimiter_pattern, 3 );\n\t\t\t\t\tinfo[ key ] = [ parseFloat( ss[ 0 ] ), parseFloat( ss[ 1 ] ), parseFloat( ss[ 2 ] ) ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinfo[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst materialCreator = new MaterialCreator( this.resourcePath || path, this.materialOptions );\n\t\tmaterialCreator.setCrossOrigin( this.crossOrigin );\n\t\tmaterialCreator.setManager( this.manager );\n\t\tmaterialCreator.setMaterials( materialsInfo );\n\t\treturn materialCreator;\n\n\t}\n\n}\n\n/**\n * Create a new MTLLoader.MaterialCreator\n * @param baseUrl - Url relative to which textures are loaded\n * @param options - Set of options on how to construct the materials\n * side: Which side to apply the material\n * FrontSide (default), THREE.BackSide, THREE.DoubleSide\n * wrap: What type of wrapping to apply for textures\n * RepeatWrapping (default), THREE.ClampToEdgeWrapping, THREE.MirroredRepeatWrapping\n * normalizeRGB: RGBs need to be normalized to 0-1 from 0-255\n * Default: false, assumed to be already normalized\n * ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's\n * Default: false\n * @constructor\n */\n\nclass MaterialCreator {\n\n\tconstructor( baseUrl = '', options = {} ) {\n\n\t\tthis.baseUrl = baseUrl;\n\t\tthis.options = options;\n\t\tthis.materialsInfo = {};\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t\tthis.crossOrigin = 'anonymous';\n\n\t\tthis.side = ( this.options.side !== undefined ) ? this.options.side : FrontSide;\n\t\tthis.wrap = ( this.options.wrap !== undefined ) ? this.options.wrap : RepeatWrapping;\n\n\t}\n\n\tsetCrossOrigin( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t}\n\n\tsetManager( value ) {\n\n\t\tthis.manager = value;\n\n\t}\n\n\tsetMaterials( materialsInfo ) {\n\n\t\tthis.materialsInfo = this.convert( materialsInfo );\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t}\n\n\tconvert( materialsInfo ) {\n\n\t\tif ( ! this.options ) return materialsInfo;\n\n\t\tconst converted = {};\n\n\t\tfor ( const mn in materialsInfo ) {\n\n\t\t\t// Convert materials info into normalized form based on options\n\n\t\t\tconst mat = materialsInfo[ mn ];\n\n\t\t\tconst covmat = {};\n\n\t\t\tconverted[ mn ] = covmat;\n\n\t\t\tfor ( const prop in mat ) {\n\n\t\t\t\tlet save = true;\n\t\t\t\tlet value = mat[ prop ];\n\t\t\t\tconst lprop = prop.toLowerCase();\n\n\t\t\t\tswitch ( lprop ) {\n\n\t\t\t\t\tcase 'kd':\n\t\t\t\t\tcase 'ka':\n\t\t\t\t\tcase 'ks':\n\n\t\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\t\tif ( this.options && this.options.normalizeRGB ) {\n\n\t\t\t\t\t\t\tvalue = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( this.options && this.options.ignoreZeroRGBs ) {\n\n\t\t\t\t\t\t\tif ( value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0 ) {\n\n\t\t\t\t\t\t\t\t// ignore\n\n\t\t\t\t\t\t\t\tsave = false;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( save ) {\n\n\t\t\t\t\tcovmat[ lprop ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn converted;\n\n\t}\n\n\tpreload() {\n\n\t\tfor ( const mn in this.materialsInfo ) {\n\n\t\t\tthis.create( mn );\n\n\t\t}\n\n\t}\n\n\tgetIndex( materialName ) {\n\n\t\treturn this.nameLookup[ materialName ];\n\n\t}\n\n\tgetAsArray() {\n\n\t\tlet index = 0;\n\n\t\tfor ( const mn in this.materialsInfo ) {\n\n\t\t\tthis.materialsArray[ index ] = this.create( mn );\n\t\t\tthis.nameLookup[ mn ] = index;\n\t\t\tindex ++;\n\n\t\t}\n\n\t\treturn this.materialsArray;\n\n\t}\n\n\tcreate( materialName ) {\n\n\t\tif ( this.materials[ materialName ] === undefined ) {\n\n\t\t\tthis.createMaterial_( materialName );\n\n\t\t}\n\n\t\treturn this.materials[ materialName ];\n\n\t}\n\n\tcreateMaterial_( materialName ) {\n\n\t\t// Create material\n\n\t\tconst scope = this;\n\t\tconst mat = this.materialsInfo[ materialName ];\n\t\tconst params = {\n\n\t\t\tname: materialName,\n\t\t\tside: this.side\n\n\t\t};\n\n\t\tfunction resolveURL( baseUrl, url ) {\n\n\t\t\tif ( typeof url !== 'string' || url === '' )\n\t\t\t\treturn '';\n\n\t\t\t// Absolute URL\n\t\t\tif ( /^https?:\\/\\//i.test( url ) ) return url;\n\n\t\t\treturn baseUrl + url;\n\n\t\t}\n\n\t\tfunction setMapForType( mapType, value ) {\n\n\t\t\tif ( params[ mapType ] ) return; // Keep the first encountered texture\n\n\t\t\tconst texParams = scope.getTextureParams( value, params );\n\t\t\tconst map = scope.loadTexture( resolveURL( scope.baseUrl, texParams.url ) );\n\n\t\t\tmap.repeat.copy( texParams.scale );\n\t\t\tmap.offset.copy( texParams.offset );\n\n\t\t\tmap.wrapS = scope.wrap;\n\t\t\tmap.wrapT = scope.wrap;\n\n\t\t\tif ( mapType === 'map' || mapType === 'emissiveMap' ) {\n\n\t\t\t\tmap.colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\tparams[ mapType ] = map;\n\n\t\t}\n\n\t\tfor ( const prop in mat ) {\n\n\t\t\tconst value = mat[ prop ];\n\t\t\tlet n;\n\n\t\t\tif ( value === '' ) continue;\n\n\t\t\tswitch ( prop.toLowerCase() ) {\n\n\t\t\t\t// Ns is material specular exponent\n\n\t\t\t\tcase 'kd':\n\n\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\tparams.color = new Color().fromArray( value ).convertSRGBToLinear();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ks':\n\n\t\t\t\t\t// Specular color (color when light is reflected from shiny surface) using RGB values\n\t\t\t\t\tparams.specular = new Color().fromArray( value ).convertSRGBToLinear();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ke':\n\n\t\t\t\t\t// Emissive using RGB values\n\t\t\t\t\tparams.emissive = new Color().fromArray( value ).convertSRGBToLinear();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_kd':\n\n\t\t\t\t\t// Diffuse texture map\n\n\t\t\t\t\tsetMapForType( 'map', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ks':\n\n\t\t\t\t\t// Specular map\n\n\t\t\t\t\tsetMapForType( 'specularMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ke':\n\n\t\t\t\t\t// Emissive map\n\n\t\t\t\t\tsetMapForType( 'emissiveMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'norm':\n\n\t\t\t\t\tsetMapForType( 'normalMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_bump':\n\t\t\t\tcase 'bump':\n\n\t\t\t\t\t// Bump texture map\n\n\t\t\t\t\tsetMapForType( 'bumpMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_d':\n\n\t\t\t\t\t// Alpha map\n\n\t\t\t\t\tsetMapForType( 'alphaMap', value );\n\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ns':\n\n\t\t\t\t\t// The specular exponent (defines the focus of the specular highlight)\n\t\t\t\t\t// A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.\n\n\t\t\t\t\tparams.shininess = parseFloat( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'd':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( n < 1 ) {\n\n\t\t\t\t\t\tparams.opacity = n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'tr':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( this.options && this.options.invertTrProperty ) n = 1 - n;\n\n\t\t\t\t\tif ( n > 0 ) {\n\n\t\t\t\t\t\tparams.opacity = 1 - n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials[ materialName ] = new MeshPhongMaterial( params );\n\t\treturn this.materials[ materialName ];\n\n\t}\n\n\tgetTextureParams( value, matParams ) {\n\n\t\tconst texParams = {\n\n\t\t\tscale: new Vector2( 1, 1 ),\n\t\t\toffset: new Vector2( 0, 0 )\n\n\t\t };\n\n\t\tconst items = value.split( /\\s+/ );\n\t\tlet pos;\n\n\t\tpos = items.indexOf( '-bm' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\tmatParams.bumpScale = parseFloat( items[ pos + 1 ] );\n\t\t\titems.splice( pos, 2 );\n\n\t\t}\n\n\t\tpos = items.indexOf( '-s' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.scale.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\tpos = items.indexOf( '-o' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.offset.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\ttexParams.url = items.join( ' ' ).trim();\n\t\treturn texParams;\n\n\t}\n\n\tloadTexture( url, mapping, onLoad, onProgress, onError ) {\n\n\t\tconst manager = ( this.manager !== undefined ) ? this.manager : DefaultLoadingManager;\n\t\tlet loader = manager.getHandler( url );\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = new TextureLoader( manager );\n\n\t\t}\n\n\t\tif ( loader.setCrossOrigin ) loader.setCrossOrigin( this.crossOrigin );\n\n\t\tconst texture = loader.load( url, onLoad, onProgress, onError );\n\n\t\tif ( mapping !== undefined ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t}\n\n}\n\nexport { MTLLoader };\n", "import {\n\tClampToEdgeWrapping,\n\tDoubleSide,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tPlaneGeometry,\n\tTexture,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * This class has been made to hold a slice of a volume data\n * @class\n * @param {Volume} volume The associated volume\n * @param {number} [index=0] The index of the slice\n * @param {string} [axis='z'] For now only 'x', 'y' or 'z' but later it will change to a normal vector\n * @see Volume\n */\nclass VolumeSlice {\n\n\tconstructor( volume, index, axis ) {\n\n\t\tconst slice = this;\n\t\t/**\n\t\t * @member {Volume} volume The associated volume\n\t\t */\n\t\tthis.volume = volume;\n\t\t/**\n\t\t * @member {Number} index The index of the slice, if changed, will automatically call updateGeometry at the next repaint\n\t\t */\n\t\tindex = index || 0;\n\t\tObject.defineProperty( this, 'index', {\n\t\t\tget: function () {\n\n\t\t\t\treturn index;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tindex = value;\n\t\t\t\tslice.geometryNeedsUpdate = true;\n\t\t\t\treturn index;\n\n\t\t\t}\n\t\t} );\n\t\t/**\n\t\t * @member {String} axis The normal axis\n\t\t */\n\t\tthis.axis = axis || 'z';\n\n\t\t/**\n\t\t * @member {HTMLCanvasElement} canvas The final canvas used for the texture\n\t\t */\n\t\t/**\n\t\t * @member {CanvasRenderingContext2D} ctx Context of the canvas\n\t\t */\n\t\tthis.canvas = document.createElement( 'canvas' );\n\t\t/**\n\t\t * @member {HTMLCanvasElement} canvasBuffer The intermediary canvas used to paint the data\n\t\t */\n\t\t/**\n\t\t * @member {CanvasRenderingContext2D} ctxBuffer Context of the canvas buffer\n\t\t */\n\t\tthis.canvasBuffer = document.createElement( 'canvas' );\n\t\tthis.updateGeometry();\n\n\n\t\tconst canvasMap = new Texture( this.canvas );\n\t\tcanvasMap.minFilter = LinearFilter;\n\t\tcanvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping;\n\t\tcanvasMap.colorSpace = SRGBColorSpace;\n\t\tconst material = new MeshBasicMaterial( { map: canvasMap, side: DoubleSide, transparent: true } );\n\t\t/**\n\t\t * @member {Mesh} mesh The mesh ready to get used in the scene\n\t\t */\n\t\tthis.mesh = new Mesh( this.geometry, material );\n\t\tthis.mesh.matrixAutoUpdate = false;\n\t\t/**\n\t\t * @member {Boolean} geometryNeedsUpdate If set to true, updateGeometry will be triggered at the next repaint\n\t\t */\n\t\tthis.geometryNeedsUpdate = true;\n\t\tthis.repaint();\n\n\t\t/**\n\t\t * @member {Number} iLength Width of slice in the original coordinate system, corresponds to the width of the buffer canvas\n\t\t */\n\n\t\t/**\n\t\t * @member {Number} jLength Height of slice in the original coordinate system, corresponds to the height of the buffer canvas\n\t\t */\n\n\t\t/**\n\t\t * @member {Function} sliceAccess Function that allow the slice to access right data\n\t\t * @see Volume.extractPerpendicularPlane\n\t\t * @param {Number} i The first coordinate\n\t\t * @param {Number} j The second coordinate\n\t\t * @returns {Number} the index corresponding to the voxel in volume.data of the given position in the slice\n\t\t */\n\n\n\t}\n\n\t/**\n\t * @member {Function} repaint Refresh the texture and the geometry if geometryNeedsUpdate is set to true\n\t * @memberof VolumeSlice\n\t */\n\trepaint() {\n\n\t\tif ( this.geometryNeedsUpdate ) {\n\n\t\t\tthis.updateGeometry();\n\n\t\t}\n\n\t\tconst iLength = this.iLength,\n\t\t\tjLength = this.jLength,\n\t\t\tsliceAccess = this.sliceAccess,\n\t\t\tvolume = this.volume,\n\t\t\tcanvas = this.canvasBuffer,\n\t\t\tctx = this.ctxBuffer;\n\n\n\t\t// get the imageData and pixel array from the canvas\n\t\tconst imgData = ctx.getImageData( 0, 0, iLength, jLength );\n\t\tconst data = imgData.data;\n\t\tconst volumeData = volume.data;\n\t\tconst upperThreshold = volume.upperThreshold;\n\t\tconst lowerThreshold = volume.lowerThreshold;\n\t\tconst windowLow = volume.windowLow;\n\t\tconst windowHigh = volume.windowHigh;\n\n\t\t// manipulate some pixel elements\n\t\tlet pixelCount = 0;\n\n\t\tif ( volume.dataType === 'label' ) {\n\n\t\t\t//this part is currently useless but will be used when colortables will be handled\n\t\t\tfor ( let j = 0; j < jLength; j ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < iLength; i ++ ) {\n\n\t\t\t\t\tlet label = volumeData[ sliceAccess( i, j ) ];\n\t\t\t\t\tlabel = label >= this.colorMap.length ? ( label % this.colorMap.length ) + 1 : label;\n\t\t\t\t\tconst color = this.colorMap[ label ];\n\t\t\t\t\tdata[ 4 * pixelCount ] = ( color >> 24 ) & 0xff;\n\t\t\t\t\tdata[ 4 * pixelCount + 1 ] = ( color >> 16 ) & 0xff;\n\t\t\t\t\tdata[ 4 * pixelCount + 2 ] = ( color >> 8 ) & 0xff;\n\t\t\t\t\tdata[ 4 * pixelCount + 3 ] = color & 0xff;\n\t\t\t\t\tpixelCount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let j = 0; j < jLength; j ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < iLength; i ++ ) {\n\n\t\t\t\t\tlet value = volumeData[ sliceAccess( i, j ) ];\n\t\t\t\t\tlet alpha = 0xff;\n\t\t\t\t\t//apply threshold\n\t\t\t\t\talpha = upperThreshold >= value ? ( lowerThreshold <= value ? alpha : 0 ) : 0;\n\t\t\t\t\t//apply window level\n\t\t\t\t\tvalue = Math.floor( 255 * ( value - windowLow ) / ( windowHigh - windowLow ) );\n\t\t\t\t\tvalue = value > 255 ? 255 : ( value < 0 ? 0 : value | 0 );\n\n\t\t\t\t\tdata[ 4 * pixelCount ] = value;\n\t\t\t\t\tdata[ 4 * pixelCount + 1 ] = value;\n\t\t\t\t\tdata[ 4 * pixelCount + 2 ] = value;\n\t\t\t\t\tdata[ 4 * pixelCount + 3 ] = alpha;\n\t\t\t\t\tpixelCount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tctx.putImageData( imgData, 0, 0 );\n\t\tthis.ctx.drawImage( canvas, 0, 0, iLength, jLength, 0, 0, this.canvas.width, this.canvas.height );\n\n\n\t\tthis.mesh.material.map.needsUpdate = true;\n\n\t}\n\n\t/**\n\t * @member {Function} Refresh the geometry according to axis and index\n\t * @see Volume.extractPerpendicularPlane\n\t * @memberof VolumeSlice\n\t */\n\tupdateGeometry() {\n\n\t\tconst extracted = this.volume.extractPerpendicularPlane( this.axis, this.index );\n\t\tthis.sliceAccess = extracted.sliceAccess;\n\t\tthis.jLength = extracted.jLength;\n\t\tthis.iLength = extracted.iLength;\n\t\tthis.matrix = extracted.matrix;\n\n\t\tthis.canvas.width = extracted.planeWidth;\n\t\tthis.canvas.height = extracted.planeHeight;\n\t\tthis.canvasBuffer.width = this.iLength;\n\t\tthis.canvasBuffer.height = this.jLength;\n\t\tthis.ctx = this.canvas.getContext( '2d' );\n\t\tthis.ctxBuffer = this.canvasBuffer.getContext( '2d' );\n\n\t\tif ( this.geometry ) this.geometry.dispose(); // dispose existing geometry\n\n\t\tthis.geometry = new PlaneGeometry( extracted.planeWidth, extracted.planeHeight );\n\n\t\tif ( this.mesh ) {\n\n\t\t\tthis.mesh.geometry = this.geometry;\n\t\t\t//reset mesh matrix\n\t\t\tthis.mesh.matrix.identity();\n\t\t\tthis.mesh.applyMatrix4( this.matrix );\n\n\t\t}\n\n\t\tthis.geometryNeedsUpdate = false;\n\n\t}\n\n}\n\nexport { VolumeSlice };\n", "import {\n\tMatrix3,\n\tMatrix4,\n\tVector3\n} from 'three';\nimport { VolumeSlice } from '../misc/VolumeSlice.js';\n\n/**\n * This class had been written to handle the output of the NRRD loader.\n * It contains a volume of data and informations about it.\n * For now it only handles 3 dimensional data.\n * See the webgl_loader_nrrd.html example and the loaderNRRD.js file to see how to use this class.\n * @class\n * @param {number} xLength Width of the volume\n * @param {number} yLength Length of the volume\n * @param {number} zLength Depth of the volume\n * @param {string} type The type of data (uint8, uint16, ...)\n * @param {ArrayBuffer} arrayBuffer The buffer with volume data\n */\nclass Volume {\n\n\tconstructor( xLength, yLength, zLength, type, arrayBuffer ) {\n\n\t\tif ( xLength !== undefined ) {\n\n\t\t\t/**\n\t\t\t * @member {number} xLength Width of the volume in the IJK coordinate system\n\t\t\t */\n\t\t\tthis.xLength = Number( xLength ) || 1;\n\t\t\t/**\n\t\t\t * @member {number} yLength Height of the volume in the IJK coordinate system\n\t\t\t */\n\t\t\tthis.yLength = Number( yLength ) || 1;\n\t\t\t/**\n\t\t\t * @member {number} zLength Depth of the volume in the IJK coordinate system\n\t\t\t */\n\t\t\tthis.zLength = Number( zLength ) || 1;\n\t\t\t/**\n\t\t\t * @member {Array} The order of the Axis dictated by the NRRD header\n\t\t\t */\n\t\t\tthis.axisOrder = [ 'x', 'y', 'z' ];\n\t\t\t/**\n\t\t\t * @member {TypedArray} data Data of the volume\n\t\t\t */\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'Uint8' :\n\t\t\t\tcase 'uint8' :\n\t\t\t\tcase 'uchar' :\n\t\t\t\tcase 'unsigned char' :\n\t\t\t\tcase 'uint8_t' :\n\t\t\t\t\tthis.data = new Uint8Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Int8' :\n\t\t\t\tcase 'int8' :\n\t\t\t\tcase 'signed char' :\n\t\t\t\tcase 'int8_t' :\n\t\t\t\t\tthis.data = new Int8Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Int16' :\n\t\t\t\tcase 'int16' :\n\t\t\t\tcase 'short' :\n\t\t\t\tcase 'short int' :\n\t\t\t\tcase 'signed short' :\n\t\t\t\tcase 'signed short int' :\n\t\t\t\tcase 'int16_t' :\n\t\t\t\t\tthis.data = new Int16Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Uint16' :\n\t\t\t\tcase 'uint16' :\n\t\t\t\tcase 'ushort' :\n\t\t\t\tcase 'unsigned short' :\n\t\t\t\tcase 'unsigned short int' :\n\t\t\t\tcase 'uint16_t' :\n\t\t\t\t\tthis.data = new Uint16Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Int32' :\n\t\t\t\tcase 'int32' :\n\t\t\t\tcase 'int' :\n\t\t\t\tcase 'signed int' :\n\t\t\t\tcase 'int32_t' :\n\t\t\t\t\tthis.data = new Int32Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Uint32' :\n\t\t\t\tcase 'uint32' :\n\t\t\t\tcase 'uint' :\n\t\t\t\tcase 'unsigned int' :\n\t\t\t\tcase 'uint32_t' :\n\t\t\t\t\tthis.data = new Uint32Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'longlong' :\n\t\t\t\tcase 'long long' :\n\t\t\t\tcase 'long long int' :\n\t\t\t\tcase 'signed long long' :\n\t\t\t\tcase 'signed long long int' :\n\t\t\t\tcase 'int64' :\n\t\t\t\tcase 'int64_t' :\n\t\t\t\tcase 'ulonglong' :\n\t\t\t\tcase 'unsigned long long' :\n\t\t\t\tcase 'unsigned long long int' :\n\t\t\t\tcase 'uint64' :\n\t\t\t\tcase 'uint64_t' :\n\t\t\t\t\tthrow new Error( 'Error in Volume constructor : this type is not supported in JavaScript' );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Float32' :\n\t\t\t\tcase 'float32' :\n\t\t\t\tcase 'float' :\n\t\t\t\t\tthis.data = new Float32Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Float64' :\n\t\t\t\tcase 'float64' :\n\t\t\t\tcase 'double' :\n\t\t\t\t\tthis.data = new Float64Array( arrayBuffer );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault :\n\t\t\t\t\tthis.data = new Uint8Array( arrayBuffer );\n\n\t\t\t}\n\n\t\t\tif ( this.data.length !== this.xLength * this.yLength * this.zLength ) {\n\n\t\t\t\tthrow new Error( 'Error in Volume constructor, lengths are not matching arrayBuffer size' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * @member {Array} spacing Spacing to apply to the volume from IJK to RAS coordinate system\n\t\t */\n\t\tthis.spacing = [ 1, 1, 1 ];\n\t\t/**\n\t\t * @member {Array} offset Offset of the volume in the RAS coordinate system\n\t\t */\n\t\tthis.offset = [ 0, 0, 0 ];\n\t\t/**\n\t\t * @member {Martrix3} matrix The IJK to RAS matrix\n\t\t */\n\t\tthis.matrix = new Matrix3();\n\t\tthis.matrix.identity();\n\t\t/**\n\t\t * @member {Martrix3} inverseMatrix The RAS to IJK matrix\n\t\t */\n\t\t/**\n\t\t * @member {number} lowerThreshold The voxels with values under this threshold won't appear in the slices.\n\t\t * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume\n\t\t */\n\t\tlet lowerThreshold = - Infinity;\n\t\tObject.defineProperty( this, 'lowerThreshold', {\n\t\t\tget: function () {\n\n\t\t\t\treturn lowerThreshold;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tlowerThreshold = value;\n\t\t\t\tthis.sliceList.forEach( function ( slice ) {\n\n\t\t\t\t\tslice.geometryNeedsUpdate = true;\n\n\t\t\t\t} );\n\n\t\t\t}\n\t\t} );\n\t\t/**\n\t\t * @member {number} upperThreshold The voxels with values over this threshold won't appear in the slices.\n\t\t * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume\n\t\t */\n\t\tlet upperThreshold = Infinity;\n\t\tObject.defineProperty( this, 'upperThreshold', {\n\t\t\tget: function () {\n\n\t\t\t\treturn upperThreshold;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tupperThreshold = value;\n\t\t\t\tthis.sliceList.forEach( function ( slice ) {\n\n\t\t\t\t\tslice.geometryNeedsUpdate = true;\n\n\t\t\t\t} );\n\n\t\t\t}\n\t\t} );\n\n\n\t\t/**\n\t\t * @member {Array} sliceList The list of all the slices associated to this volume\n\t\t */\n\t\tthis.sliceList = [];\n\n\n\t\t/**\n\t\t * @member {boolean} segmentation in segmentation mode, it can load 16-bits nrrds correctly\n\t\t */\n\t\tthis.segmentation = false;\n\n\n\t\t/**\n\t\t * @member {Array} RASDimensions This array holds the dimensions of the volume in the RAS space\n\t\t */\n\n\n\n\t}\n\n\t/**\n\t * @member {Function} getData Shortcut for data[access(i,j,k)]\n\t * @memberof Volume\n\t * @param {number} i First coordinate\n\t * @param {number} j Second coordinate\n\t * @param {number} k Third coordinate\n\t * @returns {number} value in the data array\n\t */\n\tgetData( i, j, k ) {\n\n\t\treturn this.data[ k * this.xLength * this.yLength + j * this.xLength + i ];\n\n\t}\n\n\t/**\n\t * @member {Function} access compute the index in the data array corresponding to the given coordinates in IJK system\n\t * @memberof Volume\n\t * @param {number} i First coordinate\n\t * @param {number} j Second coordinate\n\t * @param {number} k Third coordinate\n\t * @returns {number} index\n\t */\n\taccess( i, j, k ) {\n\n\t\treturn k * this.xLength * this.yLength + j * this.xLength + i;\n\n\t}\n\n\t/**\n\t * @member {Function} reverseAccess Retrieve the IJK coordinates of the voxel corresponding of the given index in the data\n\t * @memberof Volume\n\t * @param {number} index index of the voxel\n\t * @returns {Array} [x,y,z]\n\t */\n\treverseAccess( index ) {\n\n\t\tconst z = Math.floor( index / ( this.yLength * this.xLength ) );\n\t\tconst y = Math.floor( ( index - z * this.yLength * this.xLength ) / this.xLength );\n\t\tconst x = index - z * this.yLength * this.xLength - y * this.xLength;\n\t\treturn [ x, y, z ];\n\n\t}\n\n\t/**\n\t * @member {Function} map Apply a function to all the voxels, be careful, the value will be replaced\n\t * @memberof Volume\n\t * @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters :\n\t * value of the voxel\n\t * index of the voxel\n\t * the data (TypedArray)\n\t * @param {Object} context You can specify a context in which call the function, default if this Volume\n\t * @returns {Volume} this\n\t */\n\tmap( functionToMap, context ) {\n\n\t\tconst length = this.data.length;\n\t\tcontext = context || this;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tthis.data[ i ] = functionToMap.call( context, this.data[ i ], i, this.data );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @member {Function} extractPerpendicularPlane Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess, the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system.\n\t * @memberof Volume\n\t * @param {string} axis the normal axis to the slice 'x' 'y' or 'z'\n\t * @param {number} index the index of the slice\n\t * @returns {Object} an object containing all the usefull information on the geometry of the slice\n\t */\n\textractPerpendicularPlane( axis, RASIndex ) {\n\n\t\tlet firstSpacing,\n\t\t\tsecondSpacing,\n\t\t\tpositionOffset,\n\t\t\tIJKIndex;\n\n\t\tconst axisInIJK = new Vector3(),\n\t\t\tfirstDirection = new Vector3(),\n\t\t\tsecondDirection = new Vector3(),\n\t\t\tplaneMatrix = ( new Matrix4() ).identity(),\n\t\t\tvolume = this;\n\n\t\tconst dimensions = new Vector3( this.xLength, this.yLength, this.zLength );\n\n\n\t\tswitch ( axis ) {\n\n\t\t\tcase 'x' :\n\t\t\t\taxisInIJK.set( 1, 0, 0 );\n\t\t\t\tfirstDirection.set( 0, 0, - 1 );\n\t\t\t\tsecondDirection.set( 0, - 1, 0 );\n\t\t\t\tfirstSpacing = this.spacing[ this.axisOrder.indexOf( 'z' ) ];\n\t\t\t\tsecondSpacing = this.spacing[ this.axisOrder.indexOf( 'y' ) ];\n\t\t\t\tIJKIndex = new Vector3( RASIndex, 0, 0 );\n\n\t\t\t\tplaneMatrix.multiply( ( new Matrix4() ).makeRotationY( Math.PI / 2 ) );\n\t\t\t\tpositionOffset = ( volume.RASDimensions[ 0 ] - 1 ) / 2;\n\t\t\t\tplaneMatrix.setPosition( new Vector3( RASIndex - positionOffset, 0, 0 ) );\n\t\t\t\tbreak;\n\t\t\tcase 'y' :\n\t\t\t\taxisInIJK.set( 0, 1, 0 );\n\t\t\t\tfirstDirection.set( 1, 0, 0 );\n\t\t\t\tsecondDirection.set( 0, 0, 1 );\n\t\t\t\tfirstSpacing = this.spacing[ this.axisOrder.indexOf( 'x' ) ];\n\t\t\t\tsecondSpacing = this.spacing[ this.axisOrder.indexOf( 'z' ) ];\n\t\t\t\tIJKIndex = new Vector3( 0, RASIndex, 0 );\n\n\t\t\t\tplaneMatrix.multiply( ( new Matrix4() ).makeRotationX( - Math.PI / 2 ) );\n\t\t\t\tpositionOffset = ( volume.RASDimensions[ 1 ] - 1 ) / 2;\n\t\t\t\tplaneMatrix.setPosition( new Vector3( 0, RASIndex - positionOffset, 0 ) );\n\t\t\t\tbreak;\n\t\t\tcase 'z' :\n\t\t\tdefault :\n\t\t\t\taxisInIJK.set( 0, 0, 1 );\n\t\t\t\tfirstDirection.set( 1, 0, 0 );\n\t\t\t\tsecondDirection.set( 0, - 1, 0 );\n\t\t\t\tfirstSpacing = this.spacing[ this.axisOrder.indexOf( 'x' ) ];\n\t\t\t\tsecondSpacing = this.spacing[ this.axisOrder.indexOf( 'y' ) ];\n\t\t\t\tIJKIndex = new Vector3( 0, 0, RASIndex );\n\n\t\t\t\tpositionOffset = ( volume.RASDimensions[ 2 ] - 1 ) / 2;\n\t\t\t\tplaneMatrix.setPosition( new Vector3( 0, 0, RASIndex - positionOffset ) );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( ! this.segmentation ) {\n\n\t\t\tfirstDirection.applyMatrix4( volume.inverseMatrix ).normalize();\n\t\t\tsecondDirection.applyMatrix4( volume.inverseMatrix ).normalize();\n\t\t\taxisInIJK.applyMatrix4( volume.inverseMatrix ).normalize();\n\n\t\t}\n\n\t\tfirstDirection.arglet = 'i';\n\t\tsecondDirection.arglet = 'j';\n\t\tconst iLength = Math.floor( Math.abs( firstDirection.dot( dimensions ) ) );\n\t\tconst jLength = Math.floor( Math.abs( secondDirection.dot( dimensions ) ) );\n\t\tconst planeWidth = Math.abs( iLength * firstSpacing );\n\t\tconst planeHeight = Math.abs( jLength * secondSpacing );\n\n\t\tIJKIndex = Math.abs( Math.round( IJKIndex.applyMatrix4( volume.inverseMatrix ).dot( axisInIJK ) ) );\n\t\tconst base = [ new Vector3( 1, 0, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ) ];\n\t\tconst iDirection = [ firstDirection, secondDirection, axisInIJK ].find( function ( x ) {\n\n\t\t\treturn Math.abs( x.dot( base[ 0 ] ) ) > 0.9;\n\n\t\t} );\n\t\tconst jDirection = [ firstDirection, secondDirection, axisInIJK ].find( function ( x ) {\n\n\t\t\treturn Math.abs( x.dot( base[ 1 ] ) ) > 0.9;\n\n\t\t} );\n\t\tconst kDirection = [ firstDirection, secondDirection, axisInIJK ].find( function ( x ) {\n\n\t\t\treturn Math.abs( x.dot( base[ 2 ] ) ) > 0.9;\n\n\t\t} );\n\n\t\tfunction sliceAccess( i, j ) {\n\n\t\t\tconst si = ( iDirection === axisInIJK ) ? IJKIndex : ( iDirection.arglet === 'i' ? i : j );\n\t\t\tconst sj = ( jDirection === axisInIJK ) ? IJKIndex : ( jDirection.arglet === 'i' ? i : j );\n\t\t\tconst sk = ( kDirection === axisInIJK ) ? IJKIndex : ( kDirection.arglet === 'i' ? i : j );\n\n\t\t\t// invert indices if necessary\n\n\t\t\tconst accessI = ( iDirection.dot( base[ 0 ] ) > 0 ) ? si : ( volume.xLength - 1 ) - si;\n\t\t\tconst accessJ = ( jDirection.dot( base[ 1 ] ) > 0 ) ? sj : ( volume.yLength - 1 ) - sj;\n\t\t\tconst accessK = ( kDirection.dot( base[ 2 ] ) > 0 ) ? sk : ( volume.zLength - 1 ) - sk;\n\n\t\t\treturn volume.access( accessI, accessJ, accessK );\n\n\t\t}\n\n\t\treturn {\n\t\t\tiLength: iLength,\n\t\t\tjLength: jLength,\n\t\t\tsliceAccess: sliceAccess,\n\t\t\tmatrix: planeMatrix,\n\t\t\tplaneWidth: planeWidth,\n\t\t\tplaneHeight: planeHeight\n\t\t};\n\n\t}\n\n\t/**\n\t * @member {Function} extractSlice Returns a slice corresponding to the given axis and index\n\t * The coordinate are given in the Right Anterior Superior coordinate format\n\t * @memberof Volume\n\t * @param {string} axis the normal axis to the slice 'x' 'y' or 'z'\n\t * @param {number} index the index of the slice\n\t * @returns {VolumeSlice} the extracted slice\n\t */\n\textractSlice( axis, index ) {\n\n\t\tconst slice = new VolumeSlice( this, index, axis );\n\t\tthis.sliceList.push( slice );\n\t\treturn slice;\n\n\t}\n\n\t/**\n\t * @member {Function} repaintAllSlices Call repaint on all the slices extracted from this volume\n\t * @see VolumeSlice.repaint\n\t * @memberof Volume\n\t * @returns {Volume} this\n\t */\n\trepaintAllSlices() {\n\n\t\tthis.sliceList.forEach( function ( slice ) {\n\n\t\t\tslice.repaint();\n\n\t\t} );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @member {Function} computeMinMax Compute the minimum and the maximum of the data in the volume\n\t * @memberof Volume\n\t * @returns {Array} [min,max]\n\t */\n\tcomputeMinMax() {\n\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\n\t\t// buffer the length\n\t\tconst datasize = this.data.length;\n\n\t\tlet i = 0;\n\n\t\tfor ( i = 0; i < datasize; i ++ ) {\n\n\t\t\tif ( ! isNaN( this.data[ i ] ) ) {\n\n\t\t\t\tconst value = this.data[ i ];\n\t\t\t\tmin = Math.min( min, value );\n\t\t\t\tmax = Math.max( max, value );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t\treturn [ min, max ];\n\n\t}\n\n}\n\nexport { Volume };\n", "import {\n\tFileLoader,\n\tLoader,\n\tMatrix4,\n\tVector3\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\nimport { Volume } from '../misc/Volume.js';\n\nclass NRRDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t *\n\t * @param {boolean} segmentation is a option for user to choose\n \t */\n\tsetSegmentation( segmentation ) {\n\n\t this.segmentation = segmentation;\n\n\t}\n\n\tparse( data ) {\n\n\t\t// this parser is largely inspired from the XTK NRRD parser : https://github.com/xtk/X\n\n\t\tlet _data = data;\n\n\t\tlet _dataPointer = 0;\n\n\t\tconst _nativeLittleEndian = new Int8Array( new Int16Array( [ 1 ] ).buffer )[ 0 ] > 0;\n\n\t\tconst _littleEndian = true;\n\n\t\tconst headerObject = {};\n\n\t\tfunction scan( type, chunks ) {\n\n\t\t\tlet _chunkSize = 1;\n\t\t\tlet _array_type = Uint8Array;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\t// 1 byte data types\n\t\t\t\tcase 'uchar':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'schar':\n\t\t\t\t\t_array_type = Int8Array;\n\t\t\t\t\tbreak;\n\t\t\t\t// 2 byte data types\n\t\t\t\tcase 'ushort':\n\t\t\t\t\t_array_type = Uint16Array;\n\t\t\t\t\t_chunkSize = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'sshort':\n\t\t\t\t\t_array_type = Int16Array;\n\t\t\t\t\t_chunkSize = 2;\n\t\t\t\t\tbreak;\n\t\t\t\t// 4 byte data types\n\t\t\t\tcase 'uint':\n\t\t\t\t\t_array_type = Uint32Array;\n\t\t\t\t\t_chunkSize = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'sint':\n\t\t\t\t\t_array_type = Int32Array;\n\t\t\t\t\t_chunkSize = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'float':\n\t\t\t\t\t_array_type = Float32Array;\n\t\t\t\t\t_chunkSize = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'complex':\n\t\t\t\t\t_array_type = Float64Array;\n\t\t\t\t\t_chunkSize = 8;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'double':\n\t\t\t\t\t_array_type = Float64Array;\n\t\t\t\t\t_chunkSize = 8;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// increase the data pointer in-place\n\t\t\tlet _bytes = new _array_type( _data.slice( _dataPointer,\n\t\t\t\t_dataPointer += chunks * _chunkSize ) );\n\n\t\t\t// if required, flip the endianness of the bytes\n\t\t\tif ( _nativeLittleEndian != _littleEndian ) {\n\n\t\t\t\t// we need to flip here since the format doesn't match the native endianness\n\t\t\t\t_bytes = flipEndianness( _bytes, _chunkSize );\n\n\t\t\t}\n\n\t\t\t// return the byte array\n\t\t\treturn _bytes;\n\n\t\t}\n\n\t\t//Flips typed array endianness in-place. Based on https://github.com/kig/DataStream.js/blob/master/DataStream.js.\n\n\t\tfunction flipEndianness( array, chunkSize ) {\n\n\t\t\tconst u8 = new Uint8Array( array.buffer, array.byteOffset, array.byteLength );\n\t\t\tfor ( let i = 0; i < array.byteLength; i += chunkSize ) {\n\n\t\t\t\tfor ( let j = i + chunkSize - 1, k = i; j > k; j --, k ++ ) {\n\n\t\t\t\t\tconst tmp = u8[ k ];\n\t\t\t\t\tu8[ k ] = u8[ j ];\n\t\t\t\t\tu8[ j ] = tmp;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\t//parse the header\n\t\tfunction parseHeader( header ) {\n\n\t\t\tlet data, field, fn, i, l, m, _i, _len;\n\t\t\tconst lines = header.split( /\\r?\\n/ );\n\t\t\tfor ( _i = 0, _len = lines.length; _i < _len; _i ++ ) {\n\n\t\t\t\tl = lines[ _i ];\n\t\t\t\tif ( l.match( /NRRD\\d+/ ) ) {\n\n\t\t\t\t\theaderObject.isNrrd = true;\n\n\t\t\t\t} else if ( ! l.match( /^#/ ) && ( m = l.match( /(.*):(.*)/ ) ) ) {\n\n\t\t\t\t\tfield = m[ 1 ].trim();\n\t\t\t\t\tdata = m[ 2 ].trim();\n\t\t\t\t\tfn = _fieldFunctions[ field ];\n\t\t\t\t\tif ( fn ) {\n\n\t\t\t\t\t\tfn.call( headerObject, data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\theaderObject[ field ] = data;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! headerObject.isNrrd ) {\n\n\t\t\t\tthrow new Error( 'Not an NRRD file' );\n\n\t\t\t}\n\n\t\t\tif ( headerObject.encoding === 'bz2' || headerObject.encoding === 'bzip2' ) {\n\n\t\t\t\tthrow new Error( 'Bzip is not supported' );\n\n\t\t\t}\n\n\t\t\tif ( ! headerObject.vectors ) {\n\n\t\t\t\t//if no space direction is set, let's use the identity\n\t\t\t\theaderObject.vectors = [ ];\n\t\t\t\theaderObject.vectors.push( [ 1, 0, 0 ] );\n\t\t\t\theaderObject.vectors.push( [ 0, 1, 0 ] );\n\t\t\t\theaderObject.vectors.push( [ 0, 0, 1 ] );\n\n\t\t\t\t//apply spacing if defined\n\t\t\t\tif ( headerObject.spacings ) {\n\n\t\t\t\t\tfor ( i = 0; i <= 2; i ++ ) {\n\n\t\t\t\t\t\tif ( ! isNaN( headerObject.spacings[ i ] ) ) {\n\n\t\t\t\t\t\t\tfor ( let j = 0; j <= 2; j ++ ) {\n\n\t\t\t\t\t\t\t\theaderObject.vectors[ i ][ j ] *= headerObject.spacings[ i ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//parse the data when registred as one of this type : 'text', 'ascii', 'txt'\n\t\tfunction parseDataAsText( data, start, end ) {\n\n\t\t\tlet number = '';\n\t\t\tstart = start || 0;\n\t\t\tend = end || data.length;\n\t\t\tlet value;\n\t\t\t//length of the result is the product of the sizes\n\t\t\tconst lengthOfTheResult = headerObject.sizes.reduce( function ( previous, current ) {\n\n\t\t\t\treturn previous * current;\n\n\t\t\t}, 1 );\n\n\t\t\tlet base = 10;\n\t\t\tif ( headerObject.encoding === 'hex' ) {\n\n\t\t\t\tbase = 16;\n\n\t\t\t}\n\n\t\t\tconst result = new headerObject.__array( lengthOfTheResult );\n\t\t\tlet resultIndex = 0;\n\t\t\tlet parsingFunction = parseInt;\n\t\t\tif ( headerObject.__array === Float32Array || headerObject.__array === Float64Array ) {\n\n\t\t\t\tparsingFunction = parseFloat;\n\n\t\t\t}\n\n\t\t\tfor ( let i = start; i < end; i ++ ) {\n\n\t\t\t\tvalue = data[ i ];\n\t\t\t\t//if value is not a space\n\t\t\t\tif ( ( value < 9 || value > 13 ) && value !== 32 ) {\n\n\t\t\t\t\tnumber += String.fromCharCode( value );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( number !== '' ) {\n\n\t\t\t\t\t\tresult[ resultIndex ] = parsingFunction( number, base );\n\t\t\t\t\t\tresultIndex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnumber = '';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( number !== '' ) {\n\n\t\t\t\tresult[ resultIndex ] = parsingFunction( number, base );\n\t\t\t\tresultIndex ++;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tconst _bytes = scan( 'uchar', data.byteLength );\n\t\tconst _length = _bytes.length;\n\t\tlet _header = null;\n\t\tlet _data_start = 0;\n\t\tlet i;\n\t\tfor ( i = 1; i < _length; i ++ ) {\n\n\t\t\tif ( _bytes[ i - 1 ] == 10 && _bytes[ i ] == 10 ) {\n\n\t\t\t\t// we found two line breaks in a row\n\t\t\t\t// now we know what the header is\n\t\t\t\t_header = this.parseChars( _bytes, 0, i - 2 );\n\t\t\t\t// this is were the data starts\n\t\t\t\t_data_start = i + 1;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse the header\n\t\tparseHeader( _header );\n\n\t\t_data = _bytes.subarray( _data_start ); // the data without header\n\t\tif ( headerObject.encoding.substring( 0, 2 ) === 'gz' ) {\n\n\t\t\t// we need to decompress the datastream\n\t\t\t// here we start the unzipping and get a typed Uint8Array back\n\t\t\t_data = fflate.gunzipSync( new Uint8Array( _data ) );\n\n\t\t} else if ( headerObject.encoding === 'ascii' || headerObject.encoding === 'text' || headerObject.encoding === 'txt' || headerObject.encoding === 'hex' ) {\n\n\t\t\t_data = parseDataAsText( _data );\n\n\t\t} else if ( headerObject.encoding === 'raw' ) {\n\n\t\t\t//we need to copy the array to create a new array buffer, else we retrieve the original arraybuffer with the header\n\t\t\tconst _copy = new Uint8Array( _data.length );\n\n\t\t\tfor ( let i = 0; i < _data.length; i ++ ) {\n\n\t\t\t\t_copy[ i ] = _data[ i ];\n\n\t\t\t}\n\n\t\t\t_data = _copy;\n\n\t\t}\n\n\t\t// .. let's use the underlying array buffer\n\t\t_data = _data.buffer;\n\n\t\tconst volume = new Volume();\n\t\tvolume.header = headerObject;\n\t\tvolume.segmentation = this.segmentation;\n\t\t//\n\t\t// parse the (unzipped) data to a datastream of the correct type\n\t\t//\n\t\tvolume.data = new headerObject.__array( _data );\n\t\t// get the min and max intensities\n\t\tconst min_max = volume.computeMinMax();\n\t\tconst min = min_max[ 0 ];\n\t\tconst max = min_max[ 1 ];\n\t\t// attach the scalar range to the volume\n\t\tvolume.windowLow = min;\n\t\tvolume.windowHigh = max;\n\n\t\t// get the image dimensions\n\t\tvolume.dimensions = [ headerObject.sizes[ 0 ], headerObject.sizes[ 1 ], headerObject.sizes[ 2 ] ];\n\t\tvolume.xLength = volume.dimensions[ 0 ];\n\t\tvolume.yLength = volume.dimensions[ 1 ];\n\t\tvolume.zLength = volume.dimensions[ 2 ];\n\n\t\t// Identify axis order in the space-directions matrix from the header if possible.\n\t\tif ( headerObject.vectors ) {\n\n\t\t\tconst xIndex = headerObject.vectors.findIndex( vector => vector[ 0 ] !== 0 );\n\t\t\tconst yIndex = headerObject.vectors.findIndex( vector => vector[ 1 ] !== 0 );\n\t\t\tconst zIndex = headerObject.vectors.findIndex( vector => vector[ 2 ] !== 0 );\n\n\t\t\tconst axisOrder = [];\n\n\t\t\tif ( xIndex !== yIndex && xIndex !== zIndex && yIndex !== zIndex ) {\n\n\t\t\t\taxisOrder[ xIndex ] = 'x';\n\t\t\t\taxisOrder[ yIndex ] = 'y';\n\t\t\t\taxisOrder[ zIndex ] = 'z';\n\n\t\t\t} else {\n\n\t\t\t\taxisOrder[ 0 ] = 'x';\n\t\t\t\taxisOrder[ 1 ] = 'y';\n\t\t\t\taxisOrder[ 2 ] = 'z';\n\n\t\t\t}\n\n\t\t\tvolume.axisOrder = axisOrder;\n\n\t\t} else {\n\n\t\t\tvolume.axisOrder = [ 'x', 'y', 'z' ];\n\n\t\t}\n\n\t\t// spacing\n\t\tconst spacingX = new Vector3().fromArray( headerObject.vectors[ 0 ] ).length();\n\t\tconst spacingY = new Vector3().fromArray( headerObject.vectors[ 1 ] ).length();\n\t\tconst spacingZ = new Vector3().fromArray( headerObject.vectors[ 2 ] ).length();\n\t\tvolume.spacing = [ spacingX, spacingY, spacingZ ];\n\n\n\t\t// Create IJKtoRAS matrix\n\t\tvolume.matrix = new Matrix4();\n\n\t\tconst transitionMatrix = new Matrix4();\n\n\t\tif ( headerObject.space === 'left-posterior-superior' ) {\n\n\t\t\ttransitionMatrix.set(\n\t\t\t\t- 1, 0, 0, 0,\n\t\t\t\t0, - 1, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t} else if ( headerObject.space === 'left-anterior-superior' ) {\n\n\t\t\ttransitionMatrix.set(\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, 1, 0, 0,\n\t\t\t\t0, 0, - 1, 0,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t}\n\n\n\t\tif ( ! headerObject.vectors ) {\n\n\t\t\tvolume.matrix.set(\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, 1, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1 );\n\n\t\t} else {\n\n\t\t\tconst v = headerObject.vectors;\n\n\t\t\tconst ijk_to_transition = new Matrix4().set(\n\t\t\t\tv[ 0 ][ 0 ], v[ 1 ][ 0 ], v[ 2 ][ 0 ], 0,\n\t\t\t\tv[ 0 ][ 1 ], v[ 1 ][ 1 ], v[ 2 ][ 1 ], 0,\n\t\t\t\tv[ 0 ][ 2 ], v[ 1 ][ 2 ], v[ 2 ][ 2 ], 0,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t\tconst transition_to_ras = new Matrix4().multiplyMatrices( ijk_to_transition, transitionMatrix );\n\n\t\t\tvolume.matrix = transition_to_ras;\n\n\t\t}\n\n\t\tvolume.inverseMatrix = new Matrix4();\n\t\tvolume.inverseMatrix.copy( volume.matrix ).invert();\n\n\t\tvolume.RASDimensions = [\n\t\t\tMath.floor( volume.xLength * spacingX ),\n\t\t\tMath.floor( volume.yLength * spacingY ),\n\t\t\tMath.floor( volume.zLength * spacingZ )\n\t\t];\n\n\t\t// .. and set the default threshold\n\t\t// only if the threshold was not already set\n\t\tif ( volume.lowerThreshold === - Infinity ) {\n\n\t\t\tvolume.lowerThreshold = min;\n\n\t\t}\n\n\t\tif ( volume.upperThreshold === Infinity ) {\n\n\t\t\tvolume.upperThreshold = max;\n\n\t\t}\n\n\t\treturn volume;\n\n\t}\n\n\tparseChars( array, start, end ) {\n\n\t\t// without borders, use the whole array\n\t\tif ( start === undefined ) {\n\n\t\t\tstart = 0;\n\n\t\t}\n\n\t\tif ( end === undefined ) {\n\n\t\t\tend = array.length;\n\n\t\t}\n\n\t\tlet output = '';\n\t\t// create and append the chars\n\t\tlet i = 0;\n\t\tfor ( i = start; i < end; ++ i ) {\n\n\t\t\toutput += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nconst _fieldFunctions = {\n\n\ttype: function ( data ) {\n\n\t\tswitch ( data ) {\n\n\t\t\tcase 'uchar':\n\t\t\tcase 'unsigned char':\n\t\t\tcase 'uint8':\n\t\t\tcase 'uint8_t':\n\t\t\t\tthis.__array = Uint8Array;\n\t\t\t\tbreak;\n\t\t\tcase 'signed char':\n\t\t\tcase 'int8':\n\t\t\tcase 'int8_t':\n\t\t\t\tthis.__array = Int8Array;\n\t\t\t\tbreak;\n\t\t\tcase 'short':\n\t\t\tcase 'short int':\n\t\t\tcase 'signed short':\n\t\t\tcase 'signed short int':\n\t\t\tcase 'int16':\n\t\t\tcase 'int16_t':\n\t\t\t\tthis.__array = Int16Array;\n\t\t\t\tbreak;\n\t\t\tcase 'ushort':\n\t\t\tcase 'unsigned short':\n\t\t\tcase 'unsigned short int':\n\t\t\tcase 'uint16':\n\t\t\tcase 'uint16_t':\n\t\t\t\tthis.__array = Uint16Array;\n\t\t\t\tbreak;\n\t\t\tcase 'int':\n\t\t\tcase 'signed int':\n\t\t\tcase 'int32':\n\t\t\tcase 'int32_t':\n\t\t\t\tthis.__array = Int32Array;\n\t\t\t\tbreak;\n\t\t\tcase 'uint':\n\t\t\tcase 'unsigned int':\n\t\t\tcase 'uint32':\n\t\t\tcase 'uint32_t':\n\t\t\t\tthis.__array = Uint32Array;\n\t\t\t\tbreak;\n\t\t\tcase 'float':\n\t\t\t\tthis.__array = Float32Array;\n\t\t\t\tbreak;\n\t\t\tcase 'double':\n\t\t\t\tthis.__array = Float64Array;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'Unsupported NRRD data type: ' + data );\n\n\t\t}\n\n\t\treturn this.type = data;\n\n\t},\n\n\tendian: function ( data ) {\n\n\t\treturn this.endian = data;\n\n\t},\n\n\tencoding: function ( data ) {\n\n\t\treturn this.encoding = data;\n\n\t},\n\n\tdimension: function ( data ) {\n\n\t\treturn this.dim = parseInt( data, 10 );\n\n\t},\n\n\tsizes: function ( data ) {\n\n\t\tlet i;\n\t\treturn this.sizes = ( function () {\n\n\t\t\tconst _ref = data.split( /\\s+/ );\n\t\t\tconst _results = [];\n\n\t\t\tfor ( let _i = 0, _len = _ref.length; _i < _len; _i ++ ) {\n\n\t\t\t\ti = _ref[ _i ];\n\t\t\t\t_results.push( parseInt( i, 10 ) );\n\n\t\t\t}\n\n\t\t\treturn _results;\n\n\t\t} )();\n\n\t},\n\n\tspace: function ( data ) {\n\n\t\treturn this.space = data;\n\n\t},\n\n\t'space origin': function ( data ) {\n\n\t\treturn this.space_origin = data.split( '(' )[ 1 ].split( ')' )[ 0 ].split( ',' );\n\n\t},\n\n\t'space directions': function ( data ) {\n\n\t\tlet f, v;\n\t\tconst parts = data.match( /\\(.*?\\)/g );\n\t\treturn this.vectors = ( function () {\n\n\t\t\tconst _results = [];\n\n\t\t\tfor ( let _i = 0, _len = parts.length; _i < _len; _i ++ ) {\n\n\t\t\t\tv = parts[ _i ];\n\t\t\t\t_results.push( ( function () {\n\n\t\t\t\t\tconst _ref = v.slice( 1, - 1 ).split( /,/ );\n\t\t\t\t\tconst _results2 = [];\n\n\t\t\t\t\tfor ( let _j = 0, _len2 = _ref.length; _j < _len2; _j ++ ) {\n\n\t\t\t\t\t\tf = _ref[ _j ];\n\t\t\t\t\t\t_results2.push( parseFloat( f ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn _results2;\n\n\t\t\t\t} )() );\n\n\t\t\t}\n\n\t\t\treturn _results;\n\n\t\t} )();\n\n\t},\n\n\tspacings: function ( data ) {\n\n\t\tlet f;\n\t\tconst parts = data.split( /\\s+/ );\n\t\treturn this.spacings = ( function () {\n\n\t\t\tconst _results = [];\n\n\t\t\tfor ( let _i = 0, _len = parts.length; _i < _len; _i ++ ) {\n\n\t\t\t\tf = parts[ _i ];\n\t\t\t\t_results.push( parseFloat( f ) );\n\n\t\t\t}\n\n\t\t\treturn _results;\n\n\t\t} )();\n\n\t}\n\n};\n\nexport { NRRDLoader };\n", "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3,\n\tColor\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\nconst _face_vertex_data_separator_pattern = /\\s+/;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nconst _color = new Color();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n//\n\nclass OBJLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet result = [];\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ].trimStart();\n\n\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\tconst lineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue; // skip comments\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( _face_vertex_data_separator_pattern );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\n\t\t\t\t\t\t\t).convertSRGBToLinear();\n\n\t\t\t\t\t\t\tstate.colors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( _face_vertex_data_separator_pattern );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].slice( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].slice( 1 ).trim() ).slice( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tInt32BufferAttribute,\n\tLoader,\n\tPoints,\n\tPointsMaterial\n} from 'three';\n\nclass PCDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.littleEndian = true;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\t// from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n\t\tfunction decompressLZF( inData, outLength ) {\n\n\t\t\tconst inLength = inData.length;\n\t\t\tconst outData = new Uint8Array( outLength );\n\t\t\tlet inPtr = 0;\n\t\t\tlet outPtr = 0;\n\t\t\tlet ctrl;\n\t\t\tlet len;\n\t\t\tlet ref;\n\t\t\tdo {\n\n\t\t\t\tctrl = inData[ inPtr ++ ];\n\t\t\t\tif ( ctrl < ( 1 << 5 ) ) {\n\n\t\t\t\t\tctrl ++;\n\t\t\t\t\tif ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = inData[ inPtr ++ ];\n\n\t\t\t\t\t} while ( -- ctrl );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlen = ctrl >> 5;\n\t\t\t\t\tref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;\n\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( len === 7 ) {\n\n\t\t\t\t\t\tlen += inData[ inPtr ++ ];\n\t\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tref -= inData[ inPtr ++ ];\n\t\t\t\t\tif ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( ref < 0 ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = outData[ ref ++ ];\n\n\t\t\t\t\t} while ( -- len + 2 );\n\n\t\t\t\t}\n\n\t\t\t} while ( inPtr < inLength );\n\n\t\t\treturn outData;\n\n\t\t}\n\n\t\tfunction parseHeader( data ) {\n\n\t\t\tconst PCDheader = {};\n\t\t\tconst result1 = data.search( /[\\r\\n]DATA\\s(\\S*)\\s/i );\n\t\t\tconst result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec( data.slice( result1 - 1 ) );\n\n\t\t\tPCDheader.data = result2[ 1 ];\n\t\t\tPCDheader.headerLen = result2[ 0 ].length + result1;\n\t\t\tPCDheader.str = data.slice( 0, PCDheader.headerLen );\n\n\t\t\t// remove comments\n\n\t\t\tPCDheader.str = PCDheader.str.replace( /#.*/gi, '' );\n\n\t\t\t// parse\n\n\t\t\tPCDheader.version = /VERSION (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.fields = /FIELDS (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.size = /SIZE (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.type = /TYPE (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.count = /COUNT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.width = /WIDTH (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.height = /HEIGHT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.viewpoint = /VIEWPOINT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.points = /POINTS (.*)/i.exec( PCDheader.str );\n\n\t\t\t// evaluate\n\n\t\t\tif ( PCDheader.version !== null )\n\t\t\t\tPCDheader.version = parseFloat( PCDheader.version[ 1 ] );\n\n\t\t\tPCDheader.fields = ( PCDheader.fields !== null ) ? PCDheader.fields[ 1 ].split( ' ' ) : [];\n\n\t\t\tif ( PCDheader.type !== null )\n\t\t\t\tPCDheader.type = PCDheader.type[ 1 ].split( ' ' );\n\n\t\t\tif ( PCDheader.width !== null )\n\t\t\t\tPCDheader.width = parseInt( PCDheader.width[ 1 ] );\n\n\t\t\tif ( PCDheader.height !== null )\n\t\t\t\tPCDheader.height = parseInt( PCDheader.height[ 1 ] );\n\n\t\t\tif ( PCDheader.viewpoint !== null )\n\t\t\t\tPCDheader.viewpoint = PCDheader.viewpoint[ 1 ];\n\n\t\t\tif ( PCDheader.points !== null )\n\t\t\t\tPCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );\n\n\t\t\tif ( PCDheader.points === null )\n\t\t\t\tPCDheader.points = PCDheader.width * PCDheader.height;\n\n\t\t\tif ( PCDheader.size !== null ) {\n\n\t\t\t\tPCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( PCDheader.count !== null ) {\n\n\t\t\t\tPCDheader.count = PCDheader.count[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tPCDheader.count = [];\n\n\t\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tPCDheader.count.push( 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tPCDheader.offset = {};\n\n\t\t\tlet sizeSum = 0;\n\n\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = i;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = sizeSum;\n\t\t\t\t\tsizeSum += PCDheader.size[ i ] * PCDheader.count[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// for binary only\n\n\t\t\tPCDheader.rowSize = sizeSum;\n\n\t\t\treturn PCDheader;\n\n\t\t}\n\n\t\tconst textData = new TextDecoder().decode( data );\n\n\t\t// parse header (always ascii format)\n\n\t\tconst PCDheader = parseHeader( textData );\n\n\t\t// parse data\n\n\t\tconst position = [];\n\t\tconst normal = [];\n\t\tconst color = [];\n\t\tconst intensity = [];\n\t\tconst label = [];\n\n\t\tconst c = new Color();\n\n\t\t// ascii\n\n\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\tconst offset = PCDheader.offset;\n\t\t\tconst pcdData = textData.slice( PCDheader.headerLen );\n\t\t\tconst lines = pcdData.split( '\\n' );\n\n\t\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\t\tif ( lines[ i ] === '' ) continue;\n\n\t\t\t\tconst line = lines[ i ].split( ' ' );\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( parseFloat( line[ offset.x ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.y ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgb_field_index = PCDheader.fields.findIndex( ( field ) => field === 'rgb' );\n\t\t\t\t\tconst rgb_type = PCDheader.type[ rgb_field_index ];\n\n\t\t\t\t\tconst float = parseFloat( line[ offset.rgb ] );\n\t\t\t\t\tlet rgb = float;\n\n\t\t\t\t\tif ( rgb_type === 'F' ) {\n\n\t\t\t\t\t\t// treat float values as int\n\t\t\t\t\t\t// https://github.com/daavoo/pyntcloud/pull/204/commits/7b4205e64d5ed09abe708b2e91b615690c24d518\n\t\t\t\t\t\tconst farr = new Float32Array( 1 );\n\t\t\t\t\t\tfarr[ 0 ] = float;\n\t\t\t\t\t\trgb = new Int32Array( farr.buffer )[ 0 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst r = ( ( rgb >> 16 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst g = ( ( rgb >> 8 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst b = ( ( rgb >> 0 ) & 0x0000ff ) / 255;\n\n\t\t\t\t\tc.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_x ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_y ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tintensity.push( parseFloat( line[ offset.intensity ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( parseInt( line[ offset.label ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary-compressed\n\n\t\t// normally data in PCD files are organized as array of structures: XYZRGBXYZRGB\n\t\t// binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB\n\t\t// that requires a totally different parsing approach compared to non-compressed data\n\n\t\tif ( PCDheader.data === 'binary_compressed' ) {\n\n\t\t\tconst sizes = new Uint32Array( data.slice( PCDheader.headerLen, PCDheader.headerLen + 8 ) );\n\t\t\tconst compressedSize = sizes[ 0 ];\n\t\t\tconst decompressedSize = sizes[ 1 ];\n\t\t\tconst decompressed = decompressLZF( new Uint8Array( data, PCDheader.headerLen + 8, compressedSize ), decompressedSize );\n\t\t\tconst dataview = new DataView( decompressed.buffer );\n\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0; i < PCDheader.points; i ++ ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'z' );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgbIndex = PCDheader.fields.indexOf( 'rgb' );\n\n\t\t\t\t\tconst r = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 0 ) / 255.0;\n\n\t\t\t\t\tc.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'normal_x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'normal_y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'normal_z' );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tconst intensityIndex = PCDheader.fields.indexOf( 'intensity' );\n\t\t\t\t\tintensity.push( dataview.getFloat32( ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tconst labelIndex = PCDheader.fields.indexOf( 'label' );\n\t\t\t\t\tlabel.push( dataview.getInt32( ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary\n\n\t\tif ( PCDheader.data === 'binary' ) {\n\n\t\t\tconst dataview = new DataView( data, PCDheader.headerLen );\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0, row = 0; i < PCDheader.points; i ++, row += PCDheader.rowSize ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.x, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.y, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.z, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst r = dataview.getUint8( row + offset.rgb + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( row + offset.rgb + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( row + offset.rgb + 0 ) / 255.0;\n\n\t\t\t\t\tc.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_x, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_y, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_z, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tintensity.push( dataview.getFloat32( row + offset.intensity, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( dataview.getInt32( row + offset.label, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( position.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( normal.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( color.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\t\tif ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new Float32BufferAttribute( intensity, 1 ) );\n\t\tif ( label.length > 0 ) geometry.setAttribute( 'label', new Int32BufferAttribute( label, 1 ) );\n\n\t\tgeometry.computeBoundingSphere();\n\n\t\t// build material\n\n\t\tconst material = new PointsMaterial( { size: 0.005 } );\n\n\t\tif ( color.length > 0 ) {\n\n\t\t\tmaterial.vertexColors = true;\n\n\t\t}\n\n\t\t// build point cloud\n\n\t\treturn new Points( geometry, material );\n\n\t}\n\n}\n\nexport { PCDLoader };\n", "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tColor\n} from 'three';\n\nclass PDBLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t// Based on CanvasMol PDB parser\n\n\tparse( text ) {\n\n\t\tfunction trim( text ) {\n\n\t\t\treturn text.replace( /^\\s\\s*/, '' ).replace( /\\s\\s*$/, '' );\n\n\t\t}\n\n\t\tfunction capitalize( text ) {\n\n\t\t\treturn text.charAt( 0 ).toUpperCase() + text.slice( 1 ).toLowerCase();\n\n\t\t}\n\n\t\tfunction hash( s, e ) {\n\n\t\t\treturn 's' + Math.min( s, e ) + 'e' + Math.max( s, e );\n\n\t\t}\n\n\t\tfunction parseBond( start, length, satom, i ) {\n\n\t\t\tconst eatom = parseInt( lines[ i ].slice( start, start + length ) );\n\n\t\t\tif ( eatom ) {\n\n\t\t\t\tconst h = hash( satom, eatom );\n\n\t\t\t\tif ( _bhash[ h ] === undefined ) {\n\n\t\t\t\t\t_bonds.push( [ satom - 1, eatom - 1, 1 ] );\n\t\t\t\t\t_bhash[ h ] = _bonds.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// doesn't really work as almost all PDBs\n\t\t\t\t\t// have just normal bonds appearing multiple\n\t\t\t\t\t// times instead of being double/triple bonds\n\t\t\t\t\t// bonds[bhash[h]][2] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildGeometry() {\n\n\t\t\tconst build = {\n\t\t\t\tgeometryAtoms: new BufferGeometry(),\n\t\t\t\tgeometryBonds: new BufferGeometry(),\n\t\t\t\tjson: {\n\t\t\t\t\tatoms: atoms\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst geometryAtoms = build.geometryAtoms;\n\t\t\tconst geometryBonds = build.geometryBonds;\n\n\t\t\tconst verticesAtoms = [];\n\t\t\tconst colorsAtoms = [];\n\t\t\tconst verticesBonds = [];\n\n\t\t\t// atoms\n\n\t\t\tconst c = new Color();\n\n\t\t\tfor ( let i = 0, l = atoms.length; i < l; i ++ ) {\n\n\t\t\t\tconst atom = atoms[ i ];\n\n\t\t\t\tconst x = atom[ 0 ];\n\t\t\t\tconst y = atom[ 1 ];\n\t\t\t\tconst z = atom[ 2 ];\n\n\t\t\t\tverticesAtoms.push( x, y, z );\n\n\t\t\t\tconst r = atom[ 3 ][ 0 ] / 255;\n\t\t\t\tconst g = atom[ 3 ][ 1 ] / 255;\n\t\t\t\tconst b = atom[ 3 ][ 2 ] / 255;\n\n\t\t\t\tc.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\tcolorsAtoms.push( c.r, c.g, c.b );\n\n\t\t\t}\n\n\t\t\t// bonds\n\n\t\t\tfor ( let i = 0, l = _bonds.length; i < l; i ++ ) {\n\n\t\t\t\tconst bond = _bonds[ i ];\n\n\t\t\t\tconst start = bond[ 0 ];\n\t\t\t\tconst end = bond[ 1 ];\n\n\t\t\t\tconst startAtom = _atomMap[ start ];\n\t\t\t\tconst endAtom = _atomMap[ end ];\n\n\t\t\t\tlet x = startAtom[ 0 ];\n\t\t\t\tlet y = startAtom[ 1 ];\n\t\t\t\tlet z = startAtom[ 2 ];\n\n\t\t\t\tverticesBonds.push( x, y, z );\n\n\t\t\t\tx = endAtom[ 0 ];\n\t\t\t\ty = endAtom[ 1 ];\n\t\t\t\tz = endAtom[ 2 ];\n\n\t\t\t\tverticesBonds.push( x, y, z );\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tgeometryAtoms.setAttribute( 'position', new Float32BufferAttribute( verticesAtoms, 3 ) );\n\t\t\tgeometryAtoms.setAttribute( 'color', new Float32BufferAttribute( colorsAtoms, 3 ) );\n\n\t\t\tgeometryBonds.setAttribute( 'position', new Float32BufferAttribute( verticesBonds, 3 ) );\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tconst CPK = { h: [ 255, 255, 255 ], he: [ 217, 255, 255 ], li: [ 204, 128, 255 ], be: [ 194, 255, 0 ], b: [ 255, 181, 181 ], c: [ 144, 144, 144 ], n: [ 48, 80, 248 ], o: [ 255, 13, 13 ], f: [ 144, 224, 80 ], ne: [ 179, 227, 245 ], na: [ 171, 92, 242 ], mg: [ 138, 255, 0 ], al: [ 191, 166, 166 ], si: [ 240, 200, 160 ], p: [ 255, 128, 0 ], s: [ 255, 255, 48 ], cl: [ 31, 240, 31 ], ar: [ 128, 209, 227 ], k: [ 143, 64, 212 ], ca: [ 61, 255, 0 ], sc: [ 230, 230, 230 ], ti: [ 191, 194, 199 ], v: [ 166, 166, 171 ], cr: [ 138, 153, 199 ], mn: [ 156, 122, 199 ], fe: [ 224, 102, 51 ], co: [ 240, 144, 160 ], ni: [ 80, 208, 80 ], cu: [ 200, 128, 51 ], zn: [ 125, 128, 176 ], ga: [ 194, 143, 143 ], ge: [ 102, 143, 143 ], as: [ 189, 128, 227 ], se: [ 255, 161, 0 ], br: [ 166, 41, 41 ], kr: [ 92, 184, 209 ], rb: [ 112, 46, 176 ], sr: [ 0, 255, 0 ], y: [ 148, 255, 255 ], zr: [ 148, 224, 224 ], nb: [ 115, 194, 201 ], mo: [ 84, 181, 181 ], tc: [ 59, 158, 158 ], ru: [ 36, 143, 143 ], rh: [ 10, 125, 140 ], pd: [ 0, 105, 133 ], ag: [ 192, 192, 192 ], cd: [ 255, 217, 143 ], in: [ 166, 117, 115 ], sn: [ 102, 128, 128 ], sb: [ 158, 99, 181 ], te: [ 212, 122, 0 ], i: [ 148, 0, 148 ], xe: [ 66, 158, 176 ], cs: [ 87, 23, 143 ], ba: [ 0, 201, 0 ], la: [ 112, 212, 255 ], ce: [ 255, 255, 199 ], pr: [ 217, 255, 199 ], nd: [ 199, 255, 199 ], pm: [ 163, 255, 199 ], sm: [ 143, 255, 199 ], eu: [ 97, 255, 199 ], gd: [ 69, 255, 199 ], tb: [ 48, 255, 199 ], dy: [ 31, 255, 199 ], ho: [ 0, 255, 156 ], er: [ 0, 230, 117 ], tm: [ 0, 212, 82 ], yb: [ 0, 191, 56 ], lu: [ 0, 171, 36 ], hf: [ 77, 194, 255 ], ta: [ 77, 166, 255 ], w: [ 33, 148, 214 ], re: [ 38, 125, 171 ], os: [ 38, 102, 150 ], ir: [ 23, 84, 135 ], pt: [ 208, 208, 224 ], au: [ 255, 209, 35 ], hg: [ 184, 184, 208 ], tl: [ 166, 84, 77 ], pb: [ 87, 89, 97 ], bi: [ 158, 79, 181 ], po: [ 171, 92, 0 ], at: [ 117, 79, 69 ], rn: [ 66, 130, 150 ], fr: [ 66, 0, 102 ], ra: [ 0, 125, 0 ], ac: [ 112, 171, 250 ], th: [ 0, 186, 255 ], pa: [ 0, 161, 255 ], u: [ 0, 143, 255 ], np: [ 0, 128, 255 ], pu: [ 0, 107, 255 ], am: [ 84, 92, 242 ], cm: [ 120, 92, 227 ], bk: [ 138, 79, 227 ], cf: [ 161, 54, 212 ], es: [ 179, 31, 212 ], fm: [ 179, 31, 186 ], md: [ 179, 13, 166 ], no: [ 189, 13, 135 ], lr: [ 199, 0, 102 ], rf: [ 204, 0, 89 ], db: [ 209, 0, 79 ], sg: [ 217, 0, 69 ], bh: [ 224, 0, 56 ], hs: [ 230, 0, 46 ], mt: [ 235, 0, 38 ], ds: [ 235, 0, 38 ], rg: [ 235, 0, 38 ], cn: [ 235, 0, 38 ], uut: [ 235, 0, 38 ], uuq: [ 235, 0, 38 ], uup: [ 235, 0, 38 ], uuh: [ 235, 0, 38 ], uus: [ 235, 0, 38 ], uuo: [ 235, 0, 38 ] };\n\n\t\tconst atoms = [];\n\n\t\tconst _bonds = [];\n\t\tconst _bhash = {};\n\t\tconst _atomMap = {};\n\n\t\t// parse\n\n\t\tconst lines = text.split( '\\n' );\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tif ( lines[ i ].slice( 0, 4 ) === 'ATOM' || lines[ i ].slice( 0, 6 ) === 'HETATM' ) {\n\n\t\t\t\tconst x = parseFloat( lines[ i ].slice( 30, 37 ) );\n\t\t\t\tconst y = parseFloat( lines[ i ].slice( 38, 45 ) );\n\t\t\t\tconst z = parseFloat( lines[ i ].slice( 46, 53 ) );\n\t\t\t\tconst index = parseInt( lines[ i ].slice( 6, 11 ) ) - 1;\n\n\t\t\t\tlet e = trim( lines[ i ].slice( 76, 78 ) ).toLowerCase();\n\n\t\t\t\tif ( e === '' ) {\n\n\t\t\t\t\te = trim( lines[ i ].slice( 12, 14 ) ).toLowerCase();\n\n\t\t\t\t}\n\n\t\t\t\tconst atomData = [ x, y, z, CPK[ e ], capitalize( e ) ];\n\n\t\t\t\tatoms.push( atomData );\n\t\t\t\t_atomMap[ index ] = atomData;\n\n\t\t\t} else if ( lines[ i ].slice( 0, 6 ) === 'CONECT' ) {\n\n\t\t\t\tconst satom = parseInt( lines[ i ].slice( 6, 11 ) );\n\n\t\t\t\tparseBond( 11, 5, satom, i );\n\t\t\t\tparseBond( 16, 5, satom, i );\n\t\t\t\tparseBond( 21, 5, satom, i );\n\t\t\t\tparseBond( 26, 5, satom, i );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build and return geometry\n\n\t\treturn buildGeometry();\n\n\t}\n\n}\n\nexport { PDBLoader };\n", "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tColor\n} from 'three';\n\n/**\n * Description: A THREE loader for PLY ASCII files (known as the Polygon\n * File Format or the Stanford Triangle Format).\n *\n * Limitations: ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n *\tconst loader = new PLYLoader();\n *\tloader.load('./models/ply/ascii/dolphins.ply', function (geometry) {\n *\n *\t\tscene.add( new THREE.Mesh( geometry ) );\n *\n *\t} );\n *\n * If the PLY file uses non standard property names, they can be mapped while\n * loading. For example, the following maps the properties\n * “diffuse_(red|green|blue)” in the file to standard color names.\n *\n * loader.setPropertyNameMapping( {\n *\tdiffuse_red: 'red',\n *\tdiffuse_green: 'green',\n *\tdiffuse_blue: 'blue'\n * } );\n *\n * Custom properties outside of the defaults for position, uv, normal\n * and color attributes can be added using the setCustomPropertyNameMapping method.\n * For example, the following maps the element properties “custom_property_a”\n * and “custom_property_b” to an attribute “customAttribute” with an item size of 2.\n * Attribute item sizes are set from the number of element properties in the property array.\n *\n * loader.setCustomPropertyNameMapping( {\n *\tcustomAttribute: ['custom_property_a', 'custom_property_b'],\n * } );\n *\n */\n\nconst _color = new Color();\n\nclass PLYLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.propertyNameMapping = {};\n\t\tthis.customPropertyMapping = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetPropertyNameMapping( mapping ) {\n\n\t\tthis.propertyNameMapping = mapping;\n\n\t}\n\n\tsetCustomPropertyNameMapping( mapping ) {\n\n\t\tthis.customPropertyMapping = mapping;\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction parseHeader( data, headerLength = 0 ) {\n\n\t\t\tconst patternHeader = /^ply([\\s\\S]*)end_header(\\r\\n|\\r|\\n)/;\n\t\t\tlet headerText = '';\n\t\t\tconst result = patternHeader.exec( data );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\theaderText = result[ 1 ];\n\n\t\t\t}\n\n\t\t\tconst header = {\n\t\t\t\tcomments: [],\n\t\t\t\telements: [],\n\t\t\t\theaderLength: headerLength,\n\t\t\t\tobjInfo: ''\n\t\t\t};\n\n\t\t\tconst lines = headerText.split( /\\r\\n|\\r|\\n/ );\n\t\t\tlet currentElement;\n\n\t\t\tfunction make_ply_element_property( propertValues, propertyNameMapping ) {\n\n\t\t\t\tconst property = { type: propertValues[ 0 ] };\n\n\t\t\t\tif ( property.type === 'list' ) {\n\n\t\t\t\t\tproperty.name = propertValues[ 3 ];\n\t\t\t\t\tproperty.countType = propertValues[ 1 ];\n\t\t\t\t\tproperty.itemType = propertValues[ 2 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tproperty.name = propertValues[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( property.name in propertyNameMapping ) {\n\n\t\t\t\t\tproperty.name = propertyNameMapping[ property.name ];\n\n\t\t\t\t}\n\n\t\t\t\treturn property;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\t\tlet line = lines[ i ];\n\t\t\t\tline = line.trim();\n\n\t\t\t\tif ( line === '' ) continue;\n\n\t\t\t\tconst lineValues = line.split( /\\s+/ );\n\t\t\t\tconst lineType = lineValues.shift();\n\t\t\t\tline = lineValues.join( ' ' );\n\n\t\t\t\tswitch ( lineType ) {\n\n\t\t\t\t\tcase 'format':\n\n\t\t\t\t\t\theader.format = lineValues[ 0 ];\n\t\t\t\t\t\theader.version = lineValues[ 1 ];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'comment':\n\n\t\t\t\t\t\theader.comments.push( line );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'element':\n\n\t\t\t\t\t\tif ( currentElement !== undefined ) {\n\n\t\t\t\t\t\t\theader.elements.push( currentElement );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentElement = {};\n\t\t\t\t\t\tcurrentElement.name = lineValues[ 0 ];\n\t\t\t\t\t\tcurrentElement.count = parseInt( lineValues[ 1 ] );\n\t\t\t\t\t\tcurrentElement.properties = [];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'property':\n\n\t\t\t\t\t\tcurrentElement.properties.push( make_ply_element_property( lineValues, scope.propertyNameMapping ) );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'obj_info':\n\n\t\t\t\t\t\theader.objInfo = line;\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.log( 'unhandled', lineType, lineValues );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( currentElement !== undefined ) {\n\n\t\t\t\theader.elements.push( currentElement );\n\n\t\t\t}\n\n\t\t\treturn header;\n\n\t\t}\n\n\t\tfunction parseASCIINumber( n, type ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'char': case 'uchar': case 'short': case 'ushort': case 'int': case 'uint':\n\t\t\t\tcase 'int8': case 'uint8': case 'int16': case 'uint16': case 'int32': case 'uint32':\n\n\t\t\t\t\treturn parseInt( n );\n\n\t\t\t\tcase 'float': case 'double': case 'float32': case 'float64':\n\n\t\t\t\t\treturn parseFloat( n );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseASCIIElement( properties, tokens ) {\n\n\t\t\tconst element = {};\n\n\t\t\tfor ( let i = 0; i < properties.length; i ++ ) {\n\n\t\t\t\tif ( tokens.empty() ) return null;\n\n\t\t\t\tif ( properties[ i ].type === 'list' ) {\n\n\t\t\t\t\tconst list = [];\n\t\t\t\t\tconst n = parseASCIINumber( tokens.next(), properties[ i ].countType );\n\n\t\t\t\t\tfor ( let j = 0; j < n; j ++ ) {\n\n\t\t\t\t\t\tif ( tokens.empty() ) return null;\n\n\t\t\t\t\t\tlist.push( parseASCIINumber( tokens.next(), properties[ i ].itemType ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\telement[ properties[ i ].name ] = list;\n\n\t\t\t\t} else {\n\n\t\t\t\t\telement[ properties[ i ].name ] = parseASCIINumber( tokens.next(), properties[ i ].type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn element;\n\n\t\t}\n\n\t\tfunction createBuffer() {\n\n\t\t\tconst buffer = {\n\t\t\t indices: [],\n\t\t\t vertices: [],\n\t\t\t normals: [],\n\t\t\t uvs: [],\n\t\t\t faceVertexUvs: [],\n\t\t\t colors: [],\n\t\t\t faceVertexColors: []\n\t\t\t};\n\n\t\t\tfor ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {\n\n\t\t\t buffer[ customProperty ] = [];\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction mapElementAttributes( properties ) {\n\n\t\t\tconst elementNames = properties.map( property => {\n\n\t\t\t\treturn property.name;\n\n\t\t\t} );\n\n\t\t\tfunction findAttrName( names ) {\n\n\t\t\t\tfor ( let i = 0, l = names.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst name = names[ i ];\n\n\t\t\t\t\tif ( elementNames.includes( name ) ) return name;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tattrX: findAttrName( [ 'x', 'px', 'posx' ] ) || 'x',\n\t\t\t\tattrY: findAttrName( [ 'y', 'py', 'posy' ] ) || 'y',\n\t\t\t\tattrZ: findAttrName( [ 'z', 'pz', 'posz' ] ) || 'z',\n\t\t\t\tattrNX: findAttrName( [ 'nx', 'normalx' ] ),\n\t\t\t\tattrNY: findAttrName( [ 'ny', 'normaly' ] ),\n\t\t\t\tattrNZ: findAttrName( [ 'nz', 'normalz' ] ),\n\t\t\t\tattrS: findAttrName( [ 's', 'u', 'texture_u', 'tx' ] ),\n\t\t\t\tattrT: findAttrName( [ 't', 'v', 'texture_v', 'ty' ] ),\n\t\t\t\tattrR: findAttrName( [ 'red', 'diffuse_red', 'r', 'diffuse_r' ] ),\n\t\t\t\tattrG: findAttrName( [ 'green', 'diffuse_green', 'g', 'diffuse_g' ] ),\n\t\t\t\tattrB: findAttrName( [ 'blue', 'diffuse_blue', 'b', 'diffuse_b' ] ),\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseASCII( data, header ) {\n\n\t\t\t// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n\n\t\t\tconst buffer = createBuffer();\n\n\t\t\tconst patternBody = /end_header\\s+(\\S[\\s\\S]*\\S|\\S)\\s*$/;\n\t\t\tlet body, matches;\n\n\t\t\tif ( ( matches = patternBody.exec( data ) ) !== null ) {\n\n\t\t\t\tbody = matches[ 1 ].split( /\\s+/ );\n\n\t\t\t} else {\n\n\t\t\t\tbody = [ ];\n\n\t\t\t}\n\n\t\t\tconst tokens = new ArrayStream( body );\n\n\t\t\tloop: for ( let i = 0; i < header.elements.length; i ++ ) {\n\n\t\t\t\tconst elementDesc = header.elements[ i ];\n\t\t\t\tconst attributeMap = mapElementAttributes( elementDesc.properties );\n\n\t\t\t\tfor ( let j = 0; j < elementDesc.count; j ++ ) {\n\n\t\t\t\t\tconst element = parseASCIIElement( elementDesc.properties, tokens );\n\n\t\t\t\t\tif ( ! element ) break loop;\n\n\t\t\t\t\thandleElement( buffer, elementDesc.name, element, attributeMap );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn postProcess( buffer );\n\n\t\t}\n\n\t\tfunction postProcess( buffer ) {\n\n\t\t\tlet geometry = new BufferGeometry();\n\n\t\t\t// mandatory buffer data\n\n\t\t\tif ( buffer.indices.length > 0 ) {\n\n\t\t\t\tgeometry.setIndex( buffer.indices );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( buffer.vertices, 3 ) );\n\n\t\t\t// optional buffer data\n\n\t\t\tif ( buffer.normals.length > 0 ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( buffer.normals, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( buffer.uvs.length > 0 ) {\n\n\t\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( buffer.uvs, 2 ) );\n\n\t\t\t}\n\n\t\t\tif ( buffer.colors.length > 0 ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( buffer.colors, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( buffer.faceVertexUvs.length > 0 || buffer.faceVertexColors.length > 0 ) {\n\n\t\t\t\tgeometry = geometry.toNonIndexed();\n\n\t\t\t\tif ( buffer.faceVertexUvs.length > 0 ) geometry.setAttribute( 'uv', new Float32BufferAttribute( buffer.faceVertexUvs, 2 ) );\n\t\t\t\tif ( buffer.faceVertexColors.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( buffer.faceVertexColors, 3 ) );\n\n\t\t\t}\n\n\t\t\t// custom buffer data\n\n\t\t\tfor ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {\n\n\t\t\t\tif ( buffer[ customProperty ].length > 0 ) {\n\n\t\t\t\t \tgeometry.setAttribute(\n\t\t\t\t\t\tcustomProperty,\n\t\t\t\t\t\tnew Float32BufferAttribute(\n\t\t\t\t\t \t\tbuffer[ customProperty ],\n\t\t\t\t\t \t\tscope.customPropertyMapping[ customProperty ].length\n\t\t\t\t\t\t)\n\t\t\t\t \t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction handleElement( buffer, elementName, element, cacheEntry ) {\n\n\t\t\tif ( elementName === 'vertex' ) {\n\n\t\t\t\tbuffer.vertices.push( element[ cacheEntry.attrX ], element[ cacheEntry.attrY ], element[ cacheEntry.attrZ ] );\n\n\t\t\t\tif ( cacheEntry.attrNX !== null && cacheEntry.attrNY !== null && cacheEntry.attrNZ !== null ) {\n\n\t\t\t\t\tbuffer.normals.push( element[ cacheEntry.attrNX ], element[ cacheEntry.attrNY ], element[ cacheEntry.attrNZ ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( cacheEntry.attrS !== null && cacheEntry.attrT !== null ) {\n\n\t\t\t\t\tbuffer.uvs.push( element[ cacheEntry.attrS ], element[ cacheEntry.attrT ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null ) {\n\n\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\telement[ cacheEntry.attrR ] / 255.0,\n\t\t\t\t\t\telement[ cacheEntry.attrG ] / 255.0,\n\t\t\t\t\t\telement[ cacheEntry.attrB ] / 255.0\n\t\t\t\t\t).convertSRGBToLinear();\n\n\t\t\t\t\tbuffer.colors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {\n\n\t\t\t\t\tfor ( const elementProperty of scope.customPropertyMapping[ customProperty ] ) {\n\n\t\t\t\t\t buffer[ customProperty ].push( element[ elementProperty ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( elementName === 'face' ) {\n\n\t\t\t\tconst vertex_indices = element.vertex_indices || element.vertex_index; // issue #9338\n\t\t\t\tconst texcoord = element.texcoord;\n\n\t\t\t\tif ( vertex_indices.length === 3 ) {\n\n\t\t\t\t\tbuffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 2 ] );\n\n\t\t\t\t\tif ( texcoord && texcoord.length === 6 ) {\n\n\t\t\t\t\t\tbuffer.faceVertexUvs.push( texcoord[ 0 ], texcoord[ 1 ] );\n\t\t\t\t\t\tbuffer.faceVertexUvs.push( texcoord[ 2 ], texcoord[ 3 ] );\n\t\t\t\t\t\tbuffer.faceVertexUvs.push( texcoord[ 4 ], texcoord[ 5 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( vertex_indices.length === 4 ) {\n\n\t\t\t\t\tbuffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 3 ] );\n\t\t\t\t\tbuffer.indices.push( vertex_indices[ 1 ], vertex_indices[ 2 ], vertex_indices[ 3 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// face colors\n\n\t\t\t\tif ( cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null ) {\n\n\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\telement[ cacheEntry.attrR ] / 255.0,\n\t\t\t\t\t\telement[ cacheEntry.attrG ] / 255.0,\n\t\t\t\t\t\telement[ cacheEntry.attrB ] / 255.0\n\t\t\t\t\t).convertSRGBToLinear();\n\t\t\t\t\tbuffer.faceVertexColors.push( _color.r, _color.g, _color.b );\n\t\t\t\t\tbuffer.faceVertexColors.push( _color.r, _color.g, _color.b );\n\t\t\t\t\tbuffer.faceVertexColors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction binaryReadElement( at, properties ) {\n\n\t\t\tconst element = {};\n\t\t\tlet read = 0;\n\n\t\t\tfor ( let i = 0; i < properties.length; i ++ ) {\n\n\t\t\t\tconst property = properties[ i ];\n\t\t\t\tconst valueReader = property.valueReader;\n\n\t\t\t\tif ( property.type === 'list' ) {\n\n\t\t\t\t\tconst list = [];\n\n\t\t\t\t\tconst n = property.countReader.read( at + read );\n\t\t\t\t\tread += property.countReader.size;\n\n\t\t\t\t\tfor ( let j = 0; j < n; j ++ ) {\n\n\t\t\t\t\t\tlist.push( valueReader.read( at + read ) );\n\t\t\t\t\t\tread += valueReader.size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\telement[ property.name ] = list;\n\n\t\t\t\t} else {\n\n\t\t\t\t\telement[ property.name ] = valueReader.read( at + read );\n\t\t\t\t\tread += valueReader.size;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn [ element, read ];\n\n\t\t}\n\n\t\tfunction setPropertyBinaryReaders( properties, body, little_endian ) {\n\n\t\t\tfunction getBinaryReader( dataview, type, little_endian ) {\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t// corespondences for non-specific length types here match rply:\n\t\t\t\t\tcase 'int8':\tcase 'char':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getInt8( at );\n\n\t\t\t\t\t}, size: 1 };\n\t\t\t\t\tcase 'uint8':\tcase 'uchar':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getUint8( at );\n\n\t\t\t\t\t}, size: 1 };\n\t\t\t\t\tcase 'int16':\tcase 'short':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getInt16( at, little_endian );\n\n\t\t\t\t\t}, size: 2 };\n\t\t\t\t\tcase 'uint16':\tcase 'ushort':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getUint16( at, little_endian );\n\n\t\t\t\t\t}, size: 2 };\n\t\t\t\t\tcase 'int32':\tcase 'int':\t\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getInt32( at, little_endian );\n\n\t\t\t\t\t}, size: 4 };\n\t\t\t\t\tcase 'uint32':\tcase 'uint':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getUint32( at, little_endian );\n\n\t\t\t\t\t}, size: 4 };\n\t\t\t\t\tcase 'float32': case 'float':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getFloat32( at, little_endian );\n\n\t\t\t\t\t}, size: 4 };\n\t\t\t\t\tcase 'float64': case 'double':\treturn { read: ( at ) => {\n\n\t\t\t\t\t\treturn dataview.getFloat64( at, little_endian );\n\n\t\t\t\t\t}, size: 8 };\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = properties.length; i < l; i ++ ) {\n\n\t\t\t\tconst property = properties[ i ];\n\n\t\t\t\tif ( property.type === 'list' ) {\n\n\t\t\t\t\tproperty.countReader = getBinaryReader( body, property.countType, little_endian );\n\t\t\t\t\tproperty.valueReader = getBinaryReader( body, property.itemType, little_endian );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tproperty.valueReader = getBinaryReader( body, property.type, little_endian );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseBinary( data, header ) {\n\n\t\t\tconst buffer = createBuffer();\n\n\t\t\tconst little_endian = ( header.format === 'binary_little_endian' );\n\t\t\tconst body = new DataView( data, header.headerLength );\n\t\t\tlet result, loc = 0;\n\n\t\t\tfor ( let currentElement = 0; currentElement < header.elements.length; currentElement ++ ) {\n\n\t\t\t\tconst elementDesc = header.elements[ currentElement ];\n\t\t\t\tconst properties = elementDesc.properties;\n\t\t\t\tconst attributeMap = mapElementAttributes( properties );\n\n\t\t\t\tsetPropertyBinaryReaders( properties, body, little_endian );\n\n\t\t\t\tfor ( let currentElementCount = 0; currentElementCount < elementDesc.count; currentElementCount ++ ) {\n\n\t\t\t\t\tresult = binaryReadElement( loc, properties );\n\t\t\t\t\tloc += result[ 1 ];\n\t\t\t\t\tconst element = result[ 0 ];\n\n\t\t\t\t\thandleElement( buffer, elementDesc.name, element, attributeMap );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn postProcess( buffer );\n\n\t\t}\n\n\t\tfunction extractHeaderText( bytes ) {\n\n\t\t\tlet i = 0;\n\t\t\tlet cont = true;\n\n\t\t\tlet line = '';\n\t\t\tconst lines = [];\n\n\t\t\tconst startLine = new TextDecoder().decode( bytes.subarray( 0, 5 ) );\n\t\t\tconst hasCRNL = /^ply\\r\\n/.test( startLine );\n\n\t\t\tdo {\n\n\t\t\t\tconst c = String.fromCharCode( bytes[ i ++ ] );\n\n\t\t\t\tif ( c !== '\\n' && c !== '\\r' ) {\n\n\t\t\t\t\tline += c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( line === 'end_header' ) cont = false;\n\t\t\t\t\tif ( line !== '' ) {\n\n\t\t\t\t\t\tlines.push( line );\n\t\t\t\t\t\tline = '';\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} while ( cont && i < bytes.length );\n\n\t\t\t// ascii section using \\r\\n as line endings\n\t\t\tif ( hasCRNL === true ) i ++;\n\n\t\t\treturn { headerText: lines.join( '\\r' ) + '\\r', headerLength: i };\n\n\t\t}\n\n\t\t//\n\n\t\tlet geometry;\n\t\tconst scope = this;\n\n\t\tif ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst bytes = new Uint8Array( data );\n\t\t\tconst { headerText, headerLength } = extractHeaderText( bytes );\n\t\t\tconst header = parseHeader( headerText, headerLength );\n\n\t\t\tif ( header.format === 'ascii' ) {\n\n\t\t\t\tconst text = new TextDecoder().decode( bytes );\n\n\t\t\t\tgeometry = parseASCII( text, header );\n\n\t\t\t} else {\n\n\t\t\t\tgeometry = parseBinary( data, header );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tgeometry = parseASCII( data, parseHeader( data ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ArrayStream {\n\n\tconstructor( arr ) {\n\n\t\tthis.arr = arr;\n\t\tthis.i = 0;\n\n\t}\n\n\tempty() {\n\n\t\treturn this.i >= this.arr.length;\n\n\t}\n\n\tnext() {\n\n\t\treturn this.arr[ this.i ++ ];\n\n\t}\n\n}\n\nexport { PLYLoader };\n", "import {\n\tCompressedTextureLoader,\n\tRGBA_PVRTC_2BPPV1_Format,\n\tRGBA_PVRTC_4BPPV1_Format,\n\tRGB_PVRTC_2BPPV1_Format,\n\tRGB_PVRTC_4BPPV1_Format\n} from 'three';\n\n/*\n *\t PVR v2 (legacy) parser\n * TODO : Add Support for PVR v3 format\n * TODO : implement loadMipmaps option\n */\n\nclass PVRLoader extends CompressedTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tparse( buffer, loadMipmaps ) {\n\n\t\tconst headerLengthInt = 13;\n\t\tconst header = new Uint32Array( buffer, 0, headerLengthInt );\n\n\t\tconst pvrDatas = {\n\t\t\tbuffer: buffer,\n\t\t\theader: header,\n\t\t\tloadMipmaps: loadMipmaps\n\t\t};\n\n\t\tif ( header[ 0 ] === 0x03525650 ) {\n\n\t\t\t// PVR v3\n\n\t\t\treturn _parseV3( pvrDatas );\n\n\t\t} else if ( header[ 11 ] === 0x21525650 ) {\n\n\t\t\t// PVR v2\n\n\t\t\treturn _parseV2( pvrDatas );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.PVRLoader: Unknown PVR format.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction _parseV3( pvrDatas ) {\n\n\tconst header = pvrDatas.header;\n\tlet bpp, format;\n\n\n\tconst metaLen = header[ 12 ],\n\t\tpixelFormat = header[ 2 ],\n\t\theight = header[ 6 ],\n\t\twidth = header[ 7 ],\n\t\t// numSurfs = header[ 9 ],\n\t\tnumFaces = header[ 10 ],\n\t\tnumMipmaps = header[ 11 ];\n\n\tswitch ( pixelFormat ) {\n\n\t\tcase 0 : // PVRTC 2bpp RGB\n\t\t\tbpp = 2;\n\t\t\tformat = RGB_PVRTC_2BPPV1_Format;\n\t\t\tbreak;\n\n\t\tcase 1 : // PVRTC 2bpp RGBA\n\t\t\tbpp = 2;\n\t\t\tformat = RGBA_PVRTC_2BPPV1_Format;\n\t\t\tbreak;\n\n\t\tcase 2 : // PVRTC 4bpp RGB\n\t\t\tbpp = 4;\n\t\t\tformat = RGB_PVRTC_4BPPV1_Format;\n\t\t\tbreak;\n\n\t\tcase 3 : // PVRTC 4bpp RGBA\n\t\t\tbpp = 4;\n\t\t\tformat = RGBA_PVRTC_4BPPV1_Format;\n\t\t\tbreak;\n\n\t\tdefault :\n\t\t\tconsole.error( 'THREE.PVRLoader: Unsupported PVR format:', pixelFormat );\n\n\t}\n\n\tpvrDatas.dataPtr = 52 + metaLen;\n\tpvrDatas.bpp = bpp;\n\tpvrDatas.format = format;\n\tpvrDatas.width = width;\n\tpvrDatas.height = height;\n\tpvrDatas.numSurfaces = numFaces;\n\tpvrDatas.numMipmaps = numMipmaps;\n\tpvrDatas.isCubemap \t= ( numFaces === 6 );\n\n\treturn _extract( pvrDatas );\n\n}\n\nfunction _parseV2( pvrDatas ) {\n\n\tconst header = pvrDatas.header;\n\n\tconst headerLength = header[ 0 ],\n\t\theight = header[ 1 ],\n\t\twidth = header[ 2 ],\n\t\tnumMipmaps = header[ 3 ],\n\t\tflags = header[ 4 ],\n\t\t// dataLength = header[ 5 ],\n\t\t// bpp = header[ 6 ],\n\t\t// bitmaskRed = header[ 7 ],\n\t\t// bitmaskGreen = header[ 8 ],\n\t\t// bitmaskBlue = header[ 9 ],\n\t\tbitmaskAlpha = header[ 10 ],\n\t\t// pvrTag = header[ 11 ],\n\t\tnumSurfs = header[ 12 ];\n\n\n\tconst TYPE_MASK = 0xff;\n\tconst PVRTC_2 = 24,\n\t\tPVRTC_4 = 25;\n\n\tconst formatFlags = flags & TYPE_MASK;\n\n\tlet bpp, format;\n\tconst _hasAlpha = bitmaskAlpha > 0;\n\n\tif ( formatFlags === PVRTC_4 ) {\n\n\t\tformat = _hasAlpha ? RGBA_PVRTC_4BPPV1_Format : RGB_PVRTC_4BPPV1_Format;\n\t\tbpp = 4;\n\n\t} else if ( formatFlags === PVRTC_2 ) {\n\n\t\tformat = _hasAlpha ? RGBA_PVRTC_2BPPV1_Format : RGB_PVRTC_2BPPV1_Format;\n\t\tbpp = 2;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.PVRLoader: Unknown PVR format:', formatFlags );\n\n\t}\n\n\tpvrDatas.dataPtr = headerLength;\n\tpvrDatas.bpp = bpp;\n\tpvrDatas.format = format;\n\tpvrDatas.width = width;\n\tpvrDatas.height = height;\n\tpvrDatas.numSurfaces = numSurfs;\n\tpvrDatas.numMipmaps = numMipmaps + 1;\n\n\t// guess cubemap type seems tricky in v2\n\t// it juste a pvr containing 6 surface (no explicit cubemap type)\n\tpvrDatas.isCubemap \t= ( numSurfs === 6 );\n\n\treturn _extract( pvrDatas );\n\n}\n\n\nfunction _extract( pvrDatas ) {\n\n\tconst pvr = {\n\t\tmipmaps: [],\n\t\twidth: pvrDatas.width,\n\t\theight: pvrDatas.height,\n\t\tformat: pvrDatas.format,\n\t\tmipmapCount: pvrDatas.numMipmaps,\n\t\tisCubemap: pvrDatas.isCubemap\n\t};\n\n\tconst buffer = pvrDatas.buffer;\n\n\tlet dataOffset = pvrDatas.dataPtr,\n\t\tdataSize = 0,\n\t\tblockSize = 0,\n\t\tblockWidth = 0,\n\t\tblockHeight = 0,\n\t\twidthBlocks = 0,\n\t\theightBlocks = 0;\n\n\tconst bpp = pvrDatas.bpp,\n\t\tnumSurfs = pvrDatas.numSurfaces;\n\n\tif ( bpp === 2 ) {\n\n\t\tblockWidth = 8;\n\t\tblockHeight = 4;\n\n\t} else {\n\n\t\tblockWidth = 4;\n\t\tblockHeight = 4;\n\n\t}\n\n\tblockSize = ( blockWidth * blockHeight ) * bpp / 8;\n\n\tpvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs;\n\n\tlet mipLevel = 0;\n\n\twhile ( mipLevel < pvrDatas.numMipmaps ) {\n\n\t\tconst sWidth = pvrDatas.width >> mipLevel,\n\t\t\tsHeight = pvrDatas.height >> mipLevel;\n\n\t\twidthBlocks = sWidth / blockWidth;\n\t\theightBlocks = sHeight / blockHeight;\n\n\t\t// Clamp to minimum number of blocks\n\t\tif ( widthBlocks < 2 ) widthBlocks = 2;\n\t\tif ( heightBlocks < 2 ) heightBlocks = 2;\n\n\t\tdataSize = widthBlocks * heightBlocks * blockSize;\n\n\t\tfor ( let surfIndex = 0; surfIndex < numSurfs; surfIndex ++ ) {\n\n\t\t\tconst byteArray = new Uint8Array( buffer, dataOffset, dataSize );\n\n\t\t\tconst mipmap = {\n\t\t\t\tdata: byteArray,\n\t\t\t\twidth: sWidth,\n\t\t\t\theight: sHeight\n\t\t\t};\n\n\t\t\tpvr.mipmaps[ surfIndex * pvrDatas.numMipmaps + mipLevel ] = mipmap;\n\n\t\t\tdataOffset += dataSize;\n\n\t\t}\n\n\t\tmipLevel ++;\n\n\t}\n\n\treturn pvr;\n\n}\n\nexport { PVRLoader };\n", "import {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tDataUtils,\n\tFileLoader,\n\tHalfFloatType,\n\tLinearFilter,\n\tLinearMipMapLinearFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tRGBAFormat,\n\tUVMapping,\n} from 'three';\n\n// UltraHDR Image Format - https://developer.android.com/media/platform/hdr-image-format\n// HDR/EXR to UltraHDR Converter - https://gainmap-creator.monogrid.com/\n\n/**\n *\n * Short format brief:\n *\n * [JPEG headers]\n * [XMP metadata describing the MPF container and *both* SDR and gainmap images]\n * [Optional metadata] [EXIF] [ICC Profile]\n * [SDR image]\n * [XMP metadata describing only the gainmap image]\n * [Gainmap image]\n *\n * Each section is separated by a 0xFFXX byte followed by a descriptor byte (0xFFE0, 0xFFE1, 0xFFE2.)\n * Binary image storages are prefixed with a unique 0xFFD8 16-bit descriptor.\n */\n\n/**\n * Current feature set:\n * - JPEG headers (required)\n * - XMP metadata (required)\n * - XMP validation (not implemented)\n * - EXIF profile (not implemented)\n * - ICC profile (not implemented)\n * - Binary storage for SDR & HDR images (required)\n * - Gainmap metadata (required)\n * - Non-JPEG image formats (not implemented)\n * - Primary image as an HDR image (not implemented)\n */\n\n/* Calculating this SRGB powers is extremely slow for 4K images and can be sufficiently precalculated for a 3-4x speed boost */\nconst SRGB_TO_LINEAR = Array( 1024 )\n\t.fill( 0 )\n\t.map( ( _, value ) =>\n\t\tMath.pow( ( value / 255 ) * 0.9478672986 + 0.0521327014, 2.4 )\n\t);\n\nclass UltraHDRLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\n\t\treturn this;\n\n\t}\n\n\tparse( buffer, onLoad ) {\n\n\t\tconst xmpMetadata = {\n\t\t\tversion: null,\n\t\t\tbaseRenditionIsHDR: null,\n\t\t\tgainMapMin: null,\n\t\t\tgainMapMax: null,\n\t\t\tgamma: null,\n\t\t\toffsetSDR: null,\n\t\t\toffsetHDR: null,\n\t\t\thdrCapacityMin: null,\n\t\t\thdrCapacityMax: null,\n\t\t};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tconst data = new DataView( buffer );\n\n\t\tlet byteOffset = 0;\n\t\tconst sections = [];\n\n\t\twhile ( byteOffset < data.byteLength ) {\n\n\t\t\tconst byte = data.getUint8( byteOffset );\n\n\t\t\tif ( byte === 0xff ) {\n\n\t\t\t\tconst leadingByte = data.getUint8( byteOffset + 1 );\n\n\t\t\t\tif (\n\t\t\t\t\t[\n\t\t\t\t\t\t/* Valid section headers */\n\t\t\t\t\t\t0xd8, // SOI\n\t\t\t\t\t\t0xe0, // APP0\n\t\t\t\t\t\t0xe1, // APP1\n\t\t\t\t\t\t0xe2, // APP2\n\t\t\t\t\t].includes( leadingByte )\n\t\t\t\t) {\n\n\t\t\t\t\tsections.push( {\n\t\t\t\t\t\tsectionType: leadingByte,\n\t\t\t\t\t\tsection: [ byte, leadingByte ],\n\t\t\t\t\t\tsectionOffset: byteOffset + 2,\n\t\t\t\t\t} );\n\n\t\t\t\t\tbyteOffset += 2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsections[ sections.length - 1 ].section.push( byte, leadingByte );\n\n\t\t\t\t\tbyteOffset += 2;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsections[ sections.length - 1 ].section.push( byte );\n\n\t\t\t\tbyteOffset ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet primaryImage, gainmapImage;\n\n\t\tfor ( let i = 0; i < sections.length; i ++ ) {\n\n\t\t\tconst { sectionType, section, sectionOffset } = sections[ i ];\n\n\t\t\tif ( sectionType === 0xe0 ) {\n\t\t\t\t/* JPEG Header - no useful information */\n\t\t\t} else if ( sectionType === 0xe1 ) {\n\n\t\t\t\t/* XMP Metadata */\n\n\t\t\t\tthis._parseXMPMetadata(\n\t\t\t\t\ttextDecoder.decode( new Uint8Array( section ) ),\n\t\t\t\t\txmpMetadata\n\t\t\t\t);\n\n\t\t\t} else if ( sectionType === 0xe2 ) {\n\n\t\t\t\t/* Data Sections - MPF / EXIF / ICC Profile */\n\n\t\t\t\tconst sectionData = new DataView(\n\t\t\t\t\tnew Uint8Array( section.slice( 2 ) ).buffer\n\t\t\t\t);\n\t\t\t\tconst sectionHeader = sectionData.getUint32( 2, false );\n\n\t\t\t\tif ( sectionHeader === 0x4d504600 ) {\n\n\t\t\t\t\t/* MPF Section */\n\n\t\t\t\t\t/* Section contains a list of static bytes and ends with offsets indicating location of SDR and gainmap images */\n\t\t\t\t\t/* First bytes after header indicate little / big endian ordering (0x49492A00 - LE / 0x4D4D002A - BE) */\n\t\t\t\t\t/*\n\t\t\t\t\t... 60 bytes indicating tags, versions, etc. ...\n\n\t\t\t\t\tbytes | bits | description\n\n\t\t\t\t\t4 32 primary image size\n\t\t\t\t\t4 32 primary image offset\n\t\t\t\t\t2 16 0x0000\n\t\t\t\t\t2 16 0x0000\n\n\t\t\t\t\t4 32 0x00000000\n\t\t\t\t\t4 32 gainmap image size\n\t\t\t\t\t4 32 gainmap image offset\n\t\t\t\t\t2 16 0x0000\n\t\t\t\t\t2 16 0x0000\n\t\t\t\t\t*/\n\n\t\t\t\t\tconst mpfLittleEndian = sectionData.getUint32( 6 ) === 0x49492a00;\n\t\t\t\t\tconst mpfBytesOffset = 60;\n\n\t\t\t\t\t/* SDR size includes the metadata length, SDR offset is always 0 */\n\n\t\t\t\t\tconst primaryImageSize = sectionData.getUint32(\n\t\t\t\t\t\tmpfBytesOffset,\n\t\t\t\t\t\tmpfLittleEndian\n\t\t\t\t\t);\n\t\t\t\t\tconst primaryImageOffset = sectionData.getUint32(\n\t\t\t\t\t\tmpfBytesOffset + 4,\n\t\t\t\t\t\tmpfLittleEndian\n\t\t\t\t\t);\n\n\t\t\t\t\t/* Gainmap size is an absolute value starting from its offset, gainmap offset needs 6 bytes padding to take into account 0x00 bytes at the end of XMP */\n\t\t\t\t\tconst gainmapImageSize = sectionData.getUint32(\n\t\t\t\t\t\tmpfBytesOffset + 16,\n\t\t\t\t\t\tmpfLittleEndian\n\t\t\t\t\t);\n\t\t\t\t\tconst gainmapImageOffset =\n\t\t\t\t\t\tsectionData.getUint32( mpfBytesOffset + 20, mpfLittleEndian ) +\n\t\t\t\t\t\tsectionOffset +\n\t\t\t\t\t\t6;\n\n\t\t\t\t\tprimaryImage = new Uint8Array(\n\t\t\t\t\t\tdata.buffer,\n\t\t\t\t\t\tprimaryImageOffset,\n\t\t\t\t\t\tprimaryImageSize\n\t\t\t\t\t);\n\n\t\t\t\t\tgainmapImage = new Uint8Array(\n\t\t\t\t\t\tdata.buffer,\n\t\t\t\t\t\tgainmapImageOffset,\n\t\t\t\t\t\tgainmapImageSize\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/* Minimal sufficient validation - https://developer.android.com/media/platform/hdr-image-format#signal_of_the_format */\n\t\tif ( ! xmpMetadata.version ) {\n\n\t\t\tthrow new Error( 'THREE.UltraHDRLoader: Not a valid UltraHDR image' );\n\n\t\t}\n\n\t\tif ( primaryImage && gainmapImage ) {\n\n\t\t\tthis._applyGainmapToSDR(\n\t\t\t\txmpMetadata,\n\t\t\t\tprimaryImage,\n\t\t\t\tgainmapImage,\n\t\t\t\t( hdrBuffer, width, height ) => {\n\n\t\t\t\t\tonLoad( {\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tdata: hdrBuffer,\n\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\ttype: this.type,\n\t\t\t\t\t} );\n\n\t\t\t\t},\n\t\t\t\t( error ) => {\n\n\t\t\t\t\tthrow new Error( error );\n\n\t\t\t\t}\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.UltraHDRLoader: Could not parse UltraHDR images' );\n\n\t\t}\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new DataTexture(\n\t\t\tthis.type === HalfFloatType ? new Uint16Array() : new Float32Array(),\n\t\t\t0,\n\t\t\t0,\n\t\t\tRGBAFormat,\n\t\t\tthis.type,\n\t\t\tUVMapping,\n\t\t\tClampToEdgeWrapping,\n\t\t\tClampToEdgeWrapping,\n\t\t\tLinearFilter,\n\t\t\tLinearMipMapLinearFilter,\n\t\t\t1,\n\t\t\tLinearSRGBColorSpace\n\t\t);\n\t\ttexture.generateMipmaps = true;\n\t\ttexture.flipY = true;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\ttry {\n\n\t\t\t\tthis.parse(\n\t\t\t\t\tbuffer,\n\t\t\t\t\t( texData ) => {\n\n\t\t\t\t\t\ttexture.image = {\n\t\t\t\t\t\t\tdata: texData.data,\n\t\t\t\t\t\t\twidth: texData.width,\n\t\t\t\t\t\t\theight: texData.height,\n\t\t\t\t\t\t};\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\tconsole.error( error );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n\t_parseXMPMetadata( xmpDataString, xmpMetadata ) {\n\n\t\tconst domParser = new DOMParser();\n\n\t\tconst xmpXml = domParser.parseFromString(\n\t\t\txmpDataString.substring(\n\t\t\t\txmpDataString.indexOf( '<' ),\n\t\t\t\txmpDataString.lastIndexOf( '>' ) + 1\n\t\t\t),\n\t\t\t'text/xml'\n\t\t);\n\n\t\t/* Determine if given XMP metadata is the primary GContainer descriptor or a gainmap descriptor */\n\t\tconst [ hasHDRContainerDescriptor ] = xmpXml.getElementsByTagName(\n\t\t\t'Container:Directory'\n\t\t);\n\n\t\tif ( hasHDRContainerDescriptor ) {\n\t\t\t/* There's not much useful information in the container descriptor besides memory-validation */\n\t\t} else {\n\n\t\t\t/* Gainmap descriptor - defaults from https://developer.android.com/media/platform/hdr-image-format#HDR_gain_map_metadata */\n\n\t\t\tconst [ gainmapNode ] = xmpXml.getElementsByTagName( 'rdf:Description' );\n\n\t\t\txmpMetadata.version = gainmapNode.getAttribute( 'hdrgm:Version' );\n\t\t\txmpMetadata.baseRenditionIsHDR =\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:BaseRenditionIsHDR' ) === 'True';\n\t\t\txmpMetadata.gainMapMin = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:GainMapMin' ) || 0.0\n\t\t\t);\n\t\t\txmpMetadata.gainMapMax = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:GainMapMax' ) || 1.0\n\t\t\t);\n\t\t\txmpMetadata.gamma = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:Gamma' ) || 1.0\n\t\t\t);\n\t\t\txmpMetadata.offsetSDR = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:OffsetSDR' ) / ( 1 / 64 )\n\t\t\t);\n\t\t\txmpMetadata.offsetHDR = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:OffsetHDR' ) / ( 1 / 64 )\n\t\t\t);\n\t\t\txmpMetadata.hdrCapacityMin = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:HDRCapacityMin' ) || 0.0\n\t\t\t);\n\t\t\txmpMetadata.hdrCapacityMax = parseFloat(\n\t\t\t\tgainmapNode.getAttribute( 'hdrgm:HDRCapacityMax' ) || 1.0\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t_srgbToLinear( value ) {\n\n\t\tif ( value / 255 < 0.04045 ) {\n\n\t\t\treturn ( value / 255 ) * 0.0773993808;\n\n\t\t}\n\n\t\tif ( value < 1024 ) {\n\n\t\t\treturn SRGB_TO_LINEAR[ ~ ~ value ];\n\n\t\t}\n\n\t\treturn Math.pow( ( value / 255 ) * 0.9478672986 + 0.0521327014, 2.4 );\n\n\t}\n\n\t_applyGainmapToSDR(\n\t\txmpMetadata,\n\t\tsdrBuffer,\n\t\tgainmapBuffer,\n\t\tonSuccess,\n\t\tonError\n\t) {\n\n\t\tconst getImageDataFromBuffer = ( buffer ) =>\n\t\t\tnew Promise( ( resolve, reject ) => {\n\n\t\t\t\tconst imageLoader = document.createElement( 'img' );\n\n\t\t\t\timageLoader.onload = () => {\n\n\t\t\t\t\tconst image = {\n\t\t\t\t\t\twidth: imageLoader.naturalWidth,\n\t\t\t\t\t\theight: imageLoader.naturalHeight,\n\t\t\t\t\t\tsource: imageLoader,\n\t\t\t\t\t};\n\n\t\t\t\t\tURL.revokeObjectURL( imageLoader.src );\n\n\t\t\t\t\tresolve( image );\n\n\t\t\t\t};\n\n\t\t\t\timageLoader.onerror = () => {\n\n\t\t\t\t\tURL.revokeObjectURL( imageLoader.src );\n\n\t\t\t\t\treject();\n\n\t\t\t\t};\n\n\t\t\t\timageLoader.src = URL.createObjectURL(\n\t\t\t\t\tnew Blob( [ buffer ], { type: 'image/jpeg' } )\n\t\t\t\t);\n\n\t\t\t} );\n\n\t\tPromise.all( [\n\t\t\tgetImageDataFromBuffer( sdrBuffer ),\n\t\t\tgetImageDataFromBuffer( gainmapBuffer ),\n\t\t] )\n\t\t\t.then( ( [ sdrImage, gainmapImage ] ) => {\n\n\t\t\t\tconst sdrImageAspect = sdrImage.width / sdrImage.height;\n\t\t\t\tconst gainmapImageAspect = gainmapImage.width / gainmapImage.height;\n\n\t\t\t\tif ( sdrImageAspect !== gainmapImageAspect ) {\n\n\t\t\t\t\tonError(\n\t\t\t\t\t\t'THREE.UltraHDRLoader Error: Aspect ratio mismatch between SDR and Gainmap images'\n\t\t\t\t\t);\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\t\tconst ctx = canvas.getContext( '2d', {\n\t\t\t\t\twillReadFrequently: true,\n\t\t\t\t\tcolorSpace: 'srgb',\n\t\t\t\t} );\n\n\t\t\t\tcanvas.width = sdrImage.width;\n\t\t\t\tcanvas.height = sdrImage.height;\n\n\t\t\t\t/* Use out-of-the-box interpolation of Canvas API to scale gainmap to fit the SDR resolution */\n\t\t\t\tctx.drawImage(\n\t\t\t\t\tgainmapImage.source,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tgainmapImage.width,\n\t\t\t\t\tgainmapImage.height,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tsdrImage.width,\n\t\t\t\t\tsdrImage.height\n\t\t\t\t);\n\t\t\t\tconst gainmapImageData = ctx.getImageData(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tsdrImage.width,\n\t\t\t\t\tsdrImage.height,\n\t\t\t\t\t{ colorSpace: 'srgb' }\n\t\t\t\t);\n\n\t\t\t\tctx.drawImage( sdrImage.source, 0, 0 );\n\t\t\t\tconst sdrImageData = ctx.getImageData(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tsdrImage.width,\n\t\t\t\t\tsdrImage.height,\n\t\t\t\t\t{ colorSpace: 'srgb' }\n\t\t\t\t);\n\n\t\t\t\t/* HDR Recovery formula - https://developer.android.com/media/platform/hdr-image-format#use_the_gain_map_to_create_adapted_HDR_rendition */\n\t\t\t\tlet hdrBuffer;\n\n\t\t\t\tif ( this.type === HalfFloatType ) {\n\n\t\t\t\t\thdrBuffer = new Uint16Array( sdrImageData.data.length ).fill( 23544 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\thdrBuffer = new Float32Array( sdrImageData.data.length ).fill( 255 );\n\n\t\t\t\t}\n\n\t\t\t\tconst maxDisplayBoost = Math.sqrt(\n\t\t\t\t\tMath.pow(\n\t\t\t\t\t\t/* 1.8 instead of 2 near-perfectly rectifies approximations introduced by precalculated SRGB_TO_LINEAR values */\n\t\t\t\t\t\t1.8,\n\t\t\t\t\t\txmpMetadata.hdrCapacityMax\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tconst unclampedWeightFactor =\n\t\t\t\t\t( Math.log2( maxDisplayBoost ) - xmpMetadata.hdrCapacityMin ) /\n\t\t\t\t\t( xmpMetadata.hdrCapacityMax - xmpMetadata.hdrCapacityMin );\n\t\t\t\tconst weightFactor = Math.min(\n\t\t\t\t\tMath.max( unclampedWeightFactor, 0.0 ),\n\t\t\t\t\t1.0\n\t\t\t\t);\n\t\t\t\tconst useGammaOne = xmpMetadata.gamma === 1.0;\n\n\t\t\t\tfor (\n\t\t\t\t\tlet pixelIndex = 0;\n\t\t\t\t\tpixelIndex < sdrImageData.data.length;\n\t\t\t\t\tpixelIndex += 4\n\t\t\t\t) {\n\n\t\t\t\t\tconst x = ( pixelIndex / 4 ) % sdrImage.width;\n\t\t\t\t\tconst y = Math.floor( pixelIndex / 4 / sdrImage.width );\n\n\t\t\t\t\tfor ( let channelIndex = 0; channelIndex < 3; channelIndex ++ ) {\n\n\t\t\t\t\t\tconst sdrValue = sdrImageData.data[ pixelIndex + channelIndex ];\n\n\t\t\t\t\t\tconst gainmapIndex = ( y * sdrImage.width + x ) * 4 + channelIndex;\n\t\t\t\t\t\tconst gainmapValue = gainmapImageData.data[ gainmapIndex ] / 255.0;\n\n\t\t\t\t\t\t/* Gamma is 1.0 by default */\n\t\t\t\t\t\tconst logRecovery = useGammaOne\n\t\t\t\t\t\t\t? gainmapValue\n\t\t\t\t\t\t\t: Math.pow( gainmapValue, 1.0 / xmpMetadata.gamma );\n\n\t\t\t\t\t\tconst logBoost =\n\t\t\t\t\t\t\txmpMetadata.gainMapMin * ( 1.0 - logRecovery ) +\n\t\t\t\t\t\t\txmpMetadata.gainMapMax * logRecovery;\n\n\t\t\t\t\t\tconst hdrValue =\n\t\t\t\t\t\t\t( sdrValue + xmpMetadata.offsetSDR ) *\n\t\t\t\t\t\t\t\t( logBoost * weightFactor === 0.0\n\t\t\t\t\t\t\t\t\t? 1.0\n\t\t\t\t\t\t\t\t\t: Math.pow( 2, logBoost * weightFactor ) ) -\n\t\t\t\t\t\t\txmpMetadata.offsetHDR;\n\n\t\t\t\t\t\tconst linearHDRValue = Math.min(\n\t\t\t\t\t\t\tMath.max( this._srgbToLinear( hdrValue ), 0 ),\n\t\t\t\t\t\t\t65504\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\thdrBuffer[ pixelIndex + channelIndex ] =\n\t\t\t\t\t\t\tthis.type === HalfFloatType\n\t\t\t\t\t\t\t\t? DataUtils.toHalfFloat( linearHDRValue )\n\t\t\t\t\t\t\t\t: linearHDRValue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tonSuccess( hdrBuffer, sdrImage.width, sdrImage.height );\n\n\t\t\t} )\n\t\t\t.catch( () => {\n\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'THREE.UltraHDRLoader Error: Could not parse UltraHDR images'\n\t\t\t\t);\n\n\t\t\t} );\n\n\t}\n\n}\n\nexport { UltraHDRLoader };\n", "import {\n\tDataTextureLoader,\n\tRGBAFormat,\n\tLinearFilter,\n\tCubeTexture,\n\tHalfFloatType,\n\tDataUtils\n} from 'three';\n\nclass RGBMLoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\t\tthis.maxRange = 7; // more information about this property at https://iwasbeingirony.blogspot.com/2010/06/difference-between-rgbm-and-rgbd.html\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tsetMaxRange( value ) {\n\n\t\tthis.maxRange = value;\n\t\treturn this;\n\n\t}\n\n\tloadCubemap( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\ttexture.images[ i ] = undefined;\n\n\t\t}\n\n\t\tlet loaded = 0;\n\n\t\tconst scope = this;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tscope.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\ttexture.type = this.type;\n\t\ttexture.format = RGBAFormat;\n\t\ttexture.minFilter = LinearFilter;\n\t\ttexture.generateMipmaps = false;\n\n\t\treturn texture;\n\n\t}\n\n\tloadCubemapAsync( urls, onProgress ) {\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tthis.loadCubemap( urls, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst img = UPNG.decode( buffer );\n\t\tconst rgba = UPNG.toRGBA8( img )[ 0 ];\n\n\t\tconst data = new Uint8Array( rgba );\n\t\tconst size = img.width * img.height * 4;\n\n\t\tconst output = ( this.type === HalfFloatType ) ? new Uint16Array( size ) : new Float32Array( size );\n\n\t\t// decode RGBM\n\n\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\tconst r = data[ i + 0 ] / 255;\n\t\t\tconst g = data[ i + 1 ] / 255;\n\t\t\tconst b = data[ i + 2 ] / 255;\n\t\t\tconst a = data[ i + 3 ] / 255;\n\n\t\t\tif ( this.type === HalfFloatType ) {\n\n\t\t\t\toutput[ i + 0 ] = DataUtils.toHalfFloat( Math.min( r * a * this.maxRange, 65504 ) );\n\t\t\t\toutput[ i + 1 ] = DataUtils.toHalfFloat( Math.min( g * a * this.maxRange, 65504 ) );\n\t\t\t\toutput[ i + 2 ] = DataUtils.toHalfFloat( Math.min( b * a * this.maxRange, 65504 ) );\n\t\t\t\toutput[ i + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\t\t\t} else {\n\n\t\t\t\toutput[ i + 0 ] = r * a * this.maxRange;\n\t\t\t\toutput[ i + 1 ] = g * a * this.maxRange;\n\t\t\t\toutput[ i + 2 ] = b * a * this.maxRange;\n\t\t\t\toutput[ i + 3 ] = 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\twidth: img.width,\n\t\t\theight: img.height,\n\t\t\tdata: output,\n\t\t\tformat: RGBAFormat,\n\t\t\ttype: this.type,\n\t\t\tflipY: true\n\t\t};\n\n\t}\n\n}\n\n// from https://github.com/photopea/UPNG.js (MIT License)\n\nvar UPNG = {};\n\nUPNG.toRGBA8 = function ( out ) {\n\n\tvar w = out.width, h = out.height;\n\tif ( out.tabs.acTL == null ) return [ UPNG.toRGBA8.decodeImage( out.data, w, h, out ).buffer ];\n\n\tvar frms = [];\n\tif ( out.frames[ 0 ].data == null ) out.frames[ 0 ].data = out.data;\n\n\tvar len = w * h * 4, img = new Uint8Array( len ), empty = new Uint8Array( len ), prev = new Uint8Array( len );\n\tfor ( var i = 0; i < out.frames.length; i ++ ) {\n\n\t\tvar frm = out.frames[ i ];\n\t\tvar fx = frm.rect.x, fy = frm.rect.y, fw = frm.rect.width, fh = frm.rect.height;\n\t\tvar fdata = UPNG.toRGBA8.decodeImage( frm.data, fw, fh, out );\n\n\t\tif ( i != 0 ) for ( var j = 0; j < len; j ++ ) prev[ j ] = img[ j ];\n\n\t\tif ( frm.blend == 0 ) UPNG._copyTile( fdata, fw, fh, img, w, h, fx, fy, 0 );\n\t\telse if ( frm.blend == 1 ) UPNG._copyTile( fdata, fw, fh, img, w, h, fx, fy, 1 );\n\n\t\tfrms.push( img.buffer.slice( 0 ) );\n\n\t\tif ( frm.dispose == 1 ) UPNG._copyTile( empty, fw, fh, img, w, h, fx, fy, 0 );\n\t\telse if ( frm.dispose == 2 ) for ( var j = 0; j < len; j ++ ) img[ j ] = prev[ j ];\n\n\t}\n\n\treturn frms;\n\n};\n\nUPNG.toRGBA8.decodeImage = function ( data, w, h, out ) {\n\n\tvar area = w * h, bpp = UPNG.decode._getBPP( out );\n\tvar bpl = Math.ceil( w * bpp / 8 );\t// bytes per line\n\n\tvar bf = new Uint8Array( area * 4 ), bf32 = new Uint32Array( bf.buffer );\n\tvar ctype = out.ctype, depth = out.depth;\n\tvar rs = UPNG._bin.readUshort;\n\n\tif ( ctype == 6 ) { // RGB + alpha\n\n\t\tvar qarea = area << 2;\n\t\tif ( depth == 8 ) for ( var i = 0; i < qarea; i += 4 ) {\n\n\t\t\tbf[ i ] = data[ i ]; bf[ i + 1 ] = data[ i + 1 ]; bf[ i + 2 ] = data[ i + 2 ]; bf[ i + 3 ] = data[ i + 3 ];\n\n\t\t}\n\n\t\tif ( depth == 16 ) for ( var i = 0; i < qarea; i ++ ) {\n\n\t\t\tbf[ i ] = data[ i << 1 ];\n\n\t\t}\n\n\t} else if ( ctype == 2 ) {\t// RGB\n\n\t\tvar ts = out.tabs[ 'tRNS' ];\n\t\tif ( ts == null ) {\n\n\t\t\tif ( depth == 8 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\t\tvar ti = i * 3; bf32[ i ] = ( 255 << 24 ) | ( data[ ti + 2 ] << 16 ) | ( data[ ti + 1 ] << 8 ) | data[ ti ];\n\n\t\t\t}\n\n\t\t\tif ( depth == 16 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\t\tvar ti = i * 6; bf32[ i ] = ( 255 << 24 ) | ( data[ ti + 4 ] << 16 ) | ( data[ ti + 2 ] << 8 ) | data[ ti ];\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar tr = ts[ 0 ], tg = ts[ 1 ], tb = ts[ 2 ];\n\t\t\tif ( depth == 8 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\t\tvar qi = i << 2, ti = i * 3; bf32[ i ] = ( 255 << 24 ) | ( data[ ti + 2 ] << 16 ) | ( data[ ti + 1 ] << 8 ) | data[ ti ];\n\t\t\t\tif ( data[ ti ] == tr && data[ ti + 1 ] == tg && data[ ti + 2 ] == tb ) bf[ qi + 3 ] = 0;\n\n\t\t\t}\n\n\t\t\tif ( depth == 16 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\t\tvar qi = i << 2, ti = i * 6; bf32[ i ] = ( 255 << 24 ) | ( data[ ti + 4 ] << 16 ) | ( data[ ti + 2 ] << 8 ) | data[ ti ];\n\t\t\t\tif ( rs( data, ti ) == tr && rs( data, ti + 2 ) == tg && rs( data, ti + 4 ) == tb ) bf[ qi + 3 ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t} else if ( ctype == 3 ) {\t// palette\n\n\t\tvar p = out.tabs[ 'PLTE' ], ap = out.tabs[ 'tRNS' ], tl = ap ? ap.length : 0;\n\t\t//console.log(p, ap);\n\t\tif ( depth == 1 ) for ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar s0 = y * bpl, t0 = y * w;\n\t\t\tfor ( var i = 0; i < w; i ++ ) {\n\n\t\t\t\tvar qi = ( t0 + i ) << 2, j = ( ( data[ s0 + ( i >> 3 ) ] >> ( 7 - ( ( i & 7 ) << 0 ) ) ) & 1 ), cj = 3 * j; bf[ qi ] = p[ cj ]; bf[ qi + 1 ] = p[ cj + 1 ]; bf[ qi + 2 ] = p[ cj + 2 ]; bf[ qi + 3 ] = ( j < tl ) ? ap[ j ] : 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( depth == 2 ) for ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar s0 = y * bpl, t0 = y * w;\n\t\t\tfor ( var i = 0; i < w; i ++ ) {\n\n\t\t\t\tvar qi = ( t0 + i ) << 2, j = ( ( data[ s0 + ( i >> 2 ) ] >> ( 6 - ( ( i & 3 ) << 1 ) ) ) & 3 ), cj = 3 * j; bf[ qi ] = p[ cj ]; bf[ qi + 1 ] = p[ cj + 1 ]; bf[ qi + 2 ] = p[ cj + 2 ]; bf[ qi + 3 ] = ( j < tl ) ? ap[ j ] : 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( depth == 4 ) for ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar s0 = y * bpl, t0 = y * w;\n\t\t\tfor ( var i = 0; i < w; i ++ ) {\n\n\t\t\t\tvar qi = ( t0 + i ) << 2, j = ( ( data[ s0 + ( i >> 1 ) ] >> ( 4 - ( ( i & 1 ) << 2 ) ) ) & 15 ), cj = 3 * j; bf[ qi ] = p[ cj ]; bf[ qi + 1 ] = p[ cj + 1 ]; bf[ qi + 2 ] = p[ cj + 2 ]; bf[ qi + 3 ] = ( j < tl ) ? ap[ j ] : 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( depth == 8 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\tvar qi = i << 2, j = data[ i ], cj = 3 * j; bf[ qi ] = p[ cj ]; bf[ qi + 1 ] = p[ cj + 1 ]; bf[ qi + 2 ] = p[ cj + 2 ]; bf[ qi + 3 ] = ( j < tl ) ? ap[ j ] : 255;\n\n\t\t}\n\n\t} else if ( ctype == 4 ) {\t// gray + alpha\n\n\t\tif ( depth == 8 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\tvar qi = i << 2, di = i << 1, gr = data[ di ]; bf[ qi ] = gr; bf[ qi + 1 ] = gr; bf[ qi + 2 ] = gr; bf[ qi + 3 ] = data[ di + 1 ];\n\n\t\t}\n\n\t\tif ( depth == 16 ) for ( var i = 0; i < area; i ++ ) {\n\n\t\t\tvar qi = i << 2, di = i << 2, gr = data[ di ]; bf[ qi ] = gr; bf[ qi + 1 ] = gr; bf[ qi + 2 ] = gr; bf[ qi + 3 ] = data[ di + 2 ];\n\n\t\t}\n\n\t} else if ( ctype == 0 ) {\t// gray\n\n\t\tvar tr = out.tabs[ 'tRNS' ] ? out.tabs[ 'tRNS' ] : - 1;\n\t\tfor ( var y = 0; y < h; y ++ ) {\n\n\t\t\tvar off = y * bpl, to = y * w;\n\t\t\tif ( depth == 1 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = 255 * ( ( data[ off + ( x >>> 3 ) ] >>> ( 7 - ( x & 7 ) ) ) & 1 ), al = ( gr == tr * 255 ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\t\t\telse if ( depth == 2 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = 85 * ( ( data[ off + ( x >>> 2 ) ] >>> ( 6 - ( ( x & 3 ) << 1 ) ) ) & 3 ), al = ( gr == tr * 85 ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\t\t\telse if ( depth == 4 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = 17 * ( ( data[ off + ( x >>> 1 ) ] >>> ( 4 - ( ( x & 1 ) << 2 ) ) ) & 15 ), al = ( gr == tr * 17 ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\t\t\telse if ( depth == 8 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = data[ off + x ], al = ( gr == tr ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\t\t\telse if ( depth == 16 ) for ( var x = 0; x < w; x ++ ) {\n\n\t\t\t\tvar gr = data[ off + ( x << 1 ) ], al = ( rs( data, off + ( x << 1 ) ) == tr ) ? 0 : 255; bf32[ to + x ] = ( al << 24 ) | ( gr << 16 ) | ( gr << 8 ) | gr;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//console.log(Date.now()-time);\n\treturn bf;\n\n};\n\n\n\nUPNG.decode = function ( buff ) {\n\n\tvar data = new Uint8Array( buff ), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint;\n\tvar out = { tabs: {}, frames: [] };\n\tvar dd = new Uint8Array( data.length ), doff = 0;\t // put all IDAT data into it\n\tvar fd, foff = 0;\t// frames\n\tvar text, keyw, bfr;\n\n\tvar mgck = [ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a ];\n\tfor ( var i = 0; i < 8; i ++ ) if ( data[ i ] != mgck[ i ] ) throw new Error( 'The input is not a PNG file!' );\n\n\twhile ( offset < data.length ) {\n\n\t\tvar len = bin.readUint( data, offset ); offset += 4;\n\t\tvar type = bin.readASCII( data, offset, 4 ); offset += 4;\n\t\t//console.log(type,len);\n\n\t\tif ( type == 'IHDR' ) {\n\n\t\t\tUPNG.decode._IHDR( data, offset, out );\n\n\t\t} else if ( type == 'CgBI' ) {\n\n\t\t\tout.tabs[ type ] = data.slice( offset, offset + 4 );\n\n\t\t} else if ( type == 'IDAT' ) {\n\n\t\t\tfor ( var i = 0; i < len; i ++ ) dd[ doff + i ] = data[ offset + i ];\n\t\t\tdoff += len;\n\n\t\t} else if ( type == 'acTL' ) {\n\n\t\t\tout.tabs[ type ] = { num_frames: rUi( data, offset ), num_plays: rUi( data, offset + 4 ) };\n\t\t\tfd = new Uint8Array( data.length );\n\n\t\t} else if ( type == 'fcTL' ) {\n\n\t\t\tif ( foff != 0 ) {\n\n\t\t\t\tvar fr = out.frames[ out.frames.length - 1 ];\n\t\t\t\tfr.data = UPNG.decode._decompress( out, fd.slice( 0, foff ), fr.rect.width, fr.rect.height ); foff = 0;\n\n\t\t\t}\n\n\t\t\tvar rct = { x: rUi( data, offset + 12 ), y: rUi( data, offset + 16 ), width: rUi( data, offset + 4 ), height: rUi( data, offset + 8 ) };\n\t\t\tvar del = rUs( data, offset + 22 ); del = rUs( data, offset + 20 ) / ( del == 0 ? 100 : del );\n\t\t\tvar frm = { rect: rct, delay: Math.round( del * 1000 ), dispose: data[ offset + 24 ], blend: data[ offset + 25 ] };\n\t\t\t//console.log(frm);\n\t\t\tout.frames.push( frm );\n\n\t\t} else if ( type == 'fdAT' ) {\n\n\t\t\tfor ( var i = 0; i < len - 4; i ++ ) fd[ foff + i ] = data[ offset + i + 4 ];\n\t\t\tfoff += len - 4;\n\n\t\t} else if ( type == 'pHYs' ) {\n\n\t\t\tout.tabs[ type ] = [ bin.readUint( data, offset ), bin.readUint( data, offset + 4 ), data[ offset + 8 ] ];\n\n\t\t} else if ( type == 'cHRM' ) {\n\n\t\t\tout.tabs[ type ] = [];\n\t\t\tfor ( var i = 0; i < 8; i ++ ) out.tabs[ type ].push( bin.readUint( data, offset + i * 4 ) );\n\n\t\t} else if ( type == 'tEXt' || type == 'zTXt' ) {\n\n\t\t\tif ( out.tabs[ type ] == null ) out.tabs[ type ] = {};\n\t\t\tvar nz = bin.nextZero( data, offset );\n\t\t\tkeyw = bin.readASCII( data, offset, nz - offset );\n\t\t\tvar tl = offset + len - nz - 1;\n\t\t\tif ( type == 'tEXt' ) text = bin.readASCII( data, nz + 1, tl );\n\t\t\telse {\n\n\t\t\t\tbfr = UPNG.decode._inflate( data.slice( nz + 2, nz + 2 + tl ) );\n\t\t\t\ttext = bin.readUTF8( bfr, 0, bfr.length );\n\n\t\t\t}\n\n\t\t\tout.tabs[ type ][ keyw ] = text;\n\n\t\t} else if ( type == 'iTXt' ) {\n\n\t\t\tif ( out.tabs[ type ] == null ) out.tabs[ type ] = {};\n\t\t\tvar nz = 0, off = offset;\n\t\t\tnz = bin.nextZero( data, off );\n\t\t\tkeyw = bin.readASCII( data, off, nz - off ); off = nz + 1;\n\t\t\tvar cflag = data[ off ]; off += 2;\n\t\t\tnz = bin.nextZero( data, off );\n\t\t\tbin.readASCII( data, off, nz - off ); off = nz + 1;\n\t\t\tnz = bin.nextZero( data, off );\n\t\t\tbin.readUTF8( data, off, nz - off ); off = nz + 1;\n\t\t\tvar tl = len - ( off - offset );\n\t\t\tif ( cflag == 0 ) text = bin.readUTF8( data, off, tl );\n\t\t\telse {\n\n\t\t\t\tbfr = UPNG.decode._inflate( data.slice( off, off + tl ) );\n\t\t\t\ttext = bin.readUTF8( bfr, 0, bfr.length );\n\n\t\t\t}\n\n\t\t\tout.tabs[ type ][ keyw ] = text;\n\n\t\t} else if ( type == 'PLTE' ) {\n\n\t\t\tout.tabs[ type ] = bin.readBytes( data, offset, len );\n\n\t\t} else if ( type == 'hIST' ) {\n\n\t\t\tvar pl = out.tabs[ 'PLTE' ].length / 3;\n\t\t\tout.tabs[ type ] = []; for ( var i = 0; i < pl; i ++ ) out.tabs[ type ].push( rUs( data, offset + i * 2 ) );\n\n\t\t} else if ( type == 'tRNS' ) {\n\n\t\t\tif ( out.ctype == 3 ) out.tabs[ type ] = bin.readBytes( data, offset, len );\n\t\t\telse if ( out.ctype == 0 ) out.tabs[ type ] = rUs( data, offset );\n\t\t\telse if ( out.ctype == 2 ) out.tabs[ type ] = [ rUs( data, offset ), rUs( data, offset + 2 ), rUs( data, offset + 4 ) ];\n\t\t\t//else console.log(\"tRNS for unsupported color type\",out.ctype, len);\n\n\t\t} else if ( type == 'gAMA' ) out.tabs[ type ] = bin.readUint( data, offset ) / 100000;\n\t\telse if ( type == 'sRGB' ) out.tabs[ type ] = data[ offset ];\n\t\telse if ( type == 'bKGD' ) {\n\n\t\t\tif ( out.ctype == 0 || out.ctype == 4 ) out.tabs[ type ] = [ rUs( data, offset ) ];\n\t\t\telse if ( out.ctype == 2 || out.ctype == 6 ) out.tabs[ type ] = [ rUs( data, offset ), rUs( data, offset + 2 ), rUs( data, offset + 4 ) ];\n\t\t\telse if ( out.ctype == 3 ) out.tabs[ type ] = data[ offset ];\n\n\t\t} else if ( type == 'IEND' ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t\t//else { console.log(\"unknown chunk type\", type, len); out.tabs[type]=data.slice(offset,offset+len); }\n\t\toffset += len;\n\t\tbin.readUint( data, offset ); offset += 4;\n\n\t}\n\n\tif ( foff != 0 ) {\n\n\t\tvar fr = out.frames[ out.frames.length - 1 ];\n\t\tfr.data = UPNG.decode._decompress( out, fd.slice( 0, foff ), fr.rect.width, fr.rect.height );\n\n\t}\n\n\tout.data = UPNG.decode._decompress( out, dd, out.width, out.height );\n\n\tdelete out.compress; delete out.interlace; delete out.filter;\n\treturn out;\n\n};\n\nUPNG.decode._decompress = function ( out, dd, w, h ) {\n\n\tvar bpp = UPNG.decode._getBPP( out ), bpl = Math.ceil( w * bpp / 8 ), buff = new Uint8Array( ( bpl + 1 + out.interlace ) * h );\n\tif ( out.tabs[ 'CgBI' ] ) dd = UPNG.inflateRaw( dd, buff );\n\telse dd = UPNG.decode._inflate( dd, buff );\n\n\tif ( out.interlace == 0 ) dd = UPNG.decode._filterZero( dd, out, 0, w, h );\n\telse if ( out.interlace == 1 ) dd = UPNG.decode._readInterlace( dd, out );\n\n\treturn dd;\n\n};\n\nUPNG.decode._inflate = function ( data, buff ) {\n\n\tvar out = UPNG[ 'inflateRaw' ]( new Uint8Array( data.buffer, 2, data.length - 6 ), buff ); return out;\n\n};\n\nUPNG.inflateRaw = function () {\n\n\tvar H = {}; H.H = {}; H.H.N = function ( N, W ) {\n\n\t\tvar R = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q = 0, X = 0, u = 0, w = 0, d = 0, v, C;\n\t\tif ( N[ 0 ] == 3 && N[ 1 ] == 0 ) return W ? W : new R( 0 ); var V = H.H, n = V.b, A = V.e, l = V.R, M = V.n, I = V.A, e = V.Z, b = V.m, Z = W == null;\n\t\tif ( Z )W = new R( N.length >>> 2 << 5 ); while ( i == 0 ) {\n\n\t\t\ti = n( N, d, 1 ); m = n( N, d + 1, 2 ); d += 3; if ( m == 0 ) {\n\n\t\t\t\tif ( ( d & 7 ) != 0 )d += 8 - ( d & 7 );\n\t\t\t\tvar D = ( d >>> 3 ) + 4, q = N[ D - 4 ] | N[ D - 3 ] << 8; if ( Z )W = H.H.W( W, w + q ); W.set( new R( N.buffer, N.byteOffset + D, q ), w ); d = D + q << 3;\n\t\t\t\tw += q; continue\n\t\t\t\t;\n\n\t\t\t}\n\n\t\t\tif ( Z )W = H.H.W( W, w + ( 1 << 17 ) ); if ( m == 1 ) {\n\n\t\t\t\tv = b.J; C = b.h; X = ( 1 << 9 ) - 1; u = ( 1 << 5 ) - 1;\n\n\t\t\t}\n\n\t\t\tif ( m == 2 ) {\n\n\t\t\t\tJ = A( N, d, 5 ) + 257;\n\t\t\t\th = A( N, d + 5, 5 ) + 1; Q = A( N, d + 10, 4 ) + 4; d += 14; var j = 1; for ( var c = 0; c < 38; c += 2 ) {\n\n\t\t\t\t\tb.Q[ c ] = 0; b.Q[ c + 1 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var c = 0;\n\t\t\t\t\tc < Q; c ++ ) {\n\n\t\t\t\t\tvar K = A( N, d + c * 3, 3 ); b.Q[ ( b.X[ c ] << 1 ) + 1 ] = K; if ( K > j )j = K\n\t\t\t\t\t;\n\n\t\t\t\t}\n\n\t\t\t\td += 3 * Q; M( b.Q, j ); I( b.Q, j, b.u ); v = b.w; C = b.d;\n\t\t\t\td = l( b.u, ( 1 << j ) - 1, J + h, N, d, b.v ); var r = V.V( b.v, 0, J, b.C ); X = ( 1 << r ) - 1; var S = V.V( b.v, J, h, b.D ); u = ( 1 << S ) - 1; M( b.C, r );\n\t\t\t\tI( b.C, r, v ); M( b.D, S ); I( b.D, S, C )\n\t\t\t\t;\n\n\t\t\t}\n\n\t\t\twhile ( ! 0 ) {\n\n\t\t\t\tvar T = v[ e( N, d ) & X ]; d += T & 15; var p = T >>> 4; if ( p >>> 8 == 0 ) {\n\n\t\t\t\t\tW[ w ++ ] = p;\n\n\t\t\t\t} else if ( p == 256 ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar z = w + p - 254;\n\t\t\t\t\tif ( p > 264 ) {\n\n\t\t\t\t\t\tvar _ = b.q[ p - 257 ]; z = w + ( _ >>> 3 ) + A( N, d, _ & 7 ); d += _ & 7;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar $ = C[ e( N, d ) & u ]; d += $ & 15; var s = $ >>> 4, Y = b.c[ s ], a = ( Y >>> 4 ) + n( N, d, Y & 15 );\n\t\t\t\t\td += Y & 15; while ( w < z ) {\n\n\t\t\t\t\t\tW[ w ] = W[ w ++ - a ]; W[ w ] = W[ w ++ - a ]; W[ w ] = W[ w ++ - a ]; W[ w ] = W[ w ++ - a ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tw = z\n\t\t\t\t\t;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn W.length == w ? W : W.slice( 0, w )\n\t\t;\n\n\t};\n\n\tH.H.W = function ( N, W ) {\n\n\t\tvar R = N.length; if ( W <= R ) return N; var V = new Uint8Array( R << 1 ); V.set( N, 0 ); return V;\n\n\t};\n\n\tH.H.R = function ( N, W, R, V, n, A ) {\n\n\t\tvar l = H.H.e, M = H.H.Z, I = 0; while ( I < R ) {\n\n\t\t\tvar e = N[ M( V, n ) & W ]; n += e & 15; var b = e >>> 4;\n\t\t\tif ( b <= 15 ) {\n\n\t\t\t\tA[ I ] = b; I ++;\n\n\t\t\t} else {\n\n\t\t\t\tvar Z = 0, m = 0; if ( b == 16 ) {\n\n\t\t\t\t\tm = 3 + l( V, n, 2 ); n += 2; Z = A[ I - 1 ];\n\n\t\t\t\t} else if ( b == 17 ) {\n\n\t\t\t\t\tm = 3 + l( V, n, 3 );\n\t\t\t\t\tn += 3\n\t\t\t\t\t;\n\n\t\t\t\t} else if ( b == 18 ) {\n\n\t\t\t\t\tm = 11 + l( V, n, 7 ); n += 7;\n\n\t\t\t\t}\n\n\t\t\t\tvar J = I + m; while ( I < J ) {\n\n\t\t\t\t\tA[ I ] = Z; I ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn n\n\t\t;\n\n\t};\n\n\tH.H.V = function ( N, W, R, V ) {\n\n\t\tvar n = 0, A = 0, l = V.length >>> 1;\n\t\twhile ( A < R ) {\n\n\t\t\tvar M = N[ A + W ]; V[ A << 1 ] = 0; V[ ( A << 1 ) + 1 ] = M; if ( M > n )n = M; A ++;\n\n\t\t}\n\n\t\twhile ( A < l ) {\n\n\t\t\tV[ A << 1 ] = 0; V[ ( A << 1 ) + 1 ] = 0; A ++;\n\n\t\t}\n\n\t\treturn n\n\t\t;\n\n\t};\n\n\tH.H.n = function ( N, W ) {\n\n\t\tvar R = H.H.m, V = N.length, n, A, l, M, I, e = R.j; for ( var M = 0; M <= W; M ++ )e[ M ] = 0; for ( M = 1; M < V; M += 2 )e[ N[ M ] ] ++;\n\t\tvar b = R.K; n = 0; e[ 0 ] = 0; for ( A = 1; A <= W; A ++ ) {\n\n\t\t\tn = n + e[ A - 1 ] << 1; b[ A ] = n;\n\n\t\t}\n\n\t\tfor ( l = 0; l < V; l += 2 ) {\n\n\t\t\tI = N[ l + 1 ]; if ( I != 0 ) {\n\n\t\t\t\tN[ l ] = b[ I ];\n\t\t\t\tb[ I ] ++\n\t\t\t\t;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tH.H.A = function ( N, W, R ) {\n\n\t\tvar V = N.length, n = H.H.m, A = n.r; for ( var l = 0; l < V; l += 2 ) if ( N[ l + 1 ] != 0 ) {\n\n\t\t\tvar M = l >> 1, I = N[ l + 1 ], e = M << 4 | I, b = W - I, Z = N[ l ] << b, m = Z + ( 1 << b );\n\t\t\twhile ( Z != m ) {\n\n\t\t\t\tvar J = A[ Z ] >>> 15 - W; R[ J ] = e; Z ++;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tH.H.l = function ( N, W ) {\n\n\t\tvar R = H.H.m.r, V = 15 - W; for ( var n = 0; n < N.length;\n\t\t\tn += 2 ) {\n\n\t\t\tvar A = N[ n ] << W - N[ n + 1 ]; N[ n ] = R[ A ] >>> V;\n\n\t\t}\n\n\t};\n\n\tH.H.M = function ( N, W, R ) {\n\n\t\tR = R << ( W & 7 ); var V = W >>> 3; N[ V ] |= R; N[ V + 1 ] |= R >>> 8;\n\n\t};\n\n\tH.H.I = function ( N, W, R ) {\n\n\t\tR = R << ( W & 7 ); var V = W >>> 3; N[ V ] |= R; N[ V + 1 ] |= R >>> 8; N[ V + 2 ] |= R >>> 16;\n\n\t};\n\n\tH.H.e = function ( N, W, R ) {\n\n\t\treturn ( N[ W >>> 3 ] | N[ ( W >>> 3 ) + 1 ] << 8 ) >>> ( W & 7 ) & ( 1 << R ) - 1;\n\n\t};\n\n\tH.H.b = function ( N, W, R ) {\n\n\t\treturn ( N[ W >>> 3 ] | N[ ( W >>> 3 ) + 1 ] << 8 | N[ ( W >>> 3 ) + 2 ] << 16 ) >>> ( W & 7 ) & ( 1 << R ) - 1;\n\n\t};\n\n\tH.H.Z = function ( N, W ) {\n\n\t\treturn ( N[ W >>> 3 ] | N[ ( W >>> 3 ) + 1 ] << 8 | N[ ( W >>> 3 ) + 2 ] << 16 ) >>> ( W & 7 );\n\n\t};\n\n\tH.H.i = function ( N, W ) {\n\n\t\treturn ( N[ W >>> 3 ] | N[ ( W >>> 3 ) + 1 ] << 8 | N[ ( W >>> 3 ) + 2 ] << 16 | N[ ( W >>> 3 ) + 3 ] << 24 ) >>> ( W & 7 );\n\n\t};\n\n\tH.H.m = function () {\n\n\t\tvar N = Uint16Array, W = Uint32Array;\n\t\treturn { K: new N( 16 ), j: new N( 16 ), X: [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ], S: [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999 ], T: [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0 ], q: new N( 32 ), p: [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535 ], z: [ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0 ], c: new W( 32 ), J: new N( 512 ), _: [], h: new N( 32 ), $: [], w: new N( 32768 ), C: [], v: [], d: new N( 32768 ), D: [], u: new N( 512 ), Q: [], r: new N( 1 << 15 ), s: new W( 286 ), Y: new W( 30 ), a: new W( 19 ), t: new W( 15e3 ), k: new N( 1 << 16 ), g: new N( 1 << 15 ) }\n\t\t;\n\n\t}();\n\t( function () {\n\n\t\tvar N = H.H.m, W = 1 << 15; for ( var R = 0; R < W; R ++ ) {\n\n\t\t\tvar V = R; V = ( V & 2863311530 ) >>> 1 | ( V & 1431655765 ) << 1;\n\t\t\tV = ( V & 3435973836 ) >>> 2 | ( V & 858993459 ) << 2; V = ( V & 4042322160 ) >>> 4 | ( V & 252645135 ) << 4; V = ( V & 4278255360 ) >>> 8 | ( V & 16711935 ) << 8;\n\t\t\tN.r[ R ] = ( V >>> 16 | V << 16 ) >>> 17\n\t\t\t;\n\n\t\t}\n\n\t\tfunction n( A, l, M ) {\n\n\t\t\twhile ( l -- != 0 )A.push( 0, M )\n\t\t\t;\n\n\t\t}\n\n\t\tfor ( var R = 0; R < 32; R ++ ) {\n\n\t\t\tN.q[ R ] = N.S[ R ] << 3 | N.T[ R ];\n\t\t\tN.c[ R ] = N.p[ R ] << 4 | N.z[ R ]\n\t\t\t;\n\n\t\t}\n\n\t\tn( N._, 144, 8 ); n( N._, 255 - 143, 9 ); n( N._, 279 - 255, 7 ); n( N._, 287 - 279, 8 ); H.H.n( N._, 9 );\n\t\tH.H.A( N._, 9, N.J ); H.H.l( N._, 9 ); n( N.$, 32, 5 ); H.H.n( N.$, 5 ); H.H.A( N.$, 5, N.h ); H.H.l( N.$, 5 ); n( N.Q, 19, 0 ); n( N.C, 286, 0 );\n\t\tn( N.D, 30, 0 ); n( N.v, 320, 0 )\n\t\t;\n\n\t}() );\n\n\treturn H.H.N\n\t;\n\n}();\n\n\nUPNG.decode._readInterlace = function ( data, out ) {\n\n\tvar w = out.width, h = out.height;\n\tvar bpp = UPNG.decode._getBPP( out ), cbpp = bpp >> 3, bpl = Math.ceil( w * bpp / 8 );\n\tvar img = new Uint8Array( h * bpl );\n\tvar di = 0;\n\n\tvar starting_row = [ 0, 0, 4, 0, 2, 0, 1 ];\n\tvar starting_col = [ 0, 4, 0, 2, 0, 1, 0 ];\n\tvar row_increment = [ 8, 8, 8, 4, 4, 2, 2 ];\n\tvar col_increment = [ 8, 8, 4, 4, 2, 2, 1 ];\n\n\tvar pass = 0;\n\twhile ( pass < 7 ) {\n\n\t\tvar ri = row_increment[ pass ], ci = col_increment[ pass ];\n\t\tvar sw = 0, sh = 0;\n\t\tvar cr = starting_row[ pass ]; while ( cr < h ) {\n\n\t\t\tcr += ri; sh ++;\n\n\t\t}\n\n\t\tvar cc = starting_col[ pass ]; while ( cc < w ) {\n\n\t\t\tcc += ci; sw ++;\n\n\t\t}\n\n\t\tvar bpll = Math.ceil( sw * bpp / 8 );\n\t\tUPNG.decode._filterZero( data, out, di, sw, sh );\n\n\t\tvar y = 0, row = starting_row[ pass ];\n\t\tvar val;\n\n\t\twhile ( row < h ) {\n\n\t\t\tvar col = starting_col[ pass ];\n\t\t\tvar cdi = ( di + y * bpll ) << 3;\n\n\t\t\twhile ( col < w ) {\n\n\t\t\t\tif ( bpp == 1 ) {\n\n\t\t\t\t\tval = data[ cdi >> 3 ]; val = ( val >> ( 7 - ( cdi & 7 ) ) ) & 1;\n\t\t\t\t\timg[ row * bpl + ( col >> 3 ) ] |= ( val << ( 7 - ( ( col & 7 ) << 0 ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bpp == 2 ) {\n\n\t\t\t\t\tval = data[ cdi >> 3 ]; val = ( val >> ( 6 - ( cdi & 7 ) ) ) & 3;\n\t\t\t\t\timg[ row * bpl + ( col >> 2 ) ] |= ( val << ( 6 - ( ( col & 3 ) << 1 ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bpp == 4 ) {\n\n\t\t\t\t\tval = data[ cdi >> 3 ]; val = ( val >> ( 4 - ( cdi & 7 ) ) ) & 15;\n\t\t\t\t\timg[ row * bpl + ( col >> 1 ) ] |= ( val << ( 4 - ( ( col & 1 ) << 2 ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bpp >= 8 ) {\n\n\t\t\t\t\tvar ii = row * bpl + col * cbpp;\n\t\t\t\t\tfor ( var j = 0; j < cbpp; j ++ ) img[ ii + j ] = data[ ( cdi >> 3 ) + j ];\n\n\t\t\t\t}\n\n\t\t\t\tcdi += bpp; col += ci;\n\n\t\t\t}\n\n\t\t\ty ++; row += ri;\n\n\t\t}\n\n\t\tif ( sw * sh != 0 ) di += sh * ( 1 + bpll );\n\t\tpass = pass + 1;\n\n\t}\n\n\treturn img;\n\n};\n\nUPNG.decode._getBPP = function ( out ) {\n\n\tvar noc = [ 1, null, 3, 1, 2, null, 4 ][ out.ctype ];\n\treturn noc * out.depth;\n\n};\n\nUPNG.decode._filterZero = function ( data, out, off, w, h ) {\n\n\tvar bpp = UPNG.decode._getBPP( out ), bpl = Math.ceil( w * bpp / 8 ), paeth = UPNG.decode._paeth;\n\tbpp = Math.ceil( bpp / 8 );\n\n\tvar i, di, type = data[ off ], x = 0;\n\n\tif ( type > 1 ) data[ off ] = [ 0, 0, 1 ][ type - 2 ];\n\tif ( type == 3 ) for ( x = bpp; x < bpl; x ++ ) data[ x + 1 ] = ( data[ x + 1 ] + ( data[ x + 1 - bpp ] >>> 1 ) ) & 255;\n\n\tfor ( var y = 0; y < h; y ++ ) {\n\n\t\ti = off + y * bpl; di = i + y + 1;\n\t\ttype = data[ di - 1 ]; x = 0;\n\n\t\tif ( type == 0 ) for ( ; x < bpl; x ++ ) data[ i + x ] = data[ di + x ];\n\t\telse if ( type == 1 ) {\n\n\t\t\tfor ( ; x < bpp; x ++ ) data[ i + x ] = data[ di + x ];\n\t\t\t\t\t\t for ( ; x < bpl; x ++ ) data[ i + x ] = ( data[ di + x ] + data[ i + x - bpp ] );\n\n\t\t} else if ( type == 2 ) {\n\n\t\t\tfor ( ; x < bpl; x ++ ) data[ i + x ] = ( data[ di + x ] + data[ i + x - bpl ] );\n\n\t\t} else if ( type == 3 ) {\n\n\t\t\tfor ( ; x < bpp; x ++ ) data[ i + x ] = ( data[ di + x ] + ( data[ i + x - bpl ] >>> 1 ) );\n\t\t\t for ( ; x < bpl; x ++ ) data[ i + x ] = ( data[ di + x ] + ( ( data[ i + x - bpl ] + data[ i + x - bpp ] ) >>> 1 ) );\n\n\t\t} else {\n\n\t\t\tfor ( ; x < bpp; x ++ ) data[ i + x ] = ( data[ di + x ] + paeth( 0, data[ i + x - bpl ], 0 ) );\n\t\t\t\t\t\t for ( ; x < bpl; x ++ ) data[ i + x ] = ( data[ di + x ] + paeth( data[ i + x - bpp ], data[ i + x - bpl ], data[ i + x - bpp - bpl ] ) );\n\n\t\t}\n\n\t}\n\n\treturn data;\n\n};\n\nUPNG.decode._paeth = function ( a, b, c ) {\n\n\tvar p = a + b - c, pa = ( p - a ), pb = ( p - b ), pc = ( p - c );\n\tif ( pa * pa <= pb * pb && pa * pa <= pc * pc ) return a;\n\telse if ( pb * pb <= pc * pc ) return b;\n\treturn c;\n\n};\n\nUPNG.decode._IHDR = function ( data, offset, out ) {\n\n\tvar bin = UPNG._bin;\n\tout.width = bin.readUint( data, offset ); offset += 4;\n\tout.height = bin.readUint( data, offset ); offset += 4;\n\tout.depth = data[ offset ]; offset ++;\n\tout.ctype = data[ offset ]; offset ++;\n\tout.compress = data[ offset ]; offset ++;\n\tout.filter = data[ offset ]; offset ++;\n\tout.interlace = data[ offset ]; offset ++;\n\n};\n\nUPNG._bin = {\n\tnextZero: function ( data, p ) {\n\n\t\twhile ( data[ p ] != 0 ) p ++; return p;\n\n\t},\n\treadUshort: function ( buff, p ) {\n\n\t\treturn ( buff[ p ] << 8 ) | buff[ p + 1 ];\n\n\t},\n\twriteUshort: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >> 8 ) & 255; buff[ p + 1 ] = n & 255;\n\n\t},\n\treadUint: function ( buff, p ) {\n\n\t\treturn ( buff[ p ] * ( 256 * 256 * 256 ) ) + ( ( buff[ p + 1 ] << 16 ) | ( buff[ p + 2 ] << 8 ) | buff[ p + 3 ] );\n\n\t},\n\twriteUint: function ( buff, p, n ) {\n\n\t\tbuff[ p ] = ( n >> 24 ) & 255; buff[ p + 1 ] = ( n >> 16 ) & 255; buff[ p + 2 ] = ( n >> 8 ) & 255; buff[ p + 3 ] = n & 255;\n\n\t},\n\treadASCII: function ( buff, p, l ) {\n\n\t\tvar s = ''; for ( var i = 0; i < l; i ++ ) s += String.fromCharCode( buff[ p + i ] ); return s;\n\n\t},\n\twriteASCII: function ( data, p, s ) {\n\n\t\tfor ( var i = 0; i < s.length; i ++ ) data[ p + i ] = s.charCodeAt( i );\n\n\t},\n\treadBytes: function ( buff, p, l ) {\n\n\t\tvar arr = []; for ( var i = 0; i < l; i ++ ) arr.push( buff[ p + i ] ); return arr;\n\n\t},\n\tpad: function ( n ) {\n\n\t\treturn n.length < 2 ? '0' + n : n;\n\n\t},\n\treadUTF8: function ( buff, p, l ) {\n\n\t\tvar s = '', ns;\n\t\tfor ( var i = 0; i < l; i ++ ) s += '%' + UPNG._bin.pad( buff[ p + i ].toString( 16 ) );\n\t\ttry {\n\n\t\t\tns = decodeURIComponent( s );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn UPNG._bin.readASCII( buff, p, l );\n\n\t\t}\n\n\t\treturn ns;\n\n\t}\n};\nUPNG._copyTile = function ( sb, sw, sh, tb, tw, th, xoff, yoff, mode ) {\n\n\tvar w = Math.min( sw, tw ), h = Math.min( sh, th );\n\tvar si = 0, ti = 0;\n\tfor ( var y = 0; y < h; y ++ )\n\t\tfor ( var x = 0; x < w; x ++ ) {\n\n\t\t\tif ( xoff >= 0 && yoff >= 0 ) {\n\n\t\t\t\tsi = ( y * sw + x ) << 2; ti = ( ( yoff + y ) * tw + xoff + x ) << 2;\n\n\t\t\t} else {\n\n\t\t\t\tsi = ( ( - yoff + y ) * sw - xoff + x ) << 2; ti = ( y * tw + x ) << 2;\n\n\t\t\t}\n\n\t\t\tif ( mode == 0 ) {\n\n\t\t\t\ttb[ ti ] = sb[ si ]; tb[ ti + 1 ] = sb[ si + 1 ]; tb[ ti + 2 ] = sb[ si + 2 ]; tb[ ti + 3 ] = sb[ si + 3 ];\n\n\t\t\t} else if ( mode == 1 ) {\n\n\t\t\t\tvar fa = sb[ si + 3 ] * ( 1 / 255 ), fr = sb[ si ] * fa, fg = sb[ si + 1 ] * fa, fb = sb[ si + 2 ] * fa;\n\t\t\t\tvar ba = tb[ ti + 3 ] * ( 1 / 255 ), br = tb[ ti ] * ba, bg = tb[ ti + 1 ] * ba, bb = tb[ ti + 2 ] * ba;\n\n\t\t\t\tvar ifa = 1 - fa, oa = fa + ba * ifa, ioa = ( oa == 0 ? 0 : 1 / oa );\n\t\t\t\ttb[ ti + 3 ] = 255 * oa;\n\t\t\t\ttb[ ti + 0 ] = ( fr + br * ifa ) * ioa;\n\t\t\t\ttb[ ti + 1 ] = ( fg + bg * ifa ) * ioa;\n\t\t\t\ttb[ ti + 2 ] = ( fb + bb * ifa ) * ioa;\n\n\t\t\t} else if ( mode == 2 ) {\t// copy only differences, otherwise zero\n\n\t\t\t\tvar fa = sb[ si + 3 ], fr = sb[ si ], fg = sb[ si + 1 ], fb = sb[ si + 2 ];\n\t\t\t\tvar ba = tb[ ti + 3 ], br = tb[ ti ], bg = tb[ ti + 1 ], bb = tb[ ti + 2 ];\n\t\t\t\tif ( fa == ba && fr == br && fg == bg && fb == bb ) {\n\n\t\t\t\t\ttb[ ti ] = 0; tb[ ti + 1 ] = 0; tb[ ti + 2 ] = 0; tb[ ti + 3 ] = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttb[ ti ] = fr; tb[ ti + 1 ] = fg; tb[ ti + 2 ] = fb; tb[ ti + 3 ] = fa;\n\n\t\t\t\t}\n\n\t\t\t} else if ( mode == 3 ) {\t// check if can be blended\n\n\t\t\t\tvar fa = sb[ si + 3 ], fr = sb[ si ], fg = sb[ si + 1 ], fb = sb[ si + 2 ];\n\t\t\t\tvar ba = tb[ ti + 3 ], br = tb[ ti ], bg = tb[ ti + 1 ], bb = tb[ ti + 2 ];\n\t\t\t\tif ( fa == ba && fr == br && fg == bg && fb == bb ) continue;\n\t\t\t\t//if(fa!=255 && ba!=0) return false;\n\t\t\t\tif ( fa < 220 && ba > 20 ) return false;\n\n\t\t\t}\n\n\t\t}\n\n\treturn true;\n\n};\n\nexport { RGBMLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tVector3\n} from 'three';\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\n\nclass STLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction isBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n\t\t\tconst n_faces = reader.getUint32( 80, true );\n\t\t\tconst expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// An ASCII STL data must begin with 'solid ' as the first six bytes.\n\t\t\t// However, ASCII STLs lacking the SPACE after the 'd' are known to be\n\t\t\t// plentiful. So, check the first 5 bytes for 'solid'.\n\n\t\t\t// Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n\t\t\t// https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n\t\t\t// Search for \"solid\" to start anywhere after those prefixes.\n\n\t\t\t// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n\t\t\tconst solid = [ 115, 111, 108, 105, 100 ];\n\n\t\t\tfor ( let off = 0; off < 5; off ++ ) {\n\n\t\t\t\t// If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n\t\t\t\tif ( matchDataViewAt( solid, reader, off ) ) return false;\n\n\t\t\t}\n\n\t\t\t// Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction matchDataViewAt( query, reader, offset ) {\n\n\t\t\t// Check if each byte in query matches the corresponding byte from the current offset\n\n\t\t\tfor ( let i = 0, il = query.length; i < il; i ++ ) {\n\n\t\t\t\tif ( query[ i ] !== reader.getUint8( offset + i ) ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst faces = reader.getUint32( 80, true );\n\n\t\t\tlet r, g, b, hasColors = false, colors;\n\t\t\tlet defaultR, defaultG, defaultB, alpha;\n\n\t\t\t// process STL header\n\t\t\t// check for default color in header (\"COLOR=rgba\" sequence).\n\n\t\t\tfor ( let index = 0; index < 80 - 10; index ++ ) {\n\n\t\t\t\tif ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n\t\t\t\t\thasColors = true;\n\t\t\t\t\tcolors = new Float32Array( faces * 3 * 3 );\n\n\t\t\t\t\tdefaultR = reader.getUint8( index + 6 ) / 255;\n\t\t\t\t\tdefaultG = reader.getUint8( index + 7 ) / 255;\n\t\t\t\t\tdefaultB = reader.getUint8( index + 8 ) / 255;\n\t\t\t\t\talpha = reader.getUint8( index + 9 ) / 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst dataOffset = 84;\n\t\t\tconst faceLength = 12 * 4 + 2;\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst vertices = new Float32Array( faces * 3 * 3 );\n\t\t\tconst normals = new Float32Array( faces * 3 * 3 );\n\n\t\t\tconst color = new Color();\n\n\t\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\t\tconst start = dataOffset + face * faceLength;\n\t\t\t\tconst normalX = reader.getFloat32( start, true );\n\t\t\t\tconst normalY = reader.getFloat32( start + 4, true );\n\t\t\t\tconst normalZ = reader.getFloat32( start + 8, true );\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tconst packedColor = reader.getUint16( start + 48, true );\n\n\t\t\t\t\tif ( ( packedColor & 0x8000 ) === 0 ) {\n\n\t\t\t\t\t\t// facet has its own unique color\n\n\t\t\t\t\t\tr = ( packedColor & 0x1F ) / 31;\n\t\t\t\t\t\tg = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n\t\t\t\t\t\tb = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tr = defaultR;\n\t\t\t\t\t\tg = defaultG;\n\t\t\t\t\t\tb = defaultB;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 1; i <= 3; i ++ ) {\n\n\t\t\t\t\tconst vertexstart = start + i * 12;\n\t\t\t\t\tconst componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );\n\n\t\t\t\t\tvertices[ componentIdx ] = reader.getFloat32( vertexstart, true );\n\t\t\t\t\tvertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );\n\t\t\t\t\tvertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );\n\n\t\t\t\t\tnormals[ componentIdx ] = normalX;\n\t\t\t\t\tnormals[ componentIdx + 1 ] = normalY;\n\t\t\t\t\tnormals[ componentIdx + 2 ] = normalZ;\n\n\t\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\t\tcolors[ componentIdx ] = color.r;\n\t\t\t\t\t\tcolors[ componentIdx + 1 ] = color.g;\n\t\t\t\t\t\tcolors[ componentIdx + 2 ] = color.b;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\t\t\t\tgeometry.hasColors = true;\n\t\t\t\tgeometry.alpha = alpha;\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst patternSolid = /solid([\\s\\S]*?)endsolid/g;\n\t\t\tconst patternFace = /facet([\\s\\S]*?)endfacet/g;\n\t\t\tconst patternName = /solid\\s(.+)/;\n\t\t\tlet faceCounter = 0;\n\n\t\t\tconst patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n\t\t\tconst patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n\t\t\tconst patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst groupNames = [];\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tlet result;\n\n\t\t\tlet groupCount = 0;\n\t\t\tlet startVertex = 0;\n\t\t\tlet endVertex = 0;\n\n\t\t\twhile ( ( result = patternSolid.exec( data ) ) !== null ) {\n\n\t\t\t\tstartVertex = endVertex;\n\n\t\t\t\tconst solid = result[ 0 ];\n\n\t\t\t\tconst name = ( result = patternName.exec( solid ) ) !== null ? result[ 1 ] : '';\n\t\t\t\tgroupNames.push( name );\n\n\t\t\t\twhile ( ( result = patternFace.exec( solid ) ) !== null ) {\n\n\t\t\t\t\tlet vertexCountPerFace = 0;\n\t\t\t\t\tlet normalCountPerFace = 0;\n\n\t\t\t\t\tconst text = result[ 0 ];\n\n\t\t\t\t\twhile ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tnormal.x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tnormal.y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tnormal.z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tnormalCountPerFace ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tvertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\t\t\tvertexCountPerFace ++;\n\t\t\t\t\t\tendVertex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// every face have to own ONE valid normal\n\n\t\t\t\t\tif ( normalCountPerFace !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// each face have to own THREE valid vertices\n\n\t\t\t\t\tif ( vertexCountPerFace !== 3 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCounter ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst start = startVertex;\n\t\t\t\tconst count = endVertex - startVertex;\n\n\t\t\t\tgeometry.userData.groupNames = groupNames;\n\n\t\t\t\tgeometry.addGroup( start, count, groupCount );\n\t\t\t\tgroupCount ++;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction ensureString( buffer ) {\n\n\t\t\tif ( typeof buffer !== 'string' ) {\n\n\t\t\t\treturn new TextDecoder().decode( buffer );\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction ensureBinary( buffer ) {\n\n\t\t\tif ( typeof buffer === 'string' ) {\n\n\t\t\t\tconst array_buffer = new Uint8Array( buffer.length );\n\t\t\t\tfor ( let i = 0; i < buffer.length; i ++ ) {\n\n\t\t\t\t\tarray_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n\t\t\t\t}\n\n\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t} else {\n\n\t\t\t\treturn buffer;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// start\n\n\t\tconst binData = ensureBinary( data );\n\n\t\treturn isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n\t}\n\n}\n\nexport { STLLoader };\n", "import {\n\tBox2,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tMatrix3,\n\tPath,\n\tShape,\n\tShapePath,\n\tShapeUtils,\n\tSRGBColorSpace,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst COLOR_SPACE_SVG = SRGBColorSpace;\n\nclass SVGLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t// Default dots per inch\n\t\tthis.defaultDPI = 90;\n\n\t\t// Accepted units: 'mm', 'cm', 'in', 'pt', 'pc', 'px'\n\t\tthis.defaultUnit = 'px';\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst scope = this;\n\n\t\tfunction parseNode( node, style ) {\n\n\t\t\tif ( node.nodeType !== 1 ) return;\n\n\t\t\tconst transform = getNodeTransform( node );\n\n\t\t\tlet isDefsNode = false;\n\n\t\t\tlet path = null;\n\n\t\t\tswitch ( node.nodeName ) {\n\n\t\t\t\tcase 'svg':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'style':\n\t\t\t\t\tparseCSSStylesheet( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'g':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'path':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tif ( node.hasAttribute( 'd' ) ) path = parsePathNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rect':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseRectNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'polygon':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parsePolygonNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'polyline':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parsePolylineNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'circle':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseCircleNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ellipse':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseEllipseNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'line':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseLineNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'defs':\n\t\t\t\t\tisDefsNode = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'use':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\n\t\t\t\t\tconst href = node.getAttributeNS( 'http://www.w3.org/1999/xlink', 'href' ) || '';\n\t\t\t\t\tconst usedNodeId = href.substring( 1 );\n\t\t\t\t\tconst usedNode = node.viewportElement.getElementById( usedNodeId );\n\t\t\t\t\tif ( usedNode ) {\n\n\t\t\t\t\t\tparseNode( usedNode, style );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'SVGLoader: \\'use node\\' references non-existent node id: ' + usedNodeId );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log( node );\n\n\t\t\t}\n\n\t\t\tif ( path ) {\n\n\t\t\t\tif ( style.fill !== undefined && style.fill !== 'none' ) {\n\n\t\t\t\t\tpath.color.setStyle( style.fill, COLOR_SPACE_SVG );\n\n\t\t\t\t}\n\n\t\t\t\ttransformPath( path, currentTransform );\n\n\t\t\t\tpaths.push( path );\n\n\t\t\t\tpath.userData = { node: node, style: style };\n\n\t\t\t}\n\n\t\t\tconst childNodes = node.childNodes;\n\n\t\t\tfor ( let i = 0; i < childNodes.length; i ++ ) {\n\n\t\t\t\tconst node = childNodes[ i ];\n\n\t\t\t\tif ( isDefsNode && node.nodeName !== 'style' && node.nodeName !== 'defs' ) {\n\n\t\t\t\t\t// Ignore everything in defs except CSS style definitions\n\t\t\t\t\t// and nested defs, because it is OK by the standard to have\n\t\t\t\t\t// \n\n`,c=`\n\n`,f=`\n\n\n\n\n`,p=`\n
\n`,l=`\n\n`,m=`\n\n`;return s+c+f+p+l+m}cr.createSyntaxDiagramsCode=Iu});var Fa=R(E=>{\"use strict\";Object.defineProperty(E,\"__esModule\",{value:!0});E.Parser=E.createSyntaxDiagramsCode=E.clearCache=E.GAstVisitor=E.serializeProduction=E.serializeGrammar=E.Terminal=E.Rule=E.RepetitionWithSeparator=E.RepetitionMandatoryWithSeparator=E.RepetitionMandatory=E.Repetition=E.Option=E.NonTerminal=E.Alternative=E.Alternation=E.defaultLexerErrorProvider=E.NoViableAltException=E.NotAllInputParsedException=E.MismatchedTokenException=E.isRecognitionException=E.EarlyExitException=E.defaultParserErrorProvider=E.tokenName=E.tokenMatcher=E.tokenLabel=E.EOF=E.createTokenInstance=E.createToken=E.LexerDefinitionErrorType=E.Lexer=E.EMPTY_ALT=E.ParserDefinitionErrorType=E.EmbeddedActionsParser=E.CstParser=E.VERSION=void 0;var ku=Er();Object.defineProperty(E,\"VERSION\",{enumerable:!0,get:function(){return ku.VERSION}});var lr=ce();Object.defineProperty(E,\"CstParser\",{enumerable:!0,get:function(){return lr.CstParser}});Object.defineProperty(E,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return lr.EmbeddedActionsParser}});Object.defineProperty(E,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return lr.ParserDefinitionErrorType}});Object.defineProperty(E,\"EMPTY_ALT\",{enumerable:!0,get:function(){return lr.EMPTY_ALT}});var Ma=ft();Object.defineProperty(E,\"Lexer\",{enumerable:!0,get:function(){return Ma.Lexer}});Object.defineProperty(E,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return Ma.LexerDefinitionErrorType}});var nt=Ue();Object.defineProperty(E,\"createToken\",{enumerable:!0,get:function(){return nt.createToken}});Object.defineProperty(E,\"createTokenInstance\",{enumerable:!0,get:function(){return nt.createTokenInstance}});Object.defineProperty(E,\"EOF\",{enumerable:!0,get:function(){return nt.EOF}});Object.defineProperty(E,\"tokenLabel\",{enumerable:!0,get:function(){return nt.tokenLabel}});Object.defineProperty(E,\"tokenMatcher\",{enumerable:!0,get:function(){return nt.tokenMatcher}});Object.defineProperty(E,\"tokenName\",{enumerable:!0,get:function(){return nt.tokenName}});var Pu=mt();Object.defineProperty(E,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Pu.defaultParserErrorProvider}});var Nt=et();Object.defineProperty(E,\"EarlyExitException\",{enumerable:!0,get:function(){return Nt.EarlyExitException}});Object.defineProperty(E,\"isRecognitionException\",{enumerable:!0,get:function(){return Nt.isRecognitionException}});Object.defineProperty(E,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Nt.MismatchedTokenException}});Object.defineProperty(E,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Nt.NotAllInputParsedException}});Object.defineProperty(E,\"NoViableAltException\",{enumerable:!0,get:function(){return Nt.NoViableAltException}});var Su=kr();Object.defineProperty(E,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return Su.defaultLexerErrorProvider}});var Se=ne();Object.defineProperty(E,\"Alternation\",{enumerable:!0,get:function(){return Se.Alternation}});Object.defineProperty(E,\"Alternative\",{enumerable:!0,get:function(){return Se.Alternative}});Object.defineProperty(E,\"NonTerminal\",{enumerable:!0,get:function(){return Se.NonTerminal}});Object.defineProperty(E,\"Option\",{enumerable:!0,get:function(){return Se.Option}});Object.defineProperty(E,\"Repetition\",{enumerable:!0,get:function(){return Se.Repetition}});Object.defineProperty(E,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Se.RepetitionMandatory}});Object.defineProperty(E,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Se.RepetitionMandatoryWithSeparator}});Object.defineProperty(E,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Se.RepetitionWithSeparator}});Object.defineProperty(E,\"Rule\",{enumerable:!0,get:function(){return Se.Rule}});Object.defineProperty(E,\"Terminal\",{enumerable:!0,get:function(){return Se.Terminal}});var ba=ne();Object.defineProperty(E,\"serializeGrammar\",{enumerable:!0,get:function(){return ba.serializeGrammar}});Object.defineProperty(E,\"serializeProduction\",{enumerable:!0,get:function(){return ba.serializeProduction}});var xu=$e();Object.defineProperty(E,\"GAstVisitor\",{enumerable:!0,get:function(){return xu.GAstVisitor}});function Cu(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}E.clearCache=Cu;var Lu=La();Object.defineProperty(E,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return Lu.createSyntaxDiagramsCode}});var Mu=function(){function t(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return t}();E.Parser=Mu});export default Fa();\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tConeGeometry,\n\tCylinderGeometry,\n\tDataTexture,\n\tDoubleSide,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tLoaderUtils,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhongMaterial,\n\tObject3D,\n\tPoints,\n\tPointsMaterial,\n\tQuaternion,\n\tRepeatWrapping,\n\tScene,\n\tShapeUtils,\n\tSphereGeometry,\n\tSRGBColorSpace,\n\tTextureLoader,\n\tVector2,\n\tVector3\n} from 'three';\nimport chevrotain from '../libs/chevrotain.module.min.js';\n\n\nclass VRMLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data, path ) {\n\n\t\tconst nodeMap = {};\n\n\t\tfunction generateVRMLTree( data ) {\n\n\t\t\t// create lexer, parser and visitor\n\n\t\t\tconst tokenData = createTokens();\n\n\t\t\tconst lexer = new VRMLLexer( tokenData.tokens );\n\t\t\tconst parser = new VRMLParser( tokenData.tokenVocabulary );\n\t\t\tconst visitor = createVisitor( parser.getBaseCstVisitorConstructor() );\n\n\t\t\t// lexing\n\n\t\t\tconst lexingResult = lexer.lex( data );\n\t\t\tparser.input = lexingResult.tokens;\n\n\t\t\t// parsing\n\n\t\t\tconst cstOutput = parser.vrml();\n\n\t\t\tif ( parser.errors.length > 0 ) {\n\n\t\t\t\tconsole.error( parser.errors );\n\n\t\t\t\tthrow Error( 'THREE.VRMLLoader: Parsing errors detected.' );\n\n\t\t\t}\n\n\t\t\t// actions\n\n\t\t\tconst ast = visitor.visit( cstOutput );\n\n\t\t\treturn ast;\n\n\t\t}\n\n\t\tfunction createTokens() {\n\n\t\t\tconst createToken = chevrotain.createToken;\n\n\t\t\t// from http://gun.teipir.gr/VRML-amgem/spec/part1/concepts.html#SyntaxBasics\n\n\t\t\tconst RouteIdentifier = createToken( { name: 'RouteIdentifier', pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*[\\.][^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*/ } );\n\t\t\tconst Identifier = createToken( { name: 'Identifier', pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]([^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d])*/, longer_alt: RouteIdentifier } );\n\n\t\t\t// from http://gun.teipir.gr/VRML-amgem/spec/part1/nodesRef.html\n\n\t\t\tconst nodeTypes = [\n\t\t\t\t'Anchor', 'Billboard', 'Collision', 'Group', 'Transform', // grouping nodes\n\t\t\t\t'Inline', 'LOD', 'Switch', // special groups\n\t\t\t\t'AudioClip', 'DirectionalLight', 'PointLight', 'Script', 'Shape', 'Sound', 'SpotLight', 'WorldInfo', // common nodes\n\t\t\t\t'CylinderSensor', 'PlaneSensor', 'ProximitySensor', 'SphereSensor', 'TimeSensor', 'TouchSensor', 'VisibilitySensor', // sensors\n\t\t\t\t'Box', 'Cone', 'Cylinder', 'ElevationGrid', 'Extrusion', 'IndexedFaceSet', 'IndexedLineSet', 'PointSet', 'Sphere', // geometries\n\t\t\t\t'Color', 'Coordinate', 'Normal', 'TextureCoordinate', // geometric properties\n\t\t\t\t'Appearance', 'FontStyle', 'ImageTexture', 'Material', 'MovieTexture', 'PixelTexture', 'TextureTransform', // appearance\n\t\t\t\t'ColorInterpolator', 'CoordinateInterpolator', 'NormalInterpolator', 'OrientationInterpolator', 'PositionInterpolator', 'ScalarInterpolator', // interpolators\n\t\t\t\t'Background', 'Fog', 'NavigationInfo', 'Viewpoint', // bindable nodes\n\t\t\t\t'Text' // Text must be placed at the end of the regex so there are no matches for TextureTransform and TextureCoordinate\n\t\t\t];\n\n\t\t\t//\n\n\t\t\tconst Version = createToken( {\n\t\t\t\tname: 'Version',\n\t\t\t\tpattern: /#VRML.*/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst NodeName = createToken( {\n\t\t\t\tname: 'NodeName',\n\t\t\t\tpattern: new RegExp( nodeTypes.join( '|' ) ),\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst DEF = createToken( {\n\t\t\t\tname: 'DEF',\n\t\t\t\tpattern: /DEF/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst USE = createToken( {\n\t\t\t\tname: 'USE',\n\t\t\t\tpattern: /USE/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst ROUTE = createToken( {\n\t\t\t\tname: 'ROUTE',\n\t\t\t\tpattern: /ROUTE/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst TO = createToken( {\n\t\t\t\tname: 'TO',\n\t\t\t\tpattern: /TO/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\t//\n\n\t\t\tconst StringLiteral = createToken( { name: 'StringLiteral', pattern: /\"(?:[^\\\\\"\\n\\r]|\\\\[bfnrtv\"\\\\/]|\\\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*\"/ } );\n\t\t\tconst HexLiteral = createToken( { name: 'HexLiteral', pattern: /0[xX][0-9a-fA-F]+/ } );\n\t\t\tconst NumberLiteral = createToken( { name: 'NumberLiteral', pattern: /[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?/ } );\n\t\t\tconst TrueLiteral = createToken( { name: 'TrueLiteral', pattern: /TRUE/ } );\n\t\t\tconst FalseLiteral = createToken( { name: 'FalseLiteral', pattern: /FALSE/ } );\n\t\t\tconst NullLiteral = createToken( { name: 'NullLiteral', pattern: /NULL/ } );\n\t\t\tconst LSquare = createToken( { name: 'LSquare', pattern: /\\[/ } );\n\t\t\tconst RSquare = createToken( { name: 'RSquare', pattern: /]/ } );\n\t\t\tconst LCurly = createToken( { name: 'LCurly', pattern: /{/ } );\n\t\t\tconst RCurly = createToken( { name: 'RCurly', pattern: /}/ } );\n\t\t\tconst Comment = createToken( {\n\t\t\t\tname: 'Comment',\n\t\t\t\tpattern: /#.*/,\n\t\t\t\tgroup: chevrotain.Lexer.SKIPPED\n\t\t\t} );\n\n\t\t\t// commas, blanks, tabs, newlines and carriage returns are whitespace characters wherever they appear outside of string fields\n\n\t\t\tconst WhiteSpace = createToken( {\n\t\t\t\tname: 'WhiteSpace',\n\t\t\t\tpattern: /[ ,\\s]/,\n\t\t\t\tgroup: chevrotain.Lexer.SKIPPED\n\t\t\t} );\n\n\t\t\tconst tokens = [\n\t\t\t\tWhiteSpace,\n\t\t\t\t// keywords appear before the Identifier\n\t\t\t\tNodeName,\n\t\t\t\tDEF,\n\t\t\t\tUSE,\n\t\t\t\tROUTE,\n\t\t\t\tTO,\n\t\t\t\tTrueLiteral,\n\t\t\t\tFalseLiteral,\n\t\t\t\tNullLiteral,\n\t\t\t\t// the Identifier must appear after the keywords because all keywords are valid identifiers\n\t\t\t\tVersion,\n\t\t\t\tIdentifier,\n\t\t\t\tRouteIdentifier,\n\t\t\t\tStringLiteral,\n\t\t\t\tHexLiteral,\n\t\t\t\tNumberLiteral,\n\t\t\t\tLSquare,\n\t\t\t\tRSquare,\n\t\t\t\tLCurly,\n\t\t\t\tRCurly,\n\t\t\t\tComment\n\t\t\t];\n\n\t\t\tconst tokenVocabulary = {};\n\n\t\t\tfor ( let i = 0, l = tokens.length; i < l; i ++ ) {\n\n\t\t\t\tconst token = tokens[ i ];\n\n\t\t\t\ttokenVocabulary[ token.name ] = token;\n\n\t\t\t}\n\n\t\t\treturn { tokens: tokens, tokenVocabulary: tokenVocabulary };\n\n\t\t}\n\n\n\t\tfunction createVisitor( BaseVRMLVisitor ) {\n\n\t\t\t// the visitor is created dynmaically based on the given base class\n\n\t\t\tclass VRMLToASTVisitor extends BaseVRMLVisitor {\n\n\t\t\t\tconstructor() {\n\n\t\t\t\t\tsuper();\n\n\t\t\t\t\tthis.validateVisitor();\n\n\t\t\t\t}\n\n\t\t\t\tvrml( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tversion: this.visit( ctx.version ),\n\t\t\t\t\t\tnodes: [],\n\t\t\t\t\t\troutes: []\n\t\t\t\t\t};\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.node.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst node = ctx.node[ i ];\n\n\t\t\t\t\t\tdata.nodes.push( this.visit( node ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.route ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = ctx.route.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst route = ctx.route[ i ];\n\n\t\t\t\t\t\t\tdata.routes.push( this.visit( route ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t\tversion( ctx ) {\n\n\t\t\t\t\treturn ctx.Version[ 0 ].image;\n\n\t\t\t\t}\n\n\t\t\t\tnode( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tname: ctx.NodeName[ 0 ].image,\n\t\t\t\t\t\tfields: []\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( ctx.field ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = ctx.field.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst field = ctx.field[ i ];\n\n\t\t\t\t\t\t\tdata.fields.push( this.visit( field ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// DEF\n\n\t\t\t\t\tif ( ctx.def ) {\n\n\t\t\t\t\t\tdata.DEF = this.visit( ctx.def[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t\tfield( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tname: ctx.Identifier[ 0 ].image,\n\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\tvalues: null\n\t\t\t\t\t};\n\n\t\t\t\t\tlet result;\n\n\t\t\t\t\t// SFValue\n\n\t\t\t\t\tif ( ctx.singleFieldValue ) {\n\n\t\t\t\t\t\tresult = this.visit( ctx.singleFieldValue[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// MFValue\n\n\t\t\t\t\tif ( ctx.multiFieldValue ) {\n\n\t\t\t\t\t\tresult = this.visit( ctx.multiFieldValue[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdata.type = result.type;\n\t\t\t\t\tdata.values = result.values;\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t\tdef( ctx ) {\n\n\t\t\t\t\treturn ( ctx.Identifier || ctx.NodeName )[ 0 ].image;\n\n\t\t\t\t}\n\n\t\t\t\tuse( ctx ) {\n\n\t\t\t\t\treturn { USE: ( ctx.Identifier || ctx.NodeName )[ 0 ].image };\n\n\t\t\t\t}\n\n\t\t\t\tsingleFieldValue( ctx ) {\n\n\t\t\t\t\treturn processField( this, ctx );\n\n\t\t\t\t}\n\n\t\t\t\tmultiFieldValue( ctx ) {\n\n\t\t\t\t\treturn processField( this, ctx );\n\n\t\t\t\t}\n\n\t\t\t\troute( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tFROM: ctx.RouteIdentifier[ 0 ].image,\n\t\t\t\t\t\tTO: ctx.RouteIdentifier[ 1 ].image\n\t\t\t\t\t};\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction processField( scope, ctx ) {\n\n\t\t\t\tconst field = {\n\t\t\t\t\ttype: null,\n\t\t\t\t\tvalues: []\n\t\t\t\t};\n\n\t\t\t\tif ( ctx.node ) {\n\n\t\t\t\t\tfield.type = 'node';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.node.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst node = ctx.node[ i ];\n\n\t\t\t\t\t\tfield.values.push( scope.visit( node ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.use ) {\n\n\t\t\t\t\tfield.type = 'use';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.use.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst use = ctx.use[ i ];\n\n\t\t\t\t\t\tfield.values.push( scope.visit( use ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.StringLiteral ) {\n\n\t\t\t\t\tfield.type = 'string';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.StringLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst stringLiteral = ctx.StringLiteral[ i ];\n\n\t\t\t\t\t\tfield.values.push( stringLiteral.image.replace( /'|\"/g, '' ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.NumberLiteral ) {\n\n\t\t\t\t\tfield.type = 'number';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.NumberLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst numberLiteral = ctx.NumberLiteral[ i ];\n\n\t\t\t\t\t\tfield.values.push( parseFloat( numberLiteral.image ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.HexLiteral ) {\n\n\t\t\t\t\tfield.type = 'hex';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.HexLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst hexLiteral = ctx.HexLiteral[ i ];\n\n\t\t\t\t\t\tfield.values.push( hexLiteral.image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.TrueLiteral ) {\n\n\t\t\t\t\tfield.type = 'boolean';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.TrueLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst trueLiteral = ctx.TrueLiteral[ i ];\n\n\t\t\t\t\t\tif ( trueLiteral.image === 'TRUE' ) field.values.push( true );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.FalseLiteral ) {\n\n\t\t\t\t\tfield.type = 'boolean';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.FalseLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst falseLiteral = ctx.FalseLiteral[ i ];\n\n\t\t\t\t\t\tif ( falseLiteral.image === 'FALSE' ) field.values.push( false );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.NullLiteral ) {\n\n\t\t\t\t\tfield.type = 'null';\n\n\t\t\t\t\tctx.NullLiteral.forEach( function () {\n\n\t\t\t\t\t\tfield.values.push( null );\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\treturn field;\n\n\t\t\t}\n\n\t\t\treturn new VRMLToASTVisitor();\n\n\t\t}\n\n\t\tfunction parseTree( tree ) {\n\n\t\t\t// console.log( JSON.stringify( tree, null, 2 ) );\n\n\t\t\tconst nodes = tree.nodes;\n\t\t\tconst scene = new Scene();\n\n\t\t\t// first iteration: build nodemap based on DEF statements\n\n\t\t\tfor ( let i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\n\t\t\t\tbuildNodeMap( node );\n\n\t\t\t}\n\n\t\t\t// second iteration: build nodes\n\n\t\t\tfor ( let i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst object = getNode( node );\n\n\t\t\t\tif ( object instanceof Object3D ) scene.add( object );\n\n\t\t\t\tif ( node.name === 'WorldInfo' ) scene.userData.worldInfo = object;\n\n\t\t\t}\n\n\t\t\treturn scene;\n\n\t\t}\n\n\t\tfunction buildNodeMap( node ) {\n\n\t\t\tif ( node.DEF ) {\n\n\t\t\t\tnodeMap[ node.DEF ] = node;\n\n\t\t\t}\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\n\t\t\t\tif ( field.type === 'node' ) {\n\n\t\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\t\tfor ( let j = 0, jl = fieldValues.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tbuildNodeMap( fieldValues[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tfunction getNode( node ) {\n\n\t\t\t// handle case where a node refers to a different one\n\n\t\t\tif ( node.USE ) {\n\n\t\t\t\treturn resolveUSE( node.USE );\n\n\t\t\t}\n\n\t\t\tif ( node.build !== undefined ) return node.build;\n\n\t\t\tnode.build = buildNode( node );\n\n\t\t\treturn node.build;\n\n\t\t}\n\n\t\t// node builder\n\n\t\tfunction buildNode( node ) {\n\n\t\t\tconst nodeName = node.name;\n\t\t\tlet build;\n\n\t\t\tswitch ( nodeName ) {\n\n\t\t\t\tcase 'Anchor':\n\t\t\t\tcase 'Group':\n\t\t\t\tcase 'Transform':\n\t\t\t\tcase 'Collision':\n\t\t\t\t\tbuild = buildGroupingNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Background':\n\t\t\t\t\tbuild = buildBackgroundNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Shape':\n\t\t\t\t\tbuild = buildShapeNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Appearance':\n\t\t\t\t\tbuild = buildAppearanceNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Material':\n\t\t\t\t\tbuild = buildMaterialNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ImageTexture':\n\t\t\t\t\tbuild = buildImageTextureNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PixelTexture':\n\t\t\t\t\tbuild = buildPixelTextureNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'TextureTransform':\n\t\t\t\t\tbuild = buildTextureTransformNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'IndexedFaceSet':\n\t\t\t\t\tbuild = buildIndexedFaceSetNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'IndexedLineSet':\n\t\t\t\t\tbuild = buildIndexedLineSetNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointSet':\n\t\t\t\t\tbuild = buildPointSetNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Box':\n\t\t\t\t\tbuild = buildBoxNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Cone':\n\t\t\t\t\tbuild = buildConeNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Cylinder':\n\t\t\t\t\tbuild = buildCylinderNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Sphere':\n\t\t\t\t\tbuild = buildSphereNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ElevationGrid':\n\t\t\t\t\tbuild = buildElevationGridNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Extrusion':\n\t\t\t\t\tbuild = buildExtrusionNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Color':\n\t\t\t\tcase 'Coordinate':\n\t\t\t\tcase 'Normal':\n\t\t\t\tcase 'TextureCoordinate':\n\t\t\t\t\tbuild = buildGeometricNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WorldInfo':\n\t\t\t\t\tbuild = buildWorldInfoNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Billboard':\n\n\t\t\t\tcase 'Inline':\n\t\t\t\tcase 'LOD':\n\t\t\t\tcase 'Switch':\n\n\t\t\t\tcase 'AudioClip':\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\tcase 'PointLight':\n\t\t\t\tcase 'Script':\n\t\t\t\tcase 'Sound':\n\t\t\t\tcase 'SpotLight':\n\n\t\t\t\tcase 'CylinderSensor':\n\t\t\t\tcase 'PlaneSensor':\n\t\t\t\tcase 'ProximitySensor':\n\t\t\t\tcase 'SphereSensor':\n\t\t\t\tcase 'TimeSensor':\n\t\t\t\tcase 'TouchSensor':\n\t\t\t\tcase 'VisibilitySensor':\n\n\t\t\t\tcase 'Text':\n\n\t\t\t\tcase 'FontStyle':\n\t\t\t\tcase 'MovieTexture':\n\n\t\t\t\tcase 'ColorInterpolator':\n\t\t\t\tcase 'CoordinateInterpolator':\n\t\t\t\tcase 'NormalInterpolator':\n\t\t\t\tcase 'OrientationInterpolator':\n\t\t\t\tcase 'PositionInterpolator':\n\t\t\t\tcase 'ScalarInterpolator':\n\n\t\t\t\tcase 'Fog':\n\t\t\t\tcase 'NavigationInfo':\n\t\t\t\tcase 'Viewpoint':\n\t\t\t\t\t// node not supported yet\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown node:', nodeName );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( build !== undefined && node.DEF !== undefined && build.hasOwnProperty( 'name' ) === true ) {\n\n\t\t\t\tbuild.name = node.DEF;\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGroupingNode( node ) {\n\n\t\t\tconst object = new Group();\n\n\t\t\t//\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'bboxCenter':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bboxSize':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'center':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'children':\n\t\t\t\t\t\tparseFieldChildren( fieldValues, object );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'description':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'collide':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'parameter':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotation':\n\t\t\t\t\t\tconst axis = new Vector3( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] ).normalize();\n\t\t\t\t\t\tconst angle = fieldValues[ 3 ];\n\t\t\t\t\t\tobject.quaternion.setFromAxisAngle( axis, angle );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tobject.scale.set( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scaleOrientation':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translation':\n\t\t\t\t\t\tobject.position.set( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'proxy':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'url':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tfunction buildBackgroundNode( node ) {\n\n\t\t\tconst group = new Group();\n\n\t\t\tlet groundAngle, groundColor;\n\t\t\tlet skyAngle, skyColor;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'groundAngle':\n\t\t\t\t\t\tgroundAngle = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'groundColor':\n\t\t\t\t\t\tgroundColor = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'backUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bottomUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'frontUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'leftUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rightUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'topUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skyAngle':\n\t\t\t\t\t\tskyAngle = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skyColor':\n\t\t\t\t\t\tskyColor = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst radius = 10000;\n\n\t\t\t// sky\n\n\t\t\tif ( skyColor ) {\n\n\t\t\t\tconst skyGeometry = new SphereGeometry( radius, 32, 16 );\n\t\t\t\tconst skyMaterial = new MeshBasicMaterial( { fog: false, side: BackSide, depthWrite: false, depthTest: false } );\n\n\t\t\t\tif ( skyColor.length > 3 ) {\n\n\t\t\t\t\tpaintFaces( skyGeometry, radius, skyAngle, toColorArray( skyColor ), true );\n\t\t\t\t\tskyMaterial.vertexColors = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tskyMaterial.color.setRGB( skyColor[ 0 ], skyColor[ 1 ], skyColor[ 2 ] );\n\t\t\t\t\tskyMaterial.color.convertSRGBToLinear();\n\n\t\t\t\t}\n\n\t\t\t\tconst sky = new Mesh( skyGeometry, skyMaterial );\n\t\t\t\tgroup.add( sky );\n\n\t\t\t}\n\n\t\t\t// ground\n\n\t\t\tif ( groundColor ) {\n\n\t\t\t\tif ( groundColor.length > 0 ) {\n\n\t\t\t\t\tconst groundGeometry = new SphereGeometry( radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI );\n\t\t\t\t\tconst groundMaterial = new MeshBasicMaterial( { fog: false, side: BackSide, vertexColors: true, depthWrite: false, depthTest: false } );\n\n\t\t\t\t\tpaintFaces( groundGeometry, radius, groundAngle, toColorArray( groundColor ), false );\n\n\t\t\t\t\tconst ground = new Mesh( groundGeometry, groundMaterial );\n\t\t\t\t\tgroup.add( ground );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// render background group first\n\n\t\t\tgroup.renderOrder = - Infinity;\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction buildShapeNode( node ) {\n\n\t\t\tconst fields = node.fields;\n\n\t\t\t// if the appearance field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)\n\n\t\t\tlet material = new MeshBasicMaterial( {\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tcolor: 0x000000\n\t\t\t} );\n\t\t\tlet geometry;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'appearance':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\tmaterial = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'geometry':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\tgeometry = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build 3D object\n\n\t\t\tlet object;\n\n\t\t\tif ( geometry && geometry.attributes.position ) {\n\n\t\t\t\tconst type = geometry._type;\n\n\t\t\t\tif ( type === 'points' ) { // points\n\n\t\t\t\t\tconst pointsMaterial = new PointsMaterial( {\n\t\t\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\t\t\tcolor: 0xffffff,\n\t\t\t\t\t\topacity: material.opacity,\n\t\t\t\t\t\ttransparent: material.transparent\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\tpointsMaterial.vertexColors = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the color field is NULL and there is a material defined for the appearance affecting this PointSet, then use the emissiveColor of the material to draw the points\n\n\t\t\t\t\t\tif ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\t\t\tpointsMaterial.color.copy( material.emissive );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = new Points( geometry, pointsMaterial );\n\n\t\t\t\t} else if ( type === 'line' ) { // lines\n\n\t\t\t\t\tconst lineMaterial = new LineBasicMaterial( {\n\t\t\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\t\t\tcolor: 0xffffff,\n\t\t\t\t\t\topacity: material.opacity,\n\t\t\t\t\t\ttransparent: material.transparent\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\tlineMaterial.vertexColors = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the color field is NULL and there is a material defined for the appearance affecting this IndexedLineSet, then use the emissiveColor of the material to draw the lines\n\n\t\t\t\t\t\tif ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\t\t\tlineMaterial.color.copy( material.emissive );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = new LineSegments( geometry, lineMaterial );\n\n\t\t\t\t} else { // consider meshes\n\n\t\t\t\t\t// check \"solid\" hint (it's placed in the geometry but affects the material)\n\n\t\t\t\t\tif ( geometry._solid !== undefined ) {\n\n\t\t\t\t\t\tmaterial.side = ( geometry._solid ) ? FrontSide : DoubleSide;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// check for vertex colors\n\n\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tobject = new Object3D();\n\n\t\t\t\t// if the geometry field is NULL or no vertices are defined the object is not drawn\n\n\t\t\t\tobject.visible = false;\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tfunction buildAppearanceNode( node ) {\n\n\t\t\tlet material = new MeshPhongMaterial();\n\t\t\tlet transformData;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'material':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\tconst materialData = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t\tif ( materialData.diffuseColor ) material.color.copy( materialData.diffuseColor );\n\t\t\t\t\t\t\tif ( materialData.emissiveColor ) material.emissive.copy( materialData.emissiveColor );\n\t\t\t\t\t\t\tif ( materialData.shininess ) material.shininess = materialData.shininess;\n\t\t\t\t\t\t\tif ( materialData.specularColor ) material.specular.copy( materialData.specularColor );\n\t\t\t\t\t\t\tif ( materialData.transparency ) material.opacity = 1 - materialData.transparency;\n\t\t\t\t\t\t\tif ( materialData.transparency > 0 ) material.transparent = true;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the material field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)\n\n\t\t\t\t\t\t\tmaterial = new MeshBasicMaterial( {\n\t\t\t\t\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\t\t\t\t\tcolor: 0x000000\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tconst textureNode = fieldValues[ 0 ];\n\t\t\t\t\t\tif ( textureNode !== null ) {\n\n\t\t\t\t\t\t\tif ( textureNode.name === 'ImageTexture' || textureNode.name === 'PixelTexture' ) {\n\n\t\t\t\t\t\t\t\tmaterial.map = getNode( textureNode );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// MovieTexture not supported yet\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'textureTransform':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\ttransformData = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// only apply texture transform data if a texture was defined\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\t// respect VRML lighting model\n\n\t\t\t\tif ( material.map.__type ) {\n\n\t\t\t\t\tswitch ( material.map.__type ) {\n\n\t\t\t\t\t\tcase TEXTURE_TYPE.INTENSITY_ALPHA:\n\t\t\t\t\t\t\tmaterial.opacity = 1; // ignore transparency\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TEXTURE_TYPE.RGB:\n\t\t\t\t\t\t\tmaterial.color.set( 0xffffff ); // ignore material color\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TEXTURE_TYPE.RGBA:\n\t\t\t\t\t\t\tmaterial.color.set( 0xffffff ); // ignore material color\n\t\t\t\t\t\t\tmaterial.opacity = 1; // ignore transparency\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete material.map.__type;\n\n\t\t\t\t}\n\n\t\t\t\t// apply texture transform\n\n\t\t\t\tif ( transformData ) {\n\n\t\t\t\t\tmaterial.map.center.copy( transformData.center );\n\t\t\t\t\tmaterial.map.rotation = transformData.rotation;\n\t\t\t\t\tmaterial.map.repeat.copy( transformData.scale );\n\t\t\t\t\tmaterial.map.offset.copy( transformData.translation );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction buildMaterialNode( node ) {\n\n\t\t\tconst materialData = {};\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'ambientIntensity':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'diffuseColor':\n\t\t\t\t\t\tmaterialData.diffuseColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tmaterialData.diffuseColor.convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'emissiveColor':\n\t\t\t\t\t\tmaterialData.emissiveColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tmaterialData.emissiveColor.convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\t\tmaterialData.shininess = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'specularColor':\n\t\t\t\t\t\tmaterialData.specularColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tmaterialData.specularColor.convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tmaterialData.transparency = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materialData;\n\n\t\t}\n\n\t\tfunction parseHexColor( hex, textureType, color ) {\n\n\t\t\tlet value;\n\n\t\t\tswitch ( textureType ) {\n\n\t\t\t\tcase TEXTURE_TYPE.INTENSITY:\n\t\t\t\t\t// Intensity texture: A one-component image specifies one-byte hexadecimal or integer values representing the intensity of the image\n\t\t\t\t\tvalue = parseInt( hex );\n\t\t\t\t\tcolor.r = value;\n\t\t\t\t\tcolor.g = value;\n\t\t\t\t\tcolor.b = value;\n\t\t\t\t\tcolor.a = 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TEXTURE_TYPE.INTENSITY_ALPHA:\n\t\t\t\t\t// Intensity+Alpha texture: A two-component image specifies the intensity in the first (high) byte and the alpha opacity in the second (low) byte.\n\t\t\t\t\tvalue = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\tcolor.r = value;\n\t\t\t\t\tcolor.g = value;\n\t\t\t\t\tcolor.b = value;\n\t\t\t\t\tcolor.a = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TEXTURE_TYPE.RGB:\n\t\t\t\t\t// RGB texture: Pixels in a three-component image specify the red component in the first (high) byte, followed by the green and blue components\n\t\t\t\t\tcolor.r = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\tcolor.g = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\tcolor.b = parseInt( '0x' + hex.substring( 6, 8 ) );\n\t\t\t\t\tcolor.a = 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TEXTURE_TYPE.RGBA:\n\t\t\t\t\t// RGBA texture: Four-component images specify the alpha opacity byte after red/green/blue\n\t\t\t\t\tcolor.r = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\tcolor.g = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\tcolor.b = parseInt( '0x' + hex.substring( 6, 8 ) );\n\t\t\t\t\tcolor.a = parseInt( '0x' + hex.substring( 8, 10 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getTextureType( num_components ) {\n\n\t\t\tlet type;\n\n\t\t\tswitch ( num_components ) {\n\n\t\t\t\tcase 1:\n\t\t\t\t\ttype = TEXTURE_TYPE.INTENSITY;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\ttype = TEXTURE_TYPE.INTENSITY_ALPHA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3:\n\t\t\t\t\ttype = TEXTURE_TYPE.RGB;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 4:\n\t\t\t\t\ttype = TEXTURE_TYPE.RGBA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t}\n\n\t\t\treturn type;\n\n\t\t}\n\n\t\tfunction buildPixelTextureNode( node ) {\n\n\t\t\tlet texture;\n\t\t\tlet wrapS = RepeatWrapping;\n\t\t\tlet wrapT = RepeatWrapping;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'image':\n\t\t\t\t\t\tconst width = fieldValues[ 0 ];\n\t\t\t\t\t\tconst height = fieldValues[ 1 ];\n\t\t\t\t\t\tconst num_components = fieldValues[ 2 ];\n\n\t\t\t\t\t\tconst textureType = getTextureType( num_components );\n\n\t\t\t\t\t\tconst data = new Uint8Array( 4 * width * height );\n\n\t\t\t\t\t\tconst color = { r: 0, g: 0, b: 0, a: 0 };\n\n\t\t\t\t\t\tfor ( let j = 3, k = 0, jl = fieldValues.length; j < jl; j ++, k ++ ) {\n\n\t\t\t\t\t\t\tparseHexColor( fieldValues[ j ], textureType, color );\n\n\t\t\t\t\t\t\tconst stride = k * 4;\n\n\t\t\t\t\t\t\tdata[ stride + 0 ] = color.r;\n\t\t\t\t\t\t\tdata[ stride + 1 ] = color.g;\n\t\t\t\t\t\t\tdata[ stride + 2 ] = color.b;\n\t\t\t\t\t\t\tdata[ stride + 3 ] = color.a;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttexture = new DataTexture( data, width, height );\n\t\t\t\t\t\ttexture.colorSpace = SRGBColorSpace;\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\t\ttexture.__type = textureType; // needed for material modifications\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatS':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatT':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture ) {\n\n\t\t\t\ttexture.wrapS = wrapS;\n\t\t\t\ttexture.wrapT = wrapT;\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tfunction buildImageTextureNode( node ) {\n\n\t\t\tlet texture;\n\t\t\tlet wrapS = RepeatWrapping;\n\t\t\tlet wrapT = RepeatWrapping;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'url':\n\t\t\t\t\t\tconst url = fieldValues[ 0 ];\n\t\t\t\t\t\tif ( url ) texture = textureLoader.load( url );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatS':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatT':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture ) {\n\n\t\t\t\ttexture.wrapS = wrapS;\n\t\t\t\ttexture.wrapT = wrapT;\n\t\t\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tfunction buildTextureTransformNode( node ) {\n\n\t\t\tconst transformData = {\n\t\t\t\tcenter: new Vector2(),\n\t\t\t\trotation: new Vector2(),\n\t\t\t\tscale: new Vector2(),\n\t\t\t\ttranslation: new Vector2()\n\t\t\t};\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'center':\n\t\t\t\t\t\ttransformData.center.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotation':\n\t\t\t\t\t\ttransformData.rotation = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\ttransformData.scale.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translation':\n\t\t\t\t\t\ttransformData.translation.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn transformData;\n\n\t\t}\n\n\t\tfunction buildGeometricNode( node ) {\n\n\t\t\treturn node.fields[ 0 ].values;\n\n\t\t}\n\n\t\tfunction buildWorldInfoNode( node ) {\n\n\t\t\tconst worldInfo = {};\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'title':\n\t\t\t\t\t\tworldInfo.title = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'info':\n\t\t\t\t\t\tworldInfo.info = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn worldInfo;\n\n\t\t}\n\n\t\tfunction buildIndexedFaceSetNode( node ) {\n\n\t\t\tlet color, coord, normal, texCoord;\n\t\t\tlet ccw = true, solid = true, creaseAngle = 0;\n\t\t\tlet colorIndex, coordIndex, normalIndex, texCoordIndex;\n\t\t\tlet colorPerVertex = true, normalPerVertex = true;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\tconst coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normal':\n\t\t\t\t\t\tconst normalNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( normalNode !== null ) {\n\n\t\t\t\t\t\t\tnormal = getNode( normalNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texCoord':\n\t\t\t\t\t\tconst texCoordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( texCoordNode !== null ) {\n\n\t\t\t\t\t\t\ttexCoord = getNode( texCoordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorIndex':\n\t\t\t\t\t\tcolorIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'convex':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coordIndex':\n\t\t\t\t\t\tcoordIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normalIndex':\n\t\t\t\t\t\tnormalIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normalPerVertex':\n\t\t\t\t\t\tnormalPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texCoordIndex':\n\t\t\t\t\t\ttexCoordIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( coordIndex === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Missing coordIndex.' );\n\n\t\t\t\treturn new BufferGeometry(); // handle VRML files with incomplete geometry definition\n\n\t\t\t}\n\n\t\t\tconst triangulatedCoordIndex = triangulateFaceIndex( coordIndex, ccw );\n\n\t\t\tlet colorAttribute;\n\t\t\tlet normalAttribute;\n\t\t\tlet uvAttribute;\n\n\t\t\tif ( color ) {\n\n\t\t\t\tif ( colorPerVertex === true ) {\n\n\t\t\t\t\tif ( colorIndex && colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then it is used to choose colors for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\t\tconst triangulatedColorIndex = triangulateFaceIndex( colorIndex, ccw );\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedColorIndex, color, 3 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node\n\n\t\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( color, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( colorIndex && colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then they are used to choose one color for each face of the IndexedFaceSet\n\n\t\t\t\t\t\tconst flattenFaceColors = flattenData( color, colorIndex );\n\t\t\t\t\t\tconst triangulatedFaceColors = triangulateFaceData( flattenFaceColors, coordIndex );\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceColors );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the color are applied to each face of the IndexedFaceSet in order\n\n\t\t\t\t\t\tconst triangulatedFaceColors = triangulateFaceData( color, coordIndex );\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceColors );\n\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t}\n\n\t\t\tif ( normal ) {\n\n\t\t\t\tif ( normalPerVertex === true ) {\n\n\t\t\t\t\t// consider vertex normals\n\n\t\t\t\t\tif ( normalIndex && normalIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the normalIndex field is not empty, then it is used to choose normals for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\t\tconst triangulatedNormalIndex = triangulateFaceIndex( normalIndex, ccw );\n\t\t\t\t\t\tnormalAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedNormalIndex, normal, 3 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the normalIndex field is empty, then the coordIndex field is used to choose normals from the Normal node\n\n\t\t\t\t\t\tnormalAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( normal, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// consider face normals\n\n\t\t\t\t\tif ( normalIndex && normalIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the normalIndex field is not empty, then they are used to choose one normal for each face of the IndexedFaceSet\n\n\t\t\t\t\t\tconst flattenFaceNormals = flattenData( normal, normalIndex );\n\t\t\t\t\t\tconst triangulatedFaceNormals = triangulateFaceData( flattenFaceNormals, coordIndex );\n\t\t\t\t\t\tnormalAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceNormals );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the normalIndex field is empty, then the normals are applied to each face of the IndexedFaceSet in order\n\n\t\t\t\t\t\tconst triangulatedFaceNormals = triangulateFaceData( normal, coordIndex );\n\t\t\t\t\t\tnormalAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceNormals );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// if the normal field is NULL, then the loader should automatically generate normals, using creaseAngle to determine if and how normals are smoothed across shared vertices\n\n\t\t\t\tnormalAttribute = computeNormalAttribute( triangulatedCoordIndex, coord, creaseAngle );\n\n\t\t\t}\n\n\t\t\tif ( texCoord ) {\n\n\t\t\t\t// texture coordinates are always defined on vertex level\n\n\t\t\t\tif ( texCoordIndex && texCoordIndex.length > 0 ) {\n\n\t\t\t\t\t// if the texCoordIndex field is not empty, then it is used to choose texture coordinates for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\tconst triangulatedTexCoordIndex = triangulateFaceIndex( texCoordIndex, ccw );\n\t\t\t\t\tuvAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedTexCoordIndex, texCoord, 2 );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// if the texCoordIndex field is empty, then the coordIndex array is used to choose texture coordinates from the TextureCoordinate node\n\n\t\t\t\t\tuvAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( texCoord, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst positionAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( coord, 3 ) );\n\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\n\t\t\t// optional attributes\n\n\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\t\t\tif ( uvAttribute ) geometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\tgeometry._solid = solid;\n\t\t\tgeometry._type = 'mesh';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildIndexedLineSetNode( node ) {\n\n\t\t\tlet color, coord;\n\t\t\tlet colorIndex, coordIndex;\n\t\t\tlet colorPerVertex = true;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\tconst coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorIndex':\n\t\t\t\t\t\tcolorIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coordIndex':\n\t\t\t\t\t\tcoordIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build lines\n\n\t\t\tlet colorAttribute;\n\n\t\t\tconst expandedLineIndex = expandLineIndex( coordIndex ); // create an index for three.js's linesegment primitive\n\n\t\t\tif ( color ) {\n\n\t\t\t\tif ( colorPerVertex === true ) {\n\n\t\t\t\t\tif ( colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then one color is used for each polyline of the IndexedLineSet.\n\n\t\t\t\t\t\tconst expandedColorIndex = expandLineIndex( colorIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromIndexedData( expandedLineIndex, expandedColorIndex, color, 3 ); // compute data on vertex level\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the colors are applied to each polyline of the IndexedLineSet in order.\n\n\t\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( expandedLineIndex, new Float32BufferAttribute( color, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then colors are applied to each vertex of the IndexedLineSet\n\n\t\t\t\t\t\tconst flattenLineColors = flattenData( color, colorIndex ); // compute colors for each VRML primitve\n\t\t\t\t\t\tconst expandedLineColors = expandLineData( flattenLineColors, coordIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node\n\n\t\t\t\t\t\tconst expandedLineColors = expandLineData( color, coordIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positionAttribute = toNonIndexedAttribute( expandedLineIndex, new Float32BufferAttribute( coord, 3 ) );\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\n\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\n\t\t\tgeometry._type = 'line';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildPointSetNode( node ) {\n\n\t\t\tlet color, coord;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\tconst coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( coord, 3 ) );\n\n\t\t\tif ( color ) {\n\n\t\t\t\tconst colorAttribute = new Float32BufferAttribute( color, 3 );\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry._type = 'points';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildBoxNode( node ) {\n\n\t\t\tconst size = new Vector3( 2, 2, 2 );\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'size':\n\t\t\t\t\t\tsize.x = fieldValues[ 0 ];\n\t\t\t\t\t\tsize.y = fieldValues[ 1 ];\n\t\t\t\t\t\tsize.z = fieldValues[ 2 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BoxGeometry( size.x, size.y, size.z );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildConeNode( node ) {\n\n\t\t\tlet radius = 1, height = 2, openEnded = false;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\topenEnded = ! fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bottomRadius':\n\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'height':\n\t\t\t\t\t\theight = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'side':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new ConeGeometry( radius, height, 16, 1, openEnded );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildCylinderNode( node ) {\n\n\t\t\tlet radius = 1, height = 2;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'radius':\n\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'height':\n\t\t\t\t\t\theight = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'side':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'top':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new CylinderGeometry( radius, radius, height, 16, 1 );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildSphereNode( node ) {\n\n\t\t\tlet radius = 1;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'radius':\n\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new SphereGeometry( radius, 16, 16 );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildElevationGridNode( node ) {\n\n\t\t\tlet color;\n\t\t\tlet normal;\n\t\t\tlet texCoord;\n\t\t\tlet height;\n\n\t\t\tlet colorPerVertex = true;\n\t\t\tlet normalPerVertex = true;\n\t\t\tlet solid = true;\n\t\t\tlet ccw = true;\n\t\t\tlet creaseAngle = 0;\n\t\t\tlet xDimension = 2;\n\t\t\tlet zDimension = 2;\n\t\t\tlet xSpacing = 1;\n\t\t\tlet zSpacing = 1;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normal':\n\t\t\t\t\t\tconst normalNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( normalNode !== null ) {\n\n\t\t\t\t\t\t\tnormal = getNode( normalNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texCoord':\n\t\t\t\t\t\tconst texCoordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( texCoordNode !== null ) {\n\n\t\t\t\t\t\t\ttexCoord = getNode( texCoordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'height':\n\t\t\t\t\t\theight = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normalPerVertex':\n\t\t\t\t\t\tnormalPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'xDimension':\n\t\t\t\t\t\txDimension = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'xSpacing':\n\t\t\t\t\t\txSpacing = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'zDimension':\n\t\t\t\t\t\tzDimension = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'zSpacing':\n\t\t\t\t\t\tzSpacing = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// vertex data\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst colors = [];\n\t\t\tconst uvs = [];\n\n\t\t\tfor ( let i = 0; i < zDimension; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < xDimension; j ++ ) {\n\n\t\t\t\t\t// compute a row major index\n\n\t\t\t\t\tconst index = ( i * xDimension ) + j;\n\n\t\t\t\t\t// vertices\n\n\t\t\t\t\tconst x = xSpacing * i;\n\t\t\t\t\tconst y = height[ index ];\n\t\t\t\t\tconst z = zSpacing * j;\n\n\t\t\t\t\tvertices.push( x, y, z );\n\n\t\t\t\t\t// colors\n\n\t\t\t\t\tif ( color && colorPerVertex === true ) {\n\n\t\t\t\t\t\tconst r = color[ index * 3 + 0 ];\n\t\t\t\t\t\tconst g = color[ index * 3 + 1 ];\n\t\t\t\t\t\tconst b = color[ index * 3 + 2 ];\n\n\t\t\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// normals\n\n\t\t\t\t\tif ( normal && normalPerVertex === true ) {\n\n\t\t\t\t\t\tconst xn = normal[ index * 3 + 0 ];\n\t\t\t\t\t\tconst yn = normal[ index * 3 + 1 ];\n\t\t\t\t\t\tconst zn = normal[ index * 3 + 2 ];\n\n\t\t\t\t\t\tnormals.push( xn, yn, zn );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tif ( texCoord ) {\n\n\t\t\t\t\t\tconst s = texCoord[ index * 2 + 0 ];\n\t\t\t\t\t\tconst t = texCoord[ index * 2 + 1 ];\n\n\t\t\t\t\t\tuvs.push( s, t );\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuvs.push( i / ( xDimension - 1 ), j / ( zDimension - 1 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t// from https://tecfa.unige.ch/guides/vrml/vrml97/spec/part1/nodesRef.html#ElevationGrid\n\n\t\t\t\t\tconst a = i + j * xDimension;\n\t\t\t\t\tconst b = i + ( j + 1 ) * xDimension;\n\t\t\t\t\tconst c = ( i + 1 ) + ( j + 1 ) * xDimension;\n\t\t\t\t\tconst d = ( i + 1 ) + j * xDimension;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tindices.push( a, c, b );\n\t\t\t\t\t\tindices.push( c, a, d );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tindices.push( a, b, c );\n\t\t\t\t\t\tindices.push( c, d, a );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst positionAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tconst uvAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( uvs, 2 ) );\n\t\t\tlet colorAttribute;\n\t\t\tlet normalAttribute;\n\n\t\t\t// color attribute\n\n\t\t\tif ( color ) {\n\n\t\t\t\tif ( colorPerVertex === false ) {\n\n\t\t\t\t\tfor ( let i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t\t\tconst index = i + j * ( xDimension - 1 );\n\n\t\t\t\t\t\t\tconst r = color[ index * 3 + 0 ];\n\t\t\t\t\t\t\tconst g = color[ index * 3 + 1 ];\n\t\t\t\t\t\t\tconst b = color[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\t// one color per quad\n\n\t\t\t\t\t\t\tcolors.push( r, g, b ); colors.push( r, g, b ); colors.push( r, g, b );\n\t\t\t\t\t\t\tcolors.push( r, g, b ); colors.push( r, g, b ); colors.push( r, g, b );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcolorAttribute = new Float32BufferAttribute( colors, 3 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t}\n\n\t\t\t// normal attribute\n\n\t\t\tif ( normal ) {\n\n\t\t\t\tif ( normalPerVertex === false ) {\n\n\t\t\t\t\tfor ( let i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t\t\tconst index = i + j * ( xDimension - 1 );\n\n\t\t\t\t\t\t\tconst xn = normal[ index * 3 + 0 ];\n\t\t\t\t\t\t\tconst yn = normal[ index * 3 + 1 ];\n\t\t\t\t\t\t\tconst zn = normal[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\t// one normal per quad\n\n\t\t\t\t\t\t\tnormals.push( xn, yn, zn ); normals.push( xn, yn, zn ); normals.push( xn, yn, zn );\n\t\t\t\t\t\t\tnormals.push( xn, yn, zn ); normals.push( xn, yn, zn ); normals.push( xn, yn, zn );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnormalAttribute = new Float32BufferAttribute( normals, 3 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnormalAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tnormalAttribute = computeNormalAttribute( indices, vertices, creaseAngle );\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\t\t\tgeometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\tgeometry._solid = solid;\n\t\t\tgeometry._type = 'mesh';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildExtrusionNode( node ) {\n\n\t\t\tlet crossSection = [ 1, 1, 1, - 1, - 1, - 1, - 1, 1, 1, 1 ];\n\t\t\tlet spine = [ 0, 0, 0, 0, 1, 0 ];\n\t\t\tlet scale;\n\t\t\tlet orientation;\n\n\t\t\tlet beginCap = true;\n\t\t\tlet ccw = true;\n\t\t\tlet creaseAngle = 0;\n\t\t\tlet endCap = true;\n\t\t\tlet solid = true;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'beginCap':\n\t\t\t\t\t\tbeginCap = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'convex':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'crossSection':\n\t\t\t\t\t\tcrossSection = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'endCap':\n\t\t\t\t\t\tendCap = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'orientation':\n\t\t\t\t\t\torientation = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tscale = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'spine':\n\t\t\t\t\t\tspine = fieldValues; // only extrusion along the Y-axis are supported so far\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst crossSectionClosed = ( crossSection[ 0 ] === crossSection[ crossSection.length - 2 ] && crossSection[ 1 ] === crossSection[ crossSection.length - 1 ] );\n\n\t\t\t// vertices\n\n\t\t\tconst vertices = [];\n\t\t\tconst spineVector = new Vector3();\n\t\t\tconst scaling = new Vector3();\n\n\t\t\tconst axis = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst quaternion = new Quaternion();\n\n\t\t\tfor ( let i = 0, j = 0, o = 0, il = spine.length; i < il; i += 3, j += 2, o += 4 ) {\n\n\t\t\t\tspineVector.fromArray( spine, i );\n\n\t\t\t\tscaling.x = scale ? scale[ j + 0 ] : 1;\n\t\t\t\tscaling.y = 1;\n\t\t\t\tscaling.z = scale ? scale[ j + 1 ] : 1;\n\n\t\t\t\taxis.x = orientation ? orientation[ o + 0 ] : 0;\n\t\t\t\taxis.y = orientation ? orientation[ o + 1 ] : 0;\n\t\t\t\taxis.z = orientation ? orientation[ o + 2 ] : 1;\n\t\t\t\tconst angle = orientation ? orientation[ o + 3 ] : 0;\n\n\t\t\t\tfor ( let k = 0, kl = crossSection.length; k < kl; k += 2 ) {\n\n\t\t\t\t\tvertex.x = crossSection[ k + 0 ];\n\t\t\t\t\tvertex.y = 0;\n\t\t\t\t\tvertex.z = crossSection[ k + 1 ];\n\n\t\t\t\t\t// scale\n\n\t\t\t\t\tvertex.multiply( scaling );\n\n\t\t\t\t\t// rotate\n\n\t\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\t\t\t\t\tvertex.applyQuaternion( quaternion );\n\n\t\t\t\t\t// translate\n\n\t\t\t\t\tvertex.add( spineVector );\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tconst indices = [];\n\n\t\t\tconst spineCount = spine.length / 3;\n\t\t\tconst crossSectionCount = crossSection.length / 2;\n\n\t\t\tfor ( let i = 0; i < spineCount - 1; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < crossSectionCount - 1; j ++ ) {\n\n\t\t\t\t\tconst a = j + i * crossSectionCount;\n\t\t\t\t\tlet b = ( j + 1 ) + i * crossSectionCount;\n\t\t\t\t\tconst c = j + ( i + 1 ) * crossSectionCount;\n\t\t\t\t\tlet d = ( j + 1 ) + ( i + 1 ) * crossSectionCount;\n\n\t\t\t\t\tif ( ( j === crossSectionCount - 2 ) && ( crossSectionClosed === true ) ) {\n\n\t\t\t\t\t\tb = i * crossSectionCount;\n\t\t\t\t\t\td = ( i + 1 ) * crossSectionCount;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tindices.push( a, b, c );\n\t\t\t\t\t\tindices.push( c, b, d );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tindices.push( a, c, b );\n\t\t\t\t\t\tindices.push( c, d, b );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// triangulate cap\n\n\t\t\tif ( beginCap === true || endCap === true ) {\n\n\t\t\t\tconst contour = [];\n\n\t\t\t\tfor ( let i = 0, l = crossSection.length; i < l; i += 2 ) {\n\n\t\t\t\t\tcontour.push( new Vector2( crossSection[ i ], crossSection[ i + 1 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tconst faces = ShapeUtils.triangulateShape( contour, [] );\n\t\t\t\tconst capIndices = [];\n\n\t\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\t\tcapIndices.push( face[ 0 ], face[ 1 ], face[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// begin cap\n\n\t\t\t\tif ( beginCap === true ) {\n\n\t\t\t\t\tfor ( let i = 0, l = capIndices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tindices.push( capIndices[ i + 0 ], capIndices[ i + 1 ], capIndices[ i + 2 ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tindices.push( capIndices[ i + 0 ], capIndices[ i + 2 ], capIndices[ i + 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// end cap\n\n\t\t\t\tif ( endCap === true ) {\n\n\t\t\t\t\tconst indexOffset = crossSectionCount * ( spineCount - 1 ); // references to the first vertex of the last cross section\n\n\t\t\t\t\tfor ( let i = 0, l = capIndices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tindices.push( indexOffset + capIndices[ i + 0 ], indexOffset + capIndices[ i + 2 ], indexOffset + capIndices[ i + 1 ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tindices.push( indexOffset + capIndices[ i + 0 ], indexOffset + capIndices[ i + 1 ], indexOffset + capIndices[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst positionAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tconst normalAttribute = computeNormalAttribute( indices, vertices, creaseAngle );\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\t\t\t// no uvs yet\n\n\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\tgeometry._solid = solid;\n\t\t\tgeometry._type = 'mesh';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction resolveUSE( identifier ) {\n\n\t\t\tconst node = nodeMap[ identifier ];\n\t\t\tconst build = getNode( node );\n\n\t\t\t// because the same 3D objects can have different transformations, it's necessary to clone them.\n\t\t\t// materials can be influenced by the geometry (e.g. vertex normals). cloning is necessary to avoid\n\t\t\t// any side effects\n\n\t\t\treturn ( build.isObject3D || build.isMaterial ) ? build.clone() : build;\n\n\t\t}\n\n\t\tfunction parseFieldChildren( children, owner ) {\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = getNode( children[ i ] );\n\n\t\t\t\tif ( object instanceof Object3D ) owner.add( object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction triangulateFaceIndex( index, ccw ) {\n\n\t\t\tconst indices = [];\n\n\t\t\t// since face defintions can have more than three vertices, it's necessary to\n\t\t\t// perform a simple triangulation\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst i1 = index[ start ];\n\t\t\t\tconst i2 = index[ i + ( ccw ? 1 : 2 ) ];\n\t\t\t\tconst i3 = index[ i + ( ccw ? 2 : 1 ) ];\n\n\t\t\t\tindices.push( i1, i2, i3 );\n\n\t\t\t\t// an index of -1 indicates that the current face has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 3 ] === - 1 || i + 3 >= l ) {\n\n\t\t\t\t\ti += 3;\n\t\t\t\t\tstart = i + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn indices;\n\n\t\t}\n\n\t\tfunction triangulateFaceData( data, index ) {\n\n\t\t\tconst triangulatedData = [];\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst stride = start * 3;\n\n\t\t\t\tconst x = data[ stride ];\n\t\t\t\tconst y = data[ stride + 1 ];\n\t\t\t\tconst z = data[ stride + 2 ];\n\n\t\t\t\ttriangulatedData.push( x, y, z );\n\n\t\t\t\t// an index of -1 indicates that the current face has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 3 ] === - 1 || i + 3 >= l ) {\n\n\t\t\t\t\ti += 3;\n\t\t\t\t\tstart ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn triangulatedData;\n\n\t\t}\n\n\t\tfunction flattenData( data, index ) {\n\n\t\t\tconst flattenData = [];\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst i1 = index[ i ];\n\n\t\t\t\tconst stride = i1 * 3;\n\n\t\t\t\tconst x = data[ stride ];\n\t\t\t\tconst y = data[ stride + 1 ];\n\t\t\t\tconst z = data[ stride + 2 ];\n\n\t\t\t\tflattenData.push( x, y, z );\n\n\t\t\t}\n\n\t\t\treturn flattenData;\n\n\t\t}\n\n\t\tfunction expandLineIndex( index ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst i1 = index[ i ];\n\t\t\t\tconst i2 = index[ i + 1 ];\n\n\t\t\t\tindices.push( i1, i2 );\n\n\t\t\t\t// an index of -1 indicates that the current line has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 2 ] === - 1 || i + 2 >= l ) {\n\n\t\t\t\t\ti += 2;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn indices;\n\n\t\t}\n\n\t\tfunction expandLineData( data, index ) {\n\n\t\t\tconst triangulatedData = [];\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst stride = start * 3;\n\n\t\t\t\tconst x = data[ stride ];\n\t\t\t\tconst y = data[ stride + 1 ];\n\t\t\t\tconst z = data[ stride + 2 ];\n\n\t\t\t\ttriangulatedData.push( x, y, z );\n\n\t\t\t\t// an index of -1 indicates that the current line has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 2 ] === - 1 || i + 2 >= l ) {\n\n\t\t\t\t\ti += 2;\n\t\t\t\t\tstart ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn triangulatedData;\n\n\t\t}\n\n\t\tconst vA = new Vector3();\n\t\tconst vB = new Vector3();\n\t\tconst vC = new Vector3();\n\n\t\tconst uvA = new Vector2();\n\t\tconst uvB = new Vector2();\n\t\tconst uvC = new Vector2();\n\n\t\tfunction computeAttributeFromIndexedData( coordIndex, index, data, itemSize ) {\n\n\t\t\tconst array = [];\n\n\t\t\t// we use the coordIndex.length as delimiter since normalIndex must contain at least as many indices\n\n\t\t\tfor ( let i = 0, l = coordIndex.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = index[ i ];\n\t\t\t\tconst b = index[ i + 1 ];\n\t\t\t\tconst c = index[ i + 2 ];\n\n\t\t\t\tif ( itemSize === 2 ) {\n\n\t\t\t\t\tuvA.fromArray( data, a * itemSize );\n\t\t\t\t\tuvB.fromArray( data, b * itemSize );\n\t\t\t\t\tuvC.fromArray( data, c * itemSize );\n\n\t\t\t\t\tarray.push( uvA.x, uvA.y );\n\t\t\t\t\tarray.push( uvB.x, uvB.y );\n\t\t\t\t\tarray.push( uvC.x, uvC.y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvA.fromArray( data, a * itemSize );\n\t\t\t\t\tvB.fromArray( data, b * itemSize );\n\t\t\t\t\tvC.fromArray( data, c * itemSize );\n\n\t\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\t\tarray.push( vB.x, vB.y, vB.z );\n\t\t\t\t\tarray.push( vC.x, vC.y, vC.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array, itemSize );\n\n\t\t}\n\n\t\tfunction computeAttributeFromFaceData( index, faceData ) {\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, j = 0, l = index.length; i < l; i += 3, j ++ ) {\n\n\t\t\t\tvA.fromArray( faceData, j * 3 );\n\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array, 3 );\n\n\t\t}\n\n\t\tfunction computeAttributeFromLineData( index, lineData ) {\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, j = 0, l = index.length; i < l; i += 2, j ++ ) {\n\n\t\t\t\tvA.fromArray( lineData, j * 3 );\n\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array, 3 );\n\n\t\t}\n\n\t\tfunction toNonIndexedAttribute( indices, attribute ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array2, itemSize );\n\n\t\t}\n\n\t\tconst ab = new Vector3();\n\t\tconst cb = new Vector3();\n\n\t\tfunction computeNormalAttribute( index, coord, creaseAngle ) {\n\n\t\t\tconst faces = [];\n\t\t\tconst vertexNormals = {};\n\n\t\t\t// prepare face and raw vertex normals\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = index[ i ];\n\t\t\t\tconst b = index[ i + 1 ];\n\t\t\t\tconst c = index[ i + 2 ];\n\n\t\t\t\tconst face = new Face( a, b, c );\n\n\t\t\t\tvA.fromArray( coord, a * 3 );\n\t\t\t\tvB.fromArray( coord, b * 3 );\n\t\t\t\tvC.fromArray( coord, c * 3 );\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tcb.normalize();\n\n\t\t\t\tface.normal.copy( cb );\n\n\t\t\t\tif ( vertexNormals[ a ] === undefined ) vertexNormals[ a ] = [];\n\t\t\t\tif ( vertexNormals[ b ] === undefined ) vertexNormals[ b ] = [];\n\t\t\t\tif ( vertexNormals[ c ] === undefined ) vertexNormals[ c ] = [];\n\n\t\t\t\tvertexNormals[ a ].push( face.normal );\n\t\t\t\tvertexNormals[ b ].push( face.normal );\n\t\t\t\tvertexNormals[ c ].push( face.normal );\n\n\t\t\t\tfaces.push( face );\n\n\t\t\t}\n\n\t\t\t// compute vertex normals and build final geometry\n\n\t\t\tconst normals = [];\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst nA = weightedNormal( vertexNormals[ face.a ], face.normal, creaseAngle );\n\t\t\t\tconst nB = weightedNormal( vertexNormals[ face.b ], face.normal, creaseAngle );\n\t\t\t\tconst nC = weightedNormal( vertexNormals[ face.c ], face.normal, creaseAngle );\n\n\t\t\t\tvA.fromArray( coord, face.a * 3 );\n\t\t\t\tvB.fromArray( coord, face.b * 3 );\n\t\t\t\tvC.fromArray( coord, face.c * 3 );\n\n\t\t\t\tnormals.push( nA.x, nA.y, nA.z );\n\t\t\t\tnormals.push( nB.x, nB.y, nB.z );\n\t\t\t\tnormals.push( nC.x, nC.y, nC.z );\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( normals, 3 );\n\n\t\t}\n\n\t\tfunction weightedNormal( normals, vector, creaseAngle ) {\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tif ( creaseAngle === 0 ) {\n\n\t\t\t\tnormal.copy( vector );\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = normals.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( normals[ i ].angleTo( vector ) < creaseAngle ) {\n\n\t\t\t\t\t\tnormal.add( normals[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn normal.normalize();\n\n\t\t}\n\n\t\tfunction toColorArray( colors ) {\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\tarray.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction convertColorsToLinearSRGB( attribute ) {\n\n\t\t\tconst color = new Color();\n\n\t\t\tfor ( let i = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tcolor.fromBufferAttribute( attribute, i );\n\t\t\t\tcolor.convertSRGBToLinear();\n\n\t\t\t\tattribute.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * Vertically paints the faces interpolating between the\n\t\t * specified colors at the specified angels. This is used for the Background\n\t\t * node, but could be applied to other nodes with multiple faces as well.\n\t\t *\n\t\t * When used with the Background node, default is directionIsDown is true if\n\t\t * interpolating the skyColor down from the Zenith. When interpolationg up from\n\t\t * the Nadir i.e. interpolating the groundColor, the directionIsDown is false.\n\t\t *\n\t\t * The first angle is never specified, it is the Zenith (0 rad). Angles are specified\n\t\t * in radians. The geometry is thought a sphere, but could be anything. The color interpolation\n\t\t * is linear along the Y axis in any case.\n\t\t *\n\t\t * You must specify one more color than you have angles at the beginning of the colors array.\n\t\t * This is the color of the Zenith (the top of the shape).\n\t\t *\n\t\t * @param {BufferGeometry} geometry\n\t\t * @param {number} radius\n\t\t * @param {array} angles\n\t\t * @param {array} colors\n\t\t * @param {boolean} topDown - Whether to work top down or bottom up.\n\t\t */\n\t\tfunction paintFaces( geometry, radius, angles, colors, topDown ) {\n\n\t\t\t// compute threshold values\n\n\t\t\tconst thresholds = [];\n\t\t\tconst startAngle = ( topDown === true ) ? 0 : Math.PI;\n\n\t\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\t\tlet angle = ( i === 0 ) ? 0 : angles[ i - 1 ];\n\t\t\t\tangle = ( topDown === true ) ? angle : ( startAngle - angle );\n\n\t\t\t\tconst point = new Vector3();\n\t\t\t\tpoint.setFromSphericalCoords( radius, angle, 0 );\n\n\t\t\t\tthresholds.push( point );\n\n\t\t\t}\n\n\t\t\t// generate vertex colors\n\n\t\t\tconst indices = geometry.index;\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst colorAttribute = new BufferAttribute( new Float32Array( geometry.attributes.position.count * 3 ), 3 );\n\n\t\t\tconst position = new Vector3();\n\t\t\tconst color = new Color();\n\n\t\t\tfor ( let i = 0; i < indices.count; i ++ ) {\n\n\t\t\t\tconst index = indices.getX( i );\n\t\t\t\tposition.fromBufferAttribute( positionAttribute, index );\n\n\t\t\t\tlet thresholdIndexA, thresholdIndexB;\n\t\t\t\tlet t = 1;\n\n\t\t\t\tfor ( let j = 1; j < thresholds.length; j ++ ) {\n\n\t\t\t\t\tthresholdIndexA = j - 1;\n\t\t\t\t\tthresholdIndexB = j;\n\n\t\t\t\t\tconst thresholdA = thresholds[ thresholdIndexA ];\n\t\t\t\t\tconst thresholdB = thresholds[ thresholdIndexB ];\n\n\t\t\t\t\tif ( topDown === true ) {\n\n\t\t\t\t\t\t// interpolation for sky color\n\n\t\t\t\t\t\tif ( position.y <= thresholdA.y && position.y > thresholdB.y ) {\n\n\t\t\t\t\t\t\tt = Math.abs( thresholdA.y - position.y ) / Math.abs( thresholdA.y - thresholdB.y );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// interpolation for ground color\n\n\t\t\t\t\t\tif ( position.y >= thresholdA.y && position.y < thresholdB.y ) {\n\n\t\t\t\t\t\t\tt = Math.abs( thresholdA.y - position.y ) / Math.abs( thresholdA.y - thresholdB.y );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst colorA = colors[ thresholdIndexA ];\n\t\t\t\tconst colorB = colors[ thresholdIndexB ];\n\n\t\t\t\tcolor.copy( colorA ).lerp( colorB, t ).convertSRGBToLinear();\n\n\t\t\t\tcolorAttribute.setXYZ( index, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst textureLoader = new TextureLoader( this.manager );\n\t\ttextureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\t// check version (only 2.0 is supported)\n\n\t\tif ( data.indexOf( '#VRML V2.0' ) === - 1 ) {\n\n\t\t\tthrow Error( 'THREE.VRMLLexer: Version of VRML asset not supported.' );\n\n\t\t}\n\n\t\t// create JSON representing the tree structure of the VRML asset\n\n\t\tconst tree = generateVRMLTree( data );\n\n\t\t// parse the tree structure to a three.js scene\n\n\t\tconst scene = parseTree( tree );\n\n\t\treturn scene;\n\n\t}\n\n}\n\nclass VRMLLexer {\n\n\tconstructor( tokens ) {\n\n\t\tthis.lexer = new chevrotain.Lexer( tokens );\n\n\t}\n\n\tlex( inputText ) {\n\n\t\tconst lexingResult = this.lexer.tokenize( inputText );\n\n\t\tif ( lexingResult.errors.length > 0 ) {\n\n\t\t\tconsole.error( lexingResult.errors );\n\n\t\t\tthrow Error( 'THREE.VRMLLexer: Lexing errors detected.' );\n\n\t\t}\n\n\t\treturn lexingResult;\n\n\t}\n\n}\n\nconst CstParser = chevrotain.CstParser;\n\nclass VRMLParser extends CstParser {\n\n\tconstructor( tokenVocabulary ) {\n\n\t\tsuper( tokenVocabulary );\n\n\t\tconst $ = this;\n\n\t\tconst Version = tokenVocabulary[ 'Version' ];\n\t\tconst LCurly = tokenVocabulary[ 'LCurly' ];\n\t\tconst RCurly = tokenVocabulary[ 'RCurly' ];\n\t\tconst LSquare = tokenVocabulary[ 'LSquare' ];\n\t\tconst RSquare = tokenVocabulary[ 'RSquare' ];\n\t\tconst Identifier = tokenVocabulary[ 'Identifier' ];\n\t\tconst RouteIdentifier = tokenVocabulary[ 'RouteIdentifier' ];\n\t\tconst StringLiteral = tokenVocabulary[ 'StringLiteral' ];\n\t\tconst HexLiteral = tokenVocabulary[ 'HexLiteral' ];\n\t\tconst NumberLiteral = tokenVocabulary[ 'NumberLiteral' ];\n\t\tconst TrueLiteral = tokenVocabulary[ 'TrueLiteral' ];\n\t\tconst FalseLiteral = tokenVocabulary[ 'FalseLiteral' ];\n\t\tconst NullLiteral = tokenVocabulary[ 'NullLiteral' ];\n\t\tconst DEF = tokenVocabulary[ 'DEF' ];\n\t\tconst USE = tokenVocabulary[ 'USE' ];\n\t\tconst ROUTE = tokenVocabulary[ 'ROUTE' ];\n\t\tconst TO = tokenVocabulary[ 'TO' ];\n\t\tconst NodeName = tokenVocabulary[ 'NodeName' ];\n\n\t\t$.RULE( 'vrml', function () {\n\n\t\t\t$.SUBRULE( $.version );\n\t\t\t$.AT_LEAST_ONE( function () {\n\n\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t} );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.SUBRULE( $.route );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t$.RULE( 'version', function () {\n\n\t\t\t$.CONSUME( Version );\n\n\t\t} );\n\n\t\t$.RULE( 'node', function () {\n\n\t\t\t$.OPTION( function () {\n\n\t\t\t\t$.SUBRULE( $.def );\n\n\t\t\t} );\n\n\t\t\t$.CONSUME( NodeName );\n\t\t\t$.CONSUME( LCurly );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.SUBRULE( $.field );\n\n\t\t\t} );\n\t\t\t$.CONSUME( RCurly );\n\n\t\t} );\n\n\t\t$.RULE( 'field', function () {\n\n\t\t\t$.CONSUME( Identifier );\n\n\t\t\t$.OR2( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.SUBRULE( $.singleFieldValue );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.SUBRULE( $.multiFieldValue );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'def', function () {\n\n\t\t\t$.CONSUME( DEF );\n\t\t\t$.OR( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( Identifier );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( NodeName );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'use', function () {\n\n\t\t\t$.CONSUME( USE );\n\t\t\t$.OR( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( Identifier );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( NodeName );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'singleFieldValue', function () {\n\n\t\t\t$.AT_LEAST_ONE( function () {\n\n\t\t\t\t$.OR( [\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.use );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( StringLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( HexLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NumberLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( TrueLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( FalseLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NullLiteral );\n\n\t\t\t\t\t} }\n\t\t\t\t] );\n\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t$.RULE( 'multiFieldValue', function () {\n\n\t\t\t$.CONSUME( LSquare );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.OR( [\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.use );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( StringLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( HexLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NumberLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NullLiteral );\n\n\t\t\t\t\t} }\n\t\t\t\t] );\n\n\t\t\t} );\n\t\t\t$.CONSUME( RSquare );\n\n\t\t} );\n\n\t\t$.RULE( 'route', function () {\n\n\t\t\t$.CONSUME( ROUTE );\n\t\t\t$.CONSUME( RouteIdentifier );\n\t\t\t$.CONSUME( TO );\n\t\t\t$.CONSUME2( RouteIdentifier );\n\n\t\t} );\n\n\t\tthis.performSelfAnalysis();\n\n\t}\n\n}\n\nclass Face {\n\n\tconstructor( a, b, c ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\t\tthis.normal = new Vector3();\n\n\t}\n\n}\n\nconst TEXTURE_TYPE = {\n\tINTENSITY: 1,\n\tINTENSITY_ALPHA: 2,\n\tRGB: 3,\n\tRGBA: 4\n};\n\nexport { VRMLLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\nclass VTKLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\t// connectivity of the triangles\n\t\t\tconst indices = [];\n\n\t\t\t// triangles vertices\n\t\t\tconst positions = [];\n\n\t\t\t// red, green, blue colors in the range 0 to 1\n\t\t\tconst colors = [];\n\n\t\t\t// normal vector, one per vertex\n\t\t\tconst normals = [];\n\n\t\t\tlet result;\n\n\t\t\t// pattern for detecting the end of a number sequence\n\t\t\tconst patWord = /^[^\\d.\\s-]+/;\n\n\t\t\t// pattern for reading vertices, 3 floats or integers\n\t\t\tconst pat3Floats = /(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)/g;\n\n\t\t\t// pattern for connectivity, an integer followed by any number of ints\n\t\t\t// the first integer is the number of polygon nodes\n\t\t\tconst patConnectivity = /^(\\d+)\\s+([\\s\\d]*)/;\n\n\t\t\t// indicates start of vertex data section\n\t\t\tconst patPOINTS = /^POINTS /;\n\n\t\t\t// indicates start of polygon connectivity section\n\t\t\tconst patPOLYGONS = /^POLYGONS /;\n\n\t\t\t// indicates start of triangle strips section\n\t\t\tconst patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /;\n\n\t\t\t// POINT_DATA number_of_values\n\t\t\tconst patPOINT_DATA = /^POINT_DATA[ ]+(\\d+)/;\n\n\t\t\t// CELL_DATA number_of_polys\n\t\t\tconst patCELL_DATA = /^CELL_DATA[ ]+(\\d+)/;\n\n\t\t\t// Start of color section\n\t\t\tconst patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\\w+)[ ]+3/;\n\n\t\t\t// NORMALS Normals float\n\t\t\tconst patNORMALS = /^NORMALS[ ]+(\\w+)[ ]+(\\w+)/;\n\n\t\t\tlet inPointsSection = false;\n\t\t\tlet inPolygonsSection = false;\n\t\t\tlet inTriangleStripSection = false;\n\t\t\tlet inPointDataSection = false;\n\t\t\tlet inCellDataSection = false;\n\t\t\tlet inColorSection = false;\n\t\t\tlet inNormalsSection = false;\n\n\t\t\tconst color = new Color();\n\n\t\t\tconst lines = data.split( '\\n' );\n\n\t\t\tfor ( const i in lines ) {\n\n\t\t\t\tconst line = lines[ i ].trim();\n\n\t\t\t\tif ( line.indexOf( 'DATASET' ) === 0 ) {\n\n\t\t\t\t\tconst dataset = line.split( ' ' )[ 1 ];\n\n\t\t\t\t\tif ( dataset !== 'POLYDATA' ) throw new Error( 'Unsupported DATASET type: ' + dataset );\n\n\t\t\t\t} else if ( inPointsSection ) {\n\n\t\t\t\t\t// get the vertices\n\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\tconst x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tconst y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tconst z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tpositions.push( x, y, z );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inPolygonsSection ) {\n\n\t\t\t\t\tif ( ( result = patConnectivity.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t// numVertices i0 i1 i2 ...\n\t\t\t\t\t\tconst numVertices = parseInt( result[ 1 ] );\n\t\t\t\t\t\tconst inds = result[ 2 ].split( /\\s+/ );\n\n\t\t\t\t\t\tif ( numVertices >= 3 ) {\n\n\t\t\t\t\t\t\tconst i0 = parseInt( inds[ 0 ] );\n\t\t\t\t\t\t\tlet k = 1;\n\t\t\t\t\t\t\t// split the polygon in numVertices - 2 triangles\n\t\t\t\t\t\t\tfor ( let j = 0; j < numVertices - 2; ++ j ) {\n\n\t\t\t\t\t\t\t\tconst i1 = parseInt( inds[ k ] );\n\t\t\t\t\t\t\t\tconst i2 = parseInt( inds[ k + 1 ] );\n\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\t\t\t\t\t\t\t\tk ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inTriangleStripSection ) {\n\n\t\t\t\t\tif ( ( result = patConnectivity.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t// numVertices i0 i1 i2 ...\n\t\t\t\t\t\tconst numVertices = parseInt( result[ 1 ] );\n\t\t\t\t\t\tconst inds = result[ 2 ].split( /\\s+/ );\n\n\t\t\t\t\t\tif ( numVertices >= 3 ) {\n\n\t\t\t\t\t\t\t// split the polygon in numVertices - 2 triangles\n\t\t\t\t\t\t\tfor ( let j = 0; j < numVertices - 2; j ++ ) {\n\n\t\t\t\t\t\t\t\tif ( j % 2 === 1 ) {\n\n\t\t\t\t\t\t\t\t\tconst i0 = parseInt( inds[ j ] );\n\t\t\t\t\t\t\t\t\tconst i1 = parseInt( inds[ j + 2 ] );\n\t\t\t\t\t\t\t\t\tconst i2 = parseInt( inds[ j + 1 ] );\n\t\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconst i0 = parseInt( inds[ j ] );\n\t\t\t\t\t\t\t\t\tconst i1 = parseInt( inds[ j + 1 ] );\n\t\t\t\t\t\t\t\t\tconst i2 = parseInt( inds[ j + 2 ] );\n\t\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inPointDataSection || inCellDataSection ) {\n\n\t\t\t\t\tif ( inColorSection ) {\n\n\t\t\t\t\t\t// Get the colors\n\n\t\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\t\tconst r = parseFloat( result[ 1 ] );\n\t\t\t\t\t\t\tconst g = parseFloat( result[ 2 ] );\n\t\t\t\t\t\t\tconst b = parseFloat( result[ 3 ] );\n\n\t\t\t\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( inNormalsSection ) {\n\n\t\t\t\t\t\t// Get the normal vectors\n\n\t\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\t\tconst nx = parseFloat( result[ 1 ] );\n\t\t\t\t\t\t\tconst ny = parseFloat( result[ 2 ] );\n\t\t\t\t\t\t\tconst nz = parseFloat( result[ 3 ] );\n\t\t\t\t\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( patPOLYGONS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patPOINTS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinPointsSection = true;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patTRIANGLE_STRIPS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinTriangleStripSection = true;\n\n\t\t\t\t} else if ( patPOINT_DATA.exec( line ) !== null ) {\n\n\t\t\t\t\tinPointDataSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patCELL_DATA.exec( line ) !== null ) {\n\n\t\t\t\t\tinCellDataSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patCOLOR_SCALARS.exec( line ) !== null ) {\n\n\t\t\t\t\tinColorSection = true;\n\t\t\t\t\tinNormalsSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patNORMALS.exec( line ) !== null ) {\n\n\t\t\t\t\tinNormalsSection = true;\n\t\t\t\t\tinColorSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( indices );\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\t\tif ( normals.length === positions.length ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( colors.length !== indices.length ) {\n\n\t\t\t\t// stagger\n\n\t\t\t\tif ( colors.length === positions.length ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// cell\n\n\t\t\t\tgeometry = geometry.toNonIndexed();\n\t\t\t\tconst numTriangles = geometry.attributes.position.count / 3;\n\n\t\t\t\tif ( colors.length === ( numTriangles * 3 ) ) {\n\n\t\t\t\t\tconst newColors = [];\n\n\t\t\t\t\tfor ( let i = 0; i < numTriangles; i ++ ) {\n\n\t\t\t\t\t\tconst r = colors[ 3 * i + 0 ];\n\t\t\t\t\t\tconst g = colors[ 3 * i + 1 ];\n\t\t\t\t\t\tconst b = colors[ 3 * i + 2 ];\n\n\t\t\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\t\tnewColors.push( color.r, color.g, color.b );\n\t\t\t\t\t\tnewColors.push( color.r, color.g, color.b );\n\t\t\t\t\t\tnewColors.push( color.r, color.g, color.b );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( newColors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst buffer = new Uint8Array( data );\n\t\t\tconst dataView = new DataView( data );\n\n\t\t\t// Points and normals, by default, are empty\n\t\t\tlet points = [];\n\t\t\tlet normals = [];\n\t\t\tlet indices = [];\n\n\t\t\tlet index = 0;\n\n\t\t\tfunction findString( buffer, start ) {\n\n\t\t\t\tlet index = start;\n\t\t\t\tlet c = buffer[ index ];\n\t\t\t\tconst s = [];\n\t\t\t\twhile ( c !== 10 ) {\n\n\t\t\t\t\ts.push( String.fromCharCode( c ) );\n\t\t\t\t\tindex ++;\n\t\t\t\t\tc = buffer[ index ];\n\n\t\t\t\t}\n\n\t\t\t\treturn { start: start,\n\t\t\t\t\tend: index,\n\t\t\t\t\tnext: index + 1,\n\t\t\t\t\tparsedString: s.join( '' ) };\n\n\t\t\t}\n\n\t\t\tlet state, line;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\t// Get a string\n\t\t\t\tstate = findString( buffer, index );\n\t\t\t\tline = state.parsedString;\n\n\t\t\t\tif ( line.indexOf( 'DATASET' ) === 0 ) {\n\n\t\t\t\t\tconst dataset = line.split( ' ' )[ 1 ];\n\n\t\t\t\t\tif ( dataset !== 'POLYDATA' ) throw new Error( 'Unsupported DATASET type: ' + dataset );\n\n\t\t\t\t} else if ( line.indexOf( 'POINTS' ) === 0 ) {\n\n\t\t\t\t\t// Add the points\n\t\t\t\t\tconst numberOfPoints = parseInt( line.split( ' ' )[ 1 ], 10 );\n\n\t\t\t\t\t// Each point is 3 4-byte floats\n\t\t\t\t\tconst count = numberOfPoints * 4 * 3;\n\n\t\t\t\t\tpoints = new Float32Array( numberOfPoints * 3 );\n\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfPoints; i ++ ) {\n\n\t\t\t\t\t\tpoints[ 3 * i ] = dataView.getFloat32( pointIndex, false );\n\t\t\t\t\t\tpoints[ 3 * i + 1 ] = dataView.getFloat32( pointIndex + 4, false );\n\t\t\t\t\t\tpoints[ 3 * i + 2 ] = dataView.getFloat32( pointIndex + 8, false );\n\t\t\t\t\t\tpointIndex = pointIndex + 12;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'TRIANGLE_STRIPS' ) === 0 ) {\n\n\t\t\t\t\tconst numberOfStrips = parseInt( line.split( ' ' )[ 1 ], 10 );\n\t\t\t\t\tconst size = parseInt( line.split( ' ' )[ 2 ], 10 );\n\t\t\t\t\t// 4 byte integers\n\t\t\t\t\tconst count = size * 4;\n\n\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\t\t\t\t\tlet indicesIndex = 0;\n\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfStrips; i ++ ) {\n\n\t\t\t\t\t\t// For each strip, read the first value, then record that many more points\n\t\t\t\t\t\tconst indexCount = dataView.getInt32( pointIndex, false );\n\t\t\t\t\t\tconst strip = [];\n\t\t\t\t\t\tpointIndex += 4;\n\t\t\t\t\t\tfor ( let s = 0; s < indexCount; s ++ ) {\n\n\t\t\t\t\t\t\tstrip.push( dataView.getInt32( pointIndex, false ) );\n\t\t\t\t\t\t\tpointIndex += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// retrieves the n-2 triangles from the triangle strip\n\t\t\t\t\t\tfor ( let j = 0; j < indexCount - 2; j ++ ) {\n\n\t\t\t\t\t\t\tif ( j % 2 ) {\n\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'POLYGONS' ) === 0 ) {\n\n\t\t\t\t\tconst numberOfStrips = parseInt( line.split( ' ' )[ 1 ], 10 );\n\t\t\t\t\tconst size = parseInt( line.split( ' ' )[ 2 ], 10 );\n\t\t\t\t\t// 4 byte integers\n\t\t\t\t\tconst count = size * 4;\n\n\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\t\t\t\t\tlet indicesIndex = 0;\n\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfStrips; i ++ ) {\n\n\t\t\t\t\t\t// For each strip, read the first value, then record that many more points\n\t\t\t\t\t\tconst indexCount = dataView.getInt32( pointIndex, false );\n\t\t\t\t\t\tconst strip = [];\n\t\t\t\t\t\tpointIndex += 4;\n\t\t\t\t\t\tfor ( let s = 0; s < indexCount; s ++ ) {\n\n\t\t\t\t\t\t\tstrip.push( dataView.getInt32( pointIndex, false ) );\n\t\t\t\t\t\t\tpointIndex += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// divide the polygon in n-2 triangle\n\t\t\t\t\t\tfor ( let j = 1; j < indexCount - 1; j ++ ) {\n\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ 0 ];\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'POINT_DATA' ) === 0 ) {\n\n\t\t\t\t\tconst numberOfPoints = parseInt( line.split( ' ' )[ 1 ], 10 );\n\n\t\t\t\t\t// Grab the next line\n\t\t\t\t\tstate = findString( buffer, state.next );\n\n\t\t\t\t\t// Now grab the binary data\n\t\t\t\t\tconst count = numberOfPoints * 4 * 3;\n\n\t\t\t\t\tnormals = new Float32Array( numberOfPoints * 3 );\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfPoints; i ++ ) {\n\n\t\t\t\t\t\tnormals[ 3 * i ] = dataView.getFloat32( pointIndex, false );\n\t\t\t\t\t\tnormals[ 3 * i + 1 ] = dataView.getFloat32( pointIndex + 4, false );\n\t\t\t\t\t\tnormals[ 3 * i + 2 ] = dataView.getFloat32( pointIndex + 8, false );\n\t\t\t\t\t\tpointIndex += 12;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Increment past our data\n\t\t\t\t\tstate.next = state.next + count;\n\n\t\t\t\t}\n\n\t\t\t\t// Increment index\n\t\t\t\tindex = state.next;\n\n\t\t\t\tif ( index >= buffer.byteLength ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( points, 3 ) );\n\n\t\t\tif ( normals.length === points.length ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction Float32Concat( first, second ) {\n\n\t\t\tconst firstLength = first.length, result = new Float32Array( firstLength + second.length );\n\n\t\t\tresult.set( first );\n\t\t\tresult.set( second, firstLength );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction Int32Concat( first, second ) {\n\n\t\t\tconst firstLength = first.length, result = new Int32Array( firstLength + second.length );\n\n\t\t\tresult.set( first );\n\t\t\tresult.set( second, firstLength );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction parseXML( stringFile ) {\n\n\t\t\t// Changes XML to JSON, based on https://davidwalsh.name/convert-xml-json\n\n\t\t\tfunction xmlToJson( xml ) {\n\n\t\t\t\t// Create the return object\n\t\t\t\tlet obj = {};\n\n\t\t\t\tif ( xml.nodeType === 1 ) { // element\n\n\t\t\t\t\t// do attributes\n\n\t\t\t\t\tif ( xml.attributes ) {\n\n\t\t\t\t\t\tif ( xml.attributes.length > 0 ) {\n\n\t\t\t\t\t\t\tobj[ 'attributes' ] = {};\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < xml.attributes.length; j ++ ) {\n\n\t\t\t\t\t\t\t\tconst attribute = xml.attributes.item( j );\n\t\t\t\t\t\t\t\tobj[ 'attributes' ][ attribute.nodeName ] = attribute.nodeValue.trim();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( xml.nodeType === 3 ) { // text\n\n\t\t\t\t\tobj = xml.nodeValue.trim();\n\n\t\t\t\t}\n\n\t\t\t\t// do children\n\t\t\t\tif ( xml.hasChildNodes() ) {\n\n\t\t\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\t\t\tconst item = xml.childNodes.item( i );\n\t\t\t\t\t\tconst nodeName = item.nodeName;\n\n\t\t\t\t\t\tif ( typeof obj[ nodeName ] === 'undefined' ) {\n\n\t\t\t\t\t\t\tconst tmp = xmlToJson( item );\n\n\t\t\t\t\t\t\tif ( tmp !== '' ) {\n\n\t\t\t\t\t\t\t\tif ( Array.isArray( tmp[ '#text' ] ) ) {\n\n\t\t\t\t\t\t\t\t\ttmp[ '#text' ] = tmp[ '#text' ][ 0 ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tobj[ nodeName ] = tmp;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( typeof obj[ nodeName ].push === 'undefined' ) {\n\n\t\t\t\t\t\t\t\tconst old = obj[ nodeName ];\n\t\t\t\t\t\t\t\tobj[ nodeName ] = [ old ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst tmp = xmlToJson( item );\n\n\t\t\t\t\t\t\tif ( tmp !== '' ) {\n\n\t\t\t\t\t\t\t\tif ( Array.isArray( tmp[ '#text' ] ) ) {\n\n\t\t\t\t\t\t\t\t\ttmp[ '#text' ] = tmp[ '#text' ][ 0 ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tobj[ nodeName ].push( tmp );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\n\t\t\t}\n\n\t\t\t// Taken from Base64-js\n\t\t\tfunction Base64toByteArray( b64 ) {\n\n\t\t\t\tconst Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\n\t\t\t\tconst revLookup = [];\n\t\t\t\tconst code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n\t\t\t\tfor ( let i = 0, l = code.length; i < l; ++ i ) {\n\n\t\t\t\t\trevLookup[ code.charCodeAt( i ) ] = i;\n\n\t\t\t\t}\n\n\t\t\t\trevLookup[ '-'.charCodeAt( 0 ) ] = 62;\n\t\t\t\trevLookup[ '_'.charCodeAt( 0 ) ] = 63;\n\n\t\t\t\tconst len = b64.length;\n\n\t\t\t\tif ( len % 4 > 0 ) {\n\n\t\t\t\t\tthrow new Error( 'Invalid string. Length must be a multiple of 4' );\n\n\t\t\t\t}\n\n\t\t\t\tconst placeHolders = b64[ len - 2 ] === '=' ? 2 : b64[ len - 1 ] === '=' ? 1 : 0;\n\t\t\t\tconst arr = new Arr( len * 3 / 4 - placeHolders );\n\t\t\t\tconst l = placeHolders > 0 ? len - 4 : len;\n\n\t\t\t\tlet L = 0;\n\t\t\t\tlet i, j;\n\n\t\t\t\tfor ( i = 0, j = 0; i < l; i += 4, j += 3 ) {\n\n\t\t\t\t\tconst tmp = ( revLookup[ b64.charCodeAt( i ) ] << 18 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] << 12 ) | ( revLookup[ b64.charCodeAt( i + 2 ) ] << 6 ) | revLookup[ b64.charCodeAt( i + 3 ) ];\n\t\t\t\t\tarr[ L ++ ] = ( tmp & 0xFF0000 ) >> 16;\n\t\t\t\t\tarr[ L ++ ] = ( tmp & 0xFF00 ) >> 8;\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t}\n\n\t\t\t\tif ( placeHolders === 2 ) {\n\n\t\t\t\t\tconst tmp = ( revLookup[ b64.charCodeAt( i ) ] << 2 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] >> 4 );\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t} else if ( placeHolders === 1 ) {\n\n\t\t\t\t\tconst tmp = ( revLookup[ b64.charCodeAt( i ) ] << 10 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] << 4 ) | ( revLookup[ b64.charCodeAt( i + 2 ) ] >> 2 );\n\t\t\t\t\tarr[ L ++ ] = ( tmp >> 8 ) & 0xFF;\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t}\n\n\t\t\t\treturn arr;\n\n\t\t\t}\n\n\t\t\tfunction parseDataArray( ele, compressed ) {\n\n\t\t\t\tlet numBytes = 0;\n\n\t\t\t\tif ( json.attributes.header_type === 'UInt64' ) {\n\n\t\t\t\t\tnumBytes = 8;\n\n\t\t\t\t}\telse if ( json.attributes.header_type === 'UInt32' ) {\n\n\t\t\t\t\tnumBytes = 4;\n\n\t\t\t\t}\n\n\t\t\t\tlet txt, content;\n\n\t\t\t\t// Check the format\n\t\t\t\tif ( ele.attributes.format === 'binary' && compressed ) {\n\n\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\ttxt = new Float32Array( );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' || ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\ttxt = new Int32Array( );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// VTP data with the header has the following structure:\n\t\t\t\t\t// [#blocks][#u-size][#p-size][#c-size-1][#c-size-2]...[#c-size-#blocks][DATA]\n\t\t\t\t\t//\n\t\t\t\t\t// Each token is an integer value whose type is specified by \"header_type\" at the top of the file (UInt32 if no type specified). The token meanings are:\n\t\t\t\t\t// [#blocks] = Number of blocks\n\t\t\t\t\t// [#u-size] = Block size before compression\n\t\t\t\t\t// [#p-size] = Size of last partial block (zero if it not needed)\n\t\t\t\t\t// [#c-size-i] = Size in bytes of block i after compression\n\t\t\t\t\t//\n\t\t\t\t\t// The [DATA] portion stores contiguously every block appended together. The offset from the beginning of the data section to the beginning of a block is\n\t\t\t\t\t// computed by summing the compressed block sizes from preceding blocks according to the header.\n\n\t\t\t\t\tconst textNode = ele[ '#text' ];\n\t\t\t\t\tconst rawData = Array.isArray( textNode ) ? textNode[ 0 ] : textNode;\n\n\t\t\t\t\tconst byteData = Base64toByteArray( rawData );\n\n\t\t\t\t\t// Each data point consists of 8 bits regardless of the header type\n\t\t\t\t\tconst dataPointSize = 8;\n\n\t\t\t\t\tlet blocks = byteData[ 0 ];\n\t\t\t\t\tfor ( let i = 1; i < numBytes - 1; i ++ ) {\n\n\t\t\t\t\t\tblocks = blocks | ( byteData[ i ] << ( i * dataPointSize ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet headerSize = ( blocks + 3 ) * numBytes;\n\t\t\t\t\tconst padding = ( ( headerSize % 3 ) > 0 ) ? 3 - ( headerSize % 3 ) : 0;\n\t\t\t\t\theaderSize = headerSize + padding;\n\n\t\t\t\t\tconst dataOffsets = [];\n\t\t\t\t\tlet currentOffset = headerSize;\n\t\t\t\t\tdataOffsets.push( currentOffset );\n\n\t\t\t\t\t// Get the blocks sizes after the compression.\n\t\t\t\t\t// There are three blocks before c-size-i, so we skip 3*numBytes\n\t\t\t\t\tconst cSizeStart = 3 * numBytes;\n\n\t\t\t\t\tfor ( let i = 0; i < blocks; i ++ ) {\n\n\t\t\t\t\t\tlet currentBlockSize = byteData[ i * numBytes + cSizeStart ];\n\n\t\t\t\t\t\tfor ( let j = 1; j < numBytes - 1; j ++ ) {\n\n\t\t\t\t\t\t\tcurrentBlockSize = currentBlockSize | ( byteData[ i * numBytes + cSizeStart + j ] << ( j * dataPointSize ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentOffset = currentOffset + currentBlockSize;\n\t\t\t\t\t\tdataOffsets.push( currentOffset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0; i < dataOffsets.length - 1; i ++ ) {\n\n\t\t\t\t\t\tconst data = fflate.unzlibSync( byteData.slice( dataOffsets[ i ], dataOffsets[ i + 1 ] ) );\n\t\t\t\t\t\tcontent = data.buffer;\n\n\t\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\t\tcontent = new Float32Array( content );\n\t\t\t\t\t\t\ttxt = Float32Concat( txt, content );\n\n\t\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' || ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\t\tcontent = new Int32Array( content );\n\t\t\t\t\t\t\ttxt = Int32Concat( txt, content );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete ele[ '#text' ];\n\n\t\t\t\t\tif ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\tif ( ele.attributes.format === 'binary' ) {\n\n\t\t\t\t\t\t\ttxt = txt.filter( function ( el, idx ) {\n\n\t\t\t\t\t\t\t\tif ( idx % 2 !== 1 ) return true;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ele.attributes.format === 'binary' && ! compressed ) {\n\n\t\t\t\t\t\tcontent = Base64toByteArray( ele[ '#text' ] );\n\n\t\t\t\t\t\t// VTP data for the uncompressed case has the following structure:\n\t\t\t\t\t\t// [#bytes][DATA]\n\t\t\t\t\t\t// where \"[#bytes]\" is an integer value specifying the number of bytes in the block of data following it.\n\t\t\t\t\t\tcontent = content.slice( numBytes ).buffer;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ele[ '#text' ] ) {\n\n\t\t\t\t\t\t\tcontent = ele[ '#text' ].split( /\\s+/ ).filter( function ( el ) {\n\n\t\t\t\t\t\t\t\tif ( el !== '' ) return el;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tcontent = new Int32Array( 0 ).buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete ele[ '#text' ];\n\n\t\t\t\t\t// Get the content and optimize it\n\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\ttxt = new Float32Array( content );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' ) {\n\n\t\t\t\t\t\ttxt = new Int32Array( content );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\ttxt = new Int32Array( content );\n\n\t\t\t\t\t\tif ( ele.attributes.format === 'binary' ) {\n\n\t\t\t\t\t\t\ttxt = txt.filter( function ( el, idx ) {\n\n\t\t\t\t\t\t\t\tif ( idx % 2 !== 1 ) return true;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} // endif ( ele.attributes.format === 'binary' && compressed )\n\n\t\t\t\treturn txt;\n\n\t\t\t}\n\n\t\t\t// Main part\n\t\t\t// Get Dom\n\t\t\tconst dom = new DOMParser().parseFromString( stringFile, 'application/xml' );\n\n\t\t\t// Get the doc\n\t\t\tconst doc = dom.documentElement;\n\t\t\t// Convert to json\n\t\t\tconst json = xmlToJson( doc );\n\t\t\tlet points = [];\n\t\t\tlet normals = [];\n\t\t\tlet indices = [];\n\n\t\t\tif ( json.AppendedData ) {\n\n\t\t\t\tconst appendedData = json.AppendedData[ '#text' ].slice( 1 );\n\t\t\t\tconst piece = json.PolyData.Piece;\n\n\t\t\t\tconst sections = [ 'PointData', 'CellData', 'Points', 'Verts', 'Lines', 'Strips', 'Polys' ];\n\t\t\t\tlet sectionIndex = 0;\n\n\t\t\t\tconst offsets = sections.map( s => {\n\n\t\t\t\t\tconst sect = piece[ s ];\n\n\t\t\t\t\tif ( sect && sect.DataArray ) {\n\n\t\t\t\t\t\tconst arr = Array.isArray( sect.DataArray ) ? sect.DataArray : [ sect.DataArray ];\n\n\t\t\t\t\t\treturn arr.map( a => a.attributes.offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\n\t\t\t\t} ).flat();\n\n\t\t\t\tfor ( const sect of sections ) {\n\n\t\t\t\t\tconst section = piece[ sect ];\n\n\t\t\t\t\tif ( section && section.DataArray ) {\n\n\t\t\t\t\t\tif ( Array.isArray( section.DataArray ) ) {\n\n\t\t\t\t\t\t\tfor ( const sectionEle of section.DataArray ) {\n\n\t\t\t\t\t\t\t\tsectionEle[ '#text' ] = appendedData.slice( offsets[ sectionIndex ], offsets[ sectionIndex + 1 ] );\n\t\t\t\t\t\t\t\tsectionEle.attributes.format = 'binary';\n\t\t\t\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tsection.DataArray[ '#text' ] = appendedData.slice( offsets[ sectionIndex ], offsets[ sectionIndex + 1 ] );\n\t\t\t\t\t\t\tsection.DataArray.attributes.format = 'binary';\n\t\t\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.PolyData ) {\n\n\t\t\t\tconst piece = json.PolyData.Piece;\n\t\t\t\tconst compressed = json.attributes.hasOwnProperty( 'compressor' );\n\n\t\t\t\t// Can be optimized\n\t\t\t\t// Loop through the sections\n\t\t\t\tconst sections = [ 'PointData', 'Points', 'Strips', 'Polys' ];// +['CellData', 'Verts', 'Lines'];\n\t\t\t\tlet sectionIndex = 0;\n\t\t\t\tconst numberOfSections = sections.length;\n\n\t\t\t\twhile ( sectionIndex < numberOfSections ) {\n\n\t\t\t\t\tconst section = piece[ sections[ sectionIndex ] ];\n\n\t\t\t\t\t// If it has a DataArray in it\n\n\t\t\t\t\tif ( section && section.DataArray ) {\n\n\t\t\t\t\t\t// Depending on the number of DataArrays\n\n\t\t\t\t\t\tlet arr;\n\n\t\t\t\t\t\tif ( Array.isArray( section.DataArray ) ) {\n\n\t\t\t\t\t\t\tarr = section.DataArray;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tarr = [ section.DataArray ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet dataArrayIndex = 0;\n\t\t\t\t\t\tconst numberOfDataArrays = arr.length;\n\n\t\t\t\t\t\twhile ( dataArrayIndex < numberOfDataArrays ) {\n\n\t\t\t\t\t\t\t// Parse the DataArray\n\t\t\t\t\t\t\tif ( ( '#text' in arr[ dataArrayIndex ] ) && ( arr[ dataArrayIndex ][ '#text' ].length > 0 ) ) {\n\n\t\t\t\t\t\t\t\tarr[ dataArrayIndex ].text = parseDataArray( arr[ dataArrayIndex ], compressed );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdataArrayIndex ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch ( sections[ sectionIndex ] ) {\n\n\t\t\t\t\t\t\t// if iti is point data\n\t\t\t\t\t\t\tcase 'PointData':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfPoints = parseInt( piece.attributes.NumberOfPoints );\n\t\t\t\t\t\t\t\t\tconst normalsName = section.attributes.Normals;\n\n\t\t\t\t\t\t\t\t\tif ( numberOfPoints > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, len = arr.length; i < len; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( normalsName === arr[ i ].attributes.Name ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst components = arr[ i ].attributes.NumberOfComponents;\n\t\t\t\t\t\t\t\t\t\t\t\tnormals = new Float32Array( numberOfPoints * components );\n\t\t\t\t\t\t\t\t\t\t\t\tnormals.set( arr[ i ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is points\n\t\t\t\t\t\t\tcase 'Points':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfPoints = parseInt( piece.attributes.NumberOfPoints );\n\n\t\t\t\t\t\t\t\t\tif ( numberOfPoints > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tconst components = section.DataArray.attributes.NumberOfComponents;\n\t\t\t\t\t\t\t\t\t\tpoints = new Float32Array( numberOfPoints * components );\n\t\t\t\t\t\t\t\t\t\tpoints.set( section.DataArray.text, 0 );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is strips\n\t\t\t\t\t\t\tcase 'Strips':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfStrips = parseInt( piece.attributes.NumberOfStrips );\n\n\t\t\t\t\t\t\t\t\tif ( numberOfStrips > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tconst connectivity = new Int32Array( section.DataArray[ 0 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconst offset = new Int32Array( section.DataArray[ 1 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconnectivity.set( section.DataArray[ 0 ].text, 0 );\n\t\t\t\t\t\t\t\t\t\toffset.set( section.DataArray[ 1 ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\tconst size = numberOfStrips + connectivity.length;\n\t\t\t\t\t\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\n\t\t\t\t\t\t\t\t\t\tlet indicesIndex = 0;\n\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, len = numberOfStrips; i < len; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst strip = [];\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( let s = 0, len1 = offset[ i ], len0 = 0; s < len1 - len0; s ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tstrip.push( connectivity[ s ] );\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( i > 0 ) len0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( let j = 0, len1 = offset[ i ], len0 = 0; j < len1 - len0 - 2; j ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( j % 2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( i > 0 ) len0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is polys\n\t\t\t\t\t\t\tcase 'Polys':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfPolys = parseInt( piece.attributes.NumberOfPolys );\n\n\t\t\t\t\t\t\t\t\tif ( numberOfPolys > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tconst connectivity = new Int32Array( section.DataArray[ 0 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconst offset = new Int32Array( section.DataArray[ 1 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconnectivity.set( section.DataArray[ 0 ].text, 0 );\n\t\t\t\t\t\t\t\t\t\toffset.set( section.DataArray[ 1 ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\tconst size = numberOfPolys + connectivity.length;\n\t\t\t\t\t\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfPolys );\n\t\t\t\t\t\t\t\t\t\tlet indicesIndex = 0, connectivityIndex = 0;\n\t\t\t\t\t\t\t\t\t\tlet i = 0, len0 = 0;\n\t\t\t\t\t\t\t\t\t\tconst len = numberOfPolys;\n\n\t\t\t\t\t\t\t\t\t\twhile ( i < len ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst poly = [];\n\t\t\t\t\t\t\t\t\t\t\tlet s = 0;\n\t\t\t\t\t\t\t\t\t\t\tconst len1 = offset[ i ];\n\n\t\t\t\t\t\t\t\t\t\t\twhile ( s < len1 - len0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tpoly.push( connectivity[ connectivityIndex ++ ] );\n\t\t\t\t\t\t\t\t\t\t\t\ts ++;\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tlet j = 1;\n\n\t\t\t\t\t\t\t\t\t\t\twhile ( j < len1 - len0 - 1 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ 0 ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ j + 1 ];\n\t\t\t\t\t\t\t\t\t\t\t\tj ++;\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\ti ++;\n\t\t\t\t\t\t\t\t\t\t\tlen0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst geometry = new BufferGeometry();\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( points, 3 ) );\n\n\t\t\t\tif ( normals.length === points.length ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn geometry;\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Unsupported DATASET type' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst textDecoder = new TextDecoder();\n\n\t\t// get the 5 first lines of the files to check if there is the key word binary\n\t\tconst meta = textDecoder.decode( new Uint8Array( data, 0, 250 ) ).split( '\\n' );\n\n\t\tif ( meta[ 0 ].indexOf( 'xml' ) !== - 1 ) {\n\n\t\t\treturn parseXML( textDecoder.decode( data ) );\n\n\t\t} else if ( meta[ 2 ].includes( 'ASCII' ) ) {\n\n\t\t\treturn parseASCII( textDecoder.decode( data ) );\n\n\t\t} else {\n\n\t\t\treturn parseBinary( data );\n\n\t\t}\n\n\t}\n\n}\n\nexport { VTKLoader };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader\n} from 'three';\n\nclass XYZLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst lines = text.split( '\\n' );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\t\tconst color = new Color();\n\n\t\tfor ( let line of lines ) {\n\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.charAt( 0 ) === '#' ) continue; // skip comments\n\n\t\t\tconst lineValues = line.split( /\\s+/ );\n\n\t\t\tif ( lineValues.length === 3 ) {\n\n\t\t\t\t// XYZ\n\n\t\t\t\tvertices.push( parseFloat( lineValues[ 0 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 1 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( lineValues.length === 6 ) {\n\n\t\t\t\t// XYZRGB\n\n\t\t\t\tvertices.push( parseFloat( lineValues[ 0 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 1 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 2 ] ) );\n\n\t\t\t\tconst r = parseFloat( lineValues[ 3 ] ) / 255;\n\t\t\t\tconst g = parseFloat( lineValues[ 4 ] ) / 255;\n\t\t\t\tconst b = parseFloat( lineValues[ 5 ] ) / 255;\n\n\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\tif ( colors.length > 0 ) {\n\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nexport { XYZLoader };\n", "/**\n * MeshGouraudMaterial\n *\n * Lambert illumination model with Gouraud (per-vertex) shading\n *\n */\n\nimport { UniformsUtils, UniformsLib, ShaderMaterial, Color, MultiplyOperation } from 'three';\n\nconst GouraudShader = {\n\n\tname: 'GouraudShader',\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.specularmap,\n\t\tUniformsLib.envmap,\n\t\tUniformsLib.aomap,\n\t\tUniformsLib.lightmap,\n\t\tUniformsLib.emissivemap,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.lights,\n\t\t{\n\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t}\n\t] ),\n\n\tvertexShader: /* glsl */`\n\n\t\t#define GOURAUD\n\n\t\tvarying vec3 vLightFront;\n\t\tvarying vec3 vIndirectFront;\n\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvarying vec3 vLightBack;\n\t\t\tvarying vec3 vIndirectBack;\n\t\t#endif\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\n\t\t\t// inlining legacy \n\n\t\t\tvec3 diffuse = vec3( 1.0 );\n\n\t\t\tvec3 geometryPosition = mvPosition.xyz;\n\t\t\tvec3 geometryNormal = normalize( transformedNormal );\n\t\t\tvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\n\n\t\t\tvec3 backGeometryNormal = - geometryNormal;\n\n\t\t\tvLightFront = vec3( 0.0 );\n\t\t\tvIndirectFront = vec3( 0.0 );\n\t\t\t#ifdef DOUBLE_SIDED\n\t\t\t\tvLightBack = vec3( 0.0 );\n\t\t\t\tvIndirectBack = vec3( 0.0 );\n\t\t\t#endif\n\n\t\t\tIncidentLight directLight;\n\t\t\tfloat dotNL;\n\t\t\tvec3 directLightColor_Diffuse;\n\n\t\t\tvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\n\n\t\t\t#if defined( USE_LIGHT_PROBES )\n\n\t\t\t\tvIndirectFront += getLightProbeIrradiance( lightProbe, geometryNormal );\n\n\t\t\t#endif\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\n\t\t\t\t#if defined( USE_LIGHT_PROBES )\n\n\t\t\t\t\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometryNormal );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\t#if NUM_POINT_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\t\t\t\tgetPointLightInfo( pointLights[ i ], geometryPosition, directLight );\n\n\t\t\t\t\tdotNL = dot( geometryNormal, directLight.direction );\n\t\t\t\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\t\t\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#if NUM_SPOT_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\t\t\t\tgetSpotLightInfo( spotLights[ i ], geometryPosition, directLight );\n\n\t\t\t\t\tdotNL = dot( geometryNormal, directLight.direction );\n\t\t\t\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\t\t\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#endif\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#if NUM_DIR_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\t\t\tgetDirectionalLightInfo( directionalLights[ i ], directLight );\n\n\t\t\t\t\tdotNL = dot( geometryNormal, directLight.direction );\n\t\t\t\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\t\t\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#if NUM_HEMI_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\t\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometryNormal );\n\n\t\t\t\t\t#endif\n\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define GOURAUD\n\n\t\tuniform vec3 diffuse;\n\t\tuniform vec3 emissive;\n\t\tuniform float opacity;\n\n\t\tvarying vec3 vLightFront;\n\t\tvarying vec3 vIndirectFront;\n\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvarying vec3 vLightBack;\n\t\t\tvarying vec3 vIndirectBack;\n\t\t#endif\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t\t\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t\t\tvec3 totalEmissiveRadiance = emissive;\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t// accumulation\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\n\t\t\t#else\n\n\t\t\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_LIGHTMAP\n\n\t\t\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\t\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\t\t\treflectedLight.indirectDiffuse += lightMapIrradiance;\n\n\t\t\t#endif\n\n\t\t\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\n\t\t\t#else\n\n\t\t\t\treflectedLight.directDiffuse = vLightFront;\n\n\t\t\t#endif\n\n\t\t\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\n\t\t\t// modulation\n\n\t\t\t#include \n\n\t\t\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\n//\n\nclass MeshGouraudMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshGouraudMaterial = true;\n\n\t\tthis.type = 'MeshGouraudMaterial';\n\n\t\t//this.color = new THREE.Color( 0xffffff ); // diffuse\n\n\t\t//this.map = null;\n\n\t\t//this.lightMap = null;\n\t\t//this.lightMapIntensity = 1.0;\n\n\t\t//this.aoMap = null;\n\t\t//this.aoMapIntensity = 1.0;\n\n\t\t//this.emissive = new THREE.Color( 0x000000 );\n\t\t//this.emissiveIntensity = 1.0;\n\t\t//this.emissiveMap = null;\n\n\t\t//this.specularMap = null;\n\n\t\t//this.alphaMap = null;\n\n\t\t//this.envMap = null;\n\t\tthis.combine = MultiplyOperation; // combine has no uniform\n\t\t//this.reflectivity = 1;\n\t\t//this.refractionRatio = 0.98;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = true; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tconst shader = GouraudShader;\n\n\t\tthis.defines = Object.assign( {}, shader.defines );\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\t\tthis.vertexShader = shader.vertexShader;\n\t\tthis.fragmentShader = shader.fragmentShader;\n\n\t\tconst exposePropertyNames = [\n\t\t\t'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity',\n\t\t\t'emissive', 'emissiveIntensity', 'emissiveMap', 'specularMap', 'alphaMap',\n\t\t\t'envMap', 'reflectivity', 'refractionRatio', 'opacity', 'diffuse'\n\t\t];\n\n\t\tfor ( const propertyName of exposePropertyNames ) {\n\n\t\t\tObject.defineProperty( this, propertyName, {\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms[ propertyName ].value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms[ propertyName ].value = value;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\tObject.defineProperty( this, 'color', Object.getOwnPropertyDescriptor( this, 'diffuse' ) );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshGouraudMaterial };\n", "import {\n\tVector3\n} from 'three';\n\nclass Capsule {\n\n\tconstructor( start = new Vector3( 0, 0, 0 ), end = new Vector3( 0, 1, 0 ), radius = 1 ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.radius = radius;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Capsule( this.start.clone(), this.end.clone(), this.radius );\n\n\t}\n\n\tset( start, end, radius ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\t\tthis.radius = radius;\n\n\t}\n\n\tcopy( capsule ) {\n\n\t\tthis.start.copy( capsule.start );\n\t\tthis.end.copy( capsule.end );\n\t\tthis.radius = capsule.radius;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.copy( this.end ).add( this.start ).multiplyScalar( 0.5 );\n\n\t}\n\n\ttranslate( v ) {\n\n\t\tthis.start.add( v );\n\t\tthis.end.add( v );\n\n\t}\n\n\tcheckAABBAxis( p1x, p1y, p2x, p2y, minx, maxx, miny, maxy, radius ) {\n\n\t\treturn (\n\t\t\t( minx - p1x < radius || minx - p2x < radius ) &&\n\t\t\t( p1x - maxx < radius || p2x - maxx < radius ) &&\n\t\t\t( miny - p1y < radius || miny - p2y < radius ) &&\n\t\t\t( p1y - maxy < radius || p2y - maxy < radius )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn (\n\t\t\tthis.checkAABBAxis(\n\t\t\t\tthis.start.x, this.start.y, this.end.x, this.end.y,\n\t\t\t\tbox.min.x, box.max.x, box.min.y, box.max.y,\n\t\t\t\tthis.radius ) &&\n\t\t\tthis.checkAABBAxis(\n\t\t\t\tthis.start.x, this.start.z, this.end.x, this.end.z,\n\t\t\t\tbox.min.x, box.max.x, box.min.z, box.max.z,\n\t\t\t\tthis.radius ) &&\n\t\t\tthis.checkAABBAxis(\n\t\t\t\tthis.start.y, this.start.z, this.end.y, this.end.z,\n\t\t\t\tbox.min.y, box.max.y, box.min.z, box.max.z,\n\t\t\t\tthis.radius )\n\t\t);\n\n\t}\n\n}\n\nexport { Capsule };\n", "import { MathUtils } from 'three';\n\nconst _hsl = {};\n\nclass ColorConverter {\n\n\tstatic setHSV( color, h, s, v ) {\n\n\t\t// https://gist.github.com/xpansive/1337890#file-index-js\n\n\t\th = MathUtils.euclideanModulo( h, 1 );\n\t\ts = MathUtils.clamp( s, 0, 1 );\n\t\tv = MathUtils.clamp( v, 0, 1 );\n\n\t\treturn color.setHSL( h, ( s * v ) / ( ( h = ( 2 - s ) * v ) < 1 ? h : ( 2 - h ) ), h * 0.5 );\n\n\t}\n\n\tstatic getHSV( color, target ) {\n\n\t\tcolor.getHSL( _hsl );\n\n\t\t// based on https://gist.github.com/xpansive/1337890#file-index-js\n\t\t_hsl.s *= ( _hsl.l < 0.5 ) ? _hsl.l : ( 1 - _hsl.l );\n\n\t\ttarget.h = _hsl.h;\n\t\ttarget.s = 2 * _hsl.s / ( _hsl.l + _hsl.s );\n\t\ttarget.v = _hsl.l + _hsl.s;\n\n\t\treturn target;\n\n\t}\n\n}\n\nexport { ColorConverter };\n", "// https://cs.nyu.edu/~perlin/noise/\n\nconst _p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,\n\t 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,\n\t 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,\n\t 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208,\n\t 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5,\n\t 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119,\n\t 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,\n\t 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,\n\t 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205,\n\t 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 ];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_p[ 256 + i ] = _p[ i ];\n\n}\n\nfunction fade( t ) {\n\n\treturn t * t * t * ( t * ( t * 6 - 15 ) + 10 );\n\n}\n\nfunction lerp( t, a, b ) {\n\n\treturn a + t * ( b - a );\n\n}\n\nfunction grad( hash, x, y, z ) {\n\n\tconst h = hash & 15;\n\tconst u = h < 8 ? x : y, v = h < 4 ? y : h == 12 || h == 14 ? x : z;\n\treturn ( ( h & 1 ) == 0 ? u : - u ) + ( ( h & 2 ) == 0 ? v : - v );\n\n}\n\nclass ImprovedNoise {\n\n\tnoise( x, y, z ) {\n\n\t\tconst floorX = Math.floor( x ), floorY = Math.floor( y ), floorZ = Math.floor( z );\n\n\t\tconst X = floorX & 255, Y = floorY & 255, Z = floorZ & 255;\n\n\t\tx -= floorX;\n\t\ty -= floorY;\n\t\tz -= floorZ;\n\n\t\tconst xMinus1 = x - 1, yMinus1 = y - 1, zMinus1 = z - 1;\n\n\t\tconst u = fade( x ), v = fade( y ), w = fade( z );\n\n\t\tconst A = _p[ X ] + Y, AA = _p[ A ] + Z, AB = _p[ A + 1 ] + Z, B = _p[ X + 1 ] + Y, BA = _p[ B ] + Z, BB = _p[ B + 1 ] + Z;\n\n\t\treturn lerp( w, lerp( v, lerp( u, grad( _p[ AA ], x, y, z ),\n\t\t\tgrad( _p[ BA ], xMinus1, y, z ) ),\n\t\tlerp( u, grad( _p[ AB ], x, yMinus1, z ),\n\t\t\tgrad( _p[ BB ], xMinus1, yMinus1, z ) ) ),\n\t\tlerp( v, lerp( u, grad( _p[ AA + 1 ], x, y, zMinus1 ),\n\t\t\tgrad( _p[ BA + 1 ], xMinus1, y, zMinus1 ) ),\n\t\tlerp( u, grad( _p[ AB + 1 ], x, yMinus1, zMinus1 ),\n\t\t\tgrad( _p[ BB + 1 ], xMinus1, yMinus1, zMinus1 ) ) ) );\n\n\t}\n\n}\n\nexport { ImprovedNoise };\n", "import {\n\tColor,\n\tLinearSRGBColorSpace,\n\tMathUtils\n} from 'three';\n\nclass Lut {\n\n \tconstructor( colormap, count = 32 ) {\n\n\t\tthis.isLut = true;\n\n\t\tthis.lut = [];\n\t\tthis.map = [];\n\t\tthis.n = 0;\n\t\tthis.minV = 0;\n\t\tthis.maxV = 1;\n\n\t\tthis.setColorMap( colormap, count );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value.isLut === true ) {\n\n\t\t\tthis.copy( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetMin( min ) {\n\n\t\tthis.minV = min;\n\n\t\treturn this;\n\n\t}\n\n\tsetMax( max ) {\n\n\t\tthis.maxV = max;\n\n\t\treturn this;\n\n\t}\n\n\tsetColorMap( colormap, count = 32 ) {\n\n\t\tthis.map = ColorMapKeywords[ colormap ] || ColorMapKeywords.rainbow;\n\t\tthis.n = count;\n\n\t\tconst step = 1.0 / this.n;\n\t\tconst minColor = new Color();\n\t\tconst maxColor = new Color();\n\n\t\tthis.lut.length = 0;\n\n\t\t// sample at 0\n\n\t\tthis.lut.push( new Color( this.map[ 0 ][ 1 ] ) );\n\n\t\t// sample at 1/n, ..., (n-1)/n\n\n\t\tfor ( let i = 1; i < count; i ++ ) {\n\n\t\t\tconst alpha = i * step;\n\n\t\t\tfor ( let j = 0; j < this.map.length - 1; j ++ ) {\n\n\t\t\t\tif ( alpha > this.map[ j ][ 0 ] && alpha <= this.map[ j + 1 ][ 0 ] ) {\n\n\t\t\t\t\tconst min = this.map[ j ][ 0 ];\n\t\t\t\t\tconst max = this.map[ j + 1 ][ 0 ];\n\n\t\t\t\t\tminColor.setHex( this.map[ j ][ 1 ], LinearSRGBColorSpace );\n\t\t\t\t\tmaxColor.setHex( this.map[ j + 1 ][ 1 ], LinearSRGBColorSpace );\n\n\t\t\t\t\tconst color = new Color().lerpColors( minColor, maxColor, ( alpha - min ) / ( max - min ) );\n\n\t\t\t\t\tthis.lut.push( color );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// sample at 1\n\n\t\tthis.lut.push( new Color( this.map[ this.map.length - 1 ][ 1 ] ) );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( lut ) {\n\n\t\tthis.lut = lut.lut;\n\t\tthis.map = lut.map;\n\t\tthis.n = lut.n;\n\t\tthis.minV = lut.minV;\n\t\tthis.maxV = lut.maxV;\n\n\t\treturn this;\n\n\t}\n\n\tgetColor( alpha ) {\n\n\t\talpha = MathUtils.clamp( alpha, this.minV, this.maxV );\n\n\t\talpha = ( alpha - this.minV ) / ( this.maxV - this.minV );\n\n\t\tconst colorPosition = Math.round( alpha * this.n );\n\n\t\treturn this.lut[ colorPosition ];\n\n\t}\n\n\taddColorMap( name, arrayOfColors ) {\n\n\t\tColorMapKeywords[ name ] = arrayOfColors;\n\n\t\treturn this;\n\n\t}\n\n\tcreateCanvas() {\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = 1;\n\t\tcanvas.height = this.n;\n\n\t\tthis.updateCanvas( canvas );\n\n\t\treturn canvas;\n\n\t}\n\n\tupdateCanvas( canvas ) {\n\n\t\tconst ctx = canvas.getContext( '2d', { alpha: false } );\n\n\t\tconst imageData = ctx.getImageData( 0, 0, 1, this.n );\n\n\t\tconst data = imageData.data;\n\n\t\tlet k = 0;\n\n\t\tconst step = 1.0 / this.n;\n\n\t\tconst minColor = new Color();\n\t\tconst maxColor = new Color();\n\t\tconst finalColor = new Color();\n\n\t\tfor ( let i = 1; i >= 0; i -= step ) {\n\n\t\t\tfor ( let j = this.map.length - 1; j >= 0; j -- ) {\n\n\t\t\t\tif ( i < this.map[ j ][ 0 ] && i >= this.map[ j - 1 ][ 0 ] ) {\n\n\t\t\t\t\tconst min = this.map[ j - 1 ][ 0 ];\n\t\t\t\t\tconst max = this.map[ j ][ 0 ];\n\n\t\t\t\t\tminColor.setHex( this.map[ j - 1 ][ 1 ], LinearSRGBColorSpace );\n\t\t\t\t\tmaxColor.setHex( this.map[ j ][ 1 ], LinearSRGBColorSpace );\n\n\t\t\t\t\tfinalColor.lerpColors( minColor, maxColor, ( i - min ) / ( max - min ) );\n\n\t\t\t\t\tdata[ k * 4 ] = Math.round( finalColor.r * 255 );\n\t\t\t\t\tdata[ k * 4 + 1 ] = Math.round( finalColor.g * 255 );\n\t\t\t\t\tdata[ k * 4 + 2 ] = Math.round( finalColor.b * 255 );\n\t\t\t\t\tdata[ k * 4 + 3 ] = 255;\n\n\t\t\t\t\tk += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tctx.putImageData( imageData, 0, 0 );\n\n\t\treturn canvas;\n\n\t}\n\n}\n\nconst ColorMapKeywords = {\n\n\t'rainbow': [[ 0.0, 0x0000FF ], [ 0.2, 0x00FFFF ], [ 0.5, 0x00FF00 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFF0000 ]],\n\t'cooltowarm': [[ 0.0, 0x3C4EC2 ], [ 0.2, 0x9BBCFF ], [ 0.5, 0xDCDCDC ], [ 0.8, 0xF6A385 ], [ 1.0, 0xB40426 ]],\n\t'blackbody': [[ 0.0, 0x000000 ], [ 0.2, 0x780000 ], [ 0.5, 0xE63200 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFFFFFF ]],\n\t'grayscale': [[ 0.0, 0x000000 ], [ 0.2, 0x404040 ], [ 0.5, 0x7F7F80 ], [ 0.8, 0xBFBFBF ], [ 1.0, 0xFFFFFF ]]\n\n};\n\nexport { Lut, ColorMapKeywords };\n", "import {\n\tTriangle,\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Utility class for sampling weighted random points on the surface of a mesh.\n *\n * Building the sampler is a one-time O(n) operation. Once built, any number of\n * random samples may be selected in O(logn) time. Memory usage is O(n).\n *\n * References:\n * - http://www.joesfer.com/?p=84\n * - https://stackoverflow.com/a/4322940/1314762\n */\n\nconst _face = new Triangle();\nconst _color = new Vector3();\nconst _uva = new Vector2(), _uvb = new Vector2(), _uvc = new Vector2();\n\nclass MeshSurfaceSampler {\n\n\tconstructor( mesh ) {\n\n\t\tthis.geometry = mesh.geometry;\n\t\tthis.randomFunction = Math.random;\n\n\t\tthis.indexAttribute = this.geometry.index;\n\t\tthis.positionAttribute = this.geometry.getAttribute( 'position' );\n\t\tthis.normalAttribute = this.geometry.getAttribute( 'normal' );\n\t\tthis.colorAttribute = this.geometry.getAttribute( 'color' );\n\t\tthis.uvAttribute = this.geometry.getAttribute( 'uv' );\n\t\tthis.weightAttribute = null;\n\n\t\tthis.distribution = null;\n\n\t}\n\n\tsetWeightAttribute( name ) {\n\n\t\tthis.weightAttribute = name ? this.geometry.getAttribute( name ) : null;\n\n\t\treturn this;\n\n\t}\n\n\tbuild() {\n\n\t\tconst indexAttribute = this.indexAttribute;\n\t\tconst positionAttribute = this.positionAttribute;\n\t\tconst weightAttribute = this.weightAttribute;\n\n\t\tconst totalFaces = indexAttribute ? ( indexAttribute.count / 3 ) : ( positionAttribute.count / 3 );\n\t\tconst faceWeights = new Float32Array( totalFaces );\n\n\t\t// Accumulate weights for each mesh face.\n\n\t\tfor ( let i = 0; i < totalFaces; i ++ ) {\n\n\t\t\tlet faceWeight = 1;\n\n\t\t\tlet i0 = 3 * i;\n\t\t\tlet i1 = 3 * i + 1;\n\t\t\tlet i2 = 3 * i + 2;\n\n\t\t\tif ( indexAttribute ) {\n\n\t\t\t\ti0 = indexAttribute.getX( i0 );\n\t\t\t\ti1 = indexAttribute.getX( i1 );\n\t\t\t\ti2 = indexAttribute.getX( i2 );\n\n\t\t\t}\n\n\t\t\tif ( weightAttribute ) {\n\n\t\t\t\tfaceWeight = weightAttribute.getX( i0 )\n\t\t\t\t\t+ weightAttribute.getX( i1 )\n\t\t\t\t\t+ weightAttribute.getX( i2 );\n\n\t\t\t}\n\n\t\t\t_face.a.fromBufferAttribute( positionAttribute, i0 );\n\t\t\t_face.b.fromBufferAttribute( positionAttribute, i1 );\n\t\t\t_face.c.fromBufferAttribute( positionAttribute, i2 );\n\t\t\tfaceWeight *= _face.getArea();\n\n\t\t\tfaceWeights[ i ] = faceWeight;\n\n\t\t}\n\n\t\t// Store cumulative total face weights in an array, where weight index\n\t\t// corresponds to face index.\n\n\t\tconst distribution = new Float32Array( totalFaces );\n\t\tlet cumulativeTotal = 0;\n\n\t\tfor ( let i = 0; i < totalFaces; i ++ ) {\n\n\t\t\tcumulativeTotal += faceWeights[ i ];\n\t\t\tdistribution[ i ] = cumulativeTotal;\n\n\t\t}\n\n\t\tthis.distribution = distribution;\n\t\treturn this;\n\n\t}\n\n\tsetRandomGenerator( randomFunction ) {\n\n\t\tthis.randomFunction = randomFunction;\n\t\treturn this;\n\n\t}\n\n\tsample( targetPosition, targetNormal, targetColor, targetUV ) {\n\n\t\tconst faceIndex = this.sampleFaceIndex();\n\t\treturn this.sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV );\n\n\t}\n\n\tsampleFaceIndex() {\n\n\t\tconst cumulativeTotal = this.distribution[ this.distribution.length - 1 ];\n\t\treturn this.binarySearch( this.randomFunction() * cumulativeTotal );\n\n\t}\n\n\tbinarySearch( x ) {\n\n\t\tconst dist = this.distribution;\n\t\tlet start = 0;\n\t\tlet end = dist.length - 1;\n\n\t\tlet index = - 1;\n\n\t\twhile ( start <= end ) {\n\n\t\t\tconst mid = Math.ceil( ( start + end ) / 2 );\n\n\t\t\tif ( mid === 0 || dist[ mid - 1 ] <= x && dist[ mid ] > x ) {\n\n\t\t\t\tindex = mid;\n\n\t\t\t\tbreak;\n\n\t\t\t} else if ( x < dist[ mid ] ) {\n\n\t\t\t\tend = mid - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstart = mid + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn index;\n\n\t}\n\n\tsampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV ) {\n\n\t\tlet u = this.randomFunction();\n\t\tlet v = this.randomFunction();\n\n\t\tif ( u + v > 1 ) {\n\n\t\t\tu = 1 - u;\n\t\t\tv = 1 - v;\n\n\t\t}\n\n\t\t// get the vertex attribute indices\n\t\tconst indexAttribute = this.indexAttribute;\n\t\tlet i0 = faceIndex * 3;\n\t\tlet i1 = faceIndex * 3 + 1;\n\t\tlet i2 = faceIndex * 3 + 2;\n\t\tif ( indexAttribute ) {\n\n\t\t\ti0 = indexAttribute.getX( i0 );\n\t\t\ti1 = indexAttribute.getX( i1 );\n\t\t\ti2 = indexAttribute.getX( i2 );\n\n\t\t}\n\n\t\t_face.a.fromBufferAttribute( this.positionAttribute, i0 );\n\t\t_face.b.fromBufferAttribute( this.positionAttribute, i1 );\n\t\t_face.c.fromBufferAttribute( this.positionAttribute, i2 );\n\n\t\ttargetPosition\n\t\t\t.set( 0, 0, 0 )\n\t\t\t.addScaledVector( _face.a, u )\n\t\t\t.addScaledVector( _face.b, v )\n\t\t\t.addScaledVector( _face.c, 1 - ( u + v ) );\n\n\t\tif ( targetNormal !== undefined ) {\n\n\t\t\tif ( this.normalAttribute !== undefined ) {\n\n\t\t\t\t_face.a.fromBufferAttribute( this.normalAttribute, i0 );\n\t\t\t\t_face.b.fromBufferAttribute( this.normalAttribute, i1 );\n\t\t\t\t_face.c.fromBufferAttribute( this.normalAttribute, i2 );\n\t\t\t\ttargetNormal.set( 0, 0, 0 ).addScaledVector( _face.a, u ).addScaledVector( _face.b, v ).addScaledVector( _face.c, 1 - ( u + v ) ).normalize();\n\n\t\t\t} else {\n\n\t\t\t\t_face.getNormal( targetNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( targetColor !== undefined && this.colorAttribute !== undefined ) {\n\n\t\t\t_face.a.fromBufferAttribute( this.colorAttribute, i0 );\n\t\t\t_face.b.fromBufferAttribute( this.colorAttribute, i1 );\n\t\t\t_face.c.fromBufferAttribute( this.colorAttribute, i2 );\n\n\t\t\t_color\n\t\t\t\t.set( 0, 0, 0 )\n\t\t\t\t.addScaledVector( _face.a, u )\n\t\t\t\t.addScaledVector( _face.b, v )\n\t\t\t\t.addScaledVector( _face.c, 1 - ( u + v ) );\n\n\t\t\ttargetColor.r = _color.x;\n\t\t\ttargetColor.g = _color.y;\n\t\t\ttargetColor.b = _color.z;\n\n\t\t}\n\n\t\tif ( targetUV !== undefined && this.uvAttribute !== undefined ) {\n\n\t\t\t_uva.fromBufferAttribute( this.uvAttribute, i0 );\n\t\t\t_uvb.fromBufferAttribute( this.uvAttribute, i1 );\n\t\t\t_uvc.fromBufferAttribute( this.uvAttribute, i2 );\n\t\t\ttargetUV.set( 0, 0 ).addScaledVector( _uva, u ).addScaledVector( _uvb, v ).addScaledVector( _uvc, 1 - ( u + v ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshSurfaceSampler };\n", "import {\n\tBox3,\n\tMathUtils,\n\tMatrix4,\n\tMatrix3,\n\tRay,\n\tVector3\n} from 'three';\n\n// module scope helper variables\n\nconst a = {\n\tc: null, // center\n\tu: [ new Vector3(), new Vector3(), new Vector3() ], // basis vectors\n\te: [] // half width\n};\n\nconst b = {\n\tc: null, // center\n\tu: [ new Vector3(), new Vector3(), new Vector3() ], // basis vectors\n\te: [] // half width\n};\n\nconst R = [[], [], []];\nconst AbsR = [[], [], []];\nconst t = [];\n\nconst xAxis = new Vector3();\nconst yAxis = new Vector3();\nconst zAxis = new Vector3();\nconst v1 = new Vector3();\nconst size = new Vector3();\nconst closestPoint = new Vector3();\nconst rotationMatrix = new Matrix3();\nconst aabb = new Box3();\nconst matrix = new Matrix4();\nconst inverse = new Matrix4();\nconst localRay = new Ray();\n\n// OBB\n\nclass OBB {\n\n\tconstructor( center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3() ) {\n\n\t\tthis.center = center;\n\t\tthis.halfSize = halfSize;\n\t\tthis.rotation = rotation;\n\n\t}\n\n\tset( center, halfSize, rotation ) {\n\n\t\tthis.center = center;\n\t\tthis.halfSize = halfSize;\n\t\tthis.rotation = rotation;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( obb ) {\n\n\t\tthis.center.copy( obb.center );\n\t\tthis.halfSize.copy( obb.halfSize );\n\t\tthis.rotation.copy( obb.rotation );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tgetSize( result ) {\n\n\t\treturn result.copy( this.halfSize ).multiplyScalar( 2 );\n\n\t}\n\n\t/**\n\t* Reference: Closest Point on OBB to Point in Real-Time Collision Detection\n\t* by Christer Ericson (chapter 5.1.4)\n\t*/\n\tclampPoint( point, result ) {\n\n\t\tconst halfSize = this.halfSize;\n\n\t\tv1.subVectors( point, this.center );\n\t\tthis.rotation.extractBasis( xAxis, yAxis, zAxis );\n\n\t\t// start at the center position of the OBB\n\n\t\tresult.copy( this.center );\n\n\t\t// project the target onto the OBB axes and walk towards that point\n\n\t\tconst x = MathUtils.clamp( v1.dot( xAxis ), - halfSize.x, halfSize.x );\n\t\tresult.add( xAxis.multiplyScalar( x ) );\n\n\t\tconst y = MathUtils.clamp( v1.dot( yAxis ), - halfSize.y, halfSize.y );\n\t\tresult.add( yAxis.multiplyScalar( y ) );\n\n\t\tconst z = MathUtils.clamp( v1.dot( zAxis ), - halfSize.z, halfSize.z );\n\t\tresult.add( zAxis.multiplyScalar( z ) );\n\n\t\treturn result;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tv1.subVectors( point, this.center );\n\t\tthis.rotation.extractBasis( xAxis, yAxis, zAxis );\n\n\t\t// project v1 onto each axis and check if these points lie inside the OBB\n\n\t\treturn Math.abs( v1.dot( xAxis ) ) <= this.halfSize.x &&\n\t\t\t\tMath.abs( v1.dot( yAxis ) ) <= this.halfSize.y &&\n\t\t\t\tMath.abs( v1.dot( zAxis ) ) <= this.halfSize.z;\n\n\t}\n\n\tintersectsBox3( box3 ) {\n\n\t\treturn this.intersectsOBB( obb.fromBox3( box3 ) );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// find the point on the OBB closest to the sphere center\n\n\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t// if that point is inside the sphere, the OBB and sphere intersect\n\n\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\t/**\n\t* Reference: OBB-OBB Intersection in Real-Time Collision Detection\n\t* by Christer Ericson (chapter 4.4.1)\n\t*\n\t*/\n\tintersectsOBB( obb, epsilon = Number.EPSILON ) {\n\n\t\t// prepare data structures (the code uses the same nomenclature like the reference)\n\n\t\ta.c = this.center;\n\t\ta.e[ 0 ] = this.halfSize.x;\n\t\ta.e[ 1 ] = this.halfSize.y;\n\t\ta.e[ 2 ] = this.halfSize.z;\n\t\tthis.rotation.extractBasis( a.u[ 0 ], a.u[ 1 ], a.u[ 2 ] );\n\n\t\tb.c = obb.center;\n\t\tb.e[ 0 ] = obb.halfSize.x;\n\t\tb.e[ 1 ] = obb.halfSize.y;\n\t\tb.e[ 2 ] = obb.halfSize.z;\n\t\tobb.rotation.extractBasis( b.u[ 0 ], b.u[ 1 ], b.u[ 2 ] );\n\n\t\t// compute rotation matrix expressing b in a's coordinate frame\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tR[ i ][ j ] = a.u[ i ].dot( b.u[ j ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute translation vector\n\n\t\tv1.subVectors( b.c, a.c );\n\n\t\t// bring translation into a's coordinate frame\n\n\t\tt[ 0 ] = v1.dot( a.u[ 0 ] );\n\t\tt[ 1 ] = v1.dot( a.u[ 1 ] );\n\t\tt[ 2 ] = v1.dot( a.u[ 2 ] );\n\n\t\t// compute common subexpressions. Add in an epsilon term to\n\t\t// counteract arithmetic errors when two edges are parallel and\n\t\t// their cross product is (near) null\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tAbsR[ i ][ j ] = Math.abs( R[ i ][ j ] ) + epsilon;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet ra, rb;\n\n\t\t// test axes L = A0, L = A1, L = A2\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tra = a.e[ i ];\n\t\t\trb = b.e[ 0 ] * AbsR[ i ][ 0 ] + b.e[ 1 ] * AbsR[ i ][ 1 ] + b.e[ 2 ] * AbsR[ i ][ 2 ];\n\t\t\tif ( Math.abs( t[ i ] ) > ra + rb ) return false;\n\n\n\t\t}\n\n\t\t// test axes L = B0, L = B1, L = B2\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tra = a.e[ 0 ] * AbsR[ 0 ][ i ] + a.e[ 1 ] * AbsR[ 1 ][ i ] + a.e[ 2 ] * AbsR[ 2 ][ i ];\n\t\t\trb = b.e[ i ];\n\t\t\tif ( Math.abs( t[ 0 ] * R[ 0 ][ i ] + t[ 1 ] * R[ 1 ][ i ] + t[ 2 ] * R[ 2 ][ i ] ) > ra + rb ) return false;\n\n\t\t}\n\n\t\t// test axis L = A0 x B0\n\n\t\tra = a.e[ 1 ] * AbsR[ 2 ][ 0 ] + a.e[ 2 ] * AbsR[ 1 ][ 0 ];\n\t\trb = b.e[ 1 ] * AbsR[ 0 ][ 2 ] + b.e[ 2 ] * AbsR[ 0 ][ 1 ];\n\t\tif ( Math.abs( t[ 2 ] * R[ 1 ][ 0 ] - t[ 1 ] * R[ 2 ][ 0 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A0 x B1\n\n\t\tra = a.e[ 1 ] * AbsR[ 2 ][ 1 ] + a.e[ 2 ] * AbsR[ 1 ][ 1 ];\n\t\trb = b.e[ 0 ] * AbsR[ 0 ][ 2 ] + b.e[ 2 ] * AbsR[ 0 ][ 0 ];\n\t\tif ( Math.abs( t[ 2 ] * R[ 1 ][ 1 ] - t[ 1 ] * R[ 2 ][ 1 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A0 x B2\n\n\t\tra = a.e[ 1 ] * AbsR[ 2 ][ 2 ] + a.e[ 2 ] * AbsR[ 1 ][ 2 ];\n\t\trb = b.e[ 0 ] * AbsR[ 0 ][ 1 ] + b.e[ 1 ] * AbsR[ 0 ][ 0 ];\n\t\tif ( Math.abs( t[ 2 ] * R[ 1 ][ 2 ] - t[ 1 ] * R[ 2 ][ 2 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A1 x B0\n\n\t\tra = a.e[ 0 ] * AbsR[ 2 ][ 0 ] + a.e[ 2 ] * AbsR[ 0 ][ 0 ];\n\t\trb = b.e[ 1 ] * AbsR[ 1 ][ 2 ] + b.e[ 2 ] * AbsR[ 1 ][ 1 ];\n\t\tif ( Math.abs( t[ 0 ] * R[ 2 ][ 0 ] - t[ 2 ] * R[ 0 ][ 0 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A1 x B1\n\n\t\tra = a.e[ 0 ] * AbsR[ 2 ][ 1 ] + a.e[ 2 ] * AbsR[ 0 ][ 1 ];\n\t\trb = b.e[ 0 ] * AbsR[ 1 ][ 2 ] + b.e[ 2 ] * AbsR[ 1 ][ 0 ];\n\t\tif ( Math.abs( t[ 0 ] * R[ 2 ][ 1 ] - t[ 2 ] * R[ 0 ][ 1 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A1 x B2\n\n\t\tra = a.e[ 0 ] * AbsR[ 2 ][ 2 ] + a.e[ 2 ] * AbsR[ 0 ][ 2 ];\n\t\trb = b.e[ 0 ] * AbsR[ 1 ][ 1 ] + b.e[ 1 ] * AbsR[ 1 ][ 0 ];\n\t\tif ( Math.abs( t[ 0 ] * R[ 2 ][ 2 ] - t[ 2 ] * R[ 0 ][ 2 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A2 x B0\n\n\t\tra = a.e[ 0 ] * AbsR[ 1 ][ 0 ] + a.e[ 1 ] * AbsR[ 0 ][ 0 ];\n\t\trb = b.e[ 1 ] * AbsR[ 2 ][ 2 ] + b.e[ 2 ] * AbsR[ 2 ][ 1 ];\n\t\tif ( Math.abs( t[ 1 ] * R[ 0 ][ 0 ] - t[ 0 ] * R[ 1 ][ 0 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A2 x B1\n\n\t\tra = a.e[ 0 ] * AbsR[ 1 ][ 1 ] + a.e[ 1 ] * AbsR[ 0 ][ 1 ];\n\t\trb = b.e[ 0 ] * AbsR[ 2 ][ 2 ] + b.e[ 2 ] * AbsR[ 2 ][ 0 ];\n\t\tif ( Math.abs( t[ 1 ] * R[ 0 ][ 1 ] - t[ 0 ] * R[ 1 ][ 1 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A2 x B2\n\n\t\tra = a.e[ 0 ] * AbsR[ 1 ][ 2 ] + a.e[ 1 ] * AbsR[ 0 ][ 2 ];\n\t\trb = b.e[ 0 ] * AbsR[ 2 ][ 1 ] + b.e[ 1 ] * AbsR[ 2 ][ 0 ];\n\t\tif ( Math.abs( t[ 1 ] * R[ 0 ][ 2 ] - t[ 0 ] * R[ 1 ][ 2 ] ) > ra + rb ) return false;\n\n\t\t// since no separating axis is found, the OBBs must be intersecting\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t* Reference: Testing Box Against Plane in Real-Time Collision Detection\n\t* by Christer Ericson (chapter 5.2.3)\n\t*/\n\tintersectsPlane( plane ) {\n\n\t\tthis.rotation.extractBasis( xAxis, yAxis, zAxis );\n\n\t\t// compute the projection interval radius of this OBB onto L(t) = this->center + t * p.normal;\n\n\t\tconst r = this.halfSize.x * Math.abs( plane.normal.dot( xAxis ) ) +\n\t\t\t\tthis.halfSize.y * Math.abs( plane.normal.dot( yAxis ) ) +\n\t\t\t\tthis.halfSize.z * Math.abs( plane.normal.dot( zAxis ) );\n\n\t\t// compute distance of the OBB's center from the plane\n\n\t\tconst d = plane.normal.dot( this.center ) - plane.constant;\n\n\t\t// Intersection occurs when distance d falls within [-r,+r] interval\n\n\t\treturn Math.abs( d ) <= r;\n\n\t}\n\n\t/**\n\t* Performs a ray/OBB intersection test and stores the intersection point\n\t* to the given 3D vector. If no intersection is detected, *null* is returned.\n\t*/\n\tintersectRay( ray, result ) {\n\n\t\t// the idea is to perform the intersection test in the local space\n\t\t// of the OBB.\n\n\t\tthis.getSize( size );\n\t\taabb.setFromCenterAndSize( v1.set( 0, 0, 0 ), size );\n\n\t\t// create a 4x4 transformation matrix\n\n\t\tmatrix.setFromMatrix3( this.rotation );\n\t\tmatrix.setPosition( this.center );\n\n\t\t// transform ray to the local space of the OBB\n\n\t\tinverse.copy( matrix ).invert();\n\t\tlocalRay.copy( ray ).applyMatrix4( inverse );\n\n\t\t// perform ray <-> AABB intersection test\n\n\t\tif ( localRay.intersectBox( aabb, result ) ) {\n\n\t\t\t// transform the intersection point back to world space\n\n\t\t\treturn result.applyMatrix4( matrix );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t* Performs a ray/OBB intersection test. Returns either true or false if\n\t* there is a intersection or not.\n\t*/\n\tintersectsRay( ray ) {\n\n\t\treturn this.intersectRay( ray, v1 ) !== null;\n\n\t}\n\n\tfromBox3( box3 ) {\n\n\t\tbox3.getCenter( this.center );\n\n\t\tbox3.getSize( this.halfSize ).multiplyScalar( 0.5 );\n\n\t\tthis.rotation.identity();\n\n\t\treturn this;\n\n\t}\n\n\tequals( obb ) {\n\n\t\treturn obb.center.equals( this.center ) &&\n\t\t\tobb.halfSize.equals( this.halfSize ) &&\n\t\t\tobb.rotation.equals( this.rotation );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst e = matrix.elements;\n\n\t\tlet sx = v1.set( e[ 0 ], e[ 1 ], e[ 2 ] ).length();\n\t\tconst sy = v1.set( e[ 4 ], e[ 5 ], e[ 6 ] ).length();\n\t\tconst sz = v1.set( e[ 8 ], e[ 9 ], e[ 10 ] ).length();\n\n\t\tconst det = matrix.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\trotationMatrix.setFromMatrix4( matrix );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\trotationMatrix.elements[ 0 ] *= invSX;\n\t\trotationMatrix.elements[ 1 ] *= invSX;\n\t\trotationMatrix.elements[ 2 ] *= invSX;\n\n\t\trotationMatrix.elements[ 3 ] *= invSY;\n\t\trotationMatrix.elements[ 4 ] *= invSY;\n\t\trotationMatrix.elements[ 5 ] *= invSY;\n\n\t\trotationMatrix.elements[ 6 ] *= invSZ;\n\t\trotationMatrix.elements[ 7 ] *= invSZ;\n\t\trotationMatrix.elements[ 8 ] *= invSZ;\n\n\t\tthis.rotation.multiply( rotationMatrix );\n\n\t\tthis.halfSize.x *= sx;\n\t\tthis.halfSize.y *= sy;\n\t\tthis.halfSize.z *= sz;\n\n\t\tv1.setFromMatrixPosition( matrix );\n\t\tthis.center.add( v1 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst obb = new OBB();\n\nexport { OBB };\n", "import {\n\tBox3,\n\tLine3,\n\tPlane,\n\tSphere,\n\tTriangle,\n\tVector3,\n\tLayers\n} from 'three';\nimport { Capsule } from '../math/Capsule.js';\n\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\nconst _point1 = new Vector3();\nconst _point2 = new Vector3();\nconst _plane = new Plane();\nconst _line1 = new Line3();\nconst _line2 = new Line3();\nconst _sphere = new Sphere();\nconst _capsule = new Capsule();\n\nconst _temp1 = new Vector3();\nconst _temp2 = new Vector3();\nconst _temp3 = new Vector3();\nconst EPS = 1e-10;\n\nfunction lineToLineClosestPoints( line1, line2, target1 = null, target2 = null ) {\n\n\tconst r = _temp1.copy( line1.end ).sub( line1.start );\n\tconst s = _temp2.copy( line2.end ).sub( line2.start );\n\tconst w = _temp3.copy( line2.start ).sub( line1.start );\n\n\tconst a = r.dot( s ),\n\t\tb = r.dot( r ),\n\t\tc = s.dot( s ),\n\t\td = s.dot( w ),\n\t\te = r.dot( w );\n\n\tlet t1, t2;\n\tconst divisor = b * c - a * a;\n\n\tif ( Math.abs( divisor ) < EPS ) {\n\n\t\tconst d1 = - d / c;\n\t\tconst d2 = ( a - d ) / c;\n\n\t\tif ( Math.abs( d1 - 0.5 ) < Math.abs( d2 - 0.5 ) ) {\n\n\t\t\tt1 = 0;\n\t\t\tt2 = d1;\n\n\t\t} else {\n\n\t\t\tt1 = 1;\n\t\t\tt2 = d2;\n\n\t\t}\n\n\t} else {\n\n\t\tt1 = ( d * a + e * c ) / divisor;\n\t\tt2 = ( t1 * a - d ) / c;\n\n\t}\n\n\tt2 = Math.max( 0, Math.min( 1, t2 ) );\n\tt1 = Math.max( 0, Math.min( 1, t1 ) );\n\n\tif ( target1 ) {\n\n\t\ttarget1.copy( r ).multiplyScalar( t1 ).add( line1.start );\n\n\t}\n\n\tif ( target2 ) {\n\n\t\ttarget2.copy( s ).multiplyScalar( t2 ).add( line2.start );\n\n\t}\n\n}\n\nclass Octree {\n\n\tconstructor( box ) {\n\n\t\tthis.box = box;\n\t\tthis.bounds = new Box3();\n\n\t\tthis.subTrees = [];\n\t\tthis.triangles = [];\n\t\tthis.layers = new Layers();\n\n\t}\n\n\taddTriangle( triangle ) {\n\n\t\tthis.bounds.min.x = Math.min( this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x );\n\t\tthis.bounds.min.y = Math.min( this.bounds.min.y, triangle.a.y, triangle.b.y, triangle.c.y );\n\t\tthis.bounds.min.z = Math.min( this.bounds.min.z, triangle.a.z, triangle.b.z, triangle.c.z );\n\t\tthis.bounds.max.x = Math.max( this.bounds.max.x, triangle.a.x, triangle.b.x, triangle.c.x );\n\t\tthis.bounds.max.y = Math.max( this.bounds.max.y, triangle.a.y, triangle.b.y, triangle.c.y );\n\t\tthis.bounds.max.z = Math.max( this.bounds.max.z, triangle.a.z, triangle.b.z, triangle.c.z );\n\n\t\tthis.triangles.push( triangle );\n\n\t\treturn this;\n\n\t}\n\n\tcalcBox() {\n\n\t\tthis.box = this.bounds.clone();\n\n\t\t// offset small amount to account for regular grid\n\t\tthis.box.min.x -= 0.01;\n\t\tthis.box.min.y -= 0.01;\n\t\tthis.box.min.z -= 0.01;\n\n\t\treturn this;\n\n\t}\n\n\tsplit( level ) {\n\n\t\tif ( ! this.box ) return;\n\n\t\tconst subTrees = [];\n\t\tconst halfsize = _v2.copy( this.box.max ).sub( this.box.min ).multiplyScalar( 0.5 );\n\n\t\tfor ( let x = 0; x < 2; x ++ ) {\n\n\t\t\tfor ( let y = 0; y < 2; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z < 2; z ++ ) {\n\n\t\t\t\t\tconst box = new Box3();\n\t\t\t\t\tconst v = _v1.set( x, y, z );\n\n\t\t\t\t\tbox.min.copy( this.box.min ).add( v.multiply( halfsize ) );\n\t\t\t\t\tbox.max.copy( box.min ).add( halfsize );\n\n\t\t\t\t\tsubTrees.push( new Octree( box ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet triangle;\n\n\t\twhile ( triangle = this.triangles.pop() ) {\n\n\t\t\tfor ( let i = 0; i < subTrees.length; i ++ ) {\n\n\t\t\t\tif ( subTrees[ i ].box.intersectsTriangle( triangle ) ) {\n\n\t\t\t\t\tsubTrees[ i ].triangles.push( triangle );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < subTrees.length; i ++ ) {\n\n\t\t\tconst len = subTrees[ i ].triangles.length;\n\n\t\t\tif ( len > 8 && level < 16 ) {\n\n\t\t\t\tsubTrees[ i ].split( level + 1 );\n\n\t\t\t}\n\n\t\t\tif ( len !== 0 ) {\n\n\t\t\t\tthis.subTrees.push( subTrees[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tbuild() {\n\n\t\tthis.calcBox();\n\t\tthis.split( 0 );\n\n\t\treturn this;\n\n\t}\n\n\tgetRayTriangles( ray, triangles ) {\n\n\t\tfor ( let i = 0; i < this.subTrees.length; i ++ ) {\n\n\t\t\tconst subTree = this.subTrees[ i ];\n\t\t\tif ( ! ray.intersectsBox( subTree.box ) ) continue;\n\n\t\t\tif ( subTree.triangles.length > 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < subTree.triangles.length; j ++ ) {\n\n\t\t\t\t\tif ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsubTree.getRayTriangles( ray, triangles );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn triangles;\n\n\t}\n\n\ttriangleCapsuleIntersect( capsule, triangle ) {\n\n\t\ttriangle.getPlane( _plane );\n\n\t\tconst d1 = _plane.distanceToPoint( capsule.start ) - capsule.radius;\n\t\tconst d2 = _plane.distanceToPoint( capsule.end ) - capsule.radius;\n\n\t\tif ( ( d1 > 0 && d2 > 0 ) || ( d1 < - capsule.radius && d2 < - capsule.radius ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst delta = Math.abs( d1 / ( Math.abs( d1 ) + Math.abs( d2 ) ) );\n\t\tconst intersectPoint = _v1.copy( capsule.start ).lerp( capsule.end, delta );\n\n\t\tif ( triangle.containsPoint( intersectPoint ) ) {\n\n\t\t\treturn { normal: _plane.normal.clone(), point: intersectPoint.clone(), depth: Math.abs( Math.min( d1, d2 ) ) };\n\n\t\t}\n\n\t\tconst r2 = capsule.radius * capsule.radius;\n\n\t\tconst line1 = _line1.set( capsule.start, capsule.end );\n\n\t\tconst lines = [\n\t\t\t[ triangle.a, triangle.b ],\n\t\t\t[ triangle.b, triangle.c ],\n\t\t\t[ triangle.c, triangle.a ]\n\t\t];\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tconst line2 = _line2.set( lines[ i ][ 0 ], lines[ i ][ 1 ] );\n\n\t\t\tlineToLineClosestPoints( line1, line2, _point1, _point2 );\n\n\t\t\tif ( _point1.distanceToSquared( _point2 ) < r2 ) {\n\n\t\t\t\treturn {\n\t\t\t\t\tnormal: _point1.clone().sub( _point2 ).normalize(),\n\t\t\t\t\tpoint: _point2.clone(),\n\t\t\t\t\tdepth: capsule.radius - _point1.distanceTo( _point2 )\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\ttriangleSphereIntersect( sphere, triangle ) {\n\n\t\ttriangle.getPlane( _plane );\n\n\t\tif ( ! sphere.intersectsPlane( _plane ) ) return false;\n\n\t\tconst depth = Math.abs( _plane.distanceToSphere( sphere ) );\n\t\tconst r2 = sphere.radius * sphere.radius - depth * depth;\n\n\t\tconst plainPoint = _plane.projectPoint( sphere.center, _v1 );\n\n\t\tif ( triangle.containsPoint( sphere.center ) ) {\n\n\t\t\treturn { normal: _plane.normal.clone(), point: plainPoint.clone(), depth: Math.abs( _plane.distanceToSphere( sphere ) ) };\n\n\t\t}\n\n\t\tconst lines = [\n\t\t\t[ triangle.a, triangle.b ],\n\t\t\t[ triangle.b, triangle.c ],\n\t\t\t[ triangle.c, triangle.a ]\n\t\t];\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\t_line1.set( lines[ i ][ 0 ], lines[ i ][ 1 ] );\n\t\t\t_line1.closestPointToPoint( plainPoint, true, _v2 );\n\n\t\t\tconst d = _v2.distanceToSquared( sphere.center );\n\n\t\t\tif ( d < r2 ) {\n\n\t\t\t\treturn { normal: sphere.center.clone().sub( _v2 ).normalize(), point: _v2.clone(), depth: sphere.radius - Math.sqrt( d ) };\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tgetSphereTriangles( sphere, triangles ) {\n\n\t\tfor ( let i = 0; i < this.subTrees.length; i ++ ) {\n\n\t\t\tconst subTree = this.subTrees[ i ];\n\n\t\t\tif ( ! sphere.intersectsBox( subTree.box ) ) continue;\n\n\t\t\tif ( subTree.triangles.length > 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < subTree.triangles.length; j ++ ) {\n\n\t\t\t\t\tif ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsubTree.getSphereTriangles( sphere, triangles );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetCapsuleTriangles( capsule, triangles ) {\n\n\t\tfor ( let i = 0; i < this.subTrees.length; i ++ ) {\n\n\t\t\tconst subTree = this.subTrees[ i ];\n\n\t\t\tif ( ! capsule.intersectsBox( subTree.box ) ) continue;\n\n\t\t\tif ( subTree.triangles.length > 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < subTree.triangles.length; j ++ ) {\n\n\t\t\t\t\tif ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsubTree.getCapsuleTriangles( capsule, triangles );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsphereIntersect( sphere ) {\n\n\t\t_sphere.copy( sphere );\n\n\t\tconst triangles = [];\n\t\tlet result, hit = false;\n\n\t\tthis.getSphereTriangles( sphere, triangles );\n\n\t\tfor ( let i = 0; i < triangles.length; i ++ ) {\n\n\t\t\tif ( result = this.triangleSphereIntersect( _sphere, triangles[ i ] ) ) {\n\n\t\t\t\thit = true;\n\n\t\t\t\t_sphere.center.add( result.normal.multiplyScalar( result.depth ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hit ) {\n\n\t\t\tconst collisionVector = _sphere.center.clone().sub( sphere.center );\n\t\t\tconst depth = collisionVector.length();\n\n\t\t\treturn { normal: collisionVector.normalize(), depth: depth };\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tcapsuleIntersect( capsule ) {\n\n\t\t_capsule.copy( capsule );\n\n\t\tconst triangles = [];\n\t\tlet result, hit = false;\n\n\t\tthis.getCapsuleTriangles( _capsule, triangles );\n\n\t\tfor ( let i = 0; i < triangles.length; i ++ ) {\n\n\t\t\tif ( result = this.triangleCapsuleIntersect( _capsule, triangles[ i ] ) ) {\n\n\t\t\t\thit = true;\n\n\t\t\t\t_capsule.translate( result.normal.multiplyScalar( result.depth ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hit ) {\n\n\t\t\tconst collisionVector = _capsule.getCenter( new Vector3() ).sub( capsule.getCenter( _v1 ) );\n\t\t\tconst depth = collisionVector.length();\n\n\t\t\treturn { normal: collisionVector.normalize(), depth: depth };\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\trayIntersect( ray ) {\n\n\t\tif ( ray.direction.length() === 0 ) return;\n\n\t\tconst triangles = [];\n\t\tlet triangle, position, distance = 1e100;\n\n\t\tthis.getRayTriangles( ray, triangles );\n\n\t\tfor ( let i = 0; i < triangles.length; i ++ ) {\n\n\t\t\tconst result = ray.intersectTriangle( triangles[ i ].a, triangles[ i ].b, triangles[ i ].c, true, _v1 );\n\n\t\t\tif ( result ) {\n\n\t\t\t\tconst newdistance = result.sub( ray.origin ).length();\n\n\t\t\t\tif ( distance > newdistance ) {\n\n\t\t\t\t\tposition = result.clone().add( ray.origin );\n\t\t\t\t\tdistance = newdistance;\n\t\t\t\t\ttriangle = triangles[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn distance < 1e100 ? { distance: distance, triangle: triangle, position: position } : false;\n\n\t}\n\n\tfromGraphNode( group ) {\n\n\t\tgroup.updateWorldMatrix( true, true );\n\n\t\tgroup.traverse( ( obj ) => {\n\n\t\t\tif ( obj.isMesh === true ) {\n\n\t\t\t\tif ( this.layers.test( obj.layers ) ) {\n\n\t\t\t\t\tlet geometry, isTemp = false;\n\n\t\t\t\t\tif ( obj.geometry.index !== null ) {\n\n\t\t\t\t\t\tisTemp = true;\n\t\t\t\t\t\tgeometry = obj.geometry.toNonIndexed();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgeometry = obj.geometry;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\t\t\t\tconst v1 = new Vector3().fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tconst v2 = new Vector3().fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\t\tconst v3 = new Vector3().fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\t\tv1.applyMatrix4( obj.matrixWorld );\n\t\t\t\t\t\tv2.applyMatrix4( obj.matrixWorld );\n\t\t\t\t\t\tv3.applyMatrix4( obj.matrixWorld );\n\n\t\t\t\t\t\tthis.addTriangle( new Triangle( v1, v2, v3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isTemp ) {\n\n\t\t\t\t\t\tgeometry.dispose();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.build();\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tthis.box = null;\n\t\tthis.bounds.makeEmpty();\n\n\t\tthis.subTrees.length = 0;\n\t\tthis.triangles.length = 0;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { Octree };\n", "// Ported from Stefan Gustavson's java implementation\n// http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\n// Read Stefan's excellent paper for details on how this code works.\n//\n// Sean McCullough banksean@gmail.com\n//\n// Added 4D noise\n\n/**\n * You can pass in a random number generator object if you like.\n * It is assumed to have a random() method.\n */\nclass SimplexNoise {\n\n\tconstructor( r = Math ) {\n\n\t\tthis.grad3 = [[ 1, 1, 0 ], [ - 1, 1, 0 ], [ 1, - 1, 0 ], [ - 1, - 1, 0 ],\n\t\t\t[ 1, 0, 1 ], [ - 1, 0, 1 ], [ 1, 0, - 1 ], [ - 1, 0, - 1 ],\n\t\t\t[ 0, 1, 1 ], [ 0, - 1, 1 ], [ 0, 1, - 1 ], [ 0, - 1, - 1 ]];\n\n\t\tthis.grad4 = [[ 0, 1, 1, 1 ], [ 0, 1, 1, - 1 ], [ 0, 1, - 1, 1 ], [ 0, 1, - 1, - 1 ],\n\t\t\t[ 0, - 1, 1, 1 ], [ 0, - 1, 1, - 1 ], [ 0, - 1, - 1, 1 ], [ 0, - 1, - 1, - 1 ],\n\t\t\t[ 1, 0, 1, 1 ], [ 1, 0, 1, - 1 ], [ 1, 0, - 1, 1 ], [ 1, 0, - 1, - 1 ],\n\t\t\t[ - 1, 0, 1, 1 ], [ - 1, 0, 1, - 1 ], [ - 1, 0, - 1, 1 ], [ - 1, 0, - 1, - 1 ],\n\t\t\t[ 1, 1, 0, 1 ], [ 1, 1, 0, - 1 ], [ 1, - 1, 0, 1 ], [ 1, - 1, 0, - 1 ],\n\t\t\t[ - 1, 1, 0, 1 ], [ - 1, 1, 0, - 1 ], [ - 1, - 1, 0, 1 ], [ - 1, - 1, 0, - 1 ],\n\t\t\t[ 1, 1, 1, 0 ], [ 1, 1, - 1, 0 ], [ 1, - 1, 1, 0 ], [ 1, - 1, - 1, 0 ],\n\t\t\t[ - 1, 1, 1, 0 ], [ - 1, 1, - 1, 0 ], [ - 1, - 1, 1, 0 ], [ - 1, - 1, - 1, 0 ]];\n\n\t\tthis.p = [];\n\n\t\tfor ( let i = 0; i < 256; i ++ ) {\n\n\t\t\tthis.p[ i ] = Math.floor( r.random() * 256 );\n\n\t\t}\n\n\t\t// To remove the need for index wrapping, double the permutation table length\n\t\tthis.perm = [];\n\n\t\tfor ( let i = 0; i < 512; i ++ ) {\n\n\t\t\tthis.perm[ i ] = this.p[ i & 255 ];\n\n\t\t}\n\n\t\t// A lookup table to traverse the simplex around a given point in 4D.\n\t\t// Details can be found where this table is used, in the 4D noise method.\n\t\tthis.simplex = [\n\t\t\t[ 0, 1, 2, 3 ], [ 0, 1, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 2, 3, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 2, 3, 0 ],\n\t\t\t[ 0, 2, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 3, 1, 2 ], [ 0, 3, 2, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 3, 2, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 1, 2, 0, 3 ], [ 0, 0, 0, 0 ], [ 1, 3, 0, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 3, 0, 1 ], [ 2, 3, 1, 0 ],\n\t\t\t[ 1, 0, 2, 3 ], [ 1, 0, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 0, 3, 1 ], [ 0, 0, 0, 0 ], [ 2, 1, 3, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 2, 0, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 0, 1, 2 ], [ 3, 0, 2, 1 ], [ 0, 0, 0, 0 ], [ 3, 1, 2, 0 ],\n\t\t\t[ 2, 1, 0, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 1, 0, 2 ], [ 0, 0, 0, 0 ], [ 3, 2, 0, 1 ], [ 3, 2, 1, 0 ]];\n\n\t}\n\n\tdot( g, x, y ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y;\n\n\t}\n\n\tdot3( g, x, y, z ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z;\n\n\t}\n\n\tdot4( g, x, y, z, w ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z + g[ 3 ] * w;\n\n\t}\n\n\tnoise( xin, yin ) {\n\n\t\tlet n0; // Noise contributions from the three corners\n\t\tlet n1;\n\t\tlet n2;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F2 = 0.5 * ( Math.sqrt( 3.0 ) - 1.0 );\n\t\tconst s = ( xin + yin ) * F2; // Hairy factor for 2D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst G2 = ( 3.0 - Math.sqrt( 3.0 ) ) / 6.0;\n\t\tconst t = ( i + j ) * G2;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y) space\n\t\tconst Y0 = j - t;\n\t\tconst x0 = xin - X0; // The x,y distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\n\t\t// For the 2D case, the simplex shape is an equilateral triangle.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second (middle) corner of simplex in (i,j) coords\n\n\t\tlet j1;\n\t\tif ( x0 > y0 ) {\n\n\t\t\ti1 = 1; j1 = 0;\n\n\t\t\t// lower triangle, XY order: (0,0)->(1,0)->(1,1)\n\n\t\t}\telse {\n\n\t\t\ti1 = 0; j1 = 1;\n\n\t\t} // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n\n\t\t// A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n\t\t// a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n\t\t// c = (3-sqrt(3))/6\n\t\tconst x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n\t\tconst y1 = y0 - j1 + G2;\n\t\tconst x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords\n\t\tconst y2 = y0 - 1.0 + 2.0 * G2;\n\t\t// Work out the hashed gradient indices of the three simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst gi0 = this.perm[ ii + this.perm[ jj ] ] % 12;\n\t\tconst gi1 = this.perm[ ii + i1 + this.perm[ jj + j1 ] ] % 12;\n\t\tconst gi2 = this.perm[ ii + 1 + this.perm[ jj + 1 ] ] % 12;\n\t\t// Calculate the contribution from the three corners\n\t\tlet t0 = 0.5 - x0 * x0 - y0 * y0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this.dot( this.grad3[ gi0 ], x0, y0 ); // (x,y) of grad3 used for 2D gradient\n\n\t\t}\n\n\t\tlet t1 = 0.5 - x1 * x1 - y1 * y1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this.dot( this.grad3[ gi1 ], x1, y1 );\n\n\t\t}\n\n\t\tlet t2 = 0.5 - x2 * x2 - y2 * y2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this.dot( this.grad3[ gi2 ], x2, y2 );\n\n\t\t}\n\n\t\t// Add contributions from each corner to get the final noise value.\n\t\t// The result is scaled to return values in the interval [-1,1].\n\t\treturn 70.0 * ( n0 + n1 + n2 );\n\n\t}\n\n\t// 3D simplex noise\n\tnoise3d( xin, yin, zin ) {\n\n\t\tlet n0; // Noise contributions from the four corners\n\t\tlet n1;\n\t\tlet n2;\n\t\tlet n3;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F3 = 1.0 / 3.0;\n\t\tconst s = ( xin + yin + zin ) * F3; // Very nice and simple skew factor for 3D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst k = Math.floor( zin + s );\n\t\tconst G3 = 1.0 / 6.0; // Very nice and simple unskew factor, too\n\t\tconst t = ( i + j + k ) * G3;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y,z) space\n\t\tconst Y0 = j - t;\n\t\tconst Z0 = k - t;\n\t\tconst x0 = xin - X0; // The x,y,z distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\t\tconst z0 = zin - Z0;\n\n\t\t// For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second corner of simplex in (i,j,k) coords\n\n\t\tlet j1;\n\t\tlet k1;\n\t\tlet i2; // Offsets for third corner of simplex in (i,j,k) coords\n\t\tlet j2;\n\t\tlet k2;\n\t\tif ( x0 >= y0 ) {\n\n\t\t\tif ( y0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n\n\t\t\t\t// X Y Z order\n\n\t\t\t} else if ( x0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t\t// X Z Y order\n\n\t\t\t} else {\n\n\t\t\t\ti1 = 0; j1 = 0; k1 = 1; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t} // Z X Y order\n\n\t\t} else { // x0 y0 ) ? 32 : 0;\n\t\tconst c2 = ( x0 > z0 ) ? 16 : 0;\n\t\tconst c3 = ( y0 > z0 ) ? 8 : 0;\n\t\tconst c4 = ( x0 > w0 ) ? 4 : 0;\n\t\tconst c5 = ( y0 > w0 ) ? 2 : 0;\n\t\tconst c6 = ( z0 > w0 ) ? 1 : 0;\n\t\tconst c = c1 + c2 + c3 + c4 + c5 + c6;\n\n\t\t// simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.\n\t\t// Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0;\n\t\tconst j1 = simplex[ c ][ 1 ] >= 3 ? 1 : 0;\n\t\tconst k1 = simplex[ c ][ 2 ] >= 3 ? 1 : 0;\n\t\tconst l1 = simplex[ c ][ 3 ] >= 3 ? 1 : 0;\n\t\t// The number 2 in the \"simplex\" array is at the second largest coordinate.\n\t\tconst i2 = simplex[ c ][ 0 ] >= 2 ? 1 : 0;\n\t\tconst j2 = simplex[ c ][ 1 ] >= 2 ? 1 : 0;\n\t\tconst k2 = simplex[ c ][ 2 ] >= 2 ? 1 : 0;\n\t\tconst l2 = simplex[ c ][ 3 ] >= 2 ? 1 : 0;\n\t\t// The number 1 in the \"simplex\" array is at the second smallest coordinate.\n\t\tconst i3 = simplex[ c ][ 0 ] >= 1 ? 1 : 0;\n\t\tconst j3 = simplex[ c ][ 1 ] >= 1 ? 1 : 0;\n\t\tconst k3 = simplex[ c ][ 2 ] >= 1 ? 1 : 0;\n\t\tconst l3 = simplex[ c ][ 3 ] >= 1 ? 1 : 0;\n\t\t// The fifth corner has all coordinate offsets = 1, so no need to look that up.\n\t\tconst x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords\n\t\tconst y1 = y0 - j1 + G4;\n\t\tconst z1 = z0 - k1 + G4;\n\t\tconst w1 = w0 - l1 + G4;\n\t\tconst x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords\n\t\tconst y2 = y0 - j2 + 2.0 * G4;\n\t\tconst z2 = z0 - k2 + 2.0 * G4;\n\t\tconst w2 = w0 - l2 + 2.0 * G4;\n\t\tconst x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords\n\t\tconst y3 = y0 - j3 + 3.0 * G4;\n\t\tconst z3 = z0 - k3 + 3.0 * G4;\n\t\tconst w3 = w0 - l3 + 3.0 * G4;\n\t\tconst x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords\n\t\tconst y4 = y0 - 1.0 + 4.0 * G4;\n\t\tconst z4 = z0 - 1.0 + 4.0 * G4;\n\t\tconst w4 = w0 - 1.0 + 4.0 * G4;\n\t\t// Work out the hashed gradient indices of the five simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst kk = k & 255;\n\t\tconst ll = l & 255;\n\t\tconst gi0 = perm[ ii + perm[ jj + perm[ kk + perm[ ll ] ] ] ] % 32;\n\t\tconst gi1 = perm[ ii + i1 + perm[ jj + j1 + perm[ kk + k1 + perm[ ll + l1 ] ] ] ] % 32;\n\t\tconst gi2 = perm[ ii + i2 + perm[ jj + j2 + perm[ kk + k2 + perm[ ll + l2 ] ] ] ] % 32;\n\t\tconst gi3 = perm[ ii + i3 + perm[ jj + j3 + perm[ kk + k3 + perm[ ll + l3 ] ] ] ] % 32;\n\t\tconst gi4 = perm[ ii + 1 + perm[ jj + 1 + perm[ kk + 1 + perm[ ll + 1 ] ] ] ] % 32;\n\t\t// Calculate the contribution from the five corners\n\t\tlet t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this.dot4( grad4[ gi0 ], x0, y0, z0, w0 );\n\n\t\t}\n\n\t\tlet t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this.dot4( grad4[ gi1 ], x1, y1, z1, w1 );\n\n\t\t}\n\n\t\tlet t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this.dot4( grad4[ gi2 ], x2, y2, z2, w2 );\n\n\t\t}\n\n\t\tlet t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n\t\tif ( t3 < 0 ) n3 = 0.0;\n\t\telse {\n\n\t\t\tt3 *= t3;\n\t\t\tn3 = t3 * t3 * this.dot4( grad4[ gi3 ], x3, y3, z3, w3 );\n\n\t\t}\n\n\t\tlet t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n\t\tif ( t4 < 0 ) n4 = 0.0;\n\t\telse {\n\n\t\t\tt4 *= t4;\n\t\t\tn4 = t4 * t4 * this.dot4( grad4[ gi4 ], x4, y4, z4, w4 );\n\n\t\t}\n\n\t\t// Sum up and scale the result to cover the range [-1,1]\n\t\treturn 27.0 * ( n0 + n1 + n2 + n3 + n4 );\n\n\t}\n\n}\n\nexport { SimplexNoise };\n", "import {\n\tLine3,\n\tMesh,\n\tPlane,\n\tVector3\n} from 'three';\nimport { ConvexGeometry } from '../geometries/ConvexGeometry.js';\n\n/**\n * @fileoverview This class can be used to subdivide a convex Geometry object into pieces.\n *\n * Usage:\n *\n * Use the function prepareBreakableObject to prepare a Mesh object to be broken.\n *\n * Then, call the various functions to subdivide the object (subdivideByImpact, cutByPlane)\n *\n * Sub-objects that are product of subdivision don't need prepareBreakableObject to be called on them.\n *\n * Requisites for the object:\n *\n * - Mesh object must have a buffer geometry and a material\n *\n * - Vertex normals must be planar (not smoothed)\n *\n * - The geometry must be convex (this is not checked in the library). You can create convex\n * geometries with ConvexGeometry. The BoxGeometry, SphereGeometry and other convex primitives\n * can also be used.\n *\n * Note: This lib adds member variables to object's userData member (see prepareBreakableObject function)\n * Use with caution and read the code when using with other libs.\n *\n * @param {double} minSizeForBreak Min size a debris can have to break.\n * @param {double} smallDelta Max distance to consider that a point belongs to a plane.\n *\n*/\n\nconst _v1 = new Vector3();\n\nclass ConvexObjectBreaker {\n\n\tconstructor( minSizeForBreak = 1.4, smallDelta = 0.0001 ) {\n\n\t\tthis.minSizeForBreak = minSizeForBreak;\n\t\tthis.smallDelta = smallDelta;\n\n\t\tthis.tempLine1 = new Line3();\n\t\tthis.tempPlane1 = new Plane();\n\t\tthis.tempPlane2 = new Plane();\n\t\tthis.tempPlane_Cut = new Plane();\n\t\tthis.tempCM1 = new Vector3();\n\t\tthis.tempCM2 = new Vector3();\n\t\tthis.tempVector3 = new Vector3();\n\t\tthis.tempVector3_2 = new Vector3();\n\t\tthis.tempVector3_3 = new Vector3();\n\t\tthis.tempVector3_P0 = new Vector3();\n\t\tthis.tempVector3_P1 = new Vector3();\n\t\tthis.tempVector3_P2 = new Vector3();\n\t\tthis.tempVector3_N0 = new Vector3();\n\t\tthis.tempVector3_N1 = new Vector3();\n\t\tthis.tempVector3_AB = new Vector3();\n\t\tthis.tempVector3_CB = new Vector3();\n\t\tthis.tempResultObjects = { object1: null, object2: null };\n\n\t\tthis.segments = [];\n\t\tconst n = 30 * 30;\n\t\tfor ( let i = 0; i < n; i ++ ) this.segments[ i ] = false;\n\n\t}\n\n\tprepareBreakableObject( object, mass, velocity, angularVelocity, breakable ) {\n\n\t\t// object is a Object3d (normally a Mesh), must have a buffer geometry, and it must be convex.\n\t\t// Its material property is propagated to its children (sub-pieces)\n\t\t// mass must be > 0\n\n\t\tconst userData = object.userData;\n\t\tuserData.mass = mass;\n\t\tuserData.velocity = velocity.clone();\n\t\tuserData.angularVelocity = angularVelocity.clone();\n\t\tuserData.breakable = breakable;\n\n\t}\n\n\t/*\n\t * @param {int} maxRadialIterations Iterations for radial cuts.\n\t * @param {int} maxRandomIterations Max random iterations for not-radial cuts\n\t *\n\t * Returns the array of pieces\n\t */\n\tsubdivideByImpact( object, pointOfImpact, normal, maxRadialIterations, maxRandomIterations ) {\n\n\t\tconst debris = [];\n\n\t\tconst tempPlane1 = this.tempPlane1;\n\t\tconst tempPlane2 = this.tempPlane2;\n\n\t\tthis.tempVector3.addVectors( pointOfImpact, normal );\n\t\ttempPlane1.setFromCoplanarPoints( pointOfImpact, object.position, this.tempVector3 );\n\n\t\tconst maxTotalIterations = maxRandomIterations + maxRadialIterations;\n\n\t\tconst scope = this;\n\n\t\tfunction subdivideRadial( subObject, startAngle, endAngle, numIterations ) {\n\n\t\t\tif ( Math.random() < numIterations * 0.05 || numIterations > maxTotalIterations ) {\n\n\t\t\t\tdebris.push( subObject );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet angle = Math.PI;\n\n\t\t\tif ( numIterations === 0 ) {\n\n\t\t\t\ttempPlane2.normal.copy( tempPlane1.normal );\n\t\t\t\ttempPlane2.constant = tempPlane1.constant;\n\n\t\t\t} else {\n\n\t\t\t\tif ( numIterations <= maxRadialIterations ) {\n\n\t\t\t\t\tangle = ( endAngle - startAngle ) * ( 0.2 + 0.6 * Math.random() ) + startAngle;\n\n\t\t\t\t\t// Rotate tempPlane2 at impact point around normal axis and the angle\n\t\t\t\t\tscope.tempVector3_2.copy( object.position ).sub( pointOfImpact ).applyAxisAngle( normal, angle ).add( pointOfImpact );\n\t\t\t\t\ttempPlane2.setFromCoplanarPoints( pointOfImpact, scope.tempVector3, scope.tempVector3_2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tangle = ( ( 0.5 * ( numIterations & 1 ) ) + 0.2 * ( 2 - Math.random() ) ) * Math.PI;\n\n\t\t\t\t\t// Rotate tempPlane2 at object position around normal axis and the angle\n\t\t\t\t\tscope.tempVector3_2.copy( pointOfImpact ).sub( subObject.position ).applyAxisAngle( normal, angle ).add( subObject.position );\n\t\t\t\t\tscope.tempVector3_3.copy( normal ).add( subObject.position );\n\t\t\t\t\ttempPlane2.setFromCoplanarPoints( subObject.position, scope.tempVector3_3, scope.tempVector3_2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Perform the cut\n\t\t\tscope.cutByPlane( subObject, tempPlane2, scope.tempResultObjects );\n\n\t\t\tconst obj1 = scope.tempResultObjects.object1;\n\t\t\tconst obj2 = scope.tempResultObjects.object2;\n\n\t\t\tif ( obj1 ) {\n\n\t\t\t\tsubdivideRadial( obj1, startAngle, angle, numIterations + 1 );\n\n\t\t\t}\n\n\t\t\tif ( obj2 ) {\n\n\t\t\t\tsubdivideRadial( obj2, angle, endAngle, numIterations + 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tsubdivideRadial( object, 0, 2 * Math.PI, 0 );\n\n\t\treturn debris;\n\n\t}\n\n\tcutByPlane( object, plane, output ) {\n\n\t\t// Returns breakable objects in output.object1 and output.object2 members, the resulting 2 pieces of the cut.\n\t\t// object2 can be null if the plane doesn't cut the object.\n\t\t// object1 can be null only in case of internal error\n\t\t// Returned value is number of pieces, 0 for error.\n\n\t\tconst geometry = object.geometry;\n\t\tconst coords = geometry.attributes.position.array;\n\t\tconst normals = geometry.attributes.normal.array;\n\n\t\tconst numPoints = coords.length / 3;\n\t\tlet numFaces = numPoints / 3;\n\n\t\tlet indices = geometry.getIndex();\n\n\t\tif ( indices ) {\n\n\t\t\tindices = indices.array;\n\t\t\tnumFaces = indices.length / 3;\n\n\t\t}\n\n\t\tfunction getVertexIndex( faceIdx, vert ) {\n\n\t\t\t// vert = 0, 1 or 2.\n\n\t\t\tconst idx = faceIdx * 3 + vert;\n\n\t\t\treturn indices ? indices[ idx ] : idx;\n\n\t\t}\n\n\t\tconst points1 = [];\n\t\tconst points2 = [];\n\n\t\tconst delta = this.smallDelta;\n\n\t\t// Reset segments mark\n\t\tconst numPointPairs = numPoints * numPoints;\n\t\tfor ( let i = 0; i < numPointPairs; i ++ ) this.segments[ i ] = false;\n\n\t\tconst p0 = this.tempVector3_P0;\n\t\tconst p1 = this.tempVector3_P1;\n\t\tconst n0 = this.tempVector3_N0;\n\t\tconst n1 = this.tempVector3_N1;\n\n\t\t// Iterate through the faces to mark edges shared by coplanar faces\n\t\tfor ( let i = 0; i < numFaces - 1; i ++ ) {\n\n\t\t\tconst a1 = getVertexIndex( i, 0 );\n\t\t\tconst b1 = getVertexIndex( i, 1 );\n\t\t\tconst c1 = getVertexIndex( i, 2 );\n\n\t\t\t// Assuming all 3 vertices have the same normal\n\t\t\tn0.set( normals[ a1 ], normals[ a1 ] + 1, normals[ a1 ] + 2 );\n\n\t\t\tfor ( let j = i + 1; j < numFaces; j ++ ) {\n\n\t\t\t\tconst a2 = getVertexIndex( j, 0 );\n\t\t\t\tconst b2 = getVertexIndex( j, 1 );\n\t\t\t\tconst c2 = getVertexIndex( j, 2 );\n\n\t\t\t\t// Assuming all 3 vertices have the same normal\n\t\t\t\tn1.set( normals[ a2 ], normals[ a2 ] + 1, normals[ a2 ] + 2 );\n\n\t\t\t\tconst coplanar = 1 - n0.dot( n1 ) < delta;\n\n\t\t\t\tif ( coplanar ) {\n\n\t\t\t\t\tif ( a1 === a2 || a1 === b2 || a1 === c2 ) {\n\n\t\t\t\t\t\tif ( b1 === a2 || b1 === b2 || b1 === c2 ) {\n\n\t\t\t\t\t\t\tthis.segments[ a1 * numPoints + b1 ] = true;\n\t\t\t\t\t\t\tthis.segments[ b1 * numPoints + a1 ] = true;\n\n\t\t\t\t\t\t}\telse {\n\n\t\t\t\t\t\t\tthis.segments[ c1 * numPoints + a1 ] = true;\n\t\t\t\t\t\t\tthis.segments[ a1 * numPoints + c1 ] = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\telse if ( b1 === a2 || b1 === b2 || b1 === c2 ) {\n\n\t\t\t\t\t\tthis.segments[ c1 * numPoints + b1 ] = true;\n\t\t\t\t\t\tthis.segments[ b1 * numPoints + c1 ] = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Transform the plane to object local space\n\t\tconst localPlane = this.tempPlane_Cut;\n\t\tobject.updateMatrix();\n\t\tConvexObjectBreaker.transformPlaneToLocalSpace( plane, object.matrix, localPlane );\n\n\t\t// Iterate through the faces adding points to both pieces\n\t\tfor ( let i = 0; i < numFaces; i ++ ) {\n\n\t\t\tconst va = getVertexIndex( i, 0 );\n\t\t\tconst vb = getVertexIndex( i, 1 );\n\t\t\tconst vc = getVertexIndex( i, 2 );\n\n\t\t\tfor ( let segment = 0; segment < 3; segment ++ ) {\n\n\t\t\t\tconst i0 = segment === 0 ? va : ( segment === 1 ? vb : vc );\n\t\t\t\tconst i1 = segment === 0 ? vb : ( segment === 1 ? vc : va );\n\n\t\t\t\tconst segmentState = this.segments[ i0 * numPoints + i1 ];\n\n\t\t\t\tif ( segmentState ) continue; // The segment already has been processed in another face\n\n\t\t\t\t// Mark segment as processed (also inverted segment)\n\t\t\t\tthis.segments[ i0 * numPoints + i1 ] = true;\n\t\t\t\tthis.segments[ i1 * numPoints + i0 ] = true;\n\n\t\t\t\tp0.set( coords[ 3 * i0 ], coords[ 3 * i0 + 1 ], coords[ 3 * i0 + 2 ] );\n\t\t\t\tp1.set( coords[ 3 * i1 ], coords[ 3 * i1 + 1 ], coords[ 3 * i1 + 2 ] );\n\n\t\t\t\t// mark: 1 for negative side, 2 for positive side, 3 for coplanar point\n\t\t\t\tlet mark0 = 0;\n\n\t\t\t\tlet d = localPlane.distanceToPoint( p0 );\n\n\t\t\t\tif ( d > delta ) {\n\n\t\t\t\t\tmark0 = 2;\n\t\t\t\t\tpoints2.push( p0.clone() );\n\n\t\t\t\t} else if ( d < - delta ) {\n\n\t\t\t\t\tmark0 = 1;\n\t\t\t\t\tpoints1.push( p0.clone() );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmark0 = 3;\n\t\t\t\t\tpoints1.push( p0.clone() );\n\t\t\t\t\tpoints2.push( p0.clone() );\n\n\t\t\t\t}\n\n\t\t\t\t// mark: 1 for negative side, 2 for positive side, 3 for coplanar point\n\t\t\t\tlet mark1 = 0;\n\n\t\t\t\td = localPlane.distanceToPoint( p1 );\n\n\t\t\t\tif ( d > delta ) {\n\n\t\t\t\t\tmark1 = 2;\n\t\t\t\t\tpoints2.push( p1.clone() );\n\n\t\t\t\t} else if ( d < - delta ) {\n\n\t\t\t\t\tmark1 = 1;\n\t\t\t\t\tpoints1.push( p1.clone() );\n\n\t\t\t\t}\telse {\n\n\t\t\t\t\tmark1 = 3;\n\t\t\t\t\tpoints1.push( p1.clone() );\n\t\t\t\t\tpoints2.push( p1.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ( mark0 === 1 && mark1 === 2 ) || ( mark0 === 2 && mark1 === 1 ) ) {\n\n\t\t\t\t\t// Intersection of segment with the plane\n\n\t\t\t\t\tthis.tempLine1.start.copy( p0 );\n\t\t\t\t\tthis.tempLine1.end.copy( p1 );\n\n\t\t\t\t\tlet intersection = new Vector3();\n\t\t\t\t\tintersection = localPlane.intersectLine( this.tempLine1, intersection );\n\n\t\t\t\t\tif ( intersection === null ) {\n\n\t\t\t\t\t\t// Shouldn't happen\n\t\t\t\t\t\tconsole.error( 'Internal error: segment does not intersect plane.' );\n\t\t\t\t\t\toutput.segmentedObject1 = null;\n\t\t\t\t\t\toutput.segmentedObject2 = null;\n\t\t\t\t\t\treturn 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpoints1.push( intersection );\n\t\t\t\t\tpoints2.push( intersection.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Calculate debris mass (very fast and imprecise):\n\t\tconst newMass = object.userData.mass * 0.5;\n\n\t\t// Calculate debris Center of Mass (again fast and imprecise)\n\t\tthis.tempCM1.set( 0, 0, 0 );\n\t\tlet radius1 = 0;\n\t\tconst numPoints1 = points1.length;\n\n\t\tif ( numPoints1 > 0 ) {\n\n\t\t\tfor ( let i = 0; i < numPoints1; i ++ ) this.tempCM1.add( points1[ i ] );\n\n\t\t\tthis.tempCM1.divideScalar( numPoints1 );\n\t\t\tfor ( let i = 0; i < numPoints1; i ++ ) {\n\n\t\t\t\tconst p = points1[ i ];\n\t\t\t\tp.sub( this.tempCM1 );\n\t\t\t\tradius1 = Math.max( radius1, p.x, p.y, p.z );\n\n\t\t\t}\n\n\t\t\tthis.tempCM1.add( object.position );\n\n\t\t}\n\n\t\tthis.tempCM2.set( 0, 0, 0 );\n\t\tlet radius2 = 0;\n\t\tconst numPoints2 = points2.length;\n\t\tif ( numPoints2 > 0 ) {\n\n\t\t\tfor ( let i = 0; i < numPoints2; i ++ ) this.tempCM2.add( points2[ i ] );\n\n\t\t\tthis.tempCM2.divideScalar( numPoints2 );\n\t\t\tfor ( let i = 0; i < numPoints2; i ++ ) {\n\n\t\t\t\tconst p = points2[ i ];\n\t\t\t\tp.sub( this.tempCM2 );\n\t\t\t\tradius2 = Math.max( radius2, p.x, p.y, p.z );\n\n\t\t\t}\n\n\t\t\tthis.tempCM2.add( object.position );\n\n\t\t}\n\n\t\tlet object1 = null;\n\t\tlet object2 = null;\n\n\t\tlet numObjects = 0;\n\n\t\tif ( numPoints1 > 4 ) {\n\n\t\t\tobject1 = new Mesh( new ConvexGeometry( points1 ), object.material );\n\t\t\tobject1.position.copy( this.tempCM1 );\n\t\t\tobject1.quaternion.copy( object.quaternion );\n\n\t\t\tthis.prepareBreakableObject( object1, newMass, object.userData.velocity, object.userData.angularVelocity, 2 * radius1 > this.minSizeForBreak );\n\n\t\t\tnumObjects ++;\n\n\t\t}\n\n\t\tif ( numPoints2 > 4 ) {\n\n\t\t\tobject2 = new Mesh( new ConvexGeometry( points2 ), object.material );\n\t\t\tobject2.position.copy( this.tempCM2 );\n\t\t\tobject2.quaternion.copy( object.quaternion );\n\n\t\t\tthis.prepareBreakableObject( object2, newMass, object.userData.velocity, object.userData.angularVelocity, 2 * radius2 > this.minSizeForBreak );\n\n\t\t\tnumObjects ++;\n\n\t\t}\n\n\t\toutput.object1 = object1;\n\t\toutput.object2 = object2;\n\n\t\treturn numObjects;\n\n\t}\n\n\tstatic transformFreeVector( v, m ) {\n\n\t\t// input:\n\t\t// vector interpreted as a free vector\n\t\t// THREE.Matrix4 orthogonal matrix (matrix without scale)\n\n\t\tconst x = v.x, y = v.y, z = v.z;\n\t\tconst e = m.elements;\n\n\t\tv.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tv.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tv.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn v;\n\n\t}\n\n\tstatic transformFreeVectorInverse( v, m ) {\n\n\t\t// input:\n\t\t// vector interpreted as a free vector\n\t\t// THREE.Matrix4 orthogonal matrix (matrix without scale)\n\n\t\tconst x = v.x, y = v.y, z = v.z;\n\t\tconst e = m.elements;\n\n\t\tv.x = e[ 0 ] * x + e[ 1 ] * y + e[ 2 ] * z;\n\t\tv.y = e[ 4 ] * x + e[ 5 ] * y + e[ 6 ] * z;\n\t\tv.z = e[ 8 ] * x + e[ 9 ] * y + e[ 10 ] * z;\n\n\t\treturn v;\n\n\t}\n\n\tstatic transformTiedVectorInverse( v, m ) {\n\n\t\t// input:\n\t\t// vector interpreted as a tied (ordinary) vector\n\t\t// THREE.Matrix4 orthogonal matrix (matrix without scale)\n\n\t\tconst x = v.x, y = v.y, z = v.z;\n\t\tconst e = m.elements;\n\n\t\tv.x = e[ 0 ] * x + e[ 1 ] * y + e[ 2 ] * z - e[ 12 ];\n\t\tv.y = e[ 4 ] * x + e[ 5 ] * y + e[ 6 ] * z - e[ 13 ];\n\t\tv.z = e[ 8 ] * x + e[ 9 ] * y + e[ 10 ] * z - e[ 14 ];\n\n\t\treturn v;\n\n\t}\n\n\tstatic transformPlaneToLocalSpace( plane, m, resultPlane ) {\n\n\t\tresultPlane.normal.copy( plane.normal );\n\t\tresultPlane.constant = plane.constant;\n\n\t\tconst referencePoint = ConvexObjectBreaker.transformTiedVectorInverse( plane.coplanarPoint( _v1 ), m );\n\n\t\tConvexObjectBreaker.transformFreeVectorInverse( resultPlane.normal, m );\n\n\t\t// recalculate constant (like in setFromNormalAndCoplanarPoint)\n\t\tresultPlane.constant = - referencePoint.dot( resultPlane.normal );\n\n\t}\n\n}\n\nexport { ConvexObjectBreaker };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tOrthographicCamera,\n\tMesh\n} from 'three';\n\nclass Pass {\n\n\tconstructor() {\n\n\t\tthis.isPass = true;\n\n\t\t// if set to true, the pass is processed by the composer\n\t\tthis.enabled = true;\n\n\t\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\t\tthis.needsSwap = true;\n\n\t\t// if set to true, the pass clears its buffer before rendering\n\t\tthis.clear = false;\n\n\t\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\t\tthis.renderToScreen = false;\n\n\t}\n\n\tsetSize( /* width, height */ ) {}\n\n\trender( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n\tdispose() {}\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nclass FullscreenTriangleGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\n\t}\n\n}\n\nconst _geometry = new FullscreenTriangleGeometry();\n\nclass FullScreenQuad {\n\n\tconstructor( material ) {\n\n\t\tthis._mesh = new Mesh( _geometry, material );\n\n\t}\n\n\tdispose() {\n\n\t\tthis._mesh.geometry.dispose();\n\n\t}\n\n\trender( renderer ) {\n\n\t\trenderer.render( this._mesh, _camera );\n\n\t}\n\n\tget material() {\n\n\t\treturn this._mesh.material;\n\n\t}\n\n\tset material( value ) {\n\n\t\tthis._mesh.material = value;\n\n\t}\n\n}\n\nexport { Pass, FullScreenQuad };\n", "import {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tFloatType,\n\tNearestFilter,\n\tRGBAFormat,\n\tShaderMaterial,\n\tWebGLRenderTarget\n} from 'three';\n\nimport { FullScreenQuad } from '../postprocessing/Pass.js';\n\n/**\n * GPUComputationRenderer, based on SimulationRenderer by zz85\n *\n * The GPUComputationRenderer uses the concept of variables. These variables are RGBA float textures that hold 4 floats\n * for each compute element (texel)\n *\n * Each variable has a fragment shader that defines the computation made to obtain the variable in question.\n * You can use as many variables you need, and make dependencies so you can use textures of other variables in the shader\n * (the sampler uniforms are added automatically) Most of the variables will need themselves as dependency.\n *\n * The renderer has actually two render targets per variable, to make ping-pong. Textures from the current frame are used\n * as inputs to render the textures of the next frame.\n *\n * The render targets of the variables can be used as input textures for your visualization shaders.\n *\n * Variable names should be valid identifiers and should not collide with THREE GLSL used identifiers.\n * a common approach could be to use 'texture' prefixing the variable name; i.e texturePosition, textureVelocity...\n *\n * The size of the computation (sizeX * sizeY) is defined as 'resolution' automatically in the shader. For example:\n * #DEFINE resolution vec2( 1024.0, 1024.0 )\n *\n * -------------\n *\n * Basic use:\n *\n * // Initialization...\n *\n * // Create computation renderer\n * const gpuCompute = new GPUComputationRenderer( 1024, 1024, renderer );\n *\n * // Create initial state float textures\n * const pos0 = gpuCompute.createTexture();\n * const vel0 = gpuCompute.createTexture();\n * // and fill in here the texture data...\n *\n * // Add texture variables\n * const velVar = gpuCompute.addVariable( \"textureVelocity\", fragmentShaderVel, vel0 );\n * const posVar = gpuCompute.addVariable( \"texturePosition\", fragmentShaderPos, pos0 );\n *\n * // Add variable dependencies\n * gpuCompute.setVariableDependencies( velVar, [ velVar, posVar ] );\n * gpuCompute.setVariableDependencies( posVar, [ velVar, posVar ] );\n *\n * // Add custom uniforms\n * velVar.material.uniforms.time = { value: 0.0 };\n *\n * // Check for completeness\n * const error = gpuCompute.init();\n * if ( error !== null ) {\n *\t\tconsole.error( error );\n * }\n *\n *\n * // In each frame...\n *\n * // Compute!\n * gpuCompute.compute();\n *\n * // Update texture uniforms in your visualization materials with the gpu renderer output\n * myMaterial.uniforms.myTexture.value = gpuCompute.getCurrentRenderTarget( posVar ).texture;\n *\n * // Do your rendering\n * renderer.render( myScene, myCamera );\n *\n * -------------\n *\n * Also, you can use utility functions to create ShaderMaterial and perform computations (rendering between textures)\n * Note that the shaders can have multiple input textures.\n *\n * const myFilter1 = gpuCompute.createShaderMaterial( myFilterFragmentShader1, { theTexture: { value: null } } );\n * const myFilter2 = gpuCompute.createShaderMaterial( myFilterFragmentShader2, { theTexture: { value: null } } );\n *\n * const inputTexture = gpuCompute.createTexture();\n *\n * // Fill in here inputTexture...\n *\n * myFilter1.uniforms.theTexture.value = inputTexture;\n *\n * const myRenderTarget = gpuCompute.createRenderTarget();\n * myFilter2.uniforms.theTexture.value = myRenderTarget.texture;\n *\n * const outputRenderTarget = gpuCompute.createRenderTarget();\n *\n * // Now use the output texture where you want:\n * myMaterial.uniforms.map.value = outputRenderTarget.texture;\n *\n * // And compute each frame, before rendering to screen:\n * gpuCompute.doRenderTarget( myFilter1, myRenderTarget );\n * gpuCompute.doRenderTarget( myFilter2, outputRenderTarget );\n *\n *\n *\n * @param {int} sizeX Computation problem size is always 2d: sizeX * sizeY elements.\n * @param {int} sizeY Computation problem size is always 2d: sizeX * sizeY elements.\n * @param {WebGLRenderer} renderer The renderer\n */\n\nclass GPUComputationRenderer {\n\n\tconstructor( sizeX, sizeY, renderer ) {\n\n\t\tthis.variables = [];\n\n\t\tthis.currentTextureIndex = 0;\n\n\t\tlet dataType = FloatType;\n\n\t\tconst passThruUniforms = {\n\t\t\tpassThruTexture: { value: null }\n\t\t};\n\n\t\tconst passThruShader = createShaderMaterial( getPassThroughFragmentShader(), passThruUniforms );\n\n\t\tconst quad = new FullScreenQuad( passThruShader );\n\n\t\tthis.setDataType = function ( type ) {\n\n\t\t\tdataType = type;\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addVariable = function ( variableName, computeFragmentShader, initialValueTexture ) {\n\n\t\t\tconst material = this.createShaderMaterial( computeFragmentShader );\n\n\t\t\tconst variable = {\n\t\t\t\tname: variableName,\n\t\t\t\tinitialValueTexture: initialValueTexture,\n\t\t\t\tmaterial: material,\n\t\t\t\tdependencies: null,\n\t\t\t\trenderTargets: [],\n\t\t\t\twrapS: null,\n\t\t\t\twrapT: null,\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter\n\t\t\t};\n\n\t\t\tthis.variables.push( variable );\n\n\t\t\treturn variable;\n\n\t\t};\n\n\t\tthis.setVariableDependencies = function ( variable, dependencies ) {\n\n\t\t\tvariable.dependencies = dependencies;\n\n\t\t};\n\n\t\tthis.init = function () {\n\n\t\t\tif ( renderer.capabilities.maxVertexTextures === 0 ) {\n\n\t\t\t\treturn 'No support for vertex shader textures.';\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < this.variables.length; i ++ ) {\n\n\t\t\t\tconst variable = this.variables[ i ];\n\n\t\t\t\t// Creates rendertargets and initialize them with input texture\n\t\t\t\tvariable.renderTargets[ 0 ] = this.createRenderTarget( sizeX, sizeY, variable.wrapS, variable.wrapT, variable.minFilter, variable.magFilter );\n\t\t\t\tvariable.renderTargets[ 1 ] = this.createRenderTarget( sizeX, sizeY, variable.wrapS, variable.wrapT, variable.minFilter, variable.magFilter );\n\t\t\t\tthis.renderTexture( variable.initialValueTexture, variable.renderTargets[ 0 ] );\n\t\t\t\tthis.renderTexture( variable.initialValueTexture, variable.renderTargets[ 1 ] );\n\n\t\t\t\t// Adds dependencies uniforms to the ShaderMaterial\n\t\t\t\tconst material = variable.material;\n\t\t\t\tconst uniforms = material.uniforms;\n\n\t\t\t\tif ( variable.dependencies !== null ) {\n\n\t\t\t\t\tfor ( let d = 0; d < variable.dependencies.length; d ++ ) {\n\n\t\t\t\t\t\tconst depVar = variable.dependencies[ d ];\n\n\t\t\t\t\t\tif ( depVar.name !== variable.name ) {\n\n\t\t\t\t\t\t\t// Checks if variable exists\n\t\t\t\t\t\t\tlet found = false;\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < this.variables.length; j ++ ) {\n\n\t\t\t\t\t\t\t\tif ( depVar.name === this.variables[ j ].name ) {\n\n\t\t\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( ! found ) {\n\n\t\t\t\t\t\t\t\treturn 'Variable dependency not found. Variable=' + variable.name + ', dependency=' + depVar.name;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuniforms[ depVar.name ] = { value: null };\n\n\t\t\t\t\t\tmaterial.fragmentShader = '\\nuniform sampler2D ' + depVar.name + ';\\n' + material.fragmentShader;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.currentTextureIndex = 0;\n\n\t\t\treturn null;\n\n\t\t};\n\n\t\tthis.compute = function () {\n\n\t\t\tconst currentTextureIndex = this.currentTextureIndex;\n\t\t\tconst nextTextureIndex = this.currentTextureIndex === 0 ? 1 : 0;\n\n\t\t\tfor ( let i = 0, il = this.variables.length; i < il; i ++ ) {\n\n\t\t\t\tconst variable = this.variables[ i ];\n\n\t\t\t\t// Sets texture dependencies uniforms\n\t\t\t\tif ( variable.dependencies !== null ) {\n\n\t\t\t\t\tconst uniforms = variable.material.uniforms;\n\n\t\t\t\t\tfor ( let d = 0, dl = variable.dependencies.length; d < dl; d ++ ) {\n\n\t\t\t\t\t\tconst depVar = variable.dependencies[ d ];\n\n\t\t\t\t\t\tuniforms[ depVar.name ].value = depVar.renderTargets[ currentTextureIndex ].texture;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Performs the computation for this variable\n\t\t\t\tthis.doRenderTarget( variable.material, variable.renderTargets[ nextTextureIndex ] );\n\n\t\t\t}\n\n\t\t\tthis.currentTextureIndex = nextTextureIndex;\n\n\t\t};\n\n\t\tthis.getCurrentRenderTarget = function ( variable ) {\n\n\t\t\treturn variable.renderTargets[ this.currentTextureIndex ];\n\n\t\t};\n\n\t\tthis.getAlternateRenderTarget = function ( variable ) {\n\n\t\t\treturn variable.renderTargets[ this.currentTextureIndex === 0 ? 1 : 0 ];\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tquad.dispose();\n\n\t\t\tconst variables = this.variables;\n\n\t\t\tfor ( let i = 0; i < variables.length; i ++ ) {\n\n\t\t\t\tconst variable = variables[ i ];\n\n\t\t\t\tif ( variable.initialValueTexture ) variable.initialValueTexture.dispose();\n\n\t\t\t\tconst renderTargets = variable.renderTargets;\n\n\t\t\t\tfor ( let j = 0; j < renderTargets.length; j ++ ) {\n\n\t\t\t\t\tconst renderTarget = renderTargets[ j ];\n\t\t\t\t\trenderTarget.dispose();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction addResolutionDefine( materialShader ) {\n\n\t\t\tmaterialShader.defines.resolution = 'vec2( ' + sizeX.toFixed( 1 ) + ', ' + sizeY.toFixed( 1 ) + ' )';\n\n\t\t}\n\n\t\tthis.addResolutionDefine = addResolutionDefine;\n\n\n\t\t// The following functions can be used to compute things manually\n\n\t\tfunction createShaderMaterial( computeFragmentShader, uniforms ) {\n\n\t\t\tuniforms = uniforms || {};\n\n\t\t\tconst material = new ShaderMaterial( {\n\t\t\t\tname: 'GPUComputationShader',\n\t\t\t\tuniforms: uniforms,\n\t\t\t\tvertexShader: getPassThroughVertexShader(),\n\t\t\t\tfragmentShader: computeFragmentShader\n\t\t\t} );\n\n\t\t\taddResolutionDefine( material );\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tthis.createShaderMaterial = createShaderMaterial;\n\n\t\tthis.createRenderTarget = function ( sizeXTexture, sizeYTexture, wrapS, wrapT, minFilter, magFilter ) {\n\n\t\t\tsizeXTexture = sizeXTexture || sizeX;\n\t\t\tsizeYTexture = sizeYTexture || sizeY;\n\n\t\t\twrapS = wrapS || ClampToEdgeWrapping;\n\t\t\twrapT = wrapT || ClampToEdgeWrapping;\n\n\t\t\tminFilter = minFilter || NearestFilter;\n\t\t\tmagFilter = magFilter || NearestFilter;\n\n\t\t\tconst renderTarget = new WebGLRenderTarget( sizeXTexture, sizeYTexture, {\n\t\t\t\twrapS: wrapS,\n\t\t\t\twrapT: wrapT,\n\t\t\t\tminFilter: minFilter,\n\t\t\t\tmagFilter: magFilter,\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\ttype: dataType,\n\t\t\t\tdepthBuffer: false\n\t\t\t} );\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t\tthis.createTexture = function () {\n\n\t\t\tconst data = new Float32Array( sizeX * sizeY * 4 );\n\t\t\tconst texture = new DataTexture( data, sizeX, sizeY, RGBAFormat, FloatType );\n\t\t\ttexture.needsUpdate = true;\n\t\t\treturn texture;\n\n\t\t};\n\n\t\tthis.renderTexture = function ( input, output ) {\n\n\t\t\t// Takes a texture, and render out in rendertarget\n\t\t\t// input = Texture\n\t\t\t// output = RenderTarget\n\n\t\t\tpassThruUniforms.passThruTexture.value = input;\n\n\t\t\tthis.doRenderTarget( passThruShader, output );\n\n\t\t\tpassThruUniforms.passThruTexture.value = null;\n\n\t\t};\n\n\t\tthis.doRenderTarget = function ( material, output ) {\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\t\t\tquad.material = material;\n\t\t\trenderer.setRenderTarget( output );\n\t\t\tquad.render( renderer );\n\t\t\tquad.material = passThruShader;\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t};\n\n\t\t// Shaders\n\n\t\tfunction getPassThroughVertexShader() {\n\n\t\t\treturn\t'void main()\t{\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'\tgl_Position = vec4( position, 1.0 );\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'}\\n';\n\n\t\t}\n\n\t\tfunction getPassThroughFragmentShader() {\n\n\t\t\treturn\t'uniform sampler2D passThruTexture;\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'void main() {\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'\tvec2 uv = gl_FragCoord.xy / resolution.xy;\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'\tgl_FragColor = texture2D( passThruTexture, uv );\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'}\\n';\n\n\t\t}\n\n\t}\n\n}\n\nexport { GPUComputationRenderer };\n", "import {\n\tObject3D,\n\tQuaternion,\n\tVector3\n} from 'three';\n\nconst _translationObject = new Vector3();\nconst _quaternionObject = new Quaternion();\nconst _scaleObject = new Vector3();\n\nconst _translationWorld = new Vector3();\nconst _quaternionWorld = new Quaternion();\nconst _scaleWorld = new Vector3();\n\nclass Gyroscope extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.matrixAutoUpdate && this.updateMatrix();\n\n\t\t// update matrixWorld\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent !== null ) {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\tthis.matrixWorld.decompose( _translationWorld, _quaternionWorld, _scaleWorld );\n\t\t\t\tthis.matrix.decompose( _translationObject, _quaternionObject, _scaleObject );\n\n\t\t\t\tthis.matrixWorld.compose( _translationWorld, _quaternionObject, _scaleWorld );\n\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t}\n\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tthis.children[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n}\n\nexport { Gyroscope };\n", "import {\n\tAnimationMixer,\n\tBox3,\n\tMesh,\n\tMeshLambertMaterial,\n\tObject3D,\n\tTextureLoader,\n\tUVMapping,\n\tSRGBColorSpace\n} from 'three';\nimport { MD2Loader } from '../loaders/MD2Loader.js';\n\nclass MD2Character {\n\n\tconstructor() {\n\n\t\tthis.scale = 1;\n\t\tthis.animationFPS = 6;\n\n\t\tthis.root = new Object3D();\n\n\t\tthis.meshBody = null;\n\t\tthis.meshWeapon = null;\n\n\t\tthis.skinsBody = [];\n\t\tthis.skinsWeapon = [];\n\n\t\tthis.weapons = [];\n\n\t\tthis.activeAnimation = null;\n\n\t\tthis.mixer = null;\n\n\t\tthis.onLoadComplete = function () {};\n\n\t\tthis.loadCounter = 0;\n\n\t}\n\n\tloadParts( config ) {\n\n\t\tconst scope = this;\n\n\t\tfunction createPart( geometry, skinMap ) {\n\n\t\t\tconst materialWireframe = new MeshLambertMaterial( { color: 0xffaa00, wireframe: true } );\n\t\t\tconst materialTexture = new MeshLambertMaterial( { color: 0xffffff, wireframe: false, map: skinMap } );\n\n\t\t\t//\n\n\t\t\tconst mesh = new Mesh( geometry, materialTexture );\n\t\t\tmesh.rotation.y = - Math.PI / 2;\n\n\t\t\tmesh.castShadow = true;\n\t\t\tmesh.receiveShadow = true;\n\n\t\t\t//\n\n\t\t\tmesh.materialTexture = materialTexture;\n\t\t\tmesh.materialWireframe = materialWireframe;\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction loadTextures( baseUrl, textureUrls ) {\n\n\t\t\tconst textureLoader = new TextureLoader();\n\t\t\tconst textures = [];\n\n\t\t\tfor ( let i = 0; i < textureUrls.length; i ++ ) {\n\n\t\t\t\ttextures[ i ] = textureLoader.load( baseUrl + textureUrls[ i ], checkLoadingComplete );\n\t\t\t\ttextures[ i ].mapping = UVMapping;\n\t\t\t\ttextures[ i ].name = textureUrls[ i ];\n\t\t\t\ttextures[ i ].colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\treturn textures;\n\n\t\t}\n\n\t\tfunction checkLoadingComplete() {\n\n\t\t\tscope.loadCounter -= 1;\n\n\t\t\tif ( scope.loadCounter === 0 ) scope.onLoadComplete();\n\n\t\t}\n\n\t\tthis.loadCounter = config.weapons.length * 2 + config.skins.length + 1;\n\n\t\tconst weaponsTextures = [];\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) weaponsTextures[ i ] = config.weapons[ i ][ 1 ];\n\t\t// SKINS\n\n\t\tthis.skinsBody = loadTextures( config.baseUrl + 'skins/', config.skins );\n\t\tthis.skinsWeapon = loadTextures( config.baseUrl + 'skins/', weaponsTextures );\n\n\t\t// BODY\n\n\t\tconst loader = new MD2Loader();\n\n\t\tloader.load( config.baseUrl + config.body, function ( geo ) {\n\n\t\t\tconst boundingBox = new Box3();\n\t\t\tboundingBox.setFromBufferAttribute( geo.attributes.position );\n\n\t\t\tscope.root.position.y = - scope.scale * boundingBox.min.y;\n\n\t\t\tconst mesh = createPart( geo, scope.skinsBody[ 0 ] );\n\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\n\t\t\tscope.root.add( mesh );\n\n\t\t\tscope.meshBody = mesh;\n\n\t\t\tscope.meshBody.clipOffset = 0;\n\t\t\tscope.activeAnimationClipName = mesh.geometry.animations[ 0 ].name;\n\n\t\t\tscope.mixer = new AnimationMixer( mesh );\n\n\t\t\tcheckLoadingComplete();\n\n\t\t} );\n\n\t\t// WEAPONS\n\n\t\tconst generateCallback = function ( index, name ) {\n\n\t\t\treturn function ( geo ) {\n\n\t\t\t\tconst mesh = createPart( geo, scope.skinsWeapon[ index ] );\n\t\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\t\t\t\tmesh.visible = false;\n\n\t\t\t\tmesh.name = name;\n\n\t\t\t\tscope.root.add( mesh );\n\n\t\t\t\tscope.weapons[ index ] = mesh;\n\t\t\t\tscope.meshWeapon = mesh;\n\n\t\t\t\tcheckLoadingComplete();\n\n\t\t\t};\n\n\t\t};\n\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) {\n\n\t\t\tloader.load( config.baseUrl + config.weapons[ i ][ 0 ], generateCallback( i, config.weapons[ i ][ 0 ] ) );\n\n\t\t}\n\n\t}\n\n\tsetPlaybackRate( rate ) {\n\n\t\tif ( rate !== 0 ) {\n\n\t\t\tthis.mixer.timeScale = 1 / rate;\n\n\t\t} else {\n\n\t\t\tthis.mixer.timeScale = 0;\n\n\t\t}\n\n\t}\n\n\tsetWireframe( wireframeEnabled ) {\n\n\t\tif ( wireframeEnabled ) {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialWireframe;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialWireframe;\n\n\t\t} else {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialTexture;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialTexture;\n\n\t\t}\n\n\t}\n\n\tsetSkin( index ) {\n\n\t\tif ( this.meshBody && this.meshBody.material.wireframe === false ) {\n\n\t\t\tthis.meshBody.material.map = this.skinsBody[ index ];\n\n\t\t}\n\n\t}\n\n\tsetWeapon( index ) {\n\n\t\tfor ( let i = 0; i < this.weapons.length; i ++ ) this.weapons[ i ].visible = false;\n\n\t\tconst activeWeapon = this.weapons[ index ];\n\n\t\tif ( activeWeapon ) {\n\n\t\t\tactiveWeapon.visible = true;\n\t\t\tthis.meshWeapon = activeWeapon;\n\n\t\t\tthis.syncWeaponAnimation();\n\n\t\t}\n\n\t}\n\n\tsetAnimation( clipName ) {\n\n\t\tif ( this.meshBody ) {\n\n\t\t\tif ( this.meshBody.activeAction ) {\n\n\t\t\t\tthis.meshBody.activeAction.stop();\n\t\t\t\tthis.meshBody.activeAction = null;\n\n\t\t\t}\n\n\t\t\tconst action = this.mixer.clipAction( clipName, this.meshBody );\n\n\t\t\tif ( action ) {\n\n\t\t\t\tthis.meshBody.activeAction = action.play();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.activeClipName = clipName;\n\n\t\tthis.syncWeaponAnimation();\n\n\t}\n\n\tsyncWeaponAnimation() {\n\n\t\tconst clipName = this.activeClipName;\n\n\t\tif ( this.meshWeapon ) {\n\n\t\t\tif ( this.meshWeapon.activeAction ) {\n\n\t\t\t\tthis.meshWeapon.activeAction.stop();\n\t\t\t\tthis.meshWeapon.activeAction = null;\n\n\t\t\t}\n\n\t\t\tconst action = this.mixer.clipAction( clipName, this.meshWeapon );\n\n\t\t\tif ( action ) {\n\n\t\t\t\tthis.meshWeapon.activeAction = action.syncWith( this.meshBody.activeAction ).play();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tif ( this.mixer ) this.mixer.update( delta );\n\n\t}\n\n}\n\nexport { MD2Character };\n", "import {\n\tMathUtils,\n\tMesh\n} from 'three';\n\nclass MorphBlendMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.animationsMap = {};\n\t\tthis.animationsList = [];\n\n\t\t// prepare default animation\n\t\t// (all frames played together in 1 second)\n\n\t\tconst numFrames = Object.keys( this.morphTargetDictionary ).length;\n\n\t\tconst name = '__default';\n\n\t\tconst startFrame = 0;\n\t\tconst endFrame = numFrames - 1;\n\n\t\tconst fps = numFrames / 1;\n\n\t\tthis.createAnimation( name, startFrame, endFrame, fps );\n\t\tthis.setAnimationWeight( name, 1 );\n\n\t}\n\n\tcreateAnimation( name, start, end, fps ) {\n\n\t\tconst animation = {\n\n\t\t\tstart: start,\n\t\t\tend: end,\n\n\t\t\tlength: end - start + 1,\n\n\t\t\tfps: fps,\n\t\t\tduration: ( end - start ) / fps,\n\n\t\t\tlastFrame: 0,\n\t\t\tcurrentFrame: 0,\n\n\t\t\tactive: false,\n\n\t\t\ttime: 0,\n\t\t\tdirection: 1,\n\t\t\tweight: 1,\n\n\t\t\tdirectionBackwards: false,\n\t\t\tmirroredLoop: false\n\n\t\t};\n\n\t\tthis.animationsMap[ name ] = animation;\n\t\tthis.animationsList.push( animation );\n\n\t}\n\n\tautoCreateAnimations( fps ) {\n\n\t\tconst pattern = /([a-z]+)_?(\\d+)/i;\n\n\t\tlet firstAnimation;\n\n\t\tconst frameRanges = {};\n\n\t\tlet i = 0;\n\n\t\tfor ( const key in this.morphTargetDictionary ) {\n\n\t\t\tconst chunks = key.match( pattern );\n\n\t\t\tif ( chunks && chunks.length > 1 ) {\n\n\t\t\t\tconst name = chunks[ 1 ];\n\n\t\t\t\tif ( ! frameRanges[ name ] ) frameRanges[ name ] = { start: Infinity, end: - Infinity };\n\n\t\t\t\tconst range = frameRanges[ name ];\n\n\t\t\t\tif ( i < range.start ) range.start = i;\n\t\t\t\tif ( i > range.end ) range.end = i;\n\n\t\t\t\tif ( ! firstAnimation ) firstAnimation = name;\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\tfor ( const name in frameRanges ) {\n\n\t\t\tconst range = frameRanges[ name ];\n\t\t\tthis.createAnimation( name, range.start, range.end, fps );\n\n\t\t}\n\n\t\tthis.firstAnimation = firstAnimation;\n\n\t}\n\n\tsetAnimationDirectionForward( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.direction = 1;\n\t\t\tanimation.directionBackwards = false;\n\n\t\t}\n\n\t}\n\n\tsetAnimationDirectionBackward( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.direction = - 1;\n\t\t\tanimation.directionBackwards = true;\n\n\t\t}\n\n\t}\n\n\tsetAnimationFPS( name, fps ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.fps = fps;\n\t\t\tanimation.duration = ( animation.end - animation.start ) / animation.fps;\n\n\t\t}\n\n\t}\n\n\tsetAnimationDuration( name, duration ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.duration = duration;\n\t\t\tanimation.fps = ( animation.end - animation.start ) / animation.duration;\n\n\t\t}\n\n\t}\n\n\tsetAnimationWeight( name, weight ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.weight = weight;\n\n\t\t}\n\n\t}\n\n\tsetAnimationTime( name, time ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.time = time;\n\n\t\t}\n\n\t}\n\n\tgetAnimationTime( name ) {\n\n\t\tlet time = 0;\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\ttime = animation.time;\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\tgetAnimationDuration( name ) {\n\n\t\tlet duration = - 1;\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tduration = animation.duration;\n\n\t\t}\n\n\t\treturn duration;\n\n\t}\n\n\tplayAnimation( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.time = 0;\n\t\t\tanimation.active = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.MorphBlendMesh: animation[' + name + '] undefined in .playAnimation()' );\n\n\t\t}\n\n\t}\n\n\tstopAnimation( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.active = false;\n\n\t\t}\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tfor ( let i = 0, il = this.animationsList.length; i < il; i ++ ) {\n\n\t\t\tconst animation = this.animationsList[ i ];\n\n\t\t\tif ( ! animation.active ) continue;\n\n\t\t\tconst frameTime = animation.duration / animation.length;\n\n\t\t\tanimation.time += animation.direction * delta;\n\n\t\t\tif ( animation.mirroredLoop ) {\n\n\t\t\t\tif ( animation.time > animation.duration || animation.time < 0 ) {\n\n\t\t\t\t\tanimation.direction *= - 1;\n\n\t\t\t\t\tif ( animation.time > animation.duration ) {\n\n\t\t\t\t\t\tanimation.time = animation.duration;\n\t\t\t\t\t\tanimation.directionBackwards = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( animation.time < 0 ) {\n\n\t\t\t\t\t\tanimation.time = 0;\n\t\t\t\t\t\tanimation.directionBackwards = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tanimation.time = animation.time % animation.duration;\n\n\t\t\t\tif ( animation.time < 0 ) animation.time += animation.duration;\n\n\t\t\t}\n\n\t\t\tconst keyframe = animation.start + MathUtils.clamp( Math.floor( animation.time / frameTime ), 0, animation.length - 1 );\n\t\t\tconst weight = animation.weight;\n\n\t\t\tif ( keyframe !== animation.currentFrame ) {\n\n\t\t\t\tthis.morphTargetInfluences[ animation.lastFrame ] = 0;\n\t\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = 1 * weight;\n\n\t\t\t\tthis.morphTargetInfluences[ keyframe ] = 0;\n\n\t\t\t\tanimation.lastFrame = animation.currentFrame;\n\t\t\t\tanimation.currentFrame = keyframe;\n\n\t\t\t}\n\n\t\t\tlet mix = ( animation.time % frameTime ) / frameTime;\n\n\t\t\tif ( animation.directionBackwards ) mix = 1 - mix;\n\n\t\t\tif ( animation.currentFrame !== animation.lastFrame ) {\n\n\t\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = mix * weight;\n\t\t\t\tthis.morphTargetInfluences[ animation.lastFrame ] = ( 1 - mix ) * weight;\n\n\t\t\t} else {\n\n\t\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = weight;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { MorphBlendMesh };\n", "import {\n\tBox3,\n\tMathUtils,\n\tMeshLambertMaterial,\n\tObject3D,\n\tTextureLoader,\n\tUVMapping,\n\tSRGBColorSpace\n} from 'three';\nimport { MD2Loader } from '../loaders/MD2Loader.js';\nimport { MorphBlendMesh } from '../misc/MorphBlendMesh.js';\n\nclass MD2CharacterComplex {\n\n\tconstructor() {\n\n\t\tthis.scale = 1;\n\n\t\t// animation parameters\n\n\t\tthis.animationFPS = 6;\n\t\tthis.transitionFrames = 15;\n\n\t\t// movement model parameters\n\n\t\tthis.maxSpeed = 275;\n\t\tthis.maxReverseSpeed = - 275;\n\n\t\tthis.frontAcceleration = 600;\n\t\tthis.backAcceleration = 600;\n\n\t\tthis.frontDecceleration = 600;\n\n\t\tthis.angularSpeed = 2.5;\n\n\t\t// rig\n\n\t\tthis.root = new Object3D();\n\n\t\tthis.meshBody = null;\n\t\tthis.meshWeapon = null;\n\n\t\tthis.controls = null;\n\n\t\t// skins\n\n\t\tthis.skinsBody = [];\n\t\tthis.skinsWeapon = [];\n\n\t\tthis.weapons = [];\n\n\t\tthis.currentSkin = undefined;\n\n\t\t//\n\n\t\tthis.onLoadComplete = function () {};\n\n\t\t// internals\n\n\t\tthis.meshes = [];\n\t\tthis.animations = {};\n\n\t\tthis.loadCounter = 0;\n\n\t\t// internal movement control variables\n\n\t\tthis.speed = 0;\n\t\tthis.bodyOrientation = 0;\n\n\t\tthis.walkSpeed = this.maxSpeed;\n\t\tthis.crouchSpeed = this.maxSpeed * 0.5;\n\n\t\t// internal animation parameters\n\n\t\tthis.activeAnimation = null;\n\t\tthis.oldAnimation = null;\n\n\t\t// API\n\n\t}\n\n\tenableShadows( enable ) {\n\n\t\tfor ( let i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis.meshes[ i ].castShadow = enable;\n\t\t\tthis.meshes[ i ].receiveShadow = enable;\n\n\t\t}\n\n\t}\n\n\tsetVisible( enable ) {\n\n\t\tfor ( let i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis.meshes[ i ].visible = enable;\n\t\t\tthis.meshes[ i ].visible = enable;\n\n\t\t}\n\n\t}\n\n\tshareParts( original ) {\n\n\t\tthis.animations = original.animations;\n\t\tthis.walkSpeed = original.walkSpeed;\n\t\tthis.crouchSpeed = original.crouchSpeed;\n\n\t\tthis.skinsBody = original.skinsBody;\n\t\tthis.skinsWeapon = original.skinsWeapon;\n\n\t\t// BODY\n\n\t\tconst mesh = this._createPart( original.meshBody.geometry, this.skinsBody[ 0 ] );\n\t\tmesh.scale.set( this.scale, this.scale, this.scale );\n\n\t\tthis.root.position.y = original.root.position.y;\n\t\tthis.root.add( mesh );\n\n\t\tthis.meshBody = mesh;\n\n\t\tthis.meshes.push( mesh );\n\n\t\t// WEAPONS\n\n\t\tfor ( let i = 0; i < original.weapons.length; i ++ ) {\n\n\t\t\tconst meshWeapon = this._createPart( original.weapons[ i ].geometry, this.skinsWeapon[ i ] );\n\t\t\tmeshWeapon.scale.set( this.scale, this.scale, this.scale );\n\t\t\tmeshWeapon.visible = false;\n\n\t\t\tmeshWeapon.name = original.weapons[ i ].name;\n\n\t\t\tthis.root.add( meshWeapon );\n\n\t\t\tthis.weapons[ i ] = meshWeapon;\n\t\t\tthis.meshWeapon = meshWeapon;\n\n\t\t\tthis.meshes.push( meshWeapon );\n\n\t\t}\n\n\t}\n\n\tloadParts( config ) {\n\n\t\tconst scope = this;\n\n\t\tfunction loadTextures( baseUrl, textureUrls ) {\n\n\t\t\tconst textureLoader = new TextureLoader();\n\t\t\tconst textures = [];\n\n\t\t\tfor ( let i = 0; i < textureUrls.length; i ++ ) {\n\n\t\t\t\ttextures[ i ] = textureLoader.load( baseUrl + textureUrls[ i ], checkLoadingComplete );\n\t\t\t\ttextures[ i ].mapping = UVMapping;\n\t\t\t\ttextures[ i ].name = textureUrls[ i ];\n\t\t\t\ttextures[ i ].colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\treturn textures;\n\n\t\t}\n\n\t\tfunction checkLoadingComplete() {\n\n\t\t\tscope.loadCounter -= 1;\n\t\t\tif ( scope.loadCounter === 0 ) \tscope.onLoadComplete();\n\n\t\t}\n\n\t\tthis.animations = config.animations;\n\t\tthis.walkSpeed = config.walkSpeed;\n\t\tthis.crouchSpeed = config.crouchSpeed;\n\n\t\tthis.loadCounter = config.weapons.length * 2 + config.skins.length + 1;\n\n\t\tconst weaponsTextures = [];\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) weaponsTextures[ i ] = config.weapons[ i ][ 1 ];\n\n\t\t// SKINS\n\n\t\tthis.skinsBody = loadTextures( config.baseUrl + 'skins/', config.skins );\n\t\tthis.skinsWeapon = loadTextures( config.baseUrl + 'skins/', weaponsTextures );\n\n\t\t// BODY\n\n\t\tconst loader = new MD2Loader();\n\n\t\tloader.load( config.baseUrl + config.body, function ( geo ) {\n\n\t\t\tconst boundingBox = new Box3();\n\t\t\tboundingBox.setFromBufferAttribute( geo.attributes.position );\n\n\t\t\tscope.root.position.y = - scope.scale * boundingBox.min.y;\n\n\t\t\tconst mesh = scope._createPart( geo, scope.skinsBody[ 0 ] );\n\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\n\t\t\tscope.root.add( mesh );\n\n\t\t\tscope.meshBody = mesh;\n\t\t\tscope.meshes.push( mesh );\n\n\t\t\tcheckLoadingComplete();\n\n\t\t} );\n\n\t\t// WEAPONS\n\n\t\tconst generateCallback = function ( index, name ) {\n\n\t\t\treturn function ( geo ) {\n\n\t\t\t\tconst mesh = scope._createPart( geo, scope.skinsWeapon[ index ] );\n\t\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\t\t\t\tmesh.visible = false;\n\n\t\t\t\tmesh.name = name;\n\n\t\t\t\tscope.root.add( mesh );\n\n\t\t\t\tscope.weapons[ index ] = mesh;\n\t\t\t\tscope.meshWeapon = mesh;\n\t\t\t\tscope.meshes.push( mesh );\n\n\t\t\t\tcheckLoadingComplete();\n\n\t\t\t};\n\n\t\t};\n\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) {\n\n\t\t\tloader.load( config.baseUrl + config.weapons[ i ][ 0 ], generateCallback( i, config.weapons[ i ][ 0 ] ) );\n\n\t\t}\n\n\t}\n\n\tsetPlaybackRate( rate ) {\n\n\t\tif ( this.meshBody ) this.meshBody.duration = this.meshBody.baseDuration / rate;\n\t\tif ( this.meshWeapon ) this.meshWeapon.duration = this.meshWeapon.baseDuration / rate;\n\n\t}\n\n\tsetWireframe( wireframeEnabled ) {\n\n\t\tif ( wireframeEnabled ) {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialWireframe;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialWireframe;\n\n\t\t} else {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialTexture;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialTexture;\n\n\t\t}\n\n\t}\n\n\tsetSkin( index ) {\n\n\t\tif ( this.meshBody && this.meshBody.material.wireframe === false ) {\n\n\t\t\tthis.meshBody.material.map = this.skinsBody[ index ];\n\t\t\tthis.currentSkin = index;\n\n\t\t}\n\n\t}\n\n\tsetWeapon( index ) {\n\n\t\tfor ( let i = 0; i < this.weapons.length; i ++ ) this.weapons[ i ].visible = false;\n\n\t\tconst activeWeapon = this.weapons[ index ];\n\n\t\tif ( activeWeapon ) {\n\n\t\t\tactiveWeapon.visible = true;\n\t\t\tthis.meshWeapon = activeWeapon;\n\n\t\t\tif ( this.activeAnimation ) {\n\n\t\t\t\tactiveWeapon.playAnimation( this.activeAnimation );\n\t\t\t\tthis.meshWeapon.setAnimationTime( this.activeAnimation, this.meshBody.getAnimationTime( this.activeAnimation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetAnimation( animationName ) {\n\n\t\tif ( animationName === this.activeAnimation || ! animationName ) return;\n\n\t\tif ( this.meshBody ) {\n\n\t\t\tthis.meshBody.setAnimationWeight( animationName, 0 );\n\t\t\tthis.meshBody.playAnimation( animationName );\n\n\t\t\tthis.oldAnimation = this.activeAnimation;\n\t\t\tthis.activeAnimation = animationName;\n\n\t\t\tthis.blendCounter = this.transitionFrames;\n\n\t\t}\n\n\t\tif ( this.meshWeapon ) {\n\n\t\t\tthis.meshWeapon.setAnimationWeight( animationName, 0 );\n\t\t\tthis.meshWeapon.playAnimation( animationName );\n\n\t\t}\n\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tif ( this.controls ) this.updateMovementModel( delta );\n\n\t\tif ( this.animations ) {\n\n\t\t\tthis.updateBehaviors();\n\t\t\tthis.updateAnimations( delta );\n\n\t\t}\n\n\t}\n\n\tupdateAnimations( delta ) {\n\n\t\tlet mix = 1;\n\n\t\tif ( this.blendCounter > 0 ) {\n\n\t\t\tmix = ( this.transitionFrames - this.blendCounter ) / this.transitionFrames;\n\t\t\tthis.blendCounter -= 1;\n\n\t\t}\n\n\t\tif ( this.meshBody ) {\n\n\t\t\tthis.meshBody.update( delta );\n\n\t\t\tthis.meshBody.setAnimationWeight( this.activeAnimation, mix );\n\t\t\tthis.meshBody.setAnimationWeight( this.oldAnimation, 1 - mix );\n\n\t\t}\n\n\t\tif ( this.meshWeapon ) {\n\n\t\t\tthis.meshWeapon.update( delta );\n\n\t\t\tthis.meshWeapon.setAnimationWeight( this.activeAnimation, mix );\n\t\t\tthis.meshWeapon.setAnimationWeight( this.oldAnimation, 1 - mix );\n\n\t\t}\n\n\t}\n\n\tupdateBehaviors() {\n\n\t\tconst controls = this.controls;\n\t\tconst animations = this.animations;\n\n\t\tlet moveAnimation, idleAnimation;\n\n\t\t// crouch vs stand\n\n\t\tif ( controls.crouch ) {\n\n\t\t\tmoveAnimation = animations[ 'crouchMove' ];\n\t\t\tidleAnimation = animations[ 'crouchIdle' ];\n\n\t\t} else {\n\n\t\t\tmoveAnimation = animations[ 'move' ];\n\t\t\tidleAnimation = animations[ 'idle' ];\n\n\t\t}\n\n\t\t// actions\n\n\t\tif ( controls.jump ) {\n\n\t\t\tmoveAnimation = animations[ 'jump' ];\n\t\t\tidleAnimation = animations[ 'jump' ];\n\n\t\t}\n\n\t\tif ( controls.attack ) {\n\n\t\t\tif ( controls.crouch ) {\n\n\t\t\t\tmoveAnimation = animations[ 'crouchAttack' ];\n\t\t\t\tidleAnimation = animations[ 'crouchAttack' ];\n\n\t\t\t} else {\n\n\t\t\t\tmoveAnimation = animations[ 'attack' ];\n\t\t\t\tidleAnimation = animations[ 'attack' ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// set animations\n\n\t\tif ( controls.moveForward || controls.moveBackward || controls.moveLeft || controls.moveRight ) {\n\n\t\t\tif ( this.activeAnimation !== moveAnimation ) {\n\n\t\t\t\tthis.setAnimation( moveAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tif ( Math.abs( this.speed ) < 0.2 * this.maxSpeed && ! ( controls.moveLeft || controls.moveRight || controls.moveForward || controls.moveBackward ) ) {\n\n\t\t\tif ( this.activeAnimation !== idleAnimation ) {\n\n\t\t\t\tthis.setAnimation( idleAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// set animation direction\n\n\t\tif ( controls.moveForward ) {\n\n\t\t\tif ( this.meshBody ) {\n\n\t\t\t\tthis.meshBody.setAnimationDirectionForward( this.activeAnimation );\n\t\t\t\tthis.meshBody.setAnimationDirectionForward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t\tif ( this.meshWeapon ) {\n\n\t\t\t\tthis.meshWeapon.setAnimationDirectionForward( this.activeAnimation );\n\t\t\t\tthis.meshWeapon.setAnimationDirectionForward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( controls.moveBackward ) {\n\n\t\t\tif ( this.meshBody ) {\n\n\t\t\t\tthis.meshBody.setAnimationDirectionBackward( this.activeAnimation );\n\t\t\t\tthis.meshBody.setAnimationDirectionBackward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t\tif ( this.meshWeapon ) {\n\n\t\t\t\tthis.meshWeapon.setAnimationDirectionBackward( this.activeAnimation );\n\t\t\t\tthis.meshWeapon.setAnimationDirectionBackward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMovementModel( delta ) {\n\n\t\tfunction exponentialEaseOut( k ) {\n\n\t\t\treturn k === 1 ? 1 : - Math.pow( 2, - 10 * k ) + 1;\n\n\t\t}\n\n\t\tconst controls = this.controls;\n\n\t\t// speed based on controls\n\n\t\tif ( controls.crouch ) \tthis.maxSpeed = this.crouchSpeed;\n\t\telse this.maxSpeed = this.walkSpeed;\n\n\t\tthis.maxReverseSpeed = - this.maxSpeed;\n\n\t\tif ( controls.moveForward ) this.speed = MathUtils.clamp( this.speed + delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\t\tif ( controls.moveBackward ) this.speed = MathUtils.clamp( this.speed - delta * this.backAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\n\t\t// orientation based on controls\n\t\t// (don't just stand while turning)\n\n\t\tconst dir = 1;\n\n\t\tif ( controls.moveLeft ) {\n\n\t\t\tthis.bodyOrientation += delta * this.angularSpeed;\n\t\t\tthis.speed = MathUtils.clamp( this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\n\t\t}\n\n\t\tif ( controls.moveRight ) {\n\n\t\t\tthis.bodyOrientation -= delta * this.angularSpeed;\n\t\t\tthis.speed = MathUtils.clamp( this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\n\t\t}\n\n\t\t// speed decay\n\n\t\tif ( ! ( controls.moveForward || controls.moveBackward ) ) {\n\n\t\t\tif ( this.speed > 0 ) {\n\n\t\t\t\tconst k = exponentialEaseOut( this.speed / this.maxSpeed );\n\t\t\t\tthis.speed = MathUtils.clamp( this.speed - k * delta * this.frontDecceleration, 0, this.maxSpeed );\n\n\t\t\t} else {\n\n\t\t\t\tconst k = exponentialEaseOut( this.speed / this.maxReverseSpeed );\n\t\t\t\tthis.speed = MathUtils.clamp( this.speed + k * delta * this.backAcceleration, this.maxReverseSpeed, 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// displacement\n\n\t\tconst forwardDelta = this.speed * delta;\n\n\t\tthis.root.position.x += Math.sin( this.bodyOrientation ) * forwardDelta;\n\t\tthis.root.position.z += Math.cos( this.bodyOrientation ) * forwardDelta;\n\n\t\t// steering\n\n\t\tthis.root.rotation.y = this.bodyOrientation;\n\n\t}\n\n\t// internal\n\n\t_createPart( geometry, skinMap ) {\n\n\t\tconst materialWireframe = new MeshLambertMaterial( { color: 0xffaa00, wireframe: true } );\n\t\tconst materialTexture = new MeshLambertMaterial( { color: 0xffffff, wireframe: false, map: skinMap } );\n\n\t\t//\n\n\t\tconst mesh = new MorphBlendMesh( geometry, materialTexture );\n\t\tmesh.rotation.y = - Math.PI / 2;\n\n\t\t//\n\n\t\tmesh.materialTexture = materialTexture;\n\t\tmesh.materialWireframe = materialWireframe;\n\n\t\t//\n\n\t\tmesh.autoCreateAnimations( this.animationFPS );\n\n\t\treturn mesh;\n\n\t}\n\n}\n\nexport { MD2CharacterComplex };\n", "import {\n\tAnimationClip,\n\tAnimationMixer,\n\tMesh\n} from 'three';\n\nclass MorphAnimMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'MorphAnimMesh';\n\n\t\tthis.mixer = new AnimationMixer( this );\n\t\tthis.activeAction = null;\n\n\t}\n\n\tsetDirectionForward() {\n\n\t\tthis.mixer.timeScale = 1.0;\n\n\t}\n\n\tsetDirectionBackward() {\n\n\t\tthis.mixer.timeScale = - 1.0;\n\n\t}\n\n\tplayAnimation( label, fps ) {\n\n\t\tif ( this.activeAction ) {\n\n\t\t\tthis.activeAction.stop();\n\t\t\tthis.activeAction = null;\n\n\t\t}\n\n\t\tconst clip = AnimationClip.findByName( this, label );\n\n\t\tif ( clip ) {\n\n\t\t\tconst action = this.mixer.clipAction( clip );\n\t\t\taction.timeScale = ( clip.tracks.length * fps ) / clip.duration;\n\t\t\tthis.activeAction = action.play();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.MorphAnimMesh: animations[' + label + '] undefined in .playAnimation()' );\n\n\t\t}\n\n\t}\n\n\tupdateAnimation( delta ) {\n\n\t\tthis.mixer.update( delta );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.mixer = new AnimationMixer( this );\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MorphAnimMesh };\n", "/**\n * potpack - by [@mourner](https://github.com/mourner)\n * \n * A tiny JavaScript function for packing 2D rectangles into a near-square container, \n * which is useful for generating CSS sprites and WebGL textures. Similar to \n * [shelf-pack](https://github.com/mapbox/shelf-pack), but static (you can't add items \n * once a layout is generated), and aims for maximal space utilization.\n *\n * A variation of algorithms used in [rectpack2D](https://github.com/TeamHypersomnia/rectpack2D)\n * and [bin-pack](https://github.com/bryanburgers/bin-pack), which are in turn based \n * on [this article by Blackpawn](http://blackpawn.com/texts/lightmaps/default.html).\n * \n * @license\n * ISC License\n * \n * Copyright (c) 2018, Mapbox\n * \n * Permission to use, copy, modify, and/or distribute this software for any purpose\n * with or without fee is hereby granted, provided that the above copyright notice\n * and this permission notice appear in all copies.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n * THIS SOFTWARE.\n */\n\nfunction potpack(boxes) {\n\n\t// calculate total box area and maximum box width\n\tlet area = 0;\n\tlet maxWidth = 0;\n\t\n\tfor (const box of boxes) {\n\t\tarea += box.w * box.h;\n\t\tmaxWidth = Math.max(maxWidth, box.w);\n\t}\n\t\n\t// sort the boxes for insertion by height, descending\n\tboxes.sort((a, b) => b.h - a.h);\n\t\n\t// aim for a squarish resulting container,\n\t// slightly adjusted for sub-100% space utilization\n\tconst startWidth = Math.max(Math.ceil(Math.sqrt(area / 0.95)), maxWidth);\n\t\n\t// start with a single empty space, unbounded at the bottom\n\tconst spaces = [{x: 0, y: 0, w: startWidth, h: Infinity}];\n\t\n\tlet width = 0;\n\tlet height = 0;\n\t\n\tfor (const box of boxes) {\n\t\t// look through spaces backwards so that we check smaller spaces first\n\t\tfor (let i = spaces.length - 1; i >= 0; i--) {\n\t\t\tconst space = spaces[i];\n\t\t\t\n\t\t\t// look for empty spaces that can accommodate the current box\n\t\t\tif (box.w > space.w || box.h > space.h) continue;\n\t\t\t\n\t\t\t// found the space; add the box to its top-left corner\n\t\t\t// |-------|-------|\n\t\t\t// | box | |\n\t\t\t// |_______| |\n\t\t\t// | space |\n\t\t\t// |_______________|\n\t\t\tbox.x = space.x;\n\t\t\tbox.y = space.y;\n\t\t\t\n\t\t\theight = Math.max(height, box.y + box.h);\n\t\t\twidth = Math.max(width, box.x + box.w);\n\t\t\t\n\t\t\tif (box.w === space.w && box.h === space.h) {\n\t\t\t\t// space matches the box exactly; remove it\n\t\t\t\tconst last = spaces.pop();\n\t\t\t\tif (i < spaces.length) spaces[i] = last;\n\t\t\t\n\t\t\t} else if (box.h === space.h) {\n\t\t\t\t// space matches the box height; update it accordingly\n\t\t\t\t// |-------|---------------|\n\t\t\t\t// | box | updated space |\n\t\t\t\t// |_______|_______________|\n\t\t\t\tspace.x += box.w;\n\t\t\t\tspace.w -= box.w;\n\t\t\t\n\t\t\t} else if (box.w === space.w) {\n\t\t\t\t// space matches the box width; update it accordingly\n\t\t\t\t// |---------------|\n\t\t\t\t// | box |\n\t\t\t\t// |_______________|\n\t\t\t\t// | updated space |\n\t\t\t\t// |_______________|\n\t\t\t\tspace.y += box.h;\n\t\t\t\tspace.h -= box.h;\n\t\t\t\n\t\t\t} else {\n\t\t\t\t// otherwise the box splits the space into two spaces\n\t\t\t\t// |-------|-----------|\n\t\t\t\t// | box | new space |\n\t\t\t\t// |_______|___________|\n\t\t\t\t// | updated space |\n\t\t\t\t// |___________________|\n\t\t\t\tspaces.push({\n\t\t\t\t\tx: space.x + box.w,\n\t\t\t\t\ty: space.y,\n\t\t\t\t\tw: space.w - box.w,\n\t\t\t\t\th: box.h\n\t\t\t\t});\n\t\t\t\tspace.y += box.h;\n\t\t\t\tspace.h -= box.h;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\t\n\treturn {\n\t\tw: width, // container width\n\t\th: height, // container height\n\t\tfill: (area / (width * height)) || 0 // space utilization\n\t};\n}\n\nexport { potpack };", "import * as THREE from 'three';\nimport { potpack } from '../libs/potpack.module.js';\n\n/**\n * Progressive Light Map Accumulator, by [zalo](https://github.com/zalo/)\n *\n * To use, simply construct a `ProgressiveLightMap` object,\n * `plmap.addObjectsToLightMap(object)` an array of semi-static\n * objects and lights to the class once, and then call\n * `plmap.update(camera)` every frame to begin accumulating\n * lighting samples.\n *\n * This should begin accumulating lightmaps which apply to\n * your objects, so you can start jittering lighting to achieve\n * the texture-space effect you're looking for.\n *\n * @param {WebGLRenderer} renderer A WebGL Rendering Context\n * @param {number} res The side-long dimension of you total lightmap\n */\nclass ProgressiveLightMap {\n\n\tconstructor( renderer, res = 1024 ) {\n\n\t\tthis.renderer = renderer;\n\t\tthis.res = res;\n\t\tthis.lightMapContainers = [];\n\t\tthis.compiled = false;\n\t\tthis.scene = new THREE.Scene();\n\t\tthis.scene.background = null;\n\t\tthis.tinyTarget = new THREE.WebGLRenderTarget( 1, 1 );\n\t\tthis.buffer1Active = false;\n\t\tthis.firstUpdate = true;\n\t\tthis.warned = false;\n\n\t\t// Create the Progressive LightMap Texture\n\t\tconst format = /(Android|iPad|iPhone|iPod)/g.test( navigator.userAgent ) ? THREE.HalfFloatType : THREE.FloatType;\n\t\tthis.progressiveLightMap1 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } );\n\t\tthis.progressiveLightMap2 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } );\n\t\tthis.progressiveLightMap2.texture.channel = 1;\n\n\t\t// Inject some spicy new logic into a standard phong material\n\t\tthis.uvMat = new THREE.MeshPhongMaterial();\n\t\tthis.uvMat.uniforms = {};\n\t\tthis.uvMat.onBeforeCompile = ( shader ) => {\n\n\t\t\t// Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions\n\t\t\tshader.vertexShader =\n\t\t\t\t'attribute vec2 uv1;\\n' +\n\t\t\t\t'#define USE_LIGHTMAP\\n' +\n\t\t\t\t'#define LIGHTMAP_UV uv1\\n' +\n\t\t\t\tshader.vertexShader.slice( 0, - 1 ) +\n\t\t\t\t'\tgl_Position = vec4((LIGHTMAP_UV - 0.5) * 2.0, 1.0, 1.0); }';\n\n\t\t\t// Fragment Shader: Set Pixels to average in the Previous frame's Shadows\n\t\t\tconst bodyStart = shader.fragmentShader.indexOf( 'void main() {' );\n\t\t\tshader.fragmentShader =\n\t\t\t\t'#define USE_LIGHTMAP\\n' +\n\t\t\t\tshader.fragmentShader.slice( 0, bodyStart ) +\n\t\t\t\t'\tuniform sampler2D previousShadowMap;\\n\tuniform float averagingWindow;\\n' +\n\t\t\t\tshader.fragmentShader.slice( bodyStart - 1, - 1 ) +\n\t\t\t\t`\\nvec3 texelOld = texture2D(previousShadowMap, vLightMapUv).rgb;\n\t\t\t\tgl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);\n\t\t\t}`;\n\n\t\t\t// Set the Previous Frame's Texture Buffer and Averaging Window\n\t\t\tshader.uniforms.previousShadowMap = { value: this.progressiveLightMap1.texture };\n\t\t\tshader.uniforms.averagingWindow = { value: 100 };\n\n\t\t\tthis.uvMat.uniforms = shader.uniforms;\n\n\t\t\t// Set the new Shader to this\n\t\t\tthis.uvMat.userData.shader = shader;\n\n\t\t\tthis.compiled = true;\n\n\t\t};\n\n\t}\n\n\t/**\n\t * Sets these objects' materials' lightmaps and modifies their uv1's.\n\t * @param {Object3D} objects An array of objects and lights to set up your lightmap.\n\t */\n\taddObjectsToLightMap( objects ) {\n\n\t\t// Prepare list of UV bounding boxes for packing later...\n\t\tthis.uv_boxes = []; const padding = 3 / this.res;\n\n\t\tfor ( let ob = 0; ob < objects.length; ob ++ ) {\n\n\t\t\tconst object = objects[ ob ];\n\n\t\t\t// If this object is a light, simply add it to the internal scene\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tthis.scene.attach( object ); continue;\n\n\t\t\t}\n\n\t\t\tif ( ! object.geometry.hasAttribute( 'uv' ) ) {\n\n\t\t\t\tconsole.warn( 'All lightmap objects need UVs!' ); continue;\n\n\t\t\t}\n\n\t\t\tif ( this.blurringPlane == null ) {\n\n\t\t\t\tthis._initializeBlurPlane( this.res, this.progressiveLightMap1 );\n\n\t\t\t}\n\n\t\t\t// Apply the lightmap to the object\n\t\t\tobject.material.lightMap = this.progressiveLightMap2.texture;\n\t\t\tobject.material.dithering = true;\n\t\t\tobject.castShadow = true;\n\t\t\tobject.receiveShadow = true;\n\t\t\tobject.renderOrder = 1000 + ob;\n\n\t\t\t// Prepare UV boxes for potpack\n\t\t\t// TODO: Size these by object surface area\n\t\t\tthis.uv_boxes.push( { w: 1 + ( padding * 2 ),\n\t\t\t\t\t\t\t\t h: 1 + ( padding * 2 ), index: ob } );\n\n\t\t\tthis.lightMapContainers.push( { basicMat: object.material, object: object } );\n\n\t\t\tthis.compiled = false;\n\n\t\t}\n\n\t\t// Pack the objects' lightmap UVs into the same global space\n\t\tconst dimensions = potpack( this.uv_boxes );\n\t\tthis.uv_boxes.forEach( ( box ) => {\n\n\t\t\tconst uv1 = objects[ box.index ].geometry.getAttribute( 'uv' ).clone();\n\t\t\tfor ( let i = 0; i < uv1.array.length; i += uv1.itemSize ) {\n\n\t\t\t\tuv1.array[ i ] = ( uv1.array[ i ] + box.x + padding ) / dimensions.w;\n\t\t\t\tuv1.array[ i + 1 ] = ( uv1.array[ i + 1 ] + box.y + padding ) / dimensions.h;\n\n\t\t\t}\n\n\t\t\tobjects[ box.index ].geometry.setAttribute( 'uv1', uv1 );\n\t\t\tobjects[ box.index ].geometry.getAttribute( 'uv1' ).needsUpdate = true;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * This function renders each mesh one at a time into their respective surface maps\n\t * @param {Camera} camera Standard Rendering Camera\n\t * @param {number} blendWindow When >1, samples will accumulate over time.\n\t * @param {boolean} blurEdges Whether to fix UV Edges via blurring\n\t */\n\tupdate( camera, blendWindow = 100, blurEdges = true ) {\n\n\t\tif ( this.blurringPlane == null ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Store the original Render Target\n\t\tconst oldTarget = this.renderer.getRenderTarget();\n\n\t\t// The blurring plane applies blur to the seams of the lightmap\n\t\tthis.blurringPlane.visible = blurEdges;\n\n\t\t// Steal the Object3D from the real world to our special dimension\n\t\tfor ( let l = 0; l < this.lightMapContainers.length; l ++ ) {\n\n\t\t\tthis.lightMapContainers[ l ].object.oldScene =\n\t\t\t\tthis.lightMapContainers[ l ].object.parent;\n\t\t\tthis.scene.attach( this.lightMapContainers[ l ].object );\n\n\t\t}\n\n\t\t// Render once normally to initialize everything\n\t\tif ( this.firstUpdate ) {\n\n\t\t\tthis.renderer.setRenderTarget( this.tinyTarget ); // Tiny for Speed\n\t\t\tthis.renderer.render( this.scene, camera );\n\t\t\tthis.firstUpdate = false;\n\n\t\t}\n\n\t\t// Set each object's material to the UV Unwrapped Surface Mapping Version\n\t\tfor ( let l = 0; l < this.lightMapContainers.length; l ++ ) {\n\n\t\t\tthis.uvMat.uniforms.averagingWindow = { value: blendWindow };\n\t\t\tthis.lightMapContainers[ l ].object.material = this.uvMat;\n\t\t\tthis.lightMapContainers[ l ].object.oldFrustumCulled =\n\t\t\t\tthis.lightMapContainers[ l ].object.frustumCulled;\n\t\t\tthis.lightMapContainers[ l ].object.frustumCulled = false;\n\n\t\t}\n\n\t\t// Ping-pong two surface buffers for reading/writing\n\t\tconst activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;\n\t\tconst inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1;\n\n\t\t// Render the object's surface maps\n\t\tthis.renderer.setRenderTarget( activeMap );\n\t\tthis.uvMat.uniforms.previousShadowMap = { value: inactiveMap.texture };\n\t\tthis.blurringPlane.material.uniforms.previousShadowMap = { value: inactiveMap.texture };\n\t\tthis.buffer1Active = ! this.buffer1Active;\n\t\tthis.renderer.render( this.scene, camera );\n\n\t\t// Restore the object's Real-time Material and add it back to the original world\n\t\tfor ( let l = 0; l < this.lightMapContainers.length; l ++ ) {\n\n\t\t\tthis.lightMapContainers[ l ].object.frustumCulled =\n\t\t\t\tthis.lightMapContainers[ l ].object.oldFrustumCulled;\n\t\t\tthis.lightMapContainers[ l ].object.material = this.lightMapContainers[ l ].basicMat;\n\t\t\tthis.lightMapContainers[ l ].object.oldScene.attach( this.lightMapContainers[ l ].object );\n\n\t\t}\n\n\t\t// Restore the original Render Target\n\t\tthis.renderer.setRenderTarget( oldTarget );\n\n\t}\n\n\t/** DEBUG\n\t * Draw the lightmap in the main scene. Call this after adding the objects to it.\n\t * @param {boolean} visible Whether the debug plane should be visible\n\t * @param {Vector3} position Where the debug plane should be drawn\n\t*/\n\tshowDebugLightmap( visible, position = undefined ) {\n\n\t\tif ( this.lightMapContainers.length == 0 ) {\n\n\t\t\tif ( ! this.warned ) {\n\n\t\t\t\tconsole.warn( 'Call this after adding the objects!' ); this.warned = true;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.labelMesh == null ) {\n\n\t\t\tthis.labelMaterial = new THREE.MeshBasicMaterial(\n\t\t\t\t{ map: this.progressiveLightMap1.texture, side: THREE.DoubleSide } );\n\t\t\tthis.labelPlane = new THREE.PlaneGeometry( 100, 100 );\n\t\t\tthis.labelMesh = new THREE.Mesh( this.labelPlane, this.labelMaterial );\n\t\t\tthis.labelMesh.position.y = 250;\n\t\t\tthis.lightMapContainers[ 0 ].object.parent.add( this.labelMesh );\n\n\t\t}\n\n\t\tif ( position != undefined ) {\n\n\t\t\tthis.labelMesh.position.copy( position );\n\n\t\t}\n\n\t\tthis.labelMesh.visible = visible;\n\n\t}\n\n\t/**\n\t * INTERNAL Creates the Blurring Plane\n\t * @param {number} res The square resolution of this object's lightMap.\n\t * @param {WebGLRenderTexture} lightMap The lightmap to initialize the plane with.\n\t */\n\t_initializeBlurPlane( res, lightMap = null ) {\n\n\t\tconst blurMaterial = new THREE.MeshBasicMaterial();\n\t\tblurMaterial.uniforms = { previousShadowMap: { value: null },\n\t\t\t\t\t\t\t\t pixelOffset: { value: 1.0 / res },\n\t\t\t\t\t\t\t\t polygonOffset: true, polygonOffsetFactor: - 1, polygonOffsetUnits: 3.0 };\n\t\tblurMaterial.onBeforeCompile = ( shader ) => {\n\n\t\t\t// Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions\n\t\t\tshader.vertexShader =\n\t\t\t\t'#define USE_UV\\n' +\n\t\t\t\tshader.vertexShader.slice( 0, - 1 ) +\n\t\t\t\t'\tgl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }';\n\n\t\t\t// Fragment Shader: Set Pixels to 9-tap box blur the current frame's Shadows\n\t\t\tconst bodyStart\t= shader.fragmentShader.indexOf( 'void main() {' );\n\t\t\tshader.fragmentShader =\n\t\t\t\t'#define USE_UV\\n' +\n\t\t\t\tshader.fragmentShader.slice( 0, bodyStart ) +\n\t\t\t\t'\tuniform sampler2D previousShadowMap;\\n\tuniform float pixelOffset;\\n' +\n\t\t\t\tshader.fragmentShader.slice( bodyStart - 1, - 1 ) +\n\t\t\t\t\t`\tgl_FragColor.rgb = (\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, 0.0 )).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( 0.0 , pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( 0.0 , -pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, 0.0 )).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, -pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, -pixelOffset)).rgb)/8.0;\n\t\t\t\t}`;\n\n\t\t\t// Set the LightMap Accumulation Buffer\n\t\t\tshader.uniforms.previousShadowMap = { value: lightMap.texture };\n\t\t\tshader.uniforms.pixelOffset = { value: 0.5 / res };\n\t\t\tblurMaterial.uniforms = shader.uniforms;\n\n\t\t\t// Set the new Shader to this\n\t\t\tblurMaterial.userData.shader = shader;\n\n\t\t\tthis.compiled = true;\n\n\t\t};\n\n\t\tthis.blurringPlane = new THREE.Mesh( new THREE.PlaneGeometry( 1, 1 ), blurMaterial );\n\t\tthis.blurringPlane.name = 'Blurring Plane';\n\t\tthis.blurringPlane.frustumCulled = false;\n\t\tthis.blurringPlane.renderOrder = 0;\n\t\tthis.blurringPlane.material.depthWrite = false;\n\t\tthis.scene.add( this.blurringPlane );\n\n\t}\n\n}\n\nexport { ProgressiveLightMap };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tQuaternion,\n\tRaycaster,\n\tSRGBColorSpace,\n\tVector3\n} from 'three';\n\nclass RollerCoasterGeometry extends BufferGeometry {\n\n\tconstructor( curve, divisions ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = [ 1, 1, 1 ];\n\t\tconst color2 = [ 1, 1, 0 ];\n\n\t\tconst up = new Vector3( 0, 1, 0 );\n\t\tconst forward = new Vector3();\n\t\tconst right = new Vector3();\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst prevQuaternion = new Quaternion();\n\t\tprevQuaternion.setFromAxisAngle( up, Math.PI / 2 );\n\n\t\tconst point = new Vector3();\n\t\tconst prevPoint = new Vector3();\n\t\tprevPoint.copy( curve.getPointAt( 0 ) );\n\n\t\t// shapes\n\n\t\tconst step = [\n\t\t\tnew Vector3( - 0.225, 0, 0 ),\n\t\t\tnew Vector3( 0, - 0.050, 0 ),\n\t\t\tnew Vector3( 0, - 0.175, 0 ),\n\n\t\t\tnew Vector3( 0, - 0.050, 0 ),\n\t\t\tnew Vector3( 0.225, 0, 0 ),\n\t\t\tnew Vector3( 0, - 0.175, 0 )\n\t\t];\n\n\t\tconst PI2 = Math.PI * 2;\n\n\t\tlet sides = 5;\n\t\tconst tube1 = [];\n\n\t\tfor ( let i = 0; i < sides; i ++ ) {\n\n\t\t\tconst angle = ( i / sides ) * PI2;\n\t\t\ttube1.push( new Vector3( Math.sin( angle ) * 0.06, Math.cos( angle ) * 0.06, 0 ) );\n\n\t\t}\n\n\t\tsides = 6;\n\t\tconst tube2 = [];\n\n\t\tfor ( let i = 0; i < sides; i ++ ) {\n\n\t\t\tconst angle = ( i / sides ) * PI2;\n\t\t\ttube2.push( new Vector3( Math.sin( angle ) * 0.025, Math.cos( angle ) * 0.025, 0 ) );\n\n\t\t}\n\n\t\tconst vector = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tfunction drawShape( shape, color ) {\n\n\t\t\tnormal.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\tfor ( let j = 0; j < shape.length; j ++ ) {\n\n\t\t\t\tvector.copy( shape[ j ] );\n\t\t\t\tvector.applyQuaternion( quaternion );\n\t\t\t\tvector.add( point );\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t}\n\n\t\t\tnormal.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t\tfor ( let j = shape.length - 1; j >= 0; j -- ) {\n\n\t\t\t\tvector.copy( shape[ j ] );\n\t\t\t\tvector.applyQuaternion( quaternion );\n\t\t\t\tvector.add( point );\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\tconst normal1 = new Vector3();\n\t\tconst normal2 = new Vector3();\n\t\tconst normal3 = new Vector3();\n\t\tconst normal4 = new Vector3();\n\n\t\tfunction extrudeShape( shape, offset, color ) {\n\n\t\t\tfor ( let j = 0, jl = shape.length; j < jl; j ++ ) {\n\n\t\t\t\tconst point1 = shape[ j ];\n\t\t\t\tconst point2 = shape[ ( j + 1 ) % jl ];\n\n\t\t\t\tvector1.copy( point1 ).add( offset );\n\t\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\t\tvector1.add( point );\n\n\t\t\t\tvector2.copy( point2 ).add( offset );\n\t\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\t\tvector2.add( point );\n\n\t\t\t\tvector3.copy( point2 ).add( offset );\n\t\t\t\tvector3.applyQuaternion( prevQuaternion );\n\t\t\t\tvector3.add( prevPoint );\n\n\t\t\t\tvector4.copy( point1 ).add( offset );\n\t\t\t\tvector4.applyQuaternion( prevQuaternion );\n\t\t\t\tvector4.add( prevPoint );\n\n\t\t\t\tvertices.push( vector1.x, vector1.y, vector1.z );\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector3.x, vector3.y, vector3.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\t//\n\n\t\t\t\tnormal1.copy( point1 );\n\t\t\t\tnormal1.applyQuaternion( quaternion );\n\t\t\t\tnormal1.normalize();\n\n\t\t\t\tnormal2.copy( point2 );\n\t\t\t\tnormal2.applyQuaternion( quaternion );\n\t\t\t\tnormal2.normalize();\n\n\t\t\t\tnormal3.copy( point2 );\n\t\t\t\tnormal3.applyQuaternion( prevQuaternion );\n\t\t\t\tnormal3.normalize();\n\n\t\t\t\tnormal4.copy( point1 );\n\t\t\t\tnormal4.applyQuaternion( prevQuaternion );\n\t\t\t\tnormal4.normalize();\n\n\t\t\t\tnormals.push( normal1.x, normal1.y, normal1.z );\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal3.x, normal3.y, normal3.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst offset = new Vector3();\n\n\t\tfor ( let i = 1; i <= divisions; i ++ ) {\n\n\t\t\tpoint.copy( curve.getPointAt( i / divisions ) );\n\n\t\t\tup.set( 0, 1, 0 );\n\n\t\t\tforward.subVectors( point, prevPoint ).normalize();\n\t\t\tright.crossVectors( up, forward ).normalize();\n\t\t\tup.crossVectors( forward, right );\n\n\t\t\tconst angle = Math.atan2( forward.x, forward.z );\n\n\t\t\tquaternion.setFromAxisAngle( up, angle );\n\n\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\tdrawShape( step, color2 );\n\n\t\t\t}\n\n\t\t\textrudeShape( tube1, offset.set( 0, - 0.125, 0 ), color2 );\n\t\t\textrudeShape( tube2, offset.set( 0.2, 0, 0 ), color1 );\n\t\t\textrudeShape( tube2, offset.set( - 0.2, 0, 0 ), color1 );\n\n\t\t\tprevPoint.copy( point );\n\t\t\tprevQuaternion.copy( quaternion );\n\n\t\t}\n\n\t\t// console.log( vertices.length );\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'normal', new BufferAttribute( new Float32Array( normals ), 3 ) );\n\t\tthis.setAttribute( 'color', new BufferAttribute( new Float32Array( colors ), 3 ) );\n\n\t}\n\n}\n\nclass RollerCoasterLiftersGeometry extends BufferGeometry {\n\n\tconstructor( curve, divisions ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\n\t\tconst quaternion = new Quaternion();\n\n\t\tconst up = new Vector3( 0, 1, 0 );\n\n\t\tconst point = new Vector3();\n\t\tconst tangent = new Vector3();\n\n\t\t// shapes\n\n\t\tconst tube1 = [\n\t\t\tnew Vector3( 0, 0.05, - 0.05 ),\n\t\t\tnew Vector3( 0, 0.05, 0.05 ),\n\t\t\tnew Vector3( 0, - 0.05, 0 )\n\t\t];\n\n\t\tconst tube2 = [\n\t\t\tnew Vector3( - 0.05, 0, 0.05 ),\n\t\t\tnew Vector3( - 0.05, 0, - 0.05 ),\n\t\t\tnew Vector3( 0.05, 0, 0 )\n\t\t];\n\n\t\tconst tube3 = [\n\t\t\tnew Vector3( 0.05, 0, - 0.05 ),\n\t\t\tnew Vector3( 0.05, 0, 0.05 ),\n\t\t\tnew Vector3( - 0.05, 0, 0 )\n\t\t];\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\tconst normal1 = new Vector3();\n\t\tconst normal2 = new Vector3();\n\t\tconst normal3 = new Vector3();\n\t\tconst normal4 = new Vector3();\n\n\t\tfunction extrudeShape( shape, fromPoint, toPoint ) {\n\n\t\t\tfor ( let j = 0, jl = shape.length; j < jl; j ++ ) {\n\n\t\t\t\tconst point1 = shape[ j ];\n\t\t\t\tconst point2 = shape[ ( j + 1 ) % jl ];\n\n\t\t\t\tvector1.copy( point1 );\n\t\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\t\tvector1.add( fromPoint );\n\n\t\t\t\tvector2.copy( point2 );\n\t\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\t\tvector2.add( fromPoint );\n\n\t\t\t\tvector3.copy( point2 );\n\t\t\t\tvector3.applyQuaternion( quaternion );\n\t\t\t\tvector3.add( toPoint );\n\n\t\t\t\tvector4.copy( point1 );\n\t\t\t\tvector4.applyQuaternion( quaternion );\n\t\t\t\tvector4.add( toPoint );\n\n\t\t\t\tvertices.push( vector1.x, vector1.y, vector1.z );\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector3.x, vector3.y, vector3.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\t//\n\n\t\t\t\tnormal1.copy( point1 );\n\t\t\t\tnormal1.applyQuaternion( quaternion );\n\t\t\t\tnormal1.normalize();\n\n\t\t\t\tnormal2.copy( point2 );\n\t\t\t\tnormal2.applyQuaternion( quaternion );\n\t\t\t\tnormal2.normalize();\n\n\t\t\t\tnormal3.copy( point2 );\n\t\t\t\tnormal3.applyQuaternion( quaternion );\n\t\t\t\tnormal3.normalize();\n\n\t\t\t\tnormal4.copy( point1 );\n\t\t\t\tnormal4.applyQuaternion( quaternion );\n\t\t\t\tnormal4.normalize();\n\n\t\t\t\tnormals.push( normal1.x, normal1.y, normal1.z );\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal3.x, normal3.y, normal3.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst fromPoint = new Vector3();\n\t\tconst toPoint = new Vector3();\n\n\t\tfor ( let i = 1; i <= divisions; i ++ ) {\n\n\t\t\tpoint.copy( curve.getPointAt( i / divisions ) );\n\t\t\ttangent.copy( curve.getTangentAt( i / divisions ) );\n\n\t\t\tconst angle = Math.atan2( tangent.x, tangent.z );\n\n\t\t\tquaternion.setFromAxisAngle( up, angle );\n\n\t\t\t//\n\n\t\t\tif ( point.y > 10 ) {\n\n\t\t\t\tfromPoint.set( - 0.75, - 0.35, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( 0.75, - 0.35, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube1, fromPoint, toPoint );\n\n\t\t\t\tfromPoint.set( - 0.7, - 0.3, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( - 0.7, - point.y, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube2, fromPoint, toPoint );\n\n\t\t\t\tfromPoint.set( 0.7, - 0.3, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( 0.7, - point.y, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube3, fromPoint, toPoint );\n\n\t\t\t} else {\n\n\t\t\t\tfromPoint.set( 0, - 0.2, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( 0, - point.y, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube3, fromPoint, toPoint );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'normal', new BufferAttribute( new Float32Array( normals ), 3 ) );\n\n\t}\n\n}\n\nclass RollerCoasterShadowGeometry extends BufferGeometry {\n\n\tconstructor( curve, divisions ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\n\t\tconst up = new Vector3( 0, 1, 0 );\n\t\tconst forward = new Vector3();\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst prevQuaternion = new Quaternion();\n\t\tprevQuaternion.setFromAxisAngle( up, Math.PI / 2 );\n\n\t\tconst point = new Vector3();\n\n\t\tconst prevPoint = new Vector3();\n\t\tprevPoint.copy( curve.getPointAt( 0 ) );\n\t\tprevPoint.y = 0;\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\tfor ( let i = 1; i <= divisions; i ++ ) {\n\n\t\t\tpoint.copy( curve.getPointAt( i / divisions ) );\n\t\t\tpoint.y = 0;\n\n\t\t\tforward.subVectors( point, prevPoint );\n\n\t\t\tconst angle = Math.atan2( forward.x, forward.z );\n\n\t\t\tquaternion.setFromAxisAngle( up, angle );\n\n\t\t\tvector1.set( - 0.3, 0, 0 );\n\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\tvector1.add( point );\n\n\t\t\tvector2.set( 0.3, 0, 0 );\n\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\tvector2.add( point );\n\n\t\t\tvector3.set( 0.3, 0, 0 );\n\t\t\tvector3.applyQuaternion( prevQuaternion );\n\t\t\tvector3.add( prevPoint );\n\n\t\t\tvector4.set( - 0.3, 0, 0 );\n\t\t\tvector4.applyQuaternion( prevQuaternion );\n\t\t\tvector4.add( prevPoint );\n\n\t\t\tvertices.push( vector1.x, vector1.y, vector1.z );\n\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\tvertices.push( vector3.x, vector3.y, vector3.z );\n\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\tprevPoint.copy( point );\n\t\t\tprevQuaternion.copy( quaternion );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\n\t}\n\n}\n\nclass SkyGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < 100; i ++ ) {\n\n\t\t\tconst x = Math.random() * 800 - 400;\n\t\t\tconst y = Math.random() * 50 + 50;\n\t\t\tconst z = Math.random() * 800 - 400;\n\n\t\t\tconst size = Math.random() * 40 + 20;\n\n\t\t\tvertices.push( x - size, y, z - size );\n\t\t\tvertices.push( x + size, y, z - size );\n\t\t\tvertices.push( x - size, y, z + size );\n\n\t\t\tvertices.push( x + size, y, z - size );\n\t\t\tvertices.push( x + size, y, z + size );\n\t\t\tvertices.push( x - size, y, z + size );\n\n\t\t}\n\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\n\t}\n\n}\n\nclass TreesGeometry extends BufferGeometry {\n\n\tconstructor( landscape ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst raycaster = new Raycaster();\n\t\traycaster.ray.direction.set( 0, - 1, 0 );\n\n\t\tconst _color = new Color();\n\n\t\tfor ( let i = 0; i < 2000; i ++ ) {\n\n\t\t\tconst x = Math.random() * 500 - 250;\n\t\t\tconst z = Math.random() * 500 - 250;\n\n\t\t\traycaster.ray.origin.set( x, 50, z );\n\n\t\t\tconst intersections = raycaster.intersectObject( landscape );\n\n\t\t\tif ( intersections.length === 0 ) continue;\n\n\t\t\tconst y = intersections[ 0 ].point.y;\n\n\t\t\tconst height = Math.random() * 5 + 0.5;\n\n\t\t\tlet angle = Math.random() * Math.PI * 2;\n\n\t\t\tvertices.push( x + Math.sin( angle ), y, z + Math.cos( angle ) );\n\t\t\tvertices.push( x, y + height, z );\n\t\t\tvertices.push( x + Math.sin( angle + Math.PI ), y, z + Math.cos( angle + Math.PI ) );\n\n\t\t\tangle += Math.PI / 2;\n\n\t\t\tvertices.push( x + Math.sin( angle ), y, z + Math.cos( angle ) );\n\t\t\tvertices.push( x, y + height, z );\n\t\t\tvertices.push( x + Math.sin( angle + Math.PI ), y, z + Math.cos( angle + Math.PI ) );\n\n\t\t\tconst random = Math.random() * 0.1;\n\n\t\t\tfor ( let j = 0; j < 6; j ++ ) {\n\n\t\t\t\t_color.setRGB( 0.2 + random, 0.4 + random, 0, SRGBColorSpace );\n\n\t\t\t\tcolors.push( _color.r, _color.g, _color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'color', new BufferAttribute( new Float32Array( colors ), 3 ) );\n\n\t}\n\n}\n\nexport { RollerCoasterGeometry, RollerCoasterLiftersGeometry, RollerCoasterShadowGeometry, SkyGeometry, TreesGeometry };\n", "class Timer {\n\n\tconstructor() {\n\n\t\tthis._previousTime = 0;\n\t\tthis._currentTime = 0;\n\t\tthis._startTime = now();\n\n\t\tthis._delta = 0;\n\t\tthis._elapsed = 0;\n\n\t\tthis._timescale = 1;\n\n\t\t// use Page Visibility API to avoid large time delta values\n\n\t\tthis._usePageVisibilityAPI = ( typeof document !== 'undefined' && document.hidden !== undefined );\n\n\t\tif ( this._usePageVisibilityAPI === true ) {\n\n\t\t\tthis._pageVisibilityHandler = handleVisibilityChange.bind( this );\n\n\t\t\tdocument.addEventListener( 'visibilitychange', this._pageVisibilityHandler, false );\n\n\t\t}\n\n\t}\n\n\tgetDelta() {\n\n\t\treturn this._delta / 1000;\n\n\t}\n\n\tgetElapsed() {\n\n\t\treturn this._elapsed / 1000;\n\n\t}\n\n\tgetTimescale() {\n\n\t\treturn this._timescale;\n\n\t}\n\n\tsetTimescale( timescale ) {\n\n\t\tthis._timescale = timescale;\n\n\t\treturn this;\n\n\t}\n\n\treset() {\n\n\t\tthis._currentTime = now() - this._startTime;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this._usePageVisibilityAPI === true ) {\n\n\t\t\tdocument.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( timestamp ) {\n\n\n\t\tif ( this._usePageVisibilityAPI === true && document.hidden === true ) {\n\n\t\t\tthis._delta = 0;\n\n\t\t} else {\n\n\t\t\tthis._previousTime = this._currentTime;\n\t\t\tthis._currentTime = ( timestamp !== undefined ? timestamp : now() ) - this._startTime;\n\n\t\t\tthis._delta = ( this._currentTime - this._previousTime ) * this._timescale;\n\t\t\tthis._elapsed += this._delta; // _elapsed is the accumulation of all previous deltas\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass FixedTimer extends Timer {\n\n\tconstructor( fps = 60 ) {\n\n\t\tsuper();\n\t\tthis._delta = ( 1 / fps ) * 1000;\n\n\t}\n\n\tupdate() {\n\n\t\tthis._elapsed += ( this._delta * this._timescale ); // _elapsed is the accumulation of all previous deltas\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now();\n\n}\n\nfunction handleVisibilityChange() {\n\n\tif ( document.hidden === false ) this.reset();\n\n}\n\nexport { Timer, FixedTimer };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tDynamicDrawUsage,\n\tMatrix4,\n\tMesh,\n\tMeshStandardMaterial,\n\tVector3\n} from 'three';\n\nfunction TubePainter() {\n\n\tconst BUFFER_SIZE = 1000000 * 3;\n\n\tconst positions = new BufferAttribute( new Float32Array( BUFFER_SIZE ), 3 );\n\tpositions.usage = DynamicDrawUsage;\n\n\tconst normals = new BufferAttribute( new Float32Array( BUFFER_SIZE ), 3 );\n\tnormals.usage = DynamicDrawUsage;\n\n\tconst colors = new BufferAttribute( new Float32Array( BUFFER_SIZE ), 3 );\n\tcolors.usage = DynamicDrawUsage;\n\n\tconst geometry = new BufferGeometry();\n\tgeometry.setAttribute( 'position', positions );\n\tgeometry.setAttribute( 'normal', normals );\n\tgeometry.setAttribute( 'color', colors );\n\tgeometry.drawRange.count = 0;\n\n\tconst material = new MeshStandardMaterial( {\n\t\tvertexColors: true\n\t} );\n\n\tconst mesh = new Mesh( geometry, material );\n\tmesh.frustumCulled = false;\n\n\t//\n\n\tfunction getPoints( size ) {\n\n\t\tconst PI2 = Math.PI * 2;\n\n\t\tconst sides = 10;\n\t\tconst array = [];\n\t\tconst radius = 0.01 * size;\n\n\t\tfor ( let i = 0; i < sides; i ++ ) {\n\n\t\t\tconst angle = ( i / sides ) * PI2;\n\t\t\tarray.push( new Vector3( Math.sin( angle ) * radius, Math.cos( angle ) * radius, 0 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t//\n\n\tconst vector1 = new Vector3();\n\tconst vector2 = new Vector3();\n\tconst vector3 = new Vector3();\n\tconst vector4 = new Vector3();\n\n\tconst color = new Color( 0xffffff );\n\tlet size = 1;\n\n\tfunction stroke( position1, position2, matrix1, matrix2 ) {\n\n\t\tif ( position1.distanceToSquared( position2 ) === 0 ) return;\n\n\t\tlet count = geometry.drawRange.count;\n\n\t\tconst points = getPoints( size );\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tconst vertex1 = points[ i ];\n\t\t\tconst vertex2 = points[ ( i + 1 ) % il ];\n\n\t\t\t// positions\n\n\t\t\tvector1.copy( vertex1 ).applyMatrix4( matrix2 ).add( position2 );\n\t\t\tvector2.copy( vertex2 ).applyMatrix4( matrix2 ).add( position2 );\n\t\t\tvector3.copy( vertex2 ).applyMatrix4( matrix1 ).add( position1 );\n\t\t\tvector4.copy( vertex1 ).applyMatrix4( matrix1 ).add( position1 );\n\n\t\t\tvector1.toArray( positions.array, ( count + 0 ) * 3 );\n\t\t\tvector2.toArray( positions.array, ( count + 1 ) * 3 );\n\t\t\tvector4.toArray( positions.array, ( count + 2 ) * 3 );\n\n\t\t\tvector2.toArray( positions.array, ( count + 3 ) * 3 );\n\t\t\tvector3.toArray( positions.array, ( count + 4 ) * 3 );\n\t\t\tvector4.toArray( positions.array, ( count + 5 ) * 3 );\n\n\t\t\t// normals\n\n\t\t\tvector1.copy( vertex1 ).applyMatrix4( matrix2 ).normalize();\n\t\t\tvector2.copy( vertex2 ).applyMatrix4( matrix2 ).normalize();\n\t\t\tvector3.copy( vertex2 ).applyMatrix4( matrix1 ).normalize();\n\t\t\tvector4.copy( vertex1 ).applyMatrix4( matrix1 ).normalize();\n\n\t\t\tvector1.toArray( normals.array, ( count + 0 ) * 3 );\n\t\t\tvector2.toArray( normals.array, ( count + 1 ) * 3 );\n\t\t\tvector4.toArray( normals.array, ( count + 2 ) * 3 );\n\n\t\t\tvector2.toArray( normals.array, ( count + 3 ) * 3 );\n\t\t\tvector3.toArray( normals.array, ( count + 4 ) * 3 );\n\t\t\tvector4.toArray( normals.array, ( count + 5 ) * 3 );\n\n\t\t\t// colors\n\n\t\t\tcolor.toArray( colors.array, ( count + 0 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 1 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 2 ) * 3 );\n\n\t\t\tcolor.toArray( colors.array, ( count + 3 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 4 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 5 ) * 3 );\n\n\t\t\tcount += 6;\n\n\t\t}\n\n\t\tgeometry.drawRange.count = count;\n\n\t}\n\n\t//\n\n\tconst up = new Vector3( 0, 1, 0 );\n\n\tconst point1 = new Vector3();\n\tconst point2 = new Vector3();\n\n\tconst matrix1 = new Matrix4();\n\tconst matrix2 = new Matrix4();\n\n\tfunction moveTo( position ) {\n\n\t\tpoint1.copy( position );\n\t\tmatrix1.lookAt( point2, point1, up );\n\n\t\tpoint2.copy( position );\n\t\tmatrix2.copy( matrix1 );\n\n\t}\n\n\tfunction lineTo( position ) {\n\n\t\tpoint1.copy( position );\n\t\tmatrix1.lookAt( point2, point1, up );\n\n\t\tstroke( point1, point2, matrix1, matrix2 );\n\n\t\tpoint2.copy( point1 );\n\t\tmatrix2.copy( matrix1 );\n\n\t}\n\n\tfunction setSize( value ) {\n\n\t\tsize = value;\n\n\t}\n\n\t//\n\n\tlet count = 0;\n\n\tfunction update() {\n\n\t\tconst start = count;\n\t\tconst end = geometry.drawRange.count;\n\n\t\tif ( start === end ) return;\n\n\t\tpositions.addUpdateRange( start * 3, ( end - start ) * 3 );\n\t\tpositions.needsUpdate = true;\n\n\t\tnormals.addUpdateRange( start * 3, ( end - start ) * 3 );\n\t\tnormals.needsUpdate = true;\n\n\t\tcolors.addUpdateRange( start * 3, ( end - start ) * 3 );\n\t\tcolors.needsUpdate = true;\n\n\t\tcount = geometry.drawRange.count;\n\n\t}\n\n\treturn {\n\t\tmesh: mesh,\n\t\tmoveTo: moveTo,\n\t\tlineTo: lineTo,\n\t\tsetSize: setSize,\n\t\tupdate: update\n\t};\n\n}\n\nexport { TubePainter };\n", "// Original src: https://github.com/zz85/threejs-path-flow\nconst CHANNELS = 4;\nconst TEXTURE_WIDTH = 1024;\nconst TEXTURE_HEIGHT = 4;\n\nimport {\n\tDataTexture,\n\tDataUtils,\n\tRGBAFormat,\n\tHalfFloatType,\n\tRepeatWrapping,\n\tMesh,\n\tInstancedMesh,\n\tLinearFilter,\n\tDynamicDrawUsage,\n\tMatrix4\n} from 'three';\n\n/**\n * Make a new DataTexture to store the descriptions of the curves.\n *\n * @param { number } numberOfCurves the number of curves needed to be described by this texture.\n */\nexport function initSplineTexture( numberOfCurves = 1 ) {\n\n\tconst dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );\n\tconst dataTexture = new DataTexture(\n\t\tdataArray,\n\t\tTEXTURE_WIDTH,\n\t\tTEXTURE_HEIGHT * numberOfCurves,\n\t\tRGBAFormat,\n\t\tHalfFloatType\n\t);\n\n\tdataTexture.wrapS = RepeatWrapping;\n\tdataTexture.wrapY = RepeatWrapping;\n\tdataTexture.magFilter = LinearFilter;\n\tdataTexture.minFilter = LinearFilter;\n\tdataTexture.needsUpdate = true;\n\n\treturn dataTexture;\n\n}\n\n/**\n * Write the curve description to the data texture\n *\n * @param { DataTexture } texture The DataTexture to write to\n * @param { Curve } splineCurve The curve to describe\n * @param { number } offset Which curve slot to write to\n */\nexport function updateSplineTexture( texture, splineCurve, offset = 0 ) {\n\n\tconst numberOfPoints = Math.floor( TEXTURE_WIDTH * ( TEXTURE_HEIGHT / 4 ) );\n\tsplineCurve.arcLengthDivisions = numberOfPoints / 2;\n\tsplineCurve.updateArcLengths();\n\tconst points = splineCurve.getSpacedPoints( numberOfPoints );\n\tconst frenetFrames = splineCurve.computeFrenetFrames( numberOfPoints, true );\n\n\tfor ( let i = 0; i < numberOfPoints; i ++ ) {\n\n\t\tconst rowOffset = Math.floor( i / TEXTURE_WIDTH );\n\t\tconst rowIndex = i % TEXTURE_WIDTH;\n\n\t\tlet pt = points[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\t\tpt = frenetFrames.tangents[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\t\tpt = frenetFrames.normals[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\t\tpt = frenetFrames.binormals[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\n\t}\n\n\ttexture.needsUpdate = true;\n\n}\n\n\nfunction setTextureValue( texture, index, x, y, z, o ) {\n\n\tconst image = texture.image;\n\tconst { data } = image;\n\tconst i = CHANNELS * TEXTURE_WIDTH * o; // Row Offset\n\tdata[ index * CHANNELS + i + 0 ] = DataUtils.toHalfFloat( x );\n\tdata[ index * CHANNELS + i + 1 ] = DataUtils.toHalfFloat( y );\n\tdata[ index * CHANNELS + i + 2 ] = DataUtils.toHalfFloat( z );\n\tdata[ index * CHANNELS + i + 3 ] = DataUtils.toHalfFloat( 1 );\n\n}\n\n/**\n * Create a new set of uniforms for describing the curve modifier\n *\n * @param { DataTexture } Texture which holds the curve description\n */\nexport function getUniforms( splineTexture ) {\n\n\tconst uniforms = {\n\t\tspineTexture: { value: splineTexture },\n\t\tpathOffset: { type: 'f', value: 0 }, // time of path curve\n\t\tpathSegment: { type: 'f', value: 1 }, // fractional length of path\n\t\tspineOffset: { type: 'f', value: 161 },\n\t\tspineLength: { type: 'f', value: 400 },\n\t\tflow: { type: 'i', value: 1 },\n\t};\n\treturn uniforms;\n\n}\n\nexport function modifyShader( material, uniforms, numberOfCurves = 1 ) {\n\n\tif ( material.__ok ) return;\n\tmaterial.__ok = true;\n\n\tmaterial.onBeforeCompile = ( shader ) => {\n\n\t\tif ( shader.__modified ) return;\n\t\tshader.__modified = true;\n\n\t\tObject.assign( shader.uniforms, uniforms );\n\n\t\tconst vertexShader = `\n\t\tuniform sampler2D spineTexture;\n\t\tuniform float pathOffset;\n\t\tuniform float pathSegment;\n\t\tuniform float spineOffset;\n\t\tuniform float spineLength;\n\t\tuniform int flow;\n\n\t\tfloat textureLayers = ${TEXTURE_HEIGHT * numberOfCurves}.;\n\t\tfloat textureStacks = ${TEXTURE_HEIGHT / 4}.;\n\n\t\t${shader.vertexShader}\n\t\t`\n\t\t// chunk import moved in front of modified shader below\n\t\t\t.replace( '#include ', '' )\n\n\t\t\t// vec3 transformedNormal declaration overriden below\n\t\t\t.replace( '#include ', '' )\n\n\t\t\t// vec3 transformed declaration overriden below\n\t\t\t.replace( '#include ', '' )\n\n\t\t\t// shader override\n\t\t\t.replace(\n\t\t\t\t/void\\s*main\\s*\\(\\)\\s*\\{/,\n\t\t\t\t`\nvoid main() {\n#include \n\nvec4 worldPos = modelMatrix * vec4(position, 1.);\n\nbool bend = flow > 0;\nfloat xWeight = bend ? 0. : 1.;\n\n#ifdef USE_INSTANCING\nfloat pathOffsetFromInstanceMatrix = instanceMatrix[3][2];\nfloat spineLengthFromInstanceMatrix = instanceMatrix[3][0];\nfloat spinePortion = bend ? (worldPos.x + spineOffset) / spineLengthFromInstanceMatrix : 0.;\nfloat mt = (spinePortion * pathSegment + pathOffset + pathOffsetFromInstanceMatrix)*textureStacks;\n#else\nfloat spinePortion = bend ? (worldPos.x + spineOffset) / spineLength : 0.;\nfloat mt = (spinePortion * pathSegment + pathOffset)*textureStacks;\n#endif\n\nmt = mod(mt, textureStacks);\nfloat rowOffset = floor(mt);\n\n#ifdef USE_INSTANCING\nrowOffset += instanceMatrix[3][1] * ${TEXTURE_HEIGHT}.;\n#endif\n\nvec3 spinePos = texture2D(spineTexture, vec2(mt, (0. + rowOffset + 0.5) / textureLayers)).xyz;\nvec3 a = texture2D(spineTexture, vec2(mt, (1. + rowOffset + 0.5) / textureLayers)).xyz;\nvec3 b = texture2D(spineTexture, vec2(mt, (2. + rowOffset + 0.5) / textureLayers)).xyz;\nvec3 c = texture2D(spineTexture, vec2(mt, (3. + rowOffset + 0.5) / textureLayers)).xyz;\nmat3 basis = mat3(a, b, c);\n\nvec3 transformed = basis\n\t* vec3(worldPos.x * xWeight, worldPos.y * 1., worldPos.z * 1.)\n\t+ spinePos;\n\nvec3 transformedNormal = normalMatrix * (basis * objectNormal);\n\t\t\t` ).replace(\n\t\t\t\t'#include ',\n\t\t\t\t`vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\t\t\t\tgl_Position = projectionMatrix * mvPosition;`\n\t\t\t);\n\n\t\tshader.vertexShader = vertexShader;\n\n\t};\n\n}\n\n/**\n * A helper class for making meshes bend aroudn curves\n */\nexport class Flow {\n\n\t/**\n\t * @param {Mesh} mesh The mesh to clone and modify to bend around the curve\n\t * @param {number} numberOfCurves The amount of space that should preallocated for additional curves\n\t */\n\tconstructor( mesh, numberOfCurves = 1 ) {\n\n\t\tconst obj3D = mesh.clone();\n\t\tconst splineTexure = initSplineTexture( numberOfCurves );\n\t\tconst uniforms = getUniforms( splineTexure );\n\t\tobj3D.traverse( function ( child ) {\n\n\t\t\tif (\n\t\t\t\tchild instanceof Mesh ||\n\t\t\t\tchild instanceof InstancedMesh\n\t\t\t) {\n\n\t\t\t\tif ( Array.isArray( child.material ) ) {\n\n\t\t\t\t\tconst materials = [];\n\n\t\t\t\t\tfor ( const material of child.material ) {\n\n\t\t\t\t\t\tconst newMaterial = material.clone();\n\t\t\t\t\t\tmodifyShader( newMaterial, uniforms, numberOfCurves );\n\t\t\t\t\t\tmaterials.push( newMaterial );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tchild.material = materials;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.material = child.material.clone();\n\t\t\t\t\tmodifyShader( child.material, uniforms, numberOfCurves );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.curveArray = new Array( numberOfCurves );\n\t\tthis.curveLengthArray = new Array( numberOfCurves );\n\n\t\tthis.object3D = obj3D;\n\t\tthis.splineTexure = splineTexure;\n\t\tthis.uniforms = uniforms;\n\n\t}\n\n\tupdateCurve( index, curve ) {\n\n\t\tif ( index >= this.curveArray.length ) throw Error( 'Index out of range for Flow' );\n\t\tconst curveLength = curve.getLength();\n\t\tthis.uniforms.spineLength.value = curveLength;\n\t\tthis.curveLengthArray[ index ] = curveLength;\n\t\tthis.curveArray[ index ] = curve;\n\t\tupdateSplineTexture( this.splineTexure, curve, index );\n\n\t}\n\n\tmoveAlongCurve( amount ) {\n\n\t\tthis.uniforms.pathOffset.value += amount;\n\n\t}\n\n}\nconst matrix = new Matrix4();\n\n/**\n * A helper class for creating instanced versions of flow, where the instances are placed on the curve.\n */\nexport class InstancedFlow extends Flow {\n\n\t/**\n\t *\n\t * @param {number} count The number of instanced elements\n\t * @param {number} curveCount The number of curves to preallocate for\n\t * @param {Geometry} geometry The geometry to use for the instanced mesh\n\t * @param {Material} material The material to use for the instanced mesh\n\t */\n\tconstructor( count, curveCount, geometry, material ) {\n\n\t\tconst mesh = new InstancedMesh(\n\t\t\tgeometry,\n\t\t\tmaterial,\n\t\t\tcount\n\t\t);\n\t\tmesh.instanceMatrix.setUsage( DynamicDrawUsage );\n\t\tmesh.frustumCulled = false;\n\t\tsuper( mesh, curveCount );\n\n\t\tthis.offsets = new Array( count ).fill( 0 );\n\t\tthis.whichCurve = new Array( count ).fill( 0 );\n\n\t}\n\n\t/**\n\t * The extra information about which curve and curve position is stored in the translation components of the matrix for the instanced objects\n\t * This writes that information to the matrix and marks it as needing update.\n\t *\n\t * @param {number} index of the instanced element to update\n\t */\n\twriteChanges( index ) {\n\n\t\tmatrix.makeTranslation(\n\t\t\tthis.curveLengthArray[ this.whichCurve[ index ] ],\n\t\t\tthis.whichCurve[ index ],\n\t\t\tthis.offsets[ index ]\n\t\t);\n\t\tthis.object3D.setMatrixAt( index, matrix );\n\t\tthis.object3D.instanceMatrix.needsUpdate = true;\n\n\t}\n\n\t/**\n\t * Move an individual element along the curve by a specific amount\n\t *\n\t * @param {number} index Which element to update\n\t * @param {number} offset Move by how much\n\t */\n\tmoveIndividualAlongCurve( index, offset ) {\n\n\t\tthis.offsets[ index ] += offset;\n\t\tthis.writeChanges( index );\n\n\t}\n\n\t/**\n\t * Select which curve to use for an element\n\t *\n\t * @param {number} index the index of the instanced element to update\n\t * @param {number} curveNo the index of the curve it should use\n\t */\n\tsetCurve( index, curveNo ) {\n\n\t\tif ( isNaN( curveNo ) ) throw Error( 'curve index being set is Not a Number (NaN)' );\n\t\tthis.whichCurve[ index ] = curveNo;\n\t\tthis.writeChanges( index );\n\n\t}\n\n}\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tVector3\n} from 'three';\nimport * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js';\n\nconst _A = new Vector3();\nconst _B = new Vector3();\nconst _C = new Vector3();\n\nclass EdgeSplitModifier {\n\n\tmodify( geometry, cutOffAngle, tryKeepNormals = true ) {\n\n\t\tfunction computeNormals() {\n\n\t\t\tnormals = new Float32Array( indexes.length * 3 );\n\n\t\t\tfor ( let i = 0; i < indexes.length; i += 3 ) {\n\n\t\t\t\tlet index = indexes[ i ];\n\n\t\t\t\t_A.set(\n\t\t\t\t\tpositions[ 3 * index ],\n\t\t\t\t\tpositions[ 3 * index + 1 ],\n\t\t\t\t\tpositions[ 3 * index + 2 ] );\n\n\t\t\t\tindex = indexes[ i + 1 ];\n\t\t\t\t_B.set(\n\t\t\t\t\tpositions[ 3 * index ],\n\t\t\t\t\tpositions[ 3 * index + 1 ],\n\t\t\t\t\tpositions[ 3 * index + 2 ] );\n\n\t\t\t\tindex = indexes[ i + 2 ];\n\t\t\t\t_C.set(\n\t\t\t\t\tpositions[ 3 * index ],\n\t\t\t\t\tpositions[ 3 * index + 1 ],\n\t\t\t\t\tpositions[ 3 * index + 2 ] );\n\n\t\t\t\t_C.sub( _B );\n\t\t\t\t_A.sub( _B );\n\n\t\t\t\tconst normal = _C.cross( _A ).normalize();\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tnormals[ 3 * ( i + j ) ] = normal.x;\n\t\t\t\t\tnormals[ 3 * ( i + j ) + 1 ] = normal.y;\n\t\t\t\t\tnormals[ 3 * ( i + j ) + 2 ] = normal.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tfunction mapPositionsToIndexes() {\n\n\t\t\tpointToIndexMap = Array( positions.length / 3 );\n\n\t\t\tfor ( let i = 0; i < indexes.length; i ++ ) {\n\n\t\t\t\tconst index = indexes[ i ];\n\n\t\t\t\tif ( pointToIndexMap[ index ] == null ) {\n\n\t\t\t\t\tpointToIndexMap[ index ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tpointToIndexMap[ index ].push( i );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tfunction edgeSplitToGroups( indexes, cutOff, firstIndex ) {\n\n\t\t\t_A.set( normals[ 3 * firstIndex ], normals[ 3 * firstIndex + 1 ], normals[ 3 * firstIndex + 2 ] ).normalize();\n\n\t\t\tconst result = {\n\t\t\t\tsplitGroup: [],\n\t\t\t\tcurrentGroup: [ firstIndex ]\n\t\t\t};\n\n\t\t\tfor ( const j of indexes ) {\n\n\t\t\t\tif ( j !== firstIndex ) {\n\n\t\t\t\t\t_B.set( normals[ 3 * j ], normals[ 3 * j + 1 ], normals[ 3 * j + 2 ] ).normalize();\n\n\t\t\t\t\tif ( _B.dot( _A ) < cutOff ) {\n\n\t\t\t\t\t\tresult.splitGroup.push( j );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tresult.currentGroup.push( j );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\n\t\tfunction edgeSplit( indexes, cutOff, original = null ) {\n\n\t\t\tif ( indexes.length === 0 ) return;\n\n\t\t\tconst groupResults = [];\n\n\t\t\tfor ( const index of indexes ) {\n\n\t\t\t\tgroupResults.push( edgeSplitToGroups( indexes, cutOff, index ) );\n\n\t\t\t}\n\n\t\t\tlet result = groupResults[ 0 ];\n\n\t\t\tfor ( const groupResult of groupResults ) {\n\n\t\t\t\tif ( groupResult.currentGroup.length > result.currentGroup.length ) {\n\n\t\t\t\t\tresult = groupResult;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tif ( original != null ) {\n\n\t\t\t\tsplitIndexes.push( {\n\t\t\t\t\toriginal: original,\n\t\t\t\t\tindexes: result.currentGroup\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( result.splitGroup.length ) {\n\n\t\t\t\tedgeSplit( result.splitGroup, cutOff, original || result.currentGroup[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet hadNormals = false;\n\t\tlet oldNormals = null;\n\n\t\tif ( geometry.attributes.normal ) {\n\n\t\t\thadNormals = true;\n\n\t\t\tgeometry = geometry.clone();\n\n\t\t\tif ( tryKeepNormals === true && geometry.index !== null ) {\n\n\t\t\t\toldNormals = geometry.attributes.normal.array;\n\n\t\t\t}\n\n\t\t\tgeometry.deleteAttribute( 'normal' );\n\n\t\t}\n\n\t\tif ( geometry.index == null ) {\n\n\t\t\tgeometry = BufferGeometryUtils.mergeVertices( geometry );\n\n\t\t}\n\n\t\tconst indexes = geometry.index.array;\n\t\tconst positions = geometry.getAttribute( 'position' ).array;\n\n\t\tlet normals;\n\t\tlet pointToIndexMap;\n\n\t\tcomputeNormals();\n\t\tmapPositionsToIndexes();\n\n\t\tconst splitIndexes = [];\n\n\t\tfor ( const vertexIndexes of pointToIndexMap ) {\n\n\t\t\tedgeSplit( vertexIndexes, Math.cos( cutOffAngle ) - 0.001 );\n\n\t\t}\n\n\t\tconst newAttributes = {};\n\t\tfor ( const name of Object.keys( geometry.attributes ) ) {\n\n\t\t\tconst oldAttribute = geometry.attributes[ name ];\n\t\t\tconst newArray = new oldAttribute.array.constructor( ( indexes.length + splitIndexes.length ) * oldAttribute.itemSize );\n\t\t\tnewArray.set( oldAttribute.array );\n\t\t\tnewAttributes[ name ] = new BufferAttribute( newArray, oldAttribute.itemSize, oldAttribute.normalized );\n\n\t\t}\n\n\t\tconst newIndexes = new Uint32Array( indexes.length );\n\t\tnewIndexes.set( indexes );\n\n\t\tfor ( let i = 0; i < splitIndexes.length; i ++ ) {\n\n\t\t\tconst split = splitIndexes[ i ];\n\t\t\tconst index = indexes[ split.original ];\n\n\t\t\tfor ( const attribute of Object.values( newAttributes ) ) {\n\n\t\t\t\tfor ( let j = 0; j < attribute.itemSize; j ++ ) {\n\n\t\t\t\t\tattribute.array[ ( indexes.length + i ) * attribute.itemSize + j ] =\n\t\t\t\t\t\tattribute.array[ index * attribute.itemSize + j ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( const j of split.indexes ) {\n\n\t\t\t\tnewIndexes[ j ] = indexes.length + i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( newIndexes, 1 ) );\n\n\t\tfor ( const name of Object.keys( newAttributes ) ) {\n\n\t\t\tgeometry.setAttribute( name, newAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( hadNormals ) {\n\n\t\t\tgeometry.computeVertexNormals();\n\n\t\t\tif ( oldNormals !== null ) {\n\n\t\t\t\tconst changedNormals = new Array( oldNormals.length / 3 ).fill( false );\n\n\t\t\t\tfor ( const splitData of splitIndexes )\n\t\t\t\t\tchangedNormals[ splitData.original ] = true;\n\n\t\t\t\tfor ( let i = 0; i < changedNormals.length; i ++ ) {\n\n\t\t\t\t\tif ( changedNormals[ i ] === false ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ )\n\t\t\t\t\t\t\tgeometry.attributes.normal.array[ 3 * i + j ] = oldNormals[ 3 * i + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n}\n\n\n\nexport { EdgeSplitModifier };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFloat32BufferAttribute,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\nimport * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js';\n\n/**\n *\tSimplification Geometry Modifier\n * - based on code and technique\n *\t - by Stan Melax in 1998\n *\t - Progressive Mesh type Polygon Reduction Algorithm\n * - http://www.melax.com/polychop/\n */\n\nconst _cb = new Vector3(), _ab = new Vector3();\n\nclass SimplifyModifier {\n\n\tmodify( geometry, count ) {\n\n\t\tgeometry = geometry.clone();\n\n\t\t// currently morphAttributes are not supported\n\t\tdelete geometry.morphAttributes.position;\n\t\tdelete geometry.morphAttributes.normal;\n\t\tconst attributes = geometry.attributes;\n\n\t\t// this modifier can only process indexed and non-indexed geomtries with at least a position attribute\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tif ( name !== 'position' && name !== 'uv' && name !== 'normal' && name !== 'tangent' && name !== 'color' ) geometry.deleteAttribute( name );\n\n\t\t}\n\n\t\tgeometry = BufferGeometryUtils.mergeVertices( geometry );\n\n\t\t//\n\t\t// put data of original geometry in different data structures\n\t\t//\n\n\t\tconst vertices = [];\n\t\tconst faces = [];\n\n\t\t// add vertices\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst uvAttribute = geometry.getAttribute( 'uv' );\n\t\tconst normalAttribute = geometry.getAttribute( 'normal' );\n\t\tconst tangentAttribute = geometry.getAttribute( 'tangent' );\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\tlet t = null;\n\t\tlet v2 = null;\n\t\tlet nor = null;\n\t\tlet col = null;\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tconst v = new Vector3().fromBufferAttribute( positionAttribute, i );\n\t\t\tif ( uvAttribute ) {\n\n\t\t\t\tv2 = new Vector2().fromBufferAttribute( uvAttribute, i );\n\n\t\t\t}\n\n\t\t\tif ( normalAttribute ) {\n\n\t\t\t\tnor = new Vector3().fromBufferAttribute( normalAttribute, i );\n\n\t\t\t}\n\n\t\t\tif ( tangentAttribute ) {\n\n\t\t\t\tt = new Vector4().fromBufferAttribute( tangentAttribute, i );\n\n\t\t\t}\n\n\t\t\tif ( colorAttribute ) {\n\n\t\t\t\tcol = new Color().fromBufferAttribute( colorAttribute, i );\n\n\t\t\t}\n\n\t\t\tconst vertex = new Vertex( v, v2, nor, t, col );\n\t\t\tvertices.push( vertex );\n\n\t\t}\n\n\t\t// add faces\n\n\t\tlet index = geometry.getIndex();\n\n\t\tif ( index !== null ) {\n\n\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\tconst triangle = new Triangle( vertices[ a ], vertices[ b ], vertices[ c ], a, b, c );\n\t\t\t\tfaces.push( triangle );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\t\tconst a = i;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tconst triangle = new Triangle( vertices[ a ], vertices[ b ], vertices[ c ], a, b, c );\n\t\t\t\tfaces.push( triangle );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute all edge collapse costs\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tcomputeEdgeCostAtVertex( vertices[ i ] );\n\n\t\t}\n\n\t\tlet nextVertex;\n\n\t\tlet z = count;\n\n\t\twhile ( z -- ) {\n\n\t\t\tnextVertex = minimumCostEdge( vertices );\n\n\t\t\tif ( ! nextVertex ) {\n\n\t\t\t\tconsole.log( 'THREE.SimplifyModifier: No next vertex' );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcollapse( vertices, faces, nextVertex, nextVertex.collapseNeighbor );\n\n\t\t}\n\n\t\t//\n\n\t\tconst simplifiedGeometry = new BufferGeometry();\n\t\tconst position = [];\n\t\tconst uv = [];\n\t\tconst normal = [];\n\t\tconst tangent = [];\n\t\tconst color = [];\n\n\t\tindex = [];\n\n\t\t//\n\n\t\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\t\tconst vertex = vertices[ i ];\n\t\t\tposition.push( vertex.position.x, vertex.position.y, vertex.position.z );\n\t\t\tif ( vertex.uv ) {\n\n\t\t\t\tuv.push( vertex.uv.x, vertex.uv.y );\n\n\t\t\t}\n\n\t\t\tif ( vertex.normal ) {\n\n\t\t\t\tnormal.push( vertex.normal.x, vertex.normal.y, vertex.normal.z );\n\n\t\t\t}\n\n\t\t\tif ( vertex.tangent ) {\n\n\t\t\t\ttangent.push( vertex.tangent.x, vertex.tangent.y, vertex.tangent.z, vertex.tangent.w );\n\n\t\t\t}\n\n\t\t\tif ( vertex.color ) {\n\n\t\t\t\tcolor.push( vertex.color.r, vertex.color.g, vertex.color.b );\n\n\t\t\t}\n\n\n\t\t\t// cache final index to GREATLY speed up faces reconstruction\n\t\t\tvertex.id = i;\n\n\t\t}\n\n\t\t//\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\t\t\tindex.push( face.v1.id, face.v2.id, face.v3.id );\n\n\t\t}\n\n\t\tsimplifiedGeometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( uv.length > 0 ) simplifiedGeometry.setAttribute( 'uv', new Float32BufferAttribute( uv, 2 ) );\n\t\tif ( normal.length > 0 ) simplifiedGeometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( tangent.length > 0 ) simplifiedGeometry.setAttribute( 'tangent', new Float32BufferAttribute( tangent, 4 ) );\n\t\tif ( color.length > 0 ) simplifiedGeometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\n\t\tsimplifiedGeometry.setIndex( index );\n\n\t\treturn simplifiedGeometry;\n\n\t}\n\n}\n\nfunction pushIfUnique( array, object ) {\n\n\tif ( array.indexOf( object ) === - 1 ) array.push( object );\n\n}\n\nfunction removeFromArray( array, object ) {\n\n\tconst k = array.indexOf( object );\n\tif ( k > - 1 ) array.splice( k, 1 );\n\n}\n\nfunction computeEdgeCollapseCost( u, v ) {\n\n\t// if we collapse edge uv by moving u to v then how\n\t// much different will the model change, i.e. the \"error\".\n\n\tconst edgelength = v.position.distanceTo( u.position );\n\tlet curvature = 0;\n\n\tconst sideFaces = [];\n\n\t// find the \"sides\" triangles that are on the edge uv\n\tfor ( let i = 0, il = u.faces.length; i < il; i ++ ) {\n\n\t\tconst face = u.faces[ i ];\n\n\t\tif ( face.hasVertex( v ) ) {\n\n\t\t\tsideFaces.push( face );\n\n\t\t}\n\n\t}\n\n\t// use the triangle facing most away from the sides\n\t// to determine our curvature term\n\tfor ( let i = 0, il = u.faces.length; i < il; i ++ ) {\n\n\t\tlet minCurvature = 1;\n\t\tconst face = u.faces[ i ];\n\n\t\tfor ( let j = 0; j < sideFaces.length; j ++ ) {\n\n\t\t\tconst sideFace = sideFaces[ j ];\n\t\t\t// use dot product of face normals.\n\t\t\tconst dotProd = face.normal.dot( sideFace.normal );\n\t\t\tminCurvature = Math.min( minCurvature, ( 1.001 - dotProd ) / 2 );\n\n\t\t}\n\n\t\tcurvature = Math.max( curvature, minCurvature );\n\n\t}\n\n\t// crude approach in attempt to preserve borders\n\t// though it seems not to be totally correct\n\tconst borders = 0;\n\n\tif ( sideFaces.length < 2 ) {\n\n\t\t// we add some arbitrary cost for borders,\n\t\t// borders += 10;\n\t\tcurvature = 1;\n\n\t}\n\n\tconst amt = edgelength * curvature + borders;\n\n\treturn amt;\n\n}\n\nfunction computeEdgeCostAtVertex( v ) {\n\n\t// compute the edge collapse cost for all edges that start\n\t// from vertex v. Since we are only interested in reducing\n\t// the object by selecting the min cost edge at each step, we\n\t// only cache the cost of the least cost edge at this vertex\n\t// (in member variable collapse) as well as the value of the\n\t// cost (in member variable collapseCost).\n\n\tif ( v.neighbors.length === 0 ) {\n\n\t\t// collapse if no neighbors.\n\t\tv.collapseNeighbor = null;\n\t\tv.collapseCost = - 0.01;\n\n\t\treturn;\n\n\t}\n\n\tv.collapseCost = 100000;\n\tv.collapseNeighbor = null;\n\n\t// search all neighboring edges for \"least cost\" edge\n\tfor ( let i = 0; i < v.neighbors.length; i ++ ) {\n\n\t\tconst collapseCost = computeEdgeCollapseCost( v, v.neighbors[ i ] );\n\n\t\tif ( ! v.collapseNeighbor ) {\n\n\t\t\tv.collapseNeighbor = v.neighbors[ i ];\n\t\t\tv.collapseCost = collapseCost;\n\t\t\tv.minCost = collapseCost;\n\t\t\tv.totalCost = 0;\n\t\t\tv.costCount = 0;\n\n\t\t}\n\n\t\tv.costCount ++;\n\t\tv.totalCost += collapseCost;\n\n\t\tif ( collapseCost < v.minCost ) {\n\n\t\t\tv.collapseNeighbor = v.neighbors[ i ];\n\t\t\tv.minCost = collapseCost;\n\n\t\t}\n\n\t}\n\n\t// we average the cost of collapsing at this vertex\n\tv.collapseCost = v.totalCost / v.costCount;\n\t// v.collapseCost = v.minCost;\n\n}\n\nfunction removeVertex( v, vertices ) {\n\n\tconsole.assert( v.faces.length === 0 );\n\n\twhile ( v.neighbors.length ) {\n\n\t\tconst n = v.neighbors.pop();\n\t\tremoveFromArray( n.neighbors, v );\n\n\t}\n\n\tremoveFromArray( vertices, v );\n\n}\n\nfunction removeFace( f, faces ) {\n\n\tremoveFromArray( faces, f );\n\n\tif ( f.v1 ) removeFromArray( f.v1.faces, f );\n\tif ( f.v2 ) removeFromArray( f.v2.faces, f );\n\tif ( f.v3 ) removeFromArray( f.v3.faces, f );\n\n\t// TODO optimize this!\n\tconst vs = [ f.v1, f.v2, f.v3 ];\n\n\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\tconst v1 = vs[ i ];\n\t\tconst v2 = vs[ ( i + 1 ) % 3 ];\n\n\t\tif ( ! v1 || ! v2 ) continue;\n\n\t\tv1.removeIfNonNeighbor( v2 );\n\t\tv2.removeIfNonNeighbor( v1 );\n\n\t}\n\n}\n\nfunction collapse( vertices, faces, u, v ) {\n\n\t// Collapse the edge uv by moving vertex u onto v\n\n\tif ( ! v ) {\n\n\t\t// u is a vertex all by itself so just delete it..\n\t\tremoveVertex( u, vertices );\n\t\treturn;\n\n\t}\n\n\tif ( v.uv ) {\n\n\t\tu.uv.copy( v.uv );\n\n\t}\n\n\tif ( v.normal ) {\n\n\t\tv.normal.add( u.normal ).normalize();\n\n\t}\n\n\tif ( v.tangent ) {\n\n\t\tv.tangent.add( u.tangent ).normalize();\n\n\t}\n\n\tconst tmpVertices = [];\n\n\tfor ( let i = 0; i < u.neighbors.length; i ++ ) {\n\n\t\ttmpVertices.push( u.neighbors[ i ] );\n\n\t}\n\n\n\t// delete triangles on edge uv:\n\tfor ( let i = u.faces.length - 1; i >= 0; i -- ) {\n\n\t\tif ( u.faces[ i ] && u.faces[ i ].hasVertex( v ) ) {\n\n\t\t\tremoveFace( u.faces[ i ], faces );\n\n\t\t}\n\n\t}\n\n\t// update remaining triangles to have v instead of u\n\tfor ( let i = u.faces.length - 1; i >= 0; i -- ) {\n\n\t\tu.faces[ i ].replaceVertex( u, v );\n\n\t}\n\n\n\tremoveVertex( u, vertices );\n\n\t// recompute the edge collapse costs in neighborhood\n\tfor ( let i = 0; i < tmpVertices.length; i ++ ) {\n\n\t\tcomputeEdgeCostAtVertex( tmpVertices[ i ] );\n\n\t}\n\n}\n\n\n\nfunction minimumCostEdge( vertices ) {\n\n\t// O(n * n) approach. TODO optimize this\n\n\tlet least = vertices[ 0 ];\n\n\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\tif ( vertices[ i ].collapseCost < least.collapseCost ) {\n\n\t\t\tleast = vertices[ i ];\n\n\t\t}\n\n\t}\n\n\treturn least;\n\n}\n\n// we use a triangle class to represent structure of face slightly differently\n\nclass Triangle {\n\n\tconstructor( v1, v2, v3, a, b, c ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t\tthis.normal = new Vector3();\n\n\t\tthis.computeNormal();\n\n\t\tv1.faces.push( this );\n\t\tv1.addUniqueNeighbor( v2 );\n\t\tv1.addUniqueNeighbor( v3 );\n\n\t\tv2.faces.push( this );\n\t\tv2.addUniqueNeighbor( v1 );\n\t\tv2.addUniqueNeighbor( v3 );\n\n\n\t\tv3.faces.push( this );\n\t\tv3.addUniqueNeighbor( v1 );\n\t\tv3.addUniqueNeighbor( v2 );\n\n\t}\n\n\tcomputeNormal() {\n\n\t\tconst vA = this.v1.position;\n\t\tconst vB = this.v2.position;\n\t\tconst vC = this.v3.position;\n\n\t\t_cb.subVectors( vC, vB );\n\t\t_ab.subVectors( vA, vB );\n\t\t_cb.cross( _ab ).normalize();\n\n\t\tthis.normal.copy( _cb );\n\n\t}\n\n\thasVertex( v ) {\n\n\t\treturn v === this.v1 || v === this.v2 || v === this.v3;\n\n\t}\n\n\treplaceVertex( oldv, newv ) {\n\n\t\tif ( oldv === this.v1 ) this.v1 = newv;\n\t\telse if ( oldv === this.v2 ) this.v2 = newv;\n\t\telse if ( oldv === this.v3 ) this.v3 = newv;\n\n\t\tremoveFromArray( oldv.faces, this );\n\t\tnewv.faces.push( this );\n\n\n\t\toldv.removeIfNonNeighbor( this.v1 );\n\t\tthis.v1.removeIfNonNeighbor( oldv );\n\n\t\toldv.removeIfNonNeighbor( this.v2 );\n\t\tthis.v2.removeIfNonNeighbor( oldv );\n\n\t\toldv.removeIfNonNeighbor( this.v3 );\n\t\tthis.v3.removeIfNonNeighbor( oldv );\n\n\t\tthis.v1.addUniqueNeighbor( this.v2 );\n\t\tthis.v1.addUniqueNeighbor( this.v3 );\n\n\t\tthis.v2.addUniqueNeighbor( this.v1 );\n\t\tthis.v2.addUniqueNeighbor( this.v3 );\n\n\t\tthis.v3.addUniqueNeighbor( this.v1 );\n\t\tthis.v3.addUniqueNeighbor( this.v2 );\n\n\t\tthis.computeNormal();\n\n\t}\n\n}\n\nclass Vertex {\n\n\tconstructor( v, uv, normal, tangent, color ) {\n\n\t\tthis.position = v;\n\t\tthis.uv = uv;\n\t\tthis.normal = normal;\n\t\tthis.tangent = tangent;\n\t\tthis.color = color;\n\n\t\tthis.id = - 1; // external use position in vertices list (for e.g. face generation)\n\n\t\tthis.faces = []; // faces vertex is connected\n\t\tthis.neighbors = []; // neighbouring vertices aka \"adjacentVertices\"\n\n\t\t// these will be computed in computeEdgeCostAtVertex()\n\t\tthis.collapseCost = 0; // cost of collapsing this vertex, the less the better. aka objdist\n\t\tthis.collapseNeighbor = null; // best candinate for collapsing\n\n\t}\n\n\taddUniqueNeighbor( vertex ) {\n\n\t\tpushIfUnique( this.neighbors, vertex );\n\n\t}\n\n\tremoveIfNonNeighbor( n ) {\n\n\t\tconst neighbors = this.neighbors;\n\t\tconst faces = this.faces;\n\n\t\tconst offset = neighbors.indexOf( n );\n\n\t\tif ( offset === - 1 ) return;\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tif ( faces[ i ].hasVertex( n ) ) return;\n\n\t\t}\n\n\t\tneighbors.splice( offset, 1 );\n\n\t}\n\n}\n\nexport { SimplifyModifier };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFloat32BufferAttribute,\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Break faces with edges longer than maxEdgeLength\n */\n\nclass TessellateModifier {\n\n\tconstructor( maxEdgeLength = 0.1, maxIterations = 6 ) {\n\n\t\tthis.maxEdgeLength = maxEdgeLength;\n\t\tthis.maxIterations = maxIterations;\n\n\t}\n\n\tmodify( geometry ) {\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tgeometry = geometry.toNonIndexed();\n\n\t\t}\n\n\t\t//\n\n\t\tconst maxIterations = this.maxIterations;\n\t\tconst maxEdgeLengthSquared = this.maxEdgeLength * this.maxEdgeLength;\n\n\t\tconst va = new Vector3();\n\t\tconst vb = new Vector3();\n\t\tconst vc = new Vector3();\n\t\tconst vm = new Vector3();\n\t\tconst vs = [ va, vb, vc, vm ];\n\n\t\tconst na = new Vector3();\n\t\tconst nb = new Vector3();\n\t\tconst nc = new Vector3();\n\t\tconst nm = new Vector3();\n\t\tconst ns = [ na, nb, nc, nm ];\n\n\t\tconst ca = new Color();\n\t\tconst cb = new Color();\n\t\tconst cc = new Color();\n\t\tconst cm = new Color();\n\t\tconst cs = [ ca, cb, cc, cm ];\n\n\t\tconst ua = new Vector2();\n\t\tconst ub = new Vector2();\n\t\tconst uc = new Vector2();\n\t\tconst um = new Vector2();\n\t\tconst us = [ ua, ub, uc, um ];\n\n\t\tconst u2a = new Vector2();\n\t\tconst u2b = new Vector2();\n\t\tconst u2c = new Vector2();\n\t\tconst u2m = new Vector2();\n\t\tconst u2s = [ u2a, u2b, u2c, u2m ];\n\n\t\tconst attributes = geometry.attributes;\n\t\tconst hasNormals = attributes.normal !== undefined;\n\t\tconst hasColors = attributes.color !== undefined;\n\t\tconst hasUVs = attributes.uv !== undefined;\n\t\tconst hasUV1s = attributes.uv1 !== undefined;\n\n\t\tlet positions = attributes.position.array;\n\t\tlet normals = hasNormals ? attributes.normal.array : null;\n\t\tlet colors = hasColors ? attributes.color.array : null;\n\t\tlet uvs = hasUVs ? attributes.uv.array : null;\n\t\tlet uv1s = hasUV1s ? attributes.uv1.array : null;\n\n\t\tlet positions2 = positions;\n\t\tlet normals2 = normals;\n\t\tlet colors2 = colors;\n\t\tlet uvs2 = uvs;\n\t\tlet uv1s2 = uv1s;\n\n\t\tlet iteration = 0;\n\t\tlet tessellating = true;\n\n\t\tfunction addTriangle( a, b, c ) {\n\n\t\t\tconst v1 = vs[ a ];\n\t\t\tconst v2 = vs[ b ];\n\t\t\tconst v3 = vs[ c ];\n\n\t\t\tpositions2.push( v1.x, v1.y, v1.z );\n\t\t\tpositions2.push( v2.x, v2.y, v2.z );\n\t\t\tpositions2.push( v3.x, v3.y, v3.z );\n\n\t\t\tif ( hasNormals ) {\n\n\t\t\t\tconst n1 = ns[ a ];\n\t\t\t\tconst n2 = ns[ b ];\n\t\t\t\tconst n3 = ns[ c ];\n\n\t\t\t\tnormals2.push( n1.x, n1.y, n1.z );\n\t\t\t\tnormals2.push( n2.x, n2.y, n2.z );\n\t\t\t\tnormals2.push( n3.x, n3.y, n3.z );\n\n\t\t\t}\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tconst c1 = cs[ a ];\n\t\t\t\tconst c2 = cs[ b ];\n\t\t\t\tconst c3 = cs[ c ];\n\n\t\t\t\tcolors2.push( c1.r, c1.g, c1.b );\n\t\t\t\tcolors2.push( c2.r, c2.g, c2.b );\n\t\t\t\tcolors2.push( c3.r, c3.g, c3.b );\n\n\t\t\t}\n\n\t\t\tif ( hasUVs ) {\n\n\t\t\t\tconst u1 = us[ a ];\n\t\t\t\tconst u2 = us[ b ];\n\t\t\t\tconst u3 = us[ c ];\n\n\t\t\t\tuvs2.push( u1.x, u1.y );\n\t\t\t\tuvs2.push( u2.x, u2.y );\n\t\t\t\tuvs2.push( u3.x, u3.y );\n\n\t\t\t}\n\n\t\t\tif ( hasUV1s ) {\n\n\t\t\t\tconst u21 = u2s[ a ];\n\t\t\t\tconst u22 = u2s[ b ];\n\t\t\t\tconst u23 = u2s[ c ];\n\n\t\t\t\tuv1s2.push( u21.x, u21.y );\n\t\t\t\tuv1s2.push( u22.x, u22.y );\n\t\t\t\tuv1s2.push( u23.x, u23.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\twhile ( tessellating && iteration < maxIterations ) {\n\n\t\t\titeration ++;\n\t\t\ttessellating = false;\n\n\t\t\tpositions = positions2;\n\t\t\tpositions2 = [];\n\n\t\t\tif ( hasNormals ) {\n\n\t\t\t\tnormals = normals2;\n\t\t\t\tnormals2 = [];\n\n\t\t\t}\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tcolors = colors2;\n\t\t\t\tcolors2 = [];\n\n\t\t\t}\n\n\t\t\tif ( hasUVs ) {\n\n\t\t\t\tuvs = uvs2;\n\t\t\t\tuvs2 = [];\n\n\t\t\t}\n\n\t\t\tif ( hasUV1s ) {\n\n\t\t\t\tuv1s = uv1s2;\n\t\t\t\tuv1s2 = [];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, i2 = 0, il = positions.length; i < il; i += 9, i2 += 6 ) {\n\n\t\t\t\tva.fromArray( positions, i + 0 );\n\t\t\t\tvb.fromArray( positions, i + 3 );\n\t\t\t\tvc.fromArray( positions, i + 6 );\n\n\t\t\t\tif ( hasNormals ) {\n\n\t\t\t\t\tna.fromArray( normals, i + 0 );\n\t\t\t\t\tnb.fromArray( normals, i + 3 );\n\t\t\t\t\tnc.fromArray( normals, i + 6 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tca.fromArray( colors, i + 0 );\n\t\t\t\t\tcb.fromArray( colors, i + 3 );\n\t\t\t\t\tcc.fromArray( colors, i + 6 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasUVs ) {\n\n\t\t\t\t\tua.fromArray( uvs, i2 + 0 );\n\t\t\t\t\tub.fromArray( uvs, i2 + 2 );\n\t\t\t\t\tuc.fromArray( uvs, i2 + 4 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasUV1s ) {\n\n\t\t\t\t\tu2a.fromArray( uv1s, i2 + 0 );\n\t\t\t\t\tu2b.fromArray( uv1s, i2 + 2 );\n\t\t\t\t\tu2c.fromArray( uv1s, i2 + 4 );\n\n\t\t\t\t}\n\n\t\t\t\tconst dab = va.distanceToSquared( vb );\n\t\t\t\tconst dbc = vb.distanceToSquared( vc );\n\t\t\t\tconst dac = va.distanceToSquared( vc );\n\n\t\t\t\tif ( dab > maxEdgeLengthSquared || dbc > maxEdgeLengthSquared || dac > maxEdgeLengthSquared ) {\n\n\t\t\t\t\ttessellating = true;\n\n\t\t\t\t\tif ( dab >= dbc && dab >= dac ) {\n\n\t\t\t\t\t\tvm.lerpVectors( va, vb, 0.5 );\n\t\t\t\t\t\tif ( hasNormals ) nm.lerpVectors( na, nb, 0.5 );\n\t\t\t\t\t\tif ( hasColors ) cm.lerpColors( ca, cb, 0.5 );\n\t\t\t\t\t\tif ( hasUVs ) um.lerpVectors( ua, ub, 0.5 );\n\t\t\t\t\t\tif ( hasUV1s ) u2m.lerpVectors( u2a, u2b, 0.5 );\n\n\t\t\t\t\t\taddTriangle( 0, 3, 2 );\n\t\t\t\t\t\taddTriangle( 3, 1, 2 );\n\n\t\t\t\t\t} else if ( dbc >= dab && dbc >= dac ) {\n\n\t\t\t\t\t\tvm.lerpVectors( vb, vc, 0.5 );\n\t\t\t\t\t\tif ( hasNormals ) nm.lerpVectors( nb, nc, 0.5 );\n\t\t\t\t\t\tif ( hasColors ) cm.lerpColors( cb, cc, 0.5 );\n\t\t\t\t\t\tif ( hasUVs ) um.lerpVectors( ub, uc, 0.5 );\n\t\t\t\t\t\tif ( hasUV1s ) u2m.lerpVectors( u2b, u2c, 0.5 );\n\n\t\t\t\t\t\taddTriangle( 0, 1, 3 );\n\t\t\t\t\t\taddTriangle( 3, 2, 0 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvm.lerpVectors( va, vc, 0.5 );\n\t\t\t\t\t\tif ( hasNormals ) nm.lerpVectors( na, nc, 0.5 );\n\t\t\t\t\t\tif ( hasColors ) cm.lerpColors( ca, cc, 0.5 );\n\t\t\t\t\t\tif ( hasUVs ) um.lerpVectors( ua, uc, 0.5 );\n\t\t\t\t\t\tif ( hasUV1s ) u2m.lerpVectors( u2a, u2c, 0.5 );\n\n\t\t\t\t\t\taddTriangle( 0, 1, 3 );\n\t\t\t\t\t\taddTriangle( 3, 1, 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\taddTriangle( 0, 1, 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\n\t\tif ( hasNormals ) {\n\n\t\t\tgeometry2.setAttribute( 'normal', new Float32BufferAttribute( normals2, 3 ) );\n\n\t\t}\n\n\t\tif ( hasColors ) {\n\n\t\t\tgeometry2.setAttribute( 'color', new Float32BufferAttribute( colors2, 3 ) );\n\n\t\t}\n\n\t\tif ( hasUVs ) {\n\n\t\t\tgeometry2.setAttribute( 'uv', new Float32BufferAttribute( uvs2, 2 ) );\n\n\t\t}\n\n\t\tif ( hasUV1s ) {\n\n\t\t\tgeometry2.setAttribute( 'uv1', new Float32BufferAttribute( uv1s2, 2 ) );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n}\n\nexport { TessellateModifier };\n", "import { Mesh, MeshBasicMaterial, SphereGeometry, Vector3 } from 'three';\n\n/**\n * A ground-projected skybox. The height is how far the camera that took the photo was above the ground - \n * a larger value will magnify the downward part of the image. By default the object is centered at the camera, \n * so it is often helpful to set skybox.position.y = height to put the ground at the origin. Set the radius \n * large enough to ensure your user's camera stays inside.\n */\n\nclass GroundedSkybox extends Mesh {\n\n\tconstructor( map, height, radius, resolution = 128 ) {\n\n\t\tif ( height <= 0 || radius <= 0 || resolution <= 0 ) {\n\n\t\t\tthrow new Error( 'GroundedSkybox height, radius, and resolution must be positive.' );\n\n\t\t}\n\n\t\tconst geometry = new SphereGeometry( radius, 2 * resolution, resolution );\n\t\tgeometry.scale( 1, 1, -1 );\n\n\t\tconst pos = geometry.getAttribute( 'position' );\n\t\tconst tmp = new Vector3();\n\n\t\tfor ( let i = 0; i < pos.count; ++ i ) {\n\n\t\t\ttmp.fromBufferAttribute( pos, i );\n\t\t\tif ( tmp.y < 0 ) {\n\n\t\t\t\t// Smooth out the transition from flat floor to sphere:\n\t\t\t\tconst y1 = - height * 3 / 2;\n\t\t\t\tconst f =\n\t\t\t\t\t\ttmp.y < y1 ? - height / tmp.y : ( 1 - tmp.y * tmp.y / ( 3 * y1 * y1 ) );\n\t\t\t\ttmp.multiplyScalar( f );\n\t\t\t\ttmp.toArray( pos.array, 3 * i );\n\n\t\t\t}\n\n\t\t}\n\n\t\tpos.needsUpdate = true;\n\n\t\tsuper( geometry, new MeshBasicMaterial( { map, depthWrite: false } ) );\n\n\t}\n\n}\n\nexport { GroundedSkybox };\n", "import {\n\tAdditiveBlending,\n\tBox2,\n\tBufferGeometry,\n\tColor,\n\tFramebufferTexture,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tMesh,\n\tMeshBasicMaterial,\n\tRawShaderMaterial,\n\tUnsignedByteType,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\n\nclass Lensflare extends Mesh {\n\n\tconstructor() {\n\n\t\tsuper( Lensflare.Geometry, new MeshBasicMaterial( { opacity: 0, transparent: true } ) );\n\n\t\tthis.isLensflare = true;\n\n\t\tthis.type = 'Lensflare';\n\t\tthis.frustumCulled = false;\n\t\tthis.renderOrder = Infinity;\n\n\t\t//\n\n\t\tconst positionScreen = new Vector3();\n\t\tconst positionView = new Vector3();\n\n\t\t// textures\n\n\t\tconst tempMap = new FramebufferTexture( 16, 16 );\n\t\tconst occlusionMap = new FramebufferTexture( 16, 16 );\n\n\t\tlet currentType = UnsignedByteType;\n\n\t\t// material\n\n\t\tconst geometry = Lensflare.Geometry;\n\n\t\tconst material1a = new RawShaderMaterial( {\n\t\t\tuniforms: {\n\t\t\t\t'scale': { value: null },\n\t\t\t\t'screenPosition': { value: null }\n\t\t\t},\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 );\n\n\t\t\t\t}`,\n\t\t\tdepthTest: true,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: false\n\t\t} );\n\n\t\tconst material1b = new RawShaderMaterial( {\n\t\t\tuniforms: {\n\t\t\t\t'map': { value: tempMap },\n\t\t\t\t'scale': { value: null },\n\t\t\t\t'screenPosition': { value: null }\n\t\t\t},\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\t\t\t\tattribute vec2 uv;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUV = uv;\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform sampler2D map;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = texture2D( map, vUV );\n\n\t\t\t\t}`,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: false\n\t\t} );\n\n\t\t// the following object is used for occlusionMap generation\n\n\t\tconst mesh1 = new Mesh( geometry, material1a );\n\n\t\t//\n\n\t\tconst elements = [];\n\n\t\tconst shader = LensflareElement.Shader;\n\n\t\tconst material2 = new RawShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: {\n\t\t\t\t'map': { value: null },\n\t\t\t\t'occlusionMap': { value: occlusionMap },\n\t\t\t\t'color': { value: new Color( 0xffffff ) },\n\t\t\t\t'scale': { value: new Vector2() },\n\t\t\t\t'screenPosition': { value: new Vector3() }\n\t\t\t},\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\ttransparent: true,\n\t\t\tdepthWrite: false\n\t\t} );\n\n\t\tconst mesh2 = new Mesh( geometry, material2 );\n\n\t\tthis.addElement = function ( element ) {\n\n\t\t\telements.push( element );\n\n\t\t};\n\n\t\t//\n\n\t\tconst scale = new Vector2();\n\t\tconst screenPositionPixels = new Vector2();\n\t\tconst validArea = new Box2();\n\t\tconst viewport = new Vector4();\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\trenderer.getCurrentViewport( viewport );\n\n\t\t\tconst renderTarget = renderer.getRenderTarget();\n\t\t\tconst type = ( renderTarget !== null ) ? renderTarget.texture.type : UnsignedByteType;\n\n\t\t\tif ( currentType !== type ) {\n\n\t\t\t\ttempMap.dispose();\n\t\t\t\tocclusionMap.dispose();\n\n\t\t\t\ttempMap.type = occlusionMap.type = type;\n\n\t\t\t\tcurrentType = type;\n\n\t\t\t}\n\n\t\t\tconst invAspect = viewport.w / viewport.z;\n\t\t\tconst halfViewportWidth = viewport.z / 2.0;\n\t\t\tconst halfViewportHeight = viewport.w / 2.0;\n\n\t\t\tlet size = 16 / viewport.w;\n\t\t\tscale.set( size * invAspect, size );\n\n\t\t\tvalidArea.min.set( viewport.x, viewport.y );\n\t\t\tvalidArea.max.set( viewport.x + ( viewport.z - 16 ), viewport.y + ( viewport.w - 16 ) );\n\n\t\t\t// calculate position in screen space\n\n\t\t\tpositionView.setFromMatrixPosition( this.matrixWorld );\n\t\t\tpositionView.applyMatrix4( camera.matrixWorldInverse );\n\n\t\t\tif ( positionView.z > 0 ) return; // lensflare is behind the camera\n\n\t\t\tpositionScreen.copy( positionView ).applyMatrix4( camera.projectionMatrix );\n\n\t\t\t// horizontal and vertical coordinate of the lower left corner of the pixels to copy\n\n\t\t\tscreenPositionPixels.x = viewport.x + ( positionScreen.x * halfViewportWidth ) + halfViewportWidth - 8;\n\t\t\tscreenPositionPixels.y = viewport.y + ( positionScreen.y * halfViewportHeight ) + halfViewportHeight - 8;\n\n\t\t\t// screen cull\n\n\t\t\tif ( validArea.containsPoint( screenPositionPixels ) ) {\n\n\t\t\t\t// save current RGB to temp texture\n\n\t\t\t\trenderer.copyFramebufferToTexture( tempMap, screenPositionPixels );\n\n\t\t\t\t// render pink quad\n\n\t\t\t\tlet uniforms = material1a.uniforms;\n\t\t\t\tuniforms[ 'scale' ].value = scale;\n\t\t\t\tuniforms[ 'screenPosition' ].value = positionScreen;\n\n\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material1a, mesh1, null );\n\n\t\t\t\t// copy result to occlusionMap\n\n\t\t\t\trenderer.copyFramebufferToTexture( occlusionMap, screenPositionPixels );\n\n\t\t\t\t// restore graphics\n\n\t\t\t\tuniforms = material1b.uniforms;\n\t\t\t\tuniforms[ 'scale' ].value = scale;\n\t\t\t\tuniforms[ 'screenPosition' ].value = positionScreen;\n\n\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material1b, mesh1, null );\n\n\t\t\t\t// render elements\n\n\t\t\t\tconst vecX = - positionScreen.x * 2;\n\t\t\t\tconst vecY = - positionScreen.y * 2;\n\n\t\t\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst element = elements[ i ];\n\n\t\t\t\t\tconst uniforms = material2.uniforms;\n\n\t\t\t\t\tuniforms[ 'color' ].value.copy( element.color );\n\t\t\t\t\tuniforms[ 'map' ].value = element.texture;\n\t\t\t\t\tuniforms[ 'screenPosition' ].value.x = positionScreen.x + vecX * element.distance;\n\t\t\t\t\tuniforms[ 'screenPosition' ].value.y = positionScreen.y + vecY * element.distance;\n\n\t\t\t\t\tsize = element.size / viewport.w;\n\t\t\t\t\tconst invAspect = viewport.w / viewport.z;\n\n\t\t\t\t\tuniforms[ 'scale' ].value.set( size * invAspect, size );\n\n\t\t\t\t\tmaterial2.uniformsNeedUpdate = true;\n\n\t\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material2, mesh2, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tmaterial1a.dispose();\n\t\t\tmaterial1b.dispose();\n\t\t\tmaterial2.dispose();\n\n\t\t\ttempMap.dispose();\n\t\t\tocclusionMap.dispose();\n\n\t\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\t\telements[ i ].texture.dispose();\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}\n\n//\n\nclass LensflareElement {\n\n\tconstructor( texture, size = 1, distance = 0, color = new Color( 0xffffff ) ) {\n\n\t\tthis.texture = texture;\n\t\tthis.size = size;\n\t\tthis.distance = distance;\n\t\tthis.color = color;\n\n\t}\n\n}\n\nLensflareElement.Shader = {\n\n\tname: 'LensflareElementShader',\n\n\tuniforms: {\n\n\t\t'map': { value: null },\n\t\t'occlusionMap': { value: null },\n\t\t'color': { value: null },\n\t\t'scale': { value: null },\n\t\t'screenPosition': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tprecision highp float;\n\n\t\tuniform vec3 screenPosition;\n\t\tuniform vec2 scale;\n\n\t\tuniform sampler2D occlusionMap;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvUV = uv;\n\n\t\t\tvec2 pos = position.xy;\n\n\t\t\tvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\n\n\t\t\tvVisibility = visibility.r / 9.0;\n\t\t\tvVisibility *= 1.0 - visibility.g / 9.0;\n\t\t\tvVisibility *= visibility.b / 9.0;\n\n\t\t\tgl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tprecision highp float;\n\n\t\tuniform sampler2D map;\n\t\tuniform vec3 color;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texture = texture2D( map, vUV );\n\t\t\ttexture.a *= vVisibility;\n\t\t\tgl_FragColor = texture;\n\t\t\tgl_FragColor.rgb *= color;\n\n\t\t}`\n\n};\n\nLensflare.Geometry = ( function () {\n\n\tconst geometry = new BufferGeometry();\n\n\tconst float32Array = new Float32Array( [\n\t\t- 1, - 1, 0, 0, 0,\n\t\t1, - 1, 0, 1, 0,\n\t\t1, 1, 0, 1, 1,\n\t\t- 1, 1, 0, 0, 1\n\t] );\n\n\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\tgeometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\tgeometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\tgeometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\treturn geometry;\n\n} )();\n\nexport { Lensflare, LensflareElement };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tDynamicDrawUsage,\n\tMesh,\n\tSphere,\n\tVector3\n} from 'three';\n\n/**\n * Port of http://webglsamples.org/blob/blob.html\n */\n\nclass MarchingCubes extends Mesh {\n\n\tconstructor( resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 10000 ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isMarchingCubes = true;\n\n\t\tconst scope = this;\n\n\t\t// temp buffers used in polygonize\n\n\t\tconst vlist = new Float32Array( 12 * 3 );\n\t\tconst nlist = new Float32Array( 12 * 3 );\n\t\tconst clist = new Float32Array( 12 * 3 );\n\n\t\tthis.enableUvs = enableUvs;\n\t\tthis.enableColors = enableColors;\n\n\t\t// functions have to be object properties\n\t\t// prototype functions kill performance\n\t\t// (tested and it was 4x slower !!!)\n\n\t\tthis.init = function ( resolution ) {\n\n\t\t\tthis.resolution = resolution;\n\n\t\t\t// parameters\n\n\t\t\tthis.isolation = 80.0;\n\n\t\t\t// size of field, 32 is pushing it in Javascript :)\n\n\t\t\tthis.size = resolution;\n\t\t\tthis.size2 = this.size * this.size;\n\t\t\tthis.size3 = this.size2 * this.size;\n\t\t\tthis.halfsize = this.size / 2.0;\n\n\t\t\t// deltas\n\n\t\t\tthis.delta = 2.0 / this.size;\n\t\t\tthis.yd = this.size;\n\t\t\tthis.zd = this.size2;\n\n\t\t\tthis.field = new Float32Array( this.size3 );\n\t\t\tthis.normal_cache = new Float32Array( this.size3 * 3 );\n\t\t\tthis.palette = new Float32Array( this.size3 * 3 );\n\n\t\t\t//\n\n\t\t\tthis.count = 0;\n\n\t\t\tconst maxVertexCount = maxPolyCount * 3;\n\n\t\t\tthis.positionArray = new Float32Array( maxVertexCount * 3 );\n\t\t\tconst positionAttribute = new BufferAttribute( this.positionArray, 3 );\n\t\t\tpositionAttribute.setUsage( DynamicDrawUsage );\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\n\t\t\tthis.normalArray = new Float32Array( maxVertexCount * 3 );\n\t\t\tconst normalAttribute = new BufferAttribute( this.normalArray, 3 );\n\t\t\tnormalAttribute.setUsage( DynamicDrawUsage );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\n\t\t\tif ( this.enableUvs ) {\n\n\t\t\t\tthis.uvArray = new Float32Array( maxVertexCount * 2 );\n\t\t\t\tconst uvAttribute = new BufferAttribute( this.uvArray, 2 );\n\t\t\t\tuvAttribute.setUsage( DynamicDrawUsage );\n\t\t\t\tgeometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\t}\n\n\t\t\tif ( this.enableColors ) {\n\n\t\t\t\tthis.colorArray = new Float32Array( maxVertexCount * 3 );\n\t\t\t\tconst colorAttribute = new BufferAttribute( this.colorArray, 3 );\n\t\t\t\tcolorAttribute.setUsage( DynamicDrawUsage );\n\t\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( new Vector3(), 1 );\n\n\t\t};\n\n\t\t///////////////////////\n\t\t// Polygonization\n\t\t///////////////////////\n\n\t\tfunction lerp( a, b, t ) {\n\n\t\t\treturn a + ( b - a ) * t;\n\n\t\t}\n\n\t\tfunction VIntX( q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2 ) {\n\n\t\t\tconst mu = ( isol - valp1 ) / ( valp2 - valp1 ),\n\t\t\t\tnc = scope.normal_cache;\n\n\t\t\tvlist[ offset + 0 ] = x + mu * scope.delta;\n\t\t\tvlist[ offset + 1 ] = y;\n\t\t\tvlist[ offset + 2 ] = z;\n\n\t\t\tnlist[ offset + 0 ] = lerp( nc[ q + 0 ], nc[ q + 3 ], mu );\n\t\t\tnlist[ offset + 1 ] = lerp( nc[ q + 1 ], nc[ q + 4 ], mu );\n\t\t\tnlist[ offset + 2 ] = lerp( nc[ q + 2 ], nc[ q + 5 ], mu );\n\n\t\t\tclist[ offset + 0 ] = lerp( scope.palette[ c_offset1 * 3 + 0 ], scope.palette[ c_offset2 * 3 + 0 ], mu );\n\t\t\tclist[ offset + 1 ] = lerp( scope.palette[ c_offset1 * 3 + 1 ], scope.palette[ c_offset2 * 3 + 1 ], mu );\n\t\t\tclist[ offset + 2 ] = lerp( scope.palette[ c_offset1 * 3 + 2 ], scope.palette[ c_offset2 * 3 + 2 ], mu );\n\n\t\t}\n\n\t\tfunction VIntY( q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2 ) {\n\n\t\t\tconst mu = ( isol - valp1 ) / ( valp2 - valp1 ),\n\t\t\t\tnc = scope.normal_cache;\n\n\t\t\tvlist[ offset + 0 ] = x;\n\t\t\tvlist[ offset + 1 ] = y + mu * scope.delta;\n\t\t\tvlist[ offset + 2 ] = z;\n\n\t\t\tconst q2 = q + scope.yd * 3;\n\n\t\t\tnlist[ offset + 0 ] = lerp( nc[ q + 0 ], nc[ q2 + 0 ], mu );\n\t\t\tnlist[ offset + 1 ] = lerp( nc[ q + 1 ], nc[ q2 + 1 ], mu );\n\t\t\tnlist[ offset + 2 ] = lerp( nc[ q + 2 ], nc[ q2 + 2 ], mu );\n\n\t\t\tclist[ offset + 0 ] = lerp( scope.palette[ c_offset1 * 3 + 0 ], scope.palette[ c_offset2 * 3 + 0 ], mu );\n\t\t\tclist[ offset + 1 ] = lerp( scope.palette[ c_offset1 * 3 + 1 ], scope.palette[ c_offset2 * 3 + 1 ], mu );\n\t\t\tclist[ offset + 2 ] = lerp( scope.palette[ c_offset1 * 3 + 2 ], scope.palette[ c_offset2 * 3 + 2 ], mu );\n\n\t\t}\n\n\t\tfunction VIntZ( q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2 ) {\n\n\t\t\tconst mu = ( isol - valp1 ) / ( valp2 - valp1 ),\n\t\t\t\tnc = scope.normal_cache;\n\n\t\t\tvlist[ offset + 0 ] = x;\n\t\t\tvlist[ offset + 1 ] = y;\n\t\t\tvlist[ offset + 2 ] = z + mu * scope.delta;\n\n\t\t\tconst q2 = q + scope.zd * 3;\n\n\t\t\tnlist[ offset + 0 ] = lerp( nc[ q + 0 ], nc[ q2 + 0 ], mu );\n\t\t\tnlist[ offset + 1 ] = lerp( nc[ q + 1 ], nc[ q2 + 1 ], mu );\n\t\t\tnlist[ offset + 2 ] = lerp( nc[ q + 2 ], nc[ q2 + 2 ], mu );\n\n\t\t\tclist[ offset + 0 ] = lerp( scope.palette[ c_offset1 * 3 + 0 ], scope.palette[ c_offset2 * 3 + 0 ], mu );\n\t\t\tclist[ offset + 1 ] = lerp( scope.palette[ c_offset1 * 3 + 1 ], scope.palette[ c_offset2 * 3 + 1 ], mu );\n\t\t\tclist[ offset + 2 ] = lerp( scope.palette[ c_offset1 * 3 + 2 ], scope.palette[ c_offset2 * 3 + 2 ], mu );\n\n\t\t}\n\n\t\tfunction compNorm( q ) {\n\n\t\t\tconst q3 = q * 3;\n\n\t\t\tif ( scope.normal_cache[ q3 ] === 0.0 ) {\n\n\t\t\t\tscope.normal_cache[ q3 + 0 ] = scope.field[ q - 1 ] - scope.field[ q + 1 ];\n\t\t\t\tscope.normal_cache[ q3 + 1 ] =\n\t\t\t\t\tscope.field[ q - scope.yd ] - scope.field[ q + scope.yd ];\n\t\t\t\tscope.normal_cache[ q3 + 2 ] =\n\t\t\t\t\tscope.field[ q - scope.zd ] - scope.field[ q + scope.zd ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Returns total number of triangles. Fills triangles.\n\t\t// (this is where most of time is spent - it's inner work of O(n3) loop )\n\n\t\tfunction polygonize( fx, fy, fz, q, isol ) {\n\n\t\t\t// cache indices\n\t\t\tconst q1 = q + 1,\n\t\t\t\tqy = q + scope.yd,\n\t\t\t\tqz = q + scope.zd,\n\t\t\t\tq1y = q1 + scope.yd,\n\t\t\t\tq1z = q1 + scope.zd,\n\t\t\t\tqyz = q + scope.yd + scope.zd,\n\t\t\t\tq1yz = q1 + scope.yd + scope.zd;\n\n\t\t\tlet cubeindex = 0;\n\t\t\tconst field0 = scope.field[ q ],\n\t\t\t\tfield1 = scope.field[ q1 ],\n\t\t\t\tfield2 = scope.field[ qy ],\n\t\t\t\tfield3 = scope.field[ q1y ],\n\t\t\t\tfield4 = scope.field[ qz ],\n\t\t\t\tfield5 = scope.field[ q1z ],\n\t\t\t\tfield6 = scope.field[ qyz ],\n\t\t\t\tfield7 = scope.field[ q1yz ];\n\n\t\t\tif ( field0 < isol ) cubeindex |= 1;\n\t\t\tif ( field1 < isol ) cubeindex |= 2;\n\t\t\tif ( field2 < isol ) cubeindex |= 8;\n\t\t\tif ( field3 < isol ) cubeindex |= 4;\n\t\t\tif ( field4 < isol ) cubeindex |= 16;\n\t\t\tif ( field5 < isol ) cubeindex |= 32;\n\t\t\tif ( field6 < isol ) cubeindex |= 128;\n\t\t\tif ( field7 < isol ) cubeindex |= 64;\n\n\t\t\t// if cube is entirely in/out of the surface - bail, nothing to draw\n\n\t\t\tconst bits = edgeTable[ cubeindex ];\n\t\t\tif ( bits === 0 ) return 0;\n\n\t\t\tconst d = scope.delta,\n\t\t\t\tfx2 = fx + d,\n\t\t\t\tfy2 = fy + d,\n\t\t\t\tfz2 = fz + d;\n\n\t\t\t// top of the cube\n\n\t\t\tif ( bits & 1 ) {\n\n\t\t\t\tcompNorm( q );\n\t\t\t\tcompNorm( q1 );\n\t\t\t\tVIntX( q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1 );\n\n\t\t\t}\n\n\t\t\tif ( bits & 2 ) {\n\n\t\t\t\tcompNorm( q1 );\n\t\t\t\tcompNorm( q1y );\n\t\t\t\tVIntY( q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y );\n\n\t\t\t}\n\n\t\t\tif ( bits & 4 ) {\n\n\t\t\t\tcompNorm( qy );\n\t\t\t\tcompNorm( q1y );\n\t\t\t\tVIntX( qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y );\n\n\t\t\t}\n\n\t\t\tif ( bits & 8 ) {\n\n\t\t\t\tcompNorm( q );\n\t\t\t\tcompNorm( qy );\n\t\t\t\tVIntY( q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy );\n\n\t\t\t}\n\n\t\t\t// bottom of the cube\n\n\t\t\tif ( bits & 16 ) {\n\n\t\t\t\tcompNorm( qz );\n\t\t\t\tcompNorm( q1z );\n\t\t\t\tVIntX( qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z );\n\n\t\t\t}\n\n\t\t\tif ( bits & 32 ) {\n\n\t\t\t\tcompNorm( q1z );\n\t\t\t\tcompNorm( q1yz );\n\t\t\t\tVIntY(\n\t\t\t\t\tq1z * 3,\n\t\t\t\t\t15,\n\t\t\t\t\tisol,\n\t\t\t\t\tfx2,\n\t\t\t\t\tfy,\n\t\t\t\t\tfz2,\n\t\t\t\t\tfield5,\n\t\t\t\t\tfield7,\n\t\t\t\t\tq1z,\n\t\t\t\t\tq1yz\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( bits & 64 ) {\n\n\t\t\t\tcompNorm( qyz );\n\t\t\t\tcompNorm( q1yz );\n\t\t\t\tVIntX(\n\t\t\t\t\tqyz * 3,\n\t\t\t\t\t18,\n\t\t\t\t\tisol,\n\t\t\t\t\tfx,\n\t\t\t\t\tfy2,\n\t\t\t\t\tfz2,\n\t\t\t\t\tfield6,\n\t\t\t\t\tfield7,\n\t\t\t\t\tqyz,\n\t\t\t\t\tq1yz\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( bits & 128 ) {\n\n\t\t\t\tcompNorm( qz );\n\t\t\t\tcompNorm( qyz );\n\t\t\t\tVIntY( qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz );\n\n\t\t\t}\n\n\t\t\t// vertical lines of the cube\n\t\t\tif ( bits & 256 ) {\n\n\t\t\t\tcompNorm( q );\n\t\t\t\tcompNorm( qz );\n\t\t\t\tVIntZ( q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz );\n\n\t\t\t}\n\n\t\t\tif ( bits & 512 ) {\n\n\t\t\t\tcompNorm( q1 );\n\t\t\t\tcompNorm( q1z );\n\t\t\t\tVIntZ( q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z );\n\n\t\t\t}\n\n\t\t\tif ( bits & 1024 ) {\n\n\t\t\t\tcompNorm( q1y );\n\t\t\t\tcompNorm( q1yz );\n\t\t\t\tVIntZ(\n\t\t\t\t\tq1y * 3,\n\t\t\t\t\t30,\n\t\t\t\t\tisol,\n\t\t\t\t\tfx2,\n\t\t\t\t\tfy2,\n\t\t\t\t\tfz,\n\t\t\t\t\tfield3,\n\t\t\t\t\tfield7,\n\t\t\t\t\tq1y,\n\t\t\t\t\tq1yz\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( bits & 2048 ) {\n\n\t\t\t\tcompNorm( qy );\n\t\t\t\tcompNorm( qyz );\n\t\t\t\tVIntZ( qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz );\n\n\t\t\t}\n\n\t\t\tcubeindex <<= 4; // re-purpose cubeindex into an offset into triTable\n\n\t\t\tlet o1,\n\t\t\t\to2,\n\t\t\t\to3,\n\t\t\t\tnumtris = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// here is where triangles are created\n\n\t\t\twhile ( triTable[ cubeindex + i ] != - 1 ) {\n\n\t\t\t\to1 = cubeindex + i;\n\t\t\t\to2 = o1 + 1;\n\t\t\t\to3 = o1 + 2;\n\n\t\t\t\tposnormtriv(\n\t\t\t\t\tvlist,\n\t\t\t\t\tnlist,\n\t\t\t\t\tclist,\n\t\t\t\t\t3 * triTable[ o1 ],\n\t\t\t\t\t3 * triTable[ o2 ],\n\t\t\t\t\t3 * triTable[ o3 ]\n\t\t\t\t);\n\n\t\t\t\ti += 3;\n\t\t\t\tnumtris ++;\n\n\t\t\t}\n\n\t\t\treturn numtris;\n\n\t\t}\n\n\t\tfunction posnormtriv( pos, norm, colors, o1, o2, o3 ) {\n\n\t\t\tconst c = scope.count * 3;\n\n\t\t\t// positions\n\n\t\t\tscope.positionArray[ c + 0 ] = pos[ o1 ];\n\t\t\tscope.positionArray[ c + 1 ] = pos[ o1 + 1 ];\n\t\t\tscope.positionArray[ c + 2 ] = pos[ o1 + 2 ];\n\n\t\t\tscope.positionArray[ c + 3 ] = pos[ o2 ];\n\t\t\tscope.positionArray[ c + 4 ] = pos[ o2 + 1 ];\n\t\t\tscope.positionArray[ c + 5 ] = pos[ o2 + 2 ];\n\n\t\t\tscope.positionArray[ c + 6 ] = pos[ o3 ];\n\t\t\tscope.positionArray[ c + 7 ] = pos[ o3 + 1 ];\n\t\t\tscope.positionArray[ c + 8 ] = pos[ o3 + 2 ];\n\n\t\t\t// normals\n\n\t\t\tif ( scope.material.flatShading === true ) {\n\n\t\t\t\tconst nx = ( norm[ o1 + 0 ] + norm[ o2 + 0 ] + norm[ o3 + 0 ] ) / 3;\n\t\t\t\tconst ny = ( norm[ o1 + 1 ] + norm[ o2 + 1 ] + norm[ o3 + 1 ] ) / 3;\n\t\t\t\tconst nz = ( norm[ o1 + 2 ] + norm[ o2 + 2 ] + norm[ o3 + 2 ] ) / 3;\n\n\t\t\t\tscope.normalArray[ c + 0 ] = nx;\n\t\t\t\tscope.normalArray[ c + 1 ] = ny;\n\t\t\t\tscope.normalArray[ c + 2 ] = nz;\n\n\t\t\t\tscope.normalArray[ c + 3 ] = nx;\n\t\t\t\tscope.normalArray[ c + 4 ] = ny;\n\t\t\t\tscope.normalArray[ c + 5 ] = nz;\n\n\t\t\t\tscope.normalArray[ c + 6 ] = nx;\n\t\t\t\tscope.normalArray[ c + 7 ] = ny;\n\t\t\t\tscope.normalArray[ c + 8 ] = nz;\n\n\t\t\t} else {\n\n\t\t\t\tscope.normalArray[ c + 0 ] = norm[ o1 + 0 ];\n\t\t\t\tscope.normalArray[ c + 1 ] = norm[ o1 + 1 ];\n\t\t\t\tscope.normalArray[ c + 2 ] = norm[ o1 + 2 ];\n\n\t\t\t\tscope.normalArray[ c + 3 ] = norm[ o2 + 0 ];\n\t\t\t\tscope.normalArray[ c + 4 ] = norm[ o2 + 1 ];\n\t\t\t\tscope.normalArray[ c + 5 ] = norm[ o2 + 2 ];\n\n\t\t\t\tscope.normalArray[ c + 6 ] = norm[ o3 + 0 ];\n\t\t\t\tscope.normalArray[ c + 7 ] = norm[ o3 + 1 ];\n\t\t\t\tscope.normalArray[ c + 8 ] = norm[ o3 + 2 ];\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( scope.enableUvs ) {\n\n\t\t\t\tconst d = scope.count * 2;\n\n\t\t\t\tscope.uvArray[ d + 0 ] = pos[ o1 + 0 ];\n\t\t\t\tscope.uvArray[ d + 1 ] = pos[ o1 + 2 ];\n\n\t\t\t\tscope.uvArray[ d + 2 ] = pos[ o2 + 0 ];\n\t\t\t\tscope.uvArray[ d + 3 ] = pos[ o2 + 2 ];\n\n\t\t\t\tscope.uvArray[ d + 4 ] = pos[ o3 + 0 ];\n\t\t\t\tscope.uvArray[ d + 5 ] = pos[ o3 + 2 ];\n\n\t\t\t}\n\n\t\t\t// colors\n\n\t\t\tif ( scope.enableColors ) {\n\n\t\t\t\tscope.colorArray[ c + 0 ] = colors[ o1 + 0 ];\n\t\t\t\tscope.colorArray[ c + 1 ] = colors[ o1 + 1 ];\n\t\t\t\tscope.colorArray[ c + 2 ] = colors[ o1 + 2 ];\n\n\t\t\t\tscope.colorArray[ c + 3 ] = colors[ o2 + 0 ];\n\t\t\t\tscope.colorArray[ c + 4 ] = colors[ o2 + 1 ];\n\t\t\t\tscope.colorArray[ c + 5 ] = colors[ o2 + 2 ];\n\n\t\t\t\tscope.colorArray[ c + 6 ] = colors[ o3 + 0 ];\n\t\t\t\tscope.colorArray[ c + 7 ] = colors[ o3 + 1 ];\n\t\t\t\tscope.colorArray[ c + 8 ] = colors[ o3 + 2 ];\n\n\t\t\t}\n\n\t\t\tscope.count += 3;\n\n\t\t}\n\n\t\t/////////////////////////////////////\n\t\t// Metaballs\n\t\t/////////////////////////////////////\n\n\t\t// Adds a reciprocal ball (nice and blobby) that, to be fast, fades to zero after\n\t\t// a fixed distance, determined by strength and subtract.\n\n\t\tthis.addBall = function ( ballx, bally, ballz, strength, subtract, colors ) {\n\n\t\t\tconst sign = Math.sign( strength );\n\t\t\tstrength = Math.abs( strength );\n\t\t\tconst userDefineColor = ! ( colors === undefined || colors === null );\n\t\t\tlet ballColor = new Color( ballx, bally, ballz );\n\n\t\t\tif ( userDefineColor ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tballColor =\n\t\t\t\t\t\tcolors instanceof Color\n\t\t\t\t\t\t\t? colors\n\t\t\t\t\t\t\t: Array.isArray( colors )\n\t\t\t\t\t\t\t\t? new Color(\n\t\t\t\t\t\t\t\t\tMath.min( Math.abs( colors[ 0 ] ), 1 ),\n\t\t\t\t\t\t\t\t\tMath.min( Math.abs( colors[ 1 ] ), 1 ),\n\t\t\t\t\t\t\t\t\tMath.min( Math.abs( colors[ 2 ] ), 1 )\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: new Color( colors );\n\n\t\t\t\t} catch ( err ) {\n\n\t\t\t\t\tballColor = new Color( ballx, bally, ballz );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Let's solve the equation to find the radius:\n\t\t\t// 1.0 / (0.000001 + radius^2) * strength - subtract = 0\n\t\t\t// strength / (radius^2) = subtract\n\t\t\t// strength = subtract * radius^2\n\t\t\t// radius^2 = strength / subtract\n\t\t\t// radius = sqrt(strength / subtract)\n\n\t\t\tconst radius = this.size * Math.sqrt( strength / subtract ),\n\t\t\t\tzs = ballz * this.size,\n\t\t\t\tys = bally * this.size,\n\t\t\t\txs = ballx * this.size;\n\n\t\t\tlet min_z = Math.floor( zs - radius );\n\t\t\tif ( min_z < 1 ) min_z = 1;\n\t\t\tlet max_z = Math.floor( zs + radius );\n\t\t\tif ( max_z > this.size - 1 ) max_z = this.size - 1;\n\t\t\tlet min_y = Math.floor( ys - radius );\n\t\t\tif ( min_y < 1 ) min_y = 1;\n\t\t\tlet max_y = Math.floor( ys + radius );\n\t\t\tif ( max_y > this.size - 1 ) max_y = this.size - 1;\n\t\t\tlet min_x = Math.floor( xs - radius );\n\t\t\tif ( min_x < 1 ) min_x = 1;\n\t\t\tlet max_x = Math.floor( xs + radius );\n\t\t\tif ( max_x > this.size - 1 ) max_x = this.size - 1;\n\n\t\t\t// Don't polygonize in the outer layer because normals aren't\n\t\t\t// well-defined there.\n\n\t\t\tlet x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val;\n\n\t\t\tfor ( z = min_z; z < max_z; z ++ ) {\n\n\t\t\t\tz_offset = this.size2 * z;\n\t\t\t\tfz = z / this.size - ballz;\n\t\t\t\tfz2 = fz * fz;\n\n\t\t\t\tfor ( y = min_y; y < max_y; y ++ ) {\n\n\t\t\t\t\ty_offset = z_offset + this.size * y;\n\t\t\t\t\tfy = y / this.size - bally;\n\t\t\t\t\tfy2 = fy * fy;\n\n\t\t\t\t\tfor ( x = min_x; x < max_x; x ++ ) {\n\n\t\t\t\t\t\tfx = x / this.size - ballx;\n\t\t\t\t\t\tval = strength / ( 0.000001 + fx * fx + fy2 + fz2 ) - subtract;\n\t\t\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\t\t\tthis.field[ y_offset + x ] += val * sign;\n\n\t\t\t\t\t\t\t// optimization\n\t\t\t\t\t\t\t// http://www.geisswerks.com/ryan/BLOBS/blobs.html\n\t\t\t\t\t\t\tconst ratio =\n\t\t\t\t\t\t\t\tMath.sqrt( ( x - xs ) * ( x - xs ) + ( y - ys ) * ( y - ys ) + ( z - zs ) * ( z - zs ) ) / radius;\n\t\t\t\t\t\t\tconst contrib =\n\t\t\t\t\t\t\t\t1 - ratio * ratio * ratio * ( ratio * ( ratio * 6 - 15 ) + 10 );\n\t\t\t\t\t\t\tthis.palette[ ( y_offset + x ) * 3 + 0 ] += ballColor.r * contrib;\n\t\t\t\t\t\t\tthis.palette[ ( y_offset + x ) * 3 + 1 ] += ballColor.g * contrib;\n\t\t\t\t\t\t\tthis.palette[ ( y_offset + x ) * 3 + 2 ] += ballColor.b * contrib;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.addPlaneX = function ( strength, subtract ) {\n\n\t\t\t// cache attribute lookups\n\t\t\tconst size = this.size,\n\t\t\t\tyd = this.yd,\n\t\t\t\tzd = this.zd,\n\t\t\t\tfield = this.field;\n\n\t\t\tlet x,\n\t\t\t\ty,\n\t\t\t\tz,\n\t\t\t\txx,\n\t\t\t\tval,\n\t\t\t\txdiv,\n\t\t\t\tcxy,\n\t\t\t\tdist = size * Math.sqrt( strength / subtract );\n\n\t\t\tif ( dist > size ) dist = size;\n\n\t\t\tfor ( x = 0; x < dist; x ++ ) {\n\n\t\t\t\txdiv = x / size;\n\t\t\t\txx = xdiv * xdiv;\n\t\t\t\tval = strength / ( 0.0001 + xx ) - subtract;\n\n\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\tfor ( y = 0; y < size; y ++ ) {\n\n\t\t\t\t\t\tcxy = x + y * yd;\n\n\t\t\t\t\t\tfor ( z = 0; z < size; z ++ ) {\n\n\t\t\t\t\t\t\tfield[ zd * z + cxy ] += val;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.addPlaneY = function ( strength, subtract ) {\n\n\t\t\t// cache attribute lookups\n\t\t\tconst size = this.size,\n\t\t\t\tyd = this.yd,\n\t\t\t\tzd = this.zd,\n\t\t\t\tfield = this.field;\n\n\t\t\tlet x,\n\t\t\t\ty,\n\t\t\t\tz,\n\t\t\t\tyy,\n\t\t\t\tval,\n\t\t\t\tydiv,\n\t\t\t\tcy,\n\t\t\t\tcxy,\n\t\t\t\tdist = size * Math.sqrt( strength / subtract );\n\n\t\t\tif ( dist > size ) dist = size;\n\n\t\t\tfor ( y = 0; y < dist; y ++ ) {\n\n\t\t\t\tydiv = y / size;\n\t\t\t\tyy = ydiv * ydiv;\n\t\t\t\tval = strength / ( 0.0001 + yy ) - subtract;\n\n\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\tcy = y * yd;\n\n\t\t\t\t\tfor ( x = 0; x < size; x ++ ) {\n\n\t\t\t\t\t\tcxy = cy + x;\n\n\t\t\t\t\t\tfor ( z = 0; z < size; z ++ ) field[ zd * z + cxy ] += val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.addPlaneZ = function ( strength, subtract ) {\n\n\t\t\t// cache attribute lookups\n\n\t\t\tconst size = this.size,\n\t\t\t\tyd = this.yd,\n\t\t\t\tzd = this.zd,\n\t\t\t\tfield = this.field;\n\n\t\t\tlet x,\n\t\t\t\ty,\n\t\t\t\tz,\n\t\t\t\tzz,\n\t\t\t\tval,\n\t\t\t\tzdiv,\n\t\t\t\tcz,\n\t\t\t\tcyz,\n\t\t\t\tdist = size * Math.sqrt( strength / subtract );\n\n\t\t\tif ( dist > size ) dist = size;\n\n\t\t\tfor ( z = 0; z < dist; z ++ ) {\n\n\t\t\t\tzdiv = z / size;\n\t\t\t\tzz = zdiv * zdiv;\n\t\t\t\tval = strength / ( 0.0001 + zz ) - subtract;\n\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\tcz = zd * z;\n\n\t\t\t\t\tfor ( y = 0; y < size; y ++ ) {\n\n\t\t\t\t\t\tcyz = cz + y * yd;\n\n\t\t\t\t\t\tfor ( x = 0; x < size; x ++ ) field[ cyz + x ] += val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/////////////////////////////////////\n\t\t// Updates\n\t\t/////////////////////////////////////\n\n\t\tthis.setCell = function ( x, y, z, value ) {\n\n\t\t\tconst index = this.size2 * z + this.size * y + x;\n\t\t\tthis.field[ index ] = value;\n\n\t\t};\n\n\t\tthis.getCell = function ( x, y, z ) {\n\n\t\t\tconst index = this.size2 * z + this.size * y + x;\n\t\t\treturn this.field[ index ];\n\n\t\t};\n\n\t\tthis.blur = function ( intensity = 1 ) {\n\n\t\t\tconst field = this.field;\n\t\t\tconst fieldCopy = field.slice();\n\t\t\tconst size = this.size;\n\t\t\tconst size2 = this.size2;\n\t\t\tfor ( let x = 0; x < size; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < size; y ++ ) {\n\n\t\t\t\t\tfor ( let z = 0; z < size; z ++ ) {\n\n\t\t\t\t\t\tconst index = size2 * z + size * y + x;\n\t\t\t\t\t\tlet val = fieldCopy[ index ];\n\t\t\t\t\t\tlet count = 1;\n\n\t\t\t\t\t\tfor ( let x2 = - 1; x2 <= 1; x2 += 2 ) {\n\n\t\t\t\t\t\t\tconst x3 = x2 + x;\n\t\t\t\t\t\t\tif ( x3 < 0 || x3 >= size ) continue;\n\n\t\t\t\t\t\t\tfor ( let y2 = - 1; y2 <= 1; y2 += 2 ) {\n\n\t\t\t\t\t\t\t\tconst y3 = y2 + y;\n\t\t\t\t\t\t\t\tif ( y3 < 0 || y3 >= size ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let z2 = - 1; z2 <= 1; z2 += 2 ) {\n\n\t\t\t\t\t\t\t\t\tconst z3 = z2 + z;\n\t\t\t\t\t\t\t\t\tif ( z3 < 0 || z3 >= size ) continue;\n\n\t\t\t\t\t\t\t\t\tconst index2 = size2 * z3 + size * y3 + x3;\n\t\t\t\t\t\t\t\t\tconst val2 = fieldCopy[ index2 ];\n\n\t\t\t\t\t\t\t\t\tcount ++;\n\t\t\t\t\t\t\t\t\tval += intensity * ( val2 - val ) / count;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfield[ index ] = val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\t// wipe the normal cache\n\n\t\t\tfor ( let i = 0; i < this.size3; i ++ ) {\n\n\t\t\t\tthis.normal_cache[ i * 3 ] = 0.0;\n\t\t\t\tthis.field[ i ] = 0.0;\n\t\t\t\tthis.palette[ i * 3 ] = this.palette[ i * 3 + 1 ] = this.palette[\n\t\t\t\t\ti * 3 + 2\n\t\t\t\t] = 0.0;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\tthis.count = 0;\n\n\t\t\t// Triangulate. Yeah, this is slow.\n\n\t\t\tconst smin2 = this.size - 2;\n\n\t\t\tfor ( let z = 1; z < smin2; z ++ ) {\n\n\t\t\t\tconst z_offset = this.size2 * z;\n\t\t\t\tconst fz = ( z - this.halfsize ) / this.halfsize; //+ 1\n\n\t\t\t\tfor ( let y = 1; y < smin2; y ++ ) {\n\n\t\t\t\t\tconst y_offset = z_offset + this.size * y;\n\t\t\t\t\tconst fy = ( y - this.halfsize ) / this.halfsize; //+ 1\n\n\t\t\t\t\tfor ( let x = 1; x < smin2; x ++ ) {\n\n\t\t\t\t\t\tconst fx = ( x - this.halfsize ) / this.halfsize; //+ 1\n\t\t\t\t\t\tconst q = y_offset + x;\n\n\t\t\t\t\t\t polygonize( fx, fy, fz, q, this.isolation );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// set the draw range to only the processed triangles\n\n\t\t\tthis.geometry.setDrawRange( 0, this.count );\n\n\t\t\t// update geometry data\n\n\t\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\t\t\tgeometry.getAttribute( 'normal' ).needsUpdate = true;\n\n\t\t\tif ( this.enableUvs ) geometry.getAttribute( 'uv' ).needsUpdate = true;\n\t\t\tif ( this.enableColors ) geometry.getAttribute( 'color' ).needsUpdate = true;\n\n\t\t\t// safety check\n\n\t\t\tif ( this.count / 3 > maxPolyCount ) console.warn( 'THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count.' );\n\n\t\t};\n\n\t\tthis.init( resolution );\n\n\t}\n\n}\n\n/////////////////////////////////////\n// Marching cubes lookup tables\n/////////////////////////////////////\n\n// These tables are straight from Paul Bourke's page:\n// http://paulbourke.net/geometry/polygonise/\n// who in turn got them from Cory Gene Bloyd.\n\nconst edgeTable = new Int32Array( [\n\t0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\n\t0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\n\t0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\n\t0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\n\t0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\n\t0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\n\t0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\n\t0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\n\t0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\n\t0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\n\t0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\n\t0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\n\t0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\n\t0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\n\t0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\n\t0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\n\t0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\n\t0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\n\t0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\n\t0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\n\t0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\n\t0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\n\t0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\n\t0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\n\t0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\n\t0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\n\t0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\n\t0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\n\t0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\n\t0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\n\t0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\n\t0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0 ] );\n\nconst triTable = new Int32Array( [\n\t- 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 8, 3, 9, 8, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 2, 10, 0, 2, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 8, 3, 2, 10, 8, 10, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 11, 2, 8, 11, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 11, 2, 1, 9, 11, 9, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 10, 1, 11, 10, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 10, 1, 0, 8, 10, 8, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 9, 0, 3, 11, 9, 11, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 3, 0, 7, 3, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 1, 9, 4, 7, 1, 7, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 4, 7, 3, 0, 4, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 2, 10, 9, 0, 2, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1,\n\t8, 4, 7, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 4, 7, 11, 2, 4, 2, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 8, 4, 7, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, - 1, - 1, - 1, - 1,\n\t3, 10, 1, 3, 11, 10, 7, 8, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, - 1, - 1, - 1, - 1,\n\t4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1,\n\t4, 7, 11, 4, 11, 9, 9, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 5, 4, 1, 5, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 5, 4, 8, 3, 5, 3, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 1, 2, 10, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 2, 10, 5, 4, 2, 4, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 11, 2, 0, 8, 11, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 5, 4, 0, 1, 5, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, - 1, - 1, - 1, - 1,\n\t10, 3, 11, 10, 1, 3, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, - 1, - 1, - 1, - 1,\n\t5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1,\n\t5, 4, 8, 5, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 7, 8, 5, 7, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 3, 0, 9, 5, 3, 5, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 7, 8, 0, 1, 7, 1, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 7, 8, 9, 5, 7, 10, 1, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, - 1, - 1, - 1, - 1,\n\t8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, - 1, - 1, - 1, - 1,\n\t2, 10, 5, 2, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 9, 5, 7, 8, 9, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, - 1, - 1, - 1, - 1,\n\t11, 2, 1, 11, 1, 7, 7, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, - 1, - 1, - 1, - 1,\n\t5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, - 1,\n\t11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, - 1,\n\t11, 10, 5, 7, 11, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 8, 3, 1, 9, 8, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 5, 2, 6, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 5, 1, 2, 6, 3, 0, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 6, 5, 9, 0, 6, 0, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 0, 8, 11, 2, 0, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, - 1, - 1, - 1, - 1,\n\t6, 3, 11, 6, 5, 3, 5, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1,\n\t3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, - 1, - 1, - 1, - 1,\n\t6, 5, 9, 6, 9, 11, 11, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 3, 0, 4, 7, 3, 6, 5, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 5, 10, 6, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1,\n\t6, 1, 2, 6, 5, 1, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, - 1, - 1, - 1, - 1,\n\t8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, - 1, - 1, - 1, - 1,\n\t7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, - 1,\n\t3, 11, 2, 7, 8, 4, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1,\n\t9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, - 1,\n\t8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1,\n\t5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, - 1,\n\t0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, - 1,\n\t6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, - 1, - 1, - 1, - 1,\n\t10, 4, 9, 6, 4, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 10, 6, 4, 9, 10, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 0, 1, 10, 6, 0, 6, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1,\n\t1, 4, 9, 1, 2, 4, 2, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, - 1, - 1, - 1, - 1,\n\t0, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 3, 2, 8, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 4, 9, 10, 6, 4, 11, 2, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, - 1, - 1, - 1, - 1,\n\t3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1,\n\t6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, - 1,\n\t9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, - 1, - 1, - 1, - 1,\n\t8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, - 1,\n\t3, 11, 6, 3, 6, 0, 0, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 4, 8, 11, 6, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 10, 6, 7, 8, 10, 8, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, - 1, - 1, - 1, - 1,\n\t10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, - 1, - 1, - 1, - 1,\n\t10, 6, 7, 10, 7, 1, 1, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1,\n\t2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, - 1,\n\t7, 8, 0, 7, 0, 6, 6, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 3, 2, 6, 7, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1,\n\t2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, - 1,\n\t1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, - 1,\n\t11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, - 1, - 1, - 1, - 1,\n\t8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, - 1,\n\t0, 9, 1, 11, 6, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, - 1, - 1, - 1, - 1,\n\t7, 11, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 1, 9, 8, 3, 1, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 1, 2, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 3, 0, 8, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 9, 0, 2, 10, 9, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, - 1, - 1, - 1, - 1,\n\t7, 2, 3, 6, 2, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 0, 8, 7, 6, 0, 6, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 7, 6, 2, 3, 7, 0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, - 1, - 1, - 1, - 1,\n\t10, 7, 6, 10, 1, 7, 1, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, - 1, - 1, - 1, - 1,\n\t0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, - 1, - 1, - 1, - 1,\n\t7, 6, 10, 7, 10, 8, 8, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 8, 4, 11, 8, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 6, 11, 3, 0, 6, 0, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 6, 11, 8, 4, 6, 9, 0, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, - 1, - 1, - 1, - 1,\n\t6, 8, 4, 6, 11, 8, 2, 10, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, - 1, - 1, - 1, - 1,\n\t4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, - 1, - 1, - 1, - 1,\n\t10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, - 1,\n\t8, 2, 3, 8, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, - 1, - 1, - 1, - 1,\n\t1, 9, 4, 1, 4, 2, 2, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, - 1, - 1, - 1, - 1,\n\t10, 1, 0, 10, 0, 6, 6, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, - 1,\n\t10, 9, 4, 6, 10, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 5, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 4, 9, 5, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 0, 1, 5, 4, 0, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 10, 1, 2, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, - 1, - 1, - 1, - 1,\n\t7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, - 1, - 1, - 1, - 1,\n\t3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, - 1,\n\t7, 2, 3, 7, 6, 2, 5, 4, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, - 1, - 1, - 1, - 1,\n\t3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, - 1, - 1, - 1, - 1,\n\t6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, - 1,\n\t9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, - 1, - 1, - 1, - 1,\n\t1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, - 1,\n\t4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, - 1,\n\t7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, - 1, - 1, - 1, - 1,\n\t6, 9, 5, 6, 11, 9, 11, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, - 1, - 1, - 1, - 1,\n\t0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, - 1, - 1, - 1, - 1,\n\t6, 11, 3, 6, 3, 5, 5, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, - 1, - 1, - 1, - 1,\n\t0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, - 1,\n\t11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, - 1,\n\t6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, - 1, - 1, - 1, - 1,\n\t5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, - 1, - 1, - 1, - 1,\n\t9, 5, 6, 9, 6, 0, 0, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, - 1,\n\t1, 5, 6, 2, 1, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, - 1,\n\t10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, - 1, - 1, - 1, - 1,\n\t0, 3, 8, 5, 6, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 5, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 5, 10, 7, 5, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 5, 10, 11, 7, 5, 8, 3, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 11, 7, 5, 10, 11, 1, 9, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, - 1, - 1, - 1, - 1,\n\t11, 1, 2, 11, 7, 1, 7, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, - 1, - 1, - 1, - 1,\n\t9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, - 1, - 1, - 1, - 1,\n\t7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, - 1,\n\t2, 5, 10, 2, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, - 1, - 1, - 1, - 1,\n\t9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, - 1,\n\t1, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 7, 0, 7, 1, 1, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 3, 9, 3, 5, 5, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 8, 7, 5, 9, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 8, 4, 5, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, - 1, - 1, - 1, - 1,\n\t10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, - 1,\n\t2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, - 1, - 1, - 1, - 1,\n\t0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, - 1,\n\t0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, - 1,\n\t9, 4, 5, 2, 11, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, - 1, - 1, - 1, - 1,\n\t5, 10, 2, 5, 2, 4, 4, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, - 1,\n\t5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, - 1, - 1, - 1, - 1,\n\t8, 4, 5, 8, 5, 3, 3, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 4, 5, 1, 0, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, - 1, - 1, - 1, - 1,\n\t9, 4, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 11, 7, 4, 9, 11, 9, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, - 1, - 1, - 1, - 1,\n\t1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, - 1, - 1, - 1, - 1,\n\t3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, - 1,\n\t4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, - 1, - 1, - 1, - 1,\n\t9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, - 1,\n\t11, 7, 4, 11, 4, 2, 2, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, - 1, - 1, - 1, - 1,\n\t2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, - 1, - 1, - 1, - 1,\n\t9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, - 1,\n\t3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, - 1,\n\t1, 10, 2, 8, 7, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 1, 4, 1, 7, 7, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, - 1, - 1, - 1, - 1,\n\t4, 0, 3, 7, 4, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 8, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 9, 3, 9, 11, 11, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 10, 0, 10, 8, 8, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 1, 10, 11, 3, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 11, 1, 11, 9, 9, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, - 1, - 1, - 1, - 1,\n\t0, 2, 11, 8, 0, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 2, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 8, 2, 8, 10, 10, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 10, 2, 0, 9, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, - 1, - 1, - 1, - 1,\n\t1, 10, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 3, 8, 9, 1, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 9, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 3, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t- 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 ] );\n\nexport { MarchingCubes, edgeTable, triTable };\n", "import {\n\tColor,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tPlane,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget,\n\tHalfFloatType\n} from 'three';\n\nclass Reflector extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isReflector = true;\n\n\t\tthis.type = 'Reflector';\n\t\tthis.camera = new PerspectiveCamera();\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0x7F7F7F );\n\t\tconst textureWidth = options.textureWidth || 512;\n\t\tconst textureHeight = options.textureHeight || 512;\n\t\tconst clipBias = options.clipBias || 0;\n\t\tconst shader = options.shader || Reflector.ReflectorShader;\n\t\tconst multisample = ( options.multisample !== undefined ) ? options.multisample : 4;\n\n\t\t//\n\n\t\tconst reflectorPlane = new Plane();\n\t\tconst normal = new Vector3();\n\t\tconst reflectorWorldPosition = new Vector3();\n\t\tconst cameraWorldPosition = new Vector3();\n\t\tconst rotationMatrix = new Matrix4();\n\t\tconst lookAtPosition = new Vector3( 0, 0, - 1 );\n\t\tconst clipPlane = new Vector4();\n\n\t\tconst view = new Vector3();\n\t\tconst target = new Vector3();\n\t\tconst q = new Vector4();\n\n\t\tconst textureMatrix = new Matrix4();\n\t\tconst virtualCamera = this.camera;\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tvertexShader: shader.vertexShader\n\t\t} );\n\n\t\tmaterial.uniforms[ 'tDiffuse' ].value = renderTarget.texture;\n\t\tmaterial.uniforms[ 'color' ].value = color;\n\t\tmaterial.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\n\t\tthis.material = material;\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\treflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\tnormal.set( 0, 0, 1 );\n\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\tview.subVectors( reflectorWorldPosition, cameraWorldPosition );\n\n\t\t\t// Avoid rendering when reflector is facing away\n\n\t\t\tif ( view.dot( normal ) > 0 ) return;\n\n\t\t\tview.reflect( normal ).negate();\n\t\t\tview.add( reflectorWorldPosition );\n\n\t\t\trotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t\tlookAtPosition.set( 0, 0, - 1 );\n\t\t\tlookAtPosition.applyMatrix4( rotationMatrix );\n\t\t\tlookAtPosition.add( cameraWorldPosition );\n\n\t\t\ttarget.subVectors( reflectorWorldPosition, lookAtPosition );\n\t\t\ttarget.reflect( normal ).negate();\n\t\t\ttarget.add( reflectorWorldPosition );\n\n\t\t\tvirtualCamera.position.copy( view );\n\t\t\tvirtualCamera.up.set( 0, 1, 0 );\n\t\t\tvirtualCamera.up.applyMatrix4( rotationMatrix );\n\t\t\tvirtualCamera.up.reflect( normal );\n\t\t\tvirtualCamera.lookAt( target );\n\n\t\t\tvirtualCamera.far = camera.far; // Used in WebGLBackground\n\n\t\t\tvirtualCamera.updateMatrixWorld();\n\t\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t// Update the texture matrix\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\t\t\ttextureMatrix.multiply( virtualCamera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( virtualCamera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t\t// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n\t\t\t// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n\t\t\treflectorPlane.setFromNormalAndCoplanarPoint( normal, reflectorWorldPosition );\n\t\t\treflectorPlane.applyMatrix4( virtualCamera.matrixWorldInverse );\n\n\t\t\tclipPlane.set( reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant );\n\n\t\t\tconst projectionMatrix = virtualCamera.projectionMatrix;\n\n\t\t\tq.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t\tq.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t\tq.z = - 1.0;\n\t\t\tq.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t\t// Calculate the scaled plane vector\n\t\t\tclipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );\n\n\t\t\t// Replacing the third row of the projection matrix\n\t\t\tprojectionMatrix.elements[ 2 ] = clipPlane.x;\n\t\t\tprojectionMatrix.elements[ 6 ] = clipPlane.y;\n\t\t\tprojectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;\n\t\t\tprojectionMatrix.elements[ 14 ] = clipPlane.w;\n\n\t\t\t// Render\n\t\t\tscope.visible = false;\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// Restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t\tscope.visible = true;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\trenderTarget.dispose();\n\t\t\tscope.material.dispose();\n\n\t\t};\n\n\t}\n\n}\n\nReflector.ReflectorShader = {\n\n\tname: 'ReflectorShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tDiffuse': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tuniform mat4 textureMatrix;\n\t\tvarying vec4 vUv;\n\n\t\t#include \n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec4 vUv;\n\n\t\t#include \n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n};\n\nexport { Reflector };\n", "import {\n\tColor,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget,\n\tDepthTexture,\n\tUnsignedShortType,\n\tNearestFilter,\n\tPlane,\n\tHalfFloatType\n} from 'three';\n\nclass ReflectorForSSRPass extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isReflectorForSSRPass = true;\n\n\t\tthis.type = 'ReflectorForSSRPass';\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0x7F7F7F );\n\t\tconst textureWidth = options.textureWidth || 512;\n\t\tconst textureHeight = options.textureHeight || 512;\n\t\tconst clipBias = options.clipBias || 0;\n\t\tconst shader = options.shader || ReflectorForSSRPass.ReflectorShader;\n\t\tconst useDepthTexture = options.useDepthTexture === true;\n\t\tconst yAxis = new Vector3( 0, 1, 0 );\n\t\tconst vecTemp0 = new Vector3();\n\t\tconst vecTemp1 = new Vector3();\n\n\t\t//\n\n\t\tscope.needsUpdate = false;\n\t\tscope.maxDistance = ReflectorForSSRPass.ReflectorShader.uniforms.maxDistance.value;\n\t\tscope.opacity = ReflectorForSSRPass.ReflectorShader.uniforms.opacity.value;\n\t\tscope.color = color;\n\t\tscope.resolution = options.resolution || new Vector2( window.innerWidth, window.innerHeight );\n\n\n\t\tscope._distanceAttenuation = ReflectorForSSRPass.ReflectorShader.defines.DISTANCE_ATTENUATION;\n\t\tObject.defineProperty( scope, 'distanceAttenuation', {\n\t\t\tget() {\n\n\t\t\t\treturn scope._distanceAttenuation;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( scope._distanceAttenuation === val ) return;\n\t\t\t\tscope._distanceAttenuation = val;\n\t\t\t\tscope.material.defines.DISTANCE_ATTENUATION = val;\n\t\t\t\tscope.material.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\tscope._fresnel = ReflectorForSSRPass.ReflectorShader.defines.FRESNEL;\n\t\tObject.defineProperty( scope, 'fresnel', {\n\t\t\tget() {\n\n\t\t\t\treturn scope._fresnel;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( scope._fresnel === val ) return;\n\t\t\t\tscope._fresnel = val;\n\t\t\t\tscope.material.defines.FRESNEL = val;\n\t\t\t\tscope.material.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\tconst normal = new Vector3();\n\t\tconst reflectorWorldPosition = new Vector3();\n\t\tconst cameraWorldPosition = new Vector3();\n\t\tconst rotationMatrix = new Matrix4();\n\t\tconst lookAtPosition = new Vector3( 0, 0, - 1 );\n\n\t\tconst view = new Vector3();\n\t\tconst target = new Vector3();\n\n\t\tconst textureMatrix = new Matrix4();\n\t\tconst virtualCamera = new PerspectiveCamera();\n\n\t\tlet depthTexture;\n\n\t\tif ( useDepthTexture ) {\n\n\t\t\tdepthTexture = new DepthTexture();\n\t\t\tdepthTexture.type = UnsignedShortType;\n\t\t\tdepthTexture.minFilter = NearestFilter;\n\t\t\tdepthTexture.magFilter = NearestFilter;\n\n\t\t}\n\n\t\tconst parameters = {\n\t\t\tdepthTexture: useDepthTexture ? depthTexture : null,\n\t\t\ttype: HalfFloatType\n\t\t};\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, parameters );\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\ttransparent: useDepthTexture,\n\t\t\tdefines: Object.assign( {}, ReflectorForSSRPass.ReflectorShader.defines, {\n\t\t\t\tuseDepthTexture\n\t\t\t} ),\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tvertexShader: shader.vertexShader\n\t\t} );\n\n\t\tmaterial.uniforms[ 'tDiffuse' ].value = renderTarget.texture;\n\t\tmaterial.uniforms[ 'color' ].value = scope.color;\n\t\tmaterial.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\t\tif ( useDepthTexture ) {\n\n\t\t\tmaterial.uniforms[ 'tDepth' ].value = renderTarget.depthTexture;\n\n\t\t}\n\n\t\tthis.material = material;\n\n\t\tconst globalPlane = new Plane( new Vector3( 0, 1, 0 ), clipBias );\n\t\tconst globalPlanes = [ globalPlane ];\n\n\t\tthis.doRender = function ( renderer, scene, camera ) {\n\n\t\t\tmaterial.uniforms[ 'maxDistance' ].value = scope.maxDistance;\n\t\t\tmaterial.uniforms[ 'color' ].value = scope.color;\n\t\t\tmaterial.uniforms[ 'opacity' ].value = scope.opacity;\n\n\t\t\tvecTemp0.copy( camera.position ).normalize();\n\t\t\tvecTemp1.copy( vecTemp0 ).reflect( yAxis );\n\t\t\tmaterial.uniforms[ 'fresnelCoe' ].value = ( vecTemp0.dot( vecTemp1 ) + 1. ) / 2.; // TODO: Also need to use glsl viewPosition and viewNormal per pixel.\n\n\t\t\treflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\tnormal.set( 0, 0, 1 );\n\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\tview.subVectors( reflectorWorldPosition, cameraWorldPosition );\n\n\t\t\t// Avoid rendering when reflector is facing away\n\n\t\t\tif ( view.dot( normal ) > 0 ) return;\n\n\t\t\tview.reflect( normal ).negate();\n\t\t\tview.add( reflectorWorldPosition );\n\n\t\t\trotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t\tlookAtPosition.set( 0, 0, - 1 );\n\t\t\tlookAtPosition.applyMatrix4( rotationMatrix );\n\t\t\tlookAtPosition.add( cameraWorldPosition );\n\n\t\t\ttarget.subVectors( reflectorWorldPosition, lookAtPosition );\n\t\t\ttarget.reflect( normal ).negate();\n\t\t\ttarget.add( reflectorWorldPosition );\n\n\t\t\tvirtualCamera.position.copy( view );\n\t\t\tvirtualCamera.up.set( 0, 1, 0 );\n\t\t\tvirtualCamera.up.applyMatrix4( rotationMatrix );\n\t\t\tvirtualCamera.up.reflect( normal );\n\t\t\tvirtualCamera.lookAt( target );\n\n\t\t\tvirtualCamera.far = camera.far; // Used in WebGLBackground\n\n\t\t\tvirtualCamera.updateMatrixWorld();\n\t\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\tmaterial.uniforms[ 'virtualCameraNear' ].value = camera.near;\n\t\t\tmaterial.uniforms[ 'virtualCameraFar' ].value = camera.far;\n\t\t\tmaterial.uniforms[ 'virtualCameraMatrixWorld' ].value = virtualCamera.matrixWorld;\n\t\t\tmaterial.uniforms[ 'virtualCameraProjectionMatrix' ].value = camera.projectionMatrix;\n\t\t\tmaterial.uniforms[ 'virtualCameraProjectionMatrixInverse' ].value = camera.projectionMatrixInverse;\n\t\t\tmaterial.uniforms[ 'resolution' ].value = scope.resolution;\n\n\t\t\t// Update the texture matrix\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\t\t\ttextureMatrix.multiply( virtualCamera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( virtualCamera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t\t// scope.visible = false;\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\t\t\tconst currentClippingPlanes = renderer.clippingPlanes;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\t\t\trenderer.clippingPlanes = globalPlanes;\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\t\t\trenderer.clippingPlanes = currentClippingPlanes;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// Restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t\t// scope.visible = true;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t}\n\n}\n\nReflectorForSSRPass.ReflectorShader = {\n\n\tname: 'ReflectorShader',\n\n\tdefines: {\n\t\tDISTANCE_ATTENUATION: true,\n\t\tFRESNEL: true,\n\t},\n\n\tuniforms: {\n\n\t\tcolor: { value: null },\n\t\ttDiffuse: { value: null },\n\t\ttDepth: { value: null },\n\t\ttextureMatrix: { value: new Matrix4() },\n\t\tmaxDistance: { value: 180 },\n\t\topacity: { value: 0.5 },\n\t\tfresnelCoe: { value: null },\n\t\tvirtualCameraNear: { value: null },\n\t\tvirtualCameraFar: { value: null },\n\t\tvirtualCameraProjectionMatrix: { value: new Matrix4() },\n\t\tvirtualCameraMatrixWorld: { value: new Matrix4() },\n\t\tvirtualCameraProjectionMatrixInverse: { value: new Matrix4() },\n\t\tresolution: { value: new Vector2() },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tuniform mat4 textureMatrix;\n\t\tvarying vec4 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDepth;\n\t\tuniform float maxDistance;\n\t\tuniform float opacity;\n\t\tuniform float fresnelCoe;\n\t\tuniform float virtualCameraNear;\n\t\tuniform float virtualCameraFar;\n\t\tuniform mat4 virtualCameraProjectionMatrix;\n\t\tuniform mat4 virtualCameraProjectionMatrixInverse;\n\t\tuniform mat4 virtualCameraMatrixWorld;\n\t\tuniform vec2 resolution;\n\t\tvarying vec4 vUv;\n\t\t#include \n\t\tfloat blendOverlay( float base, float blend ) {\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\t\t}\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\t\t}\n\t\tfloat getDepth( const in vec2 uv ) {\n\t\t\treturn texture2D( tDepth, uv ).x;\n\t\t}\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\treturn perspectiveDepthToViewZ( depth, virtualCameraNear, virtualCameraFar );\n\t\t}\n\t\tvec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {\n\t\t\tvec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc\n\t\t\tclipPosition *= clipW; //clip\n\t\t\treturn ( virtualCameraProjectionMatrixInverse * clipPosition ).xyz;//view\n\t\t}\n\t\tvoid main() {\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\t#ifdef useDepthTexture\n\t\t\t\tvec2 uv=(gl_FragCoord.xy-.5)/resolution.xy;\n\t\t\t\tuv.x=1.-uv.x;\n\t\t\t\tfloat depth = texture2DProj( tDepth, vUv ).r;\n\t\t\t\tfloat viewZ = getViewZ( depth );\n\t\t\t\tfloat clipW = virtualCameraProjectionMatrix[2][3] * viewZ+virtualCameraProjectionMatrix[3][3];\n\t\t\t\tvec3 viewPosition=getViewPosition( uv, depth, clipW );\n\t\t\t\tvec3 worldPosition=(virtualCameraMatrixWorld*vec4(viewPosition,1)).xyz;\n\t\t\t\tif(worldPosition.y>maxDistance) discard;\n\t\t\t\tfloat op=opacity;\n\t\t\t\t#ifdef DISTANCE_ATTENUATION\n\t\t\t\t\tfloat ratio=1.-(worldPosition.y/maxDistance);\n\t\t\t\t\tfloat attenuation=ratio*ratio;\n\t\t\t\t\top=opacity*attenuation;\n\t\t\t\t#endif\n\t\t\t\t#ifdef FRESNEL\n\t\t\t\t\top*=fresnelCoe;\n\t\t\t\t#endif\n\t\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), op );\n\t\t\t#else\n\t\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\t\t\t#endif\n\t\t}\n\t`,\n};\n\nexport { ReflectorForSSRPass };\n", "import {\n\tColor,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tPlane,\n\tQuaternion,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget,\n\tHalfFloatType\n} from 'three';\n\nclass Refractor extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isRefractor = true;\n\n\t\tthis.type = 'Refractor';\n\t\tthis.camera = new PerspectiveCamera();\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0x7F7F7F );\n\t\tconst textureWidth = options.textureWidth || 512;\n\t\tconst textureHeight = options.textureHeight || 512;\n\t\tconst clipBias = options.clipBias || 0;\n\t\tconst shader = options.shader || Refractor.RefractorShader;\n\t\tconst multisample = ( options.multisample !== undefined ) ? options.multisample : 4;\n\n\t\t//\n\n\t\tconst virtualCamera = this.camera;\n\t\tvirtualCamera.matrixAutoUpdate = false;\n\t\tvirtualCamera.userData.refractor = true;\n\n\t\t//\n\n\t\tconst refractorPlane = new Plane();\n\t\tconst textureMatrix = new Matrix4();\n\n\t\t// render target\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );\n\n\t\t// material\n\n\t\tthis.material = new ShaderMaterial( {\n\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\ttransparent: true // ensures, refractors are drawn from farthest to closest\n\t\t} );\n\n\t\tthis.material.uniforms[ 'color' ].value = color;\n\t\tthis.material.uniforms[ 'tDiffuse' ].value = renderTarget.texture;\n\t\tthis.material.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\n\t\t// functions\n\n\t\tconst visible = ( function () {\n\n\t\t\tconst refractorWorldPosition = new Vector3();\n\t\t\tconst cameraWorldPosition = new Vector3();\n\t\t\tconst rotationMatrix = new Matrix4();\n\n\t\t\tconst view = new Vector3();\n\t\t\tconst normal = new Vector3();\n\n\t\t\treturn function visible( camera ) {\n\n\t\t\t\trefractorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\t\tview.subVectors( refractorWorldPosition, cameraWorldPosition );\n\n\t\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\t\tnormal.set( 0, 0, 1 );\n\t\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\t\treturn view.dot( normal ) < 0;\n\n\t\t\t};\n\n\t\t} )();\n\n\t\tconst updateRefractorPlane = ( function () {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst position = new Vector3();\n\t\t\tconst quaternion = new Quaternion();\n\t\t\tconst scale = new Vector3();\n\n\t\t\treturn function updateRefractorPlane() {\n\n\t\t\t\tscope.matrixWorld.decompose( position, quaternion, scale );\n\t\t\t\tnormal.set( 0, 0, 1 ).applyQuaternion( quaternion ).normalize();\n\n\t\t\t\t// flip the normal because we want to cull everything above the plane\n\n\t\t\t\tnormal.negate();\n\n\t\t\t\trefractorPlane.setFromNormalAndCoplanarPoint( normal, position );\n\n\t\t\t};\n\n\t\t} )();\n\n\t\tconst updateVirtualCamera = ( function () {\n\n\t\t\tconst clipPlane = new Plane();\n\t\t\tconst clipVector = new Vector4();\n\t\t\tconst q = new Vector4();\n\n\t\t\treturn function updateVirtualCamera( camera ) {\n\n\t\t\t\tvirtualCamera.matrixWorld.copy( camera.matrixWorld );\n\t\t\t\tvirtualCamera.matrixWorldInverse.copy( virtualCamera.matrixWorld ).invert();\n\t\t\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\t\t\t\tvirtualCamera.far = camera.far; // used in WebGLBackground\n\n\t\t\t\t// The following code creates an oblique view frustum for clipping.\n\t\t\t\t// see: Lengyel, Eric. “Oblique View Frustum Depth Projection and Clipping”.\n\t\t\t\t// Journal of Game Development, Vol. 1, No. 2 (2005), Charles River Media, pp. 5–16\n\n\t\t\t\tclipPlane.copy( refractorPlane );\n\t\t\t\tclipPlane.applyMatrix4( virtualCamera.matrixWorldInverse );\n\n\t\t\t\tclipVector.set( clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant );\n\n\t\t\t\t// calculate the clip-space corner point opposite the clipping plane and\n\t\t\t\t// transform it into camera space by multiplying it by the inverse of the projection matrix\n\n\t\t\t\tconst projectionMatrix = virtualCamera.projectionMatrix;\n\n\t\t\t\tq.x = ( Math.sign( clipVector.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t\t\tq.y = ( Math.sign( clipVector.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t\t\tq.z = - 1.0;\n\t\t\t\tq.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t\t\t// calculate the scaled plane vector\n\n\t\t\t\tclipVector.multiplyScalar( 2.0 / clipVector.dot( q ) );\n\n\t\t\t\t// replacing the third row of the projection matrix\n\n\t\t\t\tprojectionMatrix.elements[ 2 ] = clipVector.x;\n\t\t\t\tprojectionMatrix.elements[ 6 ] = clipVector.y;\n\t\t\t\tprojectionMatrix.elements[ 10 ] = clipVector.z + 1.0 - clipBias;\n\t\t\t\tprojectionMatrix.elements[ 14 ] = clipVector.w;\n\n\t\t\t};\n\n\t\t} )();\n\n\t\t// This will update the texture matrix that is used for projective texture mapping in the shader.\n\t\t// see: http://developer.download.nvidia.com/assets/gamedev/docs/projective_texture_mapping.pdf\n\n\t\tfunction updateTextureMatrix( camera ) {\n\n\t\t\t// this matrix does range mapping to [ 0, 1 ]\n\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\t// we use \"Object Linear Texgen\", so we need to multiply the texture matrix T\n\t\t\t// (matrix above) with the projection and view matrix of the virtual camera\n\t\t\t// and the model matrix of the refractor\n\n\t\t\ttextureMatrix.multiply( camera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( camera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t}\n\n\t\t//\n\n\t\tfunction render( renderer, scene, camera ) {\n\n\t\t\tscope.visible = false;\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\trenderer.xr.enabled = false; // avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // avoid re-computing shadows\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t\tscope.visible = true;\n\n\t\t}\n\n\t\t//\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t// ensure refractors are rendered only once per frame\n\n\t\t\tif ( camera.userData.refractor === true ) return;\n\n\t\t\t// avoid rendering when the refractor is viewed from behind\n\n\t\t\tif ( ! visible( camera ) === true ) return;\n\n\t\t\t// update\n\n\t\t\tupdateRefractorPlane();\n\n\t\t\tupdateTextureMatrix( camera );\n\n\t\t\tupdateVirtualCamera( camera );\n\n\t\t\trender( renderer, scene, camera );\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\trenderTarget.dispose();\n\t\t\tscope.material.dispose();\n\n\t\t};\n\n\t}\n\n}\n\nRefractor.RefractorShader = {\n\n\tname: 'RefractorShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tDiffuse': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec4 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec4 vUv;\n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { Refractor };\n", "import {\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tEqualStencilFunc,\n\tIncrementStencilOp\n} from 'three';\n\n/**\n * A shadow Mesh that follows a shadow-casting Mesh in the scene, but is confined to a single plane.\n */\n\nconst _shadowMatrix = new Matrix4();\n\nclass ShadowMesh extends Mesh {\n\n\tconstructor( mesh ) {\n\n\t\tconst shadowMaterial = new MeshBasicMaterial( {\n\n\t\t\tcolor: 0x000000,\n\t\t\ttransparent: true,\n\t\t\topacity: 0.6,\n\t\t\tdepthWrite: false,\n\t\t\tstencilWrite: true,\n\t\t\tstencilFunc: EqualStencilFunc,\n\t\t\tstencilRef: 0,\n\t\t\tstencilZPass: IncrementStencilOp\n\n\t\t} );\n\n\t\tsuper( mesh.geometry, shadowMaterial );\n\n\t\tthis.isShadowMesh = true;\n\n\t\tthis.meshMatrix = mesh.matrixWorld;\n\n\t\tthis.frustumCulled = false;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdate( plane, lightPosition4D ) {\n\n\t\t// based on https://www.opengl.org/archives/resources/features/StencilTalk/tsld021.htm\n\n\t\tconst dot = plane.normal.x * lightPosition4D.x +\n\t\t\t plane.normal.y * lightPosition4D.y +\n\t\t\t plane.normal.z * lightPosition4D.z +\n\t\t\t - plane.constant * lightPosition4D.w;\n\n\t\tconst sme = _shadowMatrix.elements;\n\n\t\tsme[ 0 ] = dot - lightPosition4D.x * plane.normal.x;\n\t\tsme[ 4 ] = - lightPosition4D.x * plane.normal.y;\n\t\tsme[ 8 ] = - lightPosition4D.x * plane.normal.z;\n\t\tsme[ 12 ] = - lightPosition4D.x * - plane.constant;\n\n\t\tsme[ 1 ] = - lightPosition4D.y * plane.normal.x;\n\t\tsme[ 5 ] = dot - lightPosition4D.y * plane.normal.y;\n\t\tsme[ 9 ] = - lightPosition4D.y * plane.normal.z;\n\t\tsme[ 13 ] = - lightPosition4D.y * - plane.constant;\n\n\t\tsme[ 2 ] = - lightPosition4D.z * plane.normal.x;\n\t\tsme[ 6 ] = - lightPosition4D.z * plane.normal.y;\n\t\tsme[ 10 ] = dot - lightPosition4D.z * plane.normal.z;\n\t\tsme[ 14 ] = - lightPosition4D.z * - plane.constant;\n\n\t\tsme[ 3 ] = - lightPosition4D.w * plane.normal.x;\n\t\tsme[ 7 ] = - lightPosition4D.w * plane.normal.y;\n\t\tsme[ 11 ] = - lightPosition4D.w * plane.normal.z;\n\t\tsme[ 15 ] = dot - lightPosition4D.w * - plane.constant;\n\n\t\tthis.matrix.multiplyMatrices( _shadowMatrix, this.meshMatrix );\n\n\t}\n\n}\n\nexport { ShadowMesh };\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tMesh,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3\n} from 'three';\n\n/**\n * Based on \"A Practical Analytic Model for Daylight\"\n * aka The Preetham Model, the de facto standard analytic skydome model\n * https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight\n *\n * First implemented by Simon Wallner\n * http://simonwallner.at/project/atmospheric-scattering/\n *\n * Improved by Martin Upitis\n * http://blenderartists.org/forum/showthread.php?245954-preethams-sky-impementation-HDR\n *\n * Three.js integration by zz85 http://twitter.com/blurspline\n*/\n\nclass Sky extends Mesh {\n\n\tconstructor() {\n\n\t\tconst shader = Sky.SkyShader;\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false\n\t\t} );\n\n\t\tsuper( new BoxGeometry( 1, 1, 1 ), material );\n\n\t\tthis.isSky = true;\n\n\t}\n\n}\n\nSky.SkyShader = {\n\n\tname: 'SkyShader',\n\n\tuniforms: {\n\t\t'turbidity': { value: 2 },\n\t\t'rayleigh': { value: 1 },\n\t\t'mieCoefficient': { value: 0.005 },\n\t\t'mieDirectionalG': { value: 0.8 },\n\t\t'sunPosition': { value: new Vector3() },\n\t\t'up': { value: new Vector3( 0, 1, 0 ) }\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tuniform vec3 sunPosition;\n\t\tuniform float rayleigh;\n\t\tuniform float turbidity;\n\t\tuniform float mieCoefficient;\n\t\tuniform vec3 up;\n\n\t\tvarying vec3 vWorldPosition;\n\t\tvarying vec3 vSunDirection;\n\t\tvarying float vSunfade;\n\t\tvarying vec3 vBetaR;\n\t\tvarying vec3 vBetaM;\n\t\tvarying float vSunE;\n\n\t\t// constants for atmospheric scattering\n\t\tconst float e = 2.71828182845904523536028747135266249775724709369995957;\n\t\tconst float pi = 3.141592653589793238462643383279502884197169;\n\n\t\t// wavelength of used primaries, according to preetham\n\t\tconst vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\n\t\t// this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\n\t\t// (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\n\t\tconst vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\n\n\t\t// mie stuff\n\t\t// K coefficient for the primaries\n\t\tconst float v = 4.0;\n\t\tconst vec3 K = vec3( 0.686, 0.678, 0.666 );\n\t\t// MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\n\t\tconst vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\n\n\t\t// earth shadow hack\n\t\t// cutoffAngle = pi / 1.95;\n\t\tconst float cutoffAngle = 1.6110731556870734;\n\t\tconst float steepness = 1.5;\n\t\tconst float EE = 1000.0;\n\n\t\tfloat sunIntensity( float zenithAngleCos ) {\n\t\t\tzenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\n\t\t\treturn EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\n\t\t}\n\n\t\tvec3 totalMie( float T ) {\n\t\t\tfloat c = ( 0.2 * T ) * 10E-18;\n\t\t\treturn 0.434 * c * MieConst;\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvWorldPosition = worldPosition.xyz;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tgl_Position.z = gl_Position.w; // set z to camera.far\n\n\t\t\tvSunDirection = normalize( sunPosition );\n\n\t\t\tvSunE = sunIntensity( dot( vSunDirection, up ) );\n\n\t\t\tvSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\n\n\t\t\tfloat rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\n\n\t\t\t// extinction (absorbtion + out scattering)\n\t\t\t// rayleigh coefficients\n\t\t\tvBetaR = totalRayleigh * rayleighCoefficient;\n\n\t\t\t// mie coefficients\n\t\t\tvBetaM = totalMie( turbidity ) * mieCoefficient;\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tvarying vec3 vWorldPosition;\n\t\tvarying vec3 vSunDirection;\n\t\tvarying float vSunfade;\n\t\tvarying vec3 vBetaR;\n\t\tvarying vec3 vBetaM;\n\t\tvarying float vSunE;\n\n\t\tuniform float mieDirectionalG;\n\t\tuniform vec3 up;\n\n\t\t// constants for atmospheric scattering\n\t\tconst float pi = 3.141592653589793238462643383279502884197169;\n\n\t\tconst float n = 1.0003; // refractive index of air\n\t\tconst float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\n\n\t\t// optical length at zenith for molecules\n\t\tconst float rayleighZenithLength = 8.4E3;\n\t\tconst float mieZenithLength = 1.25E3;\n\t\t// 66 arc seconds -> degrees, and the cosine of that\n\t\tconst float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\n\n\t\t// 3.0 / ( 16.0 * pi )\n\t\tconst float THREE_OVER_SIXTEENPI = 0.05968310365946075;\n\t\t// 1.0 / ( 4.0 * pi )\n\t\tconst float ONE_OVER_FOURPI = 0.07957747154594767;\n\n\t\tfloat rayleighPhase( float cosTheta ) {\n\t\t\treturn THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\n\t\t}\n\n\t\tfloat hgPhase( float cosTheta, float g ) {\n\t\t\tfloat g2 = pow( g, 2.0 );\n\t\t\tfloat inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\n\t\t\treturn ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec3 direction = normalize( vWorldPosition - cameraPosition );\n\n\t\t\t// optical length\n\t\t\t// cutoff angle at 90 to avoid singularity in next formula.\n\t\t\tfloat zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\n\t\t\tfloat inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\n\t\t\tfloat sR = rayleighZenithLength * inverse;\n\t\t\tfloat sM = mieZenithLength * inverse;\n\n\t\t\t// combined extinction factor\n\t\t\tvec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );\n\n\t\t\t// in scattering\n\t\t\tfloat cosTheta = dot( direction, vSunDirection );\n\n\t\t\tfloat rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\n\t\t\tvec3 betaRTheta = vBetaR * rPhase;\n\n\t\t\tfloat mPhase = hgPhase( cosTheta, mieDirectionalG );\n\t\t\tvec3 betaMTheta = vBetaM * mPhase;\n\n\t\t\tvec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\n\t\t\tLin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\n\n\t\t\t// nightsky\n\t\t\tfloat theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]\n\t\t\tfloat phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]\n\t\t\tvec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\n\t\t\tvec3 L0 = vec3( 0.1 ) * Fex;\n\n\t\t\t// composition + solar disc\n\t\t\tfloat sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\n\t\t\tL0 += ( vSunE * 19000.0 * Fex ) * sundisk;\n\n\t\t\tvec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\n\n\t\t\tvec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\n\n\t\t\tgl_FragColor = vec4( retColor, 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { Sky };\n", "import {\n\tColor,\n\tFrontSide,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tPlane,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget\n} from 'three';\n\n/**\n * Work based on :\n * https://github.com/Slayvin: Flat mirror for three.js\n * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror\n * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL\n */\n\nclass Water extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isWater = true;\n\n\t\tconst scope = this;\n\n\t\tconst textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512;\n\t\tconst textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512;\n\n\t\tconst clipBias = options.clipBias !== undefined ? options.clipBias : 0.0;\n\t\tconst alpha = options.alpha !== undefined ? options.alpha : 1.0;\n\t\tconst time = options.time !== undefined ? options.time : 0.0;\n\t\tconst normalSampler = options.waterNormals !== undefined ? options.waterNormals : null;\n\t\tconst sunDirection = options.sunDirection !== undefined ? options.sunDirection : new Vector3( 0.70707, 0.70707, 0.0 );\n\t\tconst sunColor = new Color( options.sunColor !== undefined ? options.sunColor : 0xffffff );\n\t\tconst waterColor = new Color( options.waterColor !== undefined ? options.waterColor : 0x7F7F7F );\n\t\tconst eye = options.eye !== undefined ? options.eye : new Vector3( 0, 0, 0 );\n\t\tconst distortionScale = options.distortionScale !== undefined ? options.distortionScale : 20.0;\n\t\tconst side = options.side !== undefined ? options.side : FrontSide;\n\t\tconst fog = options.fog !== undefined ? options.fog : false;\n\n\t\t//\n\n\t\tconst mirrorPlane = new Plane();\n\t\tconst normal = new Vector3();\n\t\tconst mirrorWorldPosition = new Vector3();\n\t\tconst cameraWorldPosition = new Vector3();\n\t\tconst rotationMatrix = new Matrix4();\n\t\tconst lookAtPosition = new Vector3( 0, 0, - 1 );\n\t\tconst clipPlane = new Vector4();\n\n\t\tconst view = new Vector3();\n\t\tconst target = new Vector3();\n\t\tconst q = new Vector4();\n\n\t\tconst textureMatrix = new Matrix4();\n\n\t\tconst mirrorCamera = new PerspectiveCamera();\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight );\n\n\t\tconst mirrorShader = {\n\n\t\t\tname: 'MirrorShader',\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib[ 'fog' ],\n\t\t\t\tUniformsLib[ 'lights' ],\n\t\t\t\t{\n\t\t\t\t\t'normalSampler': { value: null },\n\t\t\t\t\t'mirrorSampler': { value: null },\n\t\t\t\t\t'alpha': { value: 1.0 },\n\t\t\t\t\t'time': { value: 0.0 },\n\t\t\t\t\t'size': { value: 1.0 },\n\t\t\t\t\t'distortionScale': { value: 20.0 },\n\t\t\t\t\t'textureMatrix': { value: new Matrix4() },\n\t\t\t\t\t'sunColor': { value: new Color( 0x7F7F7F ) },\n\t\t\t\t\t'sunDirection': { value: new Vector3( 0.70707, 0.70707, 0 ) },\n\t\t\t\t\t'eye': { value: new Vector3() },\n\t\t\t\t\t'waterColor': { value: new Color( 0x555555 ) }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: /* glsl */`\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tuniform float time;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\t\t\t\t\tmirrorCoord = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tworldPosition = mirrorCoord.xyzw;\n\t\t\t\t\tmirrorCoord = textureMatrix * mirrorCoord;\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t}`,\n\n\t\t\tfragmentShader: /* glsl */`\n\t\t\t\tuniform sampler2D mirrorSampler;\n\t\t\t\tuniform float alpha;\n\t\t\t\tuniform float time;\n\t\t\t\tuniform float size;\n\t\t\t\tuniform float distortionScale;\n\t\t\t\tuniform sampler2D normalSampler;\n\t\t\t\tuniform vec3 sunColor;\n\t\t\t\tuniform vec3 sunDirection;\n\t\t\t\tuniform vec3 eye;\n\t\t\t\tuniform vec3 waterColor;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\tvec4 getNoise( vec2 uv ) {\n\t\t\t\t\tvec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);\n\t\t\t\t\tvec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );\n\t\t\t\t\tvec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );\n\t\t\t\t\tvec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );\n\t\t\t\t\tvec4 noise = texture2D( normalSampler, uv0 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv1 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv2 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv3 );\n\t\t\t\t\treturn noise * 0.5 - 1.0;\n\t\t\t\t}\n\n\t\t\t\tvoid sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {\n\t\t\t\t\tvec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );\n\t\t\t\t\tfloat direction = max( 0.0, dot( eyeDirection, reflection ) );\n\t\t\t\t\tspecularColor += pow( direction, shiny ) * sunColor * spec;\n\t\t\t\t\tdiffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;\n\t\t\t\t}\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include \n\t\t\t\t\tvec4 noise = getNoise( worldPosition.xz * size );\n\t\t\t\t\tvec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );\n\n\t\t\t\t\tvec3 diffuseLight = vec3(0.0);\n\t\t\t\t\tvec3 specularLight = vec3(0.0);\n\n\t\t\t\t\tvec3 worldToEye = eye-worldPosition.xyz;\n\t\t\t\t\tvec3 eyeDirection = normalize( worldToEye );\n\t\t\t\t\tsunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );\n\n\t\t\t\t\tfloat distance = length(worldToEye);\n\n\t\t\t\t\tvec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;\n\t\t\t\t\tvec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );\n\n\t\t\t\t\tfloat theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );\n\t\t\t\t\tfloat rf0 = 0.3;\n\t\t\t\t\tfloat reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );\n\t\t\t\t\tvec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;\n\t\t\t\t\tvec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);\n\t\t\t\t\tvec3 outgoingLight = albedo;\n\t\t\t\t\tgl_FragColor = vec4( outgoingLight, alpha );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \t\n\t\t\t\t}`\n\n\t\t};\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: mirrorShader.name,\n\t\t\tuniforms: UniformsUtils.clone( mirrorShader.uniforms ),\n\t\t\tvertexShader: mirrorShader.vertexShader,\n\t\t\tfragmentShader: mirrorShader.fragmentShader,\n\t\t\tlights: true,\n\t\t\tside: side,\n\t\t\tfog: fog\n\t\t} );\n\n\t\tmaterial.uniforms[ 'mirrorSampler' ].value = renderTarget.texture;\n\t\tmaterial.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\t\tmaterial.uniforms[ 'alpha' ].value = alpha;\n\t\tmaterial.uniforms[ 'time' ].value = time;\n\t\tmaterial.uniforms[ 'normalSampler' ].value = normalSampler;\n\t\tmaterial.uniforms[ 'sunColor' ].value = sunColor;\n\t\tmaterial.uniforms[ 'waterColor' ].value = waterColor;\n\t\tmaterial.uniforms[ 'sunDirection' ].value = sunDirection;\n\t\tmaterial.uniforms[ 'distortionScale' ].value = distortionScale;\n\n\t\tmaterial.uniforms[ 'eye' ].value = eye;\n\n\t\tscope.material = material;\n\n\t\tscope.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\tmirrorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\tnormal.set( 0, 0, 1 );\n\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\tview.subVectors( mirrorWorldPosition, cameraWorldPosition );\n\n\t\t\t// Avoid rendering when mirror is facing away\n\n\t\t\tif ( view.dot( normal ) > 0 ) return;\n\n\t\t\tview.reflect( normal ).negate();\n\t\t\tview.add( mirrorWorldPosition );\n\n\t\t\trotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t\tlookAtPosition.set( 0, 0, - 1 );\n\t\t\tlookAtPosition.applyMatrix4( rotationMatrix );\n\t\t\tlookAtPosition.add( cameraWorldPosition );\n\n\t\t\ttarget.subVectors( mirrorWorldPosition, lookAtPosition );\n\t\t\ttarget.reflect( normal ).negate();\n\t\t\ttarget.add( mirrorWorldPosition );\n\n\t\t\tmirrorCamera.position.copy( view );\n\t\t\tmirrorCamera.up.set( 0, 1, 0 );\n\t\t\tmirrorCamera.up.applyMatrix4( rotationMatrix );\n\t\t\tmirrorCamera.up.reflect( normal );\n\t\t\tmirrorCamera.lookAt( target );\n\n\t\t\tmirrorCamera.far = camera.far; // Used in WebGLBackground\n\n\t\t\tmirrorCamera.updateMatrixWorld();\n\t\t\tmirrorCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t// Update the texture matrix\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\t\t\ttextureMatrix.multiply( mirrorCamera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( mirrorCamera.matrixWorldInverse );\n\n\t\t\t// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n\t\t\t// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n\t\t\tmirrorPlane.setFromNormalAndCoplanarPoint( normal, mirrorWorldPosition );\n\t\t\tmirrorPlane.applyMatrix4( mirrorCamera.matrixWorldInverse );\n\n\t\t\tclipPlane.set( mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant );\n\n\t\t\tconst projectionMatrix = mirrorCamera.projectionMatrix;\n\n\t\t\tq.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t\tq.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t\tq.z = - 1.0;\n\t\t\tq.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t\t// Calculate the scaled plane vector\n\t\t\tclipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );\n\n\t\t\t// Replacing the third row of the projection matrix\n\t\t\tprojectionMatrix.elements[ 2 ] = clipPlane.x;\n\t\t\tprojectionMatrix.elements[ 6 ] = clipPlane.y;\n\t\t\tprojectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;\n\t\t\tprojectionMatrix.elements[ 14 ] = clipPlane.w;\n\n\t\t\teye.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\t// Render\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\tscope.visible = false;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification and recursion\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, mirrorCamera );\n\n\t\t\tscope.visible = true;\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// Restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}\n\nexport { Water };\n", "import {\n\tClock,\n\tColor,\n\tMatrix4,\n\tMesh,\n\tRepeatWrapping,\n\tShaderMaterial,\n\tTextureLoader,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2,\n\tVector4\n} from 'three';\nimport { Reflector } from '../objects/Reflector.js';\nimport { Refractor } from '../objects/Refractor.js';\n\n/**\n * References:\n *\thttps://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf\n *\thttp://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html\n *\n */\n\nclass Water extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isWater = true;\n\n\t\tthis.type = 'Water';\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0xFFFFFF );\n\t\tconst textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512;\n\t\tconst textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512;\n\t\tconst clipBias = options.clipBias !== undefined ? options.clipBias : 0;\n\t\tconst flowDirection = options.flowDirection !== undefined ? options.flowDirection : new Vector2( 1, 0 );\n\t\tconst flowSpeed = options.flowSpeed !== undefined ? options.flowSpeed : 0.03;\n\t\tconst reflectivity = options.reflectivity !== undefined ? options.reflectivity : 0.02;\n\t\tconst scale = options.scale !== undefined ? options.scale : 1;\n\t\tconst shader = options.shader !== undefined ? options.shader : Water.WaterShader;\n\n\t\tconst textureLoader = new TextureLoader();\n\n\t\tconst flowMap = options.flowMap || undefined;\n\t\tconst normalMap0 = options.normalMap0 || textureLoader.load( 'textures/water/Water_1_M_Normal.jpg' );\n\t\tconst normalMap1 = options.normalMap1 || textureLoader.load( 'textures/water/Water_2_M_Normal.jpg' );\n\n\t\tconst cycle = 0.15; // a cycle of a flow map phase\n\t\tconst halfCycle = cycle * 0.5;\n\t\tconst textureMatrix = new Matrix4();\n\t\tconst clock = new Clock();\n\n\t\t// internal components\n\n\t\tif ( Reflector === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Water: Required component Reflector not found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( Refractor === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Water: Required component Refractor not found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst reflector = new Reflector( geometry, {\n\t\t\ttextureWidth: textureWidth,\n\t\t\ttextureHeight: textureHeight,\n\t\t\tclipBias: clipBias\n\t\t} );\n\n\t\tconst refractor = new Refractor( geometry, {\n\t\t\ttextureWidth: textureWidth,\n\t\t\ttextureHeight: textureHeight,\n\t\t\tclipBias: clipBias\n\t\t} );\n\n\t\treflector.matrixAutoUpdate = false;\n\t\trefractor.matrixAutoUpdate = false;\n\n\t\t// material\n\n\t\tthis.material = new ShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib[ 'fog' ],\n\t\t\t\tshader.uniforms\n\t\t\t] ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tfog: true\n\t\t} );\n\n\t\tif ( flowMap !== undefined ) {\n\n\t\t\tthis.material.defines.USE_FLOWMAP = '';\n\t\t\tthis.material.uniforms[ 'tFlowMap' ] = {\n\t\t\t\ttype: 't',\n\t\t\t\tvalue: flowMap\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tthis.material.uniforms[ 'flowDirection' ] = {\n\t\t\t\ttype: 'v2',\n\t\t\t\tvalue: flowDirection\n\t\t\t};\n\n\t\t}\n\n\t\t// maps\n\n\t\tnormalMap0.wrapS = normalMap0.wrapT = RepeatWrapping;\n\t\tnormalMap1.wrapS = normalMap1.wrapT = RepeatWrapping;\n\n\t\tthis.material.uniforms[ 'tReflectionMap' ].value = reflector.getRenderTarget().texture;\n\t\tthis.material.uniforms[ 'tRefractionMap' ].value = refractor.getRenderTarget().texture;\n\t\tthis.material.uniforms[ 'tNormalMap0' ].value = normalMap0;\n\t\tthis.material.uniforms[ 'tNormalMap1' ].value = normalMap1;\n\n\t\t// water\n\n\t\tthis.material.uniforms[ 'color' ].value = color;\n\t\tthis.material.uniforms[ 'reflectivity' ].value = reflectivity;\n\t\tthis.material.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\n\t\t// inital values\n\n\t\tthis.material.uniforms[ 'config' ].value.x = 0; // flowMapOffset0\n\t\tthis.material.uniforms[ 'config' ].value.y = halfCycle; // flowMapOffset1\n\t\tthis.material.uniforms[ 'config' ].value.z = halfCycle; // halfCycle\n\t\tthis.material.uniforms[ 'config' ].value.w = scale; // scale\n\n\t\t// functions\n\n\t\tfunction updateTextureMatrix( camera ) {\n\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\ttextureMatrix.multiply( camera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( camera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t}\n\n\t\tfunction updateFlow() {\n\n\t\t\tconst delta = clock.getDelta();\n\t\t\tconst config = scope.material.uniforms[ 'config' ];\n\n\t\t\tconfig.value.x += flowSpeed * delta; // flowMapOffset0\n\t\t\tconfig.value.y = config.value.x + halfCycle; // flowMapOffset1\n\n\t\t\t// Important: The distance between offsets should be always the value of \"halfCycle\".\n\t\t\t// Moreover, both offsets should be in the range of [ 0, cycle ].\n\t\t\t// This approach ensures a smooth water flow and avoids \"reset\" effects.\n\n\t\t\tif ( config.value.x >= cycle ) {\n\n\t\t\t\tconfig.value.x = 0;\n\t\t\t\tconfig.value.y = halfCycle;\n\n\t\t\t} else if ( config.value.y >= cycle ) {\n\n\t\t\t\tconfig.value.y = config.value.y - cycle;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\tupdateTextureMatrix( camera );\n\t\t\tupdateFlow();\n\n\t\t\tscope.visible = false;\n\n\t\t\treflector.matrixWorld.copy( scope.matrixWorld );\n\t\t\trefractor.matrixWorld.copy( scope.matrixWorld );\n\n\t\t\treflector.onBeforeRender( renderer, scene, camera );\n\t\t\trefractor.onBeforeRender( renderer, scene, camera );\n\n\t\t\tscope.visible = true;\n\n\t\t};\n\n\t}\n\n}\n\nWater.WaterShader = {\n\n\tname: 'WaterShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\ttype: 'c',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'reflectivity': {\n\t\t\ttype: 'f',\n\t\t\tvalue: 0\n\t\t},\n\n\t\t'tReflectionMap': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tRefractionMap': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tNormalMap0': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tNormalMap1': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\ttype: 'm4',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'config': {\n\t\t\ttype: 'v4',\n\t\t\tvalue: new Vector4()\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec4 vCoord;\n\t\tvarying vec2 vUv;\n\t\tvarying vec3 vToEye;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tvCoord = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvToEye = cameraPosition - worldPosition.xyz;\n\n\t\t\tvec4 mvPosition = viewMatrix * worldPosition; // used in fog_vertex\n\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tuniform sampler2D tReflectionMap;\n\t\tuniform sampler2D tRefractionMap;\n\t\tuniform sampler2D tNormalMap0;\n\t\tuniform sampler2D tNormalMap1;\n\n\t\t#ifdef USE_FLOWMAP\n\t\t\tuniform sampler2D tFlowMap;\n\t\t#else\n\t\t\tuniform vec2 flowDirection;\n\t\t#endif\n\n\t\tuniform vec3 color;\n\t\tuniform float reflectivity;\n\t\tuniform vec4 config;\n\n\t\tvarying vec4 vCoord;\n\t\tvarying vec2 vUv;\n\t\tvarying vec3 vToEye;\n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\tfloat flowMapOffset0 = config.x;\n\t\t\tfloat flowMapOffset1 = config.y;\n\t\t\tfloat halfCycle = config.z;\n\t\t\tfloat scale = config.w;\n\n\t\t\tvec3 toEye = normalize( vToEye );\n\n\t\t\t// determine flow direction\n\t\t\tvec2 flow;\n\t\t\t#ifdef USE_FLOWMAP\n\t\t\t\tflow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;\n\t\t\t#else\n\t\t\t\tflow = flowDirection;\n\t\t\t#endif\n\t\t\tflow.x *= - 1.0;\n\n\t\t\t// sample normal maps (distort uvs with flowdata)\n\t\t\tvec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );\n\t\t\tvec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );\n\n\t\t\t// linear interpolate to get the final normal color\n\t\t\tfloat flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;\n\t\t\tvec4 normalColor = mix( normalColor0, normalColor1, flowLerp );\n\n\t\t\t// calculate normal vector\n\t\t\tvec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );\n\n\t\t\t// calculate the fresnel term to blend reflection and refraction maps\n\t\t\tfloat theta = max( dot( toEye, normal ), 0.0 );\n\t\t\tfloat reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );\n\n\t\t\t// calculate final uv coords\n\t\t\tvec3 coord = vCoord.xyz / vCoord.w;\n\t\t\tvec2 uv = coord.xy + coord.z * normal.xz * 0.05;\n\n\t\t\tvec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) );\n\t\t\tvec4 refractColor = texture2D( tRefractionMap, uv );\n\n\t\t\t// multiply water color with the mix of both textures\n\t\t\tgl_FragColor = vec4( color, 1.0 ) * mix( refractColor, reflectColor, reflectance );\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { Water };\n", "async function AmmoPhysics() {\n\n\tif ( 'Ammo' in window === false ) {\n\n\t\tconsole.error( 'AmmoPhysics: Couldn\\'t find Ammo.js' );\n\t\treturn;\n\n\t}\n\n\tconst AmmoLib = await Ammo(); // eslint-disable-line no-undef\n\n\tconst frameRate = 60;\n\n\tconst collisionConfiguration = new AmmoLib.btDefaultCollisionConfiguration();\n\tconst dispatcher = new AmmoLib.btCollisionDispatcher( collisionConfiguration );\n\tconst broadphase = new AmmoLib.btDbvtBroadphase();\n\tconst solver = new AmmoLib.btSequentialImpulseConstraintSolver();\n\tconst world = new AmmoLib.btDiscreteDynamicsWorld( dispatcher, broadphase, solver, collisionConfiguration );\n\tworld.setGravity( new AmmoLib.btVector3( 0, - 9.8, 0 ) );\n\n\tconst worldTransform = new AmmoLib.btTransform();\n\n\t//\n\n\tfunction getShape( geometry ) {\n\n\t\tconst parameters = geometry.parameters;\n\n\t\t// TODO change type to is*\n\n\t\tif ( geometry.type === 'BoxGeometry' ) {\n\n\t\t\tconst sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;\n\t\t\tconst sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;\n\t\t\tconst sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;\n\n\t\t\tconst shape = new AmmoLib.btBoxShape( new AmmoLib.btVector3( sx, sy, sz ) );\n\t\t\tshape.setMargin( 0.05 );\n\n\t\t\treturn shape;\n\n\t\t} else if ( geometry.type === 'SphereGeometry' || geometry.type === 'IcosahedronGeometry' ) {\n\n\t\t\tconst radius = parameters.radius !== undefined ? parameters.radius : 1;\n\n\t\t\tconst shape = new AmmoLib.btSphereShape( radius );\n\t\t\tshape.setMargin( 0.05 );\n\n\t\t\treturn shape;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tconst meshes = [];\n\tconst meshMap = new WeakMap();\n\n\tfunction addScene( scene ) {\n\n\t\tscene.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tconst physics = child.userData.physics;\n\n\t\t\t\tif ( physics ) {\n\n\t\t\t\t\taddMesh( child, physics.mass );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tfunction addMesh( mesh, mass = 0 ) {\n\n\t\tconst shape = getShape( mesh.geometry );\n\n\t\tif ( shape !== null ) {\n\n\t\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\t\thandleInstancedMesh( mesh, mass, shape );\n\n\t\t\t} else if ( mesh.isMesh ) {\n\n\t\t\t\thandleMesh( mesh, mass, shape );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction handleMesh( mesh, mass, shape ) {\n\n\t\tconst position = mesh.position;\n\t\tconst quaternion = mesh.quaternion;\n\n\t\tconst transform = new AmmoLib.btTransform();\n\t\ttransform.setIdentity();\n\t\ttransform.setOrigin( new AmmoLib.btVector3( position.x, position.y, position.z ) );\n\t\ttransform.setRotation( new AmmoLib.btQuaternion( quaternion.x, quaternion.y, quaternion.z, quaternion.w ) );\n\n\t\tconst motionState = new AmmoLib.btDefaultMotionState( transform );\n\n\t\tconst localInertia = new AmmoLib.btVector3( 0, 0, 0 );\n\t\tshape.calculateLocalInertia( mass, localInertia );\n\n\t\tconst rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );\n\n\t\tconst body = new AmmoLib.btRigidBody( rbInfo );\n\t\t// body.setFriction( 4 );\n\t\tworld.addRigidBody( body );\n\n\t\tif ( mass > 0 ) {\n\n\t\t\tmeshes.push( mesh );\n\t\t\tmeshMap.set( mesh, body );\n\n\t\t}\n\n\n\t}\n\n\tfunction handleInstancedMesh( mesh, mass, shape ) {\n\n\t\tconst array = mesh.instanceMatrix.array;\n\n\t\tconst bodies = [];\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tconst index = i * 16;\n\n\t\t\tconst transform = new AmmoLib.btTransform();\n\t\t\ttransform.setFromOpenGLMatrix( array.slice( index, index + 16 ) );\n\n\t\t\tconst motionState = new AmmoLib.btDefaultMotionState( transform );\n\n\t\t\tconst localInertia = new AmmoLib.btVector3( 0, 0, 0 );\n\t\t\tshape.calculateLocalInertia( mass, localInertia );\n\n\t\t\tconst rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );\n\n\t\t\tconst body = new AmmoLib.btRigidBody( rbInfo );\n\t\t\tworld.addRigidBody( body );\n\n\t\t\tbodies.push( body );\n\n\t\t}\n\n\t\tif ( mass > 0 ) {\n\n\t\t\tmeshes.push( mesh );\n\n\t\t\tmeshMap.set( mesh, bodies );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction setMeshPosition( mesh, position, index = 0 ) {\n\n\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\tconst bodies = meshMap.get( mesh );\n\t\t\tconst body = bodies[ index ];\n\n\t\t\tbody.setAngularVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\t\t\tbody.setLinearVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\n\t\t\tworldTransform.setIdentity();\n\t\t\tworldTransform.setOrigin( new AmmoLib.btVector3( position.x, position.y, position.z ) );\n\t\t\tbody.setWorldTransform( worldTransform );\n\n\t\t} else if ( mesh.isMesh ) {\n\n\t\t\tconst body = meshMap.get( mesh );\n\n\t\t\tbody.setAngularVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\t\t\tbody.setLinearVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\n\t\t\tworldTransform.setIdentity();\n\t\t\tworldTransform.setOrigin( new AmmoLib.btVector3( position.x, position.y, position.z ) );\n\t\t\tbody.setWorldTransform( worldTransform );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tlet lastTime = 0;\n\n\tfunction step() {\n\n\t\tconst time = performance.now();\n\n\t\tif ( lastTime > 0 ) {\n\n\t\t\tconst delta = ( time - lastTime ) / 1000;\n\n\t\t\tworld.stepSimulation( delta, 10 );\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\t\tconst mesh = meshes[ i ];\n\n\t\t\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\t\t\tconst array = mesh.instanceMatrix.array;\n\t\t\t\t\tconst bodies = meshMap.get( mesh );\n\n\t\t\t\t\tfor ( let j = 0; j < bodies.length; j ++ ) {\n\n\t\t\t\t\t\tconst body = bodies[ j ];\n\n\t\t\t\t\t\tconst motionState = body.getMotionState();\n\t\t\t\t\t\tmotionState.getWorldTransform( worldTransform );\n\n\t\t\t\t\t\tconst position = worldTransform.getOrigin();\n\t\t\t\t\t\tconst quaternion = worldTransform.getRotation();\n\n\t\t\t\t\t\tcompose( position, quaternion, array, j * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.instanceMatrix.needsUpdate = true;\n\t\t\t\t\tmesh.computeBoundingSphere();\n\n\t\t\t\t} else if ( mesh.isMesh ) {\n\n\t\t\t\t\tconst body = meshMap.get( mesh );\n\n\t\t\t\t\tconst motionState = body.getMotionState();\n\t\t\t\t\tmotionState.getWorldTransform( worldTransform );\n\n\t\t\t\t\tconst position = worldTransform.getOrigin();\n\t\t\t\t\tconst quaternion = worldTransform.getRotation();\n\t\t\t\t\tmesh.position.set( position.x(), position.y(), position.z() );\n\t\t\t\t\tmesh.quaternion.set( quaternion.x(), quaternion.y(), quaternion.z(), quaternion.w() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlastTime = time;\n\n\t}\n\n\t// animate\n\n\tsetInterval( step, 1000 / frameRate );\n\n\treturn {\n\t\taddScene: addScene,\n\t\taddMesh: addMesh,\n\t\tsetMeshPosition: setMeshPosition\n\t\t// addCompoundMesh\n\t};\n\n}\n\nfunction compose( position, quaternion, array, index ) {\n\n\tconst x = quaternion.x(), y = quaternion.y(), z = quaternion.z(), w = quaternion.w();\n\tconst x2 = x + x, y2 = y + y, z2 = z + z;\n\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\tarray[ index + 0 ] = ( 1 - ( yy + zz ) );\n\tarray[ index + 1 ] = ( xy + wz );\n\tarray[ index + 2 ] = ( xz - wy );\n\tarray[ index + 3 ] = 0;\n\n\tarray[ index + 4 ] = ( xy - wz );\n\tarray[ index + 5 ] = ( 1 - ( xx + zz ) );\n\tarray[ index + 6 ] = ( yz + wx );\n\tarray[ index + 7 ] = 0;\n\n\tarray[ index + 8 ] = ( xz + wy );\n\tarray[ index + 9 ] = ( yz - wx );\n\tarray[ index + 10 ] = ( 1 - ( xx + yy ) );\n\tarray[ index + 11 ] = 0;\n\n\tarray[ index + 12 ] = position.x();\n\tarray[ index + 13 ] = position.y();\n\tarray[ index + 14 ] = position.z();\n\tarray[ index + 15 ] = 1;\n\n}\n\nexport { AmmoPhysics };\n", "import { Clock, Vector3, Quaternion, Matrix4 } from 'three';\n\nconst RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.12.0';\n\nconst frameRate = 60;\n\nconst _scale = new Vector3( 1, 1, 1 );\nconst ZERO = new Vector3();\n\nlet RAPIER = null;\n\nfunction getShape( geometry ) {\n\n\tconst parameters = geometry.parameters;\n\n\t// TODO change type to is*\n\n\tif ( geometry.type === 'BoxGeometry' ) {\n\n\t\tconst sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;\n\t\tconst sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;\n\t\tconst sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;\n\n\t\treturn RAPIER.ColliderDesc.cuboid( sx, sy, sz );\n\n\t} else if ( geometry.type === 'SphereGeometry' || geometry.type === 'IcosahedronGeometry' ) {\n\n\t\tconst radius = parameters.radius !== undefined ? parameters.radius : 1;\n\t\treturn RAPIER.ColliderDesc.ball( radius );\n\n\t}\n\n\treturn null;\n\n}\n\nasync function RapierPhysics() {\n\n\tif ( RAPIER === null ) {\n\n\t\tRAPIER = await import( RAPIER_PATH );\n\t\tawait RAPIER.init();\n\n\t}\n\n\t// Docs: https://rapier.rs/docs/api/javascript/JavaScript3D/\n\n\tconst gravity = new Vector3( 0.0, - 9.81, 0.0 );\n\tconst world = new RAPIER.World( gravity );\n\n\tconst meshes = [];\n\tconst meshMap = new WeakMap();\n\n\tconst _vector = new Vector3();\n\tconst _quaternion = new Quaternion();\n\tconst _matrix = new Matrix4();\n\n\tfunction addScene( scene ) {\n\n\t\tscene.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tconst physics = child.userData.physics;\n\n\t\t\t\tif ( physics ) {\n\n\t\t\t\t\taddMesh( child, physics.mass, physics.restitution );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tfunction addMesh( mesh, mass = 0, restitution = 0 ) {\n\n\t\tconst shape = getShape( mesh.geometry );\n\n\t\tif ( shape === null ) return;\n\n\t\tshape.setMass( mass );\n\t\tshape.setRestitution( restitution );\n\n\t\tconst body = mesh.isInstancedMesh\n\t\t\t\t\t\t\t? createInstancedBody( mesh, mass, shape )\n\t\t\t\t\t\t\t: createBody( mesh.position, mesh.quaternion, mass, shape );\n\n\t\tif ( mass > 0 ) {\n\n\t\t\tmeshes.push( mesh );\n\t\t\tmeshMap.set( mesh, body );\n\n\t\t}\n\n\t}\n\n\tfunction createInstancedBody( mesh, mass, shape ) {\n\n\t\tconst array = mesh.instanceMatrix.array;\n\n\t\tconst bodies = [];\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tconst position = _vector.fromArray( array, i * 16 + 12 );\n\t\t\tbodies.push( createBody( position, null, mass, shape ) );\n\n\t\t}\n\n\t\treturn bodies;\n\n\t}\n\n\tfunction createBody( position, quaternion, mass, shape ) {\n\n\t\tconst desc = mass > 0 ? RAPIER.RigidBodyDesc.dynamic() : RAPIER.RigidBodyDesc.fixed();\n\t\tdesc.setTranslation( ...position );\n\t\tif ( quaternion !== null ) desc.setRotation( quaternion );\n\n\t\tconst body = world.createRigidBody( desc );\n\t\tworld.createCollider( shape, body );\n\n\t\treturn body;\n\n\t}\n\n\tfunction setMeshPosition( mesh, position, index = 0 ) {\n\n\t\tlet body = meshMap.get( mesh );\n\n\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\tbody = body[ index ];\n\n\t\t}\n\n\t\tbody.setAngvel( ZERO );\n\t\tbody.setLinvel( ZERO );\n\t\tbody.setTranslation( position );\n\n\t}\n\n\tfunction setMeshVelocity( mesh, velocity, index = 0 ) {\n\n\t\tlet body = meshMap.get( mesh );\n\n\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\tbody = body[ index ];\n\n\t\t}\n\n\t\tbody.setLinvel( velocity );\n\n\t}\n\n\t//\n\n\tconst clock = new Clock();\n\n\tfunction step() {\n\n\t\tworld.timestep = clock.getDelta();\n\t\tworld.step();\n\n\t\t//\n\n\t\tfor ( let i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\tconst mesh = meshes[ i ];\n\n\t\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\t\tconst array = mesh.instanceMatrix.array;\n\t\t\t\tconst bodies = meshMap.get( mesh );\n\n\t\t\t\tfor ( let j = 0; j < bodies.length; j ++ ) {\n\n\t\t\t\t\tconst body = bodies[ j ];\n\n\t\t\t\t\tconst position = body.translation();\n\t\t\t\t\t_quaternion.copy( body.rotation() );\n\n\t\t\t\t\t_matrix.compose( position, _quaternion, _scale ).toArray( array, j * 16 );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.instanceMatrix.needsUpdate = true;\n\t\t\t\tmesh.computeBoundingSphere();\n\n\t\t\t} else {\n\n\t\t\t\tconst body = meshMap.get( mesh );\n\n\t\t\t\tmesh.position.copy( body.translation() );\n\t\t\t\tmesh.quaternion.copy( body.rotation() );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// animate\n\n\tsetInterval( step, 1000 / frameRate );\n\n\treturn {\n\t\taddScene: addScene,\n\t\taddMesh: addMesh,\n\t\tsetMeshPosition: setMeshPosition,\n\t\tsetMeshVelocity: setMeshVelocity\n\t};\n\n}\n\nexport { RapierPhysics };\n", "/**\n * Afterimage shader\n * I created this effect inspired by a demo on codepen:\n * https://codepen.io/brunoimbrizi/pen/MoRJaN?page=1&\n */\n\nconst AfterimageShader = {\n\n\tname: 'AfterimageShader',\n\n\tuniforms: {\n\n\t\t'damp': { value: 0.96 },\n\t\t'tOld': { value: null },\n\t\t'tNew': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float damp;\n\n\t\tuniform sampler2D tOld;\n\t\tuniform sampler2D tNew;\n\n\t\tvarying vec2 vUv;\n\n\t\tvec4 when_gt( vec4 x, float y ) {\n\n\t\t\treturn max( sign( x - y ), 0.0 );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 texelOld = texture2D( tOld, vUv );\n\t\t\tvec4 texelNew = texture2D( tNew, vUv );\n\n\t\t\ttexelOld *= damp * when_gt( texelOld, 0.1 );\n\n\t\t\tgl_FragColor = max(texelNew, texelOld);\n\n\t\t}`\n\n};\n\nexport { AfterimageShader };\n", "import {\n\tHalfFloatType,\n\tMeshBasicMaterial,\n\tNearestFilter,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { AfterimageShader } from '../shaders/AfterimageShader.js';\n\nclass AfterimagePass extends Pass {\n\n\tconstructor( damp = 0.96 ) {\n\n\t\tsuper();\n\n\t\tthis.shader = AfterimageShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( this.shader.uniforms );\n\n\t\tthis.uniforms[ 'damp' ].value = damp;\n\n\t\tthis.textureComp = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\n\t\tthis.textureOld = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\n\t\tthis.compFsMaterial = new ShaderMaterial( {\n\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: this.shader.vertexShader,\n\t\t\tfragmentShader: this.shader.fragmentShader\n\n\t\t} );\n\n\t\tthis.compFsQuad = new FullScreenQuad( this.compFsMaterial );\n\n\t\tthis.copyFsMaterial = new MeshBasicMaterial();\n\t\tthis.copyFsQuad = new FullScreenQuad( this.copyFsMaterial );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\tthis.uniforms[ 'tOld' ].value = this.textureOld.texture;\n\t\tthis.uniforms[ 'tNew' ].value = readBuffer.texture;\n\n\t\trenderer.setRenderTarget( this.textureComp );\n\t\tthis.compFsQuad.render( renderer );\n\n\t\tthis.copyFsQuad.material.map = this.textureComp.texture;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.copyFsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\n\t\t\tif ( this.clear ) renderer.clear();\n\n\t\t\tthis.copyFsQuad.render( renderer );\n\n\t\t}\n\n\t\t// Swap buffers.\n\t\tconst temp = this.textureOld;\n\t\tthis.textureOld = this.textureComp;\n\t\tthis.textureComp = temp;\n\t\t// Now textureOld contains the latest image, ready for the next frame.\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.textureComp.setSize( width, height );\n\t\tthis.textureOld.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.textureComp.dispose();\n\t\tthis.textureOld.dispose();\n\n\t\tthis.compFsMaterial.dispose();\n\t\tthis.copyFsMaterial.dispose();\n\n\t\tthis.compFsQuad.dispose();\n\t\tthis.copyFsQuad.dispose();\n\n\t}\n\n}\n\nexport { AfterimagePass };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Convolution shader\n * ported from o3d sample to WebGL / GLSL\n */\n\nconst ConvolutionShader = {\n\n\tname: 'ConvolutionShader',\n\n\tdefines: {\n\n\t\t'KERNEL_SIZE_FLOAT': '25.0',\n\t\t'KERNEL_SIZE_INT': '25'\n\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'uImageIncrement': { value: new Vector2( 0.001953125, 0.0 ) },\n\t\t'cKernel': { value: [] }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 uImageIncrement;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv - ( ( KERNEL_SIZE_FLOAT - 1.0 ) / 2.0 ) * uImageIncrement;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float cKernel[ KERNEL_SIZE_INT ];\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 uImageIncrement;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 imageCoord = vUv;\n\t\t\tvec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );\n\n\t\t\tfor( int i = 0; i < KERNEL_SIZE_INT; i ++ ) {\n\n\t\t\t\tsum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];\n\t\t\t\timageCoord += uImageIncrement;\n\n\t\t\t}\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`,\n\n\tbuildKernel: function ( sigma ) {\n\n\t\t// We lop off the sqrt(2 * pi) * sigma term, since we're going to normalize anyway.\n\n\t\tconst kMaxKernelSize = 25;\n\t\tlet kernelSize = 2 * Math.ceil( sigma * 3.0 ) + 1;\n\n\t\tif ( kernelSize > kMaxKernelSize ) kernelSize = kMaxKernelSize;\n\n\t\tconst halfWidth = ( kernelSize - 1 ) * 0.5;\n\n\t\tconst values = new Array( kernelSize );\n\t\tlet sum = 0.0;\n\t\tfor ( let i = 0; i < kernelSize; ++ i ) {\n\n\t\t\tvalues[ i ] = gauss( i - halfWidth, sigma );\n\t\t\tsum += values[ i ];\n\n\t\t}\n\n\t\t// normalize the kernel\n\n\t\tfor ( let i = 0; i < kernelSize; ++ i ) values[ i ] /= sum;\n\n\t\treturn values;\n\n\t}\n\n};\n\nfunction gauss( x, sigma ) {\n\n\treturn Math.exp( - ( x * x ) / ( 2.0 * sigma * sigma ) );\n\n}\n\nexport { ConvolutionShader };\n", "import {\n\tAdditiveBlending,\n\tHalfFloatType,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { ConvolutionShader } from '../shaders/ConvolutionShader.js';\n\nclass BloomPass extends Pass {\n\n\tconstructor( strength = 1, kernelSize = 25, sigma = 4 ) {\n\n\t\tsuper();\n\n\t\t// render targets\n\n\t\tthis.renderTargetX = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later\n\t\tthis.renderTargetX.texture.name = 'BloomPass.x';\n\t\tthis.renderTargetY = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later\n\t\tthis.renderTargetY.texture.name = 'BloomPass.y';\n\n\t\t// combine material\n\n\t\tthis.combineUniforms = UniformsUtils.clone( CombineShader.uniforms );\n\n\t\tthis.combineUniforms[ 'strength' ].value = strength;\n\n\t\tthis.materialCombine = new ShaderMaterial( {\n\n\t\t\tname: CombineShader.name,\n\t\t\tuniforms: this.combineUniforms,\n\t\t\tvertexShader: CombineShader.vertexShader,\n\t\t\tfragmentShader: CombineShader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\ttransparent: true\n\n\t\t} );\n\n\t\t// convolution material\n\n\t\tconst convolutionShader = ConvolutionShader;\n\n\t\tthis.convolutionUniforms = UniformsUtils.clone( convolutionShader.uniforms );\n\n\t\tthis.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;\n\t\tthis.convolutionUniforms[ 'cKernel' ].value = ConvolutionShader.buildKernel( sigma );\n\n\t\tthis.materialConvolution = new ShaderMaterial( {\n\n\t\t\tname: convolutionShader.name,\n\t\t\tuniforms: this.convolutionUniforms,\n\t\t\tvertexShader: convolutionShader.vertexShader,\n\t\t\tfragmentShader: convolutionShader.fragmentShader,\n\t\t\tdefines: {\n\t\t\t\t'KERNEL_SIZE_FLOAT': kernelSize.toFixed( 1 ),\n\t\t\t\t'KERNEL_SIZE_INT': kernelSize.toFixed( 0 )\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t// Render quad with blured scene into texture (convolution pass 1)\n\n\t\tthis.fsQuad.material = this.materialConvolution;\n\n\t\tthis.convolutionUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;\n\n\t\trenderer.setRenderTarget( this.renderTargetX );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\n\t\t// Render quad with blured scene into texture (convolution pass 2)\n\n\t\tthis.convolutionUniforms[ 'tDiffuse' ].value = this.renderTargetX.texture;\n\t\tthis.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurY;\n\n\t\trenderer.setRenderTarget( this.renderTargetY );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// Render original scene with superimposed blur to texture\n\n\t\tthis.fsQuad.material = this.materialCombine;\n\n\t\tthis.combineUniforms[ 'tDiffuse' ].value = this.renderTargetY.texture;\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.renderTargetX.setSize( width, height );\n\t\tthis.renderTargetY.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTargetX.dispose();\n\t\tthis.renderTargetY.dispose();\n\n\t\tthis.materialCombine.dispose();\n\t\tthis.materialConvolution.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nconst CombineShader = {\n\n\tname: 'CombineShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'strength': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float strength;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = strength * texel;\n\n\t\t}`\n\n};\n\nBloomPass.blurX = new Vector2( 0.001953125, 0.0 );\nBloomPass.blurY = new Vector2( 0.0, 0.001953125 );\n\nexport { BloomPass };\n", "/**\n * Depth-of-field shader with bokeh\n * ported from GLSL shader by Martins Upitis\n * http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html\n */\n\nconst BokehShader = {\n\n\tname: 'BokehShader',\n\n\tdefines: {\n\t\t'DEPTH_PACKING': 1,\n\t\t'PERSPECTIVE_CAMERA': 1,\n\t},\n\n\tuniforms: {\n\n\t\t'tColor': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'focus': { value: 1.0 },\n\t\t'aspect': { value: 1.0 },\n\t\t'aperture': { value: 0.025 },\n\t\t'maxblur': { value: 0.01 },\n\t\t'nearClip': { value: 1.0 },\n\t\t'farClip': { value: 1000.0 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tColor;\n\t\tuniform sampler2D tDepth;\n\n\t\tuniform float maxblur; // max blur amount\n\t\tuniform float aperture; // aperture - bigger values for shallower depth of field\n\n\t\tuniform float nearClip;\n\t\tuniform float farClip;\n\n\t\tuniform float focus;\n\t\tuniform float aspect;\n\n\t\t#include \n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\t\t\t#if DEPTH_PACKING == 1\n\t\t\treturn unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );\n\t\t\t#else\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\treturn perspectiveDepthToViewZ( depth, nearClip, farClip );\n\t\t\t#else\n\t\t\treturn orthographicDepthToViewZ( depth, nearClip, farClip );\n\t\t\t#endif\n\t\t}\n\n\n\t\tvoid main() {\n\n\t\t\tvec2 aspectcorrect = vec2( 1.0, aspect );\n\n\t\t\tfloat viewZ = getViewZ( getDepth( vUv ) );\n\n\t\t\tfloat factor = ( focus + viewZ ); // viewZ is <= 0, so this is a difference equation\n\n\t\t\tvec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );\n\n\t\t\tvec2 dofblur9 = dofblur * 0.9;\n\t\t\tvec2 dofblur7 = dofblur * 0.7;\n\t\t\tvec2 dofblur4 = dofblur * 0.4;\n\n\t\t\tvec4 col = vec4( 0.0 );\n\n\t\t\tcol += texture2D( tColor, vUv.xy );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );\n\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );\n\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );\n\n\t\t\tgl_FragColor = col / 41.0;\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\nexport { BokehShader };\n", "import {\n\tColor,\n\tHalfFloatType,\n\tMeshDepthMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRGBADepthPacking,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { BokehShader } from '../shaders/BokehShader.js';\n\n/**\n * Depth-of-field post-process with bokeh shader\n */\n\nclass BokehPass extends Pass {\n\n\tconstructor( scene, camera, params ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tconst focus = ( params.focus !== undefined ) ? params.focus : 1.0;\n\t\tconst aperture = ( params.aperture !== undefined ) ? params.aperture : 0.025;\n\t\tconst maxblur = ( params.maxblur !== undefined ) ? params.maxblur : 1.0;\n\n\t\t// render targets\n\n\t\tthis.renderTargetDepth = new WebGLRenderTarget( 1, 1, { // will be resized later\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\n\t\tthis.renderTargetDepth.texture.name = 'BokehPass.depth';\n\n\t\t// depth material\n\n\t\tthis.materialDepth = new MeshDepthMaterial();\n\t\tthis.materialDepth.depthPacking = RGBADepthPacking;\n\t\tthis.materialDepth.blending = NoBlending;\n\n\t\t// bokeh material\n\n\t\tconst bokehShader = BokehShader;\n\t\tconst bokehUniforms = UniformsUtils.clone( bokehShader.uniforms );\n\n\t\tbokehUniforms[ 'tDepth' ].value = this.renderTargetDepth.texture;\n\n\t\tbokehUniforms[ 'focus' ].value = focus;\n\t\tbokehUniforms[ 'aspect' ].value = camera.aspect;\n\t\tbokehUniforms[ 'aperture' ].value = aperture;\n\t\tbokehUniforms[ 'maxblur' ].value = maxblur;\n\t\tbokehUniforms[ 'nearClip' ].value = camera.near;\n\t\tbokehUniforms[ 'farClip' ].value = camera.far;\n\n\t\tthis.materialBokeh = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, bokehShader.defines ),\n\t\t\tuniforms: bokehUniforms,\n\t\t\tvertexShader: bokehShader.vertexShader,\n\t\t\tfragmentShader: bokehShader.fragmentShader\n\t\t} );\n\n\t\tthis.uniforms = bokehUniforms;\n\n\t\tthis.fsQuad = new FullScreenQuad( this.materialBokeh );\n\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\t// Render depth into texture\n\n\t\tthis.scene.overrideMaterial = this.materialDepth;\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tconst oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.setClearColor( 0xffffff );\n\t\trenderer.setClearAlpha( 1.0 );\n\t\trenderer.setRenderTarget( this.renderTargetDepth );\n\t\trenderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// Render bokeh composite\n\n\t\tthis.uniforms[ 'tColor' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'nearClip' ].value = this.camera.near;\n\t\tthis.uniforms[ 'farClip' ].value = this.camera.far;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = null;\n\t\trenderer.setClearColor( this._oldClearColor );\n\t\trenderer.setClearAlpha( oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.materialBokeh.uniforms[ 'aspect' ].value = width / height;\n\n\t\tthis.renderTargetDepth.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTargetDepth.dispose();\n\n\t\tthis.materialDepth.dispose();\n\t\tthis.materialBokeh.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { BokehPass };\n", "import {\n\tColor\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass ClearPass extends Pass {\n\n\tconstructor( clearColor, clearAlpha ) {\n\n\t\tsuper();\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;\n\t\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tlet oldClearAlpha;\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\trenderer.clear();\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t\t}\n\n\t}\n\n}\n\nexport { ClearPass };\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tMesh,\n\tPerspectiveCamera,\n\tScene,\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass CubeTexturePass extends Pass {\n\n\tconstructor( camera, tCube, opacity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.camera = camera;\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.cubeShader = ShaderLib[ 'cube' ];\n\t\tthis.cubeMesh = new Mesh(\n\t\t\tnew BoxGeometry( 10, 10, 10 ),\n\t\t\tnew ShaderMaterial( {\n\t\t\t\tuniforms: UniformsUtils.clone( this.cubeShader.uniforms ),\n\t\t\t\tvertexShader: this.cubeShader.vertexShader,\n\t\t\t\tfragmentShader: this.cubeShader.fragmentShader,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\tside: BackSide\n\t\t\t} )\n\t\t);\n\n\t\tObject.defineProperty( this.cubeMesh.material, 'envMap', {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.tCube.value;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.tCube = tCube;\n\t\tthis.opacity = opacity;\n\n\t\tthis.cubeScene = new Scene();\n\t\tthis.cubeCamera = new PerspectiveCamera();\n\t\tthis.cubeScene.add( this.cubeMesh );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.cubeCamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\t\tthis.cubeCamera.quaternion.setFromRotationMatrix( this.camera.matrixWorld );\n\n\t\tthis.cubeMesh.material.uniforms.tCube.value = this.tCube;\n\t\tthis.cubeMesh.material.uniforms.tFlip.value = ( this.tCube.isCubeTexture && this.tCube.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\tthis.cubeMesh.material.uniforms.opacity.value = this.opacity;\n\t\tthis.cubeMesh.material.transparent = ( this.opacity < 1.0 );\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.cubeScene, this.cubeCamera );\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cubeMesh.geometry.dispose();\n\t\tthis.cubeMesh.material.dispose();\n\n\t}\n\n}\n\nexport { CubeTexturePass };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Dot screen shader\n * based on glfx.js sepia shader\n * https://github.com/evanw/glfx.js\n */\n\nconst DotScreenShader = {\n\n\tname: 'DotScreenShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tSize': { value: new Vector2( 256, 256 ) },\n\t\t'center': { value: new Vector2( 0.5, 0.5 ) },\n\t\t'angle': { value: 1.57 },\n\t\t'scale': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec2 center;\n\t\tuniform float angle;\n\t\tuniform float scale;\n\t\tuniform vec2 tSize;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tfloat pattern() {\n\n\t\t\tfloat s = sin( angle ), c = cos( angle );\n\n\t\t\tvec2 tex = vUv * tSize - center;\n\t\t\tvec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * scale;\n\n\t\t\treturn ( sin( point.x ) * sin( point.y ) ) * 4.0;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 color = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat average = ( color.r + color.g + color.b ) / 3.0;\n\n\t\t\tgl_FragColor = vec4( vec3( average * 10.0 - 5.0 + pattern() ), color.a );\n\n\t\t}`\n\n};\n\nexport { DotScreenShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { DotScreenShader } from '../shaders/DotScreenShader.js';\n\nclass DotScreenPass extends Pass {\n\n\tconstructor( center, angle, scale ) {\n\n\t\tsuper();\n\n\t\tconst shader = DotScreenShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tif ( center !== undefined ) this.uniforms[ 'center' ].value.copy( center );\n\t\tif ( angle !== undefined ) this.uniforms[ 'angle' ].value = angle;\n\t\tif ( scale !== undefined ) this.uniforms[ 'scale' ].value = scale;\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tname: shader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'tSize' ].value.set( readBuffer.width, readBuffer.height );\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { DotScreenPass };\n", "/**\n * Full-screen textured quad shader\n */\n\nconst CopyShader = {\n\n\tname: 'CopyShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\n\t\t}`\n\n};\n\nexport { CopyShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\n\nclass ShaderPass extends Pass {\n\n\tconstructor( shader, textureID ) {\n\n\t\tsuper();\n\n\t\tthis.textureID = ( textureID !== undefined ) ? textureID : 'tDiffuse';\n\n\t\tif ( shader instanceof ShaderMaterial ) {\n\n\t\t\tthis.uniforms = shader.uniforms;\n\n\t\t\tthis.material = shader;\n\n\t\t} else if ( shader ) {\n\n\t\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t\tthis.material = new ShaderMaterial( {\n\n\t\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\t\tdefines: Object.assign( {}, shader.defines ),\n\t\t\t\tuniforms: this.uniforms,\n\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t\t} );\n\n\t\t}\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { ShaderPass };\n", "import { Pass } from './Pass.js';\n\nclass MaskPass extends Pass {\n\n\tconstructor( scene, camera ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.inverse = false;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst context = renderer.getContext();\n\t\tconst state = renderer.state;\n\n\t\t// don't update color or depth\n\n\t\tstate.buffers.color.setMask( false );\n\t\tstate.buffers.depth.setMask( false );\n\n\t\t// lock buffers\n\n\t\tstate.buffers.color.setLocked( true );\n\t\tstate.buffers.depth.setLocked( true );\n\n\t\t// set up stencil\n\n\t\tlet writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tstate.buffers.stencil.setTest( true );\n\t\tstate.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tstate.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tstate.buffers.stencil.setClear( clearValue );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( writeBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// unlock color and depth buffer and make them writable for subsequent rendering/clearing\n\n\t\tstate.buffers.color.setLocked( false );\n\t\tstate.buffers.depth.setLocked( false );\n\n\t\tstate.buffers.color.setMask( true );\n\t\tstate.buffers.depth.setMask( true );\n\n\t\t// only render where stencil is set to 1\n\n\t\tstate.buffers.stencil.setLocked( false );\n\t\tstate.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n\t\tstate.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t}\n\n}\n\nclass ClearMaskPass extends Pass {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.needsSwap = false;\n\n\t}\n\n\trender( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\trenderer.state.buffers.stencil.setLocked( false );\n\t\trenderer.state.buffers.stencil.setTest( false );\n\n\t}\n\n}\n\nexport { MaskPass, ClearMaskPass };\n", "import {\n\tClock,\n\tHalfFloatType,\n\tNoBlending,\n\tVector2,\n\tWebGLRenderTarget\n} from 'three';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { ShaderPass } from './ShaderPass.js';\nimport { MaskPass } from './MaskPass.js';\nimport { ClearMaskPass } from './MaskPass.js';\n\nclass EffectComposer {\n\n\tconstructor( renderer, renderTarget ) {\n\n\t\tthis.renderer = renderer;\n\n\t\tthis._pixelRatio = renderer.getPixelRatio();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = renderer.getSize( new Vector2() );\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, { type: HalfFloatType } );\n\t\t\trenderTarget.texture.name = 'EffectComposer.rt1';\n\n\t\t} else {\n\n\t\t\tthis._width = renderTarget.width;\n\t\t\tthis._height = renderTarget.height;\n\n\t\t}\n\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\t\tthis.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t\tthis.renderToScreen = true;\n\n\t\tthis.passes = [];\n\n\t\tthis.copyPass = new ShaderPass( CopyShader );\n\t\tthis.copyPass.material.blending = NoBlending;\n\n\t\tthis.clock = new Clock();\n\n\t}\n\n\tswapBuffers() {\n\n\t\tconst tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t}\n\n\taddPass( pass ) {\n\n\t\tthis.passes.push( pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\tinsertPass( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\tremovePass( pass ) {\n\n\t\tconst index = this.passes.indexOf( pass );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tthis.passes.splice( index, 1 );\n\n\t\t}\n\n\t}\n\n\tisLastEnabledPass( passIndex ) {\n\n\t\tfor ( let i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n\t\t\tif ( this.passes[ i ].enabled ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\trender( deltaTime ) {\n\n\t\t// deltaTime value is in seconds\n\n\t\tif ( deltaTime === undefined ) {\n\n\t\t\tdeltaTime = this.clock.getDelta();\n\n\t\t}\n\n\t\tconst currentRenderTarget = this.renderer.getRenderTarget();\n\n\t\tlet maskActive = false;\n\n\t\tfor ( let i = 0, il = this.passes.length; i < il; i ++ ) {\n\n\t\t\tconst pass = this.passes[ i ];\n\n\t\t\tif ( pass.enabled === false ) continue;\n\n\t\t\tpass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tconst context = this.renderer.getContext();\n\t\t\t\t\tconst stencil = this.renderer.state.buffers.stencil;\n\n\t\t\t\t\t//context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n\t\t\t\t\t//context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( MaskPass !== undefined ) {\n\n\t\t\t\tif ( pass instanceof MaskPass ) {\n\n\t\t\t\t\tmaskActive = true;\n\n\t\t\t\t} else if ( pass instanceof ClearMaskPass ) {\n\n\t\t\t\t\tmaskActive = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\treset( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = this.renderer.getSize( new Vector2() );\n\t\t\tthis._pixelRatio = this.renderer.getPixelRatio();\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\t\t\trenderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t\t}\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tconst effectiveWidth = this._width * this._pixelRatio;\n\t\tconst effectiveHeight = this._height * this._pixelRatio;\n\n\t\tthis.renderTarget1.setSize( effectiveWidth, effectiveHeight );\n\t\tthis.renderTarget2.setSize( effectiveWidth, effectiveHeight );\n\n\t\tfor ( let i = 0; i < this.passes.length; i ++ ) {\n\n\t\t\tthis.passes[ i ].setSize( effectiveWidth, effectiveHeight );\n\n\t\t}\n\n\t}\n\n\tsetPixelRatio( pixelRatio ) {\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this._width, this._height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\n\t\tthis.copyPass.dispose();\n\n\t}\n\n}\n\nexport { EffectComposer };\n", "const FilmShader = {\n\n\tname: 'FilmShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'time': { value: 0.0 },\n\t\t'intensity': { value: 0.5 },\n\t\t'grayscale': { value: false }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform float intensity;\n\t\tuniform bool grayscale;\n\t\tuniform float time;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat noise = rand( fract( vUv + time ) );\n\n\t\t\tvec3 color = base.rgb + base.rgb * clamp( 0.1 + noise, 0.0, 1.0 );\n\n\t\t\tcolor = mix( base.rgb, color, intensity );\n\n\t\t\tif ( grayscale ) {\n\n\t\t\t\tcolor = vec3( luminance( color ) ); // assuming linear-srgb\n\n\t\t\t}\n\n\t\t\tgl_FragColor = vec4( color, base.a );\n\n\t\t}`,\n\n};\n\nexport { FilmShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { FilmShader } from '../shaders/FilmShader.js';\n\nclass FilmPass extends Pass {\n\n\tconstructor( intensity = 0.5, grayscale = false ) {\n\n\t\tsuper();\n\n\t\tconst shader = FilmShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tname: shader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t} );\n\n\t\tthis.uniforms.intensity.value = intensity; // (0 = no effect, 1 = full effect)\n\t\tthis.uniforms.grayscale.value = grayscale;\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime /*, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'time' ].value += deltaTime;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { FilmPass };\n", "/**\n * RGB Shift Shader\n * Shifts red and blue channels from center in opposite directions\n * Ported from http://kriss.cx/tom/2009/05/rgb-shift/\n * by Tom Butterworth / http://kriss.cx/tom/\n *\n * amount: shift distance (1 is width of input)\n * angle: shift angle in radians\n */\n\nconst DigitalGlitch = {\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }, //diffuse texture\n\t\t'tDisp': { value: null }, //displacement texture for digital glitch squares\n\t\t'byp': { value: 0 }, //apply the glitch ?\n\t\t'amount': { value: 0.08 },\n\t\t'angle': { value: 0.02 },\n\t\t'seed': { value: 0.02 },\n\t\t'seed_x': { value: 0.02 }, //-1,1\n\t\t'seed_y': { value: 0.02 }, //-1,1\n\t\t'distortion_x': { value: 0.5 },\n\t\t'distortion_y': { value: 0.6 },\n\t\t'col_s': { value: 0.05 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform int byp; //should we apply the glitch ?\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDisp;\n\n\t\tuniform float amount;\n\t\tuniform float angle;\n\t\tuniform float seed;\n\t\tuniform float seed_x;\n\t\tuniform float seed_y;\n\t\tuniform float distortion_x;\n\t\tuniform float distortion_y;\n\t\tuniform float col_s;\n\n\t\tvarying vec2 vUv;\n\n\n\t\tfloat rand(vec2 co){\n\t\t\treturn fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);\n\t\t}\n\n\t\tvoid main() {\n\t\t\tif(byp<1) {\n\t\t\t\tvec2 p = vUv;\n\t\t\t\tfloat xs = floor(gl_FragCoord.x / 0.5);\n\t\t\t\tfloat ys = floor(gl_FragCoord.y / 0.5);\n\t\t\t\t//based on staffantans glitch shader for unity https://github.com/staffantan/unityglitch\n\t\t\t\tfloat disp = texture2D(tDisp, p*seed*seed).r;\n\t\t\t\tif(p.ydistortion_x-col_s*seed) {\n\t\t\t\t\tif(seed_x>0.){\n\t\t\t\t\t\tp.y = 1. - (p.y + distortion_y);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp.y = distortion_y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(p.xdistortion_y-col_s*seed) {\n\t\t\t\t\tif(seed_y>0.){\n\t\t\t\t\t\tp.x=distortion_x;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp.x = 1. - (p.x + distortion_x);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tp.x+=disp*seed_x*(seed/5.);\n\t\t\t\tp.y+=disp*seed_y*(seed/5.);\n\t\t\t\t//base from RGB shift shader\n\t\t\t\tvec2 offset = amount * vec2( cos(angle), sin(angle));\n\t\t\t\tvec4 cr = texture2D(tDiffuse, p + offset);\n\t\t\t\tvec4 cga = texture2D(tDiffuse, p);\n\t\t\t\tvec4 cb = texture2D(tDiffuse, p - offset);\n\t\t\t\tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\n\t\t\t\t//add noise\n\t\t\t\tvec4 snow = 200.*amount*vec4(rand(vec2(xs * seed,ys * seed*50.))*0.2);\n\t\t\t\tgl_FragColor = gl_FragColor+ snow;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tgl_FragColor=texture2D (tDiffuse, vUv);\n\t\t\t}\n\t\t}`\n\n};\n\nexport { DigitalGlitch };\n", "import {\n\tDataTexture,\n\tFloatType,\n\tMathUtils,\n\tRedFormat,\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { DigitalGlitch } from '../shaders/DigitalGlitch.js';\n\nclass GlitchPass extends Pass {\n\n\tconstructor( dt_size = 64 ) {\n\n\t\tsuper();\n\n\t\tconst shader = DigitalGlitch;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.heightMap = this.generateHeightmap( dt_size );\n\n\t\tthis.uniforms[ 'tDisp' ].value = this.heightMap;\n\n\t\tthis.material = new ShaderMaterial( {\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t\tthis.goWild = false;\n\t\tthis.curF = 0;\n\t\tthis.generateTrigger();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'seed' ].value = Math.random();//default seeding\n\t\tthis.uniforms[ 'byp' ].value = 0;\n\n\t\tif ( this.curF % this.randX == 0 || this.goWild == true ) {\n\n\t\t\tthis.uniforms[ 'amount' ].value = Math.random() / 30;\n\t\t\tthis.uniforms[ 'angle' ].value = MathUtils.randFloat( - Math.PI, Math.PI );\n\t\t\tthis.uniforms[ 'seed_x' ].value = MathUtils.randFloat( - 1, 1 );\n\t\t\tthis.uniforms[ 'seed_y' ].value = MathUtils.randFloat( - 1, 1 );\n\t\t\tthis.uniforms[ 'distortion_x' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.uniforms[ 'distortion_y' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.curF = 0;\n\t\t\tthis.generateTrigger();\n\n\t\t} else if ( this.curF % this.randX < this.randX / 5 ) {\n\n\t\t\tthis.uniforms[ 'amount' ].value = Math.random() / 90;\n\t\t\tthis.uniforms[ 'angle' ].value = MathUtils.randFloat( - Math.PI, Math.PI );\n\t\t\tthis.uniforms[ 'distortion_x' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.uniforms[ 'distortion_y' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.uniforms[ 'seed_x' ].value = MathUtils.randFloat( - 0.3, 0.3 );\n\t\t\tthis.uniforms[ 'seed_y' ].value = MathUtils.randFloat( - 0.3, 0.3 );\n\n\t\t} else if ( this.goWild == false ) {\n\n\t\t\tthis.uniforms[ 'byp' ].value = 1;\n\n\t\t}\n\n\t\tthis.curF ++;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tgenerateTrigger() {\n\n\t\tthis.randX = MathUtils.randInt( 120, 240 );\n\n\t}\n\n\tgenerateHeightmap( dt_size ) {\n\n\t\tconst data_arr = new Float32Array( dt_size * dt_size );\n\t\tconst length = dt_size * dt_size;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst val = MathUtils.randFloat( 0, 1 );\n\t\t\tdata_arr[ i ] = val;\n\n\t\t}\n\n\t\tconst texture = new DataTexture( data_arr, dt_size, dt_size, RedFormat, FloatType );\n\t\ttexture.needsUpdate = true;\n\t\treturn texture;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.heightMap.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { GlitchPass };\n", "import {\n\tDataTexture,\n\tMatrix4,\n\tRepeatWrapping,\n\tVector2,\n\tVector3,\n} from 'three';\n\n/**\n * References:\n * - implemented algorithm - GTAO\n * - https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf\n * - https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf\n *\n * - other AO algorithms that are not implemented here:\n * - Screen Space Ambient Occlusion (SSAO), see also SSAOShader.js\n *\t - http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html\n *\t - https://learnopengl.com/Advanced-Lighting/SSAO\n *\t - https://creativecoding.soe.ucsc.edu/courses/cmpm164/_schedule/AmbientOcclusion.pdf\n *\t - https://drive.google.com/file/d/1SyagcEVplIm2KkRD3WQYSO9O0Iyi1hfy/edit\n * - Scalable Ambient Occlusion (SAO), see also SAOShader.js\n *\t - https://casual-effects.com/research/McGuire2012SAO/index.html\n *\t - https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf\n * - N8HO\n *\t - https://github.com/N8python/n8ao\n * - Horizon Based Ambient Occlusion (HBAO)\n *\t - http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.577.2286&rep=rep1&type=pdf\n *\t - https://www.derschmale.com/2013/12/20/an-alternative-implementation-for-hbao-2/\n *\n * - further reading\n * \t - https://ceur-ws.org/Vol-3027/paper5.pdf\n * - https://www.comp.nus.edu.sg/~lowkl/publications/mssao_visual_computer_2012.pdf\n * - https://web.ics.purdue.edu/~tmcgraw/papers/mcgraw-ao-2008.pdf\n * - https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf\n * - https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.390.2463&rep=rep1&type=pdf\n * - https://www.intel.com/content/www/us/en/developer/articles/technical/adaptive-screen-space-ambient-occlusion.html\n */\n\nconst GTAOShader = {\n\n\tname: 'GTAOShader',\n\n\tdefines: {\n\t\tPERSPECTIVE_CAMERA: 1,\n\t\tSAMPLES: 16,\n\t\tNORMAL_VECTOR_TYPE: 1,\n\t\tDEPTH_SWIZZLING: 'x',\n\t\tSCREEN_SPACE_RADIUS: 0,\n\t\tSCREEN_SPACE_RADIUS_SCALE: 100.0,\n\t\tSCENE_CLIP_BOX: 0,\n\t},\n\n\tuniforms: {\n\t\ttNormal: { value: null },\n\t\ttDepth: { value: null },\n\t\ttNoise: { value: null },\n\t\tresolution: { value: new Vector2() },\n\t\tcameraNear: { value: null },\n\t\tcameraFar: { value: null },\n\t\tcameraProjectionMatrix: { value: new Matrix4() },\n\t\tcameraProjectionMatrixInverse: { value: new Matrix4() },\n\t\tcameraWorldMatrix: { value: new Matrix4() },\n\t\tradius: { value: 0.25 },\n\t\tdistanceExponent: { value: 1. },\n\t\tthickness: { value: 1. },\n\t\tdistanceFallOff: { value: 1. },\n\t\tscale: { value: 1. },\n\t\tsceneBoxMin: { value: new Vector3( - 1, - 1, - 1 ) },\n\t\tsceneBoxMax: { value: new Vector3( 1, 1, 1 ) },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\t\tuniform highp sampler2D tNormal;\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\t\t\n\t\tuniform mat4 cameraWorldMatrix;\n\t\tuniform float radius;\n\t\tuniform float distanceExponent;\n\t\tuniform float thickness;\n\t\tuniform float distanceFallOff;\n\t\tuniform float scale;\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tuniform vec3 sceneBoxMin;\n\t\t\tuniform vec3 sceneBoxMax;\n\t\t#endif\n\t\t\n\t\t#include \n\t\t#include \n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(vec3(ao), 1.)\n\t\t#endif\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\n\t\tfloat getDepth(const vec2 uv) { \n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).DEPTH_SWIZZLING;\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) { \n\t\t\treturn texelFetch(tDepth, uv.xy, 0).DEPTH_SWIZZLING;\n\t\t}\n\n\t\tfloat getViewZ(const in float depth) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\treturn perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\tivec2 p = ivec2(uv * size);\n\t\t\tfloat c0 = fetchDepth(p);\n\t\t\tfloat l2 = fetchDepth(p - ivec2(2, 0));\n\t\t\tfloat l1 = fetchDepth(p - ivec2(1, 0));\n\t\t\tfloat r1 = fetchDepth(p + ivec2(1, 0));\n\t\t\tfloat r2 = fetchDepth(p + ivec2(2, 0));\n\t\t\tfloat b2 = fetchDepth(p - ivec2(0, 2));\n\t\t\tfloat b1 = fetchDepth(p - ivec2(0, 1));\n\t\t\tfloat t1 = fetchDepth(p + ivec2(0, 1));\n\t\t\tfloat t2 = fetchDepth(p + ivec2(0, 2));\n\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#else\n\t\t\t\treturn computeNormalFromDepth(uv);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 getSceneUvAndDepth(vec3 sampleViewPos) {\n\t\t\tvec4 sampleClipPos = cameraProjectionMatrix * vec4(sampleViewPos, 1.);\n\t\t\tvec2 sampleUv = sampleClipPos.xy / sampleClipPos.w * 0.5 + 0.5;\n\t\t\tfloat sampleSceneDepth = getDepth(sampleUv);\n\t\t\treturn vec3(sampleUv, sampleSceneDepth);\n\t\t}\n\t\t\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\n\t\t\tif (depth >= 1.0) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\n\n\t\t\tfloat radiusToUse = radius;\n\t\t\tfloat distanceFalloffToUse = thickness;\n\t\t\t#if SCREEN_SPACE_RADIUS == 1\n\t\t\t\tfloat radiusScale = getViewPosition(vec2(0.5 + float(SCREEN_SPACE_RADIUS_SCALE) / resolution.x, 0.0), depth).x;\n\t\t\t\tradiusToUse *= radiusScale;\n\t\t\t\tdistanceFalloffToUse *= radiusScale;\n\t\t\t#endif\n\n\t\t\t#if SCENE_CLIP_BOX == 1\n\t\t\t\tvec3 worldPos = (cameraWorldMatrix * vec4(viewPos, 1.0)).xyz;\n\t\t\t\tfloat boxDistance = length(max(vec3(0.0), max(sceneBoxMin - worldPos, worldPos - sceneBoxMax)));\n\t\t\t\tif (boxDistance > radiusToUse) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n\t\t\tvec3 randomVec = noiseTexel.xyz * 2.0 - 1.0;\n\t\t\tvec3 tangent = normalize(vec3(randomVec.xy, 0.));\n\t\t\tvec3 bitangent = vec3(-tangent.y, tangent.x, 0.);\n\t\t\tmat3 kernelMatrix = mat3(tangent, bitangent, vec3(0., 0., 1.));\n\n\t\t\tconst int DIRECTIONS = SAMPLES < 30 ? 3 : 5;\n\t\t\tconst int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;\n\t\t\tfloat ao = 0.0;\n\t\t\tfor (int i = 0; i < DIRECTIONS; ++i) {\n\t\t\t\t\n\t\t\t\tfloat angle = float(i) / float(DIRECTIONS) * PI;\n\t\t\t\tvec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w); \n\t\t\t\tsampleDir.xyz = normalize(kernelMatrix * sampleDir.xyz);\n\n\t\t\t\tvec3 viewDir = normalize(-viewPos.xyz);\n\t\t\t\tvec3 sliceBitangent = normalize(cross(sampleDir.xyz, viewDir));\n\t\t\t\tvec3 sliceTangent = cross(sliceBitangent, viewDir);\n\t\t\t\tvec3 normalInSlice = normalize(viewNormal - sliceBitangent * dot(viewNormal, sliceBitangent));\n\t\t\t\t\n\t\t\t\tvec3 tangentToNormalInSlice = cross(normalInSlice, sliceBitangent);\n\t\t\t\tvec2 cosHorizons = vec2(dot(viewDir, tangentToNormalInSlice), dot(viewDir, -tangentToNormalInSlice));\n\t\t\t\t\n\t\t\t\tfor (int j = 0; j < STEPS; ++j) {\n\t\t\t\t\tvec3 sampleViewOffset = sampleDir.xyz * radiusToUse * sampleDir.w * pow(float(j + 1) / float(STEPS), distanceExponent);\t\n\n\t\t\t\t\tvec3 sampleSceneUvDepth = getSceneUvAndDepth(viewPos + sampleViewOffset);\n\t\t\t\t\tvec3 sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\tvec3 viewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\tcosHorizons.x += max(0., (sampleCosHorizon - cosHorizons.x) * mix(1., 2. / float(j + 2), distanceFallOff));\n\t\t\t\t\t}\t\t\n\n\t\t\t\t\tsampleSceneUvDepth = getSceneUvAndDepth(viewPos - sampleViewOffset);\n\t\t\t\t\tsampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\tviewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\tcosHorizons.y += max(0., (sampleCosHorizon - cosHorizons.y) * mix(1., 2. / float(j + 2), distanceFallOff));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvec2 sinHorizons = sqrt(1. - cosHorizons * cosHorizons);\n\t\t\t\tfloat nx = dot(normalInSlice, sliceTangent);\n\t\t\t\tfloat ny = dot(normalInSlice, viewDir);\n\t\t\t\tfloat nxb = 1. / 2. * (acos(cosHorizons.y) - acos(cosHorizons.x) + sinHorizons.x * cosHorizons.x - sinHorizons.y * cosHorizons.y);\n\t\t\t\tfloat nyb = 1. / 2. * (2. - cosHorizons.x * cosHorizons.x - cosHorizons.y * cosHorizons.y);\n\t\t\t\tfloat occlusion = nx * nxb + ny * nyb;\n\t\t\t\tao += occlusion;\n\t\t\t}\n\n\t\t\tao = clamp(ao / float(DIRECTIONS), 0., 1.);\t\t\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tao = mix(ao, 1., smoothstep(0., radiusToUse, boxDistance));\n\t\t#endif\n\t\t\tao = pow(ao, scale);\n\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}`\n\n};\n\nconst GTAODepthShader = {\n\n\tname: 'GTAODepthShader',\n\n\tdefines: {\n\t\tPERSPECTIVE_CAMERA: 1\n\t},\n\n\tuniforms: {\n\t\ttDepth: { value: null },\n\t\tcameraNear: { value: null },\n\t\tcameraFar: { value: null },\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform sampler2D tDepth;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tgl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );\n\n\t\t}`\n\n};\n\nconst GTAOBlendShader = {\n\n\tname: 'GTAOBlendShader',\n\n\tuniforms: {\n\t\ttDiffuse: { value: null },\n\t\tintensity: { value: 1.0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform float intensity;\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4(mix(vec3(1.), texel.rgb, intensity), texel.a);\n\t\t}`\n\n};\n\n\nfunction generateMagicSquareNoise( size = 5 ) {\n\n\tconst noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );\n\tconst magicSquare = generateMagicSquare( noiseSize );\n\tconst noiseSquareSize = magicSquare.length;\n\tconst data = new Uint8Array( noiseSquareSize * 4 );\n\n\tfor ( let inx = 0; inx < noiseSquareSize; ++ inx ) {\n\n\t\tconst iAng = magicSquare[ inx ];\n\t\tconst angle = ( 2 * Math.PI * iAng ) / noiseSquareSize;\n\t\tconst randomVec = new Vector3(\n\t\t\tMath.cos( angle ),\n\t\t\tMath.sin( angle ),\n\t\t\t0\n\t\t).normalize();\n\t\tdata[ inx * 4 ] = ( randomVec.x * 0.5 + 0.5 ) * 255;\n\t\tdata[ inx * 4 + 1 ] = ( randomVec.y * 0.5 + 0.5 ) * 255;\n\t\tdata[ inx * 4 + 2 ] = 127;\n\t\tdata[ inx * 4 + 3 ] = 255;\n\n\t}\n\n\tconst noiseTexture = new DataTexture( data, noiseSize, noiseSize );\n\tnoiseTexture.wrapS = RepeatWrapping;\n\tnoiseTexture.wrapT = RepeatWrapping;\n\tnoiseTexture.needsUpdate = true;\n\n\treturn noiseTexture;\n\n}\n\nfunction generateMagicSquare( size ) {\n\n\tconst noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );\n\tconst noiseSquareSize = noiseSize * noiseSize;\n\tconst magicSquare = Array( noiseSquareSize ).fill( 0 );\n\tlet i = Math.floor( noiseSize / 2 );\n\tlet j = noiseSize - 1;\n\n\tfor ( let num = 1; num <= noiseSquareSize; ) {\n\n\t\tif ( i === - 1 && j === noiseSize ) {\n\n\t\t\tj = noiseSize - 2;\n\t\t\ti = 0;\n\n\t\t} else {\n\n\t\t\tif ( j === noiseSize ) {\n\n\t\t\t\tj = 0;\n\n\t\t\t}\n\n\t\t\tif ( i < 0 ) {\n\n\t\t\t\ti = noiseSize - 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( magicSquare[ i * noiseSize + j ] !== 0 ) {\n\n\t\t\tj -= 2;\n\t\t\ti ++;\n\t\t\tcontinue;\n\n\t\t} else {\n\n\t\t\tmagicSquare[ i * noiseSize + j ] = num ++;\n\n\t\t}\n\n\t\tj ++;\n\t\ti --;\n\n\t}\n\n\treturn magicSquare;\n\n}\n\n\nexport { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader };\n", "import {\n\tMatrix4,\n\tVector2,\n\tVector3,\n} from 'three';\n\n/**\n * References:\n * https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf\n * https://arxiv.org/pdf/2206.01856.pdf\n */\n\nconst PoissonDenoiseShader = {\n\n\tname: 'PoissonDenoiseShader',\n\n\tdefines: {\n\t\t'SAMPLES': 16,\n\t\t'SAMPLE_VECTORS': generatePdSamplePointInitializer( 16, 2, 1 ),\n\t\t'NORMAL_VECTOR_TYPE': 1,\n\t\t'DEPTH_VALUE_SOURCE': 0,\n\t},\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'tNoise': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrixInverse': { value: new Matrix4() },\n\t\t'lumaPhi': { value: 5. },\n\t\t'depthPhi': { value: 5. },\n\t\t'normalPhi': { value: 5. },\n\t\t'radius': { value: 4. },\n\t\t'index': { value: 0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\n\t\tuniform float lumaPhi;\n\t\tuniform float depthPhi;\n\t\tuniform float normalPhi;\n\t\tuniform float radius;\n\t\tuniform int index;\n\t\t\n\t\t#include \n\t\t#include \n\n\t\t#ifndef SAMPLE_LUMINANCE\n\t\t#define SAMPLE_LUMINANCE dot(vec3(0.2125, 0.7154, 0.0721), a)\n\t\t#endif\n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(denoised, 1.)\n\t\t#endif\n\n\t\tfloat getLuminance(const in vec3 a) {\n\t\t\treturn SAMPLE_LUMINANCE;\n\t\t}\n\n\t\tconst vec3 poissonDisk[SAMPLES] = SAMPLE_VECTORS;\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\t\t\n\t\tfloat getDepth(const vec2 uv) {\n\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).a;\n\t\t#else\n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).r;\n\t\t#endif\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) {\n\t\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).a;\n\t\t\t#else\n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).r;\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\tivec2 p = ivec2(uv * size);\n\t\t\tfloat c0 = fetchDepth(p);\n\t\t\tfloat l2 = fetchDepth(p - ivec2(2, 0));\n\t\t\tfloat l1 = fetchDepth(p - ivec2(1, 0));\n\t\t\tfloat r1 = fetchDepth(p + ivec2(1, 0));\n\t\t\tfloat r2 = fetchDepth(p + ivec2(2, 0));\n\t\t\tfloat b2 = fetchDepth(p - ivec2(0, 2));\n\t\t\tfloat b1 = fetchDepth(p - ivec2(0, 1));\n\t\t\tfloat t1 = fetchDepth(p + ivec2(0, 1));\n\t\t\tfloat t2 = fetchDepth(p + ivec2(0, 2));\n\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t#else\n\t\t\treturn computeNormalFromDepth(uv);\n\t\t#endif\n\t\t}\n\n\t\tvoid denoiseSample(in vec3 center, in vec3 viewNormal, in vec3 viewPos, in vec2 sampleUv, inout vec3 denoised, inout float totalWeight) {\n\t\t\tvec4 sampleTexel = textureLod(tDiffuse, sampleUv, 0.0);\n\t\t\tfloat sampleDepth = getDepth(sampleUv);\n\t\t\tvec3 sampleNormal = getViewNormal(sampleUv);\n\t\t\tvec3 neighborColor = sampleTexel.rgb;\n\t\t\tvec3 viewPosSample = getViewPosition(sampleUv, sampleDepth);\n\t\t\t\n\t\t\tfloat normalDiff = dot(viewNormal, sampleNormal);\n\t\t\tfloat normalSimilarity = pow(max(normalDiff, 0.), normalPhi);\n\t\t\tfloat lumaDiff = abs(getLuminance(neighborColor) - getLuminance(center));\n\t\t\tfloat lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);\n\t\t\tfloat depthDiff = abs(dot(viewPos - viewPosSample, viewNormal));\n\t\t\tfloat depthSimilarity = max(1. - depthDiff / depthPhi, 0.);\n\t\t\tfloat w = lumaSimilarity * depthSimilarity * normalSimilarity;\n\t\t\n\t\t\tdenoised += w * neighborColor;\n\t\t\ttotalWeight += w;\n\t\t}\n\t\t\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\t\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\t\n\t\t\tif (depth == 1. || dot(viewNormal, viewNormal) == 0.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec4 texel = textureLod(tDiffuse, vUv, 0.0);\n\t\t\tvec3 center = texel.rgb;\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n \t\tvec2 noiseVec = vec2(sin(noiseTexel[index % 4] * 2. * PI), cos(noiseTexel[index % 4] * 2. * PI));\n \t\tmat2 rotationMatrix = mat2(noiseVec.x, -noiseVec.y, noiseVec.x, noiseVec.y);\n\t\t\n\t\t\tfloat totalWeight = 1.0;\n\t\t\tvec3 denoised = texel.rgb;\n\t\t\tfor (int i = 0; i < SAMPLES; i++) {\n\t\t\t\tvec3 sampleDir = poissonDisk[i];\n\t\t\t\tvec2 offset = rotationMatrix * (sampleDir.xy * (1. + sampleDir.z * (radius - 1.)) / resolution);\n\t\t\t\tvec2 sampleUv = vUv + offset;\n\t\t\t\tdenoiseSample(center, viewNormal, viewPos, sampleUv, denoised, totalWeight);\n\t\t\t}\n\t\t\n\t\t\tif (totalWeight > 0.) { \n\t\t\t\tdenoised /= totalWeight;\n\t\t\t}\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}`\n\n};\n\nfunction generatePdSamplePointInitializer( samples, rings, radiusExponent ) {\n\n\tconst poissonDisk = generateDenoiseSamples(\n\t\tsamples,\n\t\trings,\n\t\tradiusExponent,\n\t);\n\n\tlet glslCode = 'vec3[SAMPLES](';\n\n\tfor ( let i = 0; i < samples; i ++ ) {\n\n\t\tconst sample = poissonDisk[ i ];\n\t\tglslCode += `vec3(${sample.x}, ${sample.y}, ${sample.z})${( i < samples - 1 ) ? ',' : ')'}`;\n\n\t}\n\n\treturn glslCode;\n\n}\n\nfunction generateDenoiseSamples( numSamples, numRings, radiusExponent ) {\n\n\tconst samples = [];\n\n\tfor ( let i = 0; i < numSamples; i ++ ) {\n\n\t\tconst angle = 2 * Math.PI * numRings * i / numSamples;\n\t\tconst radius = Math.pow( i / ( numSamples - 1 ), radiusExponent );\n\t\tsamples.push( new Vector3( Math.cos( angle ), Math.sin( angle ), radius ) );\n\n\t}\n\n\treturn samples;\n\n}\n\nexport { generatePdSamplePointInitializer, PoissonDenoiseShader };\n", "import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDataTexture,\n\tDepthTexture,\n\tDepthStencilFormat,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tHalfFloatType,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRepeatWrapping,\n\tRGBAFormat,\n\tShaderMaterial,\n\tUniformsUtils,\n\tUnsignedByteType,\n\tUnsignedInt248Type,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader } from '../shaders/GTAOShader.js';\nimport { generatePdSamplePointInitializer, PoissonDenoiseShader } from '../shaders/PoissonDenoiseShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { SimplexNoise } from '../math/SimplexNoise.js';\n\nclass GTAOPass extends Pass {\n\n\tconstructor( scene, camera, width, height, parameters, aoParameters, pdParameters ) {\n\n\t\tsuper();\n\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\t\tthis.clear = true;\n\t\tthis.camera = camera;\n\t\tthis.scene = scene;\n\t\tthis.output = 0;\n\t\tthis._renderGBuffer = true;\n\t\tthis._visibilityCache = new Map();\n\t\tthis.blendIntensity = 1.;\n\n\t\tthis.pdRings = 2.;\n\t\tthis.pdRadiusExponent = 2.;\n\t\tthis.pdSamples = 16;\n\n\t\tthis.gtaoNoiseTexture = generateMagicSquareNoise();\n\t\tthis.pdNoiseTexture = this.generateNoise();\n\n\t\tthis.gtaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );\n\t\tthis.pdRenderTarget = this.gtaoRenderTarget.clone();\n\n\t\tthis.gtaoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, GTAOShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( GTAOShader.uniforms ),\n\t\t\tvertexShader: GTAOShader.vertexShader,\n\t\t\tfragmentShader: GTAOShader.fragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.gtaoMaterial.defines.PERSPECTIVE_CAMERA = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.gtaoMaterial.uniforms.tNoise.value = this.gtaoNoiseTexture;\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\tthis.pdMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, PoissonDenoiseShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( PoissonDenoiseShader.uniforms ),\n\t\t\tvertexShader: PoissonDenoiseShader.vertexShader,\n\t\t\tfragmentShader: PoissonDenoiseShader.fragmentShader,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.pdMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\tthis.pdMaterial.uniforms.tNoise.value = this.pdNoiseTexture;\n\t\tthis.pdMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.pdMaterial.uniforms.lumaPhi.value = 10;\n\t\tthis.pdMaterial.uniforms.depthPhi.value = 2;\n\t\tthis.pdMaterial.uniforms.normalPhi.value = 3;\n\t\tthis.pdMaterial.uniforms.radius.value = 8;\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, GTAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( GTAODepthShader.uniforms ),\n\t\t\tvertexShader: GTAODepthShader.vertexShader,\n\t\t\tfragmentShader: GTAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.blendMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( GTAOBlendShader.uniforms ),\n\t\t\tvertexShader: GTAOBlendShader.vertexShader,\n\t\t\tfragmentShader: GTAOBlendShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblending: CustomBlending,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.originalClearColor = new Color();\n\n\t\tthis.setGBuffer( parameters ? parameters.depthTexture : undefined, parameters ? parameters.normalTexture : undefined );\n\n\t\tif ( aoParameters !== undefined ) {\n\n\t\t\tthis.updateGtaoMaterial( aoParameters );\n\n\t\t}\n\n\t\tif ( pdParameters !== undefined ) {\n\n\t\t\tthis.updatePdMaterial( pdParameters );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.gtaoNoiseTexture.dispose();\n\t\tthis.pdNoiseTexture.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.gtaoRenderTarget.dispose();\n\t\tthis.pdRenderTarget.dispose();\n\t\tthis.normalMaterial.dispose();\n\t\tthis.pdMaterial.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tget gtaoMap() {\n\n\t\treturn this.pdRenderTarget.texture;\n\n\t}\n\n\tsetGBuffer( depthTexture, normalTexture ) {\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tthis.depthTexture = depthTexture;\n\t\t\tthis.normalTexture = normalTexture;\n\t\t\tthis._renderGBuffer = false;\n\n\t\t} else {\n\n\t\t\tthis.depthTexture = new DepthTexture();\n\t\t\tthis.depthTexture.format = DepthStencilFormat;\n\t\t\tthis.depthTexture.type = UnsignedInt248Type;\n\t\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\ttype: HalfFloatType,\n\t\t\t\tdepthTexture: this.depthTexture\n\t\t\t} );\n\t\t\tthis.normalTexture = this.normalRenderTarget.texture;\n\t\t\tthis._renderGBuffer = true;\n\n\t\t}\n\n\t\tconst normalVectorType = ( this.normalTexture ) ? 1 : 0;\n\t\tconst depthValueSource = ( this.depthTexture === this.normalTexture ) ? 'w' : 'x';\n\n\t\tthis.gtaoMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;\n\t\tthis.gtaoMaterial.defines.DEPTH_SWIZZLING = depthValueSource;\n\t\tthis.gtaoMaterial.uniforms.tNormal.value = this.normalTexture;\n\t\tthis.gtaoMaterial.uniforms.tDepth.value = this.depthTexture;\n\n\t\tthis.pdMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;\n\t\tthis.pdMaterial.defines.DEPTH_SWIZZLING = depthValueSource;\n\t\tthis.pdMaterial.uniforms.tNormal.value = this.normalTexture;\n\t\tthis.pdMaterial.uniforms.tDepth.value = this.depthTexture;\n\n\t\tthis.depthRenderMaterial.uniforms.tDepth.value = this.normalRenderTarget.depthTexture;\n\n\t}\n\n\tsetSceneClipBox( box ) {\n\n\t\tif ( box ) {\n\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX !== 1;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 1;\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMin.value.copy( box.min );\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMax.value.copy( box.max );\n\n\t\t} else {\n\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX === 0;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 0;\n\n\t\t}\n\n\t}\n\n\tupdateGtaoMaterial( parameters ) {\n\n\t\tif ( parameters.radius !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.radius.value = parameters.radius;\n\n\t\t}\n\n\t\tif ( parameters.distanceExponent !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.distanceExponent.value = parameters.distanceExponent;\n\n\t\t}\n\n\t\tif ( parameters.thickness !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.thickness.value = parameters.thickness;\n\n\t\t}\n\n\t\tif ( parameters.distanceFallOff !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.distanceFallOff.value = parameters.distanceFallOff;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( parameters.scale !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.scale.value = parameters.scale;\n\n\t\t}\n\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.gtaoMaterial.defines.SAMPLES ) {\n\n\t\t\tthis.gtaoMaterial.defines.SAMPLES = parameters.samples;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( parameters.screenSpaceRadius !== undefined && ( parameters.screenSpaceRadius ? 1 : 0 ) !== this.gtaoMaterial.defines.SCREEN_SPACE_RADIUS ) {\n\n\t\t\tthis.gtaoMaterial.defines.SCREEN_SPACE_RADIUS = parameters.screenSpaceRadius ? 1 : 0;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tupdatePdMaterial( parameters ) {\n\n\t\tlet updateShader = false;\n\n\t\tif ( parameters.lumaPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.lumaPhi.value = parameters.lumaPhi;\n\n\t\t}\n\n\t\tif ( parameters.depthPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.depthPhi.value = parameters.depthPhi;\n\n\t\t}\n\n\t\tif ( parameters.normalPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.normalPhi.value = parameters.normalPhi;\n\n\t\t}\n\n\t\tif ( parameters.radius !== undefined && parameters.radius !== this.radius ) {\n\n\t\t\tthis.pdMaterial.uniforms.radius.value = parameters.radius;\n\n\t\t}\n\n\t\tif ( parameters.radiusExponent !== undefined && parameters.radiusExponent !== this.pdRadiusExponent ) {\n\n\t\t\tthis.pdRadiusExponent = parameters.radiusExponent;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( parameters.rings !== undefined && parameters.rings !== this.pdRings ) {\n\n\t\t\tthis.pdRings = parameters.rings;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.pdSamples ) {\n\n\t\t\tthis.pdSamples = parameters.samples;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( updateShader ) {\n\n\t\t\tthis.pdMaterial.defines.SAMPLES = this.pdSamples;\n\t\t\tthis.pdMaterial.defines.SAMPLE_VECTORS = generatePdSamplePointInitializer( this.pdSamples, this.pdRings, this.pdRadiusExponent );\n\t\t\tthis.pdMaterial.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\t// render normals and depth (honor only meshes, points and lines do not contribute to AO)\n\n\t\tif ( this._renderGBuffer ) {\n\n\t\t\tthis.overrideVisibility();\n\t\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\t\t\tthis.restoreVisibility();\n\n\t\t}\n\n\t\t// render AO\n\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.gtaoMaterial.uniforms.cameraWorldMatrix.value.copy( this.camera.matrixWorld );\n\t\tthis.renderPass( renderer, this.gtaoMaterial, this.gtaoRenderTarget, 0xffffff, 1.0 );\n\n\t\t// render poisson denoise\n\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.renderPass( renderer, this.pdMaterial, this.pdRenderTarget, 0xffffff, 1.0 );\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase GTAOPass.OUTPUT.Off:\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Diffuse:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.AO:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Denoise:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Depth:\n\n\t\t\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\t\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Default:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tthis.blendMaterial.uniforms.intensity.value = this.blendIntensity;\n\t\t\t\tthis.blendMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis.renderPass( renderer, this.blendMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.GTAOPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.gtaoRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.pdRenderTarget.setSize( width, height );\n\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.pdMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\n\t}\n\n\toverrideVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tcache.set( object, object.visible );\n\n\t\t\tif ( object.isPoints || object.isLine ) object.visible = false;\n\n\t\t} );\n\n\t}\n\n\trestoreVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst visible = cache.get( object );\n\t\t\tobject.visible = visible;\n\n\t\t} );\n\n\t\tcache.clear();\n\n\t}\n\n\tgenerateNoise( size = 64 ) {\n\n\t\tconst simplex = new SimplexNoise();\n\n\t\tconst arraySize = size * size * 4;\n\t\tconst data = new Uint8Array( arraySize );\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < size; j ++ ) {\n\n\t\t\t\tconst x = i;\n\t\t\t\tconst y = j;\n\n\t\t\t\tdata[ ( i * size + j ) * 4 ] = ( simplex.noise( x, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 1 ] = ( simplex.noise( x + size, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 2 ] = ( simplex.noise( x, y + size ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 3 ] = ( simplex.noise( x + size, y + size ) * 0.5 + 0.5 ) * 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst noiseTexture = new DataTexture( data, size, size, RGBAFormat, UnsignedByteType );\n\t\tnoiseTexture.wrapS = RepeatWrapping;\n\t\tnoiseTexture.wrapT = RepeatWrapping;\n\t\tnoiseTexture.needsUpdate = true;\n\n\t\treturn noiseTexture;\n\n\t}\n\n}\n\nGTAOPass.OUTPUT = {\n\t'Off': - 1,\n\t'Default': 0,\n\t'Diffuse': 1,\n\t'Depth': 2,\n\t'Normal': 3,\n\t'AO': 4,\n\t'Denoise': 5,\n};\n\nexport { GTAOPass };\n", "/**\n * RGB Halftone shader for three.js.\n *\tNOTE:\n * \t\tShape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square)\n *\t\tBlending Mode (1 = Linear, 2 = Multiply, 3 = Add, 4 = Lighter, 5 = Darker)\n */\n\nconst HalftoneShader = {\n\n\tname: 'HalftoneShader',\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'shape': { value: 1 },\n\t\t'radius': { value: 4 },\n\t\t'rotateR': { value: Math.PI / 12 * 1 },\n\t\t'rotateG': { value: Math.PI / 12 * 2 },\n\t\t'rotateB': { value: Math.PI / 12 * 3 },\n\t\t'scatter': { value: 0 },\n\t\t'width': { value: 1 },\n\t\t'height': { value: 1 },\n\t\t'blending': { value: 1 },\n\t\t'blendingMode': { value: 1 },\n\t\t'greyscale': { value: false },\n\t\t'disable': { value: false }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUV;\n\n\t\tvoid main() {\n\n\t\t\tvUV = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define SQRT2_MINUS_ONE 0.41421356\n\t\t#define SQRT2_HALF_MINUS_ONE 0.20710678\n\t\t#define PI2 6.28318531\n\t\t#define SHAPE_DOT 1\n\t\t#define SHAPE_ELLIPSE 2\n\t\t#define SHAPE_LINE 3\n\t\t#define SHAPE_SQUARE 4\n\t\t#define BLENDING_LINEAR 1\n\t\t#define BLENDING_MULTIPLY 2\n\t\t#define BLENDING_ADD 3\n\t\t#define BLENDING_LIGHTER 4\n\t\t#define BLENDING_DARKER 5\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float radius;\n\t\tuniform float rotateR;\n\t\tuniform float rotateG;\n\t\tuniform float rotateB;\n\t\tuniform float scatter;\n\t\tuniform float width;\n\t\tuniform float height;\n\t\tuniform int shape;\n\t\tuniform bool disable;\n\t\tuniform float blending;\n\t\tuniform int blendingMode;\n\t\tvarying vec2 vUV;\n\t\tuniform bool greyscale;\n\t\tconst int samples = 8;\n\n\t\tfloat blend( float a, float b, float t ) {\n\n\t\t// linear blend\n\t\t\treturn a * ( 1.0 - t ) + b * t;\n\n\t\t}\n\n\t\tfloat hypot( float x, float y ) {\n\n\t\t// vector magnitude\n\t\t\treturn sqrt( x * x + y * y );\n\n\t\t}\n\n\t\tfloat rand( vec2 seed ){\n\n\t\t// get pseudo-random number\n\t\t\treturn fract( sin( dot( seed.xy, vec2( 12.9898, 78.233 ) ) ) * 43758.5453 );\n\n\t\t}\n\n\t\tfloat distanceToDotRadius( float channel, vec2 coord, vec2 normal, vec2 p, float angle, float rad_max ) {\n\n\t\t// apply shape-specific transforms\n\t\t\tfloat dist = hypot( coord.x - p.x, coord.y - p.y );\n\t\t\tfloat rad = channel;\n\n\t\t\tif ( shape == SHAPE_DOT ) {\n\n\t\t\t\trad = pow( abs( rad ), 1.125 ) * rad_max;\n\n\t\t\t} else if ( shape == SHAPE_ELLIPSE ) {\n\n\t\t\t\trad = pow( abs( rad ), 1.125 ) * rad_max;\n\n\t\t\t\tif ( dist != 0.0 ) {\n\t\t\t\t\tfloat dot_p = abs( ( p.x - coord.x ) / dist * normal.x + ( p.y - coord.y ) / dist * normal.y );\n\t\t\t\t\tdist = ( dist * ( 1.0 - SQRT2_HALF_MINUS_ONE ) ) + dot_p * dist * SQRT2_MINUS_ONE;\n\t\t\t\t}\n\n\t\t\t} else if ( shape == SHAPE_LINE ) {\n\n\t\t\t\trad = pow( abs( rad ), 1.5) * rad_max;\n\t\t\t\tfloat dot_p = ( p.x - coord.x ) * normal.x + ( p.y - coord.y ) * normal.y;\n\t\t\t\tdist = hypot( normal.x * dot_p, normal.y * dot_p );\n\n\t\t\t} else if ( shape == SHAPE_SQUARE ) {\n\n\t\t\t\tfloat theta = atan( p.y - coord.y, p.x - coord.x ) - angle;\n\t\t\t\tfloat sin_t = abs( sin( theta ) );\n\t\t\t\tfloat cos_t = abs( cos( theta ) );\n\t\t\t\trad = pow( abs( rad ), 1.4 );\n\t\t\t\trad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );\n\n\t\t\t}\n\n\t\t\treturn rad - dist;\n\n\t\t}\n\n\t\tstruct Cell {\n\n\t\t// grid sample positions\n\t\t\tvec2 normal;\n\t\t\tvec2 p1;\n\t\t\tvec2 p2;\n\t\t\tvec2 p3;\n\t\t\tvec2 p4;\n\t\t\tfloat samp2;\n\t\t\tfloat samp1;\n\t\t\tfloat samp3;\n\t\t\tfloat samp4;\n\n\t\t};\n\n\t\tvec4 getSample( vec2 point ) {\n\n\t\t// multi-sampled point\n\t\t\tvec4 tex = texture2D( tDiffuse, vec2( point.x / width, point.y / height ) );\n\t\t\tfloat base = rand( vec2( floor( point.x ), floor( point.y ) ) ) * PI2;\n\t\t\tfloat step = PI2 / float( samples );\n\t\t\tfloat dist = radius * 0.66;\n\n\t\t\tfor ( int i = 0; i < samples; ++i ) {\n\n\t\t\t\tfloat r = base + step * float( i );\n\t\t\t\tvec2 coord = point + vec2( cos( r ) * dist, sin( r ) * dist );\n\t\t\t\ttex += texture2D( tDiffuse, vec2( coord.x / width, coord.y / height ) );\n\n\t\t\t}\n\n\t\t\ttex /= float( samples ) + 1.0;\n\t\t\treturn tex;\n\n\t\t}\n\n\t\tfloat getDotColour( Cell c, vec2 p, int channel, float angle, float aa ) {\n\n\t\t// get colour for given point\n\t\t\tfloat dist_c_1, dist_c_2, dist_c_3, dist_c_4, res;\n\n\t\t\tif ( channel == 0 ) {\n\n\t\t\t\tc.samp1 = getSample( c.p1 ).r;\n\t\t\t\tc.samp2 = getSample( c.p2 ).r;\n\t\t\t\tc.samp3 = getSample( c.p3 ).r;\n\t\t\t\tc.samp4 = getSample( c.p4 ).r;\n\n\t\t\t} else if (channel == 1) {\n\n\t\t\t\tc.samp1 = getSample( c.p1 ).g;\n\t\t\t\tc.samp2 = getSample( c.p2 ).g;\n\t\t\t\tc.samp3 = getSample( c.p3 ).g;\n\t\t\t\tc.samp4 = getSample( c.p4 ).g;\n\n\t\t\t} else {\n\n\t\t\t\tc.samp1 = getSample( c.p1 ).b;\n\t\t\t\tc.samp3 = getSample( c.p3 ).b;\n\t\t\t\tc.samp2 = getSample( c.p2 ).b;\n\t\t\t\tc.samp4 = getSample( c.p4 ).b;\n\n\t\t\t}\n\n\t\t\tdist_c_1 = distanceToDotRadius( c.samp1, c.p1, c.normal, p, angle, radius );\n\t\t\tdist_c_2 = distanceToDotRadius( c.samp2, c.p2, c.normal, p, angle, radius );\n\t\t\tdist_c_3 = distanceToDotRadius( c.samp3, c.p3, c.normal, p, angle, radius );\n\t\t\tdist_c_4 = distanceToDotRadius( c.samp4, c.p4, c.normal, p, angle, radius );\n\t\t\tres = ( dist_c_1 > 0.0 ) ? clamp( dist_c_1 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres += ( dist_c_2 > 0.0 ) ? clamp( dist_c_2 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres += ( dist_c_3 > 0.0 ) ? clamp( dist_c_3 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres += ( dist_c_4 > 0.0 ) ? clamp( dist_c_4 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres = clamp( res, 0.0, 1.0 );\n\n\t\t\treturn res;\n\n\t\t}\n\n\t\tCell getReferenceCell( vec2 p, vec2 origin, float grid_angle, float step ) {\n\n\t\t// get containing cell\n\t\t\tCell c;\n\n\t\t// calc grid\n\t\t\tvec2 n = vec2( cos( grid_angle ), sin( grid_angle ) );\n\t\t\tfloat threshold = step * 0.5;\n\t\t\tfloat dot_normal = n.x * ( p.x - origin.x ) + n.y * ( p.y - origin.y );\n\t\t\tfloat dot_line = -n.y * ( p.x - origin.x ) + n.x * ( p.y - origin.y );\n\t\t\tvec2 offset = vec2( n.x * dot_normal, n.y * dot_normal );\n\t\t\tfloat offset_normal = mod( hypot( offset.x, offset.y ), step );\n\t\t\tfloat normal_dir = ( dot_normal < 0.0 ) ? 1.0 : -1.0;\n\t\t\tfloat normal_scale = ( ( offset_normal < threshold ) ? -offset_normal : step - offset_normal ) * normal_dir;\n\t\t\tfloat offset_line = mod( hypot( ( p.x - offset.x ) - origin.x, ( p.y - offset.y ) - origin.y ), step );\n\t\t\tfloat line_dir = ( dot_line < 0.0 ) ? 1.0 : -1.0;\n\t\t\tfloat line_scale = ( ( offset_line < threshold ) ? -offset_line : step - offset_line ) * line_dir;\n\n\t\t// get closest corner\n\t\t\tc.normal = n;\n\t\t\tc.p1.x = p.x - n.x * normal_scale + n.y * line_scale;\n\t\t\tc.p1.y = p.y - n.y * normal_scale - n.x * line_scale;\n\n\t\t// scatter\n\t\t\tif ( scatter != 0.0 ) {\n\n\t\t\t\tfloat off_mag = scatter * threshold * 0.5;\n\t\t\t\tfloat off_angle = rand( vec2( floor( c.p1.x ), floor( c.p1.y ) ) ) * PI2;\n\t\t\t\tc.p1.x += cos( off_angle ) * off_mag;\n\t\t\t\tc.p1.y += sin( off_angle ) * off_mag;\n\n\t\t\t}\n\n\t\t// find corners\n\t\t\tfloat normal_step = normal_dir * ( ( offset_normal < threshold ) ? step : -step );\n\t\t\tfloat line_step = line_dir * ( ( offset_line < threshold ) ? step : -step );\n\t\t\tc.p2.x = c.p1.x - n.x * normal_step;\n\t\t\tc.p2.y = c.p1.y - n.y * normal_step;\n\t\t\tc.p3.x = c.p1.x + n.y * line_step;\n\t\t\tc.p3.y = c.p1.y - n.x * line_step;\n\t\t\tc.p4.x = c.p1.x - n.x * normal_step + n.y * line_step;\n\t\t\tc.p4.y = c.p1.y - n.y * normal_step - n.x * line_step;\n\n\t\t\treturn c;\n\n\t\t}\n\n\t\tfloat blendColour( float a, float b, float t ) {\n\n\t\t// blend colours\n\t\t\tif ( blendingMode == BLENDING_LINEAR ) {\n\t\t\t\treturn blend( a, b, 1.0 - t );\n\t\t\t} else if ( blendingMode == BLENDING_ADD ) {\n\t\t\t\treturn blend( a, min( 1.0, a + b ), t );\n\t\t\t} else if ( blendingMode == BLENDING_MULTIPLY ) {\n\t\t\t\treturn blend( a, max( 0.0, a * b ), t );\n\t\t\t} else if ( blendingMode == BLENDING_LIGHTER ) {\n\t\t\t\treturn blend( a, max( a, b ), t );\n\t\t\t} else if ( blendingMode == BLENDING_DARKER ) {\n\t\t\t\treturn blend( a, min( a, b ), t );\n\t\t\t} else {\n\t\t\t\treturn blend( a, b, 1.0 - t );\n\t\t\t}\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tif ( ! disable ) {\n\n\t\t// setup\n\t\t\t\tvec2 p = vec2( vUV.x * width, vUV.y * height );\n\t\t\t\tvec2 origin = vec2( 0, 0 );\n\t\t\t\tfloat aa = ( radius < 2.5 ) ? radius * 0.5 : 1.25;\n\n\t\t// get channel samples\n\t\t\t\tCell cell_r = getReferenceCell( p, origin, rotateR, radius );\n\t\t\t\tCell cell_g = getReferenceCell( p, origin, rotateG, radius );\n\t\t\t\tCell cell_b = getReferenceCell( p, origin, rotateB, radius );\n\t\t\t\tfloat r = getDotColour( cell_r, p, 0, rotateR, aa );\n\t\t\t\tfloat g = getDotColour( cell_g, p, 1, rotateG, aa );\n\t\t\t\tfloat b = getDotColour( cell_b, p, 2, rotateB, aa );\n\n\t\t// blend with original\n\t\t\t\tvec4 colour = texture2D( tDiffuse, vUV );\n\t\t\t\tr = blendColour( r, colour.r, blending );\n\t\t\t\tg = blendColour( g, colour.g, blending );\n\t\t\t\tb = blendColour( b, colour.b, blending );\n\n\t\t\t\tif ( greyscale ) {\n\t\t\t\t\tr = g = b = (r + b + g) / 3.0;\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = vec4( r, g, b, 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tgl_FragColor = texture2D( tDiffuse, vUV );\n\n\t\t\t}\n\n\t\t}`\n\n};\n\nexport { HalftoneShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { HalftoneShader } from '../shaders/HalftoneShader.js';\n\n/**\n * RGB Halftone pass for three.js effects composer. Requires HalftoneShader.\n */\n\nclass HalftonePass extends Pass {\n\n\tconstructor( width, height, params ) {\n\n\t\tsuper();\n\n\t \tthis.uniforms = UniformsUtils.clone( HalftoneShader.uniforms );\n\t \tthis.material = new ShaderMaterial( {\n\t \t\tuniforms: this.uniforms,\n\t \t\tfragmentShader: HalftoneShader.fragmentShader,\n\t \t\tvertexShader: HalftoneShader.vertexShader\n\t \t} );\n\n\t\t// set params\n\t\tthis.uniforms.width.value = width;\n\t\tthis.uniforms.height.value = height;\n\n\t\tfor ( const key in params ) {\n\n\t\t\tif ( params.hasOwnProperty( key ) && this.uniforms.hasOwnProperty( key ) ) {\n\n\t\t\t\tthis.uniforms[ key ].value = params[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n \t\tthis.material.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\n \t\tif ( this.renderToScreen ) {\n\n \t\t\trenderer.setRenderTarget( null );\n \t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n \t\t\trenderer.setRenderTarget( writeBuffer );\n \t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n \t}\n\n \tsetSize( width, height ) {\n\n \t\tthis.uniforms.width.value = width;\n \t\tthis.uniforms.height.value = height;\n\n \t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { HalftonePass };\n", "import { ShaderPass } from './ShaderPass.js';\n\nconst LUTShader = {\n\n\tname: 'LUTShader',\n\n\tuniforms: {\n\n\t\tlut: { value: null },\n\t\tlutSize: { value: 0 },\n\n\t\ttDiffuse: { value: null },\n\t\tintensity: { value: 1.0 },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float lutSize;\n\t\tuniform sampler3D lut;\n\n\t\tvarying vec2 vUv;\n\t\tuniform float intensity;\n\t\tuniform sampler2D tDiffuse;\n\t\tvoid main() {\n\n\t\t\tvec4 val = texture2D( tDiffuse, vUv );\n\t\t\tvec4 lutVal;\n\n\t\t\t// pull the sample in by half a pixel so the sample begins\n\t\t\t// at the center of the edge pixels.\n\t\t\tfloat pixelWidth = 1.0 / lutSize;\n\t\t\tfloat halfPixelWidth = 0.5 / lutSize;\n\t\t\tvec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth );\n\n\n\t\t\tlutVal = vec4( texture( lut, uvw ).rgb, val.a );\n\n\t\t\tgl_FragColor = vec4( mix( val, lutVal, intensity ) );\n\n\t\t}\n\n\t`,\n\n};\n\nclass LUTPass extends ShaderPass {\n\n\tset lut( v ) {\n\n\t\tconst material = this.material;\n\n\t\tif ( v !== this.lut ) {\n\n\t\t\tmaterial.uniforms.lut.value = null;\n\n\t\t\tif ( v ) {\n\n\t\t\t\tmaterial.uniforms.lutSize.value = v.image.width;\n\t\t\t\tmaterial.uniforms.lut.value = v;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tget lut() {\n\n\t\treturn this.material.uniforms.lut.value;\n\n\t}\n\n\tset intensity( v ) {\n\n\t\tthis.material.uniforms.intensity.value = v;\n\n\t}\n\n\tget intensity() {\n\n\t\treturn this.material.uniforms.intensity.value;\n\n\t}\n\n\tconstructor( options = {} ) {\n\n\t\tsuper( LUTShader );\n\t\tthis.lut = options.lut || null;\n\t\tthis.intensity = 'intensity' in options ? options.intensity : 1;\n\n\t}\n\n}\n\nexport { LUTPass };\n", "import {\n\tAdditiveBlending,\n\tColor,\n\tDoubleSide,\n\tHalfFloatType,\n\tMatrix4,\n\tMeshDepthMaterial,\n\tNoBlending,\n\tRGBADepthPacking,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass OutlinePass extends Pass {\n\n\tconstructor( resolution, scene, camera, selectedObjects ) {\n\n\t\tsuper();\n\n\t\tthis.renderScene = scene;\n\t\tthis.renderCamera = camera;\n\t\tthis.selectedObjects = selectedObjects !== undefined ? selectedObjects : [];\n\t\tthis.visibleEdgeColor = new Color( 1, 1, 1 );\n\t\tthis.hiddenEdgeColor = new Color( 0.1, 0.04, 0.02 );\n\t\tthis.edgeGlow = 0.0;\n\t\tthis.usePatternTexture = false;\n\t\tthis.edgeThickness = 1.0;\n\t\tthis.edgeStrength = 3.0;\n\t\tthis.downSampleRatio = 2;\n\t\tthis.pulsePeriod = 0;\n\n\t\tthis._visibilityCache = new Map();\n\n\n\t\tthis.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );\n\n\t\tconst resx = Math.round( this.resolution.x / this.downSampleRatio );\n\t\tconst resy = Math.round( this.resolution.y / this.downSampleRatio );\n\n\t\tthis.renderTargetMaskBuffer = new WebGLRenderTarget( this.resolution.x, this.resolution.y );\n\t\tthis.renderTargetMaskBuffer.texture.name = 'OutlinePass.mask';\n\t\tthis.renderTargetMaskBuffer.texture.generateMipmaps = false;\n\n\t\tthis.depthMaterial = new MeshDepthMaterial();\n\t\tthis.depthMaterial.side = DoubleSide;\n\t\tthis.depthMaterial.depthPacking = RGBADepthPacking;\n\t\tthis.depthMaterial.blending = NoBlending;\n\n\t\tthis.prepareMaskMaterial = this.getPrepareMaskMaterial();\n\t\tthis.prepareMaskMaterial.side = DoubleSide;\n\t\tthis.prepareMaskMaterial.fragmentShader = replaceDepthToViewZ( this.prepareMaskMaterial.fragmentShader, this.renderCamera );\n\n\t\tthis.renderTargetDepthBuffer = new WebGLRenderTarget( this.resolution.x, this.resolution.y, { type: HalfFloatType } );\n\t\tthis.renderTargetDepthBuffer.texture.name = 'OutlinePass.depth';\n\t\tthis.renderTargetDepthBuffer.texture.generateMipmaps = false;\n\n\t\tthis.renderTargetMaskDownSampleBuffer = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetMaskDownSampleBuffer.texture.name = 'OutlinePass.depthDownSample';\n\t\tthis.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = false;\n\n\t\tthis.renderTargetBlurBuffer1 = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetBlurBuffer1.texture.name = 'OutlinePass.blur1';\n\t\tthis.renderTargetBlurBuffer1.texture.generateMipmaps = false;\n\t\tthis.renderTargetBlurBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ), { type: HalfFloatType } );\n\t\tthis.renderTargetBlurBuffer2.texture.name = 'OutlinePass.blur2';\n\t\tthis.renderTargetBlurBuffer2.texture.generateMipmaps = false;\n\n\t\tthis.edgeDetectionMaterial = this.getEdgeDetectionMaterial();\n\t\tthis.renderTargetEdgeBuffer1 = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetEdgeBuffer1.texture.name = 'OutlinePass.edge1';\n\t\tthis.renderTargetEdgeBuffer1.texture.generateMipmaps = false;\n\t\tthis.renderTargetEdgeBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ), { type: HalfFloatType } );\n\t\tthis.renderTargetEdgeBuffer2.texture.name = 'OutlinePass.edge2';\n\t\tthis.renderTargetEdgeBuffer2.texture.generateMipmaps = false;\n\n\t\tconst MAX_EDGE_THICKNESS = 4;\n\t\tconst MAX_EDGE_GLOW = 4;\n\n\t\tthis.separableBlurMaterial1 = this.getSeperableBlurMaterial( MAX_EDGE_THICKNESS );\n\t\tthis.separableBlurMaterial1.uniforms[ 'texSize' ].value.set( resx, resy );\n\t\tthis.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = 1;\n\t\tthis.separableBlurMaterial2 = this.getSeperableBlurMaterial( MAX_EDGE_GLOW );\n\t\tthis.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( Math.round( resx / 2 ), Math.round( resy / 2 ) );\n\t\tthis.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW;\n\n\t\t// Overlay material\n\t\tthis.overlayMaterial = this.getOverlayMaterial();\n\n\t\t// copy material\n\n\t\tconst copyShader = CopyShader;\n\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.materialCopy = new ShaderMaterial( {\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\t\t} );\n\n\t\tthis.enabled = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis._oldClearColor = new Color();\n\t\tthis.oldClearAlpha = 1;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.tempPulseColor1 = new Color();\n\t\tthis.tempPulseColor2 = new Color();\n\t\tthis.textureMatrix = new Matrix4();\n\n\t\tfunction replaceDepthToViewZ( string, camera ) {\n\n\t\t\tconst type = camera.isPerspectiveCamera ? 'perspective' : 'orthographic';\n\n\t\t\treturn string.replace( /DEPTH_TO_VIEW_Z/g, type + 'DepthToViewZ' );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTargetMaskBuffer.dispose();\n\t\tthis.renderTargetDepthBuffer.dispose();\n\t\tthis.renderTargetMaskDownSampleBuffer.dispose();\n\t\tthis.renderTargetBlurBuffer1.dispose();\n\t\tthis.renderTargetBlurBuffer2.dispose();\n\t\tthis.renderTargetEdgeBuffer1.dispose();\n\t\tthis.renderTargetEdgeBuffer2.dispose();\n\n\t\tthis.depthMaterial.dispose();\n\t\tthis.prepareMaskMaterial.dispose();\n\t\tthis.edgeDetectionMaterial.dispose();\n\t\tthis.separableBlurMaterial1.dispose();\n\t\tthis.separableBlurMaterial2.dispose();\n\t\tthis.overlayMaterial.dispose();\n\t\tthis.materialCopy.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.renderTargetMaskBuffer.setSize( width, height );\n\t\tthis.renderTargetDepthBuffer.setSize( width, height );\n\n\t\tlet resx = Math.round( width / this.downSampleRatio );\n\t\tlet resy = Math.round( height / this.downSampleRatio );\n\t\tthis.renderTargetMaskDownSampleBuffer.setSize( resx, resy );\n\t\tthis.renderTargetBlurBuffer1.setSize( resx, resy );\n\t\tthis.renderTargetEdgeBuffer1.setSize( resx, resy );\n\t\tthis.separableBlurMaterial1.uniforms[ 'texSize' ].value.set( resx, resy );\n\n\t\tresx = Math.round( resx / 2 );\n\t\tresy = Math.round( resy / 2 );\n\n\t\tthis.renderTargetBlurBuffer2.setSize( resx, resy );\n\t\tthis.renderTargetEdgeBuffer2.setSize( resx, resy );\n\n\t\tthis.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( resx, resy );\n\n\t}\n\n\tchangeVisibilityOfSelectedObjects( bVisible ) {\n\n\t\tconst cache = this._visibilityCache;\n\n\t\tfunction gatherSelectedMeshesCallBack( object ) {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( bVisible === true ) {\n\n\t\t\t\t\tobject.visible = cache.get( object );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcache.set( object, object.visible );\n\t\t\t\t\tobject.visible = bVisible;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.selectedObjects.length; i ++ ) {\n\n\t\t\tconst selectedObject = this.selectedObjects[ i ];\n\t\t\tselectedObject.traverse( gatherSelectedMeshesCallBack );\n\n\t\t}\n\n\t}\n\n\tchangeVisibilityOfNonSelectedObjects( bVisible ) {\n\n\t\tconst cache = this._visibilityCache;\n\t\tconst selectedMeshes = [];\n\n\t\tfunction gatherSelectedMeshesCallBack( object ) {\n\n\t\t\tif ( object.isMesh ) selectedMeshes.push( object );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.selectedObjects.length; i ++ ) {\n\n\t\t\tconst selectedObject = this.selectedObjects[ i ];\n\t\t\tselectedObject.traverse( gatherSelectedMeshesCallBack );\n\n\t\t}\n\n\t\tfunction VisibilityChangeCallBack( object ) {\n\n\t\t\tif ( object.isMesh || object.isSprite ) {\n\n\t\t\t\t// only meshes and sprites are supported by OutlinePass\n\n\t\t\t\tlet bFound = false;\n\n\t\t\t\tfor ( let i = 0; i < selectedMeshes.length; i ++ ) {\n\n\t\t\t\t\tconst selectedObjectId = selectedMeshes[ i ].id;\n\n\t\t\t\t\tif ( selectedObjectId === object.id ) {\n\n\t\t\t\t\t\tbFound = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( bFound === false ) {\n\n\t\t\t\t\tconst visibility = object.visible;\n\n\t\t\t\t\tif ( bVisible === false || cache.get( object ) === true ) {\n\n\t\t\t\t\t\tobject.visible = bVisible;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcache.set( object, visibility );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints || object.isLine ) {\n\n\t\t\t\t// the visibilty of points and lines is always set to false in order to\n\t\t\t\t// not affect the outline computation\n\n\t\t\t\tif ( bVisible === true ) {\n\n\t\t\t\t\tobject.visible = cache.get( object ); // restore\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcache.set( object, object.visible );\n\t\t\t\t\tobject.visible = bVisible;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderScene.traverse( VisibilityChangeCallBack );\n\n\t}\n\n\tupdateTextureMatrix() {\n\n\t\tthis.textureMatrix.set( 0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0 );\n\t\tthis.textureMatrix.multiply( this.renderCamera.projectionMatrix );\n\t\tthis.textureMatrix.multiply( this.renderCamera.matrixWorldInverse );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tif ( this.selectedObjects.length > 0 ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\t\t\tconst oldAutoClear = renderer.autoClear;\n\n\t\t\trenderer.autoClear = false;\n\n\t\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t\trenderer.setClearColor( 0xffffff, 1 );\n\n\t\t\t// Make selected objects invisible\n\t\t\tthis.changeVisibilityOfSelectedObjects( false );\n\n\t\t\tconst currentBackground = this.renderScene.background;\n\t\t\tthis.renderScene.background = null;\n\n\t\t\t// 1. Draw Non Selected objects in the depth buffer\n\t\t\tthis.renderScene.overrideMaterial = this.depthMaterial;\n\t\t\trenderer.setRenderTarget( this.renderTargetDepthBuffer );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.renderScene, this.renderCamera );\n\n\t\t\t// Make selected objects visible\n\t\t\tthis.changeVisibilityOfSelectedObjects( true );\n\t\t\tthis._visibilityCache.clear();\n\n\t\t\t// Update Texture Matrix for Depth compare\n\t\t\tthis.updateTextureMatrix();\n\n\t\t\t// Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects\n\t\t\tthis.changeVisibilityOfNonSelectedObjects( false );\n\t\t\tthis.renderScene.overrideMaterial = this.prepareMaskMaterial;\n\t\t\tthis.prepareMaskMaterial.uniforms[ 'cameraNearFar' ].value.set( this.renderCamera.near, this.renderCamera.far );\n\t\t\tthis.prepareMaskMaterial.uniforms[ 'depthTexture' ].value = this.renderTargetDepthBuffer.texture;\n\t\t\tthis.prepareMaskMaterial.uniforms[ 'textureMatrix' ].value = this.textureMatrix;\n\t\t\trenderer.setRenderTarget( this.renderTargetMaskBuffer );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.renderScene, this.renderCamera );\n\t\t\tthis.renderScene.overrideMaterial = null;\n\t\t\tthis.changeVisibilityOfNonSelectedObjects( true );\n\t\t\tthis._visibilityCache.clear();\n\n\t\t\tthis.renderScene.background = currentBackground;\n\n\t\t\t// 2. Downsample to Half resolution\n\t\t\tthis.fsQuad.material = this.materialCopy;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.renderTargetMaskBuffer.texture;\n\t\t\trenderer.setRenderTarget( this.renderTargetMaskDownSampleBuffer );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\tthis.tempPulseColor1.copy( this.visibleEdgeColor );\n\t\t\tthis.tempPulseColor2.copy( this.hiddenEdgeColor );\n\n\t\t\tif ( this.pulsePeriod > 0 ) {\n\n\t\t\t\tconst scalar = ( 1 + 0.25 ) / 2 + Math.cos( performance.now() * 0.01 / this.pulsePeriod ) * ( 1.0 - 0.25 ) / 2;\n\t\t\t\tthis.tempPulseColor1.multiplyScalar( scalar );\n\t\t\t\tthis.tempPulseColor2.multiplyScalar( scalar );\n\n\t\t\t}\n\n\t\t\t// 3. Apply Edge Detection Pass\n\t\t\tthis.fsQuad.material = this.edgeDetectionMaterial;\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskDownSampleBuffer.texture;\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'texSize' ].value.set( this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height );\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'visibleEdgeColor' ].value = this.tempPulseColor1;\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'hiddenEdgeColor' ].value = this.tempPulseColor2;\n\t\t\trenderer.setRenderTarget( this.renderTargetEdgeBuffer1 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t// 4. Apply Blur on Half res\n\t\t\tthis.fsQuad.material = this.separableBlurMaterial1;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = this.edgeThickness;\n\t\t\trenderer.setRenderTarget( this.renderTargetBlurBuffer1 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetBlurBuffer1.texture;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetEdgeBuffer1 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t// Apply Blur on quarter res\n\t\t\tthis.fsQuad.material = this.separableBlurMaterial2;\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;\n\t\t\trenderer.setRenderTarget( this.renderTargetBlurBuffer2 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetBlurBuffer2.texture;\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetEdgeBuffer2 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t// Blend it additively over the input texture\n\t\t\tthis.fsQuad.material = this.overlayMaterial;\n\t\t\tthis.overlayMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskBuffer.texture;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeTexture1' ].value = this.renderTargetEdgeBuffer1.texture;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeTexture2' ].value = this.renderTargetEdgeBuffer2.texture;\n\t\t\tthis.overlayMaterial.uniforms[ 'patternTexture' ].value = this.patternTexture;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeStrength' ].value = this.edgeStrength;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeGlow' ].value = this.edgeGlow;\n\t\t\tthis.overlayMaterial.uniforms[ 'usePatternTexture' ].value = this.usePatternTexture;\n\n\n\t\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\t\trenderer.setRenderTarget( readBuffer );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\trenderer.setClearColor( this._oldClearColor, this.oldClearAlpha );\n\t\t\trenderer.autoClear = oldAutoClear;\n\n\t\t}\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis.fsQuad.material = this.materialCopy;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tgetPrepareMaskMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\t\t\t\t'depthTexture': { value: null },\n\t\t\t\t'cameraNearFar': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'textureMatrix': { value: null }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`#include \n\t\t\t\t#include \n\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t\tvPosition = mvPosition;\n\n\t\t\t\t\tvec4 worldPosition = vec4( transformed, 1.0 );\n\n\t\t\t\t\t#ifdef USE_INSTANCING\n\n\t\t\t\t\t\tworldPosition = instanceMatrix * worldPosition;\n\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\tworldPosition = modelMatrix * worldPosition;\n\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include \n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n\t\t\t\t\tfloat viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y );\n\t\t\t\t\tfloat depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0;\n\t\t\t\t\tgl_FragColor = vec4(0.0, depthTest, 1.0, 1.0);\n\n\t\t\t\t}`\n\n\t\t} );\n\n\t}\n\n\tgetEdgeDetectionMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\t\t\t\t'maskTexture': { value: null },\n\t\t\t\t'texSize': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'visibleEdgeColor': { value: new Vector3( 1.0, 1.0, 1.0 ) },\n\t\t\t\t'hiddenEdgeColor': { value: new Vector3( 1.0, 1.0, 1.0 ) },\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec3 visibleEdgeColor;\n\t\t\t\tuniform vec3 hiddenEdgeColor;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tvec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);\n\t\t\t\t\tvec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);\n\t\t\t\t\tvec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);\n\t\t\t\t\tvec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);\n\t\t\t\t\tvec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);\n\t\t\t\t\tfloat diff1 = (c1.r - c2.r)*0.5;\n\t\t\t\t\tfloat diff2 = (c3.r - c4.r)*0.5;\n\t\t\t\t\tfloat d = length( vec2(diff1, diff2) );\n\t\t\t\t\tfloat a1 = min(c1.g, c2.g);\n\t\t\t\t\tfloat a2 = min(c3.g, c4.g);\n\t\t\t\t\tfloat visibilityFactor = min(a1, a2);\n\t\t\t\t\tvec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor;\n\t\t\t\t\tgl_FragColor = vec4(edgeColor, 1.0) * vec4(d);\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\tgetSeperableBlurMaterial( maxRadius ) {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'MAX_RADIUS': maxRadius,\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'colorTexture': { value: null },\n\t\t\t\t'texSize': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'direction': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'kernelRadius': { value: 1.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float kernelRadius;\n\n\t\t\t\tfloat gaussianPdf(in float x, in float sigma) {\n\t\t\t\t\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tfloat sigma = kernelRadius/2.0;\n\t\t\t\t\tfloat weightSum = gaussianPdf(0.0, sigma);\n\t\t\t\t\tvec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum;\n\t\t\t\t\tvec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);\n\t\t\t\t\tvec2 uvOffset = delta;\n\t\t\t\t\tfor( int i = 1; i <= MAX_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = kernelRadius * float(i) / float(MAX_RADIUS);\n\t\t\t\t\t\tfloat w = gaussianPdf(x, sigma);\n\t\t\t\t\t\tvec4 sample1 = texture2D( colorTexture, vUv + uvOffset);\n\t\t\t\t\t\tvec4 sample2 = texture2D( colorTexture, vUv - uvOffset);\n\t\t\t\t\t\tdiffuseSum += ((sample1 + sample2) * w);\n\t\t\t\t\t\tweightSum += (2.0 * w);\n\t\t\t\t\t\tuvOffset += delta;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = diffuseSum/weightSum;\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\tgetOverlayMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\t\t\t\t'maskTexture': { value: null },\n\t\t\t\t'edgeTexture1': { value: null },\n\t\t\t\t'edgeTexture2': { value: null },\n\t\t\t\t'patternTexture': { value: null },\n\t\t\t\t'edgeStrength': { value: 1.0 },\n\t\t\t\t'edgeGlow': { value: 1.0 },\n\t\t\t\t'usePatternTexture': { value: 0.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform sampler2D edgeTexture1;\n\t\t\t\tuniform sampler2D edgeTexture2;\n\t\t\t\tuniform sampler2D patternTexture;\n\t\t\t\tuniform float edgeStrength;\n\t\t\t\tuniform float edgeGlow;\n\t\t\t\tuniform bool usePatternTexture;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 edgeValue1 = texture2D(edgeTexture1, vUv);\n\t\t\t\t\tvec4 edgeValue2 = texture2D(edgeTexture2, vUv);\n\t\t\t\t\tvec4 maskColor = texture2D(maskTexture, vUv);\n\t\t\t\t\tvec4 patternColor = texture2D(patternTexture, 6.0 * vUv);\n\t\t\t\t\tfloat visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5;\n\t\t\t\t\tvec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;\n\t\t\t\t\tvec4 finalColor = edgeStrength * maskColor.r * edgeValue;\n\t\t\t\t\tif(usePatternTexture)\n\t\t\t\t\t\tfinalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);\n\t\t\t\t\tgl_FragColor = finalColor;\n\t\t\t\t}`,\n\t\t\tblending: AdditiveBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t}\n\n}\n\nOutlinePass.BlurDirectionX = new Vector2( 1.0, 0.0 );\nOutlinePass.BlurDirectionY = new Vector2( 0.0, 1.0 );\n\nexport { OutlinePass };\n", "const OutputShader = {\n\n\tname: 'OutputShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'toneMappingExposure': { value: 1 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tprecision highp float;\n\n\t\tuniform mat4 modelViewMatrix;\n\t\tuniform mat4 projectionMatrix;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\n\t\tprecision highp float;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\t#include \n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t// tone mapping\n\n\t\t\t#ifdef LINEAR_TONE_MAPPING\n\n\t\t\t\tgl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( REINHARD_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( CINEON_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = OptimizedCineonToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( ACES_FILMIC_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( AGX_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( NEUTRAL_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );\n\n\t\t\t#endif\n\n\t\t\t// color space\n\n\t\t\t#ifdef SRGB_TRANSFER\n\n\t\t\t\tgl_FragColor = sRGBTransferOETF( gl_FragColor );\n\n\t\t\t#endif\n\n\t\t}`\n\n};\n\nexport { OutputShader };\n", "import {\n\tColorManagement,\n\tRawShaderMaterial,\n\tUniformsUtils,\n\tLinearToneMapping,\n\tReinhardToneMapping,\n\tCineonToneMapping,\n\tAgXToneMapping,\n\tACESFilmicToneMapping,\n\tNeutralToneMapping,\n\tSRGBTransfer\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { OutputShader } from '../shaders/OutputShader.js';\n\nclass OutputPass extends Pass {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t//\n\n\t\tconst shader = OutputShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new RawShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t\t// internal cache\n\n\t\tthis._outputColorSpace = null;\n\t\tthis._toneMapping = null;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'toneMappingExposure' ].value = renderer.toneMappingExposure;\n\n\t\t// rebuild defines if required\n\n\t\tif ( this._outputColorSpace !== renderer.outputColorSpace || this._toneMapping !== renderer.toneMapping ) {\n\n\t\t\tthis._outputColorSpace = renderer.outputColorSpace;\n\t\t\tthis._toneMapping = renderer.toneMapping;\n\n\t\t\tthis.material.defines = {};\n\n\t\t\tif ( ColorManagement.getTransfer( this._outputColorSpace ) === SRGBTransfer ) this.material.defines.SRGB_TRANSFER = '';\n\n\t\t\tif ( this._toneMapping === LinearToneMapping ) this.material.defines.LINEAR_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === ReinhardToneMapping ) this.material.defines.REINHARD_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === CineonToneMapping ) this.material.defines.CINEON_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === AgXToneMapping ) this.material.defines.AGX_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === NeutralToneMapping ) this.material.defines.NEUTRAL_TONE_MAPPING = '';\n\n\t\t\tthis.material.needsUpdate = true;\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.renderToScreen === true ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { OutputPass };\n", "import {\n\tColor\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass RenderPass extends Pass {\n\n\tconstructor( scene, camera, overrideMaterial = null, clearColor = null, clearAlpha = null ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.overrideMaterial = overrideMaterial;\n\n\t\tthis.clearColor = clearColor;\n\t\tthis.clearAlpha = clearAlpha;\n\n\t\tthis.clear = true;\n\t\tthis.clearDepth = false;\n\t\tthis.needsSwap = false;\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tlet oldClearAlpha, oldOverrideMaterial;\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\toldOverrideMaterial = this.scene.overrideMaterial;\n\n\t\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\t}\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\trenderer.setClearColor( this.clearColor, renderer.getClearAlpha() );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\t\t\trenderer.setClearAlpha( this.clearAlpha );\n\n\t\t}\n\n\t\tif ( this.clearDepth == true ) {\n\n\t\t\trenderer.clearDepth();\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n\t\tif ( this.clear === true ) {\n\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// restore\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.setClearColor( this._oldClearColor );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\trenderer.setClearAlpha( oldClearAlpha );\n\n\t\t}\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\tthis.scene.overrideMaterial = oldOverrideMaterial;\n\n\t\t}\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n}\n\nexport { RenderPass };\n", "import {\n\tWebGLRenderTarget,\n\tMeshNormalMaterial,\n\tShaderMaterial,\n\tVector2,\n\tVector4,\n\tDepthTexture,\n\tNearestFilter,\n\tHalfFloatType\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\n\nclass RenderPixelatedPass extends Pass {\n\n\tconstructor( pixelSize, scene, camera, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.pixelSize = pixelSize;\n\t\tthis.resolution = new Vector2();\n\t\tthis.renderResolution = new Vector2();\n\n\t\tthis.pixelatedMaterial = this.createPixelatedMaterial();\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\n\t\tthis.fsQuad = new FullScreenQuad( this.pixelatedMaterial );\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.normalEdgeStrength = options.normalEdgeStrength || 0.3;\n\t\tthis.depthEdgeStrength = options.depthEdgeStrength || 0.4;\n\n\t\tthis.beautyRenderTarget = new WebGLRenderTarget();\n\t\tthis.beautyRenderTarget.texture.minFilter = NearestFilter;\n\t\tthis.beautyRenderTarget.texture.magFilter = NearestFilter;\n\t\tthis.beautyRenderTarget.texture.type = HalfFloatType;\n\t\tthis.beautyRenderTarget.depthTexture = new DepthTexture();\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget();\n\t\tthis.normalRenderTarget.texture.minFilter = NearestFilter;\n\t\tthis.normalRenderTarget.texture.magFilter = NearestFilter;\n\t\tthis.normalRenderTarget.texture.type = HalfFloatType;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.beautyRenderTarget.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\n\t\tthis.pixelatedMaterial.dispose();\n\t\tthis.normalMaterial.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.resolution.set( width, height );\n\t\tthis.renderResolution.set( ( width / this.pixelSize ) | 0, ( height / this.pixelSize ) | 0 );\n\t\tconst { x, y } = this.renderResolution;\n\t\tthis.beautyRenderTarget.setSize( x, y );\n\t\tthis.normalRenderTarget.setSize( x, y );\n\t\tthis.fsQuad.material.uniforms.resolution.value.set( x, y, 1 / x, 1 / y );\n\n\t}\n\n\tsetPixelSize( pixelSize ) {\n\n\t\tthis.pixelSize = pixelSize;\n\t\tthis.setSize( this.resolution.x, this.resolution.y );\n\n\t}\n\n\trender( renderer, writeBuffer ) {\n\n\t\tconst uniforms = this.fsQuad.material.uniforms;\n\t\tuniforms.normalEdgeStrength.value = this.normalEdgeStrength;\n\t\tuniforms.depthEdgeStrength.value = this.depthEdgeStrength;\n\n\t\trenderer.setRenderTarget( this.beautyRenderTarget );\n\t\trenderer.render( this.scene, this.camera );\n\n\t\tconst overrideMaterial_old = this.scene.overrideMaterial;\n\t\trenderer.setRenderTarget( this.normalRenderTarget );\n\t\tthis.scene.overrideMaterial = this.normalMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = overrideMaterial_old;\n\n\t\tuniforms.tDiffuse.value = this.beautyRenderTarget.texture;\n\t\tuniforms.tDepth.value = this.beautyRenderTarget.depthTexture;\n\t\tuniforms.tNormal.value = this.normalRenderTarget.texture;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\n\t\t\tif ( this.clear ) renderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n\tcreatePixelatedMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\t\t\tuniforms: {\n\t\t\t\ttDiffuse: { value: null },\n\t\t\t\ttDepth: { value: null },\n\t\t\t\ttNormal: { value: null },\n\t\t\t\tresolution: {\n\t\t\t\t\tvalue: new Vector4(\n\t\t\t\t\t\tthis.renderResolution.x,\n\t\t\t\t\t\tthis.renderResolution.y,\n\t\t\t\t\t\t1 / this.renderResolution.x,\n\t\t\t\t\t\t1 / this.renderResolution.y,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tnormalEdgeStrength: { value: 0 },\n\t\t\t\tdepthEdgeStrength: { value: 0 }\n\t\t\t},\n\t\t\tvertexShader: /* glsl */`\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfragmentShader: /* glsl */`\n\t\t\t\tuniform sampler2D tDiffuse;\n\t\t\t\tuniform sampler2D tDepth;\n\t\t\t\tuniform sampler2D tNormal;\n\t\t\t\tuniform vec4 resolution;\n\t\t\t\tuniform float normalEdgeStrength;\n\t\t\t\tuniform float depthEdgeStrength;\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\tfloat getDepth(int x, int y) {\n\n\t\t\t\t\treturn texture2D( tDepth, vUv + vec2(x, y) * resolution.zw ).r;\n\n\t\t\t\t}\n\n\t\t\t\tvec3 getNormal(int x, int y) {\n\n\t\t\t\t\treturn texture2D( tNormal, vUv + vec2(x, y) * resolution.zw ).rgb * 2.0 - 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tfloat depthEdgeIndicator(float depth, vec3 normal) {\n\n\t\t\t\t\tfloat diff = 0.0;\n\t\t\t\t\tdiff += clamp(getDepth(1, 0) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(-1, 0) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(0, 1) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(0, -1) - depth, 0.0, 1.0);\n\t\t\t\t\treturn floor(smoothstep(0.01, 0.02, diff) * 2.) / 2.;\n\n\t\t\t\t}\n\n\t\t\t\tfloat neighborNormalEdgeIndicator(int x, int y, float depth, vec3 normal) {\n\n\t\t\t\t\tfloat depthDiff = getDepth(x, y) - depth;\n\t\t\t\t\tvec3 neighborNormal = getNormal(x, y);\n\n\t\t\t\t\t// Edge pixels should yield to faces who's normals are closer to the bias normal.\n\t\t\t\t\tvec3 normalEdgeBias = vec3(1., 1., 1.); // This should probably be a parameter.\n\t\t\t\t\tfloat normalDiff = dot(normal - neighborNormal, normalEdgeBias);\n\t\t\t\t\tfloat normalIndicator = clamp(smoothstep(-.01, .01, normalDiff), 0.0, 1.0);\n\n\t\t\t\t\t// Only the shallower pixel should detect the normal edge.\n\t\t\t\t\tfloat depthIndicator = clamp(sign(depthDiff * .25 + .0025), 0.0, 1.0);\n\n\t\t\t\t\treturn (1.0 - dot(normal, neighborNormal)) * depthIndicator * normalIndicator;\n\n\t\t\t\t}\n\n\t\t\t\tfloat normalEdgeIndicator(float depth, vec3 normal) {\n\n\t\t\t\t\tfloat indicator = 0.0;\n\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(0, -1, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(0, 1, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(-1, 0, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(1, 0, depth, normal);\n\n\t\t\t\t\treturn step(0.1, indicator);\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\t\t\tfloat depth = 0.0;\n\t\t\t\t\tvec3 normal = vec3(0.0);\n\n\t\t\t\t\tif (depthEdgeStrength > 0.0 || normalEdgeStrength > 0.0) {\n\n\t\t\t\t\t\tdepth = getDepth(0, 0);\n\t\t\t\t\t\tnormal = getNormal(0, 0);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat dei = 0.0;\n\t\t\t\t\tif (depthEdgeStrength > 0.0)\n\t\t\t\t\t\tdei = depthEdgeIndicator(depth, normal);\n\n\t\t\t\t\tfloat nei = 0.0;\n\t\t\t\t\tif (normalEdgeStrength > 0.0)\n\t\t\t\t\t\tnei = normalEdgeIndicator(depth, normal);\n\n\t\t\t\t\tfloat Strength = dei > 0.0 ? (1.0 - depthEdgeStrength * dei) : (1.0 + normalEdgeStrength * nei);\n\n\t\t\t\t\tgl_FragColor = texel * Strength;\n\n\t\t\t\t}\n\t\t\t`\n\t\t} );\n\n\t}\n\n}\n\nexport { RenderPixelatedPass };\n", "import {\n\tMatrix4,\n\tVector2\n} from 'three';\n\n/**\n * TODO\n */\n\nconst SAOShader = {\n\n\tname: 'SAOShader',\n\n\tdefines: {\n\t\t'NUM_SAMPLES': 7,\n\t\t'NUM_RINGS': 4,\n\t\t'DIFFUSE_TEXTURE': 0,\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\n\t\t'tDepth': { value: null },\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'size': { value: new Vector2( 512, 512 ) },\n\n\t\t'cameraNear': { value: 1 },\n\t\t'cameraFar': { value: 100 },\n\t\t'cameraProjectionMatrix': { value: new Matrix4() },\n\t\t'cameraInverseProjectionMatrix': { value: new Matrix4() },\n\n\t\t'scale': { value: 1.0 },\n\t\t'intensity': { value: 0.1 },\n\t\t'bias': { value: 0.5 },\n\n\t\t'minResolution': { value: 0.0 },\n\t\t'kernelRadius': { value: 100.0 },\n\t\t'randomSeed': { value: 0.0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\t#if DIFFUSE_TEXTURE == 1\n\t\tuniform sampler2D tDiffuse;\n\t\t#endif\n\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform highp sampler2D tNormal;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\n\t\tuniform float scale;\n\t\tuniform float intensity;\n\t\tuniform float bias;\n\t\tuniform float kernelRadius;\n\t\tuniform float minResolution;\n\t\tuniform vec2 size;\n\t\tuniform float randomSeed;\n\n\t\t// RGBA depth\n\n\t\t#include \n\n\t\tvec4 getDefaultColor( const in vec2 screenPosition ) {\n\t\t\t#if DIFFUSE_TEXTURE == 1\n\t\t\treturn texture2D( tDiffuse, vUv );\n\t\t\t#else\n\t\t\treturn vec4( 1.0 );\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];\n\t\t\tvec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );\n\t\t\tclipPosition *= clipW; // unprojection.\n\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;\n\t\t}\n\n\t\tvec3 getViewNormal( const in vec3 viewPosition, const in vec2 screenPosition ) {\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );\n\t\t}\n\n\t\tfloat scaleDividedByCameraFar;\n\t\tfloat minResolutionMultipliedByCameraFar;\n\n\t\tfloat getOcclusion( const in vec3 centerViewPosition, const in vec3 centerViewNormal, const in vec3 sampleViewPosition ) {\n\t\t\tvec3 viewDelta = sampleViewPosition - centerViewPosition;\n\t\t\tfloat viewDistance = length( viewDelta );\n\t\t\tfloat scaledScreenDistance = scaleDividedByCameraFar * viewDistance;\n\n\t\t\treturn max(0.0, (dot(centerViewNormal, viewDelta) - minResolutionMultipliedByCameraFar) / scaledScreenDistance - bias) / (1.0 + pow2( scaledScreenDistance ) );\n\t\t}\n\n\t\t// moving costly divides into consts\n\t\tconst float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );\n\t\tconst float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );\n\n\t\tfloat getAmbientOcclusion( const in vec3 centerViewPosition ) {\n\t\t\t// precompute some variables require in getOcclusion.\n\t\t\tscaleDividedByCameraFar = scale / cameraFar;\n\t\t\tminResolutionMultipliedByCameraFar = minResolution * cameraFar;\n\t\t\tvec3 centerViewNormal = getViewNormal( centerViewPosition, vUv );\n\n\t\t\t// jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/\n\t\t\tfloat angle = rand( vUv + randomSeed ) * PI2;\n\t\t\tvec2 radius = vec2( kernelRadius * INV_NUM_SAMPLES ) / size;\n\t\t\tvec2 radiusStep = radius;\n\n\t\t\tfloat occlusionSum = 0.0;\n\t\t\tfloat weightSum = 0.0;\n\n\t\t\tfor( int i = 0; i < NUM_SAMPLES; i ++ ) {\n\t\t\t\tvec2 sampleUv = vUv + vec2( cos( angle ), sin( angle ) ) * radius;\n\t\t\t\tradius += radiusStep;\n\t\t\t\tangle += ANGLE_STEP;\n\n\t\t\t\tfloat sampleDepth = getDepth( sampleUv );\n\t\t\t\tif( sampleDepth >= ( 1.0 - EPSILON ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfloat sampleViewZ = getViewZ( sampleDepth );\n\t\t\t\tvec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ );\n\t\t\t\tocclusionSum += getOcclusion( centerViewPosition, centerViewNormal, sampleViewPosition );\n\t\t\t\tweightSum += 1.0;\n\t\t\t}\n\n\t\t\tif( weightSum == 0.0 ) discard;\n\n\t\t\treturn occlusionSum * ( intensity / weightSum );\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat centerDepth = getDepth( vUv );\n\t\t\tif( centerDepth >= ( 1.0 - EPSILON ) ) {\n\t\t\t\tdiscard;\n\t\t\t}\n\n\t\t\tfloat centerViewZ = getViewZ( centerDepth );\n\t\t\tvec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ );\n\n\t\t\tfloat ambientOcclusion = getAmbientOcclusion( viewPosition );\n\n\t\t\tgl_FragColor = getDefaultColor( vUv );\n\t\t\tgl_FragColor.xyz *= 1.0 - ambientOcclusion;\n\t\t}`\n\n};\n\nexport { SAOShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * TODO\n */\n\nconst DepthLimitedBlurShader = {\n\n\tname: 'DepthLimitedBlurShader',\n\n\tdefines: {\n\t\t'KERNEL_RADIUS': 4,\n\t\t'DEPTH_PACKING': 1,\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'size': { value: new Vector2( 512, 512 ) },\n\t\t'sampleUvOffsets': { value: [ new Vector2( 0, 0 ) ] },\n\t\t'sampleWeights': { value: [ 1.0 ] },\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: 10 },\n\t\t'cameraFar': { value: 1000 },\n\t\t'depthCutoff': { value: 10 },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform vec2 size;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec2 vInvSize;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tvInvSize = 1.0 / size;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\t\t#include \n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDepth;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform float depthCutoff;\n\n\t\tuniform vec2 sampleUvOffsets[ KERNEL_RADIUS + 1 ];\n\t\tuniform float sampleWeights[ KERNEL_RADIUS + 1 ];\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec2 vInvSize;\n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\t\t\t#if DEPTH_PACKING == 1\n\t\t\treturn unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );\n\t\t\t#else\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth( vUv );\n\t\t\tif( depth >= ( 1.0 - EPSILON ) ) {\n\t\t\t\tdiscard;\n\t\t\t}\n\n\t\t\tfloat centerViewZ = -getViewZ( depth );\n\t\t\tbool rBreak = false, lBreak = false;\n\n\t\t\tfloat weightSum = sampleWeights[0];\n\t\t\tvec4 diffuseSum = texture2D( tDiffuse, vUv ) * weightSum;\n\n\t\t\tfor( int i = 1; i <= KERNEL_RADIUS; i ++ ) {\n\n\t\t\t\tfloat sampleWeight = sampleWeights[i];\n\t\t\t\tvec2 sampleUvOffset = sampleUvOffsets[i] * vInvSize;\n\n\t\t\t\tvec2 sampleUv = vUv + sampleUvOffset;\n\t\t\t\tfloat viewZ = -getViewZ( getDepth( sampleUv ) );\n\n\t\t\t\tif( abs( viewZ - centerViewZ ) > depthCutoff ) rBreak = true;\n\n\t\t\t\tif( ! rBreak ) {\n\t\t\t\t\tdiffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;\n\t\t\t\t\tweightSum += sampleWeight;\n\t\t\t\t}\n\n\t\t\t\tsampleUv = vUv - sampleUvOffset;\n\t\t\t\tviewZ = -getViewZ( getDepth( sampleUv ) );\n\n\t\t\t\tif( abs( viewZ - centerViewZ ) > depthCutoff ) lBreak = true;\n\n\t\t\t\tif( ! lBreak ) {\n\t\t\t\t\tdiffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;\n\t\t\t\t\tweightSum += sampleWeight;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgl_FragColor = diffuseSum / weightSum;\n\t\t}`\n\n};\n\nconst BlurShaderUtils = {\n\n\tcreateSampleWeights: function ( kernelRadius, stdDev ) {\n\n\t\tconst weights = [];\n\n\t\tfor ( let i = 0; i <= kernelRadius; i ++ ) {\n\n\t\t\tweights.push( gaussian( i, stdDev ) );\n\n\t\t}\n\n\t\treturn weights;\n\n\t},\n\n\tcreateSampleOffsets: function ( kernelRadius, uvIncrement ) {\n\n\t\tconst offsets = [];\n\n\t\tfor ( let i = 0; i <= kernelRadius; i ++ ) {\n\n\t\t\toffsets.push( uvIncrement.clone().multiplyScalar( i ) );\n\n\t\t}\n\n\t\treturn offsets;\n\n\t},\n\n\tconfigure: function ( material, kernelRadius, stdDev, uvIncrement ) {\n\n\t\tmaterial.defines[ 'KERNEL_RADIUS' ] = kernelRadius;\n\t\tmaterial.uniforms[ 'sampleUvOffsets' ].value = BlurShaderUtils.createSampleOffsets( kernelRadius, uvIncrement );\n\t\tmaterial.uniforms[ 'sampleWeights' ].value = BlurShaderUtils.createSampleWeights( kernelRadius, stdDev );\n\t\tmaterial.needsUpdate = true;\n\n\t}\n\n};\n\nfunction gaussian( x, stdDev ) {\n\n\treturn Math.exp( - ( x * x ) / ( 2.0 * ( stdDev * stdDev ) ) ) / ( Math.sqrt( 2.0 * Math.PI ) * stdDev );\n\n}\n\nexport { DepthLimitedBlurShader, BlurShaderUtils };\n", "import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDepthTexture,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tHalfFloatType,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tDepthStencilFormat,\n\tUnsignedInt248Type,\n\tVector2,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SAOShader } from '../shaders/SAOShader.js';\nimport { DepthLimitedBlurShader } from '../shaders/DepthLimitedBlurShader.js';\nimport { BlurShaderUtils } from '../shaders/DepthLimitedBlurShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\n/**\n * SAO implementation inspired from bhouston previous SAO work\n */\n\nclass SAOPass extends Pass {\n\n\tconstructor( scene, camera, resolution = new Vector2( 256, 256 ) ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.originalClearColor = new Color();\n\t\tthis._oldClearColor = new Color();\n\t\tthis.oldClearAlpha = 1;\n\n\t\tthis.params = {\n\t\t\toutput: 0,\n\t\t\tsaoBias: 0.5,\n\t\t\tsaoIntensity: 0.18,\n\t\t\tsaoScale: 1,\n\t\t\tsaoKernelRadius: 100,\n\t\t\tsaoMinResolution: 0,\n\t\t\tsaoBlur: true,\n\t\t\tsaoBlurRadius: 8,\n\t\t\tsaoBlurStdDev: 4,\n\t\t\tsaoBlurDepthCutoff: 0.01\n\t\t};\n\n\t\tthis.resolution = new Vector2( resolution.x, resolution.y );\n\n\t\tthis.saoRenderTarget = new WebGLRenderTarget( this.resolution.x, this.resolution.y, { type: HalfFloatType } );\n\t\tthis.blurIntermediateRenderTarget = this.saoRenderTarget.clone();\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.format = DepthStencilFormat;\n\t\tdepthTexture.type = UnsignedInt248Type;\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.resolution.x, this.resolution.y, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t\tdepthTexture: depthTexture\n\t\t} );\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\tthis.saoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SAOShader.defines ),\n\t\t\tfragmentShader: SAOShader.fragmentShader,\n\t\t\tvertexShader: SAOShader.vertexShader,\n\t\t\tuniforms: UniformsUtils.clone( SAOShader.uniforms )\n\t\t} );\n\t\tthis.saoMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.saoMaterial.uniforms[ 'tDepth' ].value = depthTexture;\n\t\tthis.saoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\tthis.saoMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );\n\t\tthis.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;\n\t\tthis.saoMaterial.blending = NoBlending;\n\n\t\tthis.vBlurMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( DepthLimitedBlurShader.uniforms ),\n\t\t\tdefines: Object.assign( {}, DepthLimitedBlurShader.defines ),\n\t\t\tvertexShader: DepthLimitedBlurShader.vertexShader,\n\t\t\tfragmentShader: DepthLimitedBlurShader.fragmentShader\n\t\t} );\n\t\tthis.vBlurMaterial.defines[ 'DEPTH_PACKING' ] = 0;\n\t\tthis.vBlurMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.vBlurMaterial.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;\n\t\tthis.vBlurMaterial.uniforms[ 'tDepth' ].value = depthTexture;\n\t\tthis.vBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );\n\t\tthis.vBlurMaterial.blending = NoBlending;\n\n\t\tthis.hBlurMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( DepthLimitedBlurShader.uniforms ),\n\t\t\tdefines: Object.assign( {}, DepthLimitedBlurShader.defines ),\n\t\t\tvertexShader: DepthLimitedBlurShader.vertexShader,\n\t\t\tfragmentShader: DepthLimitedBlurShader.fragmentShader\n\t\t} );\n\t\tthis.hBlurMaterial.defines[ 'DEPTH_PACKING' ] = 0;\n\t\tthis.hBlurMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.hBlurMaterial.uniforms[ 'tDiffuse' ].value = this.blurIntermediateRenderTarget.texture;\n\t\tthis.hBlurMaterial.uniforms[ 'tDepth' ].value = depthTexture;\n\t\tthis.hBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );\n\t\tthis.hBlurMaterial.blending = NoBlending;\n\n\t\tthis.materialCopy = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.materialCopy.transparent = true;\n\t\tthis.materialCopy.depthTest = false;\n\t\tthis.materialCopy.depthWrite = false;\n\t\tthis.materialCopy.blending = CustomBlending;\n\t\tthis.materialCopy.blendSrc = DstColorFactor;\n\t\tthis.materialCopy.blendDst = ZeroFactor;\n\t\tthis.materialCopy.blendEquation = AddEquation;\n\t\tthis.materialCopy.blendSrcAlpha = DstAlphaFactor;\n\t\tthis.materialCopy.blendDstAlpha = ZeroFactor;\n\t\tthis.materialCopy.blendEquationAlpha = AddEquation;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\t// Rendering readBuffer first when rendering to screen\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis.materialCopy.blending = NoBlending;\n\t\t\tthis.materialCopy.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\t\tthis.materialCopy.needsUpdate = true;\n\t\t\tthis.renderPass( renderer, this.materialCopy, null );\n\n\t\t}\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.saoMaterial.uniforms[ 'bias' ].value = this.params.saoBias;\n\t\tthis.saoMaterial.uniforms[ 'intensity' ].value = this.params.saoIntensity;\n\t\tthis.saoMaterial.uniforms[ 'scale' ].value = this.params.saoScale;\n\t\tthis.saoMaterial.uniforms[ 'kernelRadius' ].value = this.params.saoKernelRadius;\n\t\tthis.saoMaterial.uniforms[ 'minResolution' ].value = this.params.saoMinResolution;\n\t\tthis.saoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.saoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\t// this.saoMaterial.uniforms['randomSeed'].value = Math.random();\n\n\t\tconst depthCutoff = this.params.saoBlurDepthCutoff * ( this.camera.far - this.camera.near );\n\t\tthis.vBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;\n\t\tthis.hBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;\n\n\t\tthis.vBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.vBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\tthis.hBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.hBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\n\t\tthis.params.saoBlurRadius = Math.floor( this.params.saoBlurRadius );\n\t\tif ( ( this.prevStdDev !== this.params.saoBlurStdDev ) || ( this.prevNumSamples !== this.params.saoBlurRadius ) ) {\n\n\t\t\tBlurShaderUtils.configure( this.vBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new Vector2( 0, 1 ) );\n\t\t\tBlurShaderUtils.configure( this.hBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new Vector2( 1, 0 ) );\n\t\t\tthis.prevStdDev = this.params.saoBlurStdDev;\n\t\t\tthis.prevNumSamples = this.params.saoBlurRadius;\n\n\t\t}\n\n\t\t// render normal and depth\n\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\n\t\t// Rendering SAO texture\n\t\tthis.renderPass( renderer, this.saoMaterial, this.saoRenderTarget, 0xffffff, 1.0 );\n\n\t\t// Blurring SAO texture\n\t\tif ( this.params.saoBlur ) {\n\n\t\t\tthis.renderPass( renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 0xffffff, 1.0 );\n\t\t\tthis.renderPass( renderer, this.hBlurMaterial, this.saoRenderTarget, 0xffffff, 1.0 );\n\n\t\t}\n\n\t\tconst outputMaterial = this.materialCopy;\n\n\t\t// Setting up SAO rendering\n\t\tif ( this.params.output === SAOPass.OUTPUT.Normal ) {\n\n\t\t\tthis.materialCopy.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\tthis.materialCopy.needsUpdate = true;\n\n\t\t} else {\n\n\t\t\tthis.materialCopy.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;\n\t\t\tthis.materialCopy.needsUpdate = true;\n\n\t\t}\n\n\t\t// Blending depends on output\n\t\tif ( this.params.output === SAOPass.OUTPUT.Default ) {\n\n\t\t\toutputMaterial.blending = CustomBlending;\n\n\t\t} else {\n\n\t\t\toutputMaterial.blending = NoBlending;\n\n\t\t}\n\n\t\t// Rendering SAOPass result on top of previous pass\n\t\tthis.renderPass( renderer, outputMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\trenderer.setClearColor( this._oldClearColor, this.oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.saoRenderTarget.setSize( width, height );\n\t\tthis.blurIntermediateRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\n\t\tthis.saoMaterial.uniforms[ 'size' ].value.set( width, height );\n\t\tthis.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;\n\t\tthis.saoMaterial.needsUpdate = true;\n\n\t\tthis.vBlurMaterial.uniforms[ 'size' ].value.set( width, height );\n\t\tthis.vBlurMaterial.needsUpdate = true;\n\n\t\tthis.hBlurMaterial.uniforms[ 'size' ].value.set( width, height );\n\t\tthis.hBlurMaterial.needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.saoRenderTarget.dispose();\n\t\tthis.blurIntermediateRenderTarget.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\n\t\tthis.normalMaterial.dispose();\n\t\tthis.saoMaterial.dispose();\n\t\tthis.vBlurMaterial.dispose();\n\t\tthis.hBlurMaterial.dispose();\n\t\tthis.materialCopy.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nSAOPass.OUTPUT = {\n\t'Default': 0,\n\t'SAO': 1,\n\t'Normal': 2\n};\n\nexport { SAOPass };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * WebGL port of Subpixel Morphological Antialiasing (SMAA) v2.8\n * Preset: SMAA 1x Medium (with color edge detection)\n * https://github.com/iryoku/smaa/releases/tag/v2.8\n */\n\nconst SMAAEdgesShader = {\n\n\tname: 'SMAAEdgesShader',\n\n\tdefines: {\n\n\t\t'SMAA_THRESHOLD': '0.1'\n\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 3 ];\n\n\t\tvoid SMAAEdgeDetectionVS( vec2 texcoord ) {\n\t\t\tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component\n\t\t\tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component\n\t\t\tvOffset[ 2 ] = texcoord.xyxy + resolution.xyxy * vec4( -2.0, 0.0, 0.0, 2.0 ); // WebGL port note: Changed sign in W component\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tSMAAEdgeDetectionVS( vUv );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 3 ];\n\n\t\tvec4 SMAAColorEdgeDetectionPS( vec2 texcoord, vec4 offset[3], sampler2D colorTex ) {\n\t\t\tvec2 threshold = vec2( SMAA_THRESHOLD, SMAA_THRESHOLD );\n\n\t\t\t// Calculate color deltas:\n\t\t\tvec4 delta;\n\t\t\tvec3 C = texture2D( colorTex, texcoord ).rgb;\n\n\t\t\tvec3 Cleft = texture2D( colorTex, offset[0].xy ).rgb;\n\t\t\tvec3 t = abs( C - Cleft );\n\t\t\tdelta.x = max( max( t.r, t.g ), t.b );\n\n\t\t\tvec3 Ctop = texture2D( colorTex, offset[0].zw ).rgb;\n\t\t\tt = abs( C - Ctop );\n\t\t\tdelta.y = max( max( t.r, t.g ), t.b );\n\n\t\t\t// We do the usual threshold:\n\t\t\tvec2 edges = step( threshold, delta.xy );\n\n\t\t\t// Then discard if there is no edge:\n\t\t\tif ( dot( edges, vec2( 1.0, 1.0 ) ) == 0.0 )\n\t\t\t\tdiscard;\n\n\t\t\t// Calculate right and bottom deltas:\n\t\t\tvec3 Cright = texture2D( colorTex, offset[1].xy ).rgb;\n\t\t\tt = abs( C - Cright );\n\t\t\tdelta.z = max( max( t.r, t.g ), t.b );\n\n\t\t\tvec3 Cbottom = texture2D( colorTex, offset[1].zw ).rgb;\n\t\t\tt = abs( C - Cbottom );\n\t\t\tdelta.w = max( max( t.r, t.g ), t.b );\n\n\t\t\t// Calculate the maximum delta in the direct neighborhood:\n\t\t\tfloat maxDelta = max( max( max( delta.x, delta.y ), delta.z ), delta.w );\n\n\t\t\t// Calculate left-left and top-top deltas:\n\t\t\tvec3 Cleftleft = texture2D( colorTex, offset[2].xy ).rgb;\n\t\t\tt = abs( C - Cleftleft );\n\t\t\tdelta.z = max( max( t.r, t.g ), t.b );\n\n\t\t\tvec3 Ctoptop = texture2D( colorTex, offset[2].zw ).rgb;\n\t\t\tt = abs( C - Ctoptop );\n\t\t\tdelta.w = max( max( t.r, t.g ), t.b );\n\n\t\t\t// Calculate the final maximum delta:\n\t\t\tmaxDelta = max( max( maxDelta, delta.z ), delta.w );\n\n\t\t\t// Local contrast adaptation in action:\n\t\t\tedges.xy *= step( 0.5 * maxDelta, delta.xy );\n\n\t\t\treturn vec4( edges, 0.0, 0.0 );\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = SMAAColorEdgeDetectionPS( vUv, vOffset, tDiffuse );\n\n\t\t}`\n\n};\n\nconst SMAAWeightsShader = {\n\n\tname: 'SMAAWeightsShader',\n\n\tdefines: {\n\n\t\t'SMAA_MAX_SEARCH_STEPS': '8',\n\t\t'SMAA_AREATEX_MAX_DISTANCE': '16',\n\t\t'SMAA_AREATEX_PIXEL_SIZE': '( 1.0 / vec2( 160.0, 560.0 ) )',\n\t\t'SMAA_AREATEX_SUBTEX_SIZE': '( 1.0 / 7.0 )'\n\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tArea': { value: null },\n\t\t'tSearch': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 3 ];\n\t\tvarying vec2 vPixcoord;\n\n\t\tvoid SMAABlendingWeightCalculationVS( vec2 texcoord ) {\n\t\t\tvPixcoord = texcoord / resolution;\n\n\t\t\t// We will use these offsets for the searches later on (see @PSEUDO_GATHER4):\n\t\t\tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.25, 0.125, 1.25, 0.125 ); // WebGL port note: Changed sign in Y and W components\n\t\t\tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.125, 0.25, -0.125, -1.25 ); // WebGL port note: Changed sign in Y and W components\n\n\t\t\t// And these for the searches, they indicate the ends of the loops:\n\t\t\tvOffset[ 2 ] = vec4( vOffset[ 0 ].xz, vOffset[ 1 ].yw ) + vec4( -2.0, 2.0, -2.0, 2.0 ) * resolution.xxyy * float( SMAA_MAX_SEARCH_STEPS );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tSMAABlendingWeightCalculationVS( vUv );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define SMAASampleLevelZeroOffset( tex, coord, offset ) texture2D( tex, coord + float( offset ) * resolution, 0.0 )\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tArea;\n\t\tuniform sampler2D tSearch;\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[3];\n\t\tvarying vec2 vPixcoord;\n\n\t\t#if __VERSION__ == 100\n\t\tvec2 round( vec2 x ) {\n\t\t\treturn sign( x ) * floor( abs( x ) + 0.5 );\n\t\t}\n\t\t#endif\n\n\t\tfloat SMAASearchLength( sampler2D searchTex, vec2 e, float bias, float scale ) {\n\t\t\t// Not required if searchTex accesses are set to point:\n\t\t\t// float2 SEARCH_TEX_PIXEL_SIZE = 1.0 / float2(66.0, 33.0);\n\t\t\t// e = float2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE +\n\t\t\t// e * float2(scale, 1.0) * float2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;\n\t\t\te.r = bias + e.r * scale;\n\t\t\treturn 255.0 * texture2D( searchTex, e, 0.0 ).r;\n\t\t}\n\n\t\tfloat SMAASearchXLeft( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\t/**\n\t\t\t\t* @PSEUDO_GATHER4\n\t\t\t\t* This texcoord has been offset by (-0.25, -0.125) in the vertex shader to\n\t\t\t\t* sample between edge, thus fetching four edges in a row.\n\t\t\t\t* Sampling with different offsets in each direction allows to disambiguate\n\t\t\t\t* which edges are active from the four fetched ones.\n\t\t\t\t*/\n\t\t\tvec2 e = vec2( 0.0, 1.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord -= vec2( 2.0, 0.0 ) * resolution;\n\t\t\t\tif ( ! ( texcoord.x > end && e.g > 0.8281 && e.r == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\t// We correct the previous (-0.25, -0.125) offset we applied:\n\t\t\ttexcoord.x += 0.25 * resolution.x;\n\n\t\t\t// The searches are bias by 1, so adjust the coords accordingly:\n\t\t\ttexcoord.x += resolution.x;\n\n\t\t\t// Disambiguate the length added by the last step:\n\t\t\ttexcoord.x += 2.0 * resolution.x; // Undo last step\n\t\t\ttexcoord.x -= resolution.x * SMAASearchLength(searchTex, e, 0.0, 0.5);\n\n\t\t\treturn texcoord.x;\n\t\t}\n\n\t\tfloat SMAASearchXRight( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\tvec2 e = vec2( 0.0, 1.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord += vec2( 2.0, 0.0 ) * resolution;\n\t\t\t\tif ( ! ( texcoord.x < end && e.g > 0.8281 && e.r == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\ttexcoord.x -= 0.25 * resolution.x;\n\t\t\ttexcoord.x -= resolution.x;\n\t\t\ttexcoord.x -= 2.0 * resolution.x;\n\t\t\ttexcoord.x += resolution.x * SMAASearchLength( searchTex, e, 0.5, 0.5 );\n\n\t\t\treturn texcoord.x;\n\t\t}\n\n\t\tfloat SMAASearchYUp( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\tvec2 e = vec2( 1.0, 0.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord += vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign\n\t\t\t\tif ( ! ( texcoord.y > end && e.r > 0.8281 && e.g == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\ttexcoord.y -= 0.25 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y -= resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y -= 2.0 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y += resolution.y * SMAASearchLength( searchTex, e.gr, 0.0, 0.5 ); // WebGL port note: Changed sign\n\n\t\t\treturn texcoord.y;\n\t\t}\n\n\t\tfloat SMAASearchYDown( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\tvec2 e = vec2( 1.0, 0.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord -= vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign\n\t\t\t\tif ( ! ( texcoord.y < end && e.r > 0.8281 && e.g == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\ttexcoord.y += 0.25 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y += resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y += 2.0 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y -= resolution.y * SMAASearchLength( searchTex, e.gr, 0.5, 0.5 ); // WebGL port note: Changed sign\n\n\t\t\treturn texcoord.y;\n\t\t}\n\n\t\tvec2 SMAAArea( sampler2D areaTex, vec2 dist, float e1, float e2, float offset ) {\n\t\t\t// Rounding prevents precision errors of bilinear filtering:\n\t\t\tvec2 texcoord = float( SMAA_AREATEX_MAX_DISTANCE ) * round( 4.0 * vec2( e1, e2 ) ) + dist;\n\n\t\t\t// We do a scale and bias for mapping to texel space:\n\t\t\ttexcoord = SMAA_AREATEX_PIXEL_SIZE * texcoord + ( 0.5 * SMAA_AREATEX_PIXEL_SIZE );\n\n\t\t\t// Move to proper place, according to the subpixel offset:\n\t\t\ttexcoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;\n\n\t\t\treturn texture2D( areaTex, texcoord, 0.0 ).rg;\n\t\t}\n\n\t\tvec4 SMAABlendingWeightCalculationPS( vec2 texcoord, vec2 pixcoord, vec4 offset[ 3 ], sampler2D edgesTex, sampler2D areaTex, sampler2D searchTex, ivec4 subsampleIndices ) {\n\t\t\tvec4 weights = vec4( 0.0, 0.0, 0.0, 0.0 );\n\n\t\t\tvec2 e = texture2D( edgesTex, texcoord ).rg;\n\n\t\t\tif ( e.g > 0.0 ) { // Edge at north\n\t\t\t\tvec2 d;\n\n\t\t\t\t// Find the distance to the left:\n\t\t\t\tvec2 coords;\n\t\t\t\tcoords.x = SMAASearchXLeft( edgesTex, searchTex, offset[ 0 ].xy, offset[ 2 ].x );\n\t\t\t\tcoords.y = offset[ 1 ].y; // offset[1].y = texcoord.y - 0.25 * resolution.y (@CROSSING_OFFSET)\n\t\t\t\td.x = coords.x;\n\n\t\t\t\t// Now fetch the left crossing edges, two at a time using bilinear\n\t\t\t\t// filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to\n\t\t\t\t// discern what value each edge has:\n\t\t\t\tfloat e1 = texture2D( edgesTex, coords, 0.0 ).r;\n\n\t\t\t\t// Find the distance to the right:\n\t\t\t\tcoords.x = SMAASearchXRight( edgesTex, searchTex, offset[ 0 ].zw, offset[ 2 ].y );\n\t\t\t\td.y = coords.x;\n\n\t\t\t\t// We want the distances to be in pixel units (doing this here allow to\n\t\t\t\t// better interleave arithmetic and memory accesses):\n\t\t\t\td = d / resolution.x - pixcoord.x;\n\n\t\t\t\t// SMAAArea below needs a sqrt, as the areas texture is compressed\n\t\t\t\t// quadratically:\n\t\t\t\tvec2 sqrt_d = sqrt( abs( d ) );\n\n\t\t\t\t// Fetch the right crossing edges:\n\t\t\t\tcoords.y -= 1.0 * resolution.y; // WebGL port note: Added\n\t\t\t\tfloat e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 1, 0 ) ).r;\n\n\t\t\t\t// Ok, we know how this pattern looks like, now it is time for getting\n\t\t\t\t// the actual area:\n\t\t\t\tweights.rg = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.y ) );\n\t\t\t}\n\n\t\t\tif ( e.r > 0.0 ) { // Edge at west\n\t\t\t\tvec2 d;\n\n\t\t\t\t// Find the distance to the top:\n\t\t\t\tvec2 coords;\n\n\t\t\t\tcoords.y = SMAASearchYUp( edgesTex, searchTex, offset[ 1 ].xy, offset[ 2 ].z );\n\t\t\t\tcoords.x = offset[ 0 ].x; // offset[1].x = texcoord.x - 0.25 * resolution.x;\n\t\t\t\td.x = coords.y;\n\n\t\t\t\t// Fetch the top crossing edges:\n\t\t\t\tfloat e1 = texture2D( edgesTex, coords, 0.0 ).g;\n\n\t\t\t\t// Find the distance to the bottom:\n\t\t\t\tcoords.y = SMAASearchYDown( edgesTex, searchTex, offset[ 1 ].zw, offset[ 2 ].w );\n\t\t\t\td.y = coords.y;\n\n\t\t\t\t// We want the distances to be in pixel units:\n\t\t\t\td = d / resolution.y - pixcoord.y;\n\n\t\t\t\t// SMAAArea below needs a sqrt, as the areas texture is compressed\n\t\t\t\t// quadratically:\n\t\t\t\tvec2 sqrt_d = sqrt( abs( d ) );\n\n\t\t\t\t// Fetch the bottom crossing edges:\n\t\t\t\tcoords.y -= 1.0 * resolution.y; // WebGL port note: Added\n\t\t\t\tfloat e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 0, 1 ) ).g;\n\n\t\t\t\t// Get the area for this direction:\n\t\t\t\tweights.ba = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.x ) );\n\t\t\t}\n\n\t\t\treturn weights;\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = SMAABlendingWeightCalculationPS( vUv, vPixcoord, vOffset, tDiffuse, tArea, tSearch, ivec4( 0.0 ) );\n\n\t\t}`\n\n};\n\nconst SMAABlendShader = {\n\n\tname: 'SMAABlendShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tColor': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 2 ];\n\n\t\tvoid SMAANeighborhoodBlendingVS( vec2 texcoord ) {\n\t\t\tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component\n\t\t\tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tSMAANeighborhoodBlendingVS( vUv );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tColor;\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 2 ];\n\n\t\tvec4 SMAANeighborhoodBlendingPS( vec2 texcoord, vec4 offset[ 2 ], sampler2D colorTex, sampler2D blendTex ) {\n\t\t\t// Fetch the blending weights for current pixel:\n\t\t\tvec4 a;\n\t\t\ta.xz = texture2D( blendTex, texcoord ).xz;\n\t\t\ta.y = texture2D( blendTex, offset[ 1 ].zw ).g;\n\t\t\ta.w = texture2D( blendTex, offset[ 1 ].xy ).a;\n\n\t\t\t// Is there any blending weight with a value greater than 0.0?\n\t\t\tif ( dot(a, vec4( 1.0, 1.0, 1.0, 1.0 )) < 1e-5 ) {\n\t\t\t\treturn texture2D( colorTex, texcoord, 0.0 );\n\t\t\t} else {\n\t\t\t\t// Up to 4 lines can be crossing a pixel (one through each edge). We\n\t\t\t\t// favor blending by choosing the line with the maximum weight for each\n\t\t\t\t// direction:\n\t\t\t\tvec2 offset;\n\t\t\t\toffset.x = a.a > a.b ? a.a : -a.b; // left vs. right\n\t\t\t\toffset.y = a.g > a.r ? -a.g : a.r; // top vs. bottom // WebGL port note: Changed signs\n\n\t\t\t\t// Then we go in the direction that has the maximum weight:\n\t\t\t\tif ( abs( offset.x ) > abs( offset.y )) { // horizontal vs. vertical\n\t\t\t\t\toffset.y = 0.0;\n\t\t\t\t} else {\n\t\t\t\t\toffset.x = 0.0;\n\t\t\t\t}\n\n\t\t\t\t// Fetch the opposite color and lerp by hand:\n\t\t\t\tvec4 C = texture2D( colorTex, texcoord, 0.0 );\n\t\t\t\ttexcoord += sign( offset ) * resolution;\n\t\t\t\tvec4 Cop = texture2D( colorTex, texcoord, 0.0 );\n\t\t\t\tfloat s = abs( offset.x ) > abs( offset.y ) ? abs( offset.x ) : abs( offset.y );\n\n\t\t\t\t// WebGL port note: Added gamma correction\n\t\t\t\tC.xyz = pow(C.xyz, vec3(2.2));\n\t\t\t\tCop.xyz = pow(Cop.xyz, vec3(2.2));\n\t\t\t\tvec4 mixed = mix(C, Cop, s);\n\t\t\t\tmixed.xyz = pow(mixed.xyz, vec3(1.0 / 2.2));\n\n\t\t\t\treturn mixed;\n\t\t\t}\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = SMAANeighborhoodBlendingPS( vUv, vOffset, tColor, tDiffuse );\n\n\t\t}`\n\n};\n\nexport { SMAAEdgesShader, SMAAWeightsShader, SMAABlendShader };\n", "import {\n\tHalfFloatType,\n\tLinearFilter,\n\tNearestFilter,\n\tShaderMaterial,\n\tTexture,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SMAAEdgesShader } from '../shaders/SMAAShader.js';\nimport { SMAAWeightsShader } from '../shaders/SMAAShader.js';\nimport { SMAABlendShader } from '../shaders/SMAAShader.js';\n\nclass SMAAPass extends Pass {\n\n\tconstructor( width, height ) {\n\n\t\tsuper();\n\n\t\t// render targets\n\n\t\tthis.edgesRT = new WebGLRenderTarget( width, height, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\t\tthis.edgesRT.texture.name = 'SMAAPass.edges';\n\n\t\tthis.weightsRT = new WebGLRenderTarget( width, height, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\t\tthis.weightsRT.texture.name = 'SMAAPass.weights';\n\n\t\t// textures\n\t\tconst scope = this;\n\n\t\tconst areaTextureImage = new Image();\n\t\tareaTextureImage.src = this.getAreaTexture();\n\t\tareaTextureImage.onload = function () {\n\n\t\t\t// assigning data to HTMLImageElement.src is asynchronous (see #15162)\n\t\t\tscope.areaTexture.needsUpdate = true;\n\n\t\t};\n\n\t\tthis.areaTexture = new Texture();\n\t\tthis.areaTexture.name = 'SMAAPass.area';\n\t\tthis.areaTexture.image = areaTextureImage;\n\t\tthis.areaTexture.minFilter = LinearFilter;\n\t\tthis.areaTexture.generateMipmaps = false;\n\t\tthis.areaTexture.flipY = false;\n\n\t\tconst searchTextureImage = new Image();\n\t\tsearchTextureImage.src = this.getSearchTexture();\n\t\tsearchTextureImage.onload = function () {\n\n\t\t\t// assigning data to HTMLImageElement.src is asynchronous (see #15162)\n\t\t\tscope.searchTexture.needsUpdate = true;\n\n\t\t};\n\n\t\tthis.searchTexture = new Texture();\n\t\tthis.searchTexture.name = 'SMAAPass.search';\n\t\tthis.searchTexture.image = searchTextureImage;\n\t\tthis.searchTexture.magFilter = NearestFilter;\n\t\tthis.searchTexture.minFilter = NearestFilter;\n\t\tthis.searchTexture.generateMipmaps = false;\n\t\tthis.searchTexture.flipY = false;\n\n\t\t// materials - pass 1\n\n\t\tthis.uniformsEdges = UniformsUtils.clone( SMAAEdgesShader.uniforms );\n\n\t\tthis.uniformsEdges[ 'resolution' ].value.set( 1 / width, 1 / height );\n\n\t\tthis.materialEdges = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SMAAEdgesShader.defines ),\n\t\t\tuniforms: this.uniformsEdges,\n\t\t\tvertexShader: SMAAEdgesShader.vertexShader,\n\t\t\tfragmentShader: SMAAEdgesShader.fragmentShader\n\t\t} );\n\n\t\t// materials - pass 2\n\n\t\tthis.uniformsWeights = UniformsUtils.clone( SMAAWeightsShader.uniforms );\n\n\t\tthis.uniformsWeights[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.uniformsWeights[ 'tDiffuse' ].value = this.edgesRT.texture;\n\t\tthis.uniformsWeights[ 'tArea' ].value = this.areaTexture;\n\t\tthis.uniformsWeights[ 'tSearch' ].value = this.searchTexture;\n\n\t\tthis.materialWeights = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SMAAWeightsShader.defines ),\n\t\t\tuniforms: this.uniformsWeights,\n\t\t\tvertexShader: SMAAWeightsShader.vertexShader,\n\t\t\tfragmentShader: SMAAWeightsShader.fragmentShader\n\t\t} );\n\n\t\t// materials - pass 3\n\n\t\tthis.uniformsBlend = UniformsUtils.clone( SMAABlendShader.uniforms );\n\n\t\tthis.uniformsBlend[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.uniformsBlend[ 'tDiffuse' ].value = this.weightsRT.texture;\n\n\t\tthis.materialBlend = new ShaderMaterial( {\n\t\t\tuniforms: this.uniformsBlend,\n\t\t\tvertexShader: SMAABlendShader.vertexShader,\n\t\t\tfragmentShader: SMAABlendShader.fragmentShader\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\t// pass 1\n\n\t\tthis.uniformsEdges[ 'tDiffuse' ].value = readBuffer.texture;\n\n\t\tthis.fsQuad.material = this.materialEdges;\n\n\t\trenderer.setRenderTarget( this.edgesRT );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// pass 2\n\n\t\tthis.fsQuad.material = this.materialWeights;\n\n\t\trenderer.setRenderTarget( this.weightsRT );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// pass 3\n\n\t\tthis.uniformsBlend[ 'tColor' ].value = readBuffer.texture;\n\n\t\tthis.fsQuad.material = this.materialBlend;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.edgesRT.setSize( width, height );\n\t\tthis.weightsRT.setSize( width, height );\n\n\t\tthis.materialEdges.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.materialWeights.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.materialBlend.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );\n\n\t}\n\n\tgetAreaTexture() {\n\n\t\treturn 'data:image/png;base64,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';\n\n\t}\n\n\tgetSearchTexture() {\n\n\t\treturn 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.edgesRT.dispose();\n\t\tthis.weightsRT.dispose();\n\n\t\tthis.areaTexture.dispose();\n\t\tthis.searchTexture.dispose();\n\n\t\tthis.materialEdges.dispose();\n\t\tthis.materialWeights.dispose();\n\t\tthis.materialBlend.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { SMAAPass };\n", "import {\n\tAdditiveBlending,\n\tColor,\n\tHalfFloatType,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\n/**\n*\n* Supersample Anti-Aliasing Render Pass\n*\n* This manual approach to SSAA re-renders the scene ones for each sample with camera jitter and accumulates the results.\n*\n* References: https://en.wikipedia.org/wiki/Supersampling\n*\n*/\n\nclass SSAARenderPass extends Pass {\n\n\tconstructor( scene, camera, clearColor, clearAlpha ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.sampleLevel = 4; // specified as n, where the number of samples is 2^n, so sampleLevel = 4, is 2^4 samples, 16.\n\t\tthis.unbiased = true;\n\n\t\t// as we need to clear the buffer in this pass, clearColor must be set to something, defaults to black.\n\t\tthis.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;\n\t\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\t\tthis._oldClearColor = new Color();\n\n\t\tconst copyShader = CopyShader;\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.copyMaterial = new ShaderMaterial(\t{\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tpremultipliedAlpha: true,\n\t\t\tblending: AdditiveBlending\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.copyMaterial );\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.sampleRenderTarget ) {\n\n\t\t\tthis.sampleRenderTarget.dispose();\n\t\t\tthis.sampleRenderTarget = null;\n\n\t\t}\n\n\t\tthis.copyMaterial.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tif ( this.sampleRenderTarget )\tthis.sampleRenderTarget.setSize( width, height );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer ) {\n\n\t\tif ( ! this.sampleRenderTarget ) {\n\n\t\t\tthis.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );\n\t\t\tthis.sampleRenderTarget.texture.name = 'SSAARenderPass.sample';\n\n\t\t}\n\n\t\tconst jitterOffsets = _JitterVectors[ Math.max( 0, Math.min( this.sampleLevel, 5 ) ) ];\n\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tconst oldClearAlpha = renderer.getClearAlpha();\n\n\t\tconst baseSampleWeight = 1.0 / jitterOffsets.length;\n\t\tconst roundingRange = 1 / 32;\n\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.sampleRenderTarget.texture;\n\n\t\tconst viewOffset = {\n\n\t\t\tfullWidth: readBuffer.width,\n\t\t\tfullHeight: readBuffer.height,\n\t\t\toffsetX: 0,\n\t\t\toffsetY: 0,\n\t\t\twidth: readBuffer.width,\n\t\t\theight: readBuffer.height\n\n\t\t};\n\n\t\tconst originalViewOffset = Object.assign( {}, this.camera.view );\n\n\t\tif ( originalViewOffset.enabled ) Object.assign( viewOffset, originalViewOffset );\n\n\t\t// render the scene multiple times, each slightly jitter offset from the last and accumulate the results.\n\t\tfor ( let i = 0; i < jitterOffsets.length; i ++ ) {\n\n\t\t\tconst jitterOffset = jitterOffsets[ i ];\n\n\t\t\tif ( this.camera.setViewOffset ) {\n\n\t\t\t\tthis.camera.setViewOffset(\n\n\t\t\t\t\tviewOffset.fullWidth, viewOffset.fullHeight,\n\n\t\t\t\t\tviewOffset.offsetX + jitterOffset[ 0 ] * 0.0625, viewOffset.offsetY + jitterOffset[ 1 ] * 0.0625, // 0.0625 = 1 / 16\n\n\t\t\t\t\tviewOffset.width, viewOffset.height\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tlet sampleWeight = baseSampleWeight;\n\n\t\t\tif ( this.unbiased ) {\n\n\t\t\t\t// the theory is that equal weights for each sample lead to an accumulation of rounding errors.\n\t\t\t\t// The following equation varies the sampleWeight per sample so that it is uniformly distributed\n\t\t\t\t// across a range of values whose rounding errors cancel each other out.\n\n\t\t\t\tconst uniformCenteredDistribution = ( - 0.5 + ( i + 0.5 ) / jitterOffsets.length );\n\t\t\t\tsampleWeight += roundingRange * uniformCenteredDistribution;\n\n\t\t\t}\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = sampleWeight;\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\t\t\trenderer.setRenderTarget( this.sampleRenderTarget );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.scene, this.camera );\n\n\t\t\trenderer.setRenderTarget( this.renderToScreen ? null : writeBuffer );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\trenderer.setClearColor( 0x000000, 0.0 );\n\t\t\t\trenderer.clear();\n\n\t\t\t}\n\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tif ( this.camera.setViewOffset && originalViewOffset.enabled ) {\n\n\t\t\tthis.camera.setViewOffset(\n\n\t\t\t\toriginalViewOffset.fullWidth, originalViewOffset.fullHeight,\n\n\t\t\t\toriginalViewOffset.offsetX, originalViewOffset.offsetY,\n\n\t\t\t\toriginalViewOffset.width, originalViewOffset.height\n\n\t\t\t);\n\n\t\t} else if ( this.camera.clearViewOffset ) {\n\n\t\t\tthis.camera.clearViewOffset();\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t}\n\n}\n\n\n// These jitter vectors are specified in integers because it is easier.\n// I am assuming a [-8,8) integer grid, but it needs to be mapped onto [-0.5,0.5)\n// before being used, thus these integers need to be scaled by 1/16.\n//\n// Sample patterns reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ff476218%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396\nconst _JitterVectors = [\n\t[\n\t\t[ 0, 0 ]\n\t],\n\t[\n\t\t[ 4, 4 ], [ - 4, - 4 ]\n\t],\n\t[\n\t\t[ - 2, - 6 ], [ 6, - 2 ], [ - 6, 2 ], [ 2, 6 ]\n\t],\n\t[\n\t\t[ 1, - 3 ], [ - 1, 3 ], [ 5, 1 ], [ - 3, - 5 ],\n\t\t[ - 5, 5 ], [ - 7, - 1 ], [ 3, 7 ], [ 7, - 7 ]\n\t],\n\t[\n\t\t[ 1, 1 ], [ - 1, - 3 ], [ - 3, 2 ], [ 4, - 1 ],\n\t\t[ - 5, - 2 ], [ 2, 5 ], [ 5, 3 ], [ 3, - 5 ],\n\t\t[ - 2, 6 ], [ 0, - 7 ], [ - 4, - 6 ], [ - 6, 4 ],\n\t\t[ - 8, 0 ], [ 7, - 4 ], [ 6, 7 ], [ - 7, - 8 ]\n\t],\n\t[\n\t\t[ - 4, - 7 ], [ - 7, - 5 ], [ - 3, - 5 ], [ - 5, - 4 ],\n\t\t[ - 1, - 4 ], [ - 2, - 2 ], [ - 6, - 1 ], [ - 4, 0 ],\n\t\t[ - 7, 1 ], [ - 1, 2 ], [ - 6, 3 ], [ - 3, 3 ],\n\t\t[ - 7, 6 ], [ - 3, 6 ], [ - 5, 7 ], [ - 1, 7 ],\n\t\t[ 5, - 7 ], [ 1, - 6 ], [ 6, - 5 ], [ 4, - 4 ],\n\t\t[ 2, - 3 ], [ 7, - 2 ], [ 1, - 1 ], [ 4, - 1 ],\n\t\t[ 2, 1 ], [ 6, 2 ], [ 0, 4 ], [ 4, 4 ],\n\t\t[ 2, 5 ], [ 7, 5 ], [ 5, 6 ], [ 3, 7 ]\n\t]\n];\n\nexport { SSAARenderPass };\n", "import {\n\tMatrix4,\n\tVector2\n} from 'three';\n\n/**\n * References:\n * http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html\n * https://learnopengl.com/Advanced-Lighting/SSAO\n * https://github.com/McNopper/OpenGL/blob/master/Example28/shader/ssao.frag.glsl\n */\n\nconst SSAOShader = {\n\n\tname: 'SSAOShader',\n\n\tdefines: {\n\t\t'PERSPECTIVE_CAMERA': 1,\n\t\t'KERNEL_SIZE': 32\n\t},\n\n\tuniforms: {\n\n\t\t'tNormal': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'tNoise': { value: null },\n\t\t'kernel': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrix': { value: new Matrix4() },\n\t\t'cameraInverseProjectionMatrix': { value: new Matrix4() },\n\t\t'kernelRadius': { value: 8 },\n\t\t'minDistance': { value: 0.005 },\n\t\t'maxDistance': { value: 0.05 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform highp sampler2D tNormal;\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\n\t\tuniform vec3 kernel[ KERNEL_SIZE ];\n\n\t\tuniform vec2 resolution;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\n\t\tuniform float kernelRadius;\n\t\tuniform float minDistance; // avoid artifacts caused by neighbour fragments with minimal depth difference\n\t\tuniform float maxDistance; // avoid the influence of fragments which are too far away\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\n\t\t}\n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tvec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {\n\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];\n\n\t\t\tvec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );\n\n\t\t\tclipPosition *= clipW; // unprojection.\n\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;\n\n\t\t}\n\n\t\tvec3 getViewNormal( const in vec2 screenPosition ) {\n\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat depth = getDepth( vUv );\n\n\t\t\tif ( depth == 1.0 ) {\n\n\t\t\t\tgl_FragColor = vec4( 1.0 ); // don't influence background\n\t\t\t\t\n\t\t\t} else {\n\n\t\t\t\tfloat viewZ = getViewZ( depth );\n\n\t\t\t\tvec3 viewPosition = getViewPosition( vUv, depth, viewZ );\n\t\t\t\tvec3 viewNormal = getViewNormal( vUv );\n\n\t\t\t\tvec2 noiseScale = vec2( resolution.x / 4.0, resolution.y / 4.0 );\n\t\t\t\tvec3 random = vec3( texture2D( tNoise, vUv * noiseScale ).r );\n\n\t\t\t\t// compute matrix used to reorient a kernel vector\n\n\t\t\t\tvec3 tangent = normalize( random - viewNormal * dot( random, viewNormal ) );\n\t\t\t\tvec3 bitangent = cross( viewNormal, tangent );\n\t\t\t\tmat3 kernelMatrix = mat3( tangent, bitangent, viewNormal );\n\n\t\t\t\tfloat occlusion = 0.0;\n\n\t\t\t\tfor ( int i = 0; i < KERNEL_SIZE; i ++ ) {\n\n\t\t\t\t\tvec3 sampleVector = kernelMatrix * kernel[ i ]; // reorient sample vector in view space\n\t\t\t\t\tvec3 samplePoint = viewPosition + ( sampleVector * kernelRadius ); // calculate sample point\n\n\t\t\t\t\tvec4 samplePointNDC = cameraProjectionMatrix * vec4( samplePoint, 1.0 ); // project point and calculate NDC\n\t\t\t\t\tsamplePointNDC /= samplePointNDC.w;\n\n\t\t\t\t\tvec2 samplePointUv = samplePointNDC.xy * 0.5 + 0.5; // compute uv coordinates\n\n\t\t\t\t\tfloat realDepth = getLinearDepth( samplePointUv ); // get linear depth from depth texture\n\t\t\t\t\tfloat sampleDepth = viewZToOrthographicDepth( samplePoint.z, cameraNear, cameraFar ); // compute linear depth of the sample view Z value\n\t\t\t\t\tfloat delta = sampleDepth - realDepth;\n\n\t\t\t\t\tif ( delta > minDistance && delta < maxDistance ) { // if fragment is before sample point, increase occlusion\n\n\t\t\t\t\t\tocclusion += 1.0;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tocclusion = clamp( occlusion / float( KERNEL_SIZE ), 0.0, 1.0 );\n\n\t\t\t\tgl_FragColor = vec4( vec3( 1.0 - occlusion ), 1.0 );\n\n\t\t\t}\n\n\t\t}`\n\n};\n\nconst SSAODepthShader = {\n\n\tname: 'SSAODepthShader',\n\n\tdefines: {\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\n\t},\n\n\tvertexShader:\n\n\t\t`varying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader:\n\n\t\t`uniform sampler2D tDepth;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tgl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );\n\n\t\t}`\n\n};\n\nconst SSAOBlurShader = {\n\n\tname: 'SSAOBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2() }\n\n\t},\n\n\tvertexShader:\n\n\t\t`varying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader:\n\n\t\t`uniform sampler2D tDiffuse;\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 texelSize = ( 1.0 / resolution );\n\t\t\tfloat result = 0.0;\n\n\t\t\tfor ( int i = - 2; i <= 2; i ++ ) {\n\n\t\t\t\tfor ( int j = - 2; j <= 2; j ++ ) {\n\n\t\t\t\t\tvec2 offset = ( vec2( float( i ), float( j ) ) ) * texelSize;\n\t\t\t\t\tresult += texture2D( tDiffuse, vUv + offset ).r;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgl_FragColor = vec4( vec3( result / ( 5.0 * 5.0 ) ), 1.0 );\n\n\t\t}`\n\n};\n\nexport { SSAOShader, SSAODepthShader, SSAOBlurShader };\n", "import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDataTexture,\n\tDepthTexture,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tFloatType,\n\tHalfFloatType,\n\tMathUtils,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRedFormat,\n\tDepthStencilFormat,\n\tUnsignedInt248Type,\n\tRepeatWrapping,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SimplexNoise } from '../math/SimplexNoise.js';\nimport { SSAOShader } from '../shaders/SSAOShader.js';\nimport { SSAOBlurShader } from '../shaders/SSAOShader.js';\nimport { SSAODepthShader } from '../shaders/SSAOShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass SSAOPass extends Pass {\n\n\tconstructor( scene, camera, width, height, kernelSize = 32 ) {\n\n\t\tsuper();\n\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.camera = camera;\n\t\tthis.scene = scene;\n\n\t\tthis.kernelRadius = 8;\n\t\tthis.kernel = [];\n\t\tthis.noiseTexture = null;\n\t\tthis.output = 0;\n\n\t\tthis.minDistance = 0.005;\n\t\tthis.maxDistance = 0.1;\n\n\t\tthis._visibilityCache = new Map();\n\n\t\t//\n\n\t\tthis.generateSampleKernel( kernelSize );\n\t\tthis.generateRandomKernelRotations();\n\n\t\t// depth texture\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.format = DepthStencilFormat;\n\t\tdepthTexture.type = UnsignedInt248Type;\n\n\t\t// normal render target with depth buffer\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t\tdepthTexture: depthTexture\n\t\t} );\n\n\t\t// ssao render target\n\n\t\tthis.ssaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );\n\n\t\tthis.blurRenderTarget = this.ssaoRenderTarget.clone();\n\n\t\t// ssao material\n\n\t\tthis.ssaoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAOShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAOShader.uniforms ),\n\t\t\tvertexShader: SSAOShader.vertexShader,\n\t\t\tfragmentShader: SSAOShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\n\t\tthis.ssaoMaterial.defines[ 'KERNEL_SIZE' ] = kernelSize;\n\n\t\tthis.ssaoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\tthis.ssaoMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;\n\t\tthis.ssaoMaterial.uniforms[ 'tNoise' ].value = this.noiseTexture;\n\t\tthis.ssaoMaterial.uniforms[ 'kernel' ].value = this.kernel;\n\t\tthis.ssaoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.ssaoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\tthis.ssaoMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\t// normal material\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\t// blur material\n\n\t\tthis.blurMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAOBlurShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAOBlurShader.uniforms ),\n\t\t\tvertexShader: SSAOBlurShader.vertexShader,\n\t\t\tfragmentShader: SSAOBlurShader.fragmentShader\n\t\t} );\n\t\tthis.blurMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\n\t\t// material for rendering the depth\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAODepthShader.uniforms ),\n\t\t\tvertexShader: SSAODepthShader.vertexShader,\n\t\t\tfragmentShader: SSAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\n\t\t// material for rendering the content of a render target\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.originalClearColor = new Color();\n\n\t}\n\n\tdispose() {\n\n\t\t// dispose render targets\n\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.ssaoRenderTarget.dispose();\n\t\tthis.blurRenderTarget.dispose();\n\n\t\t// dispose materials\n\n\t\tthis.normalMaterial.dispose();\n\t\tthis.blurMaterial.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\n\t\t// dipsose full screen quad\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\t// render normals and depth (honor only meshes, points and lines do not contribute to SSAO)\n\n\t\tthis.overrideVisibility();\n\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\t\tthis.restoreVisibility();\n\n\t\t// render SSAO\n\n\t\tthis.ssaoMaterial.uniforms[ 'kernelRadius' ].value = this.kernelRadius;\n\t\tthis.ssaoMaterial.uniforms[ 'minDistance' ].value = this.minDistance;\n\t\tthis.ssaoMaterial.uniforms[ 'maxDistance' ].value = this.maxDistance;\n\t\tthis.renderPass( renderer, this.ssaoMaterial, this.ssaoRenderTarget );\n\n\t\t// render blur\n\n\t\tthis.renderPass( renderer, this.blurMaterial, this.blurRenderTarget );\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase SSAOPass.OUTPUT.SSAO:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Blur:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Depth:\n\n\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Default:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = CustomBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.SSAOPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\t// restore original state\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.ssaoRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.blurRenderTarget.setSize( width, height );\n\n\t\tthis.ssaoMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\n\t}\n\n\tgenerateSampleKernel( kernelSize ) {\n\n\t\tconst kernel = this.kernel;\n\n\t\tfor ( let i = 0; i < kernelSize; i ++ ) {\n\n\t\t\tconst sample = new Vector3();\n\t\t\tsample.x = ( Math.random() * 2 ) - 1;\n\t\t\tsample.y = ( Math.random() * 2 ) - 1;\n\t\t\tsample.z = Math.random();\n\n\t\t\tsample.normalize();\n\n\t\t\tlet scale = i / kernelSize;\n\t\t\tscale = MathUtils.lerp( 0.1, 1, scale * scale );\n\t\t\tsample.multiplyScalar( scale );\n\n\t\t\tkernel.push( sample );\n\n\t\t}\n\n\t}\n\n\tgenerateRandomKernelRotations() {\n\n\t\tconst width = 4, height = 4;\n\n\t\tconst simplex = new SimplexNoise();\n\n\t\tconst size = width * height;\n\t\tconst data = new Float32Array( size );\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\tconst x = ( Math.random() * 2 ) - 1;\n\t\t\tconst y = ( Math.random() * 2 ) - 1;\n\t\t\tconst z = 0;\n\n\t\t\tdata[ i ] = simplex.noise3d( x, y, z );\n\n\t\t}\n\n\t\tthis.noiseTexture = new DataTexture( data, width, height, RedFormat, FloatType );\n\t\tthis.noiseTexture.wrapS = RepeatWrapping;\n\t\tthis.noiseTexture.wrapT = RepeatWrapping;\n\t\tthis.noiseTexture.needsUpdate = true;\n\n\t}\n\n\toverrideVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tcache.set( object, object.visible );\n\n\t\t\tif ( object.isPoints || object.isLine ) object.visible = false;\n\n\t\t} );\n\n\t}\n\n\trestoreVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst visible = cache.get( object );\n\t\t\tobject.visible = visible;\n\n\t\t} );\n\n\t\tcache.clear();\n\n\t}\n\n}\n\nSSAOPass.OUTPUT = {\n\t'Default': 0,\n\t'SSAO': 1,\n\t'Blur': 2,\n\t'Depth': 3,\n\t'Normal': 4\n};\n\nexport { SSAOPass };\n", "import {\n\tMatrix4,\n\tVector2\n} from 'three';\n/**\n * References:\n * https://lettier.github.io/3d-game-shaders-for-beginners/screen-space-reflection.html\n */\n\nconst SSRShader = {\n\n\tname: 'SSRShader',\n\n\tdefines: {\n\t\tMAX_STEP: 0,\n\t\tPERSPECTIVE_CAMERA: true,\n\t\tDISTANCE_ATTENUATION: true,\n\t\tFRESNEL: true,\n\t\tINFINITE_THICK: false,\n\t\tSELECTIVE: false,\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'tMetalness': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrix': { value: new Matrix4() },\n\t\t'cameraInverseProjectionMatrix': { value: new Matrix4() },\n\t\t'opacity': { value: .5 },\n\t\t'maxDistance': { value: 180 },\n\t\t'cameraRange': { value: 0 },\n\t\t'thickness': { value: .018 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\t\t// precision highp float;\n\t\tprecision highp sampler2D;\n\t\tvarying vec2 vUv;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tMetalness;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float cameraRange;\n\t\tuniform vec2 resolution;\n\t\tuniform float opacity;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform float maxDistance;\n\t\tuniform float thickness;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\t\t#include \n\t\tfloat pointToLineDistance(vec3 x0, vec3 x1, vec3 x2) {\n\t\t\t//x0: point, x1: linePointA, x2: linePointB\n\t\t\t//https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html\n\t\t\treturn length(cross(x0-x1,x0-x2))/length(x2-x1);\n\t\t}\n\t\tfloat pointPlaneDistance(vec3 point,vec3 planePoint,vec3 planeNormal){\n\t\t\t// https://mathworld.wolfram.com/Point-PlaneDistance.html\n\t\t\t//// https://en.wikipedia.org/wiki/Plane_(geometry)\n\t\t\t//// http://paulbourke.net/geometry/pointlineplane/\n\t\t\tfloat a=planeNormal.x,b=planeNormal.y,c=planeNormal.z;\n\t\t\tfloat x0=point.x,y0=point.y,z0=point.z;\n\t\t\tfloat x=planePoint.x,y=planePoint.y,z=planePoint.z;\n\t\t\tfloat d=-(a*x+b*y+c*z);\n\t\t\tfloat distance=(a*x0+b*y0+c*z0+d)/sqrt(a*a+b*b+c*c);\n\t\t\treturn distance;\n\t\t}\n\t\tfloat getDepth( const in vec2 uv ) {\n\t\t\treturn texture2D( tDepth, uv ).x;\n\t\t}\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\t\tvec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {\n\t\t\tvec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc\n\t\t\tclipPosition *= clipW; //clip\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;//view\n\t\t}\n\t\tvec3 getViewNormal( const in vec2 uv ) {\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, uv ).xyz );\n\t\t}\n\t\tvec2 viewPositionToXY(vec3 viewPosition){\n\t\t\tvec2 xy;\n\t\t\tvec4 clip=cameraProjectionMatrix*vec4(viewPosition,1);\n\t\t\txy=clip.xy;//clip\n\t\t\tfloat clipW=clip.w;\n\t\t\txy/=clipW;//NDC\n\t\t\txy=(xy+1.)/2.;//uv\n\t\t\txy*=resolution;//screen\n\t\t\treturn xy;\n\t\t}\n\t\tvoid main(){\n\t\t\t#ifdef SELECTIVE\n\t\t\t\tfloat metalness=texture2D(tMetalness,vUv).r;\n\t\t\t\tif(metalness==0.) return;\n\t\t\t#endif\n\n\t\t\tfloat depth = getDepth( vUv );\n\t\t\tfloat viewZ = getViewZ( depth );\n\t\t\tif(-viewZ>=cameraFar) return;\n\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ+cameraProjectionMatrix[3][3];\n\t\t\tvec3 viewPosition=getViewPosition( vUv, depth, clipW );\n\n\t\t\tvec2 d0=gl_FragCoord.xy;\n\t\t\tvec2 d1;\n\n\t\t\tvec3 viewNormal=getViewNormal( vUv );\n\n\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\tvec3 viewIncidentDir=normalize(viewPosition);\n\t\t\t\tvec3 viewReflectDir=reflect(viewIncidentDir,viewNormal);\n\t\t\t#else\n\t\t\t\tvec3 viewIncidentDir=vec3(0,0,-1);\n\t\t\t\tvec3 viewReflectDir=reflect(viewIncidentDir,viewNormal);\n\t\t\t#endif\n\n\t\t\tfloat maxReflectRayLen=maxDistance/dot(-viewIncidentDir,viewNormal);\n\t\t\t// dot(a,b)==length(a)*length(b)*cos(theta) // https://www.mathsisfun.com/algebra/vectors-dot-product.html\n\t\t\t// if(a.isNormalized&&b.isNormalized) dot(a,b)==cos(theta)\n\t\t\t// maxDistance/maxReflectRayLen=cos(theta)\n\t\t\t// maxDistance/maxReflectRayLen==dot(a,b)\n\t\t\t// maxReflectRayLen==maxDistance/dot(a,b)\n\n\t\t\tvec3 d1viewPosition=viewPosition+viewReflectDir*maxReflectRayLen;\n\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\tif(d1viewPosition.z>-cameraNear){\n\t\t\t\t\t//https://tutorial.math.lamar.edu/Classes/CalcIII/EqnsOfLines.aspx\n\t\t\t\t\tfloat t=(-cameraNear-viewPosition.z)/viewReflectDir.z;\n\t\t\t\t\td1viewPosition=viewPosition+viewReflectDir*t;\n\t\t\t\t}\n\t\t\t#endif\n\t\t\td1=viewPositionToXY(d1viewPosition);\n\n\t\t\tfloat totalLen=length(d1-d0);\n\t\t\tfloat xLen=d1.x-d0.x;\n\t\t\tfloat yLen=d1.y-d0.y;\n\t\t\tfloat totalStep=max(abs(xLen),abs(yLen));\n\t\t\tfloat xSpan=xLen/totalStep;\n\t\t\tfloat ySpan=yLen/totalStep;\n\t\t\tfor(float i=0.;i=totalStep) break;\n\t\t\t\tvec2 xy=vec2(d0.x+i*xSpan,d0.y+i*ySpan);\n\t\t\t\tif(xy.x<0.||xy.x>resolution.x||xy.y<0.||xy.y>resolution.y) break;\n\t\t\t\tfloat s=length(xy-d0)/totalLen;\n\t\t\t\tvec2 uv=xy/resolution;\n\n\t\t\t\tfloat d = getDepth(uv);\n\t\t\t\tfloat vZ = getViewZ( d );\n\t\t\t\tif(-vZ>=cameraFar) continue;\n\t\t\t\tfloat cW = cameraProjectionMatrix[2][3] * vZ+cameraProjectionMatrix[3][3];\n\t\t\t\tvec3 vP=getViewPosition( uv, d, cW );\n\n\t\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\t\t// https://comp.nus.edu.sg/~lowkl/publications/lowk_persp_interp_techrep.pdf\n\t\t\t\t\tfloat recipVPZ=1./viewPosition.z;\n\t\t\t\t\tfloat viewReflectRayZ=1./(recipVPZ+s*(1./d1viewPosition.z-recipVPZ));\n\t\t\t\t#else\n\t\t\t\t\tfloat viewReflectRayZ=viewPosition.z+s*(d1viewPosition.z-viewPosition.z);\n\t\t\t\t#endif\n\n\t\t\t\t// if(viewReflectRayZ>vZ) continue; // will cause \"npm run make-screenshot webgl_postprocessing_ssr\" high probability hang.\n\t\t\t\t// https://github.com/mrdoob/three.js/pull/21539#issuecomment-821061164\n\t\t\t\tif(viewReflectRayZ<=vZ){\n\n\t\t\t\t\tbool hit;\n\t\t\t\t\t#ifdef INFINITE_THICK\n\t\t\t\t\t\thit=true;\n\t\t\t\t\t#else\n\t\t\t\t\t\tfloat away=pointToLineDistance(vP,viewPosition,d1viewPosition);\n\n\t\t\t\t\t\tfloat minThickness;\n\t\t\t\t\t\tvec2 xyNeighbor=xy;\n\t\t\t\t\t\txyNeighbor.x+=1.;\n\t\t\t\t\t\tvec2 uvNeighbor=xyNeighbor/resolution;\n\t\t\t\t\t\tvec3 vPNeighbor=getViewPosition(uvNeighbor,d,cW);\n\t\t\t\t\t\tminThickness=vPNeighbor.x-vP.x;\n\t\t\t\t\t\tminThickness*=3.;\n\t\t\t\t\t\tfloat tk=max(minThickness,thickness);\n\n\t\t\t\t\t\thit=away<=tk;\n\t\t\t\t\t#endif\n\n\t\t\t\t\tif(hit){\n\t\t\t\t\t\tvec3 vN=getViewNormal( uv );\n\t\t\t\t\t\tif(dot(viewReflectDir,vN)>=0.) continue;\n\t\t\t\t\t\tfloat distance=pointPlaneDistance(vP,viewPosition,viewNormal);\n\t\t\t\t\t\tif(distance>maxDistance) break;\n\t\t\t\t\t\tfloat op=opacity;\n\t\t\t\t\t\t#ifdef DISTANCE_ATTENUATION\n\t\t\t\t\t\t\tfloat ratio=1.-(distance/maxDistance);\n\t\t\t\t\t\t\tfloat attenuation=ratio*ratio;\n\t\t\t\t\t\t\top=opacity*attenuation;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#ifdef FRESNEL\n\t\t\t\t\t\t\tfloat fresnelCoe=(dot(viewIncidentDir,viewReflectDir)+1.)/2.;\n\t\t\t\t\t\t\top*=fresnelCoe;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tvec4 reflectColor=texture2D(tDiffuse,uv);\n\t\t\t\t\t\tgl_FragColor.xyz=reflectColor.xyz;\n\t\t\t\t\t\tgl_FragColor.a=op;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t`\n\n};\n\nconst SSRDepthShader = {\n\n\tname: 'SSRDepthShader',\n\n\tdefines: {\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDepth;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getLinearDepth( const in vec2 uv ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, uv ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, uv ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tfloat d = 1.0 - depth;\n\t\t\t// d=(d-.999)*1000.;\n\t\t\tgl_FragColor = vec4( vec3( d ), 1.0 );\n\n\t\t}\n\n\t`\n\n};\n\nconst SSRBlurShader = {\n\n\tname: 'SSRBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'opacity': { value: .5 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 resolution;\n\t\tvarying vec2 vUv;\n\t\tvoid main() {\n\t\t\t//reverse engineering from PhotoShop blur filter, then change coefficient\n\n\t\t\tvec2 texelSize = ( 1.0 / resolution );\n\n\t\t\tvec4 c=texture2D(tDiffuse,vUv);\n\n\t\t\tvec2 offset;\n\n\t\t\toffset=(vec2(-1,0))*texelSize;\n\t\t\tvec4 cl=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(1,0))*texelSize;\n\t\t\tvec4 cr=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(0,-1))*texelSize;\n\t\t\tvec4 cb=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(0,1))*texelSize;\n\t\t\tvec4 ct=texture2D(tDiffuse,vUv+offset);\n\n\t\t\t// float coeCenter=.5;\n\t\t\t// float coeSide=.125;\n\t\t\tfloat coeCenter=.2;\n\t\t\tfloat coeSide=.2;\n\t\t\tfloat a=c.a*coeCenter+cl.a*coeSide+cr.a*coeSide+cb.a*coeSide+ct.a*coeSide;\n\t\t\tvec3 rgb=(c.rgb*c.a*coeCenter+cl.rgb*cl.a*coeSide+cr.rgb*cr.a*coeSide+cb.rgb*cb.a*coeSide+ct.rgb*ct.a*coeSide)/a;\n\t\t\tgl_FragColor=vec4(rgb,a);\n\n\t\t}\n\t`\n\n\n};\n\nexport { SSRShader, SSRDepthShader, SSRBlurShader };\n", "import {\n\tAddEquation,\n\tColor,\n\tNormalBlending,\n\tDepthTexture,\n\tSrcAlphaFactor,\n\tOneMinusSrcAlphaFactor,\n\tMeshNormalMaterial,\n\tMeshBasicMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tUnsignedShortType,\n\tWebGLRenderTarget,\n\tHalfFloatType,\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SSRShader } from '../shaders/SSRShader.js';\nimport { SSRBlurShader } from '../shaders/SSRShader.js';\nimport { SSRDepthShader } from '../shaders/SSRShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass SSRPass extends Pass {\n\n\tconstructor( { renderer, scene, camera, width, height, selects, bouncing = false, groundReflector } ) {\n\n\t\tsuper();\n\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\n\t\tthis.clear = true;\n\n\t\tthis.renderer = renderer;\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\t\tthis.groundReflector = groundReflector;\n\n\t\tthis.opacity = SSRShader.uniforms.opacity.value;\n\t\tthis.output = 0;\n\n\t\tthis.maxDistance = SSRShader.uniforms.maxDistance.value;\n\t\tthis.thickness = SSRShader.uniforms.thickness.value;\n\n\t\tthis.tempColor = new Color();\n\n\t\tthis._selects = selects;\n\t\tthis.selective = Array.isArray( this._selects );\n\t\tObject.defineProperty( this, 'selects', {\n\t\t\tget() {\n\n\t\t\t\treturn this._selects;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._selects === val ) return;\n\t\t\t\tthis._selects = val;\n\t\t\t\tif ( Array.isArray( val ) ) {\n\n\t\t\t\t\tthis.selective = true;\n\t\t\t\t\tthis.ssrMaterial.defines.SELECTIVE = true;\n\t\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.selective = false;\n\t\t\t\t\tthis.ssrMaterial.defines.SELECTIVE = false;\n\t\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\n\t\tthis._bouncing = bouncing;\n\t\tObject.defineProperty( this, 'bouncing', {\n\t\t\tget() {\n\n\t\t\t\treturn this._bouncing;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._bouncing === val ) return;\n\t\t\t\tthis._bouncing = val;\n\t\t\t\tif ( val ) {\n\n\t\t\t\t\tthis.ssrMaterial.uniforms[ 'tDiffuse' ].value = this.prevRenderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.ssrMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.blur = true;\n\n\t\tthis._distanceAttenuation = SSRShader.defines.DISTANCE_ATTENUATION;\n\t\tObject.defineProperty( this, 'distanceAttenuation', {\n\t\t\tget() {\n\n\t\t\t\treturn this._distanceAttenuation;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._distanceAttenuation === val ) return;\n\t\t\t\tthis._distanceAttenuation = val;\n\t\t\t\tthis.ssrMaterial.defines.DISTANCE_ATTENUATION = val;\n\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\n\t\tthis._fresnel = SSRShader.defines.FRESNEL;\n\t\tObject.defineProperty( this, 'fresnel', {\n\t\t\tget() {\n\n\t\t\t\treturn this._fresnel;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._fresnel === val ) return;\n\t\t\t\tthis._fresnel = val;\n\t\t\t\tthis.ssrMaterial.defines.FRESNEL = val;\n\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\tthis._infiniteThick = SSRShader.defines.INFINITE_THICK;\n\t\tObject.defineProperty( this, 'infiniteThick', {\n\t\t\tget() {\n\n\t\t\t\treturn this._infiniteThick;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._infiniteThick === val ) return;\n\t\t\t\tthis._infiniteThick = val;\n\t\t\t\tthis.ssrMaterial.defines.INFINITE_THICK = val;\n\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\t// beauty render target with depth buffer\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.type = UnsignedShortType;\n\t\tdepthTexture.minFilter = NearestFilter;\n\t\tdepthTexture.magFilter = NearestFilter;\n\n\t\tthis.beautyRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t\tdepthTexture: depthTexture,\n\t\t\tdepthBuffer: true\n\t\t} );\n\n\t\t//for bouncing\n\t\tthis.prevRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t} );\n\n\t\t// normal render target\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t} );\n\n\t\t// metalness render target\n\n\t\tthis.metalnessRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t} );\n\n\n\n\t\t// ssr render target\n\n\t\tthis.ssrRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t} );\n\n\t\tthis.blurRenderTarget = this.ssrRenderTarget.clone();\n\t\tthis.blurRenderTarget2 = this.ssrRenderTarget.clone();\n\t\t// this.blurRenderTarget3 = this.ssrRenderTarget.clone();\n\n\t\t// ssr material\n\n\t\tthis.ssrMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRShader.defines, {\n\t\t\t\tMAX_STEP: Math.sqrt( this.width * this.width + this.height * this.height )\n\t\t\t} ),\n\t\t\tuniforms: UniformsUtils.clone( SSRShader.uniforms ),\n\t\t\tvertexShader: SSRShader.vertexShader,\n\t\t\tfragmentShader: SSRShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\n\t\tthis.ssrMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\tthis.ssrMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\tthis.ssrMaterial.defines.SELECTIVE = this.selective;\n\t\tthis.ssrMaterial.needsUpdate = true;\n\t\tthis.ssrMaterial.uniforms[ 'tMetalness' ].value = this.metalnessRenderTarget.texture;\n\t\tthis.ssrMaterial.uniforms[ 'tDepth' ].value = this.beautyRenderTarget.depthTexture;\n\t\tthis.ssrMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.ssrMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\tthis.ssrMaterial.uniforms[ 'thickness' ].value = this.thickness;\n\t\tthis.ssrMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\t\tthis.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\t// normal material\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\t// metalnessOn material\n\n\t\tthis.metalnessOnMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: 'white'\n\t\t} );\n\n\t\t// metalnessOff material\n\n\t\tthis.metalnessOffMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: 'black'\n\t\t} );\n\n\t\t// blur material\n\n\t\tthis.blurMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRBlurShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSRBlurShader.uniforms ),\n\t\t\tvertexShader: SSRBlurShader.vertexShader,\n\t\t\tfragmentShader: SSRBlurShader.fragmentShader\n\t\t} );\n\t\tthis.blurMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\n\t\t// blur material 2\n\n\t\tthis.blurMaterial2 = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRBlurShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSRBlurShader.uniforms ),\n\t\t\tvertexShader: SSRBlurShader.vertexShader,\n\t\t\tfragmentShader: SSRBlurShader.fragmentShader\n\t\t} );\n\t\tthis.blurMaterial2.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\tthis.blurMaterial2.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\n\t\t// // blur material 3\n\n\t\t// this.blurMaterial3 = new ShaderMaterial({\n\t\t// defines: Object.assign({}, SSRBlurShader.defines),\n\t\t// uniforms: UniformsUtils.clone(SSRBlurShader.uniforms),\n\t\t// vertexShader: SSRBlurShader.vertexShader,\n\t\t// fragmentShader: SSRBlurShader.fragmentShader\n\t\t// });\n\t\t// this.blurMaterial3.uniforms['tDiffuse'].value = this.blurRenderTarget2.texture;\n\t\t// this.blurMaterial3.uniforms['resolution'].value.set(this.width, this.height);\n\n\t\t// material for rendering the depth\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRDepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSRDepthShader.uniforms ),\n\t\t\tvertexShader: SSRDepthShader.vertexShader,\n\t\t\tfragmentShader: SSRDepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms[ 'tDepth' ].value = this.beautyRenderTarget.depthTexture;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\n\t\t// material for rendering the content of a render target\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: SrcAlphaFactor,\n\t\t\tblendDst: OneMinusSrcAlphaFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: SrcAlphaFactor,\n\t\t\tblendDstAlpha: OneMinusSrcAlphaFactor,\n\t\t\tblendEquationAlpha: AddEquation,\n\t\t\t// premultipliedAlpha:true,\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.originalClearColor = new Color();\n\n\t}\n\n\tdispose() {\n\n\t\t// dispose render targets\n\n\t\tthis.beautyRenderTarget.dispose();\n\t\tthis.prevRenderTarget.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.metalnessRenderTarget.dispose();\n\t\tthis.ssrRenderTarget.dispose();\n\t\tthis.blurRenderTarget.dispose();\n\t\tthis.blurRenderTarget2.dispose();\n\t\t// this.blurRenderTarget3.dispose();\n\n\t\t// dispose materials\n\n\t\tthis.normalMaterial.dispose();\n\t\tthis.metalnessOnMaterial.dispose();\n\t\tthis.metalnessOffMaterial.dispose();\n\t\tthis.blurMaterial.dispose();\n\t\tthis.blurMaterial2.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\n\t\t// dipsose full screen quad\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\trender( renderer, writeBuffer /*, readBuffer, deltaTime, maskActive */ ) {\n\n\t\t// render beauty and depth\n\n\t\trenderer.setRenderTarget( this.beautyRenderTarget );\n\t\trenderer.clear();\n\t\tif ( this.groundReflector ) {\n\n\t\t\tthis.groundReflector.visible = false;\n\t\t\tthis.groundReflector.doRender( this.renderer, this.scene, this.camera );\n\t\t\tthis.groundReflector.visible = true;\n\n\t\t}\n\n\t\trenderer.render( this.scene, this.camera );\n\t\tif ( this.groundReflector ) this.groundReflector.visible = false;\n\n\t\t// render normals\n\n\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0, 0 );\n\n\t\t// render metalnesses\n\n\t\tif ( this.selective ) {\n\n\t\t\tthis.renderMetalness( renderer, this.metalnessOnMaterial, this.metalnessRenderTarget, 0, 0 );\n\n\t\t}\n\n\t\t// render SSR\n\n\t\tthis.ssrMaterial.uniforms[ 'opacity' ].value = this.opacity;\n\t\tthis.ssrMaterial.uniforms[ 'maxDistance' ].value = this.maxDistance;\n\t\tthis.ssrMaterial.uniforms[ 'thickness' ].value = this.thickness;\n\t\tthis.renderPass( renderer, this.ssrMaterial, this.ssrRenderTarget );\n\n\n\t\t// render blur\n\n\t\tif ( this.blur ) {\n\n\t\t\tthis.renderPass( renderer, this.blurMaterial, this.blurRenderTarget );\n\t\t\tthis.renderPass( renderer, this.blurMaterial2, this.blurRenderTarget2 );\n\t\t\t// this.renderPass(renderer, this.blurMaterial3, this.blurRenderTarget3);\n\n\t\t}\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase SSRPass.OUTPUT.Default:\n\n\t\t\t\tif ( this.bouncing ) {\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t\tif ( this.blur )\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NormalBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.prevRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\t\tif ( this.blur )\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NormalBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase SSRPass.OUTPUT.SSR:\n\n\t\t\t\tif ( this.blur )\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\telse\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tif ( this.bouncing ) {\n\n\t\t\t\t\tif ( this.blur )\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NormalBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Beauty:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Depth:\n\n\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Metalness:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.metalnessRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.SSRPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\tthis.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );\n\t\tconst originalClearAlpha = renderer.getClearAlpha( this.tempColor );\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\tthis.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );\n\t\tconst originalClearAlpha = renderer.getClearAlpha( this.tempColor );\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\t// restore original state\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderMetalness( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\tthis.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );\n\t\tconst originalClearAlpha = renderer.getClearAlpha( this.tempColor );\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.traverseVisible( child => {\n\n\t\t\tchild._SSRPassBackupMaterial = child.material;\n\t\t\tif ( this._selects.includes( child ) ) {\n\n\t\t\t\tchild.material = this.metalnessOnMaterial;\n\n\t\t\t} else {\n\n\t\t\t\tchild.material = this.metalnessOffMaterial;\n\n\t\t\t}\n\n\t\t} );\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.traverseVisible( child => {\n\n\t\t\tchild.material = child._SSRPassBackupMaterial;\n\n\t\t} );\n\n\t\t// restore original state\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.ssrMaterial.defines.MAX_STEP = Math.sqrt( width * width + height * height );\n\t\tthis.ssrMaterial.needsUpdate = true;\n\t\tthis.beautyRenderTarget.setSize( width, height );\n\t\tthis.prevRenderTarget.setSize( width, height );\n\t\tthis.ssrRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.metalnessRenderTarget.setSize( width, height );\n\t\tthis.blurRenderTarget.setSize( width, height );\n\t\tthis.blurRenderTarget2.setSize( width, height );\n\t\t// this.blurRenderTarget3.setSize(width, height);\n\n\t\tthis.ssrMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\tthis.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\tthis.blurMaterial2.uniforms[ 'resolution' ].value.set( width, height );\n\n\t}\n\n}\n\nSSRPass.OUTPUT = {\n\t'Default': 0,\n\t'SSR': 1,\n\t'Beauty': 3,\n\t'Depth': 4,\n\t'Normal': 5,\n\t'Metalness': 7,\n};\n\nexport { SSRPass };\n", "import {\n\tHalfFloatType,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass SavePass extends Pass {\n\n\tconstructor( renderTarget ) {\n\n\t\tsuper();\n\n\t\tconst shader = CopyShader;\n\n\t\tthis.textureID = 'tDiffuse';\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tif ( this.renderTarget === undefined ) {\n\n\t\t\tthis.renderTarget = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later\n\t\t\tthis.renderTarget.texture.name = 'SavePass.rt';\n\n\t\t}\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderTarget );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.renderTarget.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTarget.dispose();\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { SavePass };\n", "import {\n\tHalfFloatType,\n\tWebGLRenderTarget\n} from 'three';\nimport { SSAARenderPass } from './SSAARenderPass.js';\n\n/**\n *\n * Temporal Anti-Aliasing Render Pass\n *\n * When there is no motion in the scene, the TAA render pass accumulates jittered camera samples across frames to create a high quality anti-aliased result.\n *\n * References:\n *\n * TODO: Add support for motion vector pas so that accumulation of samples across frames can occur on dynamics scenes.\n *\n */\n\nclass TAARenderPass extends SSAARenderPass {\n\n\tconstructor( scene, camera, clearColor, clearAlpha ) {\n\n\t\tsuper( scene, camera, clearColor, clearAlpha );\n\n\t\tthis.sampleLevel = 0;\n\t\tthis.accumulate = false;\n\t\tthis.accumulateIndex = - 1;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime ) {\n\n\t\tif ( this.accumulate === false ) {\n\n\t\t\tsuper.render( renderer, writeBuffer, readBuffer, deltaTime );\n\n\t\t\tthis.accumulateIndex = - 1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst jitterOffsets = _JitterVectors[ 5 ];\n\n\t\tif ( this.sampleRenderTarget === undefined ) {\n\n\t\t\tthis.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );\n\t\t\tthis.sampleRenderTarget.texture.name = 'TAARenderPass.sample';\n\n\t\t}\n\n\t\tif ( this.holdRenderTarget === undefined ) {\n\n\t\t\tthis.holdRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );\n\t\t\tthis.holdRenderTarget.texture.name = 'TAARenderPass.hold';\n\n\t\t}\n\n\t\tif ( this.accumulateIndex === - 1 ) {\n\n\t\t\tsuper.render( renderer, this.holdRenderTarget, readBuffer, deltaTime );\n\n\t\t\tthis.accumulateIndex = 0;\n\n\t\t}\n\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tconst oldClearAlpha = renderer.getClearAlpha();\n\n\t\tconst sampleWeight = 1.0 / ( jitterOffsets.length );\n\n\t\tif ( this.accumulateIndex >= 0 && this.accumulateIndex < jitterOffsets.length ) {\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = sampleWeight;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = writeBuffer.texture;\n\n\t\t\t// render the scene multiple times, each slightly jitter offset from the last and accumulate the results.\n\t\t\tconst numSamplesPerFrame = Math.pow( 2, this.sampleLevel );\n\t\t\tfor ( let i = 0; i < numSamplesPerFrame; i ++ ) {\n\n\t\t\t\tconst j = this.accumulateIndex;\n\t\t\t\tconst jitterOffset = jitterOffsets[ j ];\n\n\t\t\t\tif ( this.camera.setViewOffset ) {\n\n\t\t\t\t\tthis.camera.setViewOffset( readBuffer.width, readBuffer.height,\n\t\t\t\t\t\tjitterOffset[ 0 ] * 0.0625, jitterOffset[ 1 ] * 0.0625, // 0.0625 = 1 / 16\n\t\t\t\t\t\treadBuffer.width, readBuffer.height );\n\n\t\t\t\t}\n\n\t\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\t\t\t\trenderer.clear();\n\t\t\t\trenderer.render( this.scene, this.camera );\n\n\t\t\t\trenderer.setRenderTarget( this.sampleRenderTarget );\n\t\t\t\tif ( this.accumulateIndex === 0 ) {\n\n\t\t\t\t\trenderer.setClearColor( 0x000000, 0.0 );\n\t\t\t\t\trenderer.clear();\n\n\t\t\t\t}\n\n\t\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t\tthis.accumulateIndex ++;\n\n\t\t\t\tif ( this.accumulateIndex >= jitterOffsets.length ) break;\n\n\t\t\t}\n\n\t\t\tif ( this.camera.clearViewOffset ) this.camera.clearViewOffset();\n\n\t\t}\n\n\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\t\tconst accumulationWeight = this.accumulateIndex * sampleWeight;\n\n\t\tif ( accumulationWeight > 0 ) {\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = 1.0;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.sampleRenderTarget.texture;\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tif ( accumulationWeight < 1.0 ) {\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = 1.0 - accumulationWeight;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.holdRenderTarget.texture;\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t}\n\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tif ( this.holdRenderTarget ) this.holdRenderTarget.dispose();\n\n\t}\n\n}\n\nconst _JitterVectors = [\n\t[\n\t\t[ 0, 0 ]\n\t],\n\t[\n\t\t[ 4, 4 ], [ - 4, - 4 ]\n\t],\n\t[\n\t\t[ - 2, - 6 ], [ 6, - 2 ], [ - 6, 2 ], [ 2, 6 ]\n\t],\n\t[\n\t\t[ 1, - 3 ], [ - 1, 3 ], [ 5, 1 ], [ - 3, - 5 ],\n\t\t[ - 5, 5 ], [ - 7, - 1 ], [ 3, 7 ], [ 7, - 7 ]\n\t],\n\t[\n\t\t[ 1, 1 ], [ - 1, - 3 ], [ - 3, 2 ], [ 4, - 1 ],\n\t\t[ - 5, - 2 ], [ 2, 5 ], [ 5, 3 ], [ 3, - 5 ],\n\t\t[ - 2, 6 ], [ 0, - 7 ], [ - 4, - 6 ], [ - 6, 4 ],\n\t\t[ - 8, 0 ], [ 7, - 4 ], [ 6, 7 ], [ - 7, - 8 ]\n\t],\n\t[\n\t\t[ - 4, - 7 ], [ - 7, - 5 ], [ - 3, - 5 ], [ - 5, - 4 ],\n\t\t[ - 1, - 4 ], [ - 2, - 2 ], [ - 6, - 1 ], [ - 4, 0 ],\n\t\t[ - 7, 1 ], [ - 1, 2 ], [ - 6, 3 ], [ - 3, 3 ],\n\t\t[ - 7, 6 ], [ - 3, 6 ], [ - 5, 7 ], [ - 1, 7 ],\n\t\t[ 5, - 7 ], [ 1, - 6 ], [ 6, - 5 ], [ 4, - 4 ],\n\t\t[ 2, - 3 ], [ 7, - 2 ], [ 1, - 1 ], [ 4, - 1 ],\n\t\t[ 2, 1 ], [ 6, 2 ], [ 0, 4 ], [ 4, 4 ],\n\t\t[ 2, 5 ], [ 7, 5 ], [ 5, 6 ], [ 3, 7 ]\n\t]\n];\n\nexport { TAARenderPass };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass TexturePass extends Pass {\n\n\tconstructor( map, opacity ) {\n\n\t\tsuper();\n\n\t\tconst shader = CopyShader;\n\n\t\tthis.map = map;\n\t\tthis.opacity = ( opacity !== undefined ) ? opacity : 1.0;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tpremultipliedAlpha: true\n\n\t\t} );\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tthis.uniforms[ 'opacity' ].value = this.opacity;\n\t\tthis.uniforms[ 'tDiffuse' ].value = this.map;\n\t\tthis.material.transparent = ( this.opacity < 1.0 );\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { TexturePass };\n", "import {\n\tColor\n} from 'three';\n\n/**\n * Luminosity\n * http://en.wikipedia.org/wiki/Luminosity\n */\n\nconst LuminosityHighPassShader = {\n\n\tname: 'LuminosityHighPassShader',\n\n\tshaderID: 'luminosityHighPass',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'luminosityThreshold': { value: 1.0 },\n\t\t'smoothWidth': { value: 1.0 },\n\t\t'defaultColor': { value: new Color( 0x000000 ) },\n\t\t'defaultOpacity': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec3 defaultColor;\n\t\tuniform float defaultOpacity;\n\t\tuniform float luminosityThreshold;\n\t\tuniform float smoothWidth;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat v = luminance( texel.xyz );\n\n\t\t\tvec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );\n\n\t\t\tfloat alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );\n\n\t\t\tgl_FragColor = mix( outputColor, texel, alpha );\n\n\t\t}`\n\n};\n\nexport { LuminosityHighPassShader };\n", "import {\n\tAdditiveBlending,\n\tColor,\n\tHalfFloatType,\n\tMeshBasicMaterial,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js';\n\n/**\n * UnrealBloomPass is inspired by the bloom pass of Unreal Engine. It creates a\n * mip map chain of bloom textures and blurs them with different radii. Because\n * of the weighted combination of mips, and because larger blurs are done on\n * higher mips, this effect provides good quality and performance.\n *\n * Reference:\n * - https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/\n */\nclass UnrealBloomPass extends Pass {\n\n\tconstructor( resolution, strength, radius, threshold ) {\n\n\t\tsuper();\n\n\t\tthis.strength = ( strength !== undefined ) ? strength : 1;\n\t\tthis.radius = radius;\n\t\tthis.threshold = threshold;\n\t\tthis.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );\n\n\t\t// create color only once here, reuse it later inside the render function\n\t\tthis.clearColor = new Color( 0, 0, 0 );\n\n\t\t// render targets\n\t\tthis.renderTargetsHorizontal = [];\n\t\tthis.renderTargetsVertical = [];\n\t\tthis.nMips = 5;\n\t\tlet resx = Math.round( this.resolution.x / 2 );\n\t\tlet resy = Math.round( this.resolution.y / 2 );\n\n\t\tthis.renderTargetBright = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetBright.texture.name = 'UnrealBloomPass.bright';\n\t\tthis.renderTargetBright.texture.generateMipmaps = false;\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tconst renderTargetHorizontal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\n\t\t\trenderTargetHorizontal.texture.name = 'UnrealBloomPass.h' + i;\n\t\t\trenderTargetHorizontal.texture.generateMipmaps = false;\n\n\t\t\tthis.renderTargetsHorizontal.push( renderTargetHorizontal );\n\n\t\t\tconst renderTargetVertical = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\n\t\t\trenderTargetVertical.texture.name = 'UnrealBloomPass.v' + i;\n\t\t\trenderTargetVertical.texture.generateMipmaps = false;\n\n\t\t\tthis.renderTargetsVertical.push( renderTargetVertical );\n\n\t\t\tresx = Math.round( resx / 2 );\n\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t\t// luminosity high pass material\n\n\t\tconst highPassShader = LuminosityHighPassShader;\n\t\tthis.highPassUniforms = UniformsUtils.clone( highPassShader.uniforms );\n\n\t\tthis.highPassUniforms[ 'luminosityThreshold' ].value = threshold;\n\t\tthis.highPassUniforms[ 'smoothWidth' ].value = 0.01;\n\n\t\tthis.materialHighPassFilter = new ShaderMaterial( {\n\t\t\tuniforms: this.highPassUniforms,\n\t\t\tvertexShader: highPassShader.vertexShader,\n\t\t\tfragmentShader: highPassShader.fragmentShader\n\t\t} );\n\n\t\t// gaussian blur materials\n\n\t\tthis.separableBlurMaterials = [];\n\t\tconst kernelSizeArray = [ 3, 5, 7, 9, 11 ];\n\t\tresx = Math.round( this.resolution.x / 2 );\n\t\tresy = Math.round( this.resolution.y / 2 );\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.separableBlurMaterials.push( this.getSeperableBlurMaterial( kernelSizeArray[ i ] ) );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );\n\n\t\t\tresx = Math.round( resx / 2 );\n\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t\t// composite material\n\n\t\tthis.compositeMaterial = this.getCompositeMaterial( this.nMips );\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture1' ].value = this.renderTargetsVertical[ 0 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture2' ].value = this.renderTargetsVertical[ 1 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture3' ].value = this.renderTargetsVertical[ 2 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture4' ].value = this.renderTargetsVertical[ 3 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture5' ].value = this.renderTargetsVertical[ 4 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'bloomStrength' ].value = strength;\n\t\tthis.compositeMaterial.uniforms[ 'bloomRadius' ].value = 0.1;\n\n\t\tconst bloomFactors = [ 1.0, 0.8, 0.6, 0.4, 0.2 ];\n\t\tthis.compositeMaterial.uniforms[ 'bloomFactors' ].value = bloomFactors;\n\t\tthis.bloomTintColors = [ new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ) ];\n\t\tthis.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;\n\n\t\t// blend material\n\n\t\tconst copyShader = CopyShader;\n\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.blendMaterial = new ShaderMaterial( {\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis.enabled = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis._oldClearColor = new Color();\n\t\tthis.oldClearAlpha = 1;\n\n\t\tthis.basic = new MeshBasicMaterial();\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.renderTargetsHorizontal.length; i ++ ) {\n\n\t\t\tthis.renderTargetsHorizontal[ i ].dispose();\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.renderTargetsVertical.length; i ++ ) {\n\n\t\t\tthis.renderTargetsVertical[ i ].dispose();\n\n\t\t}\n\n\t\tthis.renderTargetBright.dispose();\n\n\t\t//\n\n\t\tfor ( let i = 0; i < this.separableBlurMaterials.length; i ++ ) {\n\n\t\t\tthis.separableBlurMaterials[ i ].dispose();\n\n\t\t}\n\n\t\tthis.compositeMaterial.dispose();\n\t\tthis.blendMaterial.dispose();\n\t\tthis.basic.dispose();\n\n\t\t//\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tlet resx = Math.round( width / 2 );\n\t\tlet resy = Math.round( height / 2 );\n\n\t\tthis.renderTargetBright.setSize( resx, resy );\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.renderTargetsHorizontal[ i ].setSize( resx, resy );\n\t\t\tthis.renderTargetsVertical[ i ].setSize( resx, resy );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );\n\n\t\t\tresx = Math.round( resx / 2 );\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.setClearColor( this.clearColor, 0 );\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t// Render input to screen\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis.fsQuad.material = this.basic;\n\t\t\tthis.basic.map = readBuffer.texture;\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\t// 1. Extract Bright Areas\n\n\t\tthis.highPassUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.highPassUniforms[ 'luminosityThreshold' ].value = this.threshold;\n\t\tthis.fsQuad.material = this.materialHighPassFilter;\n\n\t\trenderer.setRenderTarget( this.renderTargetBright );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// 2. Blur All the mips progressively\n\n\t\tlet inputRenderTarget = this.renderTargetBright;\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.fsQuad.material = this.separableBlurMaterials[ i ];\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = inputRenderTarget.texture;\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionX;\n\t\t\trenderer.setRenderTarget( this.renderTargetsHorizontal[ i ] );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = this.renderTargetsHorizontal[ i ].texture;\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetsVertical[ i ] );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\tinputRenderTarget = this.renderTargetsVertical[ i ];\n\n\t\t}\n\n\t\t// Composite All the mips\n\n\t\tthis.fsQuad.material = this.compositeMaterial;\n\t\tthis.compositeMaterial.uniforms[ 'bloomStrength' ].value = this.strength;\n\t\tthis.compositeMaterial.uniforms[ 'bloomRadius' ].value = this.radius;\n\t\tthis.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;\n\n\t\trenderer.setRenderTarget( this.renderTargetsHorizontal[ 0 ] );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// Blend it additively over the input texture\n\n\t\tthis.fsQuad.material = this.blendMaterial;\n\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.renderTargetsHorizontal[ 0 ].texture;\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( readBuffer );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\t// Restore renderer settings\n\n\t\trenderer.setClearColor( this._oldClearColor, this.oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tgetSeperableBlurMaterial( kernelRadius ) {\n\n\t\tconst coefficients = [];\n\n\t\tfor ( let i = 0; i < kernelRadius; i ++ ) {\n\n\t\t\tcoefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );\n\n\t\t}\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'KERNEL_RADIUS': kernelRadius\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'colorTexture': { value: null },\n\t\t\t\t'invSize': { value: new Vector2( 0.5, 0.5 ) }, // inverse texture size\n\t\t\t\t'direction': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'gaussianCoefficients': { value: coefficients } // precomputed Gaussian coefficients\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 invSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float gaussianCoefficients[KERNEL_RADIUS];\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat weightSum = gaussianCoefficients[0];\n\t\t\t\t\tvec3 diffuseSum = texture2D( colorTexture, vUv ).rgb * weightSum;\n\t\t\t\t\tfor( int i = 1; i < KERNEL_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = float(i);\n\t\t\t\t\t\tfloat w = gaussianCoefficients[i];\n\t\t\t\t\t\tvec2 uvOffset = direction * invSize * x;\n\t\t\t\t\t\tvec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;\n\t\t\t\t\t\tvec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;\n\t\t\t\t\t\tdiffuseSum += (sample1 + sample2) * w;\n\t\t\t\t\t\tweightSum += 2.0 * w;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = vec4(diffuseSum/weightSum, 1.0);\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\tgetCompositeMaterial( nMips ) {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'NUM_MIPS': nMips\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'blurTexture1': { value: null },\n\t\t\t\t'blurTexture2': { value: null },\n\t\t\t\t'blurTexture3': { value: null },\n\t\t\t\t'blurTexture4': { value: null },\n\t\t\t\t'blurTexture5': { value: null },\n\t\t\t\t'bloomStrength': { value: 1.0 },\n\t\t\t\t'bloomFactors': { value: null },\n\t\t\t\t'bloomTintColors': { value: null },\n\t\t\t\t'bloomRadius': { value: 0.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tuniform sampler2D blurTexture1;\n\t\t\t\tuniform sampler2D blurTexture2;\n\t\t\t\tuniform sampler2D blurTexture3;\n\t\t\t\tuniform sampler2D blurTexture4;\n\t\t\t\tuniform sampler2D blurTexture5;\n\t\t\t\tuniform float bloomStrength;\n\t\t\t\tuniform float bloomRadius;\n\t\t\t\tuniform float bloomFactors[NUM_MIPS];\n\t\t\t\tuniform vec3 bloomTintColors[NUM_MIPS];\n\n\t\t\t\tfloat lerpBloomFactor(const in float factor) {\n\t\t\t\t\tfloat mirrorFactor = 1.2 - factor;\n\t\t\t\t\treturn mix(factor, mirrorFactor, bloomRadius);\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tgl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n}\n\nUnrealBloomPass.BlurDirectionX = new Vector2( 1.0, 0.0 );\nUnrealBloomPass.BlurDirectionY = new Vector2( 0.0, 1.0 );\n\nexport { UnrealBloomPass };\n", "import {\n\tMatrix4,\n\tObject3D,\n\tVector2,\n\tVector3\n} from 'three';\n\nclass CSS2DObject extends Object3D {\n\n\tconstructor( element = document.createElement( 'div' ) ) {\n\n\t\tsuper();\n\n\t\tthis.isCSS2DObject = true;\n\n\t\tthis.element = element;\n\n\t\tthis.element.style.position = 'absolute';\n\t\tthis.element.style.userSelect = 'none';\n\n\t\tthis.element.setAttribute( 'draggable', false );\n\n\t\tthis.center = new Vector2( 0.5, 0.5 ); // ( 0, 0 ) is the lower left; ( 1, 1 ) is the top right\n\n\t\tthis.addEventListener( 'removed', function () {\n\n\t\t\tthis.traverse( function ( object ) {\n\n\t\t\t\tif ( object.element instanceof Element && object.element.parentNode !== null ) {\n\n\t\t\t\t\tobject.element.parentNode.removeChild( object.element );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.element = source.element.cloneNode( true );\n\n\t\tthis.center = source.center;\n\n\t\treturn this;\n\n\t}\n\n}\n\n//\n\nconst _vector = new Vector3();\nconst _viewMatrix = new Matrix4();\nconst _viewProjectionMatrix = new Matrix4();\nconst _a = new Vector3();\nconst _b = new Vector3();\n\nclass CSS2DRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst _this = this;\n\n\t\tlet _width, _height;\n\t\tlet _widthHalf, _heightHalf;\n\n\t\tconst cache = {\n\t\t\tobjects: new WeakMap()\n\t\t};\n\n\t\tconst domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );\n\n\t\tdomElement.style.overflow = 'hidden';\n\n\t\tthis.domElement = domElement;\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\trenderObject( scene, scene, camera );\n\t\t\tzOrder( scene );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_widthHalf = _width / 2;\n\t\t\t_heightHalf = _height / 2;\n\n\t\t\tdomElement.style.width = width + 'px';\n\t\t\tdomElement.style.height = height + 'px';\n\n\t\t};\n\n\t\tfunction hideObject( object ) {\n\n\t\t\tif ( object.isCSS2DObject ) object.element.style.display = 'none';\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\thideObject( object.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera ) {\n\n\t\t\tif ( object.visible === false ) {\n\n\t\t\t\thideObject( object );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\t\t\t\n\t\t\tif ( object.isCSS2DObject ) {\n\n\t\t\t\t_vector.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t_vector.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tconst visible = ( _vector.z >= - 1 && _vector.z <= 1 ) && ( object.layers.test( camera.layers ) === true );\n\n\t\t\t\tconst element = object.element;\n\t\t\t\telement.style.display = visible === true ? '' : 'none';\n\n\t\t\t\tif ( visible === true ) {\n\n\t\t\t\t\tobject.onBeforeRender( _this, scene, camera );\n\n\t\t\t\t\telement.style.transform = 'translate(' + ( - 100 * object.center.x ) + '%,' + ( - 100 * object.center.y ) + '%)' + 'translate(' + ( _vector.x * _widthHalf + _widthHalf ) + 'px,' + ( - _vector.y * _heightHalf + _heightHalf ) + 'px)';\n\n\t\t\t\t\tif ( element.parentNode !== domElement ) {\n\n\t\t\t\t\t\tdomElement.appendChild( element );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.onAfterRender( _this, scene, camera );\n\n\t\t\t\t}\n\n\t\t\t\tconst objectData = {\n\t\t\t\t\tdistanceToCameraSquared: getDistanceToSquared( camera, object )\n\t\t\t\t};\n\n\t\t\t\tcache.objects.set( object, objectData );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( object.children[ i ], scene, camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getDistanceToSquared( object1, object2 ) {\n\n\t\t\t_a.setFromMatrixPosition( object1.matrixWorld );\n\t\t\t_b.setFromMatrixPosition( object2.matrixWorld );\n\n\t\t\treturn _a.distanceToSquared( _b );\n\n\t\t}\n\n\t\tfunction filterAndFlatten( scene ) {\n\n\t\t\tconst result = [];\n\n\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isCSS2DObject ) result.push( object );\n\n\t\t\t} );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction zOrder( scene ) {\n\n\t\t\tconst sorted = filterAndFlatten( scene ).sort( function ( a, b ) {\n\n\t\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\t\treturn b.renderOrder - a.renderOrder;\n\n\t\t\t\t}\n\n\t\t\t\tconst distanceA = cache.objects.get( a ).distanceToCameraSquared;\n\t\t\t\tconst distanceB = cache.objects.get( b ).distanceToCameraSquared;\n\n\t\t\t\treturn distanceA - distanceB;\n\n\t\t\t} );\n\n\t\t\tconst zMax = sorted.length;\n\n\t\t\tfor ( let i = 0, l = sorted.length; i < l; i ++ ) {\n\n\t\t\t\tsorted[ i ].element.style.zIndex = zMax - i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSS2DObject, CSS2DRenderer };\n", "import {\n\tMatrix4,\n\tObject3D,\n\tQuaternion,\n\tVector3\n} from 'three';\n\n/**\n * Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs\n */\n\nconst _position = new Vector3();\nconst _quaternion = new Quaternion();\nconst _scale = new Vector3();\n\nclass CSS3DObject extends Object3D {\n\n\tconstructor( element = document.createElement( 'div' ) ) {\n\n\t\tsuper();\n\n\t\tthis.isCSS3DObject = true;\n\n\t\tthis.element = element;\n\t\tthis.element.style.position = 'absolute';\n\t\tthis.element.style.pointerEvents = 'auto';\n\t\tthis.element.style.userSelect = 'none';\n\n\t\tthis.element.setAttribute( 'draggable', false );\n\n\t\tthis.addEventListener( 'removed', function () {\n\n\t\t\tthis.traverse( function ( object ) {\n\n\t\t\t\tif ( object.element instanceof Element && object.element.parentNode !== null ) {\n\n\t\t\t\t\tobject.element.parentNode.removeChild( object.element );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.element = source.element.cloneNode( true );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CSS3DSprite extends CSS3DObject {\n\n\tconstructor( element ) {\n\n\t\tsuper( element );\n\n\t\tthis.isCSS3DSprite = true;\n\n\t\tthis.rotation2D = 0;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.rotation2D = source.rotation2D;\n\n\t\treturn this;\n\n\t}\n\n}\n\n//\n\nconst _matrix = new Matrix4();\nconst _matrix2 = new Matrix4();\n\nclass CSS3DRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst _this = this;\n\n\t\tlet _width, _height;\n\t\tlet _widthHalf, _heightHalf;\n\n\t\tconst cache = {\n\t\t\tcamera: { style: '' },\n\t\t\tobjects: new WeakMap()\n\t\t};\n\n\t\tconst domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );\n\n\t\tdomElement.style.overflow = 'hidden';\n\n\t\tthis.domElement = domElement;\n\n\t\tconst viewElement = document.createElement( 'div' );\n\t\tviewElement.style.transformOrigin = '0 0';\n\t\tviewElement.style.pointerEvents = 'none';\n\t\tdomElement.appendChild( viewElement );\n\n\t\tconst cameraElement = document.createElement( 'div' );\n\n\t\tcameraElement.style.transformStyle = 'preserve-3d';\n\n\t\tviewElement.appendChild( cameraElement );\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tconst fov = camera.projectionMatrix.elements[ 5 ] * _heightHalf;\n\n\t\t\tif ( camera.view && camera.view.enabled ) {\n\n\t\t\t\t// view offset\n\t\t\t\tviewElement.style.transform = `translate( ${ - camera.view.offsetX * ( _width / camera.view.width ) }px, ${ - camera.view.offsetY * ( _height / camera.view.height ) }px )`;\n\n\t\t\t\t// view fullWidth and fullHeight, view width and height\n\t\t\t\tviewElement.style.transform += `scale( ${ camera.view.fullWidth / camera.view.width }, ${ camera.view.fullHeight / camera.view.height } )`;\n\n\t\t\t} else {\n\n\t\t\t\tviewElement.style.transform = '';\n\n\t\t\t}\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tlet tx, ty;\n\n\t\t\tif ( camera.isOrthographicCamera ) {\n\n\t\t\t\ttx = - ( camera.right + camera.left ) / 2;\n\t\t\t\tty = ( camera.top + camera.bottom ) / 2;\n\n\t\t\t}\n\n\t\t\tconst scaleByViewOffset = camera.view && camera.view.enabled ? camera.view.height / camera.view.fullHeight : 1;\n\t\t\tconst cameraCSSMatrix = camera.isOrthographicCamera ?\n\t\t\t\t`scale( ${ scaleByViewOffset } )` + 'scale(' + fov + ')' + 'translate(' + epsilon( tx ) + 'px,' + epsilon( ty ) + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse ) :\n\t\t\t\t`scale( ${ scaleByViewOffset } )` + 'translateZ(' + fov + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse );\n\t\t\tconst perspective = camera.isPerspectiveCamera ? 'perspective(' + fov + 'px) ' : '';\n\n\t\t\tconst style = perspective + cameraCSSMatrix +\n\t\t\t\t'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';\n\n\t\t\tif ( cache.camera.style !== style ) {\n\n\t\t\t\tcameraElement.style.transform = style;\n\n\t\t\t\tcache.camera.style = style;\n\n\t\t\t}\n\n\t\t\trenderObject( scene, scene, camera, cameraCSSMatrix );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\t\t\t_widthHalf = _width / 2;\n\t\t\t_heightHalf = _height / 2;\n\n\t\t\tdomElement.style.width = width + 'px';\n\t\t\tdomElement.style.height = height + 'px';\n\n\t\t\tviewElement.style.width = width + 'px';\n\t\t\tviewElement.style.height = height + 'px';\n\n\t\t\tcameraElement.style.width = width + 'px';\n\t\t\tcameraElement.style.height = height + 'px';\n\n\t\t};\n\n\t\tfunction epsilon( value ) {\n\n\t\t\treturn Math.abs( value ) < 1e-10 ? 0 : value;\n\n\t\t}\n\n\t\tfunction getCameraCSSMatrix( matrix ) {\n\n\t\t\tconst elements = matrix.elements;\n\n\t\t\treturn 'matrix3d(' +\n\t\t\t\tepsilon( elements[ 0 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 1 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 2 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 3 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 4 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 5 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 6 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 7 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 8 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 9 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 10 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 11 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 12 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 13 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 14 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 15 ] ) +\n\t\t\t')';\n\n\t\t}\n\n\t\tfunction getObjectCSSMatrix( matrix ) {\n\n\t\t\tconst elements = matrix.elements;\n\t\t\tconst matrix3d = 'matrix3d(' +\n\t\t\t\tepsilon( elements[ 0 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 1 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 2 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 3 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 4 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 5 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 6 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 7 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 8 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 9 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 10 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 11 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 12 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 13 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 14 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 15 ] ) +\n\t\t\t')';\n\n\t\t\treturn 'translate(-50%,-50%)' + matrix3d;\n\n\t\t}\n\n\t\tfunction hideObject( object ) {\n\n\t\t\tif ( object.isCSS3DObject ) object.element.style.display = 'none';\n\t \n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t hideObject( object.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, cameraCSSMatrix ) {\n\n\t\t\tif ( object.visible === false ) {\n\n\t\t\t\thideObject( object );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( object.isCSS3DObject ) {\n\n\t\t\t\tconst visible = ( object.layers.test( camera.layers ) === true );\n\n\t\t\t\tconst element = object.element;\n\t\t\t\telement.style.display = visible === true ? '' : 'none';\n\n\t\t\t\tif ( visible === true ) {\n\n\t\t\t\t\tobject.onBeforeRender( _this, scene, camera );\n\n\t\t\t\t\tlet style;\n\n\t\t\t\t\tif ( object.isCSS3DSprite ) {\n\n\t\t\t\t\t\t// http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/\n\n\t\t\t\t\t\t_matrix.copy( camera.matrixWorldInverse );\n\t\t\t\t\t\t_matrix.transpose();\n\n\t\t\t\t\t\tif ( object.rotation2D !== 0 ) _matrix.multiply( _matrix2.makeRotationZ( object.rotation2D ) );\n\n\t\t\t\t\t\tobject.matrixWorld.decompose( _position, _quaternion, _scale );\n\t\t\t\t\t\t_matrix.setPosition( _position );\n\t\t\t\t\t\t_matrix.scale( _scale );\n\n\t\t\t\t\t\t_matrix.elements[ 3 ] = 0;\n\t\t\t\t\t\t_matrix.elements[ 7 ] = 0;\n\t\t\t\t\t\t_matrix.elements[ 11 ] = 0;\n\t\t\t\t\t\t_matrix.elements[ 15 ] = 1;\n\n\t\t\t\t\t\tstyle = getObjectCSSMatrix( _matrix );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstyle = getObjectCSSMatrix( object.matrixWorld );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cachedObject = cache.objects.get( object );\n\n\t\t\t\t\tif ( cachedObject === undefined || cachedObject.style !== style ) {\n\n\t\t\t\t\t\telement.style.transform = style;\n\n\t\t\t\t\t\tconst objectData = { style: style };\n\t\t\t\t\t\tcache.objects.set( object, objectData );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( element.parentNode !== cameraElement ) {\n\n\t\t\t\t\t\tcameraElement.appendChild( element );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.onAfterRender( _this, scene, camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( object.children[ i ], scene, camera, cameraCSSMatrix );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSS3DObject, CSS3DSprite, CSS3DRenderer };\n", "import {\n\tBox3,\n\tColor,\n\tDoubleSide,\n\tFrustum,\n\tMatrix3,\n\tMatrix4,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\n\nclass RenderableObject {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.object = null;\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableFace {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.v1 = new RenderableVertex();\n\t\tthis.v2 = new RenderableVertex();\n\t\tthis.v3 = new RenderableVertex();\n\n\t\tthis.normalModel = new Vector3();\n\n\t\tthis.vertexNormalsModel = [ new Vector3(), new Vector3(), new Vector3() ];\n\t\tthis.vertexNormalsLength = 0;\n\n\t\tthis.color = new Color();\n\t\tthis.material = null;\n\t\tthis.uvs = [ new Vector2(), new Vector2(), new Vector2() ];\n\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableVertex {\n\n\tconstructor() {\n\n\t\tthis.position = new Vector3();\n\t\tthis.positionWorld = new Vector3();\n\t\tthis.positionScreen = new Vector4();\n\n\t\tthis.visible = true;\n\n\t}\n\n\tcopy( vertex ) {\n\n\t\tthis.positionWorld.copy( vertex.positionWorld );\n\t\tthis.positionScreen.copy( vertex.positionScreen );\n\n\t}\n\n}\n\n//\n\nclass RenderableLine {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.v1 = new RenderableVertex();\n\t\tthis.v2 = new RenderableVertex();\n\n\t\tthis.vertexColors = [ new Color(), new Color() ];\n\t\tthis.material = null;\n\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableSprite {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.object = null;\n\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\t\tthis.z = 0;\n\n\t\tthis.rotation = 0;\n\t\tthis.scale = new Vector2();\n\n\t\tthis.material = null;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass Projector {\n\n\tconstructor() {\n\n\t\tlet _object, _objectCount, _objectPoolLength = 0,\n\t\t\t_vertex, _vertexCount, _vertexPoolLength = 0,\n\t\t\t_face, _faceCount, _facePoolLength = 0,\n\t\t\t_line, _lineCount, _linePoolLength = 0,\n\t\t\t_sprite, _spriteCount, _spritePoolLength = 0,\n\t\t\t_modelMatrix;\n\n\t\tconst\n\n\t\t\t_renderData = { objects: [], lights: [], elements: [] },\n\n\t\t\t_vector3 = new Vector3(),\n\t\t\t_vector4 = new Vector4(),\n\n\t\t\t_clipBox = new Box3( new Vector3( - 1, - 1, - 1 ), new Vector3( 1, 1, 1 ) ),\n\t\t\t_boundingBox = new Box3(),\n\t\t\t_points3 = new Array( 3 ),\n\n\t\t\t_viewMatrix = new Matrix4(),\n\t\t\t_viewProjectionMatrix = new Matrix4(),\n\n\t\t\t_modelViewProjectionMatrix = new Matrix4(),\n\n\t\t\t_frustum = new Frustum(),\n\n\t\t\t_objectPool = [], _vertexPool = [], _facePool = [], _linePool = [], _spritePool = [];\n\n\t\t//\n\n\t\tfunction RenderList() {\n\n\t\t\tconst normals = [];\n\t\t\tconst colors = [];\n\t\t\tconst uvs = [];\n\n\t\t\tlet object = null;\n\n\t\t\tconst normalMatrix = new Matrix3();\n\n\t\t\tfunction setObject( value ) {\n\n\t\t\t\tobject = value;\n\n\t\t\t\tnormalMatrix.getNormalMatrix( object.matrixWorld );\n\n\t\t\t\tnormals.length = 0;\n\t\t\t\tcolors.length = 0;\n\t\t\t\tuvs.length = 0;\n\n\t\t\t}\n\n\t\t\tfunction projectVertex( vertex ) {\n\n\t\t\t\tconst position = vertex.position;\n\t\t\t\tconst positionWorld = vertex.positionWorld;\n\t\t\t\tconst positionScreen = vertex.positionScreen;\n\n\t\t\t\tpositionWorld.copy( position ).applyMatrix4( _modelMatrix );\n\t\t\t\tpositionScreen.copy( positionWorld ).applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tconst invW = 1 / positionScreen.w;\n\n\t\t\t\tpositionScreen.x *= invW;\n\t\t\t\tpositionScreen.y *= invW;\n\t\t\t\tpositionScreen.z *= invW;\n\n\t\t\t\tvertex.visible = positionScreen.x >= - 1 && positionScreen.x <= 1 &&\n\t\t\t\t\t\t positionScreen.y >= - 1 && positionScreen.y <= 1 &&\n\t\t\t\t\t\t positionScreen.z >= - 1 && positionScreen.z <= 1;\n\n\t\t\t}\n\n\t\t\tfunction pushVertex( x, y, z ) {\n\n\t\t\t\t_vertex = getNextVertexInPool();\n\t\t\t\t_vertex.position.set( x, y, z );\n\n\t\t\t\tprojectVertex( _vertex );\n\n\t\t\t}\n\n\t\t\tfunction pushNormal( x, y, z ) {\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t\tfunction pushColor( r, g, b ) {\n\n\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t}\n\n\t\t\tfunction pushUv( x, y ) {\n\n\t\t\t\tuvs.push( x, y );\n\n\t\t\t}\n\n\t\t\tfunction checkTriangleVisibility( v1, v2, v3 ) {\n\n\t\t\t\tif ( v1.visible === true || v2.visible === true || v3.visible === true ) return true;\n\n\t\t\t\t_points3[ 0 ] = v1.positionScreen;\n\t\t\t\t_points3[ 1 ] = v2.positionScreen;\n\t\t\t\t_points3[ 2 ] = v3.positionScreen;\n\n\t\t\t\treturn _clipBox.intersectsBox( _boundingBox.setFromPoints( _points3 ) );\n\n\t\t\t}\n\n\t\t\tfunction checkBackfaceCulling( v1, v2, v3 ) {\n\n\t\t\t\treturn ( ( v3.positionScreen.x - v1.positionScreen.x ) *\n\t\t\t\t\t ( v2.positionScreen.y - v1.positionScreen.y ) -\n\t\t\t\t\t ( v3.positionScreen.y - v1.positionScreen.y ) *\n\t\t\t\t\t ( v2.positionScreen.x - v1.positionScreen.x ) ) < 0;\n\n\t\t\t}\n\n\t\t\tfunction pushLine( a, b ) {\n\n\t\t\t\tconst v1 = _vertexPool[ a ];\n\t\t\t\tconst v2 = _vertexPool[ b ];\n\n\t\t\t\t// Clip\n\n\t\t\t\tv1.positionScreen.copy( v1.position ).applyMatrix4( _modelViewProjectionMatrix );\n\t\t\t\tv2.positionScreen.copy( v2.position ).applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\tif ( clipLine( v1.positionScreen, v2.positionScreen ) === true ) {\n\n\t\t\t\t\t// Perform the perspective divide\n\t\t\t\t\tv1.positionScreen.multiplyScalar( 1 / v1.positionScreen.w );\n\t\t\t\t\tv2.positionScreen.multiplyScalar( 1 / v2.positionScreen.w );\n\n\t\t\t\t\t_line = getNextLineInPool();\n\t\t\t\t\t_line.id = object.id;\n\t\t\t\t\t_line.v1.copy( v1 );\n\t\t\t\t\t_line.v2.copy( v2 );\n\t\t\t\t\t_line.z = Math.max( v1.positionScreen.z, v2.positionScreen.z );\n\t\t\t\t\t_line.renderOrder = object.renderOrder;\n\n\t\t\t\t\t_line.material = object.material;\n\n\t\t\t\t\tif ( object.material.vertexColors ) {\n\n\t\t\t\t\t\t_line.vertexColors[ 0 ].fromArray( colors, a * 3 );\n\t\t\t\t\t\t_line.vertexColors[ 1 ].fromArray( colors, b * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_renderData.elements.push( _line );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction pushTriangle( a, b, c, material ) {\n\n\t\t\t\tconst v1 = _vertexPool[ a ];\n\t\t\t\tconst v2 = _vertexPool[ b ];\n\t\t\t\tconst v3 = _vertexPool[ c ];\n\n\t\t\t\tif ( checkTriangleVisibility( v1, v2, v3 ) === false ) return;\n\n\t\t\t\tif ( material.side === DoubleSide || checkBackfaceCulling( v1, v2, v3 ) === true ) {\n\n\t\t\t\t\t_face = getNextFaceInPool();\n\n\t\t\t\t\t_face.id = object.id;\n\t\t\t\t\t_face.v1.copy( v1 );\n\t\t\t\t\t_face.v2.copy( v2 );\n\t\t\t\t\t_face.v3.copy( v3 );\n\t\t\t\t\t_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) / 3;\n\t\t\t\t\t_face.renderOrder = object.renderOrder;\n\n\t\t\t\t\t// face normal\n\t\t\t\t\t_vector3.subVectors( v3.position, v2.position );\n\t\t\t\t\t_vector4.subVectors( v1.position, v2.position );\n\t\t\t\t\t_vector3.cross( _vector4 );\n\t\t\t\t\t_face.normalModel.copy( _vector3 );\n\t\t\t\t\t_face.normalModel.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\tconst normal = _face.vertexNormalsModel[ i ];\n\t\t\t\t\t\tnormal.fromArray( normals, arguments[ i ] * 3 );\n\t\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\t\tconst uv = _face.uvs[ i ];\n\t\t\t\t\t\tuv.fromArray( uvs, arguments[ i ] * 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_face.vertexNormalsLength = 3;\n\n\t\t\t\t\t_face.material = material;\n\n\t\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t\t_face.color.fromArray( colors, a * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_renderData.elements.push( _face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsetObject: setObject,\n\t\t\t\tprojectVertex: projectVertex,\n\t\t\t\tcheckTriangleVisibility: checkTriangleVisibility,\n\t\t\t\tcheckBackfaceCulling: checkBackfaceCulling,\n\t\t\t\tpushVertex: pushVertex,\n\t\t\t\tpushNormal: pushNormal,\n\t\t\t\tpushColor: pushColor,\n\t\t\t\tpushUv: pushUv,\n\t\t\t\tpushLine: pushLine,\n\t\t\t\tpushTriangle: pushTriangle\n\t\t\t};\n\n\t\t}\n\n\t\tconst renderList = new RenderList();\n\n\t\tfunction projectObject( object ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\t_renderData.lights.push( object );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.material.visible === false ) return;\n\t\t\t\tif ( object.frustumCulled === true && _frustum.intersectsObject( object ) === false ) return;\n\n\t\t\t\taddObject( object );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( object.material.visible === false ) return;\n\t\t\t\tif ( object.frustumCulled === true && _frustum.intersectsSprite( object ) === false ) return;\n\n\t\t\t\taddObject( object );\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addObject( object ) {\n\n\t\t\t_object = getNextObjectInPool();\n\t\t\t_object.id = object.id;\n\t\t\t_object.object = object;\n\n\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\n\t\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\n\t\t\t_object.z = _vector3.z;\n\t\t\t_object.renderOrder = object.renderOrder;\n\n\t\t\t_renderData.objects.push( _object );\n\n\t\t}\n\n\t\tthis.projectScene = function ( scene, camera, sortObjects, sortElements ) {\n\n\t\t\t_faceCount = 0;\n\t\t\t_lineCount = 0;\n\t\t\t_spriteCount = 0;\n\n\t\t\t_renderData.elements.length = 0;\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\t_frustum.setFromProjectionMatrix( _viewProjectionMatrix );\n\n\t\t\t//\n\n\t\t\t_objectCount = 0;\n\n\t\t\t_renderData.objects.length = 0;\n\t\t\t_renderData.lights.length = 0;\n\n\t\t\tprojectObject( scene );\n\n\t\t\tif ( sortObjects === true ) {\n\n\t\t\t\t_renderData.objects.sort( painterSort );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst objects = _renderData.objects;\n\n\t\t\tfor ( let o = 0, ol = objects.length; o < ol; o ++ ) {\n\n\t\t\t\tconst object = objects[ o ].object;\n\t\t\t\tconst geometry = object.geometry;\n\n\t\t\t\trenderList.setObject( object );\n\n\t\t\t\t_modelMatrix = object.matrixWorld;\n\n\t\t\t\t_vertexCount = 0;\n\n\t\t\t\tif ( object.isMesh ) {\n\n\t\t\t\t\tlet material = object.material;\n\n\t\t\t\t\tconst isMultiMaterial = Array.isArray( material );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tif ( attributes.position === undefined ) continue;\n\n\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tlet x = positions[ i ];\n\t\t\t\t\t\tlet y = positions[ i + 1 ];\n\t\t\t\t\t\tlet z = positions[ i + 2 ];\n\n\t\t\t\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\n\t\t\t\t\t\tif ( morphTargets !== undefined ) {\n\n\t\t\t\t\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\t\t\t\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\t\t\t\t\t\tfor ( let t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\t\tconst influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\t\tconst target = morphTargets[ t ];\n\n\t\t\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t\t\tx += target.getX( i / 3 ) * influence;\n\t\t\t\t\t\t\t\t\ty += target.getY( i / 3 ) * influence;\n\t\t\t\t\t\t\t\t\tz += target.getZ( i / 3 ) * influence;\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tx += ( target.getX( i / 3 ) - positions[ i ] ) * influence;\n\t\t\t\t\t\t\t\t\ty += ( target.getY( i / 3 ) - positions[ i + 1 ] ) * influence;\n\t\t\t\t\t\t\t\t\tz += ( target.getZ( i / 3 ) - positions[ i + 2 ] ) * influence;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trenderList.pushVertex( x, y, z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.normal !== undefined ) {\n\n\t\t\t\t\t\tconst normals = attributes.normal.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = normals.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushNormal( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.color !== undefined ) {\n\n\t\t\t\t\t\tconst colors = attributes.color.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.uv !== undefined ) {\n\n\t\t\t\t\t\tconst uvs = attributes.uv.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = uvs.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\trenderList.pushUv( uvs[ i ], uvs[ i + 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\tconst indices = geometry.index.array;\n\n\t\t\t\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( let g = 0; g < groups.length; g ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ g ];\n\n\t\t\t\t\t\t\t\tmaterial = isMultiMaterial === true\n\t\t\t\t\t\t\t\t\t ? object.material[ group.materialIndex ]\n\t\t\t\t\t\t\t\t\t : object.material;\n\n\t\t\t\t\t\t\t\tif ( material === undefined ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let i = group.start, l = group.start + group.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ], material );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ], material );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( let g = 0; g < groups.length; g ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ g ];\n\n\t\t\t\t\t\t\t\tmaterial = isMultiMaterial === true\n\t\t\t\t\t\t\t\t\t ? object.material[ group.materialIndex ]\n\t\t\t\t\t\t\t\t\t : object.material;\n\n\t\t\t\t\t\t\t\tif ( material === undefined ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let i = group.start, l = group.start + group.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2, material );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = positions.length / 3; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2, material );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( attributes.color !== undefined ) {\n\n\t\t\t\t\t\t\tconst colors = attributes.color.array;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\t\tconst indices = geometry.index.array;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( indices[ i ], indices[ i + 1 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconst step = object.isLineSegments ? 2 : 1;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = ( positions.length / 3 ) - 1; i < l; i += step ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( i, i + 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t_vector4.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ], 1 );\n\t\t\t\t\t\t\t_vector4.applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\t\t\t_vector4.set( _modelMatrix.elements[ 12 ], _modelMatrix.elements[ 13 ], _modelMatrix.elements[ 14 ], 1 );\n\t\t\t\t\t_vector4.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( sortElements === true ) {\n\n\t\t\t\t_renderData.elements.sort( painterSort );\n\n\t\t\t}\n\n\t\t\treturn _renderData;\n\n\t\t};\n\n\t\tfunction pushPoint( _vector4, object, camera ) {\n\n\t\t\tconst invW = 1 / _vector4.w;\n\n\t\t\t_vector4.z *= invW;\n\n\t\t\tif ( _vector4.z >= - 1 && _vector4.z <= 1 ) {\n\n\t\t\t\t_sprite = getNextSpriteInPool();\n\t\t\t\t_sprite.id = object.id;\n\t\t\t\t_sprite.x = _vector4.x * invW;\n\t\t\t\t_sprite.y = _vector4.y * invW;\n\t\t\t\t_sprite.z = _vector4.z;\n\t\t\t\t_sprite.renderOrder = object.renderOrder;\n\t\t\t\t_sprite.object = object;\n\n\t\t\t\t_sprite.rotation = object.rotation;\n\n\t\t\t\t_sprite.scale.x = object.scale.x * Math.abs( _sprite.x - ( _vector4.x + camera.projectionMatrix.elements[ 0 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 12 ] ) );\n\t\t\t\t_sprite.scale.y = object.scale.y * Math.abs( _sprite.y - ( _vector4.y + camera.projectionMatrix.elements[ 5 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 13 ] ) );\n\n\t\t\t\t_sprite.material = object.material;\n\n\t\t\t\t_renderData.elements.push( _sprite );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Pools\n\n\t\tfunction getNextObjectInPool() {\n\n\t\t\tif ( _objectCount === _objectPoolLength ) {\n\n\t\t\t\tconst object = new RenderableObject();\n\t\t\t\t_objectPool.push( object );\n\t\t\t\t_objectPoolLength ++;\n\t\t\t\t_objectCount ++;\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t\treturn _objectPool[ _objectCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextVertexInPool() {\n\n\t\t\tif ( _vertexCount === _vertexPoolLength ) {\n\n\t\t\t\tconst vertex = new RenderableVertex();\n\t\t\t\t_vertexPool.push( vertex );\n\t\t\t\t_vertexPoolLength ++;\n\t\t\t\t_vertexCount ++;\n\t\t\t\treturn vertex;\n\n\t\t\t}\n\n\t\t\treturn _vertexPool[ _vertexCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextFaceInPool() {\n\n\t\t\tif ( _faceCount === _facePoolLength ) {\n\n\t\t\t\tconst face = new RenderableFace();\n\t\t\t\t_facePool.push( face );\n\t\t\t\t_facePoolLength ++;\n\t\t\t\t_faceCount ++;\n\t\t\t\treturn face;\n\n\t\t\t}\n\n\t\t\treturn _facePool[ _faceCount ++ ];\n\n\n\t\t}\n\n\t\tfunction getNextLineInPool() {\n\n\t\t\tif ( _lineCount === _linePoolLength ) {\n\n\t\t\t\tconst line = new RenderableLine();\n\t\t\t\t_linePool.push( line );\n\t\t\t\t_linePoolLength ++;\n\t\t\t\t_lineCount ++;\n\t\t\t\treturn line;\n\n\t\t\t}\n\n\t\t\treturn _linePool[ _lineCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextSpriteInPool() {\n\n\t\t\tif ( _spriteCount === _spritePoolLength ) {\n\n\t\t\t\tconst sprite = new RenderableSprite();\n\t\t\t\t_spritePool.push( sprite );\n\t\t\t\t_spritePoolLength ++;\n\t\t\t\t_spriteCount ++;\n\t\t\t\treturn sprite;\n\n\t\t\t}\n\n\t\t\treturn _spritePool[ _spriteCount ++ ];\n\n\t\t}\n\n\t\t//\n\n\t\tfunction painterSort( a, b ) {\n\n\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t\t} else if ( a.z !== b.z ) {\n\n\t\t\t\treturn b.z - a.z;\n\n\t\t\t} else if ( a.id !== b.id ) {\n\n\t\t\t\treturn a.id - b.id;\n\n\t\t\t} else {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction clipLine( s1, s2 ) {\n\n\t\t\tlet alpha1 = 0, alpha2 = 1;\n\n\t\t\t// Calculate the boundary coordinate of each vertex for the near and far clip planes,\n\t\t\t// Z = -1 and Z = +1, respectively.\n\n\t\t\tconst bc1near = s1.z + s1.w,\n\t\t\t\tbc2near = s2.z + s2.w,\n\t\t\t\tbc1far = - s1.z + s1.w,\n\t\t\t\tbc2far = - s2.z + s2.w;\n\n\t\t\tif ( bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0 ) {\n\n\t\t\t\t// Both vertices lie entirely within all clip planes.\n\t\t\t\treturn true;\n\n\t\t\t} else if ( ( bc1near < 0 && bc2near < 0 ) || ( bc1far < 0 && bc2far < 0 ) ) {\n\n\t\t\t\t// Both vertices lie entirely outside one of the clip planes.\n\t\t\t\treturn false;\n\n\t\t\t} else {\n\n\t\t\t\t// The line segment spans at least one clip plane.\n\n\t\t\t\tif ( bc1near < 0 ) {\n\n\t\t\t\t\t// v1 lies outside the near plane, v2 inside\n\t\t\t\t\talpha1 = Math.max( alpha1, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t\t} else if ( bc2near < 0 ) {\n\n\t\t\t\t\t// v2 lies outside the near plane, v1 inside\n\t\t\t\t\talpha2 = Math.min( alpha2, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bc1far < 0 ) {\n\n\t\t\t\t\t// v1 lies outside the far plane, v2 inside\n\t\t\t\t\talpha1 = Math.max( alpha1, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t\t} else if ( bc2far < 0 ) {\n\n\t\t\t\t\t// v2 lies outside the far plane, v2 inside\n\t\t\t\t\talpha2 = Math.min( alpha2, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( alpha2 < alpha1 ) {\n\n\t\t\t\t\t// The line segment spans two boundaries, but is outside both of them.\n\t\t\t\t\t// (This can't happen when we're only clipping against just near/far but good\n\t\t\t\t\t// to leave the check here for future usage if other clip planes are added.)\n\t\t\t\t\treturn false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Update the s1 and s2 vertices to match the clipped line segment.\n\t\t\t\t\ts1.lerp( s2, alpha1 );\n\t\t\t\t\ts2.lerp( s1, 1 - alpha2 );\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { RenderableObject, RenderableFace, RenderableVertex, RenderableLine, RenderableSprite, Projector };\n", "import {\n\tBox2,\n\tCamera,\n\tColor,\n\tMatrix3,\n\tMatrix4,\n\tObject3D,\n\tSRGBColorSpace,\n\tVector3\n} from 'three';\nimport { Projector } from '../renderers/Projector.js';\nimport { RenderableFace } from '../renderers/Projector.js';\nimport { RenderableLine } from '../renderers/Projector.js';\nimport { RenderableSprite } from '../renderers/Projector.js';\n\nclass SVGObject extends Object3D {\n\n\tconstructor( node ) {\n\n\t\tsuper();\n\n\t\tthis.isSVGObject = true;\n\n\t\tthis.node = node;\n\n\t}\n\n}\n\nclass SVGRenderer {\n\n\tconstructor() {\n\n\t\tlet _renderData, _elements, _lights,\n\t\t\t_svgWidth, _svgHeight, _svgWidthHalf, _svgHeightHalf,\n\n\t\t\t_v1, _v2, _v3,\n\n\t\t\t_svgNode,\n\t\t\t_pathCount = 0,\n\n\t\t\t_precision = null,\n\t\t\t_quality = 1,\n\n\t\t\t_currentPath, _currentStyle;\n\n\t\tconst _this = this,\n\t\t\t_clipBox = new Box2(),\n\t\t\t_elemBox = new Box2(),\n\n\t\t\t_color = new Color(),\n\t\t\t_diffuseColor = new Color(),\n\t\t\t_ambientLight = new Color(),\n\t\t\t_directionalLights = new Color(),\n\t\t\t_pointLights = new Color(),\n\t\t\t_clearColor = new Color(),\n\n\t\t\t_vector3 = new Vector3(), // Needed for PointLight\n\t\t\t_centroid = new Vector3(),\n\t\t\t_normal = new Vector3(),\n\t\t\t_normalViewMatrix = new Matrix3(),\n\n\t\t\t_viewMatrix = new Matrix4(),\n\t\t\t_viewProjectionMatrix = new Matrix4(),\n\n\t\t\t_svgPathPool = [],\n\n\t\t\t_projector = new Projector(),\n\t\t\t_svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n\n\t\tthis.domElement = _svg;\n\n\t\tthis.autoClear = true;\n\t\tthis.sortObjects = true;\n\t\tthis.sortElements = true;\n\n\t\tthis.overdraw = 0.5;\n\n\t\tthis.outputColorSpace = SRGBColorSpace;\n\n\t\tthis.info = {\n\n\t\t\trender: {\n\n\t\t\t\tvertices: 0,\n\t\t\t\tfaces: 0\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setQuality = function ( quality ) {\n\n\t\t\tswitch ( quality ) {\n\n\t\t\t\tcase 'high': _quality = 1; break;\n\t\t\t\tcase 'low': _quality = 0; break;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setClearColor = function ( color ) {\n\n\t\t\t_clearColor.set( color );\n\n\t\t};\n\n\t\tthis.setPixelRatio = function () {};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_svgWidth = width; _svgHeight = height;\n\t\t\t_svgWidthHalf = _svgWidth / 2; _svgHeightHalf = _svgHeight / 2;\n\n\t\t\t_svg.setAttribute( 'viewBox', ( - _svgWidthHalf ) + ' ' + ( - _svgHeightHalf ) + ' ' + _svgWidth + ' ' + _svgHeight );\n\t\t\t_svg.setAttribute( 'width', _svgWidth );\n\t\t\t_svg.setAttribute( 'height', _svgHeight );\n\n\t\t\t_clipBox.min.set( - _svgWidthHalf, - _svgHeightHalf );\n\t\t\t_clipBox.max.set( _svgWidthHalf, _svgHeightHalf );\n\n\t\t};\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _svgWidth,\n\t\t\t\theight: _svgHeight\n\t\t\t};\n\n\t\t};\n\n\t\tthis.setPrecision = function ( precision ) {\n\n\t\t\t_precision = precision;\n\n\t\t};\n\n\t\tfunction removeChildNodes() {\n\n\t\t\t_pathCount = 0;\n\n\t\t\twhile ( _svg.childNodes.length > 0 ) {\n\n\t\t\t\t_svg.removeChild( _svg.childNodes[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction convert( c ) {\n\n\t\t\treturn _precision !== null ? c.toFixed( _precision ) : c;\n\n\t\t}\n\n\t\tthis.clear = function () {\n\n\t\t\tremoveChildNodes();\n\t\t\t_svg.style.backgroundColor = _clearColor.getStyle( _this.outputColorSpace );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera instanceof Camera === false ) {\n\n\t\t\t\tconsole.error( 'THREE.SVGRenderer.render: camera is not an instance of Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst background = scene.background;\n\n\t\t\tif ( background && background.isColor ) {\n\n\t\t\t\tremoveChildNodes();\n\t\t\t\t_svg.style.backgroundColor = background.getStyle( _this.outputColorSpace );\n\n\t\t\t} else if ( this.autoClear === true ) {\n\n\t\t\t\tthis.clear();\n\n\t\t\t}\n\n\t\t\t_this.info.render.vertices = 0;\n\t\t\t_this.info.render.faces = 0;\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\t_renderData = _projector.projectScene( scene, camera, this.sortObjects, this.sortElements );\n\t\t\t_elements = _renderData.elements;\n\t\t\t_lights = _renderData.lights;\n\n\t\t\t_normalViewMatrix.getNormalMatrix( camera.matrixWorldInverse );\n\n\t\t\tcalculateLights( _lights );\n\n\t\t\t // reset accumulated path\n\n\t\t\t_currentPath = '';\n\t\t\t_currentStyle = '';\n\n\t\t\tfor ( let e = 0, el = _elements.length; e < el; e ++ ) {\n\n\t\t\t\tconst element = _elements[ e ];\n\t\t\t\tconst material = element.material;\n\n\t\t\t\tif ( material === undefined || material.opacity === 0 ) continue;\n\n\t\t\t\t_elemBox.makeEmpty();\n\n\t\t\t\tif ( element instanceof RenderableSprite ) {\n\n\t\t\t\t\t_v1 = element;\n\t\t\t\t\t_v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;\n\n\t\t\t\t\trenderSprite( _v1, element, material );\n\n\t\t\t\t} else if ( element instanceof RenderableLine ) {\n\n\t\t\t\t\t_v1 = element.v1; _v2 = element.v2;\n\n\t\t\t\t\t_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;\n\n\t\t\t\t\t_elemBox.setFromPoints( [ _v1.positionScreen, _v2.positionScreen ] );\n\n\t\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\t\trenderLine( _v1, _v2, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( element instanceof RenderableFace ) {\n\n\t\t\t\t\t_v1 = element.v1; _v2 = element.v2; _v3 = element.v3;\n\n\t\t\t\t\tif ( _v1.positionScreen.z < - 1 || _v1.positionScreen.z > 1 ) continue;\n\t\t\t\t\tif ( _v2.positionScreen.z < - 1 || _v2.positionScreen.z > 1 ) continue;\n\t\t\t\t\tif ( _v3.positionScreen.z < - 1 || _v3.positionScreen.z > 1 ) continue;\n\n\t\t\t\t\t_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v3.positionScreen.x *= _svgWidthHalf; _v3.positionScreen.y *= - _svgHeightHalf;\n\n\t\t\t\t\tif ( this.overdraw > 0 ) {\n\n\t\t\t\t\t\texpand( _v1.positionScreen, _v2.positionScreen, this.overdraw );\n\t\t\t\t\t\texpand( _v2.positionScreen, _v3.positionScreen, this.overdraw );\n\t\t\t\t\t\texpand( _v3.positionScreen, _v1.positionScreen, this.overdraw );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_elemBox.setFromPoints( [\n\t\t\t\t\t\t_v1.positionScreen,\n\t\t\t\t\t\t_v2.positionScreen,\n\t\t\t\t\t\t_v3.positionScreen\n\t\t\t\t\t] );\n\n\t\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\t\trenderFace3( _v1, _v2, _v3, element, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tflushPath(); // just to flush last svg:path\n\n\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t if ( object.isSVGObject ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\t\tif ( _vector3.z < - 1 || _vector3.z > 1 ) return;\n\n\t\t\t\t\tconst x = _vector3.x * _svgWidthHalf;\n\t\t\t\t\tconst y = - _vector3.y * _svgHeightHalf;\n\n\t\t\t\t\tconst node = object.node;\n\t\t\t\t\tnode.setAttribute( 'transform', 'translate(' + x + ',' + y + ')' );\n\n\t\t\t\t\t_svg.appendChild( node );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\tfunction calculateLights( lights ) {\n\n\t\t\t_ambientLight.setRGB( 0, 0, 0 );\n\t\t\t_directionalLights.setRGB( 0, 0, 0 );\n\t\t\t_pointLights.setRGB( 0, 0, 0 );\n\n\t\t\tfor ( let l = 0, ll = lights.length; l < ll; l ++ ) {\n\n\t\t\t\tconst light = lights[ l ];\n\t\t\t\tconst lightColor = light.color;\n\n\t\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\t\t_ambientLight.r += lightColor.r;\n\t\t\t\t\t_ambientLight.g += lightColor.g;\n\t\t\t\t\t_ambientLight.b += lightColor.b;\n\n\t\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\t\t_directionalLights.r += lightColor.r;\n\t\t\t\t\t_directionalLights.g += lightColor.g;\n\t\t\t\t\t_directionalLights.b += lightColor.b;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\t_pointLights.r += lightColor.r;\n\t\t\t\t\t_pointLights.g += lightColor.g;\n\t\t\t\t\t_pointLights.b += lightColor.b;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction calculateLight( lights, position, normal, color ) {\n\n\t\t\tfor ( let l = 0, ll = lights.length; l < ll; l ++ ) {\n\n\t\t\t\tconst light = lights[ l ];\n\t\t\t\tconst lightColor = light.color;\n\n\t\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\t\tconst lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld ).normalize();\n\n\t\t\t\t\tlet amount = normal.dot( lightPosition );\n\n\t\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\t\tamount *= light.intensity;\n\n\t\t\t\t\tcolor.r += lightColor.r * amount;\n\t\t\t\t\tcolor.g += lightColor.g * amount;\n\t\t\t\t\tcolor.b += lightColor.b * amount;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\tconst lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\t\tlet amount = normal.dot( _vector3.subVectors( lightPosition, position ).normalize() );\n\n\t\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\t\tamount *= light.distance == 0 ? 1 : 1 - Math.min( position.distanceTo( lightPosition ) / light.distance, 1 );\n\n\t\t\t\t\tif ( amount == 0 ) continue;\n\n\t\t\t\t\tamount *= light.intensity;\n\n\t\t\t\t\tcolor.r += lightColor.r * amount;\n\t\t\t\t\tcolor.g += lightColor.g * amount;\n\t\t\t\t\tcolor.b += lightColor.b * amount;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderSprite( v1, element, material ) {\n\n\t\t\tlet scaleX = element.scale.x * _svgWidthHalf;\n\t\t\tlet scaleY = element.scale.y * _svgHeightHalf;\n\n\t\t\tif ( material.isPointsMaterial ) {\n\n\t\t\t\tscaleX *= material.size;\n\t\t\t\tscaleY *= material.size;\n\n\t\t\t}\n\n\t\t\tconst path = 'M' + convert( v1.x - scaleX * 0.5 ) + ',' + convert( v1.y - scaleY * 0.5 ) + 'h' + convert( scaleX ) + 'v' + convert( scaleY ) + 'h' + convert( - scaleX ) + 'z';\n\t\t\tlet style = '';\n\n\t\t\tif ( material.isSpriteMaterial || material.isPointsMaterial ) {\n\n\t\t\t\tstyle = 'fill:' + material.color.getStyle( _this.outputColorSpace ) + ';fill-opacity:' + material.opacity;\n\n\t\t\t}\n\n\t\t\taddPath( style, path );\n\n\t\t}\n\n\t\tfunction renderLine( v1, v2, material ) {\n\n\t\t\tconst path = 'M' + convert( v1.positionScreen.x ) + ',' + convert( v1.positionScreen.y ) + 'L' + convert( v2.positionScreen.x ) + ',' + convert( v2.positionScreen.y );\n\n\t\t\tif ( material.isLineBasicMaterial ) {\n\n\t\t\t\tlet style = 'fill:none;stroke:' + material.color.getStyle( _this.outputColorSpace ) + ';stroke-opacity:' + material.opacity + ';stroke-width:' + material.linewidth + ';stroke-linecap:' + material.linecap;\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\tstyle = style + ';stroke-dasharray:' + material.dashSize + ',' + material.gapSize;\n\n\t\t\t\t}\n\n\t\t\t\taddPath( style, path );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderFace3( v1, v2, v3, element, material ) {\n\n\t\t\t_this.info.render.vertices += 3;\n\t\t\t_this.info.render.faces ++;\n\n\t\t\tconst path = 'M' + convert( v1.positionScreen.x ) + ',' + convert( v1.positionScreen.y ) + 'L' + convert( v2.positionScreen.x ) + ',' + convert( v2.positionScreen.y ) + 'L' + convert( v3.positionScreen.x ) + ',' + convert( v3.positionScreen.y ) + 'z';\n\t\t\tlet style = '';\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\t_color.copy( material.color );\n\n\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t_color.multiply( element.color );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial ) {\n\n\t\t\t\t_diffuseColor.copy( material.color );\n\n\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t_diffuseColor.multiply( element.color );\n\n\t\t\t\t}\n\n\t\t\t\t_color.copy( _ambientLight );\n\n\t\t\t\t_centroid.copy( v1.positionWorld ).add( v2.positionWorld ).add( v3.positionWorld ).divideScalar( 3 );\n\n\t\t\t\tcalculateLight( _lights, _centroid, element.normalModel, _color );\n\n\t\t\t\t_color.multiply( _diffuseColor ).add( material.emissive );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\t_normal.copy( element.normalModel ).applyMatrix3( _normalViewMatrix ).normalize();\n\n\t\t\t\t_color.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );\n\n\t\t\t}\n\n\t\t\tif ( material.wireframe ) {\n\n\t\t\t\tstyle = 'fill:none;stroke:' + _color.getStyle( _this.outputColorSpace ) + ';stroke-opacity:' + material.opacity + ';stroke-width:' + material.wireframeLinewidth + ';stroke-linecap:' + material.wireframeLinecap + ';stroke-linejoin:' + material.wireframeLinejoin;\n\n\t\t\t} else {\n\n\t\t\t\tstyle = 'fill:' + _color.getStyle( _this.outputColorSpace ) + ';fill-opacity:' + material.opacity;\n\n\t\t\t}\n\n\t\t\taddPath( style, path );\n\n\t\t}\n\n\t\t// Hide anti-alias gaps\n\n\t\tfunction expand( v1, v2, pixels ) {\n\n\t\t\tlet x = v2.x - v1.x, y = v2.y - v1.y;\n\t\t\tconst det = x * x + y * y;\n\n\t\t\tif ( det === 0 ) return;\n\n\t\t\tconst idet = pixels / Math.sqrt( det );\n\n\t\t\tx *= idet; y *= idet;\n\n\t\t\tv2.x += x; v2.y += y;\n\t\t\tv1.x -= x; v1.y -= y;\n\n\t\t}\n\n\t\tfunction addPath( style, path ) {\n\n\t\t\tif ( _currentStyle === style ) {\n\n\t\t\t\t_currentPath += path;\n\n\t\t\t} else {\n\n\t\t\t\tflushPath();\n\n\t\t\t\t_currentStyle = style;\n\t\t\t\t_currentPath = path;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction flushPath() {\n\n\t\t\tif ( _currentPath ) {\n\n\t\t\t\t_svgNode = getPathNode( _pathCount ++ );\n\t\t\t\t_svgNode.setAttribute( 'd', _currentPath );\n\t\t\t\t_svgNode.setAttribute( 'style', _currentStyle );\n\t\t\t\t_svg.appendChild( _svgNode );\n\n\t\t\t}\n\n\t\t\t_currentPath = '';\n\t\t\t_currentStyle = '';\n\n\t\t}\n\n\t\tfunction getPathNode( id ) {\n\n\t\t\tif ( _svgPathPool[ id ] == null ) {\n\n\t\t\t\t_svgPathPool[ id ] = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n\n\t\t\t\tif ( _quality == 0 ) {\n\n\t\t\t\t\t_svgPathPool[ id ].setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed\n\n\t\t\t\t}\n\n\t\t\t\treturn _svgPathPool[ id ];\n\n\t\t\t}\n\n\t\t\treturn _svgPathPool[ id ];\n\n\t\t}\n\n\t}\n\n}\n\nexport { SVGObject, SVGRenderer };\n", "/**\n * ACES Filmic Tone Mapping Shader by Stephen Hill\n * source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\n *\n * this implementation of ACES is modified to accommodate a brighter viewing environment.\n * the scale factor of 1/0.6 is subjective. see discussion in #19621.\n */\n\nconst ACESFilmicToneMappingShader = {\n\n\tname: 'ACESFilmicToneMappingShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'exposure': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define saturate(a) clamp( a, 0.0, 1.0 )\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tuniform float exposure;\n\n\t\tvarying vec2 vUv;\n\n\t\tvec3 RRTAndODTFit( vec3 v ) {\n\n\t\t\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\t\t\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\t\t\treturn a / b;\n\n\t\t}\n\n\t\tvec3 ACESFilmicToneMapping( vec3 color ) {\n\n\t\t// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\n\t\t\tconst mat3 ACESInputMat = mat3(\n\t\t\t\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\n\t\t\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\t\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t\t\t);\n\n\t\t// ODT_SAT => XYZ => D60_2_D65 => sRGB\n\t\t\tconst mat3 ACESOutputMat = mat3(\n\t\t\t\tvec3( 1.60475, -0.10208, -0.00327 ), // transposed from source\n\t\t\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\t\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t\t\t);\n\n\t\t\tcolor = ACESInputMat * color;\n\n\t\t// Apply RRT and ODT\n\t\t\tcolor = RRTAndODTFit( color );\n\n\t\t\tcolor = ACESOutputMat * color;\n\n\t\t// Clamp to [0, 1]\n\t\t\treturn saturate( color );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 tex = texture2D( tDiffuse, vUv );\n\n\t\t\ttex.rgb *= exposure / 0.6; // pre-exposed, outside of the tone mapping function\n\n\t\t\tgl_FragColor = vec4( ACESFilmicToneMapping( tex.rgb ), tex.a );\n\n\t\t}`\n\n};\n\nexport { ACESFilmicToneMappingShader };\n", "/**\n * Simple test shader\n */\n\nconst BasicShader = {\n\n\tname: 'BasicShader',\n\n\tuniforms: {},\n\n\tvertexShader: /* glsl */`\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 );\n\n\t\t}`\n\n};\n\nexport { BasicShader };\n", "/**\n * Bleach bypass shader [http://en.wikipedia.org/wiki/Bleach_bypass]\n * - based on Nvidia example\n * http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html#post_bleach_bypass\n */\n\nconst BleachBypassShader = {\n\n\tname: 'BleachBypassShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2D( tDiffuse, vUv );\n\n\t\t\tvec3 lumCoeff = vec3( 0.25, 0.65, 0.1 );\n\t\t\tfloat lum = dot( lumCoeff, base.rgb );\n\t\t\tvec3 blend = vec3( lum );\n\n\t\t\tfloat L = min( 1.0, max( 0.0, 10.0 * ( lum - 0.45 ) ) );\n\n\t\t\tvec3 result1 = 2.0 * base.rgb * blend;\n\t\t\tvec3 result2 = 1.0 - 2.0 * ( 1.0 - blend ) * ( 1.0 - base.rgb );\n\n\t\t\tvec3 newColor = mix( result1, result2, L );\n\n\t\t\tfloat A2 = opacity * base.a;\n\t\t\tvec3 mixRGB = A2 * newColor.rgb;\n\t\t\tmixRGB += ( ( 1.0 - A2 ) * base.rgb );\n\n\t\t\tgl_FragColor = vec4( mixRGB, base.a );\n\n\t\t}`\n\n};\n\nexport { BleachBypassShader };\n", "/**\n * Blend two textures\n */\n\nconst BlendShader = {\n\n\tname: 'BlendShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse1': { value: null },\n\t\t'tDiffuse2': { value: null },\n\t\t'mixRatio': { value: 0.5 },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\t\tuniform float mixRatio;\n\n\t\tuniform sampler2D tDiffuse1;\n\t\tuniform sampler2D tDiffuse2;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel1 = texture2D( tDiffuse1, vUv );\n\t\t\tvec4 texel2 = texture2D( tDiffuse2, vUv );\n\t\t\tgl_FragColor = opacity * mix( texel1, texel2, mixRatio );\n\n\t\t}`\n\n};\n\nexport { BlendShader };\n", "/**\n * Brightness and contrast adjustment\n * https://github.com/evanw/glfx.js\n * brightness: -1 to 1 (-1 is solid black, 0 is no change, and 1 is solid white)\n * contrast: -1 to 1 (-1 is solid gray, 0 is no change, and 1 is maximum contrast)\n */\n\nconst BrightnessContrastShader = {\n\n\tname: 'BrightnessContrastShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'brightness': { value: 0 },\n\t\t'contrast': { value: 0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float brightness;\n\t\tuniform float contrast;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\tgl_FragColor.rgb += brightness;\n\n\t\t\tif (contrast > 0.0) {\n\t\t\t\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) / (1.0 - contrast) + 0.5;\n\t\t\t} else {\n\t\t\t\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5;\n\t\t\t}\n\n\t\t}`\n\n};\n\nexport { BrightnessContrastShader };\n", "import {\n\tVector3\n} from 'three';\n\n/**\n * Color correction\n */\n\nconst ColorCorrectionShader = {\n\n\tname: 'ColorCorrectionShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'powRGB': { value: new Vector3( 2, 2, 2 ) },\n\t\t'mulRGB': { value: new Vector3( 1, 1, 1 ) },\n\t\t'addRGB': { value: new Vector3( 0, 0, 0 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec3 powRGB;\n\t\tuniform vec3 mulRGB;\n\t\tuniform vec3 addRGB;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor.rgb = mulRGB * pow( ( gl_FragColor.rgb + addRGB ), powRGB );\n\n\t\t}`\n\n};\n\nexport { ColorCorrectionShader };\n", "import {\n\tColor\n} from 'three';\n\n/**\n * Colorify shader\n */\n\nconst ColorifyShader = {\n\n\tname: 'ColorifyShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'color': { value: new Color( 0xffffff ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat v = luminance( texel.xyz );\n\n\t\t\tgl_FragColor = vec4( v * color, texel.w );\n\n\t\t}`\n\n};\n\nexport { ColorifyShader };\n", "/**\n * Depth-of-field shader using mipmaps\n * - from Matt Handley @applmak\n * - requires power-of-2 sized render target with enabled mipmaps\n */\n\nconst DOFMipMapShader = {\n\n\tname: 'DOFMipMapShader',\n\n\tuniforms: {\n\n\t\t'tColor': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'focus': { value: 1.0 },\n\t\t'maxblur': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float focus;\n\t\tuniform float maxblur;\n\n\t\tuniform sampler2D tColor;\n\t\tuniform sampler2D tDepth;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 depth = texture2D( tDepth, vUv );\n\n\t\t\tfloat factor = depth.x - focus;\n\n\t\t\tvec4 col = texture2D( tColor, vUv, 2.0 * maxblur * abs( focus - depth.x ) );\n\n\t\t\tgl_FragColor = col;\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\nexport { DOFMipMapShader };\n", "/**\n * Exposure shader\n */\n\nconst ExposureShader = {\n\n\tname: 'ExposureShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'exposure': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float exposure;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor.rgb *= exposure;\n\n\t\t}`\n\n};\n\nexport { ExposureShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * NVIDIA FXAA by Timothy Lottes\n * https://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf\n * - WebGL port by @supereggbert\n * http://www.glge.org/demos/fxaa/\n * Further improved by Daniel Sturk\n */\n\nconst FXAAShader = {\n\n\tname: 'FXAAShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tprecision highp float;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\n\t\t// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)\n\n\t\t//----------------------------------------------------------------------------------\n\t\t// File: es3-kepler\\FXAA\\assets\\shaders/FXAA_DefaultES.frag\n\t\t// SDK Version: v3.00\n\t\t// Email: gameworks@nvidia.com\n\t\t// Site: http://developer.nvidia.com/\n\t\t//\n\t\t// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\n\t\t//\n\t\t// Redistribution and use in source and binary forms, with or without\n\t\t// modification, are permitted provided that the following conditions\n\t\t// are met:\n\t\t// * Redistributions of source code must retain the above copyright\n\t\t// notice, this list of conditions and the following disclaimer.\n\t\t// * Redistributions in binary form must reproduce the above copyright\n\t\t// notice, this list of conditions and the following disclaimer in the\n\t\t// documentation and/or other materials provided with the distribution.\n\t\t// * Neither the name of NVIDIA CORPORATION nor the names of its\n\t\t// contributors may be used to endorse or promote products derived\n\t\t// from this software without specific prior written permission.\n\t\t//\n\t\t// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY\n\t\t// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t\t// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\t\t// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n\t\t// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\t\t// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\t\t// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\t\t// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\t\t// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t\t// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t\t// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t\t//\n\t\t//----------------------------------------------------------------------------------\n\n\t\t#ifndef FXAA_DISCARD\n\t\t\t//\n\t\t\t// Only valid for PC OpenGL currently.\n\t\t\t// Probably will not work when FXAA_GREEN_AS_LUMA = 1.\n\t\t\t//\n\t\t\t// 1 = Use discard on pixels which don't need AA.\n\t\t\t// For APIs which enable concurrent TEX+ROP from same surface.\n\t\t\t// 0 = Return unchanged color on pixels which don't need AA.\n\t\t\t//\n\t\t\t#define FXAA_DISCARD 0\n\t\t#endif\n\n\t\t/*--------------------------------------------------------------------------*/\n\t\t#define FxaaTexTop(t, p) texture2D(t, p, -100.0)\n\t\t#define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), -100.0)\n\t\t/*--------------------------------------------------------------------------*/\n\n\t\t#define NUM_SAMPLES 5\n\n\t\t// assumes colors have premultipliedAlpha, so that the calculated color contrast is scaled by alpha\n\t\tfloat contrast( vec4 a, vec4 b ) {\n\t\t\tvec4 diff = abs( a - b );\n\t\t\treturn max( max( max( diff.r, diff.g ), diff.b ), diff.a );\n\t\t}\n\n\t\t/*============================================================================\n\n\t\t\t\t\t\t\t\t\tFXAA3 QUALITY - PC\n\n\t\t============================================================================*/\n\n\t\t/*--------------------------------------------------------------------------*/\n\t\tvec4 FxaaPixelShader(\n\t\t\tvec2 posM,\n\t\t\tsampler2D tex,\n\t\t\tvec2 fxaaQualityRcpFrame,\n\t\t\tfloat fxaaQualityEdgeThreshold,\n\t\t\tfloat fxaaQualityinvEdgeThreshold\n\t\t) {\n\t\t\tvec4 rgbaM = FxaaTexTop(tex, posM);\n\t\t\tvec4 rgbaS = FxaaTexOff(tex, posM, vec2( 0.0, 1.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaE = FxaaTexOff(tex, posM, vec2( 1.0, 0.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaN = FxaaTexOff(tex, posM, vec2( 0.0,-1.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaW = FxaaTexOff(tex, posM, vec2(-1.0, 0.0), fxaaQualityRcpFrame.xy);\n\t\t\t// . S .\n\t\t\t// W M E\n\t\t\t// . N .\n\n\t\t\tbool earlyExit = max( max( max(\n\t\t\t\t\tcontrast( rgbaM, rgbaN ),\n\t\t\t\t\tcontrast( rgbaM, rgbaS ) ),\n\t\t\t\t\tcontrast( rgbaM, rgbaE ) ),\n\t\t\t\t\tcontrast( rgbaM, rgbaW ) )\n\t\t\t\t\t< fxaaQualityEdgeThreshold;\n\t\t\t// . 0 .\n\t\t\t// 0 0 0\n\t\t\t// . 0 .\n\n\t\t\t#if (FXAA_DISCARD == 1)\n\t\t\t\tif(earlyExit) FxaaDiscard;\n\t\t\t#else\n\t\t\t\tif(earlyExit) return rgbaM;\n\t\t\t#endif\n\n\t\t\tfloat contrastN = contrast( rgbaM, rgbaN );\n\t\t\tfloat contrastS = contrast( rgbaM, rgbaS );\n\t\t\tfloat contrastE = contrast( rgbaM, rgbaE );\n\t\t\tfloat contrastW = contrast( rgbaM, rgbaW );\n\n\t\t\tfloat relativeVContrast = ( contrastN + contrastS ) - ( contrastE + contrastW );\n\t\t\trelativeVContrast *= fxaaQualityinvEdgeThreshold;\n\n\t\t\tbool horzSpan = relativeVContrast > 0.;\n\t\t\t// . 1 .\n\t\t\t// 0 0 0\n\t\t\t// . 1 .\n\n\t\t\t// 45 deg edge detection and corners of objects, aka V/H contrast is too similar\n\t\t\tif( abs( relativeVContrast ) < .3 ) {\n\t\t\t\t// locate the edge\n\t\t\t\tvec2 dirToEdge;\n\t\t\t\tdirToEdge.x = contrastE > contrastW ? 1. : -1.;\n\t\t\t\tdirToEdge.y = contrastS > contrastN ? 1. : -1.;\n\t\t\t\t// . 2 . . 1 .\n\t\t\t\t// 1 0 2 ~= 0 0 1\n\t\t\t\t// . 1 . . 0 .\n\n\t\t\t\t// tap 2 pixels and see which ones are \"outside\" the edge, to\n\t\t\t\t// determine if the edge is vertical or horizontal\n\n\t\t\t\tvec4 rgbaAlongH = FxaaTexOff(tex, posM, vec2( dirToEdge.x, -dirToEdge.y ), fxaaQualityRcpFrame.xy);\n\t\t\t\tfloat matchAlongH = contrast( rgbaM, rgbaAlongH );\n\t\t\t\t// . 1 .\n\t\t\t\t// 0 0 1\n\t\t\t\t// . 0 H\n\n\t\t\t\tvec4 rgbaAlongV = FxaaTexOff(tex, posM, vec2( -dirToEdge.x, dirToEdge.y ), fxaaQualityRcpFrame.xy);\n\t\t\t\tfloat matchAlongV = contrast( rgbaM, rgbaAlongV );\n\t\t\t\t// V 1 .\n\t\t\t\t// 0 0 1\n\t\t\t\t// . 0 .\n\n\t\t\t\trelativeVContrast = matchAlongV - matchAlongH;\n\t\t\t\trelativeVContrast *= fxaaQualityinvEdgeThreshold;\n\n\t\t\t\tif( abs( relativeVContrast ) < .3 ) { // 45 deg edge\n\t\t\t\t\t// 1 1 .\n\t\t\t\t\t// 0 0 1\n\t\t\t\t\t// . 0 1\n\n\t\t\t\t\t// do a simple blur\n\t\t\t\t\treturn mix(\n\t\t\t\t\t\trgbaM,\n\t\t\t\t\t\t(rgbaN + rgbaS + rgbaE + rgbaW) * .25,\n\t\t\t\t\t\t.4\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\thorzSpan = relativeVContrast > 0.;\n\t\t\t}\n\n\t\t\tif(!horzSpan) rgbaN = rgbaW;\n\t\t\tif(!horzSpan) rgbaS = rgbaE;\n\t\t\t// . 0 . 1\n\t\t\t// 1 0 1 -> 0\n\t\t\t// . 0 . 1\n\n\t\t\tbool pairN = contrast( rgbaM, rgbaN ) > contrast( rgbaM, rgbaS );\n\t\t\tif(!pairN) rgbaN = rgbaS;\n\n\t\t\tvec2 offNP;\n\t\t\toffNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n\t\t\toffNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n\n\t\t\tbool doneN = false;\n\t\t\tbool doneP = false;\n\n\t\t\tfloat nDist = 0.;\n\t\t\tfloat pDist = 0.;\n\n\t\t\tvec2 posN = posM;\n\t\t\tvec2 posP = posM;\n\n\t\t\tint iterationsUsedN = 0;\n\t\t\tint iterationsUsedP = 0;\n\t\t\tfor( int i = 0; i < NUM_SAMPLES; i++ ) {\n\n\t\t\t\tfloat increment = float(i + 1);\n\n\t\t\t\tif(!doneN) {\n\t\t\t\t\tnDist += increment;\n\t\t\t\t\tposN = posM + offNP * nDist;\n\t\t\t\t\tvec4 rgbaEndN = FxaaTexTop(tex, posN.xy);\n\t\t\t\t\tdoneN = contrast( rgbaEndN, rgbaM ) > contrast( rgbaEndN, rgbaN );\n\t\t\t\t\titerationsUsedN = i;\n\t\t\t\t}\n\n\t\t\t\tif(!doneP) {\n\t\t\t\t\tpDist += increment;\n\t\t\t\t\tposP = posM - offNP * pDist;\n\t\t\t\t\tvec4 rgbaEndP = FxaaTexTop(tex, posP.xy);\n\t\t\t\t\tdoneP = contrast( rgbaEndP, rgbaM ) > contrast( rgbaEndP, rgbaN );\n\t\t\t\t\titerationsUsedP = i;\n\t\t\t\t}\n\n\t\t\t\tif(doneN || doneP) break;\n\t\t\t}\n\n\n\t\t\tif ( !doneP && !doneN ) return rgbaM; // failed to find end of edge\n\n\t\t\tfloat dist = min(\n\t\t\t\tdoneN ? float( iterationsUsedN ) / float( NUM_SAMPLES - 1 ) : 1.,\n\t\t\t\tdoneP ? float( iterationsUsedP ) / float( NUM_SAMPLES - 1 ) : 1.\n\t\t\t);\n\n\t\t\t// hacky way of reduces blurriness of mostly diagonal edges\n\t\t\t// but reduces AA quality\n\t\t\tdist = pow(dist, .5);\n\n\t\t\tdist = 1. - dist;\n\n\t\t\treturn mix(\n\t\t\t\trgbaM,\n\t\t\t\trgbaN,\n\t\t\t\tdist * .5\n\t\t\t);\n\t\t}\n\n\t\tvoid main() {\n\t\t\tconst float edgeDetectionQuality = .2;\n\t\t\tconst float invEdgeDetectionQuality = 1. / edgeDetectionQuality;\n\n\t\t\tgl_FragColor = FxaaPixelShader(\n\t\t\t\tvUv,\n\t\t\t\ttDiffuse,\n\t\t\t\tresolution,\n\t\t\t\tedgeDetectionQuality, // [0,1] contrast needed, otherwise early discard\n\t\t\t\tinvEdgeDetectionQuality\n\t\t\t);\n\n\t\t}\n\t`\n\n};\n\nexport { FXAAShader };\n", "/**\n * Focus shader\n * based on PaintEffect postprocess from ro.me\n * http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js\n */\n\nconst FocusShader = {\n\n\tname: 'FocusShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'screenWidth': { value: 1024 },\n\t\t'screenHeight': { value: 1024 },\n\t\t'sampleDistance': { value: 0.94 },\n\t\t'waveFactor': { value: 0.00125 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float screenWidth;\n\t\tuniform float screenHeight;\n\t\tuniform float sampleDistance;\n\t\tuniform float waveFactor;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 color, org, tmp, add;\n\t\t\tfloat sample_dist, f;\n\t\t\tvec2 vin;\n\t\t\tvec2 uv = vUv;\n\n\t\t\tadd = color = org = texture2D( tDiffuse, uv );\n\n\t\t\tvin = ( uv - vec2( 0.5 ) ) * vec2( 1.4 );\n\t\t\tsample_dist = dot( vin, vin ) * 2.0;\n\n\t\t\tf = ( waveFactor * 100.0 + sample_dist ) * sampleDistance * 4.0;\n\n\t\t\tvec2 sampleSize = vec2( 1.0 / screenWidth, 1.0 / screenHeight ) * vec2( f );\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.111964, 0.993712 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.846724, 0.532032 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.943883, -0.330279 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.330279, -0.943883 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.532032, -0.846724 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.993712, -0.111964 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.707107, 0.707107 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tcolor = color * vec4( 2.0 ) - ( add / vec4( 8.0 ) );\n\t\t\tcolor = color + ( add / vec4( 8.0 ) - color ) * ( vec4( 1.0 ) - vec4( sample_dist * 0.5 ) );\n\n\t\t\tgl_FragColor = vec4( color.rgb * color.rgb * vec3( 0.95 ) + color.rgb, 1.0 );\n\n\t\t}`\n\n};\n\nexport { FocusShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Edge Detection Shader using Frei-Chen filter\n * Based on http://rastergrid.com/blog/2011/01/frei-chen-edge-detector\n *\n * aspect: vec2 of (1/width, 1/height)\n */\n\nconst FreiChenShader = {\n\n\tname: 'FreiChenShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'aspect': { value: new Vector2( 512, 512 ) }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tuniform vec2 aspect;\n\n\t\tvec2 texel = vec2( 1.0 / aspect.x, 1.0 / aspect.y );\n\n\n\t\tmat3 G[9];\n\n\t\t// hard coded matrix values!!!! as suggested in https://github.com/neilmendoza/ofxPostProcessing/blob/master/src/EdgePass.cpp#L45\n\n\t\tconst mat3 g0 = mat3( 0.3535533845424652, 0, -0.3535533845424652, 0.5, 0, -0.5, 0.3535533845424652, 0, -0.3535533845424652 );\n\t\tconst mat3 g1 = mat3( 0.3535533845424652, 0.5, 0.3535533845424652, 0, 0, 0, -0.3535533845424652, -0.5, -0.3535533845424652 );\n\t\tconst mat3 g2 = mat3( 0, 0.3535533845424652, -0.5, -0.3535533845424652, 0, 0.3535533845424652, 0.5, -0.3535533845424652, 0 );\n\t\tconst mat3 g3 = mat3( 0.5, -0.3535533845424652, 0, -0.3535533845424652, 0, 0.3535533845424652, 0, 0.3535533845424652, -0.5 );\n\t\tconst mat3 g4 = mat3( 0, -0.5, 0, 0.5, 0, 0.5, 0, -0.5, 0 );\n\t\tconst mat3 g5 = mat3( -0.5, 0, 0.5, 0, 0, 0, 0.5, 0, -0.5 );\n\t\tconst mat3 g6 = mat3( 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.6666666865348816, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204 );\n\t\tconst mat3 g7 = mat3( -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, 0.6666666865348816, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408 );\n\t\tconst mat3 g8 = mat3( 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408 );\n\n\t\tvoid main(void)\n\t\t{\n\n\t\t\tG[0] = g0,\n\t\t\tG[1] = g1,\n\t\t\tG[2] = g2,\n\t\t\tG[3] = g3,\n\t\t\tG[4] = g4,\n\t\t\tG[5] = g5,\n\t\t\tG[6] = g6,\n\t\t\tG[7] = g7,\n\t\t\tG[8] = g8;\n\n\t\t\tmat3 I;\n\t\t\tfloat cnv[9];\n\t\t\tvec3 sample;\n\n\t\t/* fetch the 3x3 neighbourhood and use the RGB vector's length as intensity value */\n\t\t\tfor (float i=0.0; i<3.0; i++) {\n\t\t\t\tfor (float j=0.0; j<3.0; j++) {\n\t\t\t\t\tsample = texture2D(tDiffuse, vUv + texel * vec2(i-1.0,j-1.0) ).rgb;\n\t\t\t\t\tI[int(i)][int(j)] = length(sample);\n\t\t\t\t}\n\t\t\t}\n\n\t\t/* calculate the convolution values for all the masks */\n\t\t\tfor (int i=0; i<9; i++) {\n\t\t\t\tfloat dp3 = dot(G[i][0], I[0]) + dot(G[i][1], I[1]) + dot(G[i][2], I[2]);\n\t\t\t\tcnv[i] = dp3 * dp3;\n\t\t\t}\n\n\t\t\tfloat M = (cnv[0] + cnv[1]) + (cnv[2] + cnv[3]);\n\t\t\tfloat S = (cnv[4] + cnv[5]) + (cnv[6] + cnv[7]) + (cnv[8] + M);\n\n\t\t\tgl_FragColor = vec4(vec3(sqrt(M/S)), 1.0);\n\t\t}`\n\n};\n\nexport { FreiChenShader };\n", "/**\n * Gamma Correction Shader\n * http://en.wikipedia.org/wiki/gamma_correction\n */\n\nconst GammaCorrectionShader = {\n\n\tname: 'GammaCorrectionShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 tex = texture2D( tDiffuse, vUv );\n\n\t\t\tgl_FragColor = sRGBTransferOETF( tex );\n\n\t\t}`\n\n};\n\nexport { GammaCorrectionShader };\n", "import {\n\tColor,\n\tVector3\n} from 'three';\n\n/**\n * God-rays (crepuscular rays)\n *\n * Similar implementation to the one used by Crytek for CryEngine 2 [Sousa2008].\n * Blurs a mask generated from the depth map along radial lines emanating from the light\n * source. The blur repeatedly applies a blur filter of increasing support but constant\n * sample count to produce a blur filter with large support.\n *\n * My implementation performs 3 passes, similar to the implementation from Sousa. I found\n * just 6 samples per pass produced acceptible results. The blur is applied three times,\n * with decreasing filter support. The result is equivalent to a single pass with\n * 6*6*6 = 216 samples.\n *\n * References:\n *\n * Sousa2008 - Crysis Next Gen Effects, GDC2008, http://www.crytek.com/sites/default/files/GDC08_SousaT_CrysisEffects.ppt\n */\n\nconst GodRaysDepthMaskShader = {\n\n\tname: 'GodRaysDepthMaskShader',\n\n\tuniforms: {\n\n\t\ttInput: {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t vUv = uv;\n\t\t gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t }`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tInput;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = vec4( 1.0 ) - texture2D( tInput, vUv );\n\n\t\t}`\n\n};\n\n\n/**\n * The god-ray generation shader.\n *\n * First pass:\n *\n * The depth map is blurred along radial lines towards the \"sun\". The\n * output is written to a temporary render target (I used a 1/4 sized\n * target).\n *\n * Pass two & three:\n *\n * The results of the previous pass are re-blurred, each time with a\n * decreased distance between samples.\n */\n\nconst GodRaysGenerateShader = {\n\n\tname: 'GodRaysGenerateShader',\n\n\tuniforms: {\n\n\t\ttInput: {\n\t\t\tvalue: null\n\t\t},\n\t\tfStepSize: {\n\t\t\tvalue: 1.0\n\t\t},\n\t\tvSunPositionScreenSpace: {\n\t\t\tvalue: new Vector3()\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t vUv = uv;\n\t\t gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t }`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define TAPS_PER_PASS 6.0\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tInput;\n\n\t\tuniform vec3 vSunPositionScreenSpace;\n\t\tuniform float fStepSize; // filter step size\n\n\t\tvoid main() {\n\n\t\t// delta from current pixel to \"sun\" position\n\n\t\t\tvec2 delta = vSunPositionScreenSpace.xy - vUv;\n\t\t\tfloat dist = length( delta );\n\n\t\t// Step vector (uv space)\n\n\t\t\tvec2 stepv = fStepSize * delta / dist;\n\n\t\t// Number of iterations between pixel and sun\n\n\t\t\tfloat iters = dist/fStepSize;\n\n\t\t\tvec2 uv = vUv.xy;\n\t\t\tfloat col = 0.0;\n\n\t\t// This breaks ANGLE in Chrome 22\n\t\t//\t- see http://code.google.com/p/chromium/issues/detail?id=153105\n\n\t\t/*\n\t\t// Unrolling didnt do much on my hardware (ATI Mobility Radeon 3450),\n\t\t// so i've just left the loop\n\n\t\t\"for ( float i = 0.0; i < TAPS_PER_PASS; i += 1.0 ) {\",\n\n\t\t// Accumulate samples, making sure we dont walk past the light source.\n\n\t\t// The check for uv.y < 1 would not be necessary with \"border\" UV wrap\n\t\t// mode, with a black border color. I don't think this is currently\n\t\t// exposed by three.js. As a result there might be artifacts when the\n\t\t// sun is to the left, right or bottom of screen as these cases are\n\t\t// not specifically handled.\n\n\t\t\"\tcol += ( i <= iters && uv.y < 1.0 ? texture2D( tInput, uv ).r : 0.0 );\",\n\t\t\"\tuv += stepv;\",\n\n\t\t\"}\",\n\t\t*/\n\n\t\t// Unrolling loop manually makes it work in ANGLE\n\n\t\t\tfloat f = min( 1.0, max( vSunPositionScreenSpace.z / 1000.0, 0.0 ) ); // used to fade out godrays\n\n\t\t\tif ( 0.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 1.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 2.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 3.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 4.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 5.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t// Should technically be dividing by 'iters but 'TAPS_PER_PASS' smooths out\n\t\t// objectionable artifacts, in particular near the sun position. The side\n\t\t// effect is that the result is darker than it should be around the sun, as\n\t\t// TAPS_PER_PASS is greater than the number of samples actually accumulated.\n\t\t// When the result is inverted (in the shader 'godrays_combine this produces\n\t\t// a slight bright spot at the position of the sun, even when it is occluded.\n\n\t\t\tgl_FragColor = vec4( col/TAPS_PER_PASS );\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\n/**\n * Additively applies god rays from texture tGodRays to a background (tColors).\n * fGodRayIntensity attenuates the god rays.\n */\n\nconst GodRaysCombineShader = {\n\n\tname: 'GodRaysCombineShader',\n\n\tuniforms: {\n\n\t\ttColors: {\n\t\t\tvalue: null\n\t\t},\n\n\t\ttGodRays: {\n\t\t\tvalue: null\n\t\t},\n\n\t\tfGodRayIntensity: {\n\t\t\tvalue: 0.69\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tColors;\n\t\tuniform sampler2D tGodRays;\n\n\t\tuniform float fGodRayIntensity;\n\n\t\tvoid main() {\n\n\t\t// Since THREE.MeshDepthMaterial renders foreground objects white and background\n\t\t// objects black, the god-rays will be white streaks. Therefore value is inverted\n\t\t// before being combined with tColors\n\n\t\t\tgl_FragColor = texture2D( tColors, vUv ) + fGodRayIntensity * vec4( 1.0 - texture2D( tGodRays, vUv ).r );\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\n\n/**\n * A dodgy sun/sky shader. Makes a bright spot at the sun location. Would be\n * cheaper/faster/simpler to implement this as a simple sun sprite.\n */\n\nconst GodRaysFakeSunShader = {\n\n\tname: 'GodRaysFakeSunShader',\n\n\tuniforms: {\n\n\t\tvSunPositionScreenSpace: {\n\t\t\tvalue: new Vector3()\n\t\t},\n\n\t\tfAspect: {\n\t\t\tvalue: 1.0\n\t\t},\n\n\t\tsunColor: {\n\t\t\tvalue: new Color( 0xffee00 )\n\t\t},\n\n\t\tbgColor: {\n\t\t\tvalue: new Color( 0x000000 )\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform vec3 vSunPositionScreenSpace;\n\t\tuniform float fAspect;\n\n\t\tuniform vec3 sunColor;\n\t\tuniform vec3 bgColor;\n\n\t\tvoid main() {\n\n\t\t\tvec2 diff = vUv - vSunPositionScreenSpace.xy;\n\n\t\t// Correct for aspect ratio\n\n\t\t\tdiff.x *= fAspect;\n\n\t\t\tfloat prop = clamp( length( diff ) / 0.5, 0.0, 1.0 );\n\t\t\tprop = 0.35 * pow( 1.0 - prop, 3.0 );\n\n\t\t\tgl_FragColor.xyz = ( vSunPositionScreenSpace.z > 0.0 ) ? mix( sunColor, bgColor, 1.0 - prop ) : bgColor;\n\t\t\tgl_FragColor.w = 1.0;\n\n\t\t}`\n\n};\n\nexport { GodRaysDepthMaskShader, GodRaysGenerateShader, GodRaysCombineShader, GodRaysFakeSunShader };\n", "/**\n * Two pass Gaussian blur filter (horizontal and vertical blur shaders)\n * - see http://www.cake23.de/traveling-wavefronts-lit-up.html\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n */\n\nconst HorizontalBlurShader = {\n\n\tname: 'HorizontalBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'h': { value: 1.0 / 512.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float h;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { HorizontalBlurShader };\n", "/**\n * Simple fake tilt-shift effect, modulating two pass Gaussian blur (see above) by vertical position\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n * - \"r\" parameter control where \"focused\" horizontal line lies\n */\n\nconst HorizontalTiltShiftShader = {\n\n\tname: 'HorizontalTiltShiftShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'h': { value: 1.0 / 512.0 },\n\t\t'r': { value: 0.35 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float h;\n\t\tuniform float r;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tfloat hh = h * abs( r - vUv.y );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * hh, vUv.y ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * hh, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * hh, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * hh, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * hh, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * hh, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * hh, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * hh, vUv.y ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { HorizontalTiltShiftShader };\n", "/**\n * Hue and saturation adjustment\n * https://github.com/evanw/glfx.js\n * hue: -1 to 1 (-1 is 180 degrees in the negative direction, 0 is no change, etc.\n * saturation: -1 to 1 (-1 is solid gray, 0 is no change, and 1 is maximum contrast)\n */\n\nconst HueSaturationShader = {\n\n\tname: 'HueSaturationShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'hue': { value: 0 },\n\t\t'saturation': { value: 0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float hue;\n\t\tuniform float saturation;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t// hue\n\t\t\tfloat angle = hue * 3.14159265;\n\t\t\tfloat s = sin(angle), c = cos(angle);\n\t\t\tvec3 weights = (vec3(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + 1.0) / 3.0;\n\t\t\tfloat len = length(gl_FragColor.rgb);\n\t\t\tgl_FragColor.rgb = vec3(\n\t\t\t\tdot(gl_FragColor.rgb, weights.xyz),\n\t\t\t\tdot(gl_FragColor.rgb, weights.zxy),\n\t\t\t\tdot(gl_FragColor.rgb, weights.yzx)\n\t\t\t);\n\n\t\t\t// saturation\n\t\t\tfloat average = (gl_FragColor.r + gl_FragColor.g + gl_FragColor.b) / 3.0;\n\t\t\tif (saturation > 0.0) {\n\t\t\t\tgl_FragColor.rgb += (average - gl_FragColor.rgb) * (1.0 - 1.0 / (1.001 - saturation));\n\t\t\t} else {\n\t\t\t\tgl_FragColor.rgb += (average - gl_FragColor.rgb) * (-saturation);\n\t\t\t}\n\n\t\t}`\n\n};\n\nexport { HueSaturationShader };\n", "/**\n * Kaleidoscope Shader\n * Radial reflection around center point\n * Ported from: http://pixelshaders.com/editor/\n * by Toby Schachman / http://tobyschachman.com/\n *\n * sides: number of reflections\n * angle: initial angle in radians\n */\n\nconst KaleidoShader = {\n\n\tname: 'KaleidoShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'sides': { value: 6.0 },\n\t\t'angle': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float sides;\n\t\tuniform float angle;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 p = vUv - 0.5;\n\t\t\tfloat r = length(p);\n\t\t\tfloat a = atan(p.y, p.x) + angle;\n\t\t\tfloat tau = 2. * 3.1416 ;\n\t\t\ta = mod(a, tau/sides);\n\t\t\ta = abs(a - tau/sides/2.) ;\n\t\t\tp = r * vec2(cos(a), sin(a));\n\t\t\tvec4 color = texture2D(tDiffuse, p + 0.5);\n\t\t\tgl_FragColor = color;\n\n\t\t}`\n\n};\n\nexport { KaleidoShader };\n", "/**\n * Luminosity\n * http://en.wikipedia.org/wiki/Luminosity\n */\n\nconst LuminosityShader = {\n\n\tname: 'LuminosityShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat l = luminance( texel.rgb );\n\n\t\t\tgl_FragColor = vec4( l, l, l, texel.w );\n\n\t\t}`\n\n};\n\nexport { LuminosityShader };\n", "/**\n * Mirror Shader\n * Copies half the input to the other half\n *\n * side: side of input to mirror (0 = left, 1 = right, 2 = top, 3 = bottom)\n */\n\nconst MirrorShader = {\n\n\tname: 'MirrorShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'side': { value: 1 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform int side;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 p = vUv;\n\t\t\tif (side == 0){\n\t\t\t\tif (p.x > 0.5) p.x = 1.0 - p.x;\n\t\t\t}else if (side == 1){\n\t\t\t\tif (p.x < 0.5) p.x = 1.0 - p.x;\n\t\t\t}else if (side == 2){\n\t\t\t\tif (p.y < 0.5) p.y = 1.0 - p.y;\n\t\t\t}else if (side == 3){\n\t\t\t\tif (p.y > 0.5) p.y = 1.0 - p.y;\n\t\t\t}\n\t\t\tvec4 color = texture2D(tDiffuse, p);\n\t\t\tgl_FragColor = color;\n\n\t\t}`\n\n};\n\nexport { MirrorShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Normal map shader\n * - compute normals from heightmap\n */\n\nconst NormalMapShader = {\n\n\tname: 'NormalMapShader',\n\n\tuniforms: {\n\n\t\t'heightMap': { value: null },\n\t\t'resolution': { value: new Vector2( 512, 512 ) },\n\t\t'scale': { value: new Vector2( 1, 1 ) },\n\t\t'height': { value: 0.05 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float height;\n\t\tuniform vec2 resolution;\n\t\tuniform sampler2D heightMap;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tfloat val = texture2D( heightMap, vUv ).x;\n\n\t\t\tfloat valU = texture2D( heightMap, vUv + vec2( 1.0 / resolution.x, 0.0 ) ).x;\n\t\t\tfloat valV = texture2D( heightMap, vUv + vec2( 0.0, 1.0 / resolution.y ) ).x;\n\n\t\t\tgl_FragColor = vec4( ( 0.5 * normalize( vec3( val - valU, val - valV, height ) ) + 0.5 ), 1.0 );\n\n\t\t}`\n\n};\n\nexport { NormalMapShader };\n", "/**\n * RGB Shift Shader\n * Shifts red and blue channels from center in opposite directions\n * Ported from https://web.archive.org/web/20090820185047/http://kriss.cx/tom/2009/05/rgb-shift/\n * by Tom Butterworth / https://web.archive.org/web/20090810054752/http://kriss.cx/tom/\n *\n * amount: shift distance (1 is width of input)\n * angle: shift angle in radians\n */\n\nconst RGBShiftShader = {\n\n\tname: 'RGBShiftShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'amount': { value: 0.005 },\n\t\t'angle': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float amount;\n\t\tuniform float angle;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 offset = amount * vec2( cos(angle), sin(angle));\n\t\t\tvec4 cr = texture2D(tDiffuse, vUv + offset);\n\t\t\tvec4 cga = texture2D(tDiffuse, vUv);\n\t\t\tvec4 cb = texture2D(tDiffuse, vUv - offset);\n\t\t\tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\n\n\t\t}`\n\n};\n\nexport { RGBShiftShader };\n", "/**\n * Sepia tone shader\n * based on glfx.js sepia shader\n * https://github.com/evanw/glfx.js\n */\n\nconst SepiaShader = {\n\n\tname: 'SepiaShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'amount': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float amount;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 color = texture2D( tDiffuse, vUv );\n\t\t\tvec3 c = color.rgb;\n\n\t\t\tcolor.r = dot( c, vec3( 1.0 - 0.607 * amount, 0.769 * amount, 0.189 * amount ) );\n\t\t\tcolor.g = dot( c, vec3( 0.349 * amount, 1.0 - 0.314 * amount, 0.168 * amount ) );\n\t\t\tcolor.b = dot( c, vec3( 0.272 * amount, 0.534 * amount, 1.0 - 0.869 * amount ) );\n\n\t\t\tgl_FragColor = vec4( min( vec3( 1.0 ), color.rgb ), color.a );\n\n\t\t}`\n\n};\n\nexport { SepiaShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Sobel Edge Detection (see https://youtu.be/uihBwtPIBxM)\n *\n * As mentioned in the video the Sobel operator expects a grayscale image as input.\n *\n */\n\nconst SobelOperatorShader = {\n\n\tname: 'SobelOperatorShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2() }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 resolution;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 texel = vec2( 1.0 / resolution.x, 1.0 / resolution.y );\n\n\t\t// kernel definition (in glsl matrices are filled in column-major order)\n\n\t\t\tconst mat3 Gx = mat3( -1, -2, -1, 0, 0, 0, 1, 2, 1 ); // x direction kernel\n\t\t\tconst mat3 Gy = mat3( -1, 0, 1, -2, 0, 2, -1, 0, 1 ); // y direction kernel\n\n\t\t// fetch the 3x3 neighbourhood of a fragment\n\n\t\t// first column\n\n\t\t\tfloat tx0y0 = texture2D( tDiffuse, vUv + texel * vec2( -1, -1 ) ).r;\n\t\t\tfloat tx0y1 = texture2D( tDiffuse, vUv + texel * vec2( -1, 0 ) ).r;\n\t\t\tfloat tx0y2 = texture2D( tDiffuse, vUv + texel * vec2( -1, 1 ) ).r;\n\n\t\t// second column\n\n\t\t\tfloat tx1y0 = texture2D( tDiffuse, vUv + texel * vec2( 0, -1 ) ).r;\n\t\t\tfloat tx1y1 = texture2D( tDiffuse, vUv + texel * vec2( 0, 0 ) ).r;\n\t\t\tfloat tx1y2 = texture2D( tDiffuse, vUv + texel * vec2( 0, 1 ) ).r;\n\n\t\t// third column\n\n\t\t\tfloat tx2y0 = texture2D( tDiffuse, vUv + texel * vec2( 1, -1 ) ).r;\n\t\t\tfloat tx2y1 = texture2D( tDiffuse, vUv + texel * vec2( 1, 0 ) ).r;\n\t\t\tfloat tx2y2 = texture2D( tDiffuse, vUv + texel * vec2( 1, 1 ) ).r;\n\n\t\t// gradient value in x direction\n\n\t\t\tfloat valueGx = Gx[0][0] * tx0y0 + Gx[1][0] * tx1y0 + Gx[2][0] * tx2y0 +\n\t\t\t\tGx[0][1] * tx0y1 + Gx[1][1] * tx1y1 + Gx[2][1] * tx2y1 +\n\t\t\t\tGx[0][2] * tx0y2 + Gx[1][2] * tx1y2 + Gx[2][2] * tx2y2;\n\n\t\t// gradient value in y direction\n\n\t\t\tfloat valueGy = Gy[0][0] * tx0y0 + Gy[1][0] * tx1y0 + Gy[2][0] * tx2y0 +\n\t\t\t\tGy[0][1] * tx0y1 + Gy[1][1] * tx1y1 + Gy[2][1] * tx2y1 +\n\t\t\t\tGy[0][2] * tx0y2 + Gy[1][2] * tx1y2 + Gy[2][2] * tx2y2;\n\n\t\t// magnitute of the total gradient\n\n\t\t\tfloat G = sqrt( ( valueGx * valueGx ) + ( valueGy * valueGy ) );\n\n\t\t\tgl_FragColor = vec4( vec3( G ), 1 );\n\n\t\t}`\n\n};\n\nexport { SobelOperatorShader };\n", "import {\n\tColor,\n\tShaderChunk,\n\tShaderLib,\n\tUniformsUtils\n} from 'three';\n\n/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\n\nfunction replaceAll( string, find, replace ) {\n\n\treturn string.split( find ).join( replace );\n\n}\n\nconst meshphong_frag_head = ShaderChunk[ 'meshphong_frag' ].slice( 0, ShaderChunk[ 'meshphong_frag' ].indexOf( 'void main() {' ) );\nconst meshphong_frag_body = ShaderChunk[ 'meshphong_frag' ].slice( ShaderChunk[ 'meshphong_frag' ].indexOf( 'void main() {' ) );\n\nconst SubsurfaceScatteringShader = {\n\n\tname: 'SubsurfaceScatteringShader',\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib[ 'phong' ].uniforms,\n\t\t{\n\t\t\t'thicknessMap': { value: null },\n\t\t\t'thicknessColor': { value: new Color( 0xffffff ) },\n\t\t\t'thicknessDistortion': { value: 0.1 },\n\t\t\t'thicknessAmbient': { value: 0.0 },\n\t\t\t'thicknessAttenuation': { value: 0.1 },\n\t\t\t'thicknessPower': { value: 2.0 },\n\t\t\t'thicknessScale': { value: 10.0 }\n\t\t}\n\n\t] ),\n\n\tvertexShader: [\n\t\t'#define USE_UV',\n\t\tShaderChunk[ 'meshphong_vert' ],\n\t].join( '\\n' ),\n\n\tfragmentShader: [\n\t\t'#define USE_UV',\n\t\t'#define SUBSURFACE',\n\n\t\tmeshphong_frag_head,\n\n\t\t'uniform sampler2D thicknessMap;',\n\t\t'uniform float thicknessPower;',\n\t\t'uniform float thicknessScale;',\n\t\t'uniform float thicknessDistortion;',\n\t\t'uniform float thicknessAmbient;',\n\t\t'uniform float thicknessAttenuation;',\n\t\t'uniform vec3 thicknessColor;',\n\n\t\t'void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, inout ReflectedLight reflectedLight) {',\n\t\t'\tvec3 thickness = thicknessColor * texture2D(thicknessMap, uv).r;',\n\t\t'\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * thicknessDistortion));',\n\t\t'\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -scatteringHalf)), thicknessPower) * thicknessScale;',\n\t\t'\tvec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;',\n\t\t'\treflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;',\n\t\t'}',\n\n\t\tmeshphong_frag_body.replace( '#include ',\n\n\t\t\treplaceAll(\n\t\t\t\tShaderChunk[ 'lights_fragment_begin' ],\n\t\t\t\t'RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );',\n\t\t\t\t[\n\t\t\t\t\t'RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );',\n\n\t\t\t\t\t'#if defined( SUBSURFACE ) && defined( USE_UV )',\n\t\t\t\t\t' RE_Direct_Scattering(directLight, vUv, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, reflectedLight);',\n\t\t\t\t\t'#endif',\n\t\t\t\t].join( '\\n' )\n\t\t\t),\n\n\t\t),\n\n\t].join( '\\n' ),\n\n};\n\nexport { SubsurfaceScatteringShader };\n", "/**\n * Technicolor Shader\n * Simulates the look of the two-strip technicolor process popular in early 20th century films.\n * More historical info here: http://www.widescreenmuseum.com/oldcolor/technicolor1.htm\n * Demo here: http://charliehoey.com/technicolor_shader/shader_test.html\n */\n\nconst TechnicolorShader = {\n\n\tname: 'TechnicolorShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 tex = texture2D( tDiffuse, vec2( vUv.x, vUv.y ) );\n\t\t\tvec4 newTex = vec4(tex.r, (tex.g + tex.b) * .5, (tex.g + tex.b) * .5, 1.0);\n\n\t\t\tgl_FragColor = newTex;\n\n\t\t}`\n\n};\n\nexport { TechnicolorShader };\n", "import {\n\tColor,\n\tVector3\n} from 'three';\n\n/**\n * Currently contains:\n *\n *\ttoon1\n *\ttoon2\n *\thatching\n *\tdotted\n */\n\nconst ToonShader1 = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos': { value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xffffff ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\t\tvarying vec3 vRefract;\n\n\t\tvoid main() {\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvec3 worldNormal = normalize ( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );\n\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t\tvec3 I = worldPosition.xyz - cameraPosition;\n\t\t\tvRefract = refract( normalize( I ), worldNormal, 1.02 );\n\n\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvarying vec3 vRefract;\n\n\t\tvoid main() {\n\n\t\t\tfloat directionalLightWeighting = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);\n\t\t\tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n\t\t\tfloat intensity = smoothstep( - 0.5, 1.0, pow( length(lightWeighting), 20.0 ) );\n\t\t\tintensity += length(lightWeighting) * 0.2;\n\n\t\t\tfloat cameraWeighting = dot( normalize( vNormal ), vRefract );\n\t\t\tintensity += pow( 1.0 - length( cameraWeighting ), 6.0 );\n\t\t\tintensity = intensity * 0.2 + 0.3;\n\n\t\t\tif ( intensity < 0.50 ) {\n\n\t\t\t\tgl_FragColor = vec4( 2.0 * intensity * uBaseColor, 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tgl_FragColor = vec4( 1.0 - 2.0 * ( 1.0 - intensity ) * ( 1.0 - uBaseColor ), 1.0 );\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nconst ToonShader2 = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos': { value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xeeeeee ) },\n\t\t'uLineColor1': { value: new Color( 0x808080 ) },\n\t\t'uLineColor2': { value: new Color( 0x000000 ) },\n\t\t'uLineColor3': { value: new Color( 0x000000 ) },\n\t\t'uLineColor4': { value: new Color( 0x000000 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\t\tuniform vec3 uLineColor1;\n\t\tuniform vec3 uLineColor2;\n\t\tuniform vec3 uLineColor3;\n\t\tuniform vec3 uLineColor4;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tfloat camera = max( dot( normalize( vNormal ), vec3( 0.0, 0.0, 1.0 ) ), 0.4);\n\t\t\tfloat light = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);\n\n\t\t\tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n\t\t\tif ( length(uAmbientLightColor + uDirLightColor * light) < 1.00 ) {\n\n\t\t\t\tgl_FragColor *= vec4( uLineColor1, 1.0 );\n\n\t\t\t}\n\n\t\t\tif ( length(uAmbientLightColor + uDirLightColor * camera) < 0.50 ) {\n\n\t\t\t\tgl_FragColor *= vec4( uLineColor2, 1.0 );\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nconst ToonShaderHatching = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos':\t{ value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xffffff ) },\n\t\t'uLineColor1': { value: new Color( 0x000000 ) },\n\t\t'uLineColor2': { value: new Color( 0x000000 ) },\n\t\t'uLineColor3': { value: new Color( 0x000000 ) },\n\t\t'uLineColor4': { value: new Color( 0x000000 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\t\tuniform vec3 uLineColor1;\n\t\tuniform vec3 uLineColor2;\n\t\tuniform vec3 uLineColor3;\n\t\tuniform vec3 uLineColor4;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tfloat directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);\n\t\t\tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n\t\t\tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n\t\t\tif ( length(lightWeighting) < 1.00 ) {\n\n\t\t\t\tif ( mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.75 ) {\n\n\t\t\t\tif (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor2, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.50 ) {\n\n\t\t\t\tif (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor3, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.3465 ) {\n\n\t\t\t\tif (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor4, 1.0 );\n\n\t\t\t}\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nconst ToonShaderDotted = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos':\t{ value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xffffff ) },\n\t\t'uLineColor1': { value: new Color( 0x000000 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\t\tuniform vec3 uLineColor1;\n\t\tuniform vec3 uLineColor2;\n\t\tuniform vec3 uLineColor3;\n\t\tuniform vec3 uLineColor4;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tfloat directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);\n\t\t\tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n\t\t\tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n\t\t\tif ( length(lightWeighting) < 1.00 ) {\n\n\t\t\t\tif ( ( mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y, 4.0) ) > 6.00 ) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.50 ) {\n\n\t\t\t\tif ( ( mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0) ) > 6.00 ) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { ToonShader1, ToonShader2, ToonShaderHatching, ToonShaderDotted };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Triangle blur shader\n * based on glfx.js triangle blur shader\n * https://github.com/evanw/glfx.js\n *\n * A basic blur filter, which convolves the image with a\n * pyramid filter. The pyramid filter is separable and is applied as two\n * perpendicular triangle filters.\n */\n\nconst TriangleBlurShader = {\n\n\tname: 'TriangleBlurShader',\n\n\tuniforms: {\n\n\t\t'texture': { value: null },\n\t\t'delta': { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\t#define ITERATIONS 10.0\n\n\t\tuniform sampler2D texture;\n\t\tuniform vec2 delta;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 color = vec4( 0.0 );\n\n\t\t\tfloat total = 0.0;\n\n\t\t// randomize the lookup values to hide the fixed number of samples\n\n\t\t\tfloat offset = rand( vUv );\n\n\t\t\tfor ( float t = -ITERATIONS; t <= ITERATIONS; t ++ ) {\n\n\t\t\t\tfloat percent = ( t + offset - 0.5 ) / ITERATIONS;\n\t\t\t\tfloat weight = 1.0 - abs( percent );\n\n\t\t\t\tcolor += texture2D( texture, vUv + delta * percent ) * weight;\n\t\t\t\ttotal += weight;\n\n\t\t\t}\n\n\t\t\tgl_FragColor = color / total;\n\n\t\t}`\n\n};\n\nexport { TriangleBlurShader };\n", "/**\n * Unpack RGBA depth shader\n * - show RGBA encoded depth as monochrome color\n */\n\nconst UnpackDepthRGBAShader = {\n\n\tname: 'UnpackDepthRGBAShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\tfloat depth = 1.0 - unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );\n\t\t\tgl_FragColor = vec4( vec3( depth ), opacity );\n\n\t\t}`\n\n};\n\nexport { UnpackDepthRGBAShader };\n", "import {\n\tUniformsLib,\n\tUniformsUtils,\n\tMatrix4\n} from 'three';\n\n/**\n * Mesh Velocity Shader @bhouston\n */\n\nconst VelocityShader = {\n\n\tname: 'VelocityShader',\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.displacementmap,\n\t\t{\n\t\t\tmodelMatrixPrev: { value: new Matrix4() },\n\t\t\tcurrentProjectionViewMatrix: { value: new Matrix4() },\n\t\t\tpreviousProjectionViewMatrix: { value: new Matrix4() }\n\t\t}\n\t] ),\n\n\tvertexShader: /* glsl */`\n#define NORMAL\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nuniform mat4 previousProjectionViewMatrix;\nuniform mat4 currentProjectionViewMatrix;\n\nuniform mat4 modelMatrixPrev;\n\nvarying vec4 clipPositionCurrent;\nvarying vec4 clipPositionPrevious;\n\nvoid main() {\n\n\n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#ifdef USE_SKINNING\n\n\tvec4 mvPosition = modelViewMatrix * skinned;\n\tclipPositionCurrent = currentProjectionViewMatrix * modelMatrix * skinned;\n\tclipPositionPrevious = previousProjectionViewMatrix * modelMatrixPrev * skinned;\n\n#else\n\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\tclipPositionCurrent = currentProjectionViewMatrix * modelMatrix * vec4( transformed, 1.0 );\n\tclipPositionPrevious = previousProjectionViewMatrix * modelMatrixPrev * vec4( transformed, 1.0 );\n\n#endif\n\n\tgl_Position = projectionMatrix * mvPosition;\n\n\t#include \n\t#include \n}\n`,\n\tfragmentShader: /* glsl */`\n#define NORMAL\n\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvarying vec4 clipPositionCurrent;\nvarying vec4 clipPositionPrevious;\n\nvoid main() {\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\tdiffuseColor.a = opacity;\n\n\t#include \n\t#include \n\t#include \n\n\tvec2 ndcPositionCurrent = clipPositionCurrent.xy/clipPositionCurrent.w;\n\tvec2 ndcPositionPrevious = clipPositionPrevious.xy/clipPositionPrevious.w;\n\tvec2 vel = ( ndcPositionCurrent - ndcPositionPrevious ) * 0.5;\n\tvel = vel * 0.5 + 0.5;\n\tvec2 v1 = packDepthToRG(vel.x);\n\tvec2 v2 = packDepthToRG(vel.y);\n\tgl_FragColor = vec4(v1.x, v1.y, v2.x, v2.y);\n\n\t#include \n\n}\n\n`\n};\n\nexport { VelocityShader };\n", "/**\n * Two pass Gaussian blur filter (horizontal and vertical blur shaders)\n * - see http://www.cake23.de/traveling-wavefronts-lit-up.html\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n */\n\nconst VerticalBlurShader = {\n\n\tname: 'VerticalBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'v': { value: 1.0 / 512.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float v;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { VerticalBlurShader };\n", "/**\n * Simple fake tilt-shift effect, modulating two pass Gaussian blur (see above) by vertical position\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n * - \"r\" parameter control where \"focused\" horizontal line lies\n */\n\nconst VerticalTiltShiftShader = {\n\n\tname: 'VerticalTiltShiftShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'v': { value: 1.0 / 512.0 },\n\t\t'r': { value: 0.35 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float v;\n\t\tuniform float r;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tfloat vv = v * abs( r - vUv.y );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * vv ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * vv ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * vv ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * vv ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * vv ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * vv ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * vv ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * vv ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { VerticalTiltShiftShader };\n", "/**\n * Vignette shader\n * based on PaintEffect postprocess from ro.me\n * http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js\n */\n\nconst VignetteShader = {\n\n\tname: 'VignetteShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'offset': { value: 1.0 },\n\t\t'darkness': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float offset;\n\t\tuniform float darkness;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\t// Eskil's vignette\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tvec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset );\n\t\t\tgl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a );\n\n\t\t}`\n\n};\n\nexport { VignetteShader };\n", "import {\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Shaders to render 3D volumes using raycasting.\n * The applied techniques are based on similar implementations in the Visvis and Vispy projects.\n * This is not the only approach, therefore it's marked 1.\n */\n\nconst VolumeRenderShader1 = {\n\n\tuniforms: {\n\t\t'u_size': { value: new Vector3( 1, 1, 1 ) },\n\t\t'u_renderstyle': { value: 0 },\n\t\t'u_renderthreshold': { value: 0.5 },\n\t\t'u_clim': { value: new Vector2( 1, 1 ) },\n\t\t'u_data': { value: null },\n\t\t'u_cmdata': { value: null }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec4 v_nearpos;\n\t\tvarying vec4 v_farpos;\n\t\tvarying vec3 v_position;\n\n\t\tvoid main() {\n\t\t\t\t// Prepare transforms to map to \"camera view\". See also:\n\t\t\t\t// https://threejs.org/docs/#api/renderers/webgl/WebGLProgram\n\t\t\t\tmat4 viewtransformf = modelViewMatrix;\n\t\t\t\tmat4 viewtransformi = inverse(modelViewMatrix);\n\n\t\t\t\t// Project local vertex coordinate to camera position. Then do a step\n\t\t\t\t// backward (in cam coords) to the near clipping plane, and project back. Do\n\t\t\t\t// the same for the far clipping plane. This gives us all the information we\n\t\t\t\t// need to calculate the ray and truncate it to the viewing cone.\n\t\t\t\tvec4 position4 = vec4(position, 1.0);\n\t\t\t\tvec4 pos_in_cam = viewtransformf * position4;\n\n\t\t\t\t// Intersection of ray and near clipping plane (z = -1 in clip coords)\n\t\t\t\tpos_in_cam.z = -pos_in_cam.w;\n\t\t\t\tv_nearpos = viewtransformi * pos_in_cam;\n\n\t\t\t\t// Intersection of ray and far clipping plane (z = +1 in clip coords)\n\t\t\t\tpos_in_cam.z = pos_in_cam.w;\n\t\t\t\tv_farpos = viewtransformi * pos_in_cam;\n\n\t\t\t\t// Set varyings and output pos\n\t\t\t\tv_position = position;\n\t\t\t\tgl_Position = projectionMatrix * viewMatrix * modelMatrix * position4;\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\t\t\t\tprecision mediump sampler3D;\n\n\t\t\t\tuniform vec3 u_size;\n\t\t\t\tuniform int u_renderstyle;\n\t\t\t\tuniform float u_renderthreshold;\n\t\t\t\tuniform vec2 u_clim;\n\n\t\t\t\tuniform sampler3D u_data;\n\t\t\t\tuniform sampler2D u_cmdata;\n\n\t\t\t\tvarying vec3 v_position;\n\t\t\t\tvarying vec4 v_nearpos;\n\t\t\t\tvarying vec4 v_farpos;\n\n\t\t\t\t// The maximum distance through our rendering volume is sqrt(3).\n\t\t\t\tconst int MAX_STEPS = 887;\t// 887 for 512^3, 1774 for 1024^3\n\t\t\t\tconst int REFINEMENT_STEPS = 4;\n\t\t\t\tconst float relative_step_size = 1.0;\n\t\t\t\tconst vec4 ambient_color = vec4(0.2, 0.4, 0.2, 1.0);\n\t\t\t\tconst vec4 diffuse_color = vec4(0.8, 0.2, 0.2, 1.0);\n\t\t\t\tconst vec4 specular_color = vec4(1.0, 1.0, 1.0, 1.0);\n\t\t\t\tconst float shininess = 40.0;\n\n\t\t\t\tvoid cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);\n\t\t\t\tvoid cast_iso(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);\n\n\t\t\t\tfloat sample1(vec3 texcoords);\n\t\t\t\tvec4 apply_colormap(float val);\n\t\t\t\tvec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray);\n\n\n\t\t\t\tvoid main() {\n\t\t\t\t\t\t// Normalize clipping plane info\n\t\t\t\t\t\tvec3 farpos = v_farpos.xyz / v_farpos.w;\n\t\t\t\t\t\tvec3 nearpos = v_nearpos.xyz / v_nearpos.w;\n\n\t\t\t\t\t\t// Calculate unit vector pointing in the view direction through this fragment.\n\t\t\t\t\t\tvec3 view_ray = normalize(nearpos.xyz - farpos.xyz);\n\n\t\t\t\t\t\t// Compute the (negative) distance to the front surface or near clipping plane.\n\t\t\t\t\t\t// v_position is the back face of the cuboid, so the initial distance calculated in the dot\n\t\t\t\t\t\t// product below is the distance from near clip plane to the back of the cuboid\n\t\t\t\t\t\tfloat distance = dot(nearpos - v_position, view_ray);\n\t\t\t\t\t\tdistance = max(distance, min((-0.5 - v_position.x) / view_ray.x,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(u_size.x - 0.5 - v_position.x) / view_ray.x));\n\t\t\t\t\t\tdistance = max(distance, min((-0.5 - v_position.y) / view_ray.y,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(u_size.y - 0.5 - v_position.y) / view_ray.y));\n\t\t\t\t\t\tdistance = max(distance, min((-0.5 - v_position.z) / view_ray.z,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(u_size.z - 0.5 - v_position.z) / view_ray.z));\n\n\t\t\t\t\t\t// Now we have the starting position on the front surface\n\t\t\t\t\t\tvec3 front = v_position + view_ray * distance;\n\n\t\t\t\t\t\t// Decide how many steps to take\n\t\t\t\t\t\tint nsteps = int(-distance / relative_step_size + 0.5);\n\t\t\t\t\t\tif ( nsteps < 1 )\n\t\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t// Get starting location and step vector in texture coordinates\n\t\t\t\t\t\tvec3 step = ((v_position - front) / u_size) / float(nsteps);\n\t\t\t\t\t\tvec3 start_loc = front / u_size;\n\n\t\t\t\t\t\t// For testing: show the number of steps. This helps to establish\n\t\t\t\t\t\t// whether the rays are correctly oriented\n\t\t\t\t\t\t//'gl_FragColor = vec4(0.0, float(nsteps) / 1.0 / u_size.x, 1.0, 1.0);\n\t\t\t\t\t\t//'return;\n\n\t\t\t\t\t\tif (u_renderstyle == 0)\n\t\t\t\t\t\t\t\tcast_mip(start_loc, step, nsteps, view_ray);\n\t\t\t\t\t\telse if (u_renderstyle == 1)\n\t\t\t\t\t\t\t\tcast_iso(start_loc, step, nsteps, view_ray);\n\n\t\t\t\t\t\tif (gl_FragColor.a < 0.05)\n\t\t\t\t\t\t\t\tdiscard;\n\t\t\t\t}\n\n\n\t\t\t\tfloat sample1(vec3 texcoords) {\n\t\t\t\t\t\t/* Sample float value from a 3D texture. Assumes intensity data. */\n\t\t\t\t\t\treturn texture(u_data, texcoords.xyz).r;\n\t\t\t\t}\n\n\n\t\t\t\tvec4 apply_colormap(float val) {\n\t\t\t\t\t\tval = (val - u_clim[0]) / (u_clim[1] - u_clim[0]);\n\t\t\t\t\t\treturn texture2D(u_cmdata, vec2(val, 0.5));\n\t\t\t\t}\n\n\n\t\t\t\tvoid cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray) {\n\n\t\t\t\t\t\tfloat max_val = -1e6;\n\t\t\t\t\t\tint max_i = 100;\n\t\t\t\t\t\tvec3 loc = start_loc;\n\n\t\t\t\t\t\t// Enter the raycasting loop. In WebGL 1 the loop index cannot be compared with\n\t\t\t\t\t\t// non-constant expression. So we use a hard-coded max, and an additional condition\n\t\t\t\t\t\t// inside the loop.\n\t\t\t\t\t\tfor (int iter=0; iter= nsteps)\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t// Sample from the 3D texture\n\t\t\t\t\t\t\t\tfloat val = sample1(loc);\n\t\t\t\t\t\t\t\t// Apply MIP operation\n\t\t\t\t\t\t\t\tif (val > max_val) {\n\t\t\t\t\t\t\t\t\t\tmax_val = val;\n\t\t\t\t\t\t\t\t\t\tmax_i = iter;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Advance location deeper into the volume\n\t\t\t\t\t\t\t\tloc += step;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Refine location, gives crispier images\n\t\t\t\t\t\tvec3 iloc = start_loc + step * (float(max_i) - 0.5);\n\t\t\t\t\t\tvec3 istep = step / float(REFINEMENT_STEPS);\n\t\t\t\t\t\tfor (int i=0; i= nsteps)\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t// Sample from the 3D texture\n\t\t\t\t\t\t\t\tfloat val = sample1(loc);\n\n\t\t\t\t\t\t\t\tif (val > low_threshold) {\n\t\t\t\t\t\t\t\t\t\t// Take the last interval in smaller steps\n\t\t\t\t\t\t\t\t\t\tvec3 iloc = loc - 0.5 * step;\n\t\t\t\t\t\t\t\t\t\tvec3 istep = step / float(REFINEMENT_STEPS);\n\t\t\t\t\t\t\t\t\t\tfor (int i=0; i u_renderthreshold) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgl_FragColor = add_lighting(val, iloc, dstep, view_ray);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tiloc += istep;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Advance location deeper into the volume\n\t\t\t\t\t\t\t\tloc += step;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tvec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray)\n\t\t\t\t{\n\t\t\t\t\t// Calculate color by incorporating lighting\n\n\t\t\t\t\t\t// View direction\n\t\t\t\t\t\tvec3 V = normalize(view_ray);\n\n\t\t\t\t\t\t// calculate normal vector from gradient\n\t\t\t\t\t\tvec3 N;\n\t\t\t\t\t\tfloat val1, val2;\n\t\t\t\t\t\tval1 = sample1(loc + vec3(-step[0], 0.0, 0.0));\n\t\t\t\t\t\tval2 = sample1(loc + vec3(+step[0], 0.0, 0.0));\n\t\t\t\t\t\tN[0] = val1 - val2;\n\t\t\t\t\t\tval = max(max(val1, val2), val);\n\t\t\t\t\t\tval1 = sample1(loc + vec3(0.0, -step[1], 0.0));\n\t\t\t\t\t\tval2 = sample1(loc + vec3(0.0, +step[1], 0.0));\n\t\t\t\t\t\tN[1] = val1 - val2;\n\t\t\t\t\t\tval = max(max(val1, val2), val);\n\t\t\t\t\t\tval1 = sample1(loc + vec3(0.0, 0.0, -step[2]));\n\t\t\t\t\t\tval2 = sample1(loc + vec3(0.0, 0.0, +step[2]));\n\t\t\t\t\t\tN[2] = val1 - val2;\n\t\t\t\t\t\tval = max(max(val1, val2), val);\n\n\t\t\t\t\t\tfloat gm = length(N); // gradient magnitude\n\t\t\t\t\t\tN = normalize(N);\n\n\t\t\t\t\t\t// Flip normal so it points towards viewer\n\t\t\t\t\t\tfloat Nselect = float(dot(N, V) > 0.0);\n\t\t\t\t\t\tN = (2.0 * Nselect - 1.0) * N;\t// ==\tNselect * N - (1.0-Nselect)*N;\n\n\t\t\t\t\t\t// Init colors\n\t\t\t\t\t\tvec4 ambient_color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t\tvec4 diffuse_color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t\tvec4 specular_color = vec4(0.0, 0.0, 0.0, 0.0);\n\n\t\t\t\t\t\t// note: could allow multiple lights\n\t\t\t\t\t\tfor (int i=0; i<1; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t // Get light direction (make sure to prevent zero devision)\n\t\t\t\t\t\t\t\tvec3 L = normalize(view_ray);\t//lightDirs[i];\n\t\t\t\t\t\t\t\tfloat lightEnabled = float( length(L) > 0.0 );\n\t\t\t\t\t\t\t\tL = normalize(L + (1.0 - lightEnabled));\n\n\t\t\t\t\t\t\t\t// Calculate lighting properties\n\t\t\t\t\t\t\t\tfloat lambertTerm = clamp(dot(N, L), 0.0, 1.0);\n\t\t\t\t\t\t\t\tvec3 H = normalize(L+V); // Halfway vector\n\t\t\t\t\t\t\t\tfloat specularTerm = pow(max(dot(H, N), 0.0), shininess);\n\n\t\t\t\t\t\t\t\t// Calculate mask\n\t\t\t\t\t\t\t\tfloat mask1 = lightEnabled;\n\n\t\t\t\t\t\t\t\t// Calculate colors\n\t\t\t\t\t\t\t\tambient_color +=\tmask1 * ambient_color;\t// * gl_LightSource[i].ambient;\n\t\t\t\t\t\t\t\tdiffuse_color +=\tmask1 * lambertTerm;\n\t\t\t\t\t\t\t\tspecular_color += mask1 * specularTerm * specular_color;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Calculate final color by componing different components\n\t\t\t\t\t\tvec4 final_color;\n\t\t\t\t\t\tvec4 color = apply_colormap(val);\n\t\t\t\t\t\tfinal_color = color * (ambient_color + diffuse_color) + specular_color;\n\t\t\t\t\t\tfinal_color.a = color.a;\n\t\t\t\t\t\treturn final_color;\n\t\t\t\t}`\n\n};\n\nexport { VolumeRenderShader1 };\n", "const WaterRefractionShader = {\n\n\tname: 'WaterRefractionShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'time': {\n\t\t\tvalue: 0\n\t\t},\n\n\t\t'tDiffuse': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tDudv': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vUvRefraction;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tvUvRefraction = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 color;\n\t\tuniform float time;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDudv;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vUvRefraction;\n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ),blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t float waveStrength = 0.5;\n\t\t float waveSpeed = 0.03;\n\n\t\t\t// simple distortion (ripple) via dudv map (see https://www.youtube.com/watch?v=6B7IF6GOu7s)\n\n\t\t\tvec2 distortedUv = texture2D( tDudv, vec2( vUv.x + time * waveSpeed, vUv.y ) ).rg * waveStrength;\n\t\t\tdistortedUv = vUv.xy + vec2( distortedUv.x, distortedUv.y + time * waveSpeed );\n\t\t\tvec2 distortion = ( texture2D( tDudv, distortedUv ).rg * 2.0 - 1.0 ) * waveStrength;\n\n\t\t\t// new uv coords\n\n\t\t\tvec4 uv = vec4( vUvRefraction );\n\t\t\tuv.xy += distortion;\n\n\t\t\tvec4 base = texture2DProj( tDiffuse, uv );\n\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { WaterRefractionShader };\n", "class FlakesTexture {\n\n\tconstructor( width = 512, height = 512 ) {\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tconst context = canvas.getContext( '2d' );\n\t\tcontext.fillStyle = 'rgb(127,127,255)';\n\t\tcontext.fillRect( 0, 0, width, height );\n\n\t\tfor ( let i = 0; i < 4000; i ++ ) {\n\n\t\t\tconst x = Math.random() * width;\n\t\t\tconst y = Math.random() * height;\n\t\t\tconst r = Math.random() * 3 + 3;\n\n\t\t\tlet nx = Math.random() * 2 - 1;\n\t\t\tlet ny = Math.random() * 2 - 1;\n\t\t\tlet nz = 1.5;\n\n\t\t\tconst l = Math.sqrt( nx * nx + ny * ny + nz * nz );\n\n\t\t\tnx /= l; ny /= l; nz /= l;\n\n\t\t\tcontext.fillStyle = 'rgb(' + ( nx * 127 + 127 ) + ',' + ( ny * 127 + 127 ) + ',' + ( nz * 255 ) + ')';\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc( x, y, r, 0, Math.PI * 2 );\n\t\t\tcontext.fill();\n\n\t\t}\n\n\t\treturn canvas;\n\n\t}\n\n}\n\nexport { FlakesTexture };\n", "import {\n\tMathUtils,\n\tQuaternion,\n\tVector3\n} from 'three';\n\nconst _va = /*@__PURE__*/ new Vector3(), // from pe to pa\n\t_vb = /*@__PURE__*/ new Vector3(), // from pe to pb\n\t_vc = /*@__PURE__*/ new Vector3(), // from pe to pc\n\t_vr = /*@__PURE__*/ new Vector3(), // right axis of screen\n\t_vu = /*@__PURE__*/ new Vector3(), // up axis of screen\n\t_vn = /*@__PURE__*/ new Vector3(), // normal vector of screen\n\t_vec = /*@__PURE__*/ new Vector3(), // temporary vector\n\t_quat = /*@__PURE__*/ new Quaternion(); // temporary quaternion\n\n\n/** Set a PerspectiveCamera's projectionMatrix and quaternion\n * to exactly frame the corners of an arbitrary rectangle.\n * NOTE: This function ignores the standard parameters;\n * do not call updateProjectionMatrix() after this!\n * @param {Vector3} bottomLeftCorner\n * @param {Vector3} bottomRightCorner\n * @param {Vector3} topLeftCorner\n * @param {boolean} estimateViewFrustum */\nfunction frameCorners( camera, bottomLeftCorner, bottomRightCorner, topLeftCorner, estimateViewFrustum = false ) {\n\n\tconst pa = bottomLeftCorner, pb = bottomRightCorner, pc = topLeftCorner;\n\tconst pe = camera.position; // eye position\n\tconst n = camera.near; // distance of near clipping plane\n\tconst f = camera.far; //distance of far clipping plane\n\n\t_vr.copy( pb ).sub( pa ).normalize();\n\t_vu.copy( pc ).sub( pa ).normalize();\n\t_vn.crossVectors( _vr, _vu ).normalize();\n\n\t_va.copy( pa ).sub( pe ); // from pe to pa\n\t_vb.copy( pb ).sub( pe ); // from pe to pb\n\t_vc.copy( pc ).sub( pe ); // from pe to pc\n\n\tconst d = - _va.dot( _vn );\t// distance from eye to screen\n\tconst l = _vr.dot( _va ) * n / d; // distance to left screen edge\n\tconst r = _vr.dot( _vb ) * n / d; // distance to right screen edge\n\tconst b = _vu.dot( _va ) * n / d; // distance to bottom screen edge\n\tconst t = _vu.dot( _vc ) * n / d; // distance to top screen edge\n\n\t// Set the camera rotation to match the focal plane to the corners' plane\n\t_quat.setFromUnitVectors( _vec.set( 0, 1, 0 ), _vu );\n\tcamera.quaternion.setFromUnitVectors( _vec.set( 0, 0, 1 ).applyQuaternion( _quat ), _vn ).multiply( _quat );\n\n\t// Set the off-axis projection matrix to match the corners\n\tcamera.projectionMatrix.set( 2.0 * n / ( r - l ), 0.0,\n\t\t( r + l ) / ( r - l ), 0.0, 0.0,\n\t\t2.0 * n / ( t - b ),\n\t\t( t + b ) / ( t - b ), 0.0, 0.0, 0.0,\n\t\t( f + n ) / ( n - f ),\n\t\t2.0 * f * n / ( n - f ), 0.0, 0.0, - 1.0, 0.0 );\n\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t// FoV estimation to fix frustum culling\n\tif ( estimateViewFrustum ) {\n\n\t\t// Set fieldOfView to a conservative estimate\n\t\t// to make frustum tall/wide enough to encompass it\n\t\tcamera.fov =\n\t\t\tMathUtils.RAD2DEG / Math.min( 1.0, camera.aspect ) *\n\t\t\tMath.atan( ( _vec.copy( pb ).sub( pa ).length() +\n\t\t\t\t\t\t\t( _vec.copy( pc ).sub( pa ).length() ) ) / _va.length() );\n\n\t}\n\n}\n\nexport { frameCorners };\n", "var Stats = function () {\n\n\tvar mode = 0;\n\n\tvar container = document.createElement( 'div' );\n\tcontainer.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';\n\tcontainer.addEventListener( 'click', function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tshowPanel( ++ mode % container.children.length );\n\n\t}, false );\n\n\t//\n\n\tfunction addPanel( panel ) {\n\n\t\tcontainer.appendChild( panel.dom );\n\t\treturn panel;\n\n\t}\n\n\tfunction showPanel( id ) {\n\n\t\tfor ( var i = 0; i < container.children.length; i ++ ) {\n\n\t\t\tcontainer.children[ i ].style.display = i === id ? 'block' : 'none';\n\n\t\t}\n\n\t\tmode = id;\n\n\t}\n\n\t//\n\n\tvar beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;\n\n\tvar fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );\n\tvar msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );\n\n\tif ( self.performance && self.performance.memory ) {\n\n\t\tvar memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );\n\n\t}\n\n\tshowPanel( 0 );\n\n\treturn {\n\n\t\tREVISION: 16,\n\n\t\tdom: container,\n\n\t\taddPanel: addPanel,\n\t\tshowPanel: showPanel,\n\n\t\tbegin: function () {\n\n\t\t\tbeginTime = ( performance || Date ).now();\n\n\t\t},\n\n\t\tend: function () {\n\n\t\t\tframes ++;\n\n\t\t\tvar time = ( performance || Date ).now();\n\n\t\t\tmsPanel.update( time - beginTime, 200 );\n\n\t\t\tif ( time >= prevTime + 1000 ) {\n\n\t\t\t\tfpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 100 );\n\n\t\t\t\tprevTime = time;\n\t\t\t\tframes = 0;\n\n\t\t\t\tif ( memPanel ) {\n\n\t\t\t\t\tvar memory = performance.memory;\n\t\t\t\t\tmemPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tbeginTime = this.end();\n\n\t\t},\n\n\t\t// Backwards Compatibility\n\n\t\tdomElement: container,\n\t\tsetMode: showPanel\n\n\t};\n\n};\n\nStats.Panel = function ( name, fg, bg ) {\n\n\tvar min = Infinity, max = 0, round = Math.round;\n\tvar PR = round( window.devicePixelRatio || 1 );\n\n\tvar WIDTH = 80 * PR, HEIGHT = 48 * PR,\n\t\tTEXT_X = 3 * PR, TEXT_Y = 2 * PR,\n\t\tGRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,\n\t\tGRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;\n\n\tvar canvas = document.createElement( 'canvas' );\n\tcanvas.width = WIDTH;\n\tcanvas.height = HEIGHT;\n\tcanvas.style.cssText = 'width:80px;height:48px';\n\n\tvar context = canvas.getContext( '2d' );\n\tcontext.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';\n\tcontext.textBaseline = 'top';\n\n\tcontext.fillStyle = bg;\n\tcontext.fillRect( 0, 0, WIDTH, HEIGHT );\n\n\tcontext.fillStyle = fg;\n\tcontext.fillText( name, TEXT_X, TEXT_Y );\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\tcontext.fillStyle = bg;\n\tcontext.globalAlpha = 0.9;\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\treturn {\n\n\t\tdom: canvas,\n\n\t\tupdate: function ( value, maxValue ) {\n\n\t\t\tmin = Math.min( min, value );\n\t\t\tmax = Math.max( max, value );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 1;\n\t\t\tcontext.fillRect( 0, 0, WIDTH, GRAPH_Y );\n\t\t\tcontext.fillStyle = fg;\n\t\t\tcontext.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );\n\n\t\t\tcontext.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 0.9;\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );\n\n\t\t}\n\n\t};\n\n};\n\nexport default Stats;\n", "import Stats from '../libs/stats.module.js';\n\n// https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query_webgl2/\nexport class GPUStatsPanel extends Stats.Panel {\n\n\tconstructor( context, name = 'GPU MS' ) {\n\n\t\tsuper( name, '#f90', '#210' );\n\n\t\tconst extension = context.getExtension( 'EXT_disjoint_timer_query_webgl2' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.warn( 'GPUStatsPanel: disjoint_time_query extension not available.' );\n\n\t\t}\n\n\t\tthis.context = context;\n\t\tthis.extension = extension;\n\t\tthis.maxTime = 30;\n\t\tthis.activeQueries = 0;\n\n\t\tthis.startQuery = function () {\n\n\t\t\tconst gl = this.context;\n\t\t\tconst ext = this.extension;\n\n\t\t\tif ( ext === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// create the query object\n\t\t\tconst query = gl.createQuery();\n\t\t\tgl.beginQuery( ext.TIME_ELAPSED_EXT, query );\n\n\t\t\tthis.activeQueries ++;\n\n\t\t\tconst checkQuery = () => {\n\n\t\t\t\t// check if the query is available and valid\n\n\t\t\t\tconst available = gl.getQueryParameter( query, gl.QUERY_RESULT_AVAILABLE );\n\t\t\t\tconst disjoint = gl.getParameter( ext.GPU_DISJOINT_EXT );\n\t\t\t\tconst ns = gl.getQueryParameter( query, gl.QUERY_RESULT );\n\n\t\t\t\tconst ms = ns * 1e-6;\n\n\t\t\t\tif ( available ) {\n\n\t\t\t\t\t// update the display if it is valid\n\t\t\t\t\tif ( ! disjoint ) {\n\n\t\t\t\t\t\tthis.update( ms, this.maxTime );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.deleteQuery( query );\n\n\t\t\t\t\tthis.activeQueries --;\n\n\n\t\t\t\t} else if ( gl.isContextLost() === false ) {\n\n\t\t\t\t\t// otherwise try again the next frame\n\t\t\t\t\trequestAnimationFrame( checkQuery );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\trequestAnimationFrame( checkQuery );\n\n\t\t};\n\n\t\tthis.endQuery = function () {\n\n\t\t\t// finish the query measurement\n\t\t\tconst ext = this.extension;\n\t\t\tconst gl = this.context;\n\n\t\t\tif ( ext === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tgl.endQuery( ext.TIME_ELAPSED_EXT );\n\n\t\t};\n\n\t}\n\n}\n", "/**\n * Octahedron and Quantization encodings based on work by:\n *\n * @link https://github.com/tsherif/mesh-quantization-example\n *\n */\n\nimport {\n\tBufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tVector3\n} from 'three';\nimport { PackedPhongMaterial } from './PackedPhongMaterial.js';\n\n\n\n/**\n * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data.\n *\n * @param {THREE.Mesh} mesh\n * @param {String} encodeMethod\t\t\"DEFAULT\" || \"OCT1Byte\" || \"OCT2Byte\" || \"ANGLES\"\n *\n */\nfunction compressNormals( mesh, encodeMethod ) {\n\n\tif ( ! mesh.geometry ) {\n\n\t\tconsole.error( 'Mesh must contain geometry. ' );\n\n\t}\n\n\tconst normal = mesh.geometry.attributes.normal;\n\n\tif ( ! normal ) {\n\n\t\tconsole.error( 'Geometry must contain normal attribute. ' );\n\n\t}\n\n\tif ( normal.isPacked ) return;\n\n\tif ( normal.itemSize != 3 ) {\n\n\t\tconsole.error( 'normal.itemSize is not 3, which cannot be encoded. ' );\n\n\t}\n\n\tconst array = normal.array;\n\tconst count = normal.count;\n\n\tlet result;\n\tif ( encodeMethod == 'DEFAULT' ) {\n\n\t\t// TODO: Add 1 byte to the result, making the encoded length to be 4 bytes.\n\t\tresult = new Uint8Array( count * 3 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = defaultEncode( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 1 );\n\n\t\t\tresult[ idx + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx + 1 ] = encoded[ 1 ];\n\t\t\tresult[ idx + 2 ] = encoded[ 2 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 3, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 1;\n\n\t} else if ( encodeMethod == 'OCT1Byte' ) {\n\n\t\t/**\n\t\t* It is not recommended to use 1-byte octahedron normals encoding unless you want to extremely reduce the memory usage\n\t\t* As it makes vertex data not aligned to a 4 byte boundary which may harm some WebGL implementations and sometimes the normal distortion is visible\n\t\t* Please refer to @zeux 's comments in https://github.com/mrdoob/three.js/pull/18208\n\t\t*/\n\n\t\tresult = new Int8Array( count * 2 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = octEncodeBest( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 1 );\n\n\t\t\tresult[ idx / 3 * 2 + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx / 3 * 2 + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 1;\n\n\t} else if ( encodeMethod == 'OCT2Byte' ) {\n\n\t\tresult = new Int16Array( count * 2 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = octEncodeBest( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 2 );\n\n\t\t\tresult[ idx / 3 * 2 + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx / 3 * 2 + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 2;\n\n\t} else if ( encodeMethod == 'ANGLES' ) {\n\n\t\tresult = new Uint16Array( count * 2 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = anglesEncode( array[ idx ], array[ idx + 1 ], array[ idx + 2 ] );\n\n\t\t\tresult[ idx / 3 * 2 + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx / 3 * 2 + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 2;\n\n\t} else {\n\n\t\tconsole.error( 'Unrecognized encoding method, should be `DEFAULT` or `ANGLES` or `OCT`. ' );\n\n\t}\n\n\tmesh.geometry.attributes.normal.needsUpdate = true;\n\tmesh.geometry.attributes.normal.isPacked = true;\n\tmesh.geometry.attributes.normal.packingMethod = encodeMethod;\n\n\t// modify material\n\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t}\n\n\tif ( encodeMethod == 'ANGLES' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 0;\n\n\t}\n\n\tif ( encodeMethod == 'OCT1Byte' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 1;\n\n\t}\n\n\tif ( encodeMethod == 'OCT2Byte' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 1;\n\n\t}\n\n\tif ( encodeMethod == 'DEFAULT' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 2;\n\n\t}\n\n}\n\n\n/**\n\t * Make the input mesh.geometry's position attribute encoded and compressed.\n\t * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data.\n\t *\n\t * @param {THREE.Mesh} mesh\n\t *\n\t */\nfunction compressPositions( mesh ) {\n\n\tif ( ! mesh.geometry ) {\n\n\t\tconsole.error( 'Mesh must contain geometry. ' );\n\n\t}\n\n\tconst position = mesh.geometry.attributes.position;\n\n\tif ( ! position ) {\n\n\t\tconsole.error( 'Geometry must contain position attribute. ' );\n\n\t}\n\n\tif ( position.isPacked ) return;\n\n\tif ( position.itemSize != 3 ) {\n\n\t\tconsole.error( 'position.itemSize is not 3, which cannot be packed. ' );\n\n\t}\n\n\tconst array = position.array;\n\tconst encodingBytes = 2;\n\n\tconst result = quantizedEncode( array, encodingBytes );\n\n\tconst quantized = result.quantized;\n\tconst decodeMat = result.decodeMat;\n\n\t// IMPORTANT: calculate original geometry bounding info first, before updating packed positions\n\tif ( mesh.geometry.boundingBox == null ) mesh.geometry.computeBoundingBox();\n\tif ( mesh.geometry.boundingSphere == null ) mesh.geometry.computeBoundingSphere();\n\n\tmesh.geometry.setAttribute( 'position', new BufferAttribute( quantized, 3 ) );\n\tmesh.geometry.attributes.position.isPacked = true;\n\tmesh.geometry.attributes.position.needsUpdate = true;\n\tmesh.geometry.attributes.position.bytes = quantized.length * encodingBytes;\n\n\t// modify material\n\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t}\n\n\tmesh.material.defines.USE_PACKED_POSITION = 0;\n\n\tmesh.material.uniforms.quantizeMatPos.value = decodeMat;\n\tmesh.material.uniforms.quantizeMatPos.needsUpdate = true;\n\n}\n\n/**\n * Make the input mesh.geometry's uv attribute encoded and compressed.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data.\n *\n * @param {THREE.Mesh} mesh\n *\n */\nfunction compressUvs( mesh ) {\n\n\tif ( ! mesh.geometry ) {\n\n\t\tconsole.error( 'Mesh must contain geometry property. ' );\n\n\t}\n\n\tconst uvs = mesh.geometry.attributes.uv;\n\n\tif ( ! uvs ) {\n\n\t\tconsole.error( 'Geometry must contain uv attribute. ' );\n\n\t}\n\n\tif ( uvs.isPacked ) return;\n\n\tconst range = { min: Infinity, max: - Infinity };\n\n\tconst array = uvs.array;\n\n\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\trange.min = Math.min( range.min, array[ i ] );\n\t\trange.max = Math.max( range.max, array[ i ] );\n\n\t}\n\n\tlet result;\n\n\tif ( range.min >= - 1.0 && range.max <= 1.0 ) {\n\n\t\t// use default encoding method\n\t\tresult = new Uint16Array( array.length );\n\n\t\tfor ( let i = 0; i < array.length; i += 2 ) {\n\n\t\t\tconst encoded = defaultEncode( array[ i ], array[ i + 1 ], 0, 2 );\n\n\t\t\tresult[ i ] = encoded[ 0 ];\n\t\t\tresult[ i + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'uv', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.uv.isPacked = true;\n\t\tmesh.geometry.attributes.uv.needsUpdate = true;\n\t\tmesh.geometry.attributes.uv.bytes = result.length * 2;\n\n\t\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t\t}\n\n\t\tmesh.material.defines.USE_PACKED_UV = 0;\n\n\t} else {\n\n\t\t// use quantized encoding method\n\t\tresult = quantizedEncodeUV( array, 2 );\n\n\t\tmesh.geometry.setAttribute( 'uv', new BufferAttribute( result.quantized, 2 ) );\n\t\tmesh.geometry.attributes.uv.isPacked = true;\n\t\tmesh.geometry.attributes.uv.needsUpdate = true;\n\t\tmesh.geometry.attributes.uv.bytes = result.quantized.length * 2;\n\n\t\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t\t}\n\n\t\tmesh.material.defines.USE_PACKED_UV = 1;\n\n\t\tmesh.material.uniforms.quantizeMatUV.value = result.decodeMat;\n\t\tmesh.material.uniforms.quantizeMatUV.needsUpdate = true;\n\n\t}\n\n}\n\n\n// Encoding functions\n\nfunction defaultEncode( x, y, z, bytes ) {\n\n\tif ( bytes == 1 ) {\n\n\t\tconst tmpx = Math.round( ( x + 1 ) * 0.5 * 255 );\n\t\tconst tmpy = Math.round( ( y + 1 ) * 0.5 * 255 );\n\t\tconst tmpz = Math.round( ( z + 1 ) * 0.5 * 255 );\n\t\treturn new Uint8Array( [ tmpx, tmpy, tmpz ] );\n\n\t} else if ( bytes == 2 ) {\n\n\t\tconst tmpx = Math.round( ( x + 1 ) * 0.5 * 65535 );\n\t\tconst tmpy = Math.round( ( y + 1 ) * 0.5 * 65535 );\n\t\tconst tmpz = Math.round( ( z + 1 ) * 0.5 * 65535 );\n\t\treturn new Uint16Array( [ tmpx, tmpy, tmpz ] );\n\n\t} else {\n\n\t\tconsole.error( 'number of bytes must be 1 or 2' );\n\n\t}\n\n}\n\n// for `Angles` encoding\nfunction anglesEncode( x, y, z ) {\n\n\tconst normal0 = parseInt( 0.5 * ( 1.0 + Math.atan2( y, x ) / Math.PI ) * 65535 );\n\tconst normal1 = parseInt( 0.5 * ( 1.0 + z ) * 65535 );\n\treturn new Uint16Array( [ normal0, normal1 ] );\n\n}\n\n// for `Octahedron` encoding\nfunction octEncodeBest( x, y, z, bytes ) {\n\n\tlet oct, dec, best, currentCos, bestCos;\n\n\t// Test various combinations of ceil and floor\n\t// to minimize rounding errors\n\tbest = oct = octEncodeVec3( x, y, z, 'floor', 'floor' );\n\tdec = octDecodeVec2( oct );\n\tbestCos = dot( x, y, z, dec );\n\n\toct = octEncodeVec3( x, y, z, 'ceil', 'floor' );\n\tdec = octDecodeVec2( oct );\n\tcurrentCos = dot( x, y, z, dec );\n\n\tif ( currentCos > bestCos ) {\n\n\t\tbest = oct;\n\t\tbestCos = currentCos;\n\n\t}\n\n\toct = octEncodeVec3( x, y, z, 'floor', 'ceil' );\n\tdec = octDecodeVec2( oct );\n\tcurrentCos = dot( x, y, z, dec );\n\n\tif ( currentCos > bestCos ) {\n\n\t\tbest = oct;\n\t\tbestCos = currentCos;\n\n\t}\n\n\toct = octEncodeVec3( x, y, z, 'ceil', 'ceil' );\n\tdec = octDecodeVec2( oct );\n\tcurrentCos = dot( x, y, z, dec );\n\n\tif ( currentCos > bestCos ) {\n\n\t\tbest = oct;\n\n\t}\n\n\treturn best;\n\n\tfunction octEncodeVec3( x0, y0, z0, xfunc, yfunc ) {\n\n\t\tlet x = x0 / ( Math.abs( x0 ) + Math.abs( y0 ) + Math.abs( z0 ) );\n\t\tlet y = y0 / ( Math.abs( x0 ) + Math.abs( y0 ) + Math.abs( z0 ) );\n\n\t\tif ( z < 0 ) {\n\n\t\t\tconst tempx = ( 1 - Math.abs( y ) ) * ( x >= 0 ? 1 : - 1 );\n\t\t\tconst tempy = ( 1 - Math.abs( x ) ) * ( y >= 0 ? 1 : - 1 );\n\n\t\t\tx = tempx;\n\t\t\ty = tempy;\n\n\t\t\tlet diff = 1 - Math.abs( x ) - Math.abs( y );\n\t\t\tif ( diff > 0 ) {\n\n\t\t\t\tdiff += 0.001;\n\t\t\t\tx += x > 0 ? diff / 2 : - diff / 2;\n\t\t\t\ty += y > 0 ? diff / 2 : - diff / 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( bytes == 1 ) {\n\n\t\t\treturn new Int8Array( [\n\t\t\t\tMath[ xfunc ]( x * 127.5 + ( x < 0 ? 1 : 0 ) ),\n\t\t\t\tMath[ yfunc ]( y * 127.5 + ( y < 0 ? 1 : 0 ) )\n\t\t\t] );\n\n\t\t}\n\n\t\tif ( bytes == 2 ) {\n\n\t\t\treturn new Int16Array( [\n\t\t\t\tMath[ xfunc ]( x * 32767.5 + ( x < 0 ? 1 : 0 ) ),\n\t\t\t\tMath[ yfunc ]( y * 32767.5 + ( y < 0 ? 1 : 0 ) )\n\t\t\t] );\n\n\t\t}\n\n\n\t}\n\n\tfunction octDecodeVec2( oct ) {\n\n\t\tlet x = oct[ 0 ];\n\t\tlet y = oct[ 1 ];\n\n\t\tif ( bytes == 1 ) {\n\n\t\t\tx /= x < 0 ? 127 : 128;\n\t\t\ty /= y < 0 ? 127 : 128;\n\n\t\t} else if ( bytes == 2 ) {\n\n\t\t\tx /= x < 0 ? 32767 : 32768;\n\t\t\ty /= y < 0 ? 32767 : 32768;\n\n\t\t}\n\n\n\t\tconst z = 1 - Math.abs( x ) - Math.abs( y );\n\n\t\tif ( z < 0 ) {\n\n\t\t\tconst tmpx = x;\n\t\t\tx = ( 1 - Math.abs( y ) ) * ( x >= 0 ? 1 : - 1 );\n\t\t\ty = ( 1 - Math.abs( tmpx ) ) * ( y >= 0 ? 1 : - 1 );\n\n\t\t}\n\n\t\tconst length = Math.sqrt( x * x + y * y + z * z );\n\n\t\treturn [\n\t\t\tx / length,\n\t\t\ty / length,\n\t\t\tz / length\n\t\t];\n\n\t}\n\n\tfunction dot( x, y, z, vec3 ) {\n\n\t\treturn x * vec3[ 0 ] + y * vec3[ 1 ] + z * vec3[ 2 ];\n\n\t}\n\n}\n\nfunction quantizedEncode( array, bytes ) {\n\n\tlet quantized, segments;\n\n\tif ( bytes == 1 ) {\n\n\t\tquantized = new Uint8Array( array.length );\n\t\tsegments = 255;\n\n\t} else if ( bytes == 2 ) {\n\n\t\tquantized = new Uint16Array( array.length );\n\t\tsegments = 65535;\n\n\t} else {\n\n\t\tconsole.error( 'number of bytes error! ' );\n\n\t}\n\n\tconst decodeMat = new Matrix4();\n\n\tconst min = new Float32Array( 3 );\n\tconst max = new Float32Array( 3 );\n\n\tmin[ 0 ] = min[ 1 ] = min[ 2 ] = Number.MAX_VALUE;\n\tmax[ 0 ] = max[ 1 ] = max[ 2 ] = - Number.MAX_VALUE;\n\n\tfor ( let i = 0; i < array.length; i += 3 ) {\n\n\t\tmin[ 0 ] = Math.min( min[ 0 ], array[ i + 0 ] );\n\t\tmin[ 1 ] = Math.min( min[ 1 ], array[ i + 1 ] );\n\t\tmin[ 2 ] = Math.min( min[ 2 ], array[ i + 2 ] );\n\t\tmax[ 0 ] = Math.max( max[ 0 ], array[ i + 0 ] );\n\t\tmax[ 1 ] = Math.max( max[ 1 ], array[ i + 1 ] );\n\t\tmax[ 2 ] = Math.max( max[ 2 ], array[ i + 2 ] );\n\n\t}\n\n\tdecodeMat.scale( new Vector3(\n\t\t( max[ 0 ] - min[ 0 ] ) / segments,\n\t\t( max[ 1 ] - min[ 1 ] ) / segments,\n\t\t( max[ 2 ] - min[ 2 ] ) / segments\n\t) );\n\n\tdecodeMat.elements[ 12 ] = min[ 0 ];\n\tdecodeMat.elements[ 13 ] = min[ 1 ];\n\tdecodeMat.elements[ 14 ] = min[ 2 ];\n\n\tdecodeMat.transpose();\n\n\n\tconst multiplier = new Float32Array( [\n\t\tmax[ 0 ] !== min[ 0 ] ? segments / ( max[ 0 ] - min[ 0 ] ) : 0,\n\t\tmax[ 1 ] !== min[ 1 ] ? segments / ( max[ 1 ] - min[ 1 ] ) : 0,\n\t\tmax[ 2 ] !== min[ 2 ] ? segments / ( max[ 2 ] - min[ 2 ] ) : 0\n\t] );\n\n\tfor ( let i = 0; i < array.length; i += 3 ) {\n\n\t\tquantized[ i + 0 ] = Math.floor( ( array[ i + 0 ] - min[ 0 ] ) * multiplier[ 0 ] );\n\t\tquantized[ i + 1 ] = Math.floor( ( array[ i + 1 ] - min[ 1 ] ) * multiplier[ 1 ] );\n\t\tquantized[ i + 2 ] = Math.floor( ( array[ i + 2 ] - min[ 2 ] ) * multiplier[ 2 ] );\n\n\t}\n\n\treturn {\n\t\tquantized: quantized,\n\t\tdecodeMat: decodeMat\n\t};\n\n}\n\nfunction quantizedEncodeUV( array, bytes ) {\n\n\tlet quantized, segments;\n\n\tif ( bytes == 1 ) {\n\n\t\tquantized = new Uint8Array( array.length );\n\t\tsegments = 255;\n\n\t} else if ( bytes == 2 ) {\n\n\t\tquantized = new Uint16Array( array.length );\n\t\tsegments = 65535;\n\n\t} else {\n\n\t\tconsole.error( 'number of bytes error! ' );\n\n\t}\n\n\tconst decodeMat = new Matrix3();\n\n\tconst min = new Float32Array( 2 );\n\tconst max = new Float32Array( 2 );\n\n\tmin[ 0 ] = min[ 1 ] = Number.MAX_VALUE;\n\tmax[ 0 ] = max[ 1 ] = - Number.MAX_VALUE;\n\n\tfor ( let i = 0; i < array.length; i += 2 ) {\n\n\t\tmin[ 0 ] = Math.min( min[ 0 ], array[ i + 0 ] );\n\t\tmin[ 1 ] = Math.min( min[ 1 ], array[ i + 1 ] );\n\t\tmax[ 0 ] = Math.max( max[ 0 ], array[ i + 0 ] );\n\t\tmax[ 1 ] = Math.max( max[ 1 ], array[ i + 1 ] );\n\n\t}\n\n\tdecodeMat.scale(\n\t\t( max[ 0 ] - min[ 0 ] ) / segments,\n\t\t( max[ 1 ] - min[ 1 ] ) / segments\n\t);\n\n\tdecodeMat.elements[ 6 ] = min[ 0 ];\n\tdecodeMat.elements[ 7 ] = min[ 1 ];\n\n\tdecodeMat.transpose();\n\n\tconst multiplier = new Float32Array( [\n\t\tmax[ 0 ] !== min[ 0 ] ? segments / ( max[ 0 ] - min[ 0 ] ) : 0,\n\t\tmax[ 1 ] !== min[ 1 ] ? segments / ( max[ 1 ] - min[ 1 ] ) : 0\n\t] );\n\n\tfor ( let i = 0; i < array.length; i += 2 ) {\n\n\t\tquantized[ i + 0 ] = Math.floor( ( array[ i + 0 ] - min[ 0 ] ) * multiplier[ 0 ] );\n\t\tquantized[ i + 1 ] = Math.floor( ( array[ i + 1 ] - min[ 1 ] ) * multiplier[ 1 ] );\n\n\t}\n\n\treturn {\n\t\tquantized: quantized,\n\t\tdecodeMat: decodeMat\n\t};\n\n}\n\n\n\nexport {\n\tcompressNormals,\n\tcompressPositions,\n\tcompressUvs,\n};\n", "\n/**\n * `PackedPhongMaterial` inherited from THREE.MeshPhongMaterial\n *\n * @param {Object} parameters\n */\nimport {\n\tMeshPhongMaterial,\n\tShaderChunk,\n\tShaderLib,\n\tUniformsUtils,\n} from 'three';\n\nclass PackedPhongMaterial extends MeshPhongMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = {};\n\t\tthis.type = 'PackedPhongMaterial';\n\t\tthis.uniforms = UniformsUtils.merge( [\n\n\t\t\tShaderLib.phong.uniforms,\n\n\t\t\t{\n\t\t\t\tquantizeMatPos: { value: null },\n\t\t\t\tquantizeMatUV: { value: null }\n\t\t\t}\n\n\t\t] );\n\n\t\tthis.vertexShader = [\n\t\t\t'#define PHONG',\n\n\t\t\t'varying vec3 vViewPosition;',\n\n\t\t\tShaderChunk.common,\n\t\t\tShaderChunk.uv_pars_vertex,\n\t\t\tShaderChunk.displacementmap_pars_vertex,\n\t\t\tShaderChunk.envmap_pars_vertex,\n\t\t\tShaderChunk.color_pars_vertex,\n\t\t\tShaderChunk.fog_pars_vertex,\n\t\t\tShaderChunk.normal_pars_vertex,\n\t\t\tShaderChunk.morphtarget_pars_vertex,\n\t\t\tShaderChunk.skinning_pars_vertex,\n\t\t\tShaderChunk.shadowmap_pars_vertex,\n\t\t\tShaderChunk.logdepthbuf_pars_vertex,\n\t\t\tShaderChunk.clipping_planes_pars_vertex,\n\n\t\t\t`#ifdef USE_PACKED_NORMAL\n\t\t\t\t\t#if USE_PACKED_NORMAL == 0\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat x = packedNormal.x * 2.0 - 1.0;\n\t\t\t\t\t\t\tfloat y = packedNormal.y * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec2 scth = vec2(sin(x * PI), cos(x * PI));\n\t\t\t\t\t\t\tvec2 scphi = vec2(sqrt(1.0 - y * y), y);\n\t\t\t\t\t\t\treturn normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) );\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 1\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y));\n\t\t\t\t\t\t\tif (v.z < 0.0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tv.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 2\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = (packedNormal * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t`#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\tuniform mat4 quantizeMatPos;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t`#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tuniform mat3 quantizeMatUV;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t`#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 0\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = (packedUV * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t'void main() {',\n\n\t\t\tShaderChunk.uv_vertex,\n\n\t\t\t`#ifdef USE_MAP\n\t\t\t\t\t#ifdef USE_PACKED_UV\n\t\t\t\t\t\tvMapUv = decodeUV(vMapUv);\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\tShaderChunk.color_vertex,\n\t\t\tShaderChunk.morphcolor_vertex,\n\n\t\t\tShaderChunk.beginnormal_vertex,\n\n\t\t\t`#ifdef USE_PACKED_NORMAL\n\t\t\t\t\tobjectNormal = decodeNormal(objectNormal);\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef USE_TANGENT\n\t\t\t\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t\t\t\t#endif\n\t\t\t\t`,\n\n\t\t\tShaderChunk.morphnormal_vertex,\n\t\t\tShaderChunk.skinbase_vertex,\n\t\t\tShaderChunk.skinnormal_vertex,\n\t\t\tShaderChunk.defaultnormal_vertex,\n\t\t\tShaderChunk.normal_vertex,\n\n\t\t\tShaderChunk.begin_vertex,\n\n\t\t\t`#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\ttransformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\tShaderChunk.morphtarget_vertex,\n\t\t\tShaderChunk.skinning_vertex,\n\t\t\tShaderChunk.displacementmap_vertex,\n\t\t\tShaderChunk.project_vertex,\n\t\t\tShaderChunk.logdepthbuf_vertex,\n\t\t\tShaderChunk.clipping_planes_vertex,\n\n\t\t\t'vViewPosition = - mvPosition.xyz;',\n\n\t\t\tShaderChunk.worldpos_vertex,\n\t\t\tShaderChunk.envmap_vertex,\n\t\t\tShaderChunk.shadowmap_vertex,\n\t\t\tShaderChunk.fog_vertex,\n\n\t\t\t'}',\n\t\t].join( '\\n' );\n\n\t\t// Use the original MeshPhongMaterial's fragmentShader.\n\t\tthis.fragmentShader = ShaderLib.phong.fragmentShader;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nexport { PackedPhongMaterial };\n", "import { Vector3 } from 'three';\n\n\n/**\n * Generates 2D-Coordinates in a very fast way.\n *\n * Based on work by:\n * @link http://www.openprocessing.org/sketch/15493\n *\n * @param center Center of Hilbert curve.\n * @param size Total width of Hilbert curve.\n * @param iterations Number of subdivisions.\n * @param v0 Corner index -X, -Z.\n * @param v1 Corner index -X, +Z.\n * @param v2 Corner index +X, +Z.\n * @param v3 Corner index +X, -Z.\n */\nfunction hilbert2D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3 ) {\n\n\tconst half = size / 2;\n\n\tconst vec_s = [\n\t\tnew Vector3( center.x - half, center.y, center.z - half ),\n\t\tnew Vector3( center.x - half, center.y, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y, center.z - half )\n\t];\n\n\tconst vec = [\n\t\tvec_s[ v0 ],\n\t\tvec_s[ v1 ],\n\t\tvec_s[ v2 ],\n\t\tvec_s[ v3 ]\n\t];\n\n\t// Recurse iterations\n\tif ( 0 <= -- iterations ) {\n\n\t\treturn [\n\t\t\t...hilbert2D( vec[ 0 ], half, iterations, v0, v3, v2, v1 ),\n\t\t\t...hilbert2D( vec[ 1 ], half, iterations, v0, v1, v2, v3 ),\n\t\t\t...hilbert2D( vec[ 2 ], half, iterations, v0, v1, v2, v3 ),\n\t\t\t...hilbert2D( vec[ 3 ], half, iterations, v2, v1, v0, v3 )\n\t\t];\n\n\t}\n\n\t// Return complete Hilbert Curve.\n\treturn vec;\n\n}\n\n/**\n * Generates 3D-Coordinates in a very fast way.\n *\n * Based on work by:\n * @link https://openprocessing.org/user/5654\n *\n * @param center Center of Hilbert curve.\n * @param size Total width of Hilbert curve.\n * @param iterations Number of subdivisions.\n * @param v0 Corner index -X, +Y, -Z.\n * @param v1 Corner index -X, +Y, +Z.\n * @param v2 Corner index -X, -Y, +Z.\n * @param v3 Corner index -X, -Y, -Z.\n * @param v4 Corner index +X, -Y, -Z.\n * @param v5 Corner index +X, -Y, +Z.\n * @param v6 Corner index +X, +Y, +Z.\n * @param v7 Corner index +X, +Y, -Z.\n */\nfunction hilbert3D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3, v4 = 4, v5 = 5, v6 = 6, v7 = 7 ) {\n\n\t// Default Vars\n\tconst half = size / 2;\n\n\tconst vec_s = [\n\t\tnew Vector3( center.x - half, center.y + half, center.z - half ),\n\t\tnew Vector3( center.x - half, center.y + half, center.z + half ),\n\t\tnew Vector3( center.x - half, center.y - half, center.z + half ),\n\t\tnew Vector3( center.x - half, center.y - half, center.z - half ),\n\t\tnew Vector3( center.x + half, center.y - half, center.z - half ),\n\t\tnew Vector3( center.x + half, center.y - half, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y + half, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y + half, center.z - half )\n\t];\n\n\tconst vec = [\n\t\tvec_s[ v0 ],\n\t\tvec_s[ v1 ],\n\t\tvec_s[ v2 ],\n\t\tvec_s[ v3 ],\n\t\tvec_s[ v4 ],\n\t\tvec_s[ v5 ],\n\t\tvec_s[ v6 ],\n\t\tvec_s[ v7 ]\n\t];\n\n\t// Recurse iterations\n\tif ( -- iterations >= 0 ) {\n\n\t\treturn [\n\t\t\t...hilbert3D( vec[ 0 ], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1 ),\n\t\t\t...hilbert3D( vec[ 1 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ),\n\t\t\t...hilbert3D( vec[ 2 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ),\n\t\t\t...hilbert3D( vec[ 3 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ),\n\t\t\t...hilbert3D( vec[ 4 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ),\n\t\t\t...hilbert3D( vec[ 5 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ),\n\t\t\t...hilbert3D( vec[ 6 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ),\n\t\t\t...hilbert3D( vec[ 7 ], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7 )\n\t\t];\n\n\t}\n\n\t// Return complete Hilbert Curve.\n\treturn vec;\n\n}\n\n/**\n * Generates a Gosper curve (lying in the XY plane)\n *\n * https://gist.github.com/nitaku/6521802\n *\n * @param size The size of a single gosper island.\n */\nfunction gosper( size = 1 ) {\n\n\tfunction fractalize( config ) {\n\n\t\tlet output;\n\t\tlet input = config.axiom;\n\n\t\tfor ( let i = 0, il = config.steps; 0 <= il ? i < il : i > il; 0 <= il ? i ++ : i -- ) {\n\n\t\t\toutput = '';\n\n\t\t\tfor ( let j = 0, jl = input.length; j < jl; j ++ ) {\n\n\t\t\t\tconst char = input[ j ];\n\n\t\t\t\tif ( char in config.rules ) {\n\n\t\t\t\t\toutput += config.rules[ char ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\toutput += char;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tinput = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tfunction toPoints( config ) {\n\n\t\tlet currX = 0, currY = 0;\n\t\tlet angle = 0;\n\t\tconst path = [ 0, 0, 0 ];\n\t\tconst fractal = config.fractal;\n\n\t\tfor ( let i = 0, l = fractal.length; i < l; i ++ ) {\n\n\t\t\tconst char = fractal[ i ];\n\n\t\t\tif ( char === '+' ) {\n\n\t\t\t\tangle += config.angle;\n\n\t\t\t} else if ( char === '-' ) {\n\n\t\t\t\tangle -= config.angle;\n\n\t\t\t} else if ( char === 'F' ) {\n\n\t\t\t\tcurrX += config.size * Math.cos( angle );\n\t\t\t\tcurrY += - config.size * Math.sin( angle );\n\t\t\t\tpath.push( currX, currY, 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn path;\n\n\t}\n\n\t//\n\n\tconst gosper = fractalize( {\n\t\taxiom: 'A',\n\t\tsteps: 4,\n\t\trules: {\n\t\t\tA: 'A+BF++BF-FA--FAFA-BF+',\n\t\t\tB: '-FA+BFBF++BF+FA--FA-B'\n\t\t}\n\t} );\n\n\tconst points = toPoints( {\n\t\tfractal: gosper,\n\t\tsize: size,\n\t\tangle: Math.PI / 3 // 60 degrees\n\t} );\n\n\treturn points;\n\n}\n\n\n\nexport {\n\thilbert2D,\n\thilbert3D,\n\tgosper,\n};\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tGroup,\n\tLineSegments,\n\tMatrix3,\n\tMesh\n} from 'three';\n\nimport { mergeGeometries } from './BufferGeometryUtils.js';\n\nclass LDrawUtils {\n\n\tstatic mergeObject( object ) {\n\n\t\t// Merges geometries in object by materials and returns new object. Use on not indexed geometries.\n\t\t// The object buffers reference the old object ones.\n\t\t// Special treatment is done to the conditional lines generated by LDrawLoader.\n\n\t\tfunction extractGroup( geometry, group, elementSize, isConditionalLine ) {\n\n\t\t\t// Extracts a group from a geometry as a new geometry (with attribute buffers referencing original buffers)\n\n\t\t\tconst newGeometry = new BufferGeometry();\n\n\t\t\tconst originalPositions = geometry.getAttribute( 'position' ).array;\n\t\t\tconst originalNormals = elementSize === 3 ? geometry.getAttribute( 'normal' ).array : null;\n\n\t\t\tconst numVertsGroup = Math.min( group.count, Math.floor( originalPositions.length / 3 ) - group.start );\n\t\t\tconst vertStart = group.start * 3;\n\t\t\tconst vertEnd = ( group.start + numVertsGroup ) * 3;\n\n\t\t\tconst positions = originalPositions.subarray( vertStart, vertEnd );\n\t\t\tconst normals = originalNormals !== null ? originalNormals.subarray( vertStart, vertEnd ) : null;\n\n\t\t\tnewGeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\t\t\tif ( normals !== null ) newGeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( isConditionalLine ) {\n\n\t\t\t\tconst controlArray0 = geometry.getAttribute( 'control0' ).array.subarray( vertStart, vertEnd );\n\t\t\t\tconst controlArray1 = geometry.getAttribute( 'control1' ).array.subarray( vertStart, vertEnd );\n\t\t\t\tconst directionArray = geometry.getAttribute( 'direction' ).array.subarray( vertStart, vertEnd );\n\n\t\t\t\tnewGeometry.setAttribute( 'control0', new BufferAttribute( controlArray0, 3, false ) );\n\t\t\t\tnewGeometry.setAttribute( 'control1', new BufferAttribute( controlArray1, 3, false ) );\n\t\t\t\tnewGeometry.setAttribute( 'direction', new BufferAttribute( directionArray, 3, false ) );\n\n\t\t\t}\n\n\t\t\treturn newGeometry;\n\n\t\t}\n\n\t\tfunction addGeometry( mat, geometry, geometries ) {\n\n\t\t\tconst geoms = geometries[ mat.uuid ];\n\t\t\tif ( ! geoms ) {\n\n\t\t\t\tgeometries[ mat.uuid ] = {\n\t\t\t\t\tmat: mat,\n\t\t\t\t\tarr: [ geometry ]\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tgeoms.arr.push( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction permuteAttribute( attribute, elemSize ) {\n\n\t\t\t// Permutes first two vertices of each attribute element\n\n\t\t\tif ( ! attribute ) return;\n\n\t\t\tconst verts = attribute.array;\n\t\t\tconst numVerts = Math.floor( verts.length / 3 );\n\t\t\tlet offset = 0;\n\t\t\tfor ( let i = 0; i < numVerts; i ++ ) {\n\n\t\t\t\tconst x = verts[ offset ];\n\t\t\t\tconst y = verts[ offset + 1 ];\n\t\t\t\tconst z = verts[ offset + 2 ];\n\n\t\t\t\tverts[ offset ] = verts[ offset + 3 ];\n\t\t\t\tverts[ offset + 1 ] = verts[ offset + 4 ];\n\t\t\t\tverts[ offset + 2 ] = verts[ offset + 5 ];\n\n\t\t\t\tverts[ offset + 3 ] = x;\n\t\t\t\tverts[ offset + 4 ] = y;\n\t\t\t\tverts[ offset + 5 ] = z;\n\n\t\t\t\toffset += elemSize * 3;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Traverse the object hierarchy collecting geometries and transforming them to world space\n\n\t\tconst meshGeometries = {};\n\t\tconst linesGeometries = {};\n\t\tconst condLinesGeometries = {};\n\n\t\tobject.updateMatrixWorld( true );\n\t\tconst normalMatrix = new Matrix3();\n\n\t\tobject.traverse( c => {\n\n\t\t\tif ( c.isMesh | c.isLineSegments ) {\n\n\t\t\t\tconst elemSize = c.isMesh ? 3 : 2;\n\n\t\t\t\tconst geometry = c.geometry.clone();\n\t\t\t\tconst matrixIsInverted = c.matrixWorld.determinant() < 0;\n\t\t\t\tif ( matrixIsInverted ) {\n\n\t\t\t\t\tpermuteAttribute( geometry.attributes.position, elemSize );\n\t\t\t\t\tpermuteAttribute( geometry.attributes.normal, elemSize );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.applyMatrix4( c.matrixWorld );\n\n\t\t\t\tif ( c.isConditionalLine ) {\n\n\t\t\t\t\tgeometry.attributes.control0.applyMatrix4( c.matrixWorld );\n\t\t\t\t\tgeometry.attributes.control1.applyMatrix4( c.matrixWorld );\n\t\t\t\t\tnormalMatrix.getNormalMatrix( c.matrixWorld );\n\t\t\t\t\tgeometry.attributes.direction.applyNormalMatrix( normalMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tconst geometries = c.isMesh ? meshGeometries : ( c.isConditionalLine ? condLinesGeometries : linesGeometries );\n\n\t\t\t\tif ( Array.isArray( c.material ) ) {\n\n\t\t\t\t\tfor ( const groupIndex in geometry.groups ) {\n\n\t\t\t\t\t\tconst group = geometry.groups[ groupIndex ];\n\t\t\t\t\t\tconst mat = c.material[ group.materialIndex ];\n\t\t\t\t\t\tconst newGeometry = extractGroup( geometry, group, elemSize, c.isConditionalLine );\n\t\t\t\t\t\taddGeometry( mat, newGeometry, geometries );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\taddGeometry( c.material, geometry, geometries );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Create object with merged geometries\n\n\t\tconst mergedObject = new Group();\n\n\t\tconst meshMaterialsIds = Object.keys( meshGeometries );\n\t\tfor ( const meshMaterialsId of meshMaterialsIds ) {\n\n\t\t\tconst meshGeometry = meshGeometries[ meshMaterialsId ];\n\t\t\tconst mergedGeometry = mergeGeometries( meshGeometry.arr );\n\t\t\tmergedObject.add( new Mesh( mergedGeometry, meshGeometry.mat ) );\n\n\t\t}\n\n\t\tconst linesMaterialsIds = Object.keys( linesGeometries );\n\t\tfor ( const linesMaterialsId of linesMaterialsIds ) {\n\n\t\t\tconst lineGeometry = linesGeometries[ linesMaterialsId ];\n\t\t\tconst mergedGeometry = mergeGeometries( lineGeometry.arr );\n\t\t\tmergedObject.add( new LineSegments( mergedGeometry, lineGeometry.mat ) );\n\n\t\t}\n\n\t\tconst condLinesMaterialsIds = Object.keys( condLinesGeometries );\n\t\tfor ( const condLinesMaterialsId of condLinesMaterialsIds ) {\n\n\t\t\tconst condLineGeometry = condLinesGeometries[ condLinesMaterialsId ];\n\t\t\tconst mergedGeometry = mergeGeometries( condLineGeometry.arr );\n\t\t\tconst condLines = new LineSegments( mergedGeometry, condLineGeometry.mat );\n\t\t\tcondLines.isConditionalLine = true;\n\t\t\tmergedObject.add( condLines );\n\n\t\t}\n\n\t\tmergedObject.userData.constructionStep = 0;\n\t\tmergedObject.userData.numConstructionSteps = 1;\n\n\t\treturn mergedObject;\n\n\t}\n\n}\n\nexport { LDrawUtils };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tGroup,\n\tMatrix4,\n\tMesh,\n\tVector3\n} from 'three';\n\nimport { mergeGroups, deepCloneAttribute } from './BufferGeometryUtils.js';\n\nconst _color = /*@__PURE__*/new Color();\nconst _matrix = /*@__PURE__*/new Matrix4();\n\nfunction createMeshesFromInstancedMesh( instancedMesh ) {\n\n\tconst group = new Group();\n\n\tconst count = instancedMesh.count;\n\tconst geometry = instancedMesh.geometry;\n\tconst material = instancedMesh.material;\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tinstancedMesh.getMatrixAt( i, mesh.matrix );\n\t\tmesh.matrix.decompose( mesh.position, mesh.quaternion, mesh.scale );\n\n\t\tgroup.add( mesh );\n\n\t}\n\n\tgroup.copy( instancedMesh );\n\tgroup.updateMatrixWorld(); // ensure correct world matrices of meshes\n\n\treturn group;\n\n}\n\nfunction createMeshesFromMultiMaterialMesh( mesh ) {\n\n\tif ( Array.isArray( mesh.material ) === false ) {\n\n\t\tconsole.warn( 'THREE.SceneUtils.createMeshesFromMultiMaterialMesh(): The given mesh has no multiple materials.' );\n\t\treturn mesh;\n\n\t}\n\n\tconst object = new Group();\n\tobject.copy( mesh );\n\n\t// merge groups (which automatically sorts them)\n\n\tconst geometry = mergeGroups( mesh.geometry );\n\n\tconst index = geometry.index;\n\tconst groups = geometry.groups;\n\tconst attributeNames = Object.keys( geometry.attributes );\n\n\t// create a mesh for each group by extracting the buffer data into a new geometry\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst start = group.start;\n\t\tconst end = start + group.count;\n\n\t\tconst newGeometry = new BufferGeometry();\n\t\tconst newMaterial = mesh.material[ group.materialIndex ];\n\n\t\t// process all buffer attributes\n\n\t\tfor ( let j = 0; j < attributeNames.length; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.attributes[ name ];\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tconst newLength = group.count * itemSize;\n\t\t\tconst type = attribute.array.constructor;\n\n\t\t\tconst newArray = new type( newLength );\n\t\t\tconst newAttribute = new BufferAttribute( newArray, itemSize );\n\n\t\t\tfor ( let k = start, n = 0; k < end; k ++, n ++ ) {\n\n\t\t\t\tconst ind = index.getX( k );\n\n\t\t\t\tif ( itemSize >= 1 ) newAttribute.setX( n, attribute.getX( ind ) );\n\t\t\t\tif ( itemSize >= 2 ) newAttribute.setY( n, attribute.getY( ind ) );\n\t\t\t\tif ( itemSize >= 3 ) newAttribute.setZ( n, attribute.getZ( ind ) );\n\t\t\t\tif ( itemSize >= 4 ) newAttribute.setW( n, attribute.getW( ind ) );\n\n\t\t\t}\n\n\n\t\t\tnewGeometry.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\tconst newMesh = new Mesh( newGeometry, newMaterial );\n\t\tobject.add( newMesh );\n\n\t}\n\n\treturn object;\n\n}\n\nfunction createMultiMaterialObject( geometry, materials ) {\n\n\tconst group = new Group();\n\n\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\tgroup.add( new Mesh( geometry, materials[ i ] ) );\n\n\t}\n\n\treturn group;\n\n}\n\nfunction reduceVertices( object, func, initialValue ) {\n\n\tlet value = initialValue;\n\tconst vertex = new Vector3();\n\n\tobject.updateWorldMatrix( true, true );\n\n\tobject.traverseVisible( ( child ) => {\n\n\t\tconst { geometry } = child;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tconst { position } = geometry.attributes;\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = position.count; i < l; i ++ ) {\n\n\t\t\t\t\tif ( child.isMesh ) {\n\n\t\t\t\t\t\tchild.getVertexPosition( i, vertex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! child.isSkinnedMesh ) {\n\n\t\t\t\t\t\tvertex.applyMatrix4( child.matrixWorld );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = func( value, vertex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\treturn value;\n\n}\n\n/**\n * @param {InstancedMesh}\n * @param {function(int, int):int}\n */\nfunction sortInstancedMesh( mesh, compareFn ) {\n\n\t// store copy of instanced attributes for lookups\n\n\tconst instanceMatrixRef = deepCloneAttribute( mesh.instanceMatrix );\n\tconst instanceColorRef = mesh.instanceColor ? deepCloneAttribute( mesh.instanceColor ) : null;\n\n\tconst attributeRefs = new Map();\n\n\tfor ( const name in mesh.geometry.attributes ) {\n\n\t\tconst attribute = mesh.geometry.attributes[ name ];\n\n\t\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\t\tattributeRefs.set( attribute, deepCloneAttribute( attribute ) );\n\n\t\t}\n\n\t}\n\n\n\t// compute sort order\n\n\tconst tokens = [];\n\n\tfor ( let i = 0; i < mesh.count; i ++ ) tokens.push( i );\n\n\ttokens.sort( compareFn );\n\n\n\t// apply sort order\n\n\tfor ( let i = 0; i < tokens.length; i ++ ) {\n\n\t\tconst refIndex = tokens[ i ];\n\n\t\t_matrix.fromArray( instanceMatrixRef.array, refIndex * mesh.instanceMatrix.itemSize );\n\t\t_matrix.toArray( mesh.instanceMatrix.array, i * mesh.instanceMatrix.itemSize );\n\n\t\tif ( mesh.instanceColor ) {\n\n\t\t\t_color.fromArray( instanceColorRef.array, refIndex * mesh.instanceColor.itemSize );\n\t\t\t_color.toArray( mesh.instanceColor.array, i * mesh.instanceColor.itemSize );\n\n\t\t}\n\n\t\tfor ( const name in mesh.geometry.attributes ) {\n\n\t\t\tconst attribute = mesh.geometry.attributes[ name ];\n\n\t\t\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\t\t\tconst attributeRef = attributeRefs.get( attribute );\n\n\t\t\t\tattribute.setX( i, attributeRef.getX( refIndex ) );\n\t\t\t\tif ( attribute.itemSize > 1 ) attribute.setY( i, attributeRef.getY( refIndex ) );\n\t\t\t\tif ( attribute.itemSize > 2 ) attribute.setZ( i, attributeRef.getZ( refIndex ) );\n\t\t\t\tif ( attribute.itemSize > 3 ) attribute.setW( i, attributeRef.getW( refIndex ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D} object Object to traverse.\n * @yields {Object3D} Objects that passed the filter condition.\n */\nfunction* traverseGenerator( object ) {\n\n\tyield object;\n\n\tconst children = object.children;\n\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\tyield* traverseGenerator( children[ i ] );\n\n\t}\n\n}\n\n/**\n * @param {Object3D} object Object to traverse.\n * @yields {Object3D} Objects that passed the filter condition.\n */\nfunction* traverseVisibleGenerator( object ) {\n\n\tif ( object.visible === false ) return;\n\n\tyield object;\n\n\tconst children = object.children;\n\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\tyield* traverseVisibleGenerator( children[ i ] );\n\n\t}\n\n}\n\n/**\n * @param {Object3D} object Object to traverse.\n * @yields {Object3D} Objects that passed the filter condition.\n */\nfunction* traverseAncestorsGenerator( object ) {\n\n\tconst parent = object.parent;\n\n\tif ( parent !== null ) {\n\n\t\tyield parent;\n\n\t\tyield* traverseAncestorsGenerator( parent );\n\n\t}\n\n}\n\nexport {\n\tcreateMeshesFromInstancedMesh,\n\tcreateMeshesFromMultiMaterialMesh,\n\tcreateMultiMaterialObject,\n\treduceVertices,\n\tsortInstancedMesh,\n\ttraverseGenerator,\n\ttraverseVisibleGenerator,\n\ttraverseAncestorsGenerator\n};\n", "import {\n\tDoubleSide,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tOrthographicCamera,\n\tPlaneGeometry,\n\tScene,\n\tShaderMaterial,\n\tTexture,\n\tUniformsUtils\n} from 'three';\nimport { UnpackDepthRGBAShader } from '../shaders/UnpackDepthRGBAShader.js';\n\n/**\n * This is a helper for visualising a given light's shadow map.\n * It works for shadow casting lights: DirectionalLight and SpotLight.\n * It renders out the shadow map and displays it on a HUD.\n *\n * Example usage:\n *\t1) Import ShadowMapViewer into your app.\n *\n *\t2) Create a shadow casting light and name it optionally:\n *\t\tlet light = new DirectionalLight( 0xffffff, 1 );\n *\t\tlight.castShadow = true;\n *\t\tlight.name = 'Sun';\n *\n *\t3) Create a shadow map viewer for that light and set its size and position optionally:\n *\t\tlet shadowMapViewer = new ShadowMapViewer( light );\n *\t\tshadowMapViewer.size.set( 128, 128 );\t//width, height default: 256, 256\n *\t\tshadowMapViewer.position.set( 10, 10 );\t//x, y in pixel\t default: 0, 0 (top left corner)\n *\n *\t4) Render the shadow map viewer in your render loop:\n *\t\tshadowMapViewer.render( renderer );\n *\n *\t5) Optionally: Update the shadow map viewer on window resize:\n *\t\tshadowMapViewer.updateForWindowResize();\n *\n *\t6) If you set the position or size members directly, you need to call shadowMapViewer.update();\n */\n\nclass ShadowMapViewer {\n\n\tconstructor( light ) {\n\n\t\t//- Internals\n\t\tconst scope = this;\n\t\tconst doRenderLabel = ( light.name !== undefined && light.name !== '' );\n\t\tlet userAutoClearSetting;\n\n\t\t//Holds the initial position and dimension of the HUD\n\t\tconst frame = {\n\t\t\tx: 10,\n\t\t\ty: 10,\n\t\t\twidth: 256,\n\t\t\theight: 256\n\t\t};\n\n\t\tconst camera = new OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 10 );\n\t\tcamera.position.set( 0, 0, 2 );\n\t\tconst scene = new Scene();\n\n\t\t//HUD for shadow map\n\t\tconst shader = UnpackDepthRGBAShader;\n\n\t\tconst uniforms = UniformsUtils.clone( shader.uniforms );\n\t\tconst material = new ShaderMaterial( {\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\t\t} );\n\t\tconst plane = new PlaneGeometry( frame.width, frame.height );\n\t\tconst mesh = new Mesh( plane, material );\n\n\t\tscene.add( mesh );\n\n\n\t\t//Label for light's name\n\t\tlet labelCanvas, labelMesh;\n\n\t\tif ( doRenderLabel ) {\n\n\t\t\tlabelCanvas = document.createElement( 'canvas' );\n\n\t\t\tconst context = labelCanvas.getContext( '2d' );\n\t\t\tcontext.font = 'Bold 20px Arial';\n\n\t\t\tconst labelWidth = context.measureText( light.name ).width;\n\t\t\tlabelCanvas.width = labelWidth;\n\t\t\tlabelCanvas.height = 25;\t//25 to account for g, p, etc.\n\n\t\t\tcontext.font = 'Bold 20px Arial';\n\t\t\tcontext.fillStyle = 'rgba( 255, 0, 0, 1 )';\n\t\t\tcontext.fillText( light.name, 0, 20 );\n\n\t\t\tconst labelTexture = new Texture( labelCanvas );\n\t\t\tlabelTexture.magFilter = LinearFilter;\n\t\t\tlabelTexture.minFilter = LinearFilter;\n\t\t\tlabelTexture.needsUpdate = true;\n\n\t\t\tconst labelMaterial = new MeshBasicMaterial( { map: labelTexture, side: DoubleSide } );\n\t\t\tlabelMaterial.transparent = true;\n\n\t\t\tconst labelPlane = new PlaneGeometry( labelCanvas.width, labelCanvas.height );\n\t\t\tlabelMesh = new Mesh( labelPlane, labelMaterial );\n\n\t\t\tscene.add( labelMesh );\n\n\t\t}\n\n\n\t\tfunction resetPosition() {\n\n\t\t\tscope.position.set( scope.position.x, scope.position.y );\n\n\t\t}\n\n\t\t//- API\n\t\t// Set to false to disable displaying this shadow map\n\t\tthis.enabled = true;\n\n\t\t// Set the size of the displayed shadow map on the HUD\n\t\tthis.size = {\n\t\t\twidth: frame.width,\n\t\t\theight: frame.height,\n\t\t\tset: function ( width, height ) {\n\n\t\t\t\tthis.width = width;\n\t\t\t\tthis.height = height;\n\n\t\t\t\tmesh.scale.set( this.width / frame.width, this.height / frame.height, 1 );\n\n\t\t\t\t//Reset the position as it is off when we scale stuff\n\t\t\t\tresetPosition();\n\n\t\t\t}\n\t\t};\n\n\t\t// Set the position of the displayed shadow map on the HUD\n\t\tthis.position = {\n\t\t\tx: frame.x,\n\t\t\ty: frame.y,\n\t\t\tset: function ( x, y ) {\n\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\n\t\t\t\tconst width = scope.size.width;\n\t\t\t\tconst height = scope.size.height;\n\n\t\t\t\tmesh.position.set( - window.innerWidth / 2 + width / 2 + this.x, window.innerHeight / 2 - height / 2 - this.y, 0 );\n\n\t\t\t\tif ( doRenderLabel ) labelMesh.position.set( mesh.position.x, mesh.position.y - scope.size.height / 2 + labelCanvas.height / 2, 0 );\n\n\t\t\t}\n\t\t};\n\n\t\tthis.render = function ( renderer ) {\n\n\t\t\tif ( this.enabled ) {\n\n\t\t\t\t//Because a light's .shadowMap is only initialised after the first render pass\n\t\t\t\t//we have to make sure the correct map is sent into the shader, otherwise we\n\t\t\t\t//always end up with the scene's first added shadow casting light's shadowMap\n\t\t\t\t//in the shader\n\t\t\t\t//See: https://github.com/mrdoob/three.js/issues/5932\n\t\t\t\tuniforms.tDiffuse.value = light.shadow.map.texture;\n\n\t\t\t\tuserAutoClearSetting = renderer.autoClear;\n\t\t\t\trenderer.autoClear = false; // To allow render overlay\n\t\t\t\trenderer.clearDepth();\n\t\t\t\trenderer.render( scene, camera );\n\t\t\t\trenderer.autoClear = userAutoClearSetting;\t//Restore user's setting\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.updateForWindowResize = function () {\n\n\t\t\tif ( this.enabled ) {\n\n\t\t\t\t camera.left = window.innerWidth / - 2;\n\t\t\t\t camera.right = window.innerWidth / 2;\n\t\t\t\t camera.top = window.innerHeight / 2;\n\t\t\t\t camera.bottom = window.innerHeight / - 2;\n\t\t\t\t camera.updateProjectionMatrix();\n\n\t\t\t\t this.update();\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\tthis.position.set( this.position.x, this.position.y );\n\t\t\tthis.size.set( this.size.width, this.size.height );\n\n\t\t};\n\n\t\t//Force an update to set position/size\n\t\tthis.update();\n\n\t}\n\n}\n\n\nexport { ShadowMapViewer };\n", "import {\n\tAnimationClip,\n\tAnimationMixer,\n\tMatrix4,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tSkeletonHelper,\n\tVector3,\n\tVectorKeyframeTrack\n} from 'three';\n\n\nfunction retarget( target, source, options = {} ) {\n\n\tconst pos = new Vector3(),\n\t\tquat = new Quaternion(),\n\t\tscale = new Vector3(),\n\t\tbindBoneMatrix = new Matrix4(),\n\t\trelativeMatrix = new Matrix4(),\n\t\tglobalMatrix = new Matrix4();\n\n\toptions.preserveMatrix = options.preserveMatrix !== undefined ? options.preserveMatrix : true;\n\toptions.preservePosition = options.preservePosition !== undefined ? options.preservePosition : true;\n\toptions.preserveHipPosition = options.preserveHipPosition !== undefined ? options.preserveHipPosition : false;\n\toptions.useTargetMatrix = options.useTargetMatrix !== undefined ? options.useTargetMatrix : false;\n\toptions.hip = options.hip !== undefined ? options.hip : 'hip';\n\toptions.names = options.names || {};\n\n\tconst sourceBones = source.isObject3D ? source.skeleton.bones : getBones( source ),\n\t\tbones = target.isObject3D ? target.skeleton.bones : getBones( target );\n\n\tlet bindBones,\n\t\tbone, name, boneTo,\n\t\tbonesPosition;\n\n\t// reset bones\n\n\tif ( target.isObject3D ) {\n\n\t\ttarget.skeleton.pose();\n\n\t} else {\n\n\t\toptions.useTargetMatrix = true;\n\t\toptions.preserveMatrix = false;\n\n\t}\n\n\tif ( options.preservePosition ) {\n\n\t\tbonesPosition = [];\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tbonesPosition.push( bones[ i ].position.clone() );\n\n\t\t}\n\n\t}\n\n\tif ( options.preserveMatrix ) {\n\n\t\t// reset matrix\n\n\t\ttarget.updateMatrixWorld();\n\n\t\ttarget.matrixWorld.identity();\n\n\t\t// reset children matrix\n\n\t\tfor ( let i = 0; i < target.children.length; ++ i ) {\n\n\t\t\ttarget.children[ i ].updateMatrixWorld( true );\n\n\t\t}\n\n\t}\n\n\tif ( options.offsets ) {\n\n\t\tbindBones = [];\n\n\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\tbone = bones[ i ];\n\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\tif ( options.offsets[ name ] ) {\n\n\t\t\t\tbone.matrix.multiply( options.offsets[ name ] );\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t\tbone.updateMatrixWorld();\n\n\t\t\t}\n\n\t\t\tbindBones.push( bone.matrixWorld.clone() );\n\n\t\t}\n\n\t}\n\n\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\tbone = bones[ i ];\n\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\tboneTo = getBoneByName( name, sourceBones );\n\n\t\tglobalMatrix.copy( bone.matrixWorld );\n\n\t\tif ( boneTo ) {\n\n\t\t\tboneTo.updateMatrixWorld();\n\n\t\t\tif ( options.useTargetMatrix ) {\n\n\t\t\t\trelativeMatrix.copy( boneTo.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\trelativeMatrix.copy( target.matrixWorld ).invert();\n\t\t\t\trelativeMatrix.multiply( boneTo.matrixWorld );\n\n\t\t\t}\n\n\t\t\t// ignore scale to extract rotation\n\n\t\t\tscale.setFromMatrixScale( relativeMatrix );\n\t\t\trelativeMatrix.scale( scale.set( 1 / scale.x, 1 / scale.y, 1 / scale.z ) );\n\n\t\t\t// apply to global matrix\n\n\t\t\tglobalMatrix.makeRotationFromQuaternion( quat.setFromRotationMatrix( relativeMatrix ) );\n\n\t\t\tif ( target.isObject3D ) {\n\n\t\t\t\tconst boneIndex = bones.indexOf( bone ),\n\t\t\t\t\twBindMatrix = bindBones ? bindBones[ boneIndex ] : bindBoneMatrix.copy( target.skeleton.boneInverses[ boneIndex ] ).invert();\n\n\t\t\t\tglobalMatrix.multiply( wBindMatrix );\n\n\t\t\t}\n\n\t\t\tglobalMatrix.copyPosition( relativeMatrix );\n\n\t\t}\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\tbone.matrix.multiply( globalMatrix );\n\n\t\t} else {\n\n\t\t\tbone.matrix.copy( globalMatrix );\n\n\t\t}\n\n\t\tif ( options.preserveHipPosition && name === options.hip ) {\n\n\t\t\tbone.matrix.setPosition( pos.set( 0, bone.position.y, 0 ) );\n\n\t\t}\n\n\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\tbone.updateMatrixWorld();\n\n\t}\n\n\tif ( options.preservePosition ) {\n\n\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\tbone = bones[ i ];\n\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\tif ( name !== options.hip ) {\n\n\t\t\t\tbone.position.copy( bonesPosition[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tif ( options.preserveMatrix ) {\n\n\t\t// restore matrix\n\n\t\ttarget.updateMatrixWorld( true );\n\n\t}\n\n}\n\nfunction retargetClip( target, source, clip, options = {} ) {\n\n\toptions.useFirstFramePosition = options.useFirstFramePosition !== undefined ? options.useFirstFramePosition : false;\n\t// Calculate the fps from the source clip based on the track with the most frames, unless fps is already provided.\n\toptions.fps = options.fps !== undefined ? options.fps : ( Math.max( ...clip.tracks.map( track => track.times.length ) ) / clip.duration );\n\toptions.names = options.names || [];\n\n\tif ( ! source.isObject3D ) {\n\n\t\tsource = getHelperFromSkeleton( source );\n\n\t}\n\n\tconst numFrames = Math.round( clip.duration * ( options.fps / 1000 ) * 1000 ),\n\t\tdelta = clip.duration / ( numFrames - 1 ),\n\t\tconvertedTracks = [],\n\t\tmixer = new AnimationMixer( source ),\n\t\tbones = getBones( target.skeleton ),\n\t\tboneDatas = [];\n\tlet positionOffset,\n\t\tbone, boneTo, boneData,\n\t\tname;\n\n\tmixer.clipAction( clip ).play();\n\tmixer.update( 0 );\n\n\tsource.updateMatrixWorld();\n\n\tfor ( let i = 0; i < numFrames; ++ i ) {\n\n\t\tconst time = i * delta;\n\n\t\tretarget( target, source, options );\n\n\t\tfor ( let j = 0; j < bones.length; ++ j ) {\n\n\t\t\tname = options.names[ bones[ j ].name ] || bones[ j ].name;\n\n\t\t\tboneTo = getBoneByName( name, source.skeleton );\n\n\t\t\tif ( boneTo ) {\n\n\t\t\t\tbone = bones[ j ];\n\t\t\t\tboneData = boneDatas[ j ] = boneDatas[ j ] || { bone: bone };\n\n\t\t\t\tif ( options.hip === name ) {\n\n\t\t\t\t\tif ( ! boneData.pos ) {\n\n\t\t\t\t\t\tboneData.pos = {\n\t\t\t\t\t\t\ttimes: new Float32Array( numFrames ),\n\t\t\t\t\t\t\tvalues: new Float32Array( numFrames * 3 )\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( options.useFirstFramePosition ) {\n\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\tpositionOffset = bone.position.clone();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbone.position.sub( positionOffset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.pos.times[ i ] = time;\n\n\t\t\t\t\tbone.position.toArray( boneData.pos.values, i * 3 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! boneData.quat ) {\n\n\t\t\t\t\tboneData.quat = {\n\t\t\t\t\t\ttimes: new Float32Array( numFrames ),\n\t\t\t\t\t\tvalues: new Float32Array( numFrames * 4 )\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tboneData.quat.times[ i ] = time;\n\n\t\t\t\tbone.quaternion.toArray( boneData.quat.values, i * 4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( i === numFrames - 2 ) {\n\n\t\t\t// last mixer update before final loop iteration\n\t\t\t// make sure we do not go over or equal to clip duration\n\t\t\tmixer.update( delta - 0.0000001 );\n\n\t\t} else {\n\n\t\t\tmixer.update( delta );\n\n\t\t}\n\n\t\tsource.updateMatrixWorld();\n\n\t}\n\n\tfor ( let i = 0; i < boneDatas.length; ++ i ) {\n\n\t\tboneData = boneDatas[ i ];\n\n\t\tif ( boneData ) {\n\n\t\t\tif ( boneData.pos ) {\n\n\t\t\t\tconvertedTracks.push( new VectorKeyframeTrack(\n\t\t\t\t\t'.bones[' + boneData.bone.name + '].position',\n\t\t\t\t\tboneData.pos.times,\n\t\t\t\t\tboneData.pos.values\n\t\t\t\t) );\n\n\t\t\t}\n\n\t\t\tconvertedTracks.push( new QuaternionKeyframeTrack(\n\t\t\t\t'.bones[' + boneData.bone.name + '].quaternion',\n\t\t\t\tboneData.quat.times,\n\t\t\t\tboneData.quat.values\n\t\t\t) );\n\n\t\t}\n\n\t}\n\n\tmixer.uncacheAction( clip );\n\n\treturn new AnimationClip( clip.name, - 1, convertedTracks );\n\n}\n\nfunction clone( source ) {\n\n\tconst sourceLookup = new Map();\n\tconst cloneLookup = new Map();\n\n\tconst clone = source.clone();\n\n\tparallelTraverse( source, clone, function ( sourceNode, clonedNode ) {\n\n\t\tsourceLookup.set( clonedNode, sourceNode );\n\t\tcloneLookup.set( sourceNode, clonedNode );\n\n\t} );\n\n\tclone.traverse( function ( node ) {\n\n\t\tif ( ! node.isSkinnedMesh ) return;\n\n\t\tconst clonedMesh = node;\n\t\tconst sourceMesh = sourceLookup.get( node );\n\t\tconst sourceBones = sourceMesh.skeleton.bones;\n\n\t\tclonedMesh.skeleton = sourceMesh.skeleton.clone();\n\t\tclonedMesh.bindMatrix.copy( sourceMesh.bindMatrix );\n\n\t\tclonedMesh.skeleton.bones = sourceBones.map( function ( bone ) {\n\n\t\t\treturn cloneLookup.get( bone );\n\n\t\t} );\n\n\t\tclonedMesh.bind( clonedMesh.skeleton, clonedMesh.bindMatrix );\n\n\t} );\n\n\treturn clone;\n\n}\n\n// internal helper\n\nfunction getBoneByName( name, skeleton ) {\n\n\tfor ( let i = 0, bones = getBones( skeleton ); i < bones.length; i ++ ) {\n\n\t\tif ( name === bones[ i ].name )\n\n\t\t\treturn bones[ i ];\n\n\t}\n\n}\n\nfunction getBones( skeleton ) {\n\n\treturn Array.isArray( skeleton ) ? skeleton : skeleton.bones;\n\n}\n\n\nfunction getHelperFromSkeleton( skeleton ) {\n\n\tconst source = new SkeletonHelper( skeleton.bones[ 0 ] );\n\tsource.skeleton = skeleton;\n\n\treturn source;\n\n}\n\nfunction parallelTraverse( a, b, callback ) {\n\n\tcallback( a, b );\n\n\tfor ( let i = 0; i < a.children.length; i ++ ) {\n\n\t\tparallelTraverse( a.children[ i ], b.children[ i ], callback );\n\n\t}\n\n}\n\nexport {\n\tretarget,\n\tretargetClip,\n\tclone,\n};\n", "// Hybrid radix sort from\n// - https://gist.github.com/sciecode/93ed864dd77c5c8803c6a86698d68dab\n// - https://github.com/mrdoob/three.js/pull/27202#issuecomment-1817640271\n//\n// expects unsigned 32b integer values\n\nconst POWER = 3;\nconst BIT_MAX = 32;\nconst BIN_BITS = 1 << POWER;\nconst BIN_SIZE = 1 << BIN_BITS;\nconst BIN_MAX = BIN_SIZE - 1;\nconst ITERATIONS = BIT_MAX / BIN_BITS;\n\nconst bins = new Array( ITERATIONS );\nconst bins_buffer = new ArrayBuffer( ( ITERATIONS + 1 ) * BIN_SIZE * 4 );\n\nlet c = 0;\nfor ( let i = 0; i < ( ITERATIONS + 1 ); i ++ ) {\n\n\tbins[ i ] = new Uint32Array( bins_buffer, c, BIN_SIZE );\n\tc += BIN_SIZE * 4;\n\n}\n\nconst defaultGet = ( el ) => el;\n\nexport const radixSort = ( arr, opt ) => {\n\n\tconst len = arr.length;\n\n\tconst options = opt || {};\n\tconst aux = options.aux || new arr.constructor( len );\n\tconst get = options.get || defaultGet;\n\n\tconst data = [ arr, aux ];\n\n\tlet compare, accumulate, recurse;\n\n\tif ( options.reversed ) {\n\n\t\tcompare = ( a, b ) => a < b;\n\t\taccumulate = ( bin ) => {\n\n\t\t\tfor ( let j = BIN_SIZE - 2; j >= 0; j -- )\n\t\t\t\tbin[ j ] += bin[ j + 1 ];\n\n\t\t};\n\n\t\trecurse = ( cache, depth, start ) => {\n\n\t\t\tlet prev = 0;\n\t\t\tfor ( let j = BIN_MAX; j >= 0; j -- ) {\n\n\t\t\t\tconst cur = cache[ j ], diff = cur - prev;\n\t\t\t\tif ( diff != 0 ) {\n\n\t\t\t\t\tif ( diff > 32 )\n\t\t\t\t\t\tradixSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\telse\n\t\t\t\t\t\tinsertionSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\tprev = cur;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t} else {\n\n\t\tcompare = ( a, b ) => a > b;\n\t\taccumulate = ( bin ) => {\n\n\t\t\tfor ( let j = 1; j < BIN_SIZE; j ++ )\n\t\t\t\tbin[ j ] += bin[ j - 1 ];\n\n\t\t};\n\n\t\trecurse = ( cache, depth, start ) => {\n\n\t\t\tlet prev = 0;\n\t\t\tfor ( let j = 0; j < BIN_SIZE; j ++ ) {\n\n\t\t\t\tconst cur = cache[ j ], diff = cur - prev;\n\t\t\t\tif ( diff != 0 ) {\n\n\t\t\t\t\tif ( diff > 32 )\n\t\t\t\t\t\tradixSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\telse\n\t\t\t\t\t\tinsertionSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\tprev = cur;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tconst insertionSortBlock = ( depth, start, len ) => {\n\n\t\tconst a = data[ depth & 1 ];\n\t\tconst b = data[ ( depth + 1 ) & 1 ];\n\n\t\tfor ( let j = start + 1; j < start + len; j ++ ) {\n\n\t\t\tconst p = a[ j ], t = get( p ) >>> 0;\n\t\t\tlet i = j;\n\t\t\twhile ( i > start ) {\n\n\t\t\t\tif ( compare( get( a[ i - 1 ] ) >>> 0, t ) )\n\t\t\t\t\ta[ i ] = a[ -- i ];\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\ta[ i ] = p;\n\n\t\t}\n\n\t\tif ( ( depth & 1 ) == 1 ) {\n\n\t\t\tfor ( let i = start; i < start + len; i ++ )\n\t\t\t\tb[ i ] = a[ i ];\n\n\t\t}\n\n\t};\n\n\tconst radixSortBlock = ( depth, start, len ) => {\n\n\t\tconst a = data[ depth & 1 ];\n\t\tconst b = data[ ( depth + 1 ) & 1 ];\n\n\t\tconst shift = ( 3 - depth ) << POWER;\n\t\tconst end = start + len;\n\n\t\tconst cache = bins[ depth ];\n\t\tconst bin = bins[ depth + 1 ];\n\n\t\tbin.fill( 0 );\n\n\t\tfor ( let j = start; j < end; j ++ )\n\t\t\tbin[ ( get( a[ j ] ) >>> shift ) & BIN_MAX ] ++;\n\n\t\taccumulate( bin );\n\n\t\tcache.set( bin );\n\n\t\tfor ( let j = end - 1; j >= start; j -- )\n\t\t\tb[ start + -- bin[ ( get( a[ j ] ) >>> shift ) & BIN_MAX ] ] = a[ j ];\n\n\t\tif ( depth == ITERATIONS - 1 ) return;\n\n\t\trecurse( cache, depth, start );\n\n\t};\n\n\tradixSortBlock( 0, 0, len );\n\n};\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * tool for \"unwrapping\" and debugging three.js geometries UV mapping\n *\n * Sample usage:\n *\tdocument.body.appendChild( UVsDebug( new THREE.SphereGeometry( 10, 10, 10, 10 ) );\n *\n */\n\nfunction UVsDebug( geometry, size = 1024 ) {\n\n\t// handles wrapping of uv.x > 1 only\n\n\tconst abc = 'abc';\n\tconst a = new Vector2();\n\tconst b = new Vector2();\n\n\tconst uvs = [\n\t\tnew Vector2(),\n\t\tnew Vector2(),\n\t\tnew Vector2()\n\t];\n\n\tconst face = [];\n\n\tconst canvas = document.createElement( 'canvas' );\n\tconst width = size; // power of 2 required for wrapping\n\tconst height = size;\n\tcanvas.width = width;\n\tcanvas.height = height;\n\n\tconst ctx = canvas.getContext( '2d' );\n\tctx.lineWidth = 1;\n\tctx.strokeStyle = 'rgb( 63, 63, 63 )';\n\tctx.textAlign = 'center';\n\n\t// paint background white\n\n\tctx.fillStyle = 'rgb( 255, 255, 255 )';\n\tctx.fillRect( 0, 0, width, height );\n\n\tconst index = geometry.index;\n\tconst uvAttribute = geometry.attributes.uv;\n\n\tif ( index ) {\n\n\t\t// indexed geometry\n\n\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\tface[ 0 ] = index.getX( i );\n\t\t\tface[ 1 ] = index.getX( i + 1 );\n\t\t\tface[ 2 ] = index.getX( i + 2 );\n\n\t\t\tuvs[ 0 ].fromBufferAttribute( uvAttribute, face[ 0 ] );\n\t\t\tuvs[ 1 ].fromBufferAttribute( uvAttribute, face[ 1 ] );\n\t\t\tuvs[ 2 ].fromBufferAttribute( uvAttribute, face[ 2 ] );\n\n\t\t\tprocessFace( face, uvs, i / 3 );\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed geometry\n\n\t\tfor ( let i = 0, il = uvAttribute.count; i < il; i += 3 ) {\n\n\t\t\tface[ 0 ] = i;\n\t\t\tface[ 1 ] = i + 1;\n\t\t\tface[ 2 ] = i + 2;\n\n\t\t\tuvs[ 0 ].fromBufferAttribute( uvAttribute, face[ 0 ] );\n\t\t\tuvs[ 1 ].fromBufferAttribute( uvAttribute, face[ 1 ] );\n\t\t\tuvs[ 2 ].fromBufferAttribute( uvAttribute, face[ 2 ] );\n\n\t\t\tprocessFace( face, uvs, i / 3 );\n\n\t\t}\n\n\t}\n\n\treturn canvas;\n\n\tfunction processFace( face, uvs, index ) {\n\n\t\t// draw contour of face\n\n\t\tctx.beginPath();\n\n\t\ta.set( 0, 0 );\n\n\t\tfor ( let j = 0, jl = uvs.length; j < jl; j ++ ) {\n\n\t\t\tconst uv = uvs[ j ];\n\n\t\t\ta.x += uv.x;\n\t\t\ta.y += uv.y;\n\n\t\t\tif ( j === 0 ) {\n\n\t\t\t\tctx.moveTo( uv.x * ( width - 2 ) + 0.5, ( 1 - uv.y ) * ( height - 2 ) + 0.5 );\n\n\t\t\t} else {\n\n\t\t\t\tctx.lineTo( uv.x * ( width - 2 ) + 0.5, ( 1 - uv.y ) * ( height - 2 ) + 0.5 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tctx.closePath();\n\t\tctx.stroke();\n\n\t\t// calculate center of face\n\n\t\ta.divideScalar( uvs.length );\n\n\t\t// label the face number\n\n\t\tctx.font = '18px Arial';\n\t\tctx.fillStyle = 'rgb( 63, 63, 63 )';\n\t\tctx.fillText( index, a.x * width, ( 1 - a.y ) * height );\n\n\t\tif ( a.x > 0.95 ) {\n\n\t\t\t// wrap x // 0.95 is arbitrary\n\n\t\t\tctx.fillText( index, ( a.x % 1 ) * width, ( 1 - a.y ) * height );\n\n\t\t}\n\n\t\t//\n\n\t\tctx.font = '12px Arial';\n\t\tctx.fillStyle = 'rgb( 191, 191, 191 )';\n\n\t\t// label uv edge orders\n\n\t\tfor ( let j = 0, jl = uvs.length; j < jl; j ++ ) {\n\n\t\t\tconst uv = uvs[ j ];\n\t\t\tb.addVectors( a, uv ).divideScalar( 2 );\n\n\t\t\tconst vnum = face[ j ];\n\t\t\tctx.fillText( abc[ j ] + vnum, b.x * width, ( 1 - b.y ) * height );\n\n\t\t\tif ( b.x > 0.95 ) {\n\n\t\t\t\t// wrap x\n\n\t\t\t\tctx.fillText( abc[ j ] + vnum, ( b.x % 1 ) * width, ( 1 - b.y ) * height );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { UVsDebug };\n", "class ARButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showStartAR( /*device*/ ) {\n\n\t\t\tif ( sessionInit.domOverlay === undefined ) {\n\n\t\t\t\tconst overlay = document.createElement( 'div' );\n\t\t\t\toverlay.style.display = 'none';\n\t\t\t\tdocument.body.appendChild( overlay );\n\n\t\t\t\tconst svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n\t\t\t\tsvg.setAttribute( 'width', 38 );\n\t\t\t\tsvg.setAttribute( 'height', 38 );\n\t\t\t\tsvg.style.position = 'absolute';\n\t\t\t\tsvg.style.right = '20px';\n\t\t\t\tsvg.style.top = '20px';\n\t\t\t\tsvg.addEventListener( 'click', function () {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t} );\n\t\t\t\toverlay.appendChild( svg );\n\n\t\t\t\tconst path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n\t\t\t\tpath.setAttribute( 'd', 'M 12,12 L 28,28 M 28,12 12,28' );\n\t\t\t\tpath.setAttribute( 'stroke', '#fff' );\n\t\t\t\tpath.setAttribute( 'stroke-width', 2 );\n\t\t\t\tsvg.appendChild( path );\n\n\t\t\t\tif ( sessionInit.optionalFeatures === undefined ) {\n\n\t\t\t\t\tsessionInit.optionalFeatures = [];\n\n\t\t\t\t}\n\n\t\t\t\tsessionInit.optionalFeatures.push( 'dom-overlay' );\n\t\t\t\tsessionInit.domOverlay = { root: overlay };\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\trenderer.xr.setReferenceSpaceType( 'local' );\n\n\t\t\t\tawait renderer.xr.setSession( session );\n\n\t\t\t\tbutton.textContent = 'STOP AR';\n\t\t\t\tsessionInit.domOverlay.root.style.display = '';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'START AR';\n\t\t\t\tsessionInit.domOverlay.root.style.display = 'none';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START AR';\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( 'immersive-ar', sessionInit ).then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\t\t\tnavigator.xr.offerSession( 'immersive-ar', sessionInit )\n\t\t\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\tnavigator.xr.offerSession( 'immersive-ar', sessionInit )\n\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showARNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'AR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction showARNotAllowed( exception ) {\n\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n\t\t\tbutton.textContent = 'AR NOT ALLOWED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'ARButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-ar' ).then( function ( supported ) {\n\n\t\t\t\tsupported ? showStartAR() : showARNotSupported();\n\n\t\t\t} ).catch( showARNotAllowed );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n}\n\nexport { ARButton };\n", "import { GLTFLoader } from '../loaders/GLTFLoader.js';\n\nconst DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/';\n\nclass XRHandMeshModel {\n\n\tconstructor( handModel, controller, path, handedness, loader = null, onLoad = null ) {\n\n\t\tthis.controller = controller;\n\t\tthis.handModel = handModel;\n\n\t\tthis.bones = [];\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = new GLTFLoader();\n\t\t\tloader.setPath( path || DEFAULT_HAND_PROFILE_PATH );\n\n\t\t}\n\n\t\tloader.load( `${handedness}.glb`, gltf => {\n\n\t\t\tconst object = gltf.scene.children[ 0 ];\n\t\t\tthis.handModel.add( object );\n\n\t\t\tconst mesh = object.getObjectByProperty( 'type', 'SkinnedMesh' );\n\t\t\tmesh.frustumCulled = false;\n\t\t\tmesh.castShadow = true;\n\t\t\tmesh.receiveShadow = true;\n\n\t\t\tconst joints = [\n\t\t\t\t'wrist',\n\t\t\t\t'thumb-metacarpal',\n\t\t\t\t'thumb-phalanx-proximal',\n\t\t\t\t'thumb-phalanx-distal',\n\t\t\t\t'thumb-tip',\n\t\t\t\t'index-finger-metacarpal',\n\t\t\t\t'index-finger-phalanx-proximal',\n\t\t\t\t'index-finger-phalanx-intermediate',\n\t\t\t\t'index-finger-phalanx-distal',\n\t\t\t\t'index-finger-tip',\n\t\t\t\t'middle-finger-metacarpal',\n\t\t\t\t'middle-finger-phalanx-proximal',\n\t\t\t\t'middle-finger-phalanx-intermediate',\n\t\t\t\t'middle-finger-phalanx-distal',\n\t\t\t\t'middle-finger-tip',\n\t\t\t\t'ring-finger-metacarpal',\n\t\t\t\t'ring-finger-phalanx-proximal',\n\t\t\t\t'ring-finger-phalanx-intermediate',\n\t\t\t\t'ring-finger-phalanx-distal',\n\t\t\t\t'ring-finger-tip',\n\t\t\t\t'pinky-finger-metacarpal',\n\t\t\t\t'pinky-finger-phalanx-proximal',\n\t\t\t\t'pinky-finger-phalanx-intermediate',\n\t\t\t\t'pinky-finger-phalanx-distal',\n\t\t\t\t'pinky-finger-tip',\n\t\t\t];\n\n\t\t\tjoints.forEach( jointName => {\n\n\t\t\t\tconst bone = object.getObjectByName( jointName );\n\n\t\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\t\tbone.jointName = jointName;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( `Couldn't find ${jointName} in ${handedness} hand mesh` );\n\n\t\t\t\t}\n\n\t\t\t\tthis.bones.push( bone );\n\n\t\t\t} );\n\n\t\t\tif ( onLoad ) onLoad( object );\n\n\t\t} );\n\n\t}\n\n\tupdateMesh() {\n\n\t\t// XR Joints\n\t\tconst XRJoints = this.controller.joints;\n\n\t\tfor ( let i = 0; i < this.bones.length; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tconst XRJoint = XRJoints[ bone.jointName ];\n\n\t\t\t\tif ( XRJoint.visible ) {\n\n\t\t\t\t\tconst position = XRJoint.position;\n\n\t\t\t\t\tbone.position.copy( position );\n\t\t\t\t\tbone.quaternion.copy( XRJoint.quaternion );\n\t\t\t\t\t// bone.scale.setScalar( XRJoint.jointRadius || defaultRadius );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { XRHandMeshModel };\n", "import { Object3D, Sphere, Box3 } from 'three';\nimport { XRHandMeshModel } from './XRHandMeshModel.js';\n\nconst TOUCH_RADIUS = 0.01;\nconst POINTING_JOINT = 'index-finger-tip';\n\nclass OculusHandModel extends Object3D {\n\n\tconstructor( controller, loader = null, onLoad = null ) {\n\n\t\tsuper();\n\n\t\tthis.controller = controller;\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\t\tthis.loader = loader;\n\t\tthis.onLoad = onLoad;\n\n\t\tthis.mesh = null;\n\n\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\tconst xrInputSource = event.data;\n\n\t\t\tif ( xrInputSource.hand && ! this.motionController ) {\n\n\t\t\t\tthis.xrInputSource = xrInputSource;\n\n\t\t\t\tthis.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness, this.loader, this.onLoad );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\tthis.clear();\n\t\t\tthis.motionController = null;\n\n\t\t} );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.motionController ) {\n\n\t\t\tthis.motionController.updateMesh();\n\n\t\t}\n\n\t}\n\n\tgetPointerPosition() {\n\n\t\tconst indexFingerTip = this.controller.joints[ POINTING_JOINT ];\n\t\tif ( indexFingerTip ) {\n\n\t\t\treturn indexFingerTip.position;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\tintersectBoxObject( boxObject ) {\n\n\t\tconst pointerPosition = this.getPointerPosition();\n\t\tif ( pointerPosition ) {\n\n\t\t\tconst indexSphere = new Sphere( pointerPosition, TOUCH_RADIUS );\n\t\t\tconst box = new Box3().setFromObject( boxObject );\n\t\t\treturn indexSphere.intersectsBox( box );\n\n\t\t} else {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tcheckButton( button ) {\n\n\t\tif ( this.intersectBoxObject( button ) ) {\n\n\t\t\tbutton.onPress();\n\n\t\t} else {\n\n\t\t\tbutton.onClear();\n\n\t\t}\n\n\t\tif ( button.isPressed() ) {\n\n\t\t\tbutton.whilePressed();\n\n\t\t}\n\n\t}\n\n}\n\nexport { OculusHandModel };\n", "import * as THREE from 'three';\n\nconst PINCH_MAX = 0.05;\nconst PINCH_THRESHOLD = 0.02;\nconst PINCH_MIN = 0.01;\nconst POINTER_ADVANCE_MAX = 0.02;\nconst POINTER_OPACITY_MAX = 1;\nconst POINTER_OPACITY_MIN = 0.4;\nconst POINTER_FRONT_RADIUS = 0.002;\nconst POINTER_REAR_RADIUS = 0.01;\nconst POINTER_REAR_RADIUS_MIN = 0.003;\nconst POINTER_LENGTH = 0.035;\nconst POINTER_SEGMENTS = 16;\nconst POINTER_RINGS = 12;\nconst POINTER_HEMISPHERE_ANGLE = 110;\nconst YAXIS = /* @__PURE__ */ new THREE.Vector3( 0, 1, 0 );\nconst ZAXIS = /* @__PURE__ */ new THREE.Vector3( 0, 0, 1 );\n\nconst CURSOR_RADIUS = 0.02;\nconst CURSOR_MAX_DISTANCE = 1.5;\n\nclass OculusHandPointerModel extends THREE.Object3D {\n\n\tconstructor( hand, controller ) {\n\n\t\tsuper();\n\n\t\tthis.hand = hand;\n\t\tthis.controller = controller;\n\n\t\t// Unused\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\t\tthis.mesh = null;\n\n\t\tthis.pointerGeometry = null;\n\t\tthis.pointerMesh = null;\n\t\tthis.pointerObject = null;\n\n\t\tthis.pinched = false;\n\t\tthis.attached = false;\n\n\t\tthis.cursorObject = null;\n\n\t\tthis.raycaster = null;\n\n\t\tthis._onConnected = this._onConnected.bind( this );\n\t\tthis._onDisconnected = this._onDisconnected.bind( this );\n\t\tthis.hand.addEventListener( 'connected', this._onConnected );\n\t\tthis.hand.addEventListener( 'disconnected', this._onDisconnected );\n\n\t}\n\n\t_onConnected( event ) {\n\n\t\tconst xrInputSource = event.data;\n\t\tif ( xrInputSource.hand ) {\n\n\t\t\tthis.visible = true;\n\t\t\tthis.xrInputSource = xrInputSource;\n\n\t\t\tthis.createPointer();\n\n\t\t}\n\n\t}\n\n\t_onDisconnected() {\n\n\t\tthis.visible = false;\n\t\tthis.xrInputSource = null;\n\n\t\tif ( this.pointerGeometry ) this.pointerGeometry.dispose();\n\t\tif ( this.pointerMesh && this.pointerMesh.material ) this.pointerMesh.material.dispose();\n\n\t\tthis.clear();\n\n\t}\n\n\t_drawVerticesRing( vertices, baseVector, ringIndex ) {\n\n\t\tconst segmentVector = baseVector.clone();\n\t\tfor ( let i = 0; i < POINTER_SEGMENTS; i ++ ) {\n\n\t\t\tsegmentVector.applyAxisAngle( ZAXIS, ( Math.PI * 2 ) / POINTER_SEGMENTS );\n\t\t\tconst vid = ringIndex * POINTER_SEGMENTS + i;\n\t\t\tvertices[ 3 * vid ] = segmentVector.x;\n\t\t\tvertices[ 3 * vid + 1 ] = segmentVector.y;\n\t\t\tvertices[ 3 * vid + 2 ] = segmentVector.z;\n\n\t\t}\n\n\t}\n\n\t_updatePointerVertices( rearRadius ) {\n\n\t\tconst vertices = this.pointerGeometry.attributes.position.array;\n\t\t// first ring for front face\n\t\tconst frontFaceBase = new THREE.Vector3(\n\t\t\tPOINTER_FRONT_RADIUS,\n\t\t\t0,\n\t\t\t- 1 * ( POINTER_LENGTH - rearRadius )\n\t\t);\n\t\tthis._drawVerticesRing( vertices, frontFaceBase, 0 );\n\n\t\t// rings for rear hemisphere\n\t\tconst rearBase = new THREE.Vector3(\n\t\t\tMath.sin( ( Math.PI * POINTER_HEMISPHERE_ANGLE ) / 180 ) * rearRadius,\n\t\t\tMath.cos( ( Math.PI * POINTER_HEMISPHERE_ANGLE ) / 180 ) * rearRadius,\n\t\t\t0\n\t\t);\n\t\tfor ( let i = 0; i < POINTER_RINGS; i ++ ) {\n\n\t\t\tthis._drawVerticesRing( vertices, rearBase, i + 1 );\n\t\t\trearBase.applyAxisAngle(\n\t\t\t\tYAXIS,\n\t\t\t\t( Math.PI * POINTER_HEMISPHERE_ANGLE ) / 180 / ( POINTER_RINGS * - 2 )\n\t\t\t);\n\n\t\t}\n\n\t\t// front and rear face center vertices\n\t\tconst frontCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS );\n\t\tconst rearCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS ) + 1;\n\t\tconst frontCenter = new THREE.Vector3(\n\t\t\t0,\n\t\t\t0,\n\t\t\t- 1 * ( POINTER_LENGTH - rearRadius )\n\t\t);\n\t\tvertices[ frontCenterIndex * 3 ] = frontCenter.x;\n\t\tvertices[ frontCenterIndex * 3 + 1 ] = frontCenter.y;\n\t\tvertices[ frontCenterIndex * 3 + 2 ] = frontCenter.z;\n\t\tconst rearCenter = new THREE.Vector3( 0, 0, rearRadius );\n\t\tvertices[ rearCenterIndex * 3 ] = rearCenter.x;\n\t\tvertices[ rearCenterIndex * 3 + 1 ] = rearCenter.y;\n\t\tvertices[ rearCenterIndex * 3 + 2 ] = rearCenter.z;\n\n\t\tthis.pointerGeometry.setAttribute(\n\t\t\t'position',\n\t\t\tnew THREE.Float32BufferAttribute( vertices, 3 )\n\t\t);\n\t\t// verticesNeedUpdate = true;\n\n\t}\n\n\tcreatePointer() {\n\n\t\tlet i, j;\n\t\tconst vertices = new Array(\n\t\t\t( ( POINTER_RINGS + 1 ) * POINTER_SEGMENTS + 2 ) * 3\n\t\t).fill( 0 );\n\t\t// const vertices = [];\n\t\tconst indices = [];\n\t\tthis.pointerGeometry = new THREE.BufferGeometry();\n\n\t\tthis.pointerGeometry.setAttribute(\n\t\t\t'position',\n\t\t\tnew THREE.Float32BufferAttribute( vertices, 3 )\n\t\t);\n\n\t\tthis._updatePointerVertices( POINTER_REAR_RADIUS );\n\n\t\t// construct faces to connect rings\n\t\tfor ( i = 0; i < POINTER_RINGS; i ++ ) {\n\n\t\t\tfor ( j = 0; j < POINTER_SEGMENTS - 1; j ++ ) {\n\n\t\t\t\tindices.push(\n\t\t\t\t\ti * POINTER_SEGMENTS + j,\n\t\t\t\t\ti * POINTER_SEGMENTS + j + 1,\n\t\t\t\t\t( i + 1 ) * POINTER_SEGMENTS + j\n\t\t\t\t);\n\t\t\t\tindices.push(\n\t\t\t\t\ti * POINTER_SEGMENTS + j + 1,\n\t\t\t\t\t( i + 1 ) * POINTER_SEGMENTS + j + 1,\n\t\t\t\t\t( i + 1 ) * POINTER_SEGMENTS + j\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tindices.push(\n\t\t\t\t( i + 1 ) * POINTER_SEGMENTS - 1,\n\t\t\t\ti * POINTER_SEGMENTS,\n\t\t\t\t( i + 2 ) * POINTER_SEGMENTS - 1\n\t\t\t);\n\t\t\tindices.push(\n\t\t\t\ti * POINTER_SEGMENTS,\n\t\t\t\t( i + 1 ) * POINTER_SEGMENTS,\n\t\t\t\t( i + 2 ) * POINTER_SEGMENTS - 1\n\t\t\t);\n\n\t\t}\n\n\t\t// construct front and rear face\n\t\tconst frontCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS );\n\t\tconst rearCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS ) + 1;\n\n\t\tfor ( i = 0; i < POINTER_SEGMENTS - 1; i ++ ) {\n\n\t\t\tindices.push( frontCenterIndex, i + 1, i );\n\t\t\tindices.push(\n\t\t\t\trearCenterIndex,\n\t\t\t\ti + POINTER_SEGMENTS * POINTER_RINGS,\n\t\t\t\ti + POINTER_SEGMENTS * POINTER_RINGS + 1\n\t\t\t);\n\n\t\t}\n\n\t\tindices.push( frontCenterIndex, 0, POINTER_SEGMENTS - 1 );\n\t\tindices.push(\n\t\t\trearCenterIndex,\n\t\t\tPOINTER_SEGMENTS * ( POINTER_RINGS + 1 ) - 1,\n\t\t\tPOINTER_SEGMENTS * POINTER_RINGS\n\t\t);\n\n\t\tconst material = new THREE.MeshBasicMaterial();\n\t\tmaterial.transparent = true;\n\t\tmaterial.opacity = POINTER_OPACITY_MIN;\n\n\t\tthis.pointerGeometry.setIndex( indices );\n\n\t\tthis.pointerMesh = new THREE.Mesh( this.pointerGeometry, material );\n\n\t\tthis.pointerMesh.position.set( 0, 0, - 1 * POINTER_REAR_RADIUS );\n\t\tthis.pointerObject = new THREE.Object3D();\n\t\tthis.pointerObject.add( this.pointerMesh );\n\n\t\tthis.raycaster = new THREE.Raycaster();\n\n\t\t// create cursor\n\t\tconst cursorGeometry = new THREE.SphereGeometry( CURSOR_RADIUS, 10, 10 );\n\t\tconst cursorMaterial = new THREE.MeshBasicMaterial();\n\t\tcursorMaterial.transparent = true;\n\t\tcursorMaterial.opacity = POINTER_OPACITY_MIN;\n\n\t\tthis.cursorObject = new THREE.Mesh( cursorGeometry, cursorMaterial );\n\t\tthis.pointerObject.add( this.cursorObject );\n\n\t\tthis.add( this.pointerObject );\n\n\t}\n\n\t_updateRaycaster() {\n\n\t\tif ( this.raycaster ) {\n\n\t\t\tconst pointerMatrix = this.pointerObject.matrixWorld;\n\t\t\tconst tempMatrix = new THREE.Matrix4();\n\t\t\ttempMatrix.identity().extractRotation( pointerMatrix );\n\t\t\tthis.raycaster.ray.origin.setFromMatrixPosition( pointerMatrix );\n\t\t\tthis.raycaster.ray.direction.set( 0, 0, - 1 ).applyMatrix4( tempMatrix );\n\n\t\t}\n\n\t}\n\n\t_updatePointer() {\n\n\t\tthis.pointerObject.visible = this.controller.visible;\n\t\tconst indexTip = this.hand.joints[ 'index-finger-tip' ];\n\t\tconst thumbTip = this.hand.joints[ 'thumb-tip' ];\n\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\t\tconst position = indexTip.position\n\t\t\t.clone()\n\t\t\t.add( thumbTip.position )\n\t\t\t.multiplyScalar( 0.5 );\n\t\tthis.pointerObject.position.copy( position );\n\t\tthis.pointerObject.quaternion.copy( this.controller.quaternion );\n\n\t\tthis.pinched = distance <= PINCH_THRESHOLD;\n\n\t\tconst pinchScale = ( distance - PINCH_MIN ) / ( PINCH_MAX - PINCH_MIN );\n\t\tconst focusScale = ( distance - PINCH_MIN ) / ( PINCH_THRESHOLD - PINCH_MIN );\n\t\tif ( pinchScale > 1 ) {\n\n\t\t\tthis._updatePointerVertices( POINTER_REAR_RADIUS );\n\t\t\tthis.pointerMesh.position.set( 0, 0, - 1 * POINTER_REAR_RADIUS );\n\t\t\tthis.pointerMesh.material.opacity = POINTER_OPACITY_MIN;\n\n\t\t} else if ( pinchScale > 0 ) {\n\n\t\t\tconst rearRadius =\n ( POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN ) * pinchScale +\n POINTER_REAR_RADIUS_MIN;\n\t\t\tthis._updatePointerVertices( rearRadius );\n\t\t\tif ( focusScale < 1 ) {\n\n\t\t\t\tthis.pointerMesh.position.set(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t- 1 * rearRadius - ( 1 - focusScale ) * POINTER_ADVANCE_MAX\n\t\t\t\t);\n\t\t\t\tthis.pointerMesh.material.opacity =\n POINTER_OPACITY_MIN +\n ( 1 - focusScale ) * ( POINTER_OPACITY_MAX - POINTER_OPACITY_MIN );\n\n\t\t\t} else {\n\n\t\t\t\tthis.pointerMesh.position.set( 0, 0, - 1 * rearRadius );\n\t\t\t\tthis.pointerMesh.material.opacity = POINTER_OPACITY_MIN;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis._updatePointerVertices( POINTER_REAR_RADIUS_MIN );\n\t\t\tthis.pointerMesh.position.set(\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t- 1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX\n\t\t\t);\n\t\t\tthis.pointerMesh.material.opacity = POINTER_OPACITY_MAX;\n\n\t\t}\n\n\t\tthis.cursorObject.material.opacity = this.pointerMesh.material.opacity;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\t\tif ( this.pointerGeometry ) {\n\n\t\t\tthis._updatePointer();\n\t\t\tthis._updateRaycaster();\n\n\t\t}\n\n\t}\n\n\tisPinched() {\n\n\t\treturn this.pinched;\n\n\t}\n\n\tsetAttached( attached ) {\n\n\t\tthis.attached = attached;\n\n\t}\n\n\tisAttached() {\n\n\t\treturn this.attached;\n\n\t}\n\n\tintersectObject( object, recursive = true ) {\n\n\t\tif ( this.raycaster ) {\n\n\t\t\treturn this.raycaster.intersectObject( object, recursive );\n\n\t\t}\n\n\t}\n\n\tintersectObjects( objects, recursive = true ) {\n\n\t\tif ( this.raycaster ) {\n\n\t\t\treturn this.raycaster.intersectObjects( objects, recursive );\n\n\t\t}\n\n\t}\n\n\tcheckIntersections( objects, recursive = false ) {\n\n\t\tif ( this.raycaster && ! this.attached ) {\n\n\t\t\tconst intersections = this.raycaster.intersectObjects( objects, recursive );\n\t\t\tconst direction = new THREE.Vector3( 0, 0, - 1 );\n\t\t\tif ( intersections.length > 0 ) {\n\n\t\t\t\tconst intersection = intersections[ 0 ];\n\t\t\t\tconst distance = intersection.distance;\n\t\t\t\tthis.cursorObject.position.copy( direction.multiplyScalar( distance ) );\n\n\t\t\t} else {\n\n\t\t\t\tthis.cursorObject.position.copy( direction.multiplyScalar( CURSOR_MAX_DISTANCE ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetCursor( distance ) {\n\n\t\tconst direction = new THREE.Vector3( 0, 0, - 1 );\n\t\tif ( this.raycaster && ! this.attached ) {\n\n\t\t\tthis.cursorObject.position.copy( direction.multiplyScalar( distance ) );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis._onDisconnected();\n\t\tthis.hand.removeEventListener( 'connected', this._onConnected );\n\t\tthis.hand.removeEventListener( 'disconnected', this._onDisconnected );\n\n\t}\n\n}\n\nexport { OculusHandPointerModel };\n", "import * as THREE from 'three';\n\nfunction createText( message, height ) {\n\n\tconst canvas = document.createElement( 'canvas' );\n\tconst context = canvas.getContext( '2d' );\n\tlet metrics = null;\n\tconst textHeight = 100;\n\tcontext.font = 'normal ' + textHeight + 'px Arial';\n\tmetrics = context.measureText( message );\n\tconst textWidth = metrics.width;\n\tcanvas.width = textWidth;\n\tcanvas.height = textHeight;\n\tcontext.font = 'normal ' + textHeight + 'px Arial';\n\tcontext.textAlign = 'center';\n\tcontext.textBaseline = 'middle';\n\tcontext.fillStyle = '#ffffff';\n\tcontext.fillText( message, textWidth / 2, textHeight / 2 );\n\n\tconst texture = new THREE.Texture( canvas );\n\ttexture.needsUpdate = true;\n\n\tconst material = new THREE.MeshBasicMaterial( {\n\t\tcolor: 0xffffff,\n\t\tside: THREE.DoubleSide,\n\t\tmap: texture,\n\t\ttransparent: true,\n\t} );\n\tconst geometry = new THREE.PlaneGeometry(\n\t\t( height * textWidth ) / textHeight,\n\t\theight\n\t);\n\tconst plane = new THREE.Mesh( geometry, material );\n\treturn plane;\n\n}\n\nexport { createText };\n", "class VRButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showEnterVR( /*device*/ ) {\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\tawait renderer.xr.setSession( session );\n\t\t\t\tbutton.textContent = 'EXIT VR';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'ENTER VR';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'ENTER VR';\n\n\t\t\t// WebXR's requestReferenceSpace only works if the corresponding feature\n\t\t\t// was requested at session creation time. For simplicity, just ask for\n\t\t\t// the interesting ones as optional features, but be aware that the\n\t\t\t// requestReferenceSpace call will fail if it turns out to be unavailable.\n\t\t\t// ('local' is always available for immersive sessions and doesn't need to\n\t\t\t// be requested separately.)\n\n\t\t\tconst sessionOptions = {\n\t\t\t\t...sessionInit,\n\t\t\t\toptionalFeatures: [\n\t\t\t\t\t'local-floor',\n\t\t\t\t\t'bounded-floor',\n\t\t\t\t\t'layers',\n\t\t\t\t\t...( sessionInit.optionalFeatures || [] )\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( 'immersive-vr', sessionOptions ).then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\t\t\tnavigator.xr.offerSession( 'immersive-vr', sessionOptions )\n\t\t\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\tnavigator.xr.offerSession( 'immersive-vr', sessionOptions )\n\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showWebXRNotFound() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'VR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction showVRNotAllowed( exception ) {\n\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n\t\t\tbutton.textContent = 'VR NOT ALLOWED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'VRButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-vr' ).then( function ( supported ) {\n\n\t\t\t\tsupported ? showEnterVR() : showWebXRNotFound();\n\n\t\t\t\tif ( supported && VRButton.xrSessionIsGranted ) {\n\n\t\t\t\t\tbutton.click();\n\n\t\t\t\t}\n\n\t\t\t} ).catch( showVRNotAllowed );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n\tstatic registerSessionGrantedListener() {\n\n\t\tif ( typeof navigator !== 'undefined' && 'xr' in navigator ) {\n\n\t\t\t// WebXRViewer (based on Firefox) has a bug where addEventListener\n\t\t\t// throws a silent exception and aborts execution entirely.\n\t\t\tif ( /WebXRViewer\\//i.test( navigator.userAgent ) ) return;\n\n\t\t\tnavigator.xr.addEventListener( 'sessiongranted', () => {\n\n\t\t\t\tVRButton.xrSessionIsGranted = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nVRButton.xrSessionIsGranted = false;\nVRButton.registerSessionGrantedListener();\n\nexport { VRButton };\n", "class XRButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showStartXR( mode ) {\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\tawait renderer.xr.setSession( session );\n\n\t\t\t\tbutton.textContent = 'STOP XR';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'START XR';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START XR';\n\n\t\t\tconst sessionOptions = {\n\t\t\t\t...sessionInit,\n\t\t\t\toptionalFeatures: [\n\t\t\t\t\t'local-floor',\n\t\t\t\t\t'bounded-floor',\n\t\t\t\t\t'layers',\n\t\t\t\t\t...( sessionInit.optionalFeatures || [] )\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( mode, sessionOptions )\n\t\t\t\t\t\t.then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\t\t\tnavigator.xr.offerSession( mode, sessionOptions )\n\t\t\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\tnavigator.xr.offerSession( mode, sessionOptions )\n\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showXRNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'XR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction showXRNotAllowed( exception ) {\n\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n\t\t\tbutton.textContent = 'XR NOT ALLOWED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'XRButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-ar' )\n\t\t\t\t.then( function ( supported ) {\n\n\t\t\t\t\tif ( supported ) {\n\n\t\t\t\t\t\tshowStartXR( 'immersive-ar' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnavigator.xr.isSessionSupported( 'immersive-vr' )\n\t\t\t\t\t\t\t.then( function ( supported ) {\n\n\t\t\t\t\t\t\t\tif ( supported ) {\n\n\t\t\t\t\t\t\t\t\tshowStartXR( 'immersive-vr' );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tshowXRNotSupported();\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} ).catch( showXRNotAllowed );\n\n\t\t\t\t\t}\n\n\t\t\t\t} ).catch( showXRNotAllowed );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n}\n\nexport { XRButton };\n", "/**\n * @webxr-input-profiles/motion-controllers 1.0.0 https://github.com/immersive-web/webxr-input-profiles\n */\n\nconst Constants = {\n Handedness: Object.freeze({\n NONE: 'none',\n LEFT: 'left',\n RIGHT: 'right'\n }),\n\n ComponentState: Object.freeze({\n DEFAULT: 'default',\n TOUCHED: 'touched',\n PRESSED: 'pressed'\n }),\n\n ComponentProperty: Object.freeze({\n BUTTON: 'button',\n X_AXIS: 'xAxis',\n Y_AXIS: 'yAxis',\n STATE: 'state'\n }),\n\n ComponentType: Object.freeze({\n TRIGGER: 'trigger',\n SQUEEZE: 'squeeze',\n TOUCHPAD: 'touchpad',\n THUMBSTICK: 'thumbstick',\n BUTTON: 'button'\n }),\n\n ButtonTouchThreshold: 0.05,\n\n AxisTouchThreshold: 0.1,\n\n VisualResponseProperty: Object.freeze({\n TRANSFORM: 'transform',\n VISIBILITY: 'visibility'\n })\n};\n\n/**\n * @description Static helper function to fetch a JSON file and turn it into a JS object\n * @param {string} path - Path to JSON file to be fetched\n */\nasync function fetchJsonFile(path) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(response.statusText);\n } else {\n return response.json();\n }\n}\n\nasync function fetchProfilesList(basePath) {\n if (!basePath) {\n throw new Error('No basePath supplied');\n }\n\n const profileListFileName = 'profilesList.json';\n const profilesList = await fetchJsonFile(`${basePath}/${profileListFileName}`);\n return profilesList;\n}\n\nasync function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) {\n if (!xrInputSource) {\n throw new Error('No xrInputSource supplied');\n }\n\n if (!basePath) {\n throw new Error('No basePath supplied');\n }\n\n // Get the list of profiles\n const supportedProfilesList = await fetchProfilesList(basePath);\n\n // Find the relative path to the first requested profile that is recognized\n let match;\n xrInputSource.profiles.some((profileId) => {\n const supportedProfile = supportedProfilesList[profileId];\n if (supportedProfile) {\n match = {\n profileId,\n profilePath: `${basePath}/${supportedProfile.path}`,\n deprecated: !!supportedProfile.deprecated\n };\n }\n return !!match;\n });\n\n if (!match) {\n if (!defaultProfile) {\n throw new Error('No matching profile name found');\n }\n\n const supportedProfile = supportedProfilesList[defaultProfile];\n if (!supportedProfile) {\n throw new Error(`No matching profile name found and default profile \"${defaultProfile}\" missing.`);\n }\n\n match = {\n profileId: defaultProfile,\n profilePath: `${basePath}/${supportedProfile.path}`,\n deprecated: !!supportedProfile.deprecated\n };\n }\n\n const profile = await fetchJsonFile(match.profilePath);\n\n let assetPath;\n if (getAssetPath) {\n let layout;\n if (xrInputSource.handedness === 'any') {\n layout = profile.layouts[Object.keys(profile.layouts)[0]];\n } else {\n layout = profile.layouts[xrInputSource.handedness];\n }\n if (!layout) {\n throw new Error(\n `No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}`\n );\n }\n\n if (layout.assetPath) {\n assetPath = match.profilePath.replace('profile.json', layout.assetPath);\n }\n }\n\n return { profile, assetPath };\n}\n\n/** @constant {Object} */\nconst defaultComponentValues = {\n xAxis: 0,\n yAxis: 0,\n button: 0,\n state: Constants.ComponentState.DEFAULT\n};\n\n/**\n * @description Converts an X, Y coordinate from the range -1 to 1 (as reported by the Gamepad\n * API) to the range 0 to 1 (for interpolation). Also caps the X, Y values to be bounded within\n * a circle. This ensures that thumbsticks are not animated outside the bounds of their physical\n * range of motion and touchpads do not report touch locations off their physical bounds.\n * @param {number} x The original x coordinate in the range -1 to 1\n * @param {number} y The original y coordinate in the range -1 to 1\n */\nfunction normalizeAxes(x = 0, y = 0) {\n let xAxis = x;\n let yAxis = y;\n\n // Determine if the point is outside the bounds of the circle\n // and, if so, place it on the edge of the circle\n const hypotenuse = Math.sqrt((x * x) + (y * y));\n if (hypotenuse > 1) {\n const theta = Math.atan2(y, x);\n xAxis = Math.cos(theta);\n yAxis = Math.sin(theta);\n }\n\n // Scale and move the circle so values are in the interpolation range. The circle's origin moves\n // from (0, 0) to (0.5, 0.5). The circle's radius scales from 1 to be 0.5.\n const result = {\n normalizedXAxis: (xAxis * 0.5) + 0.5,\n normalizedYAxis: (yAxis * 0.5) + 0.5\n };\n return result;\n}\n\n/**\n * Contains the description of how the 3D model should visually respond to a specific user input.\n * This is accomplished by initializing the object with the name of a node in the 3D model and\n * property that need to be modified in response to user input, the name of the nodes representing\n * the allowable range of motion, and the name of the input which triggers the change. In response\n * to the named input changing, this object computes the appropriate weighting to use for\n * interpolating between the range of motion nodes.\n */\nclass VisualResponse {\n constructor(visualResponseDescription) {\n this.componentProperty = visualResponseDescription.componentProperty;\n this.states = visualResponseDescription.states;\n this.valueNodeName = visualResponseDescription.valueNodeName;\n this.valueNodeProperty = visualResponseDescription.valueNodeProperty;\n\n if (this.valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM) {\n this.minNodeName = visualResponseDescription.minNodeName;\n this.maxNodeName = visualResponseDescription.maxNodeName;\n }\n\n // Initializes the response's current value based on default data\n this.value = 0;\n this.updateFromComponent(defaultComponentValues);\n }\n\n /**\n * Computes the visual response's interpolation weight based on component state\n * @param {Object} componentValues - The component from which to update\n * @param {number} xAxis - The reported X axis value of the component\n * @param {number} yAxis - The reported Y axis value of the component\n * @param {number} button - The reported value of the component's button\n * @param {string} state - The component's active state\n */\n updateFromComponent({\n xAxis, yAxis, button, state\n }) {\n const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis);\n switch (this.componentProperty) {\n case Constants.ComponentProperty.X_AXIS:\n this.value = (this.states.includes(state)) ? normalizedXAxis : 0.5;\n break;\n case Constants.ComponentProperty.Y_AXIS:\n this.value = (this.states.includes(state)) ? normalizedYAxis : 0.5;\n break;\n case Constants.ComponentProperty.BUTTON:\n this.value = (this.states.includes(state)) ? button : 0;\n break;\n case Constants.ComponentProperty.STATE:\n if (this.valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY) {\n this.value = (this.states.includes(state));\n } else {\n this.value = this.states.includes(state) ? 1.0 : 0.0;\n }\n break;\n default:\n throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);\n }\n }\n}\n\nclass Component {\n /**\n * @param {Object} componentId - Id of the component\n * @param {Object} componentDescription - Description of the component to be created\n */\n constructor(componentId, componentDescription) {\n if (!componentId\n || !componentDescription\n || !componentDescription.visualResponses\n || !componentDescription.gamepadIndices\n || Object.keys(componentDescription.gamepadIndices).length === 0) {\n throw new Error('Invalid arguments supplied');\n }\n\n this.id = componentId;\n this.type = componentDescription.type;\n this.rootNodeName = componentDescription.rootNodeName;\n this.touchPointNodeName = componentDescription.touchPointNodeName;\n\n // Build all the visual responses for this component\n this.visualResponses = {};\n Object.keys(componentDescription.visualResponses).forEach((responseName) => {\n const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]);\n this.visualResponses[responseName] = visualResponse;\n });\n\n // Set default values\n this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices);\n\n this.values = {\n state: Constants.ComponentState.DEFAULT,\n button: (this.gamepadIndices.button !== undefined) ? 0 : undefined,\n xAxis: (this.gamepadIndices.xAxis !== undefined) ? 0 : undefined,\n yAxis: (this.gamepadIndices.yAxis !== undefined) ? 0 : undefined\n };\n }\n\n get data() {\n const data = { id: this.id, ...this.values };\n return data;\n }\n\n /**\n * @description Poll for updated data based on current gamepad state\n * @param {Object} gamepad - The gamepad object from which the component data should be polled\n */\n updateFromGamepad(gamepad) {\n // Set the state to default before processing other data sources\n this.values.state = Constants.ComponentState.DEFAULT;\n\n // Get and normalize button\n if (this.gamepadIndices.button !== undefined\n && gamepad.buttons.length > this.gamepadIndices.button) {\n const gamepadButton = gamepad.buttons[this.gamepadIndices.button];\n this.values.button = gamepadButton.value;\n this.values.button = (this.values.button < 0) ? 0 : this.values.button;\n this.values.button = (this.values.button > 1) ? 1 : this.values.button;\n\n // Set the state based on the button\n if (gamepadButton.pressed || this.values.button === 1) {\n this.values.state = Constants.ComponentState.PRESSED;\n } else if (gamepadButton.touched || this.values.button > Constants.ButtonTouchThreshold) {\n this.values.state = Constants.ComponentState.TOUCHED;\n }\n }\n\n // Get and normalize x axis value\n if (this.gamepadIndices.xAxis !== undefined\n && gamepad.axes.length > this.gamepadIndices.xAxis) {\n this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis];\n this.values.xAxis = (this.values.xAxis < -1) ? -1 : this.values.xAxis;\n this.values.xAxis = (this.values.xAxis > 1) ? 1 : this.values.xAxis;\n\n // If the state is still default, check if the xAxis makes it touched\n if (this.values.state === Constants.ComponentState.DEFAULT\n && Math.abs(this.values.xAxis) > Constants.AxisTouchThreshold) {\n this.values.state = Constants.ComponentState.TOUCHED;\n }\n }\n\n // Get and normalize Y axis value\n if (this.gamepadIndices.yAxis !== undefined\n && gamepad.axes.length > this.gamepadIndices.yAxis) {\n this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis];\n this.values.yAxis = (this.values.yAxis < -1) ? -1 : this.values.yAxis;\n this.values.yAxis = (this.values.yAxis > 1) ? 1 : this.values.yAxis;\n\n // If the state is still default, check if the yAxis makes it touched\n if (this.values.state === Constants.ComponentState.DEFAULT\n && Math.abs(this.values.yAxis) > Constants.AxisTouchThreshold) {\n this.values.state = Constants.ComponentState.TOUCHED;\n }\n }\n\n // Update the visual response weights based on the current component data\n Object.values(this.visualResponses).forEach((visualResponse) => {\n visualResponse.updateFromComponent(this.values);\n });\n }\n}\n\n/**\n * @description Builds a motion controller with components and visual responses based on the\n * supplied profile description. Data is polled from the xrInputSource's gamepad.\n * @author Nell Waliczek / https://github.com/NellWaliczek\n*/\nclass MotionController {\n /**\n * @param {Object} xrInputSource - The XRInputSource to build the MotionController around\n * @param {Object} profile - The best matched profile description for the supplied xrInputSource\n * @param {Object} assetUrl\n */\n constructor(xrInputSource, profile, assetUrl) {\n if (!xrInputSource) {\n throw new Error('No xrInputSource supplied');\n }\n\n if (!profile) {\n throw new Error('No profile supplied');\n }\n\n this.xrInputSource = xrInputSource;\n this.assetUrl = assetUrl;\n this.id = profile.profileId;\n\n // Build child components as described in the profile description\n this.layoutDescription = profile.layouts[xrInputSource.handedness];\n this.components = {};\n Object.keys(this.layoutDescription.components).forEach((componentId) => {\n const componentDescription = this.layoutDescription.components[componentId];\n this.components[componentId] = new Component(componentId, componentDescription);\n });\n\n // Initialize components based on current gamepad state\n this.updateFromGamepad();\n }\n\n get gripSpace() {\n return this.xrInputSource.gripSpace;\n }\n\n get targetRaySpace() {\n return this.xrInputSource.targetRaySpace;\n }\n\n /**\n * @description Returns a subset of component data for simplified debugging\n */\n get data() {\n const data = [];\n Object.values(this.components).forEach((component) => {\n data.push(component.data);\n });\n return data;\n }\n\n /**\n * @description Poll for updated data based on current gamepad state\n */\n updateFromGamepad() {\n Object.values(this.components).forEach((component) => {\n component.updateFromGamepad(this.xrInputSource.gamepad);\n });\n }\n}\n\nexport { Constants, MotionController, fetchProfile, fetchProfilesList };\n", "import {\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tSphereGeometry,\n} from 'three';\n\nimport { GLTFLoader } from '../loaders/GLTFLoader.js';\n\nimport {\n\tConstants as MotionControllerConstants,\n\tfetchProfile,\n\tMotionController\n} from '../libs/motion-controllers.module.js';\n\nconst DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles';\nconst DEFAULT_PROFILE = 'generic-trigger';\n\nclass XRControllerModel extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\n\t}\n\n\tsetEnvironmentMap( envMap ) {\n\n\t\tif ( this.envMap == envMap ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.envMap = envMap;\n\t\tthis.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = this.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Polls data from the XRInputSource and updates the model's components to match\n\t * the real world data\n\t */\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( ! this.motionController ) return;\n\n\t\t// Cause the MotionController to poll the Gamepad for data\n\t\tthis.motionController.updateFromGamepad();\n\n\t\t// Update the 3D model to reflect the button, thumbstick, and touchpad state\n\t\tObject.values( this.motionController.components ).forEach( ( component ) => {\n\n\t\t\t// Update node data based on the visual responses' current states\n\t\t\tObject.values( component.visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\t\tconst { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse;\n\n\t\t\t\t// Skip if the visual response node is not found. No error is needed,\n\t\t\t\t// because it will have been reported at load time.\n\t\t\t\tif ( ! valueNode ) return;\n\n\t\t\t\t// Calculate the new properties based on the weight supplied\n\t\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY ) {\n\n\t\t\t\t\tvalueNode.visible = value;\n\n\t\t\t\t} else if ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\t\tvalueNode.quaternion.slerpQuaternions(\n\t\t\t\t\t\tminNode.quaternion,\n\t\t\t\t\t\tmaxNode.quaternion,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t\tvalueNode.position.lerpVectors(\n\t\t\t\t\t\tminNode.position,\n\t\t\t\t\t\tmaxNode.position,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Walks the model's tree to find the nodes needed to animate the components and\n * saves them to the motionContoller components for use in the frame loop. When\n * touchpads are found, attaches a touch dot to them.\n */\nfunction findNodes( motionController, scene ) {\n\n\t// Loop through the components and find the nodes needed for each components' visual responses\n\tObject.values( motionController.components ).forEach( ( component ) => {\n\n\t\tconst { type, touchPointNodeName, visualResponses } = component;\n\n\t\tif ( type === MotionControllerConstants.ComponentType.TOUCHPAD ) {\n\n\t\t\tcomponent.touchPointNode = scene.getObjectByName( touchPointNodeName );\n\t\t\tif ( component.touchPointNode ) {\n\n\t\t\t\t// Attach a touch dot to the touchpad.\n\t\t\t\tconst sphereGeometry = new SphereGeometry( 0.001 );\n\t\t\t\tconst material = new MeshBasicMaterial( { color: 0x0000FF } );\n\t\t\t\tconst sphere = new Mesh( sphereGeometry, material );\n\t\t\t\tcomponent.touchPointNode.add( sphere );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( `Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Loop through all the visual responses to be applied to this component\n\t\tObject.values( visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\tconst { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse;\n\n\t\t\t// If animating a transform, find the two nodes to be interpolated between.\n\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\tvisualResponse.minNode = scene.getObjectByName( minNodeName );\n\t\t\t\tvisualResponse.maxNode = scene.getObjectByName( maxNodeName );\n\n\t\t\t\t// If the extents cannot be found, skip this animation\n\t\t\t\tif ( ! visualResponse.minNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${minNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! visualResponse.maxNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${maxNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// If the target node cannot be found, skip this animation\n\t\t\tvisualResponse.valueNode = scene.getObjectByName( valueNodeName );\n\t\t\tif ( ! visualResponse.valueNode ) {\n\n\t\t\t\tconsole.warn( `Could not find ${valueNodeName} in the model` );\n\n\t\t\t}\n\n\t\t} );\n\n\t} );\n\n}\n\nfunction addAssetSceneToControllerModel( controllerModel, scene ) {\n\n\t// Find the nodes needed for animation and cache them on the motionController.\n\tfindNodes( controllerModel.motionController, scene );\n\n\t// Apply any environment map that the mesh already has set.\n\tif ( controllerModel.envMap ) {\n\n\t\tscene.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = controllerModel.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t// Add the glTF scene to the controllerModel.\n\tcontrollerModel.add( scene );\n\n}\n\nclass XRControllerModelFactory {\n\n\tconstructor( gltfLoader = null, onLoad = null ) {\n\n\t\tthis.gltfLoader = gltfLoader;\n\t\tthis.path = DEFAULT_PROFILES_PATH;\n\t\tthis._assetCache = {};\n\t\tthis.onLoad = onLoad;\n\n\t\t// If a GLTFLoader wasn't supplied to the constructor create a new one.\n\t\tif ( ! this.gltfLoader ) {\n\n\t\t\tthis.gltfLoader = new GLTFLoader();\n\n\t\t}\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\n\t\treturn this;\n\n\t}\n\n\tcreateControllerModel( controller ) {\n\n\t\tconst controllerModel = new XRControllerModel();\n\t\tlet scene = null;\n\n\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\tconst xrInputSource = event.data;\n\n\t\t\tif ( xrInputSource.targetRayMode !== 'tracked-pointer' || ! xrInputSource.gamepad ) return;\n\n\t\t\tfetchProfile( xrInputSource, this.path, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => {\n\n\t\t\t\tcontrollerModel.motionController = new MotionController(\n\t\t\t\t\txrInputSource,\n\t\t\t\t\tprofile,\n\t\t\t\t\tassetPath\n\t\t\t\t);\n\n\t\t\t\tconst cachedAsset = this._assetCache[ controllerModel.motionController.assetUrl ];\n\t\t\t\tif ( cachedAsset ) {\n\n\t\t\t\t\tscene = cachedAsset.scene.clone();\n\n\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\tif ( this.onLoad ) this.onLoad( scene );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! this.gltfLoader ) {\n\n\t\t\t\t\t\tthrow new Error( 'GLTFLoader not set.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.gltfLoader.setPath( '' );\n\t\t\t\t\tthis.gltfLoader.load( controllerModel.motionController.assetUrl, ( asset ) => {\n\n\t\t\t\t\t\tthis._assetCache[ controllerModel.motionController.assetUrl ] = asset;\n\n\t\t\t\t\t\tscene = asset.scene.clone();\n\n\t\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\t\tif ( this.onLoad ) this.onLoad( scene );\n\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t() => {\n\n\t\t\t\t\t\tthrow new Error( `Asset ${controllerModel.motionController.assetUrl} missing or malformed.` );\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} ).catch( ( err ) => {\n\n\t\t\t\tconsole.warn( err );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\tcontrollerModel.motionController = null;\n\t\t\tcontrollerModel.remove( scene );\n\t\t\tscene = null;\n\n\t\t} );\n\n\t\treturn controllerModel;\n\n\t}\n\n}\n\nexport { XRControllerModelFactory };\n", "import {\n\tDirectionalLight,\n\tGroup,\n\tLightProbe,\n\tWebGLCubeRenderTarget\n} from 'three';\n\nclass SessionLightProbe {\n\n\tconstructor( xrLight, renderer, lightProbe, environmentEstimation, estimationStartCallback ) {\n\n\t\tthis.xrLight = xrLight;\n\t\tthis.renderer = renderer;\n\t\tthis.lightProbe = lightProbe;\n\t\tthis.xrWebGLBinding = null;\n\t\tthis.estimationStartCallback = estimationStartCallback;\n\t\tthis.frameCallback = this.onXRFrame.bind( this );\n\n\t\tconst session = renderer.xr.getSession();\n\n\t\t// If the XRWebGLBinding class is available then we can also query an\n\t\t// estimated reflection cube map.\n\t\tif ( environmentEstimation && 'XRWebGLBinding' in window ) {\n\n\t\t\t// This is the simplest way I know of to initialize a WebGL cubemap in Three.\n\t\t\tconst cubeRenderTarget = new WebGLCubeRenderTarget( 16 );\n\t\t\txrLight.environment = cubeRenderTarget.texture;\n\n\t\t\tconst gl = renderer.getContext();\n\n\t\t\t// Ensure that we have any extensions needed to use the preferred cube map format.\n\t\t\tswitch ( session.preferredReflectionFormat ) {\n\n\t\t\t\tcase 'srgba8':\n\t\t\t\t\tgl.getExtension( 'EXT_sRGB' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rgba16f':\n\t\t\t\t\tgl.getExtension( 'OES_texture_half_float' );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.xrWebGLBinding = new XRWebGLBinding( session, gl );\n\n\t\t\tthis.lightProbe.addEventListener( 'reflectionchange', () => {\n\n\t\t\t\tthis.updateReflection();\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// Start monitoring the XR animation frame loop to look for lighting\n\t\t// estimation changes.\n\t\tsession.requestAnimationFrame( this.frameCallback );\n\n\t}\n\n\tupdateReflection() {\n\n\t\tconst textureProperties = this.renderer.properties.get( this.xrLight.environment );\n\n\t\tif ( textureProperties ) {\n\n\t\t\tconst cubeMap = this.xrWebGLBinding.getReflectionCubeMap( this.lightProbe );\n\n\t\t\tif ( cubeMap ) {\n\n\t\t\t\ttextureProperties.__webglTexture = cubeMap;\n\n\t\t\t\tthis.xrLight.environment.needsPMREMUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tonXRFrame( time, xrFrame ) {\n\n\t\t// If either this obejct or the XREstimatedLight has been destroyed, stop\n\t\t// running the frame loop.\n\t\tif ( ! this.xrLight ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst session = xrFrame.session;\n\t\tsession.requestAnimationFrame( this.frameCallback );\n\n\t\tconst lightEstimate = xrFrame.getLightEstimate( this.lightProbe );\n\t\tif ( lightEstimate ) {\n\n\t\t\t// We can copy the estimate's spherical harmonics array directly into the light probe.\n\t\t\tthis.xrLight.lightProbe.sh.fromArray( lightEstimate.sphericalHarmonicsCoefficients );\n\t\t\tthis.xrLight.lightProbe.intensity = 1.0;\n\n\t\t\t// For the directional light we have to normalize the color and set the scalar as the\n\t\t\t// intensity, since WebXR can return color values that exceed 1.0.\n\t\t\tconst intensityScalar = Math.max( 1.0,\n\t\t\t\tMath.max( lightEstimate.primaryLightIntensity.x,\n\t\t\t\t\tMath.max( lightEstimate.primaryLightIntensity.y,\n\t\t\t\t\t\tlightEstimate.primaryLightIntensity.z ) ) );\n\n\t\t\tthis.xrLight.directionalLight.color.setRGB(\n\t\t\t\tlightEstimate.primaryLightIntensity.x / intensityScalar,\n\t\t\t\tlightEstimate.primaryLightIntensity.y / intensityScalar,\n\t\t\t\tlightEstimate.primaryLightIntensity.z / intensityScalar );\n\t\t\tthis.xrLight.directionalLight.intensity = intensityScalar;\n\t\t\tthis.xrLight.directionalLight.position.copy( lightEstimate.primaryLightDirection );\n\n\t\t\tif ( this.estimationStartCallback ) {\n\n\t\t\t\tthis.estimationStartCallback();\n\t\t\t\tthis.estimationStartCallback = null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.xrLight = null;\n\t\tthis.renderer = null;\n\t\tthis.lightProbe = null;\n\t\tthis.xrWebGLBinding = null;\n\n\t}\n\n}\n\nexport class XREstimatedLight extends Group {\n\n\tconstructor( renderer, environmentEstimation = true ) {\n\n\t\tsuper();\n\n\t\tthis.lightProbe = new LightProbe();\n\t\tthis.lightProbe.intensity = 0;\n\t\tthis.add( this.lightProbe );\n\n\t\tthis.directionalLight = new DirectionalLight();\n\t\tthis.directionalLight.intensity = 0;\n\t\tthis.add( this.directionalLight );\n\n\t\t// Will be set to a cube map in the SessionLightProbe if environment estimation is\n\t\t// available and requested.\n\t\tthis.environment = null;\n\n\t\tlet sessionLightProbe = null;\n\t\tlet estimationStarted = false;\n\t\trenderer.xr.addEventListener( 'sessionstart', () => {\n\n\t\t\tconst session = renderer.xr.getSession();\n\n\t\t\tif ( 'requestLightProbe' in session ) {\n\n\t\t\t\tsession.requestLightProbe( {\n\n\t\t\t\t\treflectionFormat: session.preferredReflectionFormat\n\n\t\t\t\t} ).then( ( probe ) => {\n\n\t\t\t\t\tsessionLightProbe = new SessionLightProbe( this, renderer, probe, environmentEstimation, () => {\n\n\t\t\t\t\t\testimationStarted = true;\n\n\t\t\t\t\t\t// Fired to indicate that the estimated lighting values are now being updated.\n\t\t\t\t\t\tthis.dispatchEvent( { type: 'estimationstart' } );\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} );\n\n\t\trenderer.xr.addEventListener( 'sessionend', () => {\n\n\t\t\tif ( sessionLightProbe ) {\n\n\t\t\t\tsessionLightProbe.dispose();\n\t\t\t\tsessionLightProbe = null;\n\n\t\t\t}\n\n\t\t\tif ( estimationStarted ) {\n\n\t\t\t\t// Fired to indicate that the estimated lighting values are no longer being updated.\n\t\t\t\tthis.dispatchEvent( { type: 'estimationend' } );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Done inline to provide access to sessionLightProbe.\n\t\tthis.dispose = () => {\n\n\t\t\tif ( sessionLightProbe ) {\n\n\t\t\t\tsessionLightProbe.dispose();\n\t\t\t\tsessionLightProbe = null;\n\n\t\t\t}\n\n\t\t\tthis.remove( this.lightProbe );\n\t\t\tthis.lightProbe = null;\n\n\t\t\tthis.remove( this.directionalLight );\n\t\t\tthis.directionalLight = null;\n\n\t\t\tthis.environment = null;\n\n\t\t};\n\n\t}\n\n}\n", "import {\n\tDynamicDrawUsage,\n\tSphereGeometry,\n\tBoxGeometry,\n\tMeshStandardMaterial,\n\tInstancedMesh,\n\tMatrix4,\n\tVector3\n} from 'three';\n\nconst _matrix = new Matrix4();\nconst _vector = new Vector3();\n\nclass XRHandPrimitiveModel {\n\n\tconstructor( handModel, controller, path, handedness, options ) {\n\n\t\tthis.controller = controller;\n\t\tthis.handModel = handModel;\n\t\tthis.envMap = null;\n\n\t\tlet geometry;\n\n\t\tif ( ! options || ! options.primitive || options.primitive === 'sphere' ) {\n\n\t\t\tgeometry = new SphereGeometry( 1, 10, 10 );\n\n\t\t} else if ( options.primitive === 'box' ) {\n\n\t\t\tgeometry = new BoxGeometry( 1, 1, 1 );\n\n\t\t}\n\n\t\tconst material = new MeshStandardMaterial();\n\n\t\tthis.handMesh = new InstancedMesh( geometry, material, 30 );\n\t\tthis.handMesh.frustumCulled = false;\n\t\tthis.handMesh.instanceMatrix.setUsage( DynamicDrawUsage ); // will be updated every frame\n\t\tthis.handMesh.castShadow = true;\n\t\tthis.handMesh.receiveShadow = true;\n\t\tthis.handModel.add( this.handMesh );\n\n\t\tthis.joints = [\n\t\t\t'wrist',\n\t\t\t'thumb-metacarpal',\n\t\t\t'thumb-phalanx-proximal',\n\t\t\t'thumb-phalanx-distal',\n\t\t\t'thumb-tip',\n\t\t\t'index-finger-metacarpal',\n\t\t\t'index-finger-phalanx-proximal',\n\t\t\t'index-finger-phalanx-intermediate',\n\t\t\t'index-finger-phalanx-distal',\n\t\t\t'index-finger-tip',\n\t\t\t'middle-finger-metacarpal',\n\t\t\t'middle-finger-phalanx-proximal',\n\t\t\t'middle-finger-phalanx-intermediate',\n\t\t\t'middle-finger-phalanx-distal',\n\t\t\t'middle-finger-tip',\n\t\t\t'ring-finger-metacarpal',\n\t\t\t'ring-finger-phalanx-proximal',\n\t\t\t'ring-finger-phalanx-intermediate',\n\t\t\t'ring-finger-phalanx-distal',\n\t\t\t'ring-finger-tip',\n\t\t\t'pinky-finger-metacarpal',\n\t\t\t'pinky-finger-phalanx-proximal',\n\t\t\t'pinky-finger-phalanx-intermediate',\n\t\t\t'pinky-finger-phalanx-distal',\n\t\t\t'pinky-finger-tip'\n\t\t];\n\n\t}\n\n\tupdateMesh() {\n\n\t\tconst defaultRadius = 0.008;\n\t\tconst joints = this.controller.joints;\n\n\t\tlet count = 0;\n\n\t\tfor ( let i = 0; i < this.joints.length; i ++ ) {\n\n\t\t\tconst joint = joints[ this.joints[ i ] ];\n\n\t\t\tif ( joint.visible ) {\n\n\t\t\t\t_vector.setScalar( joint.jointRadius || defaultRadius );\n\t\t\t\t_matrix.compose( joint.position, joint.quaternion, _vector );\n\t\t\t\tthis.handMesh.setMatrixAt( i, _matrix );\n\n\t\t\t\tcount ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.handMesh.count = count;\n\t\tthis.handMesh.instanceMatrix.needsUpdate = true;\n\n\t}\n\n}\n\nexport { XRHandPrimitiveModel };\n", "import {\n\tObject3D\n} from 'three';\n\nimport {\n\tXRHandPrimitiveModel\n} from './XRHandPrimitiveModel.js';\n\nimport {\n\tXRHandMeshModel\n} from './XRHandMeshModel.js';\n\nclass XRHandModel extends Object3D {\n\n\tconstructor( controller ) {\n\n\t\tsuper();\n\n\t\tthis.controller = controller;\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\n\t\tthis.mesh = null;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.motionController ) {\n\n\t\t\tthis.motionController.updateMesh();\n\n\t\t}\n\n\t}\n\n}\n\nclass XRHandModelFactory {\n\n\tconstructor( gltfLoader = null, onLoad = null ) {\n\n\t\tthis.gltfLoader = gltfLoader;\n\t\tthis.path = null;\n\t\tthis.onLoad = onLoad;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\n\t\treturn this;\n\n\t}\n\n\tcreateHandModel( controller, profile ) {\n\n\t\tconst handModel = new XRHandModel( controller );\n\n\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\tconst xrInputSource = event.data;\n\n\t\t\tif ( xrInputSource.hand && ! handModel.motionController ) {\n\n\t\t\t\thandModel.xrInputSource = xrInputSource;\n\n\t\t\t\t// @todo Detect profile if not provided\n\t\t\t\tif ( profile === undefined || profile === 'spheres' ) {\n\n\t\t\t\t\thandModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'sphere' } );\n\n\t\t\t\t} else if ( profile === 'boxes' ) {\n\n\t\t\t\t\thandModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'box' } );\n\n\t\t\t\t} else if ( profile === 'mesh' ) {\n\n\t\t\t\t\thandModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness, this.gltfLoader, this.onLoad );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcontroller.visible = true;\n\n\t\t} );\n\n\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\tcontroller.visible = false;\n\t\t\t// handModel.motionController = null;\n\t\t\t// handModel.remove( scene );\n\t\t\t// scene = null;\n\n\t\t} );\n\n\t\treturn handModel;\n\n\t}\n\n}\n\nexport { XRHandModelFactory };\n", "import {\n\tBoxGeometry,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D\n} from 'three';\n\nclass XRPlanes extends Object3D {\n\n\tconstructor( renderer ) {\n\n\t\tsuper();\n\n\t\tconst matrix = new Matrix4();\n\n\t\tconst currentPlanes = new Map();\n\n\t\tconst xr = renderer.xr;\n\n\t\txr.addEventListener( 'planesdetected', event => {\n\n\t\t\tconst frame = event.data;\n\t\t\tconst planes = frame.detectedPlanes;\n\n\t\t\tconst referenceSpace = xr.getReferenceSpace();\n\n\t\t\tlet planeschanged = false;\n\n\t\t\tfor ( const [ plane, mesh ] of currentPlanes ) {\n\n\t\t\t\tif ( planes.has( plane ) === false ) {\n\n\t\t\t\t\tmesh.geometry.dispose();\n\t\t\t\t\tmesh.material.dispose();\n\t\t\t\t\tthis.remove( mesh );\n\n\t\t\t\t\tcurrentPlanes.delete( plane );\n\n\t\t\t\t\tplaneschanged = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( const plane of planes ) {\n\n\t\t\t\tif ( currentPlanes.has( plane ) === false ) {\n\n\t\t\t\t\tconst pose = frame.getPose( plane.planeSpace, referenceSpace );\n\t\t\t\t\tmatrix.fromArray( pose.transform.matrix );\n\n\t\t\t\t\tconst polygon = plane.polygon;\n\n\t\t\t\t\tlet minX = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tlet maxX = Number.MIN_SAFE_INTEGER;\n\t\t\t\t\tlet minZ = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tlet maxZ = Number.MIN_SAFE_INTEGER;\n\n\t\t\t\t\tfor ( const point of polygon ) {\n\n\t\t\t\t\t\tminX = Math.min( minX, point.x );\n\t\t\t\t\t\tmaxX = Math.max( maxX, point.x );\n\t\t\t\t\t\tminZ = Math.min( minZ, point.z );\n\t\t\t\t\t\tmaxZ = Math.max( maxZ, point.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst width = maxX - minX;\n\t\t\t\t\tconst height = maxZ - minZ;\n\n\t\t\t\t\tconst geometry = new BoxGeometry( width, 0.01, height );\n\t\t\t\t\tconst material = new MeshBasicMaterial( { color: 0xffffff * Math.random() } );\n\n\t\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\t\tmesh.position.setFromMatrixPosition( matrix );\n\t\t\t\t\tmesh.quaternion.setFromRotationMatrix( matrix );\n\t\t\t\t\tthis.add( mesh );\n\n\t\t\t\t\tcurrentPlanes.set( plane, mesh );\n\n\t\t\t\t\tplaneschanged = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( planeschanged ) {\n\n\t\t\t\tthis.dispatchEvent( { type: 'planeschanged' } );\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nexport { XRPlanes };\n"], + "mappings": "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IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,KAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,KAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,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,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC1D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA;AAAA,MAEzD;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAChE;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MACtE;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAErE;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAC1E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAE3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAE3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAE3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAC1E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK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,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,SAAU,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,QAAU,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,SAAW,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,SAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,YAAa,GAAG,UAAY,SAAS,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAa,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,SAAS,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,QAAQ,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa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,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,SAAS,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa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,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,UAAW,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,WAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,SAAW,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,SAAS,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa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,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,QAAQ,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,SAAW,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,UAAU,UAAU,SAAW,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,QAAQ,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,UAAY,GAAG,WAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,UAAW,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,SAAS,OAAO,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,SAAS,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,SAAS,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa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,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,QAAQ,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,QAAQ,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAa,UAAU,UAAW,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,QAAQ,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY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,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,QAAQ,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,UAAW,QAAQ,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,SAAU,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,SAAS,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,SAAU,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,SAAU,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,UAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,QAAS,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,UAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,UAAY,UAAU,UAAU,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,OAAO,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,QAAQ,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,SAAS,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,SAAS,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,MAAM,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,OAAO,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,UAAW,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,QAAQ,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,SAAS,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,QAAQ,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,QAAQ,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,SAAS,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,QAAQ,SAAS,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,QAAQ,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,QAAQ,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU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Cb,CAAE;AAAA,EAEF;AAAA;AAAA,IACU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqNV;AAAA;AAAA,IACU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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,CAAE,CAAE;AACpC,UAAK,EAAG,IAAIA,eAAe,IAAK,CAAE,CAAE;AACpC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AAErC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,CAAE,CAAE;AACpC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AAErC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AAErC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EA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GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,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AAG,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,GAAG,CAAE,KAAK,KAAK,CAAE,GAAG,GAAG,CAAE,KAAK,KAAK,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,GAAG,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,GAAG,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,IAAI,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,CAAE,GAAG,GAAG,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,CAAE,GAAG,GAAG,CAAE,KAAK,GAAG,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,IAAI,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,EAAG,GAAG,IAAI,CAAE,GAAG,KAAK,EAAG,GAAG,IAAI,CAAE,GAAG,KAAK,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,GAAG,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,EAAG,GAAG,IAAI,CAAE,IAAI,IAAI,EAAG,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,CAAE,GAAG,IAAI,CAAE,KAAK,IAAI,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,GAAG,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,GAAG,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,GAAG,GAAI,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,EAAE;AAE9/E,UAAM,QAAQ,CAAC;AAEf,UAAM,SAAS,CAAC;AAChB,UAAM,SAAS,CAAC;AAChB,UAAM,WAAW,CAAC;AAIlB,UAAM,QAAQL,MAAK,MAAO,IAAK;AAE/B,aAAU,IAAI,GAAGG,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,UAAK,MAAO,CAAE,EAAE,MAAO,GAAG,CAAE,MAAM,UAAU,MAAO,CAAE,EAAE,MAAO,GAAG,CAAE,MAAM,UAAW;AAEnF,cAAMC,KAAI,WAAY,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE;AACjD,cAAMC,KAAI,WAAY,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE;AACjD,cAAM,IAAI,WAAY,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE;AACjD,cAAMG,SAAQ,SAAU,MAAO,CAAE,EAAE,MAAO,GAAG,EAAG,CAAE,IAAI;AAEtD,YAAI,IAAI,KAAM,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE,EAAE,YAAY;AAEvD,YAAK,MAAM,IAAK;AAEf,cAAI,KAAM,MAAO,CAAE,EAAE,MAAO,IAAI,EAAG,CAAE,EAAE,YAAY;AAAA,QAEpD;AAEA,cAAM,WAAW,CAAEJ,IAAGC,IAAG,GAAG,IAAK,CAAE,GAAG,WAAY,CAAE,CAAE;AAEtD,cAAM,KAAM,QAAS;AACrB,iBAAUG,MAAM,IAAI;AAAA,MAErB,WAAY,MAAO,CAAE,EAAE,MAAO,GAAG,CAAE,MAAM,UAAW;AAEnD,cAAM,QAAQ,SAAU,MAAO,CAAE,EAAE,MAAO,GAAG,EAAG,CAAE;AAElD,kBAAW,IAAI,GAAG,OAAO,CAAE;AAC3B,kBAAW,IAAI,GAAG,OAAO,CAAE;AAC3B,kBAAW,IAAI,GAAG,OAAO,CAAE;AAC3B,kBAAW,IAAI,GAAG,OAAO,CAAE;AAAA,MAE5B;AAAA,IAED;AAIA,WAAO,cAAc;AAAA,EAEtB;AAED;;;ACzLA,IAAMC,UAAS,IAAI,MAAM;AAEzB,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAEf,SAAK,sBAAsB,CAAC;AAC5B,SAAK,wBAAwB,CAAC;AAAA,EAE/B;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,mBAAoB,KAAK,eAAgB;AAChD,WAAO,KAAM,KAAK,SAAWC,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,uBAAwB,SAAU;AAEjC,SAAK,sBAAsB;AAAA,EAE5B;AAAA,EAEA,6BAA8B,SAAU;AAEvC,SAAK,wBAAwB;AAAA,EAE9B;AAAA,EAEA,MAAOC,OAAO;AAEb,aAAS,YAAaA,OAAM,eAAe,GAAI;AAE9C,YAAM,gBAAgB;AACtB,UAAI,aAAa;AACjB,YAAM,SAAS,cAAc,KAAMA,KAAK;AAExC,UAAK,WAAW,MAAO;AAEtB,qBAAa,OAAQ,CAAE;AAAA,MAExB;AAEA,YAAM,SAAS;AAAA,QACd,UAAU,CAAC;AAAA,QACX,UAAU,CAAC;AAAA,QACX;AAAA,QACA,SAAS;AAAA,MACV;AAEA,YAAM,QAAQ,WAAW,MAAO,YAAa;AAC7C,UAAI;AAEJ,eAAS,0BAA2B,eAAe,qBAAsB;AAExE,cAAMC,YAAW,EAAE,MAAM,cAAe,CAAE,EAAE;AAE5C,YAAKA,UAAS,SAAS,QAAS;AAE/B,UAAAA,UAAS,OAAO,cAAe,CAAE;AACjC,UAAAA,UAAS,YAAY,cAAe,CAAE;AACtC,UAAAA,UAAS,WAAW,cAAe,CAAE;AAAA,QAEtC,OAAO;AAEN,UAAAA,UAAS,OAAO,cAAe,CAAE;AAAA,QAElC;AAEA,YAAKA,UAAS,QAAQ,qBAAsB;AAE3C,UAAAA,UAAS,OAAO,oBAAqBA,UAAS,IAAK;AAAA,QAEpD;AAEA,eAAOA;AAAA,MAER;AAEA,eAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAO;AAEzC,YAAIC,QAAO,MAAO,CAAE;AACpB,QAAAA,QAAOA,MAAK,KAAK;AAEjB,YAAKA,UAAS,GAAK;AAEnB,cAAM,aAAaA,MAAK,MAAO,KAAM;AACrC,cAAM,WAAW,WAAW,MAAM;AAClC,QAAAA,QAAO,WAAW,KAAM,GAAI;AAE5B,gBAAS,UAAW;AAAA,UAEnB,KAAK;AAEJ,mBAAO,SAAS,WAAY,CAAE;AAC9B,mBAAO,UAAU,WAAY,CAAE;AAE/B;AAAA,UAED,KAAK;AAEJ,mBAAO,SAAS,KAAMA,KAAK;AAE3B;AAAA,UAED,KAAK;AAEJ,gBAAK,mBAAmB,QAAY;AAEnC,qBAAO,SAAS,KAAM,cAAe;AAAA,YAEtC;AAEA,6BAAiB,CAAC;AAClB,2BAAe,OAAO,WAAY,CAAE;AACpC,2BAAe,QAAQ,SAAU,WAAY,CAAE,CAAE;AACjD,2BAAe,aAAa,CAAC;AAE7B;AAAA,UAED,KAAK;AAEJ,2BAAe,WAAW,KAAM,0BAA2B,YAAY,MAAM,mBAAoB,CAAE;AAEnG;AAAA,UAED,KAAK;AAEJ,mBAAO,UAAUA;AAEjB;AAAA,UAGD;AAEC,oBAAQ,IAAK,aAAa,UAAU,UAAW;AAAA,QAEjD;AAAA,MAED;AAEA,UAAK,mBAAmB,QAAY;AAEnC,eAAO,SAAS,KAAM,cAAe;AAAA,MAEtC;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,iBAAkBC,IAAG,MAAO;AAEpC,cAAS,MAAO;AAAA,QAEf,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAS,KAAK;AAAA,QAAS,KAAK;AAAA,QAAU,KAAK;AAAA,QAAO,KAAK;AAAA,QACzE,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAS,KAAK;AAAA,QAAS,KAAK;AAAA,QAAU,KAAK;AAAA,QAAS,KAAK;AAE1E,iBAAO,SAAUA,EAAE;AAAA,QAEpB,KAAK;AAAA,QAAS,KAAK;AAAA,QAAU,KAAK;AAAA,QAAW,KAAK;AAEjD,iBAAO,WAAYA,EAAE;AAAA,MAEvB;AAAA,IAED;AAEA,aAAS,kBAAmB,YAAY,QAAS;AAEhD,YAAM,UAAU,CAAC;AAEjB,eAAU,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAO;AAE9C,YAAK,OAAO,MAAM,EAAI,QAAO;AAE7B,YAAK,WAAY,CAAE,EAAE,SAAS,QAAS;AAEtC,gBAAM,OAAO,CAAC;AACd,gBAAMA,KAAI,iBAAkB,OAAO,KAAK,GAAG,WAAY,CAAE,EAAE,SAAU;AAErE,mBAAU,IAAI,GAAG,IAAIA,IAAG,KAAO;AAE9B,gBAAK,OAAO,MAAM,EAAI,QAAO;AAE7B,iBAAK,KAAM,iBAAkB,OAAO,KAAK,GAAG,WAAY,CAAE,EAAE,QAAS,CAAE;AAAA,UAExE;AAEA,kBAAS,WAAY,CAAE,EAAE,IAAK,IAAI;AAAA,QAEnC,OAAO;AAEN,kBAAS,WAAY,CAAE,EAAE,IAAK,IAAI,iBAAkB,OAAO,KAAK,GAAG,WAAY,CAAE,EAAE,IAAK;AAAA,QAEzF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,eAAe;AAEvB,YAAM,SAAS;AAAA,QACb,SAAS,CAAC;AAAA,QACV,UAAU,CAAC;AAAA,QACX,SAAS,CAAC;AAAA,QACV,KAAK,CAAC;AAAA,QACN,eAAe,CAAC;AAAA,QAChB,QAAQ,CAAC;AAAA,QACT,kBAAkB,CAAC;AAAA,MACrB;AAEA,iBAAY,kBAAkB,OAAO,KAAM,MAAM,qBAAsB,GAAI;AAEzE,eAAQ,cAAe,IAAI,CAAC;AAAA,MAE9B;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,qBAAsB,YAAa;AAE3C,YAAM,eAAe,WAAW,IAAK,CAAAF,cAAY;AAEhD,eAAOA,UAAS;AAAA,MAEjB,CAAE;AAEF,eAAS,aAAc,OAAQ;AAE9B,iBAAU,IAAI,GAAGG,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,gBAAMC,QAAO,MAAO,CAAE;AAEtB,cAAK,aAAa,SAAUA,KAAK,EAAI,QAAOA;AAAA,QAE7C;AAEA,eAAO;AAAA,MAER;AAEA,aAAO;AAAA,QACN,OAAO,aAAc,CAAE,KAAK,MAAM,MAAO,CAAE,KAAK;AAAA,QAChD,OAAO,aAAc,CAAE,KAAK,MAAM,MAAO,CAAE,KAAK;AAAA,QAChD,OAAO,aAAc,CAAE,KAAK,MAAM,MAAO,CAAE,KAAK;AAAA,QAChD,QAAQ,aAAc,CAAE,MAAM,SAAU,CAAE;AAAA,QAC1C,QAAQ,aAAc,CAAE,MAAM,SAAU,CAAE;AAAA,QAC1C,QAAQ,aAAc,CAAE,MAAM,SAAU,CAAE;AAAA,QAC1C,OAAO,aAAc,CAAE,KAAK,KAAK,aAAa,IAAK,CAAE;AAAA,QACrD,OAAO,aAAc,CAAE,KAAK,KAAK,aAAa,IAAK,CAAE;AAAA,QACrD,OAAO,aAAc,CAAE,OAAO,eAAe,KAAK,WAAY,CAAE;AAAA,QAChE,OAAO,aAAc,CAAE,SAAS,iBAAiB,KAAK,WAAY,CAAE;AAAA,QACpE,OAAO,aAAc,CAAE,QAAQ,gBAAgB,KAAK,WAAY,CAAE;AAAA,MACnE;AAAA,IAED;AAEA,aAAS,WAAYL,OAAM,QAAS;AAInC,YAAM,SAAS,aAAa;AAE5B,YAAM,cAAc;AACpB,UAAI,MAAM;AAEV,WAAO,UAAU,YAAY,KAAMA,KAAK,OAAQ,MAAO;AAEtD,eAAO,QAAS,CAAE,EAAE,MAAO,KAAM;AAAA,MAElC,OAAO;AAEN,eAAO,CAAE;AAAA,MAEV;AAEA,YAAM,SAAS,IAAI,YAAa,IAAK;AAErC,WAAM,UAAU,IAAI,GAAG,IAAI,OAAO,SAAS,QAAQ,KAAO;AAEzD,cAAM,cAAc,OAAO,SAAU,CAAE;AACvC,cAAM,eAAe,qBAAsB,YAAY,UAAW;AAElE,iBAAU,IAAI,GAAG,IAAI,YAAY,OAAO,KAAO;AAE9C,gBAAM,UAAU,kBAAmB,YAAY,YAAY,MAAO;AAElE,cAAK,CAAE,QAAU,OAAM;AAEvB,wBAAe,QAAQ,YAAY,MAAM,SAAS,YAAa;AAAA,QAEhE;AAAA,MAED;AAEA,aAAO,YAAa,MAAO;AAAA,IAE5B;AAEA,aAAS,YAAa,QAAS;AAE9B,UAAIM,YAAW,IAAI,eAAe;AAIlC,UAAK,OAAO,QAAQ,SAAS,GAAI;AAEhC,QAAAA,UAAS,SAAU,OAAO,OAAQ;AAAA,MAEnC;AAEA,MAAAA,UAAS,aAAc,YAAY,IAAI,uBAAwB,OAAO,UAAU,CAAE,CAAE;AAIpF,UAAK,OAAO,QAAQ,SAAS,GAAI;AAEhC,QAAAA,UAAS,aAAc,UAAU,IAAI,uBAAwB,OAAO,SAAS,CAAE,CAAE;AAAA,MAElF;AAEA,UAAK,OAAO,IAAI,SAAS,GAAI;AAE5B,QAAAA,UAAS,aAAc,MAAM,IAAI,uBAAwB,OAAO,KAAK,CAAE,CAAE;AAAA,MAE1E;AAEA,UAAK,OAAO,OAAO,SAAS,GAAI;AAE/B,QAAAA,UAAS,aAAc,SAAS,IAAI,uBAAwB,OAAO,QAAQ,CAAE,CAAE;AAAA,MAEhF;AAEA,UAAK,OAAO,cAAc,SAAS,KAAK,OAAO,iBAAiB,SAAS,GAAI;AAE5E,QAAAA,YAAWA,UAAS,aAAa;AAEjC,YAAK,OAAO,cAAc,SAAS,EAAI,CAAAA,UAAS,aAAc,MAAM,IAAI,uBAAwB,OAAO,eAAe,CAAE,CAAE;AAC1H,YAAK,OAAO,iBAAiB,SAAS,EAAI,CAAAA,UAAS,aAAc,SAAS,IAAI,uBAAwB,OAAO,kBAAkB,CAAE,CAAE;AAAA,MAEpI;AAIA,iBAAY,kBAAkB,OAAO,KAAM,MAAM,qBAAsB,GAAI;AAE1E,YAAK,OAAQ,cAAe,EAAE,SAAS,GAAI;AAExC,UAAAA,UAAS;AAAA,YACV;AAAA,YACA,IAAI;AAAA,cACD,OAAQ,cAAe;AAAA,cACvB,MAAM,sBAAuB,cAAe,EAAE;AAAA,YACjD;AAAA,UACC;AAAA,QAEH;AAAA,MAED;AAEA,MAAAA,UAAS,sBAAsB;AAE/B,aAAOA;AAAA,IAER;AAEA,aAAS,cAAe,QAAQ,aAAa,SAAS,YAAa;AAElE,UAAK,gBAAgB,UAAW;AAE/B,eAAO,SAAS,KAAM,QAAS,WAAW,KAAM,GAAG,QAAS,WAAW,KAAM,GAAG,QAAS,WAAW,KAAM,CAAE;AAE5G,YAAK,WAAW,WAAW,QAAQ,WAAW,WAAW,QAAQ,WAAW,WAAW,MAAO;AAE7F,iBAAO,QAAQ,KAAM,QAAS,WAAW,MAAO,GAAG,QAAS,WAAW,MAAO,GAAG,QAAS,WAAW,MAAO,CAAE;AAAA,QAE/G;AAEA,YAAK,WAAW,UAAU,QAAQ,WAAW,UAAU,MAAO;AAE7D,iBAAO,IAAI,KAAM,QAAS,WAAW,KAAM,GAAG,QAAS,WAAW,KAAM,CAAE;AAAA,QAE3E;AAEA,YAAK,WAAW,UAAU,QAAQ,WAAW,UAAU,QAAQ,WAAW,UAAU,MAAO;AAE1F,UAAAR,QAAO;AAAA,YACN,QAAS,WAAW,KAAM,IAAI;AAAA,YAC9B,QAAS,WAAW,KAAM,IAAI;AAAA,YAC9B,QAAS,WAAW,KAAM,IAAI;AAAA,UAC/B,EAAE,oBAAoB;AAEtB,iBAAO,OAAO,KAAMA,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAAA,QAElD;AAEA,mBAAY,kBAAkB,OAAO,KAAM,MAAM,qBAAsB,GAAI;AAE1E,qBAAY,mBAAmB,MAAM,sBAAuB,cAAe,GAAI;AAE7E,mBAAQ,cAAe,EAAE,KAAM,QAAS,eAAgB,CAAE;AAAA,UAE5D;AAAA,QAED;AAAA,MAED,WAAY,gBAAgB,QAAS;AAEpC,cAAM,iBAAiB,QAAQ,kBAAkB,QAAQ;AACzD,cAAM,WAAW,QAAQ;AAEzB,YAAK,eAAe,WAAW,GAAI;AAElC,iBAAO,QAAQ,KAAM,eAAgB,CAAE,GAAG,eAAgB,CAAE,GAAG,eAAgB,CAAE,CAAE;AAEnF,cAAK,YAAY,SAAS,WAAW,GAAI;AAExC,mBAAO,cAAc,KAAM,SAAU,CAAE,GAAG,SAAU,CAAE,CAAE;AACxD,mBAAO,cAAc,KAAM,SAAU,CAAE,GAAG,SAAU,CAAE,CAAE;AACxD,mBAAO,cAAc,KAAM,SAAU,CAAE,GAAG,SAAU,CAAE,CAAE;AAAA,UAEzD;AAAA,QAED,WAAY,eAAe,WAAW,GAAI;AAEzC,iBAAO,QAAQ,KAAM,eAAgB,CAAE,GAAG,eAAgB,CAAE,GAAG,eAAgB,CAAE,CAAE;AACnF,iBAAO,QAAQ,KAAM,eAAgB,CAAE,GAAG,eAAgB,CAAE,GAAG,eAAgB,CAAE,CAAE;AAAA,QAEpF;AAIA,YAAK,WAAW,UAAU,QAAQ,WAAW,UAAU,QAAQ,WAAW,UAAU,MAAO;AAE1F,UAAAA,QAAO;AAAA,YACN,QAAS,WAAW,KAAM,IAAI;AAAA,YAC9B,QAAS,WAAW,KAAM,IAAI;AAAA,YAC9B,QAAS,WAAW,KAAM,IAAI;AAAA,UAC/B,EAAE,oBAAoB;AACtB,iBAAO,iBAAiB,KAAMA,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAC3D,iBAAO,iBAAiB,KAAMA,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAC3D,iBAAO,iBAAiB,KAAMA,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAAA,QAE5D;AAAA,MAED;AAAA,IAED;AAEA,aAAS,kBAAmB,IAAI,YAAa;AAE5C,YAAM,UAAU,CAAC;AACjB,UAAI,OAAO;AAEX,eAAU,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAO;AAE9C,cAAMG,YAAW,WAAY,CAAE;AAC/B,cAAM,cAAcA,UAAS;AAE7B,YAAKA,UAAS,SAAS,QAAS;AAE/B,gBAAM,OAAO,CAAC;AAEd,gBAAME,KAAIF,UAAS,YAAY,KAAM,KAAK,IAAK;AAC/C,kBAAQA,UAAS,YAAY;AAE7B,mBAAU,IAAI,GAAG,IAAIE,IAAG,KAAO;AAE9B,iBAAK,KAAM,YAAY,KAAM,KAAK,IAAK,CAAE;AACzC,oBAAQ,YAAY;AAAA,UAErB;AAEA,kBAASF,UAAS,IAAK,IAAI;AAAA,QAE5B,OAAO;AAEN,kBAASA,UAAS,IAAK,IAAI,YAAY,KAAM,KAAK,IAAK;AACvD,kBAAQ,YAAY;AAAA,QAErB;AAAA,MAED;AAEA,aAAO,CAAE,SAAS,IAAK;AAAA,IAExB;AAEA,aAAS,yBAA0B,YAAY,MAAM,eAAgB;AAEpE,eAAS,gBAAiB,UAAU,MAAMM,gBAAgB;AAEzD,gBAAS,MAAO;AAAA,UAGf,KAAK;AAAA,UAAQ,KAAK;AAAQ,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAElD,qBAAO,SAAS,QAAS,EAAG;AAAA,YAE7B,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAS,KAAK;AAAS,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEpD,qBAAO,SAAS,SAAU,EAAG;AAAA,YAE9B,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAS,KAAK;AAAS,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEpD,qBAAO,SAAS,SAAU,IAAIA,cAAc;AAAA,YAE7C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAU,KAAK;AAAU,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEtD,qBAAO,SAAS,UAAW,IAAIA,cAAc;AAAA,YAE9C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAS,KAAK;AAAQ,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEnD,qBAAO,SAAS,SAAU,IAAIA,cAAc;AAAA,YAE7C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAU,KAAK;AAAQ,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEpD,qBAAO,SAAS,UAAW,IAAIA,cAAc;AAAA,YAE9C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAW,KAAK;AAAS,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEtD,qBAAO,SAAS,WAAY,IAAIA,cAAc;AAAA,YAE/C,GAAG,MAAM,EAAE;AAAA,UACX,KAAK;AAAA,UAAW,KAAK;AAAU,mBAAO,EAAE,MAAM,CAAE,OAAQ;AAEvD,qBAAO,SAAS,WAAY,IAAIA,cAAc;AAAA,YAE/C,GAAG,MAAM,EAAE;AAAA,QAEZ;AAAA,MAED;AAEA,eAAU,IAAI,GAAGH,KAAI,WAAW,QAAQ,IAAIA,IAAG,KAAO;AAErD,cAAMH,YAAW,WAAY,CAAE;AAE/B,YAAKA,UAAS,SAAS,QAAS;AAE/B,UAAAA,UAAS,cAAc,gBAAiB,MAAMA,UAAS,WAAW,aAAc;AAChF,UAAAA,UAAS,cAAc,gBAAiB,MAAMA,UAAS,UAAU,aAAc;AAAA,QAEhF,OAAO;AAEN,UAAAA,UAAS,cAAc,gBAAiB,MAAMA,UAAS,MAAM,aAAc;AAAA,QAE5E;AAAA,MAED;AAAA,IAED;AAEA,aAAS,YAAaD,OAAM,QAAS;AAEpC,YAAM,SAAS,aAAa;AAE5B,YAAM,gBAAkB,OAAO,WAAW;AAC1C,YAAM,OAAO,IAAI,SAAUA,OAAM,OAAO,YAAa;AACrD,UAAI,QAAQ,MAAM;AAElB,eAAU,iBAAiB,GAAG,iBAAiB,OAAO,SAAS,QAAQ,kBAAoB;AAE1F,cAAM,cAAc,OAAO,SAAU,cAAe;AACpD,cAAM,aAAa,YAAY;AAC/B,cAAM,eAAe,qBAAsB,UAAW;AAEtD,iCAA0B,YAAY,MAAM,aAAc;AAE1D,iBAAU,sBAAsB,GAAG,sBAAsB,YAAY,OAAO,uBAAyB;AAEpG,mBAAS,kBAAmB,KAAK,UAAW;AAC5C,iBAAO,OAAQ,CAAE;AACjB,gBAAM,UAAU,OAAQ,CAAE;AAE1B,wBAAe,QAAQ,YAAY,MAAM,SAAS,YAAa;AAAA,QAEhE;AAAA,MAED;AAEA,aAAO,YAAa,MAAO;AAAA,IAE5B;AAEA,aAAS,kBAAmB,OAAQ;AAEnC,UAAI,IAAI;AACR,UAAI,OAAO;AAEX,UAAIE,QAAO;AACX,YAAM,QAAQ,CAAC;AAEf,YAAM,YAAY,IAAI,YAAY,EAAE,OAAQ,MAAM,SAAU,GAAG,CAAE,CAAE;AACnE,YAAM,UAAU,WAAW,KAAM,SAAU;AAE3C,SAAG;AAEF,cAAMM,KAAI,OAAO,aAAc,MAAO,GAAK,CAAE;AAE7C,YAAKA,OAAM,QAAQA,OAAM,MAAO;AAE/B,UAAAN,SAAQM;AAAA,QAET,OAAO;AAEN,cAAKN,UAAS,aAAe,QAAO;AACpC,cAAKA,UAAS,IAAK;AAElB,kBAAM,KAAMA,KAAK;AACjB,YAAAA,QAAO;AAAA,UAER;AAAA,QAED;AAAA,MAED,SAAU,QAAQ,IAAI,MAAM;AAG5B,UAAK,YAAY,KAAO;AAExB,aAAO,EAAE,YAAY,MAAM,KAAM,IAAK,IAAI,MAAM,cAAc,EAAE;AAAA,IAEjE;AAIA,QAAI;AACJ,UAAM,QAAQ;AAEd,QAAKF,iBAAgB,aAAc;AAElC,YAAM,QAAQ,IAAI,WAAYA,KAAK;AACnC,YAAM,EAAE,YAAY,aAAa,IAAI,kBAAmB,KAAM;AAC9D,YAAM,SAAS,YAAa,YAAY,YAAa;AAErD,UAAK,OAAO,WAAW,SAAU;AAEhC,cAAMD,QAAO,IAAI,YAAY,EAAE,OAAQ,KAAM;AAE7C,mBAAW,WAAYA,OAAM,MAAO;AAAA,MAErC,OAAO;AAEN,mBAAW,YAAaC,OAAM,MAAO;AAAA,MAEtC;AAAA,IAED,OAAO;AAEN,iBAAW,WAAYA,OAAM,YAAaA,KAAK,CAAE;AAAA,IAElD;AAEA,WAAO;AAAA,EAER;AAED;AAEA,IAAM,cAAN,MAAkB;AAAA,EAEjB,YAAa,KAAM;AAElB,SAAK,MAAM;AACX,SAAK,IAAI;AAAA,EAEV;AAAA,EAEA,QAAQ;AAEP,WAAO,KAAK,KAAK,KAAK,IAAI;AAAA,EAE3B;AAAA,EAEA,OAAO;AAEN,WAAO,KAAK,IAAK,KAAK,GAAK;AAAA,EAE5B;AAED;;;AClvBA,IAAM,YAAN,cAAwB,wBAAwB;AAAA,EAE/C,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAAA,EAEhB;AAAA,EAEA,MAAO,QAAQ,aAAc;AAE5B,UAAM,kBAAkB;AACxB,UAAM,SAAS,IAAI,YAAa,QAAQ,GAAG,eAAgB;AAE3D,UAAM,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAEA,QAAK,OAAQ,CAAE,MAAM,UAAa;AAIjC,aAAO,SAAU,QAAS;AAAA,IAE3B,WAAY,OAAQ,EAAG,MAAM,WAAa;AAIzC,aAAO,SAAU,QAAS;AAAA,IAE3B,OAAO;AAEN,cAAQ,MAAO,sCAAuC;AAAA,IAEvD;AAAA,EAED;AAED;AAEA,SAAS,SAAU,UAAW;AAE7B,QAAM,SAAS,SAAS;AACxB,MAAI,KAAK;AAGT,QAAM,UAAU,OAAQ,EAAG,GAC1B,cAAc,OAAQ,CAAE,GACxBS,UAAS,OAAQ,CAAE,GACnBC,SAAQ,OAAQ,CAAE,GAElB,WAAW,OAAQ,EAAG,GACtB,aAAa,OAAQ,EAAG;AAEzB,UAAS,aAAc;AAAA,IAEtB,KAAK;AACJ,YAAM;AACN,eAAS;AACT;AAAA,IAED,KAAK;AACJ,YAAM;AACN,eAAS;AACT;AAAA,IAED,KAAK;AACJ,YAAM;AACN,eAAS;AACT;AAAA,IAED,KAAK;AACJ,YAAM;AACN,eAAS;AACT;AAAA,IAED;AACC,cAAQ,MAAO,4CAA4C,WAAY;AAAA,EAEzE;AAEA,WAAS,UAAU,KAAK;AACxB,WAAS,MAAM;AACf,WAAS,SAAS;AAClB,WAAS,QAAQA;AACjB,WAAS,SAASD;AAClB,WAAS,cAAc;AACvB,WAAS,aAAa;AACtB,WAAS,YAAe,aAAa;AAErC,SAAO,SAAU,QAAS;AAE3B;AAEA,SAAS,SAAU,UAAW;AAE7B,QAAM,SAAS,SAAS;AAExB,QAAM,eAAe,OAAQ,CAAE,GAC9BA,UAAS,OAAQ,CAAE,GACnBC,SAAQ,OAAQ,CAAE,GAClB,aAAa,OAAQ,CAAE,GACvB,QAAQ,OAAQ,CAAE,GAMlB,eAAe,OAAQ,EAAG,GAE1B,WAAW,OAAQ,EAAG;AAGvB,QAAM,YAAY;AAClB,QAAM,UAAU,IACf,UAAU;AAEX,QAAM,cAAc,QAAQ;AAE5B,MAAI,KAAK;AACT,QAAM,YAAY,eAAe;AAEjC,MAAK,gBAAgB,SAAU;AAE9B,aAAS,YAAY,2BAA2B;AAChD,UAAM;AAAA,EAEP,WAAY,gBAAgB,SAAU;AAErC,aAAS,YAAY,2BAA2B;AAChD,UAAM;AAAA,EAEP,OAAO;AAEN,YAAQ,MAAO,wCAAwC,WAAY;AAAA,EAEpE;AAEA,WAAS,UAAU;AACnB,WAAS,MAAM;AACf,WAAS,SAAS;AAClB,WAAS,QAAQA;AACjB,WAAS,SAASD;AAClB,WAAS,cAAc;AACvB,WAAS,aAAa,aAAa;AAInC,WAAS,YAAe,aAAa;AAErC,SAAO,SAAU,QAAS;AAE3B;AAGA,SAAS,SAAU,UAAW;AAE7B,QAAM,MAAM;AAAA,IACX,SAAS,CAAC;AAAA,IACV,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS;AAAA,IACjB,aAAa,SAAS;AAAA,IACtB,WAAW,SAAS;AAAA,EACrB;AAEA,QAAM,SAAS,SAAS;AAExB,MAAI,aAAa,SAAS,SACzB,WAAW,GACX,YAAY,GACZ,aAAa,GACb,cAAc,GACd,cAAc,GACd,eAAe;AAEhB,QAAM,MAAM,SAAS,KACpB,WAAW,SAAS;AAErB,MAAK,QAAQ,GAAI;AAEhB,iBAAa;AACb,kBAAc;AAAA,EAEf,OAAO;AAEN,iBAAa;AACb,kBAAc;AAAA,EAEf;AAEA,cAAc,aAAa,cAAgB,MAAM;AAEjD,MAAI,QAAQ,SAAS,SAAS,aAAa;AAE3C,MAAI,WAAW;AAEf,SAAQ,WAAW,SAAS,YAAa;AAExC,UAAM,SAAS,SAAS,SAAS,UAChC,UAAU,SAAS,UAAU;AAE9B,kBAAc,SAAS;AACvB,mBAAe,UAAU;AAGzB,QAAK,cAAc,EAAI,eAAc;AACrC,QAAK,eAAe,EAAI,gBAAe;AAEvC,eAAW,cAAc,eAAe;AAExC,aAAU,YAAY,GAAG,YAAY,UAAU,aAAe;AAE7D,YAAM,YAAY,IAAI,WAAY,QAAQ,YAAY,QAAS;AAE/D,YAAM,SAAS;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAEA,UAAI,QAAS,YAAY,SAAS,aAAa,QAAS,IAAI;AAE5D,oBAAc;AAAA,IAEf;AAEA;AAAA,EAED;AAEA,SAAO;AAER;;;AC1MA,IAAM,iBAAiB,MAAO,IAAK,EACjC,KAAM,CAAE,EACR;AAAA,EAAK,CAAE,GAAGE,WACV,KAAK,IAAOA,SAAQ,MAAQ,eAAe,cAAc,GAAI;AAC9D;AAED,IAAM,iBAAN,cAA6B,OAAO;AAAA,EAEnC,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAEf,SAAK,OAAO;AAAA,EAEb;AAAA,EAEA,YAAaA,QAAQ;AAEpB,SAAK,OAAOA;AAEZ,WAAO;AAAA,EAER;AAAA,EAEA,MAAO,QAAQ,QAAS;AAEvB,UAAM,cAAc;AAAA,MACnB,SAAS;AAAA,MACT,oBAAoB;AAAA,MACpB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,IACjB;AACA,UAAM,cAAc,IAAI,YAAY;AAEpC,UAAMC,QAAO,IAAI,SAAU,MAAO;AAElC,QAAI,aAAa;AACjB,UAAM,WAAW,CAAC;AAElB,WAAQ,aAAaA,MAAK,YAAa;AAEtC,YAAM,OAAOA,MAAK,SAAU,UAAW;AAEvC,UAAK,SAAS,KAAO;AAEpB,cAAM,cAAcA,MAAK,SAAU,aAAa,CAAE;AAElD,YACC;AAAA;AAAA,UAEC;AAAA;AAAA,UACA;AAAA;AAAA,UACA;AAAA;AAAA,UACA;AAAA;AAAA,QACD,EAAE,SAAU,WAAY,GACvB;AAED,mBAAS,KAAM;AAAA,YACd,aAAa;AAAA,YACb,SAAS,CAAE,MAAM,WAAY;AAAA,YAC7B,eAAe,aAAa;AAAA,UAC7B,CAAE;AAEF,wBAAc;AAAA,QAEf,OAAO;AAEN,mBAAU,SAAS,SAAS,CAAE,EAAE,QAAQ,KAAM,MAAM,WAAY;AAEhE,wBAAc;AAAA,QAEf;AAAA,MAED,OAAO;AAEN,iBAAU,SAAS,SAAS,CAAE,EAAE,QAAQ,KAAM,IAAK;AAEnD;AAAA,MAED;AAAA,IAED;AAEA,QAAI,cAAc;AAElB,aAAU,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAO;AAE5C,YAAM,EAAE,aAAa,SAAS,cAAc,IAAI,SAAU,CAAE;AAE5D,UAAK,gBAAgB,KAAO;AAAA,MAE5B,WAAY,gBAAgB,KAAO;AAIlC,aAAK;AAAA,UACJ,YAAY,OAAQ,IAAI,WAAY,OAAQ,CAAE;AAAA,UAC9C;AAAA,QACD;AAAA,MAED,WAAY,gBAAgB,KAAO;AAIlC,cAAM,cAAc,IAAI;AAAA,UACvB,IAAI,WAAY,QAAQ,MAAO,CAAE,CAAE,EAAE;AAAA,QACtC;AACA,cAAM,gBAAgB,YAAY,UAAW,GAAG,KAAM;AAEtD,YAAK,kBAAkB,YAAa;AAuBnC,gBAAM,kBAAkB,YAAY,UAAW,CAAE,MAAM;AACvD,gBAAM,iBAAiB;AAIvB,gBAAM,mBAAmB,YAAY;AAAA,YACpC;AAAA,YACA;AAAA,UACD;AACA,gBAAM,qBAAqB,YAAY;AAAA,YACtC,iBAAiB;AAAA,YACjB;AAAA,UACD;AAGA,gBAAM,mBAAmB,YAAY;AAAA,YACpC,iBAAiB;AAAA,YACjB;AAAA,UACD;AACA,gBAAM,qBACL,YAAY,UAAW,iBAAiB,IAAI,eAAgB,IAC5D,gBACA;AAED,yBAAe,IAAI;AAAA,YAClBA,MAAK;AAAA,YACL;AAAA,YACA;AAAA,UACD;AAEA,yBAAe,IAAI;AAAA,YAClBA,MAAK;AAAA,YACL;AAAA,YACA;AAAA,UACD;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAGA,QAAK,CAAE,YAAY,SAAU;AAE5B,YAAM,IAAI,MAAO,kDAAmD;AAAA,IAErE;AAEA,QAAK,gBAAgB,cAAe;AAEnC,WAAK;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAE,WAAWC,QAAOC,YAAY;AAE/B,iBAAQ;AAAA,YACP,OAAAD;AAAA,YACA,QAAAC;AAAA,YACA,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM,KAAK;AAAA,UACZ,CAAE;AAAA,QAEH;AAAA,QACA,CAAE,UAAW;AAEZ,gBAAM,IAAI,MAAO,KAAM;AAAA,QAExB;AAAA,MACD;AAAA,IAED,OAAO;AAEN,YAAM,IAAI,MAAO,uDAAwD;AAAA,IAE1E;AAAA,EAED;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,UAAU,IAAI;AAAA,MACnB,KAAK,SAAS,gBAAgB,IAAI,YAAY,IAAI,IAAI,aAAa;AAAA,MACnE;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,YAAQ,kBAAkB;AAC1B,YAAQ,QAAQ;AAEhB,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,mBAAoB,KAAK,eAAgB;AAChD,WAAO,KAAM,KAAK,CAAE,WAAY;AAE/B,UAAI;AAEH,aAAK;AAAA,UACJ;AAAA,UACA,CAAE,YAAa;AAEd,oBAAQ,QAAQ;AAAA,cACf,MAAM,QAAQ;AAAA,cACd,OAAO,QAAQ;AAAA,cACf,QAAQ,QAAQ;AAAA,YACjB;AACA,oBAAQ,cAAc;AAEtB,gBAAK,OAAS,QAAQ,SAAS,OAAQ;AAAA,UAExC;AAAA,QACD;AAAA,MAED,SAAU,OAAQ;AAEjB,YAAK,QAAU,SAAS,KAAM;AAE9B,gBAAQ,MAAO,KAAM;AAAA,MAEtB;AAAA,IAED,GAAG,YAAY,OAAQ;AAEvB,WAAO;AAAA,EAER;AAAA,EAEA,kBAAmB,eAAe,aAAc;AAE/C,UAAM,YAAY,IAAI,UAAU;AAEhC,UAAM,SAAS,UAAU;AAAA,MACxB,cAAc;AAAA,QACb,cAAc,QAAS,GAAI;AAAA,QAC3B,cAAc,YAAa,GAAI,IAAI;AAAA,MACpC;AAAA,MACA;AAAA,IACD;AAGA,UAAM,CAAE,yBAA0B,IAAI,OAAO;AAAA,MAC5C;AAAA,IACD;AAEA,QAAK,2BAA4B;AAAA,IAEjC,OAAO;AAIN,YAAM,CAAE,WAAY,IAAI,OAAO,qBAAsB,iBAAkB;AAEvE,kBAAY,UAAU,YAAY,aAAc,eAAgB;AAChE,kBAAY,qBACX,YAAY,aAAc,0BAA2B,MAAM;AAC5D,kBAAY,aAAa;AAAA,QACxB,YAAY,aAAc,kBAAmB,KAAK;AAAA,MACnD;AACA,kBAAY,aAAa;AAAA,QACxB,YAAY,aAAc,kBAAmB,KAAK;AAAA,MACnD;AACA,kBAAY,QAAQ;AAAA,QACnB,YAAY,aAAc,aAAc,KAAK;AAAA,MAC9C;AACA,kBAAY,YAAY;AAAA,QACvB,YAAY,aAAc,iBAAkB,KAAM,IAAI;AAAA,MACvD;AACA,kBAAY,YAAY;AAAA,QACvB,YAAY,aAAc,iBAAkB,KAAM,IAAI;AAAA,MACvD;AACA,kBAAY,iBAAiB;AAAA,QAC5B,YAAY,aAAc,sBAAuB,KAAK;AAAA,MACvD;AACA,kBAAY,iBAAiB;AAAA,QAC5B,YAAY,aAAc,sBAAuB,KAAK;AAAA,MACvD;AAAA,IAED;AAAA,EAED;AAAA,EAEA,cAAeH,QAAQ;AAEtB,QAAKA,SAAQ,MAAM,SAAU;AAE5B,aAASA,SAAQ,MAAQ;AAAA,IAE1B;AAEA,QAAKA,SAAQ,MAAO;AAEnB,aAAO,eAAgB,CAAE,CAAEA,MAAM;AAAA,IAElC;AAEA,WAAO,KAAK,IAAOA,SAAQ,MAAQ,eAAe,cAAc,GAAI;AAAA,EAErE;AAAA,EAEA,mBACC,aACA,WACA,eACA,WACA,SACC;AAED,UAAM,yBAAyB,CAAE,WAChC,IAAI,QAAS,CAAE,SAASI,YAAY;AAEnC,YAAM,cAAc,SAAS,cAAe,KAAM;AAElD,kBAAY,SAAS,MAAM;AAE1B,cAAM,QAAQ;AAAA,UACb,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,UACpB,QAAQ;AAAA,QACT;AAEA,YAAI,gBAAiB,YAAY,GAAI;AAErC,gBAAS,KAAM;AAAA,MAEhB;AAEA,kBAAY,UAAU,MAAM;AAE3B,YAAI,gBAAiB,YAAY,GAAI;AAErC,QAAAA,QAAO;AAAA,MAER;AAEA,kBAAY,MAAM,IAAI;AAAA,QACrB,IAAI,KAAM,CAAE,MAAO,GAAG,EAAE,MAAM,aAAa,CAAE;AAAA,MAC9C;AAAA,IAED,CAAE;AAEH,YAAQ,IAAK;AAAA,MACZ,uBAAwB,SAAU;AAAA,MAClC,uBAAwB,aAAc;AAAA,IACvC,CAAE,EACA,KAAM,CAAE,CAAE,UAAU,YAAa,MAAO;AAExC,YAAM,iBAAiB,SAAS,QAAQ,SAAS;AACjD,YAAM,qBAAqB,aAAa,QAAQ,aAAa;AAE7D,UAAK,mBAAmB,oBAAqB;AAE5C;AAAA,UACC;AAAA,QACD;AAEA;AAAA,MAED;AAEA,YAAM,SAAS,SAAS,cAAe,QAAS;AAChD,YAAM,MAAM,OAAO,WAAY,MAAM;AAAA,QACpC,oBAAoB;AAAA,QACpB,YAAY;AAAA,MACb,CAAE;AAEF,aAAO,QAAQ,SAAS;AACxB,aAAO,SAAS,SAAS;AAGzB,UAAI;AAAA,QACH,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,MACV;AACA,YAAM,mBAAmB,IAAI;AAAA,QAC5B;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,QACT,EAAE,YAAY,OAAO;AAAA,MACtB;AAEA,UAAI,UAAW,SAAS,QAAQ,GAAG,CAAE;AACrC,YAAM,eAAe,IAAI;AAAA,QACxB;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,QACT,EAAE,YAAY,OAAO;AAAA,MACtB;AAGA,UAAI;AAEJ,UAAK,KAAK,SAAS,eAAgB;AAElC,oBAAY,IAAI,YAAa,aAAa,KAAK,MAAO,EAAE,KAAM,KAAM;AAAA,MAErE,OAAO;AAEN,oBAAY,IAAI,aAAc,aAAa,KAAK,MAAO,EAAE,KAAM,GAAI;AAAA,MAEpE;AAEA,YAAM,kBAAkB,KAAK;AAAA,QAC5B,KAAK;AAAA;AAAA,UAEJ;AAAA,UACA,YAAY;AAAA,QACb;AAAA,MACD;AACA,YAAM,yBACH,KAAK,KAAM,eAAgB,IAAI,YAAY,mBAC3C,YAAY,iBAAiB,YAAY;AAC5C,YAAM,eAAe,KAAK;AAAA,QACzB,KAAK,IAAK,uBAAuB,CAAI;AAAA,QACrC;AAAA,MACD;AACA,YAAM,cAAc,YAAY,UAAU;AAE1C,eACK,aAAa,GACjB,aAAa,aAAa,KAAK,QAC/B,cAAc,GACb;AAED,cAAMC,KAAM,aAAa,IAAM,SAAS;AACxC,cAAMC,KAAI,KAAK,MAAO,aAAa,IAAI,SAAS,KAAM;AAEtD,iBAAU,eAAe,GAAG,eAAe,GAAG,gBAAkB;AAE/D,gBAAM,WAAW,aAAa,KAAM,aAAa,YAAa;AAE9D,gBAAM,gBAAiBA,KAAI,SAAS,QAAQD,MAAM,IAAI;AACtD,gBAAM,eAAe,iBAAiB,KAAM,YAAa,IAAI;AAG7D,gBAAM,cAAc,cACjB,eACA,KAAK,IAAK,cAAc,IAAM,YAAY,KAAM;AAEnD,gBAAM,WACL,YAAY,cAAe,IAAM,eACjC,YAAY,aAAa;AAE1B,gBAAM,YACH,WAAW,YAAY,cACtB,WAAW,iBAAiB,IAC3B,IACA,KAAK,IAAK,GAAG,WAAW,YAAa,KACzC,YAAY;AAEb,gBAAM,iBAAiB,KAAK;AAAA,YAC3B,KAAK,IAAK,KAAK,cAAe,QAAS,GAAG,CAAE;AAAA,YAC5C;AAAA,UACD;AAEA,oBAAW,aAAa,YAAa,IACpC,KAAK,SAAS,gBACX,UAAU,YAAa,cAAe,IACtC;AAAA,QAEL;AAAA,MAED;AAEA,gBAAW,WAAW,SAAS,OAAO,SAAS,MAAO;AAAA,IAEvD,CAAE,EACD,MAAO,MAAM;AAEb,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAAA,IAED,CAAE;AAAA,EAEJ;AAED;;;AC3jBA,IAAM,aAAN,cAAyB,kBAAkB;AAAA,EAE1C,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAEf,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAEjB;AAAA,EAEA,YAAaE,QAAQ;AAEpB,SAAK,OAAOA;AACZ,WAAO;AAAA,EAER;AAAA,EAEA,YAAaA,QAAQ;AAEpB,SAAK,WAAWA;AAChB,WAAO;AAAA,EAER;AAAA,EAEA,YAAa,MAAM,QAAQ,YAAY,SAAU;AAEhD,UAAM,UAAU,IAAI,YAAY;AAEhC,aAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,cAAQ,OAAQ,CAAE,IAAI;AAAA,IAEvB;AAEA,QAAI,SAAS;AAEb,UAAM,QAAQ;AAEd,aAAS,YAAa,GAAI;AAEzB,YAAM,KAAM,KAAM,CAAE,GAAG,SAAW,OAAQ;AAEzC,gBAAQ,OAAQ,CAAE,IAAI;AAEtB;AAEA,YAAK,WAAW,GAAI;AAEnB,kBAAQ,cAAc;AAEtB,cAAK,OAAS,QAAQ,OAAQ;AAAA,QAE/B;AAAA,MAED,GAAG,QAAW,OAAQ;AAAA,IAEvB;AAEA,aAAU,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAG,GAAI;AAExC,kBAAa,CAAE;AAAA,IAEhB;AAEA,YAAQ,OAAO,KAAK;AACpB,YAAQ,SAAS;AACjB,YAAQ,YAAY;AACpB,YAAQ,kBAAkB;AAE1B,WAAO;AAAA,EAER;AAAA,EAEA,iBAAkB,MAAM,YAAa;AAEpC,WAAO,IAAI,QAAS,CAAE,SAASC,YAAY;AAE1C,WAAK,YAAa,MAAM,SAAS,YAAYA,OAAO;AAAA,IAErD,CAAE;AAAA,EAEH;AAAA,EAEA,MAAO,QAAS;AAEf,UAAM,MAAM,KAAK,OAAQ,MAAO;AAChC,UAAM,OAAO,KAAK,QAAS,GAAI,EAAG,CAAE;AAEpC,UAAMC,QAAO,IAAI,WAAY,IAAK;AAClC,UAAMC,QAAO,IAAI,QAAQ,IAAI,SAAS;AAEtC,UAAM,SAAW,KAAK,SAAS,gBAAkB,IAAI,YAAaA,KAAK,IAAI,IAAI,aAAcA,KAAK;AAIlG,aAAU,IAAI,GAAG,IAAID,MAAK,QAAQ,KAAK,GAAI;AAE1C,YAAM,IAAIA,MAAM,IAAI,CAAE,IAAI;AAC1B,YAAME,KAAIF,MAAM,IAAI,CAAE,IAAI;AAC1B,YAAMG,KAAIH,MAAM,IAAI,CAAE,IAAI;AAC1B,YAAMI,KAAIJ,MAAM,IAAI,CAAE,IAAI;AAE1B,UAAK,KAAK,SAAS,eAAgB;AAElC,eAAQ,IAAI,CAAE,IAAI,UAAU,YAAa,KAAK,IAAK,IAAII,KAAI,KAAK,UAAU,KAAM,CAAE;AAClF,eAAQ,IAAI,CAAE,IAAI,UAAU,YAAa,KAAK,IAAKF,KAAIE,KAAI,KAAK,UAAU,KAAM,CAAE;AAClF,eAAQ,IAAI,CAAE,IAAI,UAAU,YAAa,KAAK,IAAKD,KAAIC,KAAI,KAAK,UAAU,KAAM,CAAE;AAClF,eAAQ,IAAI,CAAE,IAAI,UAAU,YAAa,CAAE;AAAA,MAE5C,OAAO;AAEN,eAAQ,IAAI,CAAE,IAAI,IAAIA,KAAI,KAAK;AAC/B,eAAQ,IAAI,CAAE,IAAIF,KAAIE,KAAI,KAAK;AAC/B,eAAQ,IAAI,CAAE,IAAID,KAAIC,KAAI,KAAK;AAC/B,eAAQ,IAAI,CAAE,IAAI;AAAA,MAEnB;AAAA,IAED;AAEA,WAAO;AAAA,MACN,OAAO,IAAI;AAAA,MACX,QAAQ,IAAI;AAAA,MACZ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,KAAK;AAAA,MACX,OAAO;AAAA,IACR;AAAA,EAED;AAED;AAIA,IAAI,OAAO,CAAC;AAEZ,KAAK,UAAU,SAAW,KAAM;AAE/B,MAAI,IAAI,IAAI,OAAO,IAAI,IAAI;AAC3B,MAAK,IAAI,KAAK,QAAQ,KAAO,QAAO,CAAE,KAAK,QAAQ,YAAa,IAAI,MAAM,GAAG,GAAG,GAAI,EAAE,MAAO;AAE7F,MAAI,OAAO,CAAC;AACZ,MAAK,IAAI,OAAQ,CAAE,EAAE,QAAQ,KAAO,KAAI,OAAQ,CAAE,EAAE,OAAO,IAAI;AAE/D,MAAI,MAAM,IAAI,IAAI,GAAG,MAAM,IAAI,WAAY,GAAI,GAAG,QAAQ,IAAI,WAAY,GAAI,GAAG,OAAO,IAAI,WAAY,GAAI;AAC5G,WAAU,IAAI,GAAG,IAAI,IAAI,OAAO,QAAQ,KAAO;AAE9C,QAAI,MAAM,IAAI,OAAQ,CAAE;AACxB,QAAI,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK;AACzE,QAAI,QAAQ,KAAK,QAAQ,YAAa,IAAI,MAAM,IAAI,IAAI,GAAI;AAE5D,QAAK,KAAK,EAAI,UAAU,IAAI,GAAG,IAAI,KAAK,IAAO,MAAM,CAAE,IAAI,IAAK,CAAE;AAElE,QAAK,IAAI,SAAS,EAAI,MAAK,UAAW,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAE;AAAA,aAChE,IAAI,SAAS,EAAI,MAAK,UAAW,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAE;AAE/E,SAAK,KAAM,IAAI,OAAO,MAAO,CAAE,CAAE;AAEjC,QAAK,IAAI,WAAW,EAAI,MAAK,UAAW,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAE;AAAA,aAClE,IAAI,WAAW,EAAI,UAAU,IAAI,GAAG,IAAI,KAAK,IAAO,KAAK,CAAE,IAAI,KAAM,CAAE;AAAA,EAElF;AAEA,SAAO;AAER;AAEA,KAAK,QAAQ,cAAc,SAAWJ,OAAM,GAAG,GAAG,KAAM;AAEvD,MAAI,OAAO,IAAI,GAAG,MAAM,KAAK,OAAO,QAAS,GAAI;AACjD,MAAI,MAAM,KAAK,KAAM,IAAI,MAAM,CAAE;AAEjC,MAAI,KAAK,IAAI,WAAY,OAAO,CAAE,GAAG,OAAO,IAAI,YAAa,GAAG,MAAO;AACvE,MAAI,QAAQ,IAAI,OAAO,QAAQ,IAAI;AACnC,MAAI,KAAK,KAAK,KAAK;AAEnB,MAAK,SAAS,GAAI;AAEjB,QAAI,QAAQ,QAAQ;AACpB,QAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,OAAO,KAAK,GAAI;AAEtD,SAAI,CAAE,IAAIA,MAAM,CAAE;AAAG,SAAI,IAAI,CAAE,IAAIA,MAAM,IAAI,CAAE;AAAG,SAAI,IAAI,CAAE,IAAIA,MAAM,IAAI,CAAE;AAAG,SAAI,IAAI,CAAE,IAAIA,MAAM,IAAI,CAAE;AAAA,IAE1G;AAEA,QAAK,SAAS,GAAK,UAAU,IAAI,GAAG,IAAI,OAAO,KAAO;AAErD,SAAI,CAAE,IAAIA,MAAM,KAAK,CAAE;AAAA,IAExB;AAAA,EAED,WAAY,SAAS,GAAI;AAExB,QAAI,KAAK,IAAI,KAAM,MAAO;AAC1B,QAAK,MAAM,MAAO;AAEjB,UAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEnD,YAAI,KAAK,IAAI;AAAG,aAAM,CAAE,IAAM,OAAO,KAASA,MAAM,KAAK,CAAE,KAAK,KAASA,MAAM,KAAK,CAAE,KAAK,IAAMA,MAAM,EAAG;AAAA,MAE3G;AAEA,UAAK,SAAS,GAAK,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEpD,YAAI,KAAK,IAAI;AAAG,aAAM,CAAE,IAAM,OAAO,KAASA,MAAM,KAAK,CAAE,KAAK,KAASA,MAAM,KAAK,CAAE,KAAK,IAAMA,MAAM,EAAG;AAAA,MAE3G;AAAA,IAED,OAAO;AAEN,UAAI,KAAK,GAAI,CAAE,GAAG,KAAK,GAAI,CAAE,GAAG,KAAK,GAAI,CAAE;AAC3C,UAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEnD,YAAI,KAAK,KAAK,GAAG,KAAK,IAAI;AAAG,aAAM,CAAE,IAAM,OAAO,KAASA,MAAM,KAAK,CAAE,KAAK,KAASA,MAAM,KAAK,CAAE,KAAK,IAAMA,MAAM,EAAG;AACvH,YAAKA,MAAM,EAAG,KAAK,MAAMA,MAAM,KAAK,CAAE,KAAK,MAAMA,MAAM,KAAK,CAAE,KAAK,GAAK,IAAI,KAAK,CAAE,IAAI;AAAA,MAExF;AAEA,UAAK,SAAS,GAAK,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEpD,YAAI,KAAK,KAAK,GAAG,KAAK,IAAI;AAAG,aAAM,CAAE,IAAM,OAAO,KAASA,MAAM,KAAK,CAAE,KAAK,KAASA,MAAM,KAAK,CAAE,KAAK,IAAMA,MAAM,EAAG;AACvH,YAAK,GAAIA,OAAM,EAAG,KAAK,MAAM,GAAIA,OAAM,KAAK,CAAE,KAAK,MAAM,GAAIA,OAAM,KAAK,CAAE,KAAK,GAAK,IAAI,KAAK,CAAE,IAAI;AAAA,MAEpG;AAAA,IAED;AAAA,EAED,WAAY,SAAS,GAAI;AAExB,QAAIK,KAAI,IAAI,KAAM,MAAO,GAAG,KAAK,IAAI,KAAM,MAAO,GAAG,KAAK,KAAK,GAAG,SAAS;AAE3E,QAAK,SAAS,EAAI,UAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEhD,UAAI,KAAKA,KAAI,KAAK,KAAKA,KAAI;AAC3B,eAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,YAAI,KAAO,KAAK,KAAO,GAAG,IAAQN,MAAM,MAAO,KAAK,EAAI,KAAO,MAAQ,IAAI,MAAO,KAAU,GAAK,KAAK,IAAI;AAAG,WAAI,EAAG,IAAIK,GAAG,EAAG;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAM,IAAI,KAAO,GAAI,CAAE,IAAI;AAAA,MAEhO;AAAA,IAED;AAEA,QAAK,SAAS,EAAI,UAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEhD,UAAI,KAAKA,KAAI,KAAK,KAAKA,KAAI;AAC3B,eAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,YAAI,KAAO,KAAK,KAAO,GAAG,IAAQN,MAAM,MAAO,KAAK,EAAI,KAAO,MAAQ,IAAI,MAAO,KAAU,GAAK,KAAK,IAAI;AAAG,WAAI,EAAG,IAAIK,GAAG,EAAG;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAM,IAAI,KAAO,GAAI,CAAE,IAAI;AAAA,MAEhO;AAAA,IAED;AAEA,QAAK,SAAS,EAAI,UAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEhD,UAAI,KAAKA,KAAI,KAAK,KAAKA,KAAI;AAC3B,eAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,YAAI,KAAO,KAAK,KAAO,GAAG,IAAQN,MAAM,MAAO,KAAK,EAAI,KAAO,MAAQ,IAAI,MAAO,KAAU,IAAM,KAAK,IAAI;AAAG,WAAI,EAAG,IAAIK,GAAG,EAAG;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAM,IAAI,KAAO,GAAI,CAAE,IAAI;AAAA,MAEjO;AAAA,IAED;AAEA,QAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEnD,UAAI,KAAK,KAAK,GAAG,IAAIL,MAAM,CAAE,GAAG,KAAK,IAAI;AAAG,SAAI,EAAG,IAAIK,GAAG,EAAG;AAAG,SAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,SAAI,KAAK,CAAE,IAAIA,GAAG,KAAK,CAAE;AAAG,SAAI,KAAK,CAAE,IAAM,IAAI,KAAO,GAAI,CAAE,IAAI;AAAA,IAE/J;AAAA,EAED,WAAY,SAAS,GAAI;AAExB,QAAK,SAAS,EAAI,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEnD,UAAI,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAKL,MAAM,EAAG;AAAG,SAAI,EAAG,IAAI;AAAI,SAAI,KAAK,CAAE,IAAI;AAAI,SAAI,KAAK,CAAE,IAAI;AAAI,SAAI,KAAK,CAAE,IAAIA,MAAM,KAAK,CAAE;AAAA,IAEjI;AAEA,QAAK,SAAS,GAAK,UAAU,IAAI,GAAG,IAAI,MAAM,KAAO;AAEpD,UAAI,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAKA,MAAM,EAAG;AAAG,SAAI,EAAG,IAAI;AAAI,SAAI,KAAK,CAAE,IAAI;AAAI,SAAI,KAAK,CAAE,IAAI;AAAI,SAAI,KAAK,CAAE,IAAIA,MAAM,KAAK,CAAE;AAAA,IAEjI;AAAA,EAED,WAAY,SAAS,GAAI;AAExB,QAAI,KAAK,IAAI,KAAM,MAAO,IAAI,IAAI,KAAM,MAAO,IAAI;AACnD,aAAUM,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAE9B,UAAI,MAAMA,KAAI,KAAK,KAAKA,KAAI;AAC5B,UAAK,SAAS,EAAI,UAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEhD,YAAI,KAAK,OAAUP,MAAM,OAAQO,OAAM,EAAI,MAAQ,KAAMA,KAAI,KAAU,IAAK,KAAO,MAAM,KAAK,MAAQ,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAE7K;AAAA,eACU,SAAS,EAAI,UAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAErD,YAAI,KAAK,MAASP,MAAM,OAAQO,OAAM,EAAI,MAAQ,MAAQA,KAAI,MAAO,KAAU,IAAK,KAAO,MAAM,KAAK,KAAO,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAEpL;AAAA,eACU,SAAS,EAAI,UAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAErD,YAAI,KAAK,MAASP,MAAM,OAAQO,OAAM,EAAI,MAAQ,MAAQA,KAAI,MAAO,KAAU,KAAM,KAAO,MAAM,KAAK,KAAO,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAErL;AAAA,eACU,SAAS,EAAI,UAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAErD,YAAI,KAAKP,MAAM,MAAMO,EAAE,GAAG,KAAO,MAAM,KAAO,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAErH;AAAA,eACU,SAAS,GAAK,UAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAEtD,YAAI,KAAKP,MAAM,OAAQO,MAAK,EAAI,GAAG,KAAO,GAAIP,OAAM,OAAQO,MAAK,EAAI,KAAK,KAAO,IAAI;AAAK,aAAM,KAAKA,EAAE,IAAM,MAAM,KAAS,MAAM,KAAS,MAAM,IAAM;AAAA,MAExJ;AAAA,IAED;AAAA,EAED;AAGA,SAAO;AAER;AAIA,KAAK,SAAS,SAAW,MAAO;AAE/B,MAAIP,QAAO,IAAI,WAAY,IAAK,GAAG,SAAS,GAAG,MAAM,KAAK,MAAM,MAAM,IAAI,YAAY,MAAM,IAAI;AAChG,MAAI,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE;AACjC,MAAI,KAAK,IAAI,WAAYA,MAAK,MAAO,GAAG,OAAO;AAC/C,MAAIQ,KAAI,OAAO;AACf,MAAIC,OAAM,MAAM;AAEhB,MAAI,OAAO,CAAE,KAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAK;AAC5D,WAAU,IAAI,GAAG,IAAI,GAAG,IAAO,KAAKT,MAAM,CAAE,KAAK,KAAM,CAAE,EAAI,OAAM,IAAI,MAAO,8BAA+B;AAE7G,SAAQ,SAASA,MAAK,QAAS;AAE9B,QAAI,MAAM,IAAI,SAAUA,OAAM,MAAO;AAAG,cAAU;AAClD,QAAI,OAAO,IAAI,UAAWA,OAAM,QAAQ,CAAE;AAAG,cAAU;AAGvD,QAAK,QAAQ,QAAS;AAErB,WAAK,OAAO,MAAOA,OAAM,QAAQ,GAAI;AAAA,IAEtC,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAIA,MAAK,MAAO,QAAQ,SAAS,CAAE;AAAA,IAEnD,WAAY,QAAQ,QAAS;AAE5B,eAAU,IAAI,GAAG,IAAI,KAAK,IAAO,IAAI,OAAO,CAAE,IAAIA,MAAM,SAAS,CAAE;AACnE,cAAQ;AAAA,IAET,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAI,EAAE,YAAY,IAAKA,OAAM,MAAO,GAAG,WAAW,IAAKA,OAAM,SAAS,CAAE,EAAE;AACzF,MAAAQ,MAAK,IAAI,WAAYR,MAAK,MAAO;AAAA,IAElC,WAAY,QAAQ,QAAS;AAE5B,UAAK,QAAQ,GAAI;AAEhB,YAAI,KAAK,IAAI,OAAQ,IAAI,OAAO,SAAS,CAAE;AAC3C,WAAG,OAAO,KAAK,OAAO,YAAa,KAAKQ,IAAG,MAAO,GAAG,IAAK,GAAG,GAAG,KAAK,OAAO,GAAG,KAAK,MAAO;AAAG,eAAO;AAAA,MAEtG;AAEA,UAAI,MAAM,EAAE,GAAG,IAAKR,OAAM,SAAS,EAAG,GAAG,GAAG,IAAKA,OAAM,SAAS,EAAG,GAAG,OAAO,IAAKA,OAAM,SAAS,CAAE,GAAG,QAAQ,IAAKA,OAAM,SAAS,CAAE,EAAE;AACtI,UAAI,MAAM,IAAKA,OAAM,SAAS,EAAG;AAAG,YAAM,IAAKA,OAAM,SAAS,EAAG,KAAM,OAAO,IAAI,MAAM;AACxF,UAAI,MAAM,EAAE,MAAM,KAAK,OAAO,KAAK,MAAO,MAAM,GAAK,GAAG,SAASA,MAAM,SAAS,EAAG,GAAG,OAAOA,MAAM,SAAS,EAAG,EAAE;AAEjH,UAAI,OAAO,KAAM,GAAI;AAAA,IAEtB,WAAY,QAAQ,QAAS;AAE5B,eAAU,IAAI,GAAG,IAAI,MAAM,GAAG,IAAO,CAAAQ,IAAI,OAAO,CAAE,IAAIR,MAAM,SAAS,IAAI,CAAE;AAC3E,cAAQ,MAAM;AAAA,IAEf,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAI,CAAE,IAAI,SAAUA,OAAM,MAAO,GAAG,IAAI,SAAUA,OAAM,SAAS,CAAE,GAAGA,MAAM,SAAS,CAAE,CAAE;AAAA,IAEzG,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAI,CAAC;AACpB,eAAU,IAAI,GAAG,IAAI,GAAG,IAAO,KAAI,KAAM,IAAK,EAAE,KAAM,IAAI,SAAUA,OAAM,SAAS,IAAI,CAAE,CAAE;AAAA,IAE5F,WAAY,QAAQ,UAAU,QAAQ,QAAS;AAE9C,UAAK,IAAI,KAAM,IAAK,KAAK,KAAO,KAAI,KAAM,IAAK,IAAI,CAAC;AACpD,UAAI,KAAK,IAAI,SAAUA,OAAM,MAAO;AACpC,aAAO,IAAI,UAAWA,OAAM,QAAQ,KAAK,MAAO;AAChD,UAAI,KAAK,SAAS,MAAM,KAAK;AAC7B,UAAK,QAAQ,OAAS,CAAAS,QAAO,IAAI,UAAWT,OAAM,KAAK,GAAG,EAAG;AAAA,WACxD;AAEJ,cAAM,KAAK,OAAO,SAAUA,MAAK,MAAO,KAAK,GAAG,KAAK,IAAI,EAAG,CAAE;AAC9D,QAAAS,QAAO,IAAI,SAAU,KAAK,GAAG,IAAI,MAAO;AAAA,MAEzC;AAEA,UAAI,KAAM,IAAK,EAAG,IAAK,IAAIA;AAAA,IAE5B,WAAY,QAAQ,QAAS;AAE5B,UAAK,IAAI,KAAM,IAAK,KAAK,KAAO,KAAI,KAAM,IAAK,IAAI,CAAC;AACpD,UAAI,KAAK,GAAG,MAAM;AAClB,WAAK,IAAI,SAAUT,OAAM,GAAI;AAC7B,aAAO,IAAI,UAAWA,OAAM,KAAK,KAAK,GAAI;AAAG,YAAM,KAAK;AACxD,UAAI,QAAQA,MAAM,GAAI;AAAG,aAAO;AAChC,WAAK,IAAI,SAAUA,OAAM,GAAI;AAC7B,UAAI,UAAWA,OAAM,KAAK,KAAK,GAAI;AAAG,YAAM,KAAK;AACjD,WAAK,IAAI,SAAUA,OAAM,GAAI;AAC7B,UAAI,SAAUA,OAAM,KAAK,KAAK,GAAI;AAAG,YAAM,KAAK;AAChD,UAAI,KAAK,OAAQ,MAAM;AACvB,UAAK,SAAS,EAAI,CAAAS,QAAO,IAAI,SAAUT,OAAM,KAAK,EAAG;AAAA,WAChD;AAEJ,cAAM,KAAK,OAAO,SAAUA,MAAK,MAAO,KAAK,MAAM,EAAG,CAAE;AACxD,QAAAS,QAAO,IAAI,SAAU,KAAK,GAAG,IAAI,MAAO;AAAA,MAEzC;AAEA,UAAI,KAAM,IAAK,EAAG,IAAK,IAAIA;AAAA,IAE5B,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAM,IAAK,IAAI,IAAI,UAAWT,OAAM,QAAQ,GAAI;AAAA,IAErD,WAAY,QAAQ,QAAS;AAE5B,UAAI,KAAK,IAAI,KAAM,MAAO,EAAE,SAAS;AACrC,UAAI,KAAM,IAAK,IAAI,CAAC;AAAG,eAAU,IAAI,GAAG,IAAI,IAAI,IAAO,KAAI,KAAM,IAAK,EAAE,KAAM,IAAKA,OAAM,SAAS,IAAI,CAAE,CAAE;AAAA,IAE3G,WAAY,QAAQ,QAAS;AAE5B,UAAK,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,IAAI,UAAWA,OAAM,QAAQ,GAAI;AAAA,eAChE,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,IAAKA,OAAM,MAAO;AAAA,eACtD,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,CAAE,IAAKA,OAAM,MAAO,GAAG,IAAKA,OAAM,SAAS,CAAE,GAAG,IAAKA,OAAM,SAAS,CAAE,CAAE;AAAA,IAGvH,WAAY,QAAQ,OAAS,KAAI,KAAM,IAAK,IAAI,IAAI,SAAUA,OAAM,MAAO,IAAI;AAAA,aACrE,QAAQ,OAAS,KAAI,KAAM,IAAK,IAAIA,MAAM,MAAO;AAAA,aACjD,QAAQ,QAAS;AAE1B,UAAK,IAAI,SAAS,KAAK,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,CAAE,IAAKA,OAAM,MAAO,CAAE;AAAA,eACvE,IAAI,SAAS,KAAK,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAI,CAAE,IAAKA,OAAM,MAAO,GAAG,IAAKA,OAAM,SAAS,CAAE,GAAG,IAAKA,OAAM,SAAS,CAAE,CAAE;AAAA,eAC9H,IAAI,SAAS,EAAI,KAAI,KAAM,IAAK,IAAIA,MAAM,MAAO;AAAA,IAE5D,WAAY,QAAQ,QAAS;AAE5B;AAAA,IAED;AAGA,cAAU;AACV,QAAI,SAAUA,OAAM,MAAO;AAAG,cAAU;AAAA,EAEzC;AAEA,MAAK,QAAQ,GAAI;AAEhB,QAAI,KAAK,IAAI,OAAQ,IAAI,OAAO,SAAS,CAAE;AAC3C,OAAG,OAAO,KAAK,OAAO,YAAa,KAAKQ,IAAG,MAAO,GAAG,IAAK,GAAG,GAAG,KAAK,OAAO,GAAG,KAAK,MAAO;AAAA,EAE5F;AAEA,MAAI,OAAO,KAAK,OAAO,YAAa,KAAK,IAAI,IAAI,OAAO,IAAI,MAAO;AAEnE,SAAO,IAAI;AAAU,SAAO,IAAI;AAAW,SAAO,IAAI;AACtD,SAAO;AAER;AAEA,KAAK,OAAO,cAAc,SAAW,KAAK,IAAI,GAAG,GAAI;AAEpD,MAAI,MAAM,KAAK,OAAO,QAAS,GAAI,GAAG,MAAM,KAAK,KAAM,IAAI,MAAM,CAAE,GAAG,OAAO,IAAI,YAAc,MAAM,IAAI,IAAI,aAAc,CAAE;AAC7H,MAAK,IAAI,KAAM,MAAO,EAAI,MAAK,KAAK,WAAY,IAAI,IAAK;AAAA,MACpD,MAAK,KAAK,OAAO,SAAU,IAAI,IAAK;AAEzC,MAAK,IAAI,aAAa,EAAI,MAAK,KAAK,OAAO,YAAa,IAAI,KAAK,GAAG,GAAG,CAAE;AAAA,WAC/D,IAAI,aAAa,EAAI,MAAK,KAAK,OAAO,eAAgB,IAAI,GAAI;AAExE,SAAO;AAER;AAEA,KAAK,OAAO,WAAW,SAAWR,OAAM,MAAO;AAE9C,MAAI,MAAM,KAAM,YAAa,EAAG,IAAI,WAAYA,MAAK,QAAQ,GAAGA,MAAK,SAAS,CAAE,GAAG,IAAK;AAAG,SAAO;AAEnG;AAEA,KAAK,aAAa,WAAY;AAE7B,MAAI,IAAI,CAAC;AAAG,IAAE,IAAI,CAAC;AAAG,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAE/C,QAAIU,KAAI,YAAY,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAGC,KAAI,GAAGC,KAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAGC;AACtF,QAAK,EAAG,CAAE,KAAK,KAAK,EAAG,CAAE,KAAK,EAAI,QAAO,IAAI,IAAI,IAAIH,GAAG,CAAE;AAAG,QAAI,IAAI,EAAE,GAAGI,KAAI,EAAE,GAAGC,KAAI,EAAE,GAAGC,KAAI,EAAE,GAAG,IAAI,EAAE,GAAGC,KAAI,EAAE,GAAG,IAAI,EAAE,GAAGd,KAAI,EAAE,GAAGe,KAAI,KAAK;AAClJ,QAAKA,GAAG,KAAI,IAAIR,GAAG,EAAE,WAAW,KAAK,CAAE;AAAG,WAAQ,KAAK,GAAI;AAE1D,UAAII,GAAG,GAAG,GAAG,CAAE;AAAG,UAAIA,GAAG,GAAG,IAAI,GAAG,CAAE;AAAG,WAAK;AAAG,UAAK,KAAK,GAAI;AAE7D,aAAO,IAAI,MAAO,EAAG,MAAK,KAAM,IAAI;AACpC,YAAI,KAAM,MAAM,KAAM,GAAGK,KAAI,EAAG,IAAI,CAAE,IAAI,EAAG,IAAI,CAAE,KAAK;AAAG,YAAKD,GAAG,KAAI,EAAE,EAAE,EAAG,GAAG,IAAIC,EAAE;AAAG,UAAE,IAAK,IAAIT,GAAG,EAAE,QAAQ,EAAE,aAAa,GAAGS,EAAE,GAAG,CAAE;AAAG,YAAI,IAAIA,MAAK;AAC3J,aAAKA;AAAG;AAAA,MAGT;AAEA,UAAKD,GAAG,KAAI,EAAE,EAAE,EAAG,GAAG,KAAM,KAAK,GAAK;AAAG,UAAK,KAAK,GAAI;AAEtD,YAAIf,GAAE;AAAG,QAAAU,KAAIV,GAAE;AAAG,QAAAS,MAAM,KAAK,KAAM;AAAG,aAAM,KAAK,KAAM;AAAA,MAExD;AAEA,UAAK,KAAK,GAAI;AAEb,YAAIG,GAAG,GAAG,GAAG,CAAE,IAAI;AACnB,YAAIA,GAAG,GAAG,IAAI,GAAG,CAAE,IAAI;AAAG,QAAAJ,KAAII,GAAG,GAAG,IAAI,IAAI,CAAE,IAAI;AAAG,aAAK;AAAI,YAAI,IAAI;AAAG,iBAAUK,KAAI,GAAGA,KAAI,IAAIA,MAAK,GAAI;AAE1G,UAAAjB,GAAE,EAAGiB,EAAE,IAAI;AAAG,UAAAjB,GAAE,EAAGiB,KAAI,CAAE,IAAI;AAAA,QAE9B;AAEA,iBAAUA,KAAI,GACbA,KAAIT,IAAGS,MAAO;AAEd,cAAI,IAAIL,GAAG,GAAG,IAAIK,KAAI,GAAG,CAAE;AAAG,UAAAjB,GAAE,GAAKA,GAAE,EAAGiB,EAAE,KAAK,KAAM,CAAE,IAAI;AAAG,cAAK,IAAI,EAAG,KAAI;AAAA,QAGjF;AAEA,aAAK,IAAIT;AAAG,UAAGR,GAAE,GAAG,CAAE;AAAG,QAAAc,GAAGd,GAAE,GAAG,GAAGA,GAAE,CAAE;AAAG,YAAIA,GAAE;AAAG,QAAAU,KAAIV,GAAE;AAC1D,YAAIa,GAAGb,GAAE,IAAK,KAAK,KAAM,GAAG,IAAI,GAAG,GAAG,GAAGA,GAAE,CAAE;AAAG,YAAI,IAAI,EAAE,EAAGA,GAAE,GAAG,GAAG,GAAGA,GAAE,CAAE;AAAG,QAAAS,MAAM,KAAK,KAAM;AAAG,YAAI,IAAI,EAAE,EAAGT,GAAE,GAAG,GAAG,GAAGA,GAAE,CAAE;AAAG,aAAM,KAAK,KAAM;AAAG,UAAGA,GAAE,GAAG,CAAE;AAChK,QAAAc,GAAGd,GAAE,GAAG,GAAG,CAAE;AAAG,UAAGA,GAAE,GAAG,CAAE;AAAG,QAAAc,GAAGd,GAAE,GAAG,GAAGU,EAAE;AAAA,MAG3C;AAEA,aAAQ,MAAM;AAEb,YAAI,IAAI,EAAG,EAAG,GAAG,CAAE,IAAID,EAAE;AAAG,aAAK,IAAI;AAAI,YAAIP,KAAI,MAAM;AAAG,YAAKA,OAAM,KAAK,GAAI;AAE7E,YAAG,GAAK,IAAIA;AAAA,QAEb,WAAYA,MAAK,KAAM;AAEtB;AAAA,QAED,OAAO;AAEN,cAAI,IAAI,IAAIA,KAAI;AAChB,cAAKA,KAAI,KAAM;AAEd,gBAAI,IAAIF,GAAE,EAAGE,KAAI,GAAI;AAAG,gBAAI,KAAM,MAAM,KAAMU,GAAG,GAAG,GAAG,IAAI,CAAE;AAAG,iBAAK,IAAI;AAAA,UAE1E;AAEA,cAAIM,KAAIR,GAAG,EAAG,GAAG,CAAE,IAAI,CAAE;AAAG,eAAKQ,KAAI;AAAI,cAAI,IAAIA,OAAM,GAAGC,KAAInB,GAAE,EAAG,CAAE,GAAGC,MAAMkB,OAAM,KAAMR,GAAG,GAAG,GAAGQ,KAAI,EAAG;AAC1G,eAAKA,KAAI;AAAI,iBAAQ,IAAI,GAAI;AAE5B,cAAG,CAAE,IAAI,EAAG,MAAOlB,EAAE;AAAG,cAAG,CAAE,IAAI,EAAG,MAAOA,EAAE;AAAG,cAAG,CAAE,IAAI,EAAG,MAAOA,EAAE;AAAG,cAAG,CAAE,IAAI,EAAG,MAAOA,EAAE;AAAA,UAE9F;AAEA,cAAI;AAAA,QAGL;AAAA,MAED;AAAA,IAED;AAEA,WAAO,EAAE,UAAU,IAAI,IAAI,EAAE,MAAO,GAAG,CAAE;AAAA,EAG1C;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,QAAIM,KAAI,EAAE;AAAQ,QAAK,KAAKA,GAAI,QAAO;AAAG,QAAI,IAAI,IAAI,WAAYA,MAAK,CAAE;AAAG,MAAE,IAAK,GAAG,CAAE;AAAG,WAAO;AAAA,EAEnG;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGA,IAAG,GAAGI,IAAGC,IAAI;AAErC,QAAIC,KAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAGC,KAAI;AAAG,WAAQA,KAAIP,IAAI;AAEhD,UAAI,IAAI,EAAG,EAAG,GAAGI,EAAE,IAAI,CAAE;AAAG,MAAAA,MAAK,IAAI;AAAI,UAAIX,KAAI,MAAM;AACvD,UAAKA,MAAK,IAAK;AAEd,QAAAY,GAAGE,EAAE,IAAId;AAAG,QAAAc;AAAA,MAEb,OAAO;AAEN,YAAIC,KAAI,GAAG,IAAI;AAAG,YAAKf,MAAK,IAAK;AAEhC,cAAI,IAAIa,GAAG,GAAGF,IAAG,CAAE;AAAG,UAAAA,MAAK;AAAG,UAAAI,KAAIH,GAAGE,KAAI,CAAE;AAAA,QAE5C,WAAYd,MAAK,IAAK;AAErB,cAAI,IAAIa,GAAG,GAAGF,IAAG,CAAE;AACnB,UAAAA,MAAK;AAAA,QAGN,WAAYX,MAAK,IAAK;AAErB,cAAI,KAAKa,GAAG,GAAGF,IAAG,CAAE;AAAG,UAAAA,MAAK;AAAA,QAE7B;AAEA,YAAI,IAAIG,KAAI;AAAG,eAAQA,KAAI,GAAI;AAE9B,UAAAF,GAAGE,EAAE,IAAIC;AAAG,UAAAD;AAAA,QAEb;AAAA,MAED;AAAA,IAED;AAEA,WAAOH;AAAA,EAGR;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGJ,IAAG,GAAI;AAE/B,QAAII,KAAI,GAAGC,KAAI,GAAGC,KAAI,EAAE,WAAW;AACnC,WAAQD,KAAIL,IAAI;AAEf,UAAI,IAAI,EAAGK,KAAI,CAAE;AAAG,QAAGA,MAAK,CAAE,IAAI;AAAG,SAAKA,MAAK,KAAM,CAAE,IAAI;AAAG,UAAK,IAAID,GAAG,CAAAA,KAAI;AAAG,MAAAC;AAAA,IAElF;AAEA,WAAQA,KAAIC,IAAI;AAEf,QAAGD,MAAK,CAAE,IAAI;AAAG,SAAKA,MAAK,KAAM,CAAE,IAAI;AAAG,MAAAA;AAAA,IAE3C;AAEA,WAAOD;AAAA,EAGR;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,QAAIJ,KAAI,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQI,IAAGC,IAAGC,IAAG,GAAGC,IAAG,IAAIP,GAAE;AAAG,aAAU,IAAI,GAAG,KAAK,GAAG,IAAM,GAAG,CAAE,IAAI;AAAG,SAAM,IAAI,GAAG,IAAI,GAAG,KAAK,EAAG,GAAG,EAAG,CAAE,CAAE;AACtI,QAAIP,KAAIO,GAAE;AAAG,IAAAI,KAAI;AAAG,MAAG,CAAE,IAAI;AAAG,SAAMC,KAAI,GAAGA,MAAK,GAAGA,MAAO;AAE3D,MAAAD,KAAIA,KAAI,EAAGC,KAAI,CAAE,KAAK;AAAG,MAAAZ,GAAGY,EAAE,IAAID;AAAA,IAEnC;AAEA,SAAME,KAAI,GAAGA,KAAI,GAAGA,MAAK,GAAI;AAE5B,MAAAC,KAAI,EAAGD,KAAI,CAAE;AAAG,UAAKC,MAAK,GAAI;AAE7B,UAAGD,EAAE,IAAIb,GAAGc,EAAE;AACd,QAAAd,GAAGc,EAAE;AAAA,MAGN;AAAA,IAED;AAAA,EAED;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGP,IAAI;AAE5B,QAAI,IAAI,EAAE,QAAQI,KAAI,EAAE,EAAE,GAAGC,KAAID,GAAE;AAAG,aAAUE,KAAI,GAAGA,KAAI,GAAGA,MAAK,EAAI,KAAK,EAAGA,KAAI,CAAE,KAAK,GAAI;AAE7F,UAAI,IAAIA,MAAK,GAAGC,KAAI,EAAGD,KAAI,CAAE,GAAG,IAAI,KAAK,IAAIC,IAAGd,KAAI,IAAIc,IAAGC,KAAI,EAAGF,EAAE,KAAKb,IAAG,IAAIe,MAAM,KAAKf;AAC3F,aAAQe,MAAK,GAAI;AAEhB,YAAI,IAAIH,GAAGG,EAAE,MAAM,KAAK;AAAG,QAAAR,GAAG,CAAE,IAAI;AAAG,QAAAQ;AAAA,MAExC;AAAA,IAED;AAAA,EAED;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,QAAIR,KAAI,EAAE,EAAE,EAAE,GAAG,IAAI,KAAK;AAAG,aAAUI,KAAI,GAAGA,KAAI,EAAE,QACnDA,MAAK,GAAI;AAET,UAAIC,KAAI,EAAGD,EAAE,KAAK,IAAI,EAAGA,KAAI,CAAE;AAAG,QAAGA,EAAE,IAAIJ,GAAGK,EAAE,MAAM;AAAA,IAEvD;AAAA,EAED;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGL,IAAI;AAE5B,IAAAA,KAAIA,OAAO,IAAI;AAAK,QAAI,IAAI,MAAM;AAAG,MAAG,CAAE,KAAKA;AAAG,MAAG,IAAI,CAAE,KAAKA,OAAM;AAAA,EAEvE;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGA,IAAI;AAE5B,IAAAA,KAAIA,OAAO,IAAI;AAAK,QAAI,IAAI,MAAM;AAAG,MAAG,CAAE,KAAKA;AAAG,MAAG,IAAI,CAAE,KAAKA,OAAM;AAAG,MAAG,IAAI,CAAE,KAAKA,OAAM;AAAA,EAE9F;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGA,IAAI;AAE5B,YAAS,EAAG,MAAM,CAAE,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,QAAU,IAAI,MAAQ,KAAKA,MAAM;AAAA,EAElF;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAGA,IAAI;AAE5B,YAAS,EAAG,MAAM,CAAE,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,SAAW,IAAI,MAAQ,KAAKA,MAAM;AAAA,EAE/G;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,YAAS,EAAG,MAAM,CAAE,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,SAAW,IAAI;AAAA,EAE5F;AAEA,IAAE,EAAE,IAAI,SAAW,GAAG,GAAI;AAEzB,YAAS,EAAG,MAAM,CAAE,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,IAAI,GAAK,MAAM,KAAM,CAAE,KAAK,KAAK,GAAK,MAAM,KAAM,CAAE,KAAK,SAAW,IAAI;AAAA,EAEzH;AAEA,IAAE,EAAE,IAAI,WAAY;AAEnB,QAAI,IAAI,aAAa,IAAI;AACzB,WAAO,EAAE,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,CAAE,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAG,GAAG,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAI,GAAG,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,KAAM,GAAG,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,CAAE,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,IAAI,EAAG,GAAI,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,KAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,KAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,GAAI,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,EAAG,KAAK,EAAG,GAAG,GAAG,IAAI,EAAG,GAAI,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,IAAI,EAAG,EAAG,GAAG,GAAG,IAAI,EAAG,IAAK,GAAG,GAAG,IAAI,EAAG,KAAK,EAAG,GAAG,GAAG,IAAI,EAAG,KAAK,EAAG,EAAE;AAAA,EAGx5B,EAAE;AACF,GAAE,WAAY;AAEb,QAAI,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK;AAAI,aAAUA,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAE1D,UAAI,IAAIA;AAAG,WAAM,IAAI,gBAAiB,KAAM,IAAI,eAAgB;AAChE,WAAM,IAAI,gBAAiB,KAAM,IAAI,cAAe;AAAG,WAAM,IAAI,gBAAiB,KAAM,IAAI,cAAe;AAAG,WAAM,IAAI,gBAAiB,KAAM,IAAI,aAAc;AACjK,QAAE,EAAGA,EAAE,KAAM,MAAM,KAAK,KAAK,QAAS;AAAA,IAGvC;AAEA,aAASI,GAAGC,IAAGC,IAAG,GAAI;AAErB,aAAQA,QAAQ,EAAG,CAAAD,GAAE,KAAM,GAAG,CAAE;AAAA,IAGjC;AAEA,aAAUL,KAAI,GAAGA,KAAI,IAAIA,MAAO;AAE/B,QAAE,EAAGA,EAAE,IAAI,EAAE,EAAGA,EAAE,KAAK,IAAI,EAAE,EAAGA,EAAE;AAClC,QAAE,EAAGA,EAAE,IAAI,EAAE,EAAGA,EAAE,KAAK,IAAI,EAAE,EAAGA,EAAE;AAAA,IAGnC;AAEA,IAAAI,GAAG,EAAE,GAAG,KAAK,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,MAAM,KAAK,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,MAAM,KAAK,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,MAAM,KAAK,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,CAAE;AACxG,MAAE,EAAE,EAAG,EAAE,GAAG,GAAG,EAAE,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,IAAI,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,GAAG,EAAE,CAAE;AAAG,MAAE,EAAE,EAAG,EAAE,GAAG,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,IAAI,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,KAAK,CAAE;AAChJ,IAAAA,GAAG,EAAE,GAAG,IAAI,CAAE;AAAG,IAAAA,GAAG,EAAE,GAAG,KAAK,CAAE;AAAA,EAGjC,GAAE;AAEF,SAAO,EAAE,EAAE;AAGZ,EAAE;AAGF,KAAK,OAAO,iBAAiB,SAAWd,OAAM,KAAM;AAEnD,MAAI,IAAI,IAAI,OAAO,IAAI,IAAI;AAC3B,MAAI,MAAM,KAAK,OAAO,QAAS,GAAI,GAAG,OAAO,OAAO,GAAG,MAAM,KAAK,KAAM,IAAI,MAAM,CAAE;AACpF,MAAI,MAAM,IAAI,WAAY,IAAI,GAAI;AAClC,MAAI,KAAK;AAET,MAAI,eAAe,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AACzC,MAAI,eAAe,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AACzC,MAAI,gBAAgB,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC1C,MAAI,gBAAgB,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAE1C,MAAI,OAAO;AACX,SAAQ,OAAO,GAAI;AAElB,QAAI,KAAK,cAAe,IAAK,GAAG,KAAK,cAAe,IAAK;AACzD,QAAI,KAAK,GAAG,KAAK;AACjB,QAAI,KAAK,aAAc,IAAK;AAAG,WAAQ,KAAK,GAAI;AAE/C,YAAM;AAAI;AAAA,IAEX;AAEA,QAAI,KAAK,aAAc,IAAK;AAAG,WAAQ,KAAK,GAAI;AAE/C,YAAM;AAAI;AAAA,IAEX;AAEA,QAAI,OAAO,KAAK,KAAM,KAAK,MAAM,CAAE;AACnC,SAAK,OAAO,YAAaA,OAAM,KAAK,IAAI,IAAI,EAAG;AAE/C,QAAIM,KAAI,GAAG,MAAM,aAAc,IAAK;AACpC,QAAIiB;AAEJ,WAAQ,MAAM,GAAI;AAEjB,UAAI,MAAM,aAAc,IAAK;AAC7B,UAAI,MAAQ,KAAKjB,KAAI,QAAU;AAE/B,aAAQ,MAAM,GAAI;AAEjB,YAAK,OAAO,GAAI;AAEf,UAAAiB,OAAMvB,MAAM,OAAO,CAAE;AAAG,UAAAuB,OAAQA,QAAS,KAAM,MAAM,KAAU;AAC/D,cAAK,MAAM,OAAQ,OAAO,EAAI,KAAOA,QAAS,MAAQ,MAAM,MAAO;AAAA,QAEpE;AAEA,YAAK,OAAO,GAAI;AAEf,UAAAA,OAAMvB,MAAM,OAAO,CAAE;AAAG,UAAAuB,OAAQA,QAAS,KAAM,MAAM,KAAU;AAC/D,cAAK,MAAM,OAAQ,OAAO,EAAI,KAAOA,QAAS,MAAQ,MAAM,MAAO;AAAA,QAEpE;AAEA,YAAK,OAAO,GAAI;AAEf,UAAAA,OAAMvB,MAAM,OAAO,CAAE;AAAG,UAAAuB,OAAQA,QAAS,KAAM,MAAM,KAAU;AAC/D,cAAK,MAAM,OAAQ,OAAO,EAAI,KAAOA,QAAS,MAAQ,MAAM,MAAO;AAAA,QAEpE;AAEA,YAAK,OAAO,GAAI;AAEf,cAAI,KAAK,MAAM,MAAM,MAAM;AAC3B,mBAAU,IAAI,GAAG,IAAI,MAAM,IAAO,KAAK,KAAK,CAAE,IAAIvB,OAAQ,OAAO,KAAM,CAAE;AAAA,QAE1E;AAEA,eAAO;AAAK,eAAO;AAAA,MAEpB;AAEA,MAAAM;AAAM,aAAO;AAAA,IAEd;AAEA,QAAK,KAAK,MAAM,EAAI,OAAM,MAAO,IAAI;AACrC,WAAO,OAAO;AAAA,EAEf;AAEA,SAAO;AAER;AAEA,KAAK,OAAO,UAAU,SAAW,KAAM;AAEtC,MAAI,MAAM,CAAE,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,CAAE,EAAG,IAAI,KAAM;AACnD,SAAO,MAAM,IAAI;AAElB;AAEA,KAAK,OAAO,cAAc,SAAWN,OAAM,KAAK,KAAK,GAAG,GAAI;AAE3D,MAAI,MAAM,KAAK,OAAO,QAAS,GAAI,GAAG,MAAM,KAAK,KAAM,IAAI,MAAM,CAAE,GAAG,QAAQ,KAAK,OAAO;AAC1F,QAAM,KAAK,KAAM,MAAM,CAAE;AAEzB,MAAI,GAAG,IAAI,OAAOA,MAAM,GAAI,GAAGO,KAAI;AAEnC,MAAK,OAAO,EAAI,CAAAP,MAAM,GAAI,IAAI,CAAE,GAAG,GAAG,CAAE,EAAG,OAAO,CAAE;AACpD,MAAK,QAAQ,EAAI,MAAMO,KAAI,KAAKA,KAAI,KAAKA,KAAO,CAAAP,MAAMO,KAAI,CAAE,IAAMP,MAAMO,KAAI,CAAE,KAAMP,MAAMO,KAAI,IAAI,GAAI,MAAM,KAAQ;AAEpH,WAAUD,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAE9B,QAAI,MAAMA,KAAI;AAAK,SAAK,IAAIA,KAAI;AAChC,WAAON,MAAM,KAAK,CAAE;AAAG,IAAAO,KAAI;AAE3B,QAAK,QAAQ,EAAI,QAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAIP,MAAM,KAAKO,EAAE;AAAA,aAC5D,QAAQ,GAAI;AAErB,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAIP,MAAM,KAAKO,EAAE;AAC/C,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,IAAIP,MAAM,IAAIO,KAAI,GAAI;AAAA,IAEpF,WAAY,QAAQ,GAAI;AAEvB,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,IAAIP,MAAM,IAAIO,KAAI,GAAI;AAAA,IAE9E,WAAY,QAAQ,GAAI;AAEvB,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,KAAMP,MAAM,IAAIO,KAAI,GAAI,MAAM;AACtE,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,KAAQP,MAAM,IAAIO,KAAI,GAAI,IAAIP,MAAM,IAAIO,KAAI,GAAI,MAAQ;AAAA,IAE/H,OAAO;AAEN,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,IAAI,MAAO,GAAGP,MAAM,IAAIO,KAAI,GAAI,GAAG,CAAE;AACtF,aAAQA,KAAI,KAAKA,KAAO,CAAAP,MAAM,IAAIO,EAAE,IAAMP,MAAM,KAAKO,EAAE,IAAI,MAAOP,MAAM,IAAIO,KAAI,GAAI,GAAGP,MAAM,IAAIO,KAAI,GAAI,GAAGP,MAAM,IAAIO,KAAI,MAAM,GAAI,CAAE;AAAA,IAE7I;AAAA,EAED;AAEA,SAAOP;AAER;AAEA,KAAK,OAAO,SAAS,SAAWI,IAAGD,IAAGiB,IAAI;AAEzC,MAAIf,KAAID,KAAID,KAAIiB,IAAGI,MAAOnB,KAAID,IAAK,KAAOC,KAAIF,IAAK,KAAOE,KAAIe;AAC9D,MAAKI,MAAKA,OAAM,KAAK,MAAMA,MAAKA,OAAM,KAAK,GAAK,QAAOpB;AAAA,WAC7C,KAAK,MAAM,KAAK,GAAK,QAAOD;AACtC,SAAOiB;AAER;AAEA,KAAK,OAAO,QAAQ,SAAWpB,OAAM,QAAQ,KAAM;AAElD,MAAI,MAAM,KAAK;AACf,MAAI,QAAQ,IAAI,SAAUA,OAAM,MAAO;AAAG,YAAU;AACpD,MAAI,SAAS,IAAI,SAAUA,OAAM,MAAO;AAAG,YAAU;AACrD,MAAI,QAAQA,MAAM,MAAO;AAAG;AAC5B,MAAI,QAAQA,MAAM,MAAO;AAAG;AAC5B,MAAI,WAAWA,MAAM,MAAO;AAAG;AAC/B,MAAI,SAASA,MAAM,MAAO;AAAG;AAC7B,MAAI,YAAYA,MAAM,MAAO;AAAG;AAEjC;AAEA,KAAK,OAAO;AAAA,EACX,UAAU,SAAWA,OAAMK,IAAI;AAE9B,WAAQL,MAAMK,EAAE,KAAK,EAAI,CAAAA;AAAM,WAAOA;AAAA,EAEvC;AAAA,EACA,YAAY,SAAW,MAAMA,IAAI;AAEhC,WAAS,KAAMA,EAAE,KAAK,IAAM,KAAMA,KAAI,CAAE;AAAA,EAEzC;AAAA,EACA,aAAa,SAAW,MAAMA,IAAGS,IAAI;AAEpC,SAAMT,EAAE,IAAMS,MAAK,IAAM;AAAK,SAAMT,KAAI,CAAE,IAAIS,KAAI;AAAA,EAEnD;AAAA,EACA,UAAU,SAAW,MAAMT,IAAI;AAE9B,WAAS,KAAMA,EAAE,KAAM,MAAM,MAAM,QAAc,KAAMA,KAAI,CAAE,KAAK,KAAS,KAAMA,KAAI,CAAE,KAAK,IAAM,KAAMA,KAAI,CAAE;AAAA,EAE/G;AAAA,EACA,WAAW,SAAW,MAAMA,IAAGS,IAAI;AAElC,SAAMT,EAAE,IAAMS,MAAK,KAAO;AAAK,SAAMT,KAAI,CAAE,IAAMS,MAAK,KAAO;AAAK,SAAMT,KAAI,CAAE,IAAMS,MAAK,IAAM;AAAK,SAAMT,KAAI,CAAE,IAAIS,KAAI;AAAA,EAEzH;AAAA,EACA,WAAW,SAAW,MAAMT,IAAGW,IAAI;AAElC,QAAI,IAAI;AAAI,aAAU,IAAI,GAAG,IAAIA,IAAG,IAAO,MAAK,OAAO,aAAc,KAAMX,KAAI,CAAE,CAAE;AAAG,WAAO;AAAA,EAE9F;AAAA,EACA,YAAY,SAAWL,OAAMK,IAAG,GAAI;AAEnC,aAAU,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAO,CAAAL,MAAMK,KAAI,CAAE,IAAI,EAAE,WAAY,CAAE;AAAA,EAEvE;AAAA,EACA,WAAW,SAAW,MAAMA,IAAGW,IAAI;AAElC,QAAI,MAAM,CAAC;AAAG,aAAU,IAAI,GAAG,IAAIA,IAAG,IAAO,KAAI,KAAM,KAAMX,KAAI,CAAE,CAAE;AAAG,WAAO;AAAA,EAEhF;AAAA,EACA,KAAK,SAAWS,IAAI;AAEnB,WAAOA,GAAE,SAAS,IAAI,MAAMA,KAAIA;AAAA,EAEjC;AAAA,EACA,UAAU,SAAW,MAAMT,IAAGW,IAAI;AAEjC,QAAI,IAAI,IAAI;AACZ,aAAU,IAAI,GAAG,IAAIA,IAAG,IAAO,MAAK,MAAM,KAAK,KAAK,IAAK,KAAMX,KAAI,CAAE,EAAE,SAAU,EAAG,CAAE;AACtF,QAAI;AAEH,WAAK,mBAAoB,CAAE;AAAA,IAE5B,SAAU,GAAI;AAEb,aAAO,KAAK,KAAK,UAAW,MAAMA,IAAGW,EAAE;AAAA,IAExC;AAEA,WAAO;AAAA,EAER;AACD;AACA,KAAK,YAAY,SAAW,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAO;AAEtE,MAAI,IAAI,KAAK,IAAK,IAAI,EAAG,GAAG,IAAI,KAAK,IAAK,IAAI,EAAG;AACjD,MAAI,KAAK,GAAG,KAAK;AACjB,WAAUV,KAAI,GAAGA,KAAI,GAAGA;AACvB,aAAUC,KAAI,GAAGA,KAAI,GAAGA,MAAO;AAE9B,UAAK,QAAQ,KAAK,QAAQ,GAAI;AAE7B,aAAOD,KAAI,KAAKC,MAAO;AAAG,cAAS,OAAOD,MAAM,KAAK,OAAOC,MAAO;AAAA,MAEpE,OAAO;AAEN,cAAS,CAAE,OAAOD,MAAM,KAAK,OAAOC,MAAO;AAAG,aAAOD,KAAI,KAAKC,MAAO;AAAA,MAEtE;AAEA,UAAK,QAAQ,GAAI;AAEhB,WAAI,EAAG,IAAI,GAAI,EAAG;AAAG,WAAI,KAAK,CAAE,IAAI,GAAI,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAI,GAAI,KAAK,CAAE;AAAG,WAAI,KAAK,CAAE,IAAI,GAAI,KAAK,CAAE;AAAA,MAE1G,WAAY,QAAQ,GAAI;AAEvB,YAAI,KAAK,GAAI,KAAK,CAAE,KAAM,IAAI,MAAO,KAAK,GAAI,EAAG,IAAI,IAAI,KAAK,GAAI,KAAK,CAAE,IAAI,IAAI,KAAK,GAAI,KAAK,CAAE,IAAI;AACrG,YAAI,KAAK,GAAI,KAAK,CAAE,KAAM,IAAI,MAAO,KAAK,GAAI,EAAG,IAAI,IAAI,KAAK,GAAI,KAAK,CAAE,IAAI,IAAI,KAAK,GAAI,KAAK,CAAE,IAAI;AAErG,YAAI,MAAM,IAAI,IAAIkB,MAAK,KAAK,KAAK,KAAK,MAAQA,OAAM,IAAI,IAAI,IAAIA;AAChE,WAAI,KAAK,CAAE,IAAI,MAAMA;AACrB,WAAI,KAAK,CAAE,KAAM,KAAK,KAAK,OAAQ;AACnC,WAAI,KAAK,CAAE,KAAM,KAAK,KAAK,OAAQ;AACnC,WAAI,KAAK,CAAE,KAAM,KAAK,KAAK,OAAQ;AAAA,MAEpC,WAAY,QAAQ,GAAI;AAEvB,YAAI,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,EAAG,GAAG,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,KAAK,CAAE;AACzE,YAAI,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,EAAG,GAAG,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,KAAK,CAAE;AACzE,YAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAK;AAEnD,aAAI,EAAG,IAAI;AAAG,aAAI,KAAK,CAAE,IAAI;AAAG,aAAI,KAAK,CAAE,IAAI;AAAG,aAAI,KAAK,CAAE,IAAI;AAAA,QAElE,OAAO;AAEN,aAAI,EAAG,IAAI;AAAI,aAAI,KAAK,CAAE,IAAI;AAAI,aAAI,KAAK,CAAE,IAAI;AAAI,aAAI,KAAK,CAAE,IAAI;AAAA,QAErE;AAAA,MAED,WAAY,QAAQ,GAAI;AAEvB,YAAI,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,EAAG,GAAG,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,KAAK,CAAE;AACzE,YAAI,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,EAAG,GAAG,KAAK,GAAI,KAAK,CAAE,GAAG,KAAK,GAAI,KAAK,CAAE;AACzE,YAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,GAAK;AAEpD,YAAK,KAAK,OAAO,KAAK,GAAK,QAAO;AAAA,MAEnC;AAAA,IAED;AAED,SAAO;AAER;;;ACx/BA,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAAA,EAEhB;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,mBAAoB,KAAK,eAAgB;AAEhD,WAAO,KAAM,KAAK,SAAWC,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOC,OAAO;AAEb,aAAS,SAAUA,OAAO;AAEzB,YAAM,SAAS,IAAI,SAAUA,KAAK;AAClC,YAAM,YAAc,KAAK,IAAI,IAAU,KAAK,IAAI,IAAM,IAAQ,KAAK;AACnE,YAAM,UAAU,OAAO,UAAW,IAAI,IAAK;AAC3C,YAAM,SAAS,KAAO,KAAK,IAAQ,UAAU;AAE7C,UAAK,WAAW,OAAO,YAAa;AAEnC,eAAO;AAAA,MAER;AAYA,YAAM,QAAQ,CAAE,KAAK,KAAK,KAAK,KAAK,GAAI;AAExC,eAAU,MAAM,GAAG,MAAM,GAAG,OAAS;AAIpC,YAAK,gBAAiB,OAAO,QAAQ,GAAI,EAAI,QAAO;AAAA,MAErD;AAIA,aAAO;AAAA,IAER;AAEA,aAAS,gBAAiB,OAAO,QAAQ,QAAS;AAIjD,eAAU,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAO;AAElD,YAAK,MAAO,CAAE,MAAM,OAAO,SAAU,SAAS,CAAE,EAAI,QAAO;AAAA,MAE5D;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,YAAaA,OAAO;AAE5B,YAAM,SAAS,IAAI,SAAUA,KAAK;AAClC,YAAM,QAAQ,OAAO,UAAW,IAAI,IAAK;AAEzC,UAAI,GAAGC,IAAGC,IAAG,YAAY,OAAO;AAChC,UAAI,UAAU,UAAU,UAAU;AAKlC,eAAUC,SAAQ,GAAGA,SAAQ,KAAK,IAAIA,UAAW;AAEhD,YAAO,OAAO,UAAWA,QAAO,KAAM,KAAK,cACxC,OAAO,SAAUA,SAAQ,CAAE,KAAK,MAChC,OAAO,SAAUA,SAAQ,CAAE,KAAK,IAAiB;AAEnD,sBAAY;AACZ,mBAAS,IAAI,aAAc,QAAQ,IAAI,CAAE;AAEzC,qBAAW,OAAO,SAAUA,SAAQ,CAAE,IAAI;AAC1C,qBAAW,OAAO,SAAUA,SAAQ,CAAE,IAAI;AAC1C,qBAAW,OAAO,SAAUA,SAAQ,CAAE,IAAI;AAC1C,kBAAQ,OAAO,SAAUA,SAAQ,CAAE,IAAI;AAAA,QAExC;AAAA,MAED;AAEA,YAAM,aAAa;AACnB,YAAM,aAAa,KAAK,IAAI;AAE5B,YAAM,WAAW,IAAI,eAAe;AAEpC,YAAM,WAAW,IAAI,aAAc,QAAQ,IAAI,CAAE;AACjD,YAAM,UAAU,IAAI,aAAc,QAAQ,IAAI,CAAE;AAEhD,YAAM,QAAQ,IAAI,MAAM;AAExB,eAAU,OAAO,GAAG,OAAO,OAAO,QAAU;AAE3C,cAAM,QAAQ,aAAa,OAAO;AAClC,cAAM,UAAU,OAAO,WAAY,OAAO,IAAK;AAC/C,cAAM,UAAU,OAAO,WAAY,QAAQ,GAAG,IAAK;AACnD,cAAM,UAAU,OAAO,WAAY,QAAQ,GAAG,IAAK;AAEnD,YAAK,WAAY;AAEhB,gBAAM,cAAc,OAAO,UAAW,QAAQ,IAAI,IAAK;AAEvD,eAAO,cAAc,WAAa,GAAI;AAIrC,iBAAM,cAAc,MAAS;AAC7B,YAAAF,MAAQ,eAAe,IAAM,MAAS;AACtC,YAAAC,MAAQ,eAAe,KAAO,MAAS;AAAA,UAExC,OAAO;AAEN,gBAAI;AACJ,YAAAD,KAAI;AACJ,YAAAC,KAAI;AAAA,UAEL;AAAA,QAED;AAEA,iBAAU,IAAI,GAAG,KAAK,GAAG,KAAO;AAE/B,gBAAM,cAAc,QAAQ,IAAI;AAChC,gBAAM,eAAiB,OAAO,IAAI,KAAU,IAAI,KAAM;AAEtD,mBAAU,YAAa,IAAI,OAAO,WAAY,aAAa,IAAK;AAChE,mBAAU,eAAe,CAAE,IAAI,OAAO,WAAY,cAAc,GAAG,IAAK;AACxE,mBAAU,eAAe,CAAE,IAAI,OAAO,WAAY,cAAc,GAAG,IAAK;AAExE,kBAAS,YAAa,IAAI;AAC1B,kBAAS,eAAe,CAAE,IAAI;AAC9B,kBAAS,eAAe,CAAE,IAAI;AAE9B,cAAK,WAAY;AAEhB,kBAAM,IAAK,GAAGD,IAAGC,EAAE,EAAE,oBAAoB;AAEzC,mBAAQ,YAAa,IAAI,MAAM;AAC/B,mBAAQ,eAAe,CAAE,IAAI,MAAM;AACnC,mBAAQ,eAAe,CAAE,IAAI,MAAM;AAAA,UAEpC;AAAA,QAED;AAAA,MAED;AAEA,eAAS,aAAc,YAAY,IAAI,gBAAiB,UAAU,CAAE,CAAE;AACtE,eAAS,aAAc,UAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AAEnE,UAAK,WAAY;AAEhB,iBAAS,aAAc,SAAS,IAAI,gBAAiB,QAAQ,CAAE,CAAE;AACjE,iBAAS,YAAY;AACrB,iBAAS,QAAQ;AAAA,MAElB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,WAAYF,OAAO;AAE3B,YAAM,WAAW,IAAI,eAAe;AACpC,YAAM,eAAe;AACrB,YAAM,cAAc;AACpB,YAAM,cAAc;AACpB,UAAI,cAAc;AAElB,YAAM,eAAe,iDAAiD;AACtE,YAAM,gBAAgB,IAAI,OAAQ,WAAW,eAAe,eAAe,cAAc,GAAI;AAC7F,YAAM,gBAAgB,IAAI,OAAQ,WAAW,eAAe,eAAe,cAAc,GAAI;AAE7F,YAAM,WAAW,CAAC;AAClB,YAAM,UAAU,CAAC;AACjB,YAAM,aAAa,CAAC;AAEpB,YAAM,SAAS,IAAI,QAAQ;AAE3B,UAAI;AAEJ,UAAI,aAAa;AACjB,UAAI,cAAc;AAClB,UAAI,YAAY;AAEhB,cAAU,SAAS,aAAa,KAAMA,KAAK,OAAQ,MAAO;AAEzD,sBAAc;AAEd,cAAM,QAAQ,OAAQ,CAAE;AAExB,cAAMI,SAAS,SAAS,YAAY,KAAM,KAAM,OAAQ,OAAO,OAAQ,CAAE,IAAI;AAC7E,mBAAW,KAAMA,KAAK;AAEtB,gBAAU,SAAS,YAAY,KAAM,KAAM,OAAQ,MAAO;AAEzD,cAAI,qBAAqB;AACzB,cAAI,qBAAqB;AAEzB,gBAAML,QAAO,OAAQ,CAAE;AAEvB,kBAAU,SAAS,cAAc,KAAMA,KAAK,OAAQ,MAAO;AAE1D,mBAAO,IAAI,WAAY,OAAQ,CAAE,CAAE;AACnC,mBAAO,IAAI,WAAY,OAAQ,CAAE,CAAE;AACnC,mBAAO,IAAI,WAAY,OAAQ,CAAE,CAAE;AACnC;AAAA,UAED;AAEA,kBAAU,SAAS,cAAc,KAAMA,KAAK,OAAQ,MAAO;AAE1D,qBAAS,KAAM,WAAY,OAAQ,CAAE,CAAE,GAAG,WAAY,OAAQ,CAAE,CAAE,GAAG,WAAY,OAAQ,CAAE,CAAE,CAAE;AAC/F,oBAAQ,KAAM,OAAO,GAAG,OAAO,GAAG,OAAO,CAAE;AAC3C;AACA;AAAA,UAED;AAIA,cAAK,uBAAuB,GAAI;AAE/B,oBAAQ,MAAO,2EAA4E,WAAY;AAAA,UAExG;AAIA,cAAK,uBAAuB,GAAI;AAE/B,oBAAQ,MAAO,6EAA8E,WAAY;AAAA,UAE1G;AAEA;AAAA,QAED;AAEA,cAAM,QAAQ;AACd,cAAM,QAAQ,YAAY;AAE1B,iBAAS,SAAS,aAAa;AAE/B,iBAAS,SAAU,OAAO,OAAO,UAAW;AAC5C;AAAA,MAED;AAEA,eAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAC7E,eAAS,aAAc,UAAU,IAAI,uBAAwB,SAAS,CAAE,CAAE;AAE1E,aAAO;AAAA,IAER;AAEA,aAAS,aAAc,QAAS;AAE/B,UAAK,OAAO,WAAW,UAAW;AAEjC,eAAO,IAAI,YAAY,EAAE,OAAQ,MAAO;AAAA,MAEzC;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,aAAc,QAAS;AAE/B,UAAK,OAAO,WAAW,UAAW;AAEjC,cAAM,eAAe,IAAI,WAAY,OAAO,MAAO;AACnD,iBAAU,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAO;AAE1C,uBAAc,CAAE,IAAI,OAAO,WAAY,CAAE,IAAI;AAAA,QAE9C;AAEA,eAAO,aAAa,UAAU;AAAA,MAE/B,OAAO;AAEN,eAAO;AAAA,MAER;AAAA,IAED;AAIA,UAAM,UAAU,aAAcC,KAAK;AAEnC,WAAO,SAAU,OAAQ,IAAI,YAAa,OAAQ,IAAI,WAAY,aAAcA,KAAK,CAAE;AAAA,EAExF;AAED;;;ACvYA,IAAM,kBAAkB;AAExB,IAAM,YAAN,MAAM,mBAAkB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAGf,SAAK,aAAa;AAGlB,SAAK,cAAc;AAAA,EAEpB;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,MAAM,OAAQ;AAC7C,WAAO,QAAS,MAAM,IAAK;AAC3B,WAAO,iBAAkB,MAAM,aAAc;AAC7C,WAAO,mBAAoB,MAAM,eAAgB;AACjD,WAAO,KAAM,KAAK,SAAWK,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOA,OAAO;AAEb,UAAM,QAAQ;AAEd,aAAS,UAAW,MAAM,OAAQ;AAEjC,UAAK,KAAK,aAAa,EAAI;AAE3B,YAAMC,aAAY,iBAAkB,IAAK;AAEzC,UAAI,aAAa;AAEjB,UAAI,OAAO;AAEX,cAAS,KAAK,UAAW;AAAA,QAExB,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC;AAAA,QAED,KAAK;AACJ,6BAAoB,IAAK;AACzB;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,cAAK,KAAK,aAAc,GAAI,EAAI,QAAO,cAAe,IAAK;AAC3D;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,cAAe,IAAK;AAC3B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,iBAAkB,IAAK;AAC9B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,kBAAmB,IAAK;AAC/B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,gBAAiB,IAAK;AAC7B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,iBAAkB,IAAK;AAC9B;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAChC,iBAAO,cAAe,IAAK;AAC3B;AAAA,QAED,KAAK;AACJ,uBAAa;AACb;AAAA,QAED,KAAK;AACJ,kBAAQ,WAAY,MAAM,KAAM;AAEhC,gBAAM,OAAO,KAAK,eAAgB,gCAAgC,MAAO,KAAK;AAC9E,gBAAM,aAAa,KAAK,UAAW,CAAE;AACrC,gBAAM,WAAW,KAAK,gBAAgB,eAAgB,UAAW;AACjE,cAAK,UAAW;AAEf,sBAAW,UAAU,KAAM;AAAA,UAE5B,OAAO;AAEN,oBAAQ,KAAM,4DAA8D,UAAW;AAAA,UAExF;AAEA;AAAA,QAED;AAAA,MAGD;AAEA,UAAK,MAAO;AAEX,YAAK,MAAM,SAAS,UAAa,MAAM,SAAS,QAAS;AAExD,eAAK,MAAM,SAAU,MAAM,MAAM,eAAgB;AAAA,QAElD;AAEA,sBAAe,MAAM,gBAAiB;AAEtC,cAAM,KAAM,IAAK;AAEjB,aAAK,WAAW,EAAE,MAAY,MAAa;AAAA,MAE5C;AAEA,YAAM,aAAa,KAAK;AAExB,eAAU,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAO;AAE9C,cAAMC,QAAO,WAAY,CAAE;AAE3B,YAAK,cAAcA,MAAK,aAAa,WAAWA,MAAK,aAAa,QAAS;AAK1E;AAAA,QAED;AAEA,kBAAWA,OAAM,KAAM;AAAA,MAExB;AAGA,UAAKD,YAAY;AAEhB,uBAAe,IAAI;AAEnB,YAAK,eAAe,SAAS,GAAI;AAEhC,2BAAiB,KAAM,eAAgB,eAAe,SAAS,CAAE,CAAE;AAAA,QAEpE,OAAO;AAEN,2BAAiB,SAAS;AAAA,QAE3B;AAAA,MAED;AAAA,IAED;AAEA,aAAS,cAAe,MAAO;AAE9B,YAAM,OAAO,IAAIE,WAAU;AAE3B,YAAM,QAAQ,IAAI,QAAQ;AAC1B,YAAM,UAAU,IAAI,QAAQ;AAE5B,YAAM,aAAa,IAAI,QAAQ;AAC/B,UAAI,eAAe;AACnB,UAAI,kBAAkB;AAEtB,YAAM,IAAI,KAAK,aAAc,GAAI;AAEjC,UAAK,MAAM,MAAM,MAAM,OAAS,QAAO;AAIvC,YAAM,WAAW,EAAE,MAAO,sBAAuB;AAEjD,eAAU,IAAI,GAAGC,KAAI,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEnD,cAAM,UAAU,SAAU,CAAE;AAE5B,cAAM,OAAO,QAAQ,OAAQ,CAAE;AAC/B,cAAMC,QAAO,QAAQ,MAAO,CAAE,EAAE,KAAK;AAErC,YAAK,iBAAiB,MAAO;AAE5B,4BAAkB;AAClB,yBAAe;AAAA,QAEhB;AAEA,YAAI;AAEJ,gBAAS,MAAO;AAAA,UAEf,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAC5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAElB,kBAAK,MAAM,GAAI;AAEd,qBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAAA,cAE/B,OAAO;AAEN,qBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAAA,cAE/B;AAEA,kBAAK,MAAM,EAAI,YAAW,KAAM,KAAM;AAAA,YAEvC;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAO;AAEpD,oBAAM,IAAI,QAAS,CAAE;AACrB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAO;AAEpD,oBAAM,IAAI,QAAS,CAAE;AACrB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,cAChB;AACA,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AAEzB,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,cAAe,MAAM,GAAG,QAAQ,CAAE;AAAA,gBAClC,cAAe,MAAM,GAAG,QAAQ,CAAE;AAAA,gBAClC,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,cAChB;AACA,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AAEzB,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,cAChB;AACA,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,sBAAQ,IAAI,QAAS,IAAI,CAAE;AAC3B,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AAEzB,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,KAAK,cAAe,MAAM,GAAG,QAAQ,CAAE;AAC7C,oBAAM,KAAK,cAAe,MAAM,GAAG,QAAQ,CAAE;AAC7C,mBAAK;AAAA,gBACJ;AAAA,gBACA;AAAA,gBACA,QAAS,IAAI,CAAE;AAAA,gBACf,QAAS,IAAI,CAAE;AAAA,cAChB;AACA,sBAAQ,IAAI;AACZ,sBAAQ,IAAI;AACZ,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AAEzB,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,OAAM,CAAE,GAAG,CAAE,GAAG,CAAE;AAEzC,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAGtD,kBAAK,QAAS,IAAI,CAAE,KAAK,MAAM,KAAK,QAAS,IAAI,CAAE,KAAK,MAAM,EAAI;AAElE,oBAAM,QAAQ,MAAM,MAAM;AAC1B,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,oBAAM,IAAI,QAAS,IAAI,CAAE;AACzB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB;AAAA,gBACC;AAAA,gBAAM,QAAS,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG;AAAA,gBAAO;AAAA,cACpG;AAEA,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAElB,kBAAK,MAAM,GAAI;AAEd,qBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAAA,cAE/B,OAAO;AAEN,qBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAAA,cAE/B;AAEA,kBAAK,MAAM,EAAI,YAAW,KAAM,KAAM;AAAA,YAEvC;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAO;AAEpD,oBAAM,KAAK,QAAS,CAAE;AACtB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAO;AAEpD,oBAAM,KAAK,QAAS,CAAE;AACtB,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB,mBAAK,OAAQ,MAAM,GAAG,MAAM,CAAE;AAE9B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,cAC1B;AACA,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAE1B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,cAAe,MAAM,GAAG,QAAQ,CAAE;AAAA,gBAClC,cAAe,MAAM,GAAG,QAAQ,CAAE;AAAA,gBAClC,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,cAC1B;AACA,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAE1B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,mBAAK;AAAA,gBACJ,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,cAC1B;AACA,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,sBAAQ,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACrC,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAE1B,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,KAAK;AAE5B,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAEtD,oBAAM,KAAK,cAAe,MAAM,GAAG,QAAQ,CAAE;AAC7C,oBAAM,KAAK,cAAe,MAAM,GAAG,QAAQ,CAAE;AAC7C,mBAAK;AAAA,gBACJ;AAAA,gBACA;AAAA,gBACA,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,gBACzB,MAAM,IAAI,QAAS,IAAI,CAAE;AAAA,cAC1B;AACA,sBAAQ,IAAI;AACZ,sBAAQ,IAAI;AACZ,oBAAM,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AACnC,oBAAM,IAAI,MAAM,IAAI,QAAS,IAAI,CAAE;AAEnC,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AACJ,sBAAU,YAAaA,OAAM,CAAE,GAAG,CAAE,GAAG,CAAE;AAEzC,qBAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAI;AAGtD,kBAAK,QAAS,IAAI,CAAE,KAAK,KAAK,QAAS,IAAI,CAAE,KAAK,EAAI;AAEtD,oBAAM,QAAQ,MAAM,MAAM;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,oBAAM,KAAK,QAAS,IAAI,CAAE;AAC1B,sBAAQ,IAAI,MAAM;AAClB,sBAAQ,IAAI,MAAM;AAClB;AAAA,gBACC;AAAA,gBAAM,QAAS,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG,QAAS,IAAI,CAAE;AAAA,gBAAG;AAAA,gBAAO;AAAA,cACpG;AAEA,kBAAK,MAAM,KAAK,oBAAoB,KAAO,YAAW,KAAM,KAAM;AAAA,YAEnE;AAEA;AAAA,UAED,KAAK;AAAA,UACL,KAAK;AACJ,iBAAK,YAAY,YAAY;AAE7B,gBAAK,KAAK,YAAY,OAAO,SAAS,GAAI;AAGzC,oBAAM,KAAM,UAAW;AACvB,mBAAK,YAAY,aAAa,KAAM,KAAM;AAC1C,6BAAe;AAAA,YAEhB;AAEA;AAAA,UAED;AACC,oBAAQ,KAAM,OAAQ;AAAA,QAExB;AAIA,0BAAkB;AAAA,MAEnB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,mBAAoB,MAAO;AAEnC,UAAK,CAAE,KAAK,SAAS,CAAE,KAAK,MAAM,YAAY,CAAE,KAAK,MAAM,SAAS,OAAS;AAE7E,eAAU,IAAI,GAAG,IAAI,KAAK,MAAM,SAAS,QAAQ,KAAO;AAEvD,cAAM,aAAa,KAAK,MAAM,SAAU,CAAE;AAE1C,YAAK,WAAW,SAAS,EAAI;AAE7B,cAAM,eAAe,WAAW,aAC9B,MAAO,KAAM,EACb,OAAQ,OAAQ,EAChB,IAAK,CAAAC,OAAKA,GAAE,KAAK,CAAE;AAErB,iBAAU,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAO;AAGhD,gBAAM,cAAc,OAAO;AAAA,YAC1B,OAAO,QAAS,WAAW,KAAM,EAAE,OAAQ,CAAE,CAAE,EAAE,CAAE,MAAO,MAAM,EAAG;AAAA,UACpE;AAEA,sBAAa,aAAc,CAAE,CAAE,IAAI,OAAO;AAAA,YACzC,YAAa,aAAc,CAAE,CAAE,KAAK,CAAC;AAAA,YACrC;AAAA,UACD;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAWA,aAAS,gBAAiB,MAAM,IAAI,IAAI,iBAAiB,gBAAgB,YAAY,OAAO,KAAM;AAEjG,UAAK,MAAM,KAAK,MAAM,GAAI;AAGzB,aAAK,OAAQ,IAAI,GAAG,IAAI,CAAE;AAC1B;AAAA,MAED;AAEA,wBAAkB,kBAAkB,KAAK,KAAK;AAG9C,WAAK,KAAK,IAAK,EAAG;AAClB,WAAK,KAAK,IAAK,EAAG;AAGlB,YAAM,OAAQ,MAAM,IAAI,IAAI,KAAM;AAClC,YAAM,OAAQ,MAAM,IAAI,IAAI,KAAM;AAClC,YAAM,MAAM,KAAK,IAAK,eAAgB,IAAI,MAAM,KAAK,IAAK,eAAgB,IAAI;AAC9E,YAAM,MAAM,CAAE,KAAK,IAAK,eAAgB,IAAI,MAAM,KAAK,IAAK,eAAgB,IAAI;AAGhF,UAAI,MAAM,KAAK;AACf,UAAI,MAAM,KAAK;AACf,YAAM,OAAO,MAAM;AACnB,YAAM,OAAO,MAAM;AAGnB,YAAM,KAAK,OAAO,MAAM,OAAO;AAE/B,UAAK,KAAK,GAAI;AAGb,cAAM,IAAI,KAAK,KAAM,EAAG;AACxB,aAAK,IAAI;AACT,aAAK,IAAI;AACT,cAAM,KAAK;AACX,cAAM,KAAK;AAAA,MAEZ;AAEA,YAAM,KAAO,MAAM,OAAO,MAAM;AAChC,YAAM,MAAO,MAAM,MAAM,MAAO;AAChC,UAAIC,KAAI,KAAK,KAAM,KAAK,IAAK,GAAG,EAAG,CAAE;AACrC,UAAK,mBAAmB,WAAa,CAAAA,KAAI,CAAEA;AAC3C,YAAM,MAAMA,KAAI,KAAK,MAAM;AAC3B,YAAM,MAAM,CAAEA,KAAI,KAAK,MAAM;AAG7B,YAAM,KAAK,KAAK,IAAK,eAAgB,IAAI,MAAM,KAAK,IAAK,eAAgB,IAAI,OAAQ,MAAM,IAAI,IAAI,KAAM;AACzG,YAAM,KAAK,KAAK,IAAK,eAAgB,IAAI,MAAM,KAAK,IAAK,eAAgB,IAAI,OAAQ,MAAM,IAAI,IAAI,KAAM;AAGzG,YAAM,QAAQ,SAAU,GAAG,IAAK,MAAM,OAAQ,KAAM,MAAM,OAAQ,EAAG;AACrE,YAAM,QAAQ,UAAY,MAAM,OAAQ,KAAM,MAAM,OAAQ,KAAM,CAAE,MAAM,OAAQ,KAAM,CAAE,MAAM,OAAQ,EAAG,KAAM,KAAK,KAAK;AAE3H,WAAK,YAAY,WAAY,IAAI,IAAI,IAAI,IAAI,OAAO,QAAQ,OAAO,eAAe,GAAG,eAAgB;AAAA,IAEtG;AAEA,aAAS,SAAU,IAAI,IAAI,IAAI,IAAK;AAEnC,YAAM,MAAM,KAAK,KAAK,KAAK;AAC3B,YAAM,MAAM,KAAK,KAAM,KAAK,KAAK,KAAK,EAAG,IAAI,KAAK,KAAM,KAAK,KAAK,KAAK,EAAG;AAC1E,UAAI,MAAM,KAAK,KAAM,KAAK,IAAK,IAAK,KAAK,IAAK,GAAG,MAAM,GAAI,CAAE,CAAE;AAC/D,UAAO,KAAK,KAAK,KAAK,KAAO,EAAI,OAAM,CAAE;AACzC,aAAO;AAAA,IAER;AAMA,aAAS,cAAe,MAAO;AAE9B,YAAMC,KAAI,oBAAqB,KAAK,aAAc,GAAI,KAAK,CAAE;AAC7D,YAAMC,KAAI,oBAAqB,KAAK,aAAc,GAAI,KAAK,CAAE;AAC7D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,KAAK,aAAc,IAAK,KAAK,CAAE;AAC5F,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,KAAK,aAAc,IAAK,KAAK,CAAE;AAC5F,YAAM,IAAI,oBAAqB,KAAK,aAAc,OAAQ,CAAE;AAC5D,YAAM,IAAI,oBAAqB,KAAK,aAAc,QAAS,CAAE;AAI7D,YAAM,MAAM,IAAI;AAEhB,YAAM,OAAO,IAAIN,WAAU;AAG3B,WAAK,OAAQK,KAAI,IAAIC,EAAE;AAGvB,WAAK,OAAQD,KAAI,IAAI,IAAIC,EAAE;AAC3B,UAAK,OAAO,KAAK,OAAO,GAAI;AAE3B,aAAK;AAAA,UACJD,KAAI,IAAI,KAAK;AAAA,UACbC;AAAA,UACAD,KAAI;AAAA,UACJC,KAAI,KAAK;AAAA,UACTD,KAAI;AAAA,UACJC,KAAI;AAAA,QACL;AAAA,MAED;AAGA,WAAK,OAAQD,KAAI,GAAGC,KAAI,IAAI,EAAG;AAC/B,UAAK,OAAO,KAAK,OAAO,GAAI;AAE3B,aAAK;AAAA,UACJD,KAAI;AAAA,UACJC,KAAI,IAAI,KAAK;AAAA,UACbD,KAAI,IAAI,KAAK;AAAA,UACbC,KAAI;AAAA,UACJD,KAAI,IAAI;AAAA,UACRC,KAAI;AAAA,QACL;AAAA,MAED;AAGA,WAAK,OAAQD,KAAI,IAAIC,KAAI,CAAE;AAC3B,UAAK,OAAO,KAAK,OAAO,GAAI;AAE3B,aAAK;AAAA,UACJD,KAAI,KAAK;AAAA,UACTC,KAAI;AAAA,UACJD;AAAA,UACAC,KAAI,IAAI,KAAK;AAAA,UACbD;AAAA,UACAC,KAAI,IAAI;AAAA,QACT;AAAA,MAED;AAGA,WAAK,OAAQD,IAAGC,KAAI,EAAG;AACvB,UAAK,OAAO,KAAK,OAAO,GAAI;AAE3B,aAAK,cAAeD,IAAGC,KAAI,KAAK,KAAKD,KAAI,KAAK,KAAKC,IAAGD,KAAI,IAAIC,EAAE;AAAA,MAEjE;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,iBAAkB,MAAO;AAEjC,eAAS,SAAU,OAAOC,IAAGC,IAAI;AAEhC,cAAMH,KAAI,oBAAqBE,EAAE;AACjC,cAAMD,KAAI,oBAAqBE,EAAE;AAEjC,YAAKC,WAAU,GAAI;AAElB,eAAK,OAAQJ,IAAGC,EAAE;AAAA,QAEnB,OAAO;AAEN,eAAK,OAAQD,IAAGC,EAAE;AAAA,QAEnB;AAEA,QAAAG;AAAA,MAED;AAEA,YAAM,QAAQ;AAEd,YAAM,OAAO,IAAIT,WAAU;AAE3B,UAAIS,SAAQ;AAEZ,WAAK,aAAc,QAAS,EAAE,QAAS,OAAO,QAAS;AAEvD,WAAK,YAAY,YAAY;AAE7B,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,eAAS,SAAU,OAAOF,IAAGC,IAAI;AAEhC,cAAMH,KAAI,oBAAqBE,EAAE;AACjC,cAAMD,KAAI,oBAAqBE,EAAE;AAEjC,YAAKC,WAAU,GAAI;AAElB,eAAK,OAAQJ,IAAGC,EAAE;AAAA,QAEnB,OAAO;AAEN,eAAK,OAAQD,IAAGC,EAAE;AAAA,QAEnB;AAEA,QAAAG;AAAA,MAED;AAEA,YAAM,QAAQ;AAEd,YAAM,OAAO,IAAIT,WAAU;AAE3B,UAAIS,SAAQ;AAEZ,WAAK,aAAc,QAAS,EAAE,QAAS,OAAO,QAAS;AAEvD,WAAK,YAAY,YAAY;AAE7B,aAAO;AAAA,IAER;AAEA,aAAS,gBAAiB,MAAO;AAEhC,YAAMJ,KAAI,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC9D,YAAMC,KAAI,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC9D,YAAM,IAAI,oBAAqB,KAAK,aAAc,GAAI,KAAK,CAAE;AAE7D,YAAM,UAAU,IAAI,KAAK;AACzB,cAAQ,OAAQD,IAAGC,IAAG,GAAG,GAAG,KAAK,KAAK,CAAE;AAExC,YAAM,OAAO,IAAIN,WAAU;AAC3B,WAAK,SAAS,KAAM,OAAQ;AAE5B,aAAO;AAAA,IAER;AAEA,aAAS,iBAAkB,MAAO;AAEjC,YAAMK,KAAI,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC9D,YAAMC,KAAI,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC9D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC/D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAE/D,YAAM,UAAU,IAAI,KAAK;AACzB,cAAQ,WAAYD,IAAGC,IAAG,IAAI,IAAI,GAAG,KAAK,KAAK,CAAE;AAEjD,YAAM,OAAO,IAAIN,WAAU;AAC3B,WAAK,SAAS,KAAM,OAAQ;AAE5B,aAAO;AAAA,IAER;AAEA,aAAS,cAAe,MAAO;AAE9B,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC/D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC/D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAC/D,YAAM,KAAK,oBAAqB,KAAK,aAAc,IAAK,KAAK,CAAE;AAE/D,YAAM,OAAO,IAAIA,WAAU;AAC3B,WAAK,OAAQ,IAAI,EAAG;AACpB,WAAK,OAAQ,IAAI,EAAG;AACpB,WAAK,YAAY,YAAY;AAE7B,aAAO;AAAA,IAER;AAIA,aAAS,WAAY,MAAM,OAAQ;AAElC,cAAQ,OAAO,OAAQ,CAAC,GAAG,KAAM;AAEjC,UAAI,mBAAmB,CAAC;AAExB,UAAK,KAAK,aAAc,OAAQ,GAAI;AAEnC,cAAM,iBAAiB,KAAK,aAAc,OAAQ,EAChD,MAAO,IAAK,EACZ,OAAQ,OAAQ,EAChB,IAAK,OAAK,EAAE,KAAK,CAAE;AAErB,iBAAU,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAO;AAElD,6BAAmB,OAAO,OAAQ,kBAAkB,YAAa,MAAM,eAAgB,CAAE,CAAE,CAAE;AAAA,QAE9F;AAAA,MAED;AAEA,UAAK,KAAK,aAAc,IAAK,GAAI;AAEhC,2BAAmB,OAAO,OAAQ,kBAAkB,YAAa,MAAM,KAAK,aAAc,IAAK,CAAE,CAAE;AAAA,MAEpG;AAEA,eAAS,SAAU,SAAS,QAAQ,gBAAiB;AAEpD,YAAK,mBAAmB,OAAY,kBAAiB,SAAS,KAAM,GAAI;AAEvE,cAAK,EAAE,WAAY,KAAM,EAAI,SAAQ,KAAM,yDAA0D;AAErG,iBAAO;AAAA,QAER;AAEA,YAAK,KAAK,aAAc,OAAQ,EAAI,OAAO,MAAO,IAAI,eAAgB,KAAK,aAAc,OAAQ,CAAE;AACnG,YAAK,iBAAkB,OAAQ,EAAI,OAAO,MAAO,IAAI,eAAgB,iBAAkB,OAAQ,CAAE;AACjG,YAAK,KAAK,SAAS,KAAK,MAAO,OAAQ,MAAM,GAAK,OAAO,MAAO,IAAI,eAAgB,KAAK,MAAO,OAAQ,CAAE;AAAA,MAE3G;AAEA,eAASU,OAAO,GAAI;AAEnB,eAAO,KAAK,IAAK,GAAG,KAAK,IAAK,GAAG,oBAAqB,CAAE,CAAE,CAAE;AAAA,MAE7D;AAEA,eAAS,SAAU,GAAI;AAEtB,eAAO,KAAK,IAAK,GAAG,oBAAqB,CAAE,CAAE;AAAA,MAE9C;AAEA,eAAU,QAAQ,MAAO;AACzB,eAAU,gBAAgB,eAAeA,MAAM;AAC/C,eAAU,aAAa,UAAW;AAClC,eAAU,WAAW,WAAWA,MAAM;AACtC,eAAU,UAAU,QAAS;AAC7B,eAAU,kBAAkB,iBAAiBA,MAAM;AACnD,eAAU,gBAAgB,eAAe,QAAS;AAClD,eAAU,mBAAmB,gBAAiB;AAC9C,eAAU,kBAAkB,eAAgB;AAC5C,eAAU,qBAAqB,oBAAoB,QAAS;AAC5D,eAAU,cAAc,YAAa;AAErC,aAAO;AAAA,IAER;AAIA,aAAS,cAAeH,IAAGC,IAAI;AAE9B,aAAOD,MAAMC,KAAID;AAAA,IAElB;AAIA,aAAS,YAAa,OAAO,OAAO,QAAS;AAE5C,UAAK,OAAO,UAAU,UAAW;AAEhC,cAAM,IAAI,UAAW,oBAAoB,OAAO,KAAM;AAAA,MAEvD;AAGA,YAAM,KAAK;AAAA,QACV,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,KAAK;AAAA,QACL,OAAO;AAAA,MACR;AAGA,YAAM,MAAM;AACZ,YAAM,MAAM;AACZ,YAAM,QAAQ;AACd,YAAM,MAAM;AAEZ,UAAI,QAAQ;AACZ,UAAI,YAAY;AAChB,UAAI,SAAS,IAAI,WAAW;AAC5B,YAAM,SAAS,CAAC;AAEhB,eAAS,iBAAkBI,UAAS,GAAGC,UAAU;AAEhD,cAAM,QAAQ,IAAI,YAAa,2BAA2BD,WAAU,gBAAgB,IAAI,GAAI;AAC5F,cAAM,UAAUC;AAChB,cAAM;AAAA,MAEP;AAEA,eAAS,YAAY;AAEpB,YAAK,WAAW,IAAK;AAEpB,cAAK,aAAa,GAAK,QAAO,KAAM,OAAQ,MAAO,CAAE;AAAA,cAChD,QAAO,KAAM,OAAQ,MAAO,IAAI,KAAK,IAAK,IAAI,OAAQ,QAAS,CAAE,CAAE;AAAA,QAEzE;AAEA,iBAAS;AACT,mBAAW;AAAA,MAEZ;AAEA,UAAI;AACJ,YAAMC,UAAS,MAAM;AAErB,eAAU,IAAI,GAAG,IAAIA,SAAQ,KAAO;AAEnC,kBAAU,MAAO,CAAE;AAGnB,YAAK,MAAM,QAAS,KAAM,KAAK,MAAM,SAAU,OAAO,SAAS,MAAO,KAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAErG,kBAAQ;AACR,mBAAS;AACT,oBAAU;AACV;AAAA,QAED;AAGA,YAAK,UAAU,KAAM;AAGpB,cAAK,GAAG,WAAW,KAAM,OAAQ,GAAI;AAEpC;AAAA,UAED;AAGA,cAAK,GAAG,MAAM,KAAM,OAAQ,KAAK,GAAG,KAAK,KAAM,OAAQ,GAAI;AAE1D,oBAAQ;AACR,qBAAS;AACT;AAAA,UAED;AAEA,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,oBAAQ;AACR,qBAAS;AACT;AAAA,UAED;AAGA,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,gBAAK,WAAY;AAEhB,+BAAkB,SAAS,GAAG,MAAO;AAAA,YAEtC;AAEA,wBAAY;AAAA,UAEb;AAAA,QAED;AAGA,YAAK,UAAU,KAAM;AAEpB,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,sBAAU;AACV;AAAA,UAED;AAEA,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,sBAAU;AACV,oBAAQ;AACR;AAAA,UAED;AAEA,cAAK,GAAG,IAAI,KAAM,OAAQ,GAAI;AAE7B,oBAAQ;AACR;AAAA,UAED;AAGA,cAAK,GAAG,KAAK,KAAM,OAAQ,KACtB,OAAO,WAAW,KAClB,GAAG,KAAK,KAAM,OAAQ,CAAE,CAAE,GAAI;AAElC,6BAAkB,SAAS,GAAG,MAAO;AAAA,UAEtC;AAAA,QAED;AAGA,YAAK,UAAU,OAAQ;AAEtB,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,sBAAU;AACV;AAAA,UAED;AAEA,cAAK,GAAG,IAAI,KAAM,OAAQ,GAAI;AAE7B,oBAAQ;AACR;AAAA,UAED;AAGA,cAAK,GAAG,MAAM,KAAM,OAAQ,KAAK,OAAQ,OAAO,SAAS,CAAE,MAAM,KAAM;AAEtE,6BAAkB,SAAS,GAAG,MAAO;AAAA,UAEtC;AAAA,QAED;AAGA,YAAK,UAAU,KAAM;AAEpB,cAAK,GAAG,MAAM,KAAM,OAAQ,GAAI;AAE/B,wBAAY;AACZ;AAAA,UAED;AAEA,cAAK,GAAG,KAAK,KAAM,OAAQ,GAAI;AAE9B,gBAAK,aAAa,IAAK;AAEtB,0BAAY;AACZ;AAAA,YAED;AAEA,gBAAK,SAAS,WAAW,KAAK,GAAG,KAAK,KAAM,QAAS,GAAI;AAExD,+BAAkB,SAAS,GAAG,MAAO;AAAA,YAEtC;AAAA,UAED;AAAA,QAED;AAIA,YAAK,GAAG,WAAW,KAAM,OAAQ,GAAI;AAEpC,oBAAU;AACV,kBAAQ;AACR,sBAAY;AAAA,QAEb,WAAY,GAAG,MAAM,KAAM,OAAQ,GAAI;AAEtC,oBAAU;AACV,kBAAQ;AACR,sBAAY;AAAA,QAEb,WAAY,GAAG,KAAK,KAAM,OAAQ,GAAI;AAErC,oBAAU;AACV,kBAAQ;AACR,mBAAS;AAAA,QAEV,WAAY,GAAG,MAAM,KAAM,OAAQ,GAAI;AAEtC,oBAAU;AACV,kBAAQ;AACR,mBAAS;AAAA,QAEV,OAAO;AAEN,2BAAkB,SAAS,GAAG,MAAO;AAAA,QAEtC;AAAA,MAED;AAGA,gBAAU;AAEV,aAAO;AAAA,IAER;AAIA,UAAM,QAAQ,CAAE,MAAM,MAAM,MAAM,MAAM,MAAM,IAAK;AAGnD,UAAM,iBAAiB;AAAA,MAEtB,MAAM;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,MAAM,KAAK;AAAA,QACX,MAAM,IAAI;AAAA,QACV,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,MAAM,KAAK;AAAA,QACX,MAAM,IAAI;AAAA,QACV,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,MAAM,IAAI;AAAA,QACV,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,MAAM,IAAI;AAAA,QACV,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,MAAM;AAAA,MACP;AAAA,IAED;AAEA,aAAS,oBAAqB,QAAS;AAEtC,UAAI,UAAU;AAEd,UAAK,OAAO,WAAW,YAAY,kBAAkB,QAAS;AAE7D,iBAAU,IAAI,GAAGC,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,gBAAM,IAAI,MAAO,CAAE;AAEnB,cAAK,OAAO,SAAU,CAAE,GAAI;AAE3B,sBAAU;AACV,qBAAS,OAAO,UAAW,GAAG,OAAO,SAAS,EAAE,MAAO;AACvD;AAAA,UAED;AAAA,QAED;AAAA,MAED;AAEA,UAAIC,SAAQ;AAEZ,UAAK,YAAY,QAAQ,MAAM,gBAAgB,MAAO;AAIrD,QAAAA,SAAQ,eAAgB,IAAK,EAAG,MAAM,WAAY,IAAI,MAAM;AAAA,MAE7D,OAAO;AAEN,QAAAA,SAAQ,eAAgB,OAAQ,EAAG,MAAM,WAAY;AAErD,YAAKA,SAAQ,GAAI;AAIhB,UAAAA,SAAQ,eAAgB,OAAQ,EAAG,IAAK,IAAI,MAAM;AAAA,QAEnD;AAAA,MAED;AAEA,aAAOA,SAAQ,WAAY,MAAO;AAAA,IAEnC;AAIA,aAAS,iBAAkB,MAAO;AAEjC,UAAK,EAAI,KAAK,aAAc,WAAY,KAAO,KAAK,aAAa,UAAW,KAAK,aAAc,GAAI,KAAK,KAAK,aAAc,GAAI,KAAU;AAExI,eAAO;AAAA,MAER;AAEA,YAAMjB,aAAY,mBAAoB,IAAK;AAE3C,UAAK,eAAe,SAAS,GAAI;AAEhC,QAAAA,WAAU,YAAa,eAAgB,eAAe,SAAS,CAAE,CAAE;AAAA,MAEpE;AAEA,uBAAiB,KAAMA,UAAU;AACjC,qBAAe,KAAMA,UAAU;AAE/B,aAAOA;AAAA,IAER;AAEA,aAAS,mBAAoB,MAAO;AAEnC,YAAMA,aAAY,IAAI,QAAQ;AAC9B,YAAMkB,oBAAmB;AAEzB,UAAK,KAAK,aAAa,UAAW,KAAK,aAAc,GAAI,KAAK,KAAK,aAAc,GAAI,IAAM;AAE1F,cAAM,KAAK,oBAAqB,KAAK,aAAc,GAAI,CAAE;AACzD,cAAM,KAAK,oBAAqB,KAAK,aAAc,GAAI,CAAE;AAEzD,QAAAlB,WAAU,UAAW,IAAI,EAAG;AAAA,MAE7B;AAEA,UAAK,KAAK,aAAc,WAAY,GAAI;AAEvC,cAAM,kBAAkB,KAAK,aAAc,WAAY,EAAE,MAAO,GAAI;AAEpE,iBAAU,SAAS,gBAAgB,SAAS,GAAG,UAAU,GAAG,UAAY;AAEvE,gBAAM,gBAAgB,gBAAiB,MAAO,EAAE,KAAK;AAErD,cAAK,kBAAkB,GAAK;AAE5B,gBAAM,aAAa,cAAc,QAAS,GAAI;AAC9C,gBAAM,cAAc,cAAc;AAElC,cAAK,aAAa,KAAK,aAAa,aAAc;AAEjD,kBAAM,gBAAgB,cAAc,MAAO,GAAG,UAAW;AAEzD,kBAAM,QAAQ,YAAa,cAAc,MAAO,aAAa,CAAE,CAAE;AAEjE,YAAAkB,kBAAiB,SAAS;AAE1B,oBAAS,eAAgB;AAAA,cAExB,KAAK;AAEJ,oBAAK,MAAM,UAAU,GAAI;AAExB,wBAAM,KAAK,MAAO,CAAE;AACpB,sBAAI,KAAK;AAET,sBAAK,MAAM,UAAU,GAAI;AAExB,yBAAK,MAAO,CAAE;AAAA,kBAEf;AAEA,kBAAAA,kBAAiB,UAAW,IAAI,EAAG;AAAA,gBAEpC;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,UAAU,GAAI;AAExB,sBAAI,QAAQ;AACZ,sBAAI,KAAK;AACT,sBAAI,KAAK;AAGT,0BAAQ,MAAO,CAAE,IAAI,KAAK,KAAK;AAE/B,sBAAK,MAAM,UAAU,GAAI;AAGxB,yBAAK,MAAO,CAAE;AACd,yBAAK,MAAO,CAAE;AAAA,kBAEf;AAGA,iCAAe,gBAAiB,CAAE,IAAI,CAAE,EAAG;AAC3C,iCAAe,aAAc,KAAM;AACnC,iCAAe,iBAAkB,gBAAgB,cAAe;AAChE,iCAAe,gBAAiB,IAAI,EAAG;AACvC,kBAAAA,kBAAiB,iBAAkB,gBAAgB,cAAe;AAAA,gBAEnE;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,UAAU,GAAI;AAExB,wBAAM,SAAS,MAAO,CAAE;AACxB,sBAAI,SAAS;AAEb,sBAAK,MAAM,UAAU,GAAI;AAExB,6BAAS,MAAO,CAAE;AAAA,kBAEnB;AAEA,kBAAAA,kBAAiB,MAAO,QAAQ,MAAO;AAAA,gBAExC;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,WAAW,GAAI;AAEzB,kBAAAA,kBAAiB;AAAA,oBAChB;AAAA,oBAAG,KAAK,IAAK,MAAO,CAAE,IAAI,KAAK,KAAK,GAAI;AAAA,oBAAG;AAAA,oBAC3C;AAAA,oBAAG;AAAA,oBAAG;AAAA,oBACN;AAAA,oBAAG;AAAA,oBAAG;AAAA,kBACP;AAAA,gBAED;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,WAAW,GAAI;AAEzB,kBAAAA,kBAAiB;AAAA,oBAChB;AAAA,oBAAG;AAAA,oBAAG;AAAA,oBACN,KAAK,IAAK,MAAO,CAAE,IAAI,KAAK,KAAK,GAAI;AAAA,oBAAG;AAAA,oBAAG;AAAA,oBAC3C;AAAA,oBAAG;AAAA,oBAAG;AAAA,kBACP;AAAA,gBAED;AAEA;AAAA,cAED,KAAK;AAEJ,oBAAK,MAAM,WAAW,GAAI;AAEzB,kBAAAA,kBAAiB;AAAA,oBAChB,MAAO,CAAE;AAAA,oBAAG,MAAO,CAAE;AAAA,oBAAG,MAAO,CAAE;AAAA,oBACjC,MAAO,CAAE;AAAA,oBAAG,MAAO,CAAE;AAAA,oBAAG,MAAO,CAAE;AAAA,oBACjC;AAAA,oBAAG;AAAA,oBAAG;AAAA,kBACP;AAAA,gBAED;AAEA;AAAA,YAEF;AAAA,UAED;AAEA,UAAAlB,WAAU,YAAakB,iBAAiB;AAAA,QAEzC;AAAA,MAED;AAEA,aAAOlB;AAAA,IAER;AAEA,aAAS,cAAe,MAAM,GAAI;AAEjC,eAAS,WAAY,IAAK;AAEzB,eAAO,IAAK,GAAG,GAAG,GAAG,GAAG,CAAE,EAAE,aAAc,CAAE;AAE5C,WAAG,IAAK,OAAO,GAAG,OAAO,CAAE;AAAA,MAE5B;AAEA,eAAS,qBAAsB,OAAQ;AAKtC,cAAMS,KAAI,MAAM;AAChB,cAAMC,KAAI,MAAM;AAEhB,cAAM,WAAW,KAAK,IAAK,MAAM,SAAU;AAC3C,cAAM,WAAW,KAAK,IAAK,MAAM,SAAU;AAE3C,cAAMS,MAAK,IAAI,QAASV,KAAI,UAAUA,KAAI,UAAU,CAAE;AACtD,cAAM,KAAK,IAAI,QAAS,CAAEC,KAAI,UAAUA,KAAI,UAAU,CAAE;AAExD,cAAM,KAAKS,IAAG,aAAc,CAAE;AAC9B,cAAM,KAAK,GAAG,aAAc,CAAE;AAE9B,cAAM,KAAK,eAAe;AAAA,UACzB,GAAG;AAAA,UAAG,GAAG;AAAA,UAAG;AAAA,UACZ,GAAG;AAAA,UAAG,GAAG;AAAA,UAAG;AAAA,UACZ;AAAA,UAAG;AAAA,UAAG;AAAA,QACP;AAEA,cAAM,QAAQ,eAAe,KAAM,EAAG,EAAE,OAAO;AAC/C,cAAM,SAAS,eAAe,KAAM,KAAM,EAAE,UAAU;AACtD,cAAM,KAAK,OAAO,SAAU,KAAM;AAClC,cAAM,MAAM,GAAG;AAEf,cAAM,KAAK,mBAAoB,IAAK,CAAE,GAAG,IAAK,CAAE,GAAG,IAAK,CAAE,CAAE;AAC5D,cAAM,UAAU,KAAK,KAAM,GAAG,GAAI;AAClC,cAAM,UAAU,KAAK,KAAM,GAAG,GAAI;AAElC,cAAM,UAAU,IAAI;AACpB,cAAM,UAAU,IAAI;AACpB,cAAM,YAAY,KAAK,MAAO,GAAG,IAAI,GAAG,EAAG;AAE3C,cAAM,iBACH,MAAM,YAAY,MAAM,gBAAkB,IAAI,KAAK,MAAO,OAAO;AAKpE,YAAK,CAAE,eAAgB;AAEtB,gBAAM,SAAS,eAAe;AAAA,YAC7B;AAAA,YAAS;AAAA,YAAG;AAAA,YACZ;AAAA,YAAG;AAAA,YAAS;AAAA,YACZ;AAAA,YAAG;AAAA,YAAG;AAAA,UACP;AAEA,gBAAM,MAAM,eAAe;AAAA,YAC1B,GAAG;AAAA,YAAI,GAAG;AAAA,YAAI;AAAA,YACd,CAAE,GAAG;AAAA,YAAI,GAAG;AAAA,YAAI;AAAA,YAChB;AAAA,YAAG;AAAA,YAAG;AAAA,UACP;AAEA,gBAAM,OAAO,OAAO,SAAU,GAAI,EAAE,SAAU,EAAG;AAEjD,gBAAM,iBAAiB,SAAO;AAE7B,kBAAM,EAAE,GAAG,MAAM,GAAG,KAAK,IACxB,IAAI,QAAS,KAAK,IAAK,GAAI,GAAG,KAAK,IAAK,GAAI,GAAG,CAAE,EAAE,aAAc,IAAK;AAEvE,mBAAO,KAAK,MAAO,MAAM,IAAK;AAAA,UAE/B;AAEA,gBAAM,cAAc,eAAgB,MAAM,WAAY;AACtD,gBAAM,YAAY,eAAgB,MAAM,SAAU;AAElD,cAAK,mBAAoB,CAAE,GAAI;AAE9B,kBAAM,aAAa,CAAE,MAAM;AAAA,UAE5B;AAAA,QAED;AAAA,MAED;AAEA,eAAS,oBAAqB,OAAQ;AAKrC,cAAM,KAAK,mBAAoB,CAAE;AACjC,cAAM,KAAK,mBAAoB,CAAE;AAEjC,cAAM,WAAW;AACjB,cAAM,WAAW;AASjB,cAAM,QACL,KAAK,OAAO,UACT,KAAK,MAAO,EAAE,SAAU,CAAE,GAAG,EAAE,SAAU,CAAE,CAAE,IAC7C,KAAK,MAAO,CAAE,EAAE,SAAU,CAAE,GAAG,EAAE,SAAU,CAAE,CAAE;AAEnD,cAAM,aAAa;AAEnB,YAAK,mBAAoB,CAAE,GAAI;AAE9B,gBAAM,eAAe;AACrB,gBAAM,aAAa;AACnB,gBAAM,aAAa,CAAE,MAAM;AAAA,QAE5B;AAAA,MAED;AAEA,YAAM,WAAW,KAAK;AAEtB,eAAU,IAAI,GAAGH,KAAI,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEnD,cAAM,UAAU,SAAU,CAAE;AAC5B,cAAM,SAAS,QAAQ;AAEvB,iBAAU,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAO;AAE1C,gBAAM,QAAQ,OAAQ,CAAE;AAExB,cAAK,MAAM,aAAc;AAExB,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AAAA,UAEtB,WAAY,MAAM,oBAAqB;AAEtC,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AAAA,UAEtB,WAAY,MAAM,wBAAyB;AAE1C,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AACrB,uBAAY,MAAM,EAAG;AAAA,UAEtB,WAAY,MAAM,gBAAiB;AAIlC,mBAAO,IAAK,MAAM,IAAI,MAAM,EAAG;AAC/B,uBAAY,MAAO;AACnB,kBAAM,KAAK,OAAO;AAClB,kBAAM,KAAK,OAAO;AAIlB,gBAAK,kBAAmB,CAAE,GAAI;AAE7B,mCAAsB,KAAM;AAAA,YAE7B,OAAO;AAEN,kCAAqB,KAAM;AAAA,YAE5B;AAAA,UAED;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAEA,aAAS,mBAAoB,GAAI;AAEhC,YAAMI,MAAK,EAAE;AACb,aAAOA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAI;AAAA,IAEhD;AAEA,aAAS,kBAAmB,GAAI;AAE/B,YAAMA,MAAK,EAAE;AACb,YAAM,WAAWA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE;AAGrD,UAAK,aAAa,EAAI,QAAO;AAE7B,YAAM,KAAK,mBAAoB,CAAE;AACjC,YAAM,KAAK,mBAAoB,CAAE;AAEjC,aAAO,KAAK,IAAK,YAAa,KAAK,GAAK,IAAI,OAAO;AAAA,IAEpD;AAEA,aAAS,mBAAoB,GAAI;AAEhC,YAAMA,MAAK,EAAE;AACb,aAAO,KAAK,KAAMA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,CAAE;AAAA,IAEzD;AAEA,aAAS,mBAAoB,GAAI;AAEhC,YAAMA,MAAK,EAAE;AACb,aAAO,KAAK,KAAMA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,IAAIA,IAAI,CAAE,CAAE;AAAA,IAEzD;AAYA,aAAS,mBAAoBC,IAAGC,IAAGC,IAAI;AAEtC,UAAI,KAAK,KAAK,IAAI,IAAIC;AACtB,YAAM,KAAKH,KAAIE;AACf,YAAM,KAAKF,KAAIE;AACf,YAAM,KAAK,KAAK,KAAM,KAAK,KAAK,IAAID,KAAIA,EAAE;AAE1C,UAAK,KAAK,GAAI;AAEb,cAAM,OAAQ,KAAK;AACnB,QAAAE,KAAI,IAAI;AACR,cAAMH,KAAIG,KAAID,KAAID,KAAIE,KAAIF;AAAA,MAE3B,WAAY,KAAK,GAAI;AAEpB,cAAM,OAAQ,KAAK;AAAA,MAEpB,OAAO;AAIN,cAAM,MAAM;AACZ,cAAM,OAAQ;AAAA,MAEf;AAIA,UAAK,KAAK,GAAI;AAEb,aAAK,KAAK;AAAA,MAEX,OAAO;AAEN,aAAK,KAAK;AAAA,MAEX;AAEA,UAAK,KAAK,IAAK,EAAG,IAAI,IAAI,KAAK,IAAKA,EAAE,GAAI;AAEzC,QAAAE,KAAI,KAAMF,KAAI;AACd,aAAK,IAAI,KAAK,KAAM,IAAIE,KAAIA,EAAE;AAC9B,aAAKA,KAAI;AAAA,MAEV,WAAY,KAAK,IAAKF,EAAE,MAAM,GAAI;AAEjC,aAAK;AACL,aAAK;AAAA,MAEN,OAAO;AAEN,QAAAE,KAAI,OAAQ,KAAKF;AACjB,aAAK,IAAI,KAAK,KAAM,IAAIE,KAAIA,EAAE;AAC9B,aAAKA,KAAI;AAAA,MAEV;AAEA,UAAK,KAAK,GAAI;AAEb,QAAAA,KAAI;AACJ,aAAK,CAAE;AACP,aAAKA;AAAA,MAEN;AAEA,aAAO,EAAE,KAAK,KAAK,IAAI,GAAG;AAAA,IAE3B;AAIA,UAAM,QAAQ,CAAC;AACf,UAAM,cAAc,CAAC;AAErB,UAAM,iBAAiB,CAAC;AAExB,UAAM,iBAAiB,IAAI,QAAQ;AACnC,UAAM,iBAAiB,IAAI,QAAQ;AACnC,UAAM,iBAAiB,IAAI,QAAQ;AACnC,UAAM,iBAAiB,IAAI,QAAQ;AACnC,UAAM,SAAS,IAAI,QAAQ;AAC3B,UAAM,SAAS,IAAI,QAAQ;AAE3B,UAAM,mBAAmB,IAAI,QAAQ;AAErC,UAAM,MAAM,IAAI,UAAU,EAAE,gBAAiBzB,OAAM,eAAgB;AAEnE,cAAW,IAAI,iBAAiB;AAAA,MAC/B,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,kBAAkB;AAAA,IACnB,CAAE;AAEF,UAAMK,QAAO,EAAE,OAAc,KAAK,IAAI,gBAAgB;AAGtD,WAAOA;AAAA,EAER;AAAA,EAEA,OAAO,aAAc,WAAY;AAKhC,UAAM,YAAY;AAElB,UAAM,2BAA2B;AAAA,MAChC,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,IACT;AAEA,UAAM,iBAAiB;AAAA,MACtB,KAAK,yBAAyB;AAAA,MAC9B,GAAG;AAAA,IACJ;AAEA,aAAS,qBAAsB,IAAI,IAAI,IAAI,IAAK;AAE/C,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,QAAS,KAAK,OAAS,KAAK,OAAS,KAAK,OAAS,KAAK;AAC9D,YAAM,QAAS,KAAK,OAAS,KAAK,OAAS,KAAK,OAAS,KAAK;AAC9D,YAAM,SAAU,KAAK,OAAS,KAAK,OAAS,KAAK,OAAS,KAAK;AAC/D,YAAM,KAAK,OAAO;AAClB,YAAMqB,MAAK,OAAO;AAElB,UAAS,UAAU,KAAS,SAAS,KAAW,MAAM,KAAS,MAAM,KAASA,MAAK,KAASA,MAAK,GAAM;AAItG,eAAO;AAAA,MAER,WAAc,SAAS,KAAS,UAAU,GAAM;AAK/C,iBAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,wBAAe,MAAM,IAAI,KAAK,IAAI,IAAI,EAAG;AAEzC,cAAK,eAAe,OAAO,yBAAyB,QAAS;AAE5D,kBAAM,QAAU,MAAM,IAAI,KAAK;AAC/B,mBAAO,EAAE,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,eAAe,EAAE;AAAA,UAEtD,WAAY,eAAe,OAAO,yBAAyB,SAAU;AAEpE,kBAAMlB,KAAI,EAAM,KAAK,eAAe,KAAM,KAAK,KAAO,YAAa,EAAG;AACtE,kBAAMC,KAAI,EAAM,KAAK,eAAe,KAAM,KAAK,KAAO,YAAa,EAAG;AACtE,mBAAO,EAAE,GAAGD,IAAG,GAAGC,IAAG,GAAG,eAAe,EAAG;AAAA,UAE3C;AAAA,QAED;AAEA,eAAO;AAAA,MAER,OAAO;AAIN,iBAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,wBAAe,MAAM,IAAI,KAAK,IAAI,IAAI,EAAG;AAEzC,cAAK,eAAe,OAAO,yBAAyB,QAAS;AAE5D,kBAAM,QAAU,MAAM,IAAI,KAAK;AAC/B,mBAAO,EAAE,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,eAAe,EAAE;AAAA,UAEtD;AAAA,QAED;AAEA,cAAMD,KAAI,EAAM,KAAK,MAAO,KAAK,KAAO,YAAa,EAAG;AACxD,cAAMC,KAAI,EAAM,KAAK,MAAO,KAAK,KAAO,YAAa,EAAG;AACxD,eAAO,EAAE,GAAGD,IAAG,GAAGC,IAAG,GAAG,GAAG;AAAA,MAE5B;AAAA,IAED;AAEA,aAAS,cAAekB,IAAG,WAAW,SAAU;AAE/C,YAAM,KAAK,QAAQ,IAAI,UAAU;AACjC,YAAM,KAAK,QAAQ,IAAI,UAAU;AACjC,YAAM,KAAKA,GAAE,IAAI,UAAU;AAC3B,YAAM,KAAKA,GAAE,IAAI,UAAU;AAC3B,YAAM,KAAK,KAAK,KAAK,KAAK;AAE1B,UAAOA,GAAE,MAAM,UAAU,KAASA,GAAE,MAAM,UAAU,GAAM;AAEzD,uBAAe,MAAM,yBAAyB;AAC9C,uBAAe,IAAI;AACnB;AAAA,MAED;AAEA,UAAOA,GAAE,MAAM,QAAQ,KAASA,GAAE,MAAM,QAAQ,GAAM;AAErD,uBAAe,MAAM,yBAAyB;AAC9C,uBAAe,IAAI;AACnB;AAAA,MAED;AAEA,UAAK,KAAK,CAAE,OAAO,SAAU;AAE5B,uBAAe,MAAM,yBAAyB;AAC9C;AAAA,MAED;AAEA,UAAK,KAAK,OAAO,SAAU;AAE1B,uBAAe,MAAM,yBAAyB;AAC9C;AAAA,MAGD;AAEA,UAAS,KAAK,KAAO,KAAW,KAAK,KAAO,GAAM;AAEjD,uBAAe,MAAM,yBAAyB;AAC9C;AAAA,MAED;AAEA,UAAO,KAAK,KAAM,KAAK,KAAK,KAAK,EAAG,IAAQ,KAAK,KAAM,KAAK,KAAK,KAAK,EAAG,GAAM;AAE9E,uBAAe,MAAM,yBAAyB;AAC9C;AAAA,MAED;AAEA,UAAIF;AAEJ,UAAK,OAAO,GAAI;AAEf,QAAAA,KAAI,KAAK;AAAA,MAEV,OAAO;AAEN,QAAAA,KAAI,KAAK;AAAA,MAEV;AAEA,qBAAe,MAAM,yBAAyB;AAC9C,qBAAe,IAAIA;AAAA,IAEpB;AAEA,aAAS,iBAAkB,OAAO,OAAQ;AAEzC,YAAM,mBAAmB,CAAC;AAC1B,YAAM,gBAAgB,CAAC;AAEvB,eAAUb,SAAQ,GAAGA,SAAQ,MAAM,QAAQA,UAAW;AAErD,cAAM,iBAAiB,MAAOA,SAAQ,CAAE;AACxC,cAAM,eAAe,MAAOA,MAAM;AAElC,iBAAUgB,UAAS,GAAGA,UAAS,MAAM,QAAQA,WAAY;AAExD,gBAAM,iBAAiB,MAAOA,UAAS,CAAE;AACzC,gBAAM,eAAe,MAAOA,OAAO;AAEnC,gBAAM,eAAe,qBAAsB,gBAAgB,cAAc,gBAAgB,YAAa;AAEtG,cAAK,iBAAiB,QAAQ,iBAAiB,KAAM,OAAK,EAAE,KAAK,aAAa,IAAI,OAAO,WAAW,EAAE,KAAK,aAAa,IAAI,OAAO,OAAQ,MAAM,QAAY;AAE5J,6BAAiB,KAAM,YAAa;AACpC,0BAAc,KAAM,IAAI,QAAS,aAAa,GAAG,aAAa,CAAE,CAAE;AAAA,UAEnE;AAAA,QAED;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,yBAA0B,UAAU,aAAa,OAAQ;AAEjE,YAAM,SAAS,IAAI,QAAQ;AAC3B,kBAAY,UAAW,MAAO;AAE9B,YAAM,mBAAmB,CAAC;AAE1B,YAAM,QAAS,UAAQ;AAKtB,YAAK,KAAK,YAAY,cAAe,MAAO,GAAI;AAE/C,gBAAM,gBAAgB,iBAAkB,UAAU,KAAK,MAAO;AAE9D,wBAAc,QAAS,CAAAD,OAAK;AAE3B,6BAAiB,KAAM,EAAE,YAAY,KAAK,YAAY,MAAM,KAAK,MAAM,OAAOA,GAAE,CAAE;AAAA,UAEnF,CAAE;AAAA,QAEH;AAAA,MAED,CAAE;AAEF,uBAAiB,KAAM,CAAE,IAAI,OAAQ;AAEpC,eAAO,GAAG,MAAM,IAAI,GAAG,MAAM;AAAA,MAE9B,CAAE;AAEF,aAAO;AAAA,IAER;AAEA,aAAS,SAAU,YAAY,UAAUE,eAAcC,eAAc,WAAY;AAEhF,UAAK,cAAc,QAAQ,cAAc,UAAa,cAAc,IAAK;AAExE,oBAAY;AAAA,MAEb;AAEA,YAAM,oBAAoB,IAAI,QAAQ;AACtC,iBAAW,YAAY,UAAW,iBAAkB;AAEpD,YAAM,WAAW,CAAE,IAAI,QAASD,eAAc,kBAAkB,CAAE,GAAG,IAAI,QAASC,eAAc,kBAAkB,CAAE,CAAE;AAEtH,YAAM,wBAAwB,yBAA0B,UAAU,WAAW,aAAa,QAAS;AAEnG,4BAAsB,KAAM,CAAE,IAAI,OAAQ;AAEzC,eAAO,GAAG,MAAM,IAAI,GAAG,MAAM;AAAA,MAE9B,CAAE;AAEF,YAAM,oBAAoB,CAAC;AAC3B,YAAM,qBAAqB,CAAC;AAE5B,4BAAsB,QAAS,CAAAxB,OAAK;AAEnC,YAAKA,GAAE,eAAe,WAAW,YAAa;AAE7C,4BAAkB,KAAMA,EAAE;AAAA,QAE3B,OAAO;AAEN,6BAAmB,KAAMA,EAAE;AAAA,QAE5B;AAAA,MAED,CAAE;AAEF,YAAM,eAAe,kBAAmB,CAAE,EAAE,MAAM;AAGlD,YAAM,QAAQ,CAAC;AACf,UAAI,IAAI;AAER,aAAQ,IAAI,mBAAmB,UAAU,mBAAoB,CAAE,EAAE,MAAM,IAAI,cAAe;AAEzF,YAAK,MAAM,SAAS,KAAK,MAAO,MAAM,SAAS,CAAE,MAAM,mBAAoB,CAAE,EAAE,YAAa;AAE3F,gBAAM,IAAI;AAAA,QAEX,OAAO;AAEN,gBAAM,KAAM,mBAAoB,CAAE,EAAE,UAAW;AAAA,QAEhD;AAEA;AAAA,MAED;AAEA,YAAM,KAAM,WAAW,UAAW;AAElC,UAAK,cAAc,WAAY;AAE9B,cAAM,SAAS,MAAM,SAAS,MAAM,IAAI,OAAO;AAC/C,cAAM,YAAY,MAAO,MAAM,SAAS,CAAE;AAE1C,eAAO,EAAE,YAAY,WAAW,YAAY,QAAgB,KAAK,UAAU;AAAA,MAE5E,WAAY,cAAc,WAAY;AAGrC,YAAI,SAAS;AACb,YAAI,YAAY;AAChB,YAAI,cAAc;AAElB,iBAAUA,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAO;AAEzC,gBAAM,aAAa,MAAOA,EAAE;AAC5B,cAAK,QAAS;AAEb,0BAAc,SAAU,UAAW,EAAE;AACrC,qBAAS;AACT,wBAAY;AAAA,UAEb,WAAY,gBAAgB,SAAU,UAAW,EAAE,MAAO;AAEzD,0BAAc,SAAU,UAAW,EAAE;AACrC,qBAAS;AAAA,UAEV;AAAA,QAED;AAEA,eAAO,EAAE,YAAY,WAAW,YAAY,QAAgB,KAAK,UAAU;AAAA,MAE5E,OAAO;AAEN,gBAAQ,KAAM,iBAAiB,YAAY,iCAAkC;AAAA,MAE9E;AAAA,IAED;AASA,QAAI,eAAe;AACnB,QAAI,eAAe,CAAE;AAErB,QAAI,cAAc,UAAU,SAAS,IAAK,CAAAqB,OAAK;AAE9C,YAAM,SAASA,GAAE,UAAU;AAC3B,UAAI,OAAO,CAAE;AACb,UAAI,OAAO;AACX,UAAI,OAAO,CAAE;AACb,UAAI,OAAO;AAIX,eAAU,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAO;AAE1C,cAAMA,KAAI,OAAQ,CAAE;AAEpB,YAAKA,GAAE,IAAI,MAAO;AAEjB,iBAAOA,GAAE;AAAA,QAEV;AAEA,YAAKA,GAAE,IAAI,MAAO;AAEjB,iBAAOA,GAAE;AAAA,QAEV;AAEA,YAAKA,GAAE,IAAI,MAAO;AAEjB,iBAAOA,GAAE;AAAA,QAEV;AAEA,YAAKA,GAAE,IAAI,MAAO;AAEjB,iBAAOA,GAAE;AAAA,QAEV;AAAA,MAED;AAGA,UAAK,gBAAgB,MAAO;AAE3B,uBAAe,OAAO;AAAA,MAEvB;AAEA,UAAK,gBAAgB,MAAO;AAE3B,uBAAe,OAAO;AAAA,MAEvB;AAEA,aAAO,EAAE,QAAQA,GAAE,QAAQ,QAAgB,MAAM,WAAW,YAAa,MAAO,GAAG,YAAY,IAAK,aAAa,IAAI,KAAM,IAAI,QAAS,MAAM,IAAK,GAAG,IAAI,QAAS,MAAM,IAAK,CAAE,EAAE;AAAA,IAEnL,CAAE;AAEF,kBAAc,YAAY,OAAQ,QAAM,GAAG,OAAO,SAAS,CAAE;AAE7D,aAAU,aAAa,GAAG,aAAa,YAAY,QAAQ,cAAgB;AAE1E,kBAAa,UAAW,EAAE,aAAa;AAAA,IAExC;AAGA,UAAM,UAAU,YAAY,IAAK,CAAAA,OAAK,SAAUA,IAAG,aAAa,cAAc,cAAgB,UAAU,WAAW,UAAU,SAAS,MAAM,WAAW,MAAY,CAAE;AAGrK,UAAM,iBAAiB,CAAC;AACxB,gBAAY,QAAS,CAAAA,OAAK;AAEzB,YAAM,WAAW,QAASA,GAAE,UAAW;AAEvC,UAAK,CAAE,SAAS,QAAS;AAExB,cAAM,QAAQ,IAAI,MAAM;AACxB,cAAM,SAASA,GAAE;AACjB,cAAM,QAAQ,QAAQ,OAAQ,OAAK,EAAE,UAAU,EAAE,QAAQA,GAAE,UAAW;AACtE,cAAM,QAAS,OAAK;AAEnB,gBAAM,OAAO,YAAa,EAAE,UAAW;AACvC,gBAAM,OAAO,IAAI,KAAK;AACtB,eAAK,SAAS,KAAK;AACnB,gBAAM,MAAM,KAAM,IAAK;AAAA,QAExB,CAAE;AACF,uBAAe,KAAM,KAAM;AAAA,MAE5B;AAAA,IAED,CAAE;AAEF,WAAO;AAAA,EAER;AAAA,EAEA,OAAO,eAAgBI,QAAO,OAAO,UAAU,SAAS,YAAa;AASpE,IAAAA,SAAQA,WAAU,SAAYA,SAAQ;AACtC,YAAQ,UAAU,SAAY,QAAQ;AACtC,eAAW,aAAa,SAAY,WAAW;AAC/C,cAAU,YAAY,SAAY,UAAU;AAC5C,iBAAa,eAAe,SAAY,aAAa;AAErD,WAAO;AAAA,MACN,aAAa;AAAA,MACb,aAAaA;AAAA,MACb,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,kBAAkB;AAAA,IACnB;AAAA,EAED;AAAA,EAEA,OAAO,eAAgB,QAAQ,OAAO,cAAc,aAAc;AAUjE,UAAM,WAAW,CAAC;AAClB,UAAM,UAAU,CAAC;AACjB,UAAM,MAAM,CAAC;AAEb,QAAK,WAAU,0BAA2B,QAAQ,OAAO,cAAc,aAAa,UAAU,SAAS,GAAI,MAAM,GAAI;AAEpH,aAAO;AAAA,IAER;AAEA,UAAM,WAAW,IAAI,eAAe;AACpC,aAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAC7E,aAAS,aAAc,UAAU,IAAI,uBAAwB,SAAS,CAAE,CAAE;AAC1E,aAAS,aAAc,MAAM,IAAI,uBAAwB,KAAK,CAAE,CAAE;AAElE,WAAO;AAAA,EAER;AAAA,EAEA,OAAO,0BAA2B,QAAQ,OAAO,cAAc,aAAa,UAAU,SAAS,KAAK,cAAe;AASlH,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,WAAW,IAAI,QAAQ;AAC7B,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,UAAU,IAAI,QAAQ;AAC5B,UAAM,UAAU,IAAI,QAAQ;AAC5B,UAAM,gBAAgB,IAAI,QAAQ;AAClC,UAAM,gBAAgB,IAAI,QAAQ;AAClC,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,aAAa,IAAI,QAAQ;AAE/B,mBAAe,iBAAiB,SAAY,eAAe;AAC3D,kBAAc,gBAAgB,SAAY,cAAc;AACxD,mBAAe,iBAAiB,SAAY,eAAe;AAG3D,aAAS,uBAAwB,MAAO;AAExC,UAAM,YAAY,OAAO;AAEzB,QAAK,YAAY,EAAI,QAAO;AAE5B,UAAM,WAAW,OAAQ,CAAE,EAAE,OAAQ,OAAQ,YAAY,CAAE,CAAE;AAE7D,QAAI;AACJ,QAAI,gBAAgB,OAAQ,CAAE;AAC9B,QAAI;AAEJ,UAAM,eAAe,MAAM,cAAc;AAEzC,UAAM,SAAS,KAAM,YAAY;AACjC,QAAI,KAAK,GAAG;AAEZ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,0BAA0B;AAE9B,QAAI,cAAc;AAClB,QAAI,oBAAoB,eAAe;AACvC,QAAI,sBAAsB,eAAe;AAGzC,cAAW,OAAQ,CAAE,GAAG,OAAQ,CAAE,GAAG,QAAS,EAAE,eAAgB,YAAa;AAC7E,eAAW,KAAM,OAAQ,CAAE,CAAE,EAAE,IAAK,QAAS;AAC7C,eAAW,KAAM,OAAQ,CAAE,CAAE,EAAE,IAAK,QAAS;AAC7C,YAAQ,KAAM,UAAW;AACzB,YAAQ,KAAM,UAAW;AAEzB,aAAU,SAAS,GAAG,SAAS,WAAW,UAAY;AAErD,qBAAe,OAAQ,MAAO;AAG9B,UAAK,WAAW,YAAY,GAAI;AAE/B,YAAK,UAAW;AAGf,sBAAY,OAAQ,CAAE;AAAA,QAEvB,MAAO,aAAY;AAAA,MAEpB,OAAO;AAEN,oBAAY,OAAQ,SAAS,CAAE;AAAA,MAEhC;AAGA,YAAM,UAAU;AAChB,gBAAW,eAAe,cAAc,OAAQ;AAEhD,eAAS,KAAM,OAAQ,EAAE,eAAgB,YAAa;AACtD,oBAAc,KAAM,YAAa,EAAE,IAAK,QAAS;AACjD,oBAAc,KAAM,YAAa,EAAE,IAAK,QAAS;AAEjD,WAAK,KAAK;AAEV,0BAAoB;AAEpB,UAAK,cAAc,QAAY;AAG9B,kBAAW,cAAc,WAAW,QAAS;AAE7C,iBAAS,KAAM,QAAS,EAAE,eAAgB,YAAa;AACvD,mBAAW,KAAM,YAAa,EAAE,IAAK,QAAS;AAC9C,mBAAW,KAAM,YAAa,EAAE,IAAK,QAAS;AAE9C,2BAAmB;AACnB,iBAAS,WAAY,WAAW,aAAc;AAC9C,YAAK,QAAQ,IAAK,QAAS,IAAI,GAAI;AAElC,6BAAmB;AAAA,QAEpB;AAEA,YAAK,WAAW,EAAI,2BAA0B;AAE9C,iBAAS,WAAY,WAAW,YAAa;AAC7C,iBAAS,UAAU;AACnB,cAAM,MAAM,KAAK,IAAK,QAAQ,IAAK,QAAS,CAAE;AAG9C,YAAK,MAAM,OAAO,SAAU;AAG3B,gBAAM,YAAY,eAAe;AACjC,mBAAS,eAAgB,CAAE,SAAU;AACrC,mBAAS,WAAY,cAAc,aAAc;AACjD,mBAAS,KAAM,QAAS,EAAE,UAAW,SAAU,EAAE,IAAK,QAAS;AAC/D,qBAAW,KAAM,QAAS,EAAE,OAAO;AACnC,gBAAM,eAAe,SAAS,OAAO;AACrC,gBAAM,oBAAoB,SAAS,OAAO;AAC1C,mBAAS,aAAc,iBAAkB;AACzC,mBAAS,WAAY,WAAW,YAAa;AAC7C,gBAAM,oBAAoB,SAAS,OAAO;AAC1C,mBAAS,aAAc,iBAAkB;AAEzC,cAAK,SAAS,IAAK,UAAW,IAAI,qBAAqB,SAAS,IAAK,UAAW,IAAI,mBAAoB;AAEvG,gCAAoB;AAAA,UAErB;AAEA,qBAAW,KAAM,QAAS,EAAE,IAAK,YAAa;AAC9C,qBAAW,IAAK,YAAa;AAE7B,oBAAU;AAEV,cAAK,mBAAoB;AAExB,gBAAK,kBAAmB;AAEvB,yBAAW,KAAM,UAAW;AAC5B,4BAAc,KAAM,UAAW;AAAA,YAEhC,OAAO;AAEN,yBAAW,KAAM,UAAW;AAC5B,4BAAc,KAAM,UAAW;AAAA,YAEhC;AAAA,UAED,OAAO;AAIN,iCAAqB;AAAA,UAEtB;AAEA,kBAAS,MAAM,gBAAiB;AAAA,YAE/B,KAAK;AAEJ,uCAA0B,kBAAkB,mBAAmB,EAAG;AAElE;AAAA,YAED,KAAK;AAIJ,sDAAyC,kBAAkB,iBAAkB;AAI7E,kBAAK,kBAAmB;AAEvB,mCAAoB,cAAc,eAAe,YAAY,IAAI,CAAE;AAAA,cAEpE,OAAO;AAEN,mCAAoB,cAAc,YAAY,eAAe,IAAI,CAAE;AAAA,cAEpE;AAEA;AAAA,YAED,KAAK;AAAA,YACL,KAAK;AAAA,YACL;AAEC,oBAAM,gBAAkB,eAAe,MAAM,mBAAqB;AAElE,kBAAK,gBAAgB,GAAI;AAIxB,oBAAK,MAAM,mBAAmB,cAAe;AAE5C,2CAA0B,kBAAkB,mBAAmB,EAAG;AAClE;AAAA,gBAED,OAAO;AAIN,0DAAyC,kBAAkB,iBAAkB;AAI7E,sBAAK,kBAAmB;AAEvB,6BAAS,WAAY,YAAY,aAAc,EAAE,eAAgB,aAAc,EAAE,IAAK,aAAc;AACpG,6BAAS,WAAY,YAAY,UAAW,EAAE,eAAgB,aAAc,EAAE,IAAK,UAAW;AAE9F,8BAAW,eAAe,IAAI,CAAE;AAChC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,cAAc,IAAI,GAAI;AAEjC,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,UAAU,IAAI,CAAE;AAE3B,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B,OAAO;AAEN,6BAAS,WAAY,YAAY,aAAc,EAAE,eAAgB,aAAc,EAAE,IAAK,aAAc;AACpG,6BAAS,WAAY,YAAY,UAAW,EAAE,eAAgB,aAAc,EAAE,IAAK,UAAW;AAE9F,8BAAW,eAAe,IAAI,CAAE;AAChC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,cAAc,IAAI,GAAI;AAEjC,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,UAAU,IAAI,CAAE;AAE3B,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,UAAU,IAAI,CAAE;AAC3B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B;AAAA,gBAED;AAAA,cAED,OAAO;AAIN,oBAAK,mBAAoB;AAIxB,sBAAK,kBAAmB;AAEvB,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAE7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B,OAAO;AAEN,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAE7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B;AAGA,sBAAK,kBAAmB;AAEvB,+BAAW,KAAM,UAAW;AAAA,kBAE7B,OAAO;AAEN,+BAAW,KAAM,UAAW;AAAA,kBAE7B;AAAA,gBAGD,OAAO;AAIN,sBAAK,kBAAmB;AAEvB,8BAAW,eAAe,IAAI,CAAE;AAChC,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,cAAc,IAAI,GAAI;AAEjC,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B,OAAO;AAEN,8BAAW,eAAe,IAAI,CAAE;AAChC,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,cAAc,IAAI,GAAI;AAEjC,8BAAW,cAAc,IAAI,GAAI;AACjC,8BAAW,YAAY,IAAI,CAAE;AAC7B,8BAAW,YAAY,IAAI,CAAE;AAAA,kBAE9B;AAAA,gBAED;AAEA,0BAAU;AAAA,cAEX;AAEA;AAAA,UAEF;AAAA,QAED,OAAO;AAIN,+BAAqB;AAAA,QAEtB;AAAA,MAED,OAAO;AAIN,6BAAqB;AAAA,MAEtB;AAEA,UAAK,CAAE,YAAY,WAAW,YAAY,GAAI;AAG7C,uBAAgB,OAAQ,CAAE,GAAG,SAAS,SAAS,kBAAkB,MAAM,EAAG;AAAA,MAE3E;AAIA,WAAK;AAEL,sBAAgB;AAEhB,iBAAW,KAAM,UAAW;AAC5B,iBAAW,KAAM,UAAW;AAAA,IAE7B;AAEA,QAAK,CAAE,UAAW;AAGjB,qBAAgB,cAAc,eAAe,eAAe,kBAAkB,OAAO,EAAG;AAAA,IAEzF,WAAY,qBAAqB,UAAW;AAI3C,UAAI,YAAY;AAChB,UAAI,YAAY;AAEhB,UAAK,4BAA4B,kBAAmB;AAEnD,oBAAY;AACZ,oBAAY;AAAA,MAEb;AAEA,UAAK,kBAAmB;AAEvB,YAAK,WAAW,yBAA0B;AAEzC,oBAAU,QAAS,UAAU,IAAI,CAAE;AACnC,oBAAU,QAAS,UAAU,IAAI,CAAE;AAEnC,cAAK,SAAU;AAEd,sBAAU,QAAS,UAAU,IAAI,CAAE;AAAA,UAEpC;AAAA,QAED;AAAA,MAED,OAAO;AAEN,YAAK,WAAW,CAAE,yBAA0B;AAE3C,oBAAU,QAAS,UAAU,IAAI,CAAE;AACnC,oBAAU,QAAS,UAAU,IAAI,CAAE;AAEnC,cAAK,SAAU;AAEd,sBAAU,QAAS,UAAU,IAAI,CAAE;AAAA,UAEpC;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAEA,WAAO;AAMP,aAAS,UAAW,IAAI,IAAI,QAAS;AAEpC,aAAO,WAAY,IAAI,EAAG;AAC1B,aAAO,OAAO,IAAK,CAAE,OAAO,GAAG,OAAO,CAAE,EAAE,UAAU;AAAA,IAErD;AAEA,aAAS,UAAWC,WAAU,GAAG,GAAI;AAEpC,UAAK,UAAW;AAEf,iBAAU,iBAAkB,IAAIA,UAAS;AACzC,iBAAU,oBAAoB,CAAE,IAAIA,UAAS;AAC7C,iBAAU,oBAAoB,CAAE,IAAI;AAEpC,YAAK,SAAU;AAEd,kBAAS,iBAAkB,IAAI;AAC/B,kBAAS,oBAAoB,CAAE,IAAI;AACnC,kBAAS,oBAAoB,CAAE,IAAI;AAAA,QAEpC;AAEA,6BAAqB;AAErB,YAAK,KAAM;AAEV,cAAK,mBAAoB,IAAI;AAC7B,cAAK,sBAAsB,CAAE,IAAI;AAEjC,iCAAuB;AAAA,QAExB;AAAA,MAED;AAEA,qBAAe;AAAA,IAEhB;AAEA,aAAS,mBAAoB,QAAQ,IAAI,IAAI,GAAG,GAAI;AAKnD,eAAS,KAAM,EAAG,EAAE,IAAK,MAAO,EAAE,UAAU;AAC5C,eAAS,KAAM,EAAG,EAAE,IAAK,MAAO,EAAE,UAAU;AAE5C,UAAI,QAAQ,KAAK;AACjB,YAAM,MAAM,SAAS,IAAK,QAAS;AACnC,UAAK,KAAK,IAAK,GAAI,IAAI,EAAI,SAAQ,KAAK,IAAK,KAAK,KAAM,GAAI,CAAE;AAE9D,eAAS;AAET,eAAS,KAAM,EAAG;AAElB,eAAU,IAAI,GAAG,KAAK,eAAe,GAAG,IAAI,IAAI,KAAO;AAEtD,iBAAS,KAAM,QAAS,EAAE,aAAc,QAAQ,KAAM;AAEtD,kBAAW,UAAU,GAAG,CAAE;AAC1B,kBAAW,UAAU,GAAG,CAAE;AAC1B,kBAAW,QAAQ,GAAG,GAAI;AAE1B,iBAAS,KAAM,QAAS;AAAA,MAEzB;AAEA,gBAAW,UAAU,GAAG,CAAE;AAC1B,gBAAW,IAAI,GAAG,CAAE;AACpB,gBAAW,QAAQ,GAAG,GAAI;AAAA,IAE3B;AAEA,aAAS,uBAAuB;AAE/B,gBAAW,YAAY,IAAI,CAAE;AAC7B,gBAAW,YAAY,IAAI,CAAE;AAC7B,gBAAW,eAAe,IAAI,CAAE;AAEhC,gBAAW,YAAY,IAAI,CAAE;AAC7B,gBAAW,eAAe,IAAI,CAAE;AAChC,gBAAW,eAAe,IAAI,CAAE;AAAA,IAEjC;AAEA,aAAS,yBAA0BC,mBAAkBC,oBAAmB,GAAI;AAE3E,UAAKA,oBAAoB;AAIxB,YAAKD,mBAAmB;AAIvB,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAChC,oBAAW,YAAY,IAAI,CAAE;AAI7B,oBAAW,eAAe,GAAG,CAAE;AAC/B,oBAAW,YAAY,GAAG,CAAE;AAC5B,oBAAW,YAAY,GAAG,GAAI;AAAA,QAE/B,OAAO;AAIN,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAIhC,oBAAW,eAAe,GAAG,CAAE;AAC/B,oBAAW,YAAY,GAAG,CAAE;AAC5B,oBAAW,YAAY,GAAG,CAAE;AAAA,QAE7B;AAAA,MAED,OAAO;AAIN,YAAKA,mBAAmB;AAEvB,oBAAW,eAAe,GAAG,CAAE;AAC/B,oBAAW,YAAY,GAAG,CAAE;AAC5B,oBAAW,cAAc,GAAG,GAAI;AAAA,QAEjC,OAAO;AAEN,oBAAW,eAAe,GAAG,CAAE;AAC/B,oBAAW,YAAY,GAAG,CAAE;AAC5B,oBAAW,cAAc,GAAG,GAAI;AAAA,QAEjC;AAAA,MAED;AAAA,IAED;AAEA,aAAS,wCAAyCA,mBAAkBC,oBAAoB;AAEvF,UAAKA,oBAAoB;AAExB,YAAKD,mBAAmB;AAEvB,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAChC,oBAAW,YAAY,IAAI,CAAE;AAE7B,oBAAW,eAAe,IAAI,CAAE;AAChC,oBAAW,cAAc,IAAI,GAAI;AACjC,oBAAW,YAAY,IAAI,CAAE;AAE7B,oBAAW,cAAc,IAAI,GAAI;AACjC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAAA,QAE9B,OAAO;AAEN,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,eAAe,IAAI,CAAE;AAEhC,oBAAW,eAAe,IAAI,CAAE;AAChC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,cAAc,IAAI,GAAI;AAEjC,oBAAW,cAAc,IAAI,GAAI;AACjC,oBAAW,YAAY,IAAI,CAAE;AAC7B,oBAAW,YAAY,IAAI,CAAE;AAAA,QAE9B;AAAA,MAED;AAAA,IAED;AAEA,aAAS,eAAgB,QAAQ,IAAI,IAAIA,mBAAkB,OAAO,GAAI;AAKrE,cAAS,MAAM,eAAgB;AAAA,QAE9B,KAAK;AAEJ,cAAK,OAAQ;AAEZ,+BAAoB,QAAQ,IAAI,IAAI,GAAG,GAAI;AAAA,UAE5C,OAAO;AAEN,+BAAoB,QAAQ,IAAI,IAAI,GAAG,GAAI;AAAA,UAE5C;AAEA;AAAA,QAED,KAAK;AAEJ,cAAK,OAAQ;AAEZ,qBAAS,WAAY,IAAI,MAAO;AAChC,qBAAS,IAAK,SAAS,GAAG,CAAE,SAAS,CAAE;AAEvC,qBAAS,WAAY,UAAU,QAAS,EAAE,IAAK,MAAO;AACtD,qBAAS,WAAY,UAAU,QAAS,EAAE,IAAK,MAAO;AAGtD,gBAAKA,mBAAmB;AAEvB,uBAAS,QAAS,UAAU,IAAI,CAAE;AAClC,uBAAS,QAAS,UAAU,IAAI,CAAE;AAClC,uBAAS,QAAS,UAAU,IAAI,CAAE;AAAA,YAEnC,OAAO;AAEN,uBAAS,QAAS,UAAU,IAAI,CAAE;AAElC,kBAAK,IAAI,IAAI,CAAE,MAAM,IAAI,SAAS,QAAS,UAAU,IAAI,CAAE,IAAI,SAAS,QAAS,UAAU,IAAI,CAAE;AACjG,uBAAS,QAAS,UAAU,IAAI,CAAE;AAAA,YAEnC;AAAA,UAED,OAAO;AAEN,qBAAS,WAAY,IAAI,MAAO;AAChC,qBAAS,IAAK,SAAS,GAAG,CAAE,SAAS,CAAE;AAEvC,qBAAS,WAAY,UAAU,QAAS,EAAE,IAAK,MAAO;AACtD,qBAAS,WAAY,UAAU,QAAS,EAAE,IAAK,MAAO;AAEtD,kBAAM,KAAK,SAAS;AAGpB,gBAAKA,mBAAmB;AAEvB,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AACvC,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AACvC,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AAAA,YAExC,OAAO;AAEN,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AACvC,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AACvC,uBAAS,QAAS,UAAU,KAAK,IAAI,CAAE;AAAA,YAExC;AAAA,UAED;AAEA;AAAA,QAED,KAAK;AAAA,QACL;AAGC;AAAA,MAEF;AAAA,IAED;AAEA,aAAS,uBAAwBE,SAAS;AAKzC,UAAI,YAAY;AAChB,eAAU,IAAI,GAAGlB,KAAIkB,QAAO,SAAS,GAAG,IAAIlB,IAAG,KAAO;AAErD,YAAKkB,QAAQ,CAAE,EAAE,WAAYA,QAAQ,IAAI,CAAE,CAAE,IAAI,aAAc;AAE9D,sBAAY;AACZ;AAAA,QAED;AAAA,MAED;AAEA,UAAK,CAAE,UAAY,QAAOA;AAE1B,YAAM,YAAY,CAAC;AACnB,gBAAU,KAAMA,QAAQ,CAAE,CAAE;AAE5B,eAAU,IAAI,GAAGlB,KAAIkB,QAAO,SAAS,GAAG,IAAIlB,IAAG,KAAO;AAErD,YAAKkB,QAAQ,CAAE,EAAE,WAAYA,QAAQ,IAAI,CAAE,CAAE,KAAK,aAAc;AAE/D,oBAAU,KAAMA,QAAQ,CAAE,CAAE;AAAA,QAE7B;AAAA,MAED;AAEA,gBAAU,KAAMA,QAAQA,QAAO,SAAS,CAAE,CAAE;AAE5C,aAAO;AAAA,IAER;AAAA,EAED;AAGD;;;ACzkGA,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAEf,SAAK,QAAQ;AAEb,SAAK,QAAQ;AAEb,SAAK,YAAY,CAAC;AAClB,SAAK,SAAS,CAAC;AAAA,EAEhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,OAAS,KAAK,SAAS,KAAO,YAAY,eAAgB,GAAI,IAAI,KAAK;AAE7E,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,mBAAoB,KAAK,eAAgB;AAEhD,WAAO,KAAM,KAAK,SAAWC,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,OAAM,IAAK,CAAE;AAAA,MAEnC,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAO,aAAa,MAAO;AAE1B,SAAK,QAAQ,IAAI,MAAM;AACvB,SAAK,YAAY,CAAC;AAClB,SAAK,SAAS,CAAC;AAEf,SAAK,SAAU,aAAa,IAAK;AAEjC,aAAU,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAO;AAE/C,WAAK,MAAM,IAAK,KAAK,OAAQ,CAAE,CAAE;AAAA,IAElC;AAEA,WAAO,KAAK;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAU,aAAa,MAAO;AAE7B,UAAMA,QAAO,IAAI,SAAU,WAAY;AACvC,UAAM,QAAQ,IAAI,MAAOA,OAAM,GAAG,KAAK,YAAa;AAEpD,QAAK,MAAM,OAAO,aAAa,MAAM,OAAO,UAAU,MAAM,OAAO,UAAW;AAE7E,UAAI,OAAO,MAAM,UAAU;AAE3B,aAAQ,MAAO;AAEd,YAAK,KAAK,OAAO,aAAc;AAE9B,gBAAM,UAAU,KAAK,UAAU;AAC/B,eAAK,aAAc,uBAAuB,OAAQ;AAAA,QAEnD,WAAY,KAAK,OAAO,OAAQ;AAE/B,eAAK,aAAc,MAAM,IAAK;AAAA,QAE/B,OAAO;AAEN,eAAK,aAAc,yBAAyB,KAAK,KAAM;AAAA,QAExD;AAEA,eAAO,MAAM,UAAU;AAAA,MAExB;AAAA,IAED;AAEA,SAAK,aAAc,YAAY,KAAK,OAAO,SAAS,SAAU;AAAA,EAE/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAc,OAAO,MAAO;AAE3B,QAAI,OAAO,MAAM,UAAU;AAE3B,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,cAAe;AAE/B,cAAM,UAAU,CAAE,KAAK,UAAU;AACjC,aAAK,aAAc,mBAAmB,OAAQ;AAAA,MAE/C,WAAY,KAAK,OAAO,cAAe;AAEtC,cAAMC,SAAQ,KAAK,UAAU;AAC7B,aAAK,aAAc,mBAAmBA,MAAM;AAC5C,aAAK,MAAM,MAAM,IAAKA,QAAOA,QAAOA,MAAM;AAAA,MAE3C,WAAY,KAAK,OAAO,cAAe;AAEtC,aAAK,aAAc,cAAe;AAClC,aAAK,gBAAiB,IAAK;AAAA,MAE5B,WAAY,KAAK,OAAO,WAAY;AAEnC,aAAK,aAAc,UAAW;AAC9B,aAAK,kBAAmB,MAAM,IAAK;AAAA,MAEpC,OAAO;AAEN,aAAK,aAAc,0BAA0B,KAAK,KAAM;AAAA,MAEzD;AAEA,aAAO,MAAM,UAAU;AAAA,IAExB;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAiB,OAAQ;AAExB,UAAMC,QAAO,MAAM,WAAW;AAE9B,QAAI,OAAO,MAAM,UAAU;AAC3B,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,cAAe;AAE/B,cAAM,OAAO,KAAK,SAAU,IAAK;AACjC,aAAK,OAAOA;AACZ,aAAK,OAAO,KAAM,IAAK;AAAA,MAExB,OAAO;AAEN,aAAK,aAAc,iCAAiC,KAAK,KAAM;AAAA,MAEhE;AAEA,aAAO,MAAM,UAAW;AAAA,IAEzB;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAmB,OAAO,MAAO;AAEhC,QAAI,OAAO,MAAM,UAAU;AAC3B,UAAM,WAAW,IAAI,kBAAkB;AAEvC,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,UAAW;AAE3B,iBAAS,OAAO,KAAK,WAAW;AAChC,aAAK,aAAc,cAAc,SAAS,IAAK;AAAA,MAEhD,WAAY,KAAK,OAAO,UAAW;AAElC,aAAK,aAAc,cAAe;AAClC,iBAAS,YAAY;AAAA,MAEtB,WAAY,KAAK,OAAO,eAAgB;AAEvC,cAAMC,SAAQ,KAAK,SAAS;AAC5B,iBAAS,qBAAqBA;AAC9B,aAAK,aAAc,6BAA6BA,MAAM;AAAA,MAEvD,WAAY,KAAK,OAAO,cAAe;AAEtC,iBAAS,OAAO;AAChB,aAAK,aAAc,gBAAiB;AAAA,MAErC,WAAY,KAAK,OAAO,cAAe;AAEtC,aAAK,aAAc,sBAAuB;AAC1C,iBAAS,WAAW;AAAA,MAErB,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,kBAAmB;AACtC,iBAAS,QAAQ,KAAK,UAAW,IAAK;AAAA,MAEvC,WAAY,KAAK,OAAO,cAAe;AAEtC,aAAK,aAAc,mBAAoB;AACvC,iBAAS,WAAW,KAAK,UAAW,IAAK;AAAA,MAE1C,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,kBAAmB;AACtC,iBAAS,QAAQ,KAAK,UAAW,IAAK;AAAA,MAEvC,WAAY,KAAK,OAAO,eAAgB;AAEvC,cAAM,YAAY,KAAK,eAAgB,IAAK;AAC5C,iBAAS,YAAY,YAAY;AACjC,aAAK,aAAc,oBAAoB,SAAU;AAAA,MAElD,WAAY,KAAK,OAAO,kBAAmB;AAE1C,cAAM,eAAe,KAAK,eAAgB,IAAK;AAC/C,iBAAS,UAAU,IAAI;AACvB,aAAK,aAAc,sBAAsB,YAAa;AACtD,iBAAS,cAAc,SAAS,UAAU,IAAI,OAAO;AAAA,MAEtD,WAAY,KAAK,OAAO,YAAa;AAEpC,aAAK,aAAc,aAAc;AACjC,iBAAS,MAAM,KAAK,QAAS,MAAM,IAAK;AAAA,MAEzC,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,YAAa;AAChC,iBAAS,UAAU,KAAK,QAAS,MAAM,IAAK;AAAA,MAE7C,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,eAAgB;AACnC,iBAAS,WAAW,KAAK,QAAS,MAAM,IAAK;AAAA,MAE9C,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,gBAAiB;AACpC,iBAAS,cAAc,KAAK,QAAS,MAAM,IAAK;AAAA,MAEjD,OAAO;AAEN,aAAK,aAAc,gCAAgC,KAAK,KAAM;AAAA,MAE/D;AAEA,aAAO,MAAM,UAAU;AAAA,IAExB;AAEA,SAAK,UAAW,SAAS,IAAK,IAAI;AAAA,EAEnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAU,OAAQ;AAEjB,QAAI,OAAO,MAAM,UAAW;AAE5B,UAAM,WAAW,IAAI,eAAe;AAEpC,UAAM,WAAW,IAAI,kBAAkB;AACvC,UAAM,OAAO,IAAI,KAAM,UAAU,QAAS;AAC1C,SAAK,OAAO;AAEZ,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,aAAc;AAE9B,cAAM,SAAS,KAAK,SAAU;AAE9B,aAAK,aAAc,gBAAgB,MAAO;AAI1C,cAAM,WAAW,CAAC;AAElB,iBAAU,IAAI,GAAG,IAAI,QAAQ,KAAQ;AAEpC,mBAAS,KAAM,KAAK,UAAW,CAAE;AACjC,mBAAS,KAAM,KAAK,UAAW,CAAE;AACjC,mBAAS,KAAM,KAAK,UAAW,CAAE;AAAA,QAElC;AAEA,iBAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAAA,MAE9E,WAAY,KAAK,OAAO,YAAa;AAEpC,aAAK,cAAe,MAAM,IAAK;AAAA,MAEhC,WAAY,KAAK,OAAO,WAAY;AAEnC,cAAM,SAAS,KAAK,SAAU;AAE9B,aAAK,aAAc,YAAY,MAAO;AAItC,cAAM,MAAM,CAAC;AAEb,iBAAU,IAAI,GAAG,IAAI,QAAQ,KAAO;AAEnC,cAAI,KAAM,KAAK,UAAW,CAAE;AAC5B,cAAI,KAAM,KAAK,UAAW,CAAE;AAAA,QAE7B;AAEA,iBAAS,aAAc,MAAM,IAAI,uBAAwB,KAAK,CAAE,CAAE;AAAA,MAGnE,WAAY,KAAK,OAAO,aAAc;AAErC,aAAK,aAAc,gCAAiC;AAEpD,cAAMC,UAAS,CAAC;AAChB,iBAAU,IAAI,GAAG,IAAI,IAAI,KAAO;AAE/B,UAAAA,QAAQ,CAAE,IAAI,KAAK,UAAW;AAAA,QAE/B;AAEA,cAAMC,UAAS,IAAI,QAAQ;AAG3B,QAAAA,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AAGjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,EAAG;AAGlC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,CAAE,IAAID,QAAQ,CAAE;AACjC,QAAAC,QAAO,SAAU,EAAG,IAAID,QAAQ,CAAE;AAClC,QAAAC,QAAO,SAAU,EAAG,IAAID,QAAQ,EAAG;AAGnC,QAAAC,QAAO,SAAU,EAAG,IAAI;AACxB,QAAAA,QAAO,SAAU,EAAG,IAAI;AACxB,QAAAA,QAAO,SAAU,EAAG,IAAI;AACxB,QAAAA,QAAO,SAAU,EAAG,IAAI;AAExB,QAAAA,QAAO,UAAU;AAEjB,cAAMC,WAAU,IAAI,QAAQ;AAC5B,QAAAA,SAAQ,KAAMD,OAAO,EAAE,OAAO;AAC9B,iBAAS,aAAcC,QAAQ;AAE/B,QAAAD,QAAO,UAAW,KAAK,UAAU,KAAK,YAAY,KAAK,KAAM;AAAA,MAE9D,OAAO;AAEN,aAAK,aAAc,4BAA4B,KAAK,KAAM;AAAA,MAE3D;AAEA,aAAO,MAAM,UAAW;AAAA,IAEzB;AAEA,aAAS,qBAAqB;AAE9B,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAe,OAAO,MAAO;AAE5B,UAAM,QAAQ,MAAM,SAAU;AAE9B,SAAK,aAAc,eAAe,KAAM;AAExC,UAAME,SAAQ,CAAC;AAEf,aAAU,IAAI,GAAG,IAAI,OAAO,EAAG,GAAI;AAElC,MAAAA,OAAM,KAAM,MAAM,SAAU,GAAG,MAAM,SAAU,GAAG,MAAM,SAAU,CAAE;AAEpE,YAAM,SAAU;AAAA,IAEjB;AAEA,SAAK,SAAS,SAAUA,MAAM;AAI9B,QAAI,gBAAgB;AACpB,QAAI,QAAQ;AAEZ,WAAQ,CAAE,MAAM,YAAa;AAE5B,YAAM,WAAW,MAAM,UAAW;AAElC,UAAK,SAAS,OAAO,eAAgB;AAEpC,aAAK,aAAc,sBAAuB;AAE1C,cAAM,QAAQ,KAAK,kBAAmB,QAAS;AAC/C,cAAM,QAAQ,MAAM,MAAM,SAAS;AAEnC,aAAK,SAAS,SAAU,OAAO,OAAO,aAAc;AAEpD,iBAAS;AACT;AAEA,cAAM,WAAW,KAAK,UAAW,MAAM,IAAK;AAE5C,YAAK,MAAM,QAAS,KAAK,QAAS,MAAM,MAAQ,MAAK,WAAW,CAAC;AAEjE,YAAK,aAAa,QAAY;AAE7B,eAAK,SAAS,KAAM,QAAS;AAAA,QAE9B;AAAA,MAED,OAAO;AAEN,aAAK,aAAc,qCAAqC,SAAS,KAAM;AAAA,MAExE;AAAA,IAED;AAEA,QAAK,KAAK,SAAS,WAAW,EAAI,MAAK,WAAW,KAAK,SAAU,CAAE;AAAA,EAEpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,QAAS,OAAO,MAAO;AAEtB,QAAI,OAAO,MAAM,UAAW;AAC5B,QAAI,UAAU,CAAC;AAEf,UAAM,SAAS,IAAI,cAAe,KAAK,OAAQ;AAC/C,WAAO,QAAS,KAAK,gBAAgB,IAAK,EAAE,eAAgB,KAAK,WAAY;AAE7E,WAAQ,MAAO;AAEd,UAAK,KAAK,OAAO,aAAc;AAE9B,cAAML,QAAO,KAAK,WAAW;AAC7B,kBAAU,OAAO,KAAMA,KAAK;AAE5B,aAAK,aAAc,iBAAiB,OAAOA,KAAK;AAAA,MAEjD,WAAY,KAAK,OAAO,iBAAkB;AAEzC,gBAAQ,OAAO,IAAI,KAAK,UAAW;AACnC,aAAK,aAAc,oBAAoB,QAAQ,OAAO,CAAE;AAAA,MAEzD,WAAY,KAAK,OAAO,iBAAkB;AAEzC,gBAAQ,OAAO,IAAI,KAAK,UAAW;AACnC,aAAK,aAAc,oBAAoB,QAAQ,OAAO,CAAE;AAAA,MAEzD,WAAY,KAAK,OAAO,gBAAiB;AAExC,gBAAQ,OAAO,IAAI,KAAK,UAAW;AACnC,aAAK,aAAc,oBAAoB,QAAQ,OAAO,CAAE;AAAA,MAEzD,WAAY,KAAK,OAAO,gBAAiB;AAExC,gBAAQ,OAAO,IAAI,KAAK,UAAW;AACnC,aAAK,aAAc,oBAAoB,QAAQ,OAAO,CAAE;AAAA,MAEzD,OAAO;AAEN,aAAK,aAAc,8BAA8B,KAAK,KAAM;AAAA,MAE7D;AAEA,aAAO,MAAM,UAAW;AAAA,IAEzB;AAEA,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAmB,OAAQ;AAE1B,UAAMA,QAAO,MAAM,WAAW;AAC9B,UAAM,WAAW,MAAM,SAAS;AAEhC,SAAK,aAAc,oBAAoBA,KAAK;AAC5C,SAAK,aAAc,qBAAqB,QAAS;AAEjD,UAAMK,SAAQ,CAAC;AACf,aAAU,IAAI,GAAG,IAAI,UAAU,EAAG,GAAI;AAErC,MAAAA,OAAM,KAAM,MAAM,SAAU,CAAE;AAAA,IAE/B;AAEA,WAAO,EAAE,MAAML,OAAM,OAAOK,OAAM;AAAA,EAEnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAW,OAAQ;AAElB,UAAM,WAAW,MAAM,UAAW;AAClC,UAAM,QAAQ,IAAI,MAAM;AAExB,QAAK,SAAS,OAAO,YAAY,SAAS,OAAO,cAAe;AAE/D,YAAM,IAAI,SAAS,SAAU;AAC7B,YAAMC,KAAI,SAAS,SAAU;AAC7B,YAAMC,KAAI,SAAS,SAAU;AAE7B,YAAM,OAAQ,IAAI,KAAKD,KAAI,KAAKC,KAAI,GAAI;AAExC,WAAK,aAAc,kBAAkB,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM,CAAE;AAAA,IAEhF,WAAY,SAAS,OAAO,WAAW,SAAS,OAAO,aAAc;AAEpE,YAAM,IAAI,SAAS,UAAW;AAC9B,YAAMD,KAAI,SAAS,UAAW;AAC9B,YAAMC,KAAI,SAAS,UAAW;AAE9B,YAAM,OAAQ,GAAGD,IAAGC,EAAE;AAEtB,WAAK,aAAc,kBAAkB,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM,CAAE;AAAA,IAEhF,OAAO;AAEN,WAAK,aAAc,gCAAgC,SAAS,KAAM;AAAA,IAEnE;AAEA,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAgB,OAAQ;AAEvB,UAAM,WAAW,MAAM,UAAW;AAElC,YAAS,SAAS,IAAK;AAAA,MAEtB,KAAK;AACJ,eAAS,SAAS,UAAW,IAAI;AACjC;AAAA,MAED,KAAK;AACJ,eAAO,SAAS,UAAW;AAC3B;AAAA,MAED;AACC,aAAK,aAAc,qCAAqC,SAAS,KAAM;AACvE,eAAO;AAAA,IAET;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAc,SAAU;AAEvB,QAAK,KAAK,OAAQ;AAEjB,cAAQ,IAAK,OAAQ;AAAA,IAEtB;AAAA,EAED;AAED;AAIA,IAAM,QAAN,MAAM,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUX,YAAaT,OAAMU,WAAU,cAAe;AAE3C,SAAK,OAAOV;AAEZ,SAAK,SAASU;AAEd,SAAK,WAAWA;AAChB,SAAK,eAAe;AAEpB,QAAK,KAAK,wBAAwB,UAAW;AAE5C,WAAK,eAAe,WAAY;AAAA,MAAC;AAAA,IAElC;AAEA,SAAK,KAAK,KAAK,SAAS;AACxB,SAAK,OAAO,KAAK,UAAU;AAC3B,SAAK,MAAM,KAAK,SAAS,KAAK;AAE9B,QAAK,KAAK,MAAMV,MAAK,YAAa;AAEjC,WAAK,aAAc,iCAAiCU,SAAS;AAAA,IAE9D;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY;AAEX,QAAK,KAAK,YAAa;AAEtB,aAAO;AAAA,IAER;AAEA,QAAI;AAEH,YAAM,OAAO,IAAI,OAAO,KAAK,MAAM,KAAK,UAAU,KAAK,YAAa;AACpE,WAAK,YAAY,KAAK;AACtB,aAAO;AAAA,IAER,SAAU,GAAI;AAEb,WAAK,aAAc,6BAA6B,KAAK,QAAS;AAC9D,aAAO;AAAA,IAER;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,QAAQ;AAEX,WAAO,KAAK,GAAG,SAAU,EAAG;AAAA,EAE7B;AAAA,EAEA,IAAI,aAAa;AAEhB,WAAO,KAAK,YAAY,KAAK;AAAA,EAE9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW;AAEV,UAAM,IAAI,KAAK,KAAK,SAAU,KAAK,UAAU,IAAK;AAClD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY;AAEX,QAAI;AAEH,YAAM,IAAI,KAAK,KAAK,WAAY,KAAK,UAAU,IAAK;AACpD,WAAK,YAAY;AACjB,aAAO;AAAA,IAER,SAAU,GAAI;AAEb,WAAK,aAAc,IAAI,MAAM,KAAK,WAAW,MAAM,KAAK,KAAK,UAAW;AACxE,aAAO;AAAA,IAER;AAAA,EAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU;AAET,UAAM,IAAI,KAAK,KAAK,SAAU,KAAK,UAAU,IAAK;AAClD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY;AAEX,UAAM,IAAI,KAAK,KAAK,SAAU,KAAK,UAAU,IAAK;AAClD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY;AAEX,UAAM,IAAI,KAAK,KAAK,UAAW,KAAK,UAAU,IAAK;AACnD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW;AAEV,UAAM,IAAI,KAAK,KAAK,UAAW,KAAK,UAAU,IAAK;AACnD,SAAK,YAAY;AACjB,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa;AAEZ,QAAI,IAAI;AACR,QAAIC,KAAI,KAAK,SAAS;AACtB,WAAQA,IAAI;AAEX,WAAK,OAAO,aAAcA,EAAE;AAC5B,MAAAA,KAAI,KAAK,SAAS;AAAA,IAEnB;AAEA,WAAO;AAAA,EAER;AAED;AAGA,IAAM,WAAW;AAGjB,IAAM,YAAY;AAElB,IAAM,SAAS;AACf,IAAM,cAAc;AAEpB,IAAM,UAAU;AAChB,IAAM,WAAW;AACjB,IAAM,eAAe;AACrB,IAAM,cAAc;AACpB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,QAAQ;AACd,IAAM,eAAe;AACrB,IAAM,eAAe;AAwBrB,IAAM,YAAY;AAClB,IAAM,WAAW;AACjB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,gBAAgB;AAEtB,IAAM,mBAAmB;AAOzB,IAAM,eAAe;AAErB,IAAM,eAAe;AACrB,IAAM,WAAW;AAKjB,IAAM,gBAAgB;AACtB,IAAM,aAAa;AAQnB,IAAM,cAAc;AAIpB,IAAM,cAAc;AAIpB,IAAM,cAAc;AAgBpB,IAAM,cAAc;AAGpB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AAOxB,IAAM,eAAe;AA8BrB,IAAM,eAAe;AACrB,IAAM,cAAc;AAEpB,IAAM,aAAa;AACnB,IAAM,gBAAgB;AAGtB,IAAM,YAAY;AAClB,IAAM,cAAc;;;AC5hCpB,IAAIC,QAAO,CAAC;AAAA,CAGX,WAAU;AAAC;AAAa,MAAI,IAAE,SAAS,KAAI;AAAC,aAASC,GAAEC,IAAE;AAAC,WAAK,UAAQ,iBAAeA;AAAA,IAAC;AAAC,IAAAD,GAAE,YAAU,IAAI;AAAM,IAAAA,GAAE,UAAU,OAAK;AAAY,IAAAA,GAAE,cAAYA;AAAE,WAAOA;AAAA,EAAC,EAAE,GAAE,KAAG,SAAS,KAAI;AAAC,QAAIC,KAAE,IAAI,WAAW,CAAC,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,CAAC,GAAEC,KAAE,MAAK,KAAG,KAAI,KAAG,MAAK,KAAG,MAAK,KAAG,MAAK,KAAG,MAAK,IAAE,MAAK,KAAG;AAAK,aAASC,IAAGC,IAAE;AAAC,UAAGA,MAAG,KAAK,CAAAA,KAAE,CAAC;AAAE,UAAGA,GAAE,KAAG,KAAK,CAAAA,GAAE,IAAE;AAAG,WAAK,IAAEA,GAAE;AAAE,WAAK,IAAEA,GAAE;AAAA,IAAC;AAAC,aAAS,GAAGA,IAAE,GAAE;AAAC,UAAI,IAAE,GAAE,IAAE,CAAC,GAAEC,IAAEC,IAAEC,KAAE,IAAGC;AAAE,aAAMD,KAAE,KAAG,CAACH,GAAEG,KAAE,CAAC,GAAE;AAAC,QAAAA;AAAA,MAAG;AAAC,QAAE,KAAK,EAAC,UAAS,CAAC,GAAE,OAAM,EAAC,CAAC;AAAE,UAAIE,KAAE,EAAE,CAAC;AAAE,WAAIJ,KAAE,GAAEA,KAAEE,IAAEF,MACnoB;AAAC,aAAIC,KAAE,GAAEA,KAAEF,GAAEC,EAAC,GAAEC,MAAI;AAAC,UAAAG,KAAE,EAAE,IAAI;AAAE,UAAAA,GAAE,SAASA,GAAE,KAAK,IAAE,EAAE,CAAC;AAAE,iBAAMA,GAAE,QAAM,GAAE;AAAC,YAAAA,KAAE,EAAE,IAAI;AAAA,UAAC;AAAC,UAAAA,GAAE;AAAQ,YAAE,KAAKA,EAAC;AAAE,iBAAM,EAAE,UAAQJ,IAAE;AAAC,cAAE,KAAKG,KAAE,EAAC,UAAS,CAAC,GAAE,OAAM,EAAC,CAAC;AAAE,YAAAC,GAAE,SAASA,GAAE,KAAK,IAAED,GAAE;AAAS,YAAAC,KAAED;AAAA,UAAC;AAAC;AAAA,QAAG;AAAC,YAAGH,KAAE,IAAEE,IAAE;AAAC,YAAE,KAAKC,KAAE,EAAC,UAAS,CAAC,GAAE,OAAM,EAAC,CAAC;AAAE,UAAAC,GAAE,SAASA,GAAE,KAAK,IAAED,GAAE;AAAS,UAAAC,KAAED;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,EAAE,CAAC,EAAE;AAAA,IAAQ;AAAC,aAAS,GAAGJ,IAAE,GAAE,GAAE;AAAC,aAAO,OAAKA,GAAE,IAAE,KAAG,IAAE;AAAA,IAAE;AAAC,aAAS,GAAGA,IAAE,GAAE,GAAE,GAAEC,IAAEC,IAAEC,IAAEE,IAAED,IAAE,GAAE;AAAC,UAAG,KAAG,KAAK,KAAE;AAAG,UAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAGE,KAAE,GAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAEC,KAAE,GAAEC,IAAEC,IAAEC,IAAEC;AAAE,eAASC,KAAG;AAAC,YAAG,IAAE,GAAE;AAAC;AAAI,iBAAO,KAAG,IAAE;AAAA,QAAC;AAAC,YAAEb,GAAE,GAAG;AAAE,YAAG,MAAI,KAAI;AAAC,cAAIc,KAAEd,GAAE,GAAG;AAAE,cAAGc,IAAE;AAAC,gBAAGA,OAAI,OAAK,GAAE;AAAC,mBAAG;AAAE,kBAAIC,KAAEC,GAAEhB,IAAE,CAAC;AAAE,mBAAG;AAAE,kBAAGe,KAAE,KAAGA,OAAI,EAAE,GAAE;AAAC,sBAAM,IAAI,eAAe,qDAAoDA,EAAC;AAAA,cAAC;AAAA,YAAC,WAASD,OAAI,KAAI;AAAC,kBAAG,GAAE;AAAC,oBAAI,IAAER,KAAE;AACzrB,oBAAG,IAAE,KAAG,IAAE,EAAE,IAAE,IAAG;AAAC,wBAAM,IAAI,eAAe,yGAA2G,CAAC;AAAA,gBAAC;AAAA,cAAC;AAAC,oBAAM,IAAI,eAAe,mDAAmD;AAAA,YAAC;AAAC,kBAAM,IAAI,EAAE,mBAAmB;AAAA,UAAC;AAAA,QAAC;AAAC,YAAE;AAAE,eAAO,MAAI;AAAA,MAAC;AAAC,eAAS,EAAEQ,IAAE;AAAC,YAAIC,KAAED;AAAE,eAAM,MAAG;AAAC,UAAAC,KAAEA,GAAEF,GAAE,CAAC;AAAE,kBAAO,OAAOE,IAAE;AAAA,YAAC,KAAI;AAAS,qBAAOA;AAAA,YAAE,KAAI;AAAS;AAAA,UAAQ;AAAC,gBAAM,IAAI,EAAE,0BAA0B;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,EAAED,IAAE;AAAC,YAAIG,KAAE;AAAE,eAAMH,KAAE,GAAE;AAAC,UAAAG,KAAEA,MAAG,IAAEJ,GAAE;AAAE,UAAAC;AAAA,QAAG;AAAC,eAAOG;AAAA,MAAC;AAAC,eAAS,EAAEH,IAAE;AAAC,YAAGA,OAAI,GAAE;AAAC,iBAAOD,GAAE,MAAI,IAAE,IAAE;AAAA,QAAE;AAAC,YAAII,KAAE,EAAEH,EAAC;AAAE,YAAGG,MAAG,KAAGH,KAAE,GAAE;AAAC,iBAAOG;AAAA,QAAC;AAAC,eAAOA,MAAG,MAAIH,MAAG;AAAA,MAAC;AAAC,eAAS,EAAEP,IAAEO,IAAE;AAAC,YAAIC,KAAE,EAAER,GAAE,CAAC,GAAE,IAAEQ,OAAI,IAAE,IAAE,EAAEA,EAAC,GAAEG,KAAE;AAClnB,QAAAX,GAAE,EAAEO,EAAC,IAAEP,GAAE,KAAG;AAAE,eAAMW,KAAE,IAAG;AAAC,cAAI,IAAE,EAAEX,GAAE,CAAC,GAAE,IAAE,IAAE,IAAGY,KAAE,KAAG;AAAE,cAAG,MAAI,GAAE;AAAC,gBAAGA,KAAE,IAAG;AAAC;AAAA,YAAK;AAAC,YAAAD,MAAG;AAAG;AAAA,UAAQ;AAAC,UAAAA,MAAGC;AAAE,cAAI,IAAEtB,GAAEqB,EAAC;AAAE,UAAAX,GAAE,EAAEO,KAAE,CAAC,IAAE,EAAE,CAAC;AAAE,UAAAI;AAAA,QAAG;AAAA,MAAC;AAAC,eAASE,GAAEb,IAAEO,IAAE;AAAC,YAAIC,KAAE,EAAER,GAAE,CAAC,GAAE,IAAEQ,OAAI,IAAE,IAAE,EAAEA,EAAC,KAAGX;AAAE,QAAAG,GAAE,EAAEO,EAAC,IAAEP,GAAE,KAAG;AAAA,MAAC;AAAC,eAASc,GAAEd,IAAEO,IAAE;AAAC,QAAAP,GAAE,EAAEO,EAAC,KAAGD,GAAE,KAAGT;AAAA,MAAC;AAAC,eAAS,EAAEG,IAAEO,IAAE;AAAC,YAAG,IAAE,GAAE;AAAC;AAAI;AAAA,QAAM;AAAC,YAAII,KAAEhB,IAAEa,KAAEZ;AAAE,eAAMe,MAAGH,IAAE;AAAC,cAAI,IAAE,EAAER,GAAE,CAAC,GAAE,IAAE,IAAE,IAAG,IAAE,KAAG;AAAE,cAAG,MAAI,GAAE;AAAC,gBAAG,IAAE,IAAG;AAAC,kBAAE,EAAE,CAAC,KAAG,KAAG,KAAG;AAAE;AAAA,YAAK;AAAC,YAAAW,MAAG;AAAG;AAAA,UAAQ;AAAC,UAAAA,MAAG;AAAE,cAAIC,KAAEtB,GAAEqB,EAAC;AAAE,UAAAX,GAAE,EAAEO,KAAEK,EAAC,IAAE,EAAE,CAAC,KAAG,KAAGf;AAAG,UAAAc;AAAA,QAAG;AAAA,MAAC;AAAC,eAAS,GAAGX,IAAEO,IAAE;AAAC,YAAII,KAAEhB,IAAEa,KAAEZ,IAAE,IAAE,GAAE,GAAE;AAAE,eAAMe,MAAGH,IAAE;AAAC,cAAII,KAAEL,KAAEjB,GAAEqB,EAAC,GAAE,IAAEX,GAAE,EAAEY,EAAC,IAAE,IAAE,KAAG;AAAE,kBAAO,GAAE;AAAA,YAAC,KAAK;AAAE,kBAAE,EAAEZ,GAAE,CAAC;AAAE,kBAAE,IAAE;AAAG,kBAAE,KAAG;AAAE,kBAAG,MAAI,GAAE;AAAC,oBAAG,IAAE,IAAG;AAAC,sBAAE,EAAE,CAAC,KAAG,KAAG;AAAG,sBAAE;AAAA,gBAAC,OAAK;AAAC,sBAAE;AAAG,sBAAE;AAAA,gBAAC;AAAA,cAAC,OAAK;AAAC,oBAAG,MAAI,GAAE;AAAC,wBAAM,IAAI,EAAE,sBAAsB;AAAA,gBAAC;AAAC,qBAAG,EAAE,CAAC;AAAE,oBAAE,IAAE,IAAE;AAAA,cAAC;AAAC;AAAA,YAAS,KAAK;AAAA,YAAE,KAAK;AAAE,kBAAGA,GAAE,EAAEY,EAAC,GAAE;AAAC,gBAAAZ,GAAE,EAAEY,EAAC,KAAG,KAAGN,GAAE,KAAGT;AAAA,cAAE,OAAK;AAAC;AAAI,oBAAG,MAAI,GAAE;AAAC,sBAAE,MAAI,IAAE,IAAE;AAAA,gBAAC;AAAA,cAAC;AAAC;AAAA,YAAM,KAAK;AAAE,kBAAGG,GAAE,EAAEY,EAAC,GAAE;AAAC,gBAAAZ,GAAE,EAAEY,EAAC,KAAG,KAAGN,GAAE,KAAGT;AAAA,cAAE,OAAK;AAAC,gBAAAG,GAAE,EAAEY,EAAC,IAAE,MAAIf;AACjxB,oBAAE;AAAA,cAAC;AAAC;AAAA,YAAM,KAAK;AAAE,kBAAGG,GAAE,EAAEY,EAAC,GAAE;AAAC,gBAAAZ,GAAE,EAAEY,EAAC,KAAG,KAAGN,GAAE,KAAGT;AAAA,cAAE;AAAC;AAAA,UAAK;AAAC,UAAAc;AAAA,QAAG;AAAC,YAAG,MAAI,GAAE;AAAC;AAAI,cAAG,MAAI,GAAE;AAAC,gBAAE;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,EAAEX,IAAEO,IAAEN,IAAEO,IAAE,GAAE;AAAC,YAAI,IAAEP,KAAE,IAAE,GAAE,IAAEA,KAAE;AAAE,QAAAF,KAAE,IAAEC,GAAE,IAAEQ;AAAE,YAAII,KAAE,IAAEZ,GAAE,IAAE,GAAE,IAAE,GAAGA,IAAED,IAAEa,EAAC;AAAE,QAAAL,GAAEP,IAAE,CAAC;AAAA,MAAC;AAAC,eAAS,EAAEA,IAAEO,IAAEN,IAAE;AAAC,QAAAF,KAAEE,KAAED,GAAE,IAAE;AAAE,YAAIQ,KAAEP,KAAED,GAAE,GAAE,IAAE,GAAGA,IAAED,IAAES,EAAC;AAAE,QAAAD,GAAEP,IAAE,CAAC;AAAA,MAAC;AAAC,UAAIe,KAAE,EAAE;AAAO,UAAG,GAAE;AAAC,YAAGpB,OAAI,GAAE;AAAC,cAAEG,OAAI,IAAEe,KAAEC;AAAA,QAAC,OAAK;AAAC,cAAEhB,OAAI,IAAE,IAAE;AAAA,QAAE;AAAA,MAAC,OAAK;AAAC,YAAE;AAAA,MAAC;AAAC,UAAGiB,OAAI,GAAE;AAAC,QAAAZ,KAAE,EAAE,CAAC,EAAE,IAAE,EAAE,CAAC,EAAE;AAAA,MAAC,OAAK;AAAC,QAAAA,KAAE,IAAE,EAAE;AAAA,MAAC;AAAC,aAAMF,MAAGE,IAAE;AAAC,YAAI,IAAET,KAAE,KAAK,IAAIS,KAAEF,IAAEP,EAAC,IAAES;AAAE,YAAG,IAAE,GAAE;AAAC,eAAI,IAAE,GAAE,IAAEY,IAAE,KAAI;AAAC,cAAE,CAAC,EAAE,IAAE;AAAA,UAAC;AAAC,cAAE;AAAE,cAAGA,OAAI,GAAE;AAAC,YAAAf,KAAE,EAAE,CAAC;AAAE,iBAAI,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,gBAAEA,IAAE,GAAEC,EAAC;AAAE,cAAAA;AAAA,YAAG;AAAA,UAAC,OAAK;AAAC,iBAAI,IAAE,GAAE,IAAE,GAC9d,KAAI;AAAC,mBAAI,IAAE,GAAE,IAAEc,IAAE,KAAI;AAAC,gBAAAf,KAAE,EAAE,CAAC;AAAE,gBAAAI,KAAEJ,GAAE;AAAE,gBAAAK,KAAEL,GAAE;AAAE,qBAAI,IAAE,GAAE,IAAEK,IAAE,KAAI;AAAC,uBAAI,IAAE,GAAE,IAAED,IAAE,KAAI;AAAC,sBAAEJ,IAAE,GAAEC,IAAE,GAAE,CAAC;AAAA,kBAAC;AAAA,gBAAC;AAAA,cAAC;AAAC,cAAAA;AAAA,YAAG;AAAA,UAAC;AAAA,QAAC;AAAC,YAAE;AAAE,QAAAC,KAAE,GAAGT,IAAE,CAAC;AAAE,YAAG,CAACS,IAAE;AAAC;AAAA,QAAK;AAAC,YAAGA,GAAE,GAAE;AAAC,cAAI,KAAG,IAAE,IAAE,eAAa;AAAY,cAAEA,GAAE;AAAA,QAAM;AAAC,YAAGA,GAAE,KAAG,SAAOA,GAAE,KAAG,OAAM;AAAC,eAAG;AAAA,QAAC,OAAK;AAAC;AAAA,QAAK;AAAA,MAAC;AAAC,aAAO,IAAE;AAAA,IAAC;AAAC,aAAS,GAAGT,IAAE,GAAE,GAAE;AAAC,UAAI,IAAEA,GAAE,GAAEC,KAAED,GAAE,GAAEE,IAAEC,IAAEE,IAAED,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAES,IAAE,GAAE,GAAE,GAAE,GAAEO,IAAEC;AAAE,UAAG,CAAC,GAAE;AAAC,cAAM,IAAI,EAAE,sCAAsC;AAAA,MAAC;AAAC,eAAQ,IAAE,GAAE,IAAE,IAAG,KAAG,GAAE;AAAC,YAAEpB,GAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,QAAAY,KAAEZ,GAAE,IAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,YAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,QAAAmB,KAAEnB,GAAE,IAAE,IAAE,CAAC;AAAE,aAAG,EAAE,CAAC;AAAE,aAAI,IAAEY,KAAE,IAAE,IAAE,IAAE,IAAEO,QAAK,GAAE;AAAC,UAAAC,KAAE,IAAE,IAAE,OAAK;AAAG,YAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE,YAAE,IAAE,CAAC,IAAEA;AAAE;AAAA,QAAQ;AAAC,aAAG,EAAE,IAAE,CAAC;AAAE,QAAAR,MAAG,EAAE,IAAE,CAAC;AAAE,aAAG,EAAE,IAAE,CAAC;AAAE,aAAG,EAAE,IAAE,CAAC;AAAE,aAAG,EAAE,IAAE,CAAC;AAAE,aAAG,EAAE,IAAE,CAAC;AAAE,QAAAO,MAAG,EAAE,IAAE,CAAC;AAAE,QAAAlB,KAAE,IAAE,IAAE,OAAK;AAAE,QAAAC,KAAE,IAAE,IAAE,OAAK;AAAE,QAAAE,KAAEQ;AAAE,QAAAT,KAAE;AAAE,YAAE,MAAI,IAAEgB,MAAG,OAAK;AAAE,YAAE,MAAI,IAAEA,MAAG,OAAK;AAC7tB,YAAE,KAAG;AAAE,YAAE,KAAG;AAAE,QAAAlB,KAAEA,KAAEC,KAAE,KAAG;AAAE,QAAAA,KAAED,KAAEC;AAAE,QAAAkB,KAAEhB,KAAE,KAAGD,KAAE,KAAG,OAAK;AAAE,QAAAC,KAAEA,KAAE,KAAGD,KAAE,KAAG,OAAK;AAAE,QAAAA,KAAEiB;AAAE,YAAE,IAAE,IAAE,KAAG;AAAE,YAAE,IAAE;AAAE,YAAE,IAAE,IAAE,KAAG;AAAE,YAAE,IAAE;AAAE,QAAAnB,KAAEA,KAAEE,KAAE,KAAG;AAAE,QAAAA,KAAEF,KAAEE;AAAE,QAAAD,KAAEA,KAAEE,KAAE,KAAG;AAAE,QAAAA,KAAEF,KAAEE;AAAE,QAAAgB,KAAE,IAAE,KAAG,IAAE,KAAG,QAAM;AAAG,YAAE,IAAE,KAAG,IAAE,KAAG,QAAM;AAAG,YAAEA;AAAE,QAAAA,KAAE,IAAE,KAAG,IAAEvB,KAAE,QAAM;AAAG,YAAE,IAAEA,KAAE,IAAE,KAAG,QAAM;AAAG,YAAEuB;AAAE,UAAE,CAAC,IAAEnB,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEA,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEC,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEA,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEE,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEA,KAAE;AAAE,UAAE,IAAE,CAAC,IAAED,KAAE;AAAE,UAAE,IAAE,CAAC,IAAEA,KAAE;AAAA,MAAC;AAAC,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAE,EAAE,CAAC;AAAE,YAAE,EAAE,IAAE,CAAC;AAAE,QAAAS,KAAE,EAAE,IAAE,EAAE;AAAE,YAAE,EAAE,IAAE,EAAE;AAAE,YAAE,EAAE,IAAE,EAAE;AAAE,YAAE,EAAE,IAAE,EAAE;AAAE,YAAE,EAAE,IAAE,EAAE;AAAE,QAAAO,KAAE,EAAE,IAAE,EAAE;AAAE,aAAI,IAAEP,KAAE,IAAE,IAAE,IAAE,IAAEO,QAAK,GAAE;AAAC,UAAAC,KAAE,IAAE,IAAE,QAAM;AAAG,cAAGA,KAAE,OAAM;AAAC,YAAAA,KAAE;AAAA,UAAC,WAASA,MAAG,MAAK;AAAC,YAAAA,KAAE;AAAA,UAAG,OAAK;AAAC,YAAAA,KAAEA,KAAE,QAAM;AAAA,UAAC;AAAC,UAAApB,GAAE,IAAE,CAAC,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,CAAC,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE,UAAApB,GAAE,IAAE,IAAE,EAAE,IAAEoB;AAAE;AAAA,QAAQ;AAAC,QAAAnB,KAAE,IAAE,IAAE,QAAM;AAAG,QAAAC,KAAE,IAAE,IAAE,QAAM;AAAG,QAAAE,KAAEQ;AAAE,QAAAT,KAAE;AAAE,YAAE,MAAI,IAAEgB,MAAG,QAAM;AAAG,YAAE,MAAI,IAAEA,MAAG,QAAM;AAAG,YAAE;AAAE,YAAE;AAAE,QAAAlB,MAAGA,KAAEC,KAAE,KAAG,KAAG;AAAK,QAAAA,KAAED,KAAEC;AAAE,QAAAkB,KAAEhB,KAAE,KAAGD,KAAE,KAAG,QAAM;AAAG,QAAAC,KAAEA,KAAE,KAAGD,KAAE,KAAG,QAAM;AAAG,QAAAA,KAAEiB;AAAE,YAAE,IAAE,IAAE,KAAG;AAAE,YAAE,IAAE;AAAE,YAAE,IAAE,IAAE,KAAG;AAAE,YAAE,IAAE;AAAE,QAAAnB,KAAEA,KAAEE,KAAE,KAAG;AAAE,QAAAA,KAAEF,KAAEE;AAAE,QAAAD,KAAEA,KAAEE,KAAE,KAAG;AAAE,QAAAA,KAAEF,KAAEE;AAAE,QAAAgB,KAAE,IAAE,KAAG,IAAE,KAAG,QAAM;AAAG,YAAE,IAAE,KAAG,IAAE,KAAG,QAAM;AAAG,YAAEA;AAC92B,QAAAA,KAAE,IAAE,KAAG,IAAEvB,KAAE,QAAM;AAAG,YAAE,IAAEA,KAAE,IAAE,KAAG,QAAM;AAAG,YAAEuB;AAAE,YAAEnB,KAAE;AAAE,QAAAkB,KAAElB,KAAE;AAAE,YAAEC,KAAE;AAAE,YAAEA,KAAE;AAAE,QAAAU,KAAER,KAAE;AAAE,YAAEA,KAAE;AAAE,YAAED,KAAE;AAAE,YAAEA,KAAE;AAAE,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAGS,KAAE,IAAG;AAAC,UAAAA,KAAE;AAAA,QAAC,WAASA,MAAG,MAAK;AAAC,UAAAA,KAAE;AAAA,QAAG,OAAK;AAAC,UAAAA,OAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAG,IAAE,IAAG;AAAC,cAAE;AAAA,QAAC,WAAS,KAAG,MAAK;AAAC,cAAE;AAAA,QAAG,OAAK;AAAC,gBAAI;AAAA,QAAC;AAAC,YAAGO,KAAE,IAAG;AAAC,UAAAA,KAAE;AAAA,QAAC,WAASA,MAAG,MAAK;AAAC,UAAAA,KAAE;AAAA,QAAG,OAAK;AAAC,UAAAA,OAAI;AAAA,QAAC;AAAC,QAAAnB,GAAE,IAAE,CAAC,IAAE;AAC3d,QAAAA,GAAE,IAAE,IAAE,CAAC,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAEY;AAAE,QAAAZ,GAAE,IAAE,IAAE,EAAE,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAE;AAAE,QAAAA,GAAE,IAAE,IAAE,EAAE,IAAEmB;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,GAAGpB,IAAE,GAAE;AAAC,UAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAEC,KAAE,IAAI,WAAW,EAAE;AAAE,eAAQC,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,iBAAQC,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,cAAIE,KAAE,GAAG,GAAEH,IAAEC,EAAC;AAAE,aAAG,GAAEE,IAAEJ,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,EAAE;AAAA,IAAC;AAAC,aAAS,GAAGD,IAAE,GAAE,GAAE;AAAC,UAAG,KAAG,KAAK,KAAE;AAAE,UAAI,IAAEA,GAAE,SAAO,GAAEC,KAAE,IAAE,IAAE,IAAE;AAAE,UAAG,KAAG,GAAE;AAAC,eAAO;AAAA,MAAI;AAAC,UAAIC,KAAEc,GAAEhB,IAAE,CAAC;AAAE,UAAGE,MAAG,SAAOA,MAAG,OAAM;AAAC,eAAM,EAAC,GAAE,MAAK,GAAEA,IAAE,QAAO,EAAC;AAAA,MAAC;AAAC,UAAIC,KAAEa,GAAEhB,IAAEC,EAAC;AAAE,aAAM,EAAEE,MAAG,SAAOA,MAAG,QAAO;AAAC,YAAG,EAAEF,MAAG,GAAE;AAAC,iBAAO;AAAA,QAAI;AAAC,QAAAE,KAAEa,GAAEhB,IAAEC,EAAC;AAAA,MAAC;AAAC,aAAM,EAAC,GAAEC,GAAE,SAAS,EAAE,GAAE,GAAEC,IAAE,QAAOF,GAAC;AAAA,IAAC;AAAC,IAAAF,IAAG,YAAU,EAAC,MAAMC,IAAE,GAAE;AAAC,UAAG,KAAG,KAAK,KAAE,CAAC;AACngB,UAAI,IAAE,EAAE,GAAEE,KAAE,GAAEC,KAAE,MAAKE,KAAE,MAAKD,IAAE,GAAE,IAAE;AAAE,eAAS,IAAG;AAAC,YAAI,IAAEY,GAAEhB,IAAEE,EAAC;AAAE,QAAAA,MAAG;AAAE,YAAIqB,KAAErB,KAAE,IAAE,GAAEsB,KAAE,GAAGxB,IAAEuB,IAAErB,EAAC;AAAE,YAAGsB,MAAGA,GAAE,GAAE;AAAC,UAAAD,KAAEC,GAAE;AAAA,QAAM;AAAC,YAAI,KAAGxB,GAAE,SAASE,IAAEqB,EAAC;AAAE,QAAArB,MAAG,GAAG;AAAO,eAAO;AAAA,MAAE;AAAC,eAASD,GAAEG,IAAE;AAAC,YAAI,IAAE,KAAK,KAAKA,GAAE,IAAE,IAAEA,GAAE,CAAC,GAAEmB,KAAE,KAAK,KAAKnB,GAAE,IAAE,IAAEA,GAAE,CAAC;AAAE,iBAAQS,KAAE,GAAEA,KAAET,GAAE,EAAE,QAAOS,MAAI;AAAC,UAAAF,KAAEP,GAAE,EAAES,EAAC;AAAE,cAAI,KAAG,KAAK,KAAK,KAAK,KAAKT,GAAE,IAAE,CAAC,IAAEO,GAAE,IAAEP,GAAE,CAAC,GAAE,KAAG,KAAK,KAAK,KAAK,KAAKA,GAAE,IAAE,CAAC,IAAEO,GAAE,IAAEP,GAAE,CAAC,GAAE,KAAG,IAAEO,GAAE,GAAE,KAAGY,KAAEZ,GAAE,GAAE,KAAG,KAAG,MAAI,KAAG;AAAG,UAAAA,GAAE,IAAE,IAAI,WAAW,EAAE;AAAE,UAAAA,GAAE,IAAE;AAAG,UAAAA,GAAE,IAAE;AAAA,QAAE;AAAC,QAAAP,GAAE,IAAE;AAAE,QAAAA,GAAE,IAAEmB;AAAA,MAAC;AAAC,UAAI,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAEP,GAAEhB,IAAEE,EAAC;AAAE,MAAAA,MAAG;AAAE,UAAG,MAAI,OAAM;AAAC,cAAM,IAAI,EAAE,eAAe;AAAA,MAAC;AAAC,UAAEc,GAAEhB,IAAEE,EAAC;AAC9f,MAAAA,MAAG;AAAE,iBAAW,QAAM,MAAI,OAAM;AAAC,YAAIW,IAAE,GAAE;AAAE,gBAAO,GAAE;AAAA,UAAC,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAM,gBAAI,IAAE,EAAE;AAAE,gBAAG,MAAI,OAAM;AAAC,kBAAG,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,GAAE;AAAC,gBAAAV,KAAE,EAAC,SAAQ,EAAC,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,EAAC,GAAE,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAE,GAAE,EAAE,EAAE,KAAG,IAAE,EAAE,EAAE,GAAE,GAAE,EAAE,EAAE,GAAE,GAAE,EAAE,EAAE,GAAE,GAAE,EAAE,SAAS,IAAG,KAAG,IAAE,EAAE,EAAE,IAAE,EAAE,EAAE,CAAC,EAAC;AAAA,cAAC;AAAA,YAAC;AAAC,gBAAG,MAAI,OAAM;AAAC,kBAAG,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,OAAK,EAAE,CAAC,MAAI,OAAK,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,KAAI;AAAC,gBAAAE,KAAE,EAAC,SAAQ,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,KAAG,IAAE,EAAE,EAAE,GAAE,GAAE,EAAE,EAAE,EAAC;AAAA,cAAC;AAAA,YAAC;AAAC;AAAA,UACnkB,KAAK;AAAM,gBAAI,IAAEW,GAAEhB,IAAEE,EAAC,GAAEmB;AAAE,YAAAnB,MAAG;AAAE,gBAAIkB,KAAE,IAAElB,KAAE;AAAE,mBAAMA,KAAEkB,IAAE;AAAC,kBAAI,IAAEpB,GAAEE,IAAG,GAAE,IAAE,IAAI,YAAY,EAAE;AAAE,kBAAG,KAAG,MAAI,GAAE;AAAC,qBAAI,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,kBAAAmB,KAAExB,GAAE,CAAC;AAAE,oBAAEwB,EAAC,IAAErB,GAAEE,IAAG;AAAA,gBAAC;AAAA,cAAC,WAAS,KAAG,MAAI,GAAE;AAAC,qBAAI,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,kBAAAmB,KAAExB,GAAE,CAAC;AAAE,oBAAEwB,EAAC,IAAEL,GAAEhB,IAAEE,EAAC;AAAE,kBAAAA,MAAG;AAAA,gBAAC;AAAA,cAAC,OAAK;AAAC,sBAAM,IAAI,EAAE,0BAA0B;AAAA,cAAC;AAAC,gBAAE,IAAE,EAAE,IAAE;AAAA,YAAC;AAAC;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAM,gBAAGE,IAAE;AAAC,oBAAM,IAAI,EAAE,mCAAmC;AAAA,YAAC;AAAC,YAAAF,MAAG;AAAE,YAAAE,KAAE,CAAC;AAAE,YAAAA,GAAE,IAAE,MAAI;AAAM,YAAAA,GAAE,IAAE,MAAI;AAAM,YAAAA,GAAE,YAAUJ,GAAEE,IAAG;AAAE,gBAAI,IAAEc,GAAEhB,IAAEE,EAAC,GAAE,IAAGI,KAAE,GAAE,IAAE;AAAE,YAAAJ,MAAG;AAAE,YAAAE,GAAE,IAAE,KAAG;AAAE,YAAAA,GAAE,IAAEY,GAAEhB,IAAEE,EAAC;AAAE,YAAAA,MAAG;AAAE,YAAAE,GAAE,IAAE,CAAC;AAAE,YAAAA,GAAE,IAAE,CAAC;AAAE,gBAAI,KAAGJ,GAAEE,IAAG;AAAE,iBAAIW,KAAE,GAAEA,KAAE,IAAGA,MAAI;AAAC,mBAAGb,GAAEE,EAAC;AAAE,kBAAI,IAAEF,GAAEE,KAAE,CAAC,KAAG,GAAEoB,KAAEtB,GAAEE,KAAE,CAAC,IAAE;AAAG,kBAAGI,KAAE,GAAE;AAAC,gBAAAA,KAAE;AAAA,cAAC;AAAC,kBAAG,IAAEgB,IAAE;AAAC,oBAAEA;AAAA,cAAC;AAAC,kBAAIf,KAAEP,GAAEE,KAAE,CAAC;AAAE,kBAAEE,GAAE,EAAE,KAAK,EAAC,GAAE,GAAE,GAAEkB,IAAE,GAAEf,IAAE,GAAE,KAAI,CAAC;AAAE,cAAAH,GAAE,EAAE,EAAE,IAAE,IAAE;AAAE,cAAAF,MAAG;AAAA,YAAC;AAAC,YAAAE,GAAE,IAAEE;AAAE,YAAAF,GAAE,IAAE;AAAE,YAAAH,GAAEG,EAAC;AAAE;AAAA,UAAM,KAAK;AAAM,gBAAI,IAAEY,GAAEhB,IAAEE,EAAC;AAAE,YAAAA,MAAG;AACxqB,iBAAIW,KAAE,GAAEA,KAAE,KAAG;AAAC,kBAAI,IAAEb,GAAEE,IAAG,GAAE,IAAE,IAAI,WAAW,EAAE,GAAE,IAAE;AAAE,mBAAI,IAAE,GAAE,IAAE,IAAG,KAAIA,MAAI;AAAC,qBAAG,EAAE,CAAC,IAAEF,GAAEE,EAAC;AAAA,cAAC;AAAC,kBAAI,IAAE,IAAI,WAAW,CAAC;AAAE,mBAAI,IAAE,GAAE,IAAE,GAAE,KAAIA,MAAI;AAAC,kBAAE,CAAC,IAAEF,GAAEE,EAAC;AAAA,cAAC;AAAC,cAAAW,MAAG,KAAG;AAAE,eAAC,KAAG,MAAI,IAAE,IAAE,GAAG,IAAE,EAAE,IAAE,GAAG,GAAE,CAAC;AAAA,YAAC;AAAC;AAAA,UAAM,KAAK;AAAM,YAAAX,MAAG;AAAE,gBAAEc,GAAEhB,IAAEE,EAAC;AAAE,YAAAA,MAAG;AAAE;AAAA,UAAM,KAAK;AAAM,gBAAIM,KAAE,EAAE,MAAI,KAAG,CAAC,GAAEG;AAAE,YAAAT,MAAG;AAAE,gBAAIO,KAAET,GAAEE,IAAG,GAAEQ,KAAE,CAAC;AAAE,iBAAIG,KAAE,GAAEA,KAAEJ,IAAEI,MAAI;AAAC,kBAAID,KAAEZ,GAAEE,IAAG,GAAE,IAAEE,GAAE,EAAEQ,EAAC;AAAE,cAAAD,KAAEP,GAAE,EAAE,CAAC;AAAE,cAAAO,GAAE,QAAMC;AAAE,kBAAI,KAAGZ,GAAEE,IAAG;AAAE,cAAAS,GAAE,IAAE,EAAE,MAAI,CAAC;AAAE,cAAAA,GAAE,IAAE,EAAE,KAAG,EAAE;AAAE,cAAAD,GAAE,KAAKC,EAAC;AAAA,YAAC;AAAC,gBAAIG,KAAEd,GAAEE,IAAG,GAAEa,KAAEf,GAAEE,IAAG,GAAE,IAAEF,GAAEE,IAAG;AAAE,gBAAG;AAAC,kBAAI,IAAE,GAAGF,IAAEE,IAAEE,IAAEM,IAAE,GAAEI,IAAEC,IAAE,KAAG,GAAE,IAAE,IAAGP,EAAC;AAAE,cAAAN,MAAG;AAAA,YAAC,SAAO,IAAG;AAAC,kBAAG,cAAc,gBAAe;AAAC,uBAAO,KAAK,MAAMF,IAAE,EAAC,GAAE,GAAG,EAAC,CAAC;AAAA,cAAC,WAAS,cAAc,gBAAe;AAAC,sBAAM;AAAA,cAAU;AAAC,oBAAM;AAAA,YAAE;AAAC;AAAA,UAAM,KAAK;AAAM,YAAAE,MAAG;AAAE;AAAA,UAAM,KAAK;AAAM,gBAAGF,GAAEE,EAAC,MAAI,KAAI;AAAC,cAAAA;AAAA,YAAG;AAAC;AAAA,UAAM;AAAQ,gBAAI,IAAE,GAAGF,IAAEE,KAAE,GAAEA,KAAE,CAAC;AAAE,gBAAG,KAAG,EAAE,GAAE;AAAC,cAAAA,KAAE,EAAE;AAAO;AAAA,YAAK;AAAC,gBAAGA,MAAGF,GAAE,SAAO,GAAE;AAAC,oBAAM;AAAA,YAAU;AAAC,kBAAM,IAAI,EAAE,uCAAqC,EAAE,SAAS,EAAE,CAAC;AAAA,QAAC;AAAC,YAAEgB,GAAEhB,IAAEE,EAAC;AAAE,QAAAA,MAAG;AAAA,MAAC;AAAC,WAAK,QAAME,GAAE;AAAE,WAAK,SAAOA,GAAE;AAAE,WAAK,IAAED;AAAE,WAAK,IAAEE;AAAE,WAAK,IAAE,CAAC;AAAE,WAAIQ,KAAE,GAAEA,KAAET,GAAE,EAAE,QAAOS,MAAI;AAAC,QAAAF,KAAEP,GAAE,EAAES,EAAC;AAC15B,YAAIM,KAAE,EAAER,GAAE,CAAC;AAAE,YAAGQ,IAAE;AAAC,UAAAR,GAAE,IAAEQ;AAAA,QAAC;AAAC,aAAK,EAAE,KAAK,EAAC,OAAMR,GAAE,OAAM,GAAE,GAAGP,IAAEO,EAAC,GAAE,GAAEA,GAAE,IAAEP,GAAE,GAAE,GAAEO,GAAE,IAAEP,GAAE,GAAE,GAAEO,GAAE,GAAE,GAAEA,GAAE,EAAC,CAAC;AAAA,MAAC;AAAC,WAAK,IAAE,KAAK,EAAE;AAAO,aAAO;AAAA,IAAS,GAAE,EAAEX,IAAE,GAAE,GAAE;AAAC,UAAG,KAAG,KAAK,KAAE;AAAG,UAAI,IAAE,KAAK,QAAMA,IAAEC,KAAE,KAAK,SAAO,GAAEC,IAAEC,IAAEE,IAAED,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAES,KAAE,GAAE,GAAE,IAAE,KAAK,EAAE,QAAO,IAAEb,KAAE,IAAE,GAAE,IAAE,IAAI,kBAAkB,CAAC,GAAEoB,KAAE,IAAI,YAAYpB,EAAC,GAAEqB,KAAE,YAAW;AAAE,WAAI,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAAnB,KAAE,KAAK,EAAE,CAAC;AAAE,QAAAC,KAAED,GAAE,IAAE;AAAE,QAAAG,KAAEH,GAAE,IAAED;AAAE,QAAAY,KAAE;AAAE,YAAEX,GAAE;AAAE,QAAAE,KAAEF,GAAE,IAAE,KAAG;AAAE,YAAGC,OAAI,GAAE;AAAC,eAAI,IAAE,GAAE,IAAEH,IAAE,KAAI;AAAC,gBAAE,IAAE,IAAEG;AAAE,YAAAiB,GAAE,CAAC,KAAG,IAAEC,OAAI,IAAE,IAAE;AAAA,UAAC;AAAC,cAAElB;AAAA,QAAC;AAAC,aAAI,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAE,IAAE,IAAEE;AAAE,cAAED,MAAG,IAAEiB,OAAI,IAAE,MAAI;AAAE,eAAI,IAAE,GAAE,IAAErB,IAAE,KAAI;AAAC,cAAEa,EAAC,IAAE,EAAE,IAAEO,GAAE,CAAC,CAAC;AAAE,YAAAP,MAAG;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,IAAE,KAAK;AAAE,UAAG,CAAC,KAAG,MAAI,KAAG,CAAC,GAAE;AAAC,YAAE,IAAI,WAAW,CAAC,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,GAAG,CAAC;AAAA,MAAC;AAAC,UAAG,GAAE;AAAC,aAAI,IAAE,GAAE,IAAE,KAAG;AAAC,eAAI,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,KAAI,KAAI,KAAG,GAAE;AAAC,cAAE,CAAC,KAAG,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,KAAG,EAAE,IAAE,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC,GAAE,IAAI,IAAG;AAAC,UAAG,KAAK,GAAE;AAAC,eAAM,CAAC,CAAC,KAAK,EAAE;AAAA,MAAC;AAAC,UAAG,KAAK,MAAI,GAAE;AAAC,YAAG,KAAK,MAAI,GAAE;AAAC,iBAAM;AAAA,QAAE,WAAS,KAAK,EAAE,CAAC,EAAE,UAAQ,MAAI,KAAK,EAAE,CAAC,EAAE,UAAQ,MAAI,KAAK,EAAE,CAAC,EAAE,UAAQ,IAAG;AAAC,iBAAM;AAAA,QAAE;AAAC,eAAM;AAAA,MAAE;AAAC,UAAG,KAAK,MAAI,GAAE;AAAC,eAAM;AAAA,MAAE;AAAC,aAAM;AAAA,IAAE,GAAE,GAAE,SAAS,GAAGb,IAAE;AAAC,UAAI,GAAE,GAAE;AACp5B,eAAQC,KAAE,GAAEC,KAAEF,GAAE,QAAOC,KAAEC,IAAED,MAAG,GAAE;AAAC,YAAED,GAAEC,EAAC;AAAE,YAAED,GAAEC,KAAE,CAAC;AAAE,YAAED,GAAEC,KAAE,CAAC;AAAE,QAAAD,GAAEC,EAAC,IAAE,IAAE,UAAQ,QAAM;AAAE,QAAAD,GAAEC,KAAE,CAAC,IAAE,IAAE,UAAQ,QAAK,IAAE,QAAK;AAAE,QAAAD,GAAEC,KAAE,CAAC,IAAE,IAAE,UAAQ,QAAM;AAAA,MAAC;AAAC,aAAOD;AAAA,IAAC,GAAE,GAAE,SAAS,GAAGA,IAAE;AAAC,UAAI,GAAE,GAAE,GAAEC,IAAEC,KAAE;AAAE,eAAQC,KAAE,GAAEE,KAAEL,GAAE,QAAOG,KAAEE,IAAEF,MAAG,GAAE;AAAC,YAAEH,GAAEG,EAAC;AAAE,YAAEH,GAAEG,KAAE,CAAC;AAAE,YAAEH,GAAEG,KAAE,CAAC;AAAE,QAAAF,KAAED,GAAEG,KAAE,CAAC;AAAE,QAAAH,GAAEE,IAAG,IAAE,mBAAiB,KAAG,uBAAqB,IAAE,sBAAoB,IAAE,qBAAmB,IAAE,qBAAmBD,KAAE,qBAAkB,KAAG,uBAAqB,IAAE,sBAAoB,IAAE,sBAAmBA,KAAE,oBAAkB,KAAG,sBAAoB,IAAE,sBAAmBA,KAAE,oBAAiBA,MAAG,uBAAqBA,KAAE;AAC3iB,QAAAD,GAAEE,IAAG,IAAE,mBAAiB,KAAG,sBAAoB,IAAE,sBAAoB,IAAE,sBAAoB,IAAE,sBAAoBD,KAAE,qBAAkB,KAAG,uBAAqB,IAAE,sBAAmB,IAAE,sBAAoBA,KAAE,qBAAkB,KAAG,sBAAmB,IAAE,sBAAmBA,KAAE,oBAAiBA,MAAG,uBAAqBA,KAAE;AAAkB,QAAAD,GAAEE,IAAG,IAAE,mBAAiB,KAAG,uBAAqB,IAAE,sBAAoB,IAAE,qBAAkB,IAAE,sBAAmBD,KAAE,qBAAkB,KAAG,uBAAqB,IAAE,sBAAoB,IAAE,sBAAoBA,KAAE,qBAAkB,KAAG,sBAAmB,IAAE,sBAAmBA,KAAE,qBAAkBA,MAAG,uBAAqBA,KAAE;AAAA,MAAgB;AAAC,aAAOD,GAAE,SAAS,GAAEE,EAAC;AAAA,IAAC,GAAE,GAAE,SAAS,GAAGF,IAAE;AAAC,UAAI,GAAE,GAAE;AAC5rB,eAAQC,KAAE,GAAEC,KAAEF,GAAE,QAAOC,KAAEC,IAAED,MAAG,GAAE;AAAC,YAAED,GAAEC,EAAC;AAAE,YAAED,GAAEC,KAAE,CAAC;AAAE,YAAED,GAAEC,KAAE,CAAC;AAAE,QAAAD,GAAEC,EAAC,IAAE,UAAQ,IAAE,QAAM;AAAE,QAAAD,GAAEC,KAAE,CAAC,IAAE,UAAQ,IAAE,QAAK,IAAE,QAAK;AAAE,QAAAD,GAAEC,KAAE,CAAC,IAAE,UAAQ,IAAE,QAAM;AAAA,MAAC;AAAC,aAAOD;AAAA,IAAC,GAAE,GAAE,SAAS,GAAGA,IAAE;AAAC,UAAI,GAAE,GAAE,GAAEC,IAAEC,KAAE;AAAE,eAAQC,KAAE,GAAEE,KAAEL,GAAE,QAAOG,KAAEE,IAAEF,MAAG,GAAE;AAAC,YAAEH,GAAEG,EAAC;AAAE,YAAEH,GAAEG,KAAE,CAAC;AAAE,YAAEH,GAAEG,KAAE,CAAC;AAAE,QAAAF,KAAED,GAAEG,KAAE,CAAC;AAAE,QAAAH,GAAEE,IAAG,IAAE,MAAI,KAAG,wBAAsB,IAAE,uBAAqB,IAAE,uBAAqB,IAAE,uBAAoBD,KAAE,sBAAoB,KAAG,wBAAsB,IAAE,uBAAqB,IAAE,uBAAqBA,KAAE,uBAAoB,KAAG,wBAAsB,IAAE,uBAAqBA,KAAE,sBAAmBA,MAAG,uBAAqBA,KAAE;AACjjB,QAAAD,GAAEE,IAAG,IAAE,MAAI,KAAG,wBAAsB,IAAE,sBAAoB,IAAE,wBAAsB,IAAE,uBAAqBD,KAAE,sBAAmB,KAAG,yBAAuB,IAAE,uBAAqB,IAAE,wBAAqBA,KAAE,sBAAmB,KAAG,uBAAqB,IAAE,wBAAsBA,KAAE,uBAAoBA,MAAG,uBAAqBA,KAAE;AAAmB,QAAAD,GAAEE,IAAG,IAAE,MAAI,KAAG,wBAAsB,IAAE,wBAAsB,IAAE,uBAAqB,IAAE,wBAAsBD,KAAE,uBAAoB,KAAG,wBAAsB,IAAE,uBAAqB,IAAE,uBAAqBA,KAAE,uBAAoB,KAAG,uBAAqB,IAAE,wBAAqBA,KAAE,sBAAmBA,MAAG,uBAAqBA,KAAE;AAAA,MAAkB;AAAC,aAAOD,GAAE,SAAS,GAAEE,EAAC;AAAA,IAAC,GAAE,SAAQ,SAASF,IAAE;AAAC,UAAI,IAAEA,GAAE,OAAM,IAAEA,GAAE,QAAO,IAAEA,GAAE,UAASC,KAAED,GAAE;AACnvB,UAAG,KAAK,IAAE,GAAE;AAAC,cAAM,IAAI,EAAE,wBAAwB;AAAA,MAAC;AAAC,UAAIE,KAAE,KAAK,EAAE,GAAE,GAAED,EAAC;AAAE,UAAG,KAAK,MAAI,KAAG,GAAE;AAAC,YAAIE,KAAED,GAAE,QAAOG,KAAE,IAAI,kBAAkBF,KAAE,CAAC,GAAEC,KAAE;AAAE,iBAAQ,IAAE,GAAE,IAAED,IAAE,KAAI;AAAC,cAAI,IAAED,GAAE,CAAC;AAAE,UAAAG,GAAED,IAAG,IAAE;AAAE,UAAAC,GAAED,IAAG,IAAE;AAAE,UAAAC,GAAED,IAAG,IAAE;AAAA,QAAC;AAAC,eAAOC;AAAA,MAAC,WAAS,KAAK,MAAI,KAAG,KAAK,GAAE;AAAC,eAAO,KAAK,EAAEH,EAAC;AAAA,MAAC,WAAS,KAAK,MAAI,GAAE;AAAC,YAAG,KAAK,GAAE;AAAC,cAAG,GAAE;AAAC,mBAAO,KAAK,EAAEA,EAAC;AAAA,UAAC;AAAC,iBAAO,KAAK,EAAEA,EAAC;AAAA,QAAC,WAAS,GAAE;AAAC,iBAAO,KAAK,EAAEA,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAOA;AAAA,IAAC,EAAC;AAAE,WAAOH;AAAA,EAAE,EAAE;AAAE,WAAS,GAAGF,IAAEC,IAAE;AAAC,WAAOD,GAAEC,EAAC,KAAG,MAAI;AAAA,EAAE;AAAC,WAASkB,GAAEnB,IAAEC,IAAE;AAAC,WAAOD,GAAEC,EAAC,KAAG,IAAED,GAAEC,KAAE,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,YAAOD,GAAEC,EAAC,KAAG,KAAGD,GAAEC,KAAE,CAAC,KAAG,KAAGD,GAAEC,KAAE,CAAC,KAAG,IAAED,GAAEC,KAAE,CAAC,OAAK;AAAA,EAAC;AAAC,EAAAH,MAAK,cAAY;AAAE,GAAE;AAKxhBA,MAAK,cAAc,SAAS,MAAM,GAAG,GAAG,UACxC;AACC,MAAI,MAAM;AAAA,IAAE,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,GAAI;AAAA;AAAA,IACvF,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA;AAAA,IAAiC,QAAO,CAAC,IAAE,IAAE,CAAC;AAAA;AAAA,IACnE,QAAO,CAAC,CAAC,IAAG,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC,IAAG,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,IAAG,QAAQ,CAAC,oBAAoB;AAAA,IAAG,QAAO,CAAC,CAAC;AAAA,EACrI;AACD,MAAI,SAAU,UAAS,KAAK,SAAU,KAAI,CAAC,IAAI,SAAS,CAAC;AAEzD,MAAI,OAAO,IAAI,WAAWA,MAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5C,MAAI,MAAM,IAAI,WAAW,IAAI;AAC7B,MAAI8B,QAAO,IAAI,WAAW,MAAK,IAAE,IAAE,CAAC;AACpC,WAAQ,IAAE,GAAG,IAAE,KAAK,QAAQ,IAAK,CAAAA,MAAK,CAAC,IAAI,KAAK,CAAC;AACjD,WAAQ,IAAE,GAAG,IAAE,IAAK,QAAQ,IAAK,CAAAA,MAAK,MAAK,CAAC,IAAI,IAAI,CAAC;AACrD,SAAOA,MAAK;AACb;AAEA9B,MAAK,SAAS,SAAS,MACvB;AACC,MAAI,KAAK;AACT,MAAI8B,QAAO,IAAI,WAAW,GAAK,GAAG,SAAS,GAAG,MAAM,KAAK9B,MAAK,SAASA,MAAK;AAC5E,EAAA8B,MAAK,CAAC,IAAEA,MAAK,CAAC,IAAE,KAAG,KAAG;AAAK,MAAI,YAAYA,OAAK,GAAE,EAAE;AAEpD,MAAI,OAAO;AACX,MAAI,UAAUA,OAAM,QAAQ,IAAI;AAAI,YAAQ;AAC5C,WAAQ,IAAE,GAAG,IAAE,KAAK,QAAQ,KAC5B;AACC,QAAI,QAAQ9B,MAAK,UAAU,KAAKA,MAAK,OAAO,OAAO8B,OAAM,MAAM,KAAK,CAAC,CAAC;AACtE,WAAO,MAAM,CAAC;AACd,QAAG,IAAE,KAAK,SAAO,GAAG;AACnB,WAAI,OAAK,MAAI,EAAG,SAAO,KAAG,OAAK;AAC/B,UAAI,UAAUA,OAAM,MAAM,CAAC,GAAG,IAAI;AAAA,IACnC;AAAA,EACD;AACA,SAAOA,MAAK,MAAM,GAAG,IAAI,EAAE;AAC5B;AAEA9B,MAAK,SAAS,SAAS,MAAM,KAC7B;AACC,MAAG,OAAK,KAAM,OAAM,EAAC,SAAQ,MAAM,OAAM,MAAK;AAC9C,MAAI8B,QAAO,IAAI,WAAW,IAAI,GAAG,SAAS;AAE1C,MAAI,KAAK9B,MAAK,OAAO,UAAU8B,OAAM,QAAQ,CAAC;AAAI,YAAQ;AAC1D,MAAI,MAAM,MAAI,OAAO9B,MAAK,SAASA,MAAK;AACxC,MAAI,MAAM,IAAI,WAAW8B,OAAM,MAAM;AAAI,YAAQ;AAEjD,MAAI,OAAO,IAAI,SAASA,OAAM,MAAM;AAAI,YAAQ;AAChD,MAAI,OAAO,CAAC;AACZ,SAAM,MAAM;AACX,QAAI,MAAM,IAAI,WAAWA,OAAK,IAAI,GAAG,MAAM,IAAI,WAAWA,OAAK,OAAK,CAAC;AAAI,QAAG,OAAK;AAAG,UAAG,MAAI,KAAK,KAAG,KAAK;AAAG,YAAI,eAAe;AAAI;AAAA,MAAO;AAAA;AAAC;AAC1I,IAAA9B,MAAK,SAAS,KAAK8B,OAAM,MAAM,MAAM,GAAG,GAAG;AAE3C,WAAO,IAAI,SAASA,OAAM,OAAK,IAAE,MAAI,EAAE;AACvC,QAAG,QAAM,EAAG;AAAA,EACb;AACA,SAAO;AACR;AAEA9B,MAAK,cAAc,SAAS,MAAM,KAAK,MACvC;AACC,MAAG,IAAI,KAAM;AACb,MAAI8B,QAAO,IAAI,WAAW,IAAI;AAC9B,MAAI,KAAK9B,MAAK,OAAO,UAAU8B,OAAM,GAAG,CAAC;AAEzC,MAAG,IAAI,MAAM,KAAG,KAAM;AACtB,MAAI,OAAO,MAAI;AACf,MAAI,QAAS,IAAI,MAAM,EAAE,CAAC;AAC1B,MAAI,SAAS,IAAI,MAAM,EAAE,CAAC;AAE1B,MAAI,OAAO,IAAI,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI;AAC1C,MAAI,KAAO,IAAI,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI;AAC1C,MAAG,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG,EAAG,KAAI,2CAA2C;AACpF,MAAG,QAAM,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,SAAO,EAAI,KAAI,MAAM,IAAE,IAAI,MAAM,EAAE,MAAM,GAAE,CAAC;AAErF,MAAI,MAAM,IAAI,MAAM,IAAE,IAAI,MAAM,EAAE,CAAC,IAAE;AACrC,MAAI,MAAM,IAAI,MAAM,IAAE,IAAI,MAAM,EAAE,CAAC,IAAE;AACrC,MAAI,OAAO,MAAI;AAOf,MAAG,QAAM,KAAK,IAAI,MAAM,KAAG,QAAQ,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG,OAAQ;AACzE,WAAO,KAAK,MAAO,IAAI,MAAM,EAAE,CAAC,IAAE,KAAI,IAAI,QAAM,IAAI,MAAM,EAAE,CAAC,EAAE;AAAA,EAChE;AACA,MAAG,IAAI,QAAQ,KAAK,IAAI,QAAQ,EAAE,CAAC,KAAG,EAAG,QAAO,IAAI,MAAM,EAAE,CAAC,IAAE;AAC/D,MAAI,OAAO,KAAK,KAAK,IAAI,QAAM,OAAK,CAAC,IAAE;AACvC,MAAI,OAAO,IAAI,MAAM;AAAI,MAAG,QAAM,QAAQ,IAAI,MAAM,EAAG,QAAO,IAAI,MAAM;AACxE,MAAI,OAAO,IAAI,MAAM;AAAI,MAAG,QAAM,KAAK,KAAK,UAAQ,EAAG,QAAO,CAAC,IAAI,UAAQ,SAAO,EAAE;AAAI,MAAG,QAAM,QAAQ,IAAI,MAAM,EAAG,QAAO,IAAI,MAAM;AAEvI,MAAI,QAAQ,IAAI,WAAW,IAAI,UAAQ,SAAO,EAAE,GAAG,QAAQ;AAE3D,MAAG,IAAI,MAAM,KAAG,MAChB;AACC,QAAI,KAAK,IAAI,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;AAC3C,QAAI,KAAK,KAAK,OAAO,IAAI,QAAS,KAAK,KAAK,EAAE;AAC9C,QAAI,KAAK,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE;AAC9C,QAAI,QAAQ,IAAI,WAAW,KAAK,KAAK,KAAG,KAAG,OAAK,CAAC,IAAE,CAAC;AACpD,YAAQ,IAAI,QAAQ,IAAG,EAAE;AACzB,aAAQH,KAAE,GAAGA,KAAE,IAAIA;AAClB,eAAQd,KAAE,GAAGA,KAAE,IAAIA,MACnB;AACC,YAAI,IAAIc,KAAE,KAAGd;AAAI,cAAM,KAAK,CAAC;AAC7B,QAAAb,MAAK,OAAO,YAAY,KAAI,MAAM8B,OAAM,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,OAAO,GAAG,IAAG,IAAG,EAAE;AAElF,YAAI,QAAM,EAAG,SAAQ;AAAA,YAChB,CAAA9B,MAAK,UAAU,OAAO,KAAK,KAAK,KAAG,OAAK,CAAC,IAAE,GAAG,IAAI,OAAO,KAAK,KAAK,IAAI,QAAM,OAAK,CAAC,IAAE,GAAG,IAAI,QAAQ,KAAK,KAAKa,KAAE,KAAG,OAAK,CAAC,IAAE,GAAGc,KAAE,EAAE;AAAA,MACxI;AACD,YAAQ,MAAM,SAAO;AAAA,EACtB,OAEA;AACC,QAAG,QAAM,KAAM;AACf,QAAI,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI,IAAI;AAAU,UAAM,KAAK,IAAI,KAAK,IAAI,MAAM;AAErF,aAAQ,IAAE,GAAG,IAAE,KAAK,QAAQ,KAC5B;AACC,MAAA3B,MAAK,OAAO,YAAY,KAAI,MAAM8B,OAAM,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,OAAO,KAAK,KAAK,QAAM,CAAC,IAAE,GAAG,IAAG,IAAI,OAAM,GAAG;AAC7G,eAAS,OAAO;AAAA,IACjB;AACA,YAAQ,KAAK,IAAI,OAAO,MAAM,SAAO,CAAC;AAAA,EACvC;AACA,MAAI,OAAO,IAAI,WAAW,MAAM,QAAQ,GAAG,KAAK,KAAK,QAAM,CAAC,IAAE,CAAC;AAChE;AAEA9B,MAAK,OAAO,cAAc,SAAS,KAAI,MAAM8B,OAAM,KAAK,KAAK,MAAM,KAAK,MAAM,IAAI,GAAG,GACrF;AACC,MAAG,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG,eAAe,IAAI,KAAK,KAAK,IAAI,KAAK,EAAE,CAAC,KAAG,EAAG,QAAO;AAGxF,MAAG,OAAO;AAAA,EAAC,WACH,QAAM,EAA2C,UAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,OAAK,CAAC,IAAIA,MAAK,MAAI,CAAC;AAAA,WAClG,QAAM,EAAG,CAAA9B,MAAK,OAAO,UAAW8B,OAAM,KAAK,KAAK,KAAK,MAAM,GAAG,EAAE;AAAA,WAChE,QAAM,EAAG,CAAA9B,MAAK,OAAO,UAAW8B,OAAM,KAAK,KAAK,KAAK,MAAM,GAAG,IAAI,IAAI,MAAM,KAAI,IAAI,MAAM,EAAE,CAAC,IAAE,MAAI,IAAG,KAAK;AAAA,WAC3G,QAAM,EAAG,CAAA9B,MAAK,OAAO,UAAW8B,OAAM,KAAK,KAAK,KAAK,MAAM,GAAG,EAAE;AAAA,WAChE,QAAM,EAAG,CAAA9B,MAAK,OAAO,WAAW8B,OAAM,KAAK,KAAK,KAAK,MAAK,CAAC;AAAA,WAC3D,QAAM,EAAG,CAAA9B,MAAK,OAAO,eAAe,KAAK8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WAClE,QAAM,KAAK,QAAM,MAAO,CAAA9B,MAAK,OAAO,eAAe,KAAK8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WACjF,QAAM,KAAK,QAAM,OAAO;AAAG,QAAI,MAAM,IAAI,WAAWA,MAAK,QAAO,MAAI,GAAE,MAAI,CAAC;AAAI,QAAI,MAAM9B,MAAK,YAAY,GAAG;AAAI,QAAG,OAAK,IAAI,UAAQ,IAAI,OAAQ,KAAI,IAAI,KAAI,IAAI;AAAA,EAAI,WACrK,QAAM,EAAG,CAAAA,MAAK,OAAO,WAAW8B,OAAK,KAAI,KAAI,KAAI,MAAK,IAAI,QAAQ,CAAC;AAAA,WACnE,QAAM,MAAO,CAAA9B,MAAK,OAAO,WAAW,KAAK8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WAClE,QAAM,MAAO,CAAA9B,MAAK,OAAO,gBAAgB8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WAClE,QAAM,MAAO,CAAA9B,MAAK,OAAO,eAAgB8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WAClE,QAAM,MAAO,CAAA9B,MAAK,OAAO,iBAAiB,KAAI8B,OAAK,KAAK,KAAK,KAAK,IAAI;AAAA,WACtE,QAAM;AACb,IAAA9B,MAAK,OAAO,aAAgB,KAAI,MAAM8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,WACxD,QAAM,MAAO,CAAA9B,MAAK,OAAO,gBAAgB,KAAI8B,OAAM,KAAK,KAAK,KAAK,IAAI;AAAA,MACzE,KAAI,uBAAuB,IAAI;AAIpC,MAAI,MAAO,IAAI,MAAM,IAAE,KAAK,IAAI,IAAG,IAAI,MAAM,EAAE,CAAC,CAAC,IAAE;AACnD,MAAI,MAAO,IAAI,MAAM,IAAE,IAAI,MAAM,EAAE,CAAC,IAAE,GAAI,MAAK,MAAI,QAAO,GAAG,MAAM,KAAK,KAAK,MAAI,MAAI,IAAE,CAAC;AAGxF,MAAG,OAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,QAAQ,KAAG;AACzC,aAAQH,KAAE,GAAGA,KAAE,GAAGA,MAAK;AAEtB,UAAI,OAAO,OAAKA,KAAE;AAClB,eAAQd,KAAE,GAAGA,KAAE,KAAKA,MAAG,GAAG;AAAG,YAAIV,KAAE,IAAI,OAAKU,EAAC;AAAI,YAAI,OAAKA,EAAC,IAAE,IAAI,OAAKA,KAAE,CAAC;AAAI,YAAI,OAAKA,KAAE,CAAC,IAAEV;AAAA,MAAI;AAAA,IAChG;AAED,MAAG,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG,GAClC;AACC,aAAQwB,KAAE,GAAGA,KAAE,GAAGA,MAClB;AACC,UAAI,QAAQ,OAAKA,KAAE;AACnB,UAAG,OAAK,GAAI,UAAQ,IAAE,KAAK,IAAE,KAAK,KAAG,GAAG;AACvC,YAAI,MAAO,IAAI,QAAM,IAAE,CAAC,KAAG,IAAG,IAAI,QAAM,CAAC,MAAS,IAAI,QAAM,IAAE,MAAI,CAAC,KAAG,IAAG,IAAI,QAAM,IAAE,GAAG;AACxF,YAAI,QAAM,CAAC,IAAI,KAAG;AAAM,YAAI,QAAM,IAAE,CAAC,IAAK,OAAK,IAAG;AAAA,MACnD;AAAA,eACQ,OAAK,EAAG,UAAQ,IAAI,GAAG,IAAE,KAAK,KAAG,GACzC;AACC,YAAI,QAAM,CAAG,IAAK,IAAI,QAAM,CAAG,IAAI,IAAI,QAAM,IAAE,CAAC,IAAG;AACnD,YAAI,QAAM,IAAE,CAAC,IAAK,IAAI,QAAM,IAAE,CAAC,IAAI,IAAI,QAAM,IAAE,CAAC,IAAG;AACnD,YAAI,QAAM,IAAE,CAAC,IAAK,IAAI,QAAM,IAAE,CAAC,IAAI,IAAI,QAAM,IAAE,CAAC,IAAG;AAAA,MACpD;AAAA,UACK,UAAQ,IAAE,KAAK,IAAE,KAAK,IAAK,KAAI,QAAM,CAAC,IAAK,IAAI,QAAM,CAAC,IAAI,IAAI,QAAM,IAAE,GAAG,IAAG;AAAA,IAClF;AAAA,EACD;AACD;AAEE3B,MAAK,OAAO,mBAAmB,SAAS,KAAK8B,OAAM,KAAK,KAAK,KAAK,MAAM;AAE1D,MAAI,aAAaA,MAAK;AAEtB,MAAI,WAAW,IAAI,IAAI,EAAE,CAAC;AAC1B,MAAI,YAAY,IAAI,IAAI,EAAE,CAAC;AAC3B,MAAI,gBAAgB,IAAI,KAAK,EAAE,CAAC;AAChC,MAAI,aAAc,IAAI,KAAK,EAAE,CAAC;AAE9B,MAAI,OAAO;AACX,MAAI,aAAa;AACjB,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,QAAS,cAAc,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,WAAW,EAAE;AACtE,MAAI,GAAG,GAAG,IAAI,OAAK,CAAC,GAAE,CAAC,GAAG,OAAK,CAAC,GAAE,CAAC,GAAG,OAAO,MAAM,GAAG;AACtD,MAAI,KAAK,KAAK;AACd,MAAI,SAAS,IAAI,WAAW,KAAM;AAClC,MAAI,SAAS,IAAI,YAAY,IAAI,MAAM;AAEvC,WAAS,WAAWC,OAAK;AACrB,QAAI,QAAQ,GAAG;AACX,UAAIC,SAAQ,IAAI,WAAW,YAAY,MAAI,aAAa,MAAQ,QAAO,IAAM;AAC7E,UAAIC,SAAQ,IAAI,WAAW,YAAY,MAAI,YAAY,IAAM;AAC7D,aAAO,IAAID,MAAK;AAChB,aAAO,IAAIC,QAAOD,OAAM,MAAM;AAC9B,oBAAc;AAAA,IAClB;AACA,QAAG,cAAc,GAAG;AAChB,WAAK,IAAI,GAAG,IAAI,IAAI,KAAI;AACpB,cAAM,CAAC,IAAI,OAAO,MAAM;AACxB,gBAAQ;AAAA,MACZ;AAAA,IACJ,OAAO;AACH,aAAQ,OAAOD,QAAQ;AACvB,aAAO,QAAQ,IAAI;AACnB,cAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,KAAK,OAAO,OAAO,KAAK,EAAG,MAAOA;AAAA,IAC5E;AAAA,EACJ;AAEA,WAAS,iBAAiBG,IAAG;AACzB,WAAO,OAAO,OAAO,KAAKA,EAAC;AAAA,EAC/B;AACA,WAAS,cAAc;AACnB,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAM,iBAAiB,CAAC,KAAK;AAChE,UAAM,CAAC,MAAO,iBAAiB,CAAC,IAAI,MAAQ,KAAO,iBAAiB,CAAC,KAAK,IAAM,iBAAiB,CAAC,KAAK,KAAM;AAC7G,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACxC,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,MAAQ,IAAK,iBAAiB,CAAC;AAClE,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAM,iBAAiB,CAAC,KAAK;AAChE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAS,IAAM,iBAAiB,CAAC,KAAK;AACzE,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACxC,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,MAAQ,IAAK,iBAAiB,CAAC;AAClE,UAAM,CAAC,IAAM,iBAAiB,CAAC,KAAK,IAAK,OAAU,iBAAiB,EAAE,KAAK;AAC3E,UAAM,CAAC,KAAM,iBAAiB,EAAE,KAAK,IAAM,iBAAiB,EAAE,KAAK,KAAM;AACzE,UAAM,EAAE,IAAK,iBAAiB,EAAE,KAAK,IAAK;AAC1C,UAAM,EAAE,KAAM,iBAAiB,EAAE,IAAI,MAAQ,IAAK,iBAAiB,EAAE;AACrE,UAAM,EAAE,KAAO,iBAAiB,EAAE,KAAK,IAAK,OAAS,iBAAiB,EAAE,KAAK,KAAK;AAClF,UAAM,EAAE,KAAM,iBAAiB,EAAE,KAAK,IAAM,iBAAiB,EAAE,KAAK,KAAM;AAC1E,YAAQ;AACR,WAAO;AAAA,EACX;AACA,WAAS,oBAAoB;AACzB,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAM,iBAAiB,CAAC,KAAK;AAChE,UAAM,CAAC,MAAO,iBAAiB,CAAC,IAAI,OAAQ,IAAM,iBAAiB,CAAC,KAAM;AAC1E,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACxC,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAS,IAAM,iBAAiB,CAAC,KAAK;AACzE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAS,IAAM,iBAAiB,CAAC,KAAK;AACzE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAS,IAAM,iBAAiB,CAAC,KAAK;AACzE,UAAM,CAAC,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACxC,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAQ,IAAM,iBAAiB,CAAC,KAAK;AACxE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAQ,IAAM,iBAAiB,CAAC,KAAK;AACxE,UAAM,CAAC,KAAM,iBAAiB,CAAC,IAAI,OAAQ,IAAM,iBAAiB,CAAC,KAAK;AACxE,UAAM,EAAE,IAAK,iBAAiB,CAAC,KAAK,IAAK;AACzC,UAAM,EAAE,KAAM,iBAAiB,CAAC,IAAI,MAAQ,IAAM,iBAAiB,EAAE,KAAK;AAC1E,UAAM,EAAE,KAAM,iBAAiB,EAAE,IAAI,MAAQ,IAAM,iBAAiB,EAAE,KAAK;AAC3E,UAAM,EAAE,KAAM,iBAAiB,EAAE,IAAI,MAAQ,IAAM,iBAAiB,EAAE,KAAK;AAC3E,UAAM,EAAE,IAAI,iBAAiB,EAAE,IAAI;AACnC,UAAM,EAAE,IAAI,iBAAiB,EAAE;AAC/B,UAAM,EAAE,IAAI,iBAAiB,EAAE;AAC/B,UAAM,EAAE,IAAI,iBAAiB,EAAE;AAE/B,YAAQ;AACR,WAAO;AAAA,EACX;AAEA,WAAS,oBAAmB;AACxB,SAAK,CAAC,IAAE;AAAG,SAAK,CAAC,IAAE;AACnB,SAAK,CAAC,IAAE;AAAG,SAAK,CAAC,IAAE;AAAA,EACvB;AACA,MAAI,cAAc,GAAG;AACjB,UAAM;AAAA,EA2CV,WACQ,cAAc,GAAG;AACrB,QAAI,UAAU,iBAAiB,IAC3B,gBAAgB,UAAU,oBAAoB,aAC9C,iBAAiB,UAAU,KAAK,IAChC,aAAa,UAAU,MAAO,KAC9B,oBAAoB,UAAU,OAAQ,MACtC,eAAe,UAAU,QAAS,OAClC,aAAa,UAAU,OAAQ,OAC/B,eAAe,WAAW,gBAC1B,WAAW,eAAe,IAC1B,aAAa,UAAU,KAAK;AAEhC,SAAK,MAAM,GAAG,MAAM,YAAY,IAAI,OAAO,IAAI;AAC3C,UAAI,aAAa,KAAK,IAAI,IAAI,YAAY,GAAG;AAC7C,UAAI,UAAU,WAAS;AACvB,eAAS,IAAI,WAAW,YAAY,MAAI,MAAM,OAAO;AACrD,aAAO;AACP,cAAQ;AACR,WAAK,OAAO,GAAG,MAAM,GAAG,OAAO,YAAY,QAAQ,MAAM,GAAG;AACxD,eAAO,MAAM,QAAQ;AACrB,iBAAS,SAAS,GAAG,SAAS,cAAc,UAAU;AAClD,wBAAc;AACd,4BAAkB;AAClB,eAAG;AAAG,uBAAW;AACjB,eAAK,IAAI,GAAG,IAAI,gBAAgB,KAAI;AAChC,oBAAQ,IAAI;AACZ,gBAAI,IAAI,KAAK,GAAG;AACZ,kBAAI,OAAO,OAAO,aAAa,MAAM,MAAM,IAAI;AAC/C,kBAAI,QAAQ,EAAG,QAAO;AACtB,2BAAa,cAAc;AAC3B,mBAAK,KAAK;AAAA,YACd;AACA,gBAAI,SAAS,OAAO,aAAa,MAAM,MAAM,IAAI;AACjD,gBAAI,KAAK,KAAK,GAAG;AACb,wBAAU;AACV,kBAAI,aAAa,qBAAqB,KAAK,KAAK,IAAI;AAChD,0BAAU,KAAK,KAAK,IAAI;AAC5B,mBAAK,KAAK,IAAI;AAAA,YAClB,OAAO;AACH,mBAAK,KAAK,IAAI;AACd,kBAAI;AACA,qBAAK,KAAK,IAAI;AAAA;AAEd,yBAAS,KAAK,KAAK;AAAA,YAC3B;AACA,mBAAO,MAAM,KAAK,IAAK,SAAS,MAAQ,eAAgB,SAAS,KAAO,eAAiB,SAAS,cAAe,KAAQ;AAAA,UAC7H;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,WACS,cAAc,GAAG;AACtB,QAAI,YAAY,iBAAiB,KAAK,KAAK;AAC3C,SAAK,MAAM,GAAG,MAAM,WAAW,OAAO;AAClC,WAAK,MAAM,GAAG,MAAM,UAAU,OAAK,WAAW;AAC1C,mBAAW,CAAC;AAEZ,YAAI,iBAAiB,IAAI;AACrB,iBAAO,KAAK,MAAM,MAAM,CAAC,IAAI,OAAQ,KAAK,MAAM,CAAC;AACjD,iBAAO,KAAK,IAAI,KAAK,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK;AAC7C,iBAAO,KAAK,MAAM,MAAM,CAAC,IAAI,OAAQ,KAAK,MAAM,CAAC;AACjD,iBAAO,KAAK,IAAI,KAAK,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK;AAC7C,iBAAO,KAAK,MAAM,MAAM,CAAC,IAAI,OAAQ,KAAK,MAAM,CAAC;AACjD,iBAAO,KAAK,IAAI,KAAK,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK;AAC7C,iBAAO,KAAK,MAAM,MAAM,EAAE,IAAI,OAAQ,KAAK,MAAM,CAAC;AAClD,iBAAO,KAAK,IAAI,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK;AAC/C,iBAAO,KAAK,MAAM,MAAM,EAAE,IAAI,OAAQ,KAAK,MAAM,EAAE;AACnD,iBAAO,KAAK,IAAI,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK;AAAA,QACnD,WAAW,iBAAiB,IAAI;AAC5B,iBAAO,KAAK,IAAI,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,OAAS;AACjD,iBAAO,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,IAAK,MAAM,CAAC,MAAO,MAAM,CAAC,IAAI,OAAQ;AACxE,iBAAO,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,KAAM,MAAM,CAAC,MAAO,MAAM,CAAC,IAAI,MAAM;AACvE,iBAAO,KAAK,MAAM,MAAM,CAAC,IAAI,QAAS,MAAM,MAAM,CAAC,KAAK;AACxD,iBAAO,KAAK,IAAI,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,OAAS;AACjD,iBAAO,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,MAAM,EAAE,IAAI,OAAQ;AACvE,iBAAO,KAAK,KAAK,MAAM,EAAE,KAAK,KAAK,KAAK,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,MAAM;AACxE,iBAAO,KAAK,MAAM,MAAM,EAAE,IAAI,QAAS,MAAM,MAAM,EAAE,KAAK;AAC1D,iBAAO,KAAK,IAAI,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,OAAS;AAAA,QACvD;AAAA,MACJ;AAAA,IACJ;AAAA,EAEJ,WAAU,cAAc,GAAG;AACvB,SAAK,MAAM,GAAG,MAAM,WAAW,OAAM;AACjC,WAAI,MAAM,GAAG,MAAM,UAAU,OAAM;AAC/B,YAAI,MAAM;AACV,gBAAQ,IAAI;AACZ,YAAI,KAAG,EAAG,mBAAkB;AAC5B,YAAI,IAAE,KAAK;AACP,eAAK,KAAM,IAAI,WAAW,CAAC;AAC/B,YAAI,KAAK,KAAK,GAAG;AACb,cAAI,WAAW,CAAC;AAChB,cAAG,KAAK,GAAE;AACN,iBAAK,KAAK,KAAK,OAAQ;AACvB,gBAAI,KAAK,KAAK,IAAI,KAAK,MAAM;AACzB,mBAAK,KAAK,KAAK,EAAG,MAAO;AAC7B,iBAAK,KAAK,KAAK,KAAK;AAAA,UACxB;AAAA,QACJ,OAAO;AACH,eAAK,KAAK,IAAI,WAAW,CAAC;AAC1B,cAAG,KAAK,KAAK,KAAK,IAAI;AAClB,iBAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,WAAW,CAAC;AAAA,QACrD;AACA,eAAO,KAAK,IAAI,KAAK,MAAM,CAAC;AAAA,MAChC;AAAA,IACJ;AAAA,EACJ,MACK,OAAM;AACf;AAGZlC,MAAK,OAAO,aAAa,WAAU;AAAC,MAAIa,KAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,KAAI,IAAG,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,KAAI,IAAG,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,GAAE,KAAI,IAAG,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,KAAI,IAAG,GAAE,IAAG,KAAI,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,KAAI,GAAE,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,KAAI,GAAE,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,GAAE,IAAG,IAAG,MAAK,KAAI,GAAE,IAAG,MAAK,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI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A,IAC/B;AAAA,MAAE;AAAA,MAAG;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA;AAAA,MACjC;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAG;AAAA,MAAG;AAAA,IAAG;AAAA,IAChD;AAAA,MAAE;AAAA,MAAG;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA;AAAA,MACjC;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAG;AAAA,MAAG;AAAA,IAAG;AAAA,IAC/B;AAAA,MAAE;AAAA,MAAG;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA;AAAA,MACjC;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,IAAG;AAAA,IACrC;AAAA,MAAE;AAAA,MAAG;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA,MAAE;AAAA;AAAA,M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GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAChiD,MAAI,OAAO,EAAC,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,IAAI,OAAO,GAAG,OAAO,IAAI,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAA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,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AACT;AAkBA,IAAI,mBAAmB;AAAA,EACnB,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASR,MAAQ;AAAA,EACR,MAAQ;AAAA,EAER,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,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CA;AAAA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAA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CpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,IACrF;AAEA,QAAI,IAAI;AAER,QAAI;AACJ,UAAM,SAAS,CAAC;AAEhB,WAAQ,IAAIA,MAAK,YAAa;AAE7B,UAAIC,MAAK;AAET,eAAU,IAAI,GAAG,IAAI,GAAG,KAAO;AAE9B,QAAAA,OAAM,OAAO,aAAcD,MAAK,SAAU,GAAK,CAAE;AAAA,MAElD;AAEA,YAAM,YAAYA,MAAK,UAAW,GAAG,IAAK;AAAG,WAAK;AAClD,WAAK;AAEL,UAAKC,QAAO,QAAS;AAEpB,cAAMC,KAAIF,MAAK,UAAW,GAAG,IAAK;AAAG,aAAK;AAC1C,cAAMG,KAAIH,MAAK,UAAW,GAAG,IAAK;AAAG,aAAK;AAC1C,cAAM,IAAIA,MAAK,UAAW,GAAG,IAAK;AAAG,aAAK;AAE1C,gBAAQ;AAAA,UACP,SAAS;AAAA,UACT,MAAM,EAAE,GAAGE,IAAG,GAAGC,IAAG,EAAK;AAAA,QAC1B;AAEA,eAAO,KAAM,KAAM;AAEnB,aAAK,YAAc,IAAI;AAAA,MAExB,WAAYF,QAAO,QAAS;AAE3B,cAAM,YAAYD,MAAK,UAAW,GAAG,IAAK;AAAG,aAAK;AAClD,cAAM,OAAO,IAAI,WAAY,QAAQ,GAAG,YAAY,CAAE;AAEtD,aAAK,YAAY;AAAA,MAElB,WAAYC,QAAO,QAAS;AAE3B,cAAM,UAAU,CAAE,CAAE;AAEpB,iBAAU,IAAI,GAAG,IAAI,KAAK,KAAO;AAEhC,kBAAS,IAAI,CAAE,IAAID,MAAK,UAAW,GAAG,IAAK;AAAG,eAAK;AAAA,QAEpD;AAEA,cAAM,UAAU;AAAA,MAEjB,OAAO;AAIN,aAAK;AAAA,MAEN;AAAA,IAED;AAEA,WAAO;AAAA,EAER;AAED;AAEA,IAAM,UAAN,cAAsB,KAAK;AAAA,EAE1B,YAAa,OAAQ;AAEpB,UAAMA,QAAO,MAAM;AACnB,UAAMI,QAAO,MAAM;AACnB,UAAM,UAAU,MAAM;AAItB,UAAM,WAAW,CAAC;AAClB,UAAM,SAAS,CAAC;AAEhB,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAClE,UAAM,KAAK,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAElE,UAAMC,UAAS,IAAI,MAAM;AAEzB,aAASC,KAAK,MAAMJ,IAAGC,IAAG,GAAG,GAAGI,IAAGC,IAAI;AAEtC,MAAAN,MAAKE,MAAK,IAAI;AACd,MAAAD,MAAKC,MAAK,IAAI;AACd,WAAKA,MAAK,IAAI;AAEd,eAAU,IAAI,GAAG,IAAI,IAAI,KAAK,GAAI;AAEjC,QAAAC,QAAO,OAAQ,GAAGE,IAAGC,IAAG,cAAe;AAEvC,iBAAS,KAAM,KAAM,IAAI,CAAE,IAAIN,IAAG,KAAM,IAAI,CAAE,IAAIC,IAAG,KAAM,IAAI,CAAE,IAAI,CAAE;AACvE,eAAO,KAAME,QAAO,GAAGA,QAAO,GAAGA,QAAO,CAAE;AAAA,MAE3C;AAAA,IAED;AAIA,UAAM,UAAUD,MAAK;AACrB,UAAM,UAAUA,MAAK,IAAIA,MAAK;AAE9B,UAAM,QAAQ,IAAI,WAAYA,MAAK,IAAIA,MAAK,IAAIA,MAAK,CAAE;AAEvD,aAAU,IAAI,GAAG,IAAIJ,MAAK,QAAQ,KAAK,GAAI;AAE1C,YAAME,KAAIF,MAAM,IAAI,CAAE;AACtB,YAAMG,KAAIH,MAAM,IAAI,CAAE;AACtB,YAAM,IAAIA,MAAM,IAAI,CAAE;AAEtB,YAAMS,SAAQP,KAAMC,KAAI,UAAc,IAAI;AAE1C,YAAOM,MAAM,IAAI;AAAA,IAElB;AAIA,QAAI,YAAY;AAEhB,aAAU,IAAI,GAAG,IAAIT,MAAK,QAAQ,KAAK,GAAI;AAE1C,YAAME,KAAIF,MAAM,IAAI,CAAE;AACtB,YAAMG,KAAIH,MAAM,IAAI,CAAE;AACtB,YAAM,IAAIA,MAAM,IAAI,CAAE;AACtB,YAAMU,KAAIV,MAAM,IAAI,CAAE;AAEtB,YAAM,MAAM,QAASU,EAAE;AACvB,YAAM,KAAM,OAAO,IAAI,OAAS;AAChC,YAAMH,MAAM,OAAO,IAAI,OAAS;AAChC,YAAMC,MAAM,OAAO,KAAK,OAAS;AAEjC,UAAK,IAAI,KAAKD,KAAI,KAAKC,KAAI,EAAI,aAAY;AAE3C,YAAMC,SAAQP,KAAMC,KAAI,UAAc,IAAI;AAE1C,UAAK,MAAOM,SAAQ,CAAE,MAAM,KAAKP,OAAME,MAAK,IAAI,EAAI,CAAAE,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AAChF,UAAK,MAAOC,SAAQ,CAAE,MAAM,KAAKP,OAAM,EAAI,CAAAI,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AACvE,UAAK,MAAOC,SAAQ,OAAQ,MAAM,KAAKN,OAAMC,MAAK,IAAI,EAAI,CAAAE,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AACtF,UAAK,MAAOC,SAAQ,OAAQ,MAAM,KAAKN,OAAM,EAAI,CAAAG,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AAC7E,UAAK,MAAOC,SAAQ,OAAQ,MAAM,KAAK,MAAML,MAAK,IAAI,EAAI,CAAAE,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AACtF,UAAK,MAAOC,SAAQ,OAAQ,MAAM,KAAK,MAAM,EAAI,CAAAH,KAAK,IAAIJ,IAAG,GAAG,CAAEC,IAAG,GAAGI,IAAGC,EAAE;AAAA,IAE9E;AAEA,UAAM,WAAW,IAAI,eAAe;AACpC,aAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAC7E,aAAS,qBAAqB;AAE9B,UAAM,WAAW,IAAI,qBAAqB;AAE1C,QAAK,WAAY;AAEhB,eAAS,aAAc,SAAS,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AACxE,eAAS,eAAe;AAAA,IAEzB;AAEA,UAAO,UAAU,QAAS;AAAA,EAE3B;AAED;AAEA,IAAM,mBAAN,cAA+B,cAAc;AAAA,EAE5C,YAAa,OAAQ;AAEpB,UAAMR,QAAO,MAAM;AACnB,UAAMI,QAAO,MAAM;AAEnB,UAAM,UAAUA,MAAK;AACrB,UAAM,UAAUA,MAAK,IAAIA,MAAK;AAE9B,UAAM,QAAQ,IAAI,WAAYA,MAAK,IAAIA,MAAK,IAAIA,MAAK,CAAE;AAEvD,aAAU,IAAI,GAAG,IAAIJ,MAAK,QAAQ,KAAK,GAAI;AAE1C,YAAME,KAAIF,MAAM,IAAI,CAAE;AACtB,YAAMG,KAAIH,MAAM,IAAI,CAAE;AACtB,YAAM,IAAIA,MAAM,IAAI,CAAE;AAEtB,YAAMS,SAAQP,KAAMC,KAAI,UAAc,IAAI;AAE1C,YAAOM,MAAM,IAAI;AAAA,IAElB;AAEA,UAAO,OAAOL,MAAK,GAAGA,MAAK,GAAGA,MAAK,CAAE;AAErC,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,kBAAkB;AACvB,SAAK,cAAc;AAAA,EAEpB;AAED;;;AC1TA,IAAIO,KAAE,CAACC,IAAE,MAAI,OAAK,MAAI,IAAE,EAAC,SAAQ,CAAC,EAAC,GAAEA,GAAE,EAAE,SAAQ,CAAC,IAAG,EAAE;AAAS,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,UAAQ;AAAO,KAAG,UAAQ;AAAO,CAAC;AAAE,IAAI,IAAEA,GAAE,CAAC,SAAQ,WAAS;AAAC;AAAa,MAAI,gBAAc,WAAS,QAAQ,iBAAe,SAASC,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAEC,KAAE,EAAE,QAAO,IAAED,GAAE,QAAO,IAAEC,IAAE,KAAI,IAAI,CAAAD,GAAE,CAAC,IAAE,EAAE,CAAC;AAAE,WAAOA;AAAA,EAAC;AAAE,SAAO,eAAe,SAAQ,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,UAAQ,mBAAiB,QAAQ,QAAM,QAAQ,OAAK,QAAQ,uBAAqB,QAAQ,gBAAc,QAAQ,cAAY,QAAQ,YAAU,QAAQ,WAAS,QAAQ,OAAK,QAAQ,QAAM,QAAQ,UAAQ,QAAQ,WAAS,QAAQ,oBAAkB,QAAQ,SAAO,QAAQ,YAAU,QAAQ,SAAO,QAAQ,UAAQ,QAAQ,OAAK,QAAQ,aAAW,QAAQ,QAAM,QAAQ,WAAS,QAAQ,WAAS,QAAQ,UAAQ,QAAQ,UAAQ,QAAQ,OAAK,QAAQ,UAAQ,QAAQ,SAAO,QAAQ,UAAQ,QAAQ,OAAK,QAAQ,WAAS,QAAQ,WAAS,QAAQ,WAAS,QAAQ,MAAI,QAAQ,OAAK,QAAQ,SAAO,QAAQ,SAAO,QAAQ,YAAU,QAAQ,OAAK,QAAQ,aAAW,QAAQ,cAAY,QAAQ,WAAS,QAAQ,UAAQ,QAAQ,OAAK,QAAQ,QAAM,QAAQ,UAAQ,QAAQ,MAAI,QAAQ,YAAU,QAAQ,SAAO,QAAQ,OAAK,QAAQ,UAAQ;AAAO,WAAS,QAAQA,IAAE;AAAC,WAAOA,MAAGA,GAAE,WAAS;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,KAAKA,IAAE;AAAC,WAAOA,MAAG,OAAK,CAAC,IAAE,OAAO,KAAKA,EAAC;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,OAAOA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,OAAO,KAAKA,EAAC,GAAEC,KAAE,GAAEA,KAAE,EAAE,QAAOA,KAAI,GAAE,KAAKD,GAAE,EAAEC,EAAC,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,UAAUD,IAAE,GAAE;AAAC,aAAQ,IAAE,CAAC,GAAEC,KAAE,KAAKD,EAAC,GAAE,IAAE,GAAE,IAAEC,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,QAAE,KAAK,EAAE,KAAK,MAAKD,GAAEE,EAAC,GAAEA,EAAC,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,YAAU;AAAU,WAAS,IAAIF,IAAE,GAAE;AAAC,aAAQ,IAAE,CAAC,GAAEC,KAAE,GAAEA,KAAED,GAAE,QAAOC,KAAI,GAAE,KAAK,EAAE,KAAK,MAAKD,GAAEC,EAAC,GAAEA,EAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,MAAI;AAAI,WAAS,QAAQD,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,YAAM,QAAQC,EAAC,IAAE,IAAE,EAAE,OAAO,QAAQA,EAAC,CAAC,IAAE,EAAE,KAAKA,EAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,MAAMD,IAAE;AAAC,WAAO,QAAQA,EAAC,IAAE,SAAOA,GAAE,CAAC;AAAA,EAAC;AAAC,UAAQ,QAAM;AAAM,WAAS,KAAKA,IAAE;AAAC,QAAI,IAAEA,MAAGA,GAAE;AAAO,WAAO,IAAEA,GAAE,IAAE,CAAC,IAAE;AAAA,EAAM;AAAC,UAAQ,OAAK;AAAK,WAAS,QAAQA,IAAE,GAAE;AAAC,QAAG,MAAM,QAAQA,EAAC,EAAE,UAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,GAAE,KAAK,MAAKA,GAAE,CAAC,GAAE,CAAC;AAAA,aAAU,SAASA,EAAC,EAAE,UAAQC,KAAE,KAAKD,EAAC,GAAE,IAAE,GAAE,IAAEC,GAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,GAAE,CAAC,GAAEC,KAAEF,GAAE,CAAC;AAAE,QAAE,KAAK,MAAKE,IAAE,CAAC;AAAA,IAAC;AAAA,QAAM,OAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,SAASF,IAAE;AAAC,WAAO,OAAOA,MAAG;AAAA,EAAQ;AAAC,UAAQ,WAAS;AAAS,WAAS,YAAYA,IAAE;AAAC,WAAOA,OAAI;AAAA,EAAM;AAAC,UAAQ,cAAY;AAAY,WAAS,WAAWA,IAAE;AAAC,WAAOA,cAAa;AAAA,EAAQ;AAAC,UAAQ,aAAW;AAAW,WAAS,KAAKA,IAAE,GAAE;AAAC,WAAO,MAAI,WAAS,IAAE,IAAGA,GAAE,MAAM,GAAEA,GAAE,MAAM;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,UAAUA,IAAE,GAAE;AAAC,WAAO,MAAI,WAAS,IAAE,IAAGA,GAAE,MAAM,GAAEA,GAAE,SAAO,CAAC;AAAA,EAAC;AAAC,UAAQ,YAAU;AAAU,WAAS,OAAOA,IAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,QAAG,MAAM,QAAQA,EAAC,EAAE,UAAQC,KAAE,GAAEA,KAAED,GAAE,QAAOC,MAAI;AAAC,UAAI,IAAED,GAAEC,EAAC;AAAE,QAAE,KAAK,MAAK,CAAC,KAAG,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,OAAOD,IAAE,GAAE;AAAC,WAAO,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAM,CAAC,EAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,KAAKA,IAAE,GAAE;AAAC,aAAQ,IAAE,OAAO,KAAKA,EAAC,GAAEC,KAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAIC,KAAE,EAAE,CAAC,GAAE,IAAEF,GAAEE,EAAC;AAAE,QAAE,CAAC,MAAID,GAAEC,EAAC,IAAE;AAAA,IAAE;AAAC,WAAOD;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,IAAID,IAAE,GAAE;AAAC,WAAO,SAASA,EAAC,IAAEA,GAAE,eAAe,CAAC,IAAE;AAAA,EAAE;AAAC,UAAQ,MAAI;AAAI,WAAS,SAASA,IAAE,GAAE;AAAC,WAAO,KAAKA,IAAE,SAAS,GAAE;AAAC,aAAO,MAAI;AAAA,IAAC,CAAC,MAAI;AAAA,EAAM;AAAC,UAAQ,WAAS;AAAS,WAAS,SAASA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,GAAE,KAAKA,GAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,WAAS;AAAS,WAAS,SAASA,IAAE;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQ,KAAKA,GAAE,QAAO,UAAU,eAAe,KAAKA,IAAE,CAAC,MAAI,EAAE,CAAC,IAAEA,GAAE,CAAC;AAAG,WAAO;AAAA,EAAC;AAAC,UAAQ,WAAS;AAAS,WAAS,KAAKA,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,UAAG,EAAE,KAAK,MAAKC,EAAC,EAAE,QAAOA;AAAA,IAAC;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,QAAQD,IAAE,GAAE;AAAC,aAAQ,IAAE,CAAC,GAAEC,KAAE,GAAEA,KAAED,GAAE,QAAOC,MAAI;AAAC,UAAI,IAAED,GAAEC,EAAC;AAAE,QAAE,KAAK,MAAK,CAAC,KAAG,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,OAAOD,IAAE,GAAE,GAAE;AAAC,aAAQC,KAAE,MAAM,QAAQD,EAAC,GAAE,IAAEC,KAAED,KAAE,OAAOA,EAAC,GAAEE,KAAED,KAAE,CAAC,IAAE,KAAKD,EAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,KAAE,EAAE,KAAK,MAAK,GAAE,EAAE,CAAC,GAAEC,KAAE,IAAEC,GAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,QAAQF,IAAE;AAAC,WAAO,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAO,KAAG;AAAA,IAAI,CAAC;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,KAAKA,IAAE,GAAE;AAAC,UAAI,WAAS,IAAE,SAASC,IAAE;AAAC,aAAOA;AAAA,IAAC;AAAG,QAAI,IAAE,CAAC;AAAE,WAAO,OAAOD,IAAE,SAASC,IAAE,GAAE;AAAC,UAAIC,KAAE,EAAE,CAAC;AAAE,aAAO,SAAS,GAAEA,EAAC,IAAED,MAAG,EAAE,KAAKC,EAAC,GAAED,GAAE,OAAO,CAAC;AAAA,IAAE,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,QAAQD,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,GAAE,IAAE,CAAC,IAAE,UAAU,CAAC;AAAE,QAAIC,KAAE,CAAC,IAAI,GAAE,IAAEA,GAAE,OAAO,CAAC;AAAE,WAAO,SAAS,KAAK,MAAMD,IAAE,CAAC;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,QAAQA,IAAE;AAAC,WAAO,MAAM,QAAQA,EAAC;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,SAASA,IAAE;AAAC,WAAOA,cAAa;AAAA,EAAM;AAAC,UAAQ,WAAS;AAAS,WAAS,SAASA,IAAE;AAAC,WAAOA,cAAa;AAAA,EAAM;AAAC,UAAQ,WAAS;AAAS,WAAS,MAAMA,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,KAAG,CAAC,EAAEA,GAAE,CAAC,GAAE,CAAC,EAAE,QAAM;AAAG,WAAM;AAAA,EAAE;AAAC,UAAQ,QAAM;AAAM,WAAS,WAAWA,IAAE,GAAE;AAAC,WAAO,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAO,SAAS,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,UAAQ,aAAW;AAAW,WAAS,KAAKA,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,KAAG,EAAEA,GAAE,CAAC,CAAC,EAAE,QAAM;AAAG,WAAM;AAAA,EAAE;AAAC,UAAQ,OAAK;AAAK,WAAS,QAAQA,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,IAAI,KAAGA,GAAE,CAAC,MAAI,EAAE,QAAO;AAAE,WAAM;AAAA,EAAE;AAAC,UAAQ,UAAQ;AAAQ,WAAS,OAAOA,IAAE,GAAE;AAAC,QAAI,IAAE,SAASA,EAAC;AAAE,WAAO,EAAE,KAAK,SAASC,IAAE,GAAE;AAAC,aAAO,EAAEA,EAAC,IAAE,EAAE,CAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,UAAUD,IAAE,GAAE;AAAC,QAAGA,GAAE,WAAS,EAAE,OAAO,OAAM,MAAM,2DAA2D;AAAE,aAAQ,IAAE,CAAC,GAAEC,KAAE,GAAEA,KAAED,GAAE,QAAOC,KAAI,GAAED,GAAEC,EAAC,CAAC,IAAE,EAAEA,EAAC;AAAE,WAAO;AAAA,EAAC;AAAC,UAAQ,YAAU;AAAU,WAAS,OAAOD,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,GAAE,IAAE,CAAC,IAAE,UAAU,CAAC;AAAE,aAAQC,KAAE,GAAEA,KAAE,EAAE,QAAOA,KAAI,UAAQ,IAAE,EAAEA,EAAC,GAAEC,KAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,GAAE,CAAC;AAAE,MAAAF,GAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAC,UAAQ,SAAO;AAAO,WAAS,kBAAkBA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,GAAE,IAAE,CAAC,IAAE,UAAU,CAAC;AAAE,aAAQC,KAAE,GAAEA,KAAE,EAAE,QAAOA,KAAI,UAAQ,IAAE,EAAEA,EAAC,GAAEC,KAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,GAAE,CAAC;AAAE,UAAIF,IAAE,CAAC,MAAIA,GAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAE;AAAC,WAAOA;AAAA,EAAC;AAAC,UAAQ,oBAAkB;AAAkB,WAAS,WAAU;AAAC,aAAQA,KAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,CAAAA,GAAE,CAAC,IAAE,UAAU,CAAC;AAAE,WAAO,kBAAkB,MAAM,QAAO,cAAc,CAAC,CAAC,CAAC,GAAEA,EAAC,CAAC;AAAA,EAAC;AAAC,UAAQ,WAAS;AAAS,WAAS,QAAQA,IAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,WAAO,QAAQA,IAAE,SAASC,IAAE;AAAC,UAAI,IAAE,EAAEA,EAAC,GAAEC,KAAE,EAAE,CAAC;AAAE,MAAAA,KAAEA,GAAE,KAAKD,EAAC,IAAE,EAAE,CAAC,IAAE,CAACA,EAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,UAAQ,UAAQ;AAAQ,WAAS,MAAMD,IAAE,GAAE;AAAC,aAAQ,IAAE,SAASA,EAAC,GAAEC,KAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC,GAAE,IAAE,EAAEC,EAAC;AAAE,QAAEA,EAAC,IAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,QAAM;AAAM,WAAS,OAAM;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,SAASF,IAAE;AAAC,WAAOA;AAAA,EAAC;AAAC,UAAQ,WAAS;AAAS,WAAS,UAAUA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,QAAE,KAAKC,OAAI,SAAOA,KAAE,MAAM;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,UAAQ,YAAU;AAAU,WAAS,YAAYD,IAAE;AAAC,eAAS,QAAQ,SAAO,QAAQ,MAAM,YAAUA,EAAC;AAAA,EAAC;AAAC,UAAQ,cAAY;AAAY,WAAS,cAAcA,IAAE;AAAC,eAAS,QAAQ,QAAM,QAAQ,KAAK,cAAYA,EAAC;AAAA,EAAC;AAAC,UAAQ,gBAAc;AAAc,WAAS,uBAAsB;AAAC,WAAO,OAAO,OAAK;AAAA,EAAU;AAAC,UAAQ,uBAAqB;AAAqB,WAAS,KAAKA,IAAE;AAAC,WAAOA,GAAEA,GAAE,SAAO,CAAC;AAAA,EAAC;AAAC,UAAQ,OAAK;AAAK,WAAS,MAAMA,IAAE;AAAC,QAAI,KAAE,oBAAI,KAAK,GAAE,QAAQ,GAAE,IAAEA,GAAE,GAAEC,MAAE,oBAAI,KAAK,GAAE,QAAQ,GAAE,IAAEA,KAAE;AAAE,WAAM,EAAC,MAAK,GAAE,OAAM,EAAC;AAAA,EAAC;AAAC,UAAQ,QAAM;AAAM,WAAS,iBAAiB,cAAa;AAAC,aAAS,kBAAiB;AAAA,IAAC;AAAC,oBAAgB,YAAU;AAAa,QAAI,eAAa,IAAI;AAAgB,aAAS,aAAY;AAAC,aAAO,OAAO,aAAa;AAAA,IAAG;AAAC,WAAO,WAAW,GAAE,WAAW,GAAE;AAAa,SAAK,YAAY;AAAA,EAAC;AAAC,UAAQ,mBAAiB;AAAgB,CAAC;AAAE,IAAI,KAAGF,GAAE,CAAC,IAAG,OAAK;AAAC,GAAC,SAASC,IAAE,GAAE;AAAC,WAAO,UAAQ,cAAY,OAAO,MAAI,OAAO,CAAC,GAAE,CAAC,IAAE,OAAO,MAAI,YAAU,GAAG,UAAQ,GAAG,UAAQ,EAAE,IAAEA,GAAE,cAAY,EAAE;AAAA,EAAC,GAAG,OAAO,QAAM,cAAY,OAAK,IAAG,WAAU;AAAC,aAASA,KAAG;AAAA,IAAC;AAAC,IAAAA,GAAE,UAAU,YAAU,WAAU;AAAC,aAAM,EAAC,KAAI,KAAK,KAAI,OAAM,KAAK,OAAM,UAAS,KAAK,SAAQ;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,SAAS,GAAE;AAAC,WAAK,MAAI,EAAE,KAAI,KAAK,QAAM,EAAE,OAAM,KAAK,WAAS,EAAE;AAAA,IAAQ,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,WAAK,MAAI,GAAE,KAAK,QAAM,GAAE,KAAK,WAAS,GAAE,KAAK,YAAY,GAAG;AAAE,UAAI,IAAE,KAAK,YAAY;AAAE,WAAK,YAAY,GAAG;AAAE,eAAQG,KAAE,EAAC,MAAK,SAAQ,KAAI,EAAC,OAAM,KAAK,KAAI,KAAI,EAAE,OAAM,GAAE,QAAO,OAAG,YAAW,OAAG,WAAU,OAAG,SAAQ,OAAG,QAAO,MAAE,GAAE,KAAK,aAAa,IAAG,SAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,YAAEA,IAAE,QAAQ;AAAE;AAAA,QAAM,KAAI;AAAI,YAAEA,IAAE,YAAY;AAAE;AAAA,QAAM,KAAI;AAAI,YAAEA,IAAE,WAAW;AAAE;AAAA,QAAM,KAAI;AAAI,YAAEA,IAAE,SAAS;AAAE;AAAA,QAAM,KAAI;AAAI,YAAEA,IAAE,QAAQ;AAAE;AAAA,MAAK;AAAC,UAAG,KAAK,QAAM,KAAK,MAAM,OAAO,OAAM,MAAM,sBAAoB,KAAK,MAAM,UAAU,KAAK,GAAG,CAAC;AAAE,aAAM,EAAC,MAAK,WAAU,OAAMA,IAAE,OAAM,GAAE,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,IAAC,GAAEH,GAAE,UAAU,cAAY,WAAU;AAAC,UAAI,IAAE,CAAC,GAAE,IAAE,KAAK;AAAI,WAAI,EAAE,KAAK,KAAK,YAAY,CAAC,GAAE,KAAK,SAAS,MAAI,MAAK,MAAK,YAAY,GAAG,GAAE,EAAE,KAAK,KAAK,YAAY,CAAC;AAAE,aAAM,EAAC,MAAK,eAAc,OAAM,GAAE,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,WAAU;AAAC,eAAQ,IAAE,CAAC,GAAE,IAAE,KAAK,KAAI,KAAK,OAAO,IAAG,GAAE,KAAK,KAAK,KAAK,CAAC;AAAE,aAAM,EAAC,MAAK,eAAc,OAAM,GAAE,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,OAAK,WAAU;AAAC,aAAO,KAAK,YAAY,IAAE,KAAK,UAAU,IAAE,KAAK,KAAK;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,WAAU;AAAC,UAAI,IAAE,KAAK;AAAI,cAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,iBAAM,EAAC,MAAK,eAAc,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,QAAE,KAAI;AAAI,iBAAM,EAAC,MAAK,aAAY,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,QAAE,KAAI;AAAK,kBAAO,KAAK,QAAQ,GAAE;AAAA,YAAC,KAAI;AAAI,qBAAM,EAAC,MAAK,gBAAe,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,YAAE,KAAI;AAAI,qBAAM,EAAC,MAAK,mBAAkB,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,UAAC;AAAC,gBAAM,MAAM,0BAA0B;AAAA,QAAE,KAAI;AAAI,eAAK,YAAY,GAAG;AAAE,cAAI;AAAE,kBAAO,KAAK,QAAQ,GAAE;AAAA,YAAC,KAAI;AAAI,kBAAE;AAAY;AAAA,YAAM,KAAI;AAAI,kBAAE;AAAoB;AAAA,UAAK;AAAC,YAAE,CAAC;AAAE,cAAIG,KAAE,KAAK,YAAY;AAAE,iBAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,GAAE,OAAMA,IAAE,KAAI,KAAK,IAAI,CAAC,EAAC;AAAA,MAAC;AAAC,MAAAC,GAAE;AAAA,IAAC,GAAEJ,GAAE,UAAU,aAAW,SAAS,GAAE;AAAC,UAAI,GAAEG,KAAE,KAAK;AAAI,cAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,cAAE,EAAC,SAAQ,GAAE,QAAO,SAAQ;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAC,SAAQ,GAAE,QAAO,SAAQ;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAC,SAAQ,GAAE,QAAO,EAAC;AAAE;AAAA,QAAM,KAAI;AAAI,cAAI,IAAE,KAAK,qBAAqB;AAAE,kBAAO,KAAK,QAAQ,GAAE;AAAA,YAAC,KAAI;AAAI,kBAAE,EAAC,SAAQ,GAAE,QAAO,EAAC;AAAE;AAAA,YAAM,KAAI;AAAI,kBAAIE;AAAE,mBAAK,QAAQ,KAAGA,KAAE,KAAK,qBAAqB,GAAE,IAAE,EAAC,SAAQ,GAAE,QAAOA,GAAC,KAAG,IAAE,EAAC,SAAQ,GAAE,QAAO,SAAQ,GAAE,KAAK,YAAY,GAAG;AAAE;AAAA,UAAK;AAAC,cAAG,MAAI,QAAI,MAAI,OAAO;AAAO,YAAE,CAAC;AAAE;AAAA,MAAK;AAAC,UAAG,EAAE,MAAI,QAAI,MAAI,QAAQ,QAAO,EAAE,CAAC,GAAE,KAAK,SAAS,CAAC,MAAI,OAAK,KAAK,YAAY,GAAG,GAAE,EAAE,SAAO,SAAI,EAAE,SAAO,MAAG,EAAE,OAAK,cAAa,EAAE,MAAI,KAAK,IAAIF,EAAC,GAAE;AAAA,IAAC,GAAEH,GAAE,UAAU,OAAK,WAAU;AAAC,UAAI,GAAE,IAAE,KAAK;AAAI,cAAO,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAI,cAAE,KAAK,OAAO;AAAE;AAAA,QAAM,KAAI;AAAK,cAAE,KAAK,WAAW;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,KAAK,eAAe;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,KAAK,MAAM;AAAE;AAAA,MAAK;AAAC,aAAO,MAAI,UAAQ,KAAK,mBAAmB,MAAI,IAAE,KAAK,iBAAiB,IAAG,EAAE,CAAC,GAAE,EAAE,MAAI,KAAK,IAAI,CAAC,GAAE,KAAK,aAAa,MAAI,EAAE,aAAW,KAAK,WAAW,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,SAAO,WAAU;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,OAAM,YAAW,MAAG,OAAM,CAAC,EAAE;AAAA,CAC19T,GAAE,EAAE,IAAI,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,CAAC,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,aAAW,WAAU;AAAC,cAAO,KAAK,YAAY,IAAI,GAAE,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,kBAAkB;AAAA,QAAE,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,qBAAqB;AAAA,QAAE,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,kBAAkB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,wBAAwB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,iBAAiB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,sBAAsB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,gCAAgC;AAAA,QAAE;AAAQ,iBAAO,KAAK,mBAAmB;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,WAAU;AAAC,UAAI,IAAE,KAAK,gBAAgB;AAAE,aAAM,EAAC,MAAK,sBAAqB,OAAM,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,uBAAqB,WAAU;AAAC,UAAI,GAAE,IAAE;AAAG,cAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,cAAEM;AAAE;AAAA,QAAM,KAAI;AAAI,cAAEA,IAAE,IAAE;AAAG;AAAA,QAAM,KAAI;AAAI,cAAE;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,GAAE,IAAE;AAAG;AAAA,QAAM,KAAI;AAAI,cAAEC;AAAE;AAAA,QAAM,KAAI;AAAI,cAAEA,IAAE,IAAE;AAAG;AAAA,MAAK;AAAC,aAAO,EAAE,CAAC,GAAE,EAAC,MAAK,OAAM,OAAM,GAAE,YAAW,EAAC;AAAA,IAAC,GAAEP,GAAE,UAAU,oBAAkB,WAAU;AAAC,UAAI;AAAE,cAAO,KAAK,QAAQ,GAAE;AAAA,QAAC,KAAI;AAAI,cAAE,EAAE,IAAI;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAE;AAAA,CAC9iC;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAE,IAAI;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAE,GAAG;AAAE;AAAA,QAAM,KAAI;AAAI,cAAE,EAAE,IAAI;AAAE;AAAA,MAAK;AAAC,aAAO,EAAE,CAAC,GAAE,EAAC,MAAK,aAAY,OAAM,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,0BAAwB,WAAU;AAAC,WAAK,YAAY,GAAG;AAAE,UAAI,IAAE,KAAK,QAAQ;AAAE,UAAG,WAAW,KAAK,CAAC,MAAI,MAAG,OAAM,MAAM,UAAU;AAAE,UAAI,IAAE,EAAE,YAAY,EAAE,WAAW,CAAC,IAAE;AAAG,aAAM,EAAC,MAAK,aAAY,OAAM,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,WAAU;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,aAAY,OAAM,EAAE,IAAI,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,wBAAsB,WAAU;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,KAAK,eAAe,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,kCAAgC,WAAU;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,KAAK,eAAe,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,qBAAmB,WAAU;AAAC,UAAI,IAAE,KAAK,QAAQ;AAAE,aAAM,EAAC,MAAK,aAAY,OAAM,EAAE,CAAC,EAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,4BAA0B,WAAU;AAAC,cAAO,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAA;AAAA,QAClzB,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAA,QAAS,KAAI;AAAA,QAAK,KAAI;AAAI,gBAAM,MAAM,KAAK;AAAA,QAAE;AAAQ,cAAI,IAAE,KAAK,QAAQ;AAAE,iBAAM,EAAC,MAAK,aAAY,OAAM,EAAE,CAAC,EAAC;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,iBAAe,WAAU;AAAC,UAAI,IAAE,CAAC,GAAE,IAAE;AAAG,WAAI,KAAK,YAAY,GAAG,GAAE,KAAK,SAAS,CAAC,MAAI,QAAM,KAAK,YAAY,GAAG,GAAE,IAAE,OAAI,KAAK,YAAY,KAAG;AAAC,YAAIG,KAAE,KAAK,UAAU,GAAE,IAAEA,GAAE,SAAO;AAAY,YAAG,KAAG,KAAK,YAAY,GAAE;AAAC,eAAK,YAAY,GAAG;AAAE,cAAIE,KAAE,KAAK,UAAU,GAAEG,KAAEH,GAAE,SAAO;AAAY,cAAGG,IAAE;AAAC,gBAAGH,GAAE,QAAMF,GAAE,MAAM,OAAM,MAAM,uCAAuC;AAAE,cAAE,KAAK,EAAC,MAAKA,GAAE,OAAM,IAAGE,GAAE,MAAK,CAAC;AAAA,UAAC,MAAM,CAAAH,GAAEC,GAAE,OAAM,CAAC,GAAE,EAAE,KAAK,EAAE,GAAG,CAAC,GAAED,GAAEG,GAAE,OAAM,CAAC;AAAA,QAAC,MAAM,CAAAH,GAAEC,GAAE,OAAM,CAAC;AAAA,MAAC;AAAC,aAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,OAAM,YAAW,GAAE,OAAM,EAAC;AAAA,IAAC,GAAEH,GAAE,UAAU,YAAU,WAAU;AAAC,cAAO,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA;AAAA,QACnuB,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAS,gBAAM,MAAM,KAAK;AAAA,QAAE,KAAI;AAAK,iBAAO,KAAK,YAAY;AAAA,QAAE;AAAQ,iBAAO,KAAK,0BAA0B;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,WAAU;AAAC,cAAO,KAAK,YAAY,IAAI,GAAE,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAI,iBAAO,KAAK,YAAY,GAAG,GAAE,EAAC,MAAK,aAAY,OAAM,EAAE,IAAI,EAAC;AAAA,QAAE,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,qBAAqB;AAAA,QAAE,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAO,KAAK,kBAAkB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,wBAAwB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,iBAAiB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,sBAAsB;AAAA,QAAE,KAAI;AAAI,iBAAO,KAAK,gCAAgC;AAAA,QAAE;AAAQ,iBAAO,KAAK,mBAAmB;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,WAAU;AAAC,UAAI,IAAE;AAAG,cAAO,KAAK,YAAY,GAAG,GAAE,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAI,eAAK,YAAY,GAAG,GAAE,KAAK,YAAY,GAAG,GAAE,IAAE;AAAG;AAAA,QAAM;AAAQ,eAAK;AAAW;AAAA,MAAK;AAAC,UAAI,IAAE,KAAK,YAAY;AAAE,WAAK,YAAY,GAAG;AAAE,UAAIG,KAAE,EAAC,MAAK,SAAQ,WAAU,GAAE,OAAM,EAAC;AAAE,aAAO,MAAIA,GAAE,MAAI,KAAK,WAAUA;AAAA,IAAC,GAAEH,GAAE,UAAU,kBAAgB,WAAU;AAAC,UAAI,IAAE,KAAK,QAAQ;AAAE,UAAGC,GAAE,KAAK,CAAC,MAAI,MAAG,OAAM,MAAM,8BAA8B;AAAE,aAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,IAAG,MAAG,KAAK,QAAQ;AAAE,aAAO,SAAS,GAAE,EAAE;AAAA,IAAC,GAAED,GAAE,UAAU,uBAAqB,WAAU;AAAC,UAAI,IAAE,KAAK,QAAQ;AAAE,UAAG,EAAE,KAAK,CAAC,MAAI,MAAG,OAAM,MAAM,sBAAsB;AAAE,aAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,IAAG,MAAG,KAAK,QAAQ;AAAE,aAAO,SAAS,GAAE,EAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,WAAU;AAAC,UAAI,IAAE,KAAK,QAAQ;AAAE,cAAO,GAAE;AAAA,QAAC,KAAI;AAAA;AAAA,QACz5C,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAA,QAAS,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAK,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,gBAAM,MAAM,KAAK;AAAA,QAAE;AAAQ,iBAAM,EAAC,MAAK,aAAY,OAAM,EAAE,CAAC,EAAC;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,WAAU;AAAC,cAAO,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAM;AAAA,QAAG;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,WAAU;AAAC,aAAO,KAAK,SAAS,MAAI,OAAK,KAAK,YAAY,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,WAAU;AAAC,aAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,SAAS,GAAE;AAAC,cAAO,MAAI,WAAS,IAAE,IAAG,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA;AAAA,QAC/iB,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAS,iBAAM;AAAA,QAAG;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,SAAO,WAAU;AAAC,aAAO,KAAK,OAAO,KAAG,KAAK,YAAY;AAAA,IAAC,GAAEA,GAAE,UAAU,SAAO,WAAU;AAAC,UAAG,KAAK,mBAAmB,EAAE,QAAM;AAAG,cAAO,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA,QAAK,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAM;AAAA,QAAG;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,WAAU;AAAC,cAAO,KAAK,SAAS,CAAC,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAI,iBAAM;AAAA,QAAG,KAAI;AAAK,kBAAO,KAAK,SAAS,CAAC,GAAE;AAAA,YAAC,KAAI;AAAA,YAAI,KAAI;AAAI,qBAAM;AAAA,YAAG;AAAQ,qBAAM;AAAA,UAAE;AAAA,QAAC,KAAI;AAAI,iBAAO,KAAK,SAAS,CAAC,MAAI,QAAM,KAAK,SAAS,CAAC,MAAI,OAAK,KAAK,SAAS,CAAC,MAAI;AAAA,QAAK;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,WAAU;AAAC,UAAI,IAAE,KAAK,UAAU;AAAE,UAAG;AAAC,eAAO,KAAK,WAAW,IAAE,MAAI;AAAA,MAAM,SAAO,GAAE;AAAC,eAAM;AAAA,MAAE,UAAC;AAAQ,aAAK,aAAa,CAAC;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,qBAAmB,WAAU;AAAC,cAAO,KAAK,SAAS,GAAE;AAAA,QAAC,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAK,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA,QAAI,KAAI;AAAA;AAAA,QACx2B,KAAI;AAAA,QAAK,KAAI;AAAA,QAAS,KAAI;AAAS,iBAAM;AAAA,QAAG;AAAQ,iBAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,iBAAe,SAAS,GAAE;AAAC,eAAQ,IAAE,IAAGG,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAI,IAAE,KAAK,QAAQ;AAAE,YAAG,EAAE,KAAK,CAAC,MAAI,MAAG,OAAM,MAAM,+BAA+B;AAAE,aAAG;AAAA,MAAC;AAAC,UAAIE,KAAE,SAAS,GAAE,EAAE;AAAE,aAAM,EAAC,MAAK,aAAY,OAAMA,GAAC;AAAA,IAAC,GAAEL,GAAE,UAAU,WAAS,SAAS,GAAE;AAAC,aAAO,MAAI,WAAS,IAAE,IAAG,KAAK,MAAM,KAAK,MAAI,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,WAAU;AAAC,UAAI,IAAE,KAAK,SAAS,CAAC;AAAE,aAAO,KAAK,YAAY,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,SAAS,GAAE;AAAC,UAAG,MAAI,UAAQ,KAAK,MAAM,KAAK,GAAG,MAAI,EAAE,OAAM,MAAM,gBAAc,IAAE,mBAAiB,KAAK,MAAM,KAAK,GAAG,IAAE,kBAAgB,KAAK,GAAG;AAAE,UAAG,KAAK,OAAK,KAAK,MAAM,OAAO,OAAM,MAAM,yBAAyB;AAAE,WAAK;AAAA,IAAK,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAM,EAAC,OAAM,GAAE,KAAI,KAAK,IAAG;AAAA,IAAC;AAAE,QAAI,IAAE,eAAc,IAAE,SAAQC,KAAE;AAAQ,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,WAAW,CAAC;AAAA,IAAC;AAAC,aAASC,GAAE,GAAE,GAAE;AAAC,QAAE,WAAS,SAAO,EAAE,QAAQ,SAASC,IAAE;AAAC,UAAE,KAAKA,EAAC;AAAA,MAAC,CAAC,IAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAG,EAAE,CAAC,MAAI,KAAG,OAAK,oBAAkB;AAAE,QAAE,CAAC,IAAE;AAAA,IAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAG,MAAI,OAAO,OAAM,MAAM,yCAAyC;AAAA,IAAC;AAAC,aAASC,KAAG;AAAC,YAAM,MAAM,yCAAyC;AAAA,IAAC;AAAC,QAAI,GAAEE,KAAE,CAAC;AAAE,SAAI,IAAE,EAAE,GAAG,GAAE,KAAG,EAAE,GAAG,GAAE,IAAI,CAAAA,GAAE,KAAK,CAAC;AAAE,QAAIC,KAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAOD,EAAC;AAAE,SAAI,IAAE,EAAE,GAAG,GAAE,KAAG,EAAE,GAAG,GAAE,IAAI,CAAAC,GAAE,KAAK,CAAC;AAAE,SAAI,IAAE,EAAE,GAAG,GAAE,KAAG,EAAE,GAAG,GAAE,IAAI,CAAAA,GAAE,KAAK,CAAC;AAAE,QAAI,IAAE,CAAC,EAAE,GAAG,GAAE,EAAE,IAAI,GAAE,EAAE;AAAA,CACrwC,GAAE,EAAE,IAAI,GAAE,EAAE,GAAG,GAAE,EAAE,IAAI,GAAE,EAAE,GAAG,GAAE,EAAE,GAAM,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,GAAQ,GAAE,EAAE,QAAQ,CAAC;AAAE,aAAS,IAAG;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,eAAQ,KAAK,GAAE;AAAC,YAAIJ,KAAE,EAAE,CAAC;AAAE,UAAE,eAAe,CAAC,MAAIA,GAAE,SAAO,SAAO,KAAK,MAAMA,EAAC,IAAE,MAAM,QAAQA,EAAC,KAAGA,GAAE,QAAQ,SAAS,GAAE;AAAC,eAAK,MAAM,CAAC;AAAA,QAAC,GAAE,IAAI;AAAA,MAAE;AAAA,IAAC,GAAE,EAAE,UAAU,QAAM,SAAS,GAAE;AAAC,cAAO,EAAE,MAAK;AAAA,QAAC,KAAI;AAAU,eAAK,aAAa,CAAC;AAAE;AAAA,QAAM,KAAI;AAAQ,eAAK,WAAW,CAAC;AAAE;AAAA,QAAM,KAAI;AAAc,eAAK,iBAAiB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAc,eAAK,iBAAiB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAc,eAAK,iBAAiB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAY,eAAK,eAAe,CAAC;AAAE;AAAA,QAAM,KAAI;AAAe,eAAK,kBAAkB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAkB,eAAK,qBAAqB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAY,eAAK,eAAe,CAAC;AAAE;AAAA,QAAM,KAAI;AAAoB,eAAK,uBAAuB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAY,eAAK,eAAe,CAAC;AAAE;AAAA,QAAM,KAAI;AAAM,eAAK,SAAS,CAAC;AAAE;AAAA,QAAM,KAAI;AAAQ,eAAK,WAAW,CAAC;AAAE;AAAA,QAAM,KAAI;AAAqB,eAAK,wBAAwB,CAAC;AAAE;AAAA,QAAM,KAAI;AAAa,eAAK,gBAAgB,CAAC;AAAE;AAAA,MAAK;AAAC,WAAK,cAAc,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,eAAa,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,aAAW,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,oBAAkB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,uBAAqB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,yBAAuB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,WAAS,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,aAAW,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,0BAAwB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAA,IAAC,GAAE,EAAC,cAAaH,IAAE,mBAAkB,GAAE,SAAQ,QAAO;AAAA,EAAC,CAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,yBAAuB,GAAG,eAAa;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,CAAC,GAAE,KAAG,IAAI,GAAG;AAAa,WAAS,GAAGC,IAAE;AAAC,QAAI,IAAEA,GAAE,SAAS;AAAE,QAAG,GAAG,eAAe,CAAC,EAAE,QAAO,GAAG,CAAC;AAAE,QAAI,IAAE,GAAG,QAAQ,CAAC;AAAE,WAAO,GAAG,CAAC,IAAE,GAAE;AAAA,EAAC;AAAC,KAAG,eAAa;AAAG,WAAS,KAAI;AAAC,SAAG,CAAC;AAAA,EAAC;AAAC,KAAG,yBAAuB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,MAAI,KAAG,MAAI,GAAG,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,mBAAiB,GAAG,4BAA0B,GAAG,gCAA8B,GAAG,8BAA4B;AAAO,MAAI,KAAG,GAAG,GAAEQ,MAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAEC,MAAG;AAAgE,KAAG,8BAA4B;AAAA;AAC1hG,WAAS,GAAGV,IAAE,GAAE;AAAC,UAAI,WAAS,IAAE;AAAI,QAAG;AAAC,UAAI,IAAE,GAAG,aAAaA,EAAC,GAAEC,KAAE,GAAG,EAAE,OAAM,CAAC,GAAE,EAAE,MAAM,UAAU;AAAE,aAAOA;AAAA,IAAC,SAAOC,IAAE;AAAC,UAAGA,GAAE,YAAUQ,IAAG,MAAGD,IAAG,cAAc,KAAG,GAAG,+BAA6B,4BAA0BT,GAAE,SAAS,IAAE;AAAA,KACtO;AAAA;AAAA,2FAEwF;AAAA,WAAM;AAAC,YAAI,IAAE;AAAG,cAAI,IAAE;AAAA;AAAA,kGAEhBS,IAAG,YAAY,GAAG,8BAA4B;AAAA,KAC5I,wBAAsBT,GAAE,SAAS,IAAE;AAAA,MAClC,+CAA6C,GAAG,UAAQ;AAAA,KACzD,2EAAyE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAM,CAAC;AAAA,EAAC;AAAC,KAAG,gCAA8B;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,YAAOA,GAAE,MAAK;AAAA,MAAC,KAAI;AAAc,iBAAQC,KAAE,GAAEA,KAAED,GAAE,MAAM,QAAOC,KAAI,IAAGD,GAAE,MAAMC,EAAC,GAAE,GAAE,CAAC;AAAE;AAAA,MAAM,KAAI;AAAc,iBAAQ,IAAED,GAAE,OAAMC,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,cAAIC,KAAE,EAAED,EAAC;AAAE,kBAAOC,GAAE,MAAK;AAAA,YAAC,KAAI;AAAA,YAAY,KAAI;AAAA,YAAqB,KAAI;AAAA,YAAY,KAAI;AAAA,YAAoB,KAAI;AAAA,YAAc,KAAI;AAAA,YAAe,KAAI;AAAkB;AAAA,UAAQ;AAAC,cAAI,IAAEA;AAAE,kBAAO,EAAE,MAAK;AAAA,YAAC,KAAI;AAAY,iBAAG,EAAE,OAAM,GAAE,CAAC;AAAE;AAAA,YAAM,KAAI;AAAM,kBAAG,EAAE,eAAa,KAAG,OAAM,MAAMQ,GAAE;AAAE,cAAAD,IAAG,QAAQ,EAAE,OAAM,SAAS,GAAE;AAAC,oBAAG,OAAO,KAAG,SAAS,IAAG,GAAE,GAAE,CAAC;AAAA,qBAAM;AAAC,sBAAIH,KAAE;AAAE,sBAAG,MAAI,KAAG,UAAQC,KAAED,GAAE,MAAKC,MAAGD,GAAE,IAAGC,KAAI,IAAGA,IAAE,GAAE,CAAC;AAAA,uBAAM;AAAC,6BAAQA,KAAED,GAAE,MAAKC,MAAGD,GAAE,MAAIC,KAAE,GAAG,oBAAmBA,KAAI,IAAGA,IAAE,GAAE,CAAC;AAAE,wBAAGD,GAAE,MAAI,GAAG,mBAAmB,UAAQ,IAAEA,GAAE,QAAM,GAAG,qBAAmBA,GAAE,OAAK,GAAG,oBAAmB,IAAEA,GAAE,IAAG,IAAE,GAAG,yBAAyB,CAAC,GAAE,IAAE,GAAG,yBAAyB,CAAC,GAAEH,KAAE,GAAEA,MAAG,GAAEA,KAAI,GAAEA,EAAC,IAAEA;AAAA,kBAAC;AAAA,gBAAC;AAAA,cAAC,CAAC;AAAE;AAAA,YAAM,KAAI;AAAQ,iBAAG,EAAE,OAAM,GAAE,CAAC;AAAE;AAAA,YAAM;AAAQ,oBAAM,MAAM,sBAAsB;AAAA,UAAC;AAAC,cAAI,IAAE,EAAE,eAAa,UAAQ,EAAE,WAAW,YAAU;AAAE,cAAG,EAAE,SAAO,WAAS,GAAG,CAAC,MAAI,SAAI,EAAE,SAAO,WAAS,MAAI,MAAG;AAAA,QAAK;AAAC;AAAA,MAAM;AAAQ,cAAM,MAAM,uBAAuB;AAAA,IAAC;AAAC,WAAOM,IAAG,OAAO,CAAC;AAAA,EAAC;AAAC,KAAG,4BAA0B;AAAG,WAAS,GAAGT,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,GAAG,yBAAyBD,EAAC;AAAE,MAAEC,EAAC,IAAEA,IAAE,MAAI,QAAI,GAAGD,IAAE,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE,GAAE;AAAC,QAAI,IAAE,OAAO,aAAaA,EAAC,GAAEC,KAAE,EAAE,YAAY;AAAE,QAAGA,OAAI,GAAE;AAAC,UAAI,IAAE,GAAG,yBAAyBA,GAAE,WAAW,CAAC,CAAC;AAAE,QAAE,CAAC,IAAE;AAAA,IAAC,OAAK;AAAC,UAAIC,KAAE,EAAE,YAAY;AAAE,UAAGA,OAAI,GAAE;AAAC,YAAI,IAAE,GAAG,yBAAyBA,GAAE,WAAW,CAAC,CAAC;AAAE,UAAE,CAAC,IAAE;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGF,IAAE,GAAE;AAAC,WAAOS,IAAG,KAAKT,GAAE,OAAM,SAAS,GAAE;AAAC,UAAG,OAAO,KAAG,SAAS,QAAOS,IAAG,SAAS,GAAE,CAAC;AAAE,UAAIR,KAAE;AAAE,aAAOQ,IAAG,KAAK,GAAE,SAAS,GAAE;AAAC,eAAOR,GAAE,QAAM,KAAG,KAAGA,GAAE;AAAA,MAAE,CAAC,MAAI;AAAA,IAAM,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,WAAOA,GAAE,cAAYA,GAAE,WAAW,YAAU,IAAE,OAAGA,GAAE,QAAMS,IAAG,QAAQT,GAAE,KAAK,IAAES,IAAG,MAAMT,GAAE,OAAM,EAAE,IAAE,GAAGA,GAAE,KAAK,IAAE;AAAA,EAAE;AAAC,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAOC,GAAE,kBAAgB,GAAEA,GAAE,QAAM,OAAGA;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,UAAG,KAAK,UAAQ,MAAG;AAAC,gBAAO,EAAE,MAAK;AAAA,UAAC,KAAI;AAAY,iBAAK,eAAe,CAAC;AAAE;AAAA,UAAO,KAAI;AAAoB,iBAAK,uBAAuB,CAAC;AAAE;AAAA,QAAM;AAAC,QAAAD,GAAE,UAAU,cAAc,KAAK,MAAK,CAAC;AAAA,MAAC;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAE;AAAC,MAAAS,IAAG,SAAS,KAAK,iBAAgB,EAAE,KAAK,MAAI,KAAK,QAAM;AAAA,IAAG,GAAE,EAAE,UAAU,WAAS,SAAS,GAAE;AAAC,QAAE,aAAW,GAAG,GAAE,KAAK,eAAe,MAAI,WAAS,KAAK,QAAM,QAAI,GAAG,GAAE,KAAK,eAAe,MAAI,WAAS,KAAK,QAAM;AAAA,IAAG,GAAE;AAAA,EAAC,EAAE,GAAG,iBAAiB;AAAE,WAAS,GAAGT,IAAE,GAAE;AAAC,QAAG,aAAa,QAAO;AAAC,UAAI,IAAE,GAAG,aAAa,CAAC,GAAEC,KAAE,IAAI,GAAGD,EAAC;AAAE,aAAOC,GAAE,MAAM,CAAC,GAAEA,GAAE;AAAA,IAAK,MAAM,QAAOQ,IAAG,KAAK,GAAE,SAAS,GAAE;AAAC,aAAOA,IAAG,SAAST,IAAE,EAAE,WAAW,CAAC,CAAC;AAAA,IAAC,CAAC,MAAI;AAAA,EAAM;AAAC,KAAG,mBAAiB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,MAAI,KAAG,KAAG,EAAE,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,2BAAyB,EAAE,qBAAmB,EAAE,6BAA2B,EAAE,gCAA8B,EAAE,iBAAe,EAAE,kBAAgB,EAAE,mBAAiB,EAAE,8BAA4B,EAAE,uBAAqB,EAAE,gBAAc,EAAE,kBAAgB,EAAE,0BAAwB,EAAE,0BAAwB,EAAE,uBAAqB,EAAE,wBAAsB,EAAE,uBAAqB,EAAE,yBAAuB,EAAE,wBAAsB,EAAE,uBAAqB,EAAE,sBAAoB,EAAE,sBAAoB,EAAE,mBAAiB,EAAE,oBAAkB,EAAE,eAAa,EAAE,gBAAc,EAAE,iBAAe,EAAE,QAAM,EAAE,eAAa;AAAO,MAAI,KAAG,GAAG,GAAEU,KAAE,GAAG,GAAE,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAEC,MAAG;AAAU,IAAE,eAAa;AAAc,IAAE,QAAM;AAAQ,IAAE,iBAAe,OAAO,IAAI,OAAO,MAAM,EAAE,UAAQ;AAAU,WAAS,KAAI;AAAC,MAAE,iBAAe;AAAA,EAAE;AAAC,IAAE,gBAAc;AAAG,WAAS,KAAI;AAAC,MAAE,iBAAe;AAAA,EAAE;AAAC,IAAE,eAAa;AAAG,WAAS,GAAGZ,IAAE,GAAE;AAAC,QAAE,EAAE,SAAS,GAAE,EAAC,WAAU,EAAE,gBAAe,OAAM,OAAG,UAAS,OAAG,kBAAiB,QAAO,0BAAyB,CAAC,MAAK;AAAA,CACvrI,GAAE,QAAO,SAASK,IAAEG,IAAE;AAAC,aAAOA,GAAE;AAAA,IAAC,EAAC,CAAC;AAAE,QAAI,IAAE,EAAE;AAAO,MAAE,mCAAkC,WAAU;AAAC,SAAG;AAAA,IAAC,CAAC;AAAE,QAAIP;AAAE,MAAE,mBAAkB,WAAU;AAAC,MAAAA,KAAE,EAAE,OAAOD,IAAE,SAASK,IAAE;AAAC,eAAOA,GAAEO,GAAE,MAAID,GAAE,MAAM;AAAA,MAAE,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,OAAGT;AAAE,MAAE,sBAAqB,WAAU;AAAC,UAAE,OAAGA,KAAE,EAAE,IAAID,IAAE,SAASI,IAAE;AAAC,YAAIG,KAAEH,GAAEO,GAAE;AAAE,YAAG,EAAE,SAASJ,EAAC,GAAE;AAAC,cAAIK,KAAEL,GAAE;AAAO,iBAAOK,GAAE,WAAS,KAAGA,OAAI,OAAKA,OAAI,OAAKA,OAAI,OAAK,CAACL,GAAE,aAAWK,KAAEA,GAAE,WAAS,KAAGA,GAAE,CAAC,MAAI,QAAM,CAAC,EAAE,SAAS,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAEA,GAAE,CAAC,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,YAAU,GAAGL,EAAC,IAAE,GAAGA,EAAC;AAAA,QAAC,OAAK;AAAC,cAAG,EAAE,WAAWA,EAAC,EAAE,QAAO,IAAE,MAAG,EAAC,MAAKA,GAAC;AAAE,cAAG,EAAE,IAAIA,IAAE,MAAM,EAAE,QAAO,IAAE,MAAGA;AAAE,cAAG,OAAOA,MAAG,UAAS;AAAC,gBAAGA,GAAE,WAAS,EAAE,QAAOA;AAAE,gBAAI,IAAEA,GAAE,QAAQ,uBAAsB,MAAM,GAAEM,MAAG,IAAI,OAAO,CAAC;AAAE,mBAAO,EAAE,YAAU,GAAGA,GAAE,IAAE,GAAGA,GAAE;AAAA,UAAC,MAAM,OAAM,MAAM,sBAAsB;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,GAAE,GAAEV,IAAE,GAAEE;AAAE,MAAE,gBAAe,WAAU;AAAC,UAAE,EAAE,IAAIL,IAAE,SAASI,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAY,CAAC,GAAE,IAAE,EAAE,IAAIJ,IAAE,SAASI,IAAE;AAAC,YAAIG,KAAEH,GAAE;AAAM,YAAGG,OAAIG,GAAE,MAAM,SAAQ;AAAC,cAAG,EAAE,SAASH,EAAC,EAAE,QAAOA;AAAE,cAAG,EAAE,YAAYA,EAAC,EAAE,QAAM;AAAG,gBAAM,MAAM,sBAAsB;AAAA,QAAC;AAAA,MAAC,CAAC,GAAEJ,KAAE,EAAE,IAAIH,IAAE,SAASI,IAAE;AAAC,YAAIG,KAAEH,GAAE;AAAW,YAAGG,IAAE;AAAC,cAAIK,KAAE,EAAE,QAAQZ,IAAEO,EAAC;AAAE,iBAAOK;AAAA,QAAC;AAAA,MAAC,CAAC,GAAE,IAAE,EAAE,IAAIZ,IAAE,SAASI,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAS,CAAC,GAAEC,KAAE,EAAE,IAAIL,IAAE,SAASI,IAAE;AAAC,eAAO,EAAE,IAAIA,IAAE,UAAU;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAIE;AAAE,MAAE,4BAA2B,WAAU;AAAC,UAAIF,KAAE,GAAG,EAAE,wBAAwB;AAAE,MAAAE,KAAE,EAAE,IAAIN,IAAE,SAASO,IAAE;AAAC,eAAM;AAAA,MAAE,CAAC,GAAE,EAAE,qBAAmB,iBAAeD,KAAE,EAAE,IAAIN,IAAE,SAASO,IAAE;AAAC,YAAG,EAAE,IAAIA,IAAE,aAAa,EAAE,QAAOA,GAAE;AAAY,YAAG,GAAGA,IAAEH,EAAC,MAAI,MAAG,QAAO,GAAG,iBAAiBA,IAAEG,GAAE,OAAO;AAAA,MAAC,CAAC;AAAA,IAAE,CAAC;AAAE,QAAI,GAAE,GAAE,GAAE;AAAE,MAAE,mBAAkB,WAAU;AAAC,UAAE,EAAE,IAAIP,IAAE,EAAE,GAAE,IAAE,EAAE,IAAIC,IAAE,EAAE,GAAE,IAAE,EAAE,OAAOD,IAAE,SAASI,IAAEG,IAAE;AAAC,YAAIK,KAAEL,GAAE;AAAM,eAAO,EAAE,SAASK,EAAC,KAAGA,OAAIF,GAAE,MAAM,YAAUN,GAAEQ,EAAC,IAAE,CAAC,IAAGR;AAAA,MAAC,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAIH,IAAE,SAASG,IAAEG,IAAE;AAAC,eAAM,EAAC,SAAQN,GAAEM,EAAC,GAAE,WAAUJ,GAAEI,EAAC,GAAE,mBAAkBD,GAAEC,EAAC,GAAE,UAAS,EAAEA,EAAC,GAAE,OAAM,EAAEA,EAAC,GAAE,OAAM,EAAEA,EAAC,GAAE,MAAK,EAAEA,EAAC,GAAE,KAAIF,GAAEE,EAAC,GAAE,cAAa,EAAEA,EAAC,GAAE,WAAUP,GAAEO,EAAC,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAIL,KAAE,MAAG,IAAE,CAAC;AAAE,WAAO,EAAE,YAAU,EAAE,2BAA0B,WAAU;AAAC,UAAE,EAAE,OAAOF,IAAE,SAASI,IAAEG,IAAEK,IAAE;AAAC,YAAG,OAAOL,GAAE,WAAS,UAAS;AAAC,cAAI,IAAEA,GAAE,QAAQ,WAAW,CAAC,GAAEM,MAAG,GAAG,CAAC;AAAE,aAAGT,IAAES,KAAG,EAAED,EAAC,CAAC;AAAA,QAAC,WAAS,EAAE,QAAQL,GAAE,gBAAgB,GAAE;AAAC,cAAI;AAAG,YAAE,QAAQA,GAAE,kBAAiB,SAAS,IAAG;AAAC,gBAAIO,KAAE,OAAO,MAAI,WAAS,GAAG,WAAW,CAAC,IAAE,IAAGC,MAAG,GAAGD,EAAC;AAAE,mBAAKC,QAAK,KAAGA,KAAG,GAAGX,IAAEW,KAAG,EAAEH,EAAC,CAAC;AAAA,UAAE,CAAC;AAAA,QAAC,WAAS,EAAE,SAASL,GAAE,OAAO,EAAE,KAAGA,GAAE,QAAQ,QAAQ,CAAAL,KAAE,OAAG,EAAE,uBAAqB,EAAE,YAAY,KAAG,GAAG,+BAA6B,0BAAwBK,GAAE,QAAQ,SAAS,IAAE;AAAA,KAC9zE;AAAA;AAAA,gGAE6F;AAAA,aAAM;AAAC,cAAIS,KAAE,GAAG,8BAA8BT,GAAE,SAAQ,EAAE,mBAAmB;AAAE,YAAE,QAAQS,EAAC,MAAId,KAAE,QAAI,EAAE,QAAQc,IAAE,SAAS,IAAG;AAAC,eAAGZ,IAAE,IAAG,EAAEQ,EAAC,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC;AAAA,YAAM,GAAE,uBAAqB,EAAE,YAAY,KAAG,GAAG,+BAA6B,kBAAgBL,GAAE,OAAK;AAAA,KAC9U;AAAA,+FAC4F,GAAEL,KAAE;AAAG,eAAOE;AAAA,MAAC,GAAE,CAAC,CAAC;AAAA,IAAC,CAAC,GAAE,EAAE,gBAAe,WAAU;AAAC,UAAE,EAAE,UAAU,CAAC;AAAA,IAAC,CAAC,GAAE,EAAC,aAAY,GAAE,oBAAmB,GAAE,8BAA6B,GAAE,WAAU,GAAE,gBAAeF,GAAC;AAAA,EAAC;AAAC,IAAE,oBAAkB;AAAG,WAAS,GAAGH,IAAE,GAAE;AAAC,QAAI,IAAE,CAAC,GAAEC,KAAE,GAAGD,EAAC;AAAE,QAAE,EAAE,OAAOC,GAAE,MAAM;AAAE,QAAI,IAAE,GAAGA,GAAE,KAAK,GAAEC,KAAE,EAAE;AAAM,WAAO,IAAE,EAAE,OAAO,EAAE,MAAM,GAAE,IAAE,EAAE,OAAO,GAAGA,EAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAGA,EAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAGA,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAGA,EAAC,CAAC,GAAE;AAAA,EAAC;AAAC,IAAE,mBAAiB;AAAG,WAAS,GAAGF,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE;AAAC,aAAO,EAAE,SAASA,GAAEW,GAAE,CAAC;AAAA,IAAC,CAAC;AAAE,WAAO,IAAE,EAAE,OAAO,GAAG,CAAC,CAAC,GAAE,IAAE,EAAE,OAAOM,IAAG,CAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAG,CAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAG,CAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAG,CAAC,CAAC,GAAE;AAAA,EAAC;AAAC,WAAS,GAAGlB,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAM,CAAC,EAAE,IAAI,GAAEY,GAAE;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiB,EAAE,OAAK,wCAAuC,MAAKD,GAAE,yBAAyB,iBAAgB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC,GAAEV,KAAE,EAAE,WAAWD,IAAE,CAAC;AAAE,WAAM,EAAC,QAAO,GAAE,OAAMC,GAAC;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,EAAEU,GAAE;AAAE,aAAM,CAAC,EAAE,SAASV,EAAC,KAAG,CAAC,EAAE,WAAWA,EAAC,KAAG,CAAC,EAAE,IAAIA,IAAE,MAAM,KAAG,CAAC,EAAE,SAASA,EAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiB,EAAE,OAAK,2JAA0J,MAAKS,GAAE,yBAAyB,iBAAgB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC,GAAEV,KAAE,EAAE,WAAWD,IAAE,CAAC;AAAE,WAAM,EAAC,QAAO,GAAE,OAAMC,GAAC;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAG,MAAI,KAAG;AAAY,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,SAAS,GAAE;AAAC,SAAGE,IAAE,CAAC;AAAE,eAASA,KAAG;AAAC,YAAI,IAAE,MAAI,QAAM,EAAE,MAAM,MAAK,SAAS,KAAG;AAAK,eAAO,EAAE,QAAM,OAAG;AAAA,MAAC;AAAC,aAAOA,GAAE,UAAU,iBAAe,SAAS,GAAE;AAAC,aAAK,QAAM;AAAA,MAAE,GAAEA;AAAA,IAAC,EAAE,GAAG,iBAAiB,GAAE,IAAE,EAAE,OAAOF,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,EAAEU,GAAE;AAAE,UAAG;AAAC,YAAI,IAAE,GAAG,aAAaV,EAAC,GAAE,IAAE,IAAI;AAAE,eAAO,EAAE,MAAM,CAAC,GAAE,EAAE;AAAA,MAAK,SAAOE,IAAE;AAAC,eAAO,GAAG,KAAKF,GAAE,MAAM;AAAA,MAAC;AAAA,IAAC,CAAC,GAAED,KAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,EAAC,SAAQ;AAAA,mBAC1yD,EAAE,OAAK;AAAA,iFACwD,MAAKU,GAAE,yBAAyB,kBAAiB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAOV;AAAA,EAAC;AAAC,IAAE,uBAAqB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE;AAAC,UAAI,IAAEA,GAAEW,GAAE;AAAE,aAAO,EAAE,KAAK,EAAE;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAASX,IAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiBA,GAAE,OAAK,sDAAqD,MAAKU,GAAE,yBAAyB,qBAAoB,YAAW,CAACV,EAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,IAAE,wBAAsB;AAAG,MAAI,KAAG;AAAiB,WAASiB,IAAGlB,IAAE;AAAC,QAAI,IAAE,SAAS,GAAE;AAAC,SAAGE,IAAE,CAAC;AAAE,eAASA,KAAG;AAAC,YAAI,IAAE,MAAI,QAAM,EAAE,MAAM,MAAK,SAAS,KAAG;AAAK,eAAO,EAAE,QAAM,OAAG;AAAA,MAAC;AAAC,aAAOA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,aAAK,QAAM;AAAA,MAAE,GAAEA;AAAA,IAAC,EAAE,GAAG,iBAAiB,GAAE,IAAE,EAAE,OAAOF,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,EAAEU,GAAE;AAAE,UAAG;AAAC,YAAI,IAAE,GAAG,aAAaV,EAAC,GAAE,IAAE,IAAI;AAAE,eAAO,EAAE,MAAM,CAAC,GAAE,EAAE;AAAA,MAAK,SAAOE,IAAE;AAAC,eAAO,GAAG,KAAKF,GAAE,MAAM;AAAA,MAAC;AAAA,IAAC,CAAC,GAAED,KAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,EAAC,SAAQ;AAAA,mBACn2B,EAAE,OAAK;AAAA,yFACgE,MAAKU,GAAE,yBAAyB,kBAAiB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAOV;AAAA,EAAC;AAAC,IAAE,yBAAuBiB;AAAG,WAAS,GAAGlB,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE;AAAC,UAAI,IAAEA,GAAEW,GAAE;AAAE,aAAO,aAAa,WAAS,EAAE,aAAW,EAAE;AAAA,IAAO,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAASX,IAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiBA,GAAE,OAAK,qEAAoE,MAAKU,GAAE,yBAAyB,yBAAwB,YAAW,CAACV,EAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,IAAE,uBAAqB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAIA,IAAE,SAASE,IAAE;AAAC,aAAO,EAAE,OAAOF,IAAE,SAAS,GAAE,GAAE;AAAC,eAAOE,GAAE,QAAQ,WAAS,EAAE,QAAQ,UAAQ,CAAC,EAAE,SAAS,GAAE,CAAC,KAAG,EAAE,YAAUS,GAAE,MAAM,OAAK,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,MAAC,GAAE,CAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAE,EAAE,QAAQ,CAAC;AAAE,QAAIV,KAAE,EAAE,OAAO,GAAE,SAASC,IAAE;AAAC,aAAOA,GAAE,SAAO;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAID,IAAE,SAASC,IAAE;AAAC,UAAI,IAAE,EAAE,IAAIA,IAAE,SAASE,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAI,CAAC,GAAE,IAAE,EAAE,MAAMF,EAAC,EAAE;AAAQ,aAAM,EAAC,SAAQ,+BAA6B,IAAE,QAAM,wDAAsD,EAAE,KAAK,IAAI,IAAE,QAAO,MAAKS,GAAE,yBAAyB,0BAAyB,YAAWT,GAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,IAAE,wBAAsB;AAAG,WAAS,GAAGF,IAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE;AAAC,UAAG,CAAC,EAAE,IAAIA,IAAE,OAAO,EAAE,QAAM;AAAG,UAAI,IAAEA,GAAE;AAAM,aAAO,MAAIU,GAAE,MAAM,WAAS,MAAIA,GAAE,MAAM,MAAI,CAAC,EAAE,SAAS,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,GAAE,SAASV,IAAE;AAAC,aAAM,EAAC,SAAQ,mBAAiBA,GAAE,OAAK,iEAAgE,MAAKU,GAAE,yBAAyB,0BAAyB,YAAW,CAACV,EAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,IAAE,uBAAqB;AAAG,WAAS,GAAGD,IAAE,GAAE;AAAC,QAAI,IAAE,EAAE,OAAOA,IAAE,SAAS,GAAE;AAAC,aAAO,EAAE,cAAY,UAAQ,CAAC,EAAE,SAAS,GAAE,EAAE,SAAS;AAAA,IAAC,CAAC,GAAEC,KAAE,EAAE,IAAI,GAAE,SAAS,GAAE;AAAC,UAAIC,KAAE,mBAAiB,EAAE,OAAK,gEAA8D,EAAE,YAAU;AAAyB,aAAM,EAAC,SAAQA,IAAE,MAAKS,GAAE,yBAAyB,0BAAyB,YAAW,CAAC,CAAC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAOV;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAE;AAAQ,aAAO,MAAIS,GAAE,MAAM,OAAK,EAAE,SAAS,CAAC,IAAEV,GAAE,KAAK,EAAC,KAAI,GAAE,KAAIC,IAAE,WAAU,EAAC,CAAC,IAAE,EAAE,SAAS,CAAC,KAAG,GAAG,CAAC,KAAGD,GAAE,KAAK,EAAC,KAAI,EAAE,QAAO,KAAIC,IAAE,WAAU,EAAC,CAAC,IAAGD;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAO,EAAE,QAAQD,IAAE,SAASC,IAAE,GAAE;AAAC,QAAE,QAAQ,GAAE,SAASC,IAAE;AAAC,YAAI,IAAEA,GAAE,KAAI,IAAEA,GAAE,KAAIE,KAAEF,GAAE;AAAU,YAAG,IAAE,KAAG,GAAG,GAAED,GAAE,OAAO,GAAE;AAAC,cAAI,IAAE,cAAYG,GAAE,OAAK;AAAA,KAC9rE,+CAA6CH,GAAE,OAAK,QAAM;AAAA;AACiB,YAAE,KAAK,EAAC,SAAQ,GAAE,MAAKU,GAAE,yBAAyB,qBAAoB,YAAW,CAACV,IAAEG,EAAC,EAAC,CAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGJ,IAAE,GAAE;AAAC,QAAG,EAAE,SAAS,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,KAAKA,EAAC;AAAE,aAAO,MAAI,QAAM,EAAE,UAAQ;AAAA,IAAC,OAAK;AAAC,UAAG,EAAE,WAAW,CAAC,EAAE,QAAO,EAAEA,IAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,UAAG,EAAE,IAAI,GAAE,MAAM,EAAE,QAAO,EAAE,KAAKA,IAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,UAAG,OAAO,KAAG,SAAS,QAAO,MAAIA;AAAE,YAAM,MAAM,sBAAsB;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAE,CAAC,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,WAAO,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,aAAOA,GAAE,OAAO,QAAQ,CAAC,MAAI;AAAA,IAAE,CAAC,MAAI;AAAA,EAAM;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE,aAAW,MAAI;AAAG,WAAO,IAAI,OAAO,SAAOA,GAAE,SAAO,KAAI,CAAC;AAAA,EAAC;AAAC,IAAE,kBAAgB;AAAG,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE,aAAW,OAAK;AAAI,WAAO,IAAI,OAAO,KAAGA,GAAE,QAAO,CAAC;AAAA,EAAC;AAAC,IAAE,gBAAc;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC;AAAE,WAAO,EAAE,IAAID,IAAE,EAAE,YAAY,KAAGC,GAAE,KAAK,EAAC,SAAQ,wDAAsD,EAAE,eAAa;AAAA,GACn6B,MAAKU,GAAE,yBAAyB,sCAAqC,CAAC,GAAE,EAAE,IAAIX,IAAE,EAAE,KAAK,KAAGC,GAAE,KAAK,EAAC,SAAQ,wDAAsD,EAAE,QAAM;AAAA,GACxK,MAAKU,GAAE,yBAAyB,wCAAuC,CAAC,GAAE,EAAE,IAAIX,IAAE,EAAE,KAAK,KAAG,EAAE,IAAIA,IAAE,EAAE,YAAY,KAAG,CAAC,EAAE,IAAIA,GAAE,OAAMA,GAAE,WAAW,KAAGC,GAAE,KAAK,EAAC,SAAQ,oDAAkD,EAAE,eAAa,QAAMD,GAAE,cAAY;AAAA,GACzP,MAAKW,GAAE,yBAAyB,mDAAkD,CAAC,GAAE,EAAE,IAAIX,IAAE,EAAE,KAAK,KAAG,EAAE,QAAQA,GAAE,OAAM,SAAS,GAAEE,IAAE;AAAC,QAAE,QAAQ,GAAE,SAAS,GAAE,GAAE;AAAC,UAAE,YAAY,CAAC,KAAGD,GAAE,KAAK,EAAC,SAAQ,wEAAsE,MAAIC,KAAE,kBAAgB,IAAE;AAAA,IAChS,MAAKS,GAAE,yBAAyB,0CAAyC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAEV;AAAA,EAAC;AAAC,IAAE,uBAAqB;AAAG,WAAS,GAAGD,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC,GAAE,IAAE,OAAGC,KAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAUF,GAAE,OAAM,SAASI,IAAE;AAAC,aAAOA;AAAA,IAAC,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,OAAOF,IAAE,SAASE,IAAE;AAAC,aAAOA,GAAEQ,GAAE,MAAID,GAAE,MAAM;AAAA,IAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,WAAO,KAAG,EAAE,QAAQ,GAAE,SAASP,IAAE;AAAC,UAAI,IAAE,GAAGA,IAAE,CAAC;AAAE,UAAG,MAAI,OAAG;AAAC,YAAIE,KAAEa,IAAGf,IAAE,CAAC,GAAEG,KAAE,EAAC,SAAQD,IAAE,MAAK,EAAE,OAAM,WAAUF,GAAC;AAAE,QAAAH,GAAE,KAAKM,EAAC;AAAA,MAAC,MAAM,GAAE,IAAIH,IAAE,aAAa,IAAEA,GAAE,gBAAc,SAAK,IAAE,QAAI,GAAG,iBAAiB,GAAEA,GAAE,OAAO,MAAI,IAAE;AAAA,IAAG,CAAC,GAAE,KAAG,CAAC,KAAGH,GAAE,KAAK,EAAC,SAAQ;AAAA;AAAA;AAAA;AAAA,gBAIpf,MAAKU,GAAE,yBAAyB,qBAAoB,CAAC,GAAEV;AAAA,EAAC;AAAC,IAAE,8BAA4B;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,EAAE,KAAKA,EAAC;AAAE,WAAO,EAAE,QAAQ,GAAE,SAASC,IAAE;AAAC,UAAI,IAAED,GAAEC,EAAC;AAAE,UAAG,EAAE,QAAQ,CAAC,EAAE,GAAEA,EAAC,IAAE,CAAC;AAAA,UAAO,OAAM,MAAM,sBAAsB;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,IAAE,mBAAiB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAQ,QAAG,EAAE,SAAS,CAAC,EAAE,QAAM;AAAG,QAAG,EAAE,WAAW,CAAC,EAAE,QAAM;AAAG,QAAG,EAAE,IAAI,GAAE,MAAM,EAAE,QAAM;AAAG,QAAG,EAAE,SAAS,CAAC,EAAE,QAAM;AAAG,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,IAAE,kBAAgB;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,SAASA,EAAC,KAAGA,GAAE,WAAS,IAAEA,GAAE,WAAW,CAAC,IAAE;AAAA,EAAE;AAAC,IAAE,iBAAe;AAAG,IAAE,gCAA8B,EAAC,MAAK,SAASA,IAAE;AAAC,aAAQ,IAAEA,GAAE,QAAO,IAAE,KAAK,WAAU,IAAE,GAAE,KAAI;AAAC,UAAIC,KAAED,GAAE,WAAW,CAAC;AAAE,UAAGC,OAAI,GAAG,QAAO,KAAK,YAAU,IAAE,GAAE;AAAG,UAAGA,OAAI,GAAG,QAAOD,GAAE,WAAW,IAAE,CAAC,MAAI,KAAG,KAAK,YAAU,IAAE,IAAE,KAAK,YAAU,IAAE,GAAE;AAAA,IAAE;AAAC,WAAM;AAAA,EAAE,GAAE,WAAU,EAAC;AAAE,WAAS,GAAGA,IAAE,GAAE;AAAC,QAAG,EAAE,IAAIA,IAAE,aAAa,EAAE,QAAM;AAAG,QAAG,EAAE,SAASA,GAAE,OAAO,GAAE;AAAC,UAAG;AAAC,WAAG,iBAAiB,GAAEA,GAAE,OAAO;AAAA,MAAC,SAAO,GAAE;AAAC,eAAM,EAAC,OAAMW,GAAE,yBAAyB,qBAAoB,QAAO,EAAE,QAAO;AAAA,MAAC;AAAC,aAAM;AAAA,IAAE,OAAK;AAAC,UAAG,EAAE,SAASX,GAAE,OAAO,EAAE,QAAM;AAAG,UAAG,GAAGA,EAAC,EAAE,QAAM,EAAC,OAAMW,GAAE,yBAAyB,kBAAiB;AAAE,YAAM,MAAM,sBAAsB;AAAA,IAAC;AAAA,EAAC;AAAC,WAASQ,IAAGnB,IAAE,GAAE;AAAC,QAAG,EAAE,UAAQW,GAAE,yBAAyB,oBAAoB,QAAM;AAAA,KACtuC,6BAA2BX,GAAE,OAAK;AAAA,MACjC,mBAAiB,EAAE,SAAO;AAAA,KAC3B;AAAqG,QAAG,EAAE,UAAQW,GAAE,yBAAyB,kBAAkB,QAAM;AAAA,KACrK,6BAA2BX,GAAE,OAAK;AAAA,KAClC;AAAmG,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,IAAE,6BAA2BmB;AAAG,WAAS,GAAGnB,IAAE;AAAC,QAAI,IAAE,EAAE,IAAIA,IAAE,SAAS,GAAE;AAAC,aAAO,EAAE,SAAS,CAAC,KAAG,EAAE,SAAO,IAAE,EAAE,WAAW,CAAC,IAAE;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,IAAAA,GAAE,CAAC,MAAI,SAAOA,GAAE,CAAC,IAAE,CAAC,CAAC,IAAEA,GAAE,CAAC,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,IAAE,qBAAmB;AAAI,MAAIoB,MAAG,CAAC;AAAE,WAAS,GAAGpB,IAAE;AAAC,WAAOA,KAAE,EAAE,qBAAmBA,KAAEoB,IAAGpB,EAAC;AAAA,EAAC;AAAC,IAAE,2BAAyB;AAAG,WAAS,KAAI;AAAC,QAAG,EAAE,QAAQoB,GAAE,GAAE;AAAC,MAAAA,MAAG,IAAI,MAAM,KAAK;AAAE,eAAQpB,KAAE,GAAEA,KAAE,OAAMA,KAAI,CAAAoB,IAAGpB,EAAC,IAAEA,KAAE,MAAI,MAAI,CAAC,EAAEA,KAAE,OAAKA;AAAA,IAAC;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,cAAY,EAAE,qCAAmC,EAAE,kCAAgC,EAAE,wBAAsB,EAAE,sBAAoB,EAAE,gCAA8B,EAAE,0BAAwB,EAAE,6BAA2B,EAAE,0BAAwB,EAAE,mBAAiB,EAAE,oBAAkB,EAAE,kBAAgB,EAAE,oBAAkB,EAAE,qCAAmC,EAAE,yBAAuB;AAAO,MAAI,IAAE,EAAE;AAAE,WAAS,GAAGC,IAAE,GAAE;AAAC,QAAI,IAAEA,GAAE;AAAa,WAAO,MAAI,EAAE,eAAa,OAAG,EAAE,aAAW,QAAI,EAAE,mBAAmB,CAAC,MAAI;AAAA,EAAE;AAAC,IAAE,yBAAuB;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,WAAOA,GAAE,iBAAe,EAAE;AAAA,EAAY;AAAC,IAAE,qCAAmC;AAAG,IAAE,oBAAkB;AAAE,IAAE,kBAAgB,CAAC;AAAE,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAE,GAAGA,EAAC;AAAE,OAAG,CAAC,GAAE,GAAG,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,QAAQ,GAAE,SAAS,GAAE;AAAC,QAAE,WAAS,EAAE,gBAAgB,SAAO;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,IAAE,oBAAkB;AAAG,WAAS,GAAGA,IAAE;AAAC,aAAQ,IAAE,EAAE,SAASA,EAAC,GAAE,IAAEA,IAAEC,KAAE,MAAGA,MAAG;AAAC,UAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAE,SAASC,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAU,CAAC,CAAC,CAAC;AAAE,UAAI,IAAE,EAAE,WAAW,GAAE,CAAC;AAAE,UAAE,EAAE,OAAO,CAAC,GAAE,EAAE,QAAQ,CAAC,IAAED,KAAE,QAAG,IAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,IAAE,mBAAiB;AAAG,WAAS,GAAGD,IAAE;AAAC,MAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,SAAG,CAAC,MAAI,EAAE,gBAAgB,EAAE,iBAAiB,IAAE,GAAE,EAAE,eAAa,EAAE,sBAAqB,GAAG,CAAC,KAAG,CAAC,EAAE,QAAQ,EAAE,UAAU,MAAI,EAAE,aAAW,CAAC,EAAE,UAAU,IAAG,GAAG,CAAC,MAAI,EAAE,aAAW,CAAC,IAAG,GAAG,CAAC,MAAI,EAAE,kBAAgB,CAAC,IAAG,GAAG,CAAC,MAAI,EAAE,qBAAmB,CAAC;AAAA,IAAE,CAAC;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGA,IAAE;AAAC,MAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,QAAE,kBAAgB,CAAC,GAAE,EAAE,QAAQ,EAAE,oBAAmB,SAAS,GAAEC,IAAE;AAAC,UAAE,gBAAgB,KAAK,EAAE,gBAAgBA,EAAC,EAAE,YAAY;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,IAAE,6BAA2B;AAAG,WAAS,GAAGD,IAAE;AAAC,MAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,SAAG,CAAC,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,MAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,QAAE,mBAAmB,EAAE,YAAY,IAAE;AAAA,IAAE,CAAC,GAAE,EAAE,QAAQ,EAAE,YAAW,SAAS,GAAE;AAAC,UAAIC,KAAED,GAAE,OAAO,CAAC;AAAE,QAAE,SAASC,IAAE,CAAC,KAAG,GAAGA,IAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,IAAE,gCAA8B;AAAG,WAAS,GAAGD,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,cAAc;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,YAAY;AAAA,EAAC;AAAC,IAAE,wBAAsB;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,iBAAiB;AAAA,EAAC;AAAC,IAAE,kCAAgC;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,oBAAoB;AAAA,EAAC;AAAC,IAAE,qCAAmC;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,cAAc;AAAA,EAAC;AAAC,IAAE,cAAY;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,4BAA0B;AAAO,KAAG,4BAA0B,EAAC,kCAAiC,SAASC,IAAE;AAAC,WAAM,yDAAuDA,GAAE,QAAM;AAAA,EAA4B,GAAE,kCAAiC,SAASA,IAAE,GAAE,GAAEC,IAAE,GAAE;AAAC,WAAM,6BAA2BD,GAAE,OAAO,CAAC,IAAE,mBAAiB,IAAE,OAAK,cAAY,IAAE;AAAA,EAAe,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,QAAM,GAAG,2BAAyB;AAAO,MAAI,KAAG,GAAG,GAAE,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE;AAAG,GAAC,SAASC,IAAE;AAAC,IAAAA,GAAEA,GAAE,kBAAgB,CAAC,IAAE,mBAAkBA,GAAEA,GAAE,kBAAgB,CAAC,IAAE,mBAAkBA,GAAEA,GAAE,mBAAiB,CAAC,IAAE,oBAAmBA,GAAEA,GAAE,0BAAwB,CAAC,IAAE,2BAA0BA,GAAEA,GAAE,2BAAyB,CAAC,IAAE,4BAA2BA,GAAEA,GAAE,2BAAyB,CAAC,IAAE,4BAA2BA,GAAEA,GAAE,2BAAyB,CAAC,IAAE,4BAA2BA,GAAEA,GAAE,wCAAsC,CAAC,IAAE,yCAAwCA,GAAEA,GAAE,0CAAwC,CAAC,IAAE,2CAA0CA,GAAEA,GAAE,qDAAmD,CAAC,IAAE,sDAAqDA,GAAEA,GAAE,4CAA0C,EAAE,IAAE,6CAA4CA,GAAEA,GAAE,mBAAiB,EAAE,IAAE,oBAAmBA,GAAEA,GAAE,sBAAoB,EAAE,IAAE,uBAAsBA,GAAEA,GAAE,uBAAqB,EAAE,IAAE,wBAAuBA,GAAEA,GAAE,sBAAoB,EAAE,IAAE,uBAAsBA,GAAEA,GAAE,sBAAoB,EAAE,IAAE,uBAAsBA,GAAEA,GAAE,oBAAkB,EAAE,IAAE;AAAA,EAAmB,GAAG,KAAG,GAAG,6BAA2B,GAAG,2BAAyB,CAAC,EAAE;AAAE,MAAI,KAAG,EAAC,+BAA8B,OAAG,kBAAiB,QAAO,wBAAuB,aAAY,0BAAyB,CAAC;AAAA,GACvjJ,IAAI,GAAE,qBAAoB,OAAG,UAAS,OAAG,sBAAqB,GAAG,2BAA0B,eAAc,OAAG,iBAAgB,MAAE;AAAE,SAAO,OAAO,EAAE;AAAE,MAAI,KAAG,WAAU;AAAC,aAASA,GAAE,GAAE,GAAE;AAAC,UAAIC,KAAE;AAAK,UAAG,MAAI,WAAS,IAAE,KAAI,KAAK,kBAAgB,GAAE,KAAK,wBAAsB,CAAC,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,qBAAmB,CAAC,GAAE,KAAK,+BAA6B,CAAC,GAAE,KAAK,QAAM,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,SAAO,QAAO,KAAK,kBAAgB,MAAG,KAAK,gBAAc,MAAG,KAAK,YAAU,OAAG,KAAK,qBAAmB,CAAC,GAAE,OAAO,KAAG,UAAU,OAAM,MAAM;AAAA,8CAC7e;AAAE,WAAK,SAAO,EAAE,MAAM,IAAG,CAAC;AAAE,UAAI,IAAE,KAAK,OAAO;AAAc,YAAI,QAAI,KAAK,oBAAkB,UAAS,KAAK,gBAAc,QAAI,OAAO,KAAG,aAAW,KAAK,oBAAkB,GAAE,KAAK,gBAAc,OAAI,KAAK,kBAAgB,IAAG,KAAK,WAAW,qBAAoB,WAAU;AAAC,YAAIC,IAAE,IAAE;AAAG,QAAAD,GAAE,WAAW,yBAAwB,WAAU;AAAC,cAAGA,GAAE,OAAO,2BAAyB,GAAG,uBAAuB,CAAAA,GAAE,OAAO,yBAAuB,GAAG;AAAA,mBAAsCA,GAAE,OAAO,6BAA2B,GAAG,yBAAyB,OAAM,MAAM;AAAA,uGAC7d;AAAE,cAAG,EAAE,YAAU,EAAE,oBAAoB,OAAM,MAAM,oEAAoE;AAAE,UAAAA,GAAE,kBAAgB,kBAAkB,KAAKA,GAAE,OAAO,gBAAgB,GAAEA,GAAE,gBAAc,QAAQ,KAAKA,GAAE,OAAO,gBAAgB,GAAE,EAAE,QAAQ,CAAC,KAAGC,KAAE,EAAC,OAAM,CAAC,EAAC,GAAEA,GAAE,MAAM,GAAG,YAAY,IAAE,EAAE,SAAS,CAAC,GAAEA,GAAE,GAAG,YAAY,IAAE,GAAG,iBAAe,IAAE,OAAGA,KAAE,EAAE,SAAS,CAAC;AAAA,QAAE,CAAC,GAAED,GAAE,OAAO,oBAAkB,UAAKA,GAAE,WAAW,wBAAuB,WAAU;AAAC,UAAAA,GAAE,wBAAsBA,GAAE,sBAAsB,OAAO,GAAG,qBAAqBC,IAAED,GAAE,iBAAgBA,GAAE,OAAO,wBAAwB,CAAC;AAAA,QAAC,CAAC,GAAEA,GAAE,WAAW,+BAA8B,WAAU;AAAC,UAAAA,GAAE,yBAAuBA,GAAE,uBAAuB,OAAO,GAAG,4BAA4BC,IAAED,GAAE,iBAAgBA,GAAE,OAAO,wBAAwB,CAAC;AAAA,QAAC,CAAC,IAAGC,GAAE,QAAMA,GAAE,QAAMA,GAAE,QAAM,CAAC,GAAE,EAAE,QAAQA,GAAE,OAAM,SAASI,IAAEC,IAAE;AAAC,UAAAL,GAAE,MAAMK,EAAC,IAAE,EAAE,OAAOD,IAAE,SAAS,GAAE;AAAC,mBAAO,EAAE,YAAY,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC,CAAC;AAAE,YAAI,IAAE,EAAE,KAAKJ,GAAE,KAAK;AAAE,YAAG,EAAE,QAAQA,GAAE,OAAM,SAASI,IAAEC,IAAE;AAAC,UAAAN,GAAE,WAAW,YAAUM,KAAE,gBAAe,WAAU;AAAC,gBAAGN,GAAE,MAAM,KAAKM,EAAC,GAAEN,GAAE,OAAO,oBAAkB,SAAIA,GAAE,WAAW,oBAAmB,WAAU;AAAC,cAAAA,GAAE,wBAAsBA,GAAE,sBAAsB,OAAO,GAAG,iBAAiBK,IAAE,CAAC,CAAC;AAAA,YAAC,CAAC,GAAE,EAAE,QAAQL,GAAE,qBAAqB,GAAE;AAAC,iBAAG,kBAAkBK,EAAC;AAAE,kBAAI;AAAE,cAAAL,GAAE,WAAW,qBAAoB,WAAU;AAAC,oBAAE,GAAG,kBAAkBK,IAAE,EAAC,0BAAyBL,GAAE,OAAO,0BAAyB,kBAAiB,EAAE,kBAAiB,qBAAoB,EAAE,qBAAoB,UAAS,EAAE,UAAS,QAAOA,GAAE,WAAW,KAAKA,EAAC,EAAC,CAAC;AAAA,cAAC,CAAC,GAAEA,GAAE,mBAAmBM,EAAC,IAAE,EAAE,oBAAmBN,GAAE,6BAA6BM,EAAC,IAAE,EAAE,8BAA6BN,GAAE,cAAY,EAAE,MAAMA,GAAE,aAAY,EAAE,WAAW,GAAEA,GAAE,YAAU,EAAE,aAAWA,GAAE,WAAUA,GAAE,mBAAmBM,EAAC,IAAE,EAAE;AAAA,YAAc;AAAA,UAAC,CAAC;AAAA,QAAC,CAAC,GAAEN,GAAE,cAAYC,GAAE,aAAY,CAAC,EAAE,QAAQD,GAAE,qBAAqB,KAAG,CAACA,GAAE,OAAO,+BAA8B;AAAC,cAAIG,KAAE,EAAE,IAAIH,GAAE,uBAAsB,SAASK,IAAE;AAAC,mBAAOA,GAAE;AAAA,UAAO,CAAC,GAAE,IAAEF,GAAE,KAAK;AAAA,CAC//D;AAAE,gBAAM,IAAI,MAAM;AAAA,IACjB,CAAC;AAAA,QAAC;AAAC,UAAE,QAAQH,GAAE,wBAAuB,SAASK,IAAE;AAAC,YAAE,cAAcA,GAAE,OAAO;AAAA,QAAC,CAAC,GAAEL,GAAE,WAAW,wCAAuC,WAAU;AAAC,cAAG,GAAG,kBAAgBA,GAAE,YAAU,EAAE,UAASA,GAAE,QAAMA,GAAE,kBAAgBA,GAAE,kBAAgB,EAAE,MAAKA,GAAE,QAAMA,GAAE,gBAAe,MAAIA,GAAE,cAAY,EAAE,OAAMA,GAAE,oBAAkB,UAAKA,GAAE,mBAAiB,EAAE,WAAUA,GAAE,kBAAgB,UAAKA,GAAE,mCAAiC,EAAE,OAAM,QAAQ,KAAKA,GAAE,OAAO,gBAAgB,EAAE,CAAAA,GAAE,sBAAoBA,GAAE;AAAA,mBAAwB,aAAa,KAAKA,GAAE,OAAO,gBAAgB,EAAE,CAAAA,GAAE,sBAAoBA,GAAE;AAAA,mBAA6B,cAAc,KAAKA,GAAE,OAAO,gBAAgB,EAAE,CAAAA,GAAE,sBAAoBA,GAAE;AAAA,cAA2B,OAAM,MAAM,gDAA8CA,GAAE,OAAO,mBAAiB,GAAG;AAAE,UAAAA,GAAE,aAAWA,GAAE,WAASA,GAAE,mBAAkBA,GAAE,gBAAcA,GAAE,4BAA0BA,GAAE,WAASA,GAAE,2BAA0BA,GAAE,gBAAcA,GAAE;AAAA,QAAsB,CAAC,GAAEA,GAAE,WAAW,gCAA+B,WAAU;AAAC,cAAIK,KAAE,EAAE,OAAOL,GAAE,oBAAmB,SAASM,IAAE,GAAE,GAAE;AAAC,mBAAO,MAAI,SAAIA,GAAE,KAAK,CAAC,GAAEA;AAAA,UAAC,GAAE,CAAC,CAAC;AAAE,cAAG,EAAE,uBAAqB,CAAC,EAAE,QAAQD,EAAC,EAAE,OAAM,MAAM,oBAAkBA,GAAE,KAAK,IAAI,IAAE;AAAA;AAAA,yEAEhlC;AAAA,QAAC,CAAC,GAAEL,GAAE,WAAW,0BAAyB,WAAU;AAAC,aAAG,uBAAuB;AAAA,QAAC,CAAC,GAAEA,GAAE,WAAW,oBAAmB,WAAU;AAAC,YAAE,iBAAiBA,EAAC;AAAA,QAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC;AAAC,WAAOD,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,UAAG,MAAI,WAAS,IAAE,KAAK,cAAa,CAAC,EAAE,QAAQ,KAAK,qBAAqB,GAAE;AAAC,YAAIC,KAAE,EAAE,IAAI,KAAK,uBAAsB,SAAS,GAAE;AAAC,iBAAO,EAAE;AAAA,QAAO,CAAC,GAAE,IAAEA,GAAE,KAAK;AAAA,CACra;AAAE,cAAM,IAAI,MAAM;AAAA,IACjB,CAAC;AAAA,MAAC;AAAC,UAAIC,KAAE,KAAK,iBAAiB,GAAE,CAAC;AAAE,aAAOA;AAAA,IAAC,GAAEF,GAAE,UAAU,mBAAiB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,MAAK,GAAEC,IAAE,GAAE,GAAEE,IAAE,GAAEE,IAAEC,IAAE,GAAE,GAAE,GAAE,GAAEJ,IAAE,GAAEE,IAAEG,KAAE,GAAEK,KAAEL,GAAE,QAAO,IAAE,GAAEM,MAAG,GAAE,KAAG,KAAK,YAAU,IAAE,KAAK,MAAM,EAAE,SAAO,EAAE,GAAEG,KAAE,IAAI,MAAM,EAAE,GAAE,KAAG,CAAC,GAAEF,KAAE,KAAK,kBAAgB,IAAE,QAAOC,MAAG,KAAK,kBAAgB,IAAE,QAAOK,MAAG,GAAG,iBAAiB,KAAK,WAAW,GAAE,KAAG,KAAK,iBAAgB,KAAG,KAAK,OAAO,wBAAuB,KAAG,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC;AAAE,aAAO,OAAO,EAAE;AAAE,UAAI,KAAG;AAAO,eAAS,KAAI;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,KAAG,GAAG,yBAAyB,CAAC,GAAE,KAAG,GAAG,EAAE;AAAE,eAAO,OAAK,SAAO,KAAG;AAAA,MAAE;AAAC,UAAI,KAAG,SAAS,GAAE;AAAC,YAAG,GAAG,WAAS,KAAG,EAAE,UAAU,cAAY,QAAO;AAAC,cAAI,KAAGpB,GAAE,OAAO,qBAAqB,iCAAiC,CAAC;AAAE,aAAG,KAAK,EAAC,QAAO,EAAE,aAAY,MAAK,EAAE,cAAY,SAAO,EAAE,YAAU,QAAO,QAAO,EAAE,gBAAc,SAAO,EAAE,cAAY,QAAO,QAAO,EAAE,MAAM,QAAO,SAAQ,GAAE,CAAC;AAAA,QAAC,OAAK;AAAC,aAAG,IAAI;AAAE,cAAI,KAAG,EAAE,KAAK,EAAE;AAAE,eAAGA,GAAE,mBAAmB,EAAE,GAAE,KAAGA,GAAE,6BAA6B,EAAE,GAAE,KAAG,GAAG;AAAO,cAAI,KAAGA,GAAE,mBAAmB,EAAE,KAAGA,GAAE,OAAO,aAAW;AAAG,gBAAI,KAAG,KAAG,KAAG,KAAG;AAAA,QAAE;AAAA,MAAC;AAAE,eAAS,GAAG,GAAE;AAAC,WAAG,KAAK,CAAC,GAAE,KAAG,KAAK,6BAA6B,CAAC,GAAE,KAAG,KAAK,mBAAmB,CAAC,GAAE,KAAG,GAAG,QAAO,KAAG,GAAG;AAAO,YAAI,KAAG,KAAK,mBAAmB,CAAC,KAAG,KAAK,OAAO,aAAW;AAAG,cAAI,KAAG,KAAG,KAAG,KAAG;AAAA,MAAE;AAAC,SAAG,KAAK,MAAK,CAAC;AAAE,eAAQ,IAAG,IAAEY,MAAG;AAAC,QAAAT,KAAE;AAAK,YAAI,KAAGI,GAAE,WAAW,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAG,GAAG;AAAO,aAAI,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,eAAG,GAAG,CAAC;AAAE,cAAI,KAAG,GAAG;AAAQ,cAAE;AAAK,cAAI,KAAG,GAAG;AAAM,cAAG,OAAK,QAAG,OAAK,OAAKJ,KAAE,MAAI,GAAG,aAAW,QAAIC,KAAE,GAAG,KAAKG,IAAE,GAAES,IAAEI,GAAE,GAAEhB,OAAI,QAAMD,KAAEC,GAAE,CAAC,GAAEA,GAAE,YAAU,WAAS,IAAEA,GAAE,YAAUD,KAAE,SAAO,KAAK,gBAAgB,IAAG,CAAC,GAAEA,KAAE,KAAK,MAAM,IAAG,GAAE,CAAC,IAAGA,OAAI,MAAK;AAAC,gBAAG,IAAE,GAAG,WAAU,MAAI,QAAO;AAAC,kBAAI,KAAG,GAAG,CAAC,GAAE,KAAG,GAAG;AAAQ,cAAAE,KAAE,MAAK,GAAG,aAAW,QAAID,KAAE,GAAG,KAAKG,IAAE,GAAES,IAAEI,GAAE,GAAEhB,OAAI,QAAM,IAAEA,GAAE,CAAC,GAAEA,GAAE,YAAU,WAASC,KAAED,GAAE,YAAU,IAAE,SAAO,KAAK,gBAAgB,IAAG,CAAC,GAAE,IAAE,KAAK,MAAM,IAAG,GAAE,CAAC,IAAG,KAAG,EAAE,SAAOD,GAAE,WAASA,KAAE,GAAE,IAAEE,IAAE,KAAG;AAAA,YAAG;AAAC;AAAA,UAAK;AAAA,QAAC;AAAC,YAAGF,OAAI,MAAK;AAAC,cAAGG,KAAEH,GAAE,QAAO,IAAE,GAAG,OAAM,MAAI,WAAS,IAAE,GAAG,cAAa,IAAE,KAAK,oBAAoBA,IAAE,GAAE,GAAE,GAAG,WAAUW,IAAEC,KAAGT,EAAC,GAAE,KAAK,cAAc,GAAE,CAAC,GAAE,MAAI,QAAGO,MAAG,KAAK,SAASG,IAAEH,KAAG,CAAC,IAAEO,IAAG,CAAC,EAAE,KAAK,CAAC,IAAG,IAAE,KAAK,UAAU,GAAEd,EAAC,GAAE,IAAE,IAAEA,IAAES,MAAG,KAAK,iBAAiBA,KAAGT,EAAC,GAAE,OAAK,QAAI,GAAG,sBAAoB,MAAG;AAAC,gBAAI,KAAG,GAAE,KAAG,QAAO,KAAG;AAAO,eAAG,YAAU;AAAE;AAAG,mBAAG,GAAG,KAAKH,EAAC,GAAE,OAAK,SAAK,KAAG,GAAG,YAAU,GAAE;AAAA,mBAAY,OAAK;AAAI,mBAAK,MAAIW,KAAEA,KAAE,IAAGC,MAAGT,KAAE,IAAG,KAAK,iCAAiC,GAAE,GAAE,IAAG,IAAGQ,IAAEC,KAAGT,EAAC;AAAA,UAAE;AAAC,eAAK,YAAY,IAAG,IAAG,IAAG,CAAC;AAAA,QAAC,OAAK;AAAC,mBAAQ,KAAG,GAAE,KAAGQ,IAAE,KAAGC,KAAGM,MAAG,OAAG,CAACA,OAAI,IAAET,KAAG,MAAIV,KAAEK,GAAE,WAAW,CAAC,GAAE,IAAE,KAAK,UAAU,GAAE,CAAC,GAAE,KAAIN,KAAE,GAAEA,KAAE,IAAGA,MAAI;AAAC,gBAAI,KAAG,GAAGA,EAAC,GAAE,KAAG,GAAG,SAAQ,KAAG,GAAG;AAAM,gBAAG,OAAK,QAAGM,GAAE,WAAW,CAAC,MAAI,OAAKc,MAAG,QAAI,GAAG,aAAW,OAAGA,MAAG,GAAG,KAAKd,IAAE,GAAES,IAAEI,GAAE,MAAI,QAAM,KAAK,gBAAgB,IAAG,CAAC,GAAEC,MAAG,GAAG,KAAK,CAAC,MAAI,OAAMA,QAAK,KAAG;AAAA,UAAK;AAAC,cAAE,IAAE,IAAG,IAAE,KAAK,OAAO,qBAAqB,iCAAiCd,IAAE,IAAG,GAAE,IAAG,EAAE,GAAE,GAAG,KAAK,EAAC,QAAO,IAAG,MAAK,IAAG,QAAO,IAAG,QAAO,GAAE,SAAQ,EAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,KAAK,cAAYS,GAAE,SAAOH,MAAI,EAAC,QAAOG,IAAE,QAAOI,KAAG,QAAO,GAAE;AAAA,IAAC,GAAErB,GAAE,UAAU,cAAY,SAAS,GAAE,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,MAAG;AAAC,YAAIC,KAAE,EAAE;AAAK,UAAE,CAAC,GAAEA,OAAI,UAAQD,GAAE,KAAK,MAAKC,EAAC;AAAA,MAAC,MAAM,GAAE,SAAO,UAAQD,GAAE,KAAK,MAAK,EAAE,IAAI;AAAA,IAAC,GAAED,GAAE,UAAU,YAAU,SAAS,GAAE,GAAE;AAAC,aAAO,EAAE,UAAU,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAE;AAAC,QAAE,YAAU;AAAA,IAAC,GAAEA,GAAE,UAAU,mCAAiC,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE,GAAE;AAAC,UAAIE,IAAE;AAAE,YAAI,WAASA,KAAEH,OAAI,IAAE,GAAE,IAAEG,KAAE,KAAG,GAAE,MAAI,KAAGA,OAAI,SAAK,EAAE,UAAQF,KAAE,GAAE,EAAE,YAAU,IAAE,IAAE,CAAC;AAAA,IAAG,GAAEF,GAAE,UAAU,mBAAiB,SAAS,GAAE,GAAE;AAAC,aAAO,IAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,sBAAoB,WAAU;AAAC,eAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,UAAU,QAAO,IAAI,GAAE,CAAC,IAAE,UAAU,CAAC;AAAE,aAAO;AAAA,IAAI,GAAEA,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAEC,IAAE,GAAE;AAAC,aAAM,EAAC,OAAM,GAAE,aAAY,GAAE,cAAaA,IAAE,WAAU,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE;AAAC,aAAM,EAAC,OAAM,GAAE,aAAY,GAAE,WAAUA,IAAE,aAAY,GAAE,cAAaD,IAAE,WAAU,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE,GAAE;AAAC,aAAM,EAAC,OAAM,GAAE,aAAY,GAAE,WAAU,IAAE,IAAE,GAAE,WAAUA,IAAE,SAAQA,IAAE,aAAY,GAAE,WAAU,IAAE,IAAE,GAAE,cAAaD,IAAE,WAAU,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,WAAS,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO;AAAA,IAAG,GAAED,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,EAAE,KAAKA,EAAC,GAAE;AAAA,IAAC,GAAED,GAAE,UAAU,4BAA0B,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,EAAE,CAAC,IAAEA,IAAE,KAAI;AAAA,IAAC,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAE;AAAC,YAAI,SAAO,EAAE,UAAQ;AAAA,IAAE,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO;AAAA,IAAI,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAE,KAAK,CAAC;AAAE,aAAO,MAAI,OAAG,EAAE,UAAUA,IAAE,EAAE,SAAS,IAAE;AAAA,IAAI,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,EAAE,KAAK,CAAC;AAAE,aAAOA,OAAI,OAAKA,GAAE,CAAC,IAAEA;AAAA,IAAC,GAAED,GAAE,UAAU,aAAW,SAAS,GAAE,GAAE;AAAC,UAAG,KAAK,kBAAgB,MAAG;AAAC,aAAK;AAAkB,YAAIC,KAAE,IAAI,MAAM,KAAK,kBAAgB,CAAC,EAAE,KAAK,GAAG;AAAE,aAAK,kBAAgB,KAAK,qBAAmB,QAAQ,IAAIA,KAAE,UAAQ,IAAE,GAAG;AAAE,YAAI,IAAE,EAAE,MAAM,CAAC,GAAEC,KAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAEA,KAAE,KAAG,QAAQ,OAAK,QAAQ;AAAI,eAAO,KAAK,kBAAgB,KAAK,qBAAmB,EAAED,KAAE,UAAQ,IAAE,aAAWC,KAAE,IAAI,GAAE,KAAK,mBAAkB;AAAA,MAAC,MAAM,QAAO,EAAE;AAAA,IAAC,GAAEF,GAAE,UAAQ,8LAA6LA,GAAE,KAAG,kBAAiBA;AAAA,EAAC,EAAE;AAAE,KAAG,QAAM;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,eAAa,EAAE,sBAAoB,EAAE,MAAI,EAAE,cAAY,EAAE,gBAAc,EAAE,YAAU,EAAE,aAAW;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGC,IAAE;AAAC,WAAO,GAAGA,EAAC,IAAEA,GAAE,QAAMA,GAAE;AAAA,EAAI;AAAC,IAAE,aAAW;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAOA,GAAE;AAAA,EAAI;AAAC,IAAE,YAAU;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,GAAG,SAASA,GAAE,KAAK,KAAGA,GAAE,UAAQ;AAAA,EAAE;AAAC,IAAE,gBAAc;AAAG,MAAI,KAAG,UAAS,KAAG,cAAa,KAAG,SAAQ,KAAG,SAAQ,KAAG,aAAY,KAAG,YAAW,KAAG,cAAa,KAAG,eAAc,KAAG;AAAmB,WAAS,GAAGA,IAAE;AAAC,WAAO,GAAGA,EAAC;AAAA,EAAC;AAAC,IAAE,cAAY;AAAG,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE,SAAQ,IAAE,CAAC;AAAE,QAAG,EAAE,OAAKA,GAAE,MAAK,GAAG,YAAY,CAAC,MAAI,EAAE,UAAQ,IAAG,GAAG,IAAIA,IAAE,EAAE,EAAE,OAAK;AAAA;AAC3kL,WAAO,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,aAAWA,GAAE,EAAE,IAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAE,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,QAAMA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,QAAMA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,WAASA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,YAAUA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,aAAWA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,cAAYA,GAAE,EAAE,IAAG,GAAG,IAAIA,IAAE,EAAE,MAAI,EAAE,mBAAiBA,GAAE,EAAE,IAAG;AAAA,EAAC;AAAC,IAAE,MAAI,GAAG,EAAC,MAAK,OAAM,SAAQ,GAAG,MAAM,GAAE,CAAC;AAAE,KAAG,kBAAkB,CAAC,EAAE,GAAG,CAAC;AAAE,WAAS,GAAGA,IAAE,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE,GAAE;AAAC,WAAM,EAAC,OAAM,GAAE,aAAY,GAAE,WAAUD,IAAE,WAAU,GAAE,SAAQC,IAAE,aAAY,GAAE,WAAU,GAAE,cAAaF,GAAE,cAAa,WAAUA,GAAC;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,WAAO,GAAG,uBAAuBA,IAAE,CAAC;AAAA,EAAC;AAAC,IAAE,eAAa;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,MAAI,KAAG,KAAG,EAAE,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,sBAAoB,EAAE,mBAAiB,EAAE,WAAS,EAAE,cAAY,EAAE,0BAAwB,EAAE,aAAW,EAAE,mCAAiC,EAAE,sBAAoB,EAAE,SAAO,EAAE,cAAY,EAAE,OAAK,EAAE,cAAY,EAAE,qBAAmB;AAAO,MAAI,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASD,GAAE,GAAE;AAAC,WAAK,cAAY;AAAA,IAAC;AAAC,WAAO,OAAO,eAAeA,GAAE,WAAU,cAAa,EAAC,KAAI,WAAU;AAAC,aAAO,KAAK;AAAA,IAAW,GAAE,KAAI,SAAS,GAAE;AAAC,WAAK,cAAY;AAAA,IAAC,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAEA,GAAE,UAAU,SAAO,SAAS,GAAE;AAAC,QAAE,MAAM,IAAI,GAAE,EAAE,QAAQ,KAAK,YAAW,SAAS,GAAE;AAAC,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,IAAE,qBAAmB;AAAG,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,CAAC,CAAC,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO,OAAO,eAAe,EAAE,WAAU,cAAa,EAAC,KAAI,WAAU;AAAC,aAAO,KAAK,mBAAiB,SAAO,KAAK,eAAe,aAAW,CAAC;AAAA,IAAC,GAAE,KAAI,SAAS,GAAE;AAAA,IAAC,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAE,EAAE,UAAU,SAAO,SAAS,GAAE;AAAC,QAAE,MAAM,IAAI;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,cAAY;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,UAAQ,IAAG,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,OAAK;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,oBAAkB,OAAG,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,cAAY;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,SAAO;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,sBAAoB;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,mCAAiC;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,aAAW;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAE,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,0BAAwB;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,MAAK,EAAE,UAAU,KAAG;AAAK,aAAOC,GAAE,MAAI,GAAEA,GAAE,oBAAkB,OAAGA,GAAE,gBAAc,OAAG,EAAE,OAAOA,IAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO,OAAO,eAAe,EAAE,WAAU,cAAa,EAAC,KAAI,WAAU;AAAC,aAAO,KAAK;AAAA,IAAW,GAAE,KAAI,SAAS,GAAE;AAAC,WAAK,cAAY;AAAA,IAAC,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,cAAY;AAAG,MAAI,KAAG,WAAU;AAAC,aAASD,GAAE,GAAE;AAAC,WAAK,MAAI,GAAE,EAAE,OAAO,MAAK,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,eAAO,MAAI;AAAA,MAAM,CAAC,CAAC;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,SAAO,SAAS,GAAE;AAAC,QAAE,MAAM,IAAI;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,IAAE,WAAS;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAO,EAAE,IAAIA,IAAE,EAAE;AAAA,EAAC;AAAC,IAAE,mBAAiB;AAAG,WAAS,GAAGA,IAAE;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,IAAI,GAAE,EAAE;AAAA,IAAC;AAAC,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,eAAc,MAAKA,GAAE,iBAAgB,KAAIA,GAAE,IAAG;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,eAAc,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,UAAS,KAAIA,GAAE,KAAI,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,uBAAsB,KAAIA,GAAE,KAAI,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,oCAAmC,KAAIA,GAAE,KAAI,WAAU,GAAG,IAAI,GAAG,EAAC,cAAaA,GAAE,UAAS,CAAC,CAAC,GAAE,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,2BAA0B,KAAIA,GAAE,KAAI,WAAU,GAAG,IAAI,GAAG,EAAC,cAAaA,GAAE,UAAS,CAAC,CAAC,GAAE,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,cAAa,KAAIA,GAAE,KAAI,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,GAAG,QAAM,EAAC,MAAK,eAAc,KAAIA,GAAE,KAAI,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,QAAGA,cAAa,IAAG;AAAC,UAAI,IAAE,EAAC,MAAK,YAAW,MAAKA,GAAE,aAAa,MAAK,OAAM,GAAG,WAAWA,GAAE,YAAY,GAAE,KAAIA,GAAE,IAAG,GAAEC,KAAED,GAAE,aAAa;AAAQ,aAAOA,GAAE,aAAa,YAAU,EAAE,UAAQ,EAAE,SAASC,EAAC,IAAEA,GAAE,SAAOA,KAAG;AAAA,IAAC,OAAK;AAAC,UAAGD,cAAa,GAAG,QAAM,EAAC,MAAK,QAAO,MAAKA,GAAE,MAAK,SAAQA,GAAE,SAAQ,YAAW,EAAEA,GAAE,UAAU,EAAC;AAAE,YAAM,MAAM,sBAAsB;AAAA,IAAC;AAAA,EAAC;AAAC,IAAE,sBAAoB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,aAAW;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,OAAK,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE;AAAK,YAAI,WAAS,IAAE,CAAC,IAAG,GAAG,QAAQ,EAAE,YAAW,SAAS,GAAEC,IAAE;AAAC,YAAI,IAAE,GAAG,KAAK,EAAE,YAAWA,KAAE,CAAC;AAAE,YAAG,aAAa,GAAG,YAAY,CAAAD,GAAE,YAAY,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,SAAS,CAAAA,GAAE,aAAa,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,YAAY,CAAAA,GAAE,SAAS,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,OAAO,CAAAA,GAAE,WAAW,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,oBAAoB,CAAAA,GAAE,eAAe,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,iCAAiC,CAAAA,GAAE,kBAAkB,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,wBAAwB,CAAAA,GAAE,YAAY,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,WAAW,CAAAA,GAAE,SAAS,GAAE,GAAE,CAAC;AAAA,iBAAU,aAAa,GAAG,YAAY,CAAAA,GAAE,OAAO,GAAE,GAAE,CAAC;AAAA,YAAO,OAAM,MAAM,sBAAsB;AAAA,MAAC,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,eAAa,SAAS,GAAE,GAAEC,IAAE;AAAA,IAAC,GAAED,GAAE,UAAU,cAAY,SAAS,GAAE,GAAEC,IAAE;AAAA,IAAC,GAAED,GAAE,UAAU,WAAS,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAE,OAAOA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,aAAW,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAE,OAAOA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,iBAAe,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,CAAC,IAAI,GAAG,OAAO,EAAC,YAAW,EAAE,WAAU,CAAC,CAAC,EAAE,OAAO,GAAEA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,GAAG,GAAE,GAAEA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,WAAS,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,CAAC,IAAI,GAAG,OAAO,EAAC,YAAW,EAAE,WAAU,CAAC,CAAC,EAAE,OAAO,GAAEA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,cAAY,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,GAAG,GAAE,GAAEA,EAAC;AAAE,WAAK,KAAK,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,SAAO,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,EAAE,OAAOD,EAAC;AAAE,SAAG,QAAQ,EAAE,YAAW,SAAS,GAAE;AAAC,YAAI,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,CAAC,CAAC,EAAC,CAAC;AAAE,UAAE,KAAK,GAAEC,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEF;AAAA,EAAC,EAAE;AAAE,KAAG,aAAW;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC,IAAI,GAAG,OAAO,EAAC,YAAW,CAAC,IAAI,GAAG,SAAS,EAAC,cAAaD,GAAE,UAAS,CAAC,CAAC,EAAE,OAAOA,GAAE,UAAU,EAAC,CAAC,CAAC,GAAE,IAAEC,GAAE,OAAO,GAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGF,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,cAAY;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,UAAI,IAAE;AAAE,cAAO,EAAE,aAAY;AAAA,QAAC,KAAK,GAAG;AAAY,iBAAO,KAAK,iBAAiB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAY,iBAAO,KAAK,iBAAiB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAO,iBAAO,KAAK,YAAY,CAAC;AAAA,QAAE,KAAK,GAAG;AAAoB,iBAAO,KAAK,yBAAyB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAiC,iBAAO,KAAK,sCAAsC,CAAC;AAAA,QAAE,KAAK,GAAG;AAAwB,iBAAO,KAAK,6BAA6B,CAAC;AAAA,QAAE,KAAK,GAAG;AAAW,iBAAO,KAAK,gBAAgB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAY,iBAAO,KAAK,iBAAiB,CAAC;AAAA,QAAE,KAAK,GAAG;AAAS,iBAAO,KAAK,cAAc,CAAC;AAAA,QAAE,KAAK,GAAG;AAAK,iBAAO,KAAK,UAAU,CAAC;AAAA,QAAE;AAAQ,gBAAM,MAAM,sBAAsB;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,cAAY,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,2BAAyB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,wCAAsC,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,+BAA6B,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,cAAY;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,CAAAwB,OAAG;AAAC;AAAa,MAAI,KAAGA,MAAGA,GAAE,aAAW,2BAAU;AAAC,QAAIvB,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAesB,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,iBAAeA,GAAE,6BAA2BA,GAAE,uBAAqBA,GAAE,kBAAgBA,GAAE,iBAAeA,GAAE,iBAAe;AAAO,MAAIC,MAAG,EAAE,GAAE,IAAE,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGxB,IAAE;AAAC,WAAOA,cAAa,EAAE,eAAaA,cAAa,EAAE,UAAQA,cAAa,EAAE,cAAYA,cAAa,EAAE,uBAAqBA,cAAa,EAAE,oCAAkCA,cAAa,EAAE,2BAAyBA,cAAa,EAAE,YAAUA,cAAa,EAAE;AAAA,EAAI;AAAC,EAAAuB,GAAE,iBAAe;AAAG,WAAS,GAAGvB,IAAE,GAAE;AAAC,UAAI,WAAS,IAAE,CAAC;AAAG,QAAI,IAAEA,cAAa,EAAE,UAAQA,cAAa,EAAE,cAAYA,cAAa,EAAE;AAAwB,WAAO,IAAE,OAAGA,cAAa,EAAE,cAAYwB,IAAG,KAAKxB,GAAE,YAAW,SAASC,IAAE;AAAC,aAAO,GAAGA,IAAE,CAAC;AAAA,IAAC,CAAC,IAAED,cAAa,EAAE,eAAawB,IAAG,SAAS,GAAExB,EAAC,IAAE,QAAGA,cAAa,EAAE,sBAAoBA,cAAa,EAAE,eAAa,EAAE,KAAKA,EAAC,GAAEwB,IAAG,MAAMxB,GAAE,YAAW,SAASC,IAAE;AAAC,aAAO,GAAGA,IAAE,CAAC;AAAA,IAAC,CAAC,KAAG;AAAA,EAAE;AAAC,EAAAsB,GAAE,iBAAe;AAAG,WAAS,GAAGvB,IAAE;AAAC,WAAOA,cAAa,EAAE;AAAA,EAAW;AAAC,EAAAuB,GAAE,kBAAgB;AAAG,WAAS,GAAGvB,IAAE;AAAC,QAAGA,cAAa,EAAE,YAAY,QAAM;AAAU,QAAGA,cAAa,EAAE,OAAO,QAAM;AAAS,QAAGA,cAAa,EAAE,YAAY,QAAM;AAAK,QAAGA,cAAa,EAAE,oBAAoB,QAAM;AAAe,QAAGA,cAAa,EAAE,iCAAiC,QAAM;AAAmB,QAAGA,cAAa,EAAE,wBAAwB,QAAM;AAAW,QAAGA,cAAa,EAAE,WAAW,QAAM;AAAO,QAAGA,cAAa,EAAE,SAAS,QAAM;AAAU,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,EAAAuB,GAAE,uBAAqB;AAAG,MAAI,KAAG,SAASvB,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,UAAI,IAAEA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAK,aAAO,EAAE,YAAU,KAAI,EAAE,aAAW,EAAC,QAAO,CAAC,GAAE,aAAY,CAAC,GAAE,YAAW,CAAC,GAAE,yBAAwB,CAAC,GAAE,qBAAoB,CAAC,GAAE,kCAAiC,CAAC,EAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,QAAM,WAAU;AAAC,WAAK,aAAW,EAAC,QAAO,CAAC,GAAE,aAAY,CAAC,GAAE,YAAW,CAAC,GAAE,yBAAwB,CAAC,GAAE,qBAAoB,CAAC,GAAE,kCAAiC,CAAC,EAAC;AAAA,IAAC,GAAE,EAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,UAAIC,KAAE,EAAE,aAAa,OAAK,KAAK,YAAU;AAAW,MAAAuB,IAAG,IAAI,KAAK,YAAWvB,EAAC,MAAI,KAAK,WAAWA,EAAC,IAAE,CAAC,IAAG,KAAK,WAAWA,EAAC,EAAE,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,UAAIA,KAAE,EAAE,kBAAgB,KAAK,YAAU;AAAW,MAAAuB,IAAG,IAAI,KAAK,YAAWvB,EAAC,MAAI,KAAK,WAAWA,EAAC,IAAE,CAAC,IAAG,KAAK,WAAWA,EAAC,EAAE,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAE;AAAC,WAAK,WAAW,OAAO,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,WAAK,WAAW,wBAAwB,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,WAAK,WAAW,oBAAoB,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,wCAAsC,SAAS,GAAE;AAAC,WAAK,WAAW,iCAAiC,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,WAAW,WAAW,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,WAAW,YAAY,KAAK,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,EAAAsB,GAAE,6BAA2B;AAAG,MAAI,KAAG,IAAI;AAAG,WAAS,GAAGvB,IAAE;AAAC,OAAG,MAAM,GAAEA,GAAE,OAAO,EAAE;AAAE,QAAI,IAAE,GAAG;AAAW,WAAO,GAAG,MAAM,GAAE;AAAA,EAAC;AAAC,EAAAuB,GAAE,iBAAe;AAAE,CAAC;AAAE,IAAI,KAAGxB,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,mBAAiB,GAAG,oBAAkB,GAAG,mBAAiB,GAAG,QAAM;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGC,IAAE;AAAC,QAAGA,cAAa,GAAG,YAAY,QAAO,GAAGA,GAAE,cAAc;AAAE,QAAGA,cAAa,GAAG,SAAS,QAAO,GAAGA,EAAC;AAAE,QAAG,GAAG,eAAeA,EAAC,EAAE,QAAO,GAAGA,EAAC;AAAE,QAAG,GAAG,gBAAgBA,EAAC,EAAE,QAAO,GAAGA,EAAC;AAAE,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,KAAG,QAAM;AAAG,WAAS,GAAGA,IAAE;AAAC,aAAQ,IAAE,CAAC,GAAE,IAAEA,GAAE,YAAWC,KAAE,GAAE,IAAE,EAAE,SAAOA,IAAEC,IAAE,IAAE,MAAG,KAAG,IAAG,CAAAA,KAAE,EAAED,EAAC,GAAE,IAAE,GAAG,eAAeC,EAAC,GAAE,IAAE,EAAE,OAAO,GAAGA,EAAC,CAAC,GAAED,KAAEA,KAAE,GAAE,IAAE,EAAE,SAAOA;AAAE,WAAO,GAAG,KAAK,CAAC;AAAA,EAAC;AAAC,KAAG,mBAAiB;AAAG,WAAS,GAAGD,IAAE;AAAC,QAAI,IAAE,GAAG,IAAIA,GAAE,YAAW,SAAS,GAAE;AAAC,aAAO,GAAG,CAAC;AAAA,IAAC,CAAC;AAAE,WAAO,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;AAAA,EAAC;AAAC,KAAG,oBAAkB;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAM,CAACA,GAAE,YAAY;AAAA,EAAC;AAAC,KAAG,mBAAiB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,KAAG;AAAO,KAAG,KAAG;AAAQ,CAAC;AAAE,IAAI,KAAGA,GAAE,QAAI;AAAC;AAAa,MAAI,KAAG,MAAI,GAAG,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,0BAAwB,GAAG,gCAA8B,GAAG,yBAAuB,GAAG,sBAAoB;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAE;AAAC,UAAIC,KAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAOC,GAAE,UAAQ,GAAEA,GAAE,UAAQ,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,WAAU;AAAC,aAAO,KAAK,KAAK,KAAK,OAAO,GAAE,KAAK;AAAA,IAAO,GAAE,EAAE,UAAU,eAAa,SAAS,GAAEA,IAAE,GAAE;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAEA,IAAE,GAAE;AAAC,UAAIC,KAAE,GAAG,EAAE,gBAAe,EAAE,GAAG,IAAE,KAAK,QAAQ,MAAK,IAAED,GAAE,OAAO,CAAC,GAAE,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,EAAC,CAAC,GAAEG,KAAE,GAAG,MAAM,CAAC;AAAE,WAAK,QAAQF,EAAC,IAAEE;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,UAAU;AAAE,KAAG,sBAAoB;AAAG,WAAS,GAAGJ,IAAE;AAAC,QAAI,IAAE,CAAC;AAAE,WAAO,GAAG,QAAQA,IAAE,SAAS,GAAE;AAAC,UAAIC,KAAE,IAAI,GAAG,CAAC,EAAE,aAAa;AAAE,SAAG,OAAO,GAAEA,EAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,KAAG,yBAAuB;AAAG,WAAS,GAAGD,IAAE,GAAE;AAAC,WAAOA,GAAE,OAAK,IAAE,GAAG;AAAA,EAAE;AAAC,KAAG,gCAA8B;AAAG,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE,aAAa;AAAK,WAAO,IAAEA,GAAE,MAAI,GAAG;AAAA,EAAE;AAAC,KAAG,0BAAwB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,uCAAqC,GAAG,sCAAoC,GAAG,6BAA2B;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,EAAE,GAAE,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,KAAG,6BAA2B,EAAC,2BAA0B,SAASC,IAAE;AAAC,QAAI,IAAEA,GAAE,UAAS,IAAEA,GAAE,QAAOC,KAAED,GAAE,UAAS,IAAEA,GAAE,UAASE,KAAE,GAAG,cAAc,CAAC,GAAE,IAAEA,KAAE,SAAO,GAAG,WAAW,CAAC,IAAE,SAAO,uBAAqB,EAAE,OAAK,QAAO,IAAE,eAAa,IAAE,qBAAmB,EAAE,QAAM;AAAQ,WAAO;AAAA,EAAC,GAAE,+BAA8B,SAASF,IAAE;AAAC,QAAI,IAAEA,GAAE,gBAAe,IAAEA,GAAE;AAAS,WAAM,+CAA6C,EAAE;AAAA,EAAK,GAAE,yBAAwB,SAASA,IAAE;AAAC,QAAI,IAAEA,GAAE,qBAAoB,IAAEA,GAAE,QAAOC,KAAED,GAAE,UAAS,IAAEA,GAAE,uBAAsBE,KAAEF,GAAE,UAAS,IAAE,eAAc,IAAE,GAAG,MAAM,CAAC,EAAE,OAAMI,KAAE;AAAA,gBAChzd,IAAE;AAAI,QAAG,EAAE,QAAO,IAAE,IAAEA;AAAE,QAAI,IAAE,GAAG,OAAO,GAAE,SAAS,GAAE,GAAE;AAAC,aAAO,EAAE,OAAO,CAAC;AAAA,IAAC,GAAE,CAAC,CAAC,GAAEE,KAAE,GAAG,IAAI,GAAE,SAAS,GAAE;AAAC,aAAM,MAAI,GAAG,IAAI,GAAE,SAAS,GAAE;AAAC,eAAO,GAAG,WAAW,CAAC;AAAA,MAAC,CAAC,EAAE,KAAK,IAAI,IAAE;AAAA,IAAG,CAAC,GAAEC,KAAE,GAAG,IAAID,IAAE,SAAS,GAAE,GAAE;AAAC,aAAM,QAAM,IAAE,KAAG,OAAK;AAAA,IAAC,CAAC,GAAE,IAAE;AAAA,IAClPC,GAAE,KAAK;AAAA,CACR;AAAE,WAAO,IAAE,IAAEH;AAAA,EAAC,GAAE,uBAAsB,SAASJ,IAAE;AAAC,QAAI,IAAEA,GAAE,wBAAuB,IAAEA,GAAE,QAAOC,KAAED,GAAE,uBAAsB,IAAEA,GAAE,UAASE,KAAE,eAAc,IAAE,GAAG,MAAM,CAAC,EAAE,OAAM,IAAE;AAAA,gBAC5J,IAAE;AAAI,QAAGD,GAAE,QAAOC,KAAED,KAAE;AAAE,QAAIG,KAAE,GAAG,IAAI,GAAE,SAASE,IAAE;AAAC,aAAM,MAAI,GAAG,IAAIA,IAAE,SAASC,IAAE;AAAC,eAAO,GAAG,WAAWA,EAAC;AAAA,MAAC,CAAC,EAAE,KAAK,GAAG,IAAE;AAAA,IAAG,CAAC,GAAE,IAAE;AAAA,OACvI,MAAIH,GAAE,KAAK,IAAI,IAAE;AAAK,WAAOF,KAAE,IAAE;AAAA,EAAC,EAAC;AAAE,SAAO,OAAO,GAAG,0BAA0B;AAAE,KAAG,sCAAoC,EAAC,wBAAuB,SAASF,IAAE,GAAE;AAAC,QAAI,IAAE,kEAAgE,EAAE,kBAAgB;AAAA,6BACjOA,GAAE,OAAK;AAAK,WAAO;AAAA,EAAC,EAAC;AAAE,KAAG,uCAAqC,EAAC,0BAAyB,SAASA,IAAE,GAAE;AAAC,aAAS,EAAEM,IAAE;AAAC,aAAOA,cAAa,GAAG,WAASA,GAAE,aAAa,OAAKA,cAAa,GAAG,cAAYA,GAAE,kBAAgB;AAAA,IAAE;AAAC,QAAIL,KAAED,GAAE,MAAK,IAAE,GAAG,MAAM,CAAC,GAAEE,KAAE,EAAE,KAAI,IAAE,GAAG,qBAAqB,CAAC,GAAE,IAAE,EAAE,CAAC,GAAEE,KAAEF,KAAE,GAAE,IAAE,OAAK,KAAGE,KAAEF,KAAE,MAAI,SAAO,IAAE,sBAAoB,IAAE,OAAK,MAAI;AAAA,8CAChV,EAAE,SAAO,sCAAoCD,KAAE;AAAA;AAAA;AAEvE,WAAO,IAAE,EAAE,QAAQ,WAAU,GAAG,GAAE,IAAE,EAAE,QAAQ,UAAS;AAAA,CAC1E,GAAE;AAAA,EAAC,GAAE,6BAA4B,SAASD,IAAE;AAAC,QAAI,IAAE;AAAA,KACjD,6EAA2EA,GAAE,OAAK;AAAA,KAClF;AAAA;AAAA;AAEqD,WAAO;AAAA,EAAC,GAAE,sCAAqC,SAASA,IAAE;AAAC,QAAI,IAAE,GAAG,IAAIA,GAAE,YAAW,SAAS,GAAE;AAAC,aAAO,GAAG,WAAW,CAAC;AAAA,IAAC,CAAC,EAAE,KAAK,IAAI,GAAE,IAAEA,GAAE,YAAY,QAAM,IAAE,KAAGA,GAAE,YAAY,KAAIC,KAAE,8BAA4BD,GAAE,iBAAiB,KAAK,IAAI,IAAE;AAAA,KACpS,WAAS,IAAE,eAAaA,GAAE,aAAa,OAAK;AAAA,MAC3C,MAAI,IAAE;AAAA,KACP;AAAA;AACmB,WAAOC;AAAA,EAAC,GAAE,gCAA+B,SAASD,IAAE;AAAC,QAAI,IAAE,GAAG,IAAIA,GAAE,YAAW,SAAS,GAAE;AAAC,aAAO,GAAG,WAAW,CAAC;AAAA,IAAC,CAAC,EAAE,KAAK,IAAI,GAAE,IAAEA,GAAE,YAAY,QAAM,IAAE,KAAGA,GAAE,YAAY,KAAIC,KAAE,uCAAqCD,GAAE,iBAAiB,KAAK,IAAI,IAAE,aAAW,IAAE,OAAK,cAAYA,GAAE,aAAa,OAAK;AAAA,MACtT,MAAI,IAAE;AAAA;AACP,WAAOC,KAAEA,KAAE;AAAA,uBACQA;AAAA,EAAC,GAAE,2BAA0B,SAASD,IAAE;AAAC,QAAI,IAAE,GAAG,qBAAqBA,GAAE,UAAU;AAAE,IAAAA,GAAE,WAAW,QAAM,MAAI,KAAGA,GAAE,WAAW;AAAK,QAAI,IAAE,qBAAmB,IAAE,oBAAkBA,GAAE,aAAa,OAAK;AAAA;AAClL,WAAO;AAAA,EAAC,GAAE,qBAAoB,SAASA,IAAE;AAAC,WAAM;AAAA,EAAY,GAAE,4BAA2B,SAASA,IAAE;AAAC,QAAI,IAAE,oCAAkCA,GAAE,iBAAe,KAAG,OAAK,YAAUA,GAAE,YAAY,MAAI,eAAaA,GAAE,aAAa,OAAK;AAAA,KACtQ;AAAyD,WAAO;AAAA,EAAC,GAAE,+BAA8B,SAASA,IAAE;AAAC,QAAI,IAAE;AAAA,KACnH,QAAMA,GAAE,YAAY,MAAI,eAAaA,GAAE,aAAa,OAAK;AAAA,UACpDA,GAAE,YAAY,WAAW,SAAO,KAAG;AAAkB,WAAO;AAAA,EAAC,GAAE,yBAAwB,SAASA,IAAE;AAAC,QAAI,IAAEA,GAAE,aAAa,MAAK,IAAE,GAAG,IAAIA,GAAE,mBAAkB,SAASE,IAAE;AAAC,aAAOA,GAAE;AAAA,IAAI,CAAC,GAAED,KAAE,IAAE,UAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,GAAE,IAAE;AAAA,KACrO,YAAU,IAAE;AAAA,MACX;AAAA,KACDA,KAAE;AAAA,KACF;AAAA;AAC2D,WAAO;AAAA,EAAC,GAAE,2BAA0B,SAASD,IAAE;AAAC,WAAM;AAAA,EAAY,GAAE,6BAA4B,SAASA,IAAE;AAAC,QAAI;AAAE,IAAAA,GAAE,wBAAwB,GAAG,OAAK,IAAEA,GAAE,aAAa,OAAK,IAAEA,GAAE;AAAa,QAAI,IAAE,mCAAiC,IAAE,6CAA2CA,GAAE,cAAY;AAAK,WAAO;AAAA,EAAC,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,MAAI,KAAG,MAAI,GAAG,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,yBAAuB,GAAG,iBAAe;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,EAAE,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGD,IAAE,GAAE;AAAC,QAAI,IAAE,IAAI,GAAGA,IAAE,CAAC;AAAE,WAAO,EAAE,YAAY,GAAE,EAAE;AAAA,EAAM;AAAC,KAAG,iBAAe;AAAG,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAO,EAAE,gBAAc,GAAE,EAAE,iBAAeC,IAAE,EAAE,SAAO,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,cAAY,WAAU;AAAC,UAAI,IAAE;AAAK,SAAG,QAAQ,GAAG,OAAO,KAAK,aAAa,GAAE,SAASA,IAAE;AAAC,UAAE,eAAaA,IAAEA,GAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,UAAIA,KAAE,KAAK,cAAc,EAAE,eAAe;AAAE,UAAGA,GAAE,GAAE,iBAAeA;AAAA,WAAM;AAAC,YAAI,IAAE,KAAK,eAAe,uBAAuB,KAAK,cAAa,CAAC;AAAE,aAAK,OAAO,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,wBAAuB,UAAS,KAAK,aAAa,MAAK,mBAAkB,EAAE,gBAAe,CAAC;AAAA,MAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,KAAG,yBAAuB;AAAE,CAAC;AAAE,IAAI,KAAGF,GAAE,OAAG;AAAC;AAAa,MAAI,KAAG,KAAG,EAAE,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,0BAAwB,EAAE,oBAAkB,EAAE,uCAAqC,EAAE,oCAAkC,EAAE,iCAA+B,EAAE,8BAA4B,EAAE,4CAA0C,EAAE,uBAAqB,EAAE,mCAAiC;AAAO,MAAIwB,MAAG,GAAG,GAAEC,KAAE,EAAE,GAAE,KAAG,GAAG,GAAE,IAAE,GAAG,GAAEC,MAAG,SAAS3B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAO,EAAE,UAAQ,GAAE,EAAE,OAAKC,IAAE,EAAE,mBAAiB,CAAC,GAAE,EAAE,qBAAmB,IAAG,EAAE,2BAAyB,GAAE,EAAE,QAAM,OAAG,EAAE,gBAAc,OAAG;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,WAAU;AAAC,UAAG,KAAK,QAAM,OAAG,KAAK,KAAK,UAAU,CAAC,MAAI,KAAK,QAAQ,KAAK,OAAM,MAAM,qDAAqD;AAAE,aAAO,KAAK,YAAUyB,GAAE,SAAS,KAAK,KAAK,SAAS,EAAE,QAAQ,GAAE,KAAK,kBAAgBA,GAAE,SAAS,KAAK,KAAK,eAAe,EAAE,QAAQ,GAAE,KAAK,UAAU,IAAI,GAAE,KAAK,gBAAgB,IAAI,GAAE,KAAK,mBAAmB,GAAE,KAAK,KAAK,KAAK,OAAO,GAAE,KAAK;AAAA,IAAgB,GAAE,EAAE,UAAU,OAAK,SAAS,GAAEzB,IAAE;AAAC,MAAAA,OAAI,WAASA,KAAE,CAAC,IAAG,KAAK,SAAOD,GAAE,UAAU,KAAK,KAAK,MAAK,GAAEC,EAAC;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAEA,IAAE,GAAE;AAAC,UAAG,EAAE,eAAe,SAAO,KAAK,sBAAoB,EAAE,QAAM,KAAK,0BAAyB;AAAC,YAAIC,KAAED,GAAE,OAAO,CAAC;AAAE,aAAK,mBAAmB,GAAE,KAAK,KAAK,EAAE,gBAAeC,EAAC;AAAA,MAAC;AAAA,IAAC,GAAE,EAAE,UAAU,qBAAmB,WAAU;AAAC,MAAAwB,GAAE,QAAQ,KAAK,SAAS,KAAG,KAAK,qBAAmB,IAAG,KAAK,2BAAyB,GAAE,KAAK,gBAAc,SAAK,KAAK,qBAAmB,KAAK,UAAU,IAAI,GAAE,KAAK,2BAAyB,KAAK,gBAAgB,IAAI;AAAA,IAAE,GAAE;AAAA,EAAC,EAAED,IAAG,UAAU;AAAE,IAAE,mCAAiCE;AAAG,MAAI,KAAG,SAAS3B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAO,EAAE,OAAKA,IAAE,EAAE,mBAAiB,IAAG,EAAE,yBAAuB,GAAE,EAAE,mBAAiB,EAAE,KAAK,QAAQ,MAAK,EAAE,yBAAuB,EAAE,KAAK,mBAAkB;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,SAAS,GAAEA,IAAE,GAAE;AAAC,UAAG,KAAK,iBAAe,EAAE,aAAa,SAAO,KAAK,oBAAkB,EAAE,QAAM,KAAK,0BAAwB,CAAC,KAAK,OAAM;AAAC,YAAIC,KAAED,GAAE,OAAO,CAAC,GAAE,IAAE,IAAI,EAAE,YAAY,EAAC,YAAWC,GAAC,CAAC;AAAE,aAAK,mBAAiB,GAAG,MAAM,CAAC,GAAE,KAAK,QAAM;AAAA,MAAE;AAAA,IAAC,GAAE;AAAA,EAAC,EAAEyB,GAAE;AAAE,IAAE,uBAAqB;AAAG,MAAI,KAAG,SAAS3B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,IAAI,KAAG;AAAK,aAAO,EAAE,UAAQ,GAAE,EAAE,aAAWC,IAAE,EAAE,SAAO,EAAC,OAAM,QAAO,YAAW,QAAO,aAAY,OAAM,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,WAAU;AAAC,aAAO,KAAK,KAAK,KAAK,OAAO,GAAE,KAAK;AAAA,IAAM,GAAE;AAAA,EAAC,EAAEwB,IAAG,UAAU;AAAE,IAAE,4CAA0C;AAAG,MAAI,KAAG,SAASzB,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,aAAOA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAA,IAAI;AAAC,WAAO,EAAE,UAAU,WAAS,SAAS,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,KAAK,YAAW;AAAC,YAAIC,KAAEwB,GAAE,MAAMzB,GAAE,OAAO,CAAC,CAAC;AAAE,aAAK,OAAO,cAAYC,OAAI,QAAOA,cAAa,EAAE,aAAW,KAAK,OAAO,QAAMA,GAAE,cAAa,KAAK,OAAO,aAAWA,GAAE;AAAA,MAAI,MAAM,CAAAF,GAAE,UAAU,SAAS,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,8BAA4B;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,aAAOA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAA,IAAI;AAAC,WAAO,EAAE,UAAU,cAAY,SAAS,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,KAAK,YAAW;AAAC,YAAIC,KAAEwB,GAAE,MAAMzB,GAAE,OAAO,CAAC,CAAC;AAAE,aAAK,OAAO,cAAYC,OAAI,QAAOA,cAAa,EAAE,aAAW,KAAK,OAAO,QAAMA,GAAE,cAAa,KAAK,OAAO,aAAWA,GAAE;AAAA,MAAI,MAAM,CAAAF,GAAE,UAAU,YAAY,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,iCAA+B;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,aAAOA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAA,IAAI;AAAC,WAAO,EAAE,UAAU,iBAAe,SAAS,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,KAAK,YAAW;AAAC,YAAIC,KAAEwB,GAAE,MAAMzB,GAAE,OAAO,CAAC,CAAC;AAAE,aAAK,OAAO,cAAYC,OAAI,QAAOA,cAAa,EAAE,aAAW,KAAK,OAAO,QAAMA,GAAE,cAAa,KAAK,OAAO,aAAWA,GAAE;AAAA,MAAI,MAAM,CAAAF,GAAE,UAAU,eAAe,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,oCAAkC;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,aAAOA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAA,IAAI;AAAC,WAAO,EAAE,UAAU,oBAAkB,SAAS,GAAEC,IAAE,GAAE;AAAC,UAAG,EAAE,QAAM,KAAK,YAAW;AAAC,YAAIC,KAAEwB,GAAE,MAAMzB,GAAE,OAAO,CAAC,CAAC;AAAE,aAAK,OAAO,cAAYC,OAAI,QAAOA,cAAa,EAAE,aAAW,KAAK,OAAO,QAAMA,GAAE,cAAa,KAAK,OAAO,aAAWA,GAAE;AAAA,MAAI,MAAM,CAAAF,GAAE,UAAU,kBAAkB,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,uCAAqC;AAAG,WAAS,GAAGD,IAAE,GAAE,GAAE;AAAC,UAAI,WAAS,IAAE,CAAC,IAAG,IAAE0B,GAAE,SAAS,CAAC;AAAE,QAAIzB,KAAE,CAAC,GAAE,IAAE;AAAE,aAASC,GAAE,GAAE;AAAC,aAAO,EAAE,OAAOwB,GAAE,KAAK1B,IAAE,IAAE,CAAC,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,UAAIM,KAAE,GAAGJ,GAAE,CAAC,GAAE,GAAE,CAAC;AAAE,aAAOD,GAAE,OAAOK,EAAC;AAAA,IAAC;AAAC,WAAK,EAAE,SAAO,KAAG,IAAEN,GAAE,UAAQ;AAAC,UAAI,IAAEA,GAAE,CAAC;AAAE,UAAG,aAAa,EAAE,YAAY,QAAO,EAAE,EAAE,UAAU;AAAE,UAAG,aAAa,EAAE,YAAY,QAAO,EAAE,EAAE,UAAU;AAAE,UAAG,aAAa,EAAE,OAAO,CAAAC,KAAE,EAAE,EAAE,UAAU;AAAA,eAAU,aAAa,EAAE,qBAAoB;AAAC,YAAIG,KAAE,EAAE,WAAW,OAAO,CAAC,IAAI,EAAE,WAAW,EAAC,YAAW,EAAE,WAAU,CAAC,CAAC,CAAC;AAAE,eAAO,EAAEA,EAAC;AAAA,MAAC,WAAS,aAAa,EAAE,kCAAiC;AAAC,YAAIA,KAAE,CAAC,IAAI,EAAE,YAAY,EAAC,YAAW,EAAE,WAAU,CAAC,GAAE,IAAI,EAAE,WAAW,EAAC,YAAW,CAAC,IAAI,EAAE,SAAS,EAAC,cAAa,EAAE,UAAS,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAC,CAAC,CAAC;AAAE,eAAO,EAAEA,EAAC;AAAA,MAAC,WAAS,aAAa,EAAE,yBAAwB;AAAC,YAAIA,KAAE,EAAE,WAAW,OAAO,CAAC,IAAI,EAAE,WAAW,EAAC,YAAW,CAAC,IAAI,EAAE,SAAS,EAAC,cAAa,EAAE,UAAS,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAC,CAAC,CAAC,CAAC;AAAE,QAAAH,KAAE,EAAEG,EAAC;AAAA,MAAC,WAAS,aAAa,EAAE,YAAW;AAAC,YAAIA,KAAE,EAAE,WAAW,OAAO,CAAC,IAAI,EAAE,WAAW,EAAC,YAAW,EAAE,WAAU,CAAC,CAAC,CAAC;AAAE,QAAAH,KAAE,EAAEG,EAAC;AAAA,MAAC,OAAK;AAAC,YAAG,aAAa,EAAE,YAAY,QAAOsB,GAAE,QAAQ,EAAE,YAAW,SAAS,GAAE;AAAC,UAAAA,GAAE,QAAQ,EAAE,UAAU,MAAI,UAAKzB,KAAE,EAAE,EAAE,UAAU;AAAA,QAAE,CAAC,GAAEA;AAAE,YAAG,aAAa,EAAE,SAAS,GAAE,KAAK,EAAE,YAAY;AAAA,YAAO,OAAM,MAAM,sBAAsB;AAAA,MAAC;AAAC;AAAA,IAAG;AAAC,WAAOA,GAAE,KAAK,EAAC,aAAY,GAAE,WAAUyB,GAAE,KAAK1B,IAAE,CAAC,EAAC,CAAC,GAAEC;AAAA,EAAC;AAAC,IAAE,oBAAkB;AAAG,WAAS,GAAGD,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,sBAAqBC,KAAE,CAAC,CAAC,GAAE,IAAE,oBAAmB,IAAE,OAAGE,KAAE,EAAE,QAAO,IAAEA,KAAEH,KAAE,GAAEK,KAAE,CAAC,GAAEC,KAAE,CAAC;AAAE,SAAIA,GAAE,KAAK,EAAC,KAAI,IAAG,KAAIP,IAAE,WAAU,CAAC,GAAE,iBAAgB,CAAC,EAAC,CAAC,GAAE,CAAC0B,GAAE,QAAQnB,EAAC,KAAG;AAAC,UAAI,IAAEA,GAAE,IAAI;AAAE,UAAG,MAAI,GAAE;AAAC,aAAGmB,GAAE,KAAKnB,EAAC,EAAE,OAAK,KAAGA,GAAE,IAAI;AAAE;AAAA,MAAQ;AAAC,UAAI,IAAE,EAAE,KAAI,IAAE,EAAE,KAAI,IAAE,EAAE,WAAUJ,KAAE,EAAE;AAAgB,UAAG,CAACuB,GAAE,QAAQ,CAAC,GAAE;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,YAAG,MAAI,GAAE;AAAC,cAAIrB,KAAE,EAAC,KAAI,GAAE,KAAIqB,GAAE,KAAK,CAAC,GAAE,WAAUA,GAAE,UAAU,CAAC,GAAE,iBAAgBA,GAAE,UAAUvB,EAAC,EAAC;AAAE,UAAAI,GAAE,KAAKF,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,SAAS,KAAG,IAAED,KAAE,GAAE;AAAC,cAAII,KAAE,IAAE,GAAEK,KAAE,EAAEL,EAAC;AAAE,cAAG,EAAEK,IAAE,EAAE,YAAY,GAAE;AAAC,gBAAIR,KAAE,EAAC,KAAIG,IAAE,KAAIkB,GAAE,KAAK,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,YAAAI,GAAE,KAAKF,EAAC;AAAA,UAAC;AAAA,QAAC,WAAS,MAAID,KAAE,EAAE,CAAAE,GAAE,KAAK,EAAC,eAAc,EAAE,cAAa,qBAAoB,EAAE,KAAI,WAAU,GAAE,iBAAgBH,GAAC,CAAC,GAAE,IAAE;AAAA,YAAQ,OAAM,MAAM,sBAAsB;AAAA,iBAAU,aAAa,EAAE,aAAY;AAAC,cAAI,IAAEuB,GAAE,SAAS,CAAC;AAAE,YAAE,KAAK,EAAE,eAAe;AAAE,cAAIZ,MAAGY,GAAE,SAASvB,EAAC;AAAE,UAAAW,IAAG,KAAK,EAAE,GAAG;AAAE,cAAIT,KAAE,EAAC,KAAI,GAAE,KAAI,EAAE,WAAW,OAAOH,IAAEwB,GAAE,KAAK,CAAC,CAAC,GAAE,WAAU,GAAE,iBAAgBZ,IAAE;AAAE,UAAAP,GAAE,KAAKF,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,QAAO;AAAC,cAAI,KAAG,EAAC,KAAI,GAAE,KAAIqB,GAAE,KAAK,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAK,EAAE,GAAEA,GAAE,KAAK,CAAC;AAAE,cAAIU,KAAE,EAAC,KAAI,GAAE,KAAI,EAAE,WAAW,OAAOS,GAAE,KAAK,CAAC,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAKU,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,qBAAoB;AAAC,cAAI,KAAG,IAAI,EAAE,WAAW,EAAC,YAAW,EAAE,YAAW,KAAI,EAAE,IAAG,CAAC,GAAEF,KAAE,EAAE,WAAW,OAAO,CAAC,EAAE,GAAEW,GAAE,KAAK,CAAC,CAAC,GAAErB,KAAE,EAAC,KAAI,GAAE,KAAIU,IAAE,WAAU,GAAE,iBAAgBZ,GAAC;AAAE,UAAAI,GAAE,KAAKF,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,kCAAiC;AAAC,cAAIW,MAAG,IAAI,EAAE,SAAS,EAAC,cAAa,EAAE,UAAS,CAAC,GAAE,KAAG,IAAI,EAAE,WAAW,EAAC,YAAW,CAACA,GAAE,EAAE,OAAO,EAAE,UAAU,GAAE,KAAI,EAAE,IAAG,CAAC,GAAED,KAAE,EAAE,WAAW,OAAO,CAAC,EAAE,GAAEW,GAAE,KAAK,CAAC,CAAC,GAAErB,KAAE,EAAC,KAAI,GAAE,KAAIU,IAAE,WAAU,GAAE,iBAAgBZ,GAAC;AAAE,UAAAI,GAAE,KAAKF,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,yBAAwB;AAAC,cAAI,KAAG,EAAC,KAAI,GAAE,KAAIqB,GAAE,KAAK,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAK,EAAE,GAAEA,GAAE,KAAK,CAAC;AAAE,cAAIS,MAAG,IAAI,EAAE,SAAS,EAAC,cAAa,EAAE,UAAS,CAAC,GAAEK,MAAG,IAAI,EAAE,WAAW,EAAC,YAAW,CAACL,GAAE,EAAE,OAAO,EAAE,UAAU,GAAE,KAAI,EAAE,IAAG,CAAC,GAAED,KAAE,EAAE,WAAW,OAAO,CAACM,GAAE,GAAEK,GAAE,KAAK,CAAC,CAAC,GAAET,KAAE,EAAC,KAAI,GAAE,KAAIF,IAAE,WAAU,GAAE,iBAAgBZ,GAAC;AAAE,UAAAI,GAAE,KAAKU,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,YAAW;AAAC,cAAI,KAAG,EAAC,KAAI,GAAE,KAAIS,GAAE,KAAK,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAK,EAAE,GAAEA,GAAE,KAAK,CAAC;AAAE,cAAIc,MAAG,IAAI,EAAE,WAAW,EAAC,YAAW,EAAE,YAAW,KAAI,EAAE,IAAG,CAAC,GAAEN,KAAE,EAAE,WAAW,OAAO,CAACM,GAAE,GAAEK,GAAE,KAAK,CAAC,CAAC,GAAET,KAAE,EAAC,KAAI,GAAE,KAAIF,IAAE,WAAU,GAAE,iBAAgBZ,GAAC;AAAE,UAAAI,GAAE,KAAKU,EAAC;AAAA,QAAC,WAAS,aAAa,EAAE,YAAY,UAAQ,KAAG,EAAE,WAAW,SAAO,GAAE,MAAI,GAAE,MAAK;AAAC,cAAI,KAAG,EAAE,WAAW,EAAE,GAAE,KAAG,EAAC,KAAI,GAAE,KAAI,GAAG,WAAW,OAAOS,GAAE,KAAK,CAAC,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC;AAAE,UAAAI,GAAE,KAAK,EAAE,GAAEA,GAAE,KAAK,CAAC;AAAA,QAAC;AAAA,iBAAS,aAAa,EAAE,YAAY,CAAAA,GAAE,KAAK,EAAC,KAAI,GAAE,KAAI,EAAE,WAAW,OAAOmB,GAAE,KAAK,CAAC,CAAC,GAAE,WAAU,GAAE,iBAAgBvB,GAAC,CAAC;AAAA,iBAAU,aAAa,EAAE,KAAK,CAAAI,GAAE,KAAK,GAAG,GAAE,GAAE,GAAEJ,EAAC,CAAC;AAAA,YAAO,OAAM,MAAM,sBAAsB;AAAA,MAAC;AAAA,IAAC;AAAC,WAAOG;AAAA,EAAC;AAAC,IAAE,0BAAwB;AAAG,WAAS,GAAGN,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAEyB,GAAE,SAAS,CAAC;AAAE,MAAE,KAAK1B,GAAE,IAAI;AAAE,QAAIE,KAAEwB,GAAE,SAASzB,EAAC;AAAE,WAAOC,GAAE,KAAK,CAAC,GAAE,EAAC,KAAI,GAAE,KAAIF,GAAE,YAAW,WAAU,GAAE,iBAAgBE,GAAC;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI0B,MAAG7B,GAAE,CAAA8B,OAAG;AAAC;AAAa,MAAI,KAAGA,MAAGA,GAAE,aAAW,2BAAU;AAAC,QAAI7B,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe4B,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,4BAA0BA,GAAE,uBAAqBA,GAAE,eAAaA,GAAE,mCAAiCA,GAAE,yBAAuBA,GAAE,oCAAkCA,GAAE,0CAAwCA,GAAE,iCAA+BA,GAAE,oCAAkCA,GAAE,0BAAwBA,GAAE,cAAYA,GAAE,YAAU;AAAO,MAAI,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE;AAAE,GAAC,SAAS7B,IAAE;AAAC,IAAAA,GAAEA,GAAE,SAAO,CAAC,IAAE,UAASA,GAAEA,GAAE,aAAW,CAAC,IAAE,cAAaA,GAAEA,GAAE,uBAAqB,CAAC,IAAE,wBAAuBA,GAAEA,GAAE,sCAAoC,CAAC,IAAE,uCAAsCA,GAAEA,GAAE,4BAA0B,CAAC,IAAE,6BAA4BA,GAAEA,GAAE,cAAY,CAAC,IAAE;AAAA,EAAa,GAAG,IAAE6B,GAAE,cAAYA,GAAE,YAAU,CAAC,EAAE;AAAE,WAAS,GAAG7B,IAAE;AAAC,QAAGA,cAAa,GAAG,OAAO,QAAO,EAAE;AAAO,QAAGA,cAAa,GAAG,WAAW,QAAO,EAAE;AAAW,QAAGA,cAAa,GAAG,oBAAoB,QAAO,EAAE;AAAqB,QAAGA,cAAa,GAAG,iCAAiC,QAAO,EAAE;AAAoC,QAAGA,cAAa,GAAG,wBAAwB,QAAO,EAAE;AAA0B,QAAGA,cAAa,GAAG,YAAY,QAAO,EAAE;AAAY,UAAM,MAAM,sBAAsB;AAAA,EAAC;AAAC,EAAA6B,GAAE,cAAY;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,GAAGF,IAAE,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,IAAE,GAAG,qCAAmC,GAAG;AAAuB,WAAOE,GAAE,GAAED,IAAE,GAAE,CAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,0BAAwB;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,GAAGF,IAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,IAAE,GAAG,qCAAmC,GAAG;AAAuB,WAAOE,GAAE,EAAE,CAAC,GAAE,GAAED,EAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,oCAAkC;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAED,GAAE,QAAOE,KAAE,EAAE,MAAMF,IAAE,SAASI,IAAE;AAAC,aAAO,EAAE,MAAMA,IAAE,SAAS,GAAE;AAAC,eAAO,EAAE,WAAS;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAG,EAAE,QAAO,SAASA,IAAE;AAAC,eAAQ,IAAE,EAAE,IAAIA,IAAE,SAASI,IAAE;AAAC,eAAOA,GAAE;AAAA,MAAI,CAAC,GAAEF,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAIC,KAAEP,GAAEM,EAAC,GAAE,IAAEC,GAAE,QAAO,IAAE,EAAED,EAAC;AAAE,YAAG,MAAI,UAAQ,EAAE,KAAK,IAAI,MAAI,MAAG;AAAS,UAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,mBAAQ,IAAEC,GAAE,CAAC,GAAEJ,KAAE,EAAE,QAAO,IAAE,GAAE,IAAEA,IAAE,KAAI;AAAC,gBAAIE,KAAE,KAAK,GAAG,IAAE,CAAC;AAAE,gBAAG,EAAEA,IAAE,EAAE,CAAC,CAAC,MAAI,MAAG,UAAS;AAAA,UAAC;AAAC,iBAAOC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAE,QAAGJ,MAAG,CAACD,IAAE;AAAC,UAAI,IAAE,EAAE,IAAID,IAAE,SAASI,IAAE;AAAC,eAAO,EAAE,QAAQA,EAAC;AAAA,MAAC,CAAC,GAAE,IAAE,EAAE,OAAO,GAAE,SAASA,IAAE,GAAEE,IAAE;AAAC,eAAO,EAAE,QAAQ,GAAE,SAASC,IAAE;AAAC,YAAE,IAAIH,IAAEG,GAAE,YAAY,MAAIH,GAAEG,GAAE,YAAY,IAAED,KAAG,EAAE,QAAQC,GAAE,iBAAgB,SAAS,GAAE;AAAC,cAAE,IAAIH,IAAE,CAAC,MAAIA,GAAE,CAAC,IAAEE;AAAA,UAAE,CAAC;AAAA,QAAC,CAAC,GAAEF;AAAA,MAAC,GAAE,CAAC,CAAC;AAAE,aAAO,WAAU;AAAC,YAAIA,KAAE,KAAK,GAAG,CAAC;AAAE,eAAO,EAAEA,GAAE,YAAY;AAAA,MAAC;AAAA,IAAC,MAAM,QAAO,WAAU;AAAC,eAAQA,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAI,IAAEJ,GAAEI,EAAC,GAAEE,KAAE,EAAE;AAAO,UAAE,UAAQC,KAAE,GAAEA,KAAED,IAAEC,MAAI;AAAC,mBAAQ,IAAE,EAAEA,EAAC,GAAE,IAAE,EAAE,QAAO,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,gBAAI,IAAE,KAAK,GAAG,IAAE,CAAC;AAAE,gBAAG,EAAE,GAAE,EAAE,CAAC,CAAC,MAAI,MAAG,UAAS;AAAA,UAAC;AAAC,iBAAOH;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,EAAAyB,GAAE,iCAA+B;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,EAAE,MAAMD,IAAE,SAAS,GAAE;AAAC,aAAO,EAAE,WAAS;AAAA,IAAC,CAAC,GAAE,IAAEA,GAAE;AAAO,QAAGC,MAAG,CAAC,GAAE;AAAC,UAAIC,KAAE,EAAE,QAAQF,EAAC;AAAE,UAAGE,GAAE,WAAS,KAAG,EAAE,QAAQA,GAAE,CAAC,EAAE,eAAe,GAAE;AAAC,YAAI,IAAEA,GAAE,CAAC,GAAE,IAAE,EAAE;AAAa,eAAO,WAAU;AAAC,iBAAO,KAAK,GAAG,CAAC,EAAE,iBAAe;AAAA,QAAC;AAAA,MAAC,OAAK;AAAC,YAAIE,KAAE,EAAE,OAAOF,IAAE,SAAS,GAAEI,IAAEC,IAAE;AAAC,iBAAO,EAAED,GAAE,YAAY,IAAE,MAAG,EAAE,QAAQA,GAAE,iBAAgB,SAAS,GAAE;AAAC,cAAE,CAAC,IAAE;AAAA,UAAE,CAAC,GAAE;AAAA,QAAC,GAAE,CAAC,CAAC;AAAE,eAAO,WAAU;AAAC,cAAI,IAAE,KAAK,GAAG,CAAC;AAAE,iBAAOF,GAAE,EAAE,YAAY,MAAI;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC,MAAM,QAAO,WAAU;AAAC,QAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,iBAAQE,KAAEN,GAAE,CAAC,GAAEO,KAAED,GAAE,QAAO,IAAE,GAAE,IAAEC,IAAE,KAAI;AAAC,cAAI,IAAE,KAAK,GAAG,IAAE,CAAC;AAAE,cAAG,EAAE,GAAED,GAAE,CAAC,CAAC,MAAI,MAAG,UAAS;AAAA,QAAC;AAAC,eAAM;AAAA,MAAE;AAAC,aAAM;AAAA,IAAE;AAAA,EAAC;AAAC,EAAAuB,GAAE,0CAAwC;AAAG,MAAI,KAAG,SAAS7B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,IAAI,KAAG;AAAK,aAAOE,GAAE,UAAQ,GAAEA,GAAE,mBAAiBD,IAAEC,GAAE,iBAAe,GAAEA;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,eAAa,WAAU;AAAC,aAAO,KAAK,KAAK,KAAK,OAAO,GAAE,KAAK;AAAA,IAAO,GAAE,EAAE,UAAU,gBAAc,SAAS,GAAED,IAAE,GAAEC,IAAE;AAAC,aAAO,EAAE,QAAM,KAAK,oBAAkB,KAAK,mBAAiBD,MAAG,KAAK,UAAQ,EAAE,OAAOC,EAAC,GAAE,QAAI;AAAA,IAAE,GAAE,EAAE,UAAU,aAAW,SAAS,GAAED,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,QAAOA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,iBAAe,SAAS,GAAEA,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,sBAAqBA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,oBAAkB,SAAS,GAAEA,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,qCAAoCA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,WAAS,SAAS,GAAEA,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,YAAWA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAEA,IAAE,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,2BAA0BA,IAAE,CAAC,KAAGD,GAAE,UAAU,WAAW,KAAK,MAAK,GAAEC,IAAE,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,UAAU,GAAE6B,MAAG,SAAS9B,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,IAAI,KAAG;AAAK,aAAOE,GAAE,mBAAiB,GAAEA,GAAE,iBAAeD,IAAEC,GAAE,YAAU,GAAEA,GAAE,SAAO,CAAC,GAAEA;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,gBAAc,SAAS,GAAED,IAAE;AAAC,QAAE,QAAM,KAAK,oBAAkB,KAAK,mBAAiBA,OAAI,KAAK,cAAY,UAAQ,MAAI,KAAK,eAAa,KAAK,SAAO,EAAE;AAAA,IAAW,GAAE,EAAE,UAAU,cAAY,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,MAAM;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,UAAU;AAAA,IAAC,GAAE,EAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,oBAAoB;AAAA,IAAC,GAAE,EAAE,UAAU,wCAAsC,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,mCAAmC;AAAA,IAAC,GAAE,EAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,yBAAyB;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,cAAc,GAAE,EAAE,WAAW;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,WAAS,GAAGD,IAAE;AAAC,aAAQ,IAAE,IAAI,MAAMA,EAAC,GAAE,IAAE,GAAE,IAAEA,IAAE,IAAI,GAAE,CAAC,IAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,aAAQ,IAAE,CAAC,EAAE,GAAE,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,eAAQC,KAAED,GAAE,CAAC,GAAE,IAAE,CAAC,GAAEE,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,YAAI,IAAE,EAAEA,EAAC;AAAE,UAAE,KAAK,IAAE,MAAID,GAAE,YAAY;AAAE,iBAAQ,IAAE,GAAE,IAAEA,GAAE,gBAAgB,QAAO,KAAI;AAAC,cAAIG,KAAE,MAAIH,GAAE,gBAAgB,CAAC;AAAE,YAAE,KAAK,IAAEG,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGJ,IAAE,GAAE,GAAE;AAAC,aAAQC,KAAE,GAAEA,KAAED,GAAE,QAAOC,KAAI,KAAGA,OAAI,EAAE,UAAQ,IAAED,GAAEC,EAAC,GAAEC,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,UAAI,IAAE,EAAEA,EAAC;AAAE,UAAG,EAAE,CAAC,MAAI,KAAG,QAAM;AAAA,IAAE;AAAC,WAAM;AAAA,EAAE;AAAC,WAAS,GAAGF,IAAE,GAAE;AAAC,aAAQ,IAAE,EAAE,IAAIA,IAAE,SAASM,IAAE;AAAC,aAAO,GAAG,kBAAkB,CAACA,EAAC,GAAE,CAAC;AAAA,IAAC,CAAC,GAAEL,KAAE,GAAG,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,GAAE,SAASK,IAAE;AAAC,UAAIC,KAAE,CAAC;AAAE,aAAO,EAAE,QAAQD,IAAE,SAAS,GAAE;AAAC,YAAI,IAAE,GAAG,EAAE,WAAW;AAAE,UAAE,QAAQ,GAAE,SAAS,GAAE;AAAC,UAAAC,GAAE,CAAC,IAAE;AAAA,QAAE,CAAC;AAAA,MAAC,CAAC,GAAEA;AAAA,IAAC,CAAC,GAAEL,KAAE,GAAE,IAAE,GAAE,KAAG,GAAE,KAAI;AAAC,UAAI,IAAEA;AAAE,MAAAA,KAAE,GAAG,EAAE,MAAM;AAAE,eAAQE,KAAE,SAASE,IAAE;AAAC,iBAAQC,KAAE,EAAED,EAAC,GAAE,IAAE,GAAE,IAAEC,GAAE,QAAO,KAAI;AAAC,cAAI,IAAEA,GAAE,CAAC,EAAE,aAAY,IAAEA,GAAE,CAAC,EAAE,WAAU,IAAE,GAAG,CAAC,GAAEJ,KAAE,GAAG,GAAE,GAAEG,EAAC;AAAE,cAAGH,MAAG,EAAE,QAAQ,CAAC,KAAG,EAAE,WAAS,GAAE;AAAC,gBAAI,IAAEF,GAAEK,EAAC;AAAE,gBAAGyB,IAAG,GAAE,CAAC,MAAI,OAAG;AAAC,gBAAE,KAAK,CAAC;AAAE,uBAAQ1B,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,oBAAIG,KAAE,EAAEH,EAAC;AAAE,kBAAEC,EAAC,EAAEE,EAAC,IAAE;AAAA,cAAE;AAAA,YAAC;AAAA,UAAC,OAAK;AAAC,gBAAIK,KAAE,GAAG,kBAAkB,GAAE,IAAE,GAAE,CAAC;AAAE,YAAAX,GAAEI,EAAC,IAAEJ,GAAEI,EAAC,EAAE,OAAOO,EAAC,GAAE,EAAE,QAAQA,IAAE,SAAS,GAAE;AAAC,kBAAIC,MAAG,GAAG,EAAE,WAAW;AAAE,gBAAE,QAAQA,KAAG,SAAS,IAAG;AAAC,kBAAER,EAAC,EAAE,EAAE,IAAE;AAAA,cAAE,CAAC;AAAA,YAAC,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,CAAAF,GAAE,CAAC;AAAA,IAAC;AAAC,WAAOH;AAAA,EAAC;AAAC,EAAA4B,GAAE,oCAAkC;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,IAAI6B,IAAG9B,IAAE,EAAE,aAAYC,EAAC;AAAE,WAAO,EAAE,OAAO,CAAC,GAAE,GAAG,EAAE,QAAO,CAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,yBAAuB;AAAG,WAAS,GAAG7B,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,IAAI6B,IAAG9B,IAAE,CAAC;AAAE,MAAE,OAAO,CAAC;AAAE,QAAIE,KAAE,EAAE,QAAO,IAAE,IAAI,GAAG,GAAEF,IAAE,CAAC,GAAE,IAAE,EAAE,aAAa,GAAEI,KAAE,IAAI,GAAG,YAAY,EAAC,YAAWF,GAAC,CAAC,GAAE,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,EAAC,CAAC;AAAE,WAAO,GAAG,CAACE,IAAE,CAAC,GAAEH,EAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,mCAAiC;AAAG,WAASE,IAAG/B,IAAE,GAAE;AAAC,MAAE,UAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAIC,KAAED,GAAE,CAAC;AAAE,UAAGC,GAAE,WAAS,EAAE,QAAO;AAAC,iBAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,cAAIC,KAAE,EAAE,CAAC,GAAE,IAAED,GAAE,CAAC,GAAE,IAAEC,OAAI,KAAG,EAAE,mBAAmBA,GAAE,YAAY,MAAI;AAAO,cAAG,MAAI,MAAG,UAAS;AAAA,QAAC;AAAC,eAAM;AAAA,MAAE;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAC,EAAA2B,GAAE,eAAaE;AAAG,WAAS,GAAG/B,IAAE,GAAE;AAAC,WAAOA,GAAE,SAAO,EAAE,UAAQ,EAAE,MAAMA,IAAE,SAAS,GAAEC,IAAE;AAAC,UAAI,IAAE,EAAEA,EAAC;AAAE,aAAO,MAAI,KAAG,EAAE,mBAAmB,EAAE,YAAY;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,uBAAqB;AAAG,WAAS,GAAG7B,IAAE;AAAC,WAAO,EAAE,MAAMA,IAAE,SAAS,GAAE;AAAC,aAAO,EAAE,MAAM,GAAE,SAAS,GAAE;AAAC,eAAO,EAAE,MAAM,GAAE,SAASC,IAAE;AAAC,iBAAO,EAAE,QAAQA,GAAE,eAAe;AAAA,QAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,EAAA4B,GAAE,4BAA0B;AAAE,CAAC;AAAE,IAAI,KAAG9B,GAAE,CAAAiC,OAAG;AAAC;AAAa,MAAI,KAAGA,MAAGA,GAAE,aAAW,2BAAU;AAAC,QAAIhC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe+B,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,qCAAmCA,GAAE,oCAAkCA,GAAE,sBAAoBA,GAAE,oBAAkBA,GAAE,2CAAyCA,GAAE,6BAA2BA,GAAE,uBAAqBA,GAAE,0BAAwBA,GAAE,2BAAyBA,GAAE,kCAAgCA,GAAE,gCAA8BA,GAAE,kCAAgCA,GAAE,kBAAgB;AAAO,MAAI,IAAE,EAAE,GAAEC,KAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAGL,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAG5B,IAAE,GAAE,GAAEC,IAAE,GAAE;AAAC,QAAIC,KAAE,EAAE,IAAIF,IAAE,SAAS,GAAE;AAAC,aAAO,GAAG,GAAEC,EAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAID,IAAE,SAAS,GAAE;AAAC,aAAO,GAAG,GAAE,GAAEC,EAAC;AAAA,IAAC,CAAC,GAAE,IAAE,CAAC,GAAEG,KAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAA6B,GAAE,MAAM,GAAEA,GAAE,OAAO,MAAI,IAAEA,GAAE,IAAIjC,IAAE,SAAS,GAAE;AAAC,aAAOkC,IAAG,GAAEjC,EAAC;AAAA,IAAC,CAAC,GAAEG,KAAE6B,GAAE,IAAIjC,IAAE,SAAS,GAAE;AAAC,aAAOmC,IAAG,GAAE,GAAElC,EAAC;AAAA,IAAC,CAAC,GAAE,IAAEmC,IAAGpC,IAAE,GAAEC,EAAC;AAAG,QAAIK,KAAE,GAAGN,IAAE,GAAEC,EAAC,GAAEM,KAAE0B,GAAE,IAAIjC,IAAE,SAAS,GAAE;AAAC,aAAO,GAAG,GAAEC,EAAC;AAAA,IAAC,CAAC,GAAE,IAAEgC,GAAE,IAAIjC,IAAE,SAAS,GAAE;AAAC,aAAO,GAAG,GAAEA,IAAE,GAAEC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQC,GAAE,OAAO,GAAE,GAAE,GAAEE,IAAEE,IAAEC,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,EAAAyB,GAAE,kBAAgB;AAAG,WAAS,GAAGhC,IAAE,GAAE;AAAC,QAAI,IAAE,IAAI;AAAG,IAAAA,GAAE,OAAO,CAAC;AAAE,QAAIC,KAAE,EAAE,gBAAe,IAAE,EAAE,QAAQA,IAAE,EAAE,GAAEC,KAAE,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,aAAO,EAAE,SAAO;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,OAAOA,EAAC,GAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,yBAAyBJ,IAAE,CAAC,GAAEM,KAAE,GAAG,qBAAqBF,EAAC,GAAEG,KAAE,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,uBAAsB,UAASP,GAAE,MAAK,SAAQM,IAAE,YAAWF,GAAE,IAAG,GAAE,IAAEiC,IAAGjC,EAAC;AAAE,aAAO,MAAIG,GAAE,YAAU,IAAGA;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGP,IAAE;AAAC,WAAO,GAAG,qBAAqBA,EAAC,IAAE,QAAMA,GAAE,MAAI,QAAMqC,IAAGrC,EAAC;AAAA,EAAC;AAAC,EAAAgC,GAAE,kCAAgC;AAAG,WAASK,IAAGrC,IAAE;AAAC,WAAOA,cAAa,GAAG,WAASA,GAAE,aAAa,OAAKA,cAAa,GAAG,cAAYA,GAAE,kBAAgB;AAAA,EAAE;AAAC,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,UAAI,IAAEA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAK,aAAO,EAAE,iBAAe,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,cAAY,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,wCAAsC,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,EAAAgC,GAAE,gCAA8B;AAAG,WAAS,GAAGhC,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,CAAC,GAAEC,KAAE+B,GAAE,OAAO,GAAE,SAAS,GAAE7B,IAAE;AAAC,aAAOA,GAAE,SAAOJ,GAAE,OAAK,IAAE,IAAE;AAAA,IAAC,GAAE,CAAC;AAAE,QAAGE,KAAE,GAAE;AAAC,UAAI,IAAED,GAAE,4BAA4B,EAAC,cAAaD,IAAE,aAAY,EAAC,CAAC;AAAE,QAAE,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,qBAAoB,UAASA,GAAE,KAAI,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,EAAAgC,GAAE,kCAAgC;AAAG,WAAS,GAAGhC,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC,GAAE;AAAE,WAAO,EAAE,SAAS,GAAED,EAAC,MAAI,IAAE,oCAAkCA,KAAE,+CAA6C,IAAE,wDAAuDC,GAAE,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,uBAAsB,UAASD,GAAC,CAAC,IAAGC;AAAA,EAAC;AAAC,EAAA+B,GAAE,2BAAyB;AAAG,WAAS,GAAGhC,IAAE,GAAE,GAAEC,IAAE;AAAC,IAAAA,OAAI,WAASA,KAAE,CAAC;AAAG,QAAI,IAAE,CAAC,GAAEC,KAAE,GAAG,EAAE,UAAU;AAAE,QAAG,EAAE,QAAQA,EAAC,EAAE,QAAM,CAAC;AAAE,QAAI,IAAEF,GAAE,MAAK,IAAE,EAAE,SAASE,IAAEF,EAAC;AAAE,SAAG,EAAE,KAAK,EAAC,SAAQ,EAAE,wBAAwB,EAAC,cAAaA,IAAE,mBAAkBC,GAAC,CAAC,GAAE,MAAK,GAAG,0BAA0B,gBAAe,UAAS,EAAC,CAAC;AAAE,QAAIG,KAAE,EAAE,WAAWF,IAAED,GAAE,OAAO,CAACD,EAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAII,IAAE,SAASE,IAAE;AAAC,UAAIC,KAAE,EAAE,SAASN,EAAC;AAAE,aAAOM,GAAE,KAAKD,EAAC,GAAE,GAAGN,IAAEM,IAAE,GAAEC,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAA,EAAC;AAAC,EAAAyB,GAAE,0BAAwB;AAAG,WAAS,GAAGhC,IAAE;AAAC,QAAI,IAAE,CAAC;AAAE,QAAG,EAAE,QAAQA,EAAC,EAAE,QAAO;AAAE,QAAI,IAAE,EAAE,MAAMA,EAAC;AAAE,QAAG,aAAa,GAAG,YAAY,GAAE,KAAK,EAAE,cAAc;AAAA,aAAU,aAAa,GAAG,eAAa,aAAa,GAAG,UAAQ,aAAa,GAAG,uBAAqB,aAAa,GAAG,oCAAkC,aAAa,GAAG,2BAAyB,aAAa,GAAG,WAAW,KAAE,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC;AAAA,aAAU,aAAa,GAAG,YAAY,KAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAW,SAAS,GAAE;AAAC,aAAO,GAAG,EAAE,UAAU;AAAA,IAAC,CAAC,CAAC;AAAA,aAAU,EAAE,aAAa,GAAG,UAAU,OAAM,MAAM,sBAAsB;AAAE,QAAIC,KAAE,GAAG,eAAe,CAAC,GAAE,IAAED,GAAE,SAAO;AAAE,QAAGC,MAAG,GAAE;AAAC,UAAIC,KAAE,EAAE,KAAKF,EAAC;AAAE,aAAO,EAAE,OAAO,GAAGE,EAAC,CAAC;AAAA,IAAC,MAAM,QAAO;AAAA,EAAC;AAAC,EAAA8B,GAAE,uBAAqB;AAAG,MAAI,KAAG,SAAShC,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,UAAI,IAAEA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAK,aAAO,EAAE,eAAa,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,aAAa,KAAK,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,WAASkC,IAAGlC,IAAE,GAAE;AAAC,QAAI,IAAE,IAAI;AAAG,IAAAA,GAAE,OAAO,CAAC;AAAE,QAAIC,KAAE,EAAE,cAAa,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE,GAAE;AAAC,UAAI,IAAE,EAAE,UAAU,EAAE,UAAU,GAAEE,KAAE,EAAE,IAAI,GAAE,SAAS,GAAEE,IAAE;AAAC,YAAIC,KAAE,GAAG,wBAAwB,CAAC,CAAC,GAAE,CAAC,GAAE,MAAK,CAAC;AAAE,eAAO,EAAE,QAAQA,EAAC,IAAE,EAAC,SAAQ,EAAE,2BAA2B,EAAC,cAAaP,IAAE,aAAY,GAAE,gBAAeM,GAAC,CAAC,GAAE,MAAK,GAAG,0BAA0B,qBAAoB,UAASN,GAAE,MAAK,YAAW,EAAE,KAAI,aAAYM,KAAE,EAAC,IAAE;AAAA,MAAI,CAAC;AAAE,aAAOJ,GAAE,OAAO,EAAE,QAAQE,EAAC,CAAC;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,EAAA4B,GAAE,6BAA2BE;AAAG,WAASC,IAAGnC,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,IAAI;AAAG,IAAAD,GAAE,OAAOC,EAAC;AAAE,QAAI,IAAEA,GAAE;AAAa,QAAEgC,GAAE,OAAO,GAAE,SAAS,GAAE;AAAC,aAAO,EAAE,sBAAoB;AAAA,IAAE,CAAC;AAAE,QAAI/B,KAAE,EAAE,OAAO,GAAE,SAAS,GAAE,GAAE;AAAC,UAAIE,KAAE,EAAE,KAAI,IAAE,EAAE,gBAAc,GAAEE,KAAE,GAAG,uBAAuBF,IAAEJ,IAAE,GAAE,CAAC,GAAEO,KAAE,GAAGD,IAAE,GAAEN,IAAE,CAAC,GAAE,IAAEsC,IAAGhC,IAAE,GAAEN,IAAE,CAAC;AAAE,aAAO,EAAE,OAAOO,IAAE,CAAC;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAOL;AAAA,EAAC;AAAC,EAAA8B,GAAE,2CAAyCG;AAAG,MAAI,KAAG,SAASnC,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,IAAG;AAAC,UAAI,IAAEA,OAAI,QAAMA,GAAE,MAAM,MAAK,SAAS,KAAG;AAAK,aAAO,EAAE,iBAAe,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO,EAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,wCAAsC,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE,EAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,eAAe,KAAK,CAAC;AAAA,IAAC,GAAE;AAAA,EAAC,EAAE,GAAG,WAAW;AAAE,EAAAgC,GAAE,oBAAkB;AAAG,WAAS,GAAGhC,IAAE,GAAE;AAAC,QAAI,IAAE,IAAI;AAAG,IAAAA,GAAE,OAAO,CAAC;AAAE,QAAIC,KAAE,EAAE,cAAa,IAAE,EAAE,OAAOA,IAAE,SAASC,IAAE,GAAE;AAAC,aAAO,EAAE,WAAW,SAAO,OAAKA,GAAE,KAAK,EAAC,SAAQ,EAAE,8BAA8B,EAAC,cAAaF,IAAE,aAAY,EAAC,CAAC,GAAE,MAAK,GAAG,0BAA0B,eAAc,UAASA,GAAE,MAAK,YAAW,EAAE,IAAG,CAAC,GAAEE;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,EAAA8B,GAAE,sBAAoB;AAAG,WAASI,IAAGpC,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC;AAAE,WAAOgC,GAAE,QAAQjC,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE,IAAI;AAAG,QAAE,OAAOA,EAAC;AAAE,UAAI,IAAEA,GAAE;AAAe,MAAA+B,GAAE,QAAQ,GAAE,SAAS,GAAE;AAAC,YAAI7B,KAAE,GAAG,YAAY,CAAC,GAAE,IAAE,EAAE,gBAAc,GAAEE,KAAE,EAAE,KAAIC,KAAE,GAAG,iCAAiCD,IAAE,GAAEF,IAAE,CAAC,GAAE,IAAEG,GAAE,CAAC;AAAE,YAAG0B,GAAE,QAAQA,GAAE,QAAQ,CAAC,CAAC,GAAE;AAAC,cAAI,IAAE,EAAE,0BAA0B,EAAC,cAAa,GAAE,YAAW,EAAC,CAAC;AAAE,UAAAhC,GAAE,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,wBAAuB,UAAS,EAAE,KAAI,CAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAEA;AAAA,EAAC;AAAC,EAAA+B,GAAE,oCAAkCI;AAAG,WAAS,GAAGpC,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,CAAC,GAAEC,KAAE+B,GAAE,OAAOjC,IAAE,SAAS,GAAEI,IAAE,GAAE;AAAC,aAAO,EAAE,WAAW,CAAC,EAAE,sBAAoB,QAAI6B,GAAE,QAAQ7B,IAAE,SAASE,IAAE;AAAC,YAAIC,KAAE,CAAC,CAAC;AAAE,QAAA0B,GAAE,QAAQjC,IAAE,SAAS,GAAE,GAAE;AAAC,gBAAI,KAAG,GAAG,aAAa,GAAEM,EAAC,KAAG,EAAE,WAAW,CAAC,EAAE,sBAAoB,QAAIC,GAAE,KAAK,CAAC;AAAA,QAAC,CAAC,GAAEA,GAAE,SAAO,KAAG,CAAC,GAAG,aAAa,GAAED,EAAC,MAAI,EAAE,KAAKA,EAAC,GAAE,EAAE,KAAK,EAAC,MAAKC,IAAE,MAAKD,GAAC,CAAC;AAAA,MAAE,CAAC,GAAE;AAAA,IAAC,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAIJ,IAAE,SAAS,GAAE;AAAC,UAAIE,KAAE6B,GAAE,IAAI,EAAE,MAAK,SAAS3B,IAAE;AAAC,eAAOA,KAAE;AAAA,MAAC,CAAC,GAAE,IAAEL,GAAE,+BAA+B,EAAC,cAAa,GAAE,aAAY,GAAE,kBAAiBG,IAAE,YAAW,EAAE,KAAI,CAAC;AAAE,aAAM,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,gBAAe,UAAS,EAAE,MAAK,YAAW,EAAE,KAAI,cAAa,CAAC,EAAE,IAAI,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,WAASkC,IAAGtC,IAAE,GAAE,GAAEC,IAAE;AAAC,QAAI,IAAE,CAAC,GAAEC,KAAE+B,GAAE,OAAOjC,IAAE,SAAS,GAAE,GAAEI,IAAE;AAAC,UAAI,IAAE6B,GAAE,IAAI,GAAE,SAAS3B,IAAE;AAAC,eAAM,EAAC,KAAIF,IAAE,MAAKE,GAAC;AAAA,MAAC,CAAC;AAAE,aAAO,EAAE,OAAO,CAAC;AAAA,IAAC,GAAE,CAAC,CAAC;AAAE,WAAO2B,GAAE,QAAQ/B,IAAE,SAAS,GAAE;AAAC,UAAI,IAAE,EAAE,WAAW,EAAE,GAAG;AAAE,UAAG,EAAE,sBAAoB,MAAG;AAAC,YAAIE,KAAE,EAAE,KAAI,IAAE,EAAE,MAAKE,KAAE2B,GAAE,QAAQ/B,IAAE,SAAS,GAAE;AAAC,iBAAO,EAAE,WAAW,EAAE,GAAG,EAAE,sBAAoB,QAAI,EAAE,MAAIE,MAAG,GAAG,qBAAqB,EAAE,MAAK,CAAC;AAAA,QAAC,CAAC,GAAEG,KAAE0B,GAAE,IAAI3B,IAAE,SAAS,GAAE;AAAC,cAAI,IAAE,CAAC,EAAE,MAAI,GAAEF,KAAE,CAAC,GAAE,IAAE,EAAE,QAAM,IAAE,KAAG,EAAE,KAAI,IAAEH,GAAE,qCAAqC,EAAC,cAAa,GAAE,aAAY,GAAE,kBAAiB,GAAE,YAAW,EAAE,KAAI,CAAC;AAAE,iBAAM,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,uBAAsB,UAAS,EAAE,MAAK,YAAW,GAAE,cAAa,EAAC;AAAA,QAAC,CAAC;AAAE,YAAE,EAAE,OAAOM,EAAC;AAAA,MAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC,EAAAyB,GAAE,qCAAmCM;AAAG,WAAS,GAAGtC,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,CAAC,GAAE,IAAEgC,GAAE,IAAI,GAAE,SAAS/B,IAAE;AAAC,aAAOA,GAAE;AAAA,IAAI,CAAC;AAAE,WAAO+B,GAAE,QAAQjC,IAAE,SAASE,IAAE;AAAC,UAAI,IAAEA,GAAE;AAAK,UAAG+B,GAAE,SAAS,GAAE,CAAC,GAAE;AAAC,YAAI,IAAE,EAAE,4BAA4B/B,EAAC;AAAE,QAAAD,GAAE,KAAK,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,iCAAgC,UAAS,EAAC,CAAC;AAAA,MAAC;AAAA,IAAC,CAAC,GAAEA;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGF,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,kBAAgB,GAAG,iBAAe;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,WAAS,GAAGC,IAAE;AAAC,IAAAA,KAAE,GAAG,SAASA,IAAE,EAAC,gBAAe,GAAG,oCAAmC,CAAC;AAAE,QAAI,IAAE,CAAC;AAAE,WAAO,GAAG,QAAQA,GAAE,OAAM,SAAS,GAAE;AAAC,QAAE,EAAE,IAAI,IAAE;AAAA,IAAC,CAAC,GAAE,GAAG,eAAe,GAAEA,GAAE,cAAc;AAAA,EAAC;AAAC,KAAG,iBAAe;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAOA,KAAE,GAAG,SAASA,IAAE,EAAC,gBAAe,GAAG,qCAAoC,CAAC,GAAE,GAAG,gBAAgBA,GAAE,OAAMA,GAAE,cAAaA,GAAE,YAAWA,GAAE,gBAAeA,GAAE,WAAW;AAAA,EAAC;AAAC,KAAG,kBAAgB;AAAE,CAAC;AAAE,IAAIuC,MAAGxC,GAAE,QAAI;AAAC;AAAa,MAAIyC,MAAG,MAAI,GAAG,aAAW,2BAAU;AAAC,QAAIxC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,qBAAmB,GAAG,6BAA2B,GAAG,uBAAqB,GAAG,2BAAyB,GAAG,yBAAuB;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,4BAA2B,KAAG,wBAAuB,KAAG,sBAAqB,KAAG,8BAA6B,KAAG,CAAC,IAAG,IAAG,IAAG,EAAE;AAAE,SAAO,OAAO,EAAE;AAAE,WAAS,GAAGD,IAAE;AAAC,WAAO,GAAG,SAAS,IAAGA,GAAE,IAAI;AAAA,EAAC;AAAC,KAAG,yBAAuB;AAAG,MAAI,KAAG,SAASA,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,KAAK,aAAYC,KAAEF,GAAE,KAAK,MAAK,CAAC,KAAG;AAAK,aAAOE,GAAE,QAAMD,IAAEC,GAAE,iBAAe,CAAC,GAAE,OAAO,eAAeA,IAAE,EAAE,SAAS,GAAE,MAAM,qBAAmB,MAAM,kBAAkBA,IAAEA,GAAE,WAAW,GAAEA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,KAAK,GAAE,KAAG,SAASF,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAOC,GAAE,gBAAc,GAAEA,GAAE,OAAK,IAAGA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,KAAG,2BAAyB;AAAG,MAAI,KAAG,SAASF,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAOC,GAAE,gBAAc,GAAEA,GAAE,OAAK,IAAGA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,KAAG,uBAAqB;AAAG,MAAI,KAAG,SAASF,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAO,EAAE,OAAK,IAAG;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,KAAG,6BAA2B;AAAG,MAAI,KAAG,SAASD,IAAE;AAAC,IAAAwC,IAAG,GAAExC,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE,GAAE;AAAC,UAAIC,KAAEF,GAAE,KAAK,MAAK,GAAEC,EAAC,KAAG;AAAK,aAAOC,GAAE,gBAAc,GAAEA,GAAE,OAAK,IAAGA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,KAAG,qBAAmB;AAAE,CAAC;AAAE,IAAI,KAAGH,GAAE,CAAA0C,OAAG;AAAC;AAAa,SAAO,eAAeA,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,8BAA4BA,GAAE,cAAYA,GAAE,0BAAwBA,GAAE,6BAA2BA,GAAE,iBAAe;AAAO,MAAI,KAAG,GAAG,GAAEC,MAAG,EAAE,GAAE,KAAGH,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,EAAAE,GAAE,iBAAe,CAAC;AAAE,EAAAA,GAAE,6BAA2B;AAA0B,WAAS,GAAGzC,IAAE;AAAC,SAAK,OAAKyC,GAAE,4BAA2B,KAAK,UAAQzC;AAAA,EAAC;AAAC,EAAAyC,GAAE,0BAAwB;AAAG,KAAG,YAAU,MAAM;AAAU,MAAI,KAAG,WAAU;AAAC,aAASzC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,WAAK,mBAAiB,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,kBAAgB0C,IAAG,IAAI,GAAE,iBAAiB,IAAE,EAAE,kBAAgB,GAAG,sBAAsB,iBAAgB,KAAK,oBAAkB,KAAK,8BAA4BC;AAAA,IAAG,GAAE3C,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,UAAI,IAAE,GAAG,oBAAoB,GAAE,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,aAAO,EAAE,uBAAqB,MAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,mCAAiC,SAAS,GAAE;AAAC,aAAM;AAAA,IAAE,GAAEA,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAEC,IAAE,GAAE;AAAC,eAAQC,KAAE,MAAK,IAAE,KAAK,oBAAoB,GAAE,IAAE,KAAK,iBAAiB,GAAEE,KAAE,CAAC,GAAE,IAAE,OAAGE,KAAE,KAAK,GAAG,CAAC,GAAEC,KAAE,KAAK,GAAG,CAAC,GAAE,IAAE,WAAU;AAAC,YAAI,IAAEL,GAAE,GAAG,CAAC,GAAE,IAAEA,GAAE,qBAAqB,0BAA0B,EAAC,UAAS,GAAE,QAAOI,IAAE,UAAS,GAAE,UAASJ,GAAE,oBAAoB,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,yBAAyB,GAAEI,IAAEJ,GAAE,GAAG,CAAC,CAAC;AAAE,UAAE,iBAAewC,IAAG,UAAUtC,EAAC,GAAEF,GAAE,WAAW,CAAC;AAAA,MAAC,GAAE,CAAC,IAAG,KAAG,KAAK,aAAaK,IAAE,CAAC,GAAE;AAAC,UAAE;AAAE;AAAA,MAAM,WAASN,GAAE,KAAK,IAAI,GAAE;AAAC,UAAE,GAAE,EAAE,MAAM,MAAK,CAAC;AAAE;AAAA,MAAM,MAAM,MAAK,aAAaM,IAAE,CAAC,IAAE,IAAE,QAAIA,KAAE,KAAK,WAAW,GAAE,KAAK,kBAAkBA,IAAEH,EAAC;AAAG,WAAK,iBAAiB,CAAC;AAAA,IAAC,GAAEJ,GAAE,UAAU,oCAAkC,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAM,EAAEA,OAAI,SAAI,MAAI,UAAQ,MAAI,UAAQ,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,CAAC,KAAG,KAAK,eAAe,KAAG,KAAK,yBAAyB,GAAE,KAAK,4BAA4B,GAAE,CAAC,CAAC;AAAA,IAAE,GAAED,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,sBAAsB,GAAE,CAAC,GAAE,IAAE,KAAK,0BAA0BA,EAAC;AAAE,aAAO;AAAA,IAAC,GAAED,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAE;AAAC,UAAG,KAAK,mCAAmC,GAAE,CAAC,GAAE;AAAC,YAAIC,KAAE,KAAK,iBAAiB,CAAC;AAAE,eAAOA;AAAA,MAAC;AAAC,UAAG,KAAK,kCAAkC,CAAC,GAAE;AAAC,YAAI,IAAE,KAAK,WAAW;AAAE,eAAO,KAAK,aAAa,GAAE;AAAA,MAAC;AAAC,YAAM,IAAI,GAAG,eAAe;AAAA,IAAC,GAAED,GAAE,UAAU,2BAAyB,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,mCAAmC,GAAE,CAAC,KAAG,KAAK,kCAAkC,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,qCAAmC,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE;AAAK,UAAG,CAAC,KAAK,iCAAiC,CAAC,KAAGyC,IAAG,QAAQ,CAAC,EAAE,QAAM;AAAG,UAAI,IAAE,KAAK,GAAG,CAAC,GAAExC,KAAEwC,IAAG,KAAK,GAAE,SAAS,GAAE;AAAC,eAAOzC,GAAE,aAAa,GAAE,CAAC;AAAA,MAAC,CAAC,MAAI;AAAO,aAAOC;AAAA,IAAC,GAAEF,GAAE,UAAU,oCAAkC,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,CAAC;AAAE,aAAO;AAAA,IAAC,GAAEA,GAAE,UAAU,2BAAyB,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,iBAAiB,GAAEC,KAAE,KAAK,0BAA0B,CAAC;AAAE,aAAOyC,IAAG,SAASzC,IAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,sBAAoB,WAAU;AAAC,eAAQ,IAAE,KAAK,iBAAiB,GAAE,IAAE,KAAK,GAAG,CAAC,GAAEC,KAAE,OAAI;AAAC,YAAI,IAAE,EAAE;AAAU,YAAGyC,IAAG,SAAS,GAAE,CAAC,EAAE,QAAO;AAAE,YAAE,KAAK,GAAGzC,EAAC,GAAEA;AAAA,MAAG;AAAA,IAAC,GAAED,GAAE,UAAU,mBAAiB,WAAU;AAAC,UAAG,KAAK,WAAW,WAAS,EAAE,QAAOyC,GAAE;AAAe,UAAI,IAAE,KAAK,6BAA6B,GAAE,IAAE,KAAK,mCAAmC,GAAExC,KAAE,KAAK,iCAAiC;AAAE,aAAM,EAAC,UAAS,KAAK,wBAAwB,CAAC,GAAE,kBAAiB,GAAE,QAAO,KAAK,wBAAwBA,EAAC,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,0BAAwB,WAAU;AAAC,UAAI,IAAE,MAAK,IAAE,KAAK,YAAWC,KAAE,KAAK;AAAsB,aAAOyC,IAAG,IAAI,GAAE,SAAS,GAAExC,IAAE;AAAC,eAAOA,OAAI,IAAEuC,GAAE,iBAAe,EAAC,UAAS,EAAE,wBAAwB,CAAC,GAAE,kBAAiBxC,GAAEC,EAAC,GAAE,QAAO,EAAE,wBAAwB,EAAEA,KAAE,CAAC,CAAC,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,mBAAiB,WAAU;AAAC,UAAI,IAAE,MAAK,IAAE0C,IAAG,IAAI,KAAK,wBAAwB,GAAE,SAASzC,IAAE;AAAC,eAAO,EAAE,0BAA0BA,EAAC;AAAA,MAAC,CAAC;AAAE,aAAOyC,IAAG,QAAQ,CAAC;AAAA,IAAC,GAAE1C,GAAE,UAAU,4BAA0B,SAAS,GAAE;AAAC,UAAG,MAAIyC,GAAE,eAAe,QAAM,CAAC,GAAG,GAAG;AAAE,UAAI,IAAE,EAAE,WAAS,EAAE,mBAAiB,GAAG,KAAG,EAAE;AAAO,aAAO,KAAK,cAAc,CAAC;AAAA,IAAC,GAAEzC,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,aAAa,GAAE,GAAG,GAAG,KAAG,EAAE,KAAK,CAAC,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE;AAAC,eAAQ,IAAE,CAAC,GAAEC,KAAE,KAAK,GAAG,CAAC,GAAE,KAAK,aAAaA,IAAE,CAAC,MAAI,QAAI,CAAAA,KAAE,KAAK,WAAW,GAAE,KAAK,kBAAkBA,IAAE,CAAC;AAAE,aAAOyC,IAAG,UAAU,CAAC;AAAA,IAAC,GAAE1C,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE,GAAE;AAAA,IAAC,GAAEF,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,0BAA0B,GAAE,IAAEyC,IAAG,SAAS,KAAK,qBAAqB,GAAExC,KAAE,EAAC,WAAUD,IAAE,iBAAgB,GAAE,SAAQ,GAAE,mBAAkB,EAAC;AAAE,aAAOC;AAAA,IAAC,GAAEF,GAAE,UAAU,4BAA0B,WAAU;AAAC,UAAI,IAAE;AAAK,aAAO0C,IAAG,IAAI,KAAK,YAAW,SAAS,GAAE;AAAC,eAAO,EAAE,wBAAwB,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAE1C;AAAA,EAAC,EAAE;AAAE,EAAAyC,GAAE,cAAY;AAAG,WAASE,IAAG3C,IAAE,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,4BAA4BD,IAAE,CAAC,GAAEG,KAAE,KAAK,iBAAiB,CAAC;AAAE,QAAGA,OAAI,QAAO;AAAC,UAAI,IAAE,KAAK,oBAAoB,GAAEE,KAAE,KAAK,mBAAmB,EAAE,CAAC,GAAEC,KAAE,IAAIL,GAAEI,IAAE,CAAC;AAAE,MAAAF,KAAEG,GAAE,aAAa,GAAE,KAAK,iBAAiB,CAAC,IAAEH;AAAA,IAAC;AAAC,QAAI,IAAEA,GAAE,OAAM,IAAEA,GAAE,YAAW,IAAEA,GAAE;AAAY,SAAK,WAAW,WAAS,KAAG,KAAG,MAAI,WAAS,IAAE,GAAG,KAAI,IAAE,IAAG,KAAK,kCAAkC,GAAE,GAAE,CAAC,KAAG,KAAK,wBAAwBJ,IAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,EAAAyC,GAAE,8BAA4BE;AAAE,CAAC;AAAE,IAAI,KAAG5C,GAAE,OAAG;AAAC;AAAa,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,8BAA4B,EAAE,uBAAqB,EAAE,eAAa,EAAE,mBAAiB,EAAE,WAAS,EAAE,aAAW,EAAE,SAAO,EAAE,mBAAiB,EAAE,oBAAkB,EAAE,0BAAwB,EAAE,uBAAqB;AAAO,IAAE,uBAAqB;AAAE,IAAE,0BAAwB;AAAE,IAAE,oBAAkB;AAAG,IAAE,mBAAiB;AAAE,IAAE,SAAO,KAAG,EAAE;AAAwB,IAAE,aAAW,KAAG,EAAE;AAAwB,IAAE,WAAS,KAAG,EAAE;AAAwB,IAAE,mBAAiB,KAAG,EAAE;AAAwB,IAAE,eAAa,KAAG,EAAE;AAAwB,IAAE,uBAAqB,KAAG,EAAE;AAAwB,WAAS,GAAGC,IAAE,GAAE,GAAE;AAAC,WAAO,IAAE,IAAEA;AAAA,EAAC;AAAC,IAAE,8BAA4B;AAAG,MAAI,KAAG,KAAG,EAAE;AAAgB,CAAC;AAAE,IAAI4C,MAAG7C,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,aAAW;AAAO,MAAI,KAAG6B,IAAG,GAAE,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAAS5B,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,iBAAe,SAAS,GAAE;AAAC,WAAK,uBAAqB,GAAG,IAAI,GAAE,sBAAsB,IAAE,EAAE,uBAAqB,GAAG,sBAAsB,sBAAqB,KAAK,eAAa,GAAG,IAAI,GAAE,cAAc,IAAE,EAAE,eAAa,GAAG,sBAAsB,cAAa,KAAK,sBAAoB,GAAG,qBAAqB,IAAE,oBAAI,QAAI,CAAC,GAAE,GAAG,qBAAqB,KAAG,KAAK,qBAAmB,KAAK,kBAAiB,KAAK,iBAAe,KAAK,2BAAyB,KAAK,qBAAmB,KAAK,kBAAiB,KAAK,iBAAe,KAAK;AAAA,IAAkB,GAAEA,GAAE,UAAU,+BAA6B,SAAS,GAAE;AAAC,UAAI,IAAE;AAAK,SAAG,QAAQ,GAAE,SAASC,IAAE;AAAC,UAAE,WAAWA,GAAE,OAAK,mBAAkB,WAAU;AAAC,cAAI,IAAE,GAAG,eAAeA,EAAC,GAAEC,KAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,QAAOE,KAAE,EAAE,qBAAoB,IAAE,EAAE,kCAAiCE,KAAE,EAAE;AAAwB,aAAG,QAAQJ,IAAE,SAASK,IAAE;AAAC,gBAAI,IAAEA,GAAE,QAAM,IAAE,KAAGA,GAAE;AAAI,cAAE,WAAW,KAAG,GAAG,qBAAqBA,EAAC,IAAE,GAAE,WAAU;AAAC,kBAAI,IAAE,GAAG,wBAAwBA,GAAE,KAAIN,IAAEM,GAAE,gBAAc,EAAE,cAAaA,GAAE,eAAc,EAAE,sBAAqB,EAAE,+BAA+B,GAAE,IAAE,GAAG,4BAA4B,EAAE,oBAAoBN,GAAE,IAAI,GAAE,GAAG,QAAOM,GAAE,GAAG;AAAE,gBAAE,eAAe,GAAE,CAAC;AAAA,YAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQ,GAAE,SAASA,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,UAAS,GAAG,UAAU,YAAWA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQ,GAAE,SAASA,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,YAAW,GAAG,UAAU,QAAOA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQH,IAAE,SAASG,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,kBAAiB,GAAG,UAAU,sBAAqBA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQ,GAAE,SAASA,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,sBAAqB,GAAG,UAAU,qCAAoCA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,QAAQD,IAAE,SAASC,IAAE;AAAC,cAAE,qBAAqBN,IAAEM,GAAE,KAAI,GAAG,cAAa,GAAG,UAAU,2BAA0BA,GAAE,cAAa,GAAG,qBAAqBA,EAAC,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEP,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE,GAAE;AAAC,UAAI,IAAE;AAAK,WAAK,WAAW,KAAG,KAAG,MAAI,IAAE,KAAG,IAAG,WAAU;AAAC,YAAIE,KAAE,GAAG,kCAAkC,GAAE,GAAEF,MAAG,EAAE,cAAa,EAAE,sBAAqB,GAAE,EAAE,2BAA2B,GAAE,IAAE,GAAG,4BAA4B,EAAE,oBAAoB,EAAE,IAAI,GAAED,IAAE,CAAC;AAAE,UAAE,eAAe,GAAEG,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEJ,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,GAAG,wCAAwC,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,kCAAgC,SAAS,GAAE,GAAEC,IAAE,GAAE;AAAC,aAAO,GAAG,+BAA+B,GAAE,GAAEA,IAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,6BAA6B;AAAE,aAAO,GAAG,4BAA4BA,IAAE,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,qBAAmB,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,aAAO,KAAK,oBAAoB,IAAI,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,aAAO,KAAK,oBAAoB,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,iBAAe,SAAS,GAAE,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,yBAAuB,SAAS,GAAE,GAAE;AAAC,WAAK,oBAAoB,IAAI,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAE;AAAC,WAAK,oBAAoB,CAAC,IAAE;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,aAAW;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,uBAAqB,GAAG,mBAAiB,GAAG,sBAAoB,GAAG,4BAA0B;AAAO,WAAS,GAAGC,IAAE,GAAE;AAAC,UAAMA,GAAE,WAAW,MAAI,QAAIA,GAAE,cAAY,EAAE,aAAYA,GAAE,YAAU,EAAE,aAAWA,GAAE,YAAU,EAAE,cAAYA,GAAE,YAAU,EAAE;AAAA,EAAU;AAAC,KAAG,4BAA0B;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,UAAMA,GAAE,WAAW,MAAI,QAAIA,GAAE,cAAY,EAAE,aAAYA,GAAE,cAAY,EAAE,aAAYA,GAAE,YAAU,EAAE,WAAUA,GAAE,YAAU,EAAE,WAAUA,GAAE,YAAU,EAAE,WAAUA,GAAE,UAAQ,EAAE,WAASA,GAAE,YAAU,EAAE,cAAYA,GAAE,YAAU,EAAE,WAAUA,GAAE,YAAU,EAAE,WAAUA,GAAE,UAAQ,EAAE;AAAA,EAAQ;AAAC,KAAG,sBAAoB;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,IAAAA,GAAE,SAAS,CAAC,MAAI,SAAOA,GAAE,SAAS,CAAC,IAAE,CAAC,CAAC,IAAEA,GAAE,SAAS,CAAC,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,KAAG,mBAAiB;AAAG,WAAS,GAAGA,IAAE,GAAE,GAAE;AAAC,IAAAA,GAAE,SAAS,CAAC,MAAI,SAAOA,GAAE,SAAS,CAAC,IAAE,CAAC,CAAC,IAAEA,GAAE,SAAS,CAAC,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,KAAG,uBAAqB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,iBAAe,GAAG,eAAa,GAAG,wBAAsB;AAAO,MAAI,KAAG,EAAE;AAAE,WAAS,GAAGC,IAAE;AAAC,WAAO,GAAGA,GAAE,WAAW;AAAA,EAAC;AAAC,KAAG,wBAAsB;AAAG,MAAI,KAAG;AAAO,WAAS,GAAGA,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAK,WAAO,KAAG;AAAA,EAAW;AAAC,KAAG,eAAa;AAAG,WAAS,GAAGA,IAAE,GAAE;AAAC,QAAI,IAAE,OAAO,yBAAyBA,IAAE,EAAE;AAAE,WAAO,GAAG,YAAY,CAAC,KAAG,EAAE,gBAAc,OAAO,eAAeA,IAAE,IAAG,EAAC,YAAW,OAAG,cAAa,MAAG,UAAS,OAAG,OAAM,EAAC,CAAC,GAAE,QAAI;AAAA,EAAE;AAAC,KAAG,iBAAe;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,CAAA8C,OAAG;AAAC;AAAa,SAAO,eAAeA,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,2BAAyBA,GAAE,4BAA0BA,GAAE,kBAAgBA,GAAE,4BAA0BA,GAAE,2CAAyCA,GAAE,uCAAqCA,GAAE,eAAa;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG;AAAE,WAAS,GAAG7C,IAAE,GAAE;AAAC,aAAQ,IAAE,GAAG,KAAKA,EAAC,GAAEC,KAAE,EAAE,QAAO,IAAE,GAAE,IAAEA,IAAE,IAAI,UAAQC,KAAE,EAAE,CAAC,GAAE,IAAEF,GAAEE,EAAC,GAAE,IAAE,EAAE,QAAOE,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,UAAI,IAAE,EAAEA,EAAC;AAAE,QAAE,iBAAe,UAAQ,KAAK,EAAE,IAAI,EAAE,EAAE,UAAS,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,EAAAyC,GAAE,eAAa;AAAG,WAAS,GAAG7C,IAAE,GAAE;AAAC,QAAI,IAAE,WAAU;AAAA,IAAC;AAAE,OAAG,eAAe,GAAEA,KAAE,eAAe;AAAE,QAAIC,KAAE,EAAC,OAAM,SAAS,GAAEC,IAAE;AAAC,UAAG,GAAG,QAAQ,CAAC,MAAI,IAAE,EAAE,CAAC,IAAG,CAAC,GAAG,YAAY,CAAC,EAAE,QAAO,KAAK,EAAE,IAAI,EAAE,EAAE,UAASA,EAAC;AAAA,IAAC,GAAE,iBAAgB,WAAU;AAAC,UAAI,IAAE,GAAG,MAAK,CAAC;AAAE,UAAG,CAAC,GAAG,QAAQ,CAAC,GAAE;AAAC,YAAIA,KAAE,GAAG,IAAI,GAAE,SAAS,GAAE;AAAC,iBAAO,EAAE;AAAA,QAAG,CAAC;AAAE,cAAM,MAAM,qCAAmC,GAAG,aAAa,KAAK,WAAW,IAAE;AAAA,MAC9yuC,KAAGA,GAAE,KAAK;AAAA;AAAA,CAEb,EAAE,QAAQ,OAAM;AAAA,EACf,EAAE;AAAA,MAAC;AAAA,IAAC,EAAC;AAAE,WAAO,EAAE,YAAUD,IAAE,EAAE,UAAU,cAAY,GAAE,EAAE,cAAY,GAAE;AAAA,EAAC;AAAC,EAAA4C,GAAE,uCAAqC;AAAG,WAAS,GAAG7C,IAAE,GAAE,GAAE;AAAC,QAAIC,KAAE,WAAU;AAAA,IAAC;AAAE,OAAG,eAAeA,IAAED,KAAE,2BAA2B;AAAE,QAAI,IAAE,OAAO,OAAO,EAAE,SAAS;AAAE,WAAO,GAAG,QAAQ,GAAE,SAASE,IAAE;AAAC,QAAEA,EAAC,IAAE;AAAA,IAAE,CAAC,GAAED,GAAE,YAAU,GAAEA,GAAE,UAAU,cAAYA,IAAEA;AAAA,EAAC;AAAC,EAAA4C,GAAE,2CAAyC;AAAG,MAAI;AAAG,GAAC,SAAS7C,IAAE;AAAC,IAAAA,GAAEA,GAAE,mBAAiB,CAAC,IAAE,oBAAmBA,GAAEA,GAAE,iBAAe,CAAC,IAAE;AAAA,EAAgB,GAAG,KAAG6C,GAAE,8BAA4BA,GAAE,4BAA0B,CAAC,EAAE;AAAE,WAAS,GAAG7C,IAAE,GAAE;AAAC,QAAI,IAAE,GAAGA,IAAE,CAAC,GAAEC,KAAE,GAAGD,IAAE,CAAC;AAAE,WAAO,EAAE,OAAOC,EAAC;AAAA,EAAC;AAAC,EAAA4C,GAAE,kBAAgB;AAAG,WAAS,GAAG7C,IAAE,GAAE;AAAC,QAAI,IAAE,GAAG,IAAI,GAAE,SAASC,IAAE;AAAC,UAAG,CAAC,GAAG,WAAWD,GAAEC,EAAC,CAAC,EAAE,QAAM,EAAC,KAAI,8BAA4BA,KAAE,UAAQ,GAAG,aAAaD,GAAE,WAAW,IAAE,iBAAgB,MAAK,GAAG,gBAAe,YAAWC,GAAC;AAAA,IAAC,CAAC;AAAE,WAAO,GAAG,QAAQ,CAAC;AAAA,EAAC;AAAC,EAAA4C,GAAE,4BAA0B;AAAG,MAAI,KAAG,CAAC,eAAc,SAAQ,iBAAiB;AAAE,WAAS,GAAG7C,IAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQC,MAAKD,GAAE,IAAG,WAAWA,GAAEC,EAAC,CAAC,KAAG,CAAC,GAAG,SAAS,IAAGA,EAAC,KAAG,CAAC,GAAG,SAAS,GAAEA,EAAC,KAAG,EAAE,KAAK,EAAC,KAAI,gCAA8BA,KAAE,UAAQ,GAAG,aAAaD,GAAE,WAAW,IAAE;AAAA;AAAA,GAEjlC,MAAK,GAAG,kBAAiB,YAAWC,GAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,EAAA4C,GAAE,2BAAyB;AAAE,CAAC;AAAE,IAAI,KAAG9C,GAAE,CAAA+C,QAAI;AAAC;AAAa,SAAO,eAAeA,KAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,IAAG,cAAY;AAAO,MAAI,KAAG,GAAG,GAAE,IAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAAS9C,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,UAAG,KAAK,YAAU,CAAC,GAAE,KAAK,YAAU,EAAE,WAAU,KAAK,uBAAqB,EAAE,IAAI,GAAE,sBAAsB,IAAE,EAAE,uBAAqB,GAAG,sBAAsB,sBAAqB,CAAC,KAAK,UAAU,MAAK,2BAAyB,EAAE,MAAK,KAAK,wBAAsB,EAAE,MAAK,KAAK,kBAAgB,EAAE,MAAK,KAAK,qBAAmB,EAAE,MAAK,KAAK,cAAY,EAAE;AAAA,eAAa,QAAQ,KAAK,KAAK,oBAAoB,EAAE,MAAK,mBAAiB,KAAK,2BAAyB,GAAG,qBAAoB,KAAK,0BAAwB,GAAG,qBAAoB,KAAK,cAAY,EAAE,MAAK,KAAK,yBAAuB,KAAK,uCAAqC,KAAK,2BAAyB,EAAE,MAAK,KAAK,0BAAwB,EAAE,MAAK,KAAK,cAAY,KAAK,iBAAgB,KAAK,yBAAuB,KAAK;AAAA,eAA2C,cAAc,KAAK,KAAK,oBAAoB,EAAE,MAAK,mBAAiB,KAAK,2BAAyB,GAAG,2BAA0B,KAAK,0BAAwB,GAAG,2BAA0B,KAAK,cAAY,EAAE,MAAK,KAAK,yBAAuB,KAAK,6CAA2C,KAAK,2BAAyB,EAAE,MAAK,KAAK,0BAAwB,EAAE,MAAK,KAAK,cAAY,KAAK,uBAAsB,KAAK,yBAAuB,KAAK;AAAA,eAAiD,QAAQ,KAAK,KAAK,oBAAoB,EAAE,MAAK,2BAAyB,EAAE,MAAK,KAAK,0BAAwB,EAAE,MAAK,KAAK,cAAY,EAAE,MAAK,KAAK,yBAAuB,EAAE;AAAA,UAAU,OAAM,MAAM,oDAAkD,EAAE,uBAAqB,GAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,2CAAyC,SAAS,GAAE;AAAC,QAAE,WAAS,EAAC,aAAY,KAAI,WAAU,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,0CAAwC,SAAS,GAAE;AAAC,QAAE,WAAS,EAAC,aAAY,KAAK,GAAG,CAAC,EAAE,aAAY,WAAU,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,qCAAmC,SAAS,GAAE;AAAC,QAAE,WAAS,EAAC,aAAY,KAAI,WAAU,KAAI,aAAY,KAAI,WAAU,KAAI,SAAQ,KAAI,WAAU,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,oCAAkC,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,GAAG,CAAC;AAAE,QAAE,WAAS,EAAC,aAAY,EAAE,aAAY,WAAU,EAAE,WAAU,aAAY,EAAE,aAAY,WAAU,KAAI,SAAQ,KAAI,WAAU,IAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,2BAAyB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,EAAC,MAAK,GAAE,UAAS,CAAC,EAAC;AAAE,WAAK,uBAAuBA,EAAC,GAAE,KAAK,UAAU,KAAKA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,wBAAsB,WAAU;AAAC,WAAK,UAAU,IAAI;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,GAAG,CAAC,GAAEC,KAAE,EAAE;AAAS,MAAAA,GAAE,eAAa,EAAE,eAAaA,GAAE,YAAU,EAAE,WAAUA,GAAE,UAAQ,EAAE,SAAQA,GAAE,YAAU,EAAE,cAAYA,GAAE,cAAY,KAAIA,GAAE,YAAU,KAAIA,GAAE,cAAY;AAAA,IAAI,GAAED,GAAE,UAAU,wBAAsB,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,GAAG,CAAC,GAAEC,KAAE,EAAE;AAAS,MAAAA,GAAE,eAAa,EAAE,cAAYA,GAAE,YAAU,EAAE,YAAUA,GAAE,cAAY;AAAA,IAAG,GAAED,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,SAAG,iBAAiBA,IAAE,GAAE,CAAC,GAAE,KAAK,yBAAyBA,GAAE,UAAS,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,qBAAmB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,SAAG,qBAAqBA,IAAE,GAAE,CAAC,GAAE,KAAK,wBAAwBA,GAAE,UAAS,EAAE,QAAQ;AAAA,IAAC,GAAED,GAAE,UAAU,+BAA6B,WAAU;AAAC,UAAG,EAAE,YAAY,KAAK,yBAAyB,GAAE;AAAC,YAAI,IAAE,GAAG,qCAAqC,KAAK,WAAU,EAAE,KAAK,KAAK,oBAAoB,CAAC;AAAE,eAAO,KAAK,4BAA0B,GAAE;AAAA,MAAC;AAAC,aAAO,KAAK;AAAA,IAAyB,GAAEA,GAAE,UAAU,2CAAyC,WAAU;AAAC,UAAG,EAAE,YAAY,KAAK,qCAAqC,GAAE;AAAC,YAAI,IAAE,GAAG,yCAAyC,KAAK,WAAU,EAAE,KAAK,KAAK,oBAAoB,GAAE,KAAK,6BAA6B,CAAC;AAAE,eAAO,KAAK,wCAAsC,GAAE;AAAA,MAAC;AAAC,aAAO,KAAK;AAAA,IAAqC,GAAEA,GAAE,UAAU,+BAA6B,WAAU;AAAC,UAAI,IAAE,KAAK;AAAW,aAAO,EAAE,EAAE,SAAO,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mCAAiC,WAAU;AAAC,UAAI,IAAE,KAAK;AAAW,aAAO,EAAE,EAAE,SAAO,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,qCAAmC,WAAU;AAAC,UAAI,IAAE,KAAK;AAAsB,aAAO,EAAE,EAAE,SAAO,CAAC;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,EAAA8C,IAAG,cAAY;AAAE,CAAC;AAAE,IAAI,KAAG/C,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,eAAa;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,mBAAiB,WAAU;AAAC,WAAK,YAAU,CAAC,GAAE,KAAK,kBAAgB,GAAE,KAAK,UAAQ;AAAA,IAAE,GAAE,OAAO,eAAeA,GAAE,WAAU,SAAQ,EAAC,KAAI,WAAU;AAAC,aAAO,KAAK;AAAA,IAAS,GAAE,KAAI,SAAS,GAAE;AAAC,UAAG,KAAK,qBAAmB,KAAG,OAAM,MAAM,kFAAkF;AAAE,WAAK,MAAM,GAAE,KAAK,YAAU,GAAE,KAAK,kBAAgB,EAAE;AAAA,IAAM,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAEA,GAAE,UAAU,aAAW,WAAU;AAAC,aAAO,KAAK,WAAS,KAAK,UAAU,SAAO,KAAG,KAAK,aAAa,GAAE,KAAK,GAAG,CAAC,KAAG,GAAG;AAAA,IAAW,GAAEA,GAAE,UAAU,KAAG,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,UAAQ;AAAE,aAAO,IAAE,KAAG,KAAK,mBAAiB,IAAE,GAAG,cAAY,KAAK,UAAU,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,WAAU;AAAC,WAAK;AAAA,IAAS,GAAEA,GAAE,UAAU,mBAAiB,WAAU;AAAC,aAAO,KAAK;AAAA,IAAO,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,UAAQ;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,WAAU;AAAC,WAAK,UAAQ;AAAA,IAAE,GAAEA,GAAE,UAAU,wBAAsB,WAAU;AAAC,WAAK,UAAQ,KAAK,UAAU,SAAO;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,WAAU;AAAC,aAAO,KAAK,iBAAiB;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,eAAa;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,gBAAc;AAAO,MAAI,KAAG,EAAE,GAAE,KAAGwC,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASvC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,SAAO,SAAS,GAAE;AAAC,aAAO,EAAE,KAAK,IAAI;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,UAAQ,SAAS,GAAE,GAAEC,IAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,SAAO,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,KAAG,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,OAAK,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,aAAW,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE,GAAE;AAAC,aAAO,KAAK,gBAAgB,GAAE,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,SAAO,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,UAAQ,SAAS,GAAE;AAAC,aAAO,KAAK,eAAe,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,KAAG,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,MAAI,SAAS,GAAE;AAAC,aAAO,KAAK,WAAW,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,OAAK,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,SAAS,GAAE;AAAC,WAAK,aAAa,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,WAAS,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,WAAK,qBAAqB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,eAAa,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,aAAO,KAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAC,WAAK,mBAAmB,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,oBAAkB,SAAS,GAAE;AAAC,WAAK,2BAA2B,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,OAAK,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAGA,OAAI,WAASA,KAAE,GAAG,sBAAqB,GAAG,SAAS,KAAK,mBAAkB,CAAC,GAAE;AAAC,YAAI,IAAE,GAAG,qCAAqC,4BAA4B,EAAC,cAAa,GAAE,aAAY,KAAK,UAAS,CAAC,GAAEC,KAAE,EAAC,SAAQ,GAAE,MAAK,GAAG,0BAA0B,qBAAoB,UAAS,EAAC;AAAE,aAAK,iBAAiB,KAAKA,EAAC;AAAA,MAAC;AAAC,WAAK,kBAAkB,KAAK,CAAC;AAAE,UAAI,IAAE,KAAK,WAAW,GAAE,GAAED,EAAC;AAAE,aAAO,KAAK,CAAC,IAAE,GAAE;AAAA,IAAC,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE,GAAEC,IAAE;AAAC,MAAAA,OAAI,WAASA,KAAE,GAAG;AAAqB,UAAI,IAAE,CAAC;AAAE,UAAE,EAAE,OAAO,GAAG,yBAAyB,GAAE,KAAK,mBAAkB,KAAK,SAAS,CAAC,GAAE,KAAK,mBAAiB,KAAK,iBAAiB,OAAO,CAAC;AAAE,UAAIC,KAAE,KAAK,WAAW,GAAE,GAAED,EAAC;AAAE,aAAO,KAAK,CAAC,IAAEC,IAAEA;AAAA,IAAC,GAAEF,GAAE,UAAU,YAAU,SAAS,GAAE,GAAE;AAAC,aAAO,WAAU;AAAC,aAAK,oBAAoB,KAAK,CAAC;AAAE,YAAIC,KAAE,KAAK,eAAe;AAAE,YAAG;AAAC,iBAAO,EAAE,MAAM,MAAK,CAAC,GAAE;AAAA,QAAE,SAAO,GAAE;AAAC,cAAG,GAAG,uBAAuB,CAAC,EAAE,QAAM;AAAG,gBAAM;AAAA,QAAC,UAAC;AAAQ,eAAK,iBAAiBA,EAAC,GAAE,KAAK,oBAAoB,IAAI;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC,GAAED,GAAE,UAAU,qBAAmB,WAAU;AAAC,aAAO,KAAK;AAAA,IAAoB,GAAEA,GAAE,UAAU,+BAA6B,WAAU;AAAC,aAAO,GAAG,iBAAiB,GAAG,OAAO,KAAK,oBAAoB,CAAC;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,gBAAc;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,mBAAiB;AAAO,MAAIgD,KAAE,EAAE,GAAE,KAAG,GAAG,GAAE,KAAGR,IAAG,GAAE,KAAGX,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAAS5B,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAE;AAAC,UAAG,KAAK,YAAU,GAAG,sBAAsB,IAAI,GAAE,KAAK,sBAAoB,CAAC,GAAE,KAAK,sBAAoB,CAAC,GAAE,KAAK,mBAAiB,KAAI,KAAK,eAAa,GAAG,oCAAmC,KAAK,oBAAkB,CAAC,GAAE,KAAK,YAAU,CAAC,GAAE,KAAK,sBAAoB,CAAC,GAAE,KAAK,aAAW,CAAC,GAAE,KAAK,wBAAsB,CAAC,GAAE,KAAK,uBAAqB,CAAC,GAAE+C,GAAE,IAAI,GAAE,mBAAmB,EAAE,OAAM,MAAM;AAAA;AAAA,sBAEpga;AAAE,UAAGA,GAAE,QAAQ,CAAC,GAAE;AAAC,YAAGA,GAAE,QAAQ,CAAC,EAAE,OAAM,MAAM;AAAA;AAAA,2CAE1B;AAAE,YAAG,OAAO,EAAE,CAAC,EAAE,eAAa,SAAS,OAAM,MAAM;AAAA;AAAA,sBAExE;AAAA,MAAC;AAAC,UAAGA,GAAE,QAAQ,CAAC,EAAE,MAAK,YAAUA,GAAE,OAAO,GAAE,SAAS,GAAE,GAAE;AAAC,eAAO,EAAE,EAAE,IAAI,IAAE,GAAE;AAAA,MAAC,GAAE,CAAC,CAAC;AAAA,eAAUA,GAAE,IAAI,GAAE,OAAO,KAAGA,GAAE,MAAMA,GAAE,QAAQA,GAAE,OAAO,EAAE,KAAK,CAAC,GAAE,GAAG,WAAW,GAAE;AAAC,YAAI9C,KAAE8C,GAAE,QAAQA,GAAE,OAAO,EAAE,KAAK,CAAC,GAAE,IAAEA,GAAE,KAAK9C,EAAC;AAAE,aAAK,YAAU8C,GAAE,OAAO,GAAE,SAAS,GAAE,GAAE;AAAC,iBAAO,EAAE,EAAE,IAAI,IAAE,GAAE;AAAA,QAAC,GAAE,CAAC,CAAC;AAAA,MAAC,WAASA,GAAE,SAAS,CAAC,EAAE,MAAK,YAAUA,GAAE,SAAS,CAAC;AAAA,UAAO,OAAM,IAAI,MAAM,wIAAwI;AAAE,WAAK,UAAU,MAAI,GAAG;AAAI,UAAI7C,KAAE6C,GAAE,MAAMA,GAAE,OAAO,CAAC,GAAE,SAAS,GAAE;AAAC,eAAOA,GAAE,QAAQ,EAAE,eAAe;AAAA,MAAC,CAAC;AAAE,WAAK,eAAa7C,KAAE,GAAG,qCAAmC,GAAG,wBAAuB,GAAG,kBAAkB6C,GAAE,OAAO,KAAK,SAAS,CAAC;AAAA,IAAC,GAAE/C,GAAE,UAAU,aAAW,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAG,KAAK,iBAAiB,OAAM,MAAM,mBAAiB,IAAE;AAAA,6FACzuB;AAAE,UAAI,IAAE8C,GAAE,IAAI9C,IAAE,eAAe,IAAEA,GAAE,gBAAc,GAAG,oBAAoB,eAAcC,KAAE6C,GAAE,IAAI9C,IAAE,mBAAmB,IAAEA,GAAE,oBAAkB,GAAG,oBAAoB,mBAAkB,IAAE,KAAK,oBAAkB,GAAG,uBAAqB,GAAG;AAAwB,WAAK,oBAAmB,KAAK,oBAAoB,CAAC,IAAE,GAAE,KAAK,oBAAoB,CAAC,IAAE;AAAE,eAAS,EAAEK,IAAE;AAAC,YAAG;AAAC,cAAG,KAAK,cAAY,MAAG;AAAC,cAAE,MAAM,MAAKA,EAAC;AAAE,gBAAIC,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,mBAAO,KAAK,YAAYA,EAAC,GAAEA;AAAA,UAAC,MAAM,QAAO,EAAE,MAAM,MAAKD,EAAC;AAAA,QAAC,SAAO,GAAE;AAAC,iBAAO,KAAK,gBAAgB,GAAE,GAAEJ,EAAC;AAAA,QAAC,UAAC;AAAQ,eAAK,uBAAuB;AAAA,QAAC;AAAA,MAAC;AAAC,UAAIE,KAAE,SAASE,IAAEC,IAAE;AAAC,eAAOD,OAAI,WAASA,KAAE,IAAG,KAAK,0BAA0B,GAAE,GAAEA,EAAC,GAAE,EAAE,KAAK,MAAKC,EAAC;AAAA,MAAC,GAAE,IAAE;AAAW,aAAOH,GAAE,CAAC,IAAE,GAAEA,GAAE,wBAAsB,GAAEA;AAAA,IAAC,GAAEJ,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,KAAK,WAAW,WAAS,GAAEC,KAAE,KAAG,CAAC,KAAK,eAAe,KAAG,KAAK;AAAgB,UAAG,GAAG,uBAAuB,CAAC,GAAE;AAAC,YAAI,IAAE;AAAE,YAAGA,IAAE;AAAC,cAAI,IAAE,KAAK,oBAAoB;AAAE,cAAG,KAAK,yBAAyB,CAAC,EAAE,KAAG,EAAE,iBAAe,KAAK,SAAS,CAAC,GAAE,KAAK,WAAU;AAAC,gBAAIE,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,mBAAOA,GAAE,gBAAc,MAAGA;AAAA,UAAC,MAAM,QAAOH,GAAE;AAAA,eAAM;AAAC,gBAAG,KAAK,WAAU;AAAC,kBAAIG,KAAE,KAAK,UAAU,KAAK,UAAU,SAAO,CAAC;AAAE,cAAAA,GAAE,gBAAc,MAAG,EAAE,mBAAiBA;AAAA,YAAC;AAAC,kBAAM;AAAA,UAAC;AAAA,QAAC,OAAK;AAAC,cAAG,EAAE,QAAO,KAAK,sBAAsB,GAAEH,GAAE;AAAE,gBAAM;AAAA,QAAC;AAAA,MAAC,MAAM,OAAM;AAAA,IAAC,GAAED,GAAE,UAAU,iBAAe,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,YAAW,CAAC;AAAE,aAAO,KAAK,oBAAoB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,sBAAoB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,KAAK,mBAAmBD,EAAC,GAAE,GAAE;AAAE,UAAG,EAAE,QAAM,QAAO;AAAC,YAAG,IAAE,EAAE,KAAI,IAAE,EAAE,MAAK,MAAI,QAAO;AAAC,cAAIG,KAAEF;AAAE,UAAAA,KAAE,WAAU;AAAC,mBAAO,EAAE,KAAK,CAAC,KAAGE,GAAE,KAAK,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,MAAM,KAAE;AAAE,UAAGF,GAAE,KAAK,IAAI,MAAI,KAAG,QAAO,EAAE,KAAK,IAAI;AAAA,IAAC,GAAEF,GAAE,UAAU,qBAAmB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,kBAAiB,CAAC;AAAE,aAAO,KAAK,wBAAwB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,KAAK,mBAAmBD,EAAC,GAAE,GAAE;AAAE,UAAG,EAAE,QAAM,QAAO;AAAC,YAAG,IAAE,EAAE,KAAI,IAAE,EAAE,MAAK,MAAI,QAAO;AAAC,cAAIG,KAAEF;AAAE,UAAAA,KAAE,WAAU;AAAC,mBAAO,EAAE,KAAK,CAAC,KAAGE,GAAE,KAAK,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,MAAM,KAAE;AAAE,UAAGF,GAAE,KAAK,IAAI,MAAI,KAAG,UAAQ,IAAE,KAAK,mBAAmB,CAAC,GAAEA,GAAE,KAAK,IAAI,MAAI,QAAI,MAAI,OAAI,KAAE,KAAK,mBAAmB,CAAC;AAAA,UAAO,OAAM,KAAK,wBAAwB,GAAE,GAAG,UAAU,sBAAqB,EAAE,OAAO;AAAE,WAAK,4BAA4B,KAAK,oBAAmB,CAAC,GAAE,CAAC,GAAEA,IAAE,GAAG,kBAAiB,GAAE,GAAG,iCAAiC;AAAA,IAAC,GAAEF,GAAE,UAAU,6BAA2B,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,sBAAqB,CAAC;AAAE,WAAK,gCAAgC,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,kCAAgC,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,EAAE,KAAI,IAAE,EAAE,KAAI,IAAE,KAAK,mBAAmBD,EAAC;AAAE,UAAG,EAAE,KAAK,IAAI,MAAI,MAAG;AAAC,QAAAC,GAAE,KAAK,IAAI;AAAE,iBAAQE,KAAE,WAAU;AAAC,iBAAO,EAAE,aAAa,EAAE,GAAG,CAAC,GAAE,CAAC;AAAA,QAAC,GAAE,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,CAAC,MAAI,OAAI,MAAK,QAAQ,CAAC,GAAEF,GAAE,KAAK,IAAI;AAAE,aAAK,4BAA4B,KAAK,6BAA4B,CAAC,GAAE,GAAEE,IAAEF,IAAE,GAAG,oCAAoC,GAAEE,IAAE,GAAG,sBAAqB,GAAE,GAAG,oCAAoC;AAAA,MAAC,MAAM,OAAM,KAAK,wBAAwB,GAAE,GAAG,UAAU,qCAAoC,EAAE,OAAO;AAAA,IAAC,GAAEJ,GAAE,UAAU,eAAa,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,UAAS,CAAC;AAAE,aAAO,KAAK,kBAAkB,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,oBAAkB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,KAAK,mBAAmBD,EAAC,GAAE,GAAE;AAAE,UAAG,EAAE,QAAM,QAAO;AAAC,YAAG,IAAE,EAAE,KAAI,IAAE,EAAE,MAAK,MAAI,QAAO;AAAC,cAAIG,KAAEF;AAAE,UAAAA,KAAE,WAAU;AAAC,mBAAO,EAAE,KAAK,CAAC,KAAGE,GAAE,KAAK,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,MAAM,KAAE;AAAE,eAAQ,IAAE,MAAGF,GAAE,KAAK,IAAI,MAAI,QAAI,MAAI,OAAI,KAAE,KAAK,mBAAmB,CAAC;AAAE,WAAK,4BAA4B,KAAK,cAAa,CAAC,GAAE,CAAC,GAAEA,IAAE,GAAG,UAAS,GAAE,GAAG,6BAA4B,CAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,cAAa,CAAC;AAAE,WAAK,0BAA0B,GAAE,GAAEA,EAAC;AAAA,IAAC,GAAED,GAAE,UAAU,4BAA0B,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,IAAE,MAAKC,KAAE,EAAE,KAAI,IAAE,EAAE,KAAI,IAAE,KAAK,mBAAmBD,EAAC;AAAE,UAAG,EAAE,KAAK,IAAI,MAAI,MAAG;AAAC,QAAAC,GAAE,KAAK,IAAI;AAAE,iBAAQE,KAAE,WAAU;AAAC,iBAAO,EAAE,aAAa,EAAE,GAAG,CAAC,GAAE,CAAC;AAAA,QAAC,GAAE,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,CAAC,MAAI,OAAI,MAAK,QAAQ,CAAC,GAAEF,GAAE,KAAK,IAAI;AAAE,aAAK,4BAA4B,KAAK,6BAA4B,CAAC,GAAE,GAAEE,IAAEF,IAAE,GAAG,8BAA8B,GAAEE,IAAE,GAAG,cAAa,GAAE,GAAG,8BAA8B;AAAA,MAAC;AAAA,IAAC,GAAEJ,GAAE,UAAU,8BAA4B,SAAS,GAAE,GAAEC,IAAE,GAAEC,IAAE;AAAC,aAAKD,GAAE,IAAG,MAAK,QAAQ,CAAC,GAAE,EAAE,KAAK,IAAI;AAAE,WAAK,4BAA4B,KAAK,6BAA4B,CAAC,GAAE,GAAEA,IAAE,GAAEC,EAAC,GAAED,IAAE,GAAG,sBAAqB,GAAEC,EAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,qBAAmB,SAAS,GAAE;AAAC,UAAI,IAAE,KAAK,iBAAiB;AAAE,QAAE,KAAK,IAAI;AAAE,UAAIC,KAAE,KAAK,iBAAiB;AAAE,aAAOA,KAAE;AAAA,IAAC,GAAED,GAAE,UAAU,aAAW,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,4BAA4B,GAAG,QAAO,CAAC,GAAE,IAAE8C,GAAE,QAAQ,CAAC,IAAE,IAAE,EAAE,KAAI7C,KAAE,KAAK,mBAAmBD,EAAC,GAAE,IAAEC,GAAE,KAAK,MAAK,CAAC;AAAE,UAAG,MAAI,QAAO;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,eAAO,EAAE,IAAI,KAAK,IAAI;AAAA,MAAC;AAAC,WAAK,oBAAoB,GAAE,EAAE,OAAO;AAAA,IAAC,GAAEF,GAAE,UAAU,yBAAuB,WAAU;AAAC,UAAG,KAAK,WAAW,IAAI,GAAE,KAAK,sBAAsB,IAAI,GAAE,KAAK,sBAAsB,GAAE,KAAK,WAAW,WAAS,KAAG,KAAK,eAAe,MAAI,OAAG;AAAC,YAAI,IAAE,KAAK,GAAG,CAAC,GAAE,IAAE,KAAK,qBAAqB,8BAA8B,EAAC,gBAAe,GAAE,UAAS,KAAK,oBAAoB,EAAC,CAAC;AAAE,aAAK,WAAW,IAAI,GAAG,2BAA2B,GAAE,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI;AAAE,UAAG;AAAC,YAAIC,KAAED,OAAI,SAAOA,GAAE,OAAK;AAAO,eAAO,IAAE,EAAE,KAAK,MAAK,GAAEC,EAAC,GAAE,KAAK,mBAAmB,GAAED,OAAI,UAAQA,GAAE,UAAQ,SAAOA,GAAE,QAAM,EAAE,QAAQ,GAAE;AAAA,MAAC,SAAO,GAAE;AAAC,aAAK,qBAAqB,GAAEA,IAAE,EAAE,QAAQ;AAAA,MAAC;AAAA,IAAC,GAAED,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAEC,IAAE;AAAC,YAAM,GAAG,uBAAuB,CAAC,KAAG,EAAE,qBAAmB,WAAS,KAAK,mBAAmB,EAAE,kBAAiB,MAAI,UAAQ,EAAE,UAAQ,SAAO,EAAE,QAAMA,EAAC,GAAE,OAAO,EAAE,mBAAkB;AAAA,IAAC,GAAED,GAAE,UAAU,kBAAgB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI;AAAE,UAAG;AAAC,YAAIC,KAAE,KAAK,GAAG,CAAC;AAAE,aAAK,aAAaA,IAAE,CAAC,MAAI,QAAI,KAAK,aAAa,GAAE,IAAEA,MAAG,KAAK,qBAAqB,GAAEA,IAAED,EAAC;AAAA,MAAC,SAAO,GAAE;AAAC,YAAE,KAAK,wBAAwB,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC,aAAO,KAAK,gBAAgBA,OAAI,UAAQA,GAAE,UAAQ,SAAOA,GAAE,QAAM,EAAE,MAAK,CAAC,GAAE;AAAA,IAAC,GAAED,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAI,GAAEC,KAAE,KAAK,GAAG,CAAC;AAAE,YAAMD,OAAI,UAAQA,GAAE,UAAQ,IAAEA,GAAE,UAAQ,IAAE,KAAK,qBAAqB,0BAA0B,EAAC,UAAS,GAAE,QAAO,GAAE,UAASC,IAAE,UAAS,KAAK,oBAAoB,EAAC,CAAC,GAAE,KAAK,WAAW,IAAI,GAAG,yBAAyB,GAAE,GAAEA,EAAC,CAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAG,KAAK,mBAAiBA,GAAE,SAAO,8BAA4B,CAAC,KAAK,eAAe,GAAE;AAAC,YAAI,IAAE,KAAK,4BAA4B,GAAE,CAAC;AAAE,YAAG;AAAC,iBAAO,KAAK,kBAAkB,GAAE,CAAC;AAAA,QAAC,SAAOC,IAAE;AAAC,gBAAMA,GAAE,SAAO,GAAG,6BAA2BD,KAAEC;AAAA,QAAC;AAAA,MAAC,MAAM,OAAMD;AAAA,IAAC,GAAED,GAAE,UAAU,iBAAe,WAAU;AAAC,UAAI,IAAE,KAAK,QAAO,IAAE+C,GAAE,SAAS,KAAK,UAAU;AAAE,aAAM,EAAC,QAAO,GAAE,YAAW,KAAK,iBAAiB,GAAE,YAAW,GAAE,WAAU,KAAK,UAAS;AAAA,IAAC,GAAE/C,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,SAAO,EAAE,QAAO,KAAK,iBAAiB,EAAE,UAAU,GAAE,KAAK,aAAW,EAAE;AAAA,IAAU,GAAEA,GAAE,UAAU,4BAA0B,SAAS,GAAE,GAAEC,IAAE;AAAC,WAAK,sBAAsB,KAAKA,EAAC,GAAE,KAAK,WAAW,KAAK,CAAC,GAAE,KAAK,yBAAyB,GAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,iBAAe,WAAU;AAAC,aAAO,KAAK,oBAAoB,WAAS;AAAA,IAAC,GAAEA,GAAE,UAAU,sBAAoB,WAAU;AAAC,UAAI,IAAE,KAAK,6BAA6B;AAAE,aAAO,KAAK,oBAAoB,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,0BAAwB,SAAS,GAAE;AAAC,aAAO,KAAK,oBAAoB,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,iBAAe,WAAU;AAAC,aAAO,KAAK,aAAa,KAAK,GAAG,CAAC,GAAE,GAAG,GAAG;AAAA,IAAC,GAAEA,GAAE,UAAU,QAAM,WAAU;AAAC,WAAK,gBAAgB,GAAE,KAAK,sBAAoB,CAAC,GAAE,KAAK,SAAO,CAAC,GAAE,KAAK,aAAW,CAAC,GAAE,KAAK,YAAU,CAAC,GAAE,KAAK,wBAAsB,CAAC;AAAA,IAAC,GAAEA;AAAA,EAAC,EAAE;AAAE,KAAG,mBAAiB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,eAAa;AAAO,MAAI,KAAGwC,IAAG,GAAE,KAAG,EAAE,GAAE,KAAGX,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAAS5B,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,UAAQ,CAAC,GAAE,KAAK,uBAAqB,GAAG,IAAI,GAAE,sBAAsB,IAAE,EAAE,uBAAqB,GAAG,sBAAsB;AAAA,IAAoB,GAAEA,GAAE,UAAU,aAAW,SAAS,GAAE;AAAC,UAAG,GAAG,uBAAuB,CAAC,EAAE,QAAO,EAAE,UAAQ,EAAC,WAAU,KAAK,0BAA0B,GAAE,qBAAoB,GAAG,SAAS,KAAK,qBAAqB,EAAC,GAAE,KAAK,QAAQ,KAAK,CAAC,GAAE;AAAE,YAAM,MAAM,6DAA6D;AAAA,IAAC,GAAE,OAAO,eAAeA,GAAE,WAAU,UAAS,EAAC,KAAI,WAAU;AAAC,aAAO,GAAG,SAAS,KAAK,OAAO;AAAA,IAAC,GAAE,KAAI,SAAS,GAAE;AAAC,WAAK,UAAQ;AAAA,IAAC,GAAE,YAAW,OAAG,cAAa,KAAE,CAAC,GAAEA,GAAE,UAAU,0BAAwB,SAAS,GAAE,GAAEC,IAAE;AAAC,eAAQ,IAAE,KAAK,oBAAoB,GAAEC,KAAE,KAAK,mBAAmB,EAAE,CAAC,GAAE,IAAE,GAAG,iCAAiC,GAAEA,IAAE,GAAE,KAAK,YAAY,GAAE,IAAE,EAAE,CAAC,GAAEE,KAAE,CAAC,GAAE,IAAE,GAAE,KAAG,KAAK,cAAa,IAAI,CAAAA,GAAE,KAAK,KAAK,GAAG,CAAC,CAAC;AAAE,UAAIE,KAAE,KAAK,qBAAqB,sBAAsB,EAAC,wBAAuB,GAAE,QAAOF,IAAE,UAAS,KAAK,GAAG,CAAC,GAAE,uBAAsBH,IAAE,UAAS,EAAC,CAAC;AAAE,YAAM,KAAK,WAAW,IAAI,GAAG,mBAAmBK,IAAE,KAAK,GAAG,CAAC,GAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAAA,IAAC,GAAEN,GAAE,UAAU,sBAAoB,SAAS,GAAE,GAAE;AAAC,eAAQC,KAAE,KAAK,oBAAoB,GAAE,IAAE,KAAK,mBAAmB,EAAEA,EAAC,GAAEC,KAAE,GAAG,uBAAuB,GAAE,GAAE,KAAK,YAAY,GAAE,IAAE,CAAC,GAAE,IAAE,GAAE,KAAG,KAAK,cAAa,IAAI,GAAE,KAAK,KAAK,GAAG,CAAC,CAAC;AAAE,UAAIE,KAAE,KAAK,GAAG,CAAC,GAAE,IAAE,KAAK,qBAAqB,wBAAwB,EAAC,qBAAoBF,IAAE,QAAO,GAAE,UAASE,IAAE,uBAAsB,GAAE,UAAS,KAAK,oBAAoB,EAAC,CAAC;AAAE,YAAM,KAAK,WAAW,IAAI,GAAG,qBAAqB,GAAE,KAAK,GAAG,CAAC,GAAEA,EAAC,CAAC;AAAA,IAAC,GAAEJ;AAAA,EAAC,EAAE;AAAE,KAAG,eAAa;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,gBAAc;AAAO,MAAI,KAAG,GAAG,GAAE,KAAG,EAAE,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,oBAAkB,WAAU;AAAA,IAAC,GAAEA,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAE;AAAC,UAAIC,KAAE,KAAK,qBAAqB,CAAC;AAAE,UAAG,GAAG,YAAYA,EAAC,EAAE,OAAM,MAAM,YAAU,IAAE,oCAAoC;AAAE,aAAO,GAAG,wBAAwB,CAACA,EAAC,GAAE,GAAE,KAAK,cAAa,KAAK,YAAY;AAAA,IAAC,GAAED,GAAE,UAAU,4BAA0B,SAAS,GAAE;AAAC,UAAI,IAAE,GAAG,MAAM,EAAE,SAAS,GAAEC,KAAE,KAAK,mBAAmB,GAAE,IAAEA,GAAE,CAAC,GAAEC,KAAE,IAAI,GAAG,qBAAqB,GAAE,CAAC,EAAE,aAAa;AAAE,aAAOA;AAAA,IAAC,GAAEF;AAAA,EAAC,EAAE;AAAE,KAAG,gBAAc;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,eAAa;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,EAAC,aAAY,6DAA4D;AAAE,SAAO,OAAO,EAAE;AAAE,MAAI,KAAG,MAAG,KAAG,KAAK,IAAI,GAAE,GAAG,uBAAuB,IAAE,GAAEiD,MAAG,GAAG,YAAY,EAAC,MAAK,yBAAwB,SAAQ,GAAG,MAAM,GAAE,CAAC;AAAE,KAAG,kBAAkB,CAACA,GAAE,CAAC;AAAE,MAAI,KAAG,GAAG,oBAAoBA,KAAG;AAAA,sFAC3mU,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAO,OAAO,EAAE;AAAE,MAAI,KAAG,EAAC,MAAK;AAAA,sFAClD,UAAS,CAAC,EAAC,GAAE,KAAG,WAAU;AAAC,aAAShD,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,mBAAiB,SAAS,GAAE;AAAC,WAAK,qBAAmB,CAAC,GAAE,KAAK,kBAAgB;AAAA,IAAE,GAAEA,GAAE,UAAU,kBAAgB,WAAU;AAAC,UAAI,IAAE;AAAK,WAAK,kBAAgB,MAAG,KAAK,WAAW,oBAAmB,WAAU;AAAC,iBAAQ,IAAE,SAAS,GAAE;AAAC,cAAIE,KAAE,IAAE,IAAE,IAAE;AAAG,YAAE,YAAUA,EAAC,IAAE,SAAS,GAAE,GAAE;AAAC,mBAAO,KAAK,sBAAsB,GAAE,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,YAAUA,EAAC,IAAE,SAAS,GAAE,GAAE;AAAC,mBAAO,KAAK,sBAAsB,GAAE,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,WAASA,EAAC,IAAE,SAAS,GAAE;AAAC,mBAAO,KAAK,qBAAqB,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,OAAKA,EAAC,IAAE,SAAS,GAAE;AAAC,mBAAO,KAAK,iBAAiB,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,SAAOA,EAAC,IAAE,SAAS,GAAE;AAAC,iBAAK,mBAAmB,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,aAAWA,EAAC,IAAE,SAAS,GAAE;AAAC,iBAAK,2BAA2B,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,iBAAeA,EAAC,IAAE,SAAS,GAAE;AAAC,iBAAK,yBAAyB,GAAE,CAAC;AAAA,UAAC,GAAE,EAAE,qBAAmBA,EAAC,IAAE,SAAS,GAAE;AAAC,iBAAK,iCAAiC,GAAE,CAAC;AAAA,UAAC;AAAA,QAAC,GAAED,KAAE,GAAEA,KAAE,IAAGA,KAAI,GAAEA,EAAC;AAAE,UAAE,UAAQ,SAAS,GAAEC,IAAE,GAAE;AAAC,iBAAO,KAAK,sBAAsBA,IAAE,GAAE,CAAC;AAAA,QAAC,GAAE,EAAE,UAAQ,SAAS,GAAEA,IAAE,GAAE;AAAC,iBAAO,KAAK,sBAAsBA,IAAE,GAAE,CAAC;AAAA,QAAC,GAAE,EAAE,SAAO,SAAS,GAAEA,IAAE;AAAC,iBAAO,KAAK,qBAAqBA,IAAE,CAAC;AAAA,QAAC,GAAE,EAAE,KAAG,SAAS,GAAEA,IAAE;AAAC,iBAAO,KAAK,iBAAiBA,IAAE,CAAC;AAAA,QAAC,GAAE,EAAE,OAAK,SAAS,GAAEA,IAAE;AAAC,eAAK,mBAAmB,GAAEA,EAAC;AAAA,QAAC,GAAE,EAAE,aAAW,SAAS,GAAEA,IAAE;AAAC,eAAK,yBAAyB,GAAEA,EAAC;AAAA,QAAC,GAAE,EAAE,SAAO,EAAE,eAAc,EAAE,YAAU,EAAE,kBAAiB,EAAE,KAAG,EAAE;AAAA,MAAS,CAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,mBAAiB,WAAU;AAAC,UAAI,IAAE;AAAK,WAAK,kBAAgB,OAAG,KAAK,WAAW,8BAA6B,WAAU;AAAC,iBAAQ,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,cAAIC,KAAE,IAAE,IAAE,IAAE;AAAG,iBAAO,EAAE,YAAUA,EAAC,GAAE,OAAO,EAAE,YAAUA,EAAC,GAAE,OAAO,EAAE,WAASA,EAAC,GAAE,OAAO,EAAE,OAAKA,EAAC,GAAE,OAAO,EAAE,SAAOA,EAAC,GAAE,OAAO,EAAE,aAAWA,EAAC,GAAE,OAAO,EAAE,iBAAeA,EAAC,GAAE,OAAO,EAAE,qBAAmBA,EAAC;AAAA,QAAC;AAAC,eAAO,EAAE,SAAQ,OAAO,EAAE,SAAQ,OAAO,EAAE,QAAO,OAAO,EAAE,IAAG,OAAO,EAAE,MAAK,OAAO,EAAE,YAAW,OAAO,EAAE,QAAO,OAAO,EAAE,WAAU,OAAO,EAAE;AAAA,MAAE,CAAC;AAAA,IAAC,GAAED,GAAE,UAAU,gBAAc,SAAS,GAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,mBAAiB,SAAS,GAAE,GAAE;AAAC,aAAO,WAAU;AAAC,eAAM;AAAA,MAAE;AAAA,IAAC,GAAEA,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,aAAO,GAAG;AAAA,IAAW,GAAEA,GAAE,UAAU,qBAAmB,SAAS,GAAE,GAAE;AAAC,UAAG;AAAC,YAAIC,KAAE,IAAI,GAAG,KAAK,EAAC,YAAW,CAAC,GAAE,MAAK,EAAC,CAAC;AAAE,eAAOA,GAAE,OAAK,GAAE,KAAK,mBAAmB,KAAKA,EAAC,GAAE,EAAE,KAAK,IAAI,GAAE,KAAK,mBAAmB,IAAI,GAAEA;AAAA,MAAC,SAAO,GAAE;AAAC,YAAG,EAAE,yBAAuB,KAAG,KAAG;AAAC,YAAE,UAAQ,EAAE,UAAQ;AAAA;AAAA;AAAA,QAE9qE,SAAOC,IAAE;AAAC,gBAAM;AAAA,QAAC;AAAC,cAAM;AAAA,MAAC;AAAA,IAAC,GAAEF,GAAE,UAAU,uBAAqB,SAAS,GAAE,GAAE;AAAC,aAAOiD,IAAG,KAAK,MAAK,GAAG,QAAO,GAAE,CAAC;AAAA,IAAC,GAAEjD,GAAE,UAAU,2BAAyB,SAAS,GAAE,GAAE;AAAC,MAAAiD,IAAG,KAAK,MAAK,GAAG,qBAAoB,GAAE,CAAC;AAAA,IAAC,GAAEjD,GAAE,UAAU,mCAAiC,SAAS,GAAE,GAAE;AAAC,MAAAiD,IAAG,KAAK,MAAK,GAAG,kCAAiC,GAAE,GAAE,EAAE;AAAA,IAAC,GAAEjD,GAAE,UAAU,qBAAmB,SAAS,GAAE,GAAE;AAAC,MAAAiD,IAAG,KAAK,MAAK,GAAG,YAAW,GAAE,CAAC;AAAA,IAAC,GAAEjD,GAAE,UAAU,6BAA2B,SAAS,GAAE,GAAE;AAAC,MAAAiD,IAAG,KAAK,MAAK,GAAG,yBAAwB,GAAE,GAAE,EAAE;AAAA,IAAC,GAAEjD,GAAE,UAAU,mBAAiB,SAAS,GAAE,GAAE;AAAC,aAAO,GAAG,KAAK,MAAK,GAAE,CAAC;AAAA,IAAC,GAAEA,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAG,GAAG,CAAC,GAAE,CAAC,KAAG,GAAG,IAAI,GAAE,UAAU,MAAI,OAAG;AAAC,YAAI,IAAE,IAAI,MAAM,aAAW,GAAG,CAAC,IAAE,2BAAyB,oDAAkD,KAAK,UAAU,CAAC,IAAE,QAAM;AAAA,6BACh0B,KAAK,mBAAmB,CAAC,EAAE,OAAK,IAAI;AAAE,cAAM,EAAE,uBAAqB,MAAG;AAAA,MAAC;AAAC,UAAIC,KAAE,GAAG,KAAK,KAAK,kBAAkB,GAAE,IAAE,EAAE,UAAS,IAAE,IAAI,GAAG,YAAY,EAAC,KAAI,GAAE,iBAAgB,GAAE,gBAAe,OAAM,CAAC;AAAE,aAAOA,GAAE,WAAW,KAAK,CAAC,GAAE,KAAK,YAAU,KAAG;AAAA,IAAE,GAAEF,GAAE,UAAU,wBAAsB,SAAS,GAAE,GAAEC,IAAE;AAAC,UAAG,GAAG,CAAC,GAAE,CAAC,GAAG,oBAAoB,CAAC,GAAE;AAAC,YAAI,IAAE,IAAI,MAAM,aAAW,GAAG,CAAC,IAAE,2BAAyB,gDAA8C,KAAK,UAAU,CAAC,IAAE,QAAM;AAAA,6BAC3c,KAAK,mBAAmB,CAAC,EAAE,OAAK,IAAI;AAAE,cAAM,EAAE,uBAAqB,MAAG;AAAA,MAAC;AAAC,UAAIC,KAAE,GAAG,KAAK,KAAK,kBAAkB,GAAE,IAAE,IAAI,GAAG,SAAS,EAAC,KAAI,GAAE,cAAa,EAAC,CAAC;AAAE,aAAOA,GAAE,WAAW,KAAK,CAAC,GAAE;AAAA,IAAE,GAAEF;AAAA,EAAC,EAAE;AAAE,KAAG,eAAa;AAAG,WAASiD,IAAGjD,IAAE,GAAE,GAAEC,IAAE;AAAC,IAAAA,OAAI,WAASA,KAAE,QAAI,GAAG,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,KAAK,kBAAkB,GAAEC,KAAE,GAAG,WAAW,CAAC,IAAE,IAAE,EAAE,KAAI,IAAE,IAAIF,GAAE,EAAC,YAAW,CAAC,GAAE,KAAI,EAAC,CAAC;AAAE,WAAOC,OAAI,EAAE,YAAU,EAAE,MAAK,GAAG,IAAI,GAAE,eAAe,MAAI,EAAE,eAAa,EAAE,gBAAe,KAAK,mBAAmB,KAAK,CAAC,GAAEC,GAAE,KAAK,IAAI,GAAE,EAAE,WAAW,KAAK,CAAC,GAAE,KAAK,mBAAmB,IAAI,GAAE;AAAA,EAAE;AAAC,WAAS,GAAGF,IAAE,GAAE;AAAC,QAAI,IAAE;AAAK,OAAG,CAAC;AAAE,QAAIC,KAAE,GAAG,KAAK,KAAK,kBAAkB,GAAE,IAAE,GAAG,QAAQD,EAAC,MAAI,OAAGE,KAAE,MAAI,QAAGF,KAAEA,GAAE,KAAI,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,CAAC,GAAE,KAAI,GAAE,mBAAkB,KAAGA,GAAE,uBAAqB,KAAE,CAAC;AAAE,OAAG,IAAIA,IAAE,eAAe,MAAI,EAAE,eAAaA,GAAE;AAAe,QAAI,IAAE,GAAG,KAAKE,IAAE,SAASE,IAAE;AAAC,aAAO,GAAG,WAAWA,GAAE,IAAI;AAAA,IAAC,CAAC;AAAE,WAAO,EAAE,gBAAc,GAAEH,GAAE,WAAW,KAAK,CAAC,GAAE,GAAG,QAAQC,IAAE,SAASE,IAAE;AAAC,UAAI,IAAE,IAAI,GAAG,YAAY,EAAC,YAAW,CAAC,EAAC,CAAC;AAAE,QAAE,WAAW,KAAK,CAAC,GAAE,GAAG,IAAIA,IAAE,oBAAoB,IAAE,EAAE,oBAAkBA,GAAE,qBAAmB,GAAG,IAAIA,IAAE,MAAM,MAAI,EAAE,oBAAkB,OAAI,EAAE,mBAAmB,KAAK,CAAC,GAAEA,GAAE,IAAI,KAAK,CAAC,GAAE,EAAE,mBAAmB,IAAI;AAAA,IAAC,CAAC,GAAE;AAAA,EAAE;AAAC,WAAS,GAAGJ,IAAE;AAAC,WAAOA,OAAI,IAAE,KAAG,KAAGA;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAGA,KAAE,KAAGA,KAAE,IAAG;AAAC,UAAI,IAAE,IAAI,MAAM,oCAAkCA,KAAE;AAAA,MAC9yC,2DAAyD,KAAG,GAAG;AAAE,YAAM,EAAE,uBAAqB,MAAG;AAAA,IAAC;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,oBAAkB;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,WAAU;AAAC,aAASC,KAAG;AAAA,IAAC;AAAC,WAAOA,GAAE,UAAU,wBAAsB,SAAS,GAAE;AAAC,UAAG,GAAG,IAAI,GAAE,eAAe,GAAE;AAAC,YAAI,IAAE,EAAE,eAAcC,KAAE,OAAO,KAAG;AAAS,aAAK,oBAAkBA,KAAE,IAAE,UAAS,KAAK,gBAAcA,KAAE,IAAE,IAAE;AAAA,MAAC,MAAM,MAAK,oBAAkB,GAAE,KAAK,gBAAc,GAAG,sBAAsB;AAAc,WAAK,kBAAgB;AAAA,IAAE,GAAED,GAAE,UAAU,aAAW,SAAS,GAAE,GAAE;AAAC,UAAG,KAAK,kBAAgB,MAAG;AAAC,aAAK;AAAkB,YAAIC,KAAE,IAAI,MAAM,KAAK,kBAAgB,CAAC,EAAE,KAAK,GAAG;AAAE,aAAK,kBAAgB,KAAK,qBAAmB,QAAQ,IAAIA,KAAE,UAAQ,IAAE,GAAG;AAAE,YAAI,IAAE,GAAG,MAAM,CAAC,GAAEC,KAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAEA,KAAE,KAAG,QAAQ,OAAK,QAAQ;AAAI,eAAO,KAAK,kBAAgB,KAAK,qBAAmB,EAAED,KAAE,UAAQ,IAAE,aAAWC,KAAE,IAAI,GAAE,KAAK,mBAAkB;AAAA,MAAC,MAAM,QAAO,EAAE;AAAA,IAAC,GAAEF;AAAA,EAAC,EAAE;AAAE,KAAG,oBAAkB;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,cAAY;AAAO,WAAS,GAAGC,IAAE,GAAE;AAAC,MAAE,QAAQ,SAAS,GAAE;AAAC,UAAIC,KAAE,EAAE;AAAU,aAAO,oBAAoBA,EAAC,EAAE,QAAQ,SAAS,GAAE;AAAC,YAAG,MAAI,eAAc;AAAC,cAAIC,KAAE,OAAO,yBAAyBD,IAAE,CAAC;AAAE,UAAAC,OAAIA,GAAE,OAAKA,GAAE,OAAK,OAAO,eAAeF,GAAE,WAAU,GAAEE,EAAC,IAAEF,GAAE,UAAU,CAAC,IAAE,EAAE,UAAU,CAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,KAAG,cAAY;AAAE,CAAC;AAAE,IAAI,KAAGD,GAAE,OAAG;AAAC;AAAa,MAAI,KAAG,KAAG,EAAE,aAAW,2BAAU;AAAC,QAAIC,KAAE,SAAS,GAAE,GAAE;AAAC,aAAOA,KAAE,OAAO,kBAAgB,EAAC,WAAU,CAAC,EAAC,aAAY,SAAO,SAASC,IAAE,GAAE;AAAC,QAAAA,GAAE,YAAU;AAAA,MAAC,KAAG,SAASA,IAAE,GAAE;AAAC,iBAAQC,MAAK,EAAE,QAAO,UAAU,eAAe,KAAK,GAAEA,EAAC,MAAID,GAAEC,EAAC,IAAE,EAAEA,EAAC;AAAA,MAAE,GAAEF,GAAE,GAAE,CAAC;AAAA,IAAC;AAAE,WAAO,SAAS,GAAE,GAAE;AAAC,UAAG,OAAO,KAAG,cAAY,MAAI,KAAK,OAAM,IAAI,UAAU,yBAAuB,OAAO,CAAC,IAAE,+BAA+B;AAAE,MAAAA,GAAE,GAAE,CAAC;AAAE,eAASC,KAAG;AAAC,aAAK,cAAY;AAAA,MAAC;AAAC,QAAE,YAAU,MAAI,OAAK,OAAO,OAAO,CAAC,KAAGA,GAAE,YAAU,EAAE,WAAU,IAAIA;AAAA,IAAE;AAAA,EAAC,EAAE;AAAE,SAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,IAAE,wBAAsB,EAAE,YAAU,EAAE,SAAO,EAAE,YAAU,EAAE,4BAA0B,EAAE,sBAAoB,EAAE,wBAAsB,EAAE,cAAY;AAAO,MAAI,KAAG,EAAE,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG2C,IAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,IAAE,cAAY,GAAG,oBAAoB,GAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,SAAO,OAAO,EAAE,WAAW;AAAE,IAAE,wBAAsB,OAAO,OAAO,EAAC,iBAAgB,OAAG,cAAa,GAAE,sBAAqB,OAAG,WAAU,MAAG,sBAAqB,GAAG,4BAA2B,sBAAqB,QAAO,eAAc,OAAG,iBAAgB,MAAE,CAAC;AAAE,IAAE,sBAAoB,OAAO,OAAO,EAAC,mBAAkB,WAAU;AAAA,EAAC,GAAE,eAAc,KAAE,CAAC;AAAE,MAAI;AAAG,GAAC,SAAS5C,IAAE;AAAC,IAAAA,GAAEA,GAAE,oBAAkB,CAAC,IAAE,qBAAoBA,GAAEA,GAAE,sBAAoB,CAAC,IAAE,uBAAsBA,GAAEA,GAAE,wBAAsB,CAAC,IAAE,yBAAwBA,GAAEA,GAAE,wBAAsB,CAAC,IAAE,yBAAwBA,GAAEA,GAAE,yBAAuB,CAAC,IAAE,0BAAyBA,GAAEA,GAAE,iBAAe,CAAC,IAAE,kBAAiBA,GAAEA,GAAE,sBAAoB,CAAC,IAAE,uBAAsBA,GAAEA,GAAE,iBAAe,CAAC,IAAE,kBAAiBA,GAAEA,GAAE,kCAAgC,CAAC,IAAE,mCAAkCA,GAAEA,GAAE,qBAAmB,CAAC,IAAE,sBAAqBA,GAAEA,GAAE,yBAAuB,EAAE,IAAE,0BAAyBA,GAAEA,GAAE,wBAAsB,EAAE,IAAE,yBAAwBA,GAAEA,GAAE,gBAAc,EAAE,IAAE;AAAA,EAAe,GAAG,KAAG,EAAE,8BAA4B,EAAE,4BAA0B,CAAC,EAAE;AAAE,WAAS,GAAGA,IAAE;AAAC,WAAOA,OAAI,WAASA,KAAE,SAAQ,WAAU;AAAC,aAAOA;AAAA,IAAC;AAAA,EAAC;AAAC,IAAE,YAAU;AAAG,MAAI,KAAG,WAAU;AAAC,aAASA,GAAE,GAAE,GAAE;AAAC,WAAK,mBAAiB,CAAC,GAAE,KAAK,mBAAiB;AAAG,UAAIC,KAAE;AAAK,UAAGA,GAAE,iBAAiB,CAAC,GAAEA,GAAE,iBAAiB,GAAEA,GAAE,eAAe,CAAC,GAAEA,GAAE,qBAAqB,GAAE,CAAC,GAAEA,GAAE,gBAAgB,CAAC,GAAEA,GAAE,gBAAgB,CAAC,GAAEA,GAAE,kBAAkB,GAAEA,GAAE,iBAAiB,CAAC,GAAEA,GAAE,sBAAsB,CAAC,GAAE,GAAG,IAAI,GAAE,eAAe,EAAE,OAAM,IAAI,MAAM;AAAA;AAAA;AAAA,sBAGhtH;AAAE,WAAK,kBAAgB,GAAG,IAAI,GAAE,iBAAiB,IAAE,EAAE,kBAAgB,EAAE,sBAAsB;AAAA,IAAe;AAAC,WAAOD,GAAE,sBAAoB,SAAS,GAAE;AAAC,YAAM,MAAM,4HAA4H;AAAA,IAAC,GAAEA,GAAE,UAAU,sBAAoB,WAAU;AAAC,UAAI,IAAE;AAAK,WAAK,WAAW,uBAAsB,WAAU;AAAC,YAAI;AAAE,UAAE,mBAAiB;AAAG,YAAIC,KAAE,EAAE;AAAU,UAAE,WAAW,eAAc,WAAU;AAAC,aAAG,iBAAiB,CAAC;AAAA,QAAC,CAAC,GAAE,EAAE,WAAW,qBAAoB,WAAU;AAAC,cAAG;AAAC,cAAE,gBAAgB,GAAE,GAAG,QAAQ,EAAE,mBAAkB,SAASC,IAAE;AAAC,kBAAI,IAAE,EAAEA,EAAC,GAAE,IAAE,EAAE,uBAAsBE,KAAE;AAAO,gBAAE,WAAWF,KAAE,SAAQ,WAAU;AAAC,gBAAAE,KAAE,EAAE,mBAAmBF,IAAE,CAAC;AAAA,cAAC,CAAC,GAAE,EAAE,qBAAqBA,EAAC,IAAEE;AAAA,YAAC,CAAC;AAAA,UAAC,UAAC;AAAQ,cAAE,iBAAiB;AAAA,UAAC;AAAA,QAAC,CAAC;AAAE,YAAI,IAAE,CAAC;AAAE,YAAG,EAAE,WAAW,qBAAoB,WAAU;AAAC,cAAE,GAAG,eAAe,EAAC,OAAM,GAAG,OAAO,EAAE,oBAAoB,EAAC,CAAC,GAAE,EAAE,mBAAiB,EAAE,iBAAiB,OAAO,CAAC;AAAA,QAAC,CAAC,GAAE,EAAE,WAAW,uBAAsB,WAAU;AAAC,cAAG,GAAG,QAAQ,CAAC,KAAG,EAAE,oBAAkB,OAAG;AAAC,gBAAIF,KAAE,GAAG,gBAAgB,EAAC,OAAM,GAAG,OAAO,EAAE,oBAAoB,GAAE,cAAa,EAAE,cAAa,YAAW,GAAG,OAAO,EAAE,SAAS,GAAE,gBAAe,GAAG,sCAAqC,aAAYD,GAAC,CAAC;AAAE,cAAE,mBAAiB,EAAE,iBAAiB,OAAOC,EAAC;AAAA,UAAC;AAAA,QAAC,CAAC,GAAE,GAAG,QAAQ,EAAE,gBAAgB,MAAI,EAAE,mBAAiB,EAAE,WAAW,0BAAyB,WAAU;AAAC,cAAIA,KAAE,GAAG,uBAAuB,GAAG,OAAO,EAAE,oBAAoB,CAAC;AAAE,YAAE,gBAAcA;AAAA,QAAC,CAAC,GAAE,EAAE,WAAW,6BAA4B,WAAU;AAAC,YAAE,6BAA6B,GAAG,OAAO,EAAE,oBAAoB,CAAC;AAAA,QAAC,CAAC,IAAG,CAACF,GAAE,oCAAkC,CAAC,GAAG,QAAQ,EAAE,gBAAgB,EAAE,OAAM,IAAE,GAAG,IAAI,EAAE,kBAAiB,SAASE,IAAE;AAAC,iBAAOA,GAAE;AAAA,QAAO,CAAC,GAAE,IAAI,MAAM;AAAA,KACnuD,EAAE,KAAK;AAAA;AAAA,CAET,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,GAAEF,GAAE,mCAAiC,OAAGA;AAAA,EAAC,EAAE;AAAE,IAAE,SAAO;AAAG,KAAG,YAAY,IAAG,CAAC,GAAG,aAAY,GAAG,YAAW,GAAG,aAAY,GAAG,cAAa,GAAG,kBAAiB,GAAG,eAAc,GAAG,cAAa,GAAG,eAAc,GAAG,cAAa,GAAG,iBAAiB,CAAC;AAAE,MAAI,KAAG,SAASA,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,MAAAA,OAAI,WAASA,KAAE,EAAE;AAAuB,UAAI,IAAE,MAAKC,KAAE,GAAG,SAASD,EAAC;AAAE,aAAOC,GAAE,YAAU,MAAG,IAAEF,GAAE,KAAK,MAAK,GAAEE,EAAC,KAAG,MAAK;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,YAAU;AAAG,MAAI,KAAG,SAASF,IAAE;AAAC,OAAG,GAAEA,EAAC;AAAE,aAAS,EAAE,GAAEC,IAAE;AAAC,MAAAA,OAAI,WAASA,KAAE,EAAE;AAAuB,UAAI,IAAE,MAAKC,KAAE,GAAG,SAASD,EAAC;AAAE,aAAOC,GAAE,YAAU,OAAG,IAAEF,GAAE,KAAK,MAAK,GAAEE,EAAC,KAAG,MAAK;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,EAAE,EAAE;AAAE,IAAE,wBAAsB;AAAE,CAAC;AAAE,IAAI,KAAGH,GAAE,QAAI;AAAC;AAAa,SAAO,eAAe,IAAG,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,KAAG,2BAAyB;AAAO,MAAI,KAAG,GAAG;AAAE,WAAS,GAAGC,IAAE,GAAE;AAAC,QAAI,IAAE,MAAI,SAAO,CAAC,IAAE,GAAEC,KAAE,EAAE,cAAa,IAAEA,OAAI,SAAO,kCAAgC,GAAG,UAAQ,eAAaA,IAAEC,KAAE,EAAE,KAAI,IAAEA,OAAI,SAAO,kCAAgC,GAAG,UAAQ,2BAAyBA,IAAE,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUx9BE,KAAE;AAAA,iCAC2B,IAAE;AAAA,GAC/B,IAAE;AAAA,iBACW,IAAE;AAAA,iBACF,IAAE;AAAA,iBACF,IAAE;AAAA,iBACF,IAAE;AAAA,GACfE,KAAE;AAAA;AAAA,GAEFC,KAAE;AAAA;AAAA,mCAE6B,KAAK,UAAUP,IAAE,MAAK,IAAI,IAAE;AAAA;AAAA,GAE3D,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAKF,WAAO,IAAEI,KAAE,IAAEE,KAAEC,KAAE;AAAA,EAAC;AAAC,KAAG,2BAAyB;AAAE,CAAC;AAAE,IAAI,KAAGR,GAAE,CAAAmD,OAAG;AAAC;AAAa,SAAO,eAAeA,IAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,EAAAA,GAAE,SAAOA,GAAE,2BAAyBA,GAAE,aAAWA,GAAE,cAAYA,GAAE,sBAAoBA,GAAE,mBAAiBA,GAAE,WAASA,GAAE,OAAKA,GAAE,0BAAwBA,GAAE,mCAAiCA,GAAE,sBAAoBA,GAAE,aAAWA,GAAE,SAAOA,GAAE,cAAYA,GAAE,cAAYA,GAAE,cAAYA,GAAE,4BAA0BA,GAAE,uBAAqBA,GAAE,6BAA2BA,GAAE,2BAAyBA,GAAE,yBAAuBA,GAAE,qBAAmBA,GAAE,6BAA2BA,GAAE,YAAUA,GAAE,eAAaA,GAAE,aAAWA,GAAE,MAAIA,GAAE,sBAAoBA,GAAE,cAAYA,GAAE,2BAAyBA,GAAE,QAAMA,GAAE,YAAUA,GAAE,4BAA0BA,GAAE,wBAAsBA,GAAE,YAAUA,GAAE,UAAQ;AAAO,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,WAAU,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAO,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,aAAY,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAS,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,yBAAwB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAqB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,6BAA4B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAyB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,aAAY,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAS,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,SAAQ,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAK,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,4BAA2B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAwB,EAAC,CAAC;AAAE,MAAIC,MAAG,GAAG;AAAE,SAAO,eAAeD,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAW,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,uBAAsB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAmB,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,OAAM,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAG,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,cAAa,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAU,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,gBAAe,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAY,EAAC,CAAC;AAAE,SAAO,eAAeD,IAAE,aAAY,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAOC,IAAG;AAAA,EAAS,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeD,IAAE,8BAA6B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAA0B,EAAC,CAAC;AAAE,MAAI,KAAGX,IAAG;AAAE,SAAO,eAAeW,IAAE,sBAAqB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAkB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,0BAAyB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAsB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,4BAA2B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAwB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,8BAA6B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAA0B,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,wBAAuB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAoB,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,6BAA4B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAyB,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAW,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAW,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAW,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,UAAS,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAM,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,cAAa,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAU,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,uBAAsB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAmB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,oCAAmC,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAgC,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,2BAA0B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAuB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,QAAO,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAI,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,YAAW,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAQ,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,oBAAmB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAgB,EAAC,CAAC;AAAE,SAAO,eAAeA,IAAE,uBAAsB,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAmB,EAAC,CAAC;AAAE,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,eAAc,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAW,EAAC,CAAC;AAAE,WAAS,KAAI;AAAC,YAAQ,KAAK;AAAA;AAAA,uEAE7nI;AAAA,EAAC;AAAC,EAAAA,GAAE,aAAW;AAAG,MAAI,KAAG,GAAG;AAAE,SAAO,eAAeA,IAAE,4BAA2B,EAAC,YAAW,MAAG,KAAI,WAAU;AAAC,WAAO,GAAG;AAAA,EAAwB,EAAC,CAAC;AAAE,MAAI,KAAG,2BAAU;AAAC,aAASlD,KAAG;AAAC,YAAM,IAAI,MAAM;AAAA,qEACtM;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC,EAAE;AAAE,EAAAkD,GAAE,SAAO;AAAE,CAAC;AAAE,IAAO,gCAAQ,GAAG;;;ACtGnH,IAAM,aAAN,cAAyB,OAAO;AAAA,EAE/B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAAA,EAEhB;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,OAAS,MAAM,SAAS,KAAO,YAAY,eAAgB,GAAI,IAAI,MAAM;AAE/E,UAAM,SAAS,IAAI,WAAY,MAAM,OAAQ;AAC7C,WAAO,QAAS,MAAM,IAAK;AAC3B,WAAO,iBAAkB,MAAM,aAAc;AAC7C,WAAO,mBAAoB,MAAM,eAAgB;AACjD,WAAO,KAAM,KAAK,SAAWE,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,OAAM,IAAK,CAAE;AAAA,MAEnC,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOC,OAAM,MAAO;AAEnB,UAAM,UAAU,CAAC;AAEjB,aAAS,iBAAkBA,OAAO;AAIjC,YAAM,YAAY,aAAa;AAE/B,YAAM,QAAQ,IAAI,UAAW,UAAU,MAAO;AAC9C,YAAM,SAAS,IAAI,WAAY,UAAU,eAAgB;AACzD,YAAM,UAAU,cAAe,OAAO,6BAA6B,CAAE;AAIrE,YAAM,eAAe,MAAM,IAAKA,KAAK;AACrC,aAAO,QAAQ,aAAa;AAI5B,YAAM,YAAY,OAAO,KAAK;AAE9B,UAAK,OAAO,OAAO,SAAS,GAAI;AAE/B,gBAAQ,MAAO,OAAO,MAAO;AAE7B,cAAM,MAAO,4CAA6C;AAAA,MAE3D;AAIA,YAAM,MAAM,QAAQ,MAAO,SAAU;AAErC,aAAO;AAAA,IAER;AAEA,aAAS,eAAe;AAEvB,YAAM,cAAc,8BAAW;AAI/B,YAAM,kBAAkB,YAAa,EAAE,MAAM,mBAAmB,SAAS,mQAAmQ,CAAE;AAC9U,YAAM,aAAa,YAAa,EAAE,MAAM,cAAc,SAAS,gIAAgI,YAAY,gBAAgB,CAAE;AAI7N,YAAM,YAAY;AAAA,QACjB;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAS;AAAA;AAAA,QAC7C;AAAA,QAAU;AAAA,QAAO;AAAA;AAAA,QACjB;AAAA,QAAa;AAAA,QAAoB;AAAA,QAAc;AAAA,QAAU;AAAA,QAAS;AAAA,QAAS;AAAA,QAAa;AAAA;AAAA,QACxF;AAAA,QAAkB;AAAA,QAAe;AAAA,QAAmB;AAAA,QAAgB;AAAA,QAAc;AAAA,QAAe;AAAA;AAAA,QACjG;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAY;AAAA,QAAiB;AAAA,QAAa;AAAA,QAAkB;AAAA,QAAkB;AAAA,QAAY;AAAA;AAAA,QACzG;AAAA,QAAS;AAAA,QAAc;AAAA,QAAU;AAAA;AAAA,QACjC;AAAA,QAAc;AAAA,QAAa;AAAA,QAAgB;AAAA,QAAY;AAAA,QAAgB;AAAA,QAAgB;AAAA;AAAA,QACvF;AAAA,QAAqB;AAAA,QAA0B;AAAA,QAAsB;AAAA,QAA2B;AAAA,QAAwB;AAAA;AAAA,QACxH;AAAA,QAAc;AAAA,QAAO;AAAA,QAAkB;AAAA;AAAA,QACvC;AAAA;AAAA,MACD;AAIA,YAAM,UAAU,YAAa;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,WAAW,YAAa;AAAA,QAC7B,MAAM;AAAA,QACN,SAAS,IAAI,OAAQ,UAAU,KAAM,GAAI,CAAE;AAAA,QAC3C,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,MAAM,YAAa;AAAA,QACxB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,MAAM,YAAa;AAAA,QACxB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,QAAQ,YAAa;AAAA,QAC1B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAEF,YAAM,KAAK,YAAa;AAAA,QACvB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAE;AAIF,YAAM,gBAAgB,YAAa,EAAE,MAAM,iBAAiB,SAAS,mFAAmF,CAAE;AAC1J,YAAM,aAAa,YAAa,EAAE,MAAM,cAAc,SAAS,oBAAoB,CAAE;AACrF,YAAM,gBAAgB,YAAa,EAAE,MAAM,iBAAiB,SAAS,yCAAyC,CAAE;AAChH,YAAM,cAAc,YAAa,EAAE,MAAM,eAAe,SAAS,OAAO,CAAE;AAC1E,YAAM,eAAe,YAAa,EAAE,MAAM,gBAAgB,SAAS,QAAQ,CAAE;AAC7E,YAAM,cAAc,YAAa,EAAE,MAAM,eAAe,SAAS,OAAO,CAAE;AAC1E,YAAM,UAAU,YAAa,EAAE,MAAM,WAAW,SAAS,KAAK,CAAE;AAChE,YAAM,UAAU,YAAa,EAAE,MAAM,WAAW,SAAS,IAAI,CAAE;AAC/D,YAAM,SAAS,YAAa,EAAE,MAAM,UAAU,SAAS,IAAI,CAAE;AAC7D,YAAM,SAAS,YAAa,EAAE,MAAM,UAAU,SAAS,IAAI,CAAE;AAC7D,YAAM,UAAU,YAAa;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO,8BAAW,MAAM;AAAA,MACzB,CAAE;AAIF,YAAM,aAAa,YAAa;AAAA,QAC/B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO,8BAAW,MAAM;AAAA,MACzB,CAAE;AAEF,YAAM,SAAS;AAAA,QACd;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAEA,YAAM,kBAAkB,CAAC;AAEzB,eAAU,IAAI,GAAGC,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AAExB,wBAAiB,MAAM,IAAK,IAAI;AAAA,MAEjC;AAEA,aAAO,EAAE,QAAgB,gBAAiC;AAAA,IAE3D;AAGA,aAAS,cAAe,iBAAkB;AAAA,MAIzC,MAAM,yBAAyB,gBAAgB;AAAA,QAE9C,cAAc;AAEb,gBAAM;AAEN,eAAK,gBAAgB;AAAA,QAEtB;AAAA,QAEA,KAAM,KAAM;AAEX,gBAAMD,QAAO;AAAA,YACZ,SAAS,KAAK,MAAO,IAAI,OAAQ;AAAA,YACjC,OAAO,CAAC;AAAA,YACR,QAAQ,CAAC;AAAA,UACV;AAEA,mBAAU,IAAI,GAAGC,KAAI,IAAI,KAAK,QAAQ,IAAIA,IAAG,KAAO;AAEnD,kBAAM,OAAO,IAAI,KAAM,CAAE;AAEzB,YAAAD,MAAK,MAAM,KAAM,KAAK,MAAO,IAAK,CAAE;AAAA,UAErC;AAEA,cAAK,IAAI,OAAQ;AAEhB,qBAAU,IAAI,GAAGC,KAAI,IAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEpD,oBAAM,QAAQ,IAAI,MAAO,CAAE;AAE3B,cAAAD,MAAK,OAAO,KAAM,KAAK,MAAO,KAAM,CAAE;AAAA,YAEvC;AAAA,UAED;AAEA,iBAAOA;AAAA,QAER;AAAA,QAEA,QAAS,KAAM;AAEd,iBAAO,IAAI,QAAS,CAAE,EAAE;AAAA,QAEzB;AAAA,QAEA,KAAM,KAAM;AAEX,gBAAMA,QAAO;AAAA,YACZ,MAAM,IAAI,SAAU,CAAE,EAAE;AAAA,YACxB,QAAQ,CAAC;AAAA,UACV;AAEA,cAAK,IAAI,OAAQ;AAEhB,qBAAU,IAAI,GAAGC,KAAI,IAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEpD,oBAAM,QAAQ,IAAI,MAAO,CAAE;AAE3B,cAAAD,MAAK,OAAO,KAAM,KAAK,MAAO,KAAM,CAAE;AAAA,YAEvC;AAAA,UAED;AAIA,cAAK,IAAI,KAAM;AAEd,YAAAA,MAAK,MAAM,KAAK,MAAO,IAAI,IAAK,CAAE,CAAE;AAAA,UAErC;AAEA,iBAAOA;AAAA,QAER;AAAA,QAEA,MAAO,KAAM;AAEZ,gBAAMA,QAAO;AAAA,YACZ,MAAM,IAAI,WAAY,CAAE,EAAE;AAAA,YAC1B,MAAM;AAAA,YACN,QAAQ;AAAA,UACT;AAEA,cAAI;AAIJ,cAAK,IAAI,kBAAmB;AAE3B,qBAAS,KAAK,MAAO,IAAI,iBAAkB,CAAE,CAAE;AAAA,UAEhD;AAIA,cAAK,IAAI,iBAAkB;AAE1B,qBAAS,KAAK,MAAO,IAAI,gBAAiB,CAAE,CAAE;AAAA,UAE/C;AAEA,UAAAA,MAAK,OAAO,OAAO;AACnB,UAAAA,MAAK,SAAS,OAAO;AAErB,iBAAOA;AAAA,QAER;AAAA,QAEA,IAAK,KAAM;AAEV,kBAAS,IAAI,cAAc,IAAI,UAAY,CAAE,EAAE;AAAA,QAEhD;AAAA,QAEA,IAAK,KAAM;AAEV,iBAAO,EAAE,MAAO,IAAI,cAAc,IAAI,UAAY,CAAE,EAAE,MAAM;AAAA,QAE7D;AAAA,QAEA,iBAAkB,KAAM;AAEvB,iBAAO,aAAc,MAAM,GAAI;AAAA,QAEhC;AAAA,QAEA,gBAAiB,KAAM;AAEtB,iBAAO,aAAc,MAAM,GAAI;AAAA,QAEhC;AAAA,QAEA,MAAO,KAAM;AAEZ,gBAAMA,QAAO;AAAA,YACZ,MAAM,IAAI,gBAAiB,CAAE,EAAE;AAAA,YAC/B,IAAI,IAAI,gBAAiB,CAAE,EAAE;AAAA,UAC9B;AAEA,iBAAOA;AAAA,QAER;AAAA,MAED;AAEA,eAAS,aAAc,OAAO,KAAM;AAEnC,cAAM,QAAQ;AAAA,UACb,MAAM;AAAA,UACN,QAAQ,CAAC;AAAA,QACV;AAEA,YAAK,IAAI,MAAO;AAEf,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGC,KAAI,IAAI,KAAK,QAAQ,IAAIA,IAAG,KAAO;AAEnD,kBAAM,OAAO,IAAI,KAAM,CAAE;AAEzB,kBAAM,OAAO,KAAM,MAAM,MAAO,IAAK,CAAE;AAAA,UAExC;AAAA,QAED;AAEA,YAAK,IAAI,KAAM;AAEd,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,IAAI,QAAQ,IAAIA,IAAG,KAAO;AAElD,kBAAM,MAAM,IAAI,IAAK,CAAE;AAEvB,kBAAM,OAAO,KAAM,MAAM,MAAO,GAAI,CAAE;AAAA,UAEvC;AAAA,QAED;AAEA,YAAK,IAAI,eAAgB;AAExB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,cAAc,QAAQ,IAAIA,IAAG,KAAO;AAE5D,kBAAM,gBAAgB,IAAI,cAAe,CAAE;AAE3C,kBAAM,OAAO,KAAM,cAAc,MAAM,QAAS,QAAQ,EAAG,CAAE;AAAA,UAE9D;AAAA,QAED;AAEA,YAAK,IAAI,eAAgB;AAExB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,cAAc,QAAQ,IAAIA,IAAG,KAAO;AAE5D,kBAAM,gBAAgB,IAAI,cAAe,CAAE;AAE3C,kBAAM,OAAO,KAAM,WAAY,cAAc,KAAM,CAAE;AAAA,UAEtD;AAAA,QAED;AAEA,YAAK,IAAI,YAAa;AAErB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,WAAW,QAAQ,IAAIA,IAAG,KAAO;AAEzD,kBAAM,aAAa,IAAI,WAAY,CAAE;AAErC,kBAAM,OAAO,KAAM,WAAW,KAAM;AAAA,UAErC;AAAA,QAED;AAEA,YAAK,IAAI,aAAc;AAEtB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,YAAY,QAAQ,IAAIA,IAAG,KAAO;AAE1D,kBAAM,cAAc,IAAI,YAAa,CAAE;AAEvC,gBAAK,YAAY,UAAU,OAAS,OAAM,OAAO,KAAM,IAAK;AAAA,UAE7D;AAAA,QAED;AAEA,YAAK,IAAI,cAAe;AAEvB,gBAAM,OAAO;AAEb,mBAAU,IAAI,GAAGA,KAAI,IAAI,aAAa,QAAQ,IAAIA,IAAG,KAAO;AAE3D,kBAAM,eAAe,IAAI,aAAc,CAAE;AAEzC,gBAAK,aAAa,UAAU,QAAU,OAAM,OAAO,KAAM,KAAM;AAAA,UAEhE;AAAA,QAED;AAEA,YAAK,IAAI,aAAc;AAEtB,gBAAM,OAAO;AAEb,cAAI,YAAY,QAAS,WAAY;AAEpC,kBAAM,OAAO,KAAM,IAAK;AAAA,UAEzB,CAAE;AAAA,QAEH;AAEA,eAAO;AAAA,MAER;AAEA,aAAO,IAAI,iBAAiB;AAAA,IAE7B;AAEA,aAAS,UAAWC,OAAO;AAI1B,YAAM,QAAQA,MAAK;AACnB,YAAMC,SAAQ,IAAI,MAAM;AAIxB,eAAU,IAAI,GAAGF,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,cAAM,OAAO,MAAO,CAAE;AAEtB,qBAAc,IAAK;AAAA,MAEpB;AAIA,eAAU,IAAI,GAAGA,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,cAAM,OAAO,MAAO,CAAE;AACtB,cAAM,SAAS,QAAS,IAAK;AAE7B,YAAK,kBAAkB,SAAW,CAAAE,OAAM,IAAK,MAAO;AAEpD,YAAK,KAAK,SAAS,YAAc,CAAAA,OAAM,SAAS,YAAY;AAAA,MAE7D;AAEA,aAAOA;AAAA,IAER;AAEA,aAAS,aAAc,MAAO;AAE7B,UAAK,KAAK,KAAM;AAEf,gBAAS,KAAK,GAAI,IAAI;AAAA,MAEvB;AAEA,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGF,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AAExB,YAAK,MAAM,SAAS,QAAS;AAE5B,gBAAM,cAAc,MAAM;AAE1B,mBAAU,IAAI,GAAG,KAAK,YAAY,QAAQ,IAAI,IAAI,KAAO;AAExD,yBAAc,YAAa,CAAE,CAAE;AAAA,UAEhC;AAAA,QAED;AAAA,MAGD;AAAA,IAED;AAGA,aAAS,QAAS,MAAO;AAIxB,UAAK,KAAK,KAAM;AAEf,eAAO,WAAY,KAAK,GAAI;AAAA,MAE7B;AAEA,UAAK,KAAK,UAAU,OAAY,QAAO,KAAK;AAE5C,WAAK,QAAQ,UAAW,IAAK;AAE7B,aAAO,KAAK;AAAA,IAEb;AAIA,aAAS,UAAW,MAAO;AAE1B,YAAM,WAAW,KAAK;AACtB,UAAI;AAEJ,cAAS,UAAW;AAAA,QAEnB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACJ,kBAAQ,kBAAmB,IAAK;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,oBAAqB,IAAK;AAClC;AAAA,QAED,KAAK;AACJ,kBAAQ,eAAgB,IAAK;AAC7B;AAAA,QAED,KAAK;AACJ,kBAAQ,oBAAqB,IAAK;AAClC;AAAA,QAED,KAAK;AACJ,kBAAQ,kBAAmB,IAAK;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,sBAAuB,IAAK;AACpC;AAAA,QAED,KAAK;AACJ,kBAAQ,sBAAuB,IAAK;AACpC;AAAA,QAED,KAAK;AACJ,kBAAQ,0BAA2B,IAAK;AACxC;AAAA,QAED,KAAK;AACJ,kBAAQ,wBAAyB,IAAK;AACtC;AAAA,QAED,KAAK;AACJ,kBAAQ,wBAAyB,IAAK;AACtC;AAAA,QAED,KAAK;AACJ,kBAAQ,kBAAmB,IAAK;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,aAAc,IAAK;AAC3B;AAAA,QAED,KAAK;AACJ,kBAAQ,cAAe,IAAK;AAC5B;AAAA,QAED,KAAK;AACJ,kBAAQ,kBAAmB,IAAK;AAChC;AAAA,QAED,KAAK;AACJ,kBAAQ,gBAAiB,IAAK;AAC9B;AAAA,QAED,KAAK;AACJ,kBAAQ,uBAAwB,IAAK;AACrC;AAAA,QAED,KAAK;AACJ,kBAAQ,mBAAoB,IAAK;AACjC;AAAA,QAED,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACJ,kBAAQ,mBAAoB,IAAK;AACjC;AAAA,QAED,KAAK;AACJ,kBAAQ,mBAAoB,IAAK;AACjC;AAAA,QAED,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAEJ;AAAA,QAED;AACC,kBAAQ,KAAM,mCAAmC,QAAS;AAC1D;AAAA,MAEF;AAEA,UAAK,UAAU,UAAa,KAAK,QAAQ,UAAa,MAAM,eAAgB,MAAO,MAAM,MAAO;AAE/F,cAAM,OAAO,KAAK;AAAA,MAEnB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,YAAM,SAAS,IAAI,MAAM;AAIzB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,+BAAoB,aAAa,MAAO;AACxC;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,kBAAM,OAAO,IAAI,QAAS,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE,EAAE,UAAU;AAC3F,kBAAM,QAAQ,YAAa,CAAE;AAC7B,mBAAO,WAAW,iBAAkB,MAAM,KAAM;AAChD;AAAA,UAED,KAAK;AACJ,mBAAO,MAAM,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AACvE;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,mBAAO,SAAS,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC1E;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,oBAAqB,MAAO;AAEpC,YAAM,QAAQ,IAAI,MAAM;AAExB,UAAI,aAAa;AACjB,UAAI,UAAU;AAEd,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,0BAAc;AACd;AAAA,UAED,KAAK;AACJ,0BAAc;AACd;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,uBAAW;AACX;AAAA,UAED,KAAK;AACJ,uBAAW;AACX;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,SAAS;AAIf,UAAK,UAAW;AAEf,cAAM,cAAc,IAAI,eAAgB,QAAQ,IAAI,EAAG;AACvD,cAAM,cAAc,IAAI,kBAAmB,EAAE,KAAK,OAAO,MAAM,UAAU,YAAY,OAAO,WAAW,MAAM,CAAE;AAE/G,YAAK,SAAS,SAAS,GAAI;AAE1B,qBAAY,aAAa,QAAQ,UAAU,aAAc,QAAS,GAAG,IAAK;AAC1E,sBAAY,eAAe;AAAA,QAE5B,OAAO;AAEN,sBAAY,MAAM,OAAQ,SAAU,CAAE,GAAG,SAAU,CAAE,GAAG,SAAU,CAAE,CAAE;AACtE,sBAAY,MAAM,oBAAoB;AAAA,QAEvC;AAEA,cAAM,MAAM,IAAI,KAAM,aAAa,WAAY;AAC/C,cAAM,IAAK,GAAI;AAAA,MAEhB;AAIA,UAAK,aAAc;AAElB,YAAK,YAAY,SAAS,GAAI;AAE7B,gBAAM,iBAAiB,IAAI,eAAgB,QAAQ,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,KAAK,EAAG;AACxG,gBAAM,iBAAiB,IAAI,kBAAmB,EAAE,KAAK,OAAO,MAAM,UAAU,cAAc,MAAM,YAAY,OAAO,WAAW,MAAM,CAAE;AAEtI,qBAAY,gBAAgB,QAAQ,aAAa,aAAc,WAAY,GAAG,KAAM;AAEpF,gBAAM,SAAS,IAAI,KAAM,gBAAgB,cAAe;AACxD,gBAAM,IAAK,MAAO;AAAA,QAEnB;AAAA,MAED;AAIA,YAAM,cAAc;AAEpB,aAAO;AAAA,IAER;AAEA,aAAS,eAAgB,MAAO;AAE/B,YAAM,SAAS,KAAK;AAIpB,UAAI,WAAW,IAAI,kBAAmB;AAAA,QACrC,MAAM,OAAO;AAAA,QACb,OAAO;AAAA,MACR,CAAE;AACF,UAAI;AAEJ,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAO;AAEhC,yBAAW,QAAS,YAAa,CAAE,CAAE;AAAA,YAEtC;AAEA;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAO;AAEhC,yBAAW,QAAS,YAAa,CAAE,CAAE;AAAA,YAEtC;AAEA;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAIA,UAAI;AAEJ,UAAK,YAAY,SAAS,WAAW,UAAW;AAE/C,cAAM,OAAO,SAAS;AAEtB,YAAK,SAAS,UAAW;AAExB,gBAAM,iBAAiB,IAAI,eAAgB;AAAA,YAC1C,MAAM,OAAO;AAAA,YACb,OAAO;AAAA,YACP,SAAS,SAAS;AAAA,YAClB,aAAa,SAAS;AAAA,UACvB,CAAE;AAEF,cAAK,SAAS,WAAW,UAAU,QAAY;AAE9C,2BAAe,eAAe;AAAA,UAE/B,OAAO;AAIN,gBAAK,SAAS,qBAAsB;AAEnC,6BAAe,MAAM,KAAM,SAAS,QAAS;AAAA,YAE9C;AAAA,UAED;AAEA,mBAAS,IAAI,OAAQ,UAAU,cAAe;AAAA,QAE/C,WAAY,SAAS,QAAS;AAE7B,gBAAM,eAAe,IAAI,kBAAmB;AAAA,YAC3C,MAAM,OAAO;AAAA,YACb,OAAO;AAAA,YACP,SAAS,SAAS;AAAA,YAClB,aAAa,SAAS;AAAA,UACvB,CAAE;AAEF,cAAK,SAAS,WAAW,UAAU,QAAY;AAE9C,yBAAa,eAAe;AAAA,UAE7B,OAAO;AAIN,gBAAK,SAAS,qBAAsB;AAEnC,2BAAa,MAAM,KAAM,SAAS,QAAS;AAAA,YAE5C;AAAA,UAED;AAEA,mBAAS,IAAI,aAAc,UAAU,YAAa;AAAA,QAEnD,OAAO;AAIN,cAAK,SAAS,WAAW,QAAY;AAEpC,qBAAS,OAAS,SAAS,SAAW,YAAY;AAAA,UAEnD;AAIA,cAAK,SAAS,WAAW,UAAU,QAAY;AAE9C,qBAAS,eAAe;AAAA,UAEzB;AAEA,mBAAS,IAAI,KAAM,UAAU,QAAS;AAAA,QAEvC;AAAA,MAED,OAAO;AAEN,iBAAS,IAAI,SAAS;AAItB,eAAO,UAAU;AAAA,MAElB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,oBAAqB,MAAO;AAEpC,UAAI,WAAW,IAAI,kBAAkB;AACrC,UAAI;AAEJ,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAO;AAEhC,oBAAM,eAAe,QAAS,YAAa,CAAE,CAAE;AAE/C,kBAAK,aAAa,aAAe,UAAS,MAAM,KAAM,aAAa,YAAa;AAChF,kBAAK,aAAa,cAAgB,UAAS,SAAS,KAAM,aAAa,aAAc;AACrF,kBAAK,aAAa,UAAY,UAAS,YAAY,aAAa;AAChE,kBAAK,aAAa,cAAgB,UAAS,SAAS,KAAM,aAAa,aAAc;AACrF,kBAAK,aAAa,aAAe,UAAS,UAAU,IAAI,aAAa;AACrE,kBAAK,aAAa,eAAe,EAAI,UAAS,cAAc;AAAA,YAE7D,OAAO;AAIN,yBAAW,IAAI,kBAAmB;AAAA,gBACjC,MAAM,OAAO;AAAA,gBACb,OAAO;AAAA,cACR,CAAE;AAAA,YAEH;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,cAAc,YAAa,CAAE;AACnC,gBAAK,gBAAgB,MAAO;AAE3B,kBAAK,YAAY,SAAS,kBAAkB,YAAY,SAAS,gBAAiB;AAEjF,yBAAS,MAAM,QAAS,WAAY;AAAA,cAErC,OAAO;AAAA,cAIP;AAAA,YAED;AAEA;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAO;AAEhC,8BAAgB,QAAS,YAAa,CAAE,CAAE;AAAA,YAE3C;AAEA;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAIA,UAAK,SAAS,KAAM;AAInB,YAAK,SAAS,IAAI,QAAS;AAE1B,kBAAS,SAAS,IAAI,QAAS;AAAA,YAE9B,KAAK,aAAa;AACjB,uBAAS,UAAU;AACnB;AAAA,YAED,KAAK,aAAa;AACjB,uBAAS,MAAM,IAAK,QAAS;AAC7B;AAAA,YAED,KAAK,aAAa;AACjB,uBAAS,MAAM,IAAK,QAAS;AAC7B,uBAAS,UAAU;AACnB;AAAA,YAED;AAAA,UAED;AAEA,iBAAO,SAAS,IAAI;AAAA,QAErB;AAIA,YAAK,eAAgB;AAEpB,mBAAS,IAAI,OAAO,KAAM,cAAc,MAAO;AAC/C,mBAAS,IAAI,WAAW,cAAc;AACtC,mBAAS,IAAI,OAAO,KAAM,cAAc,KAAM;AAC9C,mBAAS,IAAI,OAAO,KAAM,cAAc,WAAY;AAAA,QAErD;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,YAAM,eAAe,CAAC;AAEtB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,yBAAa,eAAe,IAAI,MAAO,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC5F,yBAAa,aAAa,oBAAoB;AAC9C;AAAA,UAED,KAAK;AACJ,yBAAa,gBAAgB,IAAI,MAAO,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC7F,yBAAa,cAAc,oBAAoB;AAC/C;AAAA,UAED,KAAK;AACJ,yBAAa,YAAY,YAAa,CAAE;AACxC;AAAA,UAED,KAAK;AACJ,yBAAa,gBAAgB,IAAI,MAAO,YAAa,CAAE,GAAG,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC7F,yBAAa,cAAc,oBAAoB;AAC/C;AAAA,UAED,KAAK;AACJ,yBAAa,eAAe,YAAa,CAAE;AAC3C;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,cAAe,KAAK,aAAa,OAAQ;AAEjD,UAAIG;AAEJ,cAAS,aAAc;AAAA,QAEtB,KAAK,aAAa;AAEjB,UAAAA,SAAQ,SAAU,GAAI;AACtB,gBAAM,IAAIA;AACV,gBAAM,IAAIA;AACV,gBAAM,IAAIA;AACV,gBAAM,IAAI;AACV;AAAA,QAED,KAAK,aAAa;AAEjB,UAAAA,SAAQ,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AAC/C,gBAAM,IAAIA;AACV,gBAAM,IAAIA;AACV,gBAAM,IAAIA;AACV,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD;AAAA,QAED,KAAK,aAAa;AAEjB,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI;AACV;AAAA,QAED,KAAK,aAAa;AAEjB,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,CAAE,CAAE;AACjD,gBAAM,IAAI,SAAU,OAAO,IAAI,UAAW,GAAG,EAAG,CAAE;AAClD;AAAA,QAED;AAAA,MAED;AAAA,IAED;AAEA,aAAS,eAAgB,gBAAiB;AAEzC,UAAI;AAEJ,cAAS,gBAAiB;AAAA,QAEzB,KAAK;AACJ,iBAAO,aAAa;AACpB;AAAA,QAED,KAAK;AACJ,iBAAO,aAAa;AACpB;AAAA,QAED,KAAK;AACJ,iBAAO,aAAa;AACpB;AAAA,QAED,KAAK;AACJ,iBAAO,aAAa;AACpB;AAAA,QAED;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,sBAAuB,MAAO;AAEtC,UAAI;AACJ,UAAI,QAAQ;AACZ,UAAI,QAAQ;AAEZ,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGH,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAMI,SAAQ,YAAa,CAAE;AAC7B,kBAAMC,UAAS,YAAa,CAAE;AAC9B,kBAAM,iBAAiB,YAAa,CAAE;AAEtC,kBAAM,cAAc,eAAgB,cAAe;AAEnD,kBAAMN,QAAO,IAAI,WAAY,IAAIK,SAAQC,OAAO;AAEhD,kBAAM,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAEvC,qBAAU,IAAI,GAAGC,KAAI,GAAG,KAAK,YAAY,QAAQ,IAAI,IAAI,KAAMA,MAAO;AAErE,4BAAe,YAAa,CAAE,GAAG,aAAa,KAAM;AAEpD,oBAAM,SAASA,KAAI;AAEnB,cAAAP,MAAM,SAAS,CAAE,IAAI,MAAM;AAC3B,cAAAA,MAAM,SAAS,CAAE,IAAI,MAAM;AAC3B,cAAAA,MAAM,SAAS,CAAE,IAAI,MAAM;AAC3B,cAAAA,MAAM,SAAS,CAAE,IAAI,MAAM;AAAA,YAE5B;AAEA,sBAAU,IAAI,YAAaA,OAAMK,QAAOC,OAAO;AAC/C,oBAAQ,aAAa;AACrB,oBAAQ,cAAc;AACtB,oBAAQ,SAAS;AACjB;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAQ,SAAQ;AAC1C;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAQ,SAAQ;AAC1C;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,UAAK,SAAU;AAEd,gBAAQ,QAAQ;AAChB,gBAAQ,QAAQ;AAAA,MAEjB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,sBAAuB,MAAO;AAEtC,UAAI;AACJ,UAAI,QAAQ;AACZ,UAAI,QAAQ;AAEZ,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,MAAM,YAAa,CAAE;AAC3B,gBAAK,IAAM,WAAU,cAAc,KAAM,GAAI;AAC7C;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAQ,SAAQ;AAC1C;AAAA,UAED,KAAK;AACJ,gBAAK,YAAa,CAAE,MAAM,MAAQ,SAAQ;AAC1C;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,UAAK,SAAU;AAEd,gBAAQ,QAAQ;AAChB,gBAAQ,QAAQ;AAChB,gBAAQ,aAAa;AAAA,MAEtB;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,0BAA2B,MAAO;AAE1C,YAAM,gBAAgB;AAAA,QACrB,QAAQ,IAAI,QAAQ;AAAA,QACpB,UAAU,IAAI,QAAQ;AAAA,QACtB,OAAO,IAAI,QAAQ;AAAA,QACnB,aAAa,IAAI,QAAQ;AAAA,MAC1B;AAEA,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,0BAAc,OAAO,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC7D;AAAA,UAED,KAAK;AACJ,0BAAc,WAAW,YAAa,CAAE;AACxC;AAAA,UAED,KAAK;AACJ,0BAAc,MAAM,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAC5D;AAAA,UAED,KAAK;AACJ,0BAAc,YAAY,IAAK,YAAa,CAAE,GAAG,YAAa,CAAE,CAAE;AAClE;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,mBAAoB,MAAO;AAEnC,aAAO,KAAK,OAAQ,CAAE,EAAE;AAAA,IAEzB;AAEA,aAAS,mBAAoB,MAAO;AAEnC,YAAM,YAAY,CAAC;AAEnB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,sBAAU,QAAQ,YAAa,CAAE;AACjC;AAAA,UAED,KAAK;AACJ,sBAAU,OAAO;AACjB;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,wBAAyB,MAAO;AAExC,UAAI,OAAO,OAAO,QAAQ;AAC1B,UAAI,MAAM,MAAM,QAAQ,MAAM,cAAc;AAC5C,UAAI,YAAY,YAAY,aAAa;AACzC,UAAI,iBAAiB,MAAM,kBAAkB;AAE7C,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,aAAa,YAAa,CAAE;AAElC,gBAAK,eAAe,MAAO;AAE1B,uBAAS,QAAS,UAAW;AAAA,YAE9B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,eAAe,YAAa,CAAE;AAEpC,gBAAK,iBAAiB,MAAO;AAE5B,yBAAW,QAAS,YAAa;AAAA,YAElC;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,YAAa,CAAE;AACrB;AAAA,UAED,KAAK;AACJ,yBAAa;AACb;AAAA,UAED,KAAK;AACJ,6BAAiB,YAAa,CAAE;AAChC;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,yBAAa;AACb;AAAA,UAED,KAAK;AACJ,0BAAc,YAAa,CAAE;AAC7B;AAAA,UAED,KAAK;AACJ,0BAAc;AACd;AAAA,UAED,KAAK;AACJ,8BAAkB,YAAa,CAAE;AACjC;AAAA,UAED,KAAK;AACJ,oBAAQ,YAAa,CAAE;AACvB;AAAA,UAED,KAAK;AACJ,4BAAgB;AAChB;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,UAAK,eAAe,QAAY;AAE/B,gBAAQ,KAAM,uCAAwC;AAEtD,eAAO,IAAI,eAAe;AAAA,MAE3B;AAEA,YAAM,yBAAyB,qBAAsB,YAAY,GAAI;AAErE,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,UAAK,OAAQ;AAEZ,YAAK,mBAAmB,MAAO;AAE9B,cAAK,cAAc,WAAW,SAAS,GAAI;AAI1C,kBAAM,yBAAyB,qBAAsB,YAAY,GAAI;AACrE,6BAAiB,gCAAiC,wBAAwB,wBAAwB,OAAO,CAAE;AAAA,UAE5G,OAAO;AAIN,6BAAiB,sBAAuB,wBAAwB,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAAA,UAExG;AAAA,QAED,OAAO;AAEN,cAAK,cAAc,WAAW,SAAS,GAAI;AAI1C,kBAAM,oBAAoB,YAAa,OAAO,UAAW;AACzD,kBAAM,yBAAyB,oBAAqB,mBAAmB,UAAW;AAClF,6BAAiB,6BAA8B,wBAAwB,sBAAuB;AAAA,UAE/F,OAAO;AAIN,kBAAM,yBAAyB,oBAAqB,OAAO,UAAW;AACtE,6BAAiB,6BAA8B,wBAAwB,sBAAuB;AAAA,UAG/F;AAAA,QAED;AAEA,kCAA2B,cAAe;AAAA,MAE3C;AAEA,UAAK,QAAS;AAEb,YAAK,oBAAoB,MAAO;AAI/B,cAAK,eAAe,YAAY,SAAS,GAAI;AAI5C,kBAAM,0BAA0B,qBAAsB,aAAa,GAAI;AACvE,8BAAkB,gCAAiC,wBAAwB,yBAAyB,QAAQ,CAAE;AAAA,UAE/G,OAAO;AAIN,8BAAkB,sBAAuB,wBAAwB,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AAAA,UAE1G;AAAA,QAED,OAAO;AAIN,cAAK,eAAe,YAAY,SAAS,GAAI;AAI5C,kBAAM,qBAAqB,YAAa,QAAQ,WAAY;AAC5D,kBAAM,0BAA0B,oBAAqB,oBAAoB,UAAW;AACpF,8BAAkB,6BAA8B,wBAAwB,uBAAwB;AAAA,UAEjG,OAAO;AAIN,kBAAM,0BAA0B,oBAAqB,QAAQ,UAAW;AACxE,8BAAkB,6BAA8B,wBAAwB,uBAAwB;AAAA,UAEjG;AAAA,QAED;AAAA,MAED,OAAO;AAIN,0BAAkB,uBAAwB,wBAAwB,OAAO,WAAY;AAAA,MAEtF;AAEA,UAAK,UAAW;AAIf,YAAK,iBAAiB,cAAc,SAAS,GAAI;AAIhD,gBAAM,4BAA4B,qBAAsB,eAAe,GAAI;AAC3E,wBAAc,gCAAiC,wBAAwB,2BAA2B,UAAU,CAAE;AAAA,QAG/G,OAAO;AAIN,wBAAc,sBAAuB,wBAAwB,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAAA,QAExG;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,eAAe;AACpC,YAAM,oBAAoB,sBAAuB,wBAAwB,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAEhH,eAAS,aAAc,YAAY,iBAAkB;AACrD,eAAS,aAAc,UAAU,eAAgB;AAIjD,UAAK,eAAiB,UAAS,aAAc,SAAS,cAAe;AACrE,UAAK,YAAc,UAAS,aAAc,MAAM,WAAY;AAI5D,eAAS,SAAS;AAClB,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAEA,aAAS,wBAAyB,MAAO;AAExC,UAAI,OAAO;AACX,UAAI,YAAY;AAChB,UAAI,iBAAiB;AAErB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,yBAAa;AACb;AAAA,UAED,KAAK;AACJ,6BAAiB,YAAa,CAAE;AAChC;AAAA,UAED,KAAK;AACJ,yBAAa;AACb;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAIA,UAAI;AAEJ,YAAM,oBAAoB,gBAAiB,UAAW;AAEtD,UAAK,OAAQ;AAEZ,YAAK,mBAAmB,MAAO;AAE9B,cAAK,WAAW,SAAS,GAAI;AAI5B,kBAAM,qBAAqB,gBAAiB,UAAW;AACvD,6BAAiB,gCAAiC,mBAAmB,oBAAoB,OAAO,CAAE;AAAA,UAEnG,OAAO;AAIN,6BAAiB,sBAAuB,mBAAmB,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAAA,UAEnG;AAAA,QAED,OAAO;AAEN,cAAK,WAAW,SAAS,GAAI;AAI5B,kBAAM,oBAAoB,YAAa,OAAO,UAAW;AACzD,kBAAM,qBAAqB,eAAgB,mBAAmB,UAAW;AACzE,6BAAiB,6BAA8B,mBAAmB,kBAAmB;AAAA,UAGtF,OAAO;AAIN,kBAAM,qBAAqB,eAAgB,OAAO,UAAW;AAC7D,6BAAiB,6BAA8B,mBAAmB,kBAAmB;AAAA,UAEtF;AAAA,QAED;AAEA,kCAA2B,cAAe;AAAA,MAE3C;AAIA,YAAM,WAAW,IAAI,eAAe;AAEpC,YAAM,oBAAoB,sBAAuB,mBAAmB,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAC3G,eAAS,aAAc,YAAY,iBAAkB;AAErD,UAAK,eAAiB,UAAS,aAAc,SAAS,cAAe;AAErE,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,UAAI,OAAO;AAEX,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAGD;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,eAAe;AAEpC,eAAS,aAAc,YAAY,IAAI,uBAAwB,OAAO,CAAE,CAAE;AAE1E,UAAK,OAAQ;AAEZ,cAAM,iBAAiB,IAAI,uBAAwB,OAAO,CAAE;AAC5D,kCAA2B,cAAe;AAE1C,iBAAS,aAAc,SAAS,cAAe;AAAA,MAEhD;AAEA,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAEA,aAAS,aAAc,MAAO;AAE7B,YAAMO,QAAO,IAAI,QAAS,GAAG,GAAG,CAAE;AAElC,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGP,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,YAAAO,MAAK,IAAI,YAAa,CAAE;AACxB,YAAAA,MAAK,IAAI,YAAa,CAAE;AACxB,YAAAA,MAAK,IAAI,YAAa,CAAE;AACxB;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,YAAaA,MAAK,GAAGA,MAAK,GAAGA,MAAK,CAAE;AAEzD,aAAO;AAAA,IAER;AAEA,aAAS,cAAe,MAAO;AAE9B,UAAI,SAAS,GAAGF,UAAS,GAAG,YAAY;AAExC,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,wBAAY,CAAE,YAAa,CAAE;AAC7B;AAAA,UAED,KAAK;AACJ,qBAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AACJ,YAAAK,UAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AAEJ;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,aAAc,QAAQA,SAAQ,IAAI,GAAG,SAAU;AAEpE,aAAO;AAAA,IAER;AAEA,aAAS,kBAAmB,MAAO;AAElC,UAAI,SAAS,GAAGA,UAAS;AAEzB,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,qBAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AACJ,YAAAK,UAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AAEJ;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,iBAAkB,QAAQ,QAAQA,SAAQ,IAAI,CAAE;AAErE,aAAO;AAAA,IAER;AAEA,aAAS,gBAAiB,MAAO;AAEhC,UAAI,SAAS;AAEb,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,qBAAS,YAAa,CAAE;AACxB;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,eAAgB,QAAQ,IAAI,EAAG;AAEpD,aAAO;AAAA,IAER;AAEA,aAAS,uBAAwB,MAAO;AAEvC,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAIK;AAEJ,UAAI,iBAAiB;AACrB,UAAI,kBAAkB;AACtB,UAAI,QAAQ;AACZ,UAAI,MAAM;AACV,UAAI,cAAc;AAClB,UAAI,aAAa;AACjB,UAAI,aAAa;AACjB,UAAI,WAAW;AACf,UAAI,WAAW;AAEf,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGL,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,kBAAM,YAAY,YAAa,CAAE;AAEjC,gBAAK,cAAc,MAAO;AAEzB,sBAAQ,QAAS,SAAU;AAAA,YAE5B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,aAAa,YAAa,CAAE;AAElC,gBAAK,eAAe,MAAO;AAE1B,uBAAS,QAAS,UAAW;AAAA,YAE9B;AAEA;AAAA,UAED,KAAK;AACJ,kBAAM,eAAe,YAAa,CAAE;AAEpC,gBAAK,iBAAiB,MAAO;AAE5B,yBAAW,QAAS,YAAa;AAAA,YAElC;AAEA;AAAA,UAED,KAAK;AACJ,YAAAK,UAAS;AACT;AAAA,UAED,KAAK;AACJ,kBAAM,YAAa,CAAE;AACrB;AAAA,UAED,KAAK;AACJ,6BAAiB,YAAa,CAAE;AAChC;AAAA,UAED,KAAK;AACJ,0BAAc,YAAa,CAAE;AAC7B;AAAA,UAED,KAAK;AACJ,8BAAkB,YAAa,CAAE;AACjC;AAAA,UAED,KAAK;AACJ,oBAAQ,YAAa,CAAE;AACvB;AAAA,UAED,KAAK;AACJ,yBAAa,YAAa,CAAE;AAC5B;AAAA,UAED,KAAK;AACJ,uBAAW,YAAa,CAAE;AAC1B;AAAA,UAED,KAAK;AACJ,yBAAa,YAAa,CAAE;AAC5B;AAAA,UAED,KAAK;AACJ,uBAAW,YAAa,CAAE;AAC1B;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAIA,YAAM,WAAW,CAAC;AAClB,YAAM,UAAU,CAAC;AACjB,YAAM,SAAS,CAAC;AAChB,YAAM,MAAM,CAAC;AAEb,eAAU,IAAI,GAAG,IAAI,YAAY,KAAO;AAEvC,iBAAU,IAAI,GAAG,IAAI,YAAY,KAAO;AAIvC,gBAAMG,SAAU,IAAI,aAAe;AAInC,gBAAMC,KAAI,WAAW;AACrB,gBAAMC,KAAIL,QAAQG,MAAM;AACxB,gBAAM,IAAI,WAAW;AAErB,mBAAS,KAAMC,IAAGC,IAAG,CAAE;AAIvB,cAAK,SAAS,mBAAmB,MAAO;AAEvC,kBAAM,IAAI,MAAOF,SAAQ,IAAI,CAAE;AAC/B,kBAAMG,KAAI,MAAOH,SAAQ,IAAI,CAAE;AAC/B,kBAAMI,KAAI,MAAOJ,SAAQ,IAAI,CAAE;AAE/B,mBAAO,KAAM,GAAGG,IAAGC,EAAE;AAAA,UAEtB;AAIA,cAAK,UAAU,oBAAoB,MAAO;AAEzC,kBAAM,KAAK,OAAQJ,SAAQ,IAAI,CAAE;AACjC,kBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AACjC,kBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AAEjC,oBAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,UAE1B;AAIA,cAAK,UAAW;AAEf,kBAAM,IAAI,SAAUA,SAAQ,IAAI,CAAE;AAClC,kBAAMK,KAAI,SAAUL,SAAQ,IAAI,CAAE;AAElC,gBAAI,KAAM,GAAGK,EAAE;AAAA,UAGhB,OAAO;AAEN,gBAAI,KAAM,KAAM,aAAa,IAAK,KAAM,aAAa,EAAI;AAAA,UAE1D;AAAA,QAED;AAAA,MAED;AAIA,YAAM,UAAU,CAAC;AAEjB,eAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,iBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAI3C,gBAAMC,KAAI,IAAI,IAAI;AAClB,gBAAMF,KAAI,KAAM,IAAI,KAAM;AAC1B,gBAAMG,KAAM,IAAI,KAAQ,IAAI,KAAM;AAClC,gBAAM,IAAM,IAAI,IAAM,IAAI;AAI1B,cAAK,QAAQ,MAAO;AAEnB,oBAAQ,KAAMD,IAAGC,IAAGH,EAAE;AACtB,oBAAQ,KAAMG,IAAGD,IAAG,CAAE;AAAA,UAEvB,OAAO;AAEN,oBAAQ,KAAMA,IAAGF,IAAGG,EAAE;AACtB,oBAAQ,KAAMA,IAAG,GAAGD,EAAE;AAAA,UAEvB;AAAA,QAED;AAAA,MAED;AAIA,YAAM,oBAAoB,sBAAuB,SAAS,IAAI,uBAAwB,UAAU,CAAE,CAAE;AACpG,YAAM,cAAc,sBAAuB,SAAS,IAAI,uBAAwB,KAAK,CAAE,CAAE;AACzF,UAAI;AACJ,UAAI;AAIJ,UAAK,OAAQ;AAEZ,YAAK,mBAAmB,OAAQ;AAE/B,mBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,qBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,oBAAMN,SAAQ,IAAI,KAAM,aAAa;AAErC,oBAAM,IAAI,MAAOA,SAAQ,IAAI,CAAE;AAC/B,oBAAMG,KAAI,MAAOH,SAAQ,IAAI,CAAE;AAC/B,oBAAMI,KAAI,MAAOJ,SAAQ,IAAI,CAAE;AAI/B,qBAAO,KAAM,GAAGG,IAAGC,EAAE;AAAG,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AAAG,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AACrE,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AAAG,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AAAG,qBAAO,KAAM,GAAGD,IAAGC,EAAE;AAAA,YAEtE;AAAA,UAED;AAEA,2BAAiB,IAAI,uBAAwB,QAAQ,CAAE;AAAA,QAExD,OAAO;AAEN,2BAAiB,sBAAuB,SAAS,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AAAA,QAE1F;AAEA,kCAA2B,cAAe;AAAA,MAE3C;AAIA,UAAK,QAAS;AAEb,YAAK,oBAAoB,OAAQ;AAEhC,mBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,qBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,oBAAMJ,SAAQ,IAAI,KAAM,aAAa;AAErC,oBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AACjC,oBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AACjC,oBAAM,KAAK,OAAQA,SAAQ,IAAI,CAAE;AAIjC,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAG,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAG,sBAAQ,KAAM,IAAI,IAAI,EAAG;AACjF,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAG,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAG,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,YAElF;AAAA,UAED;AAEA,4BAAkB,IAAI,uBAAwB,SAAS,CAAE;AAAA,QAE1D,OAAO;AAEN,4BAAkB,sBAAuB,SAAS,IAAI,uBAAwB,SAAS,CAAE,CAAE;AAAA,QAE5F;AAAA,MAED,OAAO;AAEN,0BAAkB,uBAAwB,SAAS,UAAU,WAAY;AAAA,MAE1E;AAIA,YAAM,WAAW,IAAI,eAAe;AACpC,eAAS,aAAc,YAAY,iBAAkB;AACrD,eAAS,aAAc,UAAU,eAAgB;AACjD,eAAS,aAAc,MAAM,WAAY;AAEzC,UAAK,eAAiB,UAAS,aAAc,SAAS,cAAe;AAIrE,eAAS,SAAS;AAClB,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAEA,aAAS,mBAAoB,MAAO;AAEnC,UAAI,eAAe,CAAE,GAAG,GAAG,GAAG,IAAK,IAAK,IAAK,IAAK,GAAG,GAAG,CAAE;AAC1D,UAAI,QAAQ,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC/B,UAAIQ;AACJ,UAAI;AAEJ,UAAI,WAAW;AACf,UAAI,MAAM;AACV,UAAI,cAAc;AAClB,UAAI,SAAS;AACb,UAAI,QAAQ;AAEZ,YAAM,SAAS,KAAK;AAEpB,eAAU,IAAI,GAAGhB,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,cAAM,QAAQ,OAAQ,CAAE;AACxB,cAAM,YAAY,MAAM;AACxB,cAAM,cAAc,MAAM;AAE1B,gBAAS,WAAY;AAAA,UAEpB,KAAK;AACJ,uBAAW,YAAa,CAAE;AAC1B;AAAA,UAED,KAAK;AACJ,kBAAM,YAAa,CAAE;AACrB;AAAA,UAED,KAAK;AAEJ;AAAA,UAED,KAAK;AACJ,0BAAc,YAAa,CAAE;AAC7B;AAAA,UAED,KAAK;AACJ,2BAAe;AACf;AAAA,UAED,KAAK;AACJ,qBAAS,YAAa,CAAE;AACxB;AAAA,UAED,KAAK;AACJ,0BAAc;AACd;AAAA,UAED,KAAK;AACJ,YAAAgB,SAAQ;AACR;AAAA,UAED,KAAK;AACJ,oBAAQ,YAAa,CAAE;AACvB;AAAA,UAED,KAAK;AACJ,oBAAQ;AACR;AAAA,UAED;AACC,oBAAQ,KAAM,oCAAoC,SAAU;AAC5D;AAAA,QAEF;AAAA,MAED;AAEA,YAAM,qBAAuB,aAAc,CAAE,MAAM,aAAc,aAAa,SAAS,CAAE,KAAK,aAAc,CAAE,MAAM,aAAc,aAAa,SAAS,CAAE;AAI1J,YAAM,WAAW,CAAC;AAClB,YAAM,cAAc,IAAI,QAAQ;AAChC,YAAM,UAAU,IAAI,QAAQ;AAE5B,YAAM,OAAO,IAAI,QAAQ;AACzB,YAAM,SAAS,IAAI,QAAQ;AAC3B,YAAM,aAAa,IAAI,WAAW;AAElC,eAAU,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,GAAI;AAElF,oBAAY,UAAW,OAAO,CAAE;AAEhC,gBAAQ,IAAIA,SAAQA,OAAO,IAAI,CAAE,IAAI;AACrC,gBAAQ,IAAI;AACZ,gBAAQ,IAAIA,SAAQA,OAAO,IAAI,CAAE,IAAI;AAErC,aAAK,IAAI,cAAc,YAAa,IAAI,CAAE,IAAI;AAC9C,aAAK,IAAI,cAAc,YAAa,IAAI,CAAE,IAAI;AAC9C,aAAK,IAAI,cAAc,YAAa,IAAI,CAAE,IAAI;AAC9C,cAAM,QAAQ,cAAc,YAAa,IAAI,CAAE,IAAI;AAEnD,iBAAUV,KAAI,GAAG,KAAK,aAAa,QAAQA,KAAI,IAAIA,MAAK,GAAI;AAE3D,iBAAO,IAAI,aAAcA,KAAI,CAAE;AAC/B,iBAAO,IAAI;AACX,iBAAO,IAAI,aAAcA,KAAI,CAAE;AAI/B,iBAAO,SAAU,OAAQ;AAIzB,qBAAW,iBAAkB,MAAM,KAAM;AACzC,iBAAO,gBAAiB,UAAW;AAInC,iBAAO,IAAK,WAAY;AAExB,mBAAS,KAAM,OAAO,GAAG,OAAO,GAAG,OAAO,CAAE;AAAA,QAE7C;AAAA,MAED;AAIA,YAAM,UAAU,CAAC;AAEjB,YAAM,aAAa,MAAM,SAAS;AAClC,YAAM,oBAAoB,aAAa,SAAS;AAEhD,eAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,iBAAU,IAAI,GAAG,IAAI,oBAAoB,GAAG,KAAO;AAElD,gBAAMQ,KAAI,IAAI,IAAI;AAClB,cAAIF,KAAM,IAAI,IAAM,IAAI;AACxB,gBAAMG,KAAI,KAAM,IAAI,KAAM;AAC1B,cAAI,IAAM,IAAI,KAAQ,IAAI,KAAM;AAEhC,cAAO,MAAM,oBAAoB,KAAS,uBAAuB,MAAS;AAEzE,YAAAH,KAAI,IAAI;AACR,iBAAM,IAAI,KAAM;AAAA,UAEjB;AAEA,cAAK,QAAQ,MAAO;AAEnB,oBAAQ,KAAME,IAAGF,IAAGG,EAAE;AACtB,oBAAQ,KAAMA,IAAGH,IAAG,CAAE;AAAA,UAEvB,OAAO;AAEN,oBAAQ,KAAME,IAAGC,IAAGH,EAAE;AACtB,oBAAQ,KAAMG,IAAG,GAAGH,EAAE;AAAA,UAEvB;AAAA,QAED;AAAA,MAED;AAIA,UAAK,aAAa,QAAQ,WAAW,MAAO;AAE3C,cAAM,UAAU,CAAC;AAEjB,iBAAU,IAAI,GAAGZ,KAAI,aAAa,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEzD,kBAAQ,KAAM,IAAI,QAAS,aAAc,CAAE,GAAG,aAAc,IAAI,CAAE,CAAE,CAAE;AAAA,QAEvE;AAEA,cAAM,QAAQ,WAAW,iBAAkB,SAAS,CAAC,CAAE;AACvD,cAAM,aAAa,CAAC;AAEpB,iBAAU,IAAI,GAAGA,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,gBAAM,OAAO,MAAO,CAAE;AAEtB,qBAAW,KAAM,KAAM,CAAE,GAAG,KAAM,CAAE,GAAG,KAAM,CAAE,CAAE;AAAA,QAElD;AAIA,YAAK,aAAa,MAAO;AAExB,mBAAU,IAAI,GAAGA,KAAI,WAAW,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEvD,gBAAK,QAAQ,MAAO;AAEnB,sBAAQ,KAAM,WAAY,IAAI,CAAE,GAAG,WAAY,IAAI,CAAE,GAAG,WAAY,IAAI,CAAE,CAAE;AAAA,YAE7E,OAAO;AAEN,sBAAQ,KAAM,WAAY,IAAI,CAAE,GAAG,WAAY,IAAI,CAAE,GAAG,WAAY,IAAI,CAAE,CAAE;AAAA,YAE7E;AAAA,UAED;AAAA,QAED;AAIA,YAAK,WAAW,MAAO;AAEtB,gBAAM,cAAc,qBAAsB,aAAa;AAEvD,mBAAU,IAAI,GAAGA,KAAI,WAAW,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEvD,gBAAK,QAAQ,MAAO;AAEnB,sBAAQ,KAAM,cAAc,WAAY,IAAI,CAAE,GAAG,cAAc,WAAY,IAAI,CAAE,GAAG,cAAc,WAAY,IAAI,CAAE,CAAE;AAAA,YAEvH,OAAO;AAEN,sBAAQ,KAAM,cAAc,WAAY,IAAI,CAAE,GAAG,cAAc,WAAY,IAAI,CAAE,GAAG,cAAc,WAAY,IAAI,CAAE,CAAE;AAAA,YAEvH;AAAA,UAED;AAAA,QAED;AAAA,MAED;AAEA,YAAM,oBAAoB,sBAAuB,SAAS,IAAI,uBAAwB,UAAU,CAAE,CAAE;AACpG,YAAM,kBAAkB,uBAAwB,SAAS,UAAU,WAAY;AAE/E,YAAM,WAAW,IAAI,eAAe;AACpC,eAAS,aAAc,YAAY,iBAAkB;AACrD,eAAS,aAAc,UAAU,eAAgB;AAKjD,eAAS,SAAS;AAClB,eAAS,QAAQ;AAEjB,aAAO;AAAA,IAER;AAIA,aAAS,WAAY,YAAa;AAEjC,YAAM,OAAO,QAAS,UAAW;AACjC,YAAM,QAAQ,QAAS,IAAK;AAM5B,aAAS,MAAM,cAAc,MAAM,aAAe,MAAM,MAAM,IAAI;AAAA,IAEnE;AAEA,aAAS,mBAAoB,UAAU,OAAQ;AAE9C,eAAU,IAAI,GAAGA,KAAI,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEnD,cAAM,SAAS,QAAS,SAAU,CAAE,CAAE;AAEtC,YAAK,kBAAkB,SAAW,OAAM,IAAK,MAAO;AAAA,MAErD;AAAA,IAED;AAEA,aAAS,qBAAsBQ,QAAO,KAAM;AAE3C,YAAM,UAAU,CAAC;AAKjB,UAAI,QAAQ;AAEZ,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,KAAKQ,OAAO,KAAM;AACxB,cAAM,KAAKA,OAAO,KAAM,MAAM,IAAI,EAAI;AACtC,cAAM,KAAKA,OAAO,KAAM,MAAM,IAAI,EAAI;AAEtC,gBAAQ,KAAM,IAAI,IAAI,EAAG;AAIzB,YAAKA,OAAO,IAAI,CAAE,MAAM,MAAO,IAAI,KAAKR,IAAI;AAE3C,eAAK;AACL,kBAAQ,IAAI;AAAA,QAEb;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,oBAAqBD,OAAMS,QAAQ;AAE3C,YAAM,mBAAmB,CAAC;AAE1B,UAAI,QAAQ;AAEZ,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,SAAS,QAAQ;AAEvB,cAAMS,KAAIV,MAAM,MAAO;AACvB,cAAMW,KAAIX,MAAM,SAAS,CAAE;AAC3B,cAAM,IAAIA,MAAM,SAAS,CAAE;AAE3B,yBAAiB,KAAMU,IAAGC,IAAG,CAAE;AAI/B,YAAKF,OAAO,IAAI,CAAE,MAAM,MAAO,IAAI,KAAKR,IAAI;AAE3C,eAAK;AACL;AAAA,QAED;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,YAAaD,OAAMS,QAAQ;AAEnC,YAAMS,eAAc,CAAC;AAErB,eAAU,IAAI,GAAGjB,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,KAAKQ,OAAO,CAAE;AAEpB,cAAM,SAAS,KAAK;AAEpB,cAAMC,KAAIV,MAAM,MAAO;AACvB,cAAMW,KAAIX,MAAM,SAAS,CAAE;AAC3B,cAAM,IAAIA,MAAM,SAAS,CAAE;AAE3B,QAAAkB,aAAY,KAAMR,IAAGC,IAAG,CAAE;AAAA,MAE3B;AAEA,aAAOO;AAAA,IAER;AAEA,aAAS,gBAAiBT,QAAQ;AAEjC,YAAM,UAAU,CAAC;AAEjB,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,KAAKQ,OAAO,CAAE;AACpB,cAAM,KAAKA,OAAO,IAAI,CAAE;AAExB,gBAAQ,KAAM,IAAI,EAAG;AAIrB,YAAKA,OAAO,IAAI,CAAE,MAAM,MAAO,IAAI,KAAKR,IAAI;AAE3C,eAAK;AAAA,QAEN;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,eAAgBD,OAAMS,QAAQ;AAEtC,YAAM,mBAAmB,CAAC;AAE1B,UAAI,QAAQ;AAEZ,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAO;AAEhD,cAAM,SAAS,QAAQ;AAEvB,cAAMS,KAAIV,MAAM,MAAO;AACvB,cAAMW,KAAIX,MAAM,SAAS,CAAE;AAC3B,cAAM,IAAIA,MAAM,SAAS,CAAE;AAE3B,yBAAiB,KAAMU,IAAGC,IAAG,CAAE;AAI/B,YAAKF,OAAO,IAAI,CAAE,MAAM,MAAO,IAAI,KAAKR,IAAI;AAE3C,eAAK;AACL;AAAA,QAED;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,UAAM,KAAK,IAAI,QAAQ;AACvB,UAAM,KAAK,IAAI,QAAQ;AACvB,UAAM,KAAK,IAAI,QAAQ;AAEvB,UAAM,MAAM,IAAI,QAAQ;AACxB,UAAM,MAAM,IAAI,QAAQ;AACxB,UAAM,MAAM,IAAI,QAAQ;AAExB,aAAS,gCAAiC,YAAYQ,QAAOT,OAAM,UAAW;AAE7E,YAAM,QAAQ,CAAC;AAIf,eAAU,IAAI,GAAGC,KAAI,WAAW,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEvD,cAAMc,KAAIN,OAAO,CAAE;AACnB,cAAMI,KAAIJ,OAAO,IAAI,CAAE;AACvB,cAAMO,KAAIP,OAAO,IAAI,CAAE;AAEvB,YAAK,aAAa,GAAI;AAErB,cAAI,UAAWT,OAAMe,KAAI,QAAS;AAClC,cAAI,UAAWf,OAAMa,KAAI,QAAS;AAClC,cAAI,UAAWb,OAAMgB,KAAI,QAAS;AAElC,gBAAM,KAAM,IAAI,GAAG,IAAI,CAAE;AACzB,gBAAM,KAAM,IAAI,GAAG,IAAI,CAAE;AACzB,gBAAM,KAAM,IAAI,GAAG,IAAI,CAAE;AAAA,QAE1B,OAAO;AAEN,aAAG,UAAWhB,OAAMe,KAAI,QAAS;AACjC,aAAG,UAAWf,OAAMa,KAAI,QAAS;AACjC,aAAG,UAAWb,OAAMgB,KAAI,QAAS;AAEjC,gBAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,gBAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,gBAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAAA,QAE9B;AAAA,MAED;AAEA,aAAO,IAAI,uBAAwB,OAAO,QAAS;AAAA,IAEpD;AAEA,aAAS,6BAA8BP,QAAO,UAAW;AAExD,YAAM,QAAQ,CAAC;AAEf,eAAU,IAAI,GAAG,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAK,GAAG,KAAO;AAE/D,WAAG,UAAW,UAAU,IAAI,CAAE;AAE9B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAAA,MAE9B;AAEA,aAAO,IAAI,uBAAwB,OAAO,CAAE;AAAA,IAE7C;AAEA,aAAS,6BAA8BQ,QAAO,UAAW;AAExD,YAAM,QAAQ,CAAC;AAEf,eAAU,IAAI,GAAG,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAK,GAAG,KAAO;AAE/D,WAAG,UAAW,UAAU,IAAI,CAAE;AAE9B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC7B,cAAM,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAAA,MAE9B;AAEA,aAAO,IAAI,uBAAwB,OAAO,CAAE;AAAA,IAE7C;AAEA,aAAS,sBAAuB,SAAS,WAAY;AAEpD,YAAM,QAAQ,UAAU;AACxB,YAAM,WAAW,UAAU;AAE3B,YAAM,SAAS,IAAI,MAAM,YAAa,QAAQ,SAAS,QAAS;AAEhE,UAAIQ,SAAQ,GAAGU,UAAS;AAExB,eAAU,IAAI,GAAGlB,KAAI,QAAQ,QAAQ,IAAIA,IAAG,KAAO;AAElD,QAAAQ,SAAQ,QAAS,CAAE,IAAI;AAEvB,iBAAU,IAAI,GAAG,IAAI,UAAU,KAAO;AAErC,iBAAQU,SAAU,IAAI,MAAOV,QAAS;AAAA,QAEvC;AAAA,MAED;AAEA,aAAO,IAAI,uBAAwB,QAAQ,QAAS;AAAA,IAErD;AAEA,UAAM,KAAK,IAAI,QAAQ;AACvB,UAAM,KAAK,IAAI,QAAQ;AAEvB,aAAS,uBAAwBA,QAAO,OAAO,aAAc;AAE5D,YAAM,QAAQ,CAAC;AACf,YAAM,gBAAgB,CAAC;AAIvB,eAAU,IAAI,GAAGR,KAAIQ,OAAM,QAAQ,IAAIR,IAAG,KAAK,GAAI;AAElD,cAAMc,KAAIN,OAAO,CAAE;AACnB,cAAMI,KAAIJ,OAAO,IAAI,CAAE;AACvB,cAAMO,KAAIP,OAAO,IAAI,CAAE;AAEvB,cAAM,OAAO,IAAIW,MAAML,IAAGF,IAAGG,EAAE;AAE/B,WAAG,UAAW,OAAOD,KAAI,CAAE;AAC3B,WAAG,UAAW,OAAOF,KAAI,CAAE;AAC3B,WAAG,UAAW,OAAOG,KAAI,CAAE;AAE3B,WAAG,WAAY,IAAI,EAAG;AACtB,WAAG,WAAY,IAAI,EAAG;AACtB,WAAG,MAAO,EAAG;AAEb,WAAG,UAAU;AAEb,aAAK,OAAO,KAAM,EAAG;AAErB,YAAK,cAAeD,EAAE,MAAM,OAAY,eAAeA,EAAE,IAAI,CAAC;AAC9D,YAAK,cAAeF,EAAE,MAAM,OAAY,eAAeA,EAAE,IAAI,CAAC;AAC9D,YAAK,cAAeG,EAAE,MAAM,OAAY,eAAeA,EAAE,IAAI,CAAC;AAE9D,sBAAeD,EAAE,EAAE,KAAM,KAAK,MAAO;AACrC,sBAAeF,EAAE,EAAE,KAAM,KAAK,MAAO;AACrC,sBAAeG,EAAE,EAAE,KAAM,KAAK,MAAO;AAErC,cAAM,KAAM,IAAK;AAAA,MAElB;AAIA,YAAM,UAAU,CAAC;AAEjB,eAAU,IAAI,GAAGf,KAAI,MAAM,QAAQ,IAAIA,IAAG,KAAO;AAEhD,cAAM,OAAO,MAAO,CAAE;AAEtB,cAAM,KAAK,eAAgB,cAAe,KAAK,CAAE,GAAG,KAAK,QAAQ,WAAY;AAC7E,cAAM,KAAK,eAAgB,cAAe,KAAK,CAAE,GAAG,KAAK,QAAQ,WAAY;AAC7E,cAAM,KAAK,eAAgB,cAAe,KAAK,CAAE,GAAG,KAAK,QAAQ,WAAY;AAE7E,WAAG,UAAW,OAAO,KAAK,IAAI,CAAE;AAChC,WAAG,UAAW,OAAO,KAAK,IAAI,CAAE;AAChC,WAAG,UAAW,OAAO,KAAK,IAAI,CAAE;AAEhC,gBAAQ,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC/B,gBAAQ,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAC/B,gBAAQ,KAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE;AAAA,MAEhC;AAEA,aAAO,IAAI,uBAAwB,SAAS,CAAE;AAAA,IAE/C;AAEA,aAAS,eAAgB,SAAS,QAAQ,aAAc;AAEvD,YAAM,SAAS,IAAI,QAAQ;AAE3B,UAAK,gBAAgB,GAAI;AAExB,eAAO,KAAM,MAAO;AAAA,MAErB,OAAO;AAEN,iBAAU,IAAI,GAAGA,KAAI,QAAQ,QAAQ,IAAIA,IAAG,KAAO;AAElD,cAAK,QAAS,CAAE,EAAE,QAAS,MAAO,IAAI,aAAc;AAEnD,mBAAO,IAAK,QAAS,CAAE,CAAE;AAAA,UAE1B;AAAA,QAED;AAAA,MAED;AAEA,aAAO,OAAO,UAAU;AAAA,IAEzB;AAEA,aAAS,aAAc,QAAS;AAE/B,YAAM,QAAQ,CAAC;AAEf,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAK,GAAI;AAEnD,cAAM,KAAM,IAAI,MAAO,OAAQ,CAAE,GAAG,OAAQ,IAAI,CAAE,GAAG,OAAQ,IAAI,CAAE,CAAE,CAAE;AAAA,MAExE;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,0BAA2B,WAAY;AAE/C,YAAM,QAAQ,IAAI,MAAM;AAExB,eAAU,IAAI,GAAG,IAAI,UAAU,OAAO,KAAO;AAE5C,cAAM,oBAAqB,WAAW,CAAE;AACxC,cAAM,oBAAoB;AAE1B,kBAAU,OAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,MAEhD;AAAA,IAED;AAwBA,aAAS,WAAY,UAAU,QAAQ,QAAQ,QAAQ,SAAU;AAIhE,YAAM,aAAa,CAAC;AACpB,YAAM,aAAe,YAAY,OAAS,IAAI,KAAK;AAEnD,eAAU,IAAI,GAAGA,KAAI,OAAO,QAAQ,IAAIA,IAAG,KAAO;AAEjD,YAAI,QAAU,MAAM,IAAM,IAAI,OAAQ,IAAI,CAAE;AAC5C,gBAAU,YAAY,OAAS,QAAU,aAAa;AAEtD,cAAM,QAAQ,IAAI,QAAQ;AAC1B,cAAM,uBAAwB,QAAQ,OAAO,CAAE;AAE/C,mBAAW,KAAM,KAAM;AAAA,MAExB;AAIA,YAAM,UAAU,SAAS;AACzB,YAAM,oBAAoB,SAAS,WAAW;AAC9C,YAAM,iBAAiB,IAAI,gBAAiB,IAAI,aAAc,SAAS,WAAW,SAAS,QAAQ,CAAE,GAAG,CAAE;AAE1G,YAAMoB,YAAW,IAAI,QAAQ;AAC7B,YAAM,QAAQ,IAAI,MAAM;AAExB,eAAU,IAAI,GAAG,IAAI,QAAQ,OAAO,KAAO;AAE1C,cAAMZ,SAAQ,QAAQ,KAAM,CAAE;AAC9B,QAAAY,UAAS,oBAAqB,mBAAmBZ,MAAM;AAEvD,YAAI,iBAAiB;AACrB,YAAIK,KAAI;AAER,iBAAU,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAO;AAE9C,4BAAkB,IAAI;AACtB,4BAAkB;AAElB,gBAAM,aAAa,WAAY,eAAgB;AAC/C,gBAAM,aAAa,WAAY,eAAgB;AAE/C,cAAK,YAAY,MAAO;AAIvB,gBAAKO,UAAS,KAAK,WAAW,KAAKA,UAAS,IAAI,WAAW,GAAI;AAE9D,cAAAP,KAAI,KAAK,IAAK,WAAW,IAAIO,UAAS,CAAE,IAAI,KAAK,IAAK,WAAW,IAAI,WAAW,CAAE;AAElF;AAAA,YAED;AAAA,UAED,OAAO;AAIN,gBAAKA,UAAS,KAAK,WAAW,KAAKA,UAAS,IAAI,WAAW,GAAI;AAE9D,cAAAP,KAAI,KAAK,IAAK,WAAW,IAAIO,UAAS,CAAE,IAAI,KAAK,IAAK,WAAW,IAAI,WAAW,CAAE;AAElF;AAAA,YAED;AAAA,UAED;AAAA,QAED;AAEA,cAAM,SAAS,OAAQ,eAAgB;AACvC,cAAM,SAAS,OAAQ,eAAgB;AAEvC,cAAM,KAAM,MAAO,EAAE,KAAM,QAAQP,EAAE,EAAE,oBAAoB;AAE3D,uBAAe,OAAQL,QAAO,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,MAEzD;AAEA,eAAS,aAAc,SAAS,cAAe;AAAA,IAEhD;AAIA,UAAM,gBAAgB,IAAI,cAAe,KAAK,OAAQ;AACtD,kBAAc,QAAS,KAAK,gBAAgB,IAAK,EAAE,eAAgB,KAAK,WAAY;AAIpF,QAAKT,MAAK,QAAS,YAAa,MAAM,IAAM;AAE3C,YAAM,MAAO,uDAAwD;AAAA,IAEtE;AAIA,UAAM,OAAO,iBAAkBA,KAAK;AAIpC,UAAM,QAAQ,UAAW,IAAK;AAE9B,WAAO;AAAA,EAER;AAED;AAEA,IAAM,YAAN,MAAgB;AAAA,EAEf,YAAa,QAAS;AAErB,SAAK,QAAQ,IAAI,8BAAW,MAAO,MAAO;AAAA,EAE3C;AAAA,EAEA,IAAK,WAAY;AAEhB,UAAM,eAAe,KAAK,MAAM,SAAU,SAAU;AAEpD,QAAK,aAAa,OAAO,SAAS,GAAI;AAErC,cAAQ,MAAO,aAAa,MAAO;AAEnC,YAAM,MAAO,0CAA2C;AAAA,IAEzD;AAEA,WAAO;AAAA,EAER;AAED;AAEA,IAAM,YAAY,8BAAW;AAE7B,IAAM,aAAN,cAAyB,UAAU;AAAA,EAElC,YAAa,iBAAkB;AAE9B,UAAO,eAAgB;AAEvB,UAAMsB,KAAI;AAEV,UAAM,UAAU,gBAAiB,SAAU;AAC3C,UAAM,SAAS,gBAAiB,QAAS;AACzC,UAAM,SAAS,gBAAiB,QAAS;AACzC,UAAM,UAAU,gBAAiB,SAAU;AAC3C,UAAM,UAAU,gBAAiB,SAAU;AAC3C,UAAM,aAAa,gBAAiB,YAAa;AACjD,UAAM,kBAAkB,gBAAiB,iBAAkB;AAC3D,UAAM,gBAAgB,gBAAiB,eAAgB;AACvD,UAAM,aAAa,gBAAiB,YAAa;AACjD,UAAM,gBAAgB,gBAAiB,eAAgB;AACvD,UAAM,cAAc,gBAAiB,aAAc;AACnD,UAAM,eAAe,gBAAiB,cAAe;AACrD,UAAM,cAAc,gBAAiB,aAAc;AACnD,UAAM,MAAM,gBAAiB,KAAM;AACnC,UAAM,MAAM,gBAAiB,KAAM;AACnC,UAAM,QAAQ,gBAAiB,OAAQ;AACvC,UAAM,KAAK,gBAAiB,IAAK;AACjC,UAAM,WAAW,gBAAiB,UAAW;AAE7C,IAAAA,GAAE,KAAM,QAAQ,WAAY;AAE3B,MAAAA,GAAE,QAASA,GAAE,OAAQ;AACrB,MAAAA,GAAE,aAAc,WAAY;AAE3B,QAAAA,GAAE,QAASA,GAAE,IAAK;AAAA,MAEnB,CAAE;AACF,MAAAA,GAAE,KAAM,WAAY;AAEnB,QAAAA,GAAE,QAASA,GAAE,KAAM;AAAA,MAEpB,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,WAAW,WAAY;AAE9B,MAAAA,GAAE,QAAS,OAAQ;AAAA,IAEpB,CAAE;AAEF,IAAAA,GAAE,KAAM,QAAQ,WAAY;AAE3B,MAAAA,GAAE,OAAQ,WAAY;AAErB,QAAAA,GAAE,QAASA,GAAE,GAAI;AAAA,MAElB,CAAE;AAEF,MAAAA,GAAE,QAAS,QAAS;AACpB,MAAAA,GAAE,QAAS,MAAO;AAClB,MAAAA,GAAE,KAAM,WAAY;AAEnB,QAAAA,GAAE,QAASA,GAAE,KAAM;AAAA,MAEpB,CAAE;AACF,MAAAA,GAAE,QAAS,MAAO;AAAA,IAEnB,CAAE;AAEF,IAAAA,GAAE,KAAM,SAAS,WAAY;AAE5B,MAAAA,GAAE,QAAS,UAAW;AAEtB,MAAAA,GAAE,IAAK;AAAA,QACN,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAASA,GAAE,gBAAiB;AAAA,QAE/B,EAAE;AAAA,QACF,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAASA,GAAE,eAAgB;AAAA,QAE9B,EAAE;AAAA,MACH,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,OAAO,WAAY;AAE1B,MAAAA,GAAE,QAAS,GAAI;AACf,MAAAA,GAAE,GAAI;AAAA,QACL,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAAS,UAAW;AAAA,QAEvB,EAAE;AAAA,QACF,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAAS,QAAS;AAAA,QAErB,EAAE;AAAA,MACH,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,OAAO,WAAY;AAE1B,MAAAA,GAAE,QAAS,GAAI;AACf,MAAAA,GAAE,GAAI;AAAA,QACL,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAAS,UAAW;AAAA,QAEvB,EAAE;AAAA,QACF,EAAE,KAAK,WAAY;AAElB,UAAAA,GAAE,QAAS,QAAS;AAAA,QAErB,EAAE;AAAA,MACH,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,oBAAoB,WAAY;AAEvC,MAAAA,GAAE,aAAc,WAAY;AAE3B,QAAAA,GAAE,GAAI;AAAA,UACL,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAASA,GAAE,IAAK;AAAA,UAEnB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAASA,GAAE,GAAI;AAAA,UAElB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,aAAc;AAAA,UAE1B,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,UAAW;AAAA,UAEvB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,aAAc;AAAA,UAE1B,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,WAAY;AAAA,UAExB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,YAAa;AAAA,UAEzB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,WAAY;AAAA,UAExB,EAAE;AAAA,QACH,CAAE;AAAA,MAGH,CAAE;AAAA,IAEH,CAAE;AAEF,IAAAA,GAAE,KAAM,mBAAmB,WAAY;AAEtC,MAAAA,GAAE,QAAS,OAAQ;AACnB,MAAAA,GAAE,KAAM,WAAY;AAEnB,QAAAA,GAAE,GAAI;AAAA,UACL,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAASA,GAAE,IAAK;AAAA,UAEnB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAASA,GAAE,GAAI;AAAA,UAElB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,aAAc;AAAA,UAE1B,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,UAAW;AAAA,UAEvB,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,aAAc;AAAA,UAE1B,EAAE;AAAA,UACF,EAAE,KAAK,WAAY;AAElB,YAAAA,GAAE,QAAS,WAAY;AAAA,UAExB,EAAE;AAAA,QACH,CAAE;AAAA,MAEH,CAAE;AACF,MAAAA,GAAE,QAAS,OAAQ;AAAA,IAEpB,CAAE;AAEF,IAAAA,GAAE,KAAM,SAAS,WAAY;AAE5B,MAAAA,GAAE,QAAS,KAAM;AACjB,MAAAA,GAAE,QAAS,eAAgB;AAC3B,MAAAA,GAAE,QAAS,EAAG;AACd,MAAAA,GAAE,SAAU,eAAgB;AAAA,IAE7B,CAAE;AAEF,SAAK,oBAAoB;AAAA,EAE1B;AAED;AAEA,IAAMF,QAAN,MAAW;AAAA,EAEV,YAAaL,IAAGF,IAAGG,IAAI;AAEtB,SAAK,IAAID;AACT,SAAK,IAAIF;AACT,SAAK,IAAIG;AACT,SAAK,SAAS,IAAI,QAAQ;AAAA,EAE3B;AAED;AAEA,IAAM,eAAe;AAAA,EACpB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,KAAK;AAAA,EACL,MAAM;AACP;;;ACp8GA,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAAA,EAEhB;AAAA,EAEA,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,MAAM,OAAQ;AAC7C,WAAO,QAAS,MAAM,IAAK;AAC3B,WAAO,gBAAiB,aAAc;AACtC,WAAO,iBAAkB,MAAM,aAAc;AAC7C,WAAO,mBAAoB,MAAM,eAAgB;AACjD,WAAO,KAAM,KAAK,SAAWO,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOC,OAAO;AAEb,aAAS,WAAYA,OAAO;AAG3B,YAAM,UAAU,CAAC;AAGjB,YAAM,YAAY,CAAC;AAGnB,YAAM,SAAS,CAAC;AAGhB,YAAM,UAAU,CAAC;AAEjB,UAAI;AAGJ,YAAM,UAAU;AAGhB,YAAM,aAAa;AAInB,YAAM,kBAAkB;AAGxB,YAAM,YAAY;AAGlB,YAAM,cAAc;AAGpB,YAAM,qBAAqB;AAG3B,YAAM,gBAAgB;AAGtB,YAAM,eAAe;AAGrB,YAAM,mBAAmB;AAGzB,YAAM,aAAa;AAEnB,UAAI,kBAAkB;AACtB,UAAI,oBAAoB;AACxB,UAAI,yBAAyB;AAC7B,UAAI,qBAAqB;AACzB,UAAI,oBAAoB;AACxB,UAAI,iBAAiB;AACrB,UAAI,mBAAmB;AAEvB,YAAM,QAAQ,IAAI,MAAM;AAExB,YAAM,QAAQA,MAAK,MAAO,IAAK;AAE/B,iBAAY,KAAK,OAAQ;AAExB,cAAMC,QAAO,MAAO,CAAE,EAAE,KAAK;AAE7B,YAAKA,MAAK,QAAS,SAAU,MAAM,GAAI;AAEtC,gBAAM,UAAUA,MAAK,MAAO,GAAI,EAAG,CAAE;AAErC,cAAK,YAAY,WAAa,OAAM,IAAI,MAAO,+BAA+B,OAAQ;AAAA,QAEvF,WAAY,iBAAkB;AAG7B,kBAAU,SAAS,WAAW,KAAMA,KAAK,OAAQ,MAAO;AAEvD,gBAAK,QAAQ,KAAMA,KAAK,MAAM,KAAO;AAErC,kBAAMC,KAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,kBAAMC,KAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,kBAAM,IAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,sBAAU,KAAMD,IAAGC,IAAG,CAAE;AAAA,UAEzB;AAAA,QAED,WAAY,mBAAoB;AAE/B,eAAO,SAAS,gBAAgB,KAAMF,KAAK,OAAQ,MAAO;AAGzD,kBAAM,cAAc,SAAU,OAAQ,CAAE,CAAE;AAC1C,kBAAM,OAAO,OAAQ,CAAE,EAAE,MAAO,KAAM;AAEtC,gBAAK,eAAe,GAAI;AAEvB,oBAAM,KAAK,SAAU,KAAM,CAAE,CAAE;AAC/B,kBAAIG,KAAI;AAER,uBAAU,IAAI,GAAG,IAAI,cAAc,GAAG,EAAG,GAAI;AAE5C,sBAAM,KAAK,SAAU,KAAMA,EAAE,CAAE;AAC/B,sBAAM,KAAK,SAAU,KAAMA,KAAI,CAAE,CAAE;AACnC,wBAAQ,KAAM,IAAI,IAAI,EAAG;AACzB,gBAAAA;AAAA,cAED;AAAA,YAED;AAAA,UAED;AAAA,QAED,WAAY,wBAAyB;AAEpC,eAAO,SAAS,gBAAgB,KAAMH,KAAK,OAAQ,MAAO;AAGzD,kBAAM,cAAc,SAAU,OAAQ,CAAE,CAAE;AAC1C,kBAAM,OAAO,OAAQ,CAAE,EAAE,MAAO,KAAM;AAEtC,gBAAK,eAAe,GAAI;AAGvB,uBAAU,IAAI,GAAG,IAAI,cAAc,GAAG,KAAO;AAE5C,oBAAK,IAAI,MAAM,GAAI;AAElB,wBAAM,KAAK,SAAU,KAAM,CAAE,CAAE;AAC/B,wBAAM,KAAK,SAAU,KAAM,IAAI,CAAE,CAAE;AACnC,wBAAM,KAAK,SAAU,KAAM,IAAI,CAAE,CAAE;AACnC,0BAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,gBAE1B,OAAO;AAEN,wBAAM,KAAK,SAAU,KAAM,CAAE,CAAE;AAC/B,wBAAM,KAAK,SAAU,KAAM,IAAI,CAAE,CAAE;AACnC,wBAAM,KAAK,SAAU,KAAM,IAAI,CAAE,CAAE;AACnC,0BAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,gBAE1B;AAAA,cAED;AAAA,YAED;AAAA,UAED;AAAA,QAED,WAAY,sBAAsB,mBAAoB;AAErD,cAAK,gBAAiB;AAIrB,oBAAU,SAAS,WAAW,KAAMA,KAAK,OAAQ,MAAO;AAEvD,kBAAK,QAAQ,KAAMA,KAAK,MAAM,KAAO;AAErC,oBAAM,IAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,oBAAMI,KAAI,WAAY,OAAQ,CAAE,CAAE;AAClC,oBAAMC,KAAI,WAAY,OAAQ,CAAE,CAAE;AAElC,oBAAM,IAAK,GAAGD,IAAGC,EAAE,EAAE,oBAAoB;AAEzC,qBAAO,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,YAExC;AAAA,UAED,WAAY,kBAAmB;AAI9B,oBAAU,SAAS,WAAW,KAAML,KAAK,OAAQ,MAAO;AAEvD,kBAAK,QAAQ,KAAMA,KAAK,MAAM,KAAO;AAErC,oBAAM,KAAK,WAAY,OAAQ,CAAE,CAAE;AACnC,oBAAM,KAAK,WAAY,OAAQ,CAAE,CAAE;AACnC,oBAAM,KAAK,WAAY,OAAQ,CAAE,CAAE;AACnC,sBAAQ,KAAM,IAAI,IAAI,EAAG;AAAA,YAE1B;AAAA,UAED;AAAA,QAED;AAEA,YAAK,YAAY,KAAMA,KAAK,MAAM,MAAO;AAExC,8BAAoB;AACpB,4BAAkB;AAClB,mCAAyB;AAAA,QAE1B,WAAY,UAAU,KAAMA,KAAK,MAAM,MAAO;AAE7C,8BAAoB;AACpB,4BAAkB;AAClB,mCAAyB;AAAA,QAE1B,WAAY,mBAAmB,KAAMA,KAAK,MAAM,MAAO;AAEtD,8BAAoB;AACpB,4BAAkB;AAClB,mCAAyB;AAAA,QAE1B,WAAY,cAAc,KAAMA,KAAK,MAAM,MAAO;AAEjD,+BAAqB;AACrB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAE1B,WAAY,aAAa,KAAMA,KAAK,MAAM,MAAO;AAEhD,8BAAoB;AACpB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAE1B,WAAY,iBAAiB,KAAMA,KAAK,MAAM,MAAO;AAEpD,2BAAiB;AACjB,6BAAmB;AACnB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAE1B,WAAY,WAAW,KAAMA,KAAK,MAAM,MAAO;AAE9C,6BAAmB;AACnB,2BAAiB;AACjB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAE1B;AAAA,MAED;AAEA,UAAI,WAAW,IAAI,eAAe;AAClC,eAAS,SAAU,OAAQ;AAC3B,eAAS,aAAc,YAAY,IAAI,uBAAwB,WAAW,CAAE,CAAE;AAE9E,UAAK,QAAQ,WAAW,UAAU,QAAS;AAE1C,iBAAS,aAAc,UAAU,IAAI,uBAAwB,SAAS,CAAE,CAAE;AAAA,MAE3E;AAEA,UAAK,OAAO,WAAW,QAAQ,QAAS;AAIvC,YAAK,OAAO,WAAW,UAAU,QAAS;AAEzC,mBAAS,aAAc,SAAS,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AAAA,QAEzE;AAAA,MAED,OAAO;AAIN,mBAAW,SAAS,aAAa;AACjC,cAAM,eAAe,SAAS,WAAW,SAAS,QAAQ;AAE1D,YAAK,OAAO,WAAa,eAAe,GAAM;AAE7C,gBAAM,YAAY,CAAC;AAEnB,mBAAU,IAAI,GAAG,IAAI,cAAc,KAAO;AAEzC,kBAAM,IAAI,OAAQ,IAAI,IAAI,CAAE;AAC5B,kBAAMI,KAAI,OAAQ,IAAI,IAAI,CAAE;AAC5B,kBAAMC,KAAI,OAAQ,IAAI,IAAI,CAAE;AAE5B,kBAAM,IAAK,GAAGD,IAAGC,EAAE,EAAE,oBAAoB;AAEzC,sBAAU,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAC1C,sBAAU,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAC1C,sBAAU,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,UAE3C;AAEA,mBAAS,aAAc,SAAS,IAAI,uBAAwB,WAAW,CAAE,CAAE;AAAA,QAE5E;AAAA,MAED;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,YAAaN,OAAO;AAE5B,YAAM,SAAS,IAAI,WAAYA,KAAK;AACpC,YAAM,WAAW,IAAI,SAAUA,KAAK;AAGpC,UAAI,SAAS,CAAC;AACd,UAAI,UAAU,CAAC;AACf,UAAI,UAAU,CAAC;AAEf,UAAIO,SAAQ;AAEZ,eAAS,WAAYC,SAAQ,OAAQ;AAEpC,YAAID,SAAQ;AACZ,YAAIE,KAAID,QAAQD,MAAM;AACtB,cAAM,IAAI,CAAC;AACX,eAAQE,OAAM,IAAK;AAElB,YAAE,KAAM,OAAO,aAAcA,EAAE,CAAE;AACjC,UAAAF;AACA,UAAAE,KAAID,QAAQD,MAAM;AAAA,QAEnB;AAEA,eAAO;AAAA,UAAE;AAAA,UACR,KAAKA;AAAA,UACL,MAAMA,SAAQ;AAAA,UACd,cAAc,EAAE,KAAM,EAAG;AAAA,QAAE;AAAA,MAE7B;AAEA,UAAI,OAAON;AAEX,aAAQ,MAAO;AAGd,gBAAQ,WAAY,QAAQM,MAAM;AAClC,QAAAN,QAAO,MAAM;AAEb,YAAKA,MAAK,QAAS,SAAU,MAAM,GAAI;AAEtC,gBAAM,UAAUA,MAAK,MAAO,GAAI,EAAG,CAAE;AAErC,cAAK,YAAY,WAAa,OAAM,IAAI,MAAO,+BAA+B,OAAQ;AAAA,QAEvF,WAAYA,MAAK,QAAS,QAAS,MAAM,GAAI;AAG5C,gBAAM,iBAAiB,SAAUA,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAG5D,gBAAM,QAAQ,iBAAiB,IAAI;AAEnC,mBAAS,IAAI,aAAc,iBAAiB,CAAE;AAE9C,cAAI,aAAa,MAAM;AACvB,mBAAU,IAAI,GAAG,IAAI,gBAAgB,KAAO;AAE3C,mBAAQ,IAAI,CAAE,IAAI,SAAS,WAAY,YAAY,KAAM;AACzD,mBAAQ,IAAI,IAAI,CAAE,IAAI,SAAS,WAAY,aAAa,GAAG,KAAM;AACjE,mBAAQ,IAAI,IAAI,CAAE,IAAI,SAAS,WAAY,aAAa,GAAG,KAAM;AACjE,yBAAa,aAAa;AAAA,UAE3B;AAGA,gBAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,QAEnC,WAAYA,MAAK,QAAS,iBAAkB,MAAM,GAAI;AAErD,gBAAM,iBAAiB,SAAUA,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAC5D,gBAAMS,QAAO,SAAUT,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAElD,gBAAM,QAAQS,QAAO;AAErB,oBAAU,IAAI,YAAa,IAAIA,QAAO,IAAI,cAAe;AACzD,cAAI,eAAe;AAEnB,cAAI,aAAa,MAAM;AACvB,mBAAU,IAAI,GAAG,IAAI,gBAAgB,KAAO;AAG3C,kBAAM,aAAa,SAAS,SAAU,YAAY,KAAM;AACxD,kBAAM,QAAQ,CAAC;AACf,0BAAc;AACd,qBAAU,IAAI,GAAG,IAAI,YAAY,KAAO;AAEvC,oBAAM,KAAM,SAAS,SAAU,YAAY,KAAM,CAAE;AACnD,4BAAc;AAAA,YAEf;AAGA,qBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,kBAAK,IAAI,GAAI;AAEZ,wBAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,wBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAC1C,wBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,cAE3C,OAAO;AAEN,wBAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,wBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAC1C,wBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,cAE3C;AAAA,YAED;AAAA,UAED;AAGA,gBAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,QAEnC,WAAYT,MAAK,QAAS,UAAW,MAAM,GAAI;AAE9C,gBAAM,iBAAiB,SAAUA,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAC5D,gBAAMS,QAAO,SAAUT,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAElD,gBAAM,QAAQS,QAAO;AAErB,oBAAU,IAAI,YAAa,IAAIA,QAAO,IAAI,cAAe;AACzD,cAAI,eAAe;AAEnB,cAAI,aAAa,MAAM;AACvB,mBAAU,IAAI,GAAG,IAAI,gBAAgB,KAAO;AAG3C,kBAAM,aAAa,SAAS,SAAU,YAAY,KAAM;AACxD,kBAAM,QAAQ,CAAC;AACf,0BAAc;AACd,qBAAU,IAAI,GAAG,IAAI,YAAY,KAAO;AAEvC,oBAAM,KAAM,SAAS,SAAU,YAAY,KAAM,CAAE;AACnD,4BAAc;AAAA,YAEf;AAGA,qBAAU,IAAI,GAAG,IAAI,aAAa,GAAG,KAAO;AAE3C,sBAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,sBAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,sBAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,YAE3C;AAAA,UAED;AAGA,gBAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,QAEnC,WAAYT,MAAK,QAAS,YAAa,MAAM,GAAI;AAEhD,gBAAM,iBAAiB,SAAUA,MAAK,MAAO,GAAI,EAAG,CAAE,GAAG,EAAG;AAG5D,kBAAQ,WAAY,QAAQ,MAAM,IAAK;AAGvC,gBAAM,QAAQ,iBAAiB,IAAI;AAEnC,oBAAU,IAAI,aAAc,iBAAiB,CAAE;AAC/C,cAAI,aAAa,MAAM;AACvB,mBAAU,IAAI,GAAG,IAAI,gBAAgB,KAAO;AAE3C,oBAAS,IAAI,CAAE,IAAI,SAAS,WAAY,YAAY,KAAM;AAC1D,oBAAS,IAAI,IAAI,CAAE,IAAI,SAAS,WAAY,aAAa,GAAG,KAAM;AAClE,oBAAS,IAAI,IAAI,CAAE,IAAI,SAAS,WAAY,aAAa,GAAG,KAAM;AAClE,0BAAc;AAAA,UAEf;AAGA,gBAAM,OAAO,MAAM,OAAO;AAAA,QAE3B;AAGA,QAAAM,SAAQ,MAAM;AAEd,YAAKA,UAAS,OAAO,YAAa;AAEjC;AAAA,QAED;AAAA,MAED;AAEA,YAAM,WAAW,IAAI,eAAe;AACpC,eAAS,SAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AACrD,eAAS,aAAc,YAAY,IAAI,gBAAiB,QAAQ,CAAE,CAAE;AAEpE,UAAK,QAAQ,WAAW,OAAO,QAAS;AAEvC,iBAAS,aAAc,UAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AAAA,MAEpE;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,cAAeI,QAAO,QAAS;AAEvC,YAAM,cAAcA,OAAM,QAAQ,SAAS,IAAI,aAAc,cAAc,OAAO,MAAO;AAEzF,aAAO,IAAKA,MAAM;AAClB,aAAO,IAAK,QAAQ,WAAY;AAEhC,aAAO;AAAA,IAER;AAEA,aAAS,YAAaA,QAAO,QAAS;AAErC,YAAM,cAAcA,OAAM,QAAQ,SAAS,IAAI,WAAY,cAAc,OAAO,MAAO;AAEvF,aAAO,IAAKA,MAAM;AAClB,aAAO,IAAK,QAAQ,WAAY;AAEhC,aAAO;AAAA,IAER;AAEA,aAAS,SAAU,YAAa;AAI/B,eAAS,UAAW,KAAM;AAGzB,YAAI,MAAM,CAAC;AAEX,YAAK,IAAI,aAAa,GAAI;AAIzB,cAAK,IAAI,YAAa;AAErB,gBAAK,IAAI,WAAW,SAAS,GAAI;AAEhC,kBAAK,YAAa,IAAI,CAAC;AAEvB,uBAAU,IAAI,GAAG,IAAI,IAAI,WAAW,QAAQ,KAAO;AAElD,sBAAM,YAAY,IAAI,WAAW,KAAM,CAAE;AACzC,oBAAK,YAAa,EAAG,UAAU,QAAS,IAAI,UAAU,UAAU,KAAK;AAAA,cAEtE;AAAA,YAED;AAAA,UAED;AAAA,QAED,WAAY,IAAI,aAAa,GAAI;AAEhC,gBAAM,IAAI,UAAU,KAAK;AAAA,QAE1B;AAGA,YAAK,IAAI,cAAc,GAAI;AAE1B,mBAAU,IAAI,GAAG,IAAI,IAAI,WAAW,QAAQ,KAAO;AAElD,kBAAM,OAAO,IAAI,WAAW,KAAM,CAAE;AACpC,kBAAM,WAAW,KAAK;AAEtB,gBAAK,OAAO,IAAK,QAAS,MAAM,aAAc;AAE7C,oBAAM,MAAM,UAAW,IAAK;AAE5B,kBAAK,QAAQ,IAAK;AAEjB,oBAAK,MAAM,QAAS,IAAK,OAAQ,CAAE,GAAI;AAEtC,sBAAK,OAAQ,IAAI,IAAK,OAAQ,EAAG,CAAE;AAAA,gBAEpC;AAEA,oBAAK,QAAS,IAAI;AAAA,cAEnB;AAAA,YAED,OAAO;AAEN,kBAAK,OAAO,IAAK,QAAS,EAAE,SAAS,aAAc;AAElD,sBAAM,MAAM,IAAK,QAAS;AAC1B,oBAAK,QAAS,IAAI,CAAE,GAAI;AAAA,cAEzB;AAEA,oBAAM,MAAM,UAAW,IAAK;AAE5B,kBAAK,QAAQ,IAAK;AAEjB,oBAAK,MAAM,QAAS,IAAK,OAAQ,CAAE,GAAI;AAEtC,sBAAK,OAAQ,IAAI,IAAK,OAAQ,EAAG,CAAE;AAAA,gBAEpC;AAEA,oBAAK,QAAS,EAAE,KAAM,GAAI;AAAA,cAE3B;AAAA,YAED;AAAA,UAED;AAAA,QAED;AAEA,eAAO;AAAA,MAER;AAGA,eAAS,kBAAmB,KAAM;AAEjC,cAAM,MAAM,OAAO,eAAe,cAAc,aAAa;AAC7D,cAAM,YAAY,CAAC;AACnB,cAAM,OAAO;AAEb,iBAAUC,KAAI,GAAGC,KAAI,KAAK,QAAQD,KAAIC,IAAG,EAAGD,IAAI;AAE/C,oBAAW,KAAK,WAAYA,EAAE,CAAE,IAAIA;AAAA,QAErC;AAEA,kBAAW,IAAI,WAAY,CAAE,CAAE,IAAI;AACnC,kBAAW,IAAI,WAAY,CAAE,CAAE,IAAI;AAEnC,cAAM,MAAM,IAAI;AAEhB,YAAK,MAAM,IAAI,GAAI;AAElB,gBAAM,IAAI,MAAO,gDAAiD;AAAA,QAEnE;AAEA,cAAM,eAAe,IAAK,MAAM,CAAE,MAAM,MAAM,IAAI,IAAK,MAAM,CAAE,MAAM,MAAM,IAAI;AAC/E,cAAM,MAAM,IAAI,IAAK,MAAM,IAAI,IAAI,YAAa;AAChD,cAAMC,KAAI,eAAe,IAAI,MAAM,IAAI;AAEvC,YAAI,IAAI;AACR,YAAI,GAAG;AAEP,aAAM,IAAI,GAAG,IAAI,GAAG,IAAIA,IAAG,KAAK,GAAG,KAAK,GAAI;AAE3C,gBAAM,MAAQ,UAAW,IAAI,WAAY,CAAE,CAAE,KAAK,KAAS,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK,KAAS,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK,IAAM,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE;AAC7L,cAAK,GAAK,KAAM,MAAM,aAAc;AACpC,cAAK,GAAK,KAAM,MAAM,UAAY;AAClC,cAAK,GAAK,IAAI,MAAM;AAAA,QAErB;AAEA,YAAK,iBAAiB,GAAI;AAEzB,gBAAM,MAAQ,UAAW,IAAI,WAAY,CAAE,CAAE,KAAK,IAAQ,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK;AAClG,cAAK,GAAK,IAAI,MAAM;AAAA,QAErB,WAAY,iBAAiB,GAAI;AAEhC,gBAAM,MAAQ,UAAW,IAAI,WAAY,CAAE,CAAE,KAAK,KAAS,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK,IAAQ,UAAW,IAAI,WAAY,IAAI,CAAE,CAAE,KAAK;AACnJ,cAAK,GAAK,IAAM,OAAO,IAAM;AAC7B,cAAK,GAAK,IAAI,MAAM;AAAA,QAErB;AAEA,eAAO;AAAA,MAER;AAEA,eAAS,eAAgB,KAAK,YAAa;AAE1C,YAAI,WAAW;AAEf,YAAK,KAAK,WAAW,gBAAgB,UAAW;AAE/C,qBAAW;AAAA,QAEZ,WAAY,KAAK,WAAW,gBAAgB,UAAW;AAEtD,qBAAW;AAAA,QAEZ;AAEA,YAAI,KAAKC;AAGT,YAAK,IAAI,WAAW,WAAW,YAAY,YAAa;AAEvD,cAAK,IAAI,WAAW,SAAS,WAAY;AAExC,kBAAM,IAAI,aAAc;AAAA,UAEzB,WAAY,IAAI,WAAW,SAAS,WAAW,IAAI,WAAW,SAAS,SAAU;AAEhF,kBAAM,IAAI,WAAY;AAAA,UAEvB;AAcA,gBAAM,WAAW,IAAK,OAAQ;AAC9B,gBAAM,UAAU,MAAM,QAAS,QAAS,IAAI,SAAU,CAAE,IAAI;AAE5D,gBAAM,WAAW,kBAAmB,OAAQ;AAG5C,gBAAM,gBAAgB;AAEtB,cAAI,SAAS,SAAU,CAAE;AACzB,mBAAU,IAAI,GAAG,IAAI,WAAW,GAAG,KAAO;AAEzC,qBAAS,SAAW,SAAU,CAAE,KAAO,IAAI;AAAA,UAE5C;AAEA,cAAI,cAAe,SAAS,KAAM;AAClC,gBAAM,UAAc,aAAa,IAAM,IAAM,IAAM,aAAa,IAAM;AACtE,uBAAa,aAAa;AAE1B,gBAAM,cAAc,CAAC;AACrB,cAAI,gBAAgB;AACpB,sBAAY,KAAM,aAAc;AAIhC,gBAAM,aAAa,IAAI;AAEvB,mBAAU,IAAI,GAAG,IAAI,QAAQ,KAAO;AAEnC,gBAAI,mBAAmB,SAAU,IAAI,WAAW,UAAW;AAE3D,qBAAU,IAAI,GAAG,IAAI,WAAW,GAAG,KAAO;AAEzC,iCAAmB,mBAAqB,SAAU,IAAI,WAAW,aAAa,CAAE,KAAO,IAAI;AAAA,YAE5F;AAEA,4BAAgB,gBAAgB;AAChC,wBAAY,KAAM,aAAc;AAAA,UAEjC;AAEA,mBAAU,IAAI,GAAG,IAAI,YAAY,SAAS,GAAG,KAAO;AAEnD,kBAAMd,QAAc,WAAY,SAAS,MAAO,YAAa,CAAE,GAAG,YAAa,IAAI,CAAE,CAAE,CAAE;AACzF,YAAAc,WAAUd,MAAK;AAEf,gBAAK,IAAI,WAAW,SAAS,WAAY;AAExC,cAAAc,WAAU,IAAI,aAAcA,QAAQ;AACpC,oBAAM,cAAe,KAAKA,QAAQ;AAAA,YAEnC,WAAY,IAAI,WAAW,SAAS,WAAW,IAAI,WAAW,SAAS,SAAU;AAEhF,cAAAA,WAAU,IAAI,WAAYA,QAAQ;AAClC,oBAAM,YAAa,KAAKA,QAAQ;AAAA,YAEjC;AAAA,UAED;AAEA,iBAAO,IAAK,OAAQ;AAEpB,cAAK,IAAI,WAAW,SAAS,SAAU;AAEtC,gBAAK,IAAI,WAAW,WAAW,UAAW;AAEzC,oBAAM,IAAI,OAAQ,SAAW,IAAI,KAAM;AAEtC,oBAAK,MAAM,MAAM,EAAI,QAAO;AAAA,cAE7B,CAAE;AAAA,YAEH;AAAA,UAED;AAAA,QAED,OAAO;AAEN,cAAK,IAAI,WAAW,WAAW,YAAY,CAAE,YAAa;AAEzD,YAAAA,WAAU,kBAAmB,IAAK,OAAQ,CAAE;AAK5C,YAAAA,WAAUA,SAAQ,MAAO,QAAS,EAAE;AAAA,UAErC,OAAO;AAEN,gBAAK,IAAK,OAAQ,GAAI;AAErB,cAAAA,WAAU,IAAK,OAAQ,EAAE,MAAO,KAAM,EAAE,OAAQ,SAAW,IAAK;AAE/D,oBAAK,OAAO,GAAK,QAAO;AAAA,cAEzB,CAAE;AAAA,YAEH,OAAO;AAEN,cAAAA,WAAU,IAAI,WAAY,CAAE,EAAE;AAAA,YAE/B;AAAA,UAED;AAEA,iBAAO,IAAK,OAAQ;AAGpB,cAAK,IAAI,WAAW,SAAS,WAAY;AAExC,kBAAM,IAAI,aAAcA,QAAQ;AAAA,UAEjC,WAAY,IAAI,WAAW,SAAS,SAAU;AAE7C,kBAAM,IAAI,WAAYA,QAAQ;AAAA,UAE/B,WAAY,IAAI,WAAW,SAAS,SAAU;AAE7C,kBAAM,IAAI,WAAYA,QAAQ;AAE9B,gBAAK,IAAI,WAAW,WAAW,UAAW;AAEzC,oBAAM,IAAI,OAAQ,SAAW,IAAI,KAAM;AAEtC,oBAAK,MAAM,MAAM,EAAI,QAAO;AAAA,cAE7B,CAAE;AAAA,YAEH;AAAA,UAED;AAAA,QAED;AAEA,eAAO;AAAA,MAER;AAIA,YAAM,MAAM,IAAI,UAAU,EAAE,gBAAiB,YAAY,iBAAkB;AAG3E,YAAM,MAAM,IAAI;AAEhB,YAAM,OAAO,UAAW,GAAI;AAC5B,UAAI,SAAS,CAAC;AACd,UAAI,UAAU,CAAC;AACf,UAAI,UAAU,CAAC;AAEf,UAAK,KAAK,cAAe;AAExB,cAAM,eAAe,KAAK,aAAc,OAAQ,EAAE,MAAO,CAAE;AAC3D,cAAM,QAAQ,KAAK,SAAS;AAE5B,cAAM,WAAW,CAAE,aAAa,YAAY,UAAU,SAAS,SAAS,UAAU,OAAQ;AAC1F,YAAI,eAAe;AAEnB,cAAM,UAAU,SAAS,IAAK,OAAK;AAElC,gBAAM,OAAO,MAAO,CAAE;AAEtB,cAAK,QAAQ,KAAK,WAAY;AAE7B,kBAAM,MAAM,MAAM,QAAS,KAAK,SAAU,IAAI,KAAK,YAAY,CAAE,KAAK,SAAU;AAEhF,mBAAO,IAAI,IAAK,CAAAC,OAAKA,GAAE,WAAW,MAAO;AAAA,UAE1C;AAEA,iBAAO,CAAC;AAAA,QAET,CAAE,EAAE,KAAK;AAET,mBAAY,QAAQ,UAAW;AAE9B,gBAAM,UAAU,MAAO,IAAK;AAE5B,cAAK,WAAW,QAAQ,WAAY;AAEnC,gBAAK,MAAM,QAAS,QAAQ,SAAU,GAAI;AAEzC,yBAAY,cAAc,QAAQ,WAAY;AAE7C,2BAAY,OAAQ,IAAI,aAAa,MAAO,QAAS,YAAa,GAAG,QAAS,eAAe,CAAE,CAAE;AACjG,2BAAW,WAAW,SAAS;AAC/B;AAAA,cAED;AAAA,YAED,OAAO;AAEN,sBAAQ,UAAW,OAAQ,IAAI,aAAa,MAAO,QAAS,YAAa,GAAG,QAAS,eAAe,CAAE,CAAE;AACxG,sBAAQ,UAAU,WAAW,SAAS;AACtC;AAAA,YAED;AAAA,UAED;AAAA,QAED;AAAA,MAED;AAEA,UAAK,KAAK,UAAW;AAEpB,cAAM,QAAQ,KAAK,SAAS;AAC5B,cAAM,aAAa,KAAK,WAAW,eAAgB,YAAa;AAIhE,cAAM,WAAW,CAAE,aAAa,UAAU,UAAU,OAAQ;AAC5D,YAAI,eAAe;AACnB,cAAM,mBAAmB,SAAS;AAElC,eAAQ,eAAe,kBAAmB;AAEzC,gBAAM,UAAU,MAAO,SAAU,YAAa,CAAE;AAIhD,cAAK,WAAW,QAAQ,WAAY;AAInC,gBAAI;AAEJ,gBAAK,MAAM,QAAS,QAAQ,SAAU,GAAI;AAEzC,oBAAM,QAAQ;AAAA,YAEf,OAAO;AAEN,oBAAM,CAAE,QAAQ,SAAU;AAAA,YAE3B;AAEA,gBAAI,iBAAiB;AACrB,kBAAM,qBAAqB,IAAI;AAE/B,mBAAQ,iBAAiB,oBAAqB;AAG7C,kBAAO,WAAW,IAAK,cAAe,KAAS,IAAK,cAAe,EAAG,OAAQ,EAAE,SAAS,GAAM;AAE9F,oBAAK,cAAe,EAAE,OAAO,eAAgB,IAAK,cAAe,GAAG,UAAW;AAAA,cAEhF;AAEA;AAAA,YAED;AAEA,oBAAS,SAAU,YAAa,GAAI;AAAA,cAGnC,KAAK;AAEJ;AAEC,wBAAM,iBAAiB,SAAU,MAAM,WAAW,cAAe;AACjE,wBAAM,cAAc,QAAQ,WAAW;AAEvC,sBAAK,iBAAiB,GAAI;AAEzB,6BAAU,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAO;AAElD,0BAAK,gBAAgB,IAAK,CAAE,EAAE,WAAW,MAAO;AAE/C,8BAAM,aAAa,IAAK,CAAE,EAAE,WAAW;AACvC,kCAAU,IAAI,aAAc,iBAAiB,UAAW;AACxD,gCAAQ,IAAK,IAAK,CAAE,EAAE,MAAM,CAAE;AAAA,sBAE/B;AAAA,oBAED;AAAA,kBAED;AAAA,gBAED;AAEA;AAAA,cAGD,KAAK;AAEJ;AAEC,wBAAM,iBAAiB,SAAU,MAAM,WAAW,cAAe;AAEjE,sBAAK,iBAAiB,GAAI;AAEzB,0BAAM,aAAa,QAAQ,UAAU,WAAW;AAChD,6BAAS,IAAI,aAAc,iBAAiB,UAAW;AACvD,2BAAO,IAAK,QAAQ,UAAU,MAAM,CAAE;AAAA,kBAEvC;AAAA,gBAED;AAEA;AAAA,cAGD,KAAK;AAEJ;AAEC,wBAAM,iBAAiB,SAAU,MAAM,WAAW,cAAe;AAEjE,sBAAK,iBAAiB,GAAI;AAEzB,0BAAM,eAAe,IAAI,WAAY,QAAQ,UAAW,CAAE,EAAE,KAAK,MAAO;AACxE,0BAAM,SAAS,IAAI,WAAY,QAAQ,UAAW,CAAE,EAAE,KAAK,MAAO;AAClE,iCAAa,IAAK,QAAQ,UAAW,CAAE,EAAE,MAAM,CAAE;AACjD,2BAAO,IAAK,QAAQ,UAAW,CAAE,EAAE,MAAM,CAAE;AAE3C,0BAAML,QAAO,iBAAiB,aAAa;AAC3C,8BAAU,IAAI,YAAa,IAAIA,QAAO,IAAI,cAAe;AAEzD,wBAAI,eAAe;AAEnB,6BAAU,IAAI,GAAG,MAAM,gBAAgB,IAAI,KAAK,KAAO;AAEtD,4BAAM,QAAQ,CAAC;AAEf,+BAAU,IAAI,GAAG,OAAO,OAAQ,CAAE,GAAG,OAAO,GAAG,IAAI,OAAO,MAAM,KAAO;AAEtE,8BAAM,KAAM,aAAc,CAAE,CAAE;AAE9B,4BAAK,IAAI,EAAI,QAAO,OAAQ,IAAI,CAAE;AAAA,sBAEnC;AAEA,+BAAU,IAAI,GAAG,OAAO,OAAQ,CAAE,GAAG,OAAO,GAAG,IAAI,OAAO,OAAO,GAAG,KAAO;AAE1E,4BAAK,IAAI,GAAI;AAEZ,kCAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,kCAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAC1C,kCAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,wBAE3C,OAAO;AAEN,kCAAS,cAAgB,IAAI,MAAO,CAAE;AACtC,kCAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAC1C,kCAAS,cAAgB,IAAI,MAAO,IAAI,CAAE;AAAA,wBAE3C;AAEA,4BAAK,IAAI,EAAI,QAAO,OAAQ,IAAI,CAAE;AAAA,sBAEnC;AAAA,oBAED;AAAA,kBAED;AAAA,gBAED;AAEA;AAAA,cAGD,KAAK;AAEJ;AAEC,wBAAM,gBAAgB,SAAU,MAAM,WAAW,aAAc;AAE/D,sBAAK,gBAAgB,GAAI;AAExB,0BAAM,eAAe,IAAI,WAAY,QAAQ,UAAW,CAAE,EAAE,KAAK,MAAO;AACxE,0BAAM,SAAS,IAAI,WAAY,QAAQ,UAAW,CAAE,EAAE,KAAK,MAAO;AAClE,iCAAa,IAAK,QAAQ,UAAW,CAAE,EAAE,MAAM,CAAE;AACjD,2BAAO,IAAK,QAAQ,UAAW,CAAE,EAAE,MAAM,CAAE;AAE3C,0BAAMA,QAAO,gBAAgB,aAAa;AAC1C,8BAAU,IAAI,YAAa,IAAIA,QAAO,IAAI,aAAc;AACxD,wBAAI,eAAe,GAAG,oBAAoB;AAC1C,wBAAI,IAAI,GAAG,OAAO;AAClB,0BAAM,MAAM;AAEZ,2BAAQ,IAAI,KAAM;AAEjB,4BAAM,OAAO,CAAC;AACd,0BAAI,IAAI;AACR,4BAAM,OAAO,OAAQ,CAAE;AAEvB,6BAAQ,IAAI,OAAO,MAAO;AAEzB,6BAAK,KAAM,aAAc,mBAAqB,CAAE;AAChD;AAAA,sBAED;AAEA,0BAAI,IAAI;AAER,6BAAQ,IAAI,OAAO,OAAO,GAAI;AAE7B,gCAAS,cAAgB,IAAI,KAAM,CAAE;AACrC,gCAAS,cAAgB,IAAI,KAAM,CAAE;AACrC,gCAAS,cAAgB,IAAI,KAAM,IAAI,CAAE;AACzC;AAAA,sBAED;AAEA;AACA,6BAAO,OAAQ,IAAI,CAAE;AAAA,oBAEtB;AAAA,kBAED;AAAA,gBAED;AAEA;AAAA,cAED;AACC;AAAA,YAEF;AAAA,UAED;AAEA;AAAA,QAED;AAEA,cAAM,WAAW,IAAI,eAAe;AACpC,iBAAS,SAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AACrD,iBAAS,aAAc,YAAY,IAAI,gBAAiB,QAAQ,CAAE,CAAE;AAEpE,YAAK,QAAQ,WAAW,OAAO,QAAS;AAEvC,mBAAS,aAAc,UAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AAAA,QAEpE;AAEA,eAAO;AAAA,MAER,OAAO;AAEN,cAAM,IAAI,MAAO,0BAA2B;AAAA,MAE7C;AAAA,IAED;AAEA,UAAM,cAAc,IAAI,YAAY;AAGpC,UAAMM,QAAO,YAAY,OAAQ,IAAI,WAAYhB,OAAM,GAAG,GAAI,CAAE,EAAE,MAAO,IAAK;AAE9E,QAAKgB,MAAM,CAAE,EAAE,QAAS,KAAM,MAAM,IAAM;AAEzC,aAAO,SAAU,YAAY,OAAQhB,KAAK,CAAE;AAAA,IAE7C,WAAYgB,MAAM,CAAE,EAAE,SAAU,OAAQ,GAAI;AAE3C,aAAO,WAAY,YAAY,OAAQhB,KAAK,CAAE;AAAA,IAE/C,OAAO;AAEN,aAAO,YAAaA,KAAK;AAAA,IAE1B;AAAA,EAED;AAED;;;ACzsCA,IAAM,YAAN,cAAwB,OAAO;AAAA,EAE9B,KAAM,KAAK,QAAQ,YAAY,SAAU;AAExC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAY,KAAK,OAAQ;AAC5C,WAAO,QAAS,KAAK,IAAK;AAC1B,WAAO,iBAAkB,KAAK,aAAc;AAC5C,WAAO,mBAAoB,KAAK,eAAgB;AAChD,WAAO,KAAM,KAAK,SAAWiB,OAAO;AAEnC,UAAI;AAEH,eAAQ,MAAM,MAAOA,KAAK,CAAE;AAAA,MAE7B,SAAU,GAAI;AAEb,YAAK,SAAU;AAEd,kBAAS,CAAE;AAAA,QAEZ,OAAO;AAEN,kBAAQ,MAAO,CAAE;AAAA,QAElB;AAEA,cAAM,QAAQ,UAAW,GAAI;AAAA,MAE9B;AAAA,IAED,GAAG,YAAY,OAAQ;AAAA,EAExB;AAAA,EAEA,MAAOA,OAAO;AAEb,UAAM,QAAQA,MAAK,MAAO,IAAK;AAE/B,UAAM,WAAW,CAAC;AAClB,UAAM,SAAS,CAAC;AAChB,UAAM,QAAQ,IAAI,MAAM;AAExB,aAAUC,SAAQ,OAAQ;AAEzB,MAAAA,QAAOA,MAAK,KAAK;AAEjB,UAAKA,MAAK,OAAQ,CAAE,MAAM,IAAM;AAEhC,YAAM,aAAaA,MAAK,MAAO,KAAM;AAErC,UAAK,WAAW,WAAW,GAAI;AAI9B,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAC7C,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAC7C,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAAA,MAE9C;AAEA,UAAK,WAAW,WAAW,GAAI;AAI9B,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAC7C,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAC7C,iBAAS,KAAM,WAAY,WAAY,CAAE,CAAE,CAAE;AAE7C,cAAM,IAAI,WAAY,WAAY,CAAE,CAAE,IAAI;AAC1C,cAAMC,KAAI,WAAY,WAAY,CAAE,CAAE,IAAI;AAC1C,cAAMC,KAAI,WAAY,WAAY,CAAE,CAAE,IAAI;AAE1C,cAAM,IAAK,GAAGD,IAAGC,EAAE,EAAE,oBAAoB;AAEzC,eAAO,KAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE;AAAA,MAExC;AAAA,IAED;AAEA,UAAM,WAAW,IAAI,eAAe;AACpC,aAAS,aAAc,YAAY,IAAI,uBAAwB,UAAU,CAAE,CAAE;AAE7E,QAAK,OAAO,SAAS,GAAI;AAExB,eAAS,aAAc,SAAS,IAAI,uBAAwB,QAAQ,CAAE,CAAE;AAAA,IAEzE;AAEA,WAAO;AAAA,EAER;AAED;;;AC9FA,IAAM,gBAAgB;AAAA,EAErB,MAAM;AAAA,EAEN,UAAU,cAAc,MAAO;AAAA,IAC9B,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ;AAAA,MACC,UAAU,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,IAC1C;AAAA,EACD,CAAE;AAAA,EAEF;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmLxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyG3B;AAIA,IAAM,sBAAN,cAAkC,eAAe;AAAA,EAEhD,YAAa,YAAa;AAEzB,UAAM;AAEN,SAAK,wBAAwB;AAE7B,SAAK,OAAO;AAqBZ,SAAK,UAAU;AAIf,SAAK,MAAM;AACX,SAAK,SAAS;AACd,SAAK,WAAW;AAEhB,UAAM,SAAS;AAEf,SAAK,UAAU,OAAO,OAAQ,CAAC,GAAG,OAAO,OAAQ;AACjD,SAAK,WAAW,cAAc,MAAO,OAAO,QAAS;AACrD,SAAK,eAAe,OAAO;AAC3B,SAAK,iBAAiB,OAAO;AAE7B,UAAM,sBAAsB;AAAA,MAC3B;AAAA,MAAO;AAAA,MAAY;AAAA,MAAqB;AAAA,MAAS;AAAA,MACjD;AAAA,MAAY;AAAA,MAAqB;AAAA,MAAe;AAAA,MAAe;AAAA,MAC/D;AAAA,MAAU;AAAA,MAAgB;AAAA,MAAmB;AAAA,MAAW;AAAA,IACzD;AAEA,eAAY,gBAAgB,qBAAsB;AAEjD,aAAO,eAAgB,MAAM,cAAc;AAAA,QAE1C,KAAK,WAAY;AAEhB,iBAAO,KAAK,SAAU,YAAa,EAAE;AAAA,QAEtC;AAAA,QAEA,KAAK,SAAWC,QAAQ;AAEvB,eAAK,SAAU,YAAa,EAAE,QAAQA;AAAA,QAEvC;AAAA,MAED,CAAE;AAAA,IAEH;AAEA,WAAO,eAAgB,MAAM,SAAS,OAAO,yBAA0B,MAAM,SAAU,CAAE;AAEzF,SAAK,UAAW,UAAW;AAAA,EAE5B;AAAA,EAEA,KAAM,QAAS;AAEd,UAAM,KAAM,MAAO;AAEnB,SAAK,MAAM,KAAM,OAAO,KAAM;AAE9B,SAAK,MAAM,OAAO;AAElB,SAAK,WAAW,OAAO;AACvB,SAAK,oBAAoB,OAAO;AAEhC,SAAK,QAAQ,OAAO;AACpB,SAAK,iBAAiB,OAAO;AAE7B,SAAK,SAAS,KAAM,OAAO,QAAS;AACpC,SAAK,cAAc,OAAO;AAC1B,SAAK,oBAAoB,OAAO;AAEhC,SAAK,cAAc,OAAO;AAE1B,SAAK,WAAW,OAAO;AAEvB,SAAK,SAAS,OAAO;AACrB,SAAK,UAAU,OAAO;AACtB,SAAK,eAAe,OAAO;AAC3B,SAAK,kBAAkB,OAAO;AAE9B,SAAK,YAAY,OAAO;AACxB,SAAK,qBAAqB,OAAO;AACjC,SAAK,mBAAmB,OAAO;AAC/B,SAAK,oBAAoB,OAAO;AAEhC,SAAK,MAAM,OAAO;AAElB,WAAO;AAAA,EAER;AAED;;;ACzaA,IAAM,UAAN,MAAM,SAAQ;AAAA,EAEb,YAAa,QAAQ,IAAI,QAAS,GAAG,GAAG,CAAE,GAAG,MAAM,IAAI,QAAS,GAAG,GAAG,CAAE,GAAG,SAAS,GAAI;AAEvF,SAAK,QAAQ;AACb,SAAK,MAAM;AACX,SAAK,SAAS;AAAA,EAEf;AAAA,EAEA,QAAQ;AAEP,WAAO,IAAI,SAAS,KAAK,MAAM,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,KAAK,MAAO;AAAA,EAEvE;AAAA,EAEA,IAAK,OAAO,KAAK,QAAS;AAEzB,SAAK,MAAM,KAAM,KAAM;AACvB,SAAK,IAAI,KAAM,GAAI;AACnB,SAAK,SAAS;AAAA,EAEf;AAAA,EAEA,KAAM,SAAU;AAEf,SAAK,MAAM,KAAM,QAAQ,KAAM;AAC/B,SAAK,IAAI,KAAM,QAAQ,GAAI;AAC3B,SAAK,SAAS,QAAQ;AAAA,EAEvB;AAAA,EAEA,UAAW,QAAS;AAEnB,WAAO,OAAO,KAAM,KAAK,GAAI,EAAE,IAAK,KAAK,KAAM,EAAE,eAAgB,GAAI;AAAA,EAEtE;AAAA,EAEA,UAAW,GAAI;AAEd,SAAK,MAAM,IAAK,CAAE;AAClB,SAAK,IAAI,IAAK,CAAE;AAAA,EAEjB;AAAA,EAEA,cAAe,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,QAAS;AAEnE,YACG,OAAO,MAAM,UAAU,OAAO,MAAM,YACpC,MAAM,OAAO,UAAU,MAAM,OAAO,YACpC,OAAO,MAAM,UAAU,OAAO,MAAM,YACpC,MAAM,OAAO,UAAU,MAAM,OAAO;AAAA,EAGxC;AAAA,EAEA,cAAe,KAAM;AAEpB,WACC,KAAK;AAAA,MACJ,KAAK,MAAM;AAAA,MAAG,KAAK,MAAM;AAAA,MAAG,KAAK,IAAI;AAAA,MAAG,KAAK,IAAI;AAAA,MACjD,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MACzC,KAAK;AAAA,IAAO,KACb,KAAK;AAAA,MACJ,KAAK,MAAM;AAAA,MAAG,KAAK,MAAM;AAAA,MAAG,KAAK,IAAI;AAAA,MAAG,KAAK,IAAI;AAAA,MACjD,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MACzC,KAAK;AAAA,IAAO,KACb,KAAK;AAAA,MACJ,KAAK,MAAM;AAAA,MAAG,KAAK,MAAM;AAAA,MAAG,KAAK,IAAI;AAAA,MAAG,KAAK,IAAI;AAAA,MACjD,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MAAG,IAAI,IAAI;AAAA,MACzC,KAAK;AAAA,IAAO;AAAA,EAGf;AAED;;;AC7EA,IAAM,OAAO,CAAC;AAEd,IAAM,iBAAN,MAAqB;AAAA,EAEpB,OAAO,OAAQ,OAAO,GAAG,GAAG,GAAI;AAI/B,QAAI,UAAU,gBAAiB,GAAG,CAAE;AACpC,QAAI,UAAU,MAAO,GAAG,GAAG,CAAE;AAC7B,QAAI,UAAU,MAAO,GAAG,GAAG,CAAE;AAE7B,WAAO,MAAM,OAAQ,GAAK,IAAI,MAAU,KAAM,IAAI,KAAM,KAAM,IAAI,IAAM,IAAI,IAAO,IAAI,GAAI;AAAA,EAE5F;AAAA,EAEA,OAAO,OAAQ,OAAO,QAAS;AAE9B,UAAM,OAAQ,IAAK;AAGnB,SAAK,KAAO,KAAK,IAAI,MAAQ,KAAK,IAAM,IAAI,KAAK;AAEjD,WAAO,IAAI,KAAK;AAChB,WAAO,IAAI,IAAI,KAAK,KAAM,KAAK,IAAI,KAAK;AACxC,WAAO,IAAI,KAAK,IAAI,KAAK;AAEzB,WAAO;AAAA,EAER;AAED;;;AC/BA,IAAM,KAAK;AAAA,EAAE;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EACjI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACvH;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACpH;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EACpH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtH;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnH;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EACtH;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EACnH;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;A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;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,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EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAI,CAAE;AAExD,IAAM,WAAW,IAAI,WAAY;AAAA,EAChC;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3E;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EACjD;AA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K;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAA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EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAA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G;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC9C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC9C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAI;AAA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EA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BxB;AAAA;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0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", + "names": ["values", "c", "c2", "index", "line", "position", "scale", "parent", "world", "q", "t", "t2", "a", "v1", "x", "y", "p", "rotation", "param", "key", "a", "b", "max", "p", "_q", "q", "x", "renderer", "size", "x", "y", "self", "t", "key", "width", "height", "value", "rotation", "time", "l", "q", "a", "b", "c", "rayLength", "EPS", "scale", "_raycaster", "_offset", "_camera", "onPointerMove", "onPointerDown", "onPointerCancel", "x", "y", "position", "_changeEvent", "EPS", "_changeEvent", "_startEvent", "_endEvent", "_plane", "domElement", "STATE", "position", "max", "scale", "EPS", "onContextMenu", "onPointerDown", "onPointerUp", "onPointerMove", "document", "panLeft", "panUp", "pan", "x", "y", "onMouseMove", "_vector", "_changeEvent", "_changeEvent", "_startEvent", "_endEvent", "STATE", "EPS", "getMouseOnScreen", "getMouseOnCircle", "onPointerDown", "onPointerMove", "onPointerUp", "onMouseMove", "onPointerCancel", "x", "y", "position", "contextmenu", "_raycaster", "_changeEvent", "_plane", "value", "onPointerDown", "onPointerMove", "onPointerUp", "size", "name", "position", "rotation", "scale", "a", "data", "_center", "_up", "data", "far", "shaders", "l", "farVerts", "t", "x", "y", "scale", "a", "R", "b", "t2", "p", "q", "p", "n", "C", "r", "a", "k", "j", "q", "l", "w", "t", "t2", "k", "t2", "renderer", "width", "height", "_camera", "renderer", "width", "height", "oAscii", "y", "x", "renderer", "data", "keys", "key", "value", "width", "height", "x", "y", "renderer", "_camera", "width", "height", "renderer", "_position", "_quaternion", "_scale", "width", "height", "renderer", "size", "width", "height", "renderer", "faces", "length", "_color", "c", "err", "b", "x", "l", "a", "p", "nt", "l", "t", "c", "n", "dt", "add", "b", "p", "t2", "a", "_a", "_b", "post", "head", "i", "k", "post", "a", "b", "k", "td", "dt", "t", "t", "err", "b", "c", "l", "fl", "Deflate", "AsyncDeflate", "data", "Inflate", "c", "n", "dt", "AsyncInflate", "data", "Gzip", "c", "Gunzip", "p", "AsyncGunzip", "data", "Zlib", "c", "data", "a", "Unzlib", "AsyncUnzlib", "data", "Decompress", "n", "AsyncDecompress", "err", "size", "p", "t", "k", "val", "n", "c", "DecodeUTF8", "_a", "EncodeUTF8", "l", "n", "c", "_a", "l", "b", "_a", "k", "c", "ce", "fl", "dt", "y", "ZipPassThrough", "ZipDeflate", "AsyncZipDeflate", "err", "Zip", "err", "l", "_a", "_b", "data", "_a", "p", "l", "c", "UnzipPassThrough", "UnzipInflate", "data", "AsyncUnzipInflate", "err", "data", "Unzip", "l", "add", "_a", "err", "dat", "final", "data", "c", "_a", "b", "renderer", "y", "x", "g", "b", "a", "line", "sum", "size", "data", "t2", "p", "t", "value", "renderer", "_camera", "width", "height", "reject", "index", "text", "matrix", "a", "value", "uids", "map", "c", "width", "height", "data", "key", "l", "rotation", "position", "scale", "nodeIndex", "time", "values", "et", "t", "n", "e", "a", "l", "c", "p", "g", "y", "i", "s", "x", "b", "B", "A", "k", "I", "r", "o", "et", "renderer", "t", "p", "key", "value", "size", "a", "q", "v1", "i", "text", "n", "line", "a", "index", "p", "array", "position", "matrix", "table", "keys", "key", "value", "l", "line", "k", "l", "line", "index", "a", "b", "c", "vA", "vB", "vC", "scale", "name", "transform", "matrix", "index", "length", "x", "y", "rotation", "width", "height", "x", "y", "_v1", "_plane", "l", "t", "max", "index", "v1", "a", "b", "c", "head", "position", "size", "index", "plane", "v1", "p", "EPS", "a", "b", "c", "x", "y", "width", "height", "t", "a", "b", "frames", "position", "p", "q", "SphereGeometry", "size", "u", "v", "PlaneGeometry", "width", "height", "position", "size", "g", "p", "c", "t", "v1", "text", "size", "max", "c", "max", "_geometry", "name", "index", "l", "c", "value", "k", "key", "i", "position", "_vA", "_vB", "_vC", "object", "morphTargetsRelative", "a", "b", "il", "x", "y", "n", "width", "height", "position", "_v1", "_v2", "size", "position", "_v1", "_v2", "size", "position", "xAxis", "yAxis", "zAxis", "renderer", "x", "radius", "text", "context", "x", "y", "width", "height", "element", "max", "value", "property", "position", "rect", "_pointer", "_raycaster", "renderer", "controller", "_center", "_matrix", "_quaternion", "_scale", "x", "renderer", "width", "height", "data", "renderer", "g", "b", "x", "index", "_vector", "index", "matrix", "value", "_closestPoint", "_box", "_ray", "l", "t", "renderer", "length", "line", "_start", "_end", "_viewport", "l", "renderer", "k", "n", "c", "lc", "uInt8Array", "l", "p", "value", "buffer", "p2", "index", "data", "t", "t2", "size", "width", "height", "comp", "offset", "y", "x", "decodeFloat16", "a", "b", "g", "length", "name", "log2", "EXRDecoder", "line", "EXRHeader", "reject", "data", "map", "p", "matrix", "_color", "width", "height", "jsContent", "binaryContent", "worker", "a", "b", "rhino", "content", "t", "_geometry", "position", "property", "value", "data", "relsView", "relsFileText", "i", "name", "x", "y", "v1", "transform", "t", "matrix", "objects", "l", "keys", "build", "data3mf", "text", "data", "xmlData", "scale", "i", "v1", "x", "y", "text", "lines", "data", "line", "bones", "header", "use_rle", "use_pal", "offset", "data", "c", "imageData", "x", "y", "width", "height", "content", "text", "xml", "name", "l", "isEmpty", "library", "data", "transform", "time", "value", "index", "a", "b", "position", "scale", "matrix", "property", "key", "animations", "buildMaterial", "effect", "technique", "k", "getMaterial", "buildCamera", "count", "p", "g", "length", "c", "max", "vector", "j", "root", "object", "keys", "material", "parserError", "value", "buffer", "dataOffset", "width", "height", "y", "x", "b", "g", "a", "_taskCache", "reject", "name", "_color", "worker", "a", "b", "module", "index", "content", "values", "name", "child", "parent", "transform", "width", "height", "material", "g", "b", "skeleton", "index", "data", "length", "c", "l", "key", "val", "a", "time", "Q2", "Q", "E", "t", "text", "line", "property", "elem", "value", "keys", "size", "text", "data", "size", "p", "scale", "createPath", "ShapePath", "x", "y", "l", "text", "data", "line", "addSegment", "v1", "key", "value", "GLTFMaterialsClearcoatExtension", "GLTFMaterialsDispersionExtension", "GLTFMaterialsSheenExtension", "GLTFMaterialsTransmissionExtension", "GLTFMaterialsVolumeExtension", "GLTFMaterialsIorExtension", "GLTFMaterialsEmissiveStrengthExtension", "GLTFMaterialsSpecularExtension", "GLTFMaterialsIridescenceExtension", "GLTFMaterialsAnisotropyExtension", "GLTFMaterialsBumpExtension", "GLTFMeshGpuInstancing", "data", "GLTFMaterialsUnlitExtension", "reject", "key", "index", "self", "scale", "name", "res", "WEBGL_CONSTANTS", "p", "q", "transform", "values", "t", "td", "_q", "PATH_PROPERTIES", "keys", "isSafari", "clone", "URL", "sourceURI", "k", "matrix", "value", "node", "max", "accessor", "buffer", "p", "line", "w", "h", "l", "scale", "data", "value", "onLoad", "onProgress", "onError", "value", "width", "height", "size", "data", "startTheta", "endTheta", "t2", "v1", "text", "line", "values", "value", "text", "data", "resolve", "msg", "A", "Q", "g", "C", "E", "_taskCache", "renderer", "jsContent", "binaryContent", "width", "height", "a", "b", "value", "zstd", "Q", "data", "width", "height", "value", "l", "v1", "_ray", "x", "y", "info", "index", "i", "key", "line", "text", "meta", "matrix", "fileName", "clone", "subobject", "group", "a", "b", "elem", "n", "c", "getMaterial", "name", "token", "text", "size", "l", "index", "g", "b", "bits", "data", "scale", "text", "size", "length", "data", "scale", "IFFParser", "length", "index", "IFFParser", "length", "index", "length", "name", "map", "data", "value", "size", "a", "GeometryParser", "name", "connections", "index", "k", "value", "data", "y", "x", "t", "c", "X", "Y", "Z", "g", "b", "p", "a", "l", "n", "value", "g", "b", "p", "q", "t", "max", "key", "k", "lengths", "length", "partial", "name", "data", "elem", "globalData", "comp", "x", "mask", "effect", "position", "renderer", "width", "flatten", "n", "prng", "seed", "i", "j", "s", "a", "BMMath", "loopOut", "loopIn", "smooth", "time", "matrix", "scale", "rotation", "text", "val", "animationData", "err", "loadAnimation", "ob", "keys", "line", "expressionsPlugin", "index", "first", "searchAnimations", "standalone", "div", "c", "A", "B", "C", "values", "y", "clone", "v1", "l", "transform", "b2", "_p", "equals", "_a", "_b", "frameRate", "size", "sum", "Font", "property", "toWorld", "fromWorld", "fromComp", "len", "content", "_identityMatrix", "wiggle", "velocity", "value", "text", "data", "data", "l", "scale", "frames", "x", "y", "n", "positions", "normals", "data", "values", "data", "text", "value", "index", "key", "materials", "name", "t", "width", "height", "map", "x", "y", "a", "b", "time", "position", "rotation", "values", "q", "c", "ft", "text", "value", "line", "key", "index", "map", "n", "index", "slice", "value", "data", "value", "slice", "k", "index", "y", "x", "length", "max", "data", "_bytes", "u8", "i", "k", "l", "value", "max", "name", "index", "mi", "value", "a", "b", "c", "ia", "l", "text", "line", "data", "v1", "data", "PCDheader", "x", "l", "position", "c", "line", "g", "b", "text", "length", "c", "l", "x", "y", "g", "b", "index", "_color", "text", "data", "property", "line", "n", "l", "name", "geometry", "little_endian", "c", "height", "width", "value", "data", "width", "height", "reject", "x", "y", "value", "reject", "data", "size", "g", "b", "a", "p", "y", "x", "fd", "text", "R", "Q", "X", "C", "n", "A", "l", "I", "Z", "q", "c", "$", "Y", "val", "pa", "oa", "text", "data", "g", "b", "index", "name", "text", "transform", "node", "ShapePath", "l", "data", "i", "q", "x", "y", "a", "b", "index", "clamp", "current", "partial", "length", "n", "scale", "currentTransform", "v1", "te", "A", "B", "C", "t", "t2", "p", "index2", "scanlineMinX", "scanlineMaxX", "width", "position", "joinIsOnLeftSide", "innerSideModified", "points", "data", "scale", "name", "value", "values", "matrix", "inverse", "index", "g", "b", "position", "c", "UTIF", "W", "p", "t", "ak", "Q", "n", "E", "a", "F", "C", "q", "X", "x", "k", "g", "R", "c", "Y", "I", "l", "Z", "e", "N", "A", "$", "b", "y", "B", "V", "data", "bits", "arr_a", "arr_b", "i", "a6", "height", "sum", "b2", "val", "max", "dt", "EOI", "SOS", "sosMarker", "line", "keys", "key", "de", "map", "mi", "a3", "position", "size", "index", "first", "bits", "sum", "dt", "t", "lengths", "val", "length", "clen", "offs", "v1", "x", "y", "b", "a", "c", "t2", "Path", "i", "value", "data", "table", "l", "keys", "k", "subtableMakers", "Parser", "values", "cmap", "p", "g", "post", "name", "scale", "parseGlyph", "buildPath", "parseCFFCharstring", "b2", "b4", "key", "meta", "width", "parse", "code", "charString", "head", "hhea", "maxp", "ltag", "stringOffset", "property", "text", "os2", "glyphCount", "substCount", "tableData", "gsub", "sfnt", "n", "langSysTable", "sub", "transform", "loca", "pi", "div", "check", "Font", "fvar", "gdef", "parseLookup1", "parseLookup2", "parseLookup3", "parseLookup4", "parseLookup5", "parseLookup6", "parseLookup7", "parseLookup8", "gpos", "reject", "err", "scale", "c", "p", "result", "data", "k", "position", "size", "l", "name", "text", "data", "line", "values", "meta", "zip", "buffer", "value", "index", "name", "indices", "a", "b", "c", "index2", "l", "map", "buildMaterial", "group", "data", "id", "x", "y", "size", "_color", "add", "g", "b", "index", "c", "R", "t", "n", "a", "A", "c", "g", "p", "l", "y", "pe", "ln", "F", "Ae", "b", "se", "Q", "te", "Z", "In", "Sn", "Ft", "xe", "ct", "X", "dt", "Ei", "I", "Ti", "yt", "C", "Oi", "Ii", "x", "B", "Pi", "Si", "Ci", "Mi", "Fi", "et", "gt", "$", "de", "Vi", "zi", "Y", "$t", "q", "_a", "Ot", "E", "nt", "text", "data", "l", "tree", "scene", "value", "width", "height", "k", "size", "index", "x", "y", "g", "b", "t", "a", "c", "scale", "flattenData", "index2", "Face", "position", "$", "text", "data", "line", "x", "y", "k", "g", "b", "index", "buffer", "c", "size", "first", "i", "l", "content", "a", "meta", "text", "line", "g", "b", "value", "t", "a", "b", "x", "y", "X", "Y", "Z", "A", "B", "value", "max", "name", "data", "k", "_color", "name", "x", "index", "R", "t", "rotation", "obb", "x", "y", "ra", "matrix", "_v1", "_v2", "_plane", "_sphere", "a", "b", "c", "t2", "x", "y", "position", "v1", "g", "x", "y", "t", "t2", "k", "k2", "t3", "l", "c", "l2", "x2", "y2", "_v1", "n", "velocity", "b2", "va", "p", "x", "y", "renderer", "value", "renderer", "data", "l", "index", "name", "name", "key", "time", "index", "name", "k", "a", "b", "width", "height", "last", "renderer", "ob", "l", "position", "offset", "fromPoint", "toPoint", "x", "y", "size", "_color", "height", "random", "size", "matrix1", "matrix2", "count", "position", "value", "dataArray", "index", "x", "y", "data", "matrix", "index", "indexes", "name", "_cb", "_ab", "name", "t", "index", "a", "b", "c", "Triangle", "position", "k", "n", "v1", "va", "a", "b", "c", "v1", "c2", "map", "height", "scale", "renderer", "size", "l", "uniforms", "invAspect", "resolution", "lerp", "a", "b", "t", "q", "x", "y", "q2", "bits", "c", "err", "val", "size", "value", "index", "size2", "x2", "y2", "index2", "val2", "rotationMatrix", "q", "renderer", "yAxis", "val", "rotationMatrix", "renderer", "rotationMatrix", "visible", "position", "scale", "updateRefractorPlane", "q", "updateVirtualCamera", "renderer", "time", "rotationMatrix", "q", "renderer", "Water", "scale", "renderer", "frameRate", "world", "getShape", "position", "transform", "index", "time", "l", "x", "y", "x2", "y2", "_scale", "world", "_vector", "_quaternion", "_matrix", "position", "index", "velocity", "l", "renderer", "width", "height", "values", "sum", "x", "renderer", "width", "height", "BokehShader", "BokehShader", "renderer", "width", "height", "renderer", "renderer", "scale", "renderer", "renderer", "renderer", "renderer", "size", "index", "width", "height", "renderer", "renderer", "length", "val", "size", "data", "width", "height", "renderer", "size", "data", "x", "y", "width", "height", "key", "renderer", "camera", "width", "height", "renderer", "renderer", "renderer", "width", "height", "x", "y", "renderer", "x", "renderer", "width", "height", "width", "height", "renderer", "width", "height", "renderer", "width", "height", "renderer", "scale", "size", "data", "x", "y", "renderer", "width", "height", "val", "renderer", "width", "height", "renderer", "_JitterVectors", "map", "renderer", "width", "height", "renderer", "_vector", "_a", "_b", "width", "height", "l", "a", "b", "_position", "_quaternion", "_scale", "_matrix", "_matrix2", "width", "height", "value", "matrix", "l", "_face", "_line", "_vector3", "_vector4", "_viewMatrix", "_viewProjectionMatrix", "_frustum", "value", "position", "x", "y", "g", "b", "v1", "a", "c", "l", "t", "line", "SVGRenderer", "_v1", "_v2", "_v3", "_color", "_vector3", "_viewMatrix", "_viewProjectionMatrix", "width", "height", "c", "x", "y", "l", "position", "v1", "find", "width", "height", "x", "y", "l", "pa", "pe", "n", "l", "b", "t", "frames", "time", "name", "max", "value", "name", "position", "x", "y", "oct", "z", "length", "max", "size", "v1", "l", "gosper", "x", "y", "c", "_color", "_matrix", "index", "name", "k", "n", "l", "value", "position", "parent", "width", "height", "x", "y", "renderer", "scale", "name", "time", "clone", "a", "b", "data", "a", "b", "len", "p", "t", "size", "a", "b", "width", "height", "index", "face", "uvs", "renderer", "err", "position", "position", "height", "renderer", "err", "renderer", "err", "supported", "x", "y", "xAxis", "yAxis", "data", "value", "err", "renderer", "time", "_matrix", "_vector", "renderer", "matrix", "width", "height"] +>>>>>>> c2c7418 (Game) } diff --git a/site/real_game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js.map b/site/real_game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js.map deleted file mode 100644 index 9865211..0000000 --- a/site/real_game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": [], - "sourcesContent": [], - "mappings": "", - "names": [] -}